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