计算机科班知识整理专栏系列文章:
- 操作系统的概念:操作系统是一组控制和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用的程序的集合。
- 资源管理的观点:操作系统是系统资源管理者。操作系统是资源管理程序,它用于控制和管理计算机系统的硬件和软件资源。
- 计算机系统资源:①软件资源:信息(数据和程序)②硬件资源:I/O设备、存储器、处理器。
- 命令接口
- 程序接口
1、批处理操作系统
- 批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。这种采用批量处理作业技术的操作系统称为批处理操作系统。
- 批处理操作系统分为单道批处理系统和多道批处理系统。批处理操作系统不具有交互性,它是为了提高CPU的利用率而提出的一种操作系统。
- 批处理操作系统的特点:
- 用户脱机使用计算机。用户提交作业之后直到获得结果之前就不再和计算机打交道。作业提交的方式可以是直接交给计算中心的管理操作员,也可以是通过远程通讯线路提交。提交的作业由系统外存收容成为后备作业。
- 成批处理。操作员把用户提交的作业分批进行处理。每批中的作业将由操作系统或监督程序负责作业间自动调度执行。
- 多道程序运行。按多道程序设计的调度原则,从一批后备作业中选取多道作业调入内存并组织它们运行,成为多道批处理。
- 多道程序的优点:能够充分利用 CPU 资源,提高系统的吞吐量。
2、分时操作系统
- 分时操作系统是使一台计算机采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务的一种操作系统。
- 把计算机与许多终端用户连接起来,分时操作系统将系统处理机时间与内存空间按一定的时间间隔,轮流地切换给各终端用户的程序使用。
- 由于时间间隔很短,每个用户的感觉就像他独占计算机一样。分时操作系统的特点是可有效增加资源的使用率。
- 分时操作系统的特点:
- 多路性:即多用户;
- 交互性:即用户可以根据系统对请求的响应结果,进一步向系统提出新的请求;
- 独占性:即操作系统通过划分时间片的方式使各用户相互独立操作,互不干涉;
- 及时性,即系统能及时对用户的请求做出响应。
3、实时操作系统
- 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应。
- 调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。
- 实时操作系统的特点:
- 实时时钟管理(定时处理和延时处理)。
- 连续的人-机对话,这对实时控制往往是必须的。
- 要求采取过载保护措施。例如对于短期过载,把输入任务按一定的策略在缓冲区排队,等待调度;对于持续性过载,可能要拒绝某些任务的输入;在实时控制系统中,则及时处理某些任务,放弃某些任务或降低对某些任务的服务频率。
- 高度可靠性和安全性需采取冗余措施。双机系统前后台工作,包括必要的保密措施等。
4、网络操作系统
- 一种能代替操作系统的软件程序,是网络的心脏和灵魂,是向网络计算机提供服务的特殊的操作系统。借由网络达到互相传递数据与各种消息,分为服务器(Server)及客户端(Client) 。
- 服务器的主要功能是管理服务器和网络上的各种资源和网络设备的共用,加以统合并控管流量,避免有瘫痪的可能性,而客户端就是有着能接收服务器所传递的数据来运用的功能,好让客户端可以清楚的搜索所需的资源。
- 网络操作系统的特点:
- 计算机网络是一个互连的计算机系统的群体。
- 这些计算机是自治的,每台计算机有自己的操作系统,各自独立工作,它们在网络协议控制下协同工作
- 系统互连要通过通信设施(硬件、软件)来实现。
- 系统通过通信设施执行信息交换、资源共享、互操作和协作处理,实现多种应用要求。
5、分布式软件系统
- 分布式软件系统(Distributed Software Systems),是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统。
- 分布式文件系统和分布式数据库系统等。
- 分布式操作系统的特点:
- 计算机网络的开发都遵循协议,而对于各种分布式系统并没有制定标准的协议。当然,计算机网络也可认为是一种分布式系统。
- 分布式系统要求一个统一的操作系统,实现系统操作的统一性。
- 分布式操作系统对用户是透明的。但对计算机网络,若一个计算机上的用户希望使用另一台计算机上的资源,则必须明确指明是哪台计算机。
- 分布式系统的基础是网络。分布式系统已不仅是一个物理上的松散耦合系统,同时还是一个逻辑上紧密耦合的系统。
- 分布式系统还处在研究阶段。而计算机网络已经在各个领域得到广泛的应用。
6、并行(多机)操作系统
- 并行(多机)操作系统是由多台处理器组成的计算机系统。
- 并行(多机)操作系统的类型:
- 紧密耦合:各处理机之间通过快速总线或开关阵列相连,共享内存,整体系统由一个统一的OS管理(一个OS核心)。
- 松散耦合:各处理机带有各自的存储器、I/O设备和操作系统,通过通道或通信线路相连。每个处理机上独立运行OS。
- 非对称式多处理:又称主从模式。主处理器:只有一个,运行OS。管理整个系统的资源,为从处理器分配任务;从处理器:可有多个,执行应用程序或I/O处理。特点:不同性质任务的负载不均,可靠性不够高,不易移植(通常要求硬件也是"非对称")。
- 对称式多处理:OS交替在各个处理器上执行。任务负载较为平均,性能调节容易。
- 并行(多机)操作系统的特点:
- 增加系统的吞吐量:N个处理器加速比达不到N倍(额外的调度开销,算法的并行化)
- 提高系统可靠性:故障时系统降级运行
- 多道系统可能是多用户系统(Unix),也可能是单用户系统(Windows, DOS), 单用户系统也可能是多道系统,也可能是单道系统。
- 并发性:两个或多个事件在同一时间间隔发生。
- 共享性:系统中的资源可供内存中多个并发进程共同使用,也称为资源共享或资源复用。
- 虚拟技术:把一个物理实体变成若干个逻辑上的对应物。
- 异步性:进程是以人们不可预知的速度,停停走走地向前推进的。
- 处理机管理:对处理机进行分配,并对其运行进行有效的控制和管理。
- 存储器管理:内存分配、内存保护、地址映射(变换)、内存扩充。
- 设备管理。
- 文件管理:文件的存储空间管理、目录管理、文件的读/写管理和保护。
- 操作系统和用户之间的接口:命令接口、程序接口(系统调用组成)、图形接口。
- 面向网络的服务功能。
- 联机操作:输入/输出操作在计算机直接控制下进行的。联机时,操作者“正在”使用计算机资源。
- 联机作业:在作业执行过程中用户可以直接和计算机交互联机作业控制方式:采用人机对话方式控制作业运行。
- 脱机操作:输入/输出操作在要进行操作的计算机以外的设备上进行,在需要时再送计算机处理。特点:主机和输入/输出机可并行工作。
- 脱机作业:在作业执行过程中用户不直接和计算机交互脱机作业控制方式:在作业执行前将各种控制方式一起输入到计算机中,此后作业自动执行。通常又称为批处理作业。
- 并发:多个事件在同一时间段发生,围观看是在单个CPU上交替执行。
- 并行:在多核和多处理器系统中(CPU >1),多个事件在同一时刻发生。
- 所谓并行是指同一时刻同时进行,进程并行需要多处理器的支持;所谓并发,是指在一段时间内,多个进程都在向前推进,而在同一时刻,可能只有一个进程在执行,多个进程轮流使用处理器。在单处理器系统中,可能发生的并行和并发现象如下:
- 进程与进程之间的并发。例如,在Windows操作系统中,mp3播放进程和Word字处理进程可以并发执行,这样用户就可以边听音乐边写文章了。
- 处理机与设备之间的并行。例如,当处理机进行科学运算时,打印机可以打印文档。
- 处理机与通道之间的并行。通道程序的执行可与处理机的操作并行。
- 通道与通道之间的并行。通常一个系统中有多个通道,这些通道可以并行地执行相应的通道程序。
- 设备与设备之间的并行。例如打印机打印文档时,磁带机在输入数据。
- 分布性。分布式操作系统的处理和控制功能均为分布式的;而网络操作系统虽具分布处理功能,但其控制功能却是集中在某个或某些主机或网络服务器中,即集中式控制方式。
- 透明性。分布式操作系统通常能很好地隐藏系统内部的实现细节。包括对象的物理位置、并发控制和系统故障等对用户都是透明的。例如,当用户要访问某个文件时,只需提供文件名而无须知道(所要访问的对象)它是驻留在那个站点上,即可对它进行访问,以即具有物理位置的透明性。网络操作系统的透明性则主要指操作实现上的透明性。例如,当用户要访问服务器上的文件时,只需发出相应的文件存取命令,而无需了解对该文件的存取是如何实现的。
- 健壮性。分布式操作系统由于处理和控制功能的分布性而具有较好的可用性和可靠性,即健壮性。而网络操作系统由于控制功能的集中式特点而使系统重构功能较弱,且具有潜在的不可靠性。
- 并行性。分布式操作系统具有任务分配功能,可将多个任务分配到多个处理单元上,使这些任务并行执行,从而加速了任务的执行;而网络操作系统通常无任务分配功能,网络中每个用户的一个或多个任务通常都在本地计算机上处理。
- 共享性。分布式操作系统支持系统中所有用户对分布在各个站点上的软硬件资源的共享和透明方式访问。而网络操作系统所提供的资源共享功能仅局限于主机或网络服务器中资源,对于其它机器上的资源通常仅有使用该机的用户独占。
- 线程包含 CPU 现场,可以独立执行程序
进程PCB(进程控制块)
线程TCB(线程控制块)
进程的上下文:进程的物理实体(代码和数据等)和支持运行的环境合称为进程的上下文。进程的上下文包括用户级上下文和系统级上下文。
- 用户级上下文:由用户的程序块、数据块、运行时的堆和用户栈(统称为用户堆栈)等组成的用户空间信息被称为用户级上下文。
- 系统级上下文:由进程标识信息、进程现场信息、进程控制信息(包含进程表、页表、打开文件表等)和系统内核栈等组成的内核空间信息被称为系统级上下文。
- 有哪些形式:时间片,优先级,短进程
- 与非抢占调度相比,抢占调度不但要选取一个就绪进程来运行,同时把现运行进程强制变成就绪状态。
- 目前处理死锁的方法可归结为四种:预防死锁,避免死锁,检测死锁,解除死锁。
- 例题:
- 解:对于k个进程,每个进程需要m个资源,需要满足k*(m-1)+1≤资源总数,才不会发生死锁,所以2k+1>8,k最小为4
主要原因
- 因为系统资源不足。
- 进程运行推进的顺序不合适。
- 资源分配不当等。
必要条件
- 互斥条件:一个资源每次只能被一个进程使用。
- 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不剥夺(非抢占)条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
预防方法
- 破坏互斥条件
- 如果资源不需要互斥访问,就可以破坏互斥条件。
- 对于某些硬件资源,可以采用特殊技术实现允许同时访问。
- 对于软件资源,无法实现。
- 破坏请求和保持条件
- 在执行时不再提出资源请求。
- 系统要求所有进程要一次性地申请在整个运行过程中所需的全部资源。若系统有足够资源则完全分配。
- 在等待时不保持任何资源。
- 只要有一个请求的资源不可用,就其它可用资源都不分配给它。
- 优点:简单、易于实现且安全。
- 缺点:
- 一个用户在作业运行之前可能提不出它的作业将要使用的全部资源。
- 延迟运行用户作业必须等待,直到所有资源满足才能运行。
- 一个作业运行期间,对某些设备的使用时间很短,甚至不会用到。如:当用户作业出错时才需要打印机输出错误信息,但采用静态分配法必须把打印机分配给该作业,并长期占用。采用该方法对系统来说是非常浪费的。
- 破坏不可剥夺条件
- 一个已拥有资源的进程,若它再提出新资源要求而不能立即得到满足时,它必须释放已经拥有的所有资源。以后需要时再重新申请。
- 缺点:实现复杂且要付出很大的代价(以前工作的失效,执行的推迟)
- 破坏环路条件
- 系统将所有资源按类型进行线性排序,并赋予不同的序号,所有进程对资源的请求必须严格按照资源序号递增的次序提出。
- 例如:系统中有下列设备:输入机(1),打印机(2),穿孔机(3),磁带机(4),磁盘(5)。有一进程要先后使用输入机、磁盘、打印机,则它申请设备时要按输入机、打印机、磁盘的顺序申请。
- 优点:同前两法相比,其资源利用率和系统吞吐量有较明显的改善。
- 缺点:进程实际需要资源的顺序不一定与资源的编号一致,因此仍会造成资源浪费;资源的序号必须相对稳定,从而限制了新设备的增加。
- 小结:
- 预防死锁的原理为设计不同的资源分配算法,来保证不发生死锁。
- 破坏请求和保持条件的资源分配算法是一种静态资源分配。
- 而破坏不可剥夺条件和环路条件是动态分配资源算法。
- 破坏环路条件是相对优异的一种预防死锁算法。
死锁避免
- 在系统运行过程中,对进程提出的每一个(系统能够满足的)资源申请进行动态检查(安全性检查);
- 根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。
安全状态
- 如果系统能按某种顺序为每个进程依次分配其所需的资源,直至所有进程都能运行完成,称此时系统处于安全状态
- 这种进程的顺序,如P4,P1,…,Pn, 称为安全序列
- 若不存在这样一个安全序列称此时系统处于不安全状态
- 如果不按安全序列分配资源,则系统可能会由安全状态进入不安全状态。
- 安全状态举例:
- 注意:
- 不安全状态≠死锁,不安全状态和死锁的关系,不安全状态并不等于死锁,只能说可能死锁,原因是假设已分配资源不归还的清下,可能存在已分配资源归还的情况,还存在进程异常终止。
- 系统处于安全与不安全状态都是对静态进行的评价
银行家算法
- 银行家算法中的数据结构:
- 可利用资源向量Available:是一个含有m个元素的数组,其中每个元素代表一类资源的可利用的数目
- 最大需求矩阵Max:n×m矩阵,n为当前系统进程的数目,m为系统资源种类数。Max[i,j]为第i个进程对j类资源的最大需求
- 分配矩阵Allocation:n×m矩阵,表示每个进程已分配的每类资源数
- 需求矩阵Need:n×m矩阵,表示每个进程还需要各类资源数
- 银行家算法的步骤:
- 程序是为了完成某项工作时需要计算机执行的指令的集合,是静态的概念;而进程是程序的执行,是动态的概念。
- 程序是永远存在的,进程则有生存期,它的存在是暂时的。
- 进程具有并发性、是资源分配的基本单位,是调度的基本单位,而程序和程序段则不能作为一个独立调度运行的单位,也不能并发执行。
- 一个进程由程序、数据及进程控制块组成,但必须用可重入码编写的是程序。
- 程序通过多次执行对应多个进程,即多个进程的程序可能是一样的。
- 线程为调度和分派的基本单位,进程为拥有资源的基本单位。
- 线程不拥有资源。
- 进程间可并发执行,一个进程中的多个线程间也可并发执行。
- 线程切换的开销远小于进程切换的开销。
- 线程间通信就是通过全局变量啊,线程之间没有“通信”的说法吧,不管有几个线程,它们都是在同一个进程地址空间内,都共享同样的内存空间,所以“通信”的说法才多见于进程之间,因为不同的进程才是不同的内存地址空间。进程内的变量每个线程都是可以访问的,是共享的,但是线程之间没有固定的执行顺序,为避免时序上的不同步问题,所以线程之间才会需要同步机制。线程之间的重点就是同步机制。
- 组成:程序、数据段、PCB。
- 特征:结构,动态,并发,独立,异步
- 进程的3个基本状态及其转换:
- 就绪状态:除了CPU,其它所需资源都已占有,一旦得到处理机即可运行,则称此进程处于就绪状态。
- 执行状态:占有CPU。
- 阻塞状态,又称等待状态:等待某些事件。
- 引起进程调度的原因:
- 时间片到(按时间片运行)
- 进程提出IO请求——阻塞,调新进程
- 进程挂起
- 执行P操作而信号量不足,而被阻塞
- 来了更高优先权(可被剥夺)
- 进程运行完了
- 导致创建新进程的例子:
- 用户登录:系统为用户创建一个进程,并插入就绪队列
- 作业调度
- 提供服务:系统为用户请求创建一个进程
- 应用请求:用户程序自己创建进程
1、信号量的本质
- 信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。
- 比较信号量和条件变量之间的区别:信号量有值而条件变量无值;执行 wait 操作时,信号量会先减少值,小于 0 才会阻塞进程, 而条件变量则直接阻塞进程;执行 signal 操作时,信号量会增加值,当大于等于 0 时唤醒一个进程,而条件变量直接唤醒一个阻塞的进程。
- 应用 and 信号量的特点及所带来的弊端:将进程在运行中所需要的临界资源全部一次性分配给进程,等进程用完后再全部一起释放。 造成资源的利用率低。
2、信号量机制的功能
- 进程间通信处理同步互斥的机制。信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。
3、PV操作的含义
- PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),针对信号量进行相应的操作。
4、PV操作的定义
- 其中S表示信号量的值,P表示P操作,V表示V操作。
- P(S):
- 将信号量S的值减1,即进行S = S-1;
- 如果S < 0,则该进程进入阻塞队列;
- 如果S >= 0, 则该进程继续执行;
- 执行一次P操作其实就是意味请求分配一个资源,当信号量的值小于0,那么就表示没有可用资源,那么进程就只能进行等待其他拥有该资源的进程释放资源之后,才能进行执行;当信号量大于0的时候,那么表示还有足够的资源,所以,当前进程就可以继续执行;
- V(S):
- 将信号量S的值加1,即 S = S + 1;
- 如果S > 0,则该进程继续执行;
- 如果S < 0, 则释放阻塞队列中的第一个等待信号量的进程;
- 执行一次V操作其实就是意味释放一个资源,当信号量的值大于0,那么就表示有可用资源,那么表示信号量的资源足够进程进行申请,就不需要将进程进行放入到阻塞队列中;而当信号量小于0的时候,就表示针对这个信号量,还有其他的进程是已经进行了申请信号量的操作,而只是之前是无法满足进程获取资源的,简单点说,就是表示阻塞队列中还有其他的进程是执行了P操作,在等待信号量,所以,这样的话,就将阻塞队列中的第一个等待信号量的进程进行处理即可。
5、实例分析信号量和PV操作之间的处理过程
- 实例:现在有三个进程分别是A,B,C,它们三者都是需要信号量S的临界资源,而信号量的初值为1(所以,当它们三者进行申请资源的时候,也就只会让一个进程得到资源进行执行)
- 第一步:A首先进入临界资源中,那么它就需要执行P操作之后,所以,此时信号量就变成S = 0;
- 第二步:而后B也进入临界资源,但是A还没有将资源释放,B执行了P操作进行申请资源,所以,此时信号量就变成S = -1;
- 第三步:同理,而后C也进入临界资源,但是A还没有将资源释放,C执行了P操作进行申请资源,所以,此时信号量就变成S = -2;
(通过前面三步,这时候的情况就是,A在正常执行,但是还没执行完成并没有释放资源,而B和C都是出于阻塞队列,因为没有足够的资源呀)
- 第四步:A终于执行完成了,那么由于PV操作必须是成对出现的,所以,A肯定是要执行V操作的,所以此时,A将资源释放出来,那么信号量就变成了 S = -1 (因为第三步的时候S=-2,而执行V操作就是相当于释放一个资源,所以这里就变成-1)
- 第五步:因为A执行了V操作,那么就会唤醒阻塞队列中第一个进行等待的进程,那么从前面可以得到,是B先等待的,所以自然而然的就将B进行唤醒,所以,这时候,B就开始进入临界区进行相应的执行处理;(有可能有朋友会问,那现在B进行临界区操作了,那么不应该要先执行P操作获取资源才可以吗?大家,请注意一下,并不是的,因为B我们知道,它其实是从阻塞队列中被唤醒出来的,而它之所以进入到阻塞队列,就是因为之前执行了P操作,导致那时候没有足够的信号量让其能够进行执行,所以,现在只是相当于唤醒操作,就不需要再一次进行P操作,就类似我们进程中的从就绪状态变成执行状态了。因为A执行了V操作,B就从阻塞到就绪,当有资源的时候,那么B自然就可以进入到运行状态了,这样理解是不是就比较好了呢?---注意:这是打个比方来帮助大家理解)
- 第六步:B执行完成之后,同样,再进行V操作,所以,此时,信号量 S = 0
- 第七步:由于B执行了V操作,那么唤醒了阻塞队列中的第一个等待进程,即是C,所以这时候,C就获得了临界区的资源,那么就可以开始执行了;
- 第八步:C执行完成之后,同样,再进行V操作,所以,此时,信号量 S = 1
- 第九步:三个进程都执行完成了,并且阻塞队列也没有等待进程,这样是不是就实现了进程之间的通信呢?并且,有没有发现,从开始到结束的时候,信号量的值是没有改变的,都是S = 1。这样,是不是就很好理解了?有说到的内容,信号量的值其实是不会发生改变的。。到这里,基本上,进程的通信就可以完成了,PV操作也都结束了。
(我想,有可能有些朋友会问,如果现在又有进程D到来了并且它也是需要ABC一样的临界资源,此时又是如何的呢?)
- 第十步:很简单,因为这时候S = 1 ,而 S > 0,那么这时候D来了的话,就可以直接执行啦,即执行P操作,这样 S = 0,然后D执行它需要的操作,执行完成之后再进行V操作,即释放资源,这时候 S = 1,所以,又回来这样的情况啦。
- 第十一步:针对第十步的情况,如果此时,又有一个进程E来了,又会发生什么呢?其实,只要我们明白了工作原理,很容易就理解的了,那么由于这时候 S = 0 ,无法让E继续执行,所以E先执行P操作,S = -1,然后就被放入到阻塞队列去了,而当D使用资源之执行完成之后,由于D执行了V操作,所以S = 0 ,这时候唤醒等待队列的第一个,所以E就获得了执行的机会,那么E就开始执行,执行完成之后进行V操作,所以,S = 1 ,很明显,又是到最初的状态啦。
6、信号量和PV操作实现进程通信(其实就是进程互斥)
- 温馨提示:使用PV操作实现进程互斥时应该注意的是:
- 每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。
- P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。
- 互斥信号量的初值一般为1。
7、生产者-消费者问题
- 问题描述
- 问题分析
该问题中出现的主要的两种关系:
- 生产者—消费者之间的同步关系表现为: 一旦缓冲池中所有缓冲区均装满产品时,生产者必须等待消费者提供空缓冲区;一旦缓冲池中所有缓冲区全为空时,消费者必须等待生产者提供满缓冲区。
- 生产者—消费者之间还有互斥关系: 由于缓冲池是临界资源,所以任何进程在对缓冲区进行存取操作时都必须和其他进程互斥进行。
- 问题解决步骤
- 关系分析。找出题目中描述的各个进程,分析它们之间的同步、互斥关系。
- 整理思路。根据各进程的操作流程确定PV操作的大致顺序。
- 设置信号量。设置需要的信号量,并根据题目条件确定信号量的初值。(互斥信号量初值一般为1,同步信号量的初值需要看对应资源的初始值是多少)
- 能否改变相邻P、V操作的顺序?
- 总结
8、读者-写者问题
- 问题描述
- 问题分析
- 问题解决步骤
只要有源源不断的读进程存在,写进程就要一直阻塞等待,可能会造成“饿死”,在上述的算法中,读进程是优先的,那么应该怎么样来改造呢?
新加入一个锁变量w,用于实现“写优先”!
这里我们来分析一下读者1->写者1->读者2这种情况。第一个读者1在进行到读文件操作的时候,有一个写者1操作,由于第一个读者1执行了V(w),所以写者1不会阻塞在P(w),但由于第一个读者1执行了P(rw)但没有执行V(rw),写者1将会被阻塞在P(rw)上,这时候再有一个读者2,由于前面的写者1进程执行了P(w)但没有执行V(w),所以读者2将会被阻塞在P(w)上,这样写者1和读者2都将阻塞,只有当读者1结束时执行V(rw),此时写者1才能够继续执行直到执行V(w),读者2也将能够执行下去。
- 总结
9、哲学家进餐问题
- 问题描述
- 问题分析
由问题描述我们可以知道, 我们可以从上面的题目中得出,筷子是临界资源,同一根筷子同一时刻只能有一个哲学家可以拿到。一共有五个哲学家,也就是五个进程;五只筷子,也就是五个临界资源;因为哲学家想要进餐,必须要同时获得左边和右边的筷子,这就是要同时进入两个临界区(使用临界资源),才可以进餐。
- 问题解决步骤
- 信号量设置:因为是五只筷子为临界资源,因此设置五个信号量即可;
- 至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用餐完毕后能释放他占用的筷子,从而使别的哲学家能够进餐;
- 我们可以简单地通过增加一个信号量来限定哲学家并发去进餐的数量。
- 原语不能中断,临界区可以中断。
- 原语可是说是临界区,因为它的效果等同临界区,但临界区不是原语。
- 原语在核心态下执行,而临界区则可以在用户态下执行。
- 例题:一个只有一个处理机的系统中,OS的进程有运行、就绪、阻塞三个基本状态。假如某时刻该系统中有10个进程并发执行,在略去调度程序所占用时间情况下试问:
- 作业的运行状态和进程的执行状态不一样,作业的运行状态是宏观状态,其实对应的进程有时确实占用CPU运行,有时却在阻塞或就绪状态。
- 作业调度是1次性调度,不存在动态调度的问题
- 作业调度是指为作业分配内存
先来先服务调度算法(FCFS)
- 详解
- 特点
- 该算法既可以用于作业调度,也可以用于进程调度
- 对长作业有利,对短作业不利
- 对CPU繁忙型作业有利,对I/O繁忙型不利
- 例题
短作业(短进程)优先调度算法(SJF)
具有最小平均等待时间的进程调度算法是短进程优先。
- 详解
- 特点
- 该算法既可以用于作业调度,也可以用于进程调度
- 对短作业有利,对长作业不利
- 例题
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用非抢占式的短作业优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
解:
优先级调度算法(PSA)
- 详解
- 静态优先级:静态优先级是在创建进程时确定的,在进程的整个运行期间保持不变。优先级是利用某一范围内的一个整数来表示的,例如0~255中的某一整数,把该整数称为优先数。
- 动态优先级:动态优先级是指在创建进程之初,先赋予其一个优先级,然后其值随进程的推进或等待时间的增加而改变,以便获得更好的调度性能。
- 非抢占式调度过程:正在处理的进程处理结束,接下来每次调度时选择当前已到达且优先级最高的进程。
- 抢占式调度过程:每次调度时选择当前已到达且优先级最高的进程。当前进程主动放弃处理机时发生调度。就是在运行进程的过程中,放弃当前进行,去进行优先级高的进程。
- 特点
- 该算法既可以用于作业调度,也可以用于进程调度
- 用于作业调度时,系统是从后备队列中选择若干个优先级最高的作业装入内存,只有静态优先级;用于进程调度时,是把处理机分配给就绪队列中优先级最高的进程,既有静态优先级也有动态优先级。
- 可分为非抢占式和抢占式
- 非抢占式例题
- 抢占式例题
高响应比优先调度算法(HRRN)
- 详解
- 特点
- 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因此类似于SJF算法,有利于短作业。
- 当要求服务的时间相同时,作业的优先级又决定于其等待时间,因而该算法又类似于FCFS算法。
- 响应比的计算增加了系统开销
- 例题
多队列调度算法
- 详解
- 多队列调度算法由于设置多个就绪队列,因此对每个就绪队列就可以实施不同的调度算法。
- 它是一种资源平衡算法
- 特点
- 该算法既可以用于作业调度,也可以用于进程调度
- 例题
- 在同一个就绪队列中,如终端用户进程就绪队列,可以采取时间片调度。
- 交互编辑文档进程就绪队列和批处理用户作业进程队列,可以按照先来先服务进行调度。
- 系统进程就绪队列,可以按照优先级进行调度。
先来先服务调度算法(FCFS)
- 详细见问题13。
短作业(短进程)优先调度算法(SJF)
- 详细见问题13。
优先级调度算法(PSA)
- 详细见问题13。
时间片轮转法(RR)
- 详解
- 例题
多级队列调度算法
- 详细见问题13。
多级反馈队列调度算法(会产生饥饿现象)
- 详解
- 例题
- 三种高级通讯方式:共享存储器系统,消息传送系统和管道通信系统。
- 两种信息传递方式:直接通信方式、间接通信方式。
- 间接通信方式通过信箱这个2传手来交换信件的。
- 内核级线程
- 用户级线程
- 混合方式/组合方式
在支持线程的系统中,资源是以进程为基本单位进行分配,而线程是进行调度的基本单位。
- 详细见问题9。
- 空闲让进:当无进程处于临界区,可允许一个请求进入临界区的进程立即进入自己的临界区
- 忙则等待:当已有进程进入自己的临界区,所有企图进入临界区的进程必须等待
- 有限等待:对要求访问临界资源的进程,应保证该进程能在有限时间内进入自己的临界区
- 让权等待:当进程不能进入自己的临界区,应释放处理机
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/69818.html