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

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

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

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

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

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

第3章Linux进程管理3.0Linux进程概述34563.1Linux进程描述符3.1Linux进程描述符Linux进程描述符的信息组成113.2Linux进程的状态2.4的进程状态转换图1415161718通过ps命令获取进程信息/proc目录下的进程信息212223Linux进程控制块的存放为什么这样存放?2.4中内核堆栈的定义current宏current宏current宏Linux系统进程系统堆栈结构313233Linux2.6进程系统堆栈结构353839402.6内核堆栈的小结进程描述符的分配/回收/访问进程链表 运行队列链表 等待队列链表 哈希链表 指向当前进程的Current指针44进程链表所有进程链表SET_LINKS和REMOVE_LINKS宏用来分别在进程链表中插入和删除一个进程描述符。 for_each_task宏扫描整个进程链表 TASK_RUNNING状态的进程链表对可运行队列的一些操作函数pidhash表pidhash表535455进程之间的亲属关系 p_opptr:originalparent(1号进程或者创建它的父进程) p_pptr:父进程,有时候是调试时的调试监管进程 p_cptr:child(指向自己最年轻的子进程) p_ysptr:指向比自己年轻的兄弟进程 p_osptr:指向比自己老的兄弟进程58606162等待队列等待队列等待队列的链表等待队列进程等待sleep_on()进程的唤醒3.4、Linux中的进程控制73747576写时复制技术写时复制技术Linux的进程创建80818283CLONE参数对do_fork()影响的代码说明8586878889909192clone()函数对应的系统调用clone()函数的常用CLONE标志95fork()返回值不同sys_fork()/sys_clone()/sys_vfork()sys_fork()/sys_clone()/sys_vfork()Linux进程创建-函数关系102103进程等待wait()系统调用wait()系统调用107108109110进程终止exit()进程终止exit()do_exit()do_exit()exec()函数家族exec()函数家族exec()函数家族例:fork()与exec()一起使用fork()与exec()121122Linux的线程描述机制Linux的线程分类125126127Linux内核线程的创建过程线程和进程的比较内核线程进程切换(processswitching)硬件上下文硬件上下文上下文切换当前进程仍然是prev 这个push操作针对的是 当前进程的堆栈switch_to分析进程切换的关键语句标号为1的执行代码处本章知识点小结作业作业结构分析switch_to分析"movl$1f,%1\n\t" //保存EIP,即保存返 回地址,就是下面标号1 "pushl%4\n\t" //恢复EIP, 保存next->thread.eip到新栈,这刚好 对应了__switch_to函数调用的ret指令需 要的堆栈状况,它就是函数的返回地址, 也就是标号1的位置。 "jmp__switch_to\n" 调用函数__switch_to"1:\t" 返回地址 "popl%%ebp\n\t” 弹出保存在栈里的寄存器值"popl%%edi\n\t" "popl%%esi\n\t" :"=m"(prev->thread.esp),"=m"(prev->thread.eip), "=b"(last) :"m"(next->thread.esp),"m"(next->thread.eip), "a"(prev),"d"(next), "b"(prev)); }while(0)