99国产精品欲av蜜臀,可以直接免费观看的AV网站,gogogo高清免费完整版,啊灬啊灬啊灬免费毛片

網易首頁 > 網易號 > 正文 申請入駐

深入理解計算機系統—高能慎點!

0
分享至

說在前面

一、寫作目的

作為計算機門外漢的作者,學習”計算機系統“的過程大致分為三個階段:

  1. 入門,學習始于2021年11月初的B站《計算機科學速成課》、《從0到1設計一臺計算機》科普視頻的系統學習,結合日本計算機科普作家矢澤久雄的兩本科普讀物《計算機是怎么跑起來的》、《程序是怎么跑起來》,完成了計算機硬件系統的入門。

  2. 深入,主要依托B站“王道考研”視頻《計算機組成原理》(正文大量配圖的來源)的系統學習,結合高分計算機經典黑皮書《深入理解計算機系統》(作者Randal E. Bryant)的深度閱讀,完成了”計算機系統“的深入學習,在此基礎上進行消化-吸收-輸出,最終完成計算機系統知識體系的初步搭建。文中所涉經典專著和視頻PPT的電子版可以通過文末的“閱讀原文”,自行下載,提取碼:re51。

  3. ,理論體系建立完畢后,通過對筆記本主板的拆解和再認識,完成了對知識體系的簡單實踐。


基于“體系完整、架構清晰、層次遞進”的原則,文章將力圖系統而通俗的介紹關于“計算機系統”的種種,希望對大家能夠有所幫助。受限于作者專業和認知水平,文中所述難免有所偏頗,還望斧正。

二、內容涉及

本文將從三個方面展開:

1.底層認知:計算機系統大致是這樣組成的,底層為計算機硬件(計算機組成原理),其上為操作系統,再上面就是各種軟件應用(算法與數據結構),這樣就構成了一臺功能完整的計算機,而計算機之間的連接則通過計算機網絡實現。本文作為縮水版的“計算機系統”,將著重介紹上層以高級語言編寫的“代碼”在運行的過程中,計算機的底層“軟/硬件”的實現過程。


2.深入理解:完成了計算機組成原理的底層認知的闡述后,想要深入了解的同學,就需要將計算機組件的封裝打開,更加具體的探索構成計算機系統的各子系統的結構組成、功能以及實現機理。這部分內容始終圍繞“硬”“軟”兩個方面進行闡述,“硬”的部分將深入計算機內部,詳細介紹計算機的硬件系統架構以及其中各硬件分系統(存儲系統、中央處理系統、總線系統以及I/O系統)的結構組成和運行機理;“軟”的部分則要詳細介紹以“0/1”二進制為基礎的信息表示和處理方法、控制計算機硬件協調工作的“指令系統”構造方式、運行機理以及各硬件分系統內部維持其有序工作的“規則”“策略”。


如果將計算機系統比作為一家公司的話,那么“硬”的部分就類似于由基本要素“人”(類似晶體管)構成的各職能部門(類似硬件分系統)以及將這些職能部門框起來的“組織架構”;“軟”的部分則類似于建構于“核心理念”之上的各種“規章制度”。硬和軟共同保障了公司的有序經營。

3.認識主板:“計算機系統”承載體的最佳案例應該就是個人電腦的主板,初識“主板”,如同毛細血管一般的PCB走線、密密麻麻的電路元器件以及大量被引腳包圍的集成電路芯片可能會引起你的生理不適,分析更無從下手。當深入了解并構建了相對完整的“計算機系統”的體系后,再看“主板”,會否有不一樣的認識?這一過程本身亦是加深對“計算機系統”認識的有益實踐。


底層認知一、什么是計算機系統

計算機是迄今為止最為復雜的一個系統之一,其作用在于按照確定的順序完成認類預設好的指令,而這些預設好的指令就是我們所熟知的程序。

所謂復雜系統,一方面因為其構成元素的晶體管數量十分巨大,一顆指甲蓋大小的CPU核心就包含數以億級的晶體管,另一方面在于其功能十分強大,簡單的堆數量并不能成就強大的系統,計算機系統的強大源于其將海量的晶體管進行互連、按照嚴密的組織規則讓其分工、協作,從而實現了遠超個體能力的復雜功能。這與細胞-器官-智慧生命的實現邏輯一致。”計算機系統“正是關注這個復雜系統的搭建過程以及工作機理:1)硬件層面,晶體管-計算機組件-功能完善的計算機;2)軟件層面,0/1二進制-信息的表示與處理-指令系統。


二、計算機的基本組成

現在我們自頂而下開始簡單認識一下計算機硬件系統的具體組成。計算機硬件系統的基本組成包括兩個部分:1)主機(計算機核心部分);2)I/O設備(鍵盤、鼠標、顯示器、光驅等)。其中主機由CPU和主存組成,CPU則主要包括運算器(執行邏輯、算術運算)和控制器(指揮程序的運行),主存用以存放程序和數據。


打開任意筆記本的銷售頁面,配置參數表均介紹了該計算機的主要性能參數,其中最主要的參數正是:1)CPU型號;2)內存(即主存)容量;3)硬盤容量(即輔存容量)。



CPU的主要功能就是執行指令,結構組成主要包括運算器和控制器,各組件的功能為:

  • 運算器:就像是搬磚的,主要工作就是埋頭執行各種算數運算和邏輯運算,主要組成有:1)算術邏輯單元:用以執行各種算術和邏輯運算;2)通用寄存器,用以存放待運算的操作數;3)累加器,用以存放操作數和運算結果;4)乘商寄存器,用以輔助乘商計算。

  • 控制器:就像是工頭,主要工作就是指揮運算器執行各種指令,主要組成有:1)控制單元:分析指令,給出控制信號;2)指令寄存器:用以存放待執行指令;3)程序計數器:用以存放下一條指令的地址。


主存儲器就是一個臨時貨柜,用以存放待運行程序翻譯而成的各種指令(數據),組成包括三個部分:1)存儲體,其如同貨柜一樣存放著海量的程序或數據;2)MAR,地址寄存器,臨時存放待取程序或數據的地址(如同取件碼);3)MDR,數據寄存器,臨時存放待取程序或數據(就如同待取包裹)。


三、計算機的組織形式

復雜、龐大的系統想要運行有序,就必須要一套科學合理的組織架構保駕護航,就如同大公司的組織架構,計算機各部組件相互之間分工協作需要通過計算機硬件架構來進行保障。計算機硬件的組織形式主要分為兩種:1)馮-諾伊曼結構;2)現代計算機結構。

  • 馮-諾伊曼結構

計算機科學家馮-諾依曼確立了現代計算的基本組成以及組織架構,即“馮-諾依曼結構”,結構組成包括運算器、控制器、存儲器、輸入設備以及輸出設備五大部分,組織結構如下圖所示,結構特點是以CPU為中心的組織形式,所有數據流動、程序運行以及結果輸出均由CPU執行和居中協調。


如果將計算機比作一個公司的話,五大部件大抵可以做如下類比,運算器就如同生產部門,存儲器就如同倉儲部門,所有的采購原材料以及加工好產品的產品都需要經過生產部門,再送達倉儲部門等相關部門,這顯然讓生產部門做了很多職責范圍外的活,降低了生產效率。因此現代計算機結構對五大部件的組織形式進行了優化,那便是“現代計算機結構”。


  • 現代計算機結構

現代計算機結構以存儲器為核心,所有輸入的數據/程序以及輸出的計算結果,均先存入存儲器,然后在被送往CPU進行執行或送至輸出設備。現代計算機結構有效的為CPU減負,讓CPU更加專注的進行指令執行,大幅提高了效率。


四、計算機的運行過程

以上,我們就基本完成了一個計算機硬件系統的搭建,那么這個系統是如何工作的,各部組件之間又是如何分工協作,確保預先設置的指令暢通無阻的運行的。

過程大致是這樣的:當你打開手機上的某個APP時,后臺其實是用高級語言編寫的代碼在運行,這些代碼經過一個叫編譯器的東西翻譯成計算機硬件認識的機器語言(一行行二進制代碼),然后經由I/O裝入主存的存儲體中。


當以機器語言表示的指令和數據裝入主存后,CPU就開始訪問主存提取指令并開始執行,具體過程如下所示:

