20135337朱荟潼 Linux第五周学习总结——扒开系统调用的三层皮(下)

朱荟潼 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课http://mooc.study.163.com/course/USTC 1000029000

一、学习内容

(一)给MenuOS增加time和time-asm命令(详见 :二、实验内容)

四步

    1.更新menu代码到最新版;
    2.在main函数中增加MenuConfig;
    3.增加对应的Time函数和TimeAsm函数;
    4.make rootfs。

(二)使用gdb跟踪系统调用内核函数sys_time(详见 :二、实验内容)

(三)系统调用在内核代码中的工作机制和初始化

1.进程调度的时机很重要。

初始化

744834-20160322213957308-620466322.jpg

set_system_trap_gate,设置系统陷阱门,即系统调用。

(四)简化后便于理解system_call伪代码

伪代码

744834-20160322223134558-947025509.png
744834-20160322223141042-1212112766.png
744834-20160322223148401-1972874826.png

【7、10】宏。SAWV_ALL宏保存现场

【16】调用系统调用号(eax的值)对应的服务程序

【19】判断当前任务是否需要处理 syscall_exit_work(当前进程信号处理、系统需要调度)

【21、23】不执行——>restore_all:irq_return

【32】work_notifysig 处理信号

【33】需要重新调度

【35】调度结束,返回系统调度调度

1.进程调度中会发生中断上下文切换&进程上下文切换。

2.内核抽象理解是许多种中断处理的集合。

(五)简单浏览system_call到iret之间主要代码

ENTRY(system_call)

744834-20160322212640183-204493780.png

【494】保护现场

【502】调用了系统调用处理函数(实际是系统调用的服务程序)

【533】至此,系统调用处理过程结束

【595】——>【610】处理信号

【597】决定进程调度的代码schedule

流程图
744834-20160327114329448-738155336.jpg

二、实验内容

1.给MenuOS增加time和time-asm命令

744834-20160323185933667-601484001.png
744834-20160323185942167-1797829934.png

sys_time返回后进入汇编处理,gdb无法继续跟踪.

单步执行跟踪到ret_from_fork断点处继续执行汇编语句,jmp syscall_exit之后就无法跟踪。

make rootfs:自动编译,生成根文件系统,自动启动.

(gdb)list 查看代码.

(gdb)s 单步调试进入函数体.

(gdb)n 单步调试不进入函数体.

744834-20160323185422058-1175715138.png
744834-20160323185350183-1517632195.png
744834-20160323185431589-1615697049.png

转载于:https://www.cnblogs.com/zzzz5/p/5308633.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值