




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章:引论1.操作系统的定义:操作系统是计算机系统中的系统软件,是能有效地组织和管理计算机系统中的硬件和软件资源,合理地组织计算机工作流程,控制程序的执行,并向用户提供各种服务功能,使得用户能够合理,方便,有效地使用计算机,使整个计算机系统高效运行的一组程序模块的集合。2.操作系统的发展史:人工操作方式缺点:用户独占全机,处理机等待人工操作。为了解决人机矛盾及处理机和I/O设备之间速度不匹配的矛盾。脱机I/0方式(外围机是核心)口单道批处理操作自动地将一个作业一个作业的进行处理,直至磁盘上的作业全部系统完成。口好处:提高处理机的利用率(可同时把若干道程序装入内存,并且单道批处理操作系统替地执
2、行。)提高内存和I/O的设备利用率(内存中装入多道程序,并允许并发执行。)增加系统吞吐量特征:多道性(允许并发,提高了资源利用率和增加系统吞吐量)无序性调度性3.分时系统与实时系统的比较:分时系统实时系统多路性为多个终端用户服务。对多路的现场信息进行采集以及对多个对象或多个执行机构进行控制。独立性每个用户各占一个终端,彼此独立操作。信息的采集和对对象的控制也彼此互不干扰。及时性用户的请求时间通常是2-3S及时性由控制对象所要求的开始截止时间或完成截止时间来确定的。交互性用户可以请求系统提供各方面的服务,如文件编辑,数据处理和资源共享。仅限于访问系统中某些特定的专业服务程序。可靠性要求可靠。要求
3、高度可靠。通常采取了多级容错措施保证数据的安全。4.操作系统的几种观点:操作系统软件的观点有作为软件的外在和内在特性。外在特性:即操作命令定义集和界面,完全确定了操作系统这个软件的使用方式。内在特性:具有一般软件的结构特点,但又具有一般软件不具备的特殊结构。计算机系统资源管理的观点提供一些机制去协调程序间的竞争与同步,提供机制对资源进行合理使用。处理机管理:用于分配和控制处理机。存储器管理:负责内存的分配和回收。I/O设备管理:负责I/O设备的分配和操纵。文件管理:负责文件的存取,共享和保护。进程的观点操作系统=若干个可以同时独立运行的程序(进程)+一个对这些程序进行协调的核心(进程完成任务,
4、核心则控制盒协调这些进程的运行,解决进程之间的通信。)用户与计算机硬件系统之间接口的观点注意这个接口是软件接口。用户可以使用两种方式来使用计算机:(1)命令方式(2)系统调用方式虚机器的观点用户不直接使用硬件计算机,而是通过操作系统来控制盒使用计算机。服务提供者观点从用户角度看,操作系统为用户提供功能更强,服务质量更高,使用户更方便,灵活的虚拟计算机。包括:程序执行,I/0操作,文件系统操作,通信,差错检测5.操作系统的功能:处理器管理(在多道程序环境下,处理器的分配和运行以进程为单位,故可归结为对进程的管理。)进程控制:负责进程的创建,撤销及状态转换。进程同步:对并发执行的进程进行协调。进程
5、通信:负责完成进程间的信息交换。进程调度:按一定算法进行处理器分配。/A-fztXPAxVTE存储命官理(1)内存分配:按一定的策略为每道程序分配内存。(2)内存保护:保证各程序在自己的内存区域内运行而互不干扰。(3)内存扩充设备管理文件管理(1)设备分配。(2)设备传输控制:实现物理的输入输出操作,即启动设备,中断处理,结束处理。(3)设备独立性:用户程序之间的设备与物理设备无关。有效的支持文件的存储,检索和修改,解决文件的共享,保密和保护问题。(1)文件存储空间的管理。目录管理。(3)文件操作管理。(4)文件保护。用户接口三种用户接口:(1)命令接口。(2)程序接口:也称为系统调用。(3)
6、图形接口:是命令接口的图形化。并发性注意并行性跟并发性的区别:并行性:两个或多个时间在同一时刻发生。6.操作系统的特征并发性:两个或多个事件在同一时间间隔内发生。共享性系统中的资源可以供多个并发执行的进程共同使用。互斥共享:例如打印机,磁带机。同时访问:例如磁盘以及一些重入码编写的文件。虚拟性通过某种技术把一个物理实体变成若干个逻辑上的对应物。异步性在多道程序环境下,由于资源等因素的限制,程序是以走走停停的方式运行的。系统中的每道程序何时执行,多道程序间的执行顺序以及完成每道程序所需的时间都是不确定的,因而也是不可未知的。7 .微内核特点:(1)足够小的内核:微内核纸包括操作系统中最基本的部分
7、,是操作系统的小核心,它将各种操作系统共同需要的核心功能提炼出来,形成微内核的基本功能。这些基本功能包括:进程管理,低级存储器管理,中断和陷入的处理。(2)基于客户/服务器模式:操作系统最基本的部分放入内核中,大部分放在内核外的一组服务器(进程)中实现。(3)应用机制和策略分离的技术:机制是实现某一功能的具体执行机构,而策略处于系统的高层。(4)面向对象的技术:微内核是操作系统发展的最新成果,具有提高系统的扩展性,增强系统的可靠性,可移植性和可以支持分布式系统,采用面向对象技术等特点。主要思想:在操作系统内核中只留下一些最基本的功能,而将其他服务尽可能地从内核中分离出去,用若千个运行在用户态下
8、的进程来实现。优点:(1)每个服务进程运行在独立的用户进程中,即某个服务器失败或产生问题时不会引起系统其他服务器和其他组成部分的崩溃,可靠性好。(2)系统具有很好的灵活性,只要接口规范,操作系统可以方便地增删服务功能。(3)便于维护,即修改服务器的代码不会影响、(4)系统其他部分。缺点:效率不高,因为所有的用户进程都要通过微内核相互通信,所以微内核本身就成了系统的瓶颈,尤其是通信频繁的系统。8 .客户/服务器模式即C/S模式,普通用户进程可以通过内核像服务器进程发送请求,以取得操作系统的服务。优点:既允许数据的分布处理和存储,又便于集中管理,灵活性和可扩充性强,容易修改。缺点:存在不可靠性和瓶
9、颈问题。(服务器是瓶颈)9 .操作系统的硬件环境:(1)特权指令和非特权指令特权指令在指令系统中那些只能由操作系统使用的指令。非特权指令用户只能使用的指令。问题:如果用户想要使用特权指令,只能通过系统调用来实现,否则会使系统陷入混乱(2)处理机的状态:核心态(管态,系统态)全部指令可以执行,可以使用所有资源并具有改变处理机状态的能力。用户态(目态)只有非特权指令能执行。注意:在系统调用时,将由用户态转到核心态(3)存储器的类型:分类定义作用(举例)读/写存储器可以把数据存入其中任一地址单元,并且可在以后的任何时候把数据读出来或者重新存入别的数据。通常被称为随机访问存储器(RAM)用于存放随机存
10、取的程序和数据。只读型存储器只能从其中读取数据。通常被称为只读存储器(ROM)(4)存储器的层次结构:磁带机寄存器0高速缓存O内存储器O硬盘存储0光盘存储器(存储装置)达到提高存储系统效能的关键在于:程序的存储访问局部性原理。注意:按层次结构来设计操作系统,就是将操作系统的所有功能模块按功能的调用次序排列成若干层,使得功能模块之间只存在单向调用和单向依赖。优点:模块间的组织和依赖关系清晰明了。缺点:个功能模块应该放在哪一层,如何有效地进行分层式必须考虑的问题。(5)常用存储保护机制:界地址寄存器比较简单,易于实现。在处理机中设置一对界限寄存器用来存放概用户作业内存中的下限和上限地址。当处理机要
11、访问内存时,如果越界就将程序中断。存储键每个存储块都有一个与其相关的由二进制组成的内存保护键附加在每个存储块上。(6)缓冲技术:缓冲区:是硬件设备之间进行数据传输时,专门用来暂存这些数据的一个存储区域。缓冲技术的用途:处理机与内存之间处理机与其他外部设备之间设备与设备之间目的:解决部件之间速度不匹配的问题。(7)中断:含义:指处理机对系统中或者系统外发生的异步事件的响应。分类:可屏蔽中断(I/O中断)不可屏蔽中断(机器内部故障,掉电中断)程序错误中断(溢出,除法错等中断)软件中断(Trap指令或者终端指令INT)中断与异常的区别:中断时系统正常功能的一部分,在系统处理完其他事情之后会继续执行中
12、断前的进程。异常是由错误引起的。(通常异常会引起中断,而中断未必是由异常引起的)(8)系统调用:系统调用时操作系统提供的用户接口之一,是由操作系统实现的所有系统调用所构成的集合,即程序接口或应用编程接口,是应用程序同系统之间的接口。系统调用把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,将处理结果返回给应用程序。组成:进程控制、文件系统控制、系统控制、内存管理、网络管理、socket控制、用户管理、进程间通信(9)作业状态:提交状态通过各种输入设备将作业从外部送入计算机系统的辅助存储设备。等待作业调度程序调度。被分配所需资源,然后调入内存,并为其创建进程。作业调度程序收回其占用的所
13、有资源,做必要的善后处理。第三章:进程与进程管理1 .前趋图(有向无循环图)图中每个节点可以表示一条语句,一个程序段或者一个进程,节点间的有向边表示两个节点之间存在的偏序或前趋关系“一”2 .程序的顺序执行:一个程序中的程序段必须按照某种先后顺序执行,仅当一个操作执行完之后才能执行后续操作。特征:顺序性严格按照程序所规定的顺序执行封闭性程序一旦开始运行,执行结果不受外界因素影响。可再现性只要程序执行的初始状态和执行环境相同,当程序重复执行时,都将获得相同的结果。3.程序的并发执行:注意并发跟并行的区别:并行两个或多个事件在同一时刻发生。并发两个或多个事件在同一时间间隔内发生。特征:(相比顺序执
14、行)间断性由共享资源而产生的间接制约关系,这种制约关系将导致并发程序具有“执行一暂停执行一执行”这种间接性的活动规律。失去封闭性程序并发执行时,多个程序共享系统资源,故这些资源的状态将由多个程序来改变,程序的运行失去封闭性。致使不可再现性程序并发执行时,由于失去了封闭性,将导致也失去其运行结果的可再现性。程序和计算不在并发执行时,一个共享程序可为多个用户作业调用,而使该程序处于多个执行中,因而再对应形成了多个“计算”。注意:引入并发的目的是为了提高资源的利用率,从而提高系统的效率。程序并发执行,虽然能有效地提高资源利用率和系统吞吐量,但必须采取某种措施使并发程序保持“可再现性”。4 .多道程序
15、设计:注意一点:核心是并发。5 .进程(1)定义:进程是一个程序对某个数据集的一次运行活动。(进程是动态的概念,程序是静态的概念)(2)特征:动态性进程是程序在处理器上的一次执行过程过程。并发性多个进程同时存在于内存中,能在一段时间内同时运行。引入进程的目的是使程序能于其他程序并发执行,以提高资源利用率。独立性进程是一个能独立运行运行的基本单位,也是系统进行资源分配和调度的独立单位。异步性进程以各自独立的,不可预知的速度向前推进。结构特征为了描述和记录进程的运动变化过程,引入了进程控制模块PCBo从结构上看,进程=程序段蚀据段+PCB(3)3种基本状态:就绪状态进程已获得除了处理器以外的其他所
16、有资源。执行状态获得必要资源在CPU上面执行。阻塞状态正在执行的进程,由于发生某事件而暂时无法执行下去。(注意:当进程处于阻塞状态时,即使把处理器分配给该进程,也无法运行)三个状态相互转换::进程分配到处理机。:在分时系统中,正在执行的进程由于时间片用完而暂时被暂停执行。在抢占调度方式中,一个优先级高的进程可以抢占一个正在进行的优先级低的进程的处理机:因为某事件而无法执行。例如:临界资源被其他进程访问。:进程等待的事件发生而被唤醒。(4)引入挂起状态:在上面三个状态转换的基础上加入一个挂起状态。(5)为什么说PCB是进程存在的唯一标识?首先看PCB的作用:是系统为每个进程定义的一个数据结构,是
17、为了使程序能独立运行。PCB是为了保证程序的并发执行。创建进程实质是创建PCB,撤销进程,实质上是撤销PCB.接下来:PCB保存着处理机的状态信息,系统总是通过PCB对进程进行控制。(6)进程的创建:一个进程可以创建若干个新的进程,新的进程又可以创建子进程。(一般用前趋图表示)过程:申请空白进程控制块f为新进程分配资源f初始化进程控制块f将新进程插入就绪队列(7)进程的终止:引起终止事件:正常结束越界错误:程序所访问的存储区已越出该进程的区域。保护错误:以不适当的方法进行访问。特权指令错误:用户进程试图去执行一条只允许操作系统执行的指令。异常结束:非法指令错:试图去执行一条不存在的指令。运行超
18、时:执行时间超出指定的最大值。等待超时算数运算错:进程试图去执行一个被禁止的计算I/0故障外界干预过程:从PCB中读出进程的状态t终止进程执行并设置调度标志为真f如进程还有子孙进程,也予以终止T,归还进程的资源给系统t将被终止的进程的PCB从所在队列移除(8)进程的阻塞和唤醒:阻塞原语:执行状态f阻塞状态(进程自己调用)过程:停止当前进程的运行f保存该进程的CPU现场f停止运行该进程f转到进程调度程序唤醒原语:阻塞状态f就绪状态(另一个发现者调用)过程:将被唤醒进程从相应的等待队列中移除f将状态改为就绪并插入相应的就绪队列(9)调度方式:非剥夺方式(非抢占方式)即使有优先级高的进程进入就绪队列
19、,也直到正在进行的进程完成或者因某事件而进入阻塞时,才让优先级高的进程执行。剥夺方式(抢占方式)当有某个优先级更高的进程进入就绪队列,则立即暂停正在执行的进程,将处理器分配给优先级高的进程。(10)进程调度算法:先来先服务(最简单):按照进入就绪队列的先后次序来分配处理器。短作业优先(SJF):把处理器分配给最快完成的作业。优先级调度:把处理器分配给优先级最高的进程。按进程累确定(系统进程用户进程)静态优先级.按作业的资源要求(申请资源越多,优先级越低)进程优先级按用户类型和要求(收费标准越高,优先级越高)占用CPU时间长短(时间越长,优先级越低)动态优先级I等待CPU时间长短(时间越长,优先
20、级越高)时间片轮转(分时系统):等将所有就绪进程按时间先后排成队列,进程调度选择第一个进程执行,并规定一个时间(时间片),当一进程执行完规定的时间,即使没有执行结束,也把它送到队尾,轮流进行,直到所有进程都执行结束。时间片的大小(系统响应时间(进程数目一定,时间片大小与系统响应时间成正比)决定因素:就绪队列中的进程数目(响应时间一定,时间片大小与进程数目成反比)系统的处理能力(速度越快,时间片越短)高响应比优先调度:综合了先来先服务和短作业优先(每次进行作业调度时,先计算就绪队列中的每个作业的响应比)响应比=作业响应时间作业等待时间+估计运行时间估计运行时间估计运行时间多级队列调度:根据进程的
21、性质或类型,将就绪队列划分为若干个独立的队列,每个进程固定地分属于一个队列。每个队列采用一种调度算法,不同的队列可以采用不同的调度算法。例:为交互型任务设置一个就绪队列,该队列采用时间片轮转调度算法;为批处理任务另外设置一个就绪队列,该队列采用先来先服务调度算法。(通过调整进程优先级和时间片的大小,可以兼顾多方面的系统目标。)优先级逐渐降低时间片逐渐增大多级反馈队列调度:综合了时间片轮转调度算法和优先级调度算法。(11)进程与线程的比较:线程进程调度独立调度的基本单位。同一进程中线程的切换不会引起进程的切换。拥有资源的基本单位。不同的进程中进行线程的切换将会引起进程的切换。拥有资源不拥有系统资
22、源,但是线程可以访问其隶属进程的系统资源。拥有资源的基本单位。并发性同一进程内的多个线程之间可以并发,大大提高了系统的吞吐量。多个进程可以并发执行。系统开销开销小开销大第四章进程同步与通信1.进程间的联系:资源共享关系共享CPU和I/O设备。进程同步的主要任务是保证进程能互斥的访问临界资源,为此,资源不允许用户进程直接使用,而由系统一一分配。相互合作关系进程同步的主要任务是保证相互合作的诸进程在执行次序上的协调,不会出现时间与空间有关的差错。2.临界资源定义:临界资源是指每次仅允许一个进程访问的资源。属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。3.临界区定义
23、:不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。每个进程中访问临界资源的那段代码称为临界区。3.生产者一消费者问题:(1个生产者1个消费者)描述:一组生产者向一组消费者提供产品,他们共享一个有界缓冲区,生产者向其中投入产品,消费者从中取走广品。解决方法:设一个数组来表示n个缓冲区的缓冲池。一个输入指针in表示下一个可投放产品的缓冲区。一个输出指针out指示下一个可获取产品的缓冲区。一个整型变量counter,初始值为0。生产者和消费者共享下面的变量:Typedef.Item;intn;itembuffern;intin,out,counter;指针in和out初始化为1
24、,在生产者进程使用一个局部变量nextp,用于暂存每次刚生产出来的产品。在消费者进程中使用一个局部变量nextc用于暂存每次要消费的产品。voidproducer()/生产者进程while(1)/(当为真时porduceaniteminnextp;while(counter=n)/当counter的值为n的时候,执行一条空操作,否则把nextpno-op;这个局部变量赋值给指针inbufferin=nextp;/in=(in+1)moden;/counter+;把nextp看成一个篮子,当生产者投放一个产品后,/counter的值+1把篮子头的东西放进去指针in向后移动一位voidconsum
25、er()/(消费者进程while(1)/当为真时while(counter=0)/当counter的值为0的时候,执行一条空操作no-op;nextc=bufferout;/把缓冲池上的东西放到篮子头去,再拿去消费out=(out+1)moden;/counter-;/ounter消费者取走一个产品后,输入指针的值-1out向后移动一位consumetheiteminnextc;空闲让进当临界资源处于空闲状态时,可以允许一个要求进入临界区的进程进入自己的临界区,有效地利用临界资源。忙则等待当已经有进程处于自己的临界区时,其他所有想要进入临界区的进程都必须等待,以保证进程互斥。有限等待对要求访问
26、临界资源的进程,应保证该进程能在有效地时间内进入自己的临界区,以免陷入“死等”的状态。counter的值不同。问题:关键在于counter的值失去了可再现性,如果两个进程并发执行时,就会使4.同步机制应该遵循的准则:让权等待当进程不能进入自己的临界资源,应立即释放处理机,以免陷入“忙等”状态。(处理机本身是临界资源)5.软件方法解决互斥问题:算法1:(强行轮流法)设置一个公用变量turn,用于指被允许进入临界区的进程的编号。进程pl和p2,p3访问临界资源,turn=1表示pl可以访问,访问完之后trun变成2,p2可以访问。问题:如果p2暂时不想访问,p3想访问,就必须等到p2访问完之后才能
27、访问。算法2:(查看标志法)设置一个数组,pl的flag0=1表示pl正在访问,p2的flag1=1表示p2正在访问,p3的flag2=1表示p3正在访问。问题:如果3个进程都要访问,都发现对方的flag为0,所以3个进程都进入临界区,违背了要互斥访问临界资源的原则了。算法3:(先标记,再看别人)设置一个数组,flag0=1表示p1希望进入临界区,然后去查看p2的flag1=1,表示p2也想进入或者p2已经进入了临界区,那么p1等待。问题:当3个进程都要进入临界区,当检查到对方的flag为1,每个进程都等待,结果每个人没有访问到临界资源。算法4:(君子裁判法模式,算法1+算法3)设置一个数组和
28、一个turn变量。Flag0=1表示p1要求进入临界区或者正在临界区中执行。While(1)(Flag0=1;turn=2;/p1想进入临界区,就先把flag0=1,然后将turn变成2,去While(flag1=1&&turn=2)试探进程p2。flag1=1&&turn=2的反义词就是flag1=0No-op;orturn=1Criticalsection;Flag0=0;6 .用硬件方法解决进程互斥:P102(1)利用Test-and-set指令实现互斥(2)利用Swap指令实现进程互斥主要思想:用一条指令完成标志的检查和修改两个操作,因而保证了检查操作与
29、修改操作不被打断;或者通过中断屏蔽的方法来保证检查和修改作为一个整体执行。优点:适用范围广;简单;支持多个临界区。缺点:不能实现让权等待(需要软件配合进行判断)。7 .信号量机制:(1)基本思想:在多个相互合作的进程之间使用简单的信号来同步。(2) PV操作:信号量是一个确定的二元组(s,q),其中s是一个具有非负初值的整型变量,设s为一个信号量;q是一个初始状态为空的队列。P(s)完成以下动作:先执行s=s-1,若执行后的s>=0,则进程继续执行;若执行后的s<0,则阻塞该进程,并插入到信号量的等待队列中。(申请资源wait)V(s)完成以下动作:先执行s=s+1,若执行后的s&
30、gt;0,则进程继续执行;若执行后的s<=0,则从该信号量等待队列中移除第一个进程,并插入到信号量的等待队列中。(释放资源signal)(3)记录型信号量机制:有一个用于代表资源数目的整型变量vlaue和一个进程链表L,用于链接所有等待该信号量代表资源的进程。描述如下:typedefstruct(intvalue;/代表资源数目listofprocess*L;/进程链表L(记录所有需要资源的进程)semaphore(4)利用信号量实现进程互斥为临界资源设置一个信号量mutex,并且初值为1,然后将个进程的临界区放在wait(mutex)和signal(mutex)之间。(5)利用信号量描
31、述程序或者语句的前趋关系(P105)8.信号量集机制(1) And信号量集机制p105基本思想:将进程在整个运行过程中所需要的所有临界资源一次性全部分配给进程,使用完之后再一起释放。对若干个临界资源的分配采取原子操作,要么全部分配到进程,要么一个也得不到。(2) 一般信号量集机制p106基本思想:当一次需要n个某类资源时,便需要进行n次wait操作,显然是低效的。所以需要进行判断:当资源数量低于某一下限时便不予分配。几种特殊情况:Wait(s,d,d)只有一个信号量,但是允许每次申请d个资源,当现有资源数少于d时,不予分配。Wait(s,1,1)一般记录型信号量。Wait(s,1,0)当s&g
32、t;=1时,允许多个进程进入某个特定区,当s变为0时,阻止任何进程进入特定区。9.经典同步问题:(1)生产者一消费者问题:利用记录型信号量解决生产者一消费者问题。(P107-P109)描述:在生产者和消费者之间的公用缓冲池中有n个缓冲区,设置一个互斥信号量mutexo一个输入指针in表示下一个可投放产品的缓冲区。一个输出指针out指示下一个可获取产品的缓冲区。(指针in和out初始化为1)在生产者进程使用一个局部变量nextp,用于暂存每次刚生产出来的产品。在消费者进程中使用一个局部变量nextc用于暂存每次要消费的产品。资源信号量empty和full分别表示空缓冲区数量和满缓冲区数量。代码描
33、述:semaphoremutex=1;/缓冲区进行操作的互斥信号量semaphoreempty=n;/空缓冲区的数量为nsemaphorefull=0;/满缓冲区的数量为0itembuffern;/数组表示缓冲区个数intout=in=0;voidproducer()(while(1)(produdeaniteminnextp;/nextp是一个临时缓冲区,比喻成一个篮子。wait(empty);/申请一个空的缓冲区(保证要有一个空的缓冲区)wait(mutex);/申请使用缓冲池bufferin=nextp;/将产品放入缓冲池。把nextp看成一个篮子,把篮子头的东西放进去in=(in+1)
34、modn;/当生产者投放一个产品后,指针in向后移动一位signal(mutex);/缓冲池使用完毕,释放互斥信号量signal(full);/增加一个满缓冲池voidconsumer()while(1)wait(full);/申请一个满缓冲池(保证要有个一个满的缓冲区)wait(mutex);/申请使用缓冲池nextc=bufferout;/把缓冲池上的东西放到篮子头去,再拿去消费out=(out+1)modn;/消费者取走一个产品后,输入指针out向后移动一位signal(mutex);/缓冲池使用完毕,释放互斥信号量signal(empty);/增加一个空的缓冲池main()cobegi
35、nproducer();consumer();利用AND言号量集机制解决生产者一消费者问题:P109-110描述:只有缓冲区全满或者全空的时候,指针in和out才会指向同一缓冲区,所以可以设置两个互斥信号量mutex1和mutex2。代码描述:semaphoremutex1=mutex2=1;/缓冲区进行操作的互斥信号量semaphoreempty=n;/空缓冲区的数量为nsemaphorefull=0;/满缓冲区的数量为0itembuffern;/数组表示缓冲区个数intout=in=0;voidproducer()while(1)produdeaniteminnextp;/nextp是一个
36、临时缓冲区,比喻成一个篮子。Swait(empty,mutex1)/申请一个空的缓冲区(保证要有一个空的缓冲区)和申请使用缓冲池bufferin=nextp;/将产品放入缓冲池。把nextp看成一个篮子,把篮子头的东西放进去in=(in+1)modn;/当生产者投放一个产品后,指针in向后移动一位Ssignal(mutex1,full)/缓冲池使用完毕,释放互斥信号量和增加一个满缓冲池)voidconsumer()(while(1)(Swait(full,mutex2)/申请一个满缓冲池(保证要有个一个满的缓冲区)和申请使用缓冲池nextc=bufferout;/把缓冲池上的东西放到篮子头去,
37、再拿去消费out=(out+1)modn;/消费者取走一个产品后,输入指针out向后移动一位Ssignal(mutex2,empty)/缓冲池使用完毕,释放互斥信号量并且增加一个空的缓冲池)main()(cobegin(producer();consumer();)利用管程解决生产者一消费者问题:P117描述:建立一个管程命名为P-C,其中包含两个过程:(1) put(item)生产者将自己生产的产品投放到缓冲池,并用count来表示在缓冲池已有的产品数目(2) get(item)消费者从缓冲池取得一个产品。P-C代码描述:monitorP-C(intin,out,count;itembuff
38、ern;conditionnotfull,notempty;entryput(item)/生产者生产产品(if(count>=n)notfull.wait;/生产者需要等待一个空的缓冲区。bufferin=nextp;/否则,将篮子里面的产品放到空的缓冲区in=(in+1)modn;/指针in向后移动一位count+;/count的值+1notempty.signal;/释放之后,多了一个满的缓冲区)entryget(item)/消费者消费产品(if(count<=0)notempty.wait;/消费者需要等待一个满的缓冲区。nextc=bufferout;/把缓冲池上的东西放到
39、篮子头去,再拿去消费out=(out+1)modn;/消费者取走一个产品后,输入指针out向后移动一位count-;notfull.signal;/释放之后,多了一个空的缓冲区)int=out=0;/初始化count=0;)(2)读者一写者问题:利用记录型信号量解决读者一写者问题:P111(读者优先)问题描述:“读者优先”除了某个写者正在访问数据之外,任何情况下读者想要访问数据均可以直接进行访问,即只要存在读者正在访问数据,后续到达的那些欲访问数据的读者就无须判断此时是否存在等待访问数据的写者,均直接访问。设置变量描述:设置互斥信号量mutex,实现读者与写者的互斥,读者与写者之间有一个数据区
40、。整型变量readcount表示正在读的进程的数目。仅当readcount=0时,没有读者进程在进行,此时需要执行wait(mutex),操作成功,读者进程就可以进入临界区。相应的,当readcount-之后的值为0,执行signal(mutex)。为readcount设置一个互斥信号量rmutex。代码描述:Semaphorermutex=mutex=1;/intreadcount=0;/用于记录读者数量voidreader(inti)(while(1)(wait(rmutex);/读者去申请readcount的使用权if(readcount=0)/如果readcount的值为0,那么就去申
41、请使用数据区。否则直接readcount+1wait(mutex);readcount+;signal(rmutex);/释放掉rmutex,让后面进来的读者可以申请到readcount,performreadoperation;/开始读的操作wait(rmutex);/再去申请rmutex使得readcount-1。readcount-;if(readcount=0)/判断readcount的值,判断是否是最后一个读者然后好释放mutexsignal(mutex);signal(rmutex);)Voidwriter(inti)(While(1)(Wait(mutex);Performwri
42、teoperation;Signal(mutex);)Main()Cobegin/并发执行Reader(1);.Reader(n);Writer(1);.Writer(m);)利用信号量集机制解决读者一写者问题:P112(读者优先)描述:增加了一条限制,即最多只允许RN个读者进去同时读。所以引入了一个信号量L并赋予初值RZ代码描述:#defineRNsemaphoreL=RNmx=1;设置一个信号量L和mx(若mx=1读者可以进去读,若mx=0写者可以进去读)voidreader()while()swait(L,1,1);/进去一个读者进行判断(相当于限制房间的座位数)swait(mx,1,0
43、);/再进行mx的判断,mx=1读者可以进去读,mx=0写者可以进去写performreadoperation;signal(L,1);/释放掉一个L(相当于增加一个座位数)voidwriter()while(1)swait(mx,1,1,L,RN,0);/当mx=1时,mx-1=1-1=0<1(开关关闭)并且L=RN,L-RN=0(没有读者performwriteoperation;在房间里面),写者才进去进行写的操作。signal(mx,1);/写完之后释放掉mx使其+1,让下一个想进入房间的读者或者写着能够打)开门。)利用管程解决读者一写者问题:P120(写着优先)问题描述:在写者
44、访问数据时,若后面的等待队列里面还有等待的写者,那么就会优先唤醒等待的写者,直到等待的写者都访问完数据,最后一个写者访问完数据时,就唤醒其他等待的所有读者。变量的描述:设置两个计数器readercount和writercount分别对读者进程和写者进程计数。设置条件变量R和W分别表示允许读者读和允许写者写代码描述:monitorreader-writer(intreadercount,writercount;conditionR,W;entrystart_read/开始读的方法if(writercount>0)R.wait;/readercount+;先判断有没有写者正在访问数据或者等待
45、访问数据,如果有,么就R.wait并且readercount+1R.signal;entryend_read/结束读的方法readercount-;if(readercount=0)W.signal;entrystart_write/开始写的方法writercount+;/先让writercount+1增加一个写者if(readercount>0)|writercount>0)W.wait;/如果readcount>0或者writercount>0那么W.waitentryend_write/结束写的方法writercount-;/先让writercount-1少了一个
46、写者,再判断-1之后的writercount的if(writercount>0)W.signal;值,如果0,就允许写者写,否则允许读者读。elseR.signal;readercount=writercount=0;/初始化;(3)哲学家进餐问题:利用管程解决哲学家进餐问题:P118问题描述:哲学家有三种状态:饥饿,思考,进餐。三个过程:pickup(inti):拿起筷子准备进餐。只要他处于饥饿状态并且左右的两个人都没有进餐的话,就允许他进餐,否则的话就用self(i).wait推迟自己进餐。putdown(inti):放下筷子准备思考。他吃完饭就去看左右两边的哲学家,如果都饥饿并且没
47、有进餐的话,就让他们进餐。Test(inti):这个是测试过程。测试哲学家是不是具备进餐的条件:自己饥饿,左右两边的人都没有进餐。代码描述:Monitordining-philosophers(enumstatus(thinking,hungry,eating);enumstatus5;conditionself5;/entrypickup(inti)/(statei=hungry;/test(i);/if(statei!=eating)/self(i).wait;)Entryputdown(inti)/(Statei=thinking;Test(i-1mode5);/Test(i+1mode
48、5);/定义的一个数据结构条件变量用一个数组表示拿起筷子准备进餐首先判断是不是饥饿。再调用test函数去测试具不具备进餐的条件。如果不允许进餐的t那么就用self(i).wait来让自己推迟进餐。放下筷子开始思考测试左边的人具不具备进餐的条件。测试左边的人具不具备进餐的条件。)Test(inti);(If(statei-1mode5!=eating&&statei=hungry&&statei+1mode5!=eating)(Statei=eating;Selfi.signal;)(For(i=0;i<=4;i+)/循环5个哲学家执行上述过程。Statei
49、=thinking;);(4)嗜睡的理发师问题:P115问题描述:一个理发店里面有一个理发椅和n张沙发。没有顾客的话,理发师就去睡觉。当第一个顾客进入理发店时:如果理发师在睡觉,则去唤醒理发师为其理发。如果理发师在理发,则找一个空沙发坐下等待。如果没有空沙发了,则离开。设置变量描述:设置信号量customers来实现只有理发椅空闲时,顾客才能坐到上面等待理发师理发,否则等待。设置信号量barbers来实现只有当理发椅上面有顾客时,理发师才开始理发,否则等待。设置一个整型变量waiting来对沙发上等待的顾客数量。由于waiting被对个顾客互斥访问,故设置一个信号量mutex来实现。代码描述:
50、Semaphorecustomers,barbers,mutex;customers=0;barbers=0;waiting=0;mutex=1;barbers()/理发师进程while(1)wait(customers);/先去申请理发椅上的顾客wait(mutex);/再去申请一个在外面沙发等待的的顾客。waiting=waiting-1;/这时,在外面等彳f的顾客数量-1signal(barbers);/这时理发椅上面有顾客,便唤醒理发师。signal(mutex);/释放掉mutex让下一个顾客可以申请理发椅。cuthair;/开始剪发。customer(inti)wait(mutex
51、);/申请一个空沙发的位置。(相当于mutex是大门)if(waiting<n)waiting=waiting+1;signal(customers);/唤醒一个在理发椅上面的顾客signal(mutex);/释放掉mutex以便下一个进来大门的顾客可以申请到。wait(barbers);/申请理发师来理发haveahaircut;elsesignal(mutex);leave;10.管程机制管程的概念:Hansan为管程所下的定义:“一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据”。管程的组成:一局部于管程的共享变量说明
52、;一对该数据结构进行操作的一组过程;一对局部于管程的数据设置初始值的语句11.进程通信概念:(1)进程通信是指进程之间的信息交换。(2)进程的互斥和同步可归结为低级通信。(3)高级进程通信:用户可直接利用操作系统所提供的一组通信命令高效地传送大量数据的一种通信方式。12.进程通信的类型:(1)共享存储器系统:1基于共享数据结构的通信方式(只适合传递少量数据)2基于共享存储区的通信方式(属于高级通信,为了传递大量数据)(2)消息传递系统:进程间的数据交换以消息为单位。分为直接和间接通信方式(信箱通信方式)。(3)管道通信:管道是指用于连接一个读进程和一个写进程以实现它们之间通信的共享文件,又称为
53、pipe文件(以字符流的形式将数据送入管道)。为了协调双方的通信,管道通信机制必须提供以下三方面的协调能力:互斥、同步、双方是否存在。13 .直接通信和间接通信(1)直接通信:直接通信方式是指发送进程利用操作系统所提供的发送命令直接把消息发送给目标进程。系统提供下述两条通信原语:send(receiver,message);receive(sender,message);利用直接进程通信原语来解决生产者-消费者问题P123(2)间接通信:进程之间的通信需要通过作为某种共享数据结构的实体,该实体用来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方发送给自己的消息。通常把这种中间实体称为信箱(可由操作系统或用户进程创建。分为私有信箱、共有信箱、共享信箱)(3)发送进程和接收进程的关系:一对一关系、多对一关系、一对多关系、多对多关系。14 .消息缓冲队列通信机制发送原语,接受原语P12515 .死锁:(1)定义:在多道程序系统中,一组进程中的每一个进程均无限期地等待被该组进程中的另一个进程所占有且永远不会释放的资源;这种现象称
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年的购房定金合同模板
- 2025电子产品购销合同范文模板
- 2025农业合作经营合同
- 2025年大坝加固工程合同管理与风险评估研究
- 2025企业采购专项法律服务合同
- 房屋中介服务居间合同书
- 二零二五合同付款补充协议
- 二零二五股东转让协议范例
- 房地产买卖合同书样式
- 电子商务的电子合同书与电子签名
- GB/T 15593-2020输血(液)器具用聚氯乙烯塑料
- GB 16410-2007家用燃气灶具
- 铁碳合金的相图解读
- 2023年复旦大学博士研究生入学考试专家推荐信模板
- 中小学教师资格证面试课件讲义
- 全国初中英语优质课大赛一等奖《八年级Unit 6An old man》说课课件
- 云南省饮用水生产企业名录534家
- 湖北地区医院详细名单一览表
- 麦肯锡入职培训第一课:让职场新人一生受用的逻辑思考力新员工培训教材
- 苏霍姆林斯基教育思想-PPT课件
- 金属压铸机的plc控制
评论
0/150
提交评论