step1:程序計數器PC指向當前指令地址#01,并將地址送至主存的地址寄存器MAR;

step2:存儲體根據MAR的取件碼,將對應位置的數據發給數據寄存器MDR;

step3:MDR將指令發給控制器的指令寄存器IR,進行指令分析;

step4:IR將指令的操作碼發給控制單元CU,將地址碼發MAR,CU依據操作碼通知運算器要進行何種操作;

step5:存儲體根據MAR的取件碼,將#04地址對應的數據經由MDR傳給運算器的ACC進行運算。?


?如此這般,就大致了解了計算機的各硬件是如何協作,確保程序順利運行的。

深入理解

入門之后,該部分將從“軟件”和“硬件”兩個方面,正式深入計算機各分系統,介紹它們的結構組成、工作機理。


一、信息的表示與處理

二進制是信息科學的基礎,就如同晶體管是計算機硬件系統的基礎?,F代計算機存儲和處理以二值信號表示的信息。這些普通的二進制數字,或者位(bit),形成了數字革命的基礎。

我們熟悉的數學理論是建立在關于十進制的信息表示和處理的理論基礎之上的,但是十進制的每一個位狀態包含10種(0~9),狀態過多,不利于工程實現,然而二進制的一個位狀態只包含兩種(0,1),存儲和處理信息的機器時,二進制值工作得更好。二值信號能夠很容易地表示、存儲和傳輸,例如,可以表示為穿孔卡片上有洞或無洞、導線上的高電壓或低電壓,或者磁場引起的順時針或逆時針。

本章主要分為三部分內容:1)信息存儲,主要介紹關于二進制理論基礎的一些基本概念;2)整數的表示與計算,介紹利用無符號數和二進制補碼對整數進行表示和運算的理論基礎;3)浮點數的表示與運算,介紹利用二進制版本的科學記數法表示實數的方法及其相關運算性質。


1.信息存儲1.1 進位計數制

我們生活的現實世界是建立在十進制基礎之上的,而計算機硬件卻只能讀懂0/1二進制語言,兩個世界要建立緊密的聯系就離不開各種進制之間的轉換。最常見的就是十進制、二進制、8進制以及16進制之間的相互轉化。其中十進制、8進制以16進制與二進制之間相互轉化方式如下,十進制、8進制以及16進制三者之間的相互轉化可以通過二進制中轉實現。


1.2 字

大多數計算機使用8位的塊,或者叫做字節,來作為最小的可尋址的存儲單位,而不是對存儲器中的每一個位(bit)進行訪問,存儲器的存儲體可以被視為一個非常大的字節數組,稱之為虛擬存儲器的每一個字都有一個“門牌號”,即為地址。所有地址組成的集合為虛擬內存地址空間,空間的大小就是計算機的字長,如32位計算機,虛擬地址的空間限制為4GB,64位就是8GB。


1.3 數據大小

常用的數據類型有這么幾種,字符型、整數型以及浮點型,其中字符型一般用來存儲字符串中的單個字符,整數型則用來存儲各種長度的整數,浮點型則是用來存儲不同精度的浮點數。


1.4 尋址和字節順序

如果一個數據跨越多個存儲字節,那么就必須要對數據的存放順序進行規定,幾乎所有機器,多字節對象都被儲存在連續的字節序列中。對表示一個對象的字節序列排序,由兩種通用的規則:1)大端模式;2)小端模式。

如圖所示,在地址#1~#4所指向的內存中,存儲16進制數據01234567H,其中“01”表示數據的高有效位(8bit),“67”表示數據的低有效位,則將高有效位放在前面為大端模式;將高有效位放在后面為小端模式。


1.5 字符串

字符串是由一個個字符組成的,而在計算機中,每一個字符與“0/1”建立聯系是通過ASCII編碼(8bit)的方式來實現的,其中ASCII值為16進制表示。


1.6 常見運算

  1. 位級運算

所謂位運算,即以二進制表示的數據的每一位可以作為一個個體進行相應的布爾運算,主要運算為與&、或|、非~以及異或^,可以參與位運算的數據類型為任意“整型”(如char、int、short int、long int和unsigned int)。


  1. 邏輯運算

邏輯運算(或||、與&&、非?。┑倪\算性質與位級運算顯著不同,功能也完全不同,邏輯運算認為所有的非零數據均為TRUE,而數據零為FALSE,運算的結果為1或0,代表TRUE或FALSE。


  1. 移位運算

移位運算,以向左或者向右移動位模式。左移表示為x<>k,但是右移的具體操作則份兩種情況:1)邏輯右移為高位補0;2)算術右移為高位補最高有效位,具體操作如下圖所示。對于無符號數據,右移必須為邏輯的,對于有符號數據,幾乎所有的機器都默認算術移位。


2.整數的表示與運算

本節將介紹整數的兩種表示方式,一種只能表示非負數,另一種則能夠表示負數、零和正數。其數學屬性與后續的機器級實現有很強的關聯。

2.1 整型數據類型


2.2 無符號數與二進制補碼

所謂無符號數,就是沒有“+/-”號的數,其只能表示非負數,其二進制編碼表示與真值之間的映射關系為:

即w位的無符號二進制編碼,其真值可以上述公式進行計算,其建立了二進制編碼 (類似w維向量)與真值(類似w維向量的模)的一一映射的關系,公式看似復雜,其實就是前面二進制轉十進制所用到的 冪乘求和法 。

對于有符號數(即包含“+/-”號),則需要給符號位編碼,以區分正負數。具體執行有兩種方案:

  1. 原碼(S)表示,將最高有效位作為符號位,其真值計算可表示為B2S,由下圖可知,最高有效位(符號位)決定了真值的正負,其他位僅決定絕對值的大??;


  1. 補碼(T)表示,將最高有效位定義為負權,其真值的計算可以表示為B2T,由下圖可知,其真值結果表示為負數+正數,其中負數有無取決于最高有效位(負權位),而正數的大小則取決于其他位。


需要說明的是,原碼在表示有符號數的時候存在一些先天缺陷,如下圖所示:+5和-5的原碼定義下的二進制表示相加后結果為-10,顯然與實際不相符,而使用補碼定義,則計算結果為0,與實際吻合。因此,有符號數的表示絕大部分情況下都是用補碼方案。


不同類型的數據的二進制表示以及其真值的計算方法如下圖所示,其中有符號數的反碼定義為原碼到補碼轉換的過渡形式,實際沒什么作用。


2.3 有符號數與無符號數之間的轉化

所謂有符號數和無符號數的轉化,其實并沒有改變二進制的位表示,只是因為二進制數每一個“位”的解釋因為有符號數和無符號數的定義的不同而不同,從而導致二進制數所表示的真值發生變化。

從二進制補碼到無符號數的轉換,通過公式和圖示,分別如下圖所示:


從無符號數轉換到二進制補碼,則正好反過來,公式和圖示分別如圖所示:


2.4 數字的擴展與截斷

常見的運算比如不同字長的整數之間進行轉換,字長短的二進制數轉換至字長長的二進制數,則需要擴展位,字長長的數轉換至字長短的數,則需要進行截斷。

二進制補碼和無符號數的擴展的方式也有所不同:1)無符號數的擴展為高位補0;2)二進制補碼的擴展則是高位補最高有效位。這種擴展規則的制定,是保證擴展前后的二進制所表示的真值沒有發生變化。

截斷會改變二進制所表示的真值,對于無符號數字x,截斷它到k位的結果就相當于計算 mod (即真值對 取模),總之無符號數和二進制補碼的截斷結果可以分別表示為如下形式:

2.5 整數運算

整數的運算主要圍繞無符號數和二進制補碼展開的,常用的運算主要有:1)加法運算;2)非運算;3)乘法運算;4)乘以2的冪運算;5)除以2的冪運算。

對于加法運算,我們通常關心計算結果有無溢出的情況,對于無符號數和二進制補碼,其加法計算結果如下所示:






對于乘法運算,我們可以看到,無論是無符號數亦或是二進制補碼運算,乘法運算都可等效的通過“位”截斷來實現,無需添加專門的乘法器即可實現,體現出了極大的便利性。其中無符號數和二進制補碼的乘法運算結果分別如下所示:

