由於博主並不是科班出生,計算機方面的只是有所欠缺,所以寫幾篇博客記錄下我所學的知識,希望能對各位像我一樣非科班的同學有所幫助.如有錯誤的地方,望指正,謝謝各位大佬了!!!
計算機總線
總線的概述
- 總線的概述
- 提供對外連接接口
- 不同設備通過USB連接
- 使外圍設備接口統一
輸入輸出等設備只需要通過IO總線連接帶存儲器,運算器等設備上,無需一個一個連接.
- 總線的分類
- 片內總線(CPU內部的總線,是高集成度芯片內部的信息傳輸線)
- 系統總線
連接硬盤,IO設備,USB等設備的總線.
系統總線總線可分爲三類:
- 數據總線:一般與CPU位數相同,雙向傳輸數據信息,數據總線的位數是數據總線的總要參數.
- 地址總線: 源數據在內存中的地址,地址總線的位數與存儲單元有關,地址總線位數=n,尋址範圍0 ~ 2^n.
- 控制總線:是發出各種信號的傳輸線,由控制總線從一個組件發給另一個組件.可以監視各個組件的狀態.
總線的仲裁
如下圖,當硬盤和IO設備,都需要使用總線的時候,總線應該讓給硬盤還是讓給IO設備使用呢,這是後就需要總線的仲裁.總線的仲裁就是爲了解決總線使用權的衝突問題.
總線仲裁的方法:
-
鏈式查詢
當設備1和設備2同事需要總線的時候回發送信號給仲裁控制器,仲裁控制器回發送信號允許設備1先使用,然後才輪到設備2使用.
好處: 電路複雜度低,仲裁方式簡單
壞處:優先級低的設備難以獲得使用權.對電路故障敏感. -
計時器定時查詢
仲裁控制器對設備編號使用計數器累計計數,接收到信號後,往所有設備發出計數值,計數值與設備編號一致則獲得使用權.如下圖,若設備3請求總線使用權的時候,會發送信號給仲裁控制器,仲裁控制器會將計數器置爲3,會發送信號給所有的設備,當計數器值與設備編號一致的時候,將獲取使用權.
-
獨立請求
獨立請求每個設備均有總線獨立的仲裁器,設備可以單獨向仲裁器發送或接受請求,當同時收到信號,仲裁器有權按優先級分配使用權.
優點:響應快
缺點:線路複雜
計算機的輸入輸出設備
- 常見的輸入輸出設備
字符輸入設備:鍵盤,鼠標等
圖像輸出設備:顯示器,投影儀等 - 輸入輸出接口的通用設計
需求: 想設備發送數據?讀取數據?設備是否啓動成功?設備有沒有被佔用.
數據線: I/O設備與主機數據交換的線,風單向傳輸和雙向傳輸,
狀態線: I/O設備狀態向主報告的信號線,查詢設備是否練級正常,查詢設備是否被佔用.
命令線: CPU向設備發送命令的信號信號線,讀寫啓停信號等.
設備選擇線: 主機選擇I/O設備進行操作,對總線上的設備進行選擇. - CPU與IO設備通信(CPU速度與IO設備速度是不一致的)
- 程序中斷
當外圍I/O設備準備就緒的時候,向CPU發出中斷信號,CPU有專門的電路相應中斷信號.
如下圖,cpu值執行主程序,打印機出於待機狀態的,此時CPU發送了一個信號,啓動打印機的信號,啓動之後CPU繼續執行主程序,打印機接收到啓動信號之後就會進行準備的工作,準備完成之後打印機迴向CPU發出中斷信號,其後,CPU迴響應這個中斷信號,之後CPU會進行發送數據的操作,打印機也會同時接收數據,在某一時刻,CPU發送完成,會中斷返回,回到原來的主程序中,打印機開始打印數據.
提供低速設備通知CPU的一種異步方式,cpu也可以高速運轉時兼顧低速設備的響應.但是,如果頻繁的打斷CPU並不是一個很好的方法,這樣會減緩CPU的工作效率,所以出現了DMA方法. - DMA(直接存儲器訪問)
DMA不需要通過CPU訪問主存,可以之間訪問主存,這樣不需要打斷CPU,提高了效率.硬盤和顯卡中都有DMA的設備.
- 程序中斷
計算機存儲器的概述
-
存儲器的分類
按存儲介質分類,分爲:
半導體存儲器: 內存,U盤,固態硬盤等
磁存儲器: 磁帶,磁盤等
按存儲方式分類,分爲:
隨機存儲器:隨機讀取,與位置無關.
串行存儲器:與位置無關,按順序查找.
只讀存儲器(ROM):只讀不寫 -
存儲器的層次結構
按讀寫速度,存儲容量,價格等分不同的存儲器.
結構圖(存儲器的層次結構):
分緩存,主存,輔存.
CPU,高速緩存,主存三者之間都是可以相互通信,爲緩存-主存層次,主存與輔存之間是可以通信的,稱爲主存-輔存層次.
緩存-主存層次:
原理:局部性原理.
實現:在CPU與主存之間添加一層速度快的Cache.
目的:解決主存速度不足問題.
注:關於局部性原理,是指CPU訪問存儲器時,無論是存取還是讀取,所訪問的存儲單元都聚集在一個較小的區域中.
如圖所示,當程序經常訪問某片內存時,把這段內存置換到緩存.
主存-輔存層次
原理:局部性原理.
實現:主存之外增加輔助存儲器.
目的:解決主存容量不足問題.
計算機主存儲器與輔助存儲器
爲什麼計算機斷電,內存中的內容會丟失,磁盤中的內容不會丟失?
主存儲器-內存
- 隨機存儲器(RAM).
- RAM通過電容存儲數據,必須隔一段時間刷新一次.
- 如果掉電,那麼一段時間之後將丟失所有數據.
cpu通過數據總線讀寫數據,通過地址總線獲取數據地址.
32位系統: 最多隻支持4GB內存
因爲232 = 4 * 230 = 4G.
64位系統:可支持334 GB的內存
因爲264 = 234 * 230 = 234.
注: 230 = 1GB.
輔助存儲器-磁盤
- 表面是可磁化的硬磁特性材料.
- 移動刺頭徑向運動讀取信息.
磁盤所運用的算法:
- 先來先服務算法
- 最短詢道時間優先算法
- 掃描算法(電梯算法)
- 循環掃描算法
下面舉一個栗子解釋下各個算法怎麼讀取磁道的.
先來先服務算法: 按順序訪問進程的磁道讀寫需求.讀取的順序爲: 1 > 4 > 2 > 3 > 1 > 5;
最短詢道時間優先算法:與磁頭當前位置有關,優先訪問離磁頭最近的磁道.讀取順序爲:4 > 5 > 3 > 2 > 1 > 1
掃描算法(電梯算法):每次只往一個方向移動,到達一個方向需要服務的盡頭在反方向移動,是雙向的. 順序爲 4 > 3 > 2 > 1 > 1 > 5.但是存在這樣的問題:當磁頭剛從裏向外移動而超越了某一磁道時,恰好又有一進程請求訪問此磁道,這時該進程必須等待。將磁頭繼續從裏向外,然後再從外向裏掃描完處於外面的所有要訪問的磁道後,才處理該進程的請求,致使該請求的請求被大大的推遲。
循環掃描算法: 只往一個方向讀取, 現假設由內往外讀取,是單向移動, 順序爲4 > 5 > 1 > 1 > 2 > 3.
計算機存儲器的高速緩存
-
高速緩存的工作原理
字: 存放在一個存儲單元中二進制代碼組合.
字塊: 存儲在連續存儲單元中被看作一個單元的字組.包含多個字.
注:一個字有32位,一個字塊有B個字,主存共有M個字塊.主內存總字數=B * M;主內存總容量 = 32 * B * M;
字的地址包含兩個部分,前m位指定字塊的地址,後b位指定在字塊中的地址2m = M,2b = B,如下圖:
下面舉一個題目來算下m和b:
-
計算機的高速緩存
緩存和主存邏輯結構類似,緩存容量小,速度更快,緩存也有字和字塊的概念,一個字有32位,一個字塊有B個字,緩存共有C個字塊,字的地址包含兩個部分,前c位指定字塊的地址,後b位指定在字塊中的地址2c = C,2b = B;
高速緩存的工作原理:爲了讓CPU儘量從緩存中拿數據,這裏就不得不提一下命中率,命中率是衡量緩存的重要指標,理論上CPU每次都能從高速緩存中取數據的時候,命中率爲1;但實際上不可能每次都能訪問到緩存,所以不可能爲1.假設訪問主存次數Nm,訪問緩存次數Nc,那麼命中率爲h = Nc / (Nm + Nc);
訪問效率的計算方式:
下面做一個練習題計算命中率和訪問效率,平均訪問時間:
命中率:
訪問效率:
平均訪問時間:
-
高速緩存的替換策略
-
隨機算法
-
先進先出算法(FIFO)
把高速緩存看做一個先進先出的隊列,優先替換最先進入隊列的字塊.如圖:
現在如果一個編號爲9的字塊要進來,那麼就會淘汰掉編號爲1的字塊,讓編號的爲9的字塊進來.
-
最不經常使用算法(LFU)
此方式是優先淘汰最不;經常使用的字塊,但是需要額外的空間記錄自舉哀的使用頻率.如圖:
每次使用相對字塊的時候,相對應的評率就會加1,一旦有新的字塊要進來的時候,變會把使用評率最低的字塊淘汰掉.
-
最近最少使用算法(LRU)
優先淘汰一段時間內沒有使用的字塊,有多種實現方法,一般使用雙向鏈表.把當前訪問的節點置於鏈表前面,保證;鏈表頭部是最近使用的.淘汰的時候淘汰鏈表的尾部就可以了.如圖:
每次要添加新的字塊的時候,新的字塊將會添加到字塊的頭部,尾部多餘的字塊將會被淘汰.
計算機的指令系統
-
機器指令的形式
主要有:操作碼和地址碼.
操作碼:明確指令要完成的操作,反應機器操作的種類.比如操作碼有8位,那它就有28=256種操作.地址碼:給出的是操作數的地址,分三地址指令/二地址指令/一地址指令.
三地址指令:(c奧做1地址和2地址放到3地址中)
二地址指令:(操作1地址和2地址放到1地址或者2地址中)
一地址指令:可以是自己對自己的操作,也可以ACC(自增)
零地址指令:
在機器指令中無地址碼,一般是執行空操作,停機操作,中斷返回操作.
-
機器指令的操作類型
機器指令的操作類型有操作數之間的加減乘除運算,操作數之間的非等邏輯位運算,移位操作,以及控制指令,包括等待指令/停機指令,空操作指令,中斷指令等. -
機器指令的尋址方式
- 指令尋址
順序尋址是從101 => 102 => 103 => 104 => 105,然後105執行JMP 102指令,又調到102,此爲跳躍尋址.
- 數據尋址
立即尋址:
直接尋址:
間接尋址:
三種尋址方式優缺點:
計算機的控制器(x協調控制計算機運行的)
控制器的組成:
- 程序控制器
用來存儲下一條指令地址,循環從程序計數器中拿出指令,當指令被拿出,指向下一條指令. - 時序發生器
電氣工程領域的,用於發送時序脈衝,cpu依據不同的時序脈衝由節奏的進行工作. - 指令譯碼器
由操作碼和地址碼組成.用於翻譯操作碼對應的操作以及控制傳輸地址碼對應的數據. - 指令寄存器
從主存或高速緩存存取計算機指令. - 主存地址寄存器
保存當前CPU要訪問的內存單元的地址. - 主存數據寄存器
保存當前CPU正要讀寫的主存數據 - 通用寄存器
用於暫時存放或傳送數據或指令,保存ALU的運算中間結果.容量比一般寄存器大.
計算機的運算器
- 數據緩衝器
分爲輸入緩衝和輸出緩衝,輸入緩衝暫時存放外設送來的數據,輸出緩衝暫時存放送往外設的數據. - ALU
是算術邏輯單元,主要完成常見的位運算,以及算術運算.
如下圖即ALU的圖解,A和B爲輸入,F爲輸出,K爲各種運算線路. - 狀態寄存器
可以存放運算狀態(溢出,結果正負等),存放運算控制信息(調試跟蹤標記位,允許中斷等). - 通用寄存器
用於暫時存放或傳送數據或指令,保存ALU的中間結果,容量比一般寄存器大.
計算機指令的執行過程
-
指令的執行過程
執行時序圖:
-
指令執行的問題
運算器和控制器不能同時工作.(CPU的綜合利用率不高).
CPU的流水線設計:
CPU流水線設計是串行執行效率的3倍,公式如下: