Linux内核分析(第五周)
系统调用的三层皮(下)
一、给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内核分析(第五周)的更多相关文章
- LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)
LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...
- LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)
LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...
- 20135327郭皓--Linux内核分析第五周 扒开系统调用的三层皮(下)
Linux内核分析第五周 扒开系统调用的三层皮(下) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/U ...
- linux内核分析第五周学习笔记
linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第五周——扒开系统调用的“三层皮”(下)
Linux内核分析第五周--扒开系统调用的"三层皮"(下) 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.1 ...
- Linux内核分析第五周学习总结——分析system_call中断处理过程
Linux内核分析第五周学习总结--分析system_call中断处理过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- Linux内核分析——第五周学习笔记
第五周 扒开系统调用的“三层皮”(下) 一.知识点总结 (一)给MenuOS增加time和time-asm命令 在实验楼中,首先 强制删除menu (rm menu -rf) 重新克隆一个新版本的me ...
- Linux内核分析第五周学习总结:扒开系统调用的三层皮(下)
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuO ...
- linux内核分析 第五周
一.实验相关 1.下载老师最新的menu文件,并在其中添加上周所编写的代码,并运行 下载 添加 运行 2.gdb调试跟踪 gdb设置跟踪文件(先进入linux-3.18.6所在的文件) gdb设置断点 ...
- “Linux内核分析”第五周报告
张文俊+ 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习总结 1.给M ...
随机推荐
- PyQt5--QLineEdit
# -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...
- STM32学习之路-LCD(2)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011791262/article/details/27711881 这些天一直在研究LCD的初始化 ...
- 修改Lotus notes默认浏览器
notes收到的邮件里面的链接,点了以后会自动在notes里打开,但notes很弱,加载页面总是有问题.怎么才能让他默认用ie浏览器打开呢,怎么设置,请教达人. 右下角有个office->Edi ...
- 封装PDO连接数据库代码
废话不说直接上代码: <?php class DB { protected static $_connect; protected $dsn, $pdo; protected $_data, $ ...
- 利用RMAN恢复整个数据库
利用RMAN恢复整个数据库案例一 适合场合:恢复的目录一致,同时备份的过程中有归档日志 恢复的数据库目录和down机的数据库一致,还有一个就是RMAN备份的时候已经备份了归档日志. 备份脚本: run ...
- SpringMVC原理&MVC设计思想
什么是MVC? MVC是一种架构模式 --- 程序分层,分工合作,既相互独立,又协同工作 MVC是一种思考方式 --- 需要将什么信息展示给用户? 如何布局? 调用哪些业务逻辑? MVC流程图如下图所 ...
- Redis 4.x 安装及 发布/订阅实践和数据持久化设置
1.或者源码安装包 #wget http://download.redis.io/releases/redis-4.0.6.tar.gz 2.解压源码包 #tar -zxf redis-4.0.6.t ...
- ssh推送.py程序到服务器端运行
C:\Users\jiangshan>ssh jiangshan@192.168.1.191jiangshan@192.168.1.191's password:Last login: Sun ...
- Java中的枚举使用详解
转载至:http://www.cnblogs.com/linjiqin/archive/2011/02/11/1951632.html package com.ljq.test; /** * 枚举用法 ...
- input:file onchange事件无法读取解决方法
最近做项目,移动端的多文件上传,使用input:file读取文件 <input type='file' name='file' multiple accept='image/*' capture ...