linux5 syscall 流程_Linux内核分析(实验五)分析system_call中断处理过程

实验报告:

本实现希望通过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.此过程充分体现了进程间切换的思路,保存现场,切换到其他进程,再切换回来,恢复现场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值