系统调用是什么
系统调用:用户在编程是可以调用的操作系统功能
系统调用做什么
- 系统调用是操作系统提供给编程人员的唯一接口
- 使CPU状态从用户态陷入内核态
参数传递过程(用户到内核)
- 由陷入指令自带参数
- 通过通用寄存器传递参数
- 在内存中开辟专用堆栈区
系统调用执行过程
- 中断/异常机制:硬件保护现场;通过查询向量表把控制权转给系统调用总入口程序
- 系统调用总入口程序:保存现场;将参数存于内核的栈里;通过查系统调用表把控制权转给响应的系统调用处理例程或内核函数
- 执行系统调用例程
- 恢复现场,返回用户程序
例:LINUX的系统调用
陷入指令选择128号(int $0x80)
-
门描述符
系统初始化时:对IDT表中的128号门初始化
-
门描述符的2、3两个字节:内核代码段选择符
0、1、6、7四个字节:偏移量
门类型:15,陷阱门
DPL:3,与用户级别相同
切换栈( 用户栈->内核栈),CPU从任务状态段TSS中装入新的栈指针(SS:ESP),指向内核栈
用户栈信息(SS:ESP)、EFLAGS、用户态CS、EIP寄存器的内容压栈(返回)
将EFLAGS压栈后,TF复位,IF不变
用128在IDT中找到该门描述符,找出段选择符装入代码段寄存器CS
代码段描述符中的基地址+ 陷阱门描述符中的偏移量--->定位入口地址