《Linux内核与分析》第五周

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Linux内核与分析》第五周相关的知识,希望对你有一定的参考价值。

20135130王川东

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

命令:1、强制删除:rm menu -rf

   2、克隆:git clone (后跟需要克隆数据所在的位置)

   3、自动编译,自动生成根文件系统,并自动启动:make rootfs 

给MenuOS增加time和time-asm命令步骤:

1、更新menu代码到最新版

2、在main函数中增加MenuCongfig

3、增加对应的time和time-asm函数

4、make  rootfs

二、使用gdb跟踪调用内核函数sys-time

跟踪方法和上次所学内容一样:

注:sys_time返回后进入汇编代码处理,gdb无法继续进行追踪

      执行int 0x80之后执行system_call对应的代码

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

1、系统调用机制的初始化

\init\main.c start_kernel

      trap_init()

\arch\x86\kernel\traps.c

      #fdef CONFIG_x86_32

      set_system_trap_gate(SYSTALL_VECTOR,&system_call)(SYSTALL_VECTOR:系统调用的工作向量,&system_call:汇编代码的入口,系统执行int 0x80就跳转到该处执行)

      set_bit(SYSCALL_VECTOR,used_vectors)

      #endif

2、system_call伪代码:

system_call位置:/ arch/x86/kernel/entry_32.S中

技术分享

 系统调用是特殊的中断:存在保存现场和恢复现场

SAVE_ALL保存现场

restore_all恢复现场
call *sys_call_table(,%eax,4)调用系统调用函数:eax存的是系统调用号,根据系统调用号去找sys_call_table中的中断处理。
INTERRUPT_RETURN,就是iret。

更新 menu 代码到最新版:

技术分享

 在main 函数中增加 MenuConfig:

技术分享

技术分享

增加对应的Getuid函数和Getuidasm函数

技术分享

流程图:

技术分享

总结:

发生中断时,CPU暂停执行当前程序,产生中断响应。中断响应主要工作是:
(1)中止当前程序的执行;
(2)保存原程断点现场  
(3)转到相应的处理程序。
接着中断处理程序进行相应处理:
(1)保存中断程序现场
(2)分析中断原因,转入相应处理程序
(3)调用中断处理程序
(4)中断返回。

以上是关于《Linux内核与分析》第五周的主要内容,如果未能解决你的问题,请参考以下文章

linux内核分析第五周-分析system_call中断处理过程

2017-2018-1 20179219《Linux内核原理与分析》第五周作业

Linux内核分析——第五周学习笔记

20135201李辰希 《Linux内核分析》第五周 扒开系统调用的“三层皮”(下)

linux内核分析 第五周 扒开系统调用的三层皮(下)

Linux内核分析第五周作业