《Linux内核分析》第五周学习笔记 扒开系统调用的三层皮(下)

郭垚 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

一、给MenuOS增加time和time-asm命令

1. 通过内核的方式(跟踪调试系统调用)来理解并使用系统调用。

rm menu -rf //强制删除当前menu

git clone http://github.com/mengning/menu.git   //重新克隆新版本的menu

cd menu

ls

make rootfs //rootfs是事先写好的一个脚本,自动编译自动生成根文件系统,同时自动启动MenuOS

2. 将上周选择的系统调用添加到MenuOS中

vi test.c  //进入test.c文件

MenuConfig("getpid","Show Pid",Getpid);

MenuConfig("getpid_asm","Show Pid(asm)",GetpidAsm);  //在main函数中增加MenuConfig()

int Getpid(int argc,char *argv[]);

int GetpidAsm(int argc,char *argv[]); //增加对应的Getpid和GetpidAsm两个函数

make rootfs //编译

3. 给MenuOS增加time和time_asm命令的步骤:

  • 更新menu代码到最新版
  • test.c中main函数里,增加MenuConfig()
  • 增加对应的Time函数和TimeAsm函数
  • make rootfs

二、使用gdb跟踪系统调用内核函数sys_time

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 //连接到需要调试的MenuOS

(gdb)b start_kernel //设置断点

(gdb)c //执行,可见程序在start_kernel处停下

list //可查看start_kernel的代码

(gdb)b sys_time //sys_time是13号系统调用对应的内核处理函数,在该函数处设置断点

(gdb)c

//如果这里一直按n单步执行,会进入schedule函数。sys_time返回后进入汇编代码处理,gdb无法继续进行追踪

执行int 0x80后执行system call对应的代码(system call不是函数,是一段特殊的汇编代码,gdb还不能进行跟踪)。

三、系统调用在内核代码中的处理过程

1. 系统调用在内核代码中的工作机制和初始化

int 0x80——>system call:通过中断向量匹配

system call——>sys_xyz():通过系统调用号匹配

1.1 系统调用机制的初始化

一旦执行int 0x80后立刻跳转到system_call执行

2. 简化后便于理解的system_call伪代码

  • int 0x80后的下一条指令从此处的ENTRY(system_call)开始
  • 系统调用返回之前可能会发生进程调度(call schedule)
  • 当前进程可能有信号需要处理(work_notifysig)
  • 进程调度中会发生中断上下文切换和进程上下文的切换,这是个连贯的过程
  • 内核可以抽象成多种不同中断处理过程的集合

注:system_call到iret之间的处理过程流程图详见总结。

3. 简单浏览system_call到iret之间的主要代码

老师简化的代码:

四、总结

从system_call开始到iret结束的过程:

《Linux内核分析》第五周学习笔记的更多相关文章

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

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

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

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

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

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

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

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

  5. 《Linux内核分析》第一周学习笔记

    <Linux内核分析>第一周学习笔记 计算机是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...

  6. 《Linux内核分析》第二周学习笔记

    <Linux内核分析>第二周学习笔记 操作系统是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

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

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

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

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

  9. Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程

    Linux内核分析第六周学习笔记--分析Linux内核创建一个新进程的过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  10. Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序

    Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study. ...

随机推荐

  1. django中的中间件机制和执行顺序

    这片文章将讨论下面内容: 1.什么是middleware 2.什么时候使用middleware 3.我们写middleware必须要记住的东西 4.写一些middlewares来理解中间件的工作过程和 ...

  2. el-table复选框分页记忆

    el-table 结合 el-pagination 实现分页后默认是没有复选框记忆功能的,对于这样的需求,无奈又只能硬着头皮上,试了网上的一些方法,没奏效,便自己上了. 简单的用法如下: <te ...

  3. 百度、高德、谷歌、火星、wgs84(2000)地图坐标相互转换的JS实现

    一.调用例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  4. Luogu P3462 [POI2007]ODW-Weights

    题目描述 While moving to a new compound the Byteotian Institute of Experimental Physics has encountered ...

  5. Component name与package name/class name的关系?

    谢谢,那就是component name是package name + activity name?那class name呢?是.java中定义的class MyClass ???

  6. ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序;ASP.NET WebForm和MVC总体请求流程图

    ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序 1.BeginRequest  開始处理请求 2.AuthenticateRequest 授权验证请求 ...

  7. 最好的8个 Java RESTful 框架

    原文出处: colobu 过去的每一年,涌现出越来越多的Java框架.就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的.连我的老祖母现在也使用 一个我从来没有听说过而且可 ...

  8. MYSQL中的int(11)到底代表什么意思?

    对于int类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的int(11)代表什么意思,很长时间以来我都以为这代表着限制int的长度为11位,直到有天看到篇文章才明白,11代表的并不是长 ...

  9. Python高级网络编程系列之终极篇---自己实现一个Web框架

    通过前面几个小节的学习,现在我们想要把之前学到的知识点给串联起来,实现一个很小型的Web框架.虽然很小,但是用到的知识点都是比较多的.如Socket编程,装饰器传参在实际项目中如何使用.通过这一节的学 ...

  10. WebService之nginx+(php-fpm)结构模型剖析及优化

    随着php脚本语言使用的普及,目前webserice服务大部分都在用nginx+(php-fpm)的结构,了解了其工作过程后才可以在各个方面想办法做调整优化和故障排查,从以下几点总结一下这种模型. 一 ...