設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

深入理解計算機系統(tǒng) ——CAEer 視角

電磁CAEer 2022/12/13 17:46:07 責編:遠生

說在前面

一、寫作目的

依托于“計算電磁學”的發(fā)展,電磁 CAE 技術(shù)已經(jīng)深刻的改變了硬件設(shè)計流程,但是僅僅依賴于 CAE 商用軟件的仿真計算以及設(shè)計師的手動調(diào)參或者相對低層次的自動掃參功能,越來越難以支撐起卓越的硬件設(shè)計。學習和掌握最前沿的設(shè)計理念、優(yōu)化策略,依靠扎實的數(shù)理基礎(chǔ)將問題轉(zhuǎn)化為數(shù)理模型,并依托堅實的編程素養(yǎng)將定性的設(shè)計理念數(shù)字化、程序化,深度嵌入硬件的設(shè)計階段,會否給硬件設(shè)計帶來更多可能?這也正是這篇文章的“緣起”。

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

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

深入,主要依托B站“王道考研”視頻《計算機組成原理》(正文大量配圖的來源)的系統(tǒng)學習,結(jié)合高分計算機經(jīng)典黑皮書《深入理解計算機系統(tǒng)》(作者 Randal E. Bryant)的深度閱讀,完成了”計算機系統(tǒng)“的深入學習,在此基礎(chǔ)上進行消化-吸收-輸出,最終完成計算機系統(tǒng)知識體系的初步搭建。

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

基于“體系完整、架構(gòu)清晰、層次遞進”的原則,文章將力圖系統(tǒng)而通俗的介紹關(guān)于“計算機系統(tǒng)”的種種,希望能夠助力電磁 CAE 設(shè)計師入門。受限于作者專業(yè)和認知水平,文中所述難免有所偏頗,還望斧正。

二、內(nèi)容涉及

本文將從三個方面展開:

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

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

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

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

底層認知

一、什么是計算機系統(tǒng)

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

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

二、計算機的基本組成

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

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

CPU 的主要功能就是執(zhí)行指令,結(jié)構(gòu)組成主要包括運算器和控制器,各組件的功能為:

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

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

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

三、計算機的組織形式

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

馮-諾伊曼結(jié)構(gòu)

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

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

現(xiàn)代計算機結(jié)構(gòu)

現(xiàn)代計算機結(jié)構(gòu)以存儲器為核心,所有輸入的數(shù)據(jù) / 程序以及輸出的計算結(jié)果,均先存入存儲器,然后在被送往 CPU 進行執(zhí)行或送至輸出設(shè)備?,F(xiàn)代計算機結(jié)構(gòu)有效的為 CPU 減負,讓 CPU 更加專注的進行指令執(zhí)行,大幅提高了效率。

四、計算機的運行過程

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

過程大致是這樣的:當你打開手機上的某個 App 時,后臺其實是用高級語言編寫的代碼在運行,這些代碼經(jīng)過一個叫編譯器的東西翻譯成計算機硬件認識的機器語言(一行行二進制代碼),然后經(jīng)由 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ù)經(jīng)由 MDR 傳給運算器的 ACC 進行運算。

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

深入理解

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

一、信息的表示與處理

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

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

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

1.信息存儲

1.1 進位計數(shù)制

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

1.2 字

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

1.3 數(shù)據(jù)大小

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

1.4 尋址和字節(jié)順序

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

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

1.5 字符串

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

1.6 常見運算

1、位級運算

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

2、邏輯運算

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

3、移位運算

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

2.整數(shù)的表示與運算

本節(jié)將介紹整數(shù)的兩種表示方式,一種只能表示非負數(shù),另一種則能夠表示負數(shù)、零和正數(shù)。其數(shù)學屬性與后續(xù)的機器級實現(xiàn)有很強的關(guān)聯(lián)。

2.1 整型數(shù)據(jù)類型

2.2 無符號數(shù)與二進制補碼

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

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

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

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

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

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

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

2.3 有符號數(shù)與無符號數(shù)之間的轉(zhuǎn)化

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

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

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

2.4 數(shù)字的擴展與截斷

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

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

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

2.5 整數(shù)運算

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

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

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

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

3.浮點數(shù)的表示和運算

3.1 浮點數(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ù)的真值,計算結(jié)果如下。

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

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

當指數(shù)編碼全為 0 時,浮點數(shù)為非規(guī)格化值,此時,;

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

3.2 浮點數(shù)運算

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

4.小結(jié)

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

二、存儲系統(tǒng)

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

1.什么是“存儲系統(tǒng)”

1.1 抽象層面的認識

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

1.2 層次結(jié)構(gòu)

實際上,存儲器系統(tǒng)(memory system)是一個具有不同容量、成本和訪問時間的存儲(storage)設(shè)備的層次結(jié)構(gòu)。CPU 寄存器保存著最常用的數(shù)據(jù)??拷?CPU 的小的、快速的高速緩存存儲器 (cache)的緩沖區(qū)域。主存暫時存放存儲在較大的慢速磁盤上的數(shù)據(jù),而這些磁盤常常又作為存儲在通過網(wǎng)絡(luò)連接的其他機器的磁盤或磁帶上的數(shù)據(jù)的緩沖區(qū)域。

