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

《Linux内核分析》 第五周

PART ONE 实验过程

1.在MenusOS中增加time和time-asm命令

  • 更新menu代码到最新版本(删除当前版本重新下载);
  • 在main函数中增加MenuConfig ;
  • 增加对应的time和time-asm函数
  • make rootfs(自动编译)
  • 实验截图:

(1)在main函数(test.c)中增加函数

(2)运行结果

2.使用gdb跟踪系统调用内核函数sys_time

  • 进入内核,冻结启动
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
  • 启动gdb
  • 加载debug版本内核并连接到target地址
  • 为处理time函数的系统调用sys_time设置断点之后,在menuOS中执行time。发现系统停在sys_time处。继续按n单步执行,会进入schedule函数。
  • sys_time返回之后进入汇编代码处理,gdb无法继续跟踪

    -如果在sys_call设置断点(entry_32.S),然后输入c之后,发现是不会在sys_call处停下来的(因为这里是一处系统调用函数而不是正常函数)

    -调试过程:

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

1.系统调用机制的初始化

trap_gate函数中,涉及到了系统调用的中断向量和system_call的汇编代码入口;一旦执行int 0x80,CPU直接跳转到system_call

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

  • system_call的位置就在ENTRY(system_call)处;(其他中断的处理过程与此类似)
  • syscall_table是系统调用表
  • after_call之后,保存返回值
  • 要exit的时候,会有一个syscall_exit_work,否则直接返回用户态

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

  1. SAVE_ALL:保存现场
  2. syscall_call:调用了系统调用处理函数
  3. restore all:恢复现场(因为系统调用处理函数也算是一种特殊的“中断”)
  4. syscall_exit_work:如3.中所述
  5. INTERRUPT RETURN:也就是iret,系统调用到此结束

4.从system_call到iret的流程图

PART THREE Conclusion

  • 通过本周学习,在系统中增加自己的函数,提高了学习兴趣与动手能力。
  • system_call到iret之间的主要代码的学习更是让我对于内核有了更加深入的了解

《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设置断点 ...

  10. “Linux内核分析”第五周报告

    张文俊+ 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习总结 1.给M ...

随机推荐

  1. document.getElementByClassName的兼容问题

    if(!document.getElementsByClassName){ document.getElementsByClassName = function(className, element) ...

  2. sql行列转换PIVOT与unPIVOT

    基本语法 select * from Mould pivot ( count(ID)for ProductTypeCode in ( [FC], [RCU], [RCD] )) as PVT; wit ...

  3. 探索C#字符串

    一.前言 刚接触C#时,书上说string是一种特殊的引用类型,因此string类型变量在作为参数传递到另一个方法,被修改后原变量的值不会发生变化,当时看得我一脸懵逼,什么叫特殊....后来又听说字符 ...

  4. 13.2SolrCloud集群使用手册之CoreAdmin API

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ CoreAdminHandler是用来管理Solr cores的,用来管理一个Solr instance中所有 ...

  5. Java POI单元格使用心得

    1: /** * Created by liuguangxin on 2018/5/16. * <p> * MergeRegion:表示excel中cell的信息,startRow与end ...

  6. Dig命令解析结果

    dig -t RT NAME @NS -t RT 指定要查询的资源记录类型 NAME 需要解析的域(域名) @NS 指定那个域名服务器负责解析 [root@xss ~]# dig www.ihoney ...

  7. Python基础(11)——反射、异常处理

    1.反射 以下均是对对象的操作,而不是对类 class Foo(object): def __init__(self): self.name = 'wupeiqi' def func(self): r ...

  8. Python2.7-sqlite3

    sqlite3模块,SQLite 是用 C 写的轻量级的数据库,sqlite3 模块提供了对数据库的接口,要使用必须首先创建一个 Connection 对象,代表连接至数据库,然后才能继续操作,操作数 ...

  9. JAVA框架 Spring AOP注解

    一.准备工作: 1)导入jar包: 4个jar包. 2)约束:(spring需要所有的约束)有IOC约束和AOP 还有事务(tx)以及注解注入的约束(context). <?xml versio ...

  10. Kafka设计解析(二十一)关于Kafka幂等producer的讨论

    转载自 huxihx,原文链接 关于Kafka幂等producer的讨论 众所周知,Kafka 0.11.0.0版本正式支持精确一次处理语义(exactly once semantics,下称EOS) ...