https://www.toutiao.com/article/7234693022976803368/?log_from=8911e06e6caa9_1684549950901
依托于“計算電磁學”的發(fā)展,電磁CAE技術已經深刻的改變了硬件設計流程,但是僅僅依賴于CAE商用軟件的仿真計算以及設計師的手動調參或者相對低層次的自動掃參功能,越來越難以支撐起卓越的硬件設計。學習和掌握最前沿的設計理念、優(yōu)化策略,依靠扎實的數(shù)理基礎將問題轉化為數(shù)理模型,并依托堅實的編程素養(yǎng)將定性的設計理念數(shù)字化、程序化,深度嵌入硬件的設計階段,會否給硬件設計帶來更多可能?
計算機是迄今為止最為復雜的一個系統(tǒng)之一,其作用在于按照確定的順序完成認類預設好的指令,而這些預設好的指令就是我們所熟知的程序。
所謂復雜系統(tǒng),一方面因為其構成元素的晶體管數(shù)量十分巨大,一顆指甲蓋大小的CPU核心就包含數(shù)以億級的晶體管,另一方面在于其功能十分強大,簡單的堆數(shù)量并不能成就強大的系統(tǒng),計算機系統(tǒng)的強大源于其將海量的晶體管進行互連、按照嚴密的組織規(guī)則讓其分工、協(xié)作,從而實現(xiàn)了遠超個體能力的復雜功能。這與細胞-器官-智慧生命的實現(xiàn)邏輯一致?!?strong>計算機系統(tǒng)“正是關注這個復雜系統(tǒng)的搭建過程以及工作機理:1)硬件層面,晶體管-計算機組件-功能完善的計算機;2)軟件層面,0/1二進制-信息的表示與處理-指令系統(tǒng)。
現(xiàn)在我們自頂而下開始簡單認識一下計算機硬件系統(tǒng)的具體組成。計算機硬件系統(tǒng)的基本組成包括兩個部分:1)主機(計算機核心部分);2)I/O設備(鍵盤、鼠標、顯示器、光驅等)。其中主機由CPU和主存組成,CPU則主要包括運算器(執(zhí)行邏輯、算術運算)和控制器(指揮程序的運行),主存用以存放程序和數(shù)據(jù)。
打開任意筆記本的銷售頁面,配置參數(shù)表均介紹了該計算機的主要性能參數(shù),其中最主要的參數(shù)正是:1)CPU型號;2)內存(即主存)容量;3)硬盤容量(即輔存容量)。
CPU的主要功能就是執(zhí)行指令,結構組成主要包括運算器和控制器,各組件的功能為:
主存儲器就是一個臨時貨柜,用以存放待運行程序翻譯而成的各種指令(數(shù)據(jù)),組成包括三個部分:1)存儲體,其如同貨柜一樣存放著海量的程序或數(shù)據(jù);2)MAR,地址寄存器,臨時存放待取程序或數(shù)據(jù)的地址(如同取件碼);3)MDR,數(shù)據(jù)寄存器,臨時存放待取程序或數(shù)據(jù)(就如同待取包裹)。
復雜、龐大的系統(tǒng)想要運行有序,就必須要一套科學合理的組織架構保駕護航,就如同大公司的組織架構,計算機各部組件相互之間分工協(xié)作需要通過計算機硬件架構來進行保障。計算機硬件的組織形式主要分為兩種:1)馮-諾伊曼結構;2)現(xiàn)代計算機結構。
計算機科學家馮-諾依曼確立了現(xiàn)代計算的基本組成以及組織架構,即“馮-諾依曼結構”,結構組成包括運算器、控制器、存儲器、輸入設備以及輸出設備五大部分,組織結構如下圖所示,結構特點是以CPU為中心的組織形式,所有數(shù)據(jù)流動、程序運行以及結果輸出均由CPU執(zhí)行和居中協(xié)調。
如果將計算機比作一個公司的話,五大部件大抵可以做如下類比,運算器就如同生產部門,存儲器就如同倉儲部門,所有的采購原材料以及加工好產品的產品都需要經過生產部門,再送達倉儲部門等相關部門,這顯然讓生產部門做了很多職責范圍外的活,降低了生產效率。因此現(xiàn)代計算機結構對五大部件的組織形式進行了優(yōu)化,那便是“現(xiàn)代計算機結構”。
現(xiàn)代計算機結構以存儲器為核心,所有輸入的數(shù)據(jù)/程序以及輸出的計算結果,均先存入存儲器,然后在被送往CPU進行執(zhí)行或送至輸出設備?,F(xiàn)代計算機結構有效的為CPU減負,讓CPU更加專注的進行指令執(zhí)行,大幅提高了效率。
以上,我們就基本完成了一個計算機硬件系統(tǒng)的搭建,那么這個系統(tǒng)是如何工作的,各部組件之間又是如何分工協(xié)作,確保預先設置的指令暢通無阻的運行的。
過程大致是這樣的:當你打開手機上的某個APP時,后臺其實是用高級語言編寫的代碼在運行,這些代碼經過一個叫編譯器的東西翻譯成計算機硬件認識的機器語言(一行行二進制代碼),然后經由I/O裝入主存的存儲體中。
當以機器語言表示的指令和數(shù)據(jù)裝入主存后,CPU就開始訪問主存提取指令并開始執(zhí)行,具體過程如下所示:
step1:程序計數(shù)器PC指向當前指令地址#01,并將地址送至主存的地址寄存器MAR;
step2:存儲體根據(jù)MAR的取件碼,將對應位置的數(shù)據(jù)發(fā)給數(shù)據(jù)寄存器MDR;
step3:MDR將指令發(fā)給控制器的指令寄存器IR,進行指令分析;
step4:IR將指令的操作碼發(fā)給控制單元CU,將地址碼發(fā)MAR,CU依據(jù)操作碼通知運算器要進行何種操作;
step5:存儲體根據(jù)MAR的取件碼,將#04地址對應的數(shù)據(jù)經由MDR傳給運算器的ACC進行運算。
如此這般,就大致了解了計算機的各硬件是如何協(xié)作,確保程序順利運行的。
入門之后,該部分將從“軟件”和“硬件”兩個方面,正式深入計算機各分系統(tǒng),介紹它們的結構組成、工作機理。
一、信息的表示與處理
二進制是信息科學的基礎,就如同晶體管是計算機硬件系統(tǒng)的基礎?,F(xiàn)代計算機存儲和處理以二值信號表示的信息。這些普通的二進制數(shù)字,或者位(bit),形成了數(shù)字革命的基礎。
我們熟悉的數(shù)學理論是建立在關于十進制的信息表示和處理的理論基礎之上的,但是十進制的每一個位狀態(tài)包含10種(0~9),狀態(tài)過多,不利于工程實現(xiàn),然而二進制的一個位狀態(tài)只包含兩種(0,1),存儲和處理信息的機器時,二進制值工作得更好。二值信號能夠很容易地表示、存儲和傳輸,例如,可以表示為穿孔卡片上有洞或無洞、導線上的高電壓或低電壓,或者磁場引起的順時針或逆時針。
本章主要分為三部分內容:1)信息存儲,主要介紹關于二進制理論基礎的一些基本概念;2)整數(shù)的表示與計算,介紹利用無符號數(shù)和二進制補碼對整數(shù)進行表示和運算的理論基礎;3)浮點數(shù)的表示與運算,介紹利用二進制版本的科學記數(shù)法表示實數(shù)的方法及其相關運算性質。
我們生活的現(xiàn)實世界是建立在十進制基礎之上的,而計算機硬件卻只能讀懂0/1二進制語言,兩個世界要建立緊密的聯(lián)系就離不開各種進制之間的轉換。最常見的就是十進制、二進制、8進制以及16進制之間的相互轉化。其中十進制、8進制以16進制與二進制之間相互轉化方式如下,十進制、8進制以及16進制三者之間的相互轉化可以通過二進制中轉實現(xiàn)。
大多數(shù)計算機使用8位的塊,或者叫做字節(jié),來作為最小的可尋址的存儲單位,而不是對存儲器中的每一個位(bit)進行訪問,存儲器的存儲體可以被視為一個非常大的字節(jié)數(shù)組,稱之為虛擬存儲器的每一個字都有一個“門牌號”,即為地址。所有地址組成的集合為虛擬內存地址空間,空間的大小就是計算機的字長,如32位計算機,虛擬地址的空間限制為4GB,64位就是8GB。
常用的數(shù)據(jù)類型有這么幾種,字符型、整數(shù)型以及浮點型,其中字符型一般用來存儲字符串中的單個字符,整數(shù)型則用來存儲各種長度的整數(shù),浮點型則是用來存儲不同精度的浮點數(shù)。
如果一個數(shù)據(jù)跨越多個存儲字節(jié),那么就必須要對數(shù)據(jù)的存放順序進行規(guī)定,幾乎所有機器,多字節(jié)對象都被儲存在連續(xù)的字節(jié)序列中。對表示一個對象的字節(jié)序列排序,由兩種通用的規(guī)則:1)大端模式;2)小端模式。
如圖所示,在地址#1~#4所指向的內存中,存儲16進制數(shù)據(jù)01234567H,其中“01”表示數(shù)據(jù)的高有效位(8bit),“67”表示數(shù)據(jù)的低有效位,則將高有效位放在前面為大端模式;將高有效位放在后面為小端模式。
字符串是由一個個字符組成的,而在計算機中,每一個字符與“0/1”建立聯(lián)系是通過ASCII編碼(8bit)的方式來實現(xiàn)的,其中ASCII值為16進制表示。
所謂位運算,即以二進制表示的數(shù)據(jù)的每一位可以作為一個個體進行相應的布爾運算,主要運算為與&、或|、非~以及異或^,可以參與位運算的數(shù)據(jù)類型為任意“整型”(如char、int、short int、long int和unsigned int)。
邏輯運算(或||、與&&、非!)的運算性質與位級運算顯著不同,功能也完全不同,邏輯運算認為所有的非零數(shù)據(jù)均為TRUE,而數(shù)據(jù)零為FALSE,運算的結果為1或0,代表TRUE或FALSE。
移位運算,以向左或者向右移動位模式。左移表示為x<<k,丟棄左端的k位,低位補0;右移表示為x>>k,但是右移的具體操作則份兩種情況:1)邏輯右移為高位補0;2)算術右移為高位補最高有效位,具體操作如下圖所示。對于無符號數(shù)據(jù),右移必須為邏輯的,對于有符號數(shù)據(jù),幾乎所有的機器都默認算術移位。
本節(jié)將介紹整數(shù)的兩種表示方式,一種只能表示非負數(shù),另一種則能夠表示負數(shù)、零和正數(shù)。其數(shù)學屬性與后續(xù)的機器級實現(xiàn)有很強的關聯(lián)。
所謂無符號數(shù),就是沒有“+/-”號的數(shù),其只能表示非負數(shù),其二進制編碼表示與真值之間的映射關系為:
即w位的無符號二進制編碼,其真值可以上述公式進行計算,其建立了二進制編碼(類似w維向量)與真值(類似w維向量的模)的一一映射的關系,公式看似復雜,其實就是前面二進制轉十進制所用到的冪乘求和法。
對于有符號數(shù)(即包含“+/-”號),則需要給符號位編碼,以區(qū)分正負數(shù)。具體執(zhí)行有兩種方案:
需要說明的是,原碼在表示有符號數(shù)的時候存在一些先天缺陷,如下圖所示:+5和-5的原碼定義下的二進制表示相加后結果為-10,顯然與實際不相符,而使用補碼定義,則計算結果為0,與實際吻合。因此,有符號數(shù)的表示絕大部分情況下都是用補碼方案。
不同類型的數(shù)據(jù)的二進制表示以及其真值的計算方法如下圖所示,其中有符號數(shù)的反碼定義為原碼到補碼轉換的過渡形式,實際沒什么作用。
所謂有符號數(shù)和無符號數(shù)的轉化,其實并沒有改變二進制的位表示,只是因為二進制數(shù)每一個“位”的解釋因為有符號數(shù)和無符號數(shù)的定義的不同而不同,從而導致二進制數(shù)所表示的真值發(fā)生變化。
從二進制補碼到無符號數(shù)的轉換,通過公式和圖示,分別如下圖所示:
從無符號數(shù)轉換到二進制補碼,則正好反過來,公式和圖示分別如圖所示:
常見的運算比如不同字長的整數(shù)之間進行轉換,字長短的二進制數(shù)轉換至字長長的二進制數(shù),則需要擴展位,字長長的數(shù)轉換至字長短的數(shù),則需要進行截斷。
二進制補碼和無符號數(shù)的擴展的方式也有所不同:1)無符號數(shù)的擴展為高位補0;2)二進制補碼的擴展則是高位補最高有效位。這種擴展規(guī)則的制定,是保證擴展前后的二進制所表示的真值沒有發(fā)生變化。
截斷會改變二進制所表示的真值,對于無符號數(shù)字x,截斷它到k位的結果就相當于計算mod(即真值對取模),總之無符號數(shù)和二進制補碼的截斷結果可以分別表示為如下形式:
整數(shù)的運算主要圍繞無符號數(shù)和二進制補碼展開的,常用的運算主要有:1)加法運算;2)非運算;3)乘法運算;4)乘以2的冪運算;5)除以2的冪運算。
對于加法運算,我們通常關心計算結果有無溢出的情況,對于無符號數(shù)和二進制補碼,其加法計算結果如下所示:
對于乘法運算,我們可以看到,無論是無符號數(shù)亦或是二進制補碼運算,乘法運算都可等效的通過“位”截斷來實現(xiàn),無需添加專門的乘法器即可實現(xiàn),體現(xiàn)出了極大的便利性。其中無符號數(shù)和二進制補碼的乘法運算結果分別如下所示:
對于乘以2的冪和除以2的冪運算,計算過程可以通過移位運算來實現(xiàn),從而大幅提高了運算便利性。其中:1)乘以,無論對于無符號數(shù)還是二進制補碼,可以通過左移k位來等效實現(xiàn);2)除以,對于無符號數(shù)還是二進制補碼,則是通過算術右移k等效實現(xiàn)(其中無符號數(shù)高位補0,二進制補碼高位補最高位)。
3.浮點數(shù)的表示和運算
浮點數(shù)表示形式為-的有理數(shù)進行編碼。其中s為符號位(1位,只有兩種狀態(tài)0/1,表示+/-),M為有效數(shù)(n位,),E為指數(shù)(k位,--),對于二進制表示,僅需要對這三個數(shù)進行編碼即可。對于單精度浮點格式(float,32位),k=8,n=23;對于雙精度格式(double,64位),k=11,n=52。已知浮點數(shù)的二進制編碼表示,求解浮點數(shù)的真值,計算結果如下。
需要說明的是:針對指數(shù)的編碼是否為全0/1,浮點數(shù)編碼對應的真值存在兩種計算方法:
3.2 浮點數(shù)運算
浮點數(shù)的加法運算,不同于整數(shù)的加法運算性質,缺失了很多屬性(比如不滿足結合律和分配律),這里就不再贅述。
“十進制”是現(xiàn)代所有和“數(shù)字”相關理論的基礎,其是我們表征世界最熟悉的一種“方式”,而作為信息世界的基礎,“二進制”則提供了另外一種“方式”,因此建立兩種“方式”的聯(lián)系必不可少(進制轉化),同時需要基于“二進制”,來表征各種數(shù)字(無符號數(shù)、有符號數(shù)、定點數(shù)、浮點數(shù)等)并闡明各類數(shù)學運算的性質,而這些就是第一章所要介紹的全部。
存儲系統(tǒng)就如同計算機系統(tǒng)中的“倉庫”,用于存放程序、指令、數(shù)據(jù)等各類信息,將分為三個部分展開:1)什么是“存儲系統(tǒng)”,介紹存儲器的抽象模型以及基于存取速度梯度而成的層次結構;2)為什么稱之為“系統(tǒng)”,介紹紛繁多樣的存儲技術,并基于“局部性原理”的存儲系統(tǒng)的金字塔結構;3)“存儲系統(tǒng)”如何運行,重點介紹存儲系統(tǒng)結構組成以及其中最為重要的“主存”和“高速緩存”,闡述它們是如何與CPU協(xié)調共事,順利完成數(shù)據(jù)存取。
1.什么是“存儲系統(tǒng)”
如上圖所示,到目前為止,在我們對計算機系統(tǒng)的研究中,我們依賴于一個簡單的計算機系統(tǒng)模型,CPU執(zhí)行指令,而存儲器為CPU存放指令和數(shù)據(jù)。在這個簡單模型中,存儲器系統(tǒng)是一個線性的字節(jié)數(shù)組,而CPU能夠在一個常數(shù)時間內訪問每個存儲器位置。再具體一點,就如下圖所示,其包含一個存儲體(用以存放數(shù)據(jù)),然后就是兩個接口(地址接口,數(shù)據(jù)接口),雖然至今為止這都是一個有效的具體模型,但是它沒有反映現(xiàn)代系統(tǒng)實際工作的方式。
實際上,存儲器系統(tǒng)(memory system)是一個具有不同容量、成本和訪問時間的存儲(storage)設備的層次結構。CPU寄存器保存著最常用的數(shù)據(jù)??拷麮PU的小的、快速的高速緩存存儲器(cache)的緩沖區(qū)域。主存暫時存放存儲在較大的慢速磁盤上的數(shù)據(jù),而這些磁盤常常又作為存儲在通過網(wǎng)絡連接的其他機器的磁盤或磁帶上的數(shù)據(jù)的緩沖區(qū)域。
信息技術發(fā)展至今,存儲技術日新月異,如何存儲二進制信息,方式也十分豐富。
按照存儲介質的類型,存儲器可以分為:1)半導體存儲器(主要用于主存和Cache);2)磁表面存儲器(主要有磁盤和磁帶);3)光存儲器(主要有光盤等)。
其中,半導體存儲器發(fā)展迅速,也有很多分類:
SRAM為靜態(tài)隨機訪問存儲器:其存儲單位為一個雙穩(wěn)態(tài)電路,每個單元用用6個晶體管電路實現(xiàn),只要有電,其可以無限期的保持兩個電壓配置或穩(wěn)定狀態(tài),電路復雜度相對較高,因此成本相對較高,一般用于高速緩存和CPU中的寄存器;
DRAM為動態(tài)隨機防蚊存儲器:其每一個位的存儲元器件位電容,通過電容的充放電來表征二進制0/1狀態(tài),DRAM的存儲單元對對干擾非常敏感,成本較SRAM便宜很多,一般用于主存(內存條)。
ROM(read only memory)只讀存儲器,只能讀,不能寫。不同于RAM(斷電之后,DRAM和SRAM存儲的信息就會丟失),ROM屬于非易失性存儲器,即使關掉電源,其存儲的信息也不會丟失。存儲在ROM設備中的程序通常被稱為固件(firmware),當計算機通電后,它會運行存儲在ROM中固件。一些系統(tǒng)在固件中提供了少量最基本的輸入輸出函數(shù)(如BIOS例程),復雜設備,如圖形卡和磁盤驅動器,也依賴固件翻譯來自CPU的I/O請求。
磁盤:結構組成包括盤片(存儲數(shù)據(jù))、主軸(帶動盤片旋轉)以及讀寫頭(讀取盤片上的信息)。盤片位磁盤的核心部件,上面劃分為了許多同心圓(磁道),磁道上交替分布了許多扇區(qū)(扇區(qū)之間使用間隙進行分割),磁盤以扇區(qū)位為單位進行數(shù)據(jù)存儲。
以上,我們知道二進制0/1信息的存儲方式由許多種,在計算機系統(tǒng)的搭建時,我們該如何去選擇這些存儲器呢?
誠如上面所介紹的那樣,雖然以上的設備都可以存儲信息,但是它們的性能和成本卻相去甚遠。
正因如此,為了兼顧計算機系統(tǒng)的成本、容量(存儲字數(shù)*字長)以及速度(數(shù)據(jù)寬度/存儲周期),計算機存儲設備不是簡單的選擇哪一種技術體制,而是
依據(jù)存儲設備距離計算機大腦(CPU)的遠近,按照傳輸速度的由快至慢來布局存儲系統(tǒng)。從而形成了“金字塔結構”的存儲系統(tǒng)布局設計。
如圖所示,以我的筆記本電腦的存儲系統(tǒng)為例,其基本組成為:1)CPU中配備了三級高速緩存(L1/L2/L3),容量分別為256KB、1.0MB和 6.0MB,依次增大;2)電腦主存為7.9GB的DRAM;3)輔存磁盤為239GB的SSD(固態(tài)硬盤)??梢钥闯?,存儲設備越遠離CPU,存儲容量越大。
如上文所說,為了平衡容量、成本和傳輸速度,我們設計了一個“金字塔形式”的存儲系統(tǒng)層次結構,這樣的結構能否實現(xiàn)數(shù)據(jù)在存儲系統(tǒng)各存儲設備之間順暢的“上上下下”,保證計算機系統(tǒng)的暢通運行?
“局部性原理”為這個結構的合理性提供了理論基礎。所謂局部性原理,即一個編寫良好的計算機程序傾向于引用的數(shù)據(jù)項臨近于其他最近引用過的數(shù)據(jù)項,或是臨近于自我引用的數(shù)據(jù)項。這一原理對軟件系統(tǒng)和硬件系統(tǒng)的設計都有著極大的影響。局部性通常由兩種形式:1)時間局部性,即被引用過一次的存儲器位置可能在不遠的將來被多次引用;2)空間局部性,即一個存儲器位置被引用了一次,那么程序可能在不遠的將來引用附近的存儲器位置。
局部性原理在工程中有著現(xiàn)實的需求,比如說硬件層面,計算機通過引入高速緩存,提前將主存中位置相鄰的數(shù)據(jù)集拷貝至高速緩存,從而利用高速緩存的速度優(yōu)勢,提高數(shù)據(jù)傳輸速度。
3.“存儲系統(tǒng)”如何運行
上面,我們知道了存儲系統(tǒng)中的各設備是按照其與CPU的“遠近親疏”,層次漸進的構成了一個“金字塔結構”布局。本節(jié),我們將深入了解這些存儲設備相互之間以及與CPU 之間究竟是如何連接以及分工寫作的。
如上圖所示,數(shù)據(jù)在存儲系統(tǒng)的運行過程大致是這樣的:1)各種應用APP都被安裝在計算機的C盤/D盤(ROM)中,由于ROM的非易失性,即使斷電,安裝在里面的APP也不會被刪除;2)當你打開電腦,啟動微信APP時,相關運行程序就會被拷貝到主存中,開始運行;3)高速緩存載從主存中拷貝數(shù)據(jù)/程序子集,以備CPU及時調用;4)CPU從高速緩存中取指令、數(shù)據(jù)進行處理,輸出預期的結果給使用者。
以上的敘述,我們還是將主存作為一個抽象的黑匣子進行分析,現(xiàn)在我們將要深入主存內部,去一探主存的組成和運行機理。
由上文可知,主存的基本組成包括三部分:1)存放數(shù)據(jù)的存儲體,其類似于貨柜,一個個數(shù)據(jù)如同包裹;2)地址寄存器,用以存放CPU待取數(shù)據(jù)的地址,就如同取包裹時的取件碼;3)數(shù)據(jù)寄存器,用以臨時存放CPU待取數(shù)據(jù),就如同待取的包裹。三者之間的有序開展有賴于時序控制邏輯協(xié)調。
繼續(xù)深入存儲體的結構細節(jié),就是密密麻麻的集成電路組成,其基本組成如下圖所示:存儲體被綠色縱線和紅色橫線劃分成很多小方塊(構成存儲矩陣),每個小方塊就是一個存儲“位”,它由一個MOS管和一個電容構成,其中電容就相當于“蓄水池”,可以存水,亦可以放水,有水就是“1”,沒水就是“0”;MOS管則相當于水管閥門,控制是否存水或防水,對應的就是是否“寫入”或“讀出”電容里的數(shù)據(jù)。因此連接水管出水口的“綠線”就是寫入或者讀出存儲單元里面的數(shù)據(jù),將8個存儲“位”就構成一個存儲“字”,而連接開關閥門G的“紅線”就決定是否允許相應的單元被寫入或讀出數(shù)據(jù),將紅線統(tǒng)一連接到地址寄存器,就可以通過地址寄存器的數(shù)據(jù)控制哪個位置的數(shù)據(jù)被選通。
其實將“紅線”直接連接地址寄存器(MAR)是相當浪費的,因位紅色控制線終究只有一根線導通(對應“1”),而其他線均關閉(對應“0”),所以n條地址線僅僅確定了n個狀態(tài),這遠低于
個狀態(tài),資源浪費,通過橋接一個譯碼器,就可以通過n位地址線控制
個狀態(tài),從而充分利用資源。通過讀寫控制線確定當前存儲器的讀寫狀態(tài)。
忽略電路細節(jié),主存就是一個包含著一組地址線引腳和數(shù)據(jù)線引腳的封裝芯片,外加讀寫控制線引腳,以及片選線引腳(由于主存芯片由多個芯片并行而成,片選線控制使用哪一個存儲芯片)。
存儲器的總容量=存儲單元數(shù)*存儲字長(存儲單元包含的位數(shù)),如8KB,其中1B(字)=8bit(位),所以8KB=8K*1B=
*8bit,即地址線有13位,數(shù)據(jù)線8位。
以上,我們算是把主存剖析清楚了,那么主存又是如何與CPU進行連接的,實現(xiàn)CPU自由讀取貯存在中的數(shù)據(jù)呢。其實很簡單,數(shù)據(jù)線連數(shù)據(jù)線,地址線連地址線即可。
如果主存的容量無法滿足CPU的需求,可以通過存儲器擴展來解決,擴展的方式有兩種:
高速緩存的產生的背景是計算機技術的快速發(fā)展致使主存?zhèn)鬏敂?shù)據(jù)的速度越來越無法匹配CPU的運算速度,從而嚴重影響了計算機的運行速度。
解決方法就是,CPU和主存之間增加一個傳輸速度更快的高速緩存,用以拷貝主存中即將執(zhí)行的程序,以備CPU運算調用。這一策略就如同京東快遞和其他快遞的區(qū)別,京東快遞通過在每個城市自建倉儲,用以提前存放商品,買家下單后,商品通常是直接從倉儲發(fā)貨,而不是產地發(fā)貨,從而實現(xiàn)了“當天達”這樣的高效。
計算機主存相當于一個大蓄水池,而高速緩存就相當于一個小蓄水池,主存事先將數(shù)據(jù)拷貝至高速緩存,如果將主存看作為一個數(shù)據(jù)集合的話,高速緩存就是這個集合的子集,因此必須要明確子集與原集合的映射關系,如此,CPU在從高速緩存中獲取數(shù)據(jù)的時候才不至于混亂。
既然高速緩存Cache相當于主存的一個子集,那就必須要先明確子集與原集合之間的映射關系,高速緩存與主存之間的映射關系主要分為三種:
三種映射方式總結和優(yōu)缺點對比如下:
前面,介紹了高速緩存與主存的映射方式以及不同映射方式下,CPU的訪存方式,訪存結果根據(jù)CPU是否獲得“想要的數(shù)據(jù)”而分為命中和不命中兩種情況,命中就皆大歡喜,這里介紹一下不命中會怎么樣。不命中也分兩種情況:
實際替換時,也有著不同的策略,主要有四種:1)隨機算法(RAND),在滿足要求的塊中,隨機選一個塊進行替換,效果較差;2)先進先出算法(FIFO),優(yōu)先替換最新被調入Cache的主存塊;3)近期最少用(LRU),將最久沒有被使用的主存塊替換掉,基于“局部性原理”,命中率較高;4)最近不常用(LFU),將被訪問次數(shù)最少的主存塊替換掉。
以上介紹了CPU從高速緩存中讀數(shù)據(jù)時的一些策略,但同時CPU的運算結果也要同時寫回高速緩存以及主存,以備后續(xù)使用,這時候也有著不同的策略,針對寫命中和寫不命中兩種情況,處理策略也不盡相同。
本章更加深入的介紹了存儲系統(tǒng),相繼介紹了豐富多樣的存儲技術、不同存儲方式因速度和成本的區(qū)別分別司職于計算機的不同部位,從而形成了“金字塔”形式的層次結構、以及詳細介紹了層次結構的中主存和高速緩存Cache的結構組成、運行機理以及與CPU之間協(xié)調機制。
如下圖所示,我們知道計算機系統(tǒng)構成層次結構是這樣的:晶體管是構成計算機系統(tǒng)的基本元素,其通過高/低電平的切換實現(xiàn)自己的價值;大量晶體管通過不斷套娃構成了超大規(guī)模的集成電路,這些集成電路由于功能的不同可以分飾不同的角色(存儲器、CPU、輸入/輸出等),把這些不同功能的集成電路組合起來就構成了計算機硬件系統(tǒng),然而這個硬件系統(tǒng)只認識0和1組成的機器語言,其與程序員所編寫的程序(高級語言)有著天壤之別,它們之間需要經過編譯器的翻譯才能互通。這些0和1構成的數(shù)據(jù)串就指令,其為計算機運行的最小功能單位,而這些可以實現(xiàn)各種功能的指令所組成的集合就是指令系統(tǒng)。
經過編譯器編譯的指令序列被放入主存的存儲體中,CPU在程序計數(shù)器PC的控制下,一條條的從主存中取出指令,由CPU的控制器進行指令分析,并指揮CPU運算器按照指令要求完成相應的運算處理,具體的運行過程可以參考前文所述。
指令系統(tǒng)一章將從三個方面展開:1)指令格式,介紹一條指令的基本組成以及按照不同標準的分類;2)指令/數(shù)據(jù)尋址,指令運行前需要總主存中提取出來,這就需要尋址,分別介紹指令尋址以及數(shù)據(jù)(指令的被操作數(shù))尋址的各種方式;3)CISC與RISC,介紹兩種主流的指令系統(tǒng)(復雜指令集與精簡指令集),簡單闡明二者的本質區(qū)別、優(yōu)缺點以及典型應用。
指令的格式如下圖所示,由操作碼和地址碼構成,其中操作碼規(guī)定了對操作對象的操作類型(求和、移位等),而地址嗎則指明了操作對象的位置。
由于操作任務的種類不同,指令地址嗎的數(shù)目也有所不同,主要分為:1)零地址指令;2)一地址指令;2)二地址指令;3)三地址指令;4)四地址指令。
一種情況是不需要操作數(shù),如空操作、停機、關中斷等指令;另一種情況是堆棧計算機,兩個操作數(shù)隱含存放在棧頂和次棧頂,計算結果亞輝棧頂。
一種情況是只需要單操作數(shù),如加1、減1、取反、求補等操作;另一種是需要兩個操作數(shù),但是有一個操作數(shù)隱含在某個寄存器(如ACC)。
常用于需要兩個操作數(shù)的算術運算、邏輯運算相關指令。
常用于需要兩個操作數(shù)的算術運算、邏輯運算相關指令,并將計算結果寫入A3。
常用于需要兩個操作數(shù)的算術運算、邏輯運算相關指令,并將計算結果寫入A3,同時告知下個執(zhí)行指令的地址。
指令的分類還可以按照長度和類型進行區(qū)分:1)定長指令字結構,即指令系統(tǒng)中所有指令的長度都是一樣的;2)變長指令字結構,即指令系統(tǒng)中的各種指令的長度不等。
按照操作類型進行分類:1)數(shù)據(jù)傳送類,進行主存和CPU之間的數(shù)據(jù)傳遞(如LOAD:把存儲器中的數(shù)據(jù)放到寄存器中;STORE:把寄存器中的數(shù)據(jù)放入到存儲器);2)算術/邏輯操作,其中算術操作包括加、減、乘、除、增1、減1、求補、浮點運算、十進制運算等,邏輯運算包括與、或、非、異或、位操作、位測試、位清除、位求反等;3)移位操作,包括算術移位、邏輯移位、循環(huán)移位等;4)轉移操作,包括無條件轉移JMP、條件轉移(JZ:結果為0;JO:結果溢出;JC:結果有進位)、調用和返回(CALL和RETURN)、陷阱(Trap)與陷阱指令;5)輸入/輸出操作,CPU寄存器與IO端口之間的數(shù)據(jù)傳遞(端口即IO接口中的寄存器)。
指令尋址的目的在于如何確定下一條指令的存放位置,主要有兩種類型:1)順序尋址,通過程序計數(shù)器PC不斷加1,順序執(zhí)行存儲器中的指令;2)跳躍尋址,由轉移指令(JMP)指出。兩種指令尋址的運行過程如下圖所示。
相較于指令尋址,數(shù)據(jù)尋址的種類則要豐富很多。數(shù)據(jù)尋址的主要任務是確定本條指令的地址碼指明的真實地址。
以一地址指令為例,地址碼的構成包括兩個部分(尋址特征+形式地址),操作數(shù)的的有效地址EA(真實地址)需要通過形式地址按照尋址特征規(guī)定的操作進行處理才能獲得。尋址特征規(guī)定了數(shù)據(jù)尋址的方式,種類繁多,如下圖所示。
無需尋址,形式地址即為操作數(shù)(一般用補碼形式表示)。
優(yōu)點為無需訪存,速度快,缺點為形式地址的位數(shù)限制了操作數(shù)的范圍。
指令中的形式地址A就是操作數(shù)的真實地址,即EA=A。
優(yōu)點是指令結構簡單,指令執(zhí)行僅一次訪存,缺點是A的位數(shù)決定了尋址的范圍,操作數(shù)地址不易修改。
指令的地址字段給出的形式地址不是操作數(shù)的真正地址,而是操作數(shù)有效地址所在存儲單元的地址,即EA=(A)。
優(yōu)點是可以擴大尋址范圍(有效地址EA的位數(shù)大于形式地址A的位數(shù)),缺點為指令執(zhí)行過程中需要多次尋址。
不是明顯的給出操作數(shù)的地址,而是在指令中隱含著操作數(shù)的地址。
優(yōu)點是有利于縮短指令字長,缺點為需要增加存儲操作數(shù)或隱含地址的硬件。
在指令字中直接給出操作數(shù)所在的寄存器編號,即EA=Ri,其操作數(shù)在有Ri所指的寄存器內。
優(yōu)點為指令在執(zhí)行階段不用訪問主存,只訪問寄存器,指令字短且執(zhí)行速度快,支持向量/矩陣運算,缺點為寄存器價格昂貴,計算器中寄存器個數(shù)有限。
寄存器Ri中給出的不是一個操作數(shù),而是操作數(shù)所在主存單元的地址,EA=(Ri)。
特點是比一般的間接尋址速度更快,但指令的執(zhí)行階段需要訪問主存(因為操作數(shù)在主存中)。
將CPU中的基址寄存器(BA)的內容加上指令格式中的形式地址A,而形成操作數(shù)的有效地址,即為EA=(BR)+A。
優(yōu)點是便于程序“浮動”,方便實現(xiàn)多道程序并發(fā)運行。
有效地址EA等于指令字中的形式地址A與變址寄存器IX的內容相加之和,即EA=(IX)+A,其中IX可謂編制寄存器(專用),也可用通用寄存器作為變址寄存器。與基址尋址的方式的區(qū)別在于IX可以被用戶修改。
優(yōu)點:在數(shù)組處理過程中,可設定A為數(shù)組的首地址,不斷改變編制寄存器IX的內容,便可以很容易形成數(shù)組中任一數(shù)據(jù)的地址,特別適合編制循環(huán)程序。
把程序計數(shù)器PC的內容加上指令格式中的形式地址A而形成操作數(shù)的有效地址,即EA=(PC)+A,其中A為相對于PC所指地址的位移量,可證可負,補碼表示。
優(yōu)點:操作數(shù)的地址不是固定的,它隨著PC值的變化而變化,并且于指令地址之間總是相差一個固定值,便于程序浮動。
操作數(shù)存放在堆棧中,隱含使用堆棧指針(SP)作為操作數(shù)地址。其中的堆棧是存儲器中一塊特定的按“后進先出(LIFO)”原則管理的存儲區(qū),該存儲區(qū)中被讀/寫單元的地址使用一個特定的寄存器給出的,該寄存器稱為堆棧指針(SP)(類似于程序計數(shù)器PC)。
基于堆棧尋址,下圖所示為一個加法運算的過程:
step1:堆棧指針SP指向R0,對應數(shù)據(jù)0001出棧進入ACC,SP指向R1;
step2:SP對應數(shù)據(jù)1001出棧進入寄存器X,SP指向R2;
step3:ALU計算ACC與X的和(為1010),送至寄存器Y;
step4:計算結果入棧,SP指向R1,將Y(1010)送至堆棧寄存器R1。
依據(jù)堆棧數(shù)據(jù)存放位置可分為硬堆棧和軟堆棧,硬堆棧使用寄存器存放操作數(shù),成本較高,但速度快;軟堆棧使用主存存放操作數(shù),成本低,但速度相對較慢。
不同尋址方式的有效地址的計算方法以及訪存次數(shù)匯總如下表:
指令集的設計,有兩個主流的方向,一個是以X86架構為代表的CISC(Complex Instruction Set Computer),即復雜指令集,另一個則是以ARM架構為代表的RISC(Reduced Instruction Set Computer),即精簡指令集。兩者的設計思路向左。
如果說“指令”就是計算機硬件系統(tǒng)的語言的話,那么CISC和RISC就是兩種語言系統(tǒng)規(guī)范,其中CISC以“單詞”為元素構建語言系統(tǒng),每一個單詞就可以表達一個意思,而表達復雜的意思,就可以將單詞組合,優(yōu)點在于簡單,缺點就是單詞可能會很多;而RISC則是以“字母”為元素構建語言系統(tǒng),每個字母無法表達確切的含義,需要將很多字母組合起來,才能表達豐富多樣含義,其優(yōu)點在于“元素”的數(shù)目較少,只有26個,缺點在于表達任何一個含義,都需要將很多字母組合起來方可。
兩種指令集的對比如下圖所示:
本章詳細介紹了指令系統(tǒng)的相關內容,相繼介紹了什么事指令系統(tǒng)以及其在計算機系統(tǒng)中的作用、一條指令的構成(指令格式)、指令以及數(shù)據(jù)是如何尋址的(尋址方式)以及兩種典型指令系統(tǒng)(CISC和RISC)。
正如蘭德爾-E-布萊恩特在《深入理解計算機系統(tǒng)》中所說的那樣,現(xiàn)代處理器可以稱得上是人類創(chuàng)造除的最復雜的系統(tǒng)之一,一塊指甲大小的硅片上,可以容納一個完整的高性能處理器和大的高速緩存,以及用來連接外部設備的邏輯電路,它是計算機的核心。
如前文所述,CPU主要由運算器和控制器構成,但是這樣的抽象模型顯然不是我們認識的終點,這一章我們將深入CPU的內部,認識CPU的功能以及結構組成、CPU是如何完成指令的提取以及執(zhí)行、提取的數(shù)據(jù)是在CPU內部如何流動的、控制器(CU)是如何通過控制信號發(fā)揮其調度的作用的以及如何通過流水線理念提升CPU運行效率。
CPU的主要功能有:
CPU的基本結構包括運算器和控制器,其中運算器的作用是對數(shù)據(jù)進行加工;控制器的作用是協(xié)調控制計算機各個部件執(zhí)行程序的指令序列,基本功能包括:1)取指令,自動形成指令地址,發(fā)出取指令的命令;2)分析指令,對取得的指令(操作碼+操作數(shù)地址)進行分析,對操作碼進行譯址(分析要完成什么操作),產生操作數(shù)的有效地址EA;3)執(zhí)行指令,根據(jù)分析指令獲得的“操作命令”和“操作數(shù)地址”,形成操作信號控制序列,協(xié)調ALU、存儲器以及I/O設備完成相應操作;4)中斷處理,管理總線及I/O,處理異常情況。
1.1 運算器的基本結構
運算器組成主要包括具備算術/邏輯運算功能的ALU和暫存各種輸入/輸出結果的通用寄存器,它們之間通過CPU內部總線進行聯(lián)通,如同省道一樣的內部總線簡化了個器件之間的連接線路。
控器器(CU)的核心是指令譯碼器ID和微操作信號發(fā)生器,它們將來在于主存,放置于指令寄存器(IR)的指令進行分析,并產生微操作信號,指揮CPU中的各器件合理有序的開展各項工作,其中指令以及操作數(shù)數(shù)據(jù)從主存/高速緩存,經由地址總線和數(shù)據(jù)總線以及地址寄存器MAR和數(shù)據(jù)寄存器MDR,到達CPU,其中地址總線和數(shù)據(jù)總線就如同更高別的國道。
將運算系統(tǒng)和控制系統(tǒng)組裝到一起就構成一個功能完整的CPU,其中兩部分之間的數(shù)據(jù)傳遞通過CPU內部總線進行的。
看似復雜的結構組成圖,其實按照功能可以分為四大塊。
CPU中時間單位主要包括這三個:1)時鐘周期,又稱為振蕩周期,由CPU中的振蕩電路產生,常定義為時鐘脈沖頻率的倒數(shù),是時序中最小的時間單位;2)機器周期,也稱為CPU周期。在計算機中,為了便于管理,常把一條指令的執(zhí)行過程劃分為若干個階段(如取指、譯碼、執(zhí)行等),每一階段完成一個基本操作。完成一個基本操作所需要的時間稱為機器周期。一般情況下,一個機器周期由若干個時鐘周期組成 ;3)指令周期, CPU每 取出 一條指令并 執(zhí)行 這條指令,都要完成一系列的操作,這一系列操作所需要的時間通常叫做一個指令周期。換言之指令周期是取出一條指令并執(zhí)行這條指令的時間。由于各條指令的操作功能不同,因此各種指令的指令周期是不盡相同的。例如一條加法指令的指令周期同一條乘法指令的指令周期是不相同的 。
每條指令的執(zhí)行過程都按照下圖所示的流程框圖開展,計算機通過4個觸發(fā)器(取指EF、間址IND、執(zhí)行EX、中斷INT)的狀態(tài)判斷指令進行到哪一步。
取指、間址、執(zhí)行以及中斷過程中,數(shù)據(jù)在CPU里是如何流動的。
取值周期的主要任務就是從存儲器中取出指令,主要流程為:
step1:當前指令地址送至存儲器的地址寄存器MAR,即(PC)->MAR;
step2:CU發(fā)出控制信號,經控制總線傳到主存,這里是讀信號,即1->R;
step3:將MAR所指主存中的內容經數(shù)據(jù)總線送入MDR,即M(MAR)->MDR;
step4:將MDR中的內容送入指令寄存器IR,即(MDR)->IR;
step5:CU發(fā)出控制信號,形成下一條指令地址,即(PC)+1->PC。
間址周期的主要任務就是獲得操作數(shù)(數(shù)據(jù))的有效地址EA,EA的獲取是依據(jù)尋址特征對形式地址進行操作完成的,以一次間址為例,數(shù)據(jù)流為:
step1:將指令的地址碼送入MAR,即Ad(IR)->MAR;
step2:CU發(fā)出控制信號,啟動存儲器讀操作(R),即1->R;
step3:將MAR所指主存中的內容(EA)經數(shù)據(jù)總線送入MDR,即M(MAR)->MDR;
step4:將有效地址(EA)送至指令的地址碼字段,即(MDR)->Ad(IR)。
執(zhí)行周期根據(jù)IR中的指令字的操作碼和操作數(shù)通過運算器進行相關操作,產生執(zhí)行結果,沒有統(tǒng)一的數(shù)據(jù)流向。
中斷周期的主要任務暫停當前任務取完成其他任務,暫停前需要保存斷點,一般使用堆棧(SP存儲棧頂?shù)刂?/span>)來保存斷點,具體流程如下:
step1:控制器將SP減1(入棧準備),修改后的地址送至MAR,即(SP)-1->SP,(SP)->MAR;
step2:CU發(fā)出控制信號,啟動存儲器寫操作(W),即1->W;
step3:將斷點(PC的內容)經由MDR,寫入SP指向地址的位置;
step4:CU控制將中斷服務程序入口地址送入PC,開始執(zhí)行中斷程序。
2.3 指令執(zhí)行方案
方案1:單指令周期,所有指令,都選用相同的執(zhí)行時間完成,取最大值;
方案2:多指令周期,不同指令,選用不同的執(zhí)行時間;
方案3:流水線方案,盡可能讓多的指令并行執(zhí)行;
CPU功能的實現(xiàn)是通過運行指令來實現(xiàn)的,而指令運行過程實質就是數(shù)據(jù)在各部件(運算單元、寄存器等)之間的傳送,數(shù)據(jù)通路指的是數(shù)據(jù)在功能部件之間傳送的路徑。如下圖所示,以總線模式介紹CPU運行過程中數(shù)據(jù)通路是怎樣的(以取指令周期為例)。
一個取指令周期可以分解為若干個微操作,而每一個微操作的實質就是數(shù)據(jù)的流動,數(shù)據(jù)流動的幕后則是一系列控制信號通過導通/關閉進行控制(即微操作的實現(xiàn)通過控制信號觸發(fā)實現(xiàn))。
數(shù)據(jù)通路的基本結構分為兩大類:1)CPU內部總線方式(上文介紹),優(yōu)點為線路布局簡單,缺點為數(shù)據(jù)流動過程之中存在沖突,效率相對較低。;2)專用數(shù)據(jù)通路方式,優(yōu)點為器件之間都有專用通路,不存在沖突,速度塊;缺點為線路布局復雜。
程序運行時,高級語言編寫的代碼經過編譯轉化成一行行0/1二進制代碼(指令)裝入主存,而每一個指令又可以分解為四個機器周期(取指周期、間址周期、執(zhí)行周期以及中斷周期),而每一個機器周期又可以劃分為若干微操作(數(shù)據(jù)流動),而這些微操作的展開幕后則是一系列控制信號的導通/關閉操縱著,控制器正是對這些控制信號進行集中管理的部件。
控制器的作用:1)取指令;2)分析指令;3)產生控制信號。實現(xiàn)相關功能結構組成主要三個:1)程序計數(shù)器PC,用以指明當前待執(zhí)行指令在主存中位置;2)指令寄存器IR,用以存放待執(zhí)行指令,并對指令進行分析,將指令操作碼部分提供給控制單元;3)控制單元CU,也是控制器的核心,依據(jù)指令操作碼的要求,綜合節(jié)拍發(fā)生器提供的時序、機器周期觸發(fā)器提供的周期標志以及各執(zhí)行單元的反饋信號,輸出一組控制指令(微命令),對控制信號集中控制,指導微操作的執(zhí)行。
上面介紹了CPU控制器功能、結構組成以及工作機理,可知控制單元CU是控制器的核心,針對這個核心部件功能實現(xiàn)有兩種實現(xiàn)思路:1)硬布線思路,基于硬件電路的實現(xiàn);2)微程序思路,基于軟件微指令的實現(xiàn)。這已經是CU設計層面的內容,以下作者只做簡單原理說明,不做具體展開。
上文將CU抽象為一個黑匣子,其輸入分為4部分(時序信號、指令信號、周期標志、反饋信號),輸出為一組控制信號,如下圖所示,硬布線的思路是通過邏輯電路建立輸入信號—輸出信號的聯(lián)系,大致過程是先建立輸出-輸入變量之間的邏輯表達式,然后利用數(shù)字電路的知識來實現(xiàn)相應邏輯表達式。
硬布線實現(xiàn)過程為純硬件控制,優(yōu)點為響應速度快,缺點在于設計和實現(xiàn)過程較為復雜,且硬件實現(xiàn)的可擴展性比較差。適用于RISC指令系統(tǒng),因為指令系統(tǒng)中的指令相對簡單,易于電路實現(xiàn)。
計算機系統(tǒng)層面,軟件實現(xiàn)與硬件實現(xiàn)是等效,控制單元CU輸入信號和輸出信號的本質就是一組0/1編碼的指令,“微程序”的實現(xiàn)過程就是建立輸入信號編碼和輸出信號編碼的映射關系,并將它們存入專用存儲器(控制存儲器CM),運行通過訪存提取控制信號編碼,實現(xiàn)微操作,結構示意圖如下所示。
運行時,CU按照輸入信號編碼,經由微地址形成部件轉化成相應控制信號編碼的地址,訪問CM提取相應控制信號編碼,并送至各控制信號(微指令),實行對應微操作,組合微操作形成指令控制。這一過程與訪問存儲器非常相似,所以很多部件及過程都在“訪存”學名的基礎上加了“微”字。微程序控制器的優(yōu)點在于設計和實現(xiàn)較為簡單,擴展性好,缺點在于微指令執(zhí)行需要訪存,速度相對較慢,適用于CISC系統(tǒng),因為指令系統(tǒng)中指令相對較為復雜,易于使用微操作指令實現(xiàn)。
相較于順序執(zhí)行的方式,采用流水線方式,程序執(zhí)行總耗時大幅縮短。
理想情況下,各階段花費時間相同,每個階段結束后能立即進入下一階段,此時簡單按流水線理念進行編排,就能大幅提高指令運行效率。
流水線的兩種表示方法:1)指令執(zhí)行過程圖,主要用于分析指令執(zhí)行過程;2)時空圖,主要用于分析流水線的性能。
評價流水線的三個性能指標:1)吞吐率,指在單位時間內流水線所完成的任務數(shù)量;2)加速比,完成同樣一批任務,不使用流水線所用時間與使用流水線所用時間之比;3)效率,流水線設備利用率。
現(xiàn)實情況是,指令批運行過程中,會存在各種沖突的現(xiàn)象,從而影響流水線的運行效率。影響流水線的主要因素分為三類:
本節(jié)中,詳細介紹了CPU的結構組成、運行機理以及其上的數(shù)據(jù)流動,并深入CPU的核心,介紹控制器的功能、結構組成、運行機理以及兩種實現(xiàn)策略,最后介紹了基于流水線技術的CPU指令高效運行策略。
總線是計算機系統(tǒng)中的“高速公路”,為計算機系統(tǒng)中不同硬件間的“交流”提供公共通路并協(xié)調其間的“數(shù)據(jù)流動”能夠始終有條不紊的展開。本章將三個方面展開:1)概述,簡單介紹總線的基本概念、按照不同標準的分類以及4種典型結構;2)總線仲裁與傳輸,重點介紹為解決多設備爭用總線問題的三種仲裁方式以及數(shù)據(jù)傳輸使用總線的流程;3)總線標準,由于傳輸速度的需求發(fā)展以及應用場景的不同而形成種類繁多的總線標準。
總線是一組能為多個部件分時共享的公共信息傳送線路。就如同公共交通中的高速公路??偩€的出現(xiàn)大幅簡化了不同設備間數(shù)據(jù)傳輸線路。
總線的特性:1)機械特性,尺寸、形狀、管腳數(shù)以及排列順序;2)電氣特性,傳輸方向和有效電平范圍;3)功能特性,每根傳輸線的功能(地址、數(shù)據(jù)、控制);4)時間特性,信號的時序關系。
按照數(shù)據(jù)的傳輸?shù)母袷椒诸?,可以分為串行總線和并行總線:1)串行總線就像單行道,數(shù)據(jù)只能只能排著隊按次序逐一傳送,優(yōu)點在于成本低廉,適合長距離傳輸,缺點是數(shù)據(jù)在收發(fā)過程中需要提前拆卸和裝配;2)并線總線就像雙向六車道,數(shù)據(jù)無需排隊,并行發(fā)送,有點在于邏輯時序比較簡單,無需對數(shù)據(jù)進行拆卸和裝配,電路實現(xiàn)相對簡單,缺點在于信號線數(shù)量多,遠距離傳輸成本高。
按總線的功能進行分類,可分為3種:
CPU芯片內部寄存器與寄存器之間、寄存器與ALU之間的公共連接線;
主存系統(tǒng)總線按傳輸信息內容的不同,又可以分為3類:1)數(shù)據(jù)總線,用來傳輸各功能部件間址的數(shù)據(jù)性,為雙向傳輸線,位數(shù)與機器字長、存儲字長有關;2)地址總線,用來指出數(shù)據(jù)總線上的源數(shù)據(jù)或目的數(shù)據(jù)所在的主存單元或I/O端口地址,為單向傳輸線,地址總線的位數(shù)與主存地址空間的大小有關;3)控制總線,傳輸控制信息,包括CPU送出的控制命令和主存(或外設)返回CPU的反饋信號。
系統(tǒng)總線按照結構可以分為:1)單總線;2)雙總線;3)三總線;4)四總線。計算機系統(tǒng)結構越復雜,相應的總線結構也會更加復雜。
用于計算機系統(tǒng)之間或計算機系統(tǒng)與其他系統(tǒng)(遠程通信設備、測試設備等)之間的信息傳遞。
分為同步總線和異步總線。
總線的性能指標主要包括:1)總線周期,一次總線操作所需時間(包括申請階段、尋址階段、傳輸階段),通常由若干總線時鐘周期構成;2)總線時鐘周期,即機器時鐘周期,由時鐘系統(tǒng)決定;3)總線的工作頻率,總線周期的倒數(shù),實際指一秒能傳遞幾次數(shù)據(jù);4)總線的時鐘頻率,即機器時鐘頻率;5)總線寬度,通常為數(shù)據(jù)總線的根數(shù),決定同時能傳輸數(shù)的位數(shù);
6)總線帶寬
總線的數(shù)據(jù)傳輸速率,總線帶寬=總線工作頻率*總線寬度(bit/s)。
7)總線復用
一種信號線在不同時間傳輸不同類型的信息(比如地址總線與數(shù)據(jù)總線的復用)。
8)信號線數(shù)
地址總線、數(shù)據(jù)總線以及控制總線3種總線數(shù)總和為信號線數(shù)。
如何解決多個設備爭用總線的問題?此時需要引入仲裁策略,分為集中仲裁方式和分布仲裁方式兩大類。集中仲裁的方式有三種:1)鏈式查詢方式;2)計數(shù)器查詢方式;3)獨立請求方式。
總線控制部件接收到總線請求BR后,依照遠近鏈式通過各設備接口檢查請求狀態(tài),通過設備接口0時,發(fā)現(xiàn)BR未觸發(fā),便順序檢查設備接口1,發(fā)現(xiàn)BR觸發(fā),便向其發(fā)出總線允許BG并觸發(fā)總線忙BS,設備1接口獲得總線控制權。
總線控制器接收到總線請求BR后,判斷總線處于空閑狀態(tài),計數(shù)器開始計數(shù),數(shù)值通過設備地址發(fā)往各設備接口,當請求設備接口地址與數(shù)值一致后,該設備獲得總線控制權,計數(shù)器停止計數(shù)和查詢,并觸發(fā)總先忙BS。
有需求的設備各自向總線控制器發(fā)送總線請求BR,總線控制器按照一定優(yōu)先次序向相應設備發(fā)送請求允許BG,并觸發(fā)總線忙BS,相應設備獲得總線控制權。
三種集中仲裁方式的對比:
分布式仲裁:當設備由總線請求時,各自將其唯一的仲裁號發(fā)送到共享的仲裁總線上,各仲裁號相互PK,優(yōu)先級高的可獲得總線允許。該仲裁方式的特點為:不需要中央仲裁器,每個潛在的主模塊都有自己的仲裁器和仲裁號,多個仲裁器之間爭使用總線。
占用總線的一對設備如何進行數(shù)據(jù)傳輸?總線周期(總線傳輸流程)的四個階段:
總線標準是計算機內不同模塊互連的規(guī)范。依據(jù)總線在計算機系統(tǒng)中的位置,可以分為:1)系統(tǒng)總線;2)局部總線;3)設備總線、通信總線。
如圖所示為計算機硬件架構,主要硬件模塊之間互連的總線標準以及相關總線接口示意圖如下所示。需要補充說明:
常見的總線標準及其參數(shù)匯總如下,重點需要了解幾個常用總線的名稱、數(shù)據(jù)傳輸格式(并行傳輸、串行傳輸)、應用場景(連接什么硬件模塊),總線位置(系統(tǒng)總線、局部總線或設備總線)。
總線是計算機中分時共享的公共信息通路,就如同高速公路一樣,優(yōu)點是大幅簡化了計算機系統(tǒng)的線路規(guī)模,引入的問題就是總線使用權的分配,從而著重介紹了“仲裁”機制以及總線的“傳輸流程”。最后,介紹了目前常見的一些總線標準、主要參數(shù)及應用場合。
“I/O系統(tǒng)”是計算機核心部分(CPU,主存)與外部設備的“中轉站”,起到了數(shù)據(jù)過渡和中轉協(xié)調的作用,該章主要從四個方面展開:1)基本概念,介紹I/O系統(tǒng)的組成以及I/O控制的方式;2)外部設備,簡單介紹紛繁多樣的外部設備;3)I/O接口,作為I/O系統(tǒng)最重要的部分,介紹其主要功能及一般結構組成,以及內部端口的編址方式;4)I/O方式,重點介紹三種I/O控制方式(程序查詢方式、程序中斷方式以及DMA方式),闡述各種方式的運行機理以及優(yōu)缺點。
一般來說I/O系統(tǒng)由I/O硬件和I/O軟件兩部分組成。其中1)I/O硬件:包括外部設備、I/O接口以及I/O總線等;2)I/O軟件:包括驅動程序、用戶程序、管理程序、升級補丁等。通常采用I/O指令和通道指令實現(xiàn)主機和I/O設備的信息交換。
1)I/O指令
命令碼是CPU指令的一部分,與普通的指令格式略有不同,操作碼指明了CPU要對I/O設備做什么,命令碼指明了I/O接口要對設備做什么。
2)通道指令
通道能識別的指令,通道程序提前編制好放在主存中,在含有通道的計算機中,CPU執(zhí)行I/O指令對通道發(fā)出命令,由通道執(zhí)行一系列通道指令,代替CPU對I/O設備進行管理。
I/O接口:又稱為I/O控制器(設備控制器,一塊芯片,通常集成于主板上),負責協(xié)調主機與外部設備之間的數(shù)據(jù)傳輸。其作用不僅僅只是一個接口,其還相當于一個介于主機和外設之間的調度。
I/O控制方式主要分為4種:
外部計算機系統(tǒng)的外部設備主要分為:1)輸入/輸出設備;2)外部存儲設。紛繁多樣,本節(jié)不做詳細介紹。
輸入設備:鍵盤、鼠標。
輸出設備:顯示器(主要參數(shù):屏幕大小、分辨率、灰度級、刷新頻率、顯示存儲器的容量和貸款)、打印機。
磁盤(存儲機理、結構組成、性能參數(shù)、訪存過程)、光盤存儲器以及固態(tài)硬盤(SSD)。
I/O接口是I/O總線與外設之間的過渡,的主要作用:1)數(shù)據(jù)緩沖,通過數(shù)據(jù)緩沖寄存器(DBR)實現(xiàn)主機與外設工作速度的匹配;2)錯誤或狀態(tài)監(jiān)測,通過狀態(tài)寄存器反饋設備的各種錯誤、狀態(tài)信息,共CPU查用;3)控制和定時,接收從控制總線發(fā)來的控制信號、時鐘信號;4)數(shù)據(jù)格式轉換,串行-并行、并行-串行等格式轉換;5)與主機和設備通信,實現(xiàn)主機-I/O接口-I外設之間的通信。
I/O接口的基本結構:
如圖所示,按照I/O接口的功能需求,其主要結構組成有:1)數(shù)據(jù)緩沖寄存器DBR;2)設備選擇電路;3)設備狀態(tài)標記;4)命令寄存器和命令譯碼器;5)控制邏輯電路。
以控制外設為例介紹一下I/O接口的運行機理:
step1:CPU通過地址線向I/O接口發(fā)出選擇設備的信號,設備選擇電路判斷是否為該設備,核實后更改設備狀態(tài)標記,并經狀態(tài)線通知CPU“我是你要找的人”;
step2:CPU通過命令線經I/O接口的命令寄存器向外設下達傳送數(shù)據(jù)的命令;
step3:外設通過數(shù)據(jù)線向I/O接口的DBR傳送數(shù)據(jù),完事后,經狀態(tài)線通知I/O接口“傳輸完成”;
step4:I/O接口更改狀態(tài)標記,向CPU發(fā)出中斷請求“你要的東西準備好了”;
step5:CPU通過命令線響應中斷請求“我知道,你給我吧”,I/O接口將DBR中的數(shù)據(jù)經數(shù)據(jù)線傳遞給CPU。
2.2 I/O端口及編址
CPU同外設之間的數(shù)據(jù)傳送的實質是對I/O接口中的某些寄存器(如數(shù)據(jù)緩沖寄存器、命令寄存器等)進行讀/寫。而這里的寄存器又被稱為端口,這是端口與接口的區(qū)別:
設對寄存器的讀/寫,事先得要給這些寄存器編址,編址方式有兩種:
由程序查詢方式的時序圖可知:CPU一旦啟動I/O,必須停止現(xiàn)行程序的運行,并在現(xiàn)行程序中插入一段程序,主要特點:CPU有“踏步”等待現(xiàn)象,CPU與I/O串行工作。對應的I/O接口工作流程圖和結構組成如圖所示:1)由流程圖可知,一旦啟動外設,在外設準備階段,CPU就在不斷的取外設狀態(tài),并判斷外設是否準備就緒,無法執(zhí)行其他指令;2)由于I/O接口的DBR與CPU的計算器相連,因此,每次數(shù)據(jù)的傳遞時一個字一個字的進行,效率較低。
程序查詢方式的優(yōu)點是接口設計簡單、設備量少,缺點為CPU在信息傳送過程中要需要很多時間用于查詢和等待,而且如果采用獨占查詢,則在一段時間內之內和一臺外設減緩信息,效率大大降低。
在介紹I/O方式中的程序中斷方式之前,先了解一下中斷系統(tǒng)的概念。
程序中斷是指在計算機執(zhí)行現(xiàn)行程序的過程中,出現(xiàn)某些繼續(xù)處理的異常情況或特殊請求,CPU暫時中止現(xiàn)行程序,轉而去對這些異常情況或特殊請求進行處理,在處理完畢后對CPU又自動返回到現(xiàn)行程序的斷點處,繼續(xù)執(zhí)行原有程序。
中斷系統(tǒng)的工作流程分為三個步驟:1)中斷請求;2)中斷響應;3)中斷處理。
中斷的類型由許多種,廣義的中斷分為內中斷(中斷請求來源于CPU內部)和外中斷(中斷請求來源于外部,于當前執(zhí)行的程序無關),不同類型的中斷的優(yōu)先級也有區(qū)別,當不同類型的中斷源同時發(fā)出中斷的請求時,優(yōu)先級決定了相應中斷請求被相應的有限次序。(一般情況下,硬件故障>軟件故障>非屏蔽故障>屏蔽故障)。
前面說到,當多個中斷源同時出現(xiàn)時,中斷判優(yōu)就該發(fā)揮作用,優(yōu)先級的設置有2種方式:1)硬件實現(xiàn),通過硬件排隊器實現(xiàn);2)軟件實現(xiàn),通過查詢程序實現(xiàn)。
在硬件排隊器的基礎引入中斷屏蔽技術,可以實現(xiàn)對優(yōu)先級順序的靈活調整,該技術主要用于多重中斷(中斷嵌套),其與單重中斷最主要的區(qū)別在于中斷處理過程中允許開中斷,從而實現(xiàn)多重中斷。
如圖所示,在硬件排隊器的基礎上,在每一個中斷請求端口處都增加一個“屏蔽字”MASK,以A的優(yōu)先級設置為例(如希望B獲得最高優(yōu)先級),則可以將A/C/D的屏蔽字MASK都設置為“1”,則會發(fā)現(xiàn),當B發(fā)生中斷后,A/C/D端口的即使發(fā)出中斷請求(即A=C=D=1),則2/3/4的響應始終為“0”,即被屏蔽,從而實現(xiàn)了優(yōu)先級的調整。
按照優(yōu)先級順序設計中斷源屏蔽字的過程如下:依照優(yōu)先級次序,所有中斷源將高于其優(yōu)先級的中斷源的屏蔽字設為“0”,而將低于其優(yōu)先級的屏蔽字設為“1”,自身的屏蔽字設為“1”,然后匯總每個中斷源的屏蔽字即可。
介紹完成中斷機制后,現(xiàn)在來看看中斷的策略是如何應用于“I/O控制方式”。上圖為“程序中斷方式”的I/O接口結構組成,相較于“程序查詢方式”的I/O接口更為復雜。相較于“程序查詢方式”,程序中斷方式的CPU執(zhí)行程序的比例大幅提高,可以發(fā)現(xiàn)I/O準備階段,CPU已經無需參與,可以繼續(xù)執(zhí)行原程序,僅當I/O接口與外設之間完成數(shù)據(jù)傳遞后,需要向CPU傳遞數(shù)據(jù)時,才發(fā)出中斷請求,讓CPU撥冗處理:step1:執(zhí)行中斷隱指,保存原程序斷點,并接入中斷服務程序入口;2)執(zhí)行中斷服務程序,保護原程序現(xiàn)場,并與I/O接口進行數(shù)據(jù)傳輸,完成后恢復原程序現(xiàn)場;3)繼續(xù)執(zhí)行原程序。可見,CPU被I/O占用的時間顯著降低。
DMA控制器替代CPU,對I/O設備進行控制,同時串聯(lián)起I/O外設和主存進行數(shù)據(jù)傳送,進一步解放了CPU。
個CPU向DMA控制器指明要輸入還是輸出;要傳送多少數(shù)據(jù);數(shù)據(jù)在主存、外設中的地址。
下圖所示為DMA控制器的結構組成,可以發(fā)現(xiàn)結構組成相較于“程序查詢方式”和“程序中斷方式”的I/O接口更為復雜:1)主存計數(shù)器AR,用以存放交換數(shù)據(jù)的主存地址;2)傳送長度計數(shù)器WC,記錄待傳輸數(shù)據(jù)的長度,傳輸完成通過溢出信號通知中斷機構;3)數(shù)據(jù)緩沖器DBR與設備選擇電路的作用與其他“I/O方式”一致;4)DMA請求觸發(fā)器和控制/狀態(tài)邏輯,當I/O接口與外設之間完成數(shù)據(jù)傳輸后,就向CPU爭取主存訪問權;5:中斷機構,當I/O接口與主存之間的數(shù)據(jù)傳輸完成后,提醒CPU傳輸完成。
以外設向主存?zhèn)鬏敂?shù)據(jù)為例介紹DMA的傳送過程:
step1:預處理階段,CPU將待放入主存數(shù)據(jù)的地址、傳輸數(shù)據(jù)個數(shù)等信息發(fā)給DMA控制器,并通知啟動I/O設備;
step2:DMA控制按照CPU提供的信息,從外設提取數(shù)據(jù),放入數(shù)據(jù)緩存DBR,并經由DMA觸發(fā)器和控制/狀態(tài)邏輯向CPU要總線使用權,通過后將數(shù)據(jù)經數(shù)據(jù)總線傳送給內存,直至整個數(shù)據(jù)塊傳送完畢;
step3:數(shù)據(jù)塊傳送完成后,傳送長度計數(shù)器通過溢出信號通知中斷機構,中斷機構通知CPU"你想要的數(shù)據(jù)都給主存送過去了",CPU進入中斷服務程序(與程序中斷方式的服務程序任務完全不同),去主存核實數(shù)據(jù)是否滿足要求并決定是否還要傳數(shù)據(jù);
step4:CPU繼續(xù)執(zhí)行主程序。
DMA的傳送方式,當CPU和I/O設備同時訪問主存時,為避免發(fā)生沖突,DMA控制器和CPU通常采取三種方式進行協(xié)調:1)停止CPU訪問主存;2)DMA和CPU交替訪存;3)周期竊取。
程序中斷方式和DMA 控制方式的對比如下圖所示。
本節(jié)介紹了I/O系統(tǒng)的相關知識,主要介紹I/O系統(tǒng)的功能與組成,簡單羅列了紛繁多樣的I/O外設,并著重介紹了介于I/O總線與外設之間的I/O接口,詳細介紹了接口的功能、組成以及三種主要的I/O控制方式。
再識”主板“,作者將年久不用的筆記本給拆了,希望理論體系的加持下,能夠獲得對復雜主板稍微深入一點的認知。
打開計算機主板,看似密密麻麻的電路元器件和各種芯片,其實可以大致分為這么幾個部分:1)CPU與GPU(處理器);2)存儲系統(tǒng)(主存和輔存);3)南橋芯片組(總線控制中心)+EC+I/O接口+外設(I/O系統(tǒng));4)時鐘系統(tǒng);5)電源系統(tǒng)。
幾個分系統(tǒng)按照如下的架構(計算機硬件架構)組織起來,其中北橋芯片(MCH)和南橋芯片(PCH)作為總線的控制中心,串聯(lián)起各硬件分系統(tǒng),主板的架構也相應的圍繞這兩個芯片組擴展開來。北橋芯片組離CPU較近,負責高速設備之間的數(shù)據(jù)傳輸(CPU、顯卡以及主存)。南橋芯片則負責低速設備的互連,硬盤、光驅以及USB接口等都經由南橋芯片與CPU/主存進行數(shù)據(jù)傳輸。
CPU與GPU是主板上的兩顆大腦,其中CPU擅長邏輯/算術運算,GPU擅長圖像處理相關運算。CPU正面的兩顆芯片為CPU的核心,運算器、控制器、高速緩存等部件都集成在上面,通常被稱為Die,是從晶圓(Silicon Wafer)上切割下來的一個個小方塊,在切割下來之前,每個小方塊(Die)都需要經過各種加工,將電路邏輯刻到該Die上面。如圖所示,顯卡的主要組成就是圖像處理器與顯示緩存,它們之間的關系就如同CPU與內存的關系一樣。上面的主板,顯卡集成于主板之上,被稱為集成顯卡,占用空間小、功耗低但性能也相對較差,對于圖像處理要求比較高的場合(視頻制作、大型游戲),一般就需要選用獨立顯卡,其可以通過總線接口連接到主板上,即插即用,性能強大,但功耗和體積也要大很多。
按照正文中提到的存儲金字塔結構,計算機的存儲由內到外應該分為三部分:1)高速緩存;2)主存;3)輔存。其中高速緩存集成于CPU內部,主板上不可見。
主存:組成包括內存顆粒(基于DRAM存儲技術)、SPD(串行存在檢測)以及總線接口。其中內存顆粒為主存的存儲載體,如圖的內存條由8顆擴展而成;SPD是一顆8針的EEPROM芯片。芯片內記錄了該內存的諸如工作頻率、工作電壓、速度、容量、電壓與行、列地址帶寬等重要參數(shù),便于計算機系統(tǒng)依據(jù)這些參數(shù)配置相應工作時序等參數(shù);總線接口決定了該內存條的總線標準,也決定了它的傳輸速率。輔存:上文的主板連接的是一個500GB的機械硬盤,存儲體為盤片,數(shù)據(jù)存取通過盤片機械旋轉實現(xiàn),傳輸速度較慢,目前的輔存大都為存取速度更快的固態(tài)硬盤,其存儲體為基于ROM存儲技術的存儲芯片,其結構組成還包括緩存芯片和一個主控芯片。
I/O系統(tǒng)的硬件組成包括I/O總線、I/O接口以及外部設備。其中南橋芯片和EC(嵌入式控制芯片)共同負責所有I/O外設的總線控制,主板側邊的大量接口就是連接外設的I/O接口,與接口相鄰的控制電路至關重要,它決定著相應外設的I/O方式。
主板上除上述幾個主要的分系統(tǒng),還包括用于提供時序信號的時鐘系統(tǒng)以及為主板及特定部件供電的電源系統(tǒng)。受限于作者認知水平和篇幅,這里就不具體展開了。