2.為什么稱之為“系統(tǒng)”

2.1 存儲技術(shù)的多樣性

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

按照存儲介質(zhì)的類型,存儲器可以分為: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 便宜很多,一般用于主存(內(nèi)存條)。

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

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

2.2 存儲器的搭建原則

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

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

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

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

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

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

如上文所說,為了平衡容量、成本和傳輸速度,我們設(shè)計了一個“金字塔形式”的存儲系統(tǒng)層次結(jié)構(gòu),這樣的結(jié)構(gòu)能否實現(xiàn)數(shù)據(jù)在存儲系統(tǒng)各存儲設(shè)備之間順暢的“上上下下”,保證計算機系統(tǒng)的暢通運行?

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

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

3.“存儲系統(tǒng)”如何運行

3.1 系統(tǒng)結(jié)構(gòu)組成

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

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

3.2 主存

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

主存的基本組成

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

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

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

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

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

主存與 CPU 的連接

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

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

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

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

3.3 高速緩存

高速緩存的產(chǎn)生的背景是計算機技術(shù)的快速發(fā)展致使主存?zhèn)鬏敂?shù)據(jù)的速度越來越無法匹配 CPU 的運算速度,從而嚴重影響了計算機的運行速度。

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

高速緩存與主存的映射關(guān)系

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

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

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

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

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

三種映射方式總結(jié)和優(yōu)缺點對比如下:

高速緩存的替換策略

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

有空位置存放數(shù)據(jù),直此時接將內(nèi)存塊地址對應數(shù)據(jù) Copy 至此即可;

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

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

高速緩存的寫策略

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

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

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

4.小結(jié)

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

三、指令系統(tǒng)

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

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

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

1.指令格式

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

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

  • 零地址指令

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

  • 一地址指令

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

  • 二地址指令

常用于需要兩個操作數(shù)的算術(shù)運算、邏輯運算相關(guān)指令。

  • 三地址指令

常用于需要兩個操作數(shù)的算術(shù)運算、邏輯運算相關(guān)指令,并將計算結(jié)果寫入 A3。

  • 四地址指令

常用于需要兩個操作數(shù)的算術(shù)運算、邏輯運算相關(guān)指令,并將計算結(jié)果寫入 A3,同時告知下個執(zhí)行指令的地址。

指令的分類還可以按照長度和類型進行區(qū)分:1)定長指令字結(jié)構(gòu),即指令系統(tǒng)中所有指令的長度都是一樣的;2)變長指令字結(jié)構(gòu),即指令系統(tǒng)中的各種指令的長度不等。

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

2.指令 / 數(shù)據(jù)尋址

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

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

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

  • 立即尋址

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

優(yōu)點為無需訪存,速度快,缺點為形式地址的位數(shù)限制了操作數(shù)的范圍。

  • 直接尋址

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

優(yōu)點是指令結(jié)構(gò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 所指的寄存器內(nèi)。

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

  • 寄存器間接選址

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

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

  • 基址尋址

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

優(yōu)點是便于程序“浮動”,方便實現(xiàn)多道程序并發(fā)運行。

  • 變址尋址

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

優(yōu)點:在數(shù)組處理過程中,可設(shè)定 A 為數(shù)組的首地址,不斷改變編制寄存器 IX 的內(nèi)容,便可以很容易形成數(shù)組中任一數(shù)據(jù)的地址,特別適合編制循環(huán)程序。

  • 相對尋址

把程序計數(shù)器 PC 的內(nèi)容加上指令格式中的形式地址 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 出棧進入 ACCSP 指向 R1;

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

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

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

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

不同尋址方式的有效地址的計算方法以及訪存次數(shù)匯總?cè)缦卤恚?/p>

3.CISC 與 RISC

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

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

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

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

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

4.小結(jié)

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

四、CPU

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

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

1.CPU 的功能和結(jié)構(gòu)

CPU 的主要功能有:

指令控制:完成取指令分析指令執(zhí)行指令的操作,即程序的順序控制;

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

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

數(shù)據(jù)加工:對數(shù)據(jù)進行算術(shù)邏輯運算;

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

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

1.1 運算器的基本結(jié)構(gòu)

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

1.2 控制器的基本結(jié)構(gòu)

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

1.3 組合

將運算系統(tǒng)和控制系統(tǒng)組裝到一起就構(gòu)成一個功能完整的 CPU,其中兩部分之間的數(shù)據(jù)傳遞通過 CPU 內(nèi)部總線進行的。

看似復雜的結(jié)構(gòu)組成圖,其實按照功能可以分為四大塊。

2.指令執(zhí)行過程

2.1 指令周期

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

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

2.2 指令數(shù)據(jù)流

