主頁 >  其他 > 奉勸那些剛參加作業的學弟學妹們:這些計算機與作業系統基礎知識越早知道越好!萬字長文太頂了!!(建議收藏)

奉勸那些剛參加作業的學弟學妹們:這些計算機與作業系統基礎知識越早知道越好!萬字長文太頂了!!(建議收藏)

2021-04-22 10:58:59 其他

大家好,我是冰河~~

最近發現很多小伙伴作業很久了,大部分作業都是在重復的進行CRUD,對于一些基礎性的知識,比如:計算機基礎知識,作業系統,資料結構和演算法等,卻了解的少之又少,其實,很多時候,這些基礎性的知識往往是造成程式員職業生涯瓶頸的一個重要的因素,所以,冰河強烈建議這些基礎知識越早知道越好,越早掌握越好!最好是在大學時期就充分掌握這些計算機基礎知識,

好了,接下來,冰河為大家總結了一篇萬字長文系統介紹計算機中有關資料方面的基礎知識,

資料的表示形式

在計算機中,所有的資料都是以二進制的形式進行表示的,也就是說,在計算機中使用0和1來表示所有的資料,而我們日常生活中的數字都是10進制的,那我們平時使用的數字如果在計算機中表示時就需要進行進制的轉換,

進制轉換

R進制轉10進制

R進制轉10進制可以使用按權展開的方法,具體的操作就是:將R進制數的每一位數值使用Rk表示,底數是R,指數是k,其中,k與該位和小數點之間的位置有關,當這個位置位于小資料左邊時,k的值是從小數點向左依次數的個數,需要注意的是:緊鄰小數點的數字位置為0,接下來是1,2…依次類推,同樣的,如果這個位置在小數點的右邊,則緊鄰小資料點位置的數字從-1開始,依次向右數為-2,-3等等,依此類推,

例如,我們給出一個二進制數字,11010101.01,轉換為10進制數字為:1 x 27 + 1 x 26 + 0 x 25 + 1 x 24 + 0 x 23 + 1 x 22 + 0 x 21 + 1 x 20 + 0 x 2-1 + 1 x 2-2

再比如,我們給出一個八進制數,76128.01,轉換為10進制數字為:7 x 84 +6 x 83 + 1 x 82 + 2 x 81 + 8 x 80 + 0 x 8-1 + 1 x 8-2

十進制轉R進制

十進制轉R進制就比較簡單了,這里我們可以使用短除法,

例如,將十進制數字69轉換為二進制的程序如下所示,

得出短除的結果后,我們需要將余數倒過來排列即為十進制69轉換為二進制的結果,所以結果資料為:1000101,

二進制與八進制互轉

二進制轉八進制時,每三位二進制數表示一個八進制數,因為在八進制中,總共有8個基數,分別是0~7,逢8進1,而如果要使用二進制來表示時,0的二進制為000,7的二進制為111,所以,每三位二進制數對應一位八進制數,反過來,每一位八進制數對應三位二進制數,

具體的劃分策略是,從二進制的低位開始,從低到高,也就是從右向左,每三位二進制數對應一個八進制數,不足三位的前面補0,例如,我們將二進制數:10001110轉化為八進制數的程序,具體如下所示,

所以,二進制數10001110轉化為八進制數的結果為216,

同理,八進制轉二進制與二進制轉八進制正好相反,八進制的每一位對應三位的二進制數,也就是說,將八進制數的每一位轉化成三位的二進制數即可,

二進制與十六進制互轉

在十六進制表示的數字中,總共有15個基數,為0~15,逢16進1,如果要將二進制數轉化為十六進制數時,首先要弄清楚每位十六進制數需要多少為二進制數表示,在十六進制中,最大的基數為15,15的二進制表示為:1111,最小的基數為0,0的二進制數為0000,也就是說,十六進制的基礎使用二進制表示為 0000~1111,所以,每位十六進制數需要四位二進制數表示,

從二進制數的低位開始,也就是從右側開始,每四位二進制數對應一位十六進制數,

例如,我們需要將二進制數10001110轉換為十六進制數,如下所示,

注意:在十六進制中,分別使用A,B,C,D,E,F代表10,11,12,13,14,15,

所以,二進制10001110轉化為十六進制的結果為8E,

十六進制轉二進制與二進制轉十六進制正好相反,將十六進制的每一位轉換為四位二進制數即可,

資料的碼制

在計算機中,帶符號的機器數可以采用原碼、反碼、補碼和移碼表示,這些編碼稱為碼制,

原碼

在原碼表示中,最高位是符號位,0表示正號,1表示負號,其余的n-1位表示數值的絕對值,數值0的原碼有兩種表示形式: [ + 0 ] 原 [+0]_原 [+0]? = 0 0000000, [ ? 0 ] 原 [-0]_原 [?0]? = 1 0000000,

反碼

在反碼中,最高位是符號位,0表示正號,1表示負號,正數的反碼與原碼相同,負數的反碼是其絕對值按位取反,數值0的反碼有兩種表示形式: [ + 0 ] 反 [+0]_反 [+0]? = 0 0000000, [ ? 0 ] 反 [-0]_反 [?0]? = 1 1111111,

補碼

在補碼中,最高位是符號位,0表示正號,1表示負號,正數的補碼與原碼和反碼相同,負數的補碼等于其反碼的末位加1,在補碼的表示中,0有唯一的補碼: [ + 0 ] 補 [+0]_補 [+0]? = 0 0000000, [ ? 0 ] 補 [-0]_補 [?0]? = 0 0000000,

移碼

移碼表示法是在數X上增加一個偏移量來定義的,常用于表示浮點數中的階碼,如果機器字長為n,規定偏移量為 2n-1

實際上,在偏移 2n-1的情況下,只要將補碼的符號位取反就可以獲得相應的移碼,

碼制總結

我們來看下面的表格,這里,我直接使用八位的二進制數來表示相應的數值,

碼制數值1數值-11-1
原碼0000 00011000 00011000 0010
反碼0000 00011111 11101111 1111
補碼0000 00011111 11110000 0000
移碼1000 00010111 11111000 0000

通過表格我們發現:

  • 正數的原碼、反碼和補碼是相同的,
  • 負數的反碼是原碼除符號位外,其他位分別取反;
  • 負數的補碼是其反碼的末位加1,
  • 移碼是在補碼的基礎上符號位取反得到,

在負數的原碼和補碼的轉換中,我們可以得出如下結論:

  • 負數的原碼轉補碼是在原碼的基礎上除符號位外,其他位取反,然后末位加1,
  • 負數的補碼轉原碼是在補碼的基礎上除符號位外,其他位取反,然后末位加1,

也就是說,負數的原碼轉補碼和補碼轉原碼的規則是一樣的,小伙伴們可以根據表格自行驗證

計算機使用補碼進行加減法運算

我們再來看表格的最后一列 1-1,在計算機中,表示為1+(-1),其正確的結果應該為0,接下來,我們分別分析下使用原碼、反碼、補碼和移碼進行加減法運算的結果的正確性,

  • 表格的第一行中,使用原碼計算的結果為1000 0010,轉換為10進制數為-2,1-1不等于-2,所以,使用原碼進行加減法運算的結果是錯誤的,
  • 在反碼中,計算1-1的結果為1111 1111,顯然結果不為0,所以,使用反碼進行加減法運算的結果是錯誤的,
  • 在補碼中,計算1-1的結果為0000 0000,結果為0,所以,使用補碼進行加減法運算的結果是正確的,
  • 在移碼中,計算1-1的結果為1000 0000,結果為-0,雖然-0也等于0,但是嚴格意義來講,這個結果是不正確的,

在計算機中,不會使用移碼進行加減法運算,移碼用于浮點數的階碼,

數值的表示范圍

在計算機中,碼制所表示的范圍,可以分為定點整數和定點小數,在定點數中,小數點是固定的,定點整數就是說小數點在最低位的后面,也就是在最右面,此時的小數點可以忽略不寫,定點小數就是小數點在最高位的前面,也就是在最左邊,

值得注意的是:在定點整數和定點小數中,小數點都不占位數,所以,小數點在定點整數和定點小數中不會影響數值的范圍,

我們可以將定點整數和定點小數的取值范圍總結成下表所示,

碼制定點整數定點小數
原碼-(2n-1 -1) ~ +(2n-1 -1)-(1-2-(n-1)) ~ +(1-2-(n-1))
反碼-(2n-1 -1) ~ +(2n-1 -1)-(1-2-(n-1)) ~ +(1-2-(n-1))
補碼-2n-1 ~ +(2n-1 -1)-1~ +(1-2-(n-1))
移碼-2n-1 ~ +(2n-1 -1)-1~ +(1-2-(n-1))

表格中的n表示機器的字長,也就是用多少位二進制數表示,

這張表小伙伴們不用死記硬背,說白了,這張表,冰河也記不住,那我們怎么辦呢?不慌,這里,我給大家舉一個例子,

在這里插入圖片描述

例如,我們這里使用4位機器字長來表示,為了理解方便,這里我用四個方框來表示4位二進制數,

在這里插入圖片描述

默認最高位為符號位,如下所示,

在這里插入圖片描述

這里我們先用4位二進制數表示定點整數,則最小值為1111,最大值為0111,

最小值1111表示如下,

在這里插入圖片描述

其轉換成10進制數為-7,

最大值0111表示如下,

在這里插入圖片描述

其轉換為10進制數為7,

這樣,我們使用4位二進制數表示的范圍,則可以計算出結果為:-7 ~ 7,也就是 -(24-1 - 1) ~ +(24-1 -1),所以,當使用n位二進制數表示數值的范圍時,我們可以得出資料的表示范圍為: -(2n-1 - 1) ~ +(2n-1 -1)

所以,我們根本就不需要記住定點整數和定點小數的取值范圍表,只需要簡單的使用一個實際的二進制位進行驗算即可得出正確的結果資料,比如,我這里以4位二進制位進行驗算舉例,

還有一點需要注意的是:補碼和移碼比原碼和反碼少一個數,就是-0,另外,驗證定點小數和驗證定點整數的方式相同,小伙伴們可自行驗證定點小數的值,這里,我就不再贅述,

如果我們使用8位二進制數表示,則定點整數的取值范圍為:

1111 1111 ~ 0111 1111 轉換為十進制數就是: -127 ~ 127,將二進制數轉換為補碼為:1000 0000 ~ 0111 1111,

其中,-128的補碼為1000 0000是人為規定的,

如果使用8位二進制數表示,則定點小數的取值范圍為:

-0.1111 1111 ~ +0.11111111,補碼的范圍為: -1~ + +0.11111111,

其中,-1的補碼為1000 0000是人為規定的,

浮點數的運算

浮點數的表示

首先,我們先來看下浮點數的表示形式,浮點數的表示形式如下,

N = 尾數 * 基數指數

對于浮點數來說,我們最常說的就是圓周率 π,數學上常使用3.14來表示π的值,如果使用科學計演算法的話,我們可以使用形如3.14 * 103 這樣的數來表示,其中,在3.14 * 103中,3.14表示尾數,10表示基數,3表示指數,

另外,3.14 * 103 可以寫成多種形式,比如可以寫成 0.314 * 104,也可以寫成0.0314 * 105

浮點數的存盤格式

浮點數在計算機中的表示中,階碼是帶符號的純整數,尾數為帶符號的純小數,浮點數的表示格式如下所示,

在這里插入圖片描述

一個數的浮點數表示不是唯一的,當小數點的位置發生改變時,階碼也會相應的改變,可以使用多個浮點形式表示同一個浮點數,浮點數的數值范圍主要由階碼決定,數值的精度則是由尾數決定的,

浮點數的運算程序

運算的程序要依次經歷對階、尾數計算和結果格式化三個階段,

例如計算:3.14 * 103 + 1.5 * 105的結果資料,

首先,我們需要先進行對階操作,這里有個原則就是小數向大樹看齊,這里我們需要將3.14 * 103進行對階操作,轉化成0.0314 * 105,然后與1.5 * 105進行相加操作,得出結果資料1.5314 * 105

在這里插入圖片描述

接下來,我們再來看看浮點數的特點,

浮點數的特點

浮點數的主要特點如下所示,

  • 一般尾數使用補碼表示,階碼使用移碼表示,
  • 階碼的位數決定數的表示范圍,位數越多范圍越大,
  • 尾數的位數決定數的有效精度,位數越多精度越高,
  • 對階時,小數向大數看齊,
  • 對階是通過較小數的尾數右移實作的,

計算機結構

計算機結構主要由運算器、控制器、存盤器、輸入設備和輸出設備組成,簡化的結構圖如下圖所示,

在這里插入圖片描述

接下來,我們再看看看其詳細的結構圖如下所示,

在這里插入圖片描述

其中,主存盤器又叫做記憶體儲器,也就是記憶體;輔助存盤器又叫做輔存,也就是外存盤器,例如磁盤;CPU的核心部件為運算器和控制器,

CPU由運算器、控制器、暫存器組和內部總線組成,

在這里插入圖片描述

運算器包含:算術邏輯單元、累加暫存器、資料緩沖暫存器、狀態條件暫存器,

在這里插入圖片描述

  • 算術邏輯單元(ALU):資料的算術運算和邏輯運算,
  • 累加暫存器(AC):通用暫存器,為ALU提供一個作業區,用于暫存資料,
  • 資料緩沖暫存器(DR):寫記憶體時,暫存指令或資料,
  • 狀態條件暫存器(PSW):存盤狀態標志和控制標志,有時也可以將狀態條件暫存器歸為控制器部分,

控制器包含:程式計數器、指令暫存器、指令譯碼器、時序部件,

在這里插入圖片描述

  • 程式計數器(PC):存盤下一條要執行的指令的地址,
  • 指令暫存器(IR):存盤即將執行的指令,
  • 指令譯碼器(ID):對指令中的操作碼欄位進行分析解釋,
  • 時序部件:提供時序控制信號,

計算機體系結構分類

首先,我們先來看一個在計算機領域中,對計算機的體系結構進行分類的一種經典方法,就是Flynn分類法,Flynn分類法將計算機分成單指令流單資料流、單指令流多資料流、多指令流單資料流、多指令流多資料流,

在這里插入圖片描述

具體資訊如下表所示,

體系結構型別結構關鍵特性代表
單指令流單資料流(SISD)控制部分:一個 處理器:一個 主存模塊:一個單處理器系統
單指令流多資料流(SIMD)控制部分:一個 處理器:多個 主存模塊:多個各處理機以異步的形式執行同一潭訓靈并行處理機、陣列處理機、超級向量處理機
多指令流單資料流(MISD)控制部分:多個 處理器:一個 主存模塊:多個被證明是不可能的,至少是不實際的目前沒有,有資料記載流水線處理機為此類
多指令流多資料流(MIMD)控制部分:多個 處理器:多個 主存模塊:多個能夠實作作業、任務、指令等各級全面并行多處理機系統、多計算機

指令的基本概念

一條指令就是機器語言的一個陳述句,它是一組有意義的二進制代碼,指令的格式如下所示,

在這里插入圖片描述

其中,操作碼部分指出了計算機要執行什么性質的操作,例如,加法、減法、取數、存數等,地址碼欄位需要包含各運算元的地址及操作結果的存放地址等,從其地址結構的角度可以分為三地址指令、二地址指令、一地址指令和零地址指令,

三地址指令

在這里插入圖片描述

例如,執行a+b=c操作時,就是使用的三地址指令,此時如下所示,

在這里插入圖片描述

二地址指令

在這里插入圖片描述

例如,執行a+=b操作時,執行的就是二地址指令,此時如下所示,

在這里插入圖片描述

一地址指令

在這里插入圖片描述

例如,執行a++操作時,執行的就是一地址指令,此時如下所示,

在這里插入圖片描述

零地址指令

在這里插入圖片描述

例如,宕機就是零地址指令,

尋址方式

總體來說,尋址方式可以分為:立即尋址、直接尋址、間接尋址、暫存器尋址、暫存器間接尋址,
在這里插入圖片描述

  • 立即尋址:運算元直接在指令中,速度快,靈活性差,
  • 間接尋址:指令中存放的是運算元的地址,
  • 間接尋址:指令中存放了一個地址,這個地址對應的內容是運算元的地址,
  • 暫存器尋址:暫存器存放運算元,
  • 暫存器記憶體放的是運算元的地址,

CISC與RISC

CISC和RISC分別表示復雜指令集系統和精簡指令集系統,具體資訊如下表所示,

指令系統型別指令存執方式實作方式其他
CISC(復雜)數量多、使用頻率差別大,可變長格式支持多種微程式控制技術(微碼)研發周期長
SISC(精簡)數量少,使用頻率接近,定長格式,大部分為單周期指令,操作暫存器,只有Load/Store操作記憶體,支持方式少增加了通信暫存器、硬布線邏輯控制為主,適合采用流水線優化編譯,有效支持高級編程語言

如何比較CISC和RISC,分哪些維度?

指令數量、指令使用頻率、存執方式、暫存器、流水線支持、高級語言支持,

  • CISC:復雜、指令數量多,頻率差別大、多尋址,
  • RISC:精簡、指令數量少,操作暫存器,單周期,少尋址,多通用暫存器,流水線,

流水線概念

流水線是指在程式執行時,多條指令重疊進行操作的一種準并行處理的實作技術,各種部件同時處理是針對不同指令而言的,它們同時為多條指令的不同部分進行作業,以提高各部件的利用率和指令的平均執行速度,

流水線的相關引數計算包括:流水線執行時間計算、流水線吞吐率、流水線加速比、流水線效率,

在這里插入圖片描述

