《操作系统》考前秘籍
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《操作系统》考前秘籍相关的知识,希望对你有一定的参考价值。
期末知识点复习
- 状态变化
- 死锁
- 进程调度算法
- 作业调度算法
- 死锁预防
- 页表寄存器
- 分页与分区
- 重定位
- 存储保护
- 虚存管理和实存管理的区别
- 请求分页管理
- 缺页中断
- 中断
- Belady现象
- 请求段的分配管理
- LRU置换算法所基于的思想
- 虚拟存储
- 页式虚拟存储管理
- 程序动态链接
- 首次适应算法的空闲区
- 最差适应算法
- 内存碎片
- 抖动
- 在固定分区分配中
- 在可变式分区分配方案
- 可重入码
- 页式存储管理
- 存储模型
- 段式存储管理
- IO控制方式
- 缓冲技术
- 磁盘设备
- SPOOLing假脱机技术
- IO重定向
- 分时操作系统
- 系统开销
- 通信时中断计算
- 数据块处理时间(单缓冲双缓冲)
- 文件
- 多道程序设计
- 进程
- UNIX 操作系统 (分时操作系统)
- 操作系统的特征
- 分区
- 原语
- 系统调用
- 五大类型操作系统各自的特点
- 比较页式虚拟存储器和段式虚拟存储器的优缺点
- 简述什么是RAID,RAID0
- SimpleTest
整理与往年卷子,copy过来,加深一点印象
- 通道能够完成(CPU与主存)之间数据的传输。
通道是独立于CPU的、专门负责数据共享以及传输工作的处理单元。
通道是计算机系统中传送信息和数据的装置。主要有主存储器读写通道和输入、输出通道。
一个独立于CPU的专门I/O控制的处理机,控制设备与内存直接进行数据交换。它有自己的通道命令,可由CPU执行相应指令来启动通道,并在操作结束时向CPU发出中断信号。
通道指令的格式一般由:操作码,记数段,内存地址段,结束标志组成。一个系统中可设立三种类型的通道:字节多路通道、数组多路通道、选择通道。
- 没有了(OS)计算机系统就启动不起来了。
- 特权指令可以在(任意的时间)中执行。
- 中断机构是多道操作系统不可缺少的硬件支持。
- 一般用户更喜欢使用的系统是多道批处理
- 与计算机硬件关系最密切的软件是 OS
- 现代OS具有并发性和共享性,是由(多道程序)的引入而导致的。
- 早期的OS主要追求的是 系统的效率
- 单用户单任务 不是多道程序系统。
- 系统的主要功能有 处理机管理、存储器管理、设备管理、文件系统
- 单处理机计算机系统中 处理机操作和通道操作是并行操作的。
通道的出现则进一步提高了CPU的效率.这是因为通道是一个特殊功能的处理器.它有自己的指令和程序专门负责数据输入输出的传输控制.而CPU将“传输控制”的功能下放给通道后只负责“数据处理”功能.
- 处理机的所有指令可以在(系统态)中执行
当CPU处于用户态时,不允许执行特权指令。当CPU处于系统态时,可执行包括特权指令在内的一切机器指令。
- 对程序进行编译功能不是操作系统直接完成的功能。
操作系统的功能: 进程与处理机管理、作业管理、存储管理、设备管理、文件管理。对应即可 编译器是在操作系统之上的,由编译器完成程序的编译
- 要求在规定的时间内对外界的请求必须给予及时相应的OS是 实时系统
- 操作系统是对(计算机资源)进行管理的软件
- 交互性 对多用户分时系统最重要
分时系统的四个特点:
1、多路性。允许一台主机上联接多台终端,系统按分时原则为每个用户服务;
2、独立性。每个用户各占一个终端,独立操作,互不干扰;
3、及时性。用户的请求能在很短的时间内获得响应;
4、交互性。用户可通过终端与系统进行广泛的人机对话。
分时操作系统是利用时间片,轮转对多个用户进行服务,而时间片轮转的方式肯定是实时性不高的,分时系统所考虑的主要是使多个用户感觉不到是在多人共享计算机,交互性较好。
- 运行效率 对多道批处理系统最重要。
- 及时性 对实时系统最重要。
- Windows 98 是(单用户多任务)操作系统。
- 分布式系统和网络系统的主要区别是 共享性
计算机网络系统要求用户在使用计算机资源时必须了解网络资源的分布情况,在 “共享 ” 某一台计算机资源时,必须了解网络分布情况。而分布式系统自动为用户调用网络资源,“共享 ” 同一台计算机时不需要申请资源。透明也是在共享的情况下才体现出来的,所以正确答案应该是共享性。网络系统,用户实实在在管理整个网络的每个计算机资源
分布式系统自动管理计算机资源,用户使用起来和单个计算机一样方便,但是在必要的时候效率会很高,因为后台会有资源的协调处理。
在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。系统中存在一个以全局的方式管理计算机资源的分布式操作系统。通常,对用户来说,分布式系统只有一个模型或范型。在操作系统之上有一层软件中间件(middleware)负责实现这个模型。一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web页面)一样。
在计算机网络中,这种统一性、模型以及其中的软件都不存在。用户看到的是实际的机器,计算机网络并没有使这些机器看起来是统一的。如果这些机器有不同的硬件或者不同的操作系统,那么,这些差异对于用户来说都是完全可见的。如果一个用户希望在一台远程机器上运行一个程序,那么,他必须登陆到远程机器上,然后在那台机器上运行该程序。
分布式系统和计算机网络系统的共同点是:多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在物理结构上是基本相同的。
他们的区别在于:分布式操作系统的设计思想和网络操作系统是不同的,这决定了他们在结构、工作方式和功能上也不同。网络操作系统要求网络用户在使用网络资源时首先必须了解网络资源,网络用户必须知道网络中各个计算机的功能与配置、软件资源、网络文件结构等情况,在网络中如果用户要读一个共享文件时,用户必须知道这个文件放在哪一台计算机的哪一个目录下;分布式操作系统是以全局方式管理系统资源的,它可以为用户任意调度网络资源,并且调度过程是“透明”的。当用户提交一个作业时,分布式操作系统能够根据需要在系统中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。在这个过程中,用户并不会意识到有多个处理器的存在,这个系统就像是一个处理器一样。
- 网络 操作系统允许在一台主机上同时连接多台终端,多个用户可以通过各自的终端同时交互的使用计算机。
- 如果分时操作系统的时间片一定,那么(用户数越多),则相应时间越长。
- 下面六个系统中,必须是实时操作系统的有
实时系统,顾名思义对系统的响应时间有要求。航空订票系统,过程控制系统,机器口语翻译系统这三个对于请求的响应显然都应该是实时的。
- 关于OS的描述
OS是系统资源管理程序
OS是为用户提供服务的程序
OS是其他软件的支撑程序
- OS的不确定性是指
程序的运行结果不确定
程序的运行次序不确定
程序多次运行的时间不确定
- 程序并发执行的特点
程序执行的间断性
相互通信的可能性
资源分配的动态性
- 产生死锁的必要条件
1.请求保持
2.互斥
3.循环等待
4.不可剥夺
- 在下面关于并发性的叙述中正确的是 并发性是指若干事件在同一时间间隔发生
- 一般来说,为了实现多道程序设计,计算机最需要 更大的内存
相比于单道程序设计(内存中仅有一道作业),多道程序设计按照一定的作业调度算法将作业队列中的作业调入内存,使他们共享CPU和各种资源。因此需要更大的内存以容纳超过一道的作业。
- Unix操作系统的进程控制块中常驻内存的是 proc结构
Unix把进程分成两大类:
一类是系统进程,另一类是用户进程。系统进程执行操作系统程序,提供系统功能,工作于核心态。用户进程执行用户程序,在操作系统的管理和控制下执行,工作于用户态。进程在不同的状态下执行时拥有不同的权力。
在Unix系统中进程由三部分组成,分别是进程控制块、正文段和数据段。Unix系统中把进程控制块分成proc结构和user结构两部分
proc存放的是系统经常要查询和修改的信息,需要快速访问,因此常将其装入内存
状态变化
- 时间片到 进程从执行状态转变为就绪状态。
就绪状态—>运行状态:
获得处理机资源(分派处理机的时间片)
运行状态—>就绪状态:
1)处于运行状态的进程时间片用完
2)当有更高优先级的进程就绪时
运行状态—>阻塞状态:
1)进程请求资源(外设)使用和分配
2)等待某一事件的发生(IO操作完成)
阻塞状态—>就绪状态:
当进程等待事件到来(IO操作结束或者中断的结束)
- 一个正在运行的进程,当所分配的时间片用完后,将其挂在 就绪队列
- 某进程在运行过程中需要等待从磁盘上读入数据,此时该进程的状态将从运行变为阻塞
- 一个进程被唤醒意味着 进程变为就绪状态
- 下列性质中,哪一个不是分时系统的特征 成批性
- 在进程状态转换时,下列(阻塞态→运行态)转换是不可能发生的
- 下列各项工作步骤中,(作业调度程序为进程分配CPU)不是创建进程所必需的步骤。分配cpu时间片是执行的过程
- 创建进程的步骤(不需要立马分配CPU)
1,申请空白PCB(进程控制块);
2,为新进程分派资源;
3,初始化PCB;
4,将新进程插入就绪队列;
- 进程通过进程调度程序而获得CPU
进程优先级可以改变
CPU可以空转没有进程运行
得不到满足转为就绪状态
- 从资源管理的角度看,进程调度属于 处理机管理
处理机管理其实就是给进程控制和分配资源,考虑进程创建、进程撤销、如何避免冲突、如何死锁处理,其主要任务就是处理进程通信、进程调度等
-
一个进程释放一种资源将有可能导致一个或几个进程 由就绪变运行
-
一次I/O操作的结束,有可能导致 一个进程由睡眠变运行
-
当一个进程从CPU上退下来时,它的状态应变为 静止睡眠
-
为使进程由活动就绪变为静止就绪,应利用( Suspend )原语
-
一个进程可创建一个或多个线程
一个线程可创建一个或多个线程
一个线程可创建一个或多个线程 -
若系统中只有用户级线程,则处理机调度单位是 线程
-
一个进程是 PCB结构与程序和数据的组合
一个进程包括控制结构和执行结构;控制结构是进程控制块PCB,执行结构包括程序以及需要操纵的数据集合。
- 进程不是程序
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈 (stackregion)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。
- 引入线程可提高程序并发执行的程度,可进一步提高系统效率
线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
- 不管系统中是否有线程,进程都是拥有资源的独立单位
用户级线程是指有关线程的所有管理工作都由用户态运行的线程库(如POSIX的pthread库)完成,系统内核并不知道线程的存在。应用程序可以根据需要,在同一个进程中创建线程,自己设计调度单位,调度指定线程运行。由于内核是单线程,仍以进程为单位进行调度。核心级线程(系统支持线程)是指有关线程的所有管理工作都是由系统内核完成的。
对于普通的操作系统,未引入线程的话,进程是系统进行资源分 配和调度的独立单位
在多处理机操作系统中,引入线程后,进程是资源的分配单 位或者叫做资源的容器,线程是处理机的调度单位。
- 线程的切换,可能引起进程的切换
属于同一进程的多个线程之间的切换不会引起进程的切换,只有属于不同进程的线程之间的切换才会引起进程的切换。
- 进程的控制信息和描述信息存放在 PCB
- 进程依靠("合作"进程的唤醒)从阻塞状态过渡到就绪状态。
引起进程阻塞和唤醒的事件:
1、向系统请求共享资源失败。进程转变为阻塞状态。
2、等待某种操作完成。比如进程启动了I/O设备,必须等I/O操作完成后,进程才能继续。
3、新数据尚未到达。对于合作的进程,如果一个进程A需要先获得另一进程B提供的数据后,才能对该数据进程处理,只要数据尚未到达,进程A只能阻塞。当进程B提供数据后,便可以去唤醒进程A。
4、等待新任务到达,用于特定的系统进程。它们每当完成任务后,就把自己阻塞起来,等待新任务。
- 在Windows NT中( 进程 )可以处于就绪状态。
作业:向计算机提交任务的任务实体;
作业是指用户在一次解决或一个事务处理过程中要求计算机系统所做的工作的集合,包括用户程序、数据、作业说明书等。
进程:执行实体,是资源分配的基本单位;
线程:处理机调试的基本单位;
程序:先简单粗暴地理解为代码吧。
- 作用于一个进程只有一次的原语是 创建
- 在Unix系统中,处于(内存就绪)状态的进程最容易被执行。
- 从执行状态挂起的进程解除挂起时进入(就绪)状态。
- 一个进程执行过程中不可能对应 多个PCB
- 用P、V操作管理临界区时,信号量的初值一般应定义为 1
- 有m个进程共享同一临界资源,若使用信号量机制实现对一临界资源的互斥访问,则信号量的变化范围是 1 ~ -m
- 临界资源是互斥共享资源
- 对进程间互斥的使用临界资源,进程可以互斥的进入各自的临界区
- 设两个进程共用一个临界资源的互斥信号量mutex,当mutex=1时表示 没有一个进程进入临界区
- 设两个进程共用一个临界资源的互斥信号量mutex,当mutex=-1时表示 一个进程进入了临界区,另一个进程等待
- 当一进程因在记录型信号量S上执行P(S)操作而被阻塞后,S的值为 < 0
- 当一进程因在记录型信号量S上执行V(S)操作而导致唤醒另一进程后,S的值为 <= 0
- 如果信号量的当前值为-4,则表示系统中在该信号量上有(4)个进程等待
- 若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是 3,2,1,0,-1
- 若信号S的初值为2,当前值为-1,则表示有(1)个等待进程。
- 并发进程之间 可能需要同步或互斥
- 在操作系统中,有一组进程,进程之间具有直接相互制约性。这组并发进程之间 必定相关
- 为进程分配处理机 操作不是P操作可完成的。
P操作分配的是我们申请的资源,并不是处理机
信号量
信号量是最早出现的用来解决进程同步与互斥问题的机制。
信号量(Saphore)值表示相应资源的使用情况。信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个资源,因此S的值减1;当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源的进程数。请求者必须等待其他进程释放该类资源,才能继续运行。而执行一个V操作意味着释放一个资源,因此S的值加1;若S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。注意,信号量的值只能由PV操作来改变。
死锁
- 某系统采用了银行家算法, 系统处于不安全状态时可能会发生死锁
系统处于安全状态,一定不会发生死锁;
- 强占式静态优先权法 可能导致进程饥饿
抢占式保证了高优先级的进程可以直接抢夺低优先级进程的资源,优先运行;
静态优先权是指:在进程运行前就已经分配了固定的优先权,在进程运行的过程中不再对优先权进行调整,这样就导致了低优先级的进程一直得不到资源,即“饥饿”状态!
1. 预防死锁。
这是一种较简单和直观的事先预防的方法。
方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。
预防死锁是一种较易实现的方法,已被广泛使用。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。
2. 避免死锁。
该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,
而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
3. 检测死锁。
这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。
但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除掉。
4. 解除死锁。
这是与检测死锁相配套的一种措施。
当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。
常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。
死锁的检测和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
- 银行家算法是避免死锁
- 资源静态分配是预防死锁的方法
预防是破坏四大条件任意一条
避免是不破坏四大条件,对进程新的资源请求进行判断,如果有可能导致就不分配。
银行家算法 避免死锁
消进程法、剥夺资源法 解除死锁
资源静态分配法 预防死锁
资源分配图简化法 检测死锁
进程调度算法
-
为了照顾紧迫型作业,应采用 优先权调度算法
-
在采用动态优先权的优先权调度算法中,如果所有进程都具有相同优先权初值,则此时的优先权调度算法实际上和(先来先服务调度算法)相同。
-
作业从后备作业到被调度程序选中的时间称为 等待调度时间
-
资源静态分配法可以预防死锁的发生,因为使死锁四个条件中的(请求和保持条件)不成立。
静态分配资源,所有进程在开始运行之前,一次性地申请其在整个运行过程所需的全部资源。但在分配资源时,只要有一种资源不能满足某进程的要求,即使它所需的其他资源都空闲,也不分配给该进程,而让进程等待。
在进程的等待期间,它并未占有任何资源,摒弃了“保持”条件,避免发生死锁。
作业调度算法
先来先服务(FCFS)
First Come First Serve
- 算法思想
主要从“公平”的角度考虑(类似排队) - 算法规则
按照作业/进程到达的先后顺序进行服务 - 用于作业/进程调度
用于作业调度时,考虑的是哪个作业先到达后备队列;
用于进程调度时,考虑的是哪个进程先到达就绪队列 - 是否可抢占?
非抢占式的算法 - 优缺点
优点:公平、算法实现简单
缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。即,FCFS算法对长作业有利,对短作业不利。 - 是否会导致饥饿
不会
- 例题
短作业优先(SJF)
Shortest Job First
- 算法思想
追求最少的平均等待时间,最少的平均周转时间、最少的平均带权周转时间 - 算法规则
最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短) - 用于作业/进程调度
既可用于作业调度,也可用于进程调度。用于进程调度时称为“短进程优先(SPF, Shortest Process First)算法” - 是否可抢占?
SJF和SPF是非抢占式的算法。但是也有抢占式的版本–最短剩余时间优先算法(SRTN, Shortest Remaining Time Next) - 优缺点
优点:“ 最短的”平均等待时间、平均周转时间
缺点:不公平。对短作业有利,对长作业不利。可能产生饥饿现象。另外,作业/进程的运行时间是由用户提供的,并不一定真实,不一定能做到真正的短作业优先 - 是否会导致饥饿
会。如果源源不断地有短作业/进程到来,可能使长作业/进程长时间得不到服务,产生“饥饿”现象。如果一直得不到服务,则称为“饿死”
高响应比优先(HRRN)
Highest Response Ratio Next
- 算法思想
要综合考虑作业/进程的等待时间和要求服务的时间 - 算法规则
在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务
- 用于作业/进程调度
既可用 于作业调度,也可用于进程调度 - 是否可抢占?
非抢占式的算法。因此只有当前运行的作业/进程主动放弃处理机时,才需要调度,才需要计算响应比 - 优缺点
综合考虑了等待时间和运行时间(要求服务时间)
①等待时间相同时,要求服务时间短的优先(SJF 的优点)
②要求服务时间相同时,等待时间长的优先(FCFS 的优点)
③对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题 - 是否会导致饥饿
不会
死锁预防
对于死锁的预防(deadlock prevention):死锁产生时,产生死锁的四个必要条件必定同时保持,如果至少能使其中一个条件不满足,那么死锁将是不可能产生的了。四个必要条件如下:
破坏互斥条件。
破坏保持和请求条件 : 进程在开始运行前,必须获得所需的全部资源。若系统不能满足,则该进程等待,这就是资源的静态分配。这种分配方式使资源利用率很低。而且,许多程序在开始运行之前,不能精确提出所需资源数量。
破坏非剥夺条件。
破坏循环等待条件。
死锁的预防即不允许死锁的发生,可以从破除死锁发生的四个必要条件入手。因为如果不具备上述四个必要条件,那么死锁就一定不会发生。
(1)互斥:不容易破除
(2)占有并等待(请求和保持):静态资源分配,资源不够不开始。
(3)不可抢占:外界撤销某些进程。
(4)环路等待:进程按顺序访问资源(执行)(给资源编号)。
页表寄存器
- 分页存储管理的存储保护是通过(页表(页表寄存器))完成的。
- 把作业地址空间中使用的逻辑地址变成内存中物理地址称为 重定位
- 在可变分区存储管理中的紧凑技术可以集中空闲区
- 在存储管理中,采用覆盖与交换技术的目的是 减少程序占用的主存空间
覆盖技术的实现是把程序划分为若干个功能上相对独立的程序段,按照其自身的逻辑结构使那些不会同时运行的程序段共享同一块内存区域。程序段先保存在磁盘上,当有关程序的前一部分执行结束后,把后续程序段调入内存,覆盖前面的程序段。
交换技术:在分时系统中,用户的进程比内存能容纳的数量更多,系统将那些不再运行的进程或某一部分调出内存,暂时放在外存上的一个后备存储区,通常称为交换区,当需要运行这些进程时,再将它们装入内存
1、固定分区存储管理
其基本思想是将内存划分成若干固定大小的分区,每个分区中最多只能装入一个作业。
当作业申请内存时,系统按一定的算法为其选择一个适当的分区,并装入内存运行。
由于分区大小是事先固定的,因而可容纳作业的大小受到限制,而且当用户作业的地址空间小于分区的存储空间时,造成存储空间浪费。
一、空间的分配与回收
系统设置一张“分区分配表”来描述各分区的使用情况,登记的内容应包括:分区号、起始地址、长度和占用标志。
其中占用标志为“0”时,表示目前该分区空闲;否则登记占用作业名(或作业号)。有了“分区分配表”,空间分配与回收工作是比较简单的。
二、地址转换和存储保护
固定分区管理可以采用静态重定位方式进行地址映射。
为了实现存储保护,处理器设置了一对“下限寄存器”和“上限寄存器”。
当一个已经被装入主存储器的作业能够得到处理器运行时,进程调度应记录当前运行作业所在的分区号,且把该分区的下限地址和上限地址分别送入下限寄存器和上限寄存器中。
处理器执行该作业的指令时必须核对其要访问的绝对地址是否越界。
三、多作业队列的固定分区管理
为避免小作业被分配到大的分区中造成空间的浪费,可采用多作业队列的方法。即系统按分区数设置多个作业队列,将作业按其大小排到不同的队列中,一个队列对应某一个分区,以提高内存利用率。
2、可变分区存储管理
可变分区存储管理不是预先将内存划分分区,而是在作业装入内存时建立分区,使分区的大小正好与作业要求的存储空间相等。这种处理方式使内存分配有较大的灵活性,也提高了内存利用率。但是随着对内存不断地分配、释放操作会引起存储碎片的产生。
一、空间的分配与回收
采用可变分区存储管理,系统中的分区个数与分区的大小都在不断地变化,系统利用“空闲区表”来管理内存中的空闲分区,其中登记空闲区的起始地址、长度和状态。
当有作业要进入内存时,在“空闲区表”中查找状态为“未分配”且长度大于或等于作业的空闲分区分配给作业,并做适当调整;当一个作业运行完成时,应将该作业占用的空间作为空闲区归还给系统。
可以采用首先适应算法、最佳(优)适应算法和最坏适应算法三种分配策略之一进行内存分配。
二、地址转换和存储保护
可变分区存储管理一般采用动态重定位的方式,为实现地址重定位和存储保护,系统设置相应的硬件:基址/限长寄存器(或上界/下界寄存器)、加法器、比较线路等。
基址寄存器用来存放程序在内存的起始地址,限长寄存器用来存放程序的长度。处理机在执行时,用程序中的相对地址加上基址寄存器中的基地址,形成一个绝对地址,并将相对地址与限长寄存器进行计算比较,检查是否发生地址越界。
三、存储碎片与程序的移动
所谓碎片是指内存中出现的一些零散的小空闲区域。由于碎片都很小,无法再利用。
如果内存中碎片很多,将会造成严重的存储资源浪费。解决碎片的方法是移动所有的占用区域,使所有的空闲区合并成一片连续区域,这一技术称为移动技术(紧凑技术)。
移动技术除了可解决碎片问题还使内存中的作业进行扩充。显然,移动带来系统开销加大,并且当一个作业如果正与外设进行I/O时,该作业是无法移动的。
3、页式存储管理
基本原理
1.等分内存
页式存储管理将内存空间划分成等长的若干区域,每个区域的大小一般取2的整数幂,称为一个物理页面有时称为块。内存的所有物理页面从0开始编号,称作物理页号。
2.逻辑地址
系统将程序的逻辑空间按照同样大小也划分成若干页面,称为逻辑页面也称为页。程序的各个逻辑页面从0开始依次编号,称作逻辑页号或相对页号。每个页面内从0开始编址,称为页内地址。程序中的逻辑地址由两部分组成:
逻辑地址
页号p
页内地址 d
3.内存分配
系统可用一张“位示图”来登记内存中各块的分配情况,存储分配时以页面(块)为单位,并按程序的页数多少进行分配。相邻的页面在内存中不一定相邻,即分配给程序的内存块之间不一定连续。
对程序地址空间的分页是系统自动进行的,即对用户是透明的。由于页面尺寸为2的整数次幂,故相对地址中的高位部分即为页号,低位部分为页内地址。
3.5.2实现原理
1.页表
系统为每个进程建立一张页表,用于记录进程逻辑页面与内存物理页面之间的对应关系。地址空间有多少页,该页表里就登记多少行,且按逻辑页的顺序排列,形如:
逻辑页号
主存块号
0
B0
1
B1
2
B2
3
B3
2.地址映射过程
页式存储管理采用动态重定位,即在程序的执行过程中完成地址转换。处理器每执行一条指令,就将指令中的逻辑地址(p,d)取来从中得到逻辑页号(p),硬件机构按此页号查页表,得到内存的块号B’,便形成绝对地址(B’,d),处理器即按此地址访问主存。
3.页面的共享与保护
当多个不同进程中需要有相同页面信息时,可以在主存中只保留一个副本,只要让这些进程各自的有关项中指向内存同一块号即可。同时在页表中设置相应的“存取权限”,对不同进程的访问权限进行各种必要的限制。
4、段式存储管理
基本原理
1.逻辑地址空间
程序按逻辑上有完整意义的段来划分,称为逻辑段。例如主程序、子程序、数据等都可各成一段。将一个程序的所有逻辑段从0开始编号,称为段号。每一个逻辑段都是从0开始编址,称为段内地址。
2.逻辑地址
程序中的逻辑地址由段号和段内地址(s,d)两部分组成。
3.内存分配
系统不进行预先划分,而是以段为单位进行内存分配,为每一个逻辑段分配一个连续的内存区(物理段)。逻辑上连续的段在内存不一定连续存放。
3.6.2实现方法
1.段表
系统为每个进程建立一张段表,用于记录进程的逻辑段与内存物理段之间的对应关系,至少应包括逻辑段号、物理段首地址和该段长度三项内容。
2.建立空闲区表
系统中设立一张内存空闲区表,记录内存中空闲区域情况,用于段的分配和回收内存。
3.地址映射过程
段式存储管理采用动态重定位,处理器每执行一条指令,就将指令中的逻辑地址(s,d)取来从中得到逻辑段号(s),硬件机构按此段号查段表,得到该段在内存的首地址S’, 该段在内存的首地址S’加上段内地址d,便形成绝对地址(S’+d),处理器即按此地址访问主存。
5、段页式存储管理
页式存储管理的特征是等分内存,解决了碎片问题;段式存储管理的特征是逻辑分段,便于实现共享。为了保持页式和段式上的优点,结合两种存储管理方案,形成了段页式存储管理。
段页式存储管理的基本思想是:把内存划分为大小相等的页面;将程序按其逻辑关系划分为若干段;再按照页面的大小,把每一段划分成若干页面。程序的逻辑地址由三部分组成,形式如下:
逻辑地址
段号s
页号p
页内地址d
内存是以页为基本单位分配给每个程序的,在逻辑上相邻的页面内存不一定相邻。
系统为每个进程建立一张段表,为进程的每一段各建立一张页表。地址转换过程,要经过查段表、页表后才能得到最终的物理地址。
- 存储管理方法中,( 单一连续区 )用户可采用覆盖技术
在单道连续分配中,当存储空间容不下程序时,可采用覆盖方法来解决;
覆盖基本思想:由于程序运行时并非各个部分都要访问,因此可以将用户空间分成一个固定区和多个覆盖区。
将经常活跃的放入固定区,将那些将要用的段放入覆盖区,在需要时提前调入覆盖区,替换原有的段。
覆盖技术是早期在单一连续存储管理中使用的扩大存储器容量的一种技术。
- 在内存分配的"最佳适应法"中,空闲块是按 块的大小从小到大排序
最优适应算法:通常将空闲区按长度递增顺序排列。查找时总是从最小一个空闲区开始,直到找到满足要求的分区为止。此算法保证不会分割一个更大的区域,使得装入大作业的要求容易得到满足。
补充:
首次适应算法:通常将空闲区按地址从小到大排列。查找时总是从低地址开始,可使高地址尽量少用,以保持一个大空闲区,有利于大作业的装入;缺点是内存低地址和高地址两端的分区利用不平衡,回收分区较麻烦。
最坏适应算法:通常将空闲区按长度递减顺序排列
查找时从最大的一个空闲区开始,总是挑选一个最大的空闲区分割给作业使用,其优点是使剩下的空闲区不致于太小,这样有利于中小型作业,但不利于大作业。
- 段的逻辑地址形式是段号10位,段内地址20位,内存1MB,辅存10GB。那么虚拟存储器最大实际容量可能是:
虚拟存储器最大实际容量= min(计算机地址,内存+辅存)。计算机地址= 2^ 10 * 2^20=1024M
段内地址20位说白了就是段内偏移量,对应2^20个地址,如果按字节编址就是1024*1024B=1MB
10位段号说白了就是最多2^10个段,也就是1024段,每段内部又对应1MB,总共就是1024MB=1GB
- 用空白链记录内存空白块的主要缺点是 分配空间时可能需要一定的查链时间
C 首次适应,是按地址排序,然后依次找到大小满足要求(比需要的大即可)的内存块,划分出一定大小,剩下空闲块的还在链上。
D最佳适应,空闲块还是从小到大排序,找到大小最接近的内存块。摘链,多出来的再插入链表。
对于选项C,D,空间地址是递增的,每个空白块的大小不确定,所以这两个算法只需在链表中查找所需大小的空白块,没有好不好实现一说。
对于选项A,指针大小4字节(32位),和指针所指向的空白块相比,其大小基本可以忽略,就算指针很多,占用了空间,但也说明了空白块也很多,所以对比下,指针所占空间基本可以忽略。
B选项:在分配空间的时候,会进行空白块的查找。根据算法的不同,欲分配空间大小的不同,其查找的时间总是不容易计算的。
- 一般而言,计算机中(虚拟存储器)容量(个数)最多
一般情况下虚拟内存的大小大于物理内存与外部存储的大小总和。比如对于一台80x86上运行的32位Linux,其可寻址的物理地址空间为4GB,虚存大小上限为 4GB * 进程数上限。
允许设置的虚拟内存最小值为2MB,最大值不能超过当前硬盘的剩余空间值,同时也不能超过32位操作系统的内存寻址范围——4GB。
分页与分区
- 分区管理和分页管理的主要区别是 分区要求一道程序存放在连续的空间内而分页没有这种要求
一、分区存储管理
1、固定分区:
优点:易于实现、开销小
缺点:存在内部碎片(分区内未被利用空间)、分区总数固定,限制了并发执行的程序数量。
2、动态创建分区:按照程序申请要求分配。
优点: 没有内部碎片
缺点:有外部碎片(难以利用的小空闲分区)
二、页式存储管理
优点:没有外部碎片,最后一页可能有内碎片但不大; 程序不必连续存放;便于改变程序占用空间大小。
缺点: 程序仍需要全部装入内存。
重定位
- 静态重定位的时机是 程序装入时
对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。
静态重定位:是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再进行重定位。
优点:是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。
缺点:
(1)程序的存储空间只能是连续的一片区域,而且在重定位之后就不能再移动。这不利于内存空间的有效使用。(2)各个用户进程很难共享内存中的同一程序的副本。
动态重定位:是在程序执行期间每次访问内存之前进行重定位。这种变换是靠硬件地址变换机构实现的。通常采用一个重定位寄存器,其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变化。
优点:
(1)程序占用的内存空间动态可变,不必连续存放在一处。
(2)比较容易实现几个进程对同一程序副本的共享使用。
缺点:是需要附加的硬件支持,增加了机器成本,而且实现存储管理的软件算法比较复杂。 现在一般计算机系统中都采用动态重定位方法。
- 采用动态重定位方式装入作业,在执行中允许(操作系统有条件的)将其移走。
绝对装入方式:绝对装入需要实现知道程序驻留在内存的位置,程序按照装入模块中的地址,将程序和数据装入内存。所以程序中的逻辑地址与实际地址完全相同,当操作系统把程序装入内存时,不需要对程序和数据进行地址修改;
-
把逻辑地址转变为内存的物理地址的过程称作 重定位或地址映射
-
采用可重定位分区分配方式,解决了碎片问题
可重定位分区分配方式也是属于连续分配方式的,只是它在内存碎片很多而导致的程序不能放入内存时,进行“紧凑”(可能会移动原来的数据的,所以此时就需要重定位啦紧凑完了,就能放进去啦~)
连续分配方式是指为一个用户程序分配一个连续的内存空间。在连续分配方式中,必须把一个系统或用户程序装入一连续的内存空间,如果在系统中只有若干个小的分区,即使他的容量总和大于要装入的程序,但由于这些分区不相邻接的小分区,他们单独的容量不能满足作业大小但它们的容量总和大于作业的要求时,若想把作业装入,可采用的可重定位分区分配方式。
可重定位分区分配方式与拼接方式不同在于拼接时机的不同。前者是在某个分区回收时立即进行拼接,这样在内存中总是只有一个连续的空闲区。但由于拼接很费时间,拼接频率过高会使系统开销加大。后者是当找不到足够大的空闲区且空闲区的容量可以满足作业要求时进行拼接。拼接的频率比第一种要小得多,但空闲区的管理稍微复杂一些。
动态重定位是指在虚拟地址空间向物理地址空间装换的过程中利用的技术。
存储保护
- 通常所说的"存储保护"的基本含义是 防止程序间相互越界访问
存储保护
在采用虚拟存储技术的存储系统中,一个多任务的操作系统经常将多个不同的程序同时调入主存执行,因此,首先需要保证这些程序间不会相互覆盖,并且,一个程序不能访问其他程序的数据以及不是分配给他的主存区域。其次,一个程序出错不会破坏其他用户程序和系统程序。通过一些限制方式保护主存中程序的技术被称为存储保护。简单的说,存储保护就是对主存中的程序和数据进行保护。为了降低开销,在进行存储保护的时候,通常不会直接保护单个存储单元,而是以页或者段为单位进行保护。存储保护主要包括以下两个方面内容。
存储区域保护: 存储区域保护主要是为了防止地址越界。常用的存储区域保护方式有基于页表或段表的保护,键保护和环保护。
(1)基于页表或段表的保护。在分页式虚存中,每个程序的虚页号是固定的经过地址变换后的实存页号也是固定的。这样,程序只能访问或影响到相应的主存页面,不会影响或访问其他程序空间。
在分段式虚存中,段表和页表的保护功能类似,但段表还需要记录段的上界,下界和段长,这样就很容易保证程序访问的地址不越界。
(2)键保护方式:操作系统为主存中的每一页分配一个键,通常被称为存储键,用于指明保护的等级。!存储键相当于一把锁,只有拥有打开这把锁的钥匙才能访问相应的页面。而钥匙就是操作系统为每道程序分配的!访问键,该访问键通常保存在!该道程序的《状态寄存器》中。当程序要访问主存的某一页时,程序的访问键要与该页的存储键!进行比较。若两键相符,则允许访问该页,否则拒绝访问。
(3)环保护方式:操作系统按照系统程序和用户程序的重要性及对整个系统正常运行的影响程度,将程序分为多个保护级别(层),每个级别称为一个环,这样,各个级别就构成了同心环。在现行程序运行前由操作系统为程序设置!个页的环号,并置入页表中。并将该道程序的开始环号保存在CPU的<现行环号寄存器》中。程序可以访问任何外层空间。访问内层空间则需要由操作系统的环控《例行程序》判断这个向内访问是否合法。pentium微处理器采用环保护方式。
访问方式保护
访问方式保护是为了保证程序不能对主存执行非授权的操作,通常,通过对页表或者段表设置访问权限标志位来实现。
对内存信息的使用可以有以下三种方式:读(R),写(w)和执行(E),因此相应的访问权限就是R,W,E三种方式形成的逻辑组合。例如,R+W+E表示可以进行任何访问(全权限),(R+W)*E表示能够读和写但不能执行。
通常,操作系统对每个程序访问方式保护的规定如下:《对本程序所在存储区域拥有全权限。对共享!数据区域(或获得授权的其他用户数据区域)可读不可写。对共享程序区域(或获得授权的其他用户程序区域)!可执行。对操作系统内核等非授权区域不可访问。
这种访问方式经常和存储区域保护结合起来实现。例如基于页表和段表的保护方式下,通常将访问方式“位”保存在段表和页表中,使得同一个段内的不同页有不同的访问方式。这样可以提高保护的灵活性。
存储保护一般以硬件保护为主,以降低系统实现开销,提高保护效率。当发生访问越界等非法操作时,硬件产生中断,进入操作系统处理。
虚存管理和实存管理的区别
- 虚存管理和实存管理的主要区别是 实存要求一程序全部装入内存才开始运行,虚存允许程序在执行的过程中逐步装入
虚存之所谓称之为虚,就是因为逻辑内存要大于物理内存。
假如程序要求全部装入才可以执行,根本没必要有虚存的存在了。
所以是否要求程序一次性全部装入内存,是实存和虚存的根本区别。
- 能够装入内存任何位置的代码程序必须是 可动态链接的
程序的链接有以下三种方式:
静态链接:在程序运行之前,先将各目标模块及它们所需的库函数链接成一个完整的可执行程序,以后不再拆开。
装入时动态链接:将用户源程序编译后所得到的一组目标模块,在装入内存时,釆用边装入边链接的链接方式。
运行时动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接。其优点是便于修改和更新,便于实现对目标模块的共享。内存的装入模块在装入内存时,同样有以下三种方式:
绝对装入。在编译时,如果知道程序将驻留在内存的某个位置,编译程序将产生绝对地址的目标代码。绝对装入程序按照装入模块中的地址,将程序和数据装入内存。由于程序中的逻辑地址与实际内存地址完全相同,故不需对程序和数据的地址进行修改。
绝对装入方式只适用于单道程序环境。另外,程序中所使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。而通常情况下在程序中釆用的是符号地址,编译或汇编时再转换为绝对地址。
可重定位装入。在多道程序环境下,多个目标模块的起始地址通常都是从0开始,程序中的其他地址都是相对于起始地址的,此时应釆用可重定位装入方式。根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对目标程序中指令和数据的修改过程称为重定位,地址变换通常是在装入时一次完成的,所以又称为静态重定位
静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入以上是关于《操作系统》考前秘籍的主要内容,如果未能解决你的问题,请参考以下文章
嗅探大厂学霸期末笔记之——数字逻辑与数字系统 “考前速成”(附带解释)