一、实验要求:

  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. nil、Nil、NULL与NSNull的区别及应用

      总结 nil:OC中的对象的空指针 Nil:OC中类的空指针 NULL:C类型的空指针 NSNull:数值类的空对象 详细解析应用如下: 1.nil 指向一个对象的指针为空 在objc.h中的定义 ...

  2. java高级---->Thread之BlockingQueue的使用

    今天我们通过实例来学习一下BlockingQueue的用法.梦想,可以天花乱坠,理想,是我们一步一个脚印踩出来的坎坷道路. BlockingQueue的实例 官方文档上的对于BlockingQueue ...

  3. jQuery的无new构建

    正常面向对象的写法: var cJquery = function(){ //构造函数体 }; cJquery.prototype = { name : function(alert("ch ...

  4. vue中npm install 报错之一

    报错原因: 这是因为文件phantomjs-2.1.1-windows.zip过大,网络不好,容易下载失败 PhantomJS not found on PATH 解决方案一: 选择用cnpm ins ...

  5. 关于sencha touch 用phonegap打包后,docked悬停的组件被手机软键盘遮挡的解决方法

    这个问题应该算是phonegap的一个bug,在mainifest.xml 里android:windowSoftInputMode设置成了adjustpan,理论上不会出现遮挡悬停组件这种情况, 不 ...

  6. 2800 送外卖[状态压缩dp]

    2800 送外卖  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 有一个送外卖的,他手上有n份订单,他 ...

  7. EasyUI DataGrid 时间格式化、字符串长度截取

    需要格式化日期时间和标题的方法,显示如下: 日期:2017-03-03 时间:2017-03-0 11:11 标题:标题名称 <table id="tbList" style ...

  8. javase---Java反射操作

    1首先认识什么叫反射 正常的情况下,我们操作一个对象,则必须找到这个对象对应的类,然后实例化,然后再做各种操作, 反射的则通过一个对象获取对应的类,然后实例化,然后做各种操作, 2反射的操作步骤 I获 ...

  9. Oracle数据库类型date

    date日期类型 说明 oracle dd-mm-yyyy create table test1(birthday date); timestamp(n) 说明:邮戳的时间类型 于date的区别,邮戳 ...

  10. Monkey Tradition---LightOj1319(中国剩余定理模板)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1319 题意:有 n 个猴子,n 棵树,树的高度为 L ,每个猴子刚开始的时候都在树的底 ...