“Linux内核分析”第五周报告
张文俊+ 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
学习总结
1、给MenuOS增加time和time-asm命令
首先,将time这两个文件添加到MenuOS里面,需要以下指令:
rm menu -rf //其中,-rf为强制删除命令
然后通过以下指令重新克隆一个menu:
git clone https://github.com/mengning/menu.git

然后按照之前的课程编译启动MenuOS。
进入MenuOS后,关键是查看GetPid和GetPidAsm两个命令。
总结来说,给MenuOS增加GetPid和GetPidAsm两个命令,需要按照四个步骤:
(1)更新menu代码到最新版
(2)在main函数中增加MenuConfig

(3)增加对应的GetPid函数和GetPidAsm函数


(4)make rootfs


2、如何调试time——使用gdb跟增系统调用内核函数sys_time
首先,使用-s -S命令进行调试:

进入gdb后,将vmlinux加载进来:

加载进之后,链接Target remote 1234,链接到需要调试的MenuOS:

对sys_time设置断点:

现在c运行之后,系统会启动,MemuOS正常启动。如果这时执行time命令,会发现它卡住了:

list可以查看内部代码,如果这里一直按s单步执行,会进入schedule函数。
sys_time返回后进入汇编代码处理gdb无法继续追踪。
3、系统调用在内核代码中的工作机制和初始化
主要分析从system_call到返回的整个过程。
首先,了解系统调用机制的初始化:
其中,在start_kernel的trap_init里,我们可以看到设计了一个trap_gate函数。
syscall_vector是系统调用中断向量,system_call是汇编代码的入口。
因此,初始化的结果是:这时代码中一旦执行int0X80,CPU就会直接跳转到system_call这个位置上。
system_call之后的指令入口如下:

从上述代码开始分析:
系统调用也是一种中断,也存在保护现场(SAVE_ALL)和恢复现场(RESTORE_ALL)的问题。
下面,sys_call_table调用系统调度表,其中eax传递系统调用号,找到对应的系统调用(在老师的例子里就是sys_time)。
然后执行syscall_after_call,保存返回值eax;继续执行syscall_exit,查看是否需要跳转到syscall_exit_work。不需要的话,就恢复现场,然后返回结束。
如果需要跳转到syscall_exit_sork,则执行work_pending,其中包含work_notifysig,是处理信号的。
可以执行work_resched,是处理重新调度的。
然后恢复并返回结束。
流程图示:

内核:很多种不同的中断处理过程的集合。
“Linux内核分析”第五周报告的更多相关文章
- LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)
LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...
- LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)
LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...
- 20135327郭皓--Linux内核分析第五周 扒开系统调用的三层皮(下)
Linux内核分析第五周 扒开系统调用的三层皮(下) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/U ...
- linux内核分析第五周学习笔记
linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第五周——扒开系统调用的“三层皮”(下)
Linux内核分析第五周--扒开系统调用的"三层皮"(下) 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.1 ...
- Linux内核分析第五周学习总结——分析system_call中断处理过程
Linux内核分析第五周学习总结--分析system_call中断处理过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- Linux内核分析——第五周学习笔记
第五周 扒开系统调用的“三层皮”(下) 一.知识点总结 (一)给MenuOS增加time和time-asm命令 在实验楼中,首先 强制删除menu (rm menu -rf) 重新克隆一个新版本的me ...
- Linux内核分析第五周学习总结:扒开系统调用的三层皮(下)
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuO ...
- linux内核分析 第五周
一.实验相关 1.下载老师最新的menu文件,并在其中添加上周所编写的代码,并运行 下载 添加 运行 2.gdb调试跟踪 gdb设置跟踪文件(先进入linux-3.18.6所在的文件) gdb设置断点 ...
随机推荐
- Sudoku(第二次作业)
这里是github 工具清单: 编程语言:C++ 编程IDE:XCode 效能分析工具:XCode 源代码管理平台:Github PSP2.1 PSP2.1 Personal Software Pro ...
- Python3编写网络爬虫05-基本解析库XPath的使用
一.XPath 全称 XML Path Language 是一门在XML文档中 查找信息的语言 最初是用来搜寻XML文档的 但是它同样适用于HTML文档的搜索 XPath 的选择功能十分强大,它提供了 ...
- Java设计模式之五 ----- 外观模式和装饰器模式
前言 在上一篇中我们学习了结构型模式的适配器模式和桥接模式.本篇则来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这 ...
- WEB应用打成jar包全记录
内容属原创,转载请注明出处 题外 由于项目的需求—不管是怎么产生的这个需求—总之,需要支持把一个web应用打成jar包供其他应用使用,这就有了下面的过程. 这个过程里用到了Spring和SpringM ...
- 如何根据name和value选中radio [问题点数:40分,结帖人zzxap
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <he ...
- MDC的使用(Mapped Diagnostic Context)的使用
通常我们可能会有大量的任务需要提交提交到线程池执行,但是此时如果不对日志添加唯一标识进行区分的话回到错乱一坨无法进行查看.因此可以对每一天日志添加唯一的标识,例如使用userid作为日志的唯一标志.这 ...
- 【SpringMVC】关于classpath和contextConfigLocation
[SpringMVC]关于classpath和contextConfigLocation 2017年11月16日 12:05:47 yongh701 阅读数:3624 版权声明:本文为博主原创文 ...
- ethereum/EIPs-191 Signed Data Standard
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-191.md eip title author status type category c ...
- shell编程之函数
一.函数定义和调用 函数是Shell脚本中自定义的一系列执行命令,一般来说函数应该设置有返回值(正确返回0,错误返回非0).对于错误返回,可以定义其他非0正值来细化错误.使用函数最大的好处是可避免出现 ...
- python开发技巧---列表、字典、集合值的过滤
主要学习列表,字典,集合表达式的应用: 列表的解析式: 生成一个随机列表: In [4]: datalist = [randint(-10,10) for _ in range(10)] In [5] ...