Linux系统调用的分析和实现机制
系统调用(用户空间与内核空间的交互)
系统调用的含义:
系统调用是实现系统功能的子程序。系统调用由操作系统核心提供,运行于内核态,而普通的函数调用由函数库或用户自己提供,运行于用户态。。在Linux中,系统调用是用户空间访问内核空间的惟一手段。
系统调用的实现:
图示:
用户空间执行一个系统调用,它们不能直接调用内核中的内核函数,因为内核处于受保护的地址控制,不允许进程访问;通过产生一个中断(通常是0x80)嵌入内核的,这个指令会导致一个异常:产生一个事件,这个事件会致使处理器切换到内核态并跳转到一个新的地址,并开始执行那里的异常处理程序;用户空间请求的系统调用,去查找系统调用号,并将系统号传给寄存器eax(如果存在其他系统调用带参数的,同时将参数传给其他寄存器,如ebx, ecx, edx, esi和edi按照顺序存放前五个参数);eax寄存器传递给内核空间处理事件,查找内核空间中的系统调用表,执行匹配系统系统调用号的内核程序,并将返回值传递通过寄存器eax传递回用户空间,恢复用户空间程序的执行。