cpu與寄存器,內核態與用戶態及如何切換


cpu:相當於計算機的大腦負責運算和發送命令;

寄存器:寄存器是cpu當中的一個有限存儲部件,cpu從內存調用數據時,寄存器會將從內存調用的數據進行更新在寄存器中以一個字或變量進行存儲。

        寄存器總共分為四種:

                1.通用寄存器:用來保存變量與臨時結果

                2.程序寄存器:保存了將要取下的一條指令的內存地址

                3.堆棧指針:它指向內存當前棧的頂端。該棧包含已經進入但是還沒有退出的每個過程中的一個框架。在一個過程的堆棧框架中保存了有關輸入參數,局部變量以及那寫沒有及時保存在寄存器中的臨時變量。

                4.程序狀態寄存器:這個寄存器包含了條碼位(由比較指令設置),cpu優先級,模式(用戶態或內核態),以及各種其他控制位。用戶通常讀入整個psw,但是只對其少量的字段寫入。在系統調用和I/O中,psw非常重要。

內核態與用戶態的切換:

        內核態: CPU可以訪問內存所有數據, 包括外圍設備, 例如硬盤, 網卡. CPU也可以將自己從一個程序切換到另一個程序

        用戶態: 只能受限的訪問內存, 且不允許訪問外圍設備. 占用CPU的能力被剝奪, CPU資源可以被其他程序獲取

為什么要有用戶態和內核態

由於需要限制不同的程序之間的訪問能力, 防止他們獲取別的程序的內存數據, 或者獲取外圍設備的數據, 並發送到網絡, CPU划分出兩個權限等級 -- 用戶態內核態

       

所有用戶程序都是運行在用戶態的, 但是有時候程序確實需要做一些內核態的事情, 例如從硬盤讀取數據(比如從硬盤讀取游戲進度), 或者從鍵盤獲取輸入等. 而唯一可以做這些事情的就是操作系統, 所以此時程序就需要先操作系統請求以程序的名義來執行這些操作.

這時需要一個這樣的機制: 用戶態程序切換到內核態, 但是不能控制在內核態中執行的指令

這種機制叫系統調用, 在CPU中的實現稱之為陷阱指令(Trap Instruction)

他們的工作流程如下:

  1. 用戶態程序將一些數據值放在寄存器中, 或者使用參數創建一個堆棧(stack frame), 以此表明需要操作系統提供的服務.
  2. 用戶態程序執行陷阱指令
  3. CPU切換到內核態, 並跳到位於內存指定位置的指令, 這些指令是操作系統的一部分, 他們具有內存保護, 不可被用戶態程序訪問
  4. 這些指令稱之為陷阱(trap)或者系統調用處理器(system call handler). 他們會讀取程序放入內存的數據參數, 並執行程序請求的服務
  5. 系統調用完成后, 操作系統會重置CPU為用戶態並返回系統調用的結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM