linux的使用者模式和核心模式

2021-06-29 02:37:04 字數 1486 閱讀 1989

ms-dos等作業系統在單一的cpu模式下執行,但是一些類unix的作業系統則使用了雙模式,可以有效地實現時間共享。在linux機器上,cpu要麼處於受信任的核心模式,要麼處於受限制的使用者模式。除了核心本身處於核心模式以外,所有的使用者程序都執行在使用者模式之中。

核心模式的**可以無限制地訪問所有處理器指令集以及全部記憶體和i/o空間。如果使用者模式的程序要享有此特權,它必須通過系統呼叫向裝置驅動程式或其他核心模式的**發出請求。另外,使用者模式的**允許發生缺頁,而核心模式的**則不允許。

在2.4和更早的核心中,僅僅使用者模式的程序可以被上下文切換出局,由其他程序搶占。除非發生以下兩種情況,否則核心模式**可以一直獨佔cpu:

(1) 它自願放棄cpu;

(2) 發生中斷或異常。

2.6核心引入了核心搶占,大多數核心模式的**也可以被搶占。

下面是從網上貼過來的,可能說的更明白一些。

一、核心空間和使用者空間

linux簡化了分段機制,使得虛擬位址與線性位址總是一致,因此,linux的虛擬位址空間也為0~ 4g。linux核心將這4g位元組的空間分為兩部分。將最高的1g位元組(從虛擬位址0xc0000000到0xffffffff),供核心使用,稱為「核心空間」。而將較低的3g位元組(從虛擬位址0x00000000到0xbfffffff),供各個程序使用,稱為「使用者空間「)。因為每個程序可以通過系統呼叫進入核心,因此,linux核心由系統內的所有程序共享。於是,從具體程序的角度來看,每個程序可以擁有4g位元組的虛擬空間。

二、核心態和使用者態

當乙個任務(程序)執行系統呼叫而陷入核心**中執行時,我們就稱程序處於核心執行態(或簡稱為核心態)。此時處理器處於特權級最高的(0級)核心**中執行。當程序處於核心態時,執行的核心**會使用當前程序的核心棧。每個程序都有自己的核心棧。當程序在執行使用者自己的**時,則稱其處於使用者執行態(使用者態)。即此時處理器在特權級最低的(3級)使用者**中執行。當正在執行使用者程式而突然被中斷程式中斷時,此時使用者程式也可以象徵性地稱為處於程序的核心態。因為中斷處理程式將使用當前程序的核心棧。這與處於核心態的程序的狀態有些類似。

三、程序上下文和中斷上下文

處理器總處於以下狀態中的一種:

1、核心態,執行於程序上下文,核心代表程序執行於核心空間;

2、核心態,執行於中斷上下文,核心代表硬體執行於核心空間;

3、使用者態,執行於使用者空間。

使用者空間的應用程式,通過系統呼叫,進入核心空間。這個時候使用者空間的程序要傳遞很多變數、引數的值給核心,核心態執行的時候也要儲存使用者程序的一些暫存器值、變數等。所謂的「程序上下文」,可以看作是使用者程序傳遞給核心的這些引數以及核心要儲存的那一整套的變數和暫存器值和當時的環境等。

硬體通過觸發訊號,導致核心呼叫中斷處理程式,進入核心空間。這個過程中,硬體的一些變數和引數也要傳遞給核心,核心通過這些引數進行中斷處理。所謂的「中斷上下文」,其實也可以看作就是硬體傳遞過來的這些引數和核心需要儲存的一些其他環境(主要是當前被打斷執行的程序環境)。

Linux使用者模式和核心模式

ms dos等作業系統在單一的cpu模式下執行,但是一些類unix的作業系統則使用了雙模式,可以有效地實現時間共享。在linux機器上,cpu要麼處於受信任的核心模式,要麼處於受限制的使用者模式。除了核心本身處於核心模式以外,所有的使用者程序都執行在使用者模式之中。核心模式的 可以無限制地訪問所有處...

使用者模式與核心模式

首先了解一下使用者模式和核心模式。一般說來,程序既可在使用者模式下執行,又可在核心模式下執行。核心模式的許可權高於使用者模式的許可權。程序每次呼叫乙個系統呼叫時,程序的執行方式都發生變化 從使用者模式切換到核心模式,然後繼續執行。可見 乙個程序在cpu上執行可以有兩種執行模式 程序狀態 使用者模式和...

WINCE下核心模式和使用者模式的區別

為了使讀者能夠詳細了解wince的位址對映原理還有兩種模式,在這裡我分幾個部分說明 1 wince核心nk.exe的任務是管理作業系統核心功能。按照oemaddresstable的對映要求,所有實體地址都對映到0x80000000以上,所以對於核心程式nk.exe和核心模式下的執行緒來說,只要訪問0...