在計算機中,對于指令的操作主要分為三個部分:取指、分析和執行,如下所示,

在這里插入圖片描述

如果執行取值、分析和執行各需要1ms的話,則串行執行三條指令的時間總共需要9ms,這是因為一條執行的操作需要經過取指、分析和執行三個步驟,每個步驟需要1ms,執行一條指令的時間為3ms,則串行執行三條指令的時間為9ms,我們可以用下圖來表示這個程序,

在這里插入圖片描述

在上圖的表示中,貌似執行三條指令使用9ms是沒啥問題的,但是,如果我們把圖形改造一下,我們就會發現相應的問題,我們使用下面的圖形來表示執行三條指令的情況,

在這里插入圖片描述

此時,我們發現,在上圖執行指令操作的程序中,有很多空白的格子,而空白的格子表示在執行執行的程序中有空余的時間片資源沒有利用起來,很顯然,沒有必要等待指令1完全執行完畢后再執行指令2,同樣的,沒有必要等待指令2完全執行完畢后再執行指令3,而且,我們發現按照上圖執行完三條指令需要9ms時間,

此時,如果將空余的時間片利用起來,則可以使用下圖來表示,

在這里插入圖片描述

此時,在執行三條指令的程序中,取指操作對指令1執行完取指后,馬上對指令2進行取指,然后又馬上對指令3進行取指;分析操作同樣是對指令1執行完分析后,馬上對指令2進行分析,然后又馬上對指令3進行分析;執行操作也是對指令1執行完畢后,馬上對指令2進行執行操作,然后又馬上對指令3進行執行操作,期間,將空余的時間片資源充分的利用起來了,而且,我們發現,充分利用空余的時間片后,執行三條指令的時間由原來的9ms變為現在的5ms,

從另一個角度,我們發現執行完第一條指令時,需要3ms,執行完第二條指令時,只需要在執行完第一條指令的基礎上增加1ms,同樣的,執行完第三條指令時,只需要在執行完第二條指令的基礎上增加1ms,以后每增加一條指令,只需要增加1ms的時間便可以執行完此條指令,

這就是計算機中的流水線技術,接下來,我們就說說流水線技術的相關計算問題,

流水線計算

關于流水線計算,我們先來看一個圖,
在這里插入圖片描述

在上圖中,我們可以看出,執行完第一條指令時,需要3ms時間,執行完第二條指令時,只需要在執行完第一條指令的基礎上增加1ms;執行完第三條指令時,只需要在執行完第二條指令的基礎上增加1ms,以此類推,執行完第n條指令時,只需要在執行第n-1條指令的基礎上增加1ms,說到這里,不知道小伙伴們有沒有思考這樣一個問題,流水線技術的這種規律就涉及到一個非常重要的概念,叫作 流水線周期

流水線周期為執行時間最長的一段,上圖中的流水線周期為1ms

流水線的計算公式為:

1條指令執行時間 + (指令條數 -1)*  流水線周期

流水線的理論公式如下所示,

(t1 + t2 + ... + tk) + (n-1) * △t

其中t1,t2…tk表示執行一條指令的每個步驟分別需要的時間,n為指令的條數,△t為流水線周期,

流水線的實踐公式如下所示,

k*△t + (n-1) * △t

其中,k為執行一條指令的步驟數,n為指令的條數,△t為流水線周期,

這里,給小伙伴們舉一個例子,

在這里插入圖片描述

例如,一條執行的執行程序可以分解為取指,分析和執行三步,在取指時間t取指=3△t,分析時間分析=2△t,執行時間t執行=4△t的情況下,若按照串行方式執行,則10條指令全部執行完需要多少△t?若按照流水線方式執行,流水線周期為多少△t?使用流水線方式時,執行完10條指令需要多少△t?

(1)串行方式比較簡單,就是將每條指令的執行時間進行累加,

(3△t + 2△t + 4△t) * 10 = 90△t,

(2)在執行一條指令的程序中,取指為3△t,分析為2△t,執行為4△t,根據流水線中對于流水線周期的定義:流水線周期為執行時間最長的一段,所以,流水線周期為4△t,

(3)使用流水線方式時,執行完10條指令需要的時間可以使用如下方式進行計算,

這里,我們分別計算下理論時間和實踐時間,

  • 理論時間

(3△t + 2△t + 4△t) + (10-1) * 4△t = 45△t,

  • 實踐時間

3 * 4△t + (10-1) * 4△t = 48△t,

超標量流水線

關于超標量流水線,我們可以使用下圖來表示,

