作业信息
这个作业属于哪个课程 | <2020-2021-1Linux内核原理与分析)> |
---|---|
这个作业要求在哪里 | <2020-2021-1Linux内核原理与分析第六周作业> |
这个作业的目标 | <从内核态层次理解系统调用机制,类推中断服务处理过程,分析system_call中断处理过程> |
作业正文 | ... https://www.cnblogs.com/assignment/p/13947483.html |
目录
使用gdb跟踪分析一个系统调用内核函数
分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图
系统调用的过程涉及用户态和内核态,而从用户态进入内核态的钥匙就是int 0x80这个软中断。在用户态和内核态间由eax等寄存器负责存储中断服务程序的入口(中断向量)和传入参数,进入sys_call后会立即将eax以及其他寄存器保存,并会根据eax内容执行具体的中断服务程序。返回后由于中断服务程序会改变系统信号量等内容,所以要处理更新信号,并进行进程调度,这里应该是进程切换的时机之一,当一切结束后执行恢复现场,这一次的系统调用也就结束了。
而执行syscall_exit_work的关键就在于testw $_TIF_ALLWORK_MASK, %cx 也就是检查是否还有其它工作要完成。