您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统第2章_进程管理1
第2章进程管理1本章内容提要•什么是进程•进程的状态和组成•进程间的同步与互斥•进程通信•对进程的管理•线程和管程概念•死锁概念22.1进程概念2.1.1程序顺序执行的特征■顺序程序设计■顺序程序活动特点●顺序性●封闭性●可再现性32.1.2程序并发执行及其特征■程序并发执行概念▲非多道技术下作业执行过程4▲多道技术下作业执行过程●作业吞吐量是指在给定时间间隔内所完成作业的数量5■程序并发执行的特征①失去封闭性:多个程序共享系统中的各种资源,因而这些程序都可改变系统资源的状态。因为共享资源,程序在执行时可能会走走停停。(执行—暂停执行—执行)②程序与计算不再一一对应:一个共享程序可被多个用户作业调用,从而形成多个计算。③并发程序在执行期间相互制约:各程序活动的工作状态与系统环境密切相关。如程序A使用独占性质的打印机,则程序B就不能使用。62.1.3进程概念的引入和定义■引入进程概念多道程序并发执行所引发的一系列新情况,必须引入新的概念来描述程序动态执行过程的性质。■进程概念定义•定义:程序在并发环境中的执行过程●进程最根本的属性是动态性和并发性“进程”是操作系统的最基本、最重要的概念之一。这是对正在运行程序的一个抽象。但还没有形成统一的定义。7★生活中事例——按菜谱做菜●进程和程序的区别动态性并发性非对应性异步性89如何理解进程概念?进程与程序有何差别?阅读菜谱准备原料烹制菜肴饭菜阅读洗衣机手册准备衣服、洗衣粉设定参数,洗衣服干净衣服程序输入运行输出程序输入运行输出分时切换洗衣进程做饭进程10进程特征13542并发性动态性结构性调度性异步性进程的特征111)动态性:进程最基本的特征。进程由创建产生;由调度执行;得不到资源而暂停;由撤消而消亡。进程是有一定生命周期的。程序是指一组有序指令集合,是一个静态的实体。2)并发性:一段时间内,多个进程实体在内存中可同时运行。引入进程的目的就是为了能并发。程序不能并发。3)调度性:进程实体是一个能独立运行、独立获得资源、独立调度的基本单位。程序不能做为一个独立单位。4)异步性:进程是按各自独立、不可预知的速度前进,该特性将导致程序执行的不可再现性。因此OS中必须采取某种措施保证协调运行。进程的特征125)结构性:为能正确的执行并发,为每一个进程配置了一个数据结构,称为进程控制块(PCB)。则一个进程实体就由数据段、程序段、控制结构(如PCB)等构成。•程序和进程不一定具有一一对应的关系。进程的特征2.2进程状态描述及组织方式2.2.1进程的状态及其转换■进程的状态三种基本状态●运行状态(Running)●就绪状态(Ready)●阻塞状态(Blocked)1314进程的基本状态转换运行态阻塞态就绪态进程就绪,可以运行状态转换:进程等待外部事件,阻塞OS决定由哪个进程占用CPU,进程调度进程状态?中断(时间片到)基本状态转换进程的5种状态及其转换15在很多系统中还增加了两种基本状态2.2.2进程的组成1.进程映像进程活动:cpu上执行程序、操作对应数据---静态部分需要一个结构描述进程当前状态,对资源的占用情况等----动态部分,即进程控制块PCB需要保存过程调用和相互传送参数的踪迹—栈进程映像模型162.进程控制块的组成•进程控制块(PCB)也称进程描述块(ProcessDescriptor),它是进程组成中最关键的部分,其中含有进程的描述信息和控制信息,是进程动态特性的集中反映,是系统对进程施行识别和控制的依据。★进程控制块一般应包括如下内容:进程名特征信息进程状态信息调度优先权通信信息现场保护区资源需求、分配和控制方面的信息进程实体信息族系关系其它信息173.进程控制块的作用•每个进程有惟一的进程控制块•操作系统根据PCB对进程实施控制和管理•进程的动态、并发等特征是利用PCB表现出来的•PCB是进程存在的唯一标识182.2.3进程组织方式1.线性方式PCB线性队列示意图19在一个系统中,常常含有固定数目的PCB。对它们要进行有效的组织与管理。2.链接方式PCB链接队列示意图20就绪队列根据不同的优先级也可以有多个PCB索引结构示意图3.索引方式212.3进程管理和有关命令2.3.1进程图和进程管理■进程图(ProcessGraph)是描述进程族系关系的有向树进程创建的层次关系22■进程创建引发创建进程的事件:▲调度新作业▲用户登录▲操作系统提供特定服务▲派生新进程●创建新进程时要执行创建进程的系统调用(如UNIX/Linux系统中的fork)●其主要操作过程有如下四步:(1)申请一个空闲的PCB(2)为新进程分配资源(3)将新进程的PCB初始化(4)将新进程加到就绪队列中23#includeunistd.h#includesys/types.h#includestdio.hintmain(intargc,char*argv[]){intpid;pid=fork();/*forkanotherprocess*/if(pid0){/*erroroccurred*/fprintf(stderr,ForkFailed);exit(-1);}elseif(pid==0){/*childprocess*/execlp(/bin/ls,ls,NULL);}else{/*parentprocess*/wait(NULL);/*parentwillwaitforthechildtocomplete*/printf(ChildComplete);exit(0);}}24■进程终止●导致进程终止的三种情况:正常终止异常终止外部干扰●终止进程的主要操作过程如下:•找到指定进程的PCB,终止该进程的运行•回收该进程所占用的全部资源•终止其所有子孙进程,回收它们所占用的全部资源。•将被终止进程的PCB从原来队列中摘走25■进程阻塞进程阻塞的过程如下:•立即停止当前进程的执行•现行进程的CPU现场保存•现行状态由“运行”改为“阻塞”•转到进程调度程序26■进程唤醒执行过程如下:•把阻塞进程从相应的阻塞队列中摘下•将现行状态改为就绪状态,然后把该进程插入就绪队列中•如果被唤醒的进程比当前运行进程的优先级更高,则设置重新调度标志27■进程映像的更换某些系统(UNIX/Linux)创建子进程时是把父进程的映像复制给子进程,因此父子进程的映像基本相同,如果子进程不改变,则基本重复父进程的过程,所以通常要进行映像的更换,其主要过程是:•释放子进程原来的程序和数据所占用的内存空间;•从磁盘上找出子进程所要执行的程序和数据(通常以可执行文件的形式存放);•分配内存空间,装入新的程序和数据;•为子进程建立初始的运行环境——主要是对各个寄存器初始化,返回到用户态,运行该进程的程序。282.3.2Linux进程管理■Linux进程状态Linux进程状态的变化29■进程的模式和类型用户进程的两种运行模式进程划分为两大类:一类是系统进程,只运行在内核模式,执行操作系统代码;另一类是用户进程。30■Linux进程结构●task_struct结构Linux系统中的每个进程都有一个名为task_struct的数据结构,它相当于“进程控制块”。task_struct结构包含下列信息:进程状态调度信息标识符内部进程通信链接信息时间和计时器文件系统虚拟内存处理器信息●进程系统堆栈312.3.3有关进程操作的命令1.ps命令查看进程状态ps命令的一般格式是:ps[选项]$psPIDTTYTIMECMD1788pts/100:00:00bash1822pts/100:00:00ps2.kill命令终止一个进程的运行kill命令的一般格式是:•kill[-s信号|-p][-a]进程号…•kill-l[信号]$kill1651323.sleep命令使进程暂停执行一段时间。一般使用格式是:sleep时间值$sleep100;who|grep'mengqc'332.3.4有关进程管理的系统调用■系统调用的使用方式在UNIX/Linux系统中,系统调用和库函数都是以C函数的形式提供给用户的,它有类型、名称、参数,并且要标明相应的文件包含。open系统调用可以打开一个指定文件,其函数原型说明如下:#includesys/types.h#includesys/stat.h#includefcntl.hintopen(constchar*path,intoflags);例如:intfd;…fd=open(/home/mengqc/myfile1,O_RDWR);…34■有关系统调用的格式和功能常用的有关进程管理的系统调用有:fork,exec,wait,exit,getpid,sleep,nice等■应用示例/*proc1.c演示有关进程操作*/#includeunistd.h#includesys/types.h#includestdio.h#includeerrno.hintmain(intargc,char**argv){pid_tpid,old_ppid,new_ppid;pid_tchild,parent;parent=getpid();/*获得本进程的PID*/if((child=fork())0){fprintf(stderr,%s:forkofchildfailed:%s\n,argv[0],strerror(errno));exit(1);}elseif(child==0){/*此时是子进程被调度运行*/old_ppid=getppid();sleep(2);new_ppid=getppid();}else{sleep(1);exit(0);/*父进程退出*/}/*下面仅子进程运行*/printf(Originalparent:%d\n,parent);printf(Child:%d\n,getpid());printf(Child'soldppid:%d\n,old_ppid);printf(Child'snewppid:%d\n,new_ppid);exit(0);}程序运行的结果如下:$./proc1Originalparent:2009Child:2010Child'soldppid:2009Child'snewppid:135
本文标题:操作系统第2章_进程管理1
链接地址:https://www.777doc.com/doc-3696174 .html