张文俊+ 原创作品转载请注明出处 + 《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内核分析”第五周报告的更多相关文章

  1. LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)

    LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...

  2. LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)

    LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...

  3. 20135327郭皓--Linux内核分析第五周 扒开系统调用的三层皮(下)

    Linux内核分析第五周 扒开系统调用的三层皮(下) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/U ...

  4. linux内核分析第五周学习笔记

    linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  5. Linux内核分析第五周——扒开系统调用的“三层皮”(下)

    Linux内核分析第五周--扒开系统调用的"三层皮"(下) 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.1 ...

  6. Linux内核分析第五周学习总结——分析system_call中断处理过程

    Linux内核分析第五周学习总结--分析system_call中断处理过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  7. Linux内核分析——第五周学习笔记

    第五周 扒开系统调用的“三层皮”(下) 一.知识点总结 (一)给MenuOS增加time和time-asm命令 在实验楼中,首先 强制删除menu (rm menu -rf) 重新克隆一个新版本的me ...

  8. Linux内核分析第五周学习总结:扒开系统调用的三层皮(下)

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuO ...

  9. linux内核分析 第五周

    一.实验相关 1.下载老师最新的menu文件,并在其中添加上周所编写的代码,并运行 下载 添加 运行 2.gdb调试跟踪 gdb设置跟踪文件(先进入linux-3.18.6所在的文件) gdb设置断点 ...

随机推荐

  1. Python作业第一课

    零基础开始学习,最近周边的同学们都在学习,我也来试试,嘿嘿,都写下来,下次不记得了还能来看看~~ Python作业第一课1)登陆,三次输入锁定,下次不允许登陆2)设计一个三级菜单,菜单内容可自行定义, ...

  2. January 09th, 2018 Week 02nd Tuesday

    Use the smile to change the world. Don't let the world change your smile. 用你的笑容去改变这个世界,别让这个世界改变了你的笑容 ...

  3. MarkDown 排版测试

    大标题 小标题(正常) 小标题(多一杠) 一级标题 二级标题 三级标题 四级标题(未空格) 四级标题(正常) 个人编程,写一个命令行程序 注册Github账号,建立项目仓库 添加ReadMe.md并编 ...

  4. 关于使用jquery修改hover伪标签的样式

    HTML如下: <div class=".nav-subitem"> <div classs="nav-subitem-link">标题 ...

  5. 视频播放flv player的使用

    JW FLV PLAYER 中文文档 使用方法:如果你仅需要播放一个FLV文件[例如“video.flv”],那么只要把“video.flv”和压缩包内的 flvplayer.swf复制到同一个目录内 ...

  6. Android——Intent和Intent过滤器

    http://www.cnblogs.com/XP-Lee/p/3613830.html Intent就是一个激活组件的消息对象,用于组件之间的通信.需要注意的是,能被Intent激活通信的组件只有三 ...

  7. 解惑 ["1", "2", "3"].map(parseInt) 为何返回[1,NaN,NaN]

    javascript中的parseInt与map函数都是常用的函数,可是 ["1", "2", "3"].map(parseInt) 为何返 ...

  8. M100 对频

  9. 《深入理解Java虚拟机》笔记(转)

    文章来自http://www.cnblogs.com/tianchi/archive/2012/11/11/2761631.html 在C里面我们想执行一段自己编写的机器指令的方法大概如下: type ...

  10. LeetCode算法题详解之两个数组的交集

    题目背景: 这个与我们高中时期学习的交集是一样的,顺便复习一下相关的数学知识有助于更好的理解. 交集的定义: 对于两个集合A和B,定义A和B的交集为C,其中C={x|x属于A且X属于B},记作A∩B. ...