系统调用的三层皮(下)

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

  ls

  rm menu -rf

  git clone xx(克隆新版本)

  cd menu 

  make rootfs(自动编译生成根文件系统)

                      help

                      version

                      time

                      time asm

   vi time.c(增加了time,tim-asm:0)更新menu代码到最新版;1)在main函数中增加menuconfig;2)增加对应的time函数和timeasm函数)3)make rootfs

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

  qemu -kernel linux -3,18,6/arch/x86/boot/xxxxxxxxxxxxxx(启动qemu)

  gdb

  file linux -3,18,6/VMlinux    (debug加载)

  target remote:1234(链接  menuOS)

  b start_kernel

  c

  b sys_time

  c

  list(如果单步执行会进入schedule函数)

              s.

              s.

              s.

              return i;

              (sys_time 返回后进入汇编代码处理gdb无法继续跟踪)

              (执行 int 0x80之后执行 system_call对应的代码)

              b system_call  x

              c

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

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

  2.trap_init();简化后便于理解的system_call伪代码

      kernel/entry.32.s

      entry(system_call)

        处理过程

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

      xxxxxxxxx

      save_all

      xxxxxxxxx

      syscall_call;

      call *sys_call_table(,%eax ,4)  (实际调用的系统服务程序)

      xxx

      xxx

      restore_all

四、实验

step1.

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

cd menu       //进入menu文件夹

step2.

进入test.c 添加需要的函数

step3.

输入make rootfs    //生存根文件系统并启动

step4.

gdb跟踪调试分,别在start_kernel和sys_getpid两个函数的位置设置断点

流程图:

开始→保存现场(save_all)→系统调用表(call *sys_call_table)→  sys_call_exit→restore_all→iret→结束

↓                           ↑

sys_exit_work(work_pending

working_ restore)

调用机制的初始化在start_kernel里面的trap_init()函数里进行,这个函数里面包含了sys_call汇编代码的入口,初始化好了之后,一旦执行int 0x80,CPU就会自动跳转到sys_call来执行。

sys_call的相关代码的位置是Linux-3.18.6/arch/x86/kernel/entry_32.s,里面的ENTRY(system_call)为int 0x80后的下一条指令,因其不是一个正常的函数,所以CPU还不能对其进行跟踪。

由代码可知,系统调用的过程大致分为三个阶段:保存现场SAVE_ALL、调用系统调用相对应的处理函数如time、getpid等,call *sys_call_table()、恢复现场RESORE_ALL 最后ire结束,返回用户态。在这个过程中,可能 会用到syscall_exit_work,里面有关于进程调度的函数。

 

  

  

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. 【Alpha 冲刺】 2/12

    今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 完成API文档编写 由于外出比赛,故推迟 无 0 孙浩楷 1.完成VUE框架搭建 2.寻找在线编辑图片插件 已完成 WEB在线编辑 ...

  2. FIO_工具_专业

    一.FIO工具安装: 1.查看fio是否安装 [root@localhost /]#rpm –qa|grep fio 2.源码安装(推荐) 官网地址:http://freecode.com/proje ...

  3. 细数垃圾邮箱客户端 Live Mail 的BUG

    以前用XP系统,里面自带的有outlook,使用中还行,不过bug也不少,常见的如 1.查找,邮件多了后,常常查找不到: 2.有时收件箱什么的突然空白,或部分邮件不见了(2G大小限制,超过了就不能做移 ...

  4. vue-devtoools 调试工具安装

    最近在研究vue单页面应用,一步一步用上全家桶,开发避免不了的就是调试工具,因为vue是进行数据驱动的,单从chrome里面进行element查看,查不到什么鸟东西,必须要进行对数据动向进行关查,那我 ...

  5. HTML5API之获取地理位置详解

    在使用地理位置API之前先来了解一下什么是经度和纬度以及地理位置获取的原理 首先经度指的是南北极的连接线,纬度指的是东西的连接线 地理位置的获取原理是通过IP地址(基于ISP记录,能够知道这个IP地址 ...

  6. ethereumjs/ethereumjs-util

    ethereumjs/ethereumjs-util Most of the string manipulation methods are provided by ethjs-util 更多的字符串 ...

  7. MetaMask/provider-engine-3-test

    通过看其test的代码去好好看看它是怎么使用的 1. provider-engine/test/basic.js const test = require('tape') const Provider ...

  8. Android 文件的读取和写入

    (1)openFileInput和openFileOutput的使用 文件的使用,注意最后要用finally给关闭掉. openFileOutput:(写入文件,如果没有文件名可以创建,这里不需要判断 ...

  9. Kubernetes1.91(K8s)安装部署过程(四)--Master节点安装

    再次明确下架构:  三台虚拟机 centos 7.4系统,docker为17版本,ip为10.10.90.105到107,其中105位master,接下来的master相关组件安装到此机器上. etc ...

  10. python面试一:python2与python3的区别一

    1.默认编码方式不同:py3用的是utf-8,变量名更为广泛.2.去除<>改用!=3加入as 和with关键字4./除法默认数据类型不同 py2 5/3=1 py3 5//3=15.去掉了 ...