欢迎来到天天文库
浏览记录
ID:37505491
大小:957.98 KB
页数:46页
时间:2019-05-24
《第2章 进程和进程调度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第二章进程和进程调度本章知识要点了解Linux进程的组成、状态、运行级别、空间及上下文了解Linux进程控制块(PCB)task_struct的主要成员变量的作用掌握Linux的进程调度方式、调度策略和调度依据掌握Linux进程的创建过程2011/5/23Linux操作系统分析1§2.1Linux进程概述Linux是一个多任务多用户操作系统,一个任务(task)就是一个进程(process)。每一个进程都具有一定的功能和权限,它们都运行在各自独立的虚拟地址空间。在Linux中,进程是系统资源分配的基本单位,也是使用CPU运行的基本调度单位。2011/5/23Linux操作系统
2、分析2Linux进程的组成存放在磁盘上的可执行文件的代码和数据的集合称为可执行映象(ExecutableImage)。当一个程序装入系统中运行时,它就形成了一个进程。进程是由正文段(text)、用户数据段(usersegment)和系统数据段(systemsegment)组成的一个动态实体。正文段中存放着进程要执行的指令代码,具有只读的属性用户数据段是进程在运行过程中处理数据的集合,它们是进程直接进行操作的所有数据,以及进程使用的进程堆栈系统数据段存放着进程的控制信息,其中包括进程控制块PCB。进程拥有自己独立的虚拟空间2011/5/23Linux操作系统分析3§2.2进程的任务
3、结构体(PCB)Linux的进程控制块(PCB)是task_struct结构体其中包含了一个进程的所有信息,是系统对进程进行管理和控制的有效手段,是系统实现进程调度的主要依据进程的task_struct是进程存在的惟一标志。当一个进程被创建时,系统就为该进程建立一个task_struct任务结构体。当进程运行结束时,系统撤消该进程的任务结构体。2011/5/23Linux操作系统分析4task_struct结构2011/5/23Linux操作系统分析5进程的运行状态定义#defineTASK_RUNNING0#defineTASK_INTERRUPTIBLE1#defineTASK
4、_UNINTERRUPTIBLE2#defineTASK_STOPPED4#defineTASK_TRACED8#defineEXIT_ZOMBIE16#defineEXIT_DEAD322011/5/23Linux操作系统分析6进程状态间的转换2011/5/23Linux操作系统分析7PCB与内核堆栈2011/5/23Linux操作系统分析8进程PCB的组织形式进程队列Linkstogetherallexistingprocessdescriptors2011/5/23Linux操作系统分析9可运行队列2011/5/23Linux操作系统分析10prio_array_t2011/5/2
5、3Linux操作系统分析11进程的族亲关系Task_struct设置的成员*p_opptr,*p_pptr,*p_cptr,*p_ysptr,*p_osptrreal_parent、parent2011/5/23Linux操作系统分析12父子关系链父亲通过小儿子找到其它儿子2011/5/23Linux操作系统分析13PIDhashtableandchainedlists2011/5/23Linux操作系统分析14等待队列struct__wait_queue{unsignedintflags;structtask_struct*task;wait_queue_func_tfunc;//
6、指向唤醒等函数structlist_headtask_list;};2011/5/23Linux操作系统分析15§2.3进程的创建、执行与消亡系统创建的第一个进程是init进程。系统中所有的进程都是由当前进程使用do_fork()函数创建的。子进程有自己独立的PCB和内核堆栈,其他资源可与父进程全部共享子进程创建后如运行其他程序需要execve()调入两步走的好处client/serverpipe2011/5/23Linux操作系统分析16系统调用fork()的特点子进程继承父进程的所有资源(PCB和内核堆栈除外),并共享父进程的虚存空间写时拷贝(copyonwrite):
7、子进程在创建后共享父进程的虚存内存空间,只是在两个进程中某一个进程需要向虚拟内存写入数据时才拷贝相应部分的虚拟内存。子进程在创建后执行的是父进程的程序代码。父进程执行fork()返值是子进程的PID值,子进程执行fork()的返值是0。2011/5/23Linux操作系统分析17父进程的去向与子进程独立,继续运行先于子进程结束,exit()后于子进程结束,收到子进程结束的信号进入睡眠wait4(
此文档下载收益归作者所有