簡而易懂的CPU和MMU畫圖講解

我們知道,程序文件一般放在硬盤上,當把程序運行起來產生進程是,程序被放入內存中,通過內存放入cache,通過cache進入cpu,進入cpu的是程序的一條條指令,即01組合,下圖中預取器就是負責從cache取出指令,然後由譯碼器譯碼,譯碼的作用就是要知道需要哪些寄存器配合完成指令,如該指令是一個加法運算,則譯碼器譯碼後發現需要使用到add,eax和ebx寄存器,然後交給ALU算數邏輯單元進行算數運算,結果放回寄存器,再放入cache,再放入內存,之後交給IO總線,再交給物理設備顯示到屏幕上。
在這裏插入圖片描述
下圖是一個0到4G的虛擬地址空間,.text存放代碼,.data存放數據,heap是堆區,stack是棧區,這0到3G是用戶區,3到4G是內核區,當程序運行的時候便會產生這樣一個虛擬地址空間,程序運行時所需的所有資源都放到虛擬內存中。虛擬內存不是真實存在的,圖中所示的4G大小的虛擬內存是指程序運行可用的地址空間有4G,程序運行的資源最終還是要放到物理內存中。那虛擬地址和物理地址如何對應?就是使用MMU。MMU:內存管理單元,用於完成虛擬內存和物理內存的映射,位於CPU內部;MMU將虛擬內存映射到物理內存,以及設置修改CPU的訪問級別,如printf函數,要調用系統函數write,要進入內核空間,此時CPU的訪問級別由3級用戶空間轉換到0級內核空間。
在這裏插入圖片描述
下圖所示爲在同一個機器上運行兩份可執行程序a.out,產生兩個虛擬地址空間,其中,兩個進程的用戶態虛擬地址被MMU映射到物理內存的不同地址,但是內核態映射到同一個地址(針對單核來講),而PCB雖然位於內核中,兩個進程的PCB是不一樣的,只是位於同一個物理地址處。
在這裏插入圖片描述
綜上,程序運行的時候產生虛擬地址空間,預取器取處指令後需要MMU的配合,將虛擬地址映射到物理地址才能正在取出數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章