在這里插入圖片描述

在超標量流水線中,有一個概念叫作度,度表示在超標量流水線中,由幾條流水線組成,例如上面的圖中,超標量流水線由兩條流水線組成,所以,度為2,此時的超標量流水線可以同時進行2個操作,也就是說,可以同時執行兩個取指操作,可以同時執行兩個分析操作,也可以同時執行兩個執行操作,

如果此時有10條指令需要執行,使用以上超標量流水線的話,只需要10 / 2 = 5 條指令的時間,

流水線吞吐率計算

流水線的吞吐率(TP)是指在單位時間內流水線所完成的任務數量或輸出的結果數量,計算流水線吞吐流程的最基本的公式如下所示,

在這里插入圖片描述

流水線最大吞吐率計算公式如下所示,

在這里插入圖片描述

流水線的吞吐率計算問題相對來說還是比較簡單的,

層次化存盤結構

首先,問小伙伴們一個問題:計算機的存盤結構為什么需要進行層次化的劃分呢?

說的直接一點:就是為了減少經濟成本,如果說,CPU的價格非常便宜的話,根本就不需要記憶體了,可以把所有的記憶體容量全部都做到CPU里面去,就可以了,但是,事實上,CPU的記憶體是很精貴的,至今為止,CPU中基本上還是一級快取和二級快取,三級快取比較少見,而且,CPU中的存盤容量是非常小的,基本都是KB級別的存盤,CPU的記憶體容量也就幾KB,MB級別的CPU記憶體也是比較少見的,所以,出于經濟成本的考慮,計算機中的存盤結構是按照層次進行劃分的,

為了能夠讓小伙伴們更加清晰的理解層次化存盤結構,我們先來看一張圖,

在這里插入圖片描述

由上圖,可以看出:

(1)層次化的存盤結構可以分為:CPU、Cache(高速快取)、主存(記憶體)、外存(輔存),

(2)從上往下,速度越來越慢,容量越來越大,

區域性原理是層次化存盤結構的支撐,

區域性原理

一個撰寫良好的計算機程式常常具有良好的區域性,也就是說,它們傾向于參考臨近于其他最近參考過的資料項的資料項,或者最近參考過的資料項本身,這匯總傾向性,就被稱為區域性原理,這是一個持久的概念,對硬體和軟體系統的設計和性能都有著極大的影響,

之所以有這個規律,很多人認為原因是:程式的指令大部分時間是順序執行的,而且程式的集合,如陣列等各種資料結構是連續存放的,

區域性原理講的是:在一段時間內,整個程式的執行僅限于程式的某一部分,相應地,程式訪問的存盤空間也局限于某個記憶體區域,主要分為兩類:

在這里插入圖片描述

  • 時間區域性:如果程式中的某條指令一旦執行,則不久之后該指令可能再次被執行;如果某資料被訪問,則不久之后該資料可能再次被訪問,
  • 空間區域性:是指一旦程式訪問了某個存盤單元,則不久之后,其附近的存盤單元也將被訪問,

Cache

針對Cache相關的技術,我們主要來聊聊Cache的概念和映像相關的技術,

Cache-概念

這里的Cache表示的是高速緩沖,在計算機的存盤體系系統中,Cache是除暫存器外訪問速度最快的層次, 使用Cache改善系統性能的依據是程式的區域性原理

如果以h代表對Cache的訪問命中率,t1表示Cache的周期時間,t2表示主存盤器的周期時間,以讀操作為例,使用“Cache+主存盤器”的系統的平均周期為t3,則可以得出如下運算公式,

t3 = h * t1 + (1 - h) * t2 

其中,(1 - h)又稱為失效率,也就是未命中率,

Cache-映像

Cache的映像分為三種,分別是:直接相聯映像、全相聯映像、組相聯映像,

在這里插入圖片描述

  • 直接相聯映像:硬體電路比較簡單,但沖突率最高,
  • 全相連映像:電路難于設計和實作,只適用于小容量的Cache,沖突率比較低,
  • 組相聯映像:直接相聯與全相聯的折中,

地址映像是將主存與Cache的存盤空間劃分為若干大小相同的頁(或稱為塊),

例如,一臺計算機的主存容量為1GB,劃分為2048頁,每頁512KB;Cache的容量為8MB,劃分為16頁,每頁512KB,接下來,我們由此來詳細圖解直接相聯映像、全相聯映像和組相聯映像,

直接相聯映像

我們可以畫一組圖來表示Cache的直接映像,首先,我們先來簡單畫一個主存標記、Cache頁號和頁內地址的示意圖,如下所示,

