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上執行可以有兩種執行模式 程序狀態 使用者模式和...
使用者模式 VS 核心模式(1)
使用者模式 通過windows啟動的任何乙個程序都在使用者模式 user mode 下執行,在這種模式下的程序不能訪問其它程序的資源,除非通過api呼叫。在這種模式下執行的程式不能處理中斷 interrupts 和環境切換 context switching 中斷 interrupts cpu在執行...