(*长期更新)软考网络工程师学习笔记——Section 18 计算机硬件基本知识
文章目錄
- 一、計算機的概念
- (一)計算機的基本組成
- (二)五大部件的功能
- (三)計算機硬件的主要技術指標
- 二、CPU(中央處理器)
- (一)CPU 的基本概念
- (二)CPU 指令集
- (三)CPU的主要性能指標
- 三、指令系統和指令流水
- (一)指令的組成
- (二)CPU指令的執行過程
- (三)指令周期
- 1、指令周期的關系
- 2、指令周期的組成
- (四)指令流水
- 四、存儲器
- (一)存儲器分類
- (二)高速緩存中的命中率
- (三)內存地址編址
- (四)虛擬內存
- 五、計算機的運算方法
- (一)無符號數和有符號數
- (二)數的定點和浮點表示
- (三)原碼、補碼、反碼與移碼
- (四)移位運算
- 六、系統總線
- (一)總線的概念
- (二)總線的分類
- 七、中斷
- (一)中斷、中斷向量、中斷源
- (二)中斷系統的分類
- (三)中斷服務程序
- (四)DMA方式
一、計算機的概念
(一)計算機的基本組成
- 計算機由硬件系統和軟件系統兩個部分組成,從硬件系統來看,主要由運算器、存儲器、控制器、輸入設備和輸出設備五個部分組成,如下:
- 但現代計算機可簡化將五大部件認為由三部分組成,即CPU(中央處理器,運算器+控制器)、主存儲器和I/O設備(Input /Output),其中CPU和主存儲器可以稱為主機,I/O設備可以稱為外部設備。
(二)五大部件的功能
機器以運算器為中心,輸入輸出設備與存儲器間的數據傳送通過運算器完成。
1、運算器
- 運算器由ALU、累加器、通用寄存器和數據暫存器等組成,它用于完成算術運算和邏輯運算,并將運算的結果暫存在運算器中(通用寄存器用于存放操作數、中間結果以及各地址信息等,常見的通用寄存器有數據寄存器、地址指針寄存器、累加寄存器等等)。
算術邏輯單元(ALU):是用于完成算術運算和邏輯運算的邏輯電路,它是CPU的執行單元,即CPU的核心組成部分,由And(與門) 和Or(或門)構成,其基本功能為加、減、乘、除四則運算,與、或、非、異或等邏輯操作,以及移位、求補等操作。
2、存儲器
- 存儲器是計算機系統中的存儲設備,用于存放程序和數據,它根據控制器指定位置進行存入和存出操作。
3、控制器
- 控制器,是計算機系統的控制中心,用于控制程序和數據的輸入、運行以及處理運算結果,它由程序計數器PC、指令寄存器IR、地址寄存器AR、數據寄存器DR和指令譯碼器等部分組成,控制器從存儲器中逐條取出指令,經過分析后向目標位置部件發送控制信號,從而使計算機完成指令。
| 程序計數器PC | 指出下條指令在主存中的存放地址,從而CPU取得指令 |
| 指令寄存器IR | 寄存,即保存當前正在執行的這條指令的代碼 |
| 地址寄存器AR | 存放CPU當前訪問的內存單元地址 |
| 數據寄存器DR | 暫存從內存儲器中讀出或寫入的指令或數據 |
| 指令譯碼器 | 譯碼,對獲取的指令進行譯碼,并產生信號使計算機各部件完成指令 |
4、輸入設備和輸出設備
- 輸入設備和輸出設備合并稱為I/O設備,輸入設備將人們熟悉的信息形式轉換為機器能識別的信息形式,而輸出設備相反,例如鍵盤、鼠標等是輸入設備;打印機、顯示器等是輸出設備。
(三)計算機硬件的主要技術指標
1、機器字長
CPU進行一次運算所能處理的二進制數據位數稱為機器字長,以單位bit(位,也稱為比特)來衡量,位是數據存儲的最小單位【1字節=8位(1byte=8bit)】,由于是二進制代碼,即1和0,其中每一個1或0就是一位(bit)。
它通常與CPU的寄存器位數有關,機器字長越長,數的表示范圍越大且精度也越高,目前大多數常用計算機處理器都為64位,即64位的計算機,其CPU一次可以處理的二進制數據位數為64位。
2、存儲容量
存儲容量包括主存容量和輔存容量,主存容量是指主存中存放的二進制代碼的總位數,它等于存儲單元個數×存儲字長,主存中有兩個寄存器,分別為存儲器地址寄存器(MAR)和存儲器數據寄存器(MDR),其中MAR存放將訪問的存儲單元地址,其位數代表存儲單元的個數;MDR存放從存儲體中取出的代碼或將向某存儲單元存入的代碼,其位數代表存儲字長。輔存通常以字節數表示。
例如,MAR為16位,MDR為32位,則存儲單元個數為216=65536,即64K個存儲字(1K=1024=210),存儲字長為32,所以存儲容量為216×32=221=2M(1M=1024K=220)位,也等于218byte(1byte(字節)=8bit(位))。
3、運算速度
常用單位時間內執行指令的平均條數來衡量計算機的運算速度,單位為百萬條指令每秒(MIPS),另外還有CPI或FLOPS也可以衡量。
二、CPU(中央處理器)
(一)CPU 的基本概念
- CPU(中央處理器,Center processing units),又稱為微處理器,它是運算器+控制器組合起來的,這是由于這兩者在邏輯關系和電路結構上聯系十分緊密。
常與CPU相提到的還有GPU(圖形處理器,Graphics processing unit)、NPU(網絡處理器,Neural-network Processing Unit)等,這里簡單了解一下,GPU是用作圖像和圖形相關運算工作的微處理器,從而使顯卡(顯卡用于轉換驅動,即計算機系統要顯示的信息進行轉換驅動,并向輸出設備輸出并顯示)減少取CPU的依賴;NPU采用“數據驅動并行計算”的架構,特別擅長處理視頻、圖像類的海量多媒體數據。
以下兩張圖:
1、OPPO發布首個自研NPU芯片 馬里亞納 MariSilicon X。
2、麒麟9000E和麒麟9000的差別。
(二)CPU 指令集
CPU用來計算和控制計算機系統的一套指令集合稱為指令集,可將指令集分為精簡指令集(RISC)和復雜指令集(CISC)兩種,精簡指令集采用簡單的指令,而復雜指令集采用復雜的指令,如下表:
| 指令數量 | 簡單 | 復雜 |
| CPU中通用寄存器數量 | 多 | 較少 |
| 控制器實現 | 硬布線控制,即組合邏輯器 | 微程序控制器 |
| 指令執行方式 | 并行處理(采用超標量和超流水線結構) | 順序串行執行 |
| 計算機各部分利用率 | 高 | 低 |
| 指令執行速度 | 快 | 較慢 |
| 編程的便利性 | 較難 | 較容易 |
(三)CPU的主要性能指標
1、主頻 (CPU的時鐘頻率)
時鐘頻率,其單位為MHz或GHz,它用于表示CPU運算和處理數據的速度,由于計算機的操作在時鐘信號的控制下分步進行的,每個時鐘信號周期完成一步操作,時鐘頻率的高低在很大程度上反映了CPU速度的快慢(CPU內數字脈沖信號震蕩的速度),但單從時鐘頻率上并不能代表CPU的整體性能,因為它只是CPU性能的一個方面。
2、緩存(高速存儲器)
緩存是位于CPU與內存之間的高速存儲器,其速度比內存快(比隨機存儲器RAM快),緩存主要解決CPU運行速度與內存讀寫速度不匹配的問題,所以說緩存容量的大小也是衡量CPU的主要性能指標之一,它對CPU速度的影響很大。
緩存分為一級緩存、二級緩存和三級緩存等,一級緩存位于CPU內核旁邊,它的容量最小;二級緩存是處理器內部的一些緩沖存儲器;三級緩存可以提升大數據計算時處理器的性能。
3、另外,衡量CPU的主要性能指標的還有位和字長。
三、指令系統和指令流水
(一)指令的組成
CPU中一條指令由一組二進制代碼來表示,指令是由操作碼和地址碼組成的,一條指令必須有一個操作碼,但是可以有多個地址碼。
- 操作碼,用于指明指令要完成的操作,如加法、減法、移位等等,其位數反映了機器的操作種類,即機器允許的指令條數,若操作碼占X位,則該機器最多包含2X條指令。
- 地址碼,用于指出操作數的地址(一或兩個)、結果的地址以及下一條指令的地址。
(二)CPU指令的執行過程
- CPU指令的執行過程簡單可以概括為:首先通過指令譯碼器對操作碼進行測試,以便識別所要求的操作,操作碼經過譯碼后,向控制器發出具體的對應信號。
控制器的基本功能為取指令、分析指令和執行指令,即CPU指令的執行過程如下三個步驟:
#mermaid-svg-J9BL21ULLw3Et7dH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-J9BL21ULLw3Et7dH .error-icon{fill:#552222;}#mermaid-svg-J9BL21ULLw3Et7dH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-J9BL21ULLw3Et7dH .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-J9BL21ULLw3Et7dH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-J9BL21ULLw3Et7dH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-J9BL21ULLw3Et7dH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-J9BL21ULLw3Et7dH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-J9BL21ULLw3Et7dH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-J9BL21ULLw3Et7dH .marker.cross{stroke:#333333;}#mermaid-svg-J9BL21ULLw3Et7dH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-J9BL21ULLw3Et7dH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-J9BL21ULLw3Et7dH .cluster-label text{fill:#333;}#mermaid-svg-J9BL21ULLw3Et7dH .cluster-label span{color:#333;}#mermaid-svg-J9BL21ULLw3Et7dH .label text,#mermaid-svg-J9BL21ULLw3Et7dH span{fill:#333;color:#333;}#mermaid-svg-J9BL21ULLw3Et7dH .node rect,#mermaid-svg-J9BL21ULLw3Et7dH .node circle,#mermaid-svg-J9BL21ULLw3Et7dH .node ellipse,#mermaid-svg-J9BL21ULLw3Et7dH .node polygon,#mermaid-svg-J9BL21ULLw3Et7dH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-J9BL21ULLw3Et7dH .node .label{text-align:center;}#mermaid-svg-J9BL21ULLw3Et7dH .node.clickable{cursor:pointer;}#mermaid-svg-J9BL21ULLw3Et7dH .arrowheadPath{fill:#333333;}#mermaid-svg-J9BL21ULLw3Et7dH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-J9BL21ULLw3Et7dH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-J9BL21ULLw3Et7dH .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-J9BL21ULLw3Et7dH .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-J9BL21ULLw3Et7dH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-J9BL21ULLw3Et7dH .cluster text{fill:#333;}#mermaid-svg-J9BL21ULLw3Et7dH .cluster span{color:#333;}#mermaid-svg-J9BL21ULLw3Et7dH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-J9BL21ULLw3Et7dH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}取指令分析指令執行指令1、取指令
控制器根據程序計數器(PC)提供的指令地址從主存儲器中讀取指令,送到主存數據緩沖器中,然后再送往CPU內的指令寄存器(IR)中,同時改變PC的內容,使其指向下一條指令地址或緊跟當前指令的立即數或地址碼。
2、分析指令
分析控制器要發出的指令所對應的操作,且分析參與此次操作的操作數地址,根據尋址方式計算地址,然后到存儲器中取操作數;若是雙操作數指令,這需兩個取數周期來取操作數;另外若無操作數指令,則直接進入下一個過程。
3、執行指令
形成操作控制信號序列,通過對運算器、存儲器以及I/O設備的操作,執行每條指令。
總之,CPU必須具有控制程序的順序執行(指令控制)、產生完成每條指令所需的控制命令(操作控制)、對各種操作加以時間上的控制(時間控制)、對數據進行算術運算和邏輯運算(數據加工)以及處理中斷等功能。
(三)指令周期
1、指令周期的關系
指令周期可以劃分為幾個不同的階段,每個階段所需的時間稱為機器周期,也稱為CPU工作周期或基本周期,這個周期是處理操作的最基本單位,另外機器周期又由若干個時鐘周期組成。
2、指令周期的組成
- 按剛剛上述CPU指令的處理過程來看,也就是完成一條指令的全部時間等于取指令、分析指令和執行指令所花的時間總和,所以我們將CPU每取出并執行一條指令所需的全部時間稱為指令周期,也就是CPU完成一條指令的時間。
另外將完成取指令和分析指令的操作所花的時間稱為取指周期,而執行指令所花的時間稱為執行周期,如下圖:
當對于間接尋址的命令來說,還要在取指周期和執行周期之間加一個間址周期,此時需先訪問一次存儲器,取出有效地址,然后再訪問存儲器,從而取出操作數,如下圖:
- 準確的來說,一個完整的指令周期包括取指周期、間址周期、執行周期和中斷周期四個子周期,其中間址周期的存在是判斷是否有間接尋址,中斷周期的存在是判斷是否有中斷,即中間址周期和中斷周期不一定包含在每個指令周期內,所以我們一開始所述一般的指令周期包括指令周期包含兩部分。
(四)指令流水
指令流水原理也就是將指令分解成多個小步驟,其中各個步驟相互,重疊,從而可以使多條命令并行處理從而提高效率,例如下圖是指令的二級流水:
流水線中執行的總時間主要取決于流水操作步驟中耗時時間最長的操作,設流水線由N段組成,每段所需時間分別為t,其中tj為時間最長的那一段的執行時間,則完成M個任務的實際時間為每段時間的總和+(M-1)×tj。
流水線性能通常用吞吐率、加速比和效率三項指標來衡量,如下:
1、吞吐率
在單位時間內流水線可以處理的任務或執行指令的數量稱為吞吐率,吞吐率分為最大吞吐率和實際吞吐率,其中實際吞吐率總是小于最大吞吐率。
最大吞吐率是指流水線在連續流動達到穩定狀態后所獲得的吞吐率,若各段時間均為△t,則最大吞吐率Tpmax如下:實際吞吐率是指流水線完成n條指令的實際吞吐率,對于m段的指令流水線,若各段時間均為△t,則在m段流水線上完成n條指令的時間為T=m△t+(m-1)△t,連續處理n條指令,其實際吞吐率Tp如下(當n?m時,Tp≈Tpmax):
2、加速比
加速比是指m段流水線的工作速度與等功能的非流水線工作速度之比,若數值越大,則說明該流水線的工作安排方式越好。
設流水線各段時間均為△t,在m段流水線上完成n條指令的時間為T1=m△t+(m-1)△t,但對于等效的非流水線工作,其所需時間為T2=nm△t,即加速比Sp為(當n?m時,Sp≈m):
3、效率
效率是指流水線中各功能段的利用率,利用率等于加速比Sp/m(m為流水線的段數),也等于Tp△t(流水線各段時間為△t)。
四、存儲器
(一)存儲器分類
存儲器分類有很多分類方法,
1、按存儲器在計算機中的作用可分類如下幾種存儲器:
2、按數據的存取方式可分為以下五種存儲器:
#mermaid-svg-ldFVqND9PcvIIOGw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ldFVqND9PcvIIOGw .error-icon{fill:#552222;}#mermaid-svg-ldFVqND9PcvIIOGw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ldFVqND9PcvIIOGw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ldFVqND9PcvIIOGw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ldFVqND9PcvIIOGw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ldFVqND9PcvIIOGw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ldFVqND9PcvIIOGw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ldFVqND9PcvIIOGw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ldFVqND9PcvIIOGw .marker.cross{stroke:#333333;}#mermaid-svg-ldFVqND9PcvIIOGw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ldFVqND9PcvIIOGw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ldFVqND9PcvIIOGw .cluster-label text{fill:#333;}#mermaid-svg-ldFVqND9PcvIIOGw .cluster-label span{color:#333;}#mermaid-svg-ldFVqND9PcvIIOGw .label text,#mermaid-svg-ldFVqND9PcvIIOGw span{fill:#333;color:#333;}#mermaid-svg-ldFVqND9PcvIIOGw .node rect,#mermaid-svg-ldFVqND9PcvIIOGw .node circle,#mermaid-svg-ldFVqND9PcvIIOGw .node ellipse,#mermaid-svg-ldFVqND9PcvIIOGw .node polygon,#mermaid-svg-ldFVqND9PcvIIOGw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ldFVqND9PcvIIOGw .node .label{text-align:center;}#mermaid-svg-ldFVqND9PcvIIOGw .node.clickable{cursor:pointer;}#mermaid-svg-ldFVqND9PcvIIOGw .arrowheadPath{fill:#333333;}#mermaid-svg-ldFVqND9PcvIIOGw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ldFVqND9PcvIIOGw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ldFVqND9PcvIIOGw .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ldFVqND9PcvIIOGw .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ldFVqND9PcvIIOGw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ldFVqND9PcvIIOGw .cluster text{fill:#333;}#mermaid-svg-ldFVqND9PcvIIOGw .cluster span{color:#333;}#mermaid-svg-ldFVqND9PcvIIOGw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ldFVqND9PcvIIOGw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}存儲器隨機存取存儲器RAM只讀存儲器ROM順序存取存儲器SAM直接存取存儲器DAM相聯存儲器CAM1、RAM和ROM
常說的比如手機或電腦內存多少G+多少G也就是指的是RAM和ROM(運行內存即對應的RAM,而ROM則是存儲容量),它們最大的區別是數據的易失性,即一旦斷電后RAM所存儲的數據將隨之丟失,所以在計算機和數字系統中RAM用來暫時存儲程序、數據和中間結果,常用于主存和高速緩存中;
DRAM以電容充電放電原理來寄存信息,SROM以觸發器原理來寄存信息,其中SRAM在不斷電的情況下,其儲存的信息一直不會丟失,而DRAM會隨著時間的延長而逐漸消失,它只能保持很短的時間,所以需要定時對其刷新來保持信息不丟失。
ROM是固定的,它是非易失性存儲器,所以它被用作操作系統的固化,即只能對存儲的內容讀出,但不能對其重新寫入修改,ROM的讀取速度通常比RAM慢一些。
總的來說,RAM和ROM這兩種存儲器共同作為主存的一部分,統一構成主存的地址域。
2、SAM
SAM存儲器只能按照某種順序進行順序存取,存取時間的長短與信息在存儲體上的物理位置有關,例如磁帶就是SAM的一種。
3、DAM
DAM采用直接存取方式對信息進行存取,當存取時,直接指向該存儲器的某個范圍(某個磁道),然后在范圍內進行順序檢索,找到地址后再進行讀寫操作,所以說這種存儲器的存取時間與信息所在的物理位置有關。
4、CAM
CAM是一種基于數據內容進行訪問的存儲器,寫入數據時,自動選擇一個未使用的空單元進行存儲;讀取數據時,不直接使用存儲單元的地址,而是使用該數據或該數據的一部分內容來檢索地址,由于它能同時對所有存儲單元的數據進行比較,是并發進行的,所以CAM速度非常快。
閃存
閃存,也稱為快閃存儲器,它是一種電子式可清除程序化只讀存儲器(ROM)的形式,即使斷電后數據也不會丟失,所以說它是一種非易失性存儲器,而RAM斷電后數據會丟失;隨機存取存儲器(RAM)是以字節為單位來改寫數據,而閃存存儲是以固定的區塊為單位,由于閃存寫入次數有限制,且讀寫速度相對于RAM較慢,所以不適合作為主存,但可將其作為ROM的替代品使用。
(二)高速緩存中的命中率
在高速緩存中,設直接訪問主存的時間為M秒,訪問高速緩存的時間為N秒,CPU訪問內存的平均時間為L秒,命中率為H,則滿足L=M×(1-H)+N×H。
(三)內存地址編址
編址是給內存單元進行編號,通常通過十六進制數字表示,按照從小到大連續編排成為內存的地址,其中每個內存單元的大小為一個字節,即8bit,其內存容量等于最高地址-最低地址+1。
(四)虛擬內存
虛擬內存屬于計算機內存管理技術,它會開辟一個邏輯連續的內存(一段連續完整的地址空間),在物理上,它通常被分隔成多個物理內存碎片,還有部分存儲在外部磁盤存儲器上,只有在需要時才進行數據交換。
五、計算機的運算方法
(一)無符號數和有符號數
前面已經講到過,CPU進行一次運算所能處理的二進制數據位數稱為機器字長,以單位bit(位,也稱為比特)來衡量,即寄存器的位數為機器字長,在寄存器中每一位都用于存放數值,在計算機中參與運算的數分為兩類:無符號數和有符號數。
這兩種數的區別是,有符號數在存放時,需在其最高位留位置用于存放其符號【正號“+”代表0,負號“-”代表1】,而無符號數不需要,當機器字長相同的情況下,兩種數對應的數值范圍是不同的。
| + | 0 |
| - | 1 |
如下,以機器字長為4位為例,無符號數的數值范圍與有符號數值范圍是不同的:
(二)數的定點和浮點表示
在計算機中,小數點的表示方法有兩種,分為定點表示和浮點表示,我們將分別用定點表示和浮點表示的數稱為定點數和浮點數。定點數的小數點的位置是固定的,當其位于機器數的符號和第一數值位之間時,這種數稱為純小數,而小數點位于數值位之后的機器數稱為純整數。
浮點數其小數點的位置可以浮動,表示方法:N=S×rj,即浮點數由階碼j、尾數S和基數r組成。
- 總的來說,浮點數在數的表示范圍、數的精度、溢出處理等方面上均優于定點數,但在運算規則、運算速度及硬件成本方面不如浮點數。
(三)原碼、補碼、反碼與移碼
1、原碼
- 原碼是直接用二進制表示的數值的編碼,但在數值前添加了一位符號(+代表0,-代表1),在計算機中通常不使用原碼表示數據。若一個定點整數或定點小數為正數,則它們的原碼為其本身,當為負數時,定點整數的原碼為2n-X,定點小數的原碼為1-X,另外整數的符號位與數值位之間通過逗號“,”隔開,小數的符號位與數值位之間通過小數點“.”隔開。
例如求下列定點整數和定點小數的原碼:
注:例如8位原碼的表示范圍為-127至-0以及+0至127,一共256個。
2、反碼
- 正數的反碼也是其本身,而負數的反碼是對其原碼的所有位,除符號位之外按位取反(1->0,0->1),從而得到反碼;負數的反碼也可以通過公式求得,其中定點整數的反碼為2n+1-1+X,定點小數的反碼為2-2-n+X。
例如求下列定點整數和定點小數的反碼:
3、補碼
- 正數的補碼與原碼、反碼一樣,都是其本身,而負數的補碼是對其原碼所有位,除符號位之外按位取反(1->0,0->1),并在末位補加1【簡述為取反加一】,它比反碼就多了加1這個步驟;負數的補碼也可以通過公式求得,其中定點整數的補碼為2n+1+X,定點小數的補碼為2+X。
例如求下列定點整數和定點小數的補碼:
注:例如8位補碼的表示范圍為-127至0至127,一共256個。
4、移碼
移碼又稱為增碼,是符號位取反的補碼,即移碼與補碼只是符號位相反,一般用做浮點數的階碼表示,因此只用于整數,目的是保證浮點數的機器零為全零。
(四)移位運算
對于一個正數,由于其原碼=補碼=反碼,所以經過經過移位后出現的空位以0補齊;而對于負數,由于各種編碼的表示形式不同,所以當機器數移位時,對空位的補齊要根據相關規則來進行補齊,如下表:
| 正數 | 以0補齊 |
| 負數 | 原碼以0補齊;反碼以1補齊;補碼若左移以0補齊,若右移以1補齊 |
六、系統總線
(一)總線的概念
總線是計算機中各功能部件之間傳送信息的公共通信干線,計算機使用總線結構便于增減外設,同時減少了信息傳輸線的條數,可以提高系統的可擴展性。
(二)總線的分類
- 總線可分為內部總線和系統總線,內部總線是指CPU內部連接各寄存器的總線,系統總線是指CPU與主存儲器及外部設備接口相連的·總線。
- 按照計算機所傳輸的信息種類,計算機的總線可以劃分為數據總線(DB)、地址總線(AB)和控制總線(CB),它們分別用來傳輸數據、數據地址和控制信號。
1、數據總線
數據總線用于傳輸各功能部件之間的數據信息,它一般是雙向總線,其位數稱為數據總線寬度,它是衡量系統性能的一個重要參數。
2、地址總線
地址總線是單向總線,它用于指出數據總線上的源數據或目的數據在主存單元的地址或I/O設備的地址,地址線的位數與存儲單元的個數有關,若地址線的根數為M,則對應的存儲單元個數(地址總線可訪問的最大存儲容量)為2M字節。
3、控制總線
控制總線是用于發出各種控制信號的傳輸線,各部件能在不同時刻占有總線使用權,需通過控制總線實現,通常來說它也是單向總線。
七、中斷
(一)中斷、中斷向量、中斷源
- 當計算機在執行程序的過程中,出現異常情況或特殊請求,計算機停止了現行程序的運行,轉向對這些異常情況或特殊請求的處理,處理結束后再返回到現行程序的間斷處,繼續執行原程序,稱為中斷,而中斷程序的入口地址稱為中斷向量,另外我們把凡是能向CPU提出中斷請求的各種因素稱為中斷源,同時還要注意當多個中斷源同時向CPU提出中斷請求時,此時CPU堅持一個原則,即任何瞬間只接受一個中斷源的請求。
(二)中斷系統的分類
中斷系統可以根據對中斷處理策略的不同分類為單級中斷系統和多級中斷系統,單級在響應某一中斷請求后,在此期間不允許被其他中斷源打斷,也就是只能等其執行完畢;而多級中具有多個不同優先級的中斷源,其中優先級級別高的可以打斷優先級級別低的中斷服務程序,從而以程序嵌套的方式進行工作。
(三)中斷服務程序
一般中斷服務程序的流程分為以下四個部分:
#mermaid-svg-rBvZtlo2mi6Ki9jq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rBvZtlo2mi6Ki9jq .error-icon{fill:#552222;}#mermaid-svg-rBvZtlo2mi6Ki9jq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rBvZtlo2mi6Ki9jq .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-rBvZtlo2mi6Ki9jq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rBvZtlo2mi6Ki9jq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rBvZtlo2mi6Ki9jq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rBvZtlo2mi6Ki9jq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rBvZtlo2mi6Ki9jq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rBvZtlo2mi6Ki9jq .marker.cross{stroke:#333333;}#mermaid-svg-rBvZtlo2mi6Ki9jq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rBvZtlo2mi6Ki9jq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rBvZtlo2mi6Ki9jq .cluster-label text{fill:#333;}#mermaid-svg-rBvZtlo2mi6Ki9jq .cluster-label span{color:#333;}#mermaid-svg-rBvZtlo2mi6Ki9jq .label text,#mermaid-svg-rBvZtlo2mi6Ki9jq span{fill:#333;color:#333;}#mermaid-svg-rBvZtlo2mi6Ki9jq .node rect,#mermaid-svg-rBvZtlo2mi6Ki9jq .node circle,#mermaid-svg-rBvZtlo2mi6Ki9jq .node ellipse,#mermaid-svg-rBvZtlo2mi6Ki9jq .node polygon,#mermaid-svg-rBvZtlo2mi6Ki9jq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rBvZtlo2mi6Ki9jq .node .label{text-align:center;}#mermaid-svg-rBvZtlo2mi6Ki9jq .node.clickable{cursor:pointer;}#mermaid-svg-rBvZtlo2mi6Ki9jq .arrowheadPath{fill:#333333;}#mermaid-svg-rBvZtlo2mi6Ki9jq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rBvZtlo2mi6Ki9jq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rBvZtlo2mi6Ki9jq .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-rBvZtlo2mi6Ki9jq .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-rBvZtlo2mi6Ki9jq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rBvZtlo2mi6Ki9jq .cluster text{fill:#333;}#mermaid-svg-rBvZtlo2mi6Ki9jq .cluster span{color:#333;}#mermaid-svg-rBvZtlo2mi6Ki9jq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rBvZtlo2mi6Ki9jq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}保護現場中斷服務恢復現場中斷返回CPU暫停現行程序,此時保護程序的斷點(由中斷隱指令完成)和保存CPU中各種寄存器的值(由中斷服務程序完成),稱為保護現場,中斷服務程序的最后一條指令是中斷返回指令,當執行結束后,即中斷返回至原程序的斷點處,從而整個完整的程序中斷處理過程完成。
(四)DMA方式
當CPU處理I/O事件時有大量數據需處理時,通常不使用中斷,而是使用使CPU效率更高的DMA控制方式,在該方式下,主存和外設之間建立了直接的數據通路,其中具體操作由DMA控制器來實行和完成(不需要CPU參與),當數據傳送完成后再將信息反饋給CPU,這樣就提高了I/O系統處理數據的能力,并減少了CPU周期的浪費,例如磁盤適合用DMA方式來實現輸入輸出操作。
總結
以上是生活随笔為你收集整理的(*长期更新)软考网络工程师学习笔记——Section 18 计算机硬件基本知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux操作系统笔记——Shell变量
- 下一篇: 数据结构学习-二维数组与稀疏数组转换