摘要:采用这一技术的系统称为多道程序系统。多道程序系统是现代操作系统所采用的最基本最重要的技术。在多道程序系统中,程序是并发执行的。进程优先级表示进程使用处理机的优先级别的整数。
单道程序系统在内存中每次仅存在一个程序,该程序运行时独占整个系统的资源,实际上它只会顺序的使用其中的一部分。因此在某一时刻,系统的各个部分只有一部分在工作,这造成了资源浪费从而利用率低。
为了减少单道程序系统的利用率低的情况,引入了多道程序设计技术。多道程序设计指允许多道程序同时进入内存,并允许它们共享资源、并发执行的程序设计技术。采用这一技术的系统称为多道程序系统。 多道程序系统是现代操作系统所采用的最基本、最重要的技术。
在多道程序系统中,程序是并发执行的。
由图可见,各程序的内部操作I、C、P操作未颠倒,但程序之间不再是严格的串行次序。如,当程序1在进行运算操作时,很明显程序2的输入操作不会影响程序之间的关系。因此I、C、P操作在时间上可以重叠。 显然,并发执行的程序失去了封闭性和可再现性。 举个例子,I1与I2都取的同一地址的数值,本意是想让I2是取的程序1运行结束后的。而当C1正在进行运算时还未来得及将运算结果写回,I2却已将还未处理的数据取出进行计算造成了结果的错误。
假设有以下几条语句
语句 | 读集 | 写集 |
---|---|---|
P1:a = x + y; | R(P1) = {x,y} | W(P1) = {a} |
P2: b = z + 1; | R(P1) = {z} | W(P2) = {b} |
P3: c = a + b; | R(P3) = {a,b} | W(P3) = {c} |
P4:d = c -2; | R(P4) = {c} | W(P4) = {d} |
如果两个程序P1,P2满足Bernstein条件,它们便能并发执行,否则不能:
( R ( p 1 ) ∩ W ( p 2 ) ) ∪ ( R ( p 2 ) ∩ W ( p 1 ) ) ∪ ( W ( p 1 ) ∩ W ( p 2 ) ) = { } (R(p1) /cap W(p2)) /cup (R(p2) /cap W(p1) )/cup (W(p1) /cap W(p2)) = /{/} (R(p1)∩W(p2))∪(R(p2)∩W(p1))∪(W(p1)∩W(p2))={}
即当两个程序的 读写集的交 与 写写集的交 都为空集时,它们可以并发执行,否则不行。
进程目前还没有一个统一的定义,以下是许多学者从不同的角度对进程的不同解释
有的系统为了暂时缓和内存的紧张状态,或为了调节系统负荷引入了挂起状态。即暂时将一部分进程,将他们临时从内存中换出至外存,使他们暂时和系统脱离联系。这样进程的就绪状态可以细分为:活动就绪状态(未被挂起)、静止就绪状态(被挂起);阻塞状态细分为:活动阻塞状态(未被挂起)、静止阻塞状态(被挂起)
在不少系统中,增加了两种基本状态:(1)新状态:进程刚被创建,并分配资源时;(2)终止状态:在进程结束后不会立即撤销进程,相应的进程会暂时留在系统中,以便收集进程的相关信息。
(其等价直观的看法如下图所示)
程序的并发执行,会让多个进程之间可能产生同步和互斥的相互制约的关系。若不采取措施,可能会导致结果的错误与不可再现性,影响系统的安全。为此,引入互斥同步机制,以控制并发执行的诸进程能有效的共享资源和合作,同时使得并发程序的执行仍具有可再现性。
临界区的使用原则是“空则让进,忙则等待,多种择一,等则有限,等则让权”
软件: (1)加锁(2)信号量(信号灯)(3)管程机制
硬件: 提供“测试并设置”指令
进程的同步,指的是两个或多个进程为了合作完成同一个任务,在执行速度或某些确定的时序点上必须相互协调,即一个进程的执行完全依赖于另一个进程----其合作伙伴的消息,当一个进程到达了某一确定点而没有得到合作伙伴发来的“已完成某些事件”的信息时,必须等待,直到该消息到达被唤醒后,才能继续向前推进。
S的值只能由P、V操作来改变
P代表荷兰语proberen,意为“测试”。国外的文献可能使用Wait、Down代替。
V代表荷兰语verhogen,意为“增加”。或用Signal、Up代替。
原语是操作系统内核中由若干条指令构成用于完成特定功能的一个过程,该过程是不可分割的,具有原子特性,是机器指令的延伸。
由于能力和精力等有限,会在下一次专门编写思路过程+代码
(下次一定)
系统的安全状态和不安全状态:
注意:(1)系统在某一时刻的安全状态可能不唯一,但这不影响对系统安全性的判断。 (2)安全状态是非死锁状态,而不安全状态并不一定是死锁状态。即系统处于安全状态一定可以避免死锁,而系统处于不安全状态则仅仅进入死锁状态。其示意图如下
银行家算法:
银行家算法执行有个前提条件,即要求进程预先提出自己的最大资源请求,并且假设系统拥有固定的资源总量。
其所需的数据结构有:
算法描述:
设进程Pi向系统发出请求后,
从资源的角度来看,该算法确定了处理机的分配策略,故称为处理机调度算法。(本质)
从资源使用者的角度来看,该算法确定了进程运行的次序,故称为进程调度算法。
处理机的使用方式有:(1)不可抢占方式(2)可抢占方式
(1)先来先服务调度算法(FCFS,First Come First Severd)
该算法按照进程进入就绪队列的先后顺序选择最先进入该队列的进程,把处理机资源分配给它。
这是不可抢占方式的调度算法,实现简单,但是后来的进程等待CPU时间较长.
(2)短作业优先 / 进程最优 调度算法(SJF / SPF,Shortest Job First / )
SJF: 该算法总是从后备队列中选取估计运行时间最短的作业,先调入内存运行。
SPF: 该算法总是从就绪队列中选取估计运行时间最短的作业,先将处理机分配给它,使它立即执行。
这是不可抢占方式的调度算法,优点是系统吞吐量大、实现简单。最大的缺点是,长作业等待时间可能过长,一直得不到调度。
(3)最高响应比优先(HRRF, Highest Response Ration First)
该算法总是选取响应比最高的作业运行。
主要缺点是每次调度时都需要计算各道作业的响应比,也是一部分时间开销。
响应比 = (作业等待时间 + 作业估计运行时间)/ 作业估计运行时间
= 1 + 作业等待时间 / 作业估计运行时间
可以将响应比看做类似优先级的概念
易知响应比与作业等待时间呈正相关,即作业等待时间越长,响应比越高
响应比与作业估计时间呈负相关,即作业估计运行时间越长,响应比越低
(4)优先级调度算法(Priority)
该算法总是选择具有最高优先级的进程首先使用处理机。交互式系统常用优先数来表示进程的优先级,而优先数就是一个用来表示进程使用处理机的优先程度的整数,它分为固定值的静态优先数 和 可变值的动态优先数。
这是一种可抢占方式的调度算法。
(5)时间片轮转调度算法(RR, Round Robin)
该算法把所有的就绪进程按FCFS原则排成一个队列,且规定一个时间片作为进程每次使用处理机的最长时间单位,按时间片把处理机轮流分配给当前位于就绪队列队首的进程使用,当该进程的时间片用完以后,系统产生时钟中断,剥夺该进程的执行,将它送到就绪队列队尾,等待下一轮的调度。同时处理机调度程序又去调度当前就绪队列的队首进程,也让它运行给定的时间片,如此循环往复。
缺点是,时间片不好确定。因为时间片是固定不变的。
(6)多级反馈队列(MFQ,Multilevel Feedback Queues)
该算法的基本思想为:
1)首先,系统按进程优先级设置了多级就绪进程队列,从第一级队列到最后一级队列,优先级越来越低。
2)其次,每一级就绪队列对应一个不同的时间片。优先权越高的队列,进程的时间片越小。
3)再次,当一个新进程进入内存后,首先被放到第一级优先队列的队尾。按照FCFS原则排队等待调度。当轮到该进程执行时,如能在时间片内完成,便可准备撤离系统;如果在时间片内未完成,调度程序将转入第二队列的末尾,再次依照FCFS原则等待调度。
4)最后,仅当第一级队列为空时,才调度第二级队列中的进程;如此下去,仅当前面的n - 1级队列全部为空时,才去调度最后第n级队列中的进程。如果处理机正在第I队列中为某进程服务,此时又有新的进程进入至第I级之前的队列,则系统抢占正在运行的进程的处理机,由调度程序将刚被抢占的进程放入第I级队列的队尾,重新进行处理机调度。
当发生以下几种情况时,现行进程都要放弃处理机的使用,即将引起系统对进程的重新调度。
线程是进程中可独立执行的子任务,是进程中的一个实体,是系统独立调度和分派的基本单位。一个进程中至少有一个线程。线程继承所属进程的一切资源,线程自身只拥有运行时所需的很少的一点资源。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/123699.html
马上就要开始啦这次共组织15个组队学习 涵盖了AI领域从理论知识到动手实践的内容 按照下面给出的最完备学习路线分类 难度系数分为低、中、高三档 可以按照需要参加 - 学习路线 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...
摘要:和事务的关系关系型数据库某些消息队列等产品或中间件称为事务性资源,因为它们本身支持事务,也能够处理事务。事务的传播特性,,,,,,强制要求要有一个物理事务。外围事务不会被内部事务的回滚状态影响。不支持当前事务。 Spring和事务的关系 关系型数据库、某些消息队列等产品或中间件称为事务性资源,因为它们本身支持事务,也能够处理事务。 Spring很显然不是事务性资源,但是它可...
摘要:勤学学习效率与效果取决于执行力。这一步学习的正确姿势是在实践操作中发掘问题,然后带着问题找答案。拆分任务将目标分解成具体可执行的学习任务。勤学强大的执行力是学习的根本保障。分享复述检验学习成果,提高学习效果的最好方法。 showImg(https://segmentfault.com/img/bVbcPGZ?w=256&h=256); 前段时间和大家一起分享了一篇关于学习方法内容《大牛...
摘要:一个精简全面方便的库掘金可设置开启和关闭可设置全局关于六掘金现在的没有几个是不联网的了,在流量费用很高速度一般的今天给用户合理节省流量,以及提高响应速度就显得尤为重要了。内容提要架构浮窗组件开源应用瘦身,从到掘金,大家好,我是。 一个精简、全面、方便的 AndroidLog 库 --ALog - Android - 掘金Functions 可设置Log开启和关闭 可设置Log全局Tag...
摘要:附各种权限详细处理掘金前言对于运行时权限的处理方式网上有很多,包括注解,等等。进阶篇显示网页详解掘金概述是用于显示网页的控件。经过调查复杂列表的实现掘金控件从发布以来,目前已经普遍用于项目中,来承载各种列表内容。 美团点评前端无痕埋点实践 - 前端 - 掘金构建一个数据平台,大体上包括数据采集、数据上报、数据存储、数据计算以及数据可视化展示等几个重要的环节。其中,数据采集与上报是整个流...
阅读 1907·2021-11-18 10:02
阅读 1122·2021-11-11 16:54
阅读 3584·2021-09-02 09:53
阅读 2643·2021-07-30 14:57
阅读 3376·2019-08-30 13:09
阅读 1025·2019-08-29 13:25
阅读 703·2019-08-29 12:28
阅读 1360·2019-08-29 12:26