計(jì)算機(jī)組成原理
概述篇
計(jì)算機(jī)發(fā)展的四個(gè)階段
-
電子管計(jì)算機(jī)
2.png
- 集成度小减宣,空間占用大
- 功耗高芜赌,運(yùn)行速度慢
- 操作復(fù)雜屯耸,更換程序需要接線
- 晶體管計(jì)算機(jī)
貝爾實(shí)驗(yàn)室科學(xué)家發(fā)現(xiàn)晶體管
- 集成度相對(duì)較高颜屠,空間占用相對(duì)小
- 功耗相對(duì)低统舀,運(yùn)行速度較快
- 操作相對(duì)簡單,交互更加方便
- 集成電路(IC)計(jì)算機(jī)
計(jì)算機(jī)具備了進(jìn)入千家萬戶的條件
該階段出現(xiàn)操作系統(tǒng)的雛形,IBM推出的System/360
- 超大規(guī)模集成電路計(jì)算機(jī)
- 一個(gè)芯片集成了上百萬的晶體管
- 速度更快,體積更小帮孔,價(jià)格更低
- 用途豐富:文本處理,表格處理不撑,高交互游戲
微型計(jì)算機(jī)的發(fā)展歷史
微型計(jì)算機(jī)從第三階段開始
計(jì)算機(jī)的分類
- 超級(jí)計(jì)算機(jī)
- 功能最強(qiáng)文兢,運(yùn)算速度最快,存儲(chǔ)容量最大的計(jì)算機(jī)
- 多用于國家高科技領(lǐng)域和尖端技術(shù)研究
- 單位是TFlop/s(每秒一萬億次浮點(diǎn)運(yùn)算)
- 大型計(jì)算機(jī)
- 具有高性能焕檬,可處理大量數(shù)據(jù)與復(fù)雜的運(yùn)算
- 在大型機(jī)市場領(lǐng)域禽作,IBM占據(jù)著很大的份額
- COBOL編程語言(大型機(jī)中的編程語言,但不是絕對(duì))
- 迷你計(jì)算機(jī)
- 也稱小型機(jī)揩页,普通服務(wù)器
- 不需要特殊的空調(diào)場所
- 具備不錯(cuò)的算力,可以完成較復(fù)雜的運(yùn)算
- 工作站
- 高端的通用型微型計(jì)算機(jī)烹俗,提供比個(gè)人計(jì)算機(jī)更強(qiáng)大的性能
- 類似于普通臺(tái)式電腦爆侣,體積較大,但性能強(qiáng)勁
- 個(gè)人計(jì)算機(jī)/微機(jī)/微型計(jì)算機(jī)
- 本質(zhì)上講幢妄,個(gè)人計(jì)算機(jī)與前面的分類無異
馮諾依曼體系
將程序指令和數(shù)據(jù)一起存儲(chǔ)的計(jì)算機(jī)設(shè)計(jì)概念結(jié)構(gòu)
- 必須有一個(gè)存儲(chǔ)器
- 必須有一個(gè)控制器
- 必須有一個(gè)運(yùn)算器
- 必須有輸入設(shè)備
- 必須有輸出設(shè)備
現(xiàn)代計(jì)算機(jī)都是馮諾依曼機(jī)
- 特點(diǎn)
- 能夠把需要的程序和數(shù)據(jù)送至計(jì)算機(jī)中
- 能夠長期記憶程序兔仰,數(shù)據(jù),中間結(jié)果以及最終運(yùn)算結(jié)果的能力
- 能偶具備算術(shù)蕉鸳,邏輯運(yùn)算和數(shù)據(jù)傳送等數(shù)據(jù)加工處理的能力
- 能夠按照要求將處理結(jié)果輸出給用戶
- 馮諾依曼瓶頸
如圖九可知乎赴,CPU和存儲(chǔ)器是分開的,這樣會(huì)導(dǎo)致一些問題潮尝;例如:馮諾依曼瓶頸榕吼,
CPU和存儲(chǔ)器速率之間的問題無法調(diào)和,cpu經(jīng)趁闶В空轉(zhuǎn)等待數(shù)據(jù)傳輸
現(xiàn)代計(jì)算機(jī)的結(jié)構(gòu)
現(xiàn)代計(jì)算機(jī)的結(jié)構(gòu)以存儲(chǔ)器為核心的結(jié)構(gòu)
- 現(xiàn)代計(jì)算機(jī)在馮諾依曼體系結(jié)構(gòu)基礎(chǔ)上進(jìn)行修改
- 主要為了解決CPU與存儲(chǔ)設(shè)備之間的性能差異問題
存儲(chǔ)器廣義上說羹蚣,包含磁帶,硬盤等能存儲(chǔ)信息的設(shè)備乱凿,但是此次只針對(duì)圍繞CPU的更高速的設(shè)備(CPU寄存器顽素,內(nèi)存等)
程序翻譯與解釋
- 程序翻譯
例如:C/C++ OC
- 程序解釋
例如:js php python
- 計(jì)算機(jī)執(zhí)行的指令都是L0
- 翻譯過程生成新的L0程序,解釋過程不生成新的L0程序
- 解釋過程由L0編寫的解釋器去解釋L1程序
- 翻譯加解析
例如:java和C#
計(jì)算機(jī)的層次與編程語言
- 實(shí)際機(jī)器
- 硬件邏輯層
- 門徒蟆,觸發(fā)器等邏輯電路組成
- 屬于電子工程的領(lǐng)域
- 微程序機(jī)器層
- 編程語言是微指令集
- 微指令所組成的微程序直接交由硬件執(zhí)行
- 傳統(tǒng)機(jī)器層
- 編程語言是CPU指令集(機(jī)器指令)
- 編程語言和硬件直接相關(guān)
- 不同架構(gòu)的CPU使用不同的CPU指令集
一條機(jī)器指令對(duì)應(yīng)一個(gè)微程序
一個(gè)微程序?qū)?yīng)一組微指令
- 硬件邏輯層
- 虛擬機(jī)器
- 系統(tǒng)軟件
- 操作系統(tǒng)層
- 向上提供了簡易的操作界面
- 向下對(duì)接了指令系統(tǒng)胁出,管理硬件資源
- 操作系統(tǒng)是位于軟件和硬件之間的適配系統(tǒng)
- 匯編語言層
- 編程語言是匯編語言
- 匯編語言可以翻譯成可直接執(zhí)行的機(jī)器語言
- 完成翻譯的過程的程序就是
匯編器
- 高級(jí)語言層
- 顧名思義,java段审,python全蝶,c等
- 操作系統(tǒng)層
- 應(yīng)用軟件
- 應(yīng)用層
- word,qq等
- 應(yīng)用層
- 系統(tǒng)軟件
計(jì)算機(jī)的單位
-
容量單位
14.png
- 速度單位
- 網(wǎng)絡(luò)速度
- 100M/S=100Mbps=100Mbit/s
- 100Mbit/s=(100/8)MB/s=12.5MB/s
- 存在字節(jié)到比特位的轉(zhuǎn)換關(guān)系
- CPU頻率
- CPU的速度一般體現(xiàn)為CPU的時(shí)鐘頻率
- CPU的時(shí)鐘頻率的單位一般是赫茲(Hz)
-
Hz其實(shí)就是秒分之一(每秒鐘的周期性變動(dòng)重復(fù)次數(shù)的計(jì)量)
15.png
- 網(wǎng)絡(luò)速度
編碼補(bǔ)充
- Unicode:統(tǒng)一碼,萬國碼,單一碼
- Unicode定義了世界通用的符號(hào)集裸诽,UTF-*實(shí)現(xiàn)了編碼
- UTF-8以字節(jié)為單位對(duì)Unicode進(jìn)行編碼
- Unicode兼容全球
組成篇
計(jì)算機(jī)的總線和IO設(shè)備
總線
解決不同設(shè)備之間的通信問題
- 總線概述
- 提供了對(duì)外連接的接口
- 不同設(shè)備可以通過USB(通用串行總線)接口進(jìn)行連接
- 連接的標(biāo)準(zhǔn)嫂用,促使外圍設(shè)別接口的統(tǒng)一
- 常見總線
- USB
- PCI總線
- ISA總線
- Thunderbolt總線
- 總線分類
- 片內(nèi)總線
- 芯片內(nèi)部總線
- 寄存器與寄存器之間
- 寄存器與控制器、運(yùn)算器丈冬、高速緩存嘱函、中斷系統(tǒng)之間
- 高集成度芯片內(nèi)部的信息傳輸線
- 系統(tǒng)總線(
CPU、主內(nèi)存埂蕊、IO設(shè)備往弓、各組件之間的信息傳輸線
)- 數(shù)據(jù)總線(
一般與CPU位數(shù)相同,32/64位
)- 雙向傳輸各個(gè)部件的數(shù)據(jù)信息
- 數(shù)據(jù)總線的位數(shù)(總線寬度)是數(shù)據(jù)總線的重要參數(shù)
- 32位代表一次可以傳輸32位4個(gè)字節(jié)的數(shù)據(jù)蓄氧,64同理
- 地址總線(
地址總線位數(shù)=n,尋址范圍:0-2的n次方
)- 指定源數(shù)據(jù)或目的數(shù)據(jù)在內(nèi)存中的地址(尋址)
- 地址總線的位數(shù)與存儲(chǔ)單元有關(guān)
- 控制總線
- 控制總線是用來發(fā)出各種控制信號(hào)的傳輸線
- 控制信號(hào)經(jīng)由控制總線從一個(gè)組件發(fā)給另外一個(gè)組件
- 控制總線可以監(jiān)視不同組件之間的狀態(tài)(就緒/未就緒)
- 數(shù)據(jù)總線(
- 片內(nèi)總線
總線的仲裁
為了解決總線使用權(quán)的沖突問題
函似,例如CPU硬盤都準(zhǔn)備好了,但是分別使用哪些總線
-
仲裁方式
- 鏈?zhǔn)讲樵?
- 好處:電路復(fù)雜度低喉童,仲裁方式簡單
- 壞處:優(yōu)先級(jí)低的設(shè)備難以獲得總線使用權(quán)(都申請(qǐng)的時(shí)候)
- 壞處:對(duì)電路故障敏感
18.png - 鏈?zhǔn)讲樵?
-
計(jì)時(shí)器定時(shí)查詢
- 仲裁控制器對(duì)設(shè)備編號(hào)并使用計(jì)數(shù)器累計(jì)計(jì)數(shù)
- 接收到仲裁信號(hào)后撇寞,往所有設(shè)備發(fā)出計(jì)數(shù)值(累加過后的)
-
計(jì)數(shù)值與設(shè)備編號(hào)一致則獲得總線使用權(quán)
19.png
-
獨(dú)立請(qǐng)求
- 每個(gè)設(shè)備均有總線獨(dú)立連接仲裁器
- 設(shè)備科單獨(dú)向仲裁器發(fā)送請(qǐng)求和接收請(qǐng)求
- 當(dāng)同時(shí)受到多個(gè)請(qǐng)求信號(hào),仲裁器有權(quán)按優(yōu)先級(jí)分配使用權(quán)
- 前面兩種都是共用總線連接仲裁器
- 好處:響應(yīng)速度快堂氯,優(yōu)先順序可動(dòng)態(tài)改變
-
設(shè)備連接線蔑担,總線控制復(fù)雜
20.png
IO設(shè)備
-
常見的輸入輸出設(shè)備
- 字符輸入設(shè)備
- 鍵盤
- 圖形輸入設(shè)備
- 鼠標(biāo)
- 數(shù)位板
- 掃描儀
- 圖像輸出設(shè)備
- 顯示器
- 打印機(jī)
- 投影儀
- 字符輸入設(shè)備
-
輸入輸出接口的通用設(shè)計(jì)
- 數(shù)據(jù)線
- IO設(shè)備與主機(jī)之間進(jìn)行數(shù)據(jù)交換的傳送線
- 單向傳輸數(shù)據(jù)線
- 雙向傳輸數(shù)據(jù)線
- 狀態(tài)線
- IO設(shè)備狀態(tài)向主機(jī)報(bào)告的信號(hào)線
- 查詢設(shè)備是否已經(jīng)正常連接并就緒
- 查詢設(shè)備是否已經(jīng)被占用
- 命令線
- CPU向設(shè)備發(fā)送命令的信號(hào)線
- 發(fā)送讀寫信號(hào)
- 發(fā)送啟動(dòng)停止信號(hào)
- 設(shè)備選擇線
- 主機(jī)選擇IO設(shè)備進(jìn)行操作的信號(hào)線
- 對(duì)連接在總線上的設(shè)備進(jìn)行選擇(例如多U盤判斷)
- 數(shù)據(jù)線
-
CPU與IO設(shè)備的通信(
CPU速度和IO設(shè)備速度不一致
)-
程序中斷
- 當(dāng)外圍IO設(shè)備就緒時(shí),向CPU發(fā)出中斷信號(hào)
- CPU有專門的電路相應(yīng)中斷信號(hào)咽白,完成IO操作之后繼續(xù)進(jìn)行之前工作
- 提供低速設(shè)備通知CPU的一種異步的方式
-
CPU可以高速運(yùn)轉(zhuǎn)同時(shí)兼顧低速設(shè)備的響應(yīng)
21.png
-
DMA(直接存儲(chǔ)器訪問)
- DMA直接連接主存與IO設(shè)備
- DMA工作時(shí)不需要CPU的參與
-
一般硬盤和顯卡中都有DMA設(shè)備
22.png
-
計(jì)算機(jī)的存儲(chǔ)器
在CPU與主存之間增加一層速度快容量小的Cache,解決主存速度不足的問題
存儲(chǔ)器的分類
- 按照存儲(chǔ)介質(zhì)分類
- 半導(dǎo)體存儲(chǔ)器
- 內(nèi)存
- U盤
- 固態(tài)硬盤
- 磁存儲(chǔ)器
- 磁帶
- 磁盤
- 半導(dǎo)體存儲(chǔ)器
- 按照存取方式分類
- 隨機(jī)存儲(chǔ)器(RAM)
- 隨機(jī)讀取
- 與位置無關(guān)
- 串行存儲(chǔ)器
- 與位置有關(guān)
- 按順序查找
- 只讀存儲(chǔ)器(ROM)
- BIOS
- 只讀不寫(或者很少更改)
- 隨機(jī)存儲(chǔ)器(RAM)
-
存儲(chǔ)器的層次結(jié)構(gòu)
23.png緩存:CPU內(nèi)部寄存器和高速緩存
-
主存(RAM):一般指內(nèi)存
- RAM通過電容存儲(chǔ)數(shù)據(jù)啤握,必須每隔一段時(shí)間刷新一次
- 如果掉電,那么一段時(shí)間后將丟失所有數(shù)據(jù)
-
和系統(tǒng)有關(guān)晶框,32位系統(tǒng)中地址總線尋址范圍(2的32次方)大約4GB
25.png
-
輔存:硬盤等
- 表面是可詞話的硬磁特性材料
-
移動(dòng)磁頭徑向運(yùn)動(dòng)讀取磁道信息
26.png
- 輔存算法
- 先來先服務(wù)算法
- 會(huì)從1磁道到4磁道再到2....
- 最短尋道時(shí)間優(yōu)先算法
- 與磁頭當(dāng)前位置有關(guān)系
- 優(yōu)先訪問離磁頭最近的磁道
- 4排抬,5/3因?yàn)橄噜?此處加入當(dāng)作5,3,2,1,1
- 掃描算法(電梯算法)
- 每次只往一個(gè)方向運(yùn)動(dòng)
- 到達(dá)一個(gè)方向需要服務(wù)的盡頭再反方向移動(dòng)
- 4,5授段,3蹲蒲,2,1/或者初始反向
- 循環(huán)掃描算法
- 4,5,1,1,2,3
- 可知侵贵,假如由外向內(nèi)到5之后悠鞍,或直接回到1,在重新來模燥,相對(duì)更公平咖祭,某種程度上說只有單向移動(dòng)
- 先來先服務(wù)算法
- 局部性原理
局部性原理是指CPU訪問存儲(chǔ)器時(shí),無論是存取指令還是存取數(shù)據(jù)蔫骂,所訪問的存儲(chǔ)單元都趨于聚集在一個(gè)較小的連續(xù)區(qū)域中么翰,這是層級(jí)結(jié)構(gòu)劃分的依據(jù)。例如:程序經(jīng)常訪問的內(nèi)存辽旋,只需要把這段內(nèi)存置換至緩存即可浩嫌。
- 高速緩存
- 高速緩存的工作原理
- 字
- 是指存在放一個(gè)存儲(chǔ)單元中的二進(jìn)制代碼組合
- 字的地址包含兩個(gè)部分
- 前M位指定字塊的地址
- 后b位指定字在字塊中的地址
- 字塊
- 存儲(chǔ)在連續(xù)的存儲(chǔ)單元中而被看作是一個(gè)單元的一組字
-
字和字塊在主存和緩存都適用檐迟,只是容量大小的區(qū)分
1.png
- 字
- 高速緩存的工作原理
(
如圖只是假設(shè)的位數(shù)說明,理解即可
)
- 命中率是衡量緩存的重要性能指標(biāo)
- 理論上CPU每次都能從高速緩存取數(shù)據(jù)的時(shí)候码耐,命中率為1
- 高速緩存的替換策略(`主存和高速緩存的替換`)
- 隨機(jī)算法
- 先進(jìn)先出算法(FIFO)
- 把高速緩存看作是一個(gè)先進(jìn)先出的隊(duì)列
- 優(yōu)先替換最先進(jìn)入隊(duì)列的字塊
- 最不經(jīng)常使用算法(LFU)
- 優(yōu)先淘汰最不經(jīng)常使用的字塊
- 需要額外的空間記錄字塊的使用頻率
- 最近最少使用算法(LRU)
- 優(yōu)先淘汰一段時(shí)間內(nèi)沒有使用的字塊
- 有多種實(shí)現(xiàn)方法追迟,一般使用雙向鏈表
- 把當(dāng)前訪問節(jié)點(diǎn)置于鏈表前面(保證鏈表頭部節(jié)點(diǎn)是最近使用的)
計(jì)算機(jī)的指令系統(tǒng)
- 機(jī)器指令主要由兩部分組成:操作碼、地址碼
- 操作碼指明所要完成的操作
- 操作碼的位數(shù)反映了機(jī)器的操作種類
- 地址碼直接給出操作數(shù)或者操作數(shù)的地址
-
分三地址指令骚腥,二地址指令和一地址指令
1.png
機(jī)器指令的操作類型
- 寄存器之間敦间,寄存器與存儲(chǔ)單元,存儲(chǔ)單元之間傳送
- 數(shù)據(jù)讀寫束铭,交換地址數(shù)據(jù)廓块,清零置一等操作
- 操作數(shù)之間的加減乘除運(yùn)算
- 操作數(shù)的與或非等邏輯運(yùn)算
- 數(shù)據(jù)左移,右移
- 完成數(shù)據(jù)在算術(shù)邏輯單元的必要操作
- 等待指令契沫,停機(jī)指令带猴,空操作指令,中斷指令
機(jī)器指令的尋址方式
-
指令尋址
- 順序?qū)ぶ?/li>
-
跳躍尋址
5.png
例如105指令就是跳躍到102執(zhí)行懈万,其實(shí)就是跳躍尋址
-
數(shù)據(jù)尋址
- 立即尋址
- 速度快
- 地址碼位數(shù)限制操作數(shù)表示范圍
- 直接尋址
- 尋找操作數(shù)簡單
- 地址碼位數(shù)限制操作數(shù)表示范圍
- 間接尋址
- 操作數(shù)尋址范圍大
-
速度較慢
6.png
- 立即尋址
計(jì)算機(jī)CPU
計(jì)算機(jī)的控制器
程序計(jì)數(shù)器
- 程序計(jì)數(shù)器用來存儲(chǔ)下一條指令的地址
- 循環(huán)從程序計(jì)數(shù)器中拿出指令
- 當(dāng)指令被拿出時(shí)拴清,指向下一條指令
時(shí)序發(fā)生器
- 電氣工程領(lǐng)域,用于發(fā)送時(shí)序脈沖
- CPU依據(jù)不同的時(shí)序脈沖有節(jié)奏的進(jìn)行工作
指令譯碼器
- 指令譯碼器是控制器的主要部件之一
- 計(jì)算機(jī)指令由操作碼和地址碼組成
- 翻譯操作碼對(duì)應(yīng)的操作以及控制傳輸?shù)刂反a對(duì)應(yīng)的數(shù)據(jù)
指令寄存器
- 指令寄存器也是控制器的主要部件之一
- 從主存或高速緩存取計(jì)算機(jī)指令
主存地址寄存器
- 保存當(dāng)前CPU正要訪問的內(nèi)存單元的地址
主存數(shù)據(jù)寄存器
- 保存當(dāng)前CPU正要讀或?qū)懙闹鞔鏀?shù)據(jù)
通用寄存器
- 用于暫時(shí)存放或傳送數(shù)據(jù)或指令
- 可保存ALU的運(yùn)算中間結(jié)果
- 容量比一般專用寄存器要大
計(jì)算器的運(yùn)算器
數(shù)據(jù)緩沖器
- 分為輸入緩沖和輸出緩沖
- 輸入緩沖暫時(shí)存放外設(shè)送過來的數(shù)據(jù)
- 輸出緩沖暫時(shí)存放送往外設(shè)的數(shù)據(jù)
ALU
- ALU:算術(shù)邏輯單元会通,是運(yùn)算器的主要組成
- 常見的位運(yùn)算
- 算術(shù)運(yùn)算
狀態(tài)字寄存器
- 存放運(yùn)算狀態(tài)(條件碼口予、進(jìn)位、溢出渴语、結(jié)果正負(fù)等)
- 存放運(yùn)算控制信息(調(diào)試跟蹤標(biāo)記位,允許中斷位等)
通用寄存器
- 用于暫時(shí)存放或傳送數(shù)據(jù)或指令
- 可保存ALU的運(yùn)算中間結(jié)果
- 容量比一般專用寄存器要大
指令執(zhí)行過程
graph LR
取指令-->分析指令
分析指令--> 執(zhí)行指令
如上圖可知昆咽,指令是順序執(zhí)行驾凶,控制器和計(jì)算器不能同時(shí)工作,CPU利用率低下掷酗,解決方案如下圖 CPU的流水線設(shè)計(jì)
效率大概可以提升三倍
進(jìn)制和浮點(diǎn)數(shù)
如上圖可知调违,之所以產(chǎn)生補(bǔ)碼是因?yàn)?表示有歧義,例如正0負(fù)0泻轰;還有減法運(yùn)算復(fù)雜技肩;而反碼產(chǎn)生的原因是因?yàn)檠a(bǔ)碼中計(jì)算也有減法;可以直接原碼按位取反得到反碼浮声,然后+1得到補(bǔ)碼虚婿,計(jì)算機(jī)存儲(chǔ)的都是補(bǔ)碼。