取指、間址、執(zhí)行以及中斷過程中,數(shù)據(jù)在 CPU 里是如何流動的。

  • 取指周期

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

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

step2:CU 發(fā)出控制信號,經(jīng)控制總線傳到主存,這里是讀信號,即 1->R;

step3:將 MAR 所指主存中的內(nèi)容經(jīng)數(shù)據(jù)總線送入 MDR,即 M(MAR)->MDR;

step4:將 MDR 中的內(nèi)容送入指令寄存器 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 所指主存中的內(nèi)容 (EA) 經(jīng)數(shù)據(jù)總線送入 MDR,即 M(MAR)->MDR;

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

  • 執(zhí)行周期

執(zhí)行周期根據(jù) IR 中的指令字的操作碼操作數(shù)通過運算器進行相關(guān)操作,產(chǎn)生執(zhí)行結(jié)果,沒有統(tǒng)一的數(shù)據(jù)流向。

  • 中斷周期

中斷周期的主要任務暫停當前任務取完成其他任務,暫停前需要保存斷點,一般使用堆棧(SP 存儲棧頂?shù)刂罚﹣肀4鏀帱c,具體流程如下:

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

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

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

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

2.3 指令執(zhí)行方案

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

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

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

3.數(shù)據(jù)通路的功能和基本結(jié)構(gòu)

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

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

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

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

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

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

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

4.1 硬布線(硬件思路)

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

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

4.2 微程序(軟件思路)

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

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

5.指令流水線

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

5.1 理想狀態(tài)

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

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

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

5.2 非理想狀態(tài)

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

結(jié)構(gòu)相關(guān)(資源沖突),即多條指令在同一時刻爭用同一資源而形成的沖突;

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

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

6.小結(jié)

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

五.總線

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

1.概述

1.1 基本概念

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

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

1.2 總線的分類及經(jīng)典結(jié)構(gòu)

1、按數(shù)據(jù)傳輸格式分類

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

2、按總線功能分類

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

  • 片內(nèi)總線

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

  • 系統(tǒng)總線

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

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

  • 通信總線

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

按時序控制方式

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

1.3 性能指標

總線的性能指標主要包括:1)總線周期,一次總線操作所需時間(包括申請階段、尋址階段、傳輸階段),通常由若干總線時鐘周期構(gòu)成;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ù)。

2.總線仲裁與傳輸

2.1 仲裁

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

  • 鏈式查詢方式

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

  • 計數(shù)器查詢方式

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

  • 獨立請求方式

有需求的設(shè)備各自向總線控制器發(fā)送總線請求 BR,總線控制器按照一定優(yōu)先次序向相應設(shè)備發(fā)送請求允許 BG,并觸發(fā)總線忙 BS,相應設(shè)備獲得總線控制權(quán)。

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

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

2.2 傳輸流程

占用總線的一對設(shè)備如何進行數(shù)據(jù)傳輸?總線周期 (總線傳輸流程) 的四個階段:

申請分配階段,由使用總線的主模塊提出申請,經(jīng)總線仲裁決定將下一傳輸周期的總線使用權(quán)授予某一申請者,也可將此階段細分為傳輸請求總線仲裁兩個階段;

尋址階段,獲得使用權(quán)的主模塊通過總線發(fā)出本次要訪問的從模塊的的地址及有關(guān)命令,啟動參與本次傳輸?shù)膹哪K;

傳輸階段,主模塊和從模塊進行數(shù)據(jù)交換,可單項或雙向進行數(shù)據(jù)傳送;

結(jié)束階段,主模塊的有關(guān)信息均從系統(tǒng)總線上撤出,讓出總線使用權(quán)。

3.總線標準

總線標準是計算機內(nèi)不同模塊互連的規(guī)范。依據(jù)總線在計算機系統(tǒng)中的位置,可以分為:1)系統(tǒng)總線;2)局部總線;3)設(shè)備總線、通信總線。

如圖所示為計算機硬件架構(gòu),主要硬件模塊之間互連的總線標準以及相關(guān)總線接口示意圖如下所示。需要補充說明:

北橋芯片負責實現(xiàn)高速設(shè)備(主存儲器、顯示適配器(顯卡))與 CPU 互連的控制,總線傳輸速度高,又被稱為系統(tǒng)總線,不過現(xiàn)在很多計算機以將北橋芯片的功能集成于 CPU;

南橋主要負責實現(xiàn)計算機上一些低速設(shè)備(網(wǎng)卡、USB 設(shè)備、音頻、硬盤等)的互連控制;

超級 I / O 主要負責 I / O 設(shè)備的于計算機互連的控制,具體會在 I / O 系統(tǒng)中詳細介紹。

常見的總線標準及其參數(shù)匯總?cè)缦?,重點需要了解幾個常用總線的名稱、數(shù)據(jù)傳輸格式(并行傳輸、串行傳輸)、應用場景(連接什么硬件模塊),總線位置(系統(tǒng)總線、局部總線或設(shè)備總線)。

4.小結(jié)

