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

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

2016-03-27 15:45 393 查看
姓名:江军

ID:fuchen1994

分析system_call中断处理过程

使用gdb跟踪分析一个系统调用内核函数(您上周选择那一个系统调用),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl ,推荐在实验楼Linux虚拟机环境下完成实验。

根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图,撰写一篇署名博客,并在博客文章中注明“真实姓名(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”,博客内容的具体要求如下:

题目自拟,内容围绕系统调用system_call的处理过程进行;

博客内容中需要仔细分析system_call对应的汇编代码的工作过程,特别注意系统调用返回iret之前的进程调度时机等。

总结部分需要阐明自己对“系统调用处理过程”的理解,进一步推广到一般的中断处理过程。

实验过程:

第一步:重新编译MENU OS





打开test.c



把我上周写的getpid的系统调用代码写入

int Getpid(int argc , char * argv[])
{
int pid;
pid=getpid();
printf("pid=%d\n",pid);
return 0;
}

int Getpidasm(int argc , char *argv[])
{
int pid;
asm volatile(
"mov $0,%%ebx\n\t"
"mov $0x14,%%eax\n\t"
"int $0x80\n\t"
"mov %%eax, %0\n\t"
:"=m"(pid)
);
printf("pid = %d\n",pid);
return 0;
}




修改main函数



重新编译一下



添加进去了,我们来测试一下功能



下面我们来使用gdb进行调试getpid

20	i386	getpid			sys_getpid

b sys_getpid




分析system_call 到iret

.macro INTERRUPT_RETURN  ; 中断返回
iret
.endm
.macro SAVE_ALL          ; 保护现场
...
.macro RESTORE_INT_REGS
...
.endm

ENTRY(system_call)
SAVE_ALL
syscall_call:
call *sys_call_table(,%eax,4)
movl %eax, PT_EAX(%esp)  ; store the return value
syscall exit:
testl $_TIF_ALLWORK_MASK, %ecx # current->work
jne syscall_exit_work
restore_all:
RESTORE_INT_REGS
irq_return:
INTERRUPT_RETURN      ; 到这里就算执行完了
ENDPROC(system_call)

syscall_exit_work:
testl  $_TIF_WORK_SYSCALL_EXIT, %ecx
jz work_pending
END(syscall_exit_work)

work_pending:
testb $_TIF_NEED_RESCHED, %cl
jz work_notifysig
work_resched:
call schedule
jz restore_all
work_notifysig:
...                  ; deal with pending signals
END(work_pending)


根据上面代码可以画图说明如下



总结:

1、用户态到内核态需要int 0x80进行中断,只有生成了中断向量后才可以切换状态;

2、中断处理让CPU停止当前工作转为执行系统内核中预设的一些任务,因此必须要对当前CPU执行的任务进行执行现场的保护工作,并对一些其他杂七杂八的工作进行检查,完成调用后,再进行检查,才能执行iret返回。

3、系统内部调用涉及CPU架构等内容,不同的CPU对于系统调用的汇编具体代码是不一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: