Linux内核分析课程--分析system_call中断处理过程

来源:互联网 发布:linux内核移植 编辑:程序博客网 时间:2024/06/05 10:02

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

本次实验是将上周的实验和自己的menuOS相结合,来进一步的观察system_call系统中断处理的具体过程。

首先将上次的c代码和汇编代码载入menu中,重载menu:

执行make rootfs,打开menu,并设置断点观察中断处理的过程:




如果继续进行单步调试的话,可能会进入汇编语言部分,此时就无法看到代码执行的细节了。所以说,用常规的gdb方法是不能对具体的内核代码进行调试的。

system_call的代码还是比较复杂的,幸运的是老师在课上为我们对它的代码进行了简化。代码如下:

.macro INTERRUPT_RETURN    iret.endm.macro SAVE_ALL    ....endm.macro RESTORE_INT_REGS    ....endmENTRY(system_call)    SAVE_ALLsyscall_call:    call *sys_call_table(,%eax,4)    movl %eax,PT_EAX(%esp)syscall_exit:    testl $TIF_ALLOWORK_MASK,%ecx    jne syscall_exit_workrestore_all:    RESTORE_INT_REGSirq_return:    INTERRUPT_RETURNENDPROC(system_call)syscall_exit_work:    testl $_TIF_WORK_SYSCALL_EXIT,%ecx    jz work_pendingEND(syscall_exit_work)work_pending:    testb $_TIF_NEED_RESCHED,%cl    jz work_notifysigwork_resched:    call schedule    jz restore_allwork_notifysig:    ...END(work_pending)

代码从ENTRY(system_call)处正式进入程序。此时实际上已经触发了中断,首先通过SAVE_ALL将进程和中断上下文存储起来;之后,通过调用sys_call_table(,%eax,4)执行具体的系统调用(在这里是sys_mkdir),并在系统调用执行结束后将返回值存储到esp中。

system_call流程图:

总结:在进入中断处理之前要保存程序的上下文,这是非常重要的,通过代码了解了中断处理先要在内存中找到已经在内核里的系统调用表,根据系统调用表查到要执行的中断处理的具体代码位置这才真正意义上的开始了内核对系统调用的处理,最后进行恢复现场。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小儿3岁说话晚怎么办 1岁半了不会说话怎么办 宝宝2岁还说话晚怎么办 一岁宝宝不愿意学说话怎么办 2周岁宝宝不愿意学说话怎么办 三岁宝宝不爱说话应该怎么办 三岁宝宝不理人怎么办 两岁半宝宝不说话不连贯怎么办 宝宝三岁说话口齿不清怎么办 b超宝宝腿短怎么办 两岁宝宝学说话口吃怎么办 两岁宝宝说话少怎么办 三岁宝宝说话少怎么办 快4岁不会说话怎么办 宝宝2岁半不爱说话怎么办 两岁半宝宝注意力不集中怎么办 中国出生的外籍小孩怎么办签证 中国人入外籍后国内财产怎么办 中国人入外籍后国内资产怎么办 小孩去美国上小学怎么办 咳嗽震的胸口疼怎么办 高中孩子对手机着迷怎么办 小孩不肯读书沉迷游戏怎么办 小孩沉迷吃鸡游戏怎么办 高一数学成绩差怎么办 小孩子学数学用手指算怎么办 孩子d和b分不清怎么办 和家人走散后怎么办幼儿教案 小孩胃口不好不爱吃饭怎么办 幼儿园孩子学习记不住怎么办 幼儿园小孩数字记不住怎么办 大班教案走丢了怎么办 ppt加视频反了怎么办 拔罐之后背疼怎么办 拔完火罐后背疼怎么办 打印机红色的口堵了怎么办 打印机红色复印不出来怎么办 打印机加错颜色墨水怎么办 中班安全教案脚扭伤了怎么办 中班脚扭伤了怎么办教案 中班安全脚扭伤了怎么办