1.用户层可调用的系统调用接口函数中内嵌了一段汇编代码,调用了0x80号中断,并将一些参数保存在eax等寄存器中
2.CPU去IDT表格中查找0x80号中断对应的中断处理程序system_call(硬件行为),system_all所在的内存段的CPL置为0,而DPL置为3
3.CPU检查当前代码段的CPL和system_call的DPL,由于当前代码段CPL=3且system_call的DPL也特意被设置为了3,所以可以调用。
4.在系统调用函数system_call中,先从eax寄存器中获取到了系统调用号,然后去_system_call_table中查到该调用号对应程序的指令位置,如sys_write函数。同样的这里获取到的也是一个代码段,使用call指令执行。
5.CPU再检查CPL和DPL,由于system_call所在段的CPL为0,所以肯定可以访问。
6.CPU跳转到具体的系统调用程序中执行。