Linux内核系统调用处理过程
原創作品轉載請注明出處 +?https://github.com/mengning/linuxkernel/
學號末三位:168
下載并編譯Linux5.0
1 xz -d linux-5.0.1.tar.xz 2 3 tar -xvf linux-5.0.1.tar 4 5 cd linux-5.0.1 View Code?
下載完成之后,依次執行:make menuconfig,sudo apt-get install libncurses5-dev libncursesw5-dev,make menuconfig
接著,制作跟系統文件:
1 cd .. 2 mkdir rootfs 3 git clone https://github.com/mengning/menu.git 4 cd menu 5 sudo apt install gcc-multilib 6 gcc -pthread -o init linktable.c menu.c test.c -m32 -static 7 cd ../rootfs 8 cp ../menu/init ./ 9 find . | cpio -o -Hnewc | gzip -9 > ../rootfs.img然后啟動menuOS:qemu-system-i386 -kernel bzImage -initrd rootfs.img
一、系統調用
操作系統的主要功能是為管理硬件資源和為應用程序開發人員提供良好的環境來使應用程序具有更好的兼容性,為了達到這個目的,內核提供一系列具備預定功能的多內核函數,通過一組稱為系統調用(system call)的接口呈現給用戶。系統調用把應用程序的請求傳給內核,調用相應的的內核函數完成所需的處理,將處理結果返回給應用程序。
二、系統調用原理
操作系統中的狀態分為管態(核心態)和目態(用戶態)。特權指令:一類只能在核心態下運行而不能在用戶態下運行的特殊指令。不同的操作系統特權指令會有所差異,但是一般來說主要是和硬件相關的一些指令。訪管指令:本身是一條特殊的指令,但不是特權指令。(trap指令)。基本功能:“自愿進管”,能引起訪管異常。
三、系統調用和普通調用的區別
運行狀態不同。系統調用的調用過程和被調用過程運行在不同的狀態,而普通的過程調用一般運行在相同的狀態。
調用方法不同。系統調用必須通過軟中斷機制首先進入系統核心,然后才能轉向相應的命令處理程序。普通過程調用可以直接由調用過程轉向被調用過程。
?實驗過程描述
首先,從github上更新這次實驗要用的新的menuOS鏡像。然后我們開始制作根文件系統。
之后系統就成功啟動了,我們就會開到熟悉的界面。如果是要跟蹤調試系統的話我們可以用這個命令:
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
?
同樣的我們再打開一個窗口然后進入gdb調試模式,然后我們首先是要加載它的符號表,命令是 file linux3.18.6/vmlinux 然后在連接到他,命令是:target remote:1234這樣我們就可以開始調試他了。
?
然后我們添加了一個斷點在sys_sgetmask(系統調用號為68)上,然后按c繼續執行到,系統停在了相應的位置上。
tips:syst_sgetmark返回當前進程受阻塞的情況,current是一個的類型是struct task_struct*的全局變量,總是指向當前正在執行的進程。
1 int sys_sgetmask()// 獲取當前進程阻塞的信號 2 { 3 returncurrent->blocked; 4 }?
qemu中輸出的內容:
?
?測試程序:
1 #include <linux/unistd.h>2 #include <syscall.h>3 #include <sys/types.h>4 #include <stdio.h>5 6 int main(void)7 {8 long pid = 0;9 pid = syscall(68);10 printf("%ld\n",pid);11 return 0;12 } View Code?
總結:
我們知道操作系統為在用戶態運行的進程與硬件設備進行交互提供了一組幾口。在應用程序與硬件之間設置一個額外的層實際上是有很多優點的——所謂的系統調用。首先這使得編程更加容易,把用戶從學習硬件設備的低級編程特性中解放出來。其次,著極大的提高了系統的安全性,因為內核在試圖滿足某個請求之前在接口級別上就可以檢查這種請求是否是正確的合法的。最后更為重要的是,這些接口是的程序更具有可以執行,因為只要內核所提供的一組接口相同,那么在任意一個內核之上就可以正確的編譯和執行我們編寫的程序了。
Linux系統就是通過內核發出的系統調用(system call)實現了用戶態進程和硬件設備之間的大部分接口。
?
轉載于:https://www.cnblogs.com/ustc-anmin/p/10540471.html
總結
以上是生活随笔為你收集整理的Linux内核系统调用处理过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 129. Sum Root to Lea
- 下一篇: linux安装redis集群+常见报错