【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结束之间的整个过程