Linux 系統呼叫

2021-09-10 14:40:55 字數 1896 閱讀 2420

使用者態:ring3執行於使用者態的**則要受到處理器的諸多檢查,它們只能訪問對映其位址空間的頁表項中規定的在使用者態下可訪問頁面的虛擬位址,且只能對任務狀態段(tss)中i/o許可位圖(i/o permission bitmap)中規定的可訪問埠進行直接訪問。

核心態:ring0在處理器的儲存保護中,核心態,或者特權態(與之相對應的是使用者態),是作業系統核心所執行的模式。執行在該模式的**,可以無限制地對系統儲存、外部裝置進行訪問。

一、使用者態和核心態

現在我們從特權級的排程來理解使用者態和核心態就比較好理解了,當程式執行在3級特權級上時,就可以稱之為執行在使用者態,因為這是最低特權級,是普通的使用者程序執行的特權級,大部分使用者直接面對的程式都是執行在使用者態;反之,當程式執行在級特權級上時,就可以稱之為執行在核心態。

雖然使用者態下和核心態下工作的程式有很多差別,但最重要的差別就在於特權級的不同,即權力的不同。執行在使用者態下的程式不能直接訪問作業系統核心資料結構和程式。

當我們在系統中執行乙個程式時,大部分時間是執行在使用者態下的,在其需要作業系統幫助完成某些它沒有權力和能力完成的工作時就會切換到核心態。

二、什麼情況下會發生從使用者態向核心態切換。這裡細分為3種情況。

1、發生系統呼叫時

這是處於使用者態的程序主動請求切換到核心態的一種方式。使用者態的程序通過系統呼叫申請使用作業系統提供的系統呼叫服務例程來處理任務。而系統呼叫的機制,其核心仍是使用了作業系統為使用者特別開發的乙個中斷機制來實現的,即軟中斷。

2、產生異常時

當cpu執行執行在使用者態下的程式時,發生了某些事先不可知的異常,這時會觸發由當前執行的程序切換到處理此異常的核心相關的程式中,也就是轉到了核心態,如缺頁異常。

3、外設產生中斷時

當外圍裝置完成使用者請求的操作後,會向cpu發出相應的中斷訊號,這時cpu會暫停執行下一條即將要執行的指令轉而去執行與中斷訊號對應的處理程式,如果先前執行的指令是使用者態下的程式,那麼這個轉換的過程自然也就發生了由使用者態到核心態的切換。比如硬碟讀寫操作的完成,系統會切換到硬碟讀寫的中斷處理程式中執行後續操作等。    

可以看到上述三種由使用者態切換到核心態的情況中,只有系統呼叫是程序主動請求發生切換的,中斷和異常都是被動的。

三、具體的切換操作

從觸發方式上看,可以認為存在前述3種不同的型別,但是從最終實際完成由使用者態到核心態的切換操作上來說,涉及的關鍵步驟是完全一致的,沒有任何區別,都相當於執行了乙個中斷響應的過程,因為系統呼叫實際上最終是中斷機制實現的,而異常和中斷的處理機制基本上也是一致的,關於它們的具體區別這裡不再贅述。關於中斷處理機制的細節和步驟這裡也不做過多分析,涉及到由使用者態切換到核心態的步驟主要包括:

[1] 從當前程序的描述符中提取其核心棧的ss0及esp0資訊。

[2] 使用ss0和esp0指向的核心棧將當前程序的cs,eip,eflags,ss,esp資訊儲存起來,這個過程也完成了由使用者棧到核心棧的切換過程,同時儲存了被暫停執行的程式的下一條指令。

[3] 將先前由中斷向量檢索得到的中斷處理程式的cs,eip資訊裝入相應的暫存器,開始執行中斷處理程式,這時就轉到了核心態的程式執行了。

補充:

系統呼叫一共引出兩個問題:

1--使用者級程式不能隨意jmp到核心資料函式區,怎麼實現的?

利用cpl(cs) rpl(ds) dpl硬體檢查源目標執行級實現的處理器保護環

2--既然不能jmp到核心區,那該怎麼進入核心?

通過呼叫系統中斷int 0x80

linux 系統呼叫

使用者應用可以通過兩種方式使用系統呼叫。第一種方式是通過c庫函式,包括系統呼叫在c庫中的封裝函式和其他普通函式。圖5.2 使用系統呼叫的兩種方式 第二種方式是使用 syscall巨集。2.6.18版本之前的核心,在include asm i386 unistd.h檔案中定義有7個 syscall巨集...

Linux系統呼叫

一 實驗目的和要求 1.學習linux核心的配置和編譯 2.深入理解linux系統呼叫 3.理解arm和x86的cpu模式 系統模式 使用者模式 的不同 4.掌握核心模組的編寫方法。二 實驗器材 1.linux實驗板卡一塊 2.5v 1a電源乙個 3.microusb線一根 4.macos一台 5....

Linux系統呼叫

linux系統呼叫 系統呼叫 system call 是使用者空間訪問核心的唯一手段,除異常和陷入外,他們是核心唯一的合法入口。通常情況下應用程式是通過應用程式設計介面api來訪問函式,而不是直接使用系統呼叫來程式設計。作業系統通常是通過中斷從使用者態切換到核心態。中斷就是乙個硬體或軟體請求,要求c...