Linux之x86架構

凱凱王的技術生涯發表於2021-01-01

x86是一個開放的平臺

計算機工作模式

基本組成

在這裡插入圖片描述

  • CPU:中央處理器,計算機的大腦
  • 匯流排:CPU和其他裝置通過匯流排連線,匯流排其實就是主機板上密密麻麻的積體電路,組成了CPU和其他裝置的高速通道
  • 記憶體:單靠CPU是無法完成計算任務的,很多複雜計算任務都需要將中間結果儲存下來,基於中間結果進一步計算,中間結果由於量大,所以就需要依賴記憶體了。

CPU和記憶體配合工作

CPU包括三個部分:

  • 運算單元:只負責計算,例如位移、加法等,但是不知道應該算哪些資料,運算結果放在哪
  • 資料單元:包含CPU內部的快取和暫存器組,空間雖小,但速度快,暫時存放資料和運算結果。出現原因是不用運算單元去經過匯流排去記憶體裡拿(這種過於耗時)。
  • 控制單元:指揮運算的地方,是一個統一的指揮中心,它可以獲得下一條指令,然後執行這條指令,這個指令會指導運算單元去取資料單元裡的某幾個資料,計算出結果,然後放到資料單元裡某個位置
    在這裡插入圖片描述
    每個專案都有一個專案執行計劃書,是一行行專案執行的指令,都是放在檔案庫裡面的。即每個程式都有一個程式放在磁碟上,是二進位制的,裡面是一行行的指令,操作一些資料。

程式一旦執行,比如上圖中程式A和程式B會有獨立的記憶體空間,互相隔離,程式會分別載入到程式A和程式B的記憶體空間裡,形成各自的程式碼段。

CPU如何將資料寫回記憶體

CPU控制單元裡有個指令指標暫存器,裡面存放的是下一條指令再記憶體中的地址。

控制單元會不停的將程式碼段的指令拿進來,先放入指令暫存器。
指令分兩部分:做什麼操作和操作哪些資料
具體執行指令需要

  • 做什麼操作交給運算單元
  • 操作哪些資料交給資料單元

具體執行

  • 資料單元根據資料的地址,從資料段裡讀到資料暫存器裡,參與運算
  • 運算單元做完運算,產生的結果會暫存再資料單元的資料暫存器裡
  • 最終會有指令將資料寫回記憶體的資料段

CPU裡有兩個暫存器,專門用來儲存當前處理程式的程式碼段起始地址和資料段的起始地址,當程式切換的時候,這裡的地址就會發生變換。

CPU和記憶體傳資料靠的都是匯流排,匯流排有兩類

  • 地址匯流排:地址資料,代表記憶體中那個位置
  • 資料匯流排:真正儲存的資料

地址匯流排的位數決定了定址範圍,資料匯流排的位數決定了一次能拿的資料大小。

相關文章