linux操作系统分析与实践第三讲:进程管理

linux操作系统分析与实践第三讲:进程管理

ID:39970388

大小:825.51 KB

页数:92页

时间:2019-07-16

linux操作系统分析与实践第三讲:进程管理_第1页
linux操作系统分析与实践第三讲:进程管理_第2页
linux操作系统分析与实践第三讲:进程管理_第3页
linux操作系统分析与实践第三讲:进程管理_第4页
linux操作系统分析与实践第三讲:进程管理_第5页
资源描述:

《linux操作系统分析与实践第三讲:进程管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux操作系统分析与实践第三讲:进程管理《Linux操作系统分析与实践》课程建设小组北京大学二零零八年春季*致谢:感谢Intel对本课程项目的资助本讲主要内容Linux中的进程Linux进程控制Linux的进程调度Linux源代码阅读示例:进程调度schedule部分的阅读一、Linux中的进程进程是程序执行时的一个实例从内核的观点来看,进程的目的是担当分配系统资源(CPU时间,存储器等)的实体Linux中的关于进程的代码大部分是如何管理进程的代码每个进程运行的是程序的代码轻量级进程线程代表进程的一个执行流,内核无法感知Linux使用轻量级进程对

2、多线程应用程序提供更好的支持轻量级进程可以共享资源通过将轻量级进程与线程相关联,内核可以独立调度线程进程描述符task_struct(include/linux/sched.h)进程描述符(续)Task_struct结构的描述:进程标识进程状态(State)进程调度信息和策略标识号(Identifiers)进程通信有关的信息(IPC)进程链接信息(Links)时间和定时器信息(TimesandTimers)文件系统信息(FilesSystem)处理器相关的上下文信息进程描述符(续)Linux中每一个进程由一个task_struct数据结构来描述(进程

3、控制块PCB)进程描述符放在动态内存中而且和内核态的进程栈放在一个独立的8KB的内存区中好处:通过esp就能引用进程描述符current宏current宏current宏获取当前正在运行的进程描述符的指针,current宏经常作为进程描述符出现在内核代码里,例如current->pid返回当前正在运行的进程的PID值进程的状态task_struct中的state表示进程当前的状态Linux中的进程有5个状态:(include/linux/sched.h)#defineTASK_RUNNING0#defineTASK_INTERRUPTIBLE1#de

4、fineTASK_UNINTERRUPTIBLE2#defineTASK_ZOMBIE4#defineTASK_STOPPED8状态之间的转换进程链表task_struct中的structtask_struct*next_task,*prev_task;TASK_RUNNING状态的进程链表task_struct中的structlist_headrun_list;list_head是Linux内核当中定义的一个数据结构用来实现双向链表,Linux内核中使用上百个向链表来存放各种数据结(includelist.h)structlist_head{st

5、ructlist_head*next,*prev;};进程PIDhashtask_struct中的pid为了快速的从pid值获得进程描述符。需要有hash表hash_pid(),unhashpid()在pidhash表中分别插入和删除一个进程find_task_by_pid()查找散列表并返回给定PID的进程描述符指针进程之间的父子关系task_struct中的structtask_struct*p_opptr,*p_pptr,*p_cptr,*p_ysptr,*p_osptr;p_opptr:originalparent(process1或者创建它

6、的父进程)p_pptr:parent(父进程,有时候是调试时的调试监管进程)p_cptr:child(指向自己最年轻的子进程)p_ysptr:指向比自己年轻的兄弟进程p_osptr:指向比自己老的兄弟进程进程之间的父子关系(续)进程之间的父子关系(续)Linux中的0号进程,通常称为swapper进程,是所有进程的祖先。由它执行cpu_idle()函数,当没有其他进程处于TASK_RUNNING的时候,调度程序会选择0号进程运行0号进程创建1号进程,通常称为init进程。它创建和监控其他进程的活动进程的地址空间Linux把进程的线性地址空间组织为一个

7、个线性区每一个线性区对应一组连续的页线性区之间不重叠进程的地址空间(续)task_structstructmm_struct*mm;内存描述符mm_struct里面有一个字段mmp指向内存线性区链表的首部。进程的地址空间(续)每个线性区有一定的访问权限在增加或删除线性区时,Linux尽量合并访问权限相同且相邻的线性区进程的地址空间(续)进程堆的管理每个进程都拥有一个特殊的线形区:堆内存描述符里面的start_brk和brk字段限定了这个区的开始地址和结束地址常用的C库函数:malloc(),free()系统调用brk()用于直接修改堆大小二、LINU

8、X进程控制Linux进程的创建和执行相关的数据结构和系统调用进程的创建程序的执行Linux进程的撤消相关的数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。