計(jì)算機(jī)系統(tǒng)由硬件和系統(tǒng)軟件組成
系統(tǒng)是硬件和軟件相互交織的集合體
理解編譯過程的目的
- 優(yōu)化程序性能
- 理解鏈接時(shí)出現(xiàn)的錯(cuò)誤
- 避免安全漏洞
系統(tǒng)的硬件組成
總線:
貫穿系統(tǒng)的電子管道脱羡,攜帶信息字節(jié)并在各個(gè)部件間傳遞萄焦。
傳送定長(zhǎng)的字節(jié)塊——字(Word).
字節(jié)長(zhǎng)是一個(gè)基本的系統(tǒng)參數(shù)。如4個(gè)字節(jié)避乏,8個(gè)字節(jié)
I/O 設(shè)備
輸入/輸出設(shè)備是系統(tǒng)與外部世界的聯(lián)系通道抒巢。
每個(gè)I/O設(shè)備通過一個(gè)控制器或適配器與I/O總線相連事格。
控制器—>主板芯片組
適配器->主板插槽上的卡
主存
臨時(shí)存儲(chǔ)設(shè)備同窘,用來存放程序和程序處理的數(shù)據(jù)
物理:DRAM
邏輯:線性字節(jié)數(shù)組
處理器 CPU
執(zhí)行主存指令的引擎
不斷執(zhí)行指令
高速緩存
減少主存與CPU的直接數(shù)據(jù)訪問
高速緩存用來存放近期可能會(huì)需要的信息
物理:SRAM
存儲(chǔ)器層次結(jié)構(gòu)
存儲(chǔ)器 |
---|
寄存器 |
L1 |
L2 |
L3 |
DRAM |
SSD |
HDD |
從上倒下訪問速度越來越慢
OS管理硬件
操作系統(tǒng)
OS: 應(yīng)用程序與硬件之間的中間層
- 防止硬件被應(yīng)用程序?yàn)E用
- 提供API來控制復(fù)雜的低級(jí)硬件設(shè)備
- 通過進(jìn)程旬痹、虛擬存儲(chǔ)器附井、文件來實(shí)現(xiàn)應(yīng)用程序與硬件之間的交互
進(jìn)程
對(duì)正在運(yùn)行的程序的一種抽象。
CPU一個(gè)核只能執(zhí)行一個(gè)進(jìn)程两残,當(dāng)新的進(jìn)程需要執(zhí)行時(shí)永毅,會(huì)進(jìn)行上下文切換。
上下文: 操作系統(tǒng)保持跟蹤進(jìn)程運(yùn)行情況所需的所有狀態(tài)信息
線程
每個(gè)線程運(yùn)行在進(jìn)程的上下文中人弓,共享同樣的代碼和全局?jǐn)?shù)據(jù)沼死。
多用于網(wǎng)絡(luò)服務(wù)器并發(fā)處理請(qǐng)求。
虛擬存儲(chǔ)器
給每個(gè)進(jìn)程提供一層獨(dú)占主存的抽象崔赌。
虛擬地址空間 | |
---|---|
內(nèi)存虛擬內(nèi)核存儲(chǔ)器 | OS內(nèi)核 |
棧 | 在運(yùn)行時(shí)動(dòng)態(tài)的擴(kuò)展大小 |
共享庫(kù) | 共享代碼庫(kù) |
堆 | 在運(yùn)行時(shí)動(dòng)態(tài)的擴(kuò)展大小 |
程序代碼和數(shù)據(jù) | 可執(zhí)行文件 |
文件
字節(jié)序列
I/O設(shè)備都可以認(rèn)為是文件意蛀。
網(wǎng)信也可以視為文件
并發(fā)和并行
Concurrency 并發(fā)
- 計(jì)算機(jī)做的更多
- 同時(shí)具有多個(gè)活動(dòng)的系統(tǒng)
超線程,同時(shí)多線程,允許一個(gè)CPU執(zhí)行多個(gè)控制流的技術(shù)健芭,簡(jiǎn)單的說就是當(dāng)A線程取數(shù)據(jù)的時(shí)候县钥,B線程立馬執(zhí)行,在單個(gè)周期上進(jìn)行判斷應(yīng)該執(zhí)行那個(gè)線程慈迈,如果沒有超線程技術(shù)若贮,則需要在多個(gè)時(shí)鐘周期內(nèi)切換
Parallelism 并行
- 計(jì)算機(jī)做的更快
- 用并發(fā)時(shí)系統(tǒng)運(yùn)行的更快
- 可以在系統(tǒng)的多個(gè)層次上使用
- 指令級(jí)并行
- 單指令多數(shù)據(jù)并行
抽象
抽象時(shí)計(jì)算機(jī)領(lǐng)域的重要概念
文件對(duì)I/O抽象
虛擬存儲(chǔ)器對(duì)程序存儲(chǔ)器抽象
進(jìn)程對(duì)運(yùn)行的程序抽象
虛擬機(jī)對(duì)計(jì)算機(jī)的抽象
Hello World程序運(yùn)行的過程
源文件通過編譯系統(tǒng)經(jīng)過如下步驟生成源程序
文本->預(yù)處理->編譯->匯編-> 連接->源程序
.c -> .i -> .s -> o -> binary
通過Shell運(yùn)行,程序加載到主存痒留,從main開始執(zhí)行谴麦,通過指令Hello World執(zhí)行如下步驟顯示到屏幕上
主存->寄存器->顯示設(shè)備
源程序: 由0和1組成的位(bit)序列,8個(gè)位被組織成一組伸头,為1個(gè)字節(jié)匾效,每個(gè)字節(jié)表示程序中某個(gè)文本字符。
區(qū)分不同數(shù)據(jù)對(duì)象的唯一方法是根據(jù)這些數(shù)據(jù)對(duì)象的上下文
Shell: 命令行解釋器
Compilation System