一、实验要求:

  1、使用gdb跟踪分析一个系统调用内核函数

  2、根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图

二、实验步骤:

  1、实验环境是使用本课程配置的实验楼虚拟机环境

2、打开命令行客户端,cd LinuxKernel目录,使用命令rm -rf menu删除原来的代码,使用git clone https://github.com/mengning/menu.git获取menu的最新代码,

3、cd menu进入menu子文件夹,使用vi test.c打开文件,将上周实验的代码拷贝入test.c中,构造成两个函数,成为menu的两个菜单项。

4启动系统,看到如下结果

实验截图如下:

2、分析system_call处理流程

代码如下:

  1. .macro INTERRUPT_RETURN  ; 中断返回
  2. iret
  3. .endm
  4. .macro SAVE_ALL          ; 保护现场
  5. ...
  6. .macro RESTORE_INT_REGS
  7. ...
  8. .endm
  9. ENTRY(system_call)
  10. SAVE_ALL
  11. syscall_call:
  12. call *sys_call_table(,%eax,4)
  13. movl %eax, PT_EAX(%esp)  ; store the return value
  14. syscall exit:
  15. testl $_TIF_ALLWORK_MASK, %ecx # current->work
  16. jne syscall_exit_work
  17. restore_all:
  18. RESTORE_INT_REGS
  19. irq_return:
  20. INTERRUPT_RETURN      ; 到这里就算执行完了
  21. ENDPROC(system_call)
  22. syscall_exit_work:
  23. testl  $_TIF_WORK_SYSCALL_EXIT, %ecx
  24. jz work_pending
  25. END(syscall_exit_work)
  26. work_pending:
  27. testb $_TIF_NEED_RESCHED, %cl
  28. jz work_notifysig
  29. work_resched:
  30. call schedule
  31. jz restore_all
  32. work_notifysig:
  33. ...                  ; deal with pending signals
  34. END(work_pending)

流程图:

三、总结

系统调用是很多种不同的中断处理过程组成,也就是中断,在中断里头可能还会有进程上下文的转换或者中断上下文的转换。

实验五分析system_call中断处理过程的更多相关文章

  1. Linux 第五周 实验: 分析system_call中断处理过程

    姬梦馨 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 使用gdb跟踪分析一个系统调用内核函数 ...

  2. 20135202闫佳歆--week5 分析system_call中断处理过程--实验及总结

    week 5 实验:分析system_call中断处理过程 一.使用gdb跟踪分析一个系统调用内核函数(上周选择那一个系统调用)--getpid 复习视频: 如何实现? - 更新menu代码到最新版 ...

  3. 《Linux内核分析》第五周:分析system_call中断处理过程

    实验 分析system_call中断处理过程 使用gdb跟踪分析一个系统调用内核函数(您上周选择那一个系统调用),系统调用列表参见http://codelab.shiyanlou.com/xref/l ...

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

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

  5. 作业五:分析system_call中断处理过程

    分析system_call中断处理过程 一.MesuSO增加getpid和getpid-asm 二.使用GDB跟踪系统调用内核函数sys_getpid 分析system_call中断处理过程 使用gd ...

  6. 通过分析system_call中断处理过程来深入理解系统调用

    通过分析system_call中断处理过程来深入理解系统调用 前言说明 本篇为网易云课堂Linux内核分析课程的第五周作业,上一次作业中我以2个系统调用(getpid, open)作为分析实例来分析系 ...

  7. Linux内核分析-分析system_call中断处理过程

    姓名:江军 ID:fuchen1994 分析system_call中断处理过程 使用gdb跟踪分析一个系统调用内核函数(您上周选择那一个系统调用),系统调用列表参见http://codelab.shi ...

  8. 分析system_call中断处理过程

    分析system_call中断处理过程 上周我们使用gcc内嵌汇编调用系统调用,这次我们具体分析下过程. 将getpid嵌入menuos 代码从github下载,步骤如下: 1. 增加一个函数,get ...

  9. 实验五:分析system_call中断处理过程

    原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 如果我写的不好或者有误的地方请留言 ...

随机推荐

  1. Js debug模式

    在代码中需要调试的地方,输入“debugger;”:

  2. Parquet存储格式 - 论文翻译【转】

    Apache Parquet是Hadoop生态圈中一种新型列式存储格式,它可以兼容Hadoop生态圈中大多数计算框架(Mapreduce.Spark等),被多种查询引擎支持(Hive.Impala.D ...

  3. poj_1390 动态规划

    题目大意 将一些连续的序列根据颜色分为N段,每段有颜色 为 Ci, 长度为 Li.每次点击其中的一段 i ,则可以将该段i消除,该段相邻的两段自动连接到一起,如果连接到一起的两段之前的颜色相同,则更新 ...

  4. JS-高程3(更新中...)

    附录A 名词解析: const:声明常量,常量的值不能通过重新赋值来改变,并且在初始赋值后,不能重新声明.重新赋值了. 即:同一作用域中,常量名不能与其他变量或函数名重名.值也不能修改了. “常量是块 ...

  5. LeetCode——Search Insert Position

    Description: Given a sorted array and a target value, return the index if the target is found. If no ...

  6. ajax响应报文可以被浏览器缓存的必要条件

    1.发送请求时必须使用get方法. 2.服务器端设置响应报文的Expires为希望浏览器缓存的时间 如果这两个条件都不满足时,也就是说无法通过浏览器缓存来缓存文件时: 在js中设置一个localCac ...

  7. 如何判断SharedPreferences 记录存在

    private EditText et; private String ettext; SharedPreferences settings; Editor editor; //设置 settings ...

  8. backup与recover

    完全恢复: 1.关闭DB2.拷贝文件3.启动DB.<出错>startup mount4.recover database until cancel using backup control ...

  9. ASM学习记录

    代理: 代理模式: 静态代理: 动态代理:是指在运行期动态的为指定的类生成其代理类.(需要相关的运行时编译技术) Javassist:Javassist是一个运行时编译库,他能动态的生成或修改类的字节 ...

  10. EF批量添加,删除,修改的扩展

    在EF各版本中,没有相应批量的添加,删除,修改,在用ORM 处理数据时直有个尴尬.在网上,也接到了很多网友的询问这方面的情况,特此今天把这方面的相关扩展分享一下,(这里只做批量删除的例子,添加和修改的 ...