對于乘以2的冪和除以2的冪運算,計算過程可以通過移位運算來實現,從而大幅提高了運算便利性。其中:1)乘以 ,無論對于無符號數還是二進制補碼,可以通過左移k位來等效實現;2)除以 ,對于無符號數還是二進制補碼,則是通過算術右移k等效實現(其中無符號數高位補0,二進制補碼高位補最高位)。

3.浮點數的表示和運算

3.1 浮點數表示

浮點數表示形式為 - 的有理數進行編碼 。 其中s為符號位(1位,只有兩種狀態0/1,表示+/-),M為有效數(n位 , ) ,E為指數(k位, - - ),對于二進制表示,僅需要對這三個數進行編碼即可。對于單精度浮點格式(float,32位),k=8,n=23;對于雙精度格式(double,64位),k=11,n=52。已知浮點數的二進制編碼表示,求解浮點數的真值,計算結果如下。


需要說明的是:針對指數的編碼是否為全0/1,浮點數編碼對應的真值存在兩種計算方法:

  1. 指數編碼既不是全0也不是全1時,此時浮點數為規格化值,其中指數域 - ,e為無符號數,位表示為 - - , - - ;小數域 ,其中 - - ;

  2. 當指數編碼全為0時,浮點數為非規格化值,此時 - , ;

  3. 當指數編碼全為1時,浮點數為特殊值,當小數域為全為0時,表示無窮,s=0,為 ;s=1,為 - ;當小數域非0時,為NaN。


3.2 浮點數運算

浮點數的加法運算,不同于整數的加法運算性質,缺失了很多屬性(比如不滿足結合律和分配律),這里就不再贅述。

4.小結

“十進制”是現代所有和“數字”相關理論的基礎,其是我們表征世界最熟悉的一種“方式”,而作為信息世界的基礎,“二進制”則提供了另外一種“方式”,因此建立兩種“方式”的聯系必不可少(進制轉化),同時需要基于“二進制”,來表征各種數字(無符號數、有符號數、定點數、浮點數等)并闡明各類數學運算的性質,而這些就是第一章所要介紹的全部。

二、存儲系統

存儲系統就如同計算機系統中的“倉庫”,用于存放程序、指令、數據等各類信息,將分為三個部分展開:1)什么是“存儲系統”,介紹存儲器的抽象模型以及基于存取速度梯度而成的層次結構;2)為什么稱之為“系統”,介紹紛繁多樣的存儲技術,并基于“局部性原理”的存儲系統的金字塔結構;3)“存儲系統”如何運行,重點介紹存儲系統結構組成以及其中最為重要的“主存”和“高速緩存”,闡述它們是如何與CPU協調共事,順利完成數據存取。


1.什么是“存儲系統”

1.1 抽象層面的認識


如上圖所示,到目前為止,在我們對計算機系統的研究中,我們依賴于一個簡單的計算機系統模型,CPU執行指令,而存儲器為CPU存放指令和數據。在這個簡單模型中,存儲器系統是一個線性的字節數組,而CPU能夠在一個常數時間內訪問每個存儲器位置。再具體一點,就如下圖所示,其包含一個存儲體(用以存放數據),然后就是兩個接口(地址接口,數據接口),雖然至今為止這都是一個有效的具體模型,但是它沒有反映現代系統實際工作的方式。


1.2 層次結構


實際上,存儲器系統(memory system)是一個具有不同容量、成本和訪問時間的存儲(storage)設備的層次結構。CPU寄存器保存著最常用的數據。靠近CPU的小的、快速的高速緩存存儲器(cache)的緩沖區域。主存暫時存放存儲在較大的慢速磁盤上的數據,而這些磁盤常常又作為存儲在通過網絡連接的其他機器的磁盤或磁帶上的數據的緩沖區域。

2.為什么稱之為“系統”2.1 存儲技術的多樣性

信息技術發展至今,存儲技術日新月異,如何存儲二進制信息,方式也十分豐富。


按照存儲介質的類型,存儲器可以分為:1)半導體存儲器(主要用于主存和Cache);2)磁表面存儲器(主要有磁盤和磁帶);3)光存儲器(主要有光盤等)。


其中,半導體存儲器發展迅速,也有很多分類:


SRAM為靜態隨機訪問存儲器:其存儲單位為一個雙穩態電路,每個單元用用6個晶體管電路實現,只要有電,其可以無限期的保持兩個電壓配置或穩定狀態,電路復雜度相對較高,因此成本相對較高,一般用于高速緩存和CPU中的寄存器;


DRAM為動態隨機防蚊存儲器:其每一個位的存儲元器件位電容,通過電容的充放電來表征二進制0/1狀態,DRAM的存儲單元對對干擾非常敏感,成本較SRAM便宜很多,一般用于主存(內存條)。



ROM(read only memory)只讀存儲器,只能讀,不能寫。不同于RAM(斷電之后,DRAM和SRAM存儲的信息就會丟失),ROM屬于非易失性存儲器,即使關掉電源,其存儲的信息也不會丟失。存儲在ROM設備中的程序通常被稱為固件(firmware),當計算機通電后,它會運行存儲在ROM中固件。一些系統在固件中提供了少量最基本的輸入輸出函數(如BIOS例程),復雜設備,如圖形卡和磁盤驅動器,也依賴固件翻譯來自CPU的I/O請求。



磁盤:結構組成包括盤片(存儲數據)、主軸(帶動盤片旋轉)以及讀寫頭(讀取盤片上的信息)。盤片位磁盤的核心部件,上面劃分為了許多同心圓(磁道),磁道上交替分布了許多扇區(扇區之間使用間隙進行分割),磁盤以扇區位為單位進行數據存儲。


2.2 存儲器的搭建原則

以上,我們知道二進制0/1信息的存儲方式由許多種,在計算機系統的搭建時,我們該如何去選擇這些存儲器呢?

誠如上面所介紹的那樣,雖然以上的設備都可以存儲信息,但是它們的性能和成本卻相去甚遠。


正因如此,為了兼顧計算機系統的成本、容量(存儲字數*字長)以及速度(數據寬度/存儲周期),計算機存儲設備不是簡單的選擇哪一種技術體制,而是

依據存儲設備距離計算機大腦(CPU)的遠近,按照傳輸速度的由快至慢來布局存儲系統。從而形成了“金字塔結構”的存儲系統布局設計。


如圖所示,以我的筆記本電腦的存儲系統為例,其基本組成為:1)CPU中配備了三級高速緩存(L1/L2/L3),容量分別為256KB、1.0MB和 6.0MB,依次增大;2)電腦主存為7.9GB的DRAM;3)輔存磁盤為239GB的SSD(固態硬盤)??梢钥闯?,存儲設備越遠離CPU,存儲容量越大。


2.3 局部性原理(可行性基礎)

如上文所說,為了平衡容量、成本和傳輸速度,我們設計了一個“金字塔形式”的存儲系統層次結構,這樣的結構能否實現數據在存儲系統各存儲設備之間順暢的“上上下下”,保證計算機系統的暢通運行?

“局部性原理”為這個結構的合理性提供了理論基礎。所謂局部性原理,即一個編寫良好的計算機程序傾向于引用的數據項臨近于其他最近引用過的數據項,或是臨近于自我引用的數據項。這一原理對軟件系統和硬件系統的設計都有著極大的影響。局部性通常由兩種形式:1)時間局部性,即被引用過一次的存儲器位置可能在不遠的將來被多次引用;2)空間局部性,即一個存儲器位置被引用了一次,那么程序可能在不遠的將來引用附近的存儲器位置

局部性原理在工程中有著現實的需求,比如說硬件層面,計算機通過引入高速緩存,提前將主存中位置相鄰的數據集拷貝至高速緩存,從而利用高速緩存的速度優勢,提高數據傳輸速度。

3.“存儲系統”如何運行

3.1 系統結構組成

上面,我們知道了存儲系統中的各設備是按照其與CPU的“遠近親疏”,層次漸進的構成了一個“金字塔結構”布局。本節,我們將深入了解這些存儲設備相互之間以及與CPU 之間究竟是如何連接以及分工寫作的。


