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

程涵 

原创博客

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

 


 

分析system_call中断处理过程

 

实验过程及截图

一、使用gdb跟踪分析一个系统调用内核函数

  • 更新menu代码到最新版
  • test.c中main函数里,增加MenuConfig()
  • 增加对应的两个函数,Time和TimeAsm
  • make rootfs 自动编译脚本

 

更新menu代码到最新版

 

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

 

增加对应的两个函数,make rootfs 自动编译脚本

 

使用gdb调试

 

 

 

知识点整理

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

  • int 0x80触发一个系统调用
  • 执行系统调用处理函数system_call
  • 返回到用户态

返回到用户态之前有一个进程调度的时机,会跟踪到schedule

 

系统调用机制的初始化

  • main.c中start_kernel函数:trap_init()
  • set_system_trap_gate(SYSCALL_VECTOR,&system_call)      SYSCALL_VECTOR:系统调用的中断向量        &system_call:汇编代码入口
#ifdef CONFIG_X86_32
set_system_trap_gate(SYSCALL_VECTOR, &system_call);
//系统调用的中断向量和system_call的入口。一旦执行0x80,系统就自动跳转到system _call执行
set_bit(SYSCALL_VECTOR, used_vectors);
#endif

 

分析从system_call开始到iret结束之间的整个过程

 


 

posted @ 2016-03-25 21:16  ClareOhno  阅读(251)  评论(0编辑  收藏  举报