预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共127页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Linux操作系统内核分析讲课内容中断的概念中断向量中断保护模式下中断处理Head中对中断描述符表的处理gcc嵌入汇编常用寄存器加载代码嵌入汇编示例嵌入汇编示例_set_gate宏_set_gate宏_set_gate宏设置中断描述符异常初始化中断初始化系统调用初始化中断处理中断处理中断处理中断处理中断发生时的堆栈中断处理异常处理不带出错码的异常处理不带出错码的异常处理异常处理流程带出错码的异常处理中断处理使用系统调用使用系统调用使用系统调用数据结构及算法系统调用的处理系统调用的处理讲课内容进程的概念进程描述符进程描述符——状态进程描述符——线性地址分布进程描述符——任务状态段进程描述符——任务状态段进程描述符——任务状态段进程描述符——局部描述符表进程描述符——局部描述符表进程描述符——局部描述符表Linux内核堆栈task_union任务数组求进程n的TSS段的段选择子进程管理进程0进程0申请进程描述符与内核堆栈的公用体加载进程0的tss和ldt的段选择子把进程0移到用户态Iret指令move_to_user_mode进程管理fork系统调用在task数组中寻找空位find_empty_process拷贝当前进程调用copy_process的堆栈Fork系统调用copy_mem线性地址的分布task[n2]子进程copy_process进程管理任务切换的形式任务切换的步骤schedule选择task数组中第一个 所剩时间片最长的且状 态为可运行的任务switch_to宏调用schedule时钟中断timer_interrupt: push%ds push%es push%fs pushl%edx pushl%ecx pushl%ebx pushl%eax movl$0x10,%eax mov%ax,%ds mov%ax,%es movl$0x17,%eax mov%ax,%fs incljiffies movb$0x20,%al outb%al,$0x20 movlCS(%esp),%eax andl$3,%eax pushl%eax calldo_timer addl$4,%esp jmpret_from_sys_calldo_timer系统调用返回时进程管理进程睡眠进程睡眠sleep_on*p*psleep_oninterruptible_sleep_on*p*pinterruptible_sleep_on进程管理进程资源进程终止的问题进程终止的问题sys_exit释放代码和数据占用 的物理内存、页表sys_waitpidsys_waitpidsys_waitpid所有进程都搜索完毕讲课内容信号信号处理数据结构信号处理数据结构信号处理数据结构信号处理数据结构使用信号注册信号处理函数注册信号处理函数信号注册系统调用注册信号处理函数信号注册系统调用发送信号信号处理信号处理信号处理CS.globle __sig_restore .globle __masksig_restore #若没有SA_NOMASK则使用这个restorer函数 #改函数仅仅恢复寄存器值,并且弹出堆栈 __sig_restore: addl $4,%esp popl %eax popl %ecx popl %edx popfl ret #若有SA_NOMASK则使用这个restorer函数 #该函数中又会产生系统调用 __masksig_restore: addl $4,%esp#退掉栈顶的signr,这时栈顶为屏蔽码blocked, #它是系统调用ssetmask()的参数 call __ssetmask#ssetmask()系统调用 addl $4,%esp#退掉blocked popl %eax #恢复寄存器 popl %ecx popl %edx popfl retint0x80 下一个语句信号处理流程屏蔽信号