如上圖所示,數據在存儲系統的運行過程大致是這樣的:1)各種應用APP都被安裝在計算機的C盤/D盤(ROM)中,由于ROM的非易失性,即使斷電,安裝在里面的APP也不會被刪除;2)當你打開電腦,啟動微信APP時,相關運行程序就會被拷貝到主存中,開始運行;3)高速緩存載從主存中拷貝數據/程序子集,以備CPU及時調用;4)CPU從高速緩存中取指令、數據進行處理,輸出預期的結果給使用者。

3.2 主存

以上的敘述,我們還是將主存作為一個抽象的黑匣子進行分析,現在我們將要深入主存內部,去一探主存的組成和運行機理。

  • 主存的基本組成

由上文可知,主存的基本組成包括三部分:1)存放數據的存儲體,其類似于貨柜,一個個數據如同包裹;2)地址寄存器,用以存放CPU待取數據的地址,就如同取包裹時的取件碼;3)數據寄存器,用以臨時存放CPU待取數據,就如同待取的包裹。三者之間的有序開展有賴于時序控制邏輯協調。


繼續深入存儲體的結構細節,就是密密麻麻的集成電路組成,其基本組成如下圖所示:存儲體被綠色縱線和紅色橫線劃分成很多小方塊(構成存儲矩陣),每個小方塊就是一個存儲“位”,它由一個MOS管和一個電容構成,其中電容就相當于“蓄水池”,可以存水,亦可以放水,有水就是“1”,沒水就是“0”;MOS管則相當于水管閥門,控制是否存水或防水,對應的就是是否“寫入”“讀出”電容里的數據。因此連接水管出水口的“綠線”就是寫入或者讀出存儲單元里面的數據,將8個存儲“位”就構成一個存儲“字”,而連接開關閥門G的“紅線”就決定是否允許相應的單元被寫入或讀出數據,將紅線統一連接到地址寄存器,就可以通過地址寄存器的數據控制哪個位置的數據被選通。


其實將“紅線”直接連接地址寄存器(MAR)是相當浪費的,因位紅色控制線終究只有一根線導通(對應“1”),而其他線均關閉(對應“0”),所以n條地址線僅僅確定了n個狀態,這遠低于個狀態,資源浪費,通過橋接一個譯碼器,就可以通過n位地址線控制個狀態,從而充分利用資源。通過讀寫控制線確定當前存儲器的讀寫狀態。

忽略電路細節,主存就是一個包含著一組地址線引腳和數據線引腳的封裝芯片,外加讀寫控制線引腳,以及片選線引腳(由于主存芯片由多個芯片并行而成,片選線控制使用哪一個存儲芯片)。


存儲器的總容量=存儲單元數*存儲字長(存儲單元包含的位數),如8KB,其中1B(字)=8bit(位),所以8KB=8K*1B=*8bit,即地址線有13位,數據線8位。

  • 主存與CPU的連接

以上,我們算是把主存剖析清楚了,那么主存又是如何與CPU進行連接的,實現CPU自由讀取貯存在中的數據呢。其實很簡單,數據線連數據線,地址線連地址線即可。


如果主存的容量無法滿足CPU的需求,可以通過存儲器擴展來解決,擴展的方式有兩種:

  • 主存的位數不夠(相當于快遞柜的尺寸太小,放不下大包裹),則可以通過位擴展的方式(快遞柜擴容)實現;

  • 主存的字數不夠(存儲單元的數目不夠,相當于快遞柜數目太少,放不了太多包裹,則可以通過字擴展的方式實現。



3.3 高速緩存


高速緩存的產生的背景是計算機技術的快速發展致使主存傳輸數據的速度越來越無法匹配CPU的運算速度,從而嚴重影響了計算機的運行速度。


解決方法就是,CPU和主存之間增加一個傳輸速度更快的高速緩存,用以拷貝主存中即將執行的程序,以備CPU運算調用。這一策略就如同京東快遞和其他快遞的區別,京東快遞通過在每個城市自建倉儲,用以提前存放商品,買家下單后,商品通常是直接從倉儲發貨,而不是產地發貨,從而實現了“當天達”這樣的高效。


  • 高速緩存與主存的映射關系

計算機主存相當于一個大蓄水池,而高速緩存就相當于一個小蓄水池,主存事先將數據拷貝至高速緩存,如果將主存看作為一個數據集合的話,高速緩存就是這個集合的子集,因此必須要明確子集與原集合的映射關系,如此,CPU在從高速緩存中獲取數據的時候才不至于混亂。


既然高速緩存Cache相當于主存的一個子集,那就必須要先明確子集與原集合之間的映射關系,高速緩存與主存之間的映射關系主要分為三種:

  1. 全相聯映射:1)映射方式,主存和緩存之間的數據傳遞是以塊為單位的,每個塊包含多個字的數據,全相聯映射中,如下圖所示:Cache中#0~#7行均可以接收主存#0塊,即主存中塊可以存放在Cache中的任意位置,沒有限制;2)訪存方式,如下圖所示,假設內存容量為16*4B,主存的地址包括4位塊號以及2位塊內地址,CPU帶著待取數據的主存地址(如001110)去問Cache要數據,Cache于是對著主存地址去挨個塊核對標記有效位,發現#2行標記和主存塊號一致,且標記位為1(說明塊內有數據),則通知CPU“我有你想要的東西”,即為命中;


  1. 直接映射:1)映射方式,主存中塊只能按照一定的次序排隊放入放到Cache中的某一行,因此,Cache塊號=主存塊號%(取余)Cache總塊數;2)訪存方式,CPU帶著地址碼001110去找Cache要數據,Cache用主存塊號對行數8取余結果為#3,于是就去#3行核對標記和有效位,發現有效位雖然為1,但標記卻是1011,與主存塊號不一致,于是通知CPU“我沒有你想要的東西”,即為不命中;


  1. 組相聯映射,1)映射方式,介于1)和2)映射方式之間,Cache中的塊可以事先分組,主存中的塊必須要按照一定次序放入Cache中的某一組,但是在組內可以隨意放;2)訪存方式,CPU帶著地址碼001110去找Cache要數據,Cache用主存塊號對組數4取余結果為#3組(即塊號后兩位),于是就去#3組(#6行,#7行)核對標記和有效位,發現#7行標記為0011一致,且有效位為1,于是通知CPU“我有你想要的東西”,即為命中;


三種映射方式總結和優缺點對比如下:


  • 高速緩存的替換策略

前面,介紹了高速緩存與主存的映射方式以及不同映射方式下,CPU的訪存方式,訪存結果根據CPU是否獲得“想要的數據”而分為命中和不命中兩種情況,命中就皆大歡喜,這里介紹一下不命中會怎么樣。不命中也分兩種情況:

  • 有空位置存放數據,直此時接將內存塊地址對應數據Copy至此即可;

  • 沒有空位置存放數據(即待放入位置被原數據塊占據了),此時就需要對兩個塊進行位置替換,確保計算機的正常運行,三種不同的映射方式的替換前提有所不同,區別如下:1) 全相聯不挑食,除非Cache全滿,否則就可以見縫插針;2)直接映射最專一,必須對應行非空,否則就替換;2)組相聯比較中庸,介于二者之間,對應的組滿了,才替換。


實際替換時,也有著不同的策略,主要有四種:1)隨機算法(RAND),在滿足要求的塊中,隨機選一個塊進行替換,效果較差;2)先進先出算法(FIFO),優先替換最新被調入Cache的主存塊;3)近期最少用(LRU),將最久沒有被使用的主存塊替換掉,基于“局部性原理”,命中率較高;4)最近不常用(LFU),將被訪問次數最少的主存塊替換掉。


  • 高速緩存的寫策略

以上介紹了CPU從高速緩存中讀數據時的一些策略,但同時CPU的運算結果也要同時寫回高速緩存以及主存,以備后續使用,這時候也有著不同的策略,針對寫命中和寫不命中兩種情況,處理策略也不盡相同。

  1. 寫命中時:1)全寫法,即寫命中后需要將結果同時寫入高速緩存和主存;2)寫回法,即寫命中后,只是將結果寫入高速緩存,當高速緩存中相應位置的數據要被替換時,才將結果寫回主存;

  2. 寫不命中:1)寫分配法,當CPU對高速緩存寫不命中時,把主存中的塊調入高速緩存,在高速緩存中修改,通常搭配寫回法使用;2)非寫分配法,當CPU對高速緩存寫不命中時,只寫入主存,不調入高速緩存,通常搭配全寫法使用。


