當前位置:
首頁 > 最新 > 漫談計算機體系

漫談計算機體系

人類為什麼要發明計算機?一直以來,人類都有愛偷懶的習慣,而正是由於這個原因,促使了人類發明了計算機,從而提高生產力,那麼人類有了更多空閑時間去娛樂了~~


馮.諾依曼結構的工作原理

馮諾依曼結構的計算機由五大組成部分,分別是計算器、控制器、存儲器(內存)、輸入設備和輸出設備,而計算機和控制器組成CPU(center process unit,中央處理單元)。馮.諾依曼結構的特點就是數據和指令以二進位形式,不加區別的存放在存儲器中。以計算兩個數相加為例,首先將相關代碼和數據讀入到內存中,編譯器將相關代碼編譯成彙編代碼。數據200和數據400分別存放在地址為1000、1004的地方, 表示將地址是1000的內容放到寄存器EAX中, 表示將地址是1004的內容放到寄存器EBX中, 表示將EAX和EBX的內容相加,並將結果存放到EBX寄存器中。我們發現,簡單的數據相加在彙編層面卻對應著3條指令,如果更加複雜的數據運算就需要更加複雜的指令了。

馮諾依曼結構圖

CPU通過I/O橋和內存相連,I/O橋和IO匯流排相連,IO匯流排掛載著USB控制器、圖形控制器和磁碟控制器。匯流排結構(不是所有的設備都是兩兩相連,而是通過匯流排結構)

SOA也是匯流排結構,服務之間並不是兩兩相連的

代碼存放在磁碟中,如果要運行代碼,首先需要將磁碟中的代碼放到內存中,然後CPU找到這段程序的第一個地址,例如找到main方法的地址

計算機各部件連接圖

I/O橋是對南橋和北橋的抽象

北橋:連接的是快速設備,例如連接的是內存

南橋:連接的是慢速設備

I/O南北橋


常見的指令格式有三地址指令、二地址指令、一地址指令和零地址指令,如下圖所示,其中,二地址指令所佔用的空間比三地址指令要少,x86系列的處理器就是採用二地址形式的;一地址指令通常被用作累加器;零地址指令地址比較緊湊,但是要完成一件事情,一般會比二地址或三地址指令需要更多的指令,例如

iconst_1iconst_2iaddistore_0

iadd(表示整形加法)指令並沒有任何參數。連源地址都沒有指定,零地址指令有什麼作用?零地址意味著源和目標都是隱含參數,其實現依賴於一種常見的數據結構--棧。

指令格式

指令的執行是分步驟的(取指、解碼、執行等),也正是這個原因,它對應著不同的部件,這些部件我們要充分的利用起來,所以才有了流水線這個概念。如果不採用流水線,那麼CPU的速度會變得很慢,譬如:當取值部件正在取值時,解碼、執行部件是空閑的。所以,當一條指令在解碼的時候,另一條指令從內存中取指令,這樣做,取值部件和解碼部件都可以利用起來了。

流水線

下面這張圖描述的是CPU、內存、硬碟和網路之間的速度差異,其中,CPU的速度是1s,主存速度是6min,硬碟速度是1~12個月,而網路速度則達到19年,我們發現這些設備的速度差別巨大,內存比CPU慢幾百倍,硬碟比CPU慢幾十萬倍,網路比CPU慢千萬倍,這樣一來,CPU能坐等內存或硬碟慢吞吞的幹活嗎?或者說,有什麼方法解決這種局面嗎?

CPU、內存、硬碟和網路速度


1. 提升硬碟等設備的速度,和CPU匹配(現階段不可能)

2. 承認局限,但充分壓榨CPU的能力,讓CPU"忙死"

同步 -> 非同步非同步經典的例子就是DMA(Direct Memory Access,直接內存訪問),CPU發起一個硬碟讀的操作之後,不等待硬碟完成,立刻去干別的事情,由DMA控制器來負責把數據從硬碟讀到內存,完成後通知CPU。

順序 -> 並發順序就是每個程序按序執行;並發就是在單個CPU上通過時間片切換方式實現執行不同指令,由於時間片很短,人類是感覺不出來的,因此我們感覺多個程序是並行執行的;而並行是在多個CPU上實現多個程序同時執行。

順序圖

並發圖

增加中間層局部性原理分為時間局部性原理和空間局部性原理,時間局部性:如果程序中的某條指令一旦執行,則不久之後該指令可能再次被執行;如果某條數據被訪問,則不就之後該數據可能被再次訪問。空間局部性是指一旦程序訪問了某個存儲單元,則不久之後,其附近的存儲單元也將被訪問。針對CPU而言,增加中間層就是增加緩存。當CPU要讀取一個數據時,首先從CPU緩存中查找,找到就立即讀取並送給CPU;沒有找到,就從速率相對較慢的內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。

資源 | 乾貨 | 感悟


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 木可大大 的精彩文章:

TAG:木可大大 |