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

1. 克隆并自动编译MenuOS

rm menu -rf 强制删除原menu文件
git clone http: 
cd menumake rootfs 运行自动编译脚本,生成根文件系统,启动MenuOS

2. 给MenuOS增加time和time-asm命令

更新menu代码到最新版

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

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

make rootfs

二、调试内核

1. 使用gdb跟踪调试内核

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
gdb
gdbfile linux-3.18.6/vmlinux   
gdbtarget remote:1234 

b sys_time:在系统调用time的位置设置断点

c:在MenuOs里使用time,停在断点处

s 单步调试—一步一步执行(PS:无法执行time_asm中的int 0X80部分)

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

1. 系统调用在内核代码中的工作机制和初始化

  • main.c中start_kernel函数:trap_init()
  • set_system_trap_gate(SYSCALL_VECTOR,&system_call)
    • SYSCALL_VECTOR:系统调用的中断向量
    • &system_call:汇编代码入口
  • 一执行int 0x80,系统直接跳转到system_call。

2. 系统调用——一个特殊的中断

SAVE_ALL:保存现场

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

sys_call_table:系统调用分派表

syscall_after_all:保存返回值

若有sys_exit_work,则进入sys_exit_work:会有一个进程调度时机。

work_pending -> work_notifysig,用来处理信号

可能call schedule:进程调度代码

可能跳转到restore_all,恢复现场。

若无sys_exit_work,就执行restore_all恢复,返回用户态。

INTERRUPT_RETURN <=> iret,结束。

- 在系统调用返回之前,可能发生进程调度,进程调度里就会出现进程上下文的切换。- 进程间通信可能有信号需要处理。- 可以将内核视为一系列中断指令的集合。

四、实践

1. 使用gdb跟踪分析122号系统调用内核函数:uname

先执行rm menu -rf,强制删除原有的menu文件夹,使用git命令更新menu代码至最新版。

在test.c中增加我编写的两个函数:Uname()和UnameAsm()

在main函数中增加两个函数的MenuConfig命令项:

make rootfs编译错误:

原因:忘记添加头文件<sys/utsname.h>

编译运行,在MenuOS中输入help,可以查看当前所有的系统调用,分别执行uname、uname-asm进行系统调用:

插入断点并调试:

2. 从system_call到iret

五、总结:从系统调用处理过程到一般的中断处理过程

系统调用就是特殊的一种中断

1. 保存现场

在系统调用时,我们需要SAVE_ALL,用于保存系统调用时的上下文。

同样,中断处理的第一步应该也要保存中断程序现场。

目的:在中断处理完之后,可以返回到原来被中断的地方,在原有的运行环境下继续正确的执行下去。

2. 确定中断信息

在系统调用时,我们需要将系统调用号通过eax传入,通过sys_call_table查询到调用的系统调

同样,中断处理时系统也需要有一个中断号,通过检索中断向量表,了解中断的类型和设备。

3. 处理中断

跳转到相应的中断处理程序后,对中断进行处理。

4. 返回

系统调用时最后要restore_all恢复系统调用时的现场,并用iret返回用户态。

同样,执行完中断处理程序,内核也要执行特定指令序列,恢复中断时现场,并使得进程回到用户态。

Linux内核分析实验五的更多相关文章

  1. 【MOOC EXP】Linux内核分析实验五报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 分析system_call中断处理过程 ...

  2. LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)

    LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...

  3. 20135327郭皓--Linux内核分析第五周 扒开系统调用的三层皮(下)

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

  4. Linux内核分析第五周——扒开系统调用的“三层皮”(下)

    Linux内核分析第五周--扒开系统调用的"三层皮"(下) 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.1 ...

  5. Linux内核分析(五)----字符设备驱动实现

    原文:Linux内核分析(五)----字符设备驱动实现 Linux内核分析(五) 昨天我们对linux内核的子系统进行简单的认识,今天我们正式进入驱动的开发,我们今后的学习为了避免大家没有硬件的缺陷, ...

  6. LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)

    LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...

  7. linux内核分析第五周学习笔记

    linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  8. Linux内核分析实验六

    Linux内核分析实验六 进程控制块PCB——task_struct(进程描述符) 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_s ...

  9. Linux内核分析第五周学习总结——分析system_call中断处理过程

    Linux内核分析第五周学习总结--分析system_call中断处理过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

随机推荐

  1. 4.three.js中的坐标系

    Three.js中的坐标系 three.js中坐标系使用的是左手坐标系 左手坐标系和右手坐标系的对比: 当然three.js中使用的是右手坐标系 three.js中的旋转的定义 但是three.js中 ...

  2. MPVUE多环境定义后台URL

    小程序选定了mpvue作为开发框架,搭建开发环境和构建环境.自从用了Travis和Jenkins之后,再也回不到手工构建的时代了. 目的-自动构建 web项目中,自从前后台分离的结构形成,就形成了一个 ...

  3. Paxos共识算法

    Paxos共识算法 paxos是一族用来解决分布式系统共识的基础算法,共识过程就是在一组节点上达成一个一致的结果.由于节点可能会错误,通讯消息也可能会丢失,所以建立共识是一个比较复杂的过程. paxo ...

  4. html , body , margin , overflow 之大乱战

    <!DOCTYPE html> <html> <head> <style> html,body{ margin:0 ;padding:0 } div{m ...

  5. 基础业务:滚动到指定位置导航固定(CSS实现)

    最近公司做的业务都是使用Vue.Element写的,涉及到的相应的基础业务像轮播.预加载.懒加载,都是使用 NPM上的工具来实现,原理和基础还是要有的,就来实现几个项目中常用到的业务. 经常见到这样的 ...

  6. PSP总结报告1

    回答作业问题 1.回想一下你曾经对计算机专业的畅想 我高考后报考的是计算机科学与技术,当时对计算机技术基本了解为零,当时以为什么东西都会用到计算机,学计算机以后不会找不到工作,刚开学的时候对计算机一窍 ...

  7. pairwork(黄敬博12061156和黄伟龙12061172)

    结对编程: 结对编程的优缺点: 优点: 1.相互督促,共同为了完成目标而努力: 2.节省时间,通过将疑难问题分开解决,共同讨论,实现了更高效的时间利用率: 3.能力互补,提高代码的质量,同时也提高了测 ...

  8. 45度炸队Alpha冲刺博客集

    博客集如下: Alpha冲刺Day1:第一天冲刺记录 Alpha冲刺Day2:第二天冲刺记录 Alpha冲刺Day3:第三天冲刺记录 Alpha冲刺Day4:第四天冲刺记录 Alpha冲刺Day5:第 ...

  9. hihocoder #1388 : Periodic Signal fft

    题目链接: https://hihocoder.com/problemset/problem/1388 Periodic Signal 时间限制:5000ms内存限制:256MB 问题描述 Profe ...

  10. java中方法传入参数时:值传递还是址传递?

    JAVA中的数据类型有两大类型: ① 基本数据类型:逻辑型(boolean).文本型(char).整数型(byte.short.int.long).浮点型(float.double) ② 引用数据类型 ...