4.小結

本章更加深入的介紹了存儲系統,相繼介紹了豐富多樣的存儲技術、不同存儲方式因速度和成本的區別分別司職于計算機的不同部位,從而形成了“金字塔”形式的層次結構、以及詳細介紹了層次結構的中主存和高速緩存Cache的結構組成、運行機理以及與CPU之間協調機制。

三、指令系統

如下圖所示,我們知道計算機系統構成層次結構是這樣的:晶體管是構成計算機系統的基本元素,其通過高/低電平的切換實現自己的價值;大量晶體管通過不斷套娃構成了超大規模的集成電路,這些集成電路由于功能的不同可以分飾不同的角色(存儲器、CPU、輸入/輸出等),把這些不同功能的集成電路組合起來就構成了計算機硬件系統,然而這個硬件系統只認識0和1組成的機器語言,其與程序員所編寫的程序(高級語言)有著天壤之別,它們之間需要經過編譯器的翻譯才能互通。這些0和1構成的數據串就指令,其為計算機運行的最小功能單位,而這些可以實現各種功能的指令所組成的集合就是指令系統。


經過編譯器編譯的指令序列被放入主存的存儲體中,CPU在程序計數器PC的控制下,一條條的從主存中取出指令,由CPU的控制器進行指令分析,并指揮CPU運算器按照指令要求完成相應的運算處理,具體的運行過程可以參考前文所述。


指令系統一章將從三個方面展開:1)指令格式,介紹一條指令的基本組成以及按照不同標準的分類;2)指令/數據尋址,指令運行前需要總主存中提取出來,這就需要尋址,分別介紹指令尋址以及數據(指令的被操作數)尋址的各種方式;3)CISC與RISC,介紹兩種主流的指令系統(復雜指令集與精簡指令集),簡單闡明二者的本質區別、優缺點以及典型應用。


1.指令格式

指令的格式如下圖所示,由操作碼和地址碼構成,其中操作碼規定了對操作對象的操作類型(求和、移位等),而地址嗎則指明了操作對象的位置。


由于操作任務的種類不同,指令地址嗎的數目也有所不同,主要分為:1)零地址指令;2)一地址指令;2)二地址指令;3)三地址指令;4)四地址指令。

  • 零地址指令

一種情況是不需要操作數,如空操作、停機、關中斷等指令;另一種情況是堆棧計算機,兩個操作數隱含存放在棧頂和次棧頂,計算結果亞輝棧頂。


  • 一地址指令

一種情況是只需要單操作數,如加1、減1、取反、求補等操作;另一種是需要兩個操作數,但是有一個操作數隱含在某個寄存器(如ACC)。


  • 二地址指令

常用于需要兩個操作數的算術運算、邏輯運算相關指令。


  • 三地址指令

常用于需要兩個操作數的算術運算、邏輯運算相關指令,并將計算結果寫入A3。


  • 四地址指令

常用于需要兩個操作數的算術運算、邏輯運算相關指令,并將計算結果寫入A3,同時告知下個執行指令的地址。

指令的分類還可以按照長度和類型進行區分:1)定長指令字結構,即指令系統中所有指令的長度都是一樣的;2)變長指令字結構,即指令系統中的各種指令的長度不等。

按照操作類型進行分類:1)數據傳送類,進行主存和CPU之間的數據傳遞(如LOAD:把存儲器中的數據放到寄存器中;STORE:把寄存器中的數據放入到存儲器);2)算術/邏輯操作,其中算術操作包括加、減、乘、除、增1、減1、求補、浮點運算、十進制運算等,邏輯運算包括與、或、非、異或、位操作、位測試、位清除、位求反等;3)移位操作,包括算術移位、邏輯移位、循環移位等;4)轉移操作,包括無條件轉移JMP、條件轉移(JZ:結果為0;JO:結果溢出;JC:結果有進位)、調用和返回(CALL和RETURN)、陷阱(Trap)與陷阱指令;5)輸入/輸出操作,CPU寄存器與IO端口之間的數據傳遞(端口即IO接口中的寄存器)。


2.指令/數據尋址

指令尋址的目的在于如何確定下一條指令的存放位置,主要有兩種類型:1)順序尋址,通過程序計數器PC不斷加1,順序執行存儲器中的指令;2)跳躍尋址,由轉移指令(JMP)指出。兩種指令尋址的運行過程如下圖所示。


相較于指令尋址,數據尋址的種類則要豐富很多。數據尋址的主要任務是確定本條指令的地址碼指明的真實地址。


以一地址指令為例,地址碼的構成包括兩個部分(尋址特征+形式地址),操作數的的有效地址EA(真實地址)需要通過形式地址按照尋址特征規定的操作進行處理才能獲得。尋址特征規定了數據尋址的方式,種類繁多,如下圖所示。


  • 立即尋址

無需尋址,形式地址即為操作數(一般用補碼形式表示)。

優點為無需訪存,速度快,缺點為形式地址的位數限制了操作數的范圍。

  • 直接尋址

指令中的形式地址A就是操作數的真實地址,即EA=A。


優點是指令結構簡單,指令執行僅一次訪存,缺點是A的位數決定了尋址的范圍,操作數地址不易修改。

  • 間接尋址

指令的地址字段給出的形式地址不是操作數的真正地址,而是操作數有效地址所在存儲單元的地址,即EA=(A)。


優點是可以擴大尋址范圍(有效地址EA的位數大于形式地址A的位數),缺點為指令執行過程中需要多次尋址。

  • 隱含尋址

不是明顯的給出操作數的地址,而是在指令中隱含著操作數的地址。


優點是有利于縮短指令字長,缺點為需要增加存儲操作數或隱含地址的硬件。

  • 寄存器尋址

在指令字中直接給出操作數所在的寄存器編號,即EA=Ri,其操作數在有Ri所指的寄存器內。


優點為指令在執行階段不用訪問主存,只訪問寄存器,指令字短且執行速度快,支持向量/矩陣運算,缺點為寄存器價格昂貴,計算器中寄存器個數有限。

  • 寄存器間接選址

寄存器Ri中給出的不是一個操作數,而是操作數所在主存單元的地址,EA=(Ri)。


特點是比一般的間接尋址速度更快,但指令的執行階段需要訪問主存(因為操作數在主存中)。

  • 基址尋址

將CPU中的基址寄存器(BA)的內容加上指令格式中的形式地址A,而形成操作數的有效地址,即為EA=(BR)+A。


優點是便于程序“浮動”,方便實現多道程序并發運行。

  • 變址尋址

有效地址EA等于指令字中的形式地址A與變址寄存器IX的內容相加之和,即EA=(IX)+A,其中IX可謂編制寄存器(專用),也可用通用寄存器作為變址寄存器。與基址尋址的方式的區別在于IX可以被用戶修改。


優點:在數組處理過程中,可設定A為數組的首地址,不斷改變編制寄存器IX的內容,便可以很容易形成數組中任一數據的地址,特別適合編制循環程序。

  • 相對尋址

把程序計數器PC的內容加上指令格式中的形式地址A而形成操作數的有效地址,即EA=(PC)+A,其中A為相對于PC所指地址的位移量,可證可負,補碼表示。


優點:操作數的地址不是固定的,它隨著PC值的變化而變化,并且于指令地址之間總是相差一個固定值,便于程序浮動。

  • 堆棧尋址

操作數存放在堆棧中,隱含使用堆棧指針(SP)作為操作數地址。其中的堆棧是存儲器中一塊特定的按“后進先出(LIFO)”原則管理的存儲區,該存儲區中被讀/寫單元的地址使用一個特定的寄存器給出的,該寄存器稱為堆棧指針(SP)(類似于程序計數器PC)。

基于堆棧尋址,下圖所示為一個加法運算的過程:

step1:堆棧指針SP指向R0,對應數據0001出棧進入ACCSP指向R1

step2:SP對應數據1001出棧進入寄存器X,SP指向R2;

step3:ALU計算ACC與X的和(為1010),送至寄存器Y;

step4:計算結果入棧,SP指向R1,將Y1010)送至堆棧寄存器R1


依據堆棧數據存放位置可分為硬堆棧和軟堆棧,硬堆棧使用寄存器存放操作數,成本較高,但速度快;軟堆棧使用主存存放操作數,成本低,但速度相對較慢。

