20135302魏静静——linux课程第五周实验及总结
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,恢复现场。
从以上可以看出:
在系统调用返回之前,可能发生进程调度,进程调度里就会出现进程上下文的切换
进程间通信可能有信号需要处理
系统调用就是一个特殊一点的中断,所以也有保护现场与恢复现场。
二、实验:分析system_call中断处理过程
增加系统调用
- 在test.c中增加两个函数,Getpid和GetpidAsm



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

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

c运行之后,在MenuOs里使用time,可以看到它停了下来
20135302魏静静——linux课程第五周实验及总结的更多相关文章
- 20135302魏静静——linux课程第三周实验及总结
linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...
- 20135302魏静静——linux课程第六周实验及总结
linux课程第六周实验及总结 实验及学习总结 1.进程描述符task_struct数据结构 进程的作用: 将信号.进程间通信.内存管理和文件系统联系起来 操作系统的三大功能: 进程管理.内存管理.文 ...
- 20135302魏静静——linux课程第七周实验及总结
linux课程第七周实验及总结 实验及学习总结 1. 编译链接的过程和ELF可执行文件格式(以hello为例) GNU编译系统编译源码: 首先,运行C预处理器(cpp),将.c文件翻译成.i文件——g ...
- 20135302魏静静——linux课程第八周实验及总结
linux课程第八周实验及总结 实验及学习总结 1. 进程切换在内核中的实现 linux中进程切换是很常见的一个操作,而这个操作是在内核中实现的. 实现的时机有以下三个时机: 中断处理过程(包括时钟中 ...
- 20135302魏静静——Linux课程期中总结
Linux期中总结 Linux课程第一周实验及总结:[http://www.cnblogs.com/20135302wei/p/5218607.html] 冯诺依曼体系结构的核心思想是存储程序计算机. ...
- 20135302魏静静——linux课程第四周实验及总结
linux课程第四周实验及总结 一.实验 我选择的是第20号系统调用,getpid 代码如下: /* getpid.c */ #include <unistd.h> #include &l ...
- 20135302魏静静Linux内核分析第二周学习总结
操作系统是如何工作的 1. 小结:计算机是怎样工作的 三个法宝 存储程序计算机.函数调用堆栈.中断机制 两把宝剑 中断上下文.进程上下文的切换 2. 堆栈 堆栈是C语言程序运行时必须的一个记录调用路径 ...
- 《Linux内核分析》课程第五周学习总结
姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- Linux 第五周 实验: 分析system_call中断处理过程
姬梦馨 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 使用gdb跟踪分析一个系统调用内核函数 ...
随机推荐
- SpringMVC笔记——Spring+MyBatis组合开发简单实例
简介 SSH框架很强大,适合大型项目开发.但学无止境,多学会一门框架组合开发会让自己增值许多. SSM框架小巧精致,适合中小型项目快速开发,对于新手来说也是简单上手的.在SSM框架搭建之前,我们先学习 ...
- Spring Security OAuth2 授权码模式
背景: 由于业务实现中涉及到接入第三方系统(app接入有赞商城等),所以涉及到第三方系统需要获取用户信息(用户手机号.姓名等),为了保证用户信息的安全和接入方式的统一, 采用Oauth2四种模式之一 ...
- 170412、Spring Boot Quartz介绍
(1)什么是Quartz? (2)Quartz的特点: (3)Quartz专用词汇说明: (4)Quartz任务调度基本实现原理: 接下来看下具体的内容: (1)什么是Quartz? Quartz是一 ...
- Hadoop中正确地添加和移除节点
正确地添加和移除节点 添加节点 克隆 克隆一台全新的Linux(如有IP冲突,可右击VMware右下角网络图标断开连接) 打开/etc/hostname修改主机名 打开/etc/sysconfig/n ...
- Codeforces Round #513-ABCD
ABC现场做出,涨了八十几分吧.D有点思路不知道怎么实现,赛后看题解发现巨简单,想得太复杂了.蓝瘦. A----http://codeforces.com/contest/1060/problem/A ...
- 在R语言中封装类读写sql操作工具类
1.mysql_helper.R # 使用RMySQL操作数据库 # 载入DBI和RMySQL包 library(DBI) library(RMySQL) mysql_con <- functi ...
- 设置PYTHONIOENCODING
PYTHONIOENCODING=utf8
- Storm-源码分析-EventManager (backtype.storm.event)
Protocol and DataType 大体结构, 定义protocol EventManager, 其实就是定义interface 函数event-manager, 主要做2件事 1. 启动ev ...
- Ta-lib K线模式识别
1, CDL2CROWS (Two Crows 两只乌鸦) 简介:三日K线模式,第一天长阳,第二天高开收阴,第三天再次高开继续收阴,收盘比前一日收盘价低,预示股价下跌. 例子:integer = CD ...
- Win32 配置文件用法
#include "stdafx.h"#include <Shlobj.h>#include <Shlwapi.h> #pragma comment(lib ...