linux课程第五周实验及总结

一、学习总结

  • 给MenuOS增加time和time-asm命令(四步操作命令)

rm menu -rf 强制删除
git clone http://github.com/mengning/menu.git   克隆相关信息
cd menu
make rootfs 一个脚本,自动编译自动生成根文件系统,并自动启动MenuOS
  • 使用gdb跟踪系统调用内核函数sys_time

(gdb)b sys_time
(gdb)c # 启动到MenuOs
// 在MenuOs中使用time,会停在time函数处
(gdb)list # 可以看到对应代码
(gdb)s # 单步执行
(gdb)finish # 将这个函数执行完
// 以上两步重复使用,可以看到sys_time函数中的函数,直到看见return i
// sys_time返回后进入汇编代码处理,gdb无法继续进行追踪

系统调用指令:

// 执行int 0x80之后执行system_call对应的代码
(gdb)b system_call # 是可以设置断点的,但是这段是汇编代码,运行时不能在这个断点处停下逐句分析。
  • 系统调用的中断处理过程

    • 系统调用流程图

    • sys_call_table是系统调用分派表
    • syscall_after_all,需要先保存返回值
    • sys_exit_work
      没有这个就restore_all,返回用户态。
      一旦进入sys_exit_work:会有一个进程调度时机

  • 简化后便于理解的system_call伪代码
  • system_call到iret之间的主要代码
SAVE_ALL保存现场

call *sys_call_table(,%eax,4)调用了系统调度处理函数,eax存的是系统调用号,这段是实际的系统调度程序。

restore_all
INTERRUPT_RETURN,是个宏,实际上就是iret,结束。
这个过程中会有sys_exit_work
sys_exit_work中会有work_pending
work_pending中会有work_notifysig,用来处理信号
可能call schedule 进程调度代码
还可能跳转到restore_all,恢复现场。
从以上可以看出:
  1. 在系统调用返回之前,可能发生进程调度,进程调度里就会出现进程上下文的切换
  2. 进程间通信可能有信号需要处理
系统调用就是一个特殊一点的中断,所以也有保护现场恢复现场

二、实验:分析system_call中断处理过程

  • 增加系统调用

    • 在test.c中增加两个函数,Getpid和GetpidAsm

    • make rootfs后,输入help会显示当前菜单

  • 使用gdb调试

    这里需要注意的就是,因为当前是在menu目录下,而所需要的镜像文件不在这个目录下,这时需要使用全路径,不然的话就会出现像上面第二张图的错误。给time处设置断点:

  • c运行之后,在MenuOs里使用time,可以看到它停了下来

20135302魏静静——linux课程第五周实验及总结的更多相关文章

  1. 20135302魏静静——linux课程第三周实验及总结

    linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...

  2. 20135302魏静静——linux课程第六周实验及总结

    linux课程第六周实验及总结 实验及学习总结 1.进程描述符task_struct数据结构 进程的作用: 将信号.进程间通信.内存管理和文件系统联系起来 操作系统的三大功能: 进程管理.内存管理.文 ...

  3. 20135302魏静静——linux课程第七周实验及总结

    linux课程第七周实验及总结 实验及学习总结 1. 编译链接的过程和ELF可执行文件格式(以hello为例) GNU编译系统编译源码: 首先,运行C预处理器(cpp),将.c文件翻译成.i文件——g ...

  4. 20135302魏静静——linux课程第八周实验及总结

    linux课程第八周实验及总结 实验及学习总结 1. 进程切换在内核中的实现 linux中进程切换是很常见的一个操作,而这个操作是在内核中实现的. 实现的时机有以下三个时机: 中断处理过程(包括时钟中 ...

  5. 20135302魏静静——Linux课程期中总结

    Linux期中总结 Linux课程第一周实验及总结:[http://www.cnblogs.com/20135302wei/p/5218607.html] 冯诺依曼体系结构的核心思想是存储程序计算机. ...

  6. 20135302魏静静——linux课程第四周实验及总结

    linux课程第四周实验及总结 一.实验 我选择的是第20号系统调用,getpid 代码如下: /* getpid.c */ #include <unistd.h> #include &l ...

  7. 20135302魏静静Linux内核分析第二周学习总结

    操作系统是如何工作的 1. 小结:计算机是怎样工作的 三个法宝 存储程序计算机.函数调用堆栈.中断机制 两把宝剑 中断上下文.进程上下文的切换 2. 堆栈 堆栈是C语言程序运行时必须的一个记录调用路径 ...

  8. 《Linux内核分析》课程第五周学习总结

    姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

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

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

随机推荐

  1. HDU 4605 Magic Ball Game(可持续化线段树,树状数组,离散化)

    Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. Linux C 获取 文件的大小

    通过Linux C库函数来获取文件的大小 #include <unistd.h> #include <sys/types.h> #include <sys/stat.h& ...

  3. HDU_5512_Pagodas

    Pagodas Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  4. 找新朋友---hdu1286(欧拉函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1286 欧拉函数:对正整数n,欧拉函数是求少于n的数中与n互质的数的数目: 素数(质数)指在一个大于1的 ...

  5. 浅析Linux中的进程调度

    2016-11-22 前面在看软中断的时候,牵扯到不少进程调度的知识,这方面自己确实一直不怎么了解,就趁这个机会好好学习下. 现代的操作系统都是多任务的操作系统,尽管随着科技的发展,硬件的处理器核心越 ...

  6. redis之数据操作详解

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  7. 利用Octopress在Github上搭建博客及后续问题总汇

    首先贴一下我的新博客地址: http://findingsea.github.io 用Octopress在GitHub上搭建博客已经不是什么新鲜事了,网上的教程也多了去了,大题的方法什么都差不多,这篇 ...

  8. MySQL DBA的修炼与未来(参考篇)

    转自:https://blog.csdn.net/xielingshao/article/details/77840101 MySQL DBA的修炼与未来 随着MySQL地位爆炸式的提升, MySQL ...

  9. ubuntu安装markdown

    # sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA300B7755AFCFAE linuxidc@linuxidc:~ ...

  10. 005-hive概述,计算原理及模型

    计算原理及模型 优化的根本思想: 尽早尽量过滤数据,减少每个阶段的数据量 减少job数 解决数据倾斜问题 Hive概述 名称       hive系统架构 metastore derbymysql   ...