张文俊 + 原创作品转载请注明出处+ 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
一、学习内容
系统调用:操作系统为用户态进程与硬件设备进行交互提供了一组接口
API:应用编程接口,是一个函数定义。
操作系统提供API和系统调用的关系。
二、实验部分:两种方式调用系统调用
用户态进程——(调用)——>系统调用
传参:
getpid()函数功能:
取得进程识别码,返回值是进程的ID 这里直接使用getpid库函数进行系统调用。
传入的参数为NULL,通过EAX传入,再通过EAX将返回值传回。
其次,分析汇编代码调用系统调用的工作过程
系统调用传递第一个参数ebx,这里是null
8行,将ebx清零; 9行,将20放入EAX 11行,返回值用EAX存储
总之,int 80触发中断,找到中断向量表,从表中寻找中断向量(或中断门),通过中断向量,找到系统调用表,
找到system_call JMP EAX*4+system_table
最后,对两者的编译结果进行分析:两种方式的编译运行结果分别是2999和3065。
三、总结部分
系统调用工作机制,就是应用程序应该以某种方式(库函数或汇编代码)通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态。
内核就可以代表应用程序在内核空间执行系统调用。
此外,通知内核的机制是靠软中断实现的:
通过引发异常将系统切换内核态执行异常处理程序(系统调用处理程序)。