计算机操作系统 学习笔记(第四版 汤小丹)(上)

第一章-操作系统概述

操作系统基本概念

操作系统(Operation System),简称OS,是管理计算机『硬件』与『软件』资源的计算机程序。它负责计算机的全部软、硬资源的分配、调度工作,控制和协调并发活动,实现信息的存取和保护。

操作系统的目标和作用

在计算机系统上配置操作系统,其主要目标是:方便性(管理系统资源),有效性(方便用户使用),可扩充性和开放性(作为扩充机器)。
操作系统的作用:
①作为用户与计算机硬件系统之间的接口
②作为计算机资源的管理者(资源可分为四类处理机,存储器,I/O设备以及文件(数据和程序))
处理机管理
1.进程控制
2.进程同步
3.进程通信
4.调度
储存器管理
1. 内存分配
2. 内存保护
3. 地址映射
4. 内存扩充
IO设备管理
1. 缓冲管理
2. 设备分配
3. 设备处理
文件管理
1.文件存储空间的管理
2.目录管理
3.文件的读/写管理和保护
③实现了对计算机资源的抽象
开放了简单的访问方式(接口),隐藏了实现细节(封装)

计算机系统的组成

计算机系统主要由硬件和软件两部分组成:
硬件部分:指其物理装置本身,包括各种处理器(如中央处理器、输入输出处理和该系统中的其他处理器)、存储器、输入输出设备和通信装置;
软件部分:指由计算机硬件执行以完成一定任务的所有程序及其数据。

操作系统的发展过程

1,操作系统内的发展过程
(1),手工操作阶段
①人工操作方式
②脱机输入/输出方式
(2),批处理阶段
①单道批处理系统
②多道批处理系统
(3),分时操作系统
(4),实时操作系统
(5),微机操作系统的发展
2,单道批处理系统(OS前身)
将一批作业输入磁带,并配置监督程序(OS),在此程序调度下保持作业能被连续处理
优点:自动性(不需人工干预),顺序性,单道性
缺点:内存中只有一道程序,CPU需要等待I/O完成
3,多道批处理系统
将批量作业存在外存,由作业调度程序按照一定的算法从外存中选择若干作业调入内存,使其共享资源
优点:提高CPU的利用率(I/O时可同时处理),可提高内存和I/O设备利用率,增加系统吞吐量
缺点:平均周转时间长(全部完成后输出结果队列),无人机交互(等结果)
4,单道批处理和多道批处理系统对比
单道批处理系统:主要解决CPU、内存和I/O设备利用率不足的问题
多道批处理系统:主要解决I/O操作时CPU闲置问题
5,分时操作系统(Time Sharing System)
一台主机连接多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享主机中的资源。
优点:人机交互,共享主机,便于用户上机
缺点:作业/用户优先级相同,不能优先处理紧急任务
6,实时操作系统(Real Time System)
系统能即时响应外部事件的请求,在规定的时间(毫秒级)内完成对该事件的处理,并控制所有实时任务协调一致地运行。
实时任务
周期/非周期性实时任务(根据周期性)
硬/软实时任务(根据截止时间)
7,实时系统与分时系统比较
多路性:按照分时原则为多个终端用户服务
独立性:系统中的每个终端用户在与系统交互时,彼此相互独立互不干扰
及时性:以用户能接受的等待时间为准
交互性:人与系统的交互性仅限于访问系统中的某些特定的服务程序
可靠性:多级容错,保障系统和数据的安全(出现不同级别的错误如何处理)
8,其它操作系统
络操作系统
资源共享
远程通信
分布式操作系统(服务器端)
分布性
并行性

操作系统的基本特征