不同尋址方式的有效地址的計算方法以及訪存次數匯總如下表:


3.CISC與RISC

指令集的設計,有兩個主流的方向,一個是以X86架構為代表的CISC(Complex Instruction Set Computer),即復雜指令集,另一個則是以ARM架構為代表的RISC(Reduced Instruction Set Computer),即精簡指令集。兩者的設計思路向左。

  • CISC:設計思路為一條指令完成一個復雜的基本功能,一條指令可以由一個專門的電路完成,比較復雜的指令則通過“存儲程序”(微程序)的設計思路,由一個比較通用的電路配合存儲部件完成。典型應用為X86架構,主要應用于筆記本、臺式電腦等;

  • RISC:設計思路為一條指令至完成一個基本“動作”多條指令組合完成復雜的基本功能。典型應用為ARM架構,主要應用于手機、平板等。

如果說“指令”就是計算機硬件系統的語言的話,那么CISC和RISC就是兩種語言系統規范,其中CISC以“單詞”為元素構建語言系統,每一個單詞就可以表達一個意思,而表達復雜的意思,就可以將單詞組合,優點在于簡單,缺點就是單詞可能會很多;而RISC則是以“字母”為元素構建語言系統,每個字母無法表達確切的含義,需要將很多字母組合起來,才能表達豐富多樣含義,其優點在于“元素”的數目較少,只有26個,缺點在于表達任何一個含義,都需要將很多字母組合起來方可。


兩種指令集的對比如下圖所示:


4.小結

本章詳細介紹了指令系統的相關內容,相繼介紹了什么事指令系統以及其在計算機系統中的作用、一條指令的構成(指令格式)、指令以及數據是如何尋址的(尋址方式)以及兩種典型指令系統(CISC和RISC)。

四、CPU

正如蘭德爾-E-布萊恩特在《深入理解計算機系統》中所說的那樣,現代處理器可以稱得上是人類創造除的最復雜的系統之一,一塊指甲大小的硅片上,可以容納一個完整的高性能處理器和大的高速緩存,以及用來連接外部設備的邏輯電路,它是計算機的核心。


如前文所述,CPU主要由運算器和控制器構成,但是這樣的抽象模型顯然不是我們認識的終點,這一章我們將深入CPU的內部,認識CPU的功能以及結構組成、CPU是如何完成指令的提取以及執行、提取的數據是在CPU內部如何流動的、控制器(CU)是如何通過控制信號發揮其調度的作用的以及如何通過流水線理念提升CPU運行效率。


1.CPU的功能和結構

CPU的主要功能有:

  • 指令控制:完成取指令、分析指令執行指令的操作,即程序的順序控制;

  • 操作指令:一條指令的功能往往有若干操作信號的組合來實現的。CPU管理并產生內存取出的每條指令的操作信號,把各種操作信號送往相應的部件,從而控制這些部件按指令的要求進行動作;

  • 時間控制:對各種操作加以時間上的控制,時間控制要為每條指令按時間順序提供應有的控制信號

  • 數據加工:對數據進行算術邏輯運算

  • 中斷處理:對計算機運行過程中出現的異常情況特殊請求進行處理。

CPU的基本結構包括運算器控制器,其中運算器的作用是對數據進行加工;控制器的作用是協調控制計算機各個部件執行程序的指令序列,基本功能包括:1)取指令,自動形成指令地址,發出取指令的命令;2)分析指,對取得的指令( 操作碼+操作數地址 )進行分析,對操作碼進行譯址(分析要完成什么操作),產生操作數的有效地址 EA ;3)執行指令,根據分析指令獲得的“操作命令”和“操作數地址”,形成 操作信號控制序列 ,協調 ALU 、 存儲器 以及 I/O 設備完成相應操作;4)中斷處理,管理總線及I/O,處理異常情況。

1.1 運算器的基本結構

運算器組成主要包括具備算術/邏輯運算功能的ALU和暫存各種輸入/輸出結果的通用寄存器,它們之間通過CPU內部總線進行聯通,如同省道一樣的內部總線簡化了個器件之間的連接線路。


1.2 控制器的基本結構

控器器(CU)的核心是指令譯碼器ID和微操作信號發生器,它們將來在于主存,放置于指令寄存器(IR)的指令進行分析,并產生微操作信號,指揮CPU中的各器件合理有序的開展各項工作,其中指令以及操作數數據從主存/高速緩存,經由地址總線和數據總線以及地址寄存器MAR和數據寄存器MDR,到達CPU,其中地址總線和數據總線就如同更高別的國道。


1.3 組合

將運算系統和控制系統組裝到一起就構成一個功能完整的CPU,其中兩部分之間的數據傳遞通過CPU內部總線進行的。


看似復雜的結構組成圖,其實按照功能可以分為四大塊。


2.指令執行過程


2.1 指令周期

CPU中時間單位主要包括這三個:1)時鐘周期,又稱為振蕩周期,由CPU中的振蕩電路產生,常定義為時鐘脈沖頻率的倒數,是時序中最小的時間單位;2)機器周期,也稱為CPU周期。在計算機中,為了便于管理,常把一條指令的執行過程劃分為若干個階段(如取指、譯碼、執行等),每一階段完成一個基本操作。完成一個基本操作所需要的時間稱為機器周期。一般情況下,一個機器周期由若干個時鐘周期組成 ;3)指令周期, CPU每 取出 一條指令并 執行 這條指令,都要完成一系列的操作,這一系列操作所需要的時間通常叫做一個指令周期。換言之指令周期是取出一條指令并執行這條指令的時間。由于各條指令的操作功能不同,因此各種指令的指令周期是不盡相同的。例如一條加法指令的指令周期同一條乘法指令的指令周期是不相同的 。


每條指令的執行過程都按照下圖所示的流程框圖開展,計算機通過4個觸發器(取指EF、間址IND、執行EX、中斷INT)的狀態判斷指令進行到哪一步。


2.2 指令數據流

取指、間址、執行以及中斷過程中,數據在CPU里是如何流動的。

  • 取指周期

取值周期的主要任務就是從存儲器中取出指令,主要流程為:

step1:當前指令地址送至存儲器的地址寄存器MAR,即(PC)->MAR;

step2:CU發出控制信號,經控制總線傳到主存,這里是讀信號,即1->R;

step3:將MAR所指主存中的內容經數據總線送入MDR,即M(MAR)->MDR;

step4:將MDR中的內容送入指令寄存器IR,即(MDR)->IR;

step5:CU發出控制信號,形成下一條指令地址,即(PC)+1->PC。


  • 間址周期

間址周期的主要任務就是獲得操作數(數據)的有效地址EA,EA的獲取是依據尋址特征形式地址進行操作完成的,以一次間址為例,數據流為:

step1:將指令的地址碼送入MAR,即Ad(IR)->MAR;

step2:CU發出控制信號,啟動存儲器讀操作(R),即1->R;

step3:將MAR所指主存中的內容(EA)經數據總線送入MDR,即M(MAR)->MDR;

step4:將有效地址(EA)送至指令的地址碼字段,即(MDR)->Ad(IR)。


  • 執行周期

執行周期根據IR中的指令字的操作碼操作數通過運算器進行相關操作,產生執行結果,沒有統一的數據流向。

  • 中斷周期

中斷周期的主要任務暫停當前任務取完成其他任務,暫停前需要保存斷點,一般使用堆棧(SP存儲棧頂地址)來保存斷點,具體流程如下:

step1:控制器將SP減1(入棧準備),修改后的地址送至MAR,即(SP)-1->SP,(SP)->MAR;

step2:CU發出控制信號,啟動存儲器寫操作(W),即1->W;

step3:將斷點(PC的內容)經由MDR,寫入SP指向地址的位置

step4:CU控制將中斷服務程序入口地址送入PC,開始執行中斷程序。


2.3 指令執行方案

方案1:單指令周期,所有指令,都選用相同的執行時間完成,取最大值;

方案2:多指令周期,不同指令,選用不同的執行時間;

方案3:流水線方案,盡可能讓多的指令并行執行;

3.數據通路的功能和基本結構