總線是計算機中分時共享的公共信息通路,就如同高速公路一樣,優(yōu)點是大幅簡化了計算機系統(tǒng)的線路規(guī)模,引入的問題就是總線使用權(quán)的分配,從而著重介紹了“仲裁”機制以及總線的“傳輸流程”。最后,介紹了目前常見的一些總線標準、主要參數(shù)及應用場合。

六、I / O 系統(tǒng)

“I / O 系統(tǒng)”是計算機核心部分(CPU,主存)與外部設(shè)備的“中轉(zhuǎn)站”,起到了數(shù)據(jù)過渡和中轉(zhuǎn)協(xié)調(diào)的作用,該章主要從四個方面展開:1)基本概念,介紹 I / O 系統(tǒng)的組成以及 I / O 控制的方式;2)外部設(shè)備,簡單介紹紛繁多樣的外部設(shè)備;3)I / O 接口,作為 I / O 系統(tǒng)最重要的部分,介紹其主要功能及一般結(jié)構(gòu)組成,以及內(nèi)部端口的編址方式;4)I / O 方式,重點介紹三種 I / O 控制方式(程序查詢方式、程序中斷方式以及 DMA 方式),闡述各種方式的運行機理以及優(yōu)缺點。

1.基本概念

1.1 I / O 系統(tǒng)組成

一般來說 I / O 系統(tǒng)由 I / O 硬件和 I / O 軟件兩部分組成。其中 1)I / O 硬件:包括外部設(shè)備、I / O 接口以及 I / O 總線等;2)I / O 軟件:包括驅(qū)動程序、用戶程序、管理程序、升級補丁等。通常采用 I / O 指令和通道指令實現(xiàn)主機和 I / O 設(shè)備的信息交換。

1)I / O 指令

命令碼是 CPU 指令的一部分,與普通的指令格式略有不同,操作碼指明了 CPU 要對 I / O 設(shè)備做什么,命令碼指明了 I / O 接口要對設(shè)備做什么。

2)通道指令

通道能識別的指令,通道程序提前編制好放在主存中,在含有通道的計算機中,CPU 執(zhí)行 I / O 指令對通道發(fā)出命令,由通道執(zhí)行一系列通道指令,代替 CPU 對 I / O 設(shè)備進行管理。

I / O 接口:又稱為 I / O 控制器(設(shè)備控制器,一塊芯片,通常集成于主板上),負責協(xié)調(diào)主機與外部設(shè)備之間的數(shù)據(jù)傳輸。其作用不僅僅只是一個接口,其還相當于一個介于主機和外設(shè)之間的調(diào)度。

1.2 I / O 控制方式

I / O 控制方式主要分為 4 種:

程序查詢方式:CPU 不斷輪詢檢查 I / O 控制器中的“狀態(tài)寄存器”,檢測到狀態(tài)為“已完成”之后,再從數(shù)據(jù)寄存器取出輸出數(shù)據(jù);

程序中斷方式:等待 I 鍵盤 / O 時,CPU 可以先去執(zhí)行其他程序,鍵盤 I / O 完成后 I / O 控制器向 CPU 發(fā)出中斷請求,CPU 相應中斷請求,并取走輸入數(shù)據(jù);

DMA(直接內(nèi)存訪問)控制方式:在主存與 I / O 設(shè)備之間添加一條直接數(shù)據(jù)通路(DMA 總線),DMA 控制器自動控制磁盤與主存的數(shù)據(jù)“讀 / 寫”,沒完成一整塊數(shù)據(jù)讀寫,才向 CPU 發(fā)出一次中斷請求;

通道控制方式:通道按照 CPU 的要求,執(zhí)行主存中的通道程序,控制 I / O 設(shè)備完成一系列任務,規(guī)定任務完成后,向 CPU 發(fā)出中斷請求。

2.外部設(shè)備

外部計算機系統(tǒng)的外部設(shè)備主要分為:1)輸入 / 輸出設(shè)備;2)外部存儲設(shè)。紛繁多樣,本節(jié)不做詳細介紹。

輸入 / 輸出設(shè)備

輸入設(shè)備:鍵盤、鼠標。

輸出設(shè)備:顯示器(主要參數(shù):屏幕大小、分辨率、灰度級、刷新頻率、顯示存儲器的容量和貸款)、打印機。

外部存儲設(shè)備

磁盤(存儲機理、結(jié)構(gòu)組成、性能參數(shù)、訪存過程)、光盤存儲器以及固態(tài)硬盤(SSD)。

2.I/ O 接口

2.1 主要功能及組成

I / O 接口是 I / O 總線與外設(shè)之間的過渡,的主要作用:1)數(shù)據(jù)緩沖,通過數(shù)據(jù)緩沖寄存器(DBR)實現(xiàn)主機與外設(shè)工作速度的匹配;2)錯誤或狀態(tài)監(jiān)測,通過狀態(tài)寄存器反饋設(shè)備的各種錯誤、狀態(tài)信息,共 CPU 查用;3)控制和定時,接收從控制總線發(fā)來的控制信號、時鐘信號;4)數(shù)據(jù)格式轉(zhuǎn)換,串行-并行、并行-串行等格式轉(zhuǎn)換;5)與主機和設(shè)備通信,實現(xiàn)主機-I / O 接口-I 外設(shè)之間的通信。

