操作系统和类型
(2007-8-15 22:17)
1、操作系统概念
是计算机系统的一种系统软件,由它统一管理计算机系统的资源和控制程序的执行。
2、分类
(1) 批处理操作系统 何问起 hovertree.com
作业——把用户要求计算机系统进行处理的一个计算问题称为一个作业。
批处理操作系统——用户为作业准备好程序和数据后,再写一份控制作业执行的说明书。然后把作业说明书、相应的程序和数据一起交给操作员。操作员将收到的一批作业的有关信息输入到计算机系统中等待处理,由操作系统选择作业并按其作业说明书的要求自动控制作业的执行。采用这种批量化处理作业的操作系统称为“批处理操作系统”。
批处理系统按照预先写好的作业说明书控制作业的执行。因此,作业执行时无需人工干预,实现了计算机操作的自动化。
批处理操作系统可分为批处理单道系统和批处理多道系统。
“单道”的意思是指一次只有一个作业装入计算机系统的主存储器运行。
多道程序设计的硬件支持:中断和通道。
批处理多道系统能极大地提高计算机系统的工作效率,具体表现为(理由):
1)多道作业并行工作,减少了处理器的空闲时间,即提高了处理器的利用率。
2)作业调度可以按照一定的组合选择装入主存储器的作业,只要搭配合理,则可充分利用计算机系统的资源。
3)作业执行过程中,不再访问低速的设备,而是直接在高速的磁盘上存取信息,从而缩短了作业执行时间,使单位时间内的处理能力得到提高。
4)作业成批输入、自动选择和控制作业执行,减少了人工操作时间和作业交接时间,有利于提高系统的吞吐率。
批处理系统的缺点是在作业执行时用户不能直接干预作业的执行。http://hovertree.com/hovertreescj/
(2)分时操作系统
分时操作系统——能使用户通过与计算机相连的终端来使用计算机系统,允许多个用户与计算机系统进行一系列的交互,并使得每个用户感到好像自己独占一台支持自己请求服务的计算机系统。具有这种功能的操作系统称为“分时操作系统”,简称为“分时系统”。
在分时系统中,为了使一个计算机系统能同时为多个终端用户服务,系统采用了分时技术。
分时技术:把CPU时间划分成许多时间片,每个终端用户每次可以使用一个由时间片规定的CPU时间。这样,多个终端用户就轮流地使用CPU时间。如果某个用户在规定的一个时间片内没有完成工作,这时也要把CPU让给其它用户,等待下一轮再使用一个时间片的时间,循环轮转,直至结束。
批处理多道系统是实现自动控制无需人工干预的系统,而分时系统是实现人机交互的系统。
分析系统的主要特点?
5) 同时性
允许多个终端用户同时使用一个计算机系统。
6) 独立性
用户在各自的终端上请求系统服务,彼此独立,互不干扰。好像每个用户只有自己在单独使用计算机系统,而实际上计算机系统在被多用户分享。
7)及时性
对用户的请求能在较短时间内给出应答。使用户觉得系统及时相应了他的请求而得到满意。
8)交互性
采用人-机对话的方式工作。用户在终端上可以直接输入、调试和运行自己的程序,能及时修改程序中的错误且直接获得结果。
分时系统适合于短小作业,对于一些需要处理较长时间才有结果且不需要交互的大型作业来说,比较适合于用批处理系统。因此,有些操作系统既有批处理能力,又提供分时交互的能力。
前台作业——由分时系统控制的作业称为前台作业。
后台作业——由批处理系统控制的作业称为后台作业。
(3)实时操作系统
实时操作系统——能使计算机系统接收到外部信号后及时进行处理,并在严格的规定时间内处理结束,再给出反馈的操作系统称为“实时操作系统”,简称为“实时系统”。
实时系统是较少有人为干预的监督和控制系统,仅当计算机系统识别到了违反系统规定的限制或本身发生故障时,才需要人为干预。
设计实时操作系统时有两点必须特别注意:
1)要及时响应、快速处理。何问起 hovertree.com
2)要求有高可靠性、不强求系统资源的利用率。
(4)网络操作系统
网络操作系统——为计算机网络配置的操作系统称为“网络操作系统”。网络操作系统把计算机网络中的各台计算机有机地联合起来,实现各台计算机之间的通信及网络中各种资源的共享。用户可以借助通信系统使用网络中其它计算机的资源、实现相互间的信息交换,从而大大扩展了计算机的应用范围。
(5)分布式操作系统
为分布式计算机系统配置的操作系统称为“分布式操作系统”,分布式操作系统能使系统中若干台计算机相互协作完成一个共同的任务,在分布式操作系统控制下,使各台计算机组成了一个完整的、功能强大的计算机系统。
分布式计算机系统——是由多台计算机组成的一种特殊的计算机网络。网络中的各台计算机没有主次之分;网络中任意两台计算机可以通过通信交换信息;网络中的资源供各用户共享。
3、操作系统的功能
从资源管理的观点出发,操作系统的功能可分为:处理器管理、存储管理、文件管理、设备管理和作业管理等五大功能。
十、处理器管理
1、多道程序设计
多道程序设计——让多个计算问题同时装入一个计算机系统的主存储器并行执行,这种设计技术称为“多道程序设计”,这种计算机系统称为“多道程序设计系统”或简称“多道系统”。
在多道程序设计的系统中,应采用“存储保护”的方法保证各道程序互不侵犯。
程序浮动——在多道程序设计的系统中,要求编制的程序存放在主存的任何区域都能正确执行。甚至在执行过程中,当程序被改变了存放区域,其执行仍不受影响,也就是说,程序可以随机地从主存的一个区域移动到另一个区域,程序被移动后丝毫不影响它的执行,这种技术称为“程序浮动
采用多道程序设计的技术后,可有效地提高系统中资源的利用率,增加单位时间内算题量,从而提高了系统吞吐量。具体表现为:
1)提高了处理机的利用率。
2)充分利用外围设备资源。
只要将使用不同设备的程序搭配在一起,同时装入主存储器,那么,系统中的各种外围设备都经常会处于忙碌状态,使系统中的设备资源被充分利用。
3)发挥了处理器与外围设备以及外围设备之间的并行工作能力。
2、进程概念和属性
进程——把一个程序在一个数据集合上的一次执行称为一个进程。进程是操作系统中可以并行工作的基本单位,也是核心调度及资源分配的最小单位,它由程序、数据还有进程控制块PCB组成,它与程序的重要区别之一是:进程是有状态的,而程序没有,程序是静态的。进程与程序并非是一一对应的。一个程序运行在不同的数据集上就构成不同的进程,能得到不同的结果。。在SMP系统中,操作系统还提供了线程机制,它是处理器分配的最小单位。
进程的5个基本特征:
动态性:
进程是进程实体的执行过程,进程由创建而产生、由调度而执行,因得不到资源而暂停执行,并且随着撤消而消亡,有一定的生命期;
并发性:
多个进程实体存在于内存中,能在一段时间内同时运行。引入进程的目的就是为了使其程序与其他进程的程序并发执行,而程序不能并发执行。
独立性:
进程实体是能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。
异步性:
进程实体按各自独立的、不可预知的速度向前推进;
结构特征:
进程是由程序段、数据段和进程控制块三部分组成。在操作系统中,进程是进行系统资源分配、调度和管理的最小单位。
例题:
___1___是操作系统中可以并行工作的基本单位,也是核心调度及资源分配的最小单位,它由___2___组成,它与程序的重要区别之一是:___3___。在SMP系统中,操作系统还提供了___4___制,它是___5___的最小单位。
1: A. 作业 B. 过程 C. 函数 D. 进程
2: A. 程序、数据和标识符 B. 程序、数据和PCB
C. 程序、标识符和PCB D. 数据、标识符和PCB
3:A. 程序可占用资源,而它不可 B. 程序有状态,而它没有
C. 它有状态,而程序没有 D. 它能占有资源,而程序不能
4: A. 约束 B. 线程 C. 共享 D. 分时
5: A. 存储器分配 B. 资源分配
C. 处理器分配 D. 网络结点分配
解答:1.D 2.B 3.C 4.B 5.C
3、进程的状态和转换
进程在执行过程中状态会不断地变化,每个进程在任何时刻总是处于三种基本状态(运行态、就绪态、阻塞态)的某一种基本状态。三种状态之间的转换关系为:
运行态→阻塞态(等待):往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。
阻塞态→就绪态:则是等待的条件已满足,只需要分配到处理器后就能运行。
运行态→就绪态:不是由于自身原因,而是由于外界原因使运行状态的进程让出处理器,这时候就变成就绪态。
就绪态→运行态:系统按某种策略选中就绪队列中的一个进程占用处理器,此时就变成了运行态。
在不少系统中,还增加了两种基本状态:
新状态:一个进程刚刚建立,但还未将它送入就绪队列时的状态。
终止状态:当一个进程已经正常结束或异常结束,系统已将它从就绪队列中移出,但尚未将它撤消时的状态。
4、进程调度算法
常用的进程调度算法有先来先服务、优先数、时间片轮转及分级调度等算法。
(1)先来先服务调度算法
先来先服务进程调度算法——这种调度算法是按进程进入就绪队列的先后次序选择可以占用处理器的进程。当有进程就绪时,把该进程排入就绪队列的末尾,而进程调度总是把处理器分配给就绪队列中的第一个进程。一旦一个进程占有了处理器,它就一直运行下去,直到因等待某个事件或进程完成了工作才让出CPU
特点分析:
优点:算法简单
缺点:有时会使进程等待分配处理器的平均时间较长。
例:就绪队列中依次有A、B、C三个进程,它们的处理时间分别为3ms、3ms、24ms。按先来先服务的顺序,进程A先占用CPU,则它们的平均等待时间为(0+3+6)/3=3ms。
如果进程是按C,B,A的次序进入队列,则这三个进程的平均等待时间为(27+24+0)/3=17ms。
可见,当运行时间较长的进程先就绪时,先来先服务算法使系统效率受到影响。
(2)优先数调度算法
优先数进程调度算法——对每个进程确定一个优先数,进程调度总是让具有最高优先数的进程先使用处理器。如果进程具有相同的优先数,则对这些有相同优先数的进程再按先来先服务的次序分配处理器。
为了调度方便,就绪队列中进程可按优先数从大到小排列。
一般,让系统进程的优先数大于用户进程的优先数,重要计算问题的进程优先数大于一般计算问题的进程优先数,交互式作业进程的优先数大于批处理作业进程的优先数。
进程被创建时系统为其确定一个优先数,进程的优先数可以是固定的,也可以是动态变化的。例如:提高进程使用外围设备的进程的优先数,有利于处理器与外围设备的处理能力;提高较长时间未使用处理器的就绪进程的优先数,以缩短等待处理器的平均时间。
一个高优先数的进程占用处理器后,系统可有两种方式对待它。一种是“非抢占式”,一种是“抢占式”。抢占式进程调度算法适合于实时系统。
(3)时间片轮转调度算法
(4)分级调度算法
分级调度算法——分级调度算法由系统设置多个就绪队列,每个就绪队列中的进程按时间片轮转法占用处理器。具体的调度原则是:当有进程就绪时,排入第一级就绪队列的末尾;当某就绪队列的一个进程获得处理器并用完规定的时间片后,它的工作尚未结束,则排入下一级就绪队列的末尾;当最后一级中的进程占用处理器运行一个规定的时间片后,它的工作尚未完成,则仍排入本队列的末尾;当占用处理器的进程在规定的时间片内运行时出现等待事件,则排入等待队列,等待结束后成为就绪状态排入第一级就绪队列;第一级就绪队列的优先级最高,每次总是先选择第一级就绪队列中的进程,仅当该队列为空时,才从第二级就绪队列中选进程。若仍为空,则再从下一级就绪队列中选,依次类推。
对不同就绪队列中的进程,可规定使用不同长度的时间片。一般来说,第一级就绪队列中的时间片短一些,以后各级就绪队列的时间片逐级增长,有利于提高系统吞吐率。但也存在问题,当需要运行时间长的进程进入了低级就绪队列之后,有可能长时间得不到处理器。
1、线程的基本概念和属性
线程是进程中可独立执行的子任务,一个进程中可有一个或多个线程,每个线程都有唯一的一个标识符。
线程有如下属性:
1)每个线程有唯一的一个标识符和一张线程描述表,线程描述表记录了线程执行时的寄存器和栈等现场状态;
2)不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时操作系统为它们创建成不同的线程;
3)同一个进程中的各个线程共享分配给进程的主存空间;
4)线程是处理器的独立调度单位,多个线程是可以并发执行的。
5)一个线程被创建后便开始了它的生命周期,直至终止。线程的生命周期内会经历等待态、就绪态和运行态等各种状态变化。
线程与进程有许多相似之处,为此线程也称为轻型进程。
在采用线程的操作系统中,线程与进程的根本区别在于进程是资源分配单位,而线程是调度和执行的单位。
在采用进程技术的操作系统中,进程既是资源分配单位又是调度和执行的单位。其缺点主要表现在:
1) 每个进程要占用一个进程控制块和一个私有的主存空间,开销较大;
2) 进程之间的通信必须要由通信机制来完成,速度较慢;
3)进程增多会给调度和控制带来复杂性,增加了死锁的机会。
因此,应尽量避免设计过多的进程。
多线程技术具有明显的优越性:
1)建线程不需分配资源,因此创建线程比创建进程速度快,且系统开销少;
2)线程间的通信在同一地址空间中进行,故不需要额外的通信机制,使通信更简便,信息传送速度也快;
3)线程能独立执行,能充分利用和发挥处理器与外围设备并行工作的能力。
十一、死 锁
1、死锁概念
若系统中存在一组进程,它们中的每个进程都占用了某种资源,而又都在等待其中另一个进程所占用的资源,这种等待永远不能结束,则说明系统出现了死锁。
2、死锁形成原因
系统中形成死锁的原因有两种:
一是操作系统对资源的管理不当所引起的;
当若干进程需求资源的总数大于系统能提供的资源数时,进程间就会出现竞争资源的现象,如果对进程竞争资源管理或分配不当就会引起死锁。
二是没有顾及进程并发执行时可能出现的情况,与并发进程的执行速度有关。例:5个哲学家吃通心面问题。
3、系统出现死锁的四个必要条件
1)互斥使用资源
每个资源每次只允许一个进程使用。
2)占有并等待资源
进程占有某些资源后又申请资源而得不到满足,处于等待资源状态且不释放已经占有得资源。
3)不可强占资源
任何进程不能抢夺其它进程占用的资源,即已被占用的资源只能由占用资源的进程自己来释放。
4)循环等待资源
存在一组进程,其中每个进程都在等待另一个进程占用的资源。
注意,系统出现死锁的以上四个条件是必要条件而不是充分条件,只要破坏其中任何一个条件就可以防止死锁。
4、死锁的防止
死锁的防止方法:如果有死锁形成,则4个必要条件一定同时成立,于是,只要采用的资源分配策略能使其中之一不成立,则就能防止死锁的发生。
(1)互斥条件
要使互斥使用资源的条件不成立,唯一的资源分配策略是允许进程共享资源。
如“只读文件”是一种很好的共享资源。
要破坏“互斥使用资源”的条件经常是行不通的。如:打印机不能被多个进程共享。对可共享的磁盘来说,任何时刻也只允许一个进程启动它。
(2)占有并等待条件
要是占有并等待资源的条件不成立,经常使用两种资源分配策略:静态分配资源和释放已占资源。
静态分配资源策略(也称为预分配资源)——要求每个进程在开始执行前就申请它所需要的全部资源,仅当系统能满足进程的资源申请要求且把资源分配给进程后,该进程才能开始执行。
特点:静态分配资源的策略实现简单,但降低了资源的利用率。
释放已占资源策略——这种分配策略是仅当进程没有占有资源时才允许它去申请资源。如果进程已占用了某些资源而又要再申请资源,则它应先归还所占的资源后再申请新资源。
特点:仍会使进程处于等待资源状态,但不会出现占有了部分资源再等待其它资源的现象。
(3)可抢夺条件
抢占式资源分配策略:要使不可抢占其它进程占有的资源不成立,可以约定如下:如果一个进程已经占有了某些资源又要申请新资源,而新资源不能满足必须等待时,系统可以抢夺该进程已有的资源。具体做法如下:
一个进程申请的资源尚未被占用,则系统可把资源分配给该进程。
若进程A申请的资源R已被进程B占用,则查看进程B的状态。如果进程B处于等待另一个资源的状态,那么就抢夺进程B已占的资源R并把R分配给进程A;如果进程B不是处于等待资源状态,则让进程A处于等待资源R的状态。
一个等待资源的进程只有再得到自己申请的新资源和所有被抢夺的老资源后才能继续执行。
这种可抢夺的资源分配策略不是对所有资源都适用的,它只适合于主存和处理器。
例如:对打印机、磁带机等就不能采用抢夺的方式,否则会造成混乱。
(4)循环等待条件
按序分配资源——要使循环等待条件不成立可采用按序分配的资源分配策略。具体做法是把系统中所有资源排序,对每个资源确定一个编号,规定任何一个进程申请两个以上的资源时,总是先申请编号最小的资源,再申请编号大的资源。
2、死锁的避免
死锁的避免是解决死锁问题的另一种方法,其思想是当估计到可能有死锁发生时再设法避免死锁。它不同于死锁的防止。
(1)安全状态
如果操作系统能保证所有进程在有限的时间能得到需要的全部资源,则称系统处于安全状态,否则说系统是不安全的。
不安全状态并不一定会发生死锁,但它隐含着将发生死锁。只要系统能保持安全状态就可以避免死锁的发生。
例:设系统共有12个同类资源,三个进程。
1)某一时刻进程占有资源的情况如下:
进程
|
已占资源数
|
还需要资源数
|
最大需求数
|
P1
|
2
|
7
|
9
|
P2
|
5
|
5
|
10
|
P3
|
2
|
2
|
4
|
此时系统还剩3个资源,处于安全状态。
2)若进程P1提出再分配一个资源的要求,则进程占有资源的情况如下:
进程
|
已占资源数
|
还需要资源数
|
最大需求数
|
P1
|
3
|
7
|
9
|
P2
|
5
|
5
|
10
|
P3
|
2
|
2
|
4
|
则系统处于不安全状态。这种不安全状态是由于资源分配不当造成的。
不安“全状态”与“死锁”两着并不是等同的。不安全状态隐含着死锁将会发生。
(2)银行家算法
是在安全状态下系统接到一个进程的资源请求后,就先判断这个资源请求是否超过了自己所要申请的总的资源数目,判断完毕后再继续进行下一个判断,即判断是否小于系统现有的可以分配的资源数目。如果这两个判断都通过,则系统把资源分配给该进程,系统检查现在的系统是否处于安全状态,如果安全则正式把资源分配给进程,以完成此次分配。否则刚才的试分配作废,如下表所示。
例题
假设系统中有三类互斥资源R1、R2和R3,可用资源数分别为10、5和7。在T0时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下表所示。如果进程按___1___序列执行,那么系统状态是安全的。
资源
进程
|
最大需求量
R1 R2 R3
|
已分配资源数
R1 R2 R3
|
P1
P2
P3
P4
P5
|
7 5 3
3 2 2
9 0 2
2 2 2
4 3 3
|
0 1 0
2 0 0
3 0 2
2 1 1
0 0 2
|
A.P1→P2→P4→P5→P3 B.P2→P1→P4→P5→P3
C.P2→P4→P5→P1→P3 D.P4→P2→P4→P1→P3
解答:C
解答:
资源分配图
资源
进程
|
最大需求量
R1 R2 R3
|
还需要的资源量
R1 R2 R3
|
已分配资源数
R1 R2 R3
|
P1
P2
P3
P4
P5
|
7 5 3
3 2 2
9 0 2
2 2 2
4 3 3
|
7 4 3
1 2 2
6 0 0
0 1 1
4 3 1
|
0 1 0
2 0 0
3 0 2
2 1 1
0 0 2
|
首先除去已经分配的资源还剩下的资源数为R1=3,R2=3,R3=2;接着看一下还需要的资源数目,知道P1、P3和P5都不能够分配,因为剩下的资源不够。下面就要从P2和P4出发寻找安全序列,我们可以找到一个从P2开始的一个安全序列,P2、P4、P5、P1、P3;需要注意的是:一个进程资源全部获得之后就执行,完毕后释放所有申请的资源,这些资源还可以参与到下一个进程的资源分配。
十二、存储管理
1、绝对地址和逻辑地址
绝对地址
主存储器以字节为编址单位,每个字节都有一个地址与其对应。这些地址成为主存储器的“绝对地址”,由绝对地址对应的主存储空间称为“物理地址空间”。
逻辑地址
用户程序中使用的地址称为“逻辑地址”,由逻辑地址对应的存储空间称为“逻辑地址空间”。逻辑地址从0开始编址。
重定位
把逻辑地址转换为绝对地址的工作称为“重定位”或“地址转换”。
2、页式存储管理
(1)基本原理
页式存储管理需要硬件的支持,首先把主存分成大小相同的许多块,块是进行主存空间分配的物理单位。因此,要求程序中的逻辑地址也进行分页,页的大小与块的大小一致。一个作业有多少页,那么在把它装入主存时就给它分配多少块主存空间。这些主存块可以是不相邻的。提供编程使用的逻辑地址由页号和页内地址两部分组成。用户编程时无需考虑如何分页的问题,仍使用连续的逻辑地址即可。地址结构确定了主存储器分块的大小,也就确定了页面的大小。
绝对地址计算公式:绝对地址 = 块号×块长 + 页内地址
(2)存储空间的分配与去配
最简单的方法就是用“位示图”构成主存分配表。位示图中的每一位与一个主存储块对应,每一位的值可以取0或1。当取0时表示对应的块为空闲,当取1时表示已被占用。在位示图中增加一个字节记录当前剩余的空闲块数。
块号计算公式:块号 = 字号*字长 + 位号
若归还的块号为i,则在位示图中对应的位置为:
字号 = ëi /字长û
位号 = i mod 字长
(3)地址转换
(4)快表
页式存储管理中的页表一般是存放在主存储器中,因此,当要按给定的逻辑地址进行读写时,必须访问两次主存。第一次按页号读取页表中的块号,第二次按计算出的绝对地址进行读写,这样就延长了指令的执行周期,降低了执行速度。
快表——为了提高页式存储管理的存取速度,通常设一个小容量的高速缓冲存储器。高速缓冲存储器可根据指定的特征,对各存储单元进行并行查找,因而查找速度极快,但造价很高。利用高速缓冲存储器存放页表中的一部分,把存放在高速缓冲存储器中的部分页表称为“快表”快表中登记了页表中一部分页号与主存块号的对应关系。
快表的理论依据是程序的局部性。
例题:
某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:
页号
|
物理块号
|
0
|
3
|
1
|
7
|
2
|
11
|
3
|
8
|
逻辑地址0A5C(H)所对应的物理地址是什么?要求:写出主要计算过程。
把0A5C(H)=0000101001011100
∵地址转换原理:页面偏移量与块内偏移量相同,页内地址等于块内地址。
∴逻辑地址转为物理地址 ∴只要实现页号与块号的转换
000010=2 查表 物理块号 11 11=001011
物理地址为:(0010111001011100)2=(2E5C)(H)
3、段式存储管理
(1)基本原理
基本原理——每个作业由若干段组成。每一段都有完整的逻辑意义,都可独立编制程序,每一段的长度可以不同,每一段的逻辑地址都是从0开始,段内的地址是连续的,而段与段之间的地址是不连续的。段式存储管理以段为单位进行内存空间分配。
段式存储管理提供给用户编程时使用的逻辑地址由两部分组成:段号和段内地址,其格式如下:
允许作业的最多段数及每段的最大长度由硬件的地址结构确定。
页式存储管理提供连续的逻辑地址空间,由系统自动地进行分页;而段式存储管理中作业的分段是由用户决定的,每段独立编程,因此,段间的逻辑地址是不连续的。
(2)主存空间的分配和去配
段式存储管理分配主存空间的方法与可变分区管理方式的分配方法相同,也有相同结构的主存空间分配表。所不同的是段式存储管理是为作业的每一个段分配一个连续的主存空间,当把作业装入主存储器后,为该作业建立一张“段表”。作业结束时,要收回该作业各段所占用的主存空间,使其成为空闲区,回收存储空间的方法与可变分区管理方式相同。
(3)地址转换与存储保护
段式存储管理需要硬件的地址转换机构做支撑。
4、可分页的段式存储管理
段式存储管理的一个致命的弱点是每段必须占据主存中一个连续区域。
基本思想:每个作业由用户进行分段,每一段的逻辑地址是从0开始的一组连续地址。但存储管理不是为每一段分配一个连续的主存空间,而是把每一段再分成若干页面,把每一段的信息按页存放在不必相邻的空闲主存块中。所以,段页式存储管理兼顾了段式在逻辑上清晰和页式在管理上方便的优点。
段式存储管理为每一个装入主存的作业建立一张段表,且对每一段要建立一张页表。段表的长度由作业分段的个数决定,段表中每个表目指出本段的页表始址和长度。页表的长度由对应段所分的页的个数决定,页表中的每一个表目指出本段的逻辑页号与主存块号的对应关系。
2、虚拟储器的工作原理
虚拟存储器的工作原理——把作业信息保存在磁盘上,当作业请求装入时,只将其中一部分先装入主存储器,作业执行过程中若要访问的信息不在主存中,则再设法把这些信息装入主存。
作业信息不全部装入主存能否保证正常工作?
程序具有两个特点:第一,程序执行时有些部分是彼此互斥的,即在程序的一次执行中,执行了这部分就不会去执行另一部分。例如,出错处理程序仅当有错时才被执行。第二,程序的执行往往具有局部性,在一段时间里可能循环执行某些指令或多次访问某一部分的数据。可见,没有必要把作业的全部信息同时存放在主存中。
例题(源自2004年网络工程工程师下半年上午试题)
虚拟存储管理系统的基础是程序的___1___理论,这个理论的基本含义是指程序执行时往往会不均匀的访问主存储器单元。根据这个理论,Denning提出了工作集理论。工作集是进程运行时被频繁地访问的页面集合。在进程运行时,如果它的工作集页面都在___2___内,能够使用该进程有效地运行,否则会出现频繁的页面调入/调出现象。
1: A. 全局性 B. 局部性 C. 时间全局性 D. 空间全局性
2: A. 主存储器 B. 虚拟存储器 C. 辅助存储器 D. U盘
解答:1.B 2.A
3、页式虚拟存储管理
基本原理
基本原理——页式虚拟存储管理是在页式存储管理的基础上实现虚拟存储器的,首先把作业信息作为副本存放在磁盘上,作业执行时,把作业信息的部分页面装入主存储器,作业执行时若所访问的页面已在主存中,则按页式存储管理方式进行地址转换,得到欲访问的主存绝对地址,若欲访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入主存中。
页表格式
0
1
|
主存块号
|
磁盘上的位置
|
标志
|
|
|
|
|
|
|
||
扩充后的页表格式
页号
|
块号
|
改变位
|
引用位
|
标志位
|
磁盘上的位置
|
|
|
|
|
|
|
缺页处理过程
1)根据当前执行指令中的逻辑地址查页表,判断该页是否在主存储器中。
2)该页标志为“0”,形成缺页中断。中断装置通过交换PSW让操作系统的中断处理程序占用处理器。
3) 操作系统处理缺页中断,处理的办法是查主存分配表找一个空闲的主存块,查页表找出该页在磁盘上的位置,启动磁盘读出该页信息。
4)把从磁盘上读出的信息装入找到的主存块中。
5)当页面信息被装入主存后,应修改页表中对应的表目。填上该页所占用的主存块号,把标志置为“1”,表示该页已在主存储器中。
6)由于产生缺页中断时的那条指令并没执行完,所以在把页面装入之后应重新执行被中断的指令。当重新执行改指令时,由于要访问的页面已被装入主存,所以可正常执行下去。
4、页面调度
页面调度——当主存中无空闲块时,为了装入一个页面而必须按某种算法从已在主存的页中选择一个页,将它暂时调出主存,让出主存空间,用来存放所需装入的页面,这个工作称为“页面调度”。
抖动——如果采用了一个不合适的算法,就会出现这样的现象:刚被调出的页面又立即要用,因而又要把它装入,而装入不久又被选种调出,调出不久又被装入,如此反复,使调度非常频繁。这种现象称为“抖动”或称“颠簸”。
一个好的页面调度算法应减少和避免抖动现象。
常用的页面调度算法有先进先出算法、最近最少用算法和最近最不常用算法。
先进先出调度算法(FIFO算法)
1)先出先出调度算法——先进先出调度算法总是选择最先装入主存储器的那一页调出,或者说是把驻留在主存中时间最长的那一页调出。
2)例:依次要访问的页号为7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1。现在只有三个主存块可供使用,把开始的三页先装入主存。执行时按FIFO算法进行页面调度。请画出页面装入和调出的情况并给出缺页中断次数。
缺页中断次数为12。 缺页中断率为12/20=60%
最近最少用调度算法(LRU)
1)LRU调度算法——LRU调度算法是基于程序执行的局部性,即程序一旦访问到某些数据和指令时可能在一段时间里还经常会访问它们,因此,不应该把这些页面调出。如果在最近一段时间里没有被访问过的页,则在最近的将来也可能暂时不会被访问,所以,需要装入新页时可以选择这些页面调出。
2) 堆栈的方法实现——这种方法能准确地选择最近最少用的页。栈中存放当前在主存中的页,每当访问一页时就调整一次,使栈顶总是指向最近访问的页,而栈底是最近最少使用的页。当发生缺页中断时总是选择栈底所指示的页面调出。
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1用LRU调度算法,则总共产生9次缺页中断,缺页中断率为9/20=45%
最近最不常用调度算法LFU(Least frequently used)
1)LFU调度算法——该算法是根据在一段时间内页面被使用的次数选择可以调出的页。如果一个页被访问的次数多,则是经常要使用的页,就不应该把它调出。所以这种算法总是选择被访问次数少的页面调出。
2) 一种简单的实现方法是为每一个页设置一个计数器,当访问一页时,就把该页对应的计数器加1。操作系统确定一个周期T,在周期T内,若没有发生缺页中断,则把所有的计数器清0,开始一个新的周期重新计数。若在周期T内发生缺页中断,则选择计数值最小的页调出,同时把所有的计数器清0。这种算法的实现开销大,并且T的大小难以确定。
5、缺页中断率
缺页中断率f = F/A
其中:A为作业执行中访问页面的总次数,F为缺页中断次数。
影响缺页中断的因素有:
1)分配给作业的主存块数。
每个作业只要能得到一块主存空间就可以开始执行。可增加同时执行的作业数,但是低效的。
设作业有n页,当能分到n/2块主存空间时才把它装入主存执行,则可使系统获得最高效率。
2)页面的大小
页面大,缺页中断率就低,反之,缺页中断率就高。
3)程序编制方法 (参见P77)
4)页面调度算法
理想的调度算法是当要装入一个新页而必须调出一个页面时,所选择调出的页应是以后再也不使用的页,或是距当前最长时间以后才使用的页。这种算法被称为“最佳算法”(OPT)。据估计,采用FIFO调度算法产生的缺页中断率约为最佳算法的三倍。
例题:
对于如下的页面访问序列:
1,2,3,4,1,2,5,1,2,3,4,5
当内存块数量分别为3和4时,试问:使用FIFO、LRU置换算法产生的缺页中断是多少?(所有内存开始时都是空的,凡第一次用到的页面都产生一次缺页中断)
FIFO
1
|
1
|
1
|
4
|
4
|
4
|
5
|
5
|
5
|
5
|
5
|
5
|
|
2
|
2
|
2
|
1
|
1
|
1
|
1
|
1
|
3
|
3
|
3
|
|
|
3
|
3
|
3
|
2
|
2
|
2
|
2
|
2
|
4
|
4
|
∴FIFO在3个内块时,缺G中断是9次
|
3
|
4
|
1
|
2
|
5
|
1
|
2
|
3
|
4
|
5
|
|
|
2
|
2
|
3
|
4
|
1
|
2
|
5
|
1
|
2
|
3
|
4
|
1
|
1
|
1
|
2
|
3
|
4
|
1
|
2
|
5
|
1
|
2
|
3
|
∴LRN在3个内存块时,缺页中断数为10次。
10、段式虚拟存储管理
段式虚拟存储管理以段式存储管理为基础,为用户提供比主存实际容量大的虚拟空间。
基本思想
段式虚拟存储管理把作业中的各分段信息保留在磁盘上,当作业可以投入执行时,首先把当前需要的一段或几段装入主存。作业执行时若要访问的段已在主存,则按段式存储管理的方式进行地址转换,若要访问的段不在主存,则产生一个“缺段中断”,由操作系统把当前需要的段装入主存。操作系统处理缺段中断的方法是:
1)查主存分配表,找出一个足够大的连续区以容纳该段。如果找不到,则检查空闲区总和;若空闲区总和能满足该段要求,那么进行适当移动将分散的空闲区集中。
2)若空闲区总和不能满足要求,可把主存中一段或几段调出,然后把当前要访问的段装入主存。
3)段被移动、调出和装入后,都要对段表中的相应表目作修改。
4)新的段装入后,让作业重新执行被中断的指令。
在段表中应增设段是否在主存的标志以及各段在磁盘上的位置,已在主存的段仍要指出该段在主存中的起始地址和占用主存区长度。
段页式虚拟存储管理结合了段式和页式的优点,但增加了设置表格(段表、页表)等开销,段页式虚拟存储管理一般只在大型计算机系统中采用。
十三、文件管理
文件系统——操作系统设计了对信息进行管理的功能,称为文件管理或文件系统。文件管理的主要工作是管理用户信息的存储、检索、更新、共享和保护。文件系统对文件统一管理,目的是方便用户且保证文件的安全可靠。面向用户,文件系统主要是实现对信息的“按名存取”。
1、文件保护方法
文件的保护是防止文件被破坏。
防止系统故障造成的破坏
文件系统必须有防止硬、软件的各种意外可能破坏文件的能力。为此,文件系统经常采用建立副本和定时转储的方法来保护文件。
防止用户共享文件可能造成的破坏
对共享文件要防止非法使用文件造成的破坏,可以用下面的方法规定用户使用文件的权限:
(1)采用树形目录结构
凡能得到某级目录的用户就可得到该级目录所属的全部目录和文件,按目录中规定的存取权限使用目录或文件。
(2)储控制表
列出每个用户对每个文件或子目录的存储权限,可以用一个两维矩阵表示。
存取控制表的最大问题是用户与文件较多时这个矩阵就很大,实现起来开销很大
(3)文件使用权限
在许多系统中(如UNIX)把与每个文件连接的用户分为三类:文件主、伙伴和一般用户,分别定义它们对文件的读、写、执行和删除权限。
2、文件的保密
文件的保密是防止不经文件拥有者授权而窃取文件。
常用的文件保密方法有:隐蔽文件目录、设置口令和使用密码等三种措施。
十四、设备管理
1、通道和通道程序
通道结构
通道——又称输入输出处理机,它能完成主存储器和外设之间的信息传输,并与CPU并行操作。
主存、通道、控制器和设备之间采用四级连接,实现了三级控制。
CPU与通道的通信
CPU与通道之间的关系是主从关系。
采用通道方式实现数据传输的处理过程如下:
当运行的程序要求传输时,CPU向通道发I/O指令,命令通道工作;
通道接收到CPU的I/O指令后,从内存中取出相应的通道程序,完成I/O操作;
当I/O操作完成(或出错),通道以中断方式中断CPU正在执行的程序,请求CPU的处理。
通道程序
通道命令(channel command word缩写CCW)
每一条通道命令规定了设备的一种操作。通道命令一般都由命令码、数据主存地址、传输字节数及标志码等部分组成。
通道地址字(CAW)——是用来存放通道程序首地址的主存固定单元。
通道状态字(CSW)——是存放通道和设备执行操作情况的若干个固定的主存单元。通道状态字中一般含有通道命令地址、设备状态、通道状态和剩余字节个数。
1、虚拟设备
虚拟设备是指用共享设备来模拟独占设备。
为什么要提供虚拟设备
由于独占设备采用静态分配方式,一台设备被一个作业独占后,在设备空闲时不允许其他作业去使用它们,因此,不能有效地利用这些设备。
当系统只有一台输入机和一台打印机时,就不能接受两个以上要求使用它们的作业同时执行,这不利于多道并行工作。
这些独占设备都是低速设备,在作业执行中往往由于等待它们的信息传输而延长了作业执行时间。
用共享磁盘来模拟输入机和打印机的工作,使每个作业都各自拥有独占使用的设备,且它们的传输速度与硬盘的传输速度一样快。因此采用虚拟设备提到了独占设备的利用率,也提到了系统的效率。
虚拟设备的实现
实现虚拟设备的基本条件
1)硬件必须配置大容量的磁盘;
2)硬件要有中断装置和通道;
3)具有*处理器与通道并行工作的能力;
4)操作系统应采用多道程序设计技术。
实现虚拟设备的基本条件
把一批作业的全部信息通过输入输出设备预先送到磁盘上,再从磁盘上选择若干个作业同时装入主存储器,并让它们同时执行。执行过程中的信息访问也不必启动输入机,只要直接从磁盘上读既可。作业产生的结果暂时存放在磁盘上,直到作业完成后才把作业结果从打印机上输出。
虚拟设备的实现技术——SPOOL系统
1)输入井和输出井
井是为了实现虚拟设备在硬盘上划出的专用存储空间,其中输入井中存放作业的初始信息,输出井中存放作业的执行结果。
2)斯普林(SPOOL联机的外围设备同时操作)系统
操作系统中实现虚拟设备的功能模块是在计算机控制下通过联机的外围设备同时操作(SPOOL)来实现的。
3)普林系统由预输入程序、井管理程序和缓输出程序等三部分程序组成。
4)预输入程序——把作业流中的每个作业的初始信息传送到输入井中保存,以备作业执行时使用。
5)井管理程序——可分成井管理读程序和井管理写程序。井管理读程序负责从输入井中读出信息供用户使用;井管理写程序把作业产生的结果保存到输出井中去。
6)缓输出程序——负责查看输出井中是否有待输出的结果信息,如果有,则启动打印机把作业的结果文件打印输出。
7)SPOOL系统中使用的数据结构
SPOOL系统中使用作业表、预输入表和缓输出表。
ii. 作业表——用来登记进入输入井中的各个作业的作业名、作业状态、作业拥有的文件数、预输入表和缓输出表的位置等。
iii. 输入井中的作业状态有:输入状态、收容状态、执行状态和完成状态。
输入状态:预输入程序启动了输入机正在把作业的信息传输到“输入井”。
收容状态:该作业的信息已经存放在“输入井”中,但尚未被选中执行。
执行状态:作业已被选中并装入主存开始执行。
完成状态:作业已执行结束,其执行结果在“输出井”中等待打印输出。
iv. 预输入表——每个作业有一张预输入表,用来登记该作业初始信息(通常是源程序和数据等)的各个文件。指出个文件的文件名、传输文件信息时使用的设备类型、文件的长度以及文件的存放位置等。
v. 缓输出表——对每个作业设置一张缓输出表,用来 登记该作业产生的结果文件。
8)虚拟设备的好处
作业执行时在磁盘上读写信息代替使用输入机和打印机的读写操作,不仅使多个作业能同时执行,而且加快了作业的执行速度;在作业执行的同时还可利用输入机继续预输入作业信息和利用打印机输出结果。因此,虚拟设备极大地提高了独占设备的使用效率,充分利用系统的资源,提高了系统单位时间内处理作业的能力。
十五、作业管理
1、作业调度
作业调度——是指操作系统根据允许并行工作的道数和一定的算法从输入井选取若干作业把它们装入主存储器,使它们有机会获得处理器运行。实现从输入井选取作业的程序称为作业调度程序。
2、作业调度算法
作业周转时间Ti = Ei – Si
其中Si为作业Pi进入输入井的时间,Ei为该作业被选中执行得到计算结果的时间。
平均周转时间: T = (∑Ti)/n
对每个作业来说,希望周转时间Ti尽可能小,而从系统角度看,希望平均周转时间尽可能小。
周转时间和平均周转时间的大小与选用的调度算法有关。
常用的作业调度算法有:先来先服务算法、计算时间短的作业优先算法、响应比最高者优先算法。
(1)先来先服务算法
按照作业进入输入井的先后次序来挑选作业,先进入输入井且资源能满足的作业优先被挑选。
例题:
有一个多道程序设计系统,采用不允许移动的可变分区内存管理方式,设用户空间为100K,主存空间分配采用最先(首先)适应分配算法,作业调度和进程调度均采用先来先服务算法,今有如下作业序列:
作业名
|
进入输入井时间
|
需计算时间
|
主存量要求
|
A
|
10:06
|
42分钟
|
15K
|
B
|
10:18
|
30分钟
|
60K
|
C
|
10:30
|
24分钟
|
50K
|
D
|
10:36
|
24分钟
|
10K
|
E
|
10:42
|
12分钟
|
20K
|
假定所有作业都是计算型作业且忽略系统调度时间。则各作业被选中时间、占用处理器时间、执行结束时间和周转时间如下:
作业名(装入顺序)
|
装入主存时间
|
开始执行时间
|
执行结束时间
|
周转时间
|
A
|
10:06
|
10:06
|
10:48
|
42分钟
|
B |
10:18
|
10:48
|
11:18
|
60分钟
|
D
|
10:36
|
11:18
|
11:42
|
66分钟
|
C
|
11:18
|
11:42
|
12:06
|
96分钟
|
E
|
11:18
|
12:06
|
12:18
|
96分钟
|
该5道作业的平均周转时间为(42+60+66+96+96)/7=72分钟
先来先服务算法具有一定的公平性,容易实现。但当计算时间较长的作业先进入“输入井”而被选中执行时,就可能使计算时间短的作业长时间的等待。这不仅使这些用户不满意,而且系统平均周转时间变长,降低了系统的吞吐能力。
(2)计算时间短的作业优先算法
依据在输入井中的作业提出的计算时间为标准,优先选择计算时间短且资源能得到满足的作业。
上例结果:
作业名(装入顺序)
|
装入主存时间
|
开始执行时间
|
执行结束时间
|
周转时间
|
A
|
10:06
|
10:06
|
10:48
|
42分钟
|
B
|
10:18
|
10:48
|
11:18
|
60分钟
|
D
|
10:36
|
11:18
|
11:42
|
66分钟
|
E
|
11:18
|
11:42
|
11:54
|
72分钟
|
C
|
11:18
|
11:54
|
12:18
|
108分钟
|
它们的平均周转时间为(42+60+66+72+108)/5=69.6(分钟)
采用短作业优先算法可以得到最小的平均周转时间。
采用短作业优先算法应注意两个问题:
作业估计时间不准、不可靠。为了避免有些用户故意将自己的作业执行时间估计的短一些,可对超过估计时间的作业加价收费。
可能会使进入输入井时间较长但要求计算时间长的作业等待太长的时间,使这些, 用户不满意。
(3)响应比高优先算法
响应比=等待时间/计算时间
对输入井中的所有作业计算出它们的响应比,从资源能得到满足的作业中选择响应比高的作业优先装入主存运行。
例题:
某单道程序设计系统中,有三道作业A、B、C到达输入井和需要计算的时间如下:
作业名
|
到达输入井时间
|
需要计算时间
|
A
|
8:50
|
1.5小时
|
B
|
9:00
|
0.4小时
|
C
|
9:30<
|