CPU中常見寄存器及與內存的交互

本篇博客關於指令集和PSW的內容參考至:https://www.cnblogs.com/f-ck-need-u/p/11141636.html,同時做下了寄存器與內存交互的總結。

指令集

對於每個CPU,其都有一套自己可以執行的專門的指令集(這部分指令由CPU提供)。

正是因爲不同CPU架構的指令集不同,使得X86處理器不能執行ARM程序,ARM程序也不能執行X86程序(Inter和AMD都使用x86指令集,手機絕大多數使用ARM指令集)。

注意:指令集具有軟硬件層次之分:硬件指令集是硬件層次上由CPU自身提供的可執行的指令集合。軟件指令集是指語言程序庫所提供的指令,只要安裝了該語言的程序庫,指令就可以執行。

寄存器

當程序要執行的部分被裝載到內存中後,CPU要從內存中取出指令,然後指令解碼(以便知道類型和操作數,簡單的理解爲:CPU要知道這是什麼指令),然後執行該指令。再然後取下一個指令,重複以上操作。

由於CPU訪問內存已得到指令或數據的時間要比執行指令花費的時間多得多,因此在CPU內部提供了一些來保存關鍵變量、臨時數據等信息的通用寄存器

所以,CPU需要提供一些特定的指令,使得可以從內存中讀取數據存入寄存器以及將寄存器數據存入內存。

常見寄存器

IP寄存器:用來指向當前執行指令的下一條指令(非Inter廠家將IP寄存器稱爲PC寄存器:即程序計數器),指令取出後,就會更新該寄存器指向下一條指令;

CS寄存器:代碼段寄存器,一般用於存放代碼;

通常CS和IP配合使用,用於處理下一條執行的代碼。

DS寄存器:數據段寄存器,一般用於存放數據;

  • 一段內存定義爲一個段,用一個段地址指示段,用偏移地址訪問段內的單元;
  • 用一個段存放數據,將它定義爲“數據段”。用一段存放代碼,將它定義爲“代碼段”,用一段當做棧,將它定義爲“棧段”。
  • 對於數據段,將它的段地址放到DS中,用mov、add、sub等訪問內存單元的指令時,CPU就將我們定義的數據段中的內容當做數據來訪問。對於代碼段,將它的段地址放在CS中,將段中第一條指令的偏移地址放在IP中,這樣CPU就將執行我們定義的的代碼段中的指令。
  • CPU將內存中的某段內容當做代碼,是因爲CS:IP指向哪裏。

存儲寄存器

MAR:保存將要被訪問數據在內存中哪個地址,保存的是地址值

MDR:保存從內存讀取進來的數據或將要被寫入內存的數據,保存的是數據值

IR:保存當前正在執行的指令

  • 存儲器地址寄存器(MAR)和存儲器數據寄存器(MDR)是主存和CPU之間的接口。MAR可以接收由程序計數器(PC)的指令地址或來自運算器的操作數的地址,以確定要訪問的單元。MDR是向主存寫入數據或從主存讀出數據的緩衝部件。MAR和MDR從功能上看屬於主存,但通常放在CPU內。

AC寄存器:累加寄存器,當運算器的算術邏輯單元(ALU)執行算術或邏輯運算時,爲ALU提供一個工作區。累加寄存器暫時存放ALU運算的結果信息。

  • ALU:算數邏輯單元,CPU中的關鍵部件,用來實現指令所指定的各種算術和邏輯運算操作。
  • CU:控制器,負責將存儲器中的數據送到ALU中去做運算,並將運算結果存回到存儲器中

如下示意圖:
在這裏插入圖片描述

跟着上圖,以取數相加指令爲例:

取指:首先指令地址在PC中,通過片內總線然後送到MAR寄存器中,MAR通過與內存管理器交互,將MAR指令下那條地址的指令取出來放到MDR寄存器中。接着送到IR寄存器(IR:存儲當前指令);

解碼:將指令的操作碼部分送給CU,由CU負責解碼;

執行指令:因爲是取數相加指令, 首先進行取數操作,在CU幫助下, 將取數指令的地址碼送到MAR中, 然後通過與內存控制器交互,從內存中取出該地址下的數據到MDR;由於需要進行邏輯運算,通過CU控制,將兩個MDR寄存器(保存了來自內存的兩個數據)中的值拷貝到ALU中,然後ALU進行加法操作(中間可能使用到AC寄存器),計算完畢後將結果拷貝到MDR寄存器,最後寫入回內存。

PSW

補充說明一個重要的寄存器:PSW。

在CPU中,有着PSW寄存器,表示程序狀態字,這個寄存器中保存了一些控制位,比如CPU的優先級、CPU的工作模式(用戶態、內核態)。

在CPU進行進程切換的時候,需要將寄存器中和當前進程有關的狀態數據寫入內存對應的位置(內核中該進程的棧空間)保存起來,當切換回該進程時,需要從內存中拷貝回寄存器中。即上下文切換時,需要保護現場和恢復現場。

內核態的CPU,可以執行指令集中的所有指令,並使用硬件的所有功能。

用戶態的CPU,只允許執行指令集中的部分指令。一般而言,IO相關和把內存保護相關的所有執行在用戶態下都是被禁止的,此外其它一些特權指令也是被禁止的,比如用戶態下不能將PSW的模式設置控制位設置成內核態。

用戶態CPU想要執行特權操作,需要發起系統調用來請求內核幫忙完成對應的操作。其實是在發起系統調用後,CPU會執行trap指令陷入(trap)到內核。當特權操作完成後,需要執行一個指令讓CPU返回到用戶態。

除了系統調用會陷入內核,更多的是硬件會引起trap行爲陷入內核,使得CPU控制權可以回到操作系統,以便操作系統去決定如何處理硬件異常。

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