CPU功能的實現是通過運行指令來實現的,而指令運行過程實質就是數據在各部件(運算單元、寄存器等)之間的傳送,數據通路指的是數據在功能部件之間傳送的路徑。如下圖所示,以總線模式介紹CPU運行過程中數據通路是怎樣的(以取指令周期為例)。

一個取指令周期可以分解為若干個微操作,而每一個微操作的實質就是數據的流動,數據流動的幕后則是一系列控制信號通過導通/關閉進行控制 (微操作的實現通過控制信號觸發實現)。

數據通路的基本結構分為兩大類:1)CPU內部總線方式(上文介紹),優點為線路布局簡單,缺點為數據流動過程之中存在沖突,效率相對較低。;2)專用數據通路方式,優點為器件之間都有專用通路,不存在沖突,速度塊;缺點為線路布局復雜。


4.控制器的功能和工作原理

程序運行時,高級語言編寫的代碼經過編譯轉化成一行行0/1二進制代碼(指令)裝入主存,而每一個指令又可以分解為四個機器周期(取指周期、間址周期、執行周期以及中斷周期),而每一個機器周期又可以劃分為若干微操作(數據流動),而這些微操作的展開幕后則是一系列控制信號的導通/關閉操縱著,控制器正是對這些控制信號進行集中管理的部件。


控制器的作用:1)取指令;2)分析指令;3)產生控制信號。實現相關功能結構組成主要三個:1)程序計數器PC,用以指明當前待執行指令在主存中位置;2)指令寄存器IR,用以存放待執行指令,并對指令進行分析,將指令操作碼部分提供給控制單元;3)控制單元CU,也是控制器的核心,依據指令操作碼的要求,綜合節拍發生器提供的時序、機器周期觸發器提供的周期標志以及各執行單元的反饋信號,輸出一組控制指令(微命令),對控制信號集中控制,指導微操作的執行。


上面介紹了CPU控制器功能結構組成以及工作機理,可知控制單元CU是控制器的核心,針對這個核心部件功能實現有兩種實現思路:1)硬布線思路,基于硬件電路的實現;2)微程序思路,基于軟件微指令的實現。這已經是CU設計層面的內容,以下作者只做簡單原理說明,不做具體展開。

4.1 硬布線(硬件思路)

上文將CU抽象為一個黑匣子,其輸入分為4部分(時序信號指令信號、周期標志、反饋信號),輸出為一組控制信號,如下圖所示,硬布線的思路是通過邏輯電路建立輸入信號—輸出信號的聯系,大致過程是先建立輸出-輸入變量之間的邏輯表達式,然后利用數字電路的知識來實現相應邏輯表達式。


硬布線實現過程為純硬件控制,優點為響應速度快,缺點在于設計和實現過程較為復雜,且硬件實現的可擴展性比較差。適用于RISC指令系統,因為指令系統中的指令相對簡單,易于電路實現。

4.2 微程序(軟件思路)

計算機系統層面,軟件實現與硬件實現是等效,控制單元CU輸入信號和輸出信號的本質就是一組0/1編碼的指令,“微程序”的實現過程就是建立輸入信號編碼和輸出信號編碼的映射關系,并將它們存入專用存儲器(控制存儲器CM),運行通過訪存提取控制信號編碼,實現微操作,結構示意圖如下所示。


運行時,CU按照輸入信號編碼,經由微地址形成部件轉化成相應控制信號編碼的地址,訪問CM提取相應控制信號編碼,并送至各控制信號(微指令),實行對應微操作,組合微操作形成指令控制。這一過程與訪問存儲器非常相似,所以很多部件及過程都在“訪存”學名的基礎上加了“”字。微程序控制器的優點在于設計和實現較為簡單,擴展性好,缺點在于微指令執行需要訪存,速度相對較慢,適用于CISC系統,因為指令系統中指令相對較為復雜,易于使用微操作指令實現。

5.指令流水線

相較于順序執行的方式,采用流水線方式,程序執行總耗時大幅縮短。

5.1 理想狀態

理想情況下,各階段花費時間相同,每個階段結束后能立即進入下一階段,此時簡單按流水線理念進行編排,就能大幅提高指令運行效率。


流水線的兩種表示方法:1)指令執行過程圖,主要用于分析指令執行過程;2)時空圖,主要用于分析流水線的性能。



評價流水線的三個性能指標:1)吞吐率,指在單位時間內流水線所完成的任務數量;2)加速比,完成同樣一批任務,不使用流水線所用時間與使用流水線所用時間之比;3)效率,流水線設備利用率。


5.2 非理想狀態

現實情況是,指令批運行過程中,會存在各種沖突的現象,從而影響流水線的運行效率。影響流水線的主要因素分為三類:

  • 結構相關(資源沖突),即多條指令在同一時刻爭用同一資源而形成的沖突;

  • 數據相關(數據沖突),在一個程序中,存在必須要能打前一條指令執行完成才能執行后一條指令的情況,即兩條指令的數據相關;

  • 控制相關(控制沖突),當流水線遇到轉移指令和其他改變PC值的指令而造成斷流時,會引起控制相關。

6.小結

本節中,詳細介紹了CPU的結構組成、運行機理以及其上的數據流動,并深入CPU的核心,介紹控制器的功能、結構組成、運行機理以及兩種實現策略,最后介紹了基于流水線技術的CPU指令高效運行策略。

五.總線

總線是計算機系統中的“高速公路”,為計算機系統中不同硬件間的“交流”提供公共通路并協調其間的“數據流動”能夠始終有條不紊的展開。本章將三個方面展開:1)概述,簡單介紹總線的基本概念、按照不同標準的分類以及4種典型結構;2)總線仲裁與傳輸,重點介紹為解決多設備爭用總線問題的三種仲裁方式以及數據傳輸使用總線的流程;3)總線標準,由于傳輸速度的需求發展以及應用場景的不同而形成種類繁多的總線標準。


1.概述1.1 基本概念

總線是一組能為多個部件分時共享公共信息傳送線路。就如同公共交通中的高速公路??偩€的出現大幅簡化了不同設備間數據傳輸線路。


總線的特性:1)機械特性,尺寸、形狀、管腳數以及排列順序;2)電氣特性,傳輸方向和有效電平范圍;3)功能特性,每根傳輸線的功能(地址、數據、控制);4)時間特性,信號的時序關系。

1.2 總線的分類及經典結構


  1. 按數據傳輸格式分類

按照數據的傳輸的格式分類,可以分為串行總線和并行總線:1)串行總線就像單行道,數據只能只能排著隊按次序逐一傳送,優點在于成本低廉,適合長距離傳輸,缺點是數據在收發過程中需要提前拆卸和裝配;2)并線總線就像雙向六車道,數據無需排隊,并行發送,有點在于邏輯時序比較簡單,無需對數據進行拆卸和裝配,電路實現相對簡單,缺點在于信號線數量多,遠距離傳輸成本高。


  1. 按總線功能分類

按總線的功能進行分類,可分為3種:

  • 片內總線

CPU芯片內部寄存器與寄存器之間、寄存器與ALU之間的公共連接線;

  • 系統總線

主存系統總線按傳輸信息內容的不同,又可以分為3類:1)數據總線,用來傳輸各功能部件間址的數據性,為雙向傳輸線,位數與機器字長、存儲字長有關;2)地址總線,用來指出數據總線上的源數據或目的數據所在的主存單元或I/O端口地址,為單向傳輸線,地址總線的位數與主存地址空間的大小有關;3)控制總線,傳輸控制信息,包括CPU送出的控制命令和主存(或外設)返回CPU的反饋信號。

系統總線按照結構可以分為:1)單總線;2)雙總線;3)三總線;4)四總線。計算機系統結構越復雜,相應的總線結構也會更加復雜。


  • 通信總線

用于計算機系統之間或計算機系統與其他系統(遠程通信設備、測試設備等)之間的信息傳遞。

  1. 按時序控制方式

分為同步總線和異步總線。

1.3 性能指標

總線的性能指標主要包括:1)總線周期,一次總線操作所需時間(包括申請階段、尋址階段、傳輸階段),通常由若干總線時鐘周期構成;2)總線時鐘周期,即機器時鐘周期,由時鐘系統決定;3)總線的工作頻率,總線周期的倒數,實際指一秒能傳遞幾次數據;4)總線的時鐘頻率,即機器時鐘頻率;5)總線寬度,通常為數據總線的根數,決定同時能傳輸數的位數;

