您的位置:首页 > 运维架构 > Linux

Linux内核分析(实验五)分析system_call中断处理过程

2016-03-25 00:00 645 查看
摘要: 分析system_call中断处理过程

原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

Linux内核源码地址

实验报告:

本实现希望通过gdb调试进入linux 内核中 查看getpid这个系统调用是如何执行的

1:把Getpid 与Getpid_asm 放到menu/test.c 中



2: make rootfs

3 开始gdb 调试 ,因为调用getpid执行的是sys_getpid,我打了一个断点 系统运行后在此处中断



4 最后finish得到的结果



5.通过单步调试

主要经历了以下函数

task_tgid_vnr
pid_vnr
pid_nr_ns
this_cpu_read_stable
task_pid
task_active_pid_ns
ns_of_pid
6.分析system_call



上面的图片大体上描述了system_call到irq_return的过程,在系统调用system_call 后 ,需要先保存现场SAVE_ALL 然后调用 system_call_table 和eax用以确定调用的系统函数,陷入系统内核。在内核处理完后需要判断要不要调用syscall_exit_work然后调用work_pending,然后判断是否有消息需要处理,如果需要就调用work_notifysig,如果不需要就调用work_resched ,在此函数会调用call schedule 进行进程调度(此处为关键步骤),然后会判断是否还需要调度,如果需要进行自循环,如果不需要这执行retore_all,最后执行irq_return.此过程充分体现了进程间切换的思路,保存现场,切换到其他进程,再切换回来,恢复现场。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux内核 C