在這里插入圖片描述

如上圖所示,主存標記為7位,Cache頁號為4位,頁內地址為19位,

記錄主存區號的示意圖如下所示,

在這里插入圖片描述

有了上面兩張圖的基礎后,我們再來看直接相聯映像的示意圖如下所示,

在這里插入圖片描述

這里,我們將容量為1GB的主存劃分成2048頁,總共127個區,每頁的容量為512KB,將容量為8MB的Cache劃分為16頁,每頁容量為512KB,

所謂直接相聯映像是指Cache中的0頁只能存盤主存中0頁的內容,這里主存中0頁指的是每個區的0頁,比如上圖中的0區的0頁,1區的16頁,127區的2032頁等,

在直接相聯映像中,只需要記錄主存標記、Cache頁號和頁內地址就能夠快速的找到主存中的資料,

使用直接相聯映像有個缺點:那就是如果Cache中的0頁,存盤了主存中0區0頁的內容時,如果此時需要存盤主存1區中的16頁內容,就只能將主存0區中0頁的內容從Cache的0頁中清除,然后將主存1區中16頁的內容存盤到Cache中的0頁內,沖突率比較高,細心的小伙伴會發現:這其實是違背區域性原理的,

直接相聯映像訪問速度最快,但沖突率最高,

全相連映像

我們先來看下全相聯映像的主存頁標記和頁內地址的示意圖,如下所示,

在這里插入圖片描述

此時,使用11位來標識主存頁標記,使用19位來標識頁內地址,

使用全相連映像需要記錄主存與Cache的對應關系,如下圖所示,

在這里插入圖片描述

接下來,我們來看看全相連映像的示意圖,如下所示,

在這里插入圖片描述

從圖中可以看出,Cache中的任何一個也,都可以存盤主存中的任何一個頁,

使用全相連映像訪問速度最慢,沖突率最低,

組相聯映像

組相聯映像本質上是直接相聯映像和全相聯映像的折中,同樣的,我們先來看組相連映像的存盤示意圖,

在這里插入圖片描述

此時,在組相連映像中,Cache組號使用3位表示,組內頁號使用1位表示,頁內地址使用19位表示,其中,3位的Cache組號,1位的組內頁號和前面的7位構成了主存頁標記;3位的Cache組號,1位的組內頁號和19號的頁內地址構成了Cache地址,

接下來,我們再來看看主存與Cache的對應關系,如下圖所示,

在這里插入圖片描述

組相連的映像示意圖如下所示,

在這里插入圖片描述

由上圖可知,在組相連映像中,主存的組與Cache的組是組相聯映像關系,而在組內則是通過直接相聯映像來訪問和存盤資料,

主存編址與計算

這里,小伙伴們首先要區分兩個概念,一個是編址,一個是尋址,

編址: 存盤器是由一個個存盤單元構成的,為了對存盤器進行有效的管理,就需要對各個存盤單元編上號,即給每個單元賦予一個地址碼,這叫編址,經編址后,存盤器在邏輯上便形成一個線性地址空間,

尋址: 存取資料時,必須先給出地址碼,再由硬體電路譯碼找到資料所在地址,這叫尋址,

編址可以分為兩種:按字編址和按位元組編址

在這里插入圖片描述

  • 按字編址:存盤體的存盤單元是字存盤單元,即最小尋址單位是一個字,
  • 按位元組編址:存盤體的存盤單元是位元組存盤單元,即最小尋址單位是一個位元組,

對于主存編址中最常見的計算形式為:根據存盤器所要求的容量和選定的存盤芯片的容量,就可以計算出所需要的芯片的數量,公式如下所示,

總片數 = 總容量 / 每片的容量

這里,給小伙伴們舉一個例子:若記憶體地址區間為4000H ~ 43FFH,每個存盤單元可存盤16位二進制數,該記憶體區域使用4片存盤器芯片構成,則構成該記憶體所用的存盤器芯片的容量是多少?

解題思路也比較簡單,我們一起來看看如何解題:

(1)首先,我們來求解4000H ~ 43FFH地址空間的總容量,使用終止地址-起始地址+1即可得到總容量,也就是43FFH - 4000H + 1 = 43FFH + 1 - 4000H = 4400H - 4000H = 400H,

注意:在計算機中,以H結尾的數字是十六進制,逢16進1,而F在十六進制中表示15,所以,43FFH + 1 = 4400H,

所以,4000H ~ 43FFH地址空間的總容量為400H,