I / O 接口的基本結(jié)構(gòu):

如圖所示,按照 I / O 接口的功能需求,其主要結(jié)構(gòu)組成有:1)數(shù)據(jù)緩沖寄存器 DBR;2)設(shè)備選擇電路;3)設(shè)備狀態(tài)標記;4)命令寄存器和命令譯碼器;5)控制邏輯電路。

以控制外設(shè)為例介紹一下 I / O 接口的運行機理:

step1:CPU 通過地址線I / O 接口發(fā)出選擇設(shè)備的信號,設(shè)備選擇電路判斷是否為該設(shè)備,核實后更改設(shè)備狀態(tài)標記,并經(jīng)狀態(tài)線通知 CPU“我是你要找的人”;

step2:CPU 通過命令線經(jīng) I / O 接口的命令寄存器向外設(shè)下達傳送數(shù)據(jù)的命令;

step3:外設(shè)通過數(shù)據(jù)線向 I / O 接口的 DBR 傳送數(shù)據(jù),完事后,經(jīng)狀態(tài)線通知 I / O 接口“傳輸完成”;

step4:I / O 接口更改狀態(tài)標記,向 CPU 發(fā)出中斷請求“你要的東西準備好了”;

step5:CPU 通過命令線響應中斷請求“我知道,你給我吧”,I / O 接口將 DBR 中的數(shù)據(jù)經(jīng)數(shù)據(jù)線傳遞給 CPU。

2.2 I / O 端口及編址

CPU 同外設(shè)之間的數(shù)據(jù)傳送的實質(zhì)是對 I / O 接口中的某些寄存器(如數(shù)據(jù)緩沖寄存器、命令寄存器等)進行讀 / 寫。而這里的寄存器又被稱為端口,這是端口與接口的區(qū)別:

設(shè)對寄存器的讀 / 寫,事先得要給這些寄存器編址,編址方式有兩種:

統(tǒng)一編址,把 I / O 端口當作存儲單元進行地址分配,同統(tǒng)一的訪存指令就可以訪問 I / O 端口,又稱存儲器映射方式,這種方式的優(yōu)點在于不需要專門的輸入 / 輸出指令,編制空間大,CPU 訪問 I / O 也更加靈活,缺點在于占用了內(nèi)存空間,地址位數(shù)多,地址譯碼速度慢,執(zhí)行速度較慢;

獨立編址,I / O 端口地址與存儲器地址無關(guān),獨立編址 CPU 需要設(shè)置專門的輸入 / 輸出指令訪問端口,又稱 I / O 映射方式,輸入 / 輸出指令與存儲指令有著明顯的區(qū)別,程序編制清晰,缺點在于增加了一組控制信號,增加 CPU 的控制復雜性。

3.I/ O 方式

3.1 程序查詢方式

由程序查詢方式的時序圖可知:CPU 一旦啟動 I / O,必須停止現(xiàn)行程序的運行,并在現(xiàn)行程序中插入一段程序,主要特點:CPU 有“踏步”等待現(xiàn)象,CPU 與 I / O 串行工作。對應的 I / O 接口工作流程圖和結(jié)構(gòu)組成如圖所示:1)由流程圖可知,一旦啟動外設(shè),在外設(shè)準備階段,CPU 就在不斷的取外設(shè)狀態(tài),并判斷外設(shè)是否準備就緒,無法執(zhí)行其他指令;2)由于 I / O 接口的 DBR 與 CPU 的計算器相連,因此,每次數(shù)據(jù)的傳遞時一個字一個字的進行,效率較低。

程序查詢方式的優(yōu)點是接口設(shè)計簡單、設(shè)備量少,缺點為 CPU 在信息傳送過程中要需要很多時間用于查詢和等待,而且如果采用獨占查詢,則在一段時間內(nèi)之內(nèi)和一臺外設(shè)減緩信息,效率大大降低。

3.2 程序中斷方式

在介紹 I / O 方式中的程序中斷方式之前,先了解一下中斷系統(tǒng)的概念。

中斷的基本概念及運行機理

程序中斷是指在計算機執(zhí)行現(xiàn)行程序的過程中,出現(xiàn)某些繼續(xù)處理的異常情況或特殊請求,CPU 暫時中止現(xiàn)行程序,轉(zhuǎn)而去對這些異常情況或特殊請求進行處理,在處理完畢后對 CPU 又自動返回到現(xiàn)行程序的斷點處,繼續(xù)執(zhí)行原有程序。

中斷系統(tǒng)的工作流程分為三個步驟:1)中斷請求;2)中斷響應;3)中斷處理。

