姓名:何伟钦

学号:20135223

( *原创作品转载请注明出处*)

( 学习课程:《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

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

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

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

(一) 克隆并自动编译MenuOS

  1. rm menu -rf      //强制删除原menu文件

  2. git clone http://github.com/mengning/menu.git //从github中克隆

  3. cd menu   //进入menu目录

  4. make rootfs //运行自动编译脚本,生成根文件系统,启动MenuOS

(二)给MenuOS增加time和time-asm命令

1.更新menu代码到最新版

2.在test.c中main函数里,增加MenuConfig

3.增加对应的两个函数:Time和TimeAsm

4。make rootfs

二、使用gdb跟踪调试内核

1.运行MenuOS系统

在实验楼的虚拟机环境里,打击打开shell,使用命令

cd LinuxKernel/

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

2.调试运行

1)使用带参数命令启动MenuOS

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

输入help,可以看到当前的系统调用:

2)启动gdb,设置断点,运行

(gdb)file linux-3.18.6/vmlinux    //在出现gdb提示符后,加载符号文件

(gdb)target remote:1234         //建立和被调试程序的连接

(gdb)break start_kernel  //在start_kernel函数入口处设置断点

(gdb)break  sys_time     //在系统调用time的位置设置断点

(gdb)c   //继续输入c,使得系统运行到start_kernel处停住

(gdb)s   //单步执行

(gdb)finish // 将这个函数执行完

list可以查看内部的函数,直到sys_time返回后进入汇编代码处理,gdb无法继续进行追踪

扩展知识:

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

(一)系统调用在内核代码中的工作机制和初始化

main.c中start_kernel函数:trap_init()

set_system_trap_gate(SYSCALL_VECTOR,&system_call)    一执行int 0x80,系统直接跳转到system_call。

SYSCALL_VECTOR:系统调用的中断向量

&system_call:汇编代码入口

(二)system_call到iret之间的主要代码

1.SAVE_ALL:保存现场

2.syscall_call:调用了系统调用处理函数(call *sys_call_table(,%eax,4)调用了系统调度处理函数,eax存的是系统调用号,是                           实际的系统调度程序。                       sys_call_table:系统调用分派表)

3.restore all:恢复现场

4.syscall exit work:若有sys_exit_work,则进入sys_exit_work:会有一个进程调度时机。work_pending -> work_notifysig,用来处理信号,可能call schedule:进程调度代码可能跳转到restore_all,恢复现场。

5. INTERRUPT RETURN:宏,也就是iret,系统调用到此结束

流程图如下:

《Linux内核分析》课程第五周学习总结的更多相关文章

  1. 《Linux内核分析》第五周学习笔记

    <Linux内核分析>第五周学习笔记 扒开系统调用的三层皮(下) 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.c ...

  2. 《Linux内核分析》第五周学习总结

    <Linux内核分析>第五周学习总结                                  ——扒开系统调用的三层皮(下) 姓名:王玮怡 学号:20135116 1.给menu ...

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

    扒开系统调用的三层皮(下) 郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给Men ...

  4. 《Linux 内核分析》第五周

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

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

    <Linux内核分析>第八周学习笔记 进程的切换和系统的一般执行过程 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163 ...

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

    <Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...

  7. 《Linux内核分析》第六周学习笔记

    <Linux内核分析>第六周学习笔记 进程的描述和创建 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...

  8. 《Linux内核分析》第三周学习笔记

    <Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...

  9. 《Linux内核分析》第八周学习总结

    <Linux内核分析>第八周学习总结                                      ——进程的切换和系统的一般执行过程 姓名:王玮怡  学号:20135116 ...

  10. 《Linux内核分析》第七周学习总结

    <Linux内核分析>第七周学习总结                         ——可执行程序的装载 姓名:王玮怡  学号:20135116 一.理论部分总结 (一)可执行程序的装载 ...

随机推荐

  1. 基于Java反射的map自动装配JavaBean工具类设计

    我们平时在用Myabtis时不是常常需要用map来传递参数,大体是如下的步骤: public List<Role> findRoles(Map<String,Object> p ...

  2. 开发指南专题十四:JEECG微云高速开发平台MiniDao 介绍

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/27068645   开发指南专题十四:J ...

  3. Springboot集成Common模块中的的全局异常处理遇见的问题

    由于项目公共代码需要提取一个common模块,例如对于项目的文件上传,异常处理等,本次集成common代码时候maven引入common的全局异常处理代码之后发现不生效,由于common包路径与自己的 ...

  4. Maven搭建私服

    为什么要搭建私服?搭建私服有什么好处? 以我最近技术调研和相关的使用为起点概述: 首先说明,为什么要搭建私服? 搭建私服的目的是,通常企业项目开发,特别是使用maven作为项目管理,现在非常流行使用m ...

  5. 向jupyter notebook加入Anaconda3中已添加的虚拟环境kernel

    # jupyter notebook添加Anaconda虚拟环境的kernel #  开启虚拟环境 (base) C:\Users\jiangshan>activate tensorflow # ...

  6. 接收键盘输入的字符串,用FileWirter类将字符串写入文件,用FileReader类读出文件内容显示在屏幕上

    public class SY63 { public static void main(String[] args) throws Exception { System.out.print(" ...

  7. P1312 Mayan游戏

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  8. 计算机视觉-sift(1)原理

    1999年由David Lowe首先发表于计算机视觉国际会议(International Conference on Computer Vision,ICCV),2004年再次经David Lowe整 ...

  9. 常用的php数组函数

    以下是自己比较常用的数组函数 数组元素增加减少array_pusharray_poparray_shiftarray_unshift array_splice  (对数组的增删改) array_sli ...

  10. 写个定时任务更新svn

    最近学了点shell编程,寻思锻炼下写一个.平常你学习或者看别人讲,自己不练习肯定不行,基本上一动手准出错哈哈.等自己去实践,才会知道哪里有问题,哪里容易出错,哪里要注意什么的. 因为我们每个人有自己 ...