Linux内核分析实验五
一、给MenuOS增加time和time-asm命令
1. 克隆并自动编译MenuOS
rm menu -rf
强制删除原
menu
文件
git clone http:
cd menu
makerootfs
运行自动编译脚本,生成根文件系统,启动
MenuOS
2. 给MenuOS增加time和time-asm命令
更新menu代码到最新版
test.c中main函数里,增加MenuConfig
增加对应的两个函数:Time和TimeAsm
make rootfs
二、调试内核
1. 使用gdb跟踪调试内核
qemu -kernel linux
-3.18.6/arch/x86
/boot/bzImage -initrd rootfs.img -s -S
gdb
(
gdb
)
file linux
-3.18.6/vmlinux
(
gdb
)
target
remote:1234
b sys_time:在系统调用time的位置设置断点
c:在MenuOs里使用time,停在断点处
s 单步调试—一步一步执行(PS:无法执行time_asm中的int 0X80部分)
三、系统调用在内核代码中的处理过程
1. 系统调用在内核代码中的工作机制和初始化
- main.c中start_kernel函数:trap_init()
- set_system_trap_gate(SYSCALL_VECTOR,&system_call)
- SYSCALL_VECTOR:系统调用的中断向量
- &system_call:汇编代码入口
- 一执行int 0x80,系统直接跳转到system_call。
2. 系统调用——一个特殊的中断
SAVE_ALL:保存现场
call *sys_call_table(,%eax,4)调用了系统调度处理函数,eax存的是系统调用号,是实际的系统调度程序。
sys_call_table:系统调用分派表
syscall_after_all:保存返回值
若有sys_exit_work,则进入sys_exit_work:会有一个进程调度时机。
work_pending -> work_notifysig,用来处理信号
可能call schedule:进程调度代码
可能跳转到restore_all,恢复现场。
若无sys_exit_work,就执行restore_all恢复,返回用户态。
INTERRUPT_RETURN <=> iret,结束。
-在系统调用返回之前,可能发生进程调度,进程调度里就会出现进程上下文的切换。
-进程间通信可能有信号需要处理。
-可以将内核视为一系列中断指令的集合。
四、实践
1. 使用gdb跟踪分析122号系统调用内核函数:uname
先执行rm menu -rf,强制删除原有的menu文件夹,使用git命令更新menu代码至最新版。
在test.c中增加我编写的两个函数:Uname()和UnameAsm()
在main函数中增加两个函数的MenuConfig命令项:
make rootfs编译错误:
原因:忘记添加头文件<sys/utsname.h>
编译运行,在MenuOS中输入help,可以查看当前所有的系统调用,分别执行uname、uname-asm进行系统调用:
插入断点并调试:
2. 从system_call到iret
五、总结:从系统调用处理过程到一般的中断处理过程
系统调用就是特殊的一种中断
1. 保存现场
在系统调用时,我们需要SAVE_ALL,用于保存系统调用时的上下文。
同样,中断处理的第一步应该也要保存中断程序现场。
目的:在中断处理完之后,可以返回到原来被中断的地方,在原有的运行环境下继续正确的执行下去。
2. 确定中断信息
在系统调用时,我们需要将系统调用号通过eax传入,通过sys_call_table
查询到调用的系统调
同样,中断处理时系统也需要有一个中断号,通过检索中断向量表,了解中断的类型和设备。
3. 处理中断
跳转到相应的中断处理程序后,对中断进行处理。
4. 返回
系统调用时最后要restore_all恢复系统调用时的现场,并用iret返回用户态。
同样,执行完中断处理程序,内核也要执行特定指令序列,恢复中断时现场,并使得进程回到用户态。
Linux内核分析实验五的更多相关文章
- 【MOOC EXP】Linux内核分析实验五报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 分析system_call中断处理过程 ...
- LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)
LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...
- 20135327郭皓--Linux内核分析第五周 扒开系统调用的三层皮(下)
Linux内核分析第五周 扒开系统调用的三层皮(下) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/U ...
- Linux内核分析第五周——扒开系统调用的“三层皮”(下)
Linux内核分析第五周--扒开系统调用的"三层皮"(下) 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.1 ...
- Linux内核分析(五)----字符设备驱动实现
原文:Linux内核分析(五)----字符设备驱动实现 Linux内核分析(五) 昨天我们对linux内核的子系统进行简单的认识,今天我们正式进入驱动的开发,我们今后的学习为了避免大家没有硬件的缺陷, ...
- LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)
LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...
- linux内核分析第五周学习笔记
linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析实验六
Linux内核分析实验六 进程控制块PCB——task_struct(进程描述符) 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_s ...
- Linux内核分析第五周学习总结——分析system_call中断处理过程
Linux内核分析第五周学习总结--分析system_call中断处理过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
随机推荐
- SICP读书笔记 3.3
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- linux 下awk后统计某一列数据之和简单的命令
例如有文件test.txt格式如下: aaa:1 bbb:2 cat a|awk -F\: '{print"+"$2}'|xargs echo 0|bc -l
- TensorFlow学习之路1-TensorFlow介绍
TensorFlow是一个采用数据流图(data flow graphs),用于数据计算的开源软件库. 什么是数据流图? TensorFlow的数据流图是由“节点”(nodes)和“线”(edges) ...
- 阿里云ubuntu16.04安装beef
0x0 前言 环境:阿里云轻量服务器ubuntu16.04 需要安装2.4以上版本的ruby:https://www.cnblogs.com/Rain99-/p/10666247.html 参考资料 ...
- 关于Python的面试题
Python语言特性 1 Python的函数参数传递 看两个例子: a = 1 def fun(a): a = 2 fun(a) print a # 1 a = [] def fun(a): a.ap ...
- 最新的CocoaPods 安装及使用
当在开发iOS应用时,会经常使用到很多的第三方开源类库,一般的方法是直接从GitHub下载,然后拖到项目中使用,如果该开源类库不依赖其他的类库,就可以直接使用:如果该开源类库还依赖一些其他的类库,则需 ...
- Notes of Daily Scrum Meeting(11.8)
Notes of Daily Scrum Meeting(11.8) 预备中开始写代码的第一天,因为大家对Android编程的熟悉程度还是不够,所以工程进行的非常缓慢,有四名队员 开始编写自己的任务, ...
- 第10章 系统级I/O(下)
10.7 I/O重定向 Unix外壳提供了I/O重定向操作符,允许用户将磁盘文件和标准输出输入联系起来. 例如:unix>ls>foo.txt,使得外壳加载和执行ls程序,将标准输出重定 ...
- Hibernate left join
6.4.5 左外连接 左外连接(Left Outer Join)查询出左表对应的复合条件的所有记录,如查询李晓梅同学的选课信息.下面是类HQLLeftOuterJoinQuery的源代码. 其实关联 ...
- Good Time 冲刺 五
一.今日完成任务情况及遇到的问题 第五天 日期:2018.6.18 王怡镔:今天继续在学习中完善编写页面,对之前的页面进行部分改进. 于鑫宇:修改完善布局,复习. 胡雅馨:今天继续改进页面,努力解决时 ...