中斷請求:中斷源對向 CPU 發(fā)送中斷請求信號,CPU 可以通過對中斷請求標志寄存器的查詢,判斷哪個設(shè)備由中斷請求;

中斷響應:響應中斷需滿足三個條件:1)中斷源有中斷請求;2)CPU 允許開中斷;3)一條指令執(zhí)行完畢,且無更緊迫的任務。滿足中斷響應的條件,即進行中斷判優(yōu),依據(jù)設(shè)定的優(yōu)先級順序,執(zhí)行后續(xù)中斷處理;

中斷處理:中斷處理過程主要有兩個任務:1)保存原程序斷點;2)執(zhí)行中斷服務程序。其中第一個任務由中斷隱指令實現(xiàn)(以堆棧形式保存斷點、并將中斷服務程序入口地址送至 PC),中斷服務程序則要先保護現(xiàn)場(原程序各寄存器狀態(tài)),然后執(zhí)行各中斷設(shè)備服務。具體過程如下圖流程圖所示:

中斷的類型由許多種,廣義的中斷分為內(nèi)中斷(中斷請求來源于 CPU 內(nèi)部)和外中斷(中斷請求來源于外部,于當前執(zhí)行的程序無關(guān)),不同類型的中斷的優(yōu)先級也有區(qū)別,當不同類型的中斷源同時發(fā)出中斷的請求時,優(yōu)先級決定了相應中斷請求被相應的有限次序。(一般情況下,硬件故障 > 軟件故障 > 非屏蔽故障 > 屏蔽故障)。

中斷的判優(yōu)與優(yōu)先級設(shè)置

前面說到,當多個中斷源同時出現(xiàn)時,中斷判優(yōu)就該發(fā)揮作用,優(yōu)先級的設(shè)置有 2 種方式:1)硬件實現(xiàn),通過硬件排隊器實現(xiàn);2)軟件實現(xiàn),通過查詢程序?qū)崿F(xiàn)。

在硬件排隊器的基礎(chǔ)引入中斷屏蔽技術(shù),可以實現(xiàn)對優(yōu)先級順序的靈活調(diào)整,該技術(shù)主要用于多重中斷(中斷嵌套),其與單重中斷最主要的區(qū)別在于中斷處理過程中允許開中斷,從而實現(xiàn)多重中斷。

如圖所示,在硬件排隊器的基礎(chǔ)上,在每一個中斷請求端口處都增加一個“屏蔽字”MASK,以 A 的優(yōu)先級設(shè)置為例(如希望 B 獲得最高優(yōu)先級),則可以將 A / C / D 的屏蔽字 MASK 都設(shè)置為“1”,則會發(fā)現(xiàn),當 B 發(fā)生中斷后,A / C / D 端口的即使發(fā)出中斷請求(即 A=C=D=1), 則 2/3/4 的響應始終為“0”,即被屏蔽,從而實現(xiàn)了優(yōu)先級的調(diào)整。

按照優(yōu)先級順序設(shè)計中斷源屏蔽字的過程如下:依照優(yōu)先級次序,所有中斷源將高于其優(yōu)先級的中斷源的屏蔽字設(shè)為“0”,而將低于其優(yōu)先級的屏蔽字設(shè)為“1”,自身的屏蔽字設(shè)為“1”,然后匯總每個中斷源的屏蔽字即可。

程序中斷方式

介紹完成中斷機制后,現(xiàn)在來看看中斷的策略是如何應用于“I / O 控制方式”。上圖為“程序中斷方式”的 I / O 接口結(jié)構(gòu)組成,相較于“程序查詢方式”的 I / O 接口更為復雜。相較于“程序查詢方式”,程序中斷方式的 CPU 執(zhí)行程序的比例大幅提高,可以發(fā)現(xiàn) I / O 準備階段,CPU 已經(jīng)無需參與,可以繼續(xù)執(zhí)行原程序,僅當 I / O 接口與外設(shè)之間完成數(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 占用的時間顯著降低。

3.3 DMA 方式

DMA 控制器替代 CPU,對 I / O 設(shè)備進行控制,同時串聯(lián)起 I / O 外設(shè)和主存進行數(shù)據(jù)傳送,進一步解放了 CPU。

個 CPU 向 DMA 控制器指明要輸入還是輸出;要傳送多少數(shù)據(jù);數(shù)據(jù)在主存、外設(shè)中的地址

傳送前:接受外設(shè)發(fā)出的 DMA 請求(外設(shè)傳送一個字的請求),并向 CPU 發(fā)出總線請求;CPU 響應此總線請求,發(fā)出總線響應信號,接管總線控制權(quán),進入 DMA 造作周期;

傳送時:明確傳送數(shù)據(jù)的主存單元地址及長度,并能自動修改主存地址計數(shù)器和傳送長度計數(shù)器;規(guī)定主存和外設(shè)間的傳送方向,發(fā)出讀寫等控制信號,執(zhí)行數(shù)據(jù)傳送操作;

傳送后:向 CPU 報告 DMA 操作結(jié)束。

下圖所示為 DMA 控制器的結(jié)構(gòu)組成,可以發(fā)現(xiàn)結(jié)構(gòu)組成相較于“程序查詢方式”和“程序中斷方式”的 I / O 接口更為復雜:1)主存計數(shù)器 AR,用以存放交換數(shù)據(jù)的主存地址;2)傳送長度計數(shù)器 WC,記錄待傳輸數(shù)據(jù)的長度,傳輸完成通過溢出信號通知中斷機構(gòu);3)數(shù)據(jù)緩沖器 DBR設(shè)備選擇電路的作用與其他“I / O 方式”一致;4)DMA 請求觸發(fā)器控制 / 狀態(tài)邏輯,當 I / O 接口與外設(shè)之間完成數(shù)據(jù)傳輸后,就向 CPU 爭取主存訪問權(quán);5:中斷機構(gòu),當 I / O 接口與主存之間的數(shù)據(jù)傳輸完成后,提醒 CPU 傳輸完成。

