《Linux内核分析》课程第五周学习总结
姓名:何伟钦
学号:20135223
( *原创作品转载请注明出处*)
( 学习课程:《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
内容:1.使用gdb跟踪分析一个系统调用内核函数
2.根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图
一、给MenuOS增加time和time-asm命令
(一) 克隆并自动编译MenuOS
rm menu -rf //强制删除原menu文件git clone http://github.com/mengning/menu.git //从github中克隆cd menu //进入menu目录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内核分析》课程第五周学习总结的更多相关文章
- 《Linux内核分析》第五周学习笔记
<Linux内核分析>第五周学习笔记 扒开系统调用的三层皮(下) 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.c ...
- 《Linux内核分析》第五周学习总结
<Linux内核分析>第五周学习总结 ——扒开系统调用的三层皮(下) 姓名:王玮怡 学号:20135116 1.给menu ...
- 《Linux内核分析》第五周学习总结 扒开系统调用的三层皮(下)
扒开系统调用的三层皮(下) 郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给Men ...
- 《Linux 内核分析》第五周
[李行之原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] <Linux内 ...
- 《Linux内核分析》第八周学习笔记
<Linux内核分析>第八周学习笔记 进程的切换和系统的一般执行过程 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163 ...
- 《Linux内核分析》第七周学习笔记
<Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- 《Linux内核分析》第六周学习笔记
<Linux内核分析>第六周学习笔记 进程的描述和创建 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- 《Linux内核分析》第三周学习笔记
<Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...
- 《Linux内核分析》第八周学习总结
<Linux内核分析>第八周学习总结 ——进程的切换和系统的一般执行过程 姓名:王玮怡 学号:20135116 ...
- 《Linux内核分析》第七周学习总结
<Linux内核分析>第七周学习总结 ——可执行程序的装载 姓名:王玮怡 学号:20135116 一.理论部分总结 (一)可执行程序的装载 ...
随机推荐
- 一篇关于介绍php的几个user 认证相关的几个包
http://kodeinfo.com/post/laravel-authentication-packages LARAVEL AUTHENTICATION PACKAGES By Imran Iq ...
- PyQt5--QLineEdit
# -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...
- 线程同步方式之互斥量Mutex
互斥量和临界区非常相似,只有拥有了互斥对象的线程才可以访问共享资源,而互斥对象只有一个,因此可以保证同一时刻有且仅有一个线程可以访问共享资源,达到线程同步的目的. 互斥量相对于临界区更为高级,可以对互 ...
- animate is not a function(zepto 使用报错)[转]
animate is not a function(zepto 使用报错) 1.为什么使用zepto写animate报错? 因为zepto默认构建包含: Core, Ajax, Event, Form ...
- 如何将XML文件导入Excel中
如下图所示为一个规范的XML文件,在Excel中可以将规范的XML文件导入到Excel成为规范的表格.具体有如下几种方法: 工具/原料 Excel 方法/步骤 单击“数据”选项卡下的“ ...
- Redis系列九:redis集群高可用
Redis集群的概念: RedisCluster是redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当一个服务挂了可以快速的切换到另外一个服务,当遇到单机内存. ...
- 死磕nginx系列--使用nginx做负载均衡
使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 ...
- PHP 使用 jwt 方式用户身份认证
封装类 // +---------------------------------------------------------------------- // | Created by PhpSt ...
- Mac svn使用学习-2-服务端
2.在mac环境下搭建一个SVN服务器环境 1)创建一个名为myCode的仓库——svnadmin命令 格式: svnadmin SUBCOMMAND REPOS_PATH [ARGS & O ...
- 记一次Eclipse关于JDK和JRE的问题
今天同事遇到个问题,发现import package居然报错,但是那个package实际上存在.一般情况某个类有问题或者是该类中的方法有问题,总会在IDE中显示一条红线.但是这次确实是没有问题.我找到 ...