0.筆記linux
本週進行了linux內核分析的第四周學習,對系統調用過程有了初步瞭解。撰寫此文,記錄學習同時也是爲了完成做業。
0.1 系統調用
系統調用是操做系統留給用戶態和硬件設備進行交互的接口,讓用戶從繁瑣的底層編程中解放出來,提升了系統的安全性和可移植性。編程
層次關係api
經過int 0x80進行系統調用,經過eax傳遞系統調用號,用來指明須要調用的系統調用。安全
1.實驗代碼函數
本實驗分別使用庫函數封裝好的getpid()函數和彙編編寫的程序獲取當前進程號,分別測試兩種狀況下結果是否相同來驗證明驗效果。
getpid系統調用號是0x14,進行int 0x80以前須要將該系統調用號裝入eax寄存器中去。學習
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main(){ int pid = 0; //使用庫函數封裝好的getpid()函數 pid = getpid(); printf("use api,pid = %d\n",pid); //使用系統調用得到當前進程號 asm volatile( "mov $0x14,%%eax\n\t" "int $0x80\n\t" "mov %%eax,%0\n\t" :"=m"(pid) ); printf("use sys-call,pid = %d\n",pid); return 0; }
2.實驗截圖測試
使用不一樣方式,獲取的當前進程號是一致的:spa
3.實驗總結操作系統
經過本次實驗,對系統調用有了初步瞭解,理解了應用程序、封裝例程、系統調用處理程序和系統調用服務例程之間的關係。對系統調用過程當中的過程有了初步瞭解。code