以外設(shè)向主存?zhèn)鬏敂?shù)據(jù)為例介紹 DMA 的傳送過程:

step1:預處理階段,CPU 將待放入主存數(shù)據(jù)的地址、傳輸數(shù)據(jù)個數(shù)等信息發(fā)給 DMA 控制器,并通知啟動 I / O 設(shè)備;

step2:DMA 控制按照 CPU 提供的信息,從外設(shè)提取數(shù)據(jù),放入數(shù)據(jù)緩存 DBR,并經(jīng)由 DMA 觸發(fā)器控制 / 狀態(tài)邏輯向 CPU 要總線使用權(quán),通過后將數(shù)據(jù)經(jīng)數(shù)據(jù)總線傳送給內(nèi)存,直至整個數(shù)據(jù)塊傳送完畢;

step3:數(shù)據(jù)塊傳送完成后,傳送長度計數(shù)器通過溢出信號通知中斷機構(gòu),中斷機構(gòu)通知 CPU"你想要的數(shù)據(jù)都給主存送過去了",CPU 進入中斷服務程序(與程序中斷方式的服務程序任務完全不同),去主存核實數(shù)據(jù)是否滿足要求并決定是否還要傳數(shù)據(jù);

step4:CPU 繼續(xù)執(zhí)行主程序。

DMA 的傳送方式,當 CPU 和 I / O 設(shè)備同時訪問主存時,為避免發(fā)生沖突,DMA 控制器和 CPU 通常采取三種方式進行協(xié)調(diào):1)停止 CPU 訪問主存;2)DMA 和 CPU 交替訪存;3)周期竊取。

程序中斷方式和 DMA 控制方式的對比如下圖所示。

5.小結(jié)

本節(jié)介紹了 I / O 系統(tǒng)的相關(guān)知識,主要介紹 I / O 系統(tǒng)的功能與組成,簡單羅列了紛繁多樣的 I / O 外設(shè),并著重介紹了介于 I / O 總線與外設(shè)之間的 I / O 接口,詳細介紹了接口的功能、組成以及三種主要的 I / O 控制方式。

認識主板

再識”主板“,作者將年久不用的筆記本給拆了,希望理論體系的加持下,能夠獲得對復雜主板稍微深入一點的認知。

打開計算機主板,看似密密麻麻的電路元器件和各種芯片,其實可以大致分為這么幾個部分:1)CPU 與 GPU(處理器);2)存儲系統(tǒng)(主存和輔存);3)南橋芯片組(總線控制中心)+EC+I / O 接口 + 外設(shè)(I / O 系統(tǒng));4)時鐘系統(tǒng);5)電源系統(tǒng)。

北橋、南橋芯片組(總線系統(tǒng))

幾個分系統(tǒng)按照如下的架構(gòu)(計算機硬件架構(gòu))組織起來,其中北橋芯片(MCH)和南橋芯片 (PCH) 作為總線的控制中心,串聯(lián)起各硬件分系統(tǒng),主板的架構(gòu)也相應的圍繞這兩個芯片組擴展開來。北橋芯片組離 CPU 較近,負責高速設(shè)備之間的數(shù)據(jù)傳輸(CPU、顯卡以及主存)。南橋芯片則負責低速設(shè)備的互連,硬盤、光驅(qū)以及 USB 接口等都經(jīng)由南橋芯片與 CPU / 主存進行數(shù)據(jù)傳輸。

CPU 和 GPU(處理器)

CPU 與 GPU 是主板上的兩顆大腦,其中 CPU 擅長邏輯 / 算術(shù)運算,GPU 擅長圖像處理相關(guān)運算。CPU 正面的兩顆芯片為 CPU 的核心,運算器、控制器、高速緩存等部件都集成在上面,通常被稱為 Die,是從晶圓(Silicon Wafer)上切割下來的一個個小方塊,在切割下來之前,每個小方塊(Die)都需要經(jīng)過各種加工,將電路邏輯刻到該 Die 上面。如圖所示,顯卡的主要組成就是圖像處理器與顯示緩存,它們之間的關(guān)系就如同 CPU 與內(nèi)存的關(guān)系一樣。上面的主板,顯卡集成于主板之上,被稱為集成顯卡,占用空間小、功耗低但性能也相對較差,對于圖像處理要求比較高的場合(視頻制作、大型游戲),一般就需要選用獨立顯卡,其可以通過總線接口連接到主板上,即插即用,性能強大,但功耗和體積也要大很多。