6)總線帶寬

總線的數據傳輸速率,總線帶寬=總線工作頻率*總線寬度(bit/s)。

7)總線復用

一種信號線在不同時間傳輸不同類型的信息(比如地址總線與數據總線的復用)。

8)信號線數

地址總線、數據總線以及控制總線3種總線數總和為信號線數。

2.總線仲裁與傳輸2.1 仲裁

如何解決多個設備爭用總線的問題?此時需要引入仲裁策略,分為集中仲裁方式和分布仲裁方式兩大類。集中仲裁的方式有三種:1)鏈式查詢方式;2)計數器查詢方式;3)獨立請求方式。

  • 鏈式查詢方式

總線控制部件接收到總線請求BR后,依照遠近鏈式通過各設備接口檢查請求狀態,通過設備接口0時,發現BR未觸發,便順序檢查設備接口1,發現BR觸發,便向其發出總線允許BG并觸發總線忙BS,設備1接口獲得總線控制權。


  • 計數器查詢方式

總線控制器接收到總線請求BR后,判斷總線處于空閑狀態,計數器開始計數,數值通過設備地址發往各設備接口,當請求設備接口地址與數值一致后,該設備獲得總線控制權,計數器停止計數和查詢,并觸發總先忙BS

?
?

  • 獨立請求方式

有需求的設備各自向總線控制器發送總線請求BR,總線控制器按照一定優先次序向相應設備發送請求允許BG,并觸發總線忙BS,相應設備獲得總線控制權。


三種集中仲裁方式的對比:


分布式仲裁:當設備由總線請求時,各自將其唯一的仲裁號發送到共享的仲裁總線上,各仲裁號相互PK,優先級高的可獲得總線允許。該仲裁方式的特點為:不需要中央仲裁器,每個潛在的主模塊都有自己的仲裁器和仲裁號,多個仲裁器之間爭使用總線。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
當事人寫下日記,當事人多達146名

當事人寫下日記,當事人多達146名

四月十九
2023-09-06 17:57:21
又有百萬級網紅翻車,和女友架空股東,給自己親戚開8萬月薪

又有百萬級網紅翻車,和女友架空股東,給自己親戚開8萬月薪

說歷史的老牢
2025-07-24 09:39:01
朋友說,他曾經跟汪蘇瀧合作過, 汪蘇瀧根本不是網上這個樣子的

朋友說,他曾經跟汪蘇瀧合作過, 汪蘇瀧根本不是網上這個樣子的

手工制作阿殲
2025-07-27 14:48:57
哈爾濱醫科大拒絕了哈工大合并,強強合并被拒絕,新戰場悄然開啟

哈爾濱醫科大拒絕了哈工大合并,強強合并被拒絕,新戰場悄然開啟

侃故事的阿慶
2025-07-27 20:40:44
8月7號立秋,今年立秋不一般,60年一遇,秋老虎兇不兇?早看早準備!

8月7號立秋,今年立秋不一般,60年一遇,秋老虎兇不兇?早看早準備!

農夫也瘋狂
2025-07-26 11:10:03
國際排聯確認女排世錦賽計劃不變,15萬觀眾疏散無傷亡

國際排聯確認女排世錦賽計劃不變,15萬觀眾疏散無傷亡

汪茫的創業之路
2025-07-27 19:21:02
阿斯:C羅將在8月10日對陣阿爾梅里亞的友誼賽中開啟新賽季

阿斯:C羅將在8月10日對陣阿爾梅里亞的友誼賽中開啟新賽季

懂球帝
2025-07-27 23:39:12
青島疾控最新提醒:全民行動!翻盆倒罐、清除積水!

青島疾控最新提醒:全民行動!翻盆倒罐、清除積水!

行走的知識庫
2025-07-27 16:55:10
日本老兵講述親身經歷:在南京大屠殺時,城里富太太們的悲慘遭遇

日本老兵講述親身經歷:在南京大屠殺時,城里富太太們的悲慘遭遇

柳絮憶史
2025-07-23 10:26:43
遼寧后天起連下5天雨!玉米大豆要挺住,這幾個動作抓緊做

遼寧后天起連下5天雨!玉米大豆要挺住,這幾個動作抓緊做

一只奶酪包
2025-07-27 09:20:31
曼晚:若多納魯馬加盟曼聯,俱樂部可為他提供1號或99號球衣

曼晚:若多納魯馬加盟曼聯,俱樂部可為他提供1號或99號球衣

直播吧
2025-07-27 22:13:08
小侄子7歲時走丟,10年后我去巴厘島旅游,突然一個少年叫住我

小侄子7歲時走丟,10年后我去巴厘島旅游,突然一個少年叫住我

球場的看客
2025-07-23 20:22:07
救一家三口犧牲的安徽小伙宋士佳下葬,送行隊伍蜿蜒百米

救一家三口犧牲的安徽小伙宋士佳下葬,送行隊伍蜿蜒百米

極目新聞
2025-07-27 18:53:01
在上海的外地人有多難?為什么上海都已經做到這樣了,還在說難?

在上海的外地人有多難?為什么上海都已經做到這樣了,還在說難?

上海云河
2025-07-27 16:32:13
陰毛有什么作用?要刮掉嗎?陰毛變白預示著什么?很多人還不知道

陰毛有什么作用?要刮掉嗎?陰毛變白預示著什么?很多人還不知道

醫者榮耀
2025-06-22 12:05:07
這也能掙錢?公園里大媽收錢和大爺跳舞,不給錢碰都不能碰

這也能掙錢?公園里大媽收錢和大爺跳舞,不給錢碰都不能碰

唐小糖說情感
2025-07-15 09:31:29
蔣凡再造一個“美團”?

蔣凡再造一個“美團”?

表外表里
2025-07-28 00:13:33
潘展樂打破歐美壟斷,心理戰術加持中國游泳新王登基

潘展樂打破歐美壟斷,心理戰術加持中國游泳新王登基

黑叔侃事
2025-07-27 10:34:31
女子家中總停電,電工查不出問題準備搬走,樓下鄰居慌了

女子家中總停電,電工查不出問題準備搬走,樓下鄰居慌了

黃家湖的憂傷
2025-07-25 17:34:55
“大尺度”女星的瓜!

“大尺度”女星的瓜!

文刀萬
2025-05-23 06:05:02
2025-07-28 05:03:00
無線深海 incentive-icons
無線深海
無線通信,互聯網有意思的科普
132文章數 351關注度
往期回顧 全部

科技要聞

77歲諾獎得主,用15條句話把AI圈鎮住了!

頭條要聞

釋永信掌舵少林公開《易筋經》 曾豪擲4.5億搞房地產

頭條要聞

釋永信掌舵少林公開《易筋經》 曾豪擲4.5億搞房地產

體育要聞

約克雷斯身邊的男人,才是阿森納的最佳引援

娛樂要聞

X玖少年團9成員現狀揭秘:2人成頂流

財經要聞

陳文輝:為什么耐心資本這么重要?

汽車要聞

搭載華為乾崑智駕 一汽奧迪Q6L e-tron預售35.3萬起

態度原創

藝術
數碼
健康
公開課
軍事航空

藝術要聞

故宮珍藏的墨跡《十七帖》,比拓本更精良,這才是地道的魏晉寫法

數碼要聞

海爾推出追光 H1 洗地機:20000Pa 吸力+綠光顯塵,2099 元

呼吸科專家破解呼吸道九大謠言!

公開課

李玫瑾:為什么性格比能力更重要?

軍事要聞

官方披露:山東艦5年起降近萬架次艦載機

無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 罗甸县| 正安县| 山阴县| 天峨县| 河曲县| 虎林市| 曲麻莱县| 广汉市| 蒲江县| 祥云县| 会东县| 敦煌市| 滨海县| 泾川县| 崇州市| 柞水县| 慈溪市| 井陉县| 阳泉市| 措勤县| 淮北市| 嘉定区| 乌审旗| 鄂伦春自治旗| 中山市| 拉孜县| 洞头县| 广州市| 成都市| 祁阳县| 浦江县| 临湘市| 丰原市| 宁晋县| 石门县| 洞头县| 丹江口市| 开鲁县| 合江县| 辽阳市| 梁河县|