MOOCOS李志軍 L5系統呼叫的實現

2022-08-12 00:48:17 字數 3130 閱讀 8917

目標:使用者程式呼叫whoami,乙個字串「lizhijun」放在核心中 (系統引導時載入),利用系統呼叫列印該字串

首先不能隨意jmp到核心**或取用核心中的字串。

因為要防止作業系統資料洩露。作業系統中的資料可能有:

那麼如何實現這種限制呢?

通過區分程式執行在使用者態還是核心態,隔離核心態和使用者態的**和資料。

這種限制通過為段設定特權級實現。

具體來說,訪問時,通過硬體比較cpl(當前的特權級)和dpl(目標段的特權級)

dpl:標識乙個段的特權級

cpl:標識正在執行的程式的特權級

使用者程式(**+資料)位於使用者段,執行在使用者態(cpl=3 , dpl=3)

核心程式位於核心段,執行在核心態(cpl=0 ,dpl=0)

使用者程式位於使用者段(cpl=3),呼叫系統呼叫進入核心(cpl=0),系統呼叫的具體**位於核心段。

cs的最低兩位(0,1,2,3)表示當前的特權級(0核心態/3使用者態)

系統初始化時(即head.s執行的時候),會建立gdt表項,表項所有的dpl都是0,這些表項對應的段是核心段。

只有中斷能進入核心,而且不是所有中斷都能進入核心

以使用者程式呼叫printf()的過程為例說明系統呼叫的過程

//1、應用程式呼叫的printf

printf(格式化輸入)

//2、c庫函式printf

printf(write需要格式的引數)

//3、c庫函式write

write(write需要格式的引數)

//4、int 0x80呼叫特定中斷處理程式,即系統呼叫write()

//系統呼叫write,位於核心區

write()

關於庫函式write的具體實現

巨集展開

write.c中的_syscall3()按照unistd.h中定義的格式,將引數一次填入表示為

int write(int fd,const char *buf,off_t count)
但注意只有這個巨集定義只適用於3個引數的。

內聯彙編

「int 0x80」這一句表示嵌入的彙編**

「=a」(__res)這一句表示彙編向c的輸出,其中a為eax,這句的意思為,將eax置給__res。由於eax存放的是返回值,所以表示返回值置給 _res

**""(_nr_##name) **這一句表示c向彙編的輸入,「」如果裡邊沒有東西,則表明預設和輸出時選擇的一樣(eax)。_nr_##name中將name替換為write。這一句表示將__nr_write輸入到eax,。

"b"((long)(a))同上,「b」"c"d"分別表示eax,ebx,ecx。((long)(a))中的a表示第乙個引數。

總結

後邊的if語句以及前面的long __res;就是簡單的c語言

sched_init(void)是系統初始化執行的函式

set_system_gate(0x80,&system_call);用於設定中斷處理門(idt中的每個表項就對應乙個中斷處理門),將中斷0x80交給system_call()處理

具體實現分析

總結

這裡注意段選擇符為8,即0000 0000 0000 1000,末兩位為00,dpl=0,跳轉後的cpl=0,通過這種方式進入核心態,之後執行中斷處理函式。

中斷返回後cs最後兩位又會變成3,回到使用者態。後面再具體講

中斷處理函式system_call

總結

程式使用者態不能直接訪問核心態。

printf的過程

庫函式:printf。包含int 0x80呼叫中斷。

中斷處理函式system_call。呼叫系統呼叫處理函式sys_write

系統呼叫處理函式sys_write。執行真正的對核心資料的操作。

實現使用者態進入核心態的關鍵

查idt呼叫中斷處理程式時,通過idt中dpl=3,且跳轉到段選擇符為8的核心段,讓程式得以從使用者態進入核心態。

MOOCOS李志軍 L6作業系統歷史L7學習任務

只能順序執行,乙個作業完成自動讀入下乙個 ibm7094 多道程式,任務之間切換排程 任務無法繼續執行才會切換,如訪問io ibm os 360 任務之間快速切換 mit multics 簡化的multics,核心概念相同,但更靈活和成功 pdp 1 改造unix,開源 作業系統是管理硬體的軟體 多...

L5負載均衡

l5的功能特徵如下 負載均衡 以請求成功率和請求延時這兩個關鍵指標進行動態權重計算,動態均衡各個被調伺服器的負載,達到較好的整體服務質量 故障容錯 迅速自動遮蔽錯誤率高或有故障的機器,並進行適時探測,待故障恢復後自動恢復 過載保護 實現對單台機器或者整個模組機器的過載保護能力,防止雪崩現象。另外,為...

關於L5的問題

l5 only receiver designed for mobile phones 其 全文 為什麼消費類裝置需要l5 每個細分市場中的每個gnss使用者都將從使用l5頻段的新型現代化訊號中受益。l5訊號更加準確,可靠,並且可用數量足夠支援所有使用者群。這是l5相對於l1的主要優勢。訊號結構 窄...