主存 + 硬盤(存儲系統(tǒng))

按照正文中提到的存儲金字塔結(jié)構(gòu),計算機的存儲由內(nèi)到外應該分為三部分:1)高速緩存;2)主存;3)輔存。其中高速緩存集成于 CPU 內(nèi)部,主板上不可見。

主存:組成包括內(nèi)存顆粒(基于 DRAM 存儲技術(shù))、SPD(串行存在檢測)以及總線接口。其中內(nèi)存顆粒為主存的存儲載體,如圖的內(nèi)存條由 8 顆擴展而成;SPD 是一顆 8 針的 EEPROM 芯片。芯片內(nèi)記錄了該內(nèi)存的諸如工作頻率、工作電壓、速度、容量、電壓與行、列地址帶寬等重要參數(shù),便于計算機系統(tǒng)依據(jù)這些參數(shù)配置相應工作時序等參數(shù);總線接口決定了該內(nèi)存條的總線標準,也決定了它的傳輸速率。輔存:上文的主板連接的是一個 500GB 的機械硬盤,存儲體為盤片,數(shù)據(jù)存取通過盤片機械旋轉(zhuǎn)實現(xiàn),傳輸速度較慢,目前的輔存大都為存取速度更快的固態(tài)硬盤,其存儲體為基于 ROM 存儲技術(shù)的存儲芯片,其結(jié)構(gòu)組成還包括緩存芯片和一個主控芯片。

南橋芯片 + EC+I / O 接口 + 外設(shè)(I / O 系統(tǒng))

I / O 系統(tǒng)的硬件組成包括 I / O 總線、I / O 接口以及外部設(shè)備。其中南橋芯片和 EC(嵌入式控制芯片)共同負責所有 I / O 外設(shè)的總線控制,主板側(cè)邊的大量接口就是連接外設(shè)的 I / O 接口,與接口相鄰的控制電路至關(guān)重要,它決定著相應外設(shè)的 I / O 方式。

時鐘系統(tǒng) + 供電系統(tǒng)(其他)

主板上除上述幾個主要的分系統(tǒng),還包括用于提供時序信號的時鐘系統(tǒng)以及為主板及特定部件供電的電源系統(tǒng)。受限于作者認知水平和篇幅,這里就不具體展開了。

總結(jié)

該篇文章是作者關(guān)于“計算機系統(tǒng)”長達 5 個月學習過程的系統(tǒng)總結(jié),從通俗的“入門”,到專業(yè)知識點的持續(xù)“深入”,再到簡單的“實踐”,基本按照“體系完整、結(jié)構(gòu)明晰、層次遞進”的原則闡述清楚了“計算機底層的軟 / 硬件是如何協(xié)調(diào)運作以確保以高級語言編寫的代碼的流暢運行”這么一件事。行文至此,雖 3 萬有余,但相較于龐雜的計算機知識體系也只屬皮毛。即便如此,作為電磁 CAE 設(shè)計師的作者學習過程難言輕松,相關(guān)經(jīng)典著作和課程視頻也是反復學習多遍方知其意,過程之坎坷也時常讓人質(zhì)疑意義何在:無法協(xié)助你解決工程中的技術(shù)問題,也無法幫助你快速提高編程能力。這可能是所有基礎(chǔ)理論學習過程或基于體系構(gòu)建為目的學習過程的共同困擾,每每如此,我便想起邁克爾-法拉第在關(guān)于一個貴婦人質(zhì)疑其圓盤發(fā)電機作用時的回答:“夫人,一個剛出生的嬰兒有什么作用呢?但他會長大!

參考資料

  • 《計算機科學速成課》,B站視頻,主講人:Carrie Anne;

  • 《從 0 到 1 設(shè)計一臺計算機》,B站視頻,作者:Ele 實驗室;

  • 《計算機是怎么跑起來的》,科普讀物,作者:矢澤久雄(日本);

  • 《程序是怎么跑起來的》,科普讀物,作者:矢澤久雄(日本);

  • 《計算機組成原理》,B站視頻,來源:王道考研;

  • 《深入理解計算機系統(tǒng)》,學術(shù)專著,作者:Randal-E-Bryant (美國);

  • 《全面講解電腦主板構(gòu)造及原理 (圖解)》,CSDN 博客,作者:stm32-cyy;

本文來自微信公眾號:電磁 CAEer (ID:lb1661057986),作者:劉兵

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:計算機,二進制通信,系統(tǒng)

軟媒旗下網(wǎng)站: IT之家 最會買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機APP應用 魔方 最會買 要知