当程序执行到系统调用函数时,由于系统调用的函数的实现在内核中,所以系统会从用户态转到内核态。
这个过程有这几步:
1、程序触发0X80中断
2、系统会保存程序的上下文(PCB)
3、将系统调用号保存到eax寄存器(每个系统调用函数有一个系统调用号)
open函数为例 用户态-------》内核态
当程序执行到系统调用函数时,触发0X80中断,系统将程序的执行信息保存到PCB中,然后将用户态的系统调用号保存在eax寄存器中,eax陷到内核中,在内核的系统调用表中通过系统调用号找到对应的系统函数,找到此函数的实现,执行程序,返回一个fd,这个fd保存在eax寄存器中,带到用户态。
open函数打开一个文件,返回一个文件描述符,这个fd的值从eax寄存器中拿到