os的四个基本特征,并发,共享,虚拟,异步
1,并行与并发(concurrence)
并行性是指两个或多个事件在同一时刻发生
并发性是指两个或多个事件在同一时间间隔发生
2,共享性(Sharing)
在os环境下的资源共享或称为资源复用,是指系统中的资源可供内存中多个并发执行的进程共同使用
(宏观上限定了事件是进程在内存期间,限定了地点内存
同时访问方式:同一时段允许多个程序同时访问共享资源
互斥共享方式:也叫独占式,允许多个程序在同一个共享资源上独立而互不干扰的工作
3,并发和共享互为存在条件
共享性要求OS中同时运行着多道程序
若只有单道程序正在运行,则不存在共享的可能
并发性难以避免的导致多道程序同时访问同一个资源
若多道程序无法共享部分资源(比如磁盘),则无法并发
4,虚拟(Virtual)
(1)时分复用技术:提高资源利用率的根本原因在于,它利用某设备为一用户服务器的空闲时间,又转去为其他用户服务,使设备得到最充分的利用
(2)虚拟处理机技术:利用多道程序设计技术,为没到程序建立至少一个进程,让多道进程并发执行
(3)虚拟设备技术:通过分时复用的方法,将一台物理I/O设备虚拟为多台逻辑上的I/O设备,并允许多个用户占用一台逻辑上的I/O设备
5,异步(Asynchronism)
多道程序环境下,允许多个程序并发执行;单处理机环境下,多个程序分时交替执行;
程序执行的不可预知性,获得运行的时机
因何暂停
每道程序需要多少时间
不同程序的性能,比如计算多少,I/O多少
宏观上“一气呵成”,微观上“走走停停”

操作系统的主要功能

处理机管理, 存储器管理, 设备管理,文件管理, 用户接口, 现代操作系统的新功能
1,处理机管理
处理机管理以进程为单位
主要功能
(1)进程控制:创建、撤销进程(线程)
(2)进程同步:协调多个进程(线程)的运行
(3)进程通信:实现进程(线程)间信息交换
(4)进程调度:按一定算法为进程(线程)分配处理机使用权
2,存储器管理
目的: 提高利用率,方便用户使用,从逻辑上扩充内存,提供足够的存储空间 ,方便进程并发运行。
(1)内存分配
(2)内存保护
(3)地址映射
(4)内存扩充
3,设备管理
目的 完成用户进程提出的I/O请求,为用户进程分配所需的I/O设备,完成指定的I/O操作,提高CPU和I/O设备的利用率
(1)缓冲管理
(2)设备分配
(3)设备处理
4,文件管理
目的: 对用户文件和系统文件进行管理,方便用户使用,并保证文件安全性
(1)文件存储空间管理
(2)目录管理
(3)文件读写管理与保护
5,用户接口
目的: 为用户提供使用系统的渠道
(1)命令接口
(2)程序接口
(3)图形接口

第二章-进程的描述与控制

前趋图和程序执行

1.程序的顺序执行
一个程序由若干个程序段组成,而这些程序段的执行必须是顺序的,这种程序执行的方式就称为程序的顺序执行。
2. 程序顺序执行时的特征
(1) 顺序性
处理机的操作严格按照程序所规定的顺序执行。
(2) 封闭性
程序一旦开始执行,独占全机资源,其计算结果不受外界因素的影响。
(3) 可再现性
程序执行的结果与它的执行速度无关(即与时间无关),而只与初始条件有关
3,前趋图
前趋图是一个有向无循环图(DAG),用于描述进程之间执行的前后关系
4,程序并发执行时的特征
(1)间断性
在多道程序设计的环境下,程序的并发执行,以及为完成一项任务而相互合作,这些程序之间要共享系统的资源,形成了相互制约的关系。
相互制约导致并发程序具有“执行—暂停—执行”这种间断性的活动规律。
(2)失去封闭性
程序在并发执行时,系统的资源状态由多道程序来改变,程序运行失去封闭性。程序的运行受到其他程序的影响。
(3)不可再现性
程序在并发执行时,多次运行初始条件相同的同一程序会得出不同的运行结果。
例:共享公共变量的两个程序,它们执行时可能产生不同结果。

进程的描述

在多道程序设计的环境下,为了保证程序执行时依然保持顺序性、封闭性和可再现性,必须引入新的概念——进程。
1,进程的定义
(1)进程是程序的一次执行
(2)进程是一个程序及其数据在处理及上顺序执行是所发生的活动
(3)进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
行为的一个规则叫做程序,程序在处理机上执行时所发生的活动称为进程(Dijkstra) 。
进程(有时称为任务)是一个程序与其数据一道通过处理机的执行所发生的活动。(Alan.C. Shaw)
进程是执行中的程序。(Ken Thompson and Dennis Ritchie)
2、进程的特征(与程序比较)
(1) 结构特征
进程控制块(PCB) + 程序段 + 数据段 = 进程实体(进程)
PCB(Process Control Block):用来描述进程的基本情况和活动过程,便于系统控制和管理进程,是进程的唯一标识。
(1) 动态性–最基本特征
进程:进程实体的一次执行过程,有生命周期。
程序:程序是一组有序指令的集合,是静态的概念
(2) 并发性
指多个进程实体同存于内存中,且能在一段时间内同时运行。
程序不可并发,静态
(3) 独立性
进程实体是一个能够独立运行,独立获得资源和独立接受调度的基本单位
(4) 异步性
进程按各自独立的、不可预知的速度向前推进
3、进程的三种基本状态
(1)就绪状态(Ready)
创建进程后,进程已分配到除CPU之外的所有必需的资源,只要再获得cpu,立即可以运行。
(2)执行状态(Running)
进程已获得运行所必需的全部资源,它正在处理机上执行。
(3)阻塞状态(Blocked)
正在执行的进程由于发生某事件(例:I/O得不到满足)而暂时无法执行时,便放弃处理机而处于暂停状态,称该进程处于阻塞状态或等待状态
4,三种基本状态的转换
处于就绪状态的进程,在调度程序为之分配了处理机之后便可执行,相应的,其状态就由就绪状态转为了执行态;正在执行的进程(当前程序)如果因分配给它的事件片已完而被剥夺处理机暂停执行,其状态就由执行转为就绪
5、挂起状态
原来内存中的就绪队列与阻塞队列,占用了内存资源,可引入挂起状态将其移入外存,便可暂时搁置。
(1) 引起挂起状态的原因:
终端用户的请求
父进程请求
负荷调节的需要
操作系统的需要
(2)活动就绪和静止就绪
活动就绪:当进程处于未被挂起的就绪状态就是,称此活动为就绪状态
静止状态:当进程被Suspend挂起后,该进程便转为静止就绪状态。
活动阻塞:进程处于未被挂起的阻塞状态
静止阻塞:进程被挂起后的阻塞
(3) 三个进程状态的转换
①活动就绪–>静止就绪
②活动阻塞–>静止阻塞
③静止就绪–>活动就绪
④静止阻塞–>活动阻塞

进程控制块

存放进程管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,在创建进程时,建立PCB,并伴随进程运行的全过程,直到进程撤消而撤消。
PCB就像我们的户口。
PCB是进程存在的唯一标志。
系统的所有PCB组织成链表或队列,常驻内存的PCB区
1,,进程控制块的作用
作为进程独立运行基本单位的标志
能实现间断性的运行方式
提供进程管理所需要的信息
提供进程调度所需要的信息
实现与其它进程的同步与通信
2,,进程控制块中包含的信息
(1) 进程标示符
每个进程都必须有一个唯一的标识符
内部标示符(系统)
外部标示符(用户)
(2) 处理机状态
主要有处理机的各种寄存器中的内容组成。处理机运行时的信息若被中断(时间片用完),则将其放置在PCB中。
(3) 进程调度信息
进程状态(进程所处于什么状态,为进程调度提供依据)
进程优先级
进程调度所需的其他信息
事件(引起进程状态转变的事件)
(4) 进程控制信息
程序和数据的地址(访问数据位置)
进程通信和同步机制
资源清单(进程所需资源,不同进程的不同资源)
链接指针(上一进程执行完后下一个进程的地址)
3,进程控制块的组织方式
(1) 链接方式
把具有同一状态进程的PCB分别通过PCB中的连接字连接成一个队列,用链接成一个队列。
(2)索引方式
即系统根据所有进程的状态的不同,建立几张索引表,并把各索引表在内存的首地址记录在内存的专用单元中。(索引表的表目中记录了相应状态的某个PCB在PCB表中的地址)

进程控制

学习目标:
理解进程树
掌握进程的创建与终止
掌握进程的阻塞与唤醒
掌握进程的挂起与激活
1,定义:进程控制是对系统中的全部进程实施有效的管理,包括进程创建、终止、进程阻塞和唤醒。
2,OS 内核:在现代OS中,常把一些功能模块(与硬件紧密相关的、常用设备的驱动程序及运行频率较高的)放在紧靠硬件的软件层次中,加以特殊保护,同时把它们常驻内存,以提高OS的运行效率,这部分功能模块就称OS的内核
内核是基于硬件的第一层软件扩充,它为系统控制和管理进程提供了良好的环境。
3,OS内核包含两大功能:
(1),支撑功能
中断处理
程序运行时发生的中断操作,系统调用、I/O操作,进程调度等都依赖中断处理
时钟管理
时间片轮转调度、截止时间控制等都依赖时钟管理
原语操作
原语,指有若干条指令组成,用于完成一定功能的一个过程。
原子操作,一个操作中的所有动作要么全做,要么全不做。
(原语在执行过程中不允许被中断)
(2),资源管理功能
进程管理
存储器管理
设备管理
4,进程树
进程图是用来描述进程关系的有向树,用来描述一个进程的家族关系
结点代表进程,结点间的有向边代表父子关系
父子进程:进程A创建进程B,则A称为B的父进程,B称为A的子进程
祖先进程:父进程的创建者
子进程可以从父进程继承资源,子进程结束后要将资源归还其父,父进程终止时要同时终止其子
5,引起进程创建的事件
① 用户登录:合法用户登录时,在终端为其建立一个初始化进程,并插入就绪队列,该进程通常会用来配置用户工作环境。(分时操作系统)
②作业调度:每个被调度到的作业会被分配相应PCB(创建进程)并分配资源,最后放入就绪队列
③ 提供服务:为了响应用户的请求,创建一个新的进程完成所需服务
④ 应用请求:由应用进程自身创建一个或多个完成特定功能的子进程
6,进程的创建
发生上述创建进程的典型事件后,Create原语将按照下述步骤创建新进程
① 申请空白PCB:为新进程申请新的进程 (数字标识符),同时从PCB集合中索取一个空白PCB
② 分配资源:为进程分配运行时所需各种资源并放入PCB,如内存、文件、I/O设备和CPU时间等
③ 初始化PCB:包括对标识信息、处理机状态信息和控制信息的初始化(记录)
④ 将新进程插入就绪队列:上述工作顺利完成后,如果就绪队列未满,即可插入就绪队列等待CPU
7,引起进程终止的事件
(1)正常结束
当进程运行到结束指令,则该进程生命期结束,撤销PCB并释放资源
(2)异常结束
①进程运行期间出现异常而被迫终止进程,通常有越界错、非法指令、特权指令错、运行超时、等待超时等
②外界干预:进程自身运行正常时,应外界请求而终止,通常有操作人员干预请求、父进程请求、父进程终止等
8,进程终止过程
① 根据进程标识符寻找其PCB并读取进程状态;
② 对正在执行的进程,应立即终止,并置CPU调度状态为真;
③对具有子孙的进程,应同时终止其子孙,避免不可控进程的出现
④被终止进程的资源要归还系统或其父
⑤被终止进程的PCB从所在队列或链表中清除
9,引起进程阻塞和唤醒的典型事件
请求系统服务:正在执行的进程申请的资源无法响应时,暂时阻塞
等待某种操作完成(某进程必须等待I/O操作才可继续执行)
新数据尚未到达(两个合作进程其中一个需要数据)
无新工作可作(进程:发送数据包)
10,进程阻塞过程
① 进程阻塞时首先调用阻塞原语block阻塞自身
②进入block过程时,先要停止进程执行
③ 修改PCB状态为阻塞,并按照阻塞原因将其放入阻塞队列
④保存当前处理机状态(PCB),以便日后再次执行可以从断点正确继续
⑤将处理机分配给另一就绪进程,并进行切换
⑥进程阻塞是进程本身的主动行为
11,进程唤醒过程
当进程所期待的事件发生后,相关的其他进程(比如用完临界资源并释放的进程)将调用唤醒原语wakeup
被阻塞的进程将从阻塞队列中移出
修改被阻塞进程的PCB状态为就绪,并放入就绪队列等待CPU
12,进程挂起
需要挂起进程时,首先调用挂起原语suspend,将指定进程或处于阻塞的进程挂起
正在执行的进程被挂起时,转向调度程序重新调度
处于活动就绪或活动阻塞的进程,将要被转为相应的静止状态
被挂起进程的PCB需要复制到指定的内存区域,以备查询
13,进程激活
激活原语active执行时,将进程从外存调入内存
若为静止就绪,将状态改为活动就绪;若为静止阻塞,将状态改为活动阻塞
比较被激活的进程的优先级,若比当前运行进程的高,立即抢断;反之,等待运行

进程同步

学习目标
掌握临界资源与临界区的概念
掌握信 量机制
熟练使用信 量机制解决进程同步问题
理解管程机制
1、同步主要任务
对多个进程在执行次序上进行协调,使并发执行的各进程间能有效的共享资源和相互协作,从而使程序的执行具有可再现性
2,进程的两种制约关系
间接相互制约关系:源于资源共享,由于共享同一资源而形成的制约关系,例如打印机、图书馆的书 互斥
直接相互制约关系:源于进程合作,进程A的执行结果导致进程B的执行,进程B的执行影响进程A是否等待,例如缓冲区资源、流水线资源 同步
3、临界资源
临界资源(Critical Resource):把一段时间内只允许一个进程访问的资源称为临界资源或独占资源(打印机、教室)
临界区(Critical Section):每个进程中访问临界资源的那段代码称为临界区(执行打印操作的代码、在教室上课的行为/时间)
各进程必须使用互斥方式共享的临界资源
典型问题:生产者-消费者问题
4,生产者消费者问题
生产者与消费者进程都是异步方式运行,但两者之间必须保持同步
生产者和消费者本身互不干扰,互不关心
不允许消费者进程到空缓冲区取产品
不允许生产者进程向已装满产品且尚未被取走的缓冲区中放产品
线性缓冲区使用完后需要重置指针,使用不便
为了保证生产者进程与消费者进程的并发同步执行,使用环状缓冲池控制两者的工作
环状缓存池由多个缓冲区组成,每个缓冲区存放一个产品,生产者一次放一个产品,消费者一次使用一个产品
5,临界区
临界区:进程中访问临界软硬件资源的代码称为临界区(互斥区)
临界区的使用方法
进程在进入临界区前,先检查临界资源,若该资源未被访问,进程可以即刻进入临界区运行并激活临界资源正被访问的标识;反之,则不进入临界区
6,同步机制应该遵循的准则
空闲让进(无进程在临界区时允许其它进程访问)
忙则等待(互斥)
有限等待(保证有限时间内进入临界区访问,不能长时间等待)
让权等待(当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态
7,进程同步的基本概念
互斥:指多个进程不能同时使用同一个资源。
死锁:指多个进程互不相让,都得不到足够的资源。
饥饿:指某一个进程一直得不到资源(其他进程可能轮流占用资源)。
8,信 量机制
1965年荷兰Dijkstra提出的信 量(Semaphores)是一种卓有成效的进程同步工具,在长期的应用中,得到了很大的发展,从“整型信 量” 经过“记录型信 量”发展到“AND型信 量”,进而发展为“信 量集”机制。
信 量就是OS提供的管理公有资源的有效手段。
信 量代表可用资源实体的数量。
互斥信 量:为了管理临界资源,使多个进程互斥地访问临界资源,而设置的信 量。
9,整型信 量
定义:把整型信 量定义为一个用于表示资源数目的整型量S,除初始化外,仅能通过两个原子操作wait(S),signal(S)来访问(又经常被称为P,V操作)
P操作(进入区) wait(S):
While S<=0 do no-op;
S:=S-1;
V操作(退出区) signal(S):
S:=S+1;
10,记录型信 量
因为整形信 量并未遵循让全等待的准则,所以记录型信 量采取了让权等待的策略,但是又出现了多个进程等待访问同一临界资源的情况。
引入整型变量value(代表资源数目)、进程链表L (链接/放置所有等待进程/阻塞)
记录型数据结构:
type semaphore=record
value: integer;
L: list of process;(进程)
end;
11,Wait(P) 操作:
申请资源,减量操作,S.value:=S.value-1
当S.value<0时,表示资源分配完,进行自我阻塞,放置链表。
Signal(V)操作:
释放资源,增量操作,S.value:=S.value+1
当S.value≤0,唤醒S.L链表中的等待进程。
注:| S.value |为链表中因申请不上进程导致阻塞的进程数量
12,执行完wait操作后,若S.value<0,表示该类资源已分配完毕,进程调用block原语阻塞自己,放弃处理机,并插入到信 量链表L中。
执行完signal操作后,若S.value≤0,表示在链表中仍有等待该资源的进程被阻塞,因此要调用wakeup原语唤醒链表中的第一个进程。
若S.value初值为1,表示只允许一个进程访问临界资源,此时的信 量称为互斥信 量。
13, 利用信 量实现进程互斥(记录型信 量)
为使多个进程互斥的访问某临界资源,须为该资源设置一互斥信 量mutex,并设其初始值为1,然后将各进程访问资源的临界区置于wait(mutex)/进入区 和signal(mutex)/退出区 之间即可。

wait和signal必须成对出现
14,利用信 量实现前趋关系
设有两个并发执行的进程P1和P2,P1中有语句S1,P2中有语句S2,希望在S1执行后再执行S2。
方法:使进程P1和P2共享一个公用信 量S,并赋予其初值为0。(依然按照记录型信 量的操作)
一条语句后面有n条直接后继,则后面会跟n个signal(V)操作;若一条语句前面有n条直接前驱,则前面会有n个wait(P)操作
实现前驱关系:
先数箭头,箭头数量表示信 量数量
定义(箭头数量的)公用信 量,初始值为0
从第一个节点开始往后数后继关系,依据上面的原则进行各项操作

管城机制

P、V操作的优缺点
优点:简单,而且表达能力强(用P、V操作可解决任何同步互斥问题)
缺点:不够安全;P、V操作使用不当会出现死锁;遇到复杂同步互斥问题时实现复杂
1,为降低管理分散在各个进程中大量信 量的困难,以及避免同步操作不当所导致的死锁,引入管程作为新的同步工具
管程是管理进程间同步的机制,它保证进程互斥地访问共享变量,并方便地阻塞和唤醒进程。管程可以用函数库的形式实现,比信 量好控制。
2,基本思想:把信 量及其操作原语封装在一个对象内部。
一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。
管程的组成:
① 作用于本管程的共享变量说明
② 对该数据结构进行操作的一组过程
③ 对作用于本管程的数据设置初值的语句
3,管程的主要特性:
模块化:一个管程是一个基本程序单位,可以单独编译。
抽象数据类型:管程是一种特殊的数据类型,其中不仅有数据,而且有对数据进行操作的代码。
信息封装:管程是半透明的,管程中的外部过程(函数)实现了某功能,至于这些功能是怎样实现的,在其外部则是不可见的。
4,管程实现要素
管程将共享变量和对它进行操作的若干过程封装起来,所有进程要访问临界资源时,都必须经过管程才能进入,且每次只能有一个进程进入管程,从而实现进程互斥
5,管程语法

6,条件变量
当进程在管程内执行时,会发现它必须等待其他进程对管程所保护的信息进行某些特定操作后才能继续工作,因此引入了条件变量(等待的原因)
7,条件变量是一种可能在管程中出现的结构,它对管程的所有过程是全局性的,并通过下面的两个操作来操控它的值
wait:阻塞活动进程,直到另一个进程向条件变量发送了唤醒信
signal:若有另外某个进程由于对条件变量的wait操作而被挂起,则解挂它;否则,不产生任何操作
8,管程在实现进程同步时会对请求资源但暂时无法获得响应的进程执行P操作,并将其放入等待队列;仅当另一进程访问完并释放资源后,才用V操作将队首进程调入

为了区别不同原因的等待队列,管程中通常会在P/V操作之前设置条件变量condition,其形式为: condition x,y。

进程的同步问题

生产者-消费者问题

1,对于生产者-消费者问题的分析
可利用互斥信 量mutex实现诸进程对缓冲池的互斥使用;利用资源信 量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量。
①互斥 定义互斥信 量mutex,初值mutex=1
同步 先生产才能消费,消费完才可以再生产,定义资源信 量empty与full
②申请mutex,就可以直接使用缓冲区了吗br> 不,想让进程执行,申请上mutex互斥信 量的同时还要申请empty与full资源信 量
2,1利用记录型信 量解决生产者–消费者问题
设环状缓冲池中有n个缓冲区
互斥信 量mutex保证各进程对缓冲池的互斥使用
资源信 量empty和full分别表示缓冲池中空、满缓冲区数量
in、out分别指示下一个可以放入产品的空缓冲区和下一个可以取产品的满缓冲区
3,代码

4,注意:
每个程序中用于实现互斥的信 量mutex的wait(mutex)和signal(mutex)必须成对地出现。对资源信 量empty和full的wait和signal操作,同样需要成对地出现,但处于不同的程序中。
在每个程序中的多个wait操作顺序不能颠倒。应先执行对资源信 量的wait操作,再执行对互斥信 量的wait操作,否则可能引起进程死锁。(假如两个程序中wait位置互换,则会造成生产者等消费者消费,消费者等生产者生产这样的死循环)
释放资源时顺序无要求。

哲学家进餐问题

1,五个哲学家(0-4)共用一张圆桌,分别坐在周围的五张椅子上,在桌子上有五只碗和五支筷子(c0-c4),他们的生活方式是交替地进行思考和进餐。
平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐。进餐毕,放下筷子继续思考。
分析:最多只能有两人同时进餐;
相邻两位不能同时进餐;
若5人同时饥饿将导致死等。
2,利用记录型信 量解决哲学家进餐问题
该问题是典型的同步问题,代表着需要在多个进程间分配多个资源且不会出现死锁和饥饿的简单表示。
解决办法:放在桌子上的筷子是临界资源,在一段时间内只允许一个哲学家使用。为实现对筷子的互斥使用,用一个信 量表示一只筷子,五个信 量构成信 量数组:
3, 解决办法
①最多只允许四位哲学家同时去拿左边筷子,使得最少有一位哲学家可以进餐,并且在用毕后释放出他用过的两只筷子,从而使更多哲学家能够进餐。
②仅当哲学家的左右两只筷子均空闲时才可以拿起筷子进餐。(AND型信 量)
③规定奇数 哲学家先拿他左边的筷子,然后再去拿右边的筷子;偶数 哲学家则相反。最后总有一位哲学家可以获得两只筷子进餐(例如3 先拿)。
4,解决办法1:最多允许4个人同时去拿左边筷子

5,解决方法三:奇数先拿左,偶数先拿右

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年10月8日
下一篇 2022年10月8日

相关推荐