5进程管理.ppt
- 文档编号:1381802
- 上传时间:2022-10-21
- 格式:PPT
- 页数:72
- 大小:1.18MB
5进程管理.ppt
《5进程管理.ppt》由会员分享,可在线阅读,更多相关《5进程管理.ppt(72页珍藏版)》请在冰豆网上搜索。
进程管理,第5章,进程的概念进程的运行进程的组织进程控制,进程调度进程同步进程通信线程,5.1进程,程序以进程的形式占用CPU运行,因此处理机管理就是进程管理。
进程管理的功能是跟踪和控制所有进程的活动,为它们分配和调度CPU,协调进程的运行步调。
进程管理的目标是有效地调度CPU,最大限度地发挥CPU的处理能力,提高进程的运行效率。
程序的顺序执行,程序的各操作间是依序执行的,程序与程序之间是串行执行的,这种执行程序的方式称为程序的顺序执行。
顺序执行程序的特点:
顺序性:
程序在CPU上是顺序执行的。
封闭性:
只有程序本身才能改变程序的运行环境。
可再现性:
程序执行的速度与最后的结果无关。
程序的顺序执行过程,设有n个程序,每个程序由I(输入),C(计算),P(输出)三个程序段组成。
仅当一个程序全部执行完后,另一个程序才可以开始执行,执行顺序如下:
顺序执行程序时,系统资源利用率低。
I1C1P1I2C2P2I3C3P3.,程序2,程序3,程序的并发执行,若干个程序或程序段同时在系统中运行,它们的执行在时间上是重迭的,这种执行程序的方式称为并发执行。
程序并发执行的特点:
程序运行受外界的影响,没有封闭性。
程序运行的结果往往不可再现。
并发程序之间相互制约,导致程序运行过程的间断性。
程序的并发执行过程,当一个程序未完成时,另一个程序可以开始运行。
不同程序的多个程序段可以同时或交叉执行。
并发执行可以充分地利用系统资源。
进程的概念,在多道程序环境下,并发程序的执行过程与程序文本不是一一对应的,因而引入进程概念。
进程(process)是一个可并发执行的程序在某数据集上的一次运行。
进程是操作系统进行资源分配的单位。
进程与程序,程序是进程的一个组成部分,是进程的执行文本;程序是静态的指令集合,进程是动态的,动态地产生和消亡;一个程序可以对应多个进程;一个进程可以顺序执行多个程序。
进程的特性,动态性:
进程由“创建”而产生,由“撤消”而消亡,因“调度”而运行,因“等待”而停顿。
并发性:
同一时间段内有多个进程在系统中活动。
它们宏观上是在并发运行。
独立性:
进程是可以独立运行的基本单位;是资源分配调度的基本单位。
异步性:
每个进程按照各自独立的、不可预知的速度向前推进。
进程的基本状态,运行状态进程正占用CPU。
就绪状态除CPU外,其它资源都已满足。
等待状态进程因某种资源不能满足,或希望的某事件尚未发生而暂停运行。
进程的组成,进程由程序、数据、进程控制块(PCB)三部分组成。
进程控制块(PCB)是系统为管理进程设置的一个数据结构,用于记录进程的特征和变化过程。
PCB是系统进程调度和进程控制的依据。
当系统创建进程时,为它生成PCB;进程完成后,撤消它的PCB。
进程控制块,系统使用PCB记录进程的相关信息。
系统创建进程时,为它生成PCB;进程完成后,撤消它的PCB。
进程描述信息:
进程标识号PID、家族关系等;进程控制和调度信息:
进程状态、优先级、记时信息等;资源信息:
使用的存储器空间、打开的文件以及设备等;现场信息:
CPU寄存器和系统堆栈等的内容。
Linux进程的状态,Linux进程状态的划分,运行态(running):
运行态实际包含了上述基本状态中的执行和就绪两种状态,处于运行态的进程或正在运行或准备运行。
睡眠态(sleeping):
也称等待态。
进程在等待某个事件或某个资源。
睡眠态又分为可中断的和不可中断的两种。
可中断睡眠态的进程可以被信号唤醒而进入就绪状态,不可中断睡眠态的进程不能被信号唤醒,必须等到所等待的硬件资源可用后被唤醒。
僵死态(zombie):
由于某些原因(如执行了exit)进程被终止,这时进程已释放了除PCB外的所有资源。
这种占有PCB但已经无法运行的进程就处于僵死状态。
暂停态(stopped):
处于暂停状态的进程一般都是由运行状态转换而来,等待某种特殊处理。
比如处于调试跟踪的程序,每执行到一个断点,就转入暂停状态,等待新的输入信号。
Linux进程的PCB,Linux系统的PCB用一个称为task-struct的结构体来描述。
内容主要包括:
描述信息:
进程号PID、用户标识UID和组标识GID,以及描述家族关系的链接信息。
调度信息:
进程的当前状态、优先级、时间片、调度策略,以及记时信息。
通信信息:
进程间的通信信息。
资源信息:
该进程使用的存储器、文件系统以及打开的文件等信息。
现场信息:
包括CPU的内部寄存器和系统堆栈等。
ps命令,功能:
查看正在运行的进程的信息。
格式:
ps选项用法:
-e显示所有进程。
-f以全格式显示。
-r只显示正在运行的进程。
a显示终端上的所有进程。
u以面向用户的格式显示。
x显示所有不控制终端的进程。
例1:
ps显示当前shell会话的相关进程。
格式:
PIDTTYTIMECMD含义:
PID进程标识号TTY进程对应的终端,出现“?
”表示该进程不占用终端TIME进程累计使用的CPU时间CMD进程执行的命令名,例2:
ps-ef以全格式显示当前系统中所有进程的信息。
格式:
UIDPIDPPIDCSTIMETTYTIMECMD含义:
UID进程属主的用户标识号PPID进程标识号C进程最近使用的CPU时间STIME进程开始时间,例3:
psaux以用户格式显示当前系统中所有进程的信息。
格式:
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND含义:
%CPU进程占用CPU时间与进程总运行时间之间%MEM进程占用的内存与总内存之比VSZ进程虚拟内存的大小,以KB为单位RSS占用实际内存大小,以KB为单位STAT:
进程状态(RSDTZ)START:
进程开始时间COMMAND:
命令名,CPU指令集:
特权指令和非特权指令。
特权指令可访问所有寄存器和内存单元,修改系统关键设置非特权指令指一般性运算和处理的指令,只访问用户程序自己的内存地址空间。
5.2进程的运行模式,CPU的执行模式具有不同的特权级别,各个级别可执行的指令集不同。
x86CPU有4种执行级别,Linux用到两个:
核心态:
最高特权级模式。
CPU能执行所有指令,访问全部的内存地址。
内核代码运行在核心态。
用户态:
最低特权级模式。
CPU只能执行一般的非特权指令,访问受限的地址空间。
用户进程代码运行在用户态。
Linux系统的内核,Linux系统可大致分为3个层次:
用户层:
分为系统程序和用户程序两类,运行在核心层之上,通过系统调用使用内核的功能。
核心层:
运行程序和管理基本硬件设备的核心程序。
通过系统调用界面为用户层程序提供运行和使用系统资源的环境。
硬件层:
系统硬件。
内核结构示意图,内核的组成,内核是运行程序和管理基本硬件设备的核心程序,常驻内存。
Linux内核的主要组成:
系统调用:
提供进程与内核的接口。
进程控制子系统:
负责控制进程的运行,包括进程调度、进程间通信、内存管理。
文件子系统:
为进程提供I/O环境,控制对文件和设备的访问。
包括文件系统、网络接口、设备驱动。
硬件控制:
处理中断及与硬件通信。
中断,现代系统中,CPU与各种设备并发工作。
设备通过中断方式向CPU报告某事件发生,要求CPU干预处理。
CPU响应中断后,暂停正在执行的程序,转去执行专门的中断处理程序,然后再返回原来的程序继续执行。
系统中所有异步发生的事件都是通过中断机制来处理的,包括设备硬件中断和软件中断两类。
系统调用,系统调用是内核提供的一组特殊的函数,用户进程通过系统调用来调用内核程序,访问系统资源。
系统调用是借助中断机制实现的一种特殊中断。
当进程执行到一个系统调用时,就会产生一个系统调用中断。
CPU将响应此中断,调用内核中相应的处理函数,执行该系统调用对应的功能。
进程的运行模式,在进行通常的计算和处理时,进程运行在用户态;执行系统调用或中断处理程序时进入核心态,执行内核代码。
调用返回后,回到用户态继续运行。
5.3Linux进程的描述,进程运行所需的资源:
地址空间,分为内核空间与用户空间,包含:
代码区:
存放代码数据区:
存放数据栈:
存放运行数据文件与设备:
进程打开的文件与设备。
信号:
进程收到的信号。
Linux进程的描述,进程的描述结构包括:
进程描述符:
即PCB。
内核栈:
保存运行数据及部分现场信息。
资源描述符:
地址空间、文件/设备、信号等。
Linux进程的组织,进程链表:
链接系统中的所有进程。
PID散列表:
用于加速查找PCB。
进程树链表:
构成进程的家族关系。
可执行队列:
所有处于可执行状态的PCB组织成一个可执行队列。
等待队列:
每类特定的事件对应一个等待队列。
5.4进程控制,进程控制的作用就是对进程在整个生命周期中各种状态之间的转换进行有效的控制。
进程控制操作包括:
创建进程、撤消进程、阻塞进程、唤醒进程。
进程的创建与撤消,创建进程:
创建进程就是建立进程PCB。
操作过程:
建立进程的PCB,为其分配资源,然后将PCB链入进程链表和可执行队列中,等待运行。
撤消进程:
将进程的PCB从进程队列及链表中摘出,释放进程所占用的资源,最后销去它的PCB。
进程的阻塞与唤醒,阻塞进程:
中断进程的执行,为其保存CPU的现场,然后将进程的状态置为等待态,将其PCB插入到相应的等待队列中。
唤醒进程:
在等待队列中找到该进程,置进程的当前状态为就绪状态,然后将它从等待队列中撤出并插入到可执行队列中。
进程的创建,系统启动时执行初始化程序,启动进程号为1的init核心进程运行。
系统中所有的其它进程都是由init进程衍生而来的。
一个进程通过系统调用fork()和clone()来创建新的进程,新创建的进程称为子进程,创建子进程的进程称为父进程。
创建进程时,建立子进程的PCB,为子进程分配一个PID,并将父进程的代码及资源复制给子进程,状态置为可执行态。
子进程与父进程并发执行。
进程树,Linux系统中所有进程都是相互联系的。
除了init进程外,所有进程都有一个父进程。
如:
在Shell下执行命令启动的进程是Shell进程的子进程。
子进程可以再启动自己的子进程。
这样形成了一棵进程树,用进程树链表表示。
树的根是init进程。
用pstree命令可以查看进程树。
fork(),功能:
创建一个新进程。
调用格式:
intfork();返回值说明:
0:
向子进程返回的ID值;0:
向父进程返回的子进程的ID值。
-1:
创建失败。
注:
fork()是一次调用,两次返回。
即,若fork()调用成功,它向父进程返回子进程的PID,并向新建立的子进程返回0。
fork的执行过程,fork的程序结构,进程映象的更换,fork()是将父进程的执行代码映象拷贝给子进程。
子进程与父进程执行的是相同的程序代码。
exec()系统调用函数的功能是把一个新程序装入内存,覆盖原来进程的执行代码,从而形成一个全新的进程。
成功执行exec()后,子进程就变成了一个不同于父进程的新进程。
exec(),功能:
改变进程的映象,使其执行另外的程序。
调用格式之一:
intexecl(char*path,char*arg0,char*arg1,.char*argn,0);参数说明:
path为路径名,arg0argn为程序的名称及其运行参数。
如:
execl(/bin/ls,ls,-l,0);返回值说明:
调用成功后,不返回。
调用失败后,返回-1。
exec的程序结构,进程的终止,当运行中的进程运行结束时,通过系统调用exit(),实现进程的主动终止。
这样可以及时通知父进程回收进程所占用的资源。
在main()函数中调用return(),最终也是调用exit()函数。
exit()完成以下操作:
放弃除PCB和内核栈外的所有资源,向PCB写入进程结束状态和记帐等信息,置进程状态为“僵死态”,等待父进程处理。
exit(),功能:
使进程主动终止。
调用格式:
voidexit(intstatus);参数说明:
status是返回给父进程的一个整数,用于向父进程通报进程运行的结果状态。
通常0表示进程正常终止,非0表示进程运行有错,异常终止。
进程的等待,为了控制
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 管理
![提示](https://static.bdocx.com/images/bang_tan.gif)