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

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

電磁CAEer 2022/12/13 17:46:07 責(zé)編:遠(yuǎn)生

說在前面

一、寫作目的

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

作為計(jì)算機(jī)門外漢的作者,學(xué)習(xí)”計(jì)算機(jī)系統(tǒng)“的過程大致分為三個(gè)階段:

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

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

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

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

二、內(nèi)容涉及

本文將從三個(gè)方面展開:

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

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

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

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

底層認(rèn)知

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

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

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

二、計(jì)算機(jī)的基本組成

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

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

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

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

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

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

三、計(jì)算機(jī)的組織形式

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

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

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

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

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

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

四、計(jì)算機(jī)的運(yùn)行過程

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

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

當(dāng)以機(jī)器語言表示的指令和數(shù)據(jù)裝入主存后,CPU 就開始訪問主存提取指令并開始執(zhí)行,具體過程如下所示:

step1: 程序計(jì)數(shù)器 PC 指向當(dāng)前指令地址#01,并將地址送至主存的地址寄存器 MAR

step2: 存儲體根據(jù) MAR 的取件碼,將對應(yīng)位置的數(shù)據(jù)發(fā)給數(shù)據(jù)寄存器 MDR;

step3:MDR 將指令發(fā)給控制器的指令寄存器 IR,進(jìn)行指令分析;

step4:IR 將指令的操作碼發(fā)給控制單元 CU,將地址碼發(fā) MAR,CU 依據(jù)操作碼通知運(yùn)算器要進(jìn)行何種操作;

step5: 存儲體根據(jù) MAR 的取件碼,將#04 地址對應(yīng)的數(shù)據(jù)經(jīng)由 MDR 傳給運(yùn)算器的 ACC 進(jìn)行運(yùn)算。

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

深入理解

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

一、信息的表示與處理

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

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

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

1.信息存儲

1.1 進(jìn)位計(jì)數(shù)制

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

1.2 字

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

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

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

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

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

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

1.5 字符串

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

1.6 常見運(yùn)算

1、位級運(yùn)算

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

2、邏輯運(yùn)算

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

3、移位運(yùn)算

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

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

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

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

2.2 無符號數(shù)與二進(jìn)制補(bǔ)碼

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

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

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

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

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

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

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

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

所謂有符號數(shù)和無符號數(shù)的轉(zhuǎn)化,其實(shí)并沒有改變二進(jìn)制的位表示,只是因?yàn)槎M(jìn)制數(shù)每一個(gè)“位”的解釋因?yàn)橛蟹枖?shù)和無符號數(shù)的定義的不同而不同,從而導(dǎo)致二進(jìn)制數(shù)所表示的真值發(fā)生變化。

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

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

2.4 數(shù)字的擴(kuò)展與截?cái)?/strong>

常見的運(yùn)算比如不同字長的整數(shù)之間進(jìn)行轉(zhuǎn)換,字長短的二進(jìn)制數(shù)轉(zhuǎn)換至字長長的二進(jìn)制數(shù),則需要擴(kuò)展位,字長長的數(shù)轉(zhuǎn)換至字長短的數(shù),則需要進(jìn)行截?cái)唷?/p>

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

截?cái)鄷淖兌M(jìn)制所表示的真值,對于無符號數(shù)字 x,截?cái)嗨?k 位的結(jié)果就相當(dāng)于計(jì)算mod(即真值對取模),總之無符號數(shù)和二進(jìn)制補(bǔ)碼的截?cái)嘟Y(jié)果可以分別表示為如下形式:

2.5 整數(shù)運(yùn)算

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

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

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

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

3.浮點(diǎn)數(shù)的表示和運(yùn)算

3.1 浮點(diǎn)數(shù)表示

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

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

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

當(dāng)指數(shù)編碼全為 0 時(shí),浮點(diǎn)數(shù)為非規(guī)格化值,此時(shí),

當(dāng)指數(shù)編碼全為 1 時(shí),浮點(diǎn)數(shù)為特殊值,當(dāng)小數(shù)域?yàn)槿珵?0 時(shí),表示無窮,s=0,為;s=1,為;當(dāng)小數(shù)域非 0 時(shí),為 NaN。

3.2 浮點(diǎn)數(shù)運(yùn)算

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

4.小結(jié)

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

二、存儲系統(tǒng)

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

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

1.1 抽象層面的認(rèn)識

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

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

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

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

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

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

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

其中,半導(dǎo)體存儲器發(fā)展迅速,也有很多分類:

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

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

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

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

