清华大学操作系统课件_向勇老师的讲义资料讲解.ppt
《清华大学操作系统课件_向勇老师的讲义资料讲解.ppt》由会员分享,可在线阅读,更多相关《清华大学操作系统课件_向勇老师的讲义资料讲解.ppt(97页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、清华大学操作系统课件_向勇老师的讲义4.1.1 程序的顺序执行和并发执行程序的执行有两种方式:顺序执行和并发执行。顺序执行是单道批处理系统的执行方式,也用于简单的单片机系统;现在的操作系统多为并发执行,具有许多新的特征。引入并发执行的目的是为了提高资源利用率并适应多任务处理的要求。顺序执行的特征顺序性:按照程序结构所指定的次序(可能有分支或循环)封闭性:独占全部资源,计算机的状态只由于该程序的控制逻辑所决定可再现性:初始条件相同则结果相同。如:可通过空指令控制时间关系。并发执行的特征间断(异步)性:走走停停,一个程序可能走到中途停下来,失去原有的时序关系;失去封闭性:共享资源,受其他程序的控制
2、逻辑的影响。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征。失去可再现性:失去封闭性 失去可再现性;外界环境在程序的两次执行期间发生变化,失去原有的可重复特征。并发执行的条件:达到封闭性和可再现性程序 P(i)针对共享变量的读集和写集 R(i)和W(i)条件:任意两个程序P(i)和P(j),有:R(i)W(j)=;W(i)R(j)=;W(i)W(j)=;并发执行失去封闭性的原因是共享资源的影响,去掉这种影响就行了。1966年,由Bernstein给出并发执行的条件。(这里没有考虑执行速度的影响。)前两条保证一个程序的两次读之间数据不变化;最后一条保证写的结果不丢掉。现在
3、的问题是这个条件不好检查。4.1.2 进程的定义和描述它对应虚拟处理机、虚拟存储器和虚拟外设等资源的分配和回收;引入多进程,提高了对硬件资源的利用率,但又带来额外的空间和时间开销,增加了OS 的复杂性;1.进程的定义一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。进程与程序的关系类比这时小儿子哭着跑进来,说手被蜜蜂蛰了。教授只好把蛋糕先放在一边。他在食谱上做了个标记,把状态信息记录了起来。然后又去找了一本医疗手册,查到了相关的内容,按照上面的指令一步步地执行。当伤口处理完之后,又回到厨房继续做蛋糕。有一个计算机科学家,想亲手给女儿做一个生日蛋糕。所以他就找了一本有关做蛋糕的食谱,
4、买了一些原料,面粉、鸡蛋、糖、香料等,然后边看边学边做。食谱 程序;科学家 CPU;原料 数据;做蛋糕 =进程;CPU从一个进程(做蛋糕)切换到另一个进程(医疗救护)。2.进程的特征动态性:进程具有动态的地址空间(数量和内容),地址空间上包括:代码(指令执行和CPU状态的改变)数据(变量的生成和赋值)系统控制信息(进程控制块的生成和删除)独立性:各进程的地址空间相互独立,除非采用进程间通信手段;并发性、异步性:虚拟结构化:代码段、数据段和核心段(在地址空间中);程序文件中通常也划分了代码段和数据段,而核心段通常就是OS核心(由各个进程共享,包括各进程的PCB)四个进程在并发地运行3.进程与程序
5、的区别进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制。进程是暂时的,程序的永久的:进程是一个状态变化的过程,程序可长久保存。进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。4.处理机调度器(dispatcher)把处理机从一个进程切换到另一个进程;防止某进程独占处理机;处理机调度器是操作系统中的一段代码,它完成如下功能:5.进程控制块(PCB,process control blo
6、ck)每个进程在OS中的登记表项(可能有总数目限制),OS据此对进程进行控制和管理(PCB中的内容会动态改变),不同OS则不同处于核心段,通常不能由应用程序自身的代码来直接访问,而要通过系统调用,或通过UNIX中的进程文件系统(/proc)直接访问进程映象(image)。文件或目录名为进程标识(如:00316),权限为创建者可读写。进程控制块是由OS维护的用来记录进程相关信息的一块内存。进程控制块的内容进程描述信息:进程标识符(process ID),唯一,通常是一个整数;进程名,通常基于可执行文件名(不唯一);用户标识符(user ID);进程组关系(process group)进程控制信息
7、:当前状态;优先级(priority);代码执行入口地址;程序的外存地址;运行统计信息(执行时间、页面调度);进程间同步和通信;阻塞原因资源占用信息:虚拟地址空间的现状、打开文件列表CPU现场保护结构:寄存器值(通用、程序计数器PC、状态PSW,地址包括栈指针)6.PCB的组织方式链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表各状态的进程形成不同的链表:就绪链表、阻塞链表索引表:同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的index表各状态的进行形成不同的索引表:就绪索引表、阻塞索引表7.进程上下文用户级上下文:进程的用户地址空间(包括
8、用户栈各层次),包括用户正文段、用户数据段和用户栈;寄存器级上下文:程序寄存器、处理机状态寄存器、栈指针、通用寄存器的值;系统级上下文:静态部分(PCB和资源表格)动态部分:核心栈(核心过程的栈结构,不同进程在调用相同核心过程时有不同核心栈)进程上下文是对进程执行活动全过程的静态描述。进程上下文由进程的用户地址空间内容、硬件寄存器内容及与该进程相关的核心数据结构组成。核心态和用户态用户态是指进程执行用户应用程序代码时的状态。处于用户态的进程,不可直接访问受保护的OS代码;核心态是指进程通过系统调用来执行操作系统代码时的状态。处于核心态的进程执行的代码是OS代码,可以访问整个进程的全部地址空间。
9、4.1.3 进程的状态转换4.1.3.1 两状态进程模型4.1.3.2 五状态进程模型4.1.3.3 挂起进程模型4.1.3.1 两状态进程模型1.状态运行状态(Running):占用处理机资源;暂停状态(Not-Running):等待进程调度分配处理机资源;2.转换进程创建(Enter):系统创建进程,形成PCB,分配所需资源,排入暂停进程表(可为一个队列);调度运行(Dispatch):从暂停进程表中选择一个进程(要求已完成I/O操作),进入运行状态;暂停运行(Pause):用完时间片或启动I/O操作后,放弃处理机,进入暂停进程表;进程结束(Exit):进程运行中止;4.1.3.2 五状态
10、进程模型两状态模型无法区分暂停进程表中的可运行和阻塞,五状态模型就是对暂停状态的细化。五状态进程模型(状态变迁)五状态进程模型(单队列结构)五状态进程模型(多队列结构)1.状态运行状态(Running):占用处理机资源;处于此状态的进程的数目小于等于CPU的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程(相当于空操作)。就绪状态(Ready):进程已获得除处理机外的所需资源,等待分配处理机资源;只要分配CPU就可执行。可以按多个优先级来划分队列,如:时间片用完低优,I/O完成中优,页面调入完成高优阻塞状态(Blocked):由于进程等待某种条件(如I/O
11、操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。如:等待I/O操作的完成。创建状态(New):进程刚创建,但还不能运行(一种可能的原因是OS对并发进程数的限制);如:分配和建立PCB表项(可能有数目限制)、建立资源表格(如打开文件表)并分配资源,加载程序并建立地址空间表。结束状态(Exit):进程已结束运行,回收除PCB之外的其他资源,并让其他进程从PCB中收集有关信息(如记帐,将退出码exit code传递给父进程)。2.转换创建新进程:创建一个新进程,以运行一个程序。可能的原因为:用户登录、OS创建以提供某项服务、批处理作业。收容(Admit
12、,也称为提交):收容一个新进程,进入就绪状态。由于性能、内存、进程总数等原因,系统会限制并发进程总数。调度运行(Dispatch):从就绪进程表中选择一个进程,进入运行状态;释放(Release):由于进程完成或失败而中止进程运行,进入结束状态;运行到结束:分为正常退出Exit和异常退出abort(执行超时或内存不够,非法指令或地址,I/O失败,被其他进程所终止)就绪或阻塞到结束:可能的原因有:父进程可在任何时间中止子进程;超时(Timeout):由于用完时间片或高优先进程就绪(被抢先)等导致进程暂停运行;事件等待(Event Wait):进程要求的事件未出现而进入阻塞;可能的原因包括:申请系
13、统服务或资源、通信、I/O操作等;事件出现(Event Occurs):进程等待的事件出现;如:操作完成、申请成功等;注:对于五状态进程模型,一个重要的问题是当一个事件出现时如何检查阻塞进程表中的进程状态。当进程多时,对系统性能影响很大。一种可能的作法是按等待事件类型,排成多个队列。4.1.3.3 挂起进程模型这个问题的出现是由于进程优先级的引入,一些低优先级进程可能等待较长时间,从而被对换至外存。这样做的目的是:提高处理机效率:就绪进程表为空时,没有可运行的进程。通过提交新进程,可提高处理机效率;为运行进程提供足够内存:资源紧张时,暂停某些进程,如:CPU繁忙(或实时任务执行),内存紧张用于
14、调试:在调试时,挂起被调试进程(从而对其地址空间进行读写)单挂起进程模型双挂起进程模型1.状态就绪状态(Ready):进程在内存且可立即进入运行状态;阻塞状态(Blocked):进程在内存并等待某事件的出现;阻塞挂起状态(Blocked,suspend):进程在外存并等待某事件的出现;就绪挂起状态(Ready,suspend):进程在外存,但只要进入内存,即可运行;注:这里只列出了意义有变化或新的状态。2.转换挂起(Suspend):把一个进程从内存转到外存;可能有以下几种情况:阻塞到阻塞挂起:没有进程处于就绪状态或就绪进程要求更多内存资源时,会进行这种转换,以提交新进程或运行就绪进程;就绪到
15、就绪挂起:当有高优先级阻塞(系统认为会很快就绪的)进程和低优先级就绪进程时,系统会选择挂起低优先级就绪进程;运行到就绪挂起:对抢先式分时系统,当有高优先级阻塞挂起进程因事件出现而进入就绪挂起时,系统可能会把运行进程转到就绪挂起状态;激活(Activate):把一个进程从外存转到内存;可能有以下几种情况:就绪挂起到就绪:没有就绪进程或挂起就绪进程优先级高于就绪进程时,会进行这种转换;阻塞挂起到阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起(系统认为会很快出现所等待的事件)进程;事件出现(Event Occurs):进程等待的事件出现;如:操作完成、申请成功等;可能的情况有:阻塞到就
16、绪:针对内存进程的事件出现;阻塞挂起到就绪挂起:针对外存进程的事件出现;收容(Admit):收容一个新进程,进入就绪状态或就绪挂起状态。进入就绪挂起的原因是系统希望保持一个大的就绪进程表(挂起和非挂起);4.1.4 操作系统代码的执行OS和进程的关系:OS不作为进程地址空间的一部分:传统方法。OS作为进程地址空间的一部分:如UNIXOS功能分别在核心和系统服务进程中,只有OS核心作为进程地址空间的一部分:如Windows NT通常,OS核心不是一个进程,其执行不被调度。4.2 进程控制4.2.1 进程控制的功能4.2.2 进程的创建和退出4.2.3 UNIX进程的阻塞和唤醒4.2.4 NT线程
17、的挂起和激活4.2.5 UNIX进程管理举例4.2.6 Windows NT进程管理举例返回4.2.1 进程控制的功能完成进程状态的转换。原语(primitive):由若干条指令构成的“原子操作(atomic operation)”过程,作为一个整体而不可分割要么全都完成,要么全都不做。许多系统调用就是原语。注意:系统调用并不都是原语。进程A调用read(),因无数据而阻塞,在read()里未返回。然后进程B调用read(),此时read()被重入。系统调用不一定一次执行完并返回该进程,有可能在特定的点暂停,而转入到其他进程。4.2.2 进程的创建和退出1.创建继承(inherit):子进程可
18、以从父进程中继承用户标识符、环境变量、打开文件、文件系统的当前目录、控制终端、已经连接的共享存储区、信号处理例程入口表等不被继承:进程标识符,父进程标识符spawn创建并执行一个新进程;新进程与父进程的关系可有多种:覆盖(_P_OVERLAY)、并发(_P_NOWAIT or _P_NOWAITO)、父进程阻塞(_P_WAIT)、后台(_P_DETACH)等。2.退出也称为“终止”或主程序返回:调用exit()可终止进程。释放资源:释放内外存空间关闭所有打开文件释放共享内存段和各种锁定lock4.2.3 UNIX进程的阻塞和唤醒阻塞:暂停一段时间(sleep);暂停并等待信号(pause);等
19、待子进程暂停或终止(wait);唤醒:发送信号到某个或一组进程(kill)调用wait挂起本进程以等待子进程的结束,子进程结束时返回。父进程创建多个子进程且已有某子进程退出时,父进程中wait函数在第一个子进程结束时返回。其调用格式为pid_t wait(int*stat_loc);;返回值为子进程ID。waitpid()等待指定进程号的子进程的返回并修改状态;waitid()等待子进程修改状态;调用pause挂起本进程以等待信号,接收到信号后恢复执行。当接收到中止进程信号时,该调用不再返回。其调用格式为int pause(void);;调用sleep将在指定的时间seconds内挂起本进程。
20、其调用格式为:unsigned sleep(unsigned seconds);;返回值为实际的挂起时间。调用kill可发送信号sig到某个或一组进程pid。其调用格式为:int kill(pid_t pid,int sig);。信号的定义在文件/usr/include/asm/signal.h中。命令kill可用于向进程发送信号。如:kill-9 100将发送SIGKILL到ID为100的进程;该命令将中止该进程的执行。实例:UNIX_wait演示子进程与父进程的关系和fork、exec、wait的使用;程序main.c功能是进行10次循环,创建2个子进程。循环到第3次时,等待子进程结束。#
21、include#include#include#include pid_t wait(int*stat_loc);void perror(const char*s);#include int errno;int global;main()int local,i;pid_t child;if(child=fork()=-1)/创建失败 printf(Fork Error.n);if(child=0)/子进程 printf(Now it is in child process.n);if(execl(/home/xyong/work/ttt,ttt,NULL)=-1)/加载程序失败 perror(
22、Error in child process);global=local+2;exit();/父进程 printf(Now it is in parent process.n);for(i=0;i10;i+)sleep(2);printf(Parent:%dn,i);if(i=2)if(child=fork()=-1)/创建失败 printf(Fork Error.n);if(child=0)/子进程 printf(Now it is in child process.n);if(execl(/home/xyong/work/ttt,ttt,NULL)=-1)/加载程序失败 perror(Er
23、ror in child process);global=local+2;exit();if(i=3)pid_t temp;temp=wait(NULL);printf(Child process ID:%dn,temp);global=local+1;exit();程序test.c#include#include pid_t getpid(void);pid_t getppid(void);int global;main()int local;int i;pid_t CurrentProcessID,ParentProcessID;CurrentProcessID=getpid();Pare
24、ntProcessID=getppid();printf(Now it is in the program TEST.n);for(i=0;i10;i+)sleep(2);printf(Parent:%d,Current:%d,Nunber:%dn,ParentProcessID,CurrentProcessID,i);global=local+1;exit();功能是进行10次循环。结果Parent:7072,Current:7074,Nunber:4Parent:7072,Current:7073,Nunber:8Parent:7072,Current:7074,Nunber:5Paren
25、t:7072,Current:7073,Nunber:9Child process ID:7073Parent:7072,Current:7074,Nunber:6Parent:4Parent:7072,Current:7074,Nunber:7Parent:5Parent:7072,Current:7074,Nunber:8Parent:6Parent:7072,Current:7074,Nunber:9Parent:7Parent:8Parent:9Now it is in parent process.Now it is in child process.Now it is in the
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华大学 操作系统 课件 老师 讲义 资料 讲解
限制150内