扒开系统调用的三层皮(下)
一、给menuOS增加time和time-asm
通过内核调试系统调用。将上次做的实验加入到menusOS,变成menusOS里面的两个命令。
/*强制删除当前的menuOS*/
/*克隆一个menu*/
/*运行脚本*/
这次的menuOS支持的命令增加,增加了time和time-asm两条命令。
二、使用gdb跟踪系统调用内核函数sys_time
/*13号time对应的内核处理函数sys_time*/
/*启动到menuOS,执行time命令系统调用,停在system time函数的位置*/
如果一直按n单步执行会进入schedule函数。
sys_time返回后进入汇编代码处理gdb无法继续跟踪。
执行0x80之后cpu自动跳转到system_call.
三、系统调用在内核代码中的处理过程
1、系统调用在内核代码中的工作机制和初始化
从int 0x80触发一个系统调用到执行系统调用处理的函数sys time,到返回用户态的整个过程是很重要的。进程调度的时机非常关键。
system call系统调用的处理过程:
初始化中断向量的过程中将0x80与system call联系起来。
通过系统调用号将system call与sys_xyz联系起来。
返回用户态之前有一个调度时机,从systime退出后会跟踪到schedule。
系统调用机制的初始化:
2、简化后便于理解的system call伪代码
系统调用是特殊的中断
《Linux内核分析》第五周笔记 扒开系统调用的三层皮(下)
原文:http://www.cnblogs.com/20135132yoggie/p/5312850.html