系统调用用户态切换内核态的引发原因:
调用系统调用函数 ——>软中断
缺页异常——>硬中断
系统调用的过程:
产生0X80号中断,保存当前进程的现场信息,将系统调用的系统调用号写入eax寄存器中。中断处理程序执行,也即切换到了内核态,此处也是执行程序调用的程序,从eax寄存器中读出系统调用号,查找系统调用表,找到对应的内核函数执行,将执行结果存入到eax寄存器中。中断处理程序执行完后,恢复原本程序的执行,即回到了用户态,应用程序从eax寄存器中获取到返回值。
系统调用和库函数的区别:
系统调用:是实现在内核中,编写内核代码时,就实现了该功能。<处于内核态>
库函数:是实现一般在库文件中。<处于用户态>