(2)接下來,我們要把400H轉換成二進制,對于十六進制數轉換成二進制數來說,每一位十六進制數對應著四位的二進制數,我們可以把400H拆分成4、0、0三部分,4轉換成二進制數就表示0100,十六進制的0轉換成二進制為0000,所以,400H轉換成二進制的結果為:0100 0000 0000,

0100 0000 0000也就是2的10次方,即為210

(3)題目中說的每個存盤單元可存盤16位二進制數,所有總共可以存盤的二進制數就是:210 * 16,

(4)該區域使用4片存盤器芯片構成,所以,存盤芯片的容量為:210 * 16 / 4 = 210 * 4 = 212,最終的結果單位為bit,

總線

一條總線同一時刻只允許一個設備發送資料,但允許多個設備接收資料,

總線的分類

總線可以分為資料總線、地址總線和控制總線,
在這里插入圖片描述

  • 資料總線(Data Bus):在CPU和RAM之間來回傳送需要處理或是需要存盤的資料,
  • 地址總線(Address Bus):用來指定在RAM(Random Access Memory)之中存盤的資料的地址,
  • 控制總線(Control Bus):將微處理器控制單元(Control Unit)的信號傳送到周邊設備,一般常見的為USB Bus和1394 Bus,

串聯系統與并聯系統

這里,先給小伙伴們簡單介紹下什么是串聯系統,什么是并聯系統,

串聯系統

串聯系統是組成系統的所有單元中任一單元失效就會導致整個系統失效的系統,把用電器各元件逐個順次連接起來,接入電路就組成了串聯電路,我們常見的裝飾用的"滿天星"小彩燈,常常就是串聯的,串聯電路有以下一些特點:⑴電路連接特點:串聯的整個電路是一個回路,各用電器依次相連,沒有"分支點",⑵用電器作業特點:各用電器相互影響,電路中一個用電器不作業,其余的用電器就無法作業,⑶開關控制特點:串聯電路中的開關控制整個電路,開關位置變了,對電路的控制作用沒有影響,即串聯電路中開關的控制作用與其在電路中的位置無關,

注:以上對于串聯系統的描述來源于網路,

接下來,我們來看一個關于串聯系統的圖形表示,這里我們假設串聯系統中每個部分的可靠度依次為R1,R2,…Rn,如下所示,

在這里插入圖片描述

則整個系統的可靠度為:R = R1 * R2 * … * Rn,

并聯系統

并聯系統指的是組成系統的所有單元都失效時才失效的系統,把電路中的元件并列地接到電路中的兩點間,電路中的電流分為幾個分支,分別流經幾個元件的連接方式叫并聯,并聯電路是使在構成并聯的電路元件間電流有一條以上的相互獨立通路,為電路組成二種基本的方式之一,例如,一個包含兩個電燈泡和一個9 V電池的簡單電路,若兩個電燈泡分別由兩組導線分開地連接到電池,則兩燈泡為并聯,

即若干二端電路元件共同跨接在一對節點之間的連接方式,這樣連成的總體稱為并聯組合,其特點是:①組合中的元件具有相同的電壓;②流入組合端點的電流等于流過幾個元件的電流之和;③線性時不變電阻元件并聯時,并聯組合等效于一個電阻元件,其電導等于各并聯電阻的電導之和,稱為并聯組合的等效電導,其倒數稱為等效電阻

注:以上對于并聯系統的描述來源于網路,

接下來,我們來看一個關于并聯系統的圖形表示,這里我們假設并聯系統中每個部分的可靠度依次為R1,R2,…Rn,如下所示,

在這里插入圖片描述

則整個并聯系統的可靠度R = 1 - (1 - R1) * (1 - R2) * … * (1-Rn),

混合型系統

混合型系統就是既有串聯系統,又有并聯系統的系統,這里,我們也使用一個圖形進行表示,如下所示,

在這里插入圖片描述

所以,上圖并聯系統的可靠度為:R * (1 - (1 - R) 3) * (1 - (1 - R) 2)

好了,今天就到這兒吧,我是冰河,大家有啥問題可以在下方留言,也可以加我微信:sun_shine_lyz,我拉你進群,一起交流技術,一起進階,一起進大廠,~~

微信搜一搜【冰河技術】 ,關注后回復【PDF】領取冰河原創PDF電子書,海量面試資料和簡歷模板,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278863.html

標籤:其他

上一篇:2021考研經歷、心得、分享

下一篇:第四屆藍橋杯單片機省賽----程式題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more