2.2 存儲器的搭建原則

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

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

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

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

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

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

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

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

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

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

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

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

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

3.2 主存

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

主存的基本組成

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

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

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

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

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

主存與 CPU 的連接

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

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

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

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

3.3 高速緩存

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

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

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

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

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

全相聯(lián)映射:1)映射方式,主存和緩存之間的數(shù)據(jù)傳遞是以塊為單位的,每個(gè)塊包含多個(gè)字的數(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 于是對著主存地址去挨個(gè)塊核對標(biāo)記有效位,發(fā)現(xiàn)#2 行標(biāo)記和主存塊號一致,且標(biāo)記位為 1(說明塊內(nèi)有數(shù)據(jù)),則通知 CPU“我有你想要的東西”,即為命中

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

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

高速緩存的替換策略

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

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

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

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

高速緩存的寫策略

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

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

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

4.小結(jié)

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

三、指令系統(tǒng)

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

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

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

1.指令格式

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

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

  • 零地址指令

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

  • 一地址指令

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

  • 二地址指令

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

  • 三地址指令

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

  • 四地址指令

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

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

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

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

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

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

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

  • 立即尋址

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

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

  • 直接尋址

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

優(yōu)點(diǎn)是指令結(jié)構(gòu)簡單,指令執(zhí)行僅一次訪存,缺點(diǎn)是 A 的位數(shù)決定了尋址的范圍,操作數(shù)地址不易修改。

  • 間接尋址

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

優(yōu)點(diǎn)是可以擴(kuò)大尋址范圍(有效地址 EA 的位數(shù)大于形式地址 A 的位數(shù)),缺點(diǎn)為指令執(zhí)行過程中需要多次尋址。

  • 隱含尋址

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

優(yōu)點(diǎn)是有利于縮短指令字長,缺點(diǎn)為需要增加存儲操作數(shù)或隱含地址的硬件。

  • 寄存器尋址

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

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

  • 寄存器間接選址

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

特點(diǎn)是比一般的間接尋址速度更快,但指令的執(zhí)行階段需要訪問主存(因?yàn)椴僮鲾?shù)在主存中)。

  • 基址尋址

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

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

  • 變址尋址

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

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

  • 相對尋址

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

優(yōu)點(diǎn):操作數(shù)的地址不是固定的,它隨著 PC 值的變化而變化,并且于指令地址之間總是相差一個(gè)固定值,便于程序浮動。

  • 堆棧尋址

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

基于堆棧尋址,下圖所示為一個(gè)加法運(yùn)算的過程:

step1: 堆棧指針 SP 指向 R0,對應(yīng)數(shù)據(jù) 0001 出棧進(jìn)入 ACCSP 指向 R1;

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

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

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

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

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

3.CISC 與 RISC

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

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

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

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

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

4.小結(jié)

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

四、CPU

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

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

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

CPU 的主要功能有:

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

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

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

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

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

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

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

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

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

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

1.3 組合

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

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

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

2.1 指令周期

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

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

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

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

  • 取指周期

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

step1:當(dāng)前指令地址送至存儲器的地址寄存器 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。

  • 間址周期

間址周期的主要任務(wù)就是獲得操作數(shù)(數(shù)據(jù))的有效地址 EA,EA 的獲取是依據(jù)尋址特征形式地址進(jìn)行操作完成的,以一次間址為例,數(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ù)通過運(yùn)算器進(jìn)行相關(guān)操作,產(chǎn)生執(zhí)行結(jié)果,沒有統(tǒng)一的數(shù)據(jù)流向。

  • 中斷周期

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

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

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

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

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

2.3 指令執(zhí)行方案

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

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

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

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

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

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

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

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

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

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

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

4.1 硬布線(硬件思路)

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

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

4.2 微程序(軟件思路)

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

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

5.指令流水線

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

5.1 理想狀態(tài)

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

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

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

5.2 非理想狀態(tài)

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

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

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

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

6.小結(jié)

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

五.總線

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

1.概述

1.1 基本概念

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

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

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

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

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

2、按總線功能分類

按總線的功能進(jìn)行分類,可分為 3 種:

  • 片內(nèi)總線

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

  • 系統(tǒng)總線

主存系統(tǒng)總線按傳輸信息內(nèi)容的不同,又可以分為 3 類:1)數(shù)據(jù)總線,用來傳輸各功能部件間址的數(shù)據(jù)性,為雙向傳輸線,位數(shù)與機(jī)器字長、存儲字長有關(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)四總線。計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)越復(fù)雜,相應(yīng)的總線結(jié)構(gòu)也會更加復(fù)雜。

  • 通信總線

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

按時(shí)序控制方式

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

1.3 性能指標(biāo)

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

6)總線帶寬

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

7)總線復(fù)用

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

8)信號線數(shù)

地址總線、數(shù)據(jù)總線以及控制總線 3 種總線數(shù)總和為信號線數(shù)。

2.總線仲裁與傳輸

2.1 仲裁

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

  • 鏈?zhǔn)讲樵兎绞?/p>

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

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

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

  • 獨(dú)立請求方式

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

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

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

2.2 傳輸流程

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

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

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

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

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

3.總線標(biāo)準(zhǔn)

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

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

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

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

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

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

4.小結(jié)

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

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

“I / O 系統(tǒng)”是計(jì)算機(jī)核心部分(CPU,主存)與外部設(shè)備的“中轉(zhuǎn)站”,起到了數(shù)據(jù)過渡和中轉(zhuǎn)協(xié)調(diào)的作用,該章主要從四個(gè)方面展開: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 方式,重點(diǎn)介紹三種 I / O 控制方式(程序查詢方式、程序中斷方式以及 DMA 方式),闡述各種方式的運(yùn)行機(jī)理以及優(yōu)缺點(diǎn)。

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ū)動程序、用戶程序、管理程序、升級補(bǔ)丁等。通常采用 I / O 指令和通道指令實(shí)現(xiàn)主機(jī)和 I / O 設(shè)備的信息交換。

1)I / O 指令

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

2)通道指令

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

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

1.2 I / O 控制方式

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

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

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

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

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

2.外部設(shè)備

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

輸入 / 輸出設(shè)備

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

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

外部存儲設(shè)備

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

2.I/ O 接口

2.1 主要功能及組成

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

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

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

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

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

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

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

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

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

2.2 I / O 端口及編址

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

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

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

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

3.I/ O 方式

3.1 程序查詢方式

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

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

3.2 程序中斷方式

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

中斷的基本概念及運(yùn)行機(jī)理

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

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

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

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

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

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

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

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

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

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

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

程序中斷方式

介紹完成中斷機(jī)制后,現(xiàn)在來看看中斷的策略是如何應(yīng)用于“I / O 控制方式”。上圖為“程序中斷方式”的 I / O 接口結(jié)構(gòu)組成,相較于“程序查詢方式”的 I / O 接口更為復(fù)雜。相較于“程序查詢方式”,程序中斷方式的 CPU 執(zhí)行程序的比例大幅提高,可以發(fā)現(xiàn) I / O 準(zhǔn)備階段,CPU 已經(jīng)無需參與,可以繼續(xù)執(zhí)行原程序,僅當(dāng) I / O 接口與外設(shè)之間完成數(shù)據(jù)傳遞后,需要向 CPU 傳遞數(shù)據(jù)時(shí),才發(fā)出中斷請求,讓 CPU 撥冗處理:step1:執(zhí)行中斷隱指,保存原程序斷點(diǎn),并接入中斷服務(wù)程序入口;2)執(zhí)行中斷服務(wù)程序,保護(hù)原程序現(xiàn)場,并與 I / O 接口進(jìn)行數(shù)據(jù)傳輸,完成后恢復(fù)原程序現(xiàn)場;3)繼續(xù)執(zhí)行原程序??梢姡珻PU 被 I / O 占用的時(shí)間顯著降低。

3.3 DMA 方式

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

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

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

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

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

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

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

step1:預(yù)處理階段,CPU 將待放入主存數(shù)據(jù)的地址、傳輸數(shù)據(jù)個(gè)數(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)存,直至整個(gè)數(shù)據(jù)塊傳送完畢;

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

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

DMA 的傳送方式,當(dāng) CPU 和 I / O 設(shè)備同時(shí)訪問主存時(shí),為避免發(fā)生沖突,DMA 控制器和 CPU 通常采取三種方式進(jìn)行協(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 接口,詳細(xì)介紹了接口的功能、組成以及三種主要的 I / O 控制方式。

認(rèn)識主板

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

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

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

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

CPU 和 GPU(處理器)

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

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

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

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

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

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

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

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

總結(jié)

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

參考資料

  • 《計(jì)算機(jī)科學(xué)速成課》,B站視頻,主講人:Carrie Anne;

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

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

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

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

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

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

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

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

相關(guān)文章

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

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

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會買 要知