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中

《Linux内核与分析》第五周

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

SAVE_ALL保存现场

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

更新 menu 代码到最新版:

《Linux内核与分析》第五周

 在main 函数中增加 MenuConfig:

《Linux内核与分析》第五周

《Linux内核与分析》第五周

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

《Linux内核与分析》第五周

流程图:

《Linux内核与分析》第五周

总结:

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

相关文章:

  • 2021-06-12
  • 2021-11-14
  • 2022-03-15
  • 2021-12-17
  • 2021-09-17
  • 2021-08-06
  • 2021-06-06
猜你喜欢
  • 2021-10-28
  • 2021-12-23
  • 2021-06-19
  • 2022-01-10
  • 2021-05-29
  • 2022-02-24
  • 2021-11-08
相关资源
相似解决方案