张文俊+ 原创作品转载请注明出处 + 《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. 【转】ICCAVR TAB键设置

    转载于: http://blog.163.com/liuyunqian@yeah/blog/static/7039584320099159545292/ 在使用ICCAVR C编译器的时候会发现TAB ...

  2. jquery的自定义事件通过on绑定trigger触发

    jquery绑定自定义事件,可以实现预先绑定好一个处理方法,当需要使用的时候利用jquery trigger来触发自定义事件,以达到方便快捷的目的.我们来假设一个这样的场景,一个textarea中的字 ...

  3. Git解决冲突(本地共享仓库简单实践)

    1:可以使用git init --bare初始化一个本地共享仓库. 2:假设有A,B两个人进行合作开发,此时A,B可以使用git clone 共享仓库路径进行克隆.此时A,B的室友仓库代码是一致的. ...

  4. linux 报错Mysql.pid 文件不存在导致service Mysqld start 失败

    Mysql.pid 文件不存在导致service Mysqld start 失败 1.  到提示报错的mysql.pid 不存在的目录下  使用 touch 命令创建mysql.pid文件.    t ...

  5. mysql数据库的test类型

    文章参考自 window系统参考:http://blog.sina.com.cn/s/blog_46f7bb6d0102vde3.html linux 参考:http://www.linuxeye.c ...

  6. spring 基于注解的@Scheduled和quartz定时器两种实现

    一.使用quartz 1.由于我的项目jar包使用的maven托管的,在pom文件中加入quartz的依赖就可以 2.配置quartz-context.xml,确保xml文件能被加载到 <?xm ...

  7. C++STL二维vector指定位置排序

    自己一直用vector 二维的存储变量 有时候需要进行排序 在此 为记录一下方法 废话少说直接上代码 #include <QCoreApplication> #include <io ...

  8. Linux下DHCP服务安装配置

    简介 安装配置 一.简介 DHCP (Dynamic Host Configuration Protocol,动态主机管理协议)是一种基于UDP协议且仅限用于局域网的网络协议,主要用途是为局域网内部设 ...

  9. IntelliJ IDEA常用设置(一)

    一.java文件中代码有错误,不点开java文件就不提示错误解决方法,版本不同可能界面有所区别. -->File->Settings->Build,Execution,Deploym ...

  10. 图解IIS8上解决网站第一次访问慢的处理(转载)

    本篇经验以IIS8,Windows Server 2012R2做为案例.IIS8 运行在 Windows Server 2012 and Windows 8 版本以上的平台上.IIS中应用程序池和网站 ...