程序切換和使用者態 核心態 深入理解linux核心

2021-06-26 05:28:11 字數 653 閱讀 9859

程序在執行時一般會處於兩種狀態:使用者態,核心態。

使用者態是指程序在使用者**中執行。核心態是指程序進入核心**,執行核心的**。從使用者態到核心態的轉換情況一般有以下三種:

(1)發生系統呼叫;(2)cpu執行異常;(3)外圍裝置發來中斷請求

程序切換,是指cpu執行乙個程序a,程序a可能因為某些原因被阻塞(比如,等待程序b給它傳送資料),那麼cpu會被其他處於就緒狀態的程序c搶占cpu,cpu執行程序c的相關指令。 cpu執行程序a的指令到執行程序c指令的過程就是程序切換。

在由程序a切換到程序c時,

(1)核心首先將程序a的狀態以及在cpu暫存器儲存的資料狀態指令等,儲存在程序a描述符指向的記憶體區域中。

(2)核心然後將程序c描述符指向的相應狀態資料,裝載到cpu的相應暫存器中。完之後,cpu開始執行程序b的相應指令。

因為程序是資源分配的基本單位, 因此程序之間切換時,需要儲存、裝載各種狀態資料等資源, 所需的代價較高。

聯想到執行緒是cpu排程的基本單位,同乙個程序內的執行緒共享os給該程序分配的資源,因此執行緒切換比程序間切換所需的代價較小。

建議:作業系統相關的理論書籍很多,但是如果只看理論,表面上理解了,但是在實際程式設計時就又糊塗了。 因此個人覺得,再看理論時,要結合實際編碼,或者將自己假設為cpu或者os來理解理論,這樣理解的效果更好。

程序使用者態和核心態

核心空間是共享的,存在整個核心的 和所有的核心模組以及核心所維護的資料。最關鍵的工作必須交給特權級最高的程序去執行,這樣可以做到集中管理,減少有限資源的訪問和使用衝突。inter x86架構的cpu一共有四個級別,0 3級,0級特權級最高,3級特權級最低。當乙個程序在執行使用者自己的 時處於使用者執...

使用者態和核心態的切換

系統呼叫 比如fork 方法,直接fork出乙個執行緒 具體的底層實現是軟體中斷,下面會講 異常 當cpu在執行使用者空間的程式時,發生了異常,處理異常的話就必須在核心態進行處理,比如缺頁異常 外圍裝置的中斷 當進行檔案io操作完成後,硬體io裝置會向cpu發出乙個中斷訊號,如果這時候cpu正在執行...

linux 程序切換,使用者態程序,核心態程序

linux 程序切換,使用者態程序,核心態程序 程序切換 一開始我並不想寫這個筆記,因為太過複雜,我一直想以簡單的方式理解核心,只從概念,避免涉及過多的 實際上,我寫筆記的時候,書已經看到很後面了,因為總要理解更多才能理解之前看似簡短實際複雜的內容。但最後發現實際上任何內容都沒有辦法跳過,即便不想看...