20135239 益西拉姆 linux内核分析 扒开系统调用的三层皮(下)
一、 给MenuOS增加time-asm命令
代码解释
1.-rf:强制删除
2.clone :重新克隆
3.time-asm:显示系统时间的汇编形式
给MenuOS增加time和time-asm命令
- 更新menu代码到最新版
- 在main函数中增加MenuConfig
- 增加对应的Time函数和time-asm函数
- make rootfs
二、使用gdb跟踪系统调用内核函数sys_time
解释得几点:
- 调试的时候一直按n单步执行会进入schedule函数
- sys-time返回后进入汇编代码处理gdb无法继续跟踪。
- 执行int 0x80之后system_call对应的代码
三、系统调用在内和代码中的工作机制和初始化
回顾: 用户态和内核态的转变和匹配
系统调用机制的初始化
- `\init\main.c start_kernel
- trap_init();
- \arch\x86\kernel\traps.c
#ifdef CONFIGX8632 set systemtrapgate(SYSCALLVECTER,&systemcall);
setbit(SYSCALLVECTOR,used_vectors);
endif
四、简化后便于理解的sys_call伪代码
关键的信息
- 在系统调用之前它有可能会形成进程调度
总结:内核可以看成很多种中断处理不同的集合。
简单浏览system_call到iret之间的主要的代码
- save all:保存现场
- iterrupet return 实际上就是irq_return宏。
- work pending 里面的work notifysig是用来处理pending signal信号的。
- schedule是个重要的代码,决定了进程调度的代码。
总结
本周就是继续去学代码,还有一个上周的巩固,很充实。
posted on 2016-03-27 14:20 20135239益西拉姆 阅读(190) 评论(0) 编辑 收藏 举报