趣談linux作業系統 06 x86架構

2021-10-18 13:36:38 字數 2074 閱讀 3930

cpu(central processing unit,**處理器):對於乙個計算機來講,最核心的就是 cpu,它包含三個組成部分,運算單元,資料單元、控制單元。

運算單元:只管算,例如做加法、做位移等等。但是,它不知道應該算哪些資料,運算結果應該放在**。

資料單元:運算單元計算的資料如果每次都要經過匯流排,到記憶體裡面現拿,這樣就太慢了,所以就有了資料單元。資料單元包括 cpu 內部的快取和暫存器組,空間很小,但是速度飛快,可以暫時存放資料和運算結果。

控制單元:有了放資料的地方,也有了算的地方,還需要有個指揮到底做什麼運算的地方,這就是控制單元。控制單元是乙個統一的指揮中心,它可以獲得下一條指令,然後執行這條指令。這個指令會指導運算單元取出資料單元中的某幾個資料,計算出個結果,然後放在資料單元的某個地方。

匯流排(bus):cpu 和其他裝置連線,要靠一種叫作匯流排(bus)的東西,其實就是主機板上密密麻麻的積體電路,這些東西組成了 cpu 和其他裝置的高速通道。

程式執行的過程中要操作的資料和產生的計算結果,都會放在資料段裡面。那 cpu 怎麼執行這些程式,操作這些資料,產生一些結果,並寫入回記憶體呢?

記憶體(memery):單靠 cpu 是沒辦法完成計算任務的,很多複雜的計算任務都需要將中間結果儲存下來,然後基於中間結果進行進一步的計算。cpu 本身沒辦法儲存這麼多中間結果,這就要依賴記憶體了。

指令指標暫存器:在cpu的控制單元中有乙個指令指標暫存器,它存放的是下一條指令在記憶體中的位址。控制單元會不斷的將**段中的指令拿進來先放到指令暫存器中。

當前的指令分兩部分,一部分是做什麼操作,例如是加法還是位移;一部分是操作哪些資料。要執行這條指令,就要把第一部分交給運算單元,第二部分交給資料單元。資料單元根據資料的位址,從資料段裡讀到資料暫存器裡,就可以參與運算了。運算單元做完運算,產生的結果會暫存在資料單元的資料暫存器裡。最終,會有指令將資料寫回記憶體中的資料段。

程序切換(process switch):cpu 裡有兩個暫存器,專門儲存當前處理程序的**段的起始位址,以及資料段的起始位址。這裡面寫的都是程序 a,那當前執行的就是程序 a 的指令,等切換成程序 b,就會執行 b 的指令了,這個過程叫作程序切換(process switch)。

位址匯流排(address bus)、資料匯流排(data bus):cpu 和記憶體來來回回傳資料,靠的都是匯流排。其實匯流排上主要有兩類資料,乙個是位址資料,也就是我想拿記憶體中哪個位置的資料,這類匯流排叫位址匯流排(address bus);另一類是真正的資料,這類匯流排叫資料匯流排(data bus)。

函式呼叫的過程是通過棧實現的。例如函式a呼叫函式b,函式b呼叫函式c。a執行至呼叫函式b的時候先把函式a的相關資訊push到棧中,然後執行函式b的邏輯,當執行到呼叫函式c的地方時,把函式b的相關資訊push到棧中,這樣當函式c的邏輯執行完之後,再把函式b從棧中pop出來,繼續執行函式b剩下的**邏輯。函式b的**邏輯全部執行完後,接著把函式a從棧中pop出來,執行函式a剩下的**邏輯。這樣就利用棧實現了函式呼叫的過程。
move a b :把b值賦給a,使a=b

call和ret :call呼叫子程式,子程式以ret結尾

jmp :無條件跳

int :中斷指令

add a b : 加法,a=a+b

or :或運算

xor :異或運算

shl :算術左移

ahr :算術右移

push *** :壓***入棧

pop ***: ***出棧

inc: 加1

dec: 減1

sub a b : a=a-b

cmp: 減法比較,修改標誌位

x86的位址匯流排是20位,因此它最大的定址空間是2^20 = 1m。它將定址空間按段劃分,每個段的偏移量是16位的,因此每個段的大小是2^16 = 64k。

32位系統的位址匯流排是32根,因此它最大的定址空間是2^32 = 4g。

趣談Linux作業系統 05 系統呼叫

建立程序的系統呼叫叫fork。這個名字很奇怪,中文叫 分支 為啥啟動乙個新程序叫 分支 呢?在 linux 裡,要建立乙個新的程序,需要乙個老的程序呼叫 fork 來實現,其中老的程序叫作父程序 parent process 新的程序叫作子程序 child process 當父程序呼叫 fork 建...

作業系統概論 06

6 併發程序 6.1程序的併發性 1程序的順序性和併發性 程序的順序性是指程序在順序處理器上執行是嚴格按照順序執行 當乙個程序獨佔處理器順序執行時 具有封閉性和可再現性 若系統中存在一組可同時執行的程序 則稱為改組程序具有併發性 並把可同時執行的程序稱為 併發程序 2 併發程序相互之間可能是無關的也...

趣談Linux作業系統學習筆記 記憶體管理(22講)

記憶體管理資訊 task struct 的 mm struct 中 整個虛擬記憶體空間 1 是使用者態位址空間 2 是核心態位址空間 那這兩部分的分界線在 呢?這就要 task size 來定義 1 ifdef config x86 322 3 user space process size 3gb...