整理与往年卷子,copy过来,加深一点印象
通道是独立于CPU的、专门负责数据共享以及传输工作的处理单元。
通道是计算机系统中传送信息和数据的装置。主要有主存储器读写通道和输入、输出通道。
一个独立于CPU的专门I/O控制的处理机,控制设备与内存直接进行数据交换。它有自己的通道命令,可由CPU执行相应指令来启动通道,并在操作结束时向CPU发出中断信号。
通道指令的格式一般由:操作码,记数段,内存地址段,结束标志组成。一个系统中可设立三种类型的通道:字节多路通道、数组多路通道、选择通道。
通道的出现则进一步提高了CPU的效率.这是因为通道是一个特殊功能的处理器.它有自己的指令和程序专门负责数据输入输出的传输控制.而CPU将“传输控制”的功能下放给通道后只负责“数据处理”功能.
当CPU处于用户态时,不允许执行特权指令。当CPU处于系统态时,可执行包括特权指令在内的一切机器指令。
操作系统的功能: 进程与处理机管理、作业管理、存储管理、设备管理、文件管理。对应即可 编译器是在操作系统之上的,由编译器完成程序的编译
分时系统的四个特点:
1、多路性。允许一台主机上联接多台终端,系统按分时原则为每个用户服务;
2、独立性。每个用户各占一个终端,独立操作,互不干扰;
3、及时性。用户的请求能在很短的时间内获得响应;
4、交互性。用户可通过终端与系统进行广泛的人机对话。
分时操作系统是利用时间片,轮转对多个用户进行服务,而时间片轮转的方式肯定是实时性不高的,分时系统所考虑的主要是使多个用户感觉不到是在多人共享计算机,交互性较好。
计算机网络系统要求用户在使用计算机资源时必须了解网络资源的分布情况,在 “共享 ” 某一台计算机资源时,必须了解网络分布情况。而分布式系统自动为用户调用网络资源,“共享 ” 同一台计算机时不需要申请资源。透明也是在共享的情况下才体现出来的,所以正确答案应该是共享性。网络系统,用户实实在在管理整个网络的每个计算机资源
分布式系统自动管理计算机资源,用户使用起来和单个计算机一样方便,但是在必要的时候效率会很高,因为后台会有资源的协调处理。
在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。系统中存在一个以全局的方式管理计算机资源的分布式操作系统。通常,对用户来说,分布式系统只有一个模型或范型。在操作系统之上有一层软件中间件(middleware)负责实现这个模型。一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web页面)一样。
在计算机网络中,这种统一性、模型以及其中的软件都不存在。用户看到的是实际的机器,计算机网络并没有使这些机器看起来是统一的。如果这些机器有不同的硬件或者不同的操作系统,那么,这些差异对于用户来说都是完全可见的。如果一个用户希望在一台远程机器上运行一个程序,那么,他必须登陆到远程机器上,然后在那台机器上运行该程序。
分布式系统和计算机网络系统的共同点是:多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在物理结构上是基本相同的。
他们的区别在于:分布式操作系统的设计思想和网络操作系统是不同的,这决定了他们在结构、工作方式和功能上也不同。网络操作系统要求网络用户在使用网络资源时首先必须了解网络资源,网络用户必须知道网络中各个计算机的功能与配置、软件资源、网络文件结构等情况,在网络中如果用户要读一个共享文件时,用户必须知道这个文件放在哪一台计算机的哪一个目录下;分布式操作系统是以全局方式管理系统资源的,它可以为用户任意调度网络资源,并且调度过程是“透明”的。当用户提交一个作业时,分布式操作系统能够根据需要在系统中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。在这个过程中,用户并不会意识到有多个处理器的存在,这个系统就像是一个处理器一样。
实时系统,顾名思义对系统的响应时间有要求。航空订票系统,过程控制系统,机器口语翻译系统这三个对于请求的响应显然都应该是实时的。
OS是系统资源管理程序
OS是为用户提供服务的程序
OS是其他软件的支撑程序
程序的运行结果不确定
程序的运行次序不确定
程序多次运行的时间不确定
程序执行的间断性
相互通信的可能性
资源分配的动态性
1.请求保持
2.互斥
3.循环等待
4.不可剥夺
相比于单道程序设计(内存中仅有一道作业),多道程序设计按照一定的作业调度算法将作业队列中的作业调入内存,使他们共享CPU和各种资源。因此需要更大的内存以容纳超过一道的作业。
Unix把进程分成两大类:
一类是系统进程,另一类是用户进程。系统进程执行操作系统程序,提供系统功能,工作于核心态。用户进程执行用户程序,在操作系统的管理和控制下执行,工作于用户态。进程在不同的状态下执行时拥有不同的权力。
在Unix系统中进程由三部分组成,分别是进程控制块、正文段和数据段。Unix系统中把进程控制块分成proc结构和user结构两部分
proc存放的是系统经常要查询和修改的信息,需要快速访问,因此常将其装入内存
就绪状态—>运行状态:
获得处理机资源(分派处理机的时间片)
运行状态—>就绪状态:
1)处于运行状态的进程时间片用完
2)当有更高优先级的进程就绪时
运行状态—>阻塞状态:
1)进程请求资源(外设)使用和分配
2)等待某一事件的发生(IO操作完成)
阻塞状态—>就绪状态:
当进程等待事件到来(IO操作结束或者中断的结束)
1,申请空白PCB(进程控制块);
2,为新进程分派资源;
3,初始化PCB;
4,将新进程插入就绪队列;
进程优先级可以改变
CPU可以空转没有进程运行
得不到满足转为就绪状态
处理机管理其实就是给进程控制和分配资源,考虑进程创建、进程撤销、如何避免冲突、如何死锁处理,其主要任务就是处理进程通信、进程调度等
一个进程释放一种资源将有可能导致一个或几个进程 由就绪变运行
一次I/O操作的结束,有可能导致 一个进程由睡眠变运行
当一个进程从CPU上退下来时,它的状态应变为 静止睡眠
为使进程由活动就绪变为静止就绪,应利用( Suspend )原语
一个进程可创建一个或多个线程
一个线程可创建一个或多个线程
一个线程可创建一个或多个线程
若系统中只有用户级线程,则处理机调度单位是 线程
一个进程是 PCB结构与程序和数据的组合
一个进程包括控制结构和执行结构;控制结构是进程控制块PCB,执行结构包括程序以及需要操纵的数据集合。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈 (stackregion)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。
线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
用户级线程是指有关线程的所有管理工作都由用户态运行的线程库(如POSIX的pthread库)完成,系统内核并不知道线程的存在。应用程序可以根据需要,在同一个进程中创建线程,自己设计调度单位,调度指定线程运行。由于内核是单线程,仍以进程为单位进行调度。核心级线程(系统支持线程)是指有关线程的所有管理工作都是由系统内核完成的。
对于普通的操作系统,未引入线程的话,进程是系统进行资源分 配和调度的独立单位
在多处理机操作系统中,引入线程后,进程是资源的分配单 位或者叫做资源的容器,线程是处理机的调度单位。
属于同一进程的多个线程之间的切换不会引起进程的切换,只有属于不同进程的线程之间的切换才会引起进程的切换。
引起进程阻塞和唤醒的事件:
1、向系统请求共享资源失败。进程转变为阻塞状态。
2、等待某种操作完成。比如进程启动了I/O设备,必须等I/O操作完成后,进程才能继续。
3、新数据尚未到达。对于合作的进程,如果一个进程A需要先获得另一进程B提供的数据后,才能对该数据进程处理,只要数据尚未到达,进程A只能阻塞。当进程B提供数据后,便可以去唤醒进程A。
4、等待新任务到达,用于特定的系统进程。它们每当完成任务后,就把自己阻塞起来,等待新任务。
作业:向计算机提交任务的任务实体;
作业是指用户在一次解决或一个事务处理过程中要求计算机系统所做的工作的集合,包括用户程序、数据、作业说明书等。
进程:执行实体,是资源分配的基本单位;
线程:处理机调试的基本单位;
程序:先简单粗暴地理解为代码吧。
P操作分配的是我们申请的资源,并不是处理机
信号量
信号量是最早出现的用来解决进程同步与互斥问题的机制。
信号量(Saphore)值表示相应资源的使用情况。信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个资源,因此S的值减1;当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源的进程数。请求者必须等待其他进程释放该类资源,才能继续运行。而执行一个V操作意味着释放一个资源,因此S的值加1;若S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。注意,信号量的值只能由PV操作来改变。
系统处于安全状态,一定不会发生死锁;
抢占式保证了高优先级的进程可以直接抢夺低优先级进程的资源,优先运行;
静态优先权是指:在进程运行前就已经分配了固定的优先权,在进程运行的过程中不再对优先权进行调整,这样就导致了低优先级的进程一直得不到资源,即“饥饿”状态!
1. 预防死锁。
这是一种较简单和直观的事先预防的方法。
方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。
预防死锁是一种较易实现的方法,已被广泛使用。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。
2. 避免死锁。
该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,
而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
3. 检测死锁。
这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。
但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除掉。
4. 解除死锁。
这是与检测死锁相配套的一种措施。
当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。
常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。
死锁的检测和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
预防是破坏四大条件任意一条
避免是不破坏四大条件,对进程新的资源请求进行判断,如果有可能导致就不分配。
银行家算法 避免死锁
消进程法、剥夺资源法 解除死锁
资源静态分配法 预防死锁
资源分配图简化法 检测死锁
为了照顾紧迫型作业,应采用 优先权调度算法
在采用动态优先权的优先权调度算法中,如果所有进程都具有相同优先权初值,则此时的优先权调度算法实际上和(先来先服务调度算法)相同。
作业从后备作业到被调度程序选中的时间称为 等待调度时间
资源静态分配法可以预防死锁的发生,因为使死锁四个条件中的(请求和保持条件)不成立。
静态分配资源,所有进程在开始运行之前,一次性地申请其在整个运行过程所需的全部资源。但在分配资源时,只要有一种资源不能满足某进程的要求,即使它所需的其他资源都空闲,也不分配给该进程,而让进程等待。
在进程的等待期间,它并未占有任何资源,摒弃了“保持”条件,避免发生死锁。
First Come First Serve
Shortest Job First
Highest Response Ratio Next
对于死锁的预防(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
内存是以页为基本单位分配给每个程序的,在逻辑上相邻的页面内存不一定相邻。
系统为每个进程建立一张段表,为进程的每一段各建立一张页表。地址转换过程,要经过查段表、页表后才能得到最终的物理地址。
在单道连续分配中,当存储空间容不下程序时,可采用覆盖方法来解决;
覆盖基本思想:由于程序运行时并非各个部分都要访问,因此可以将用户空间分成一个固定区和多个覆盖区。
将经常活跃的放入固定区,将那些将要用的段放入覆盖区,在需要时提前调入覆盖区,替换原有的段。
覆盖技术是早期在单一连续存储管理中使用的扩大存储器容量的一种技术。
最优适应算法:通常将空闲区按长度递增顺序排列。查找时总是从最小一个空闲区开始,直到找到满足要求的分区为止。此算法保证不会分割一个更大的区域,使得装入大作业的要求容易得到满足。
补充:
首次适应算法:通常将空闲区按地址从小到大排列。查找时总是从低地址开始,可使高地址尽量少用,以保持一个大空闲区,有利于大作业的装入;缺点是内存低地址和高地址两端的分区利用不平衡,回收分区较麻烦。
最坏适应算法:通常将空闲区按长度递减顺序排列
查找时从最大的一个空闲区开始,总是挑选一个最大的空闲区分割给作业使用,其优点是使剩下的空闲区不致于太小,这样有利于中小型作业,但不利于大作业。
虚拟存储器最大实际容量= 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开始,程序中的其他地址都是相对于起始地址的,此时应釆用可重定位装入方式。根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对目标程序中指令和数据的修改过程称为重定位,地址变换通常是在装入时一次完成的,所以又称为静态重定位
静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。此外,作业一旦进入内存后,在整个运行期间不能在内存中移动,也不能再申请内存空间。
3)
动态运行时装入,也称为动态重定位,程序在内存中如果发生移动,就需要釆用动态的装入方式。装入程序在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此,装入内存后的所有地址均为相对地址。这种方式需要一个重定位寄存器的支持,如上图B所示。动态重定位的特点是可以将程序分配到不连续的存储区中;在程序运行之前可以只装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存;便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。
在页表中要有"状态位"、"访问位"等信息
在请求分页系统中,只要求将当前需要的一部分页面装入内存,便可以启动作业运行。在作业执行过程中,当所要访问的页面不在内存时,再通过调页功能将其调入,同时还可以通过置换功能将暂时不用的页面换出到外存上,以便腾出内存空间。
为了实现请求分页,系统必须提供一定的硬件支持。除了需要一定容量的内存及外存的计算机系统,还需要有页表机制、缺页中断机构和地址变换机构。请求分页系统的页表机制不同于基本分页系统,请求分页系统在一个作业运行之前不要求全部一次性调入内存,因此在作业的运行过程中,必然会出现要访问的页面不在内存的情况,如何发现和处理这种情况是请求分页系统必须解决的两个基本问题。为此,在请求页表项中增加了四个字段:
增加的四个字段说明如下:
状态位P:用于指示该页是否已调入内存,供程序访问时参考。
访问字段A:用于记录本页在一段时间内被访问的次数,或记录本页最近己有多长时间未被访问,供置换算法换出页面时参考。
修改位M:标识该页在调入内存后是否被修改过。
外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。
在请求分页系统中,每当所要访问的页面不在内存时,便产生一个缺页中断,请求操作系统将所缺的页调入内存。此时应将缺页的进程阻塞(调页完成唤醒),如果内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中相应页表项,若此时内存中没有空闲块,则要淘汰某页(若被淘汰页在内存期间被修改过,则要将其写回外存)。
页表项(页描述子)中各个位的作用:
- 页号
- 块号(页框号)
- 中断位: 用于判断该页是不是在内存中,如果是0,表示该页面不在内存中,会引起一个缺页中断
- 保护位(存取控制位):用于指出该页允许什么类型的访问,如果用一位来标识的话:1表示只读,0表示读写
- 修改位(脏位):用于页面的换出,如果某个页面被修改过(即为脏),在淘汰该页时,必须将其写回磁盘,反之,可以直接丢弃该页
- 访问位:不论是读还是写(get or set),系统都会设置该页的访问位,它的值用来帮助操作系统在发生缺页中断时选择要被淘汰的页,即用于页面置换
- 高速缓存禁止位(辅存地址位):对于那些映射到设备寄存器而不是常规内存的页面有用,假设操作系统正在循环等待某个I/O设备对其指令进行响应,保证硬件不断的从设备中读取数据而不是访问一个旧的高速缓存中的副本是非常重要的。即用于页面调入。
1)状态位P:用于指示该页是否已调入内存,供程序访问时参考;
2)访问字段A:用于记录本页在一段时间内被访问次数,供选择置换页面时参考;
3)修改位M:表示该页在调入内存后是否被修改过,供换出页面时参考;
4)外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考;
未被修改的页直接从文件区读入,而被置换时不需要调出;已被修改的页面,被置换时需要调出到交换区,以后从交换区调入。
请求分页系统,缺页时,如果页面未被修改是直接从磁盘文件区调入,对于那些可能修改的页面,在将它们换出时,便须调到对换区,以后需要时,再从对换区调入。(对换区采用连续分配方式,故磁盘I/O速度要较快一些。)
1.Belady现象:是指当所分配的物理块数增大而页故障数不减反增的异常现象。
2.抖动现象:是指刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出主存,这种频繁的页面调度行为称为抖动,或者颠簸。
请求分页管理中,若把页面尺寸增大一倍而且可容纳的最大页数不变,则在程序顺序执行时缺页中断次数会(B)
A.增加 B.减少 C.不变 D.可能增加也可能减少
因为在请求分页存储器中,由于页面尺寸增大,存放程序需要的页帧数就会减少,因此缺页中断的次数也会减少。
在硬件和环境相同的条件下,一个作业在(分页)存储管理系统中运行的时间最长。
分页式存储管理可能将连续的指令放置在不同的页中,会发生换页中断,而分段、段页都是逻辑分配空间,段长可变,逻辑上相对连续的指令放在同一段中,不会像分页那样频繁换页操作。
地址偏移量=逻辑地址%页面大小(1024)=0A1F(H)(2591)%1024=543
页号=逻辑地址/页面大小=2591/1024=2
查页表得到块号为3,
故物理地址=3*1024+543=3615=0E1F(H)
这是地址映射的知识点,为了提高系统效率,逻辑地址到物理地址的映射,是由处理机中设置的专门硬件完成,即地址管理部件。
当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址分为页号和页内地址两个部分,再以页号为索引去检索页表,查找操作由硬件执行。
随着内存的增大:缺页次数增加的现象:称之为 Belady 现象(异常现象); 我们都知道常用的页面淘汰算法有五种:
1 : FIFO: 先进先出 页面淘汰算法会产生Belady现象2 :LRU 最近最久未用置换算法
3 : LFU 最近访问频率最低的
4 : NUR 最近没有使用页面淘汰算法( NUR )
5: 理想的淘汰算法:( OPT )
这五种算法可见简单的将其分为两类,堆栈型算法和非堆栈型算法; 注意:堆栈型算法:最新压入到堆栈中的永远在栈顶;栈顶是刚刚访问过的,栈底是最久没有访问过的; LRU和LFU都 是堆栈型算法, OPT 也是堆栈算法; 但是 FIFO非堆栈型算法 ; 非堆栈式算法可能出现 Belady 问题,是栈式算法不会出现类似问题;
缺页中断的次数是由页面数量,页面置换算法与页面走向三个因素决定的,题目中采用FIFO,页面数增大,但是页面走向不确定,所以缺页次数可能增大页可能减小,比如Belady异常
中断类型分为如下两大类:
一、强迫性中断:正在运行的程序所不期望的,来自硬件故障或外部请求。
1、I/O 中断:来自外部设备通道;
2、程序性中断:运行程序本身的中断,如 溢出、缺页中断、缺段中断、地址越界。
3、时钟中断
4、控制台中断
5、硬件故障二、自愿性中断:用户在编程时要求操作系统提供的服务,使用访管指令或系统调用使中断发生。也称为访管中断。包括执行I/O,创建进程,分配内存,信号量操作,发送/接收消息。
访管中断是用户程序在运行中请求操作系统为其提供服务而执行一条“访管指令”所引起的中断,又称软件中断。访管中断是进程所期待的,它是自愿性的中断,又称自愿中断,其它几种中断不是运行进程所期望的,它属于强迫性中断事件。
外部中断一般是由计算机外设发出的中断请指求,如:键盘中断、打印机中断、定时器中断等
一种说法:
由于内存的大小是固定的,所以无论页面是大是小,可以进入内存的大小也是固定的,最多不超过内存的大小。实际上,分页的大小并不影响进入内存作业的数量。从宏观上看,进入内存的页面内容是没有变化的。
所以分页式虚拟存储管理系统中,页面的大小与可能产生的缺页中断次数关系不大。
在分页存储管理系统中,页面的大小是由计算机系统的地址结构所决定的,一般由软硬件共同决定。
对于某一种系统一般采用一种大小的页面(也有部分现代操作系统采用双页面系统的)。
在确定地址结构时,若选择的页面较小,一方面可使内碎片减小,并减少了内碎片的总空间,有利于提高内存利用率。
另一方面,也会使每个进程要求较多的页面,从而导致页表过长,占用大量内存。此外还会降低页面换进换出的效率。
若选择的页面较大,虽然可减少页表长度,提高换进换出效率,但却又会使页内碎片增大。由于内存的大小是固定的,所以无论页面是大是小,可以进入内存的作业大小也是固定的,最多不超过内存的大小。
实际上,分页的大小并不影响进入内存作业的数量。从宏观上看,进入内存的页面内容是没有变化的。所以分页式虚拟存储管理系统中,页面的大小与可能产生的缺页中断次数关系并没有确定的关系。
Belady现象是指:在分页式虚拟存储器管理中,发生缺页时的置换算法采用FIFO( 先进先出 )算法时,如果对—个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。
1.Belady现象:是指当所分配的物理块数增大而页故障数不减反增的异常现象。
2.抖动现象:是指刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出主存,这种频繁的页面调度行为称为抖动,或者颠簸。
适应于请求段的内存分配方法是 最佳适应和可变分区
请求分段系统是在分段系统的基础上,增加了请求调段功能和分段置换功能所形成的分段式虚拟存储系统。分段式存储管理方式分配算法与可变分区的分配算法相似,可以采用最佳适应法、最坏适应法和首次适应法等分配算法。显然仍然要解决外碎片的问题。
首次 适应分配算法: 这种算法按分区序号从空闲分区表的第一个表目开始查找该表, 把最先找到的大于或等于作业大小的空闲分区分给要求的作业。然后,再按照作业的大小,从该分区中划出一块内存空间分配给作业,余下的空闲分区仍留在空闲分区表中。如果查找到分区表的最后仍没有找到大于或等于该作业的空闲区,则此次分配失败。
优点:优先利用内存中低址部分的空闲分区,而高址部分的空闲分区很少被利用,从而保留了高址部分的大空闲区。为以后到达的大作业分配大的内存空间创造了条件。
缺点:低址部分不断被划分,致使留下许多难以利用的、很小的空闲分区。
循环 首次 适应分配算法:
这种算法是由最先适应分配算法经过改进而形成的。在为作业分配内存时,不再每次从空闲分区表的第一个表项开始查找,而是从上次找到的空闲区的下一个空闲区开始查找,直至找到第一个能满足要求的空闲区为止,并从中划分出一块与请求大小相等的内存空间分配给作业。为实现该算法,应设置一起始查找指针,以指示下一次开始查找的空闲分区,并采用循环查找方式。即如果最后一个空闲分区的大小仍不能满足要求,则返回到第一个空闲分区进行查找。
优点 :内存中的空闲区分布得更均匀,减少查找空闲分区的开销。
缺点 :系统中缺乏大的空闲分区,对大作业不利。
最佳适应分配算法:该算法从所有未分配的分区中挑选一个 最接近作业大小且大于或等于作业的空闲分区分配给作业
,目的是使每次分配后剩余的碎片最小。为了查找到大小最合适的空闲分区,需要查遍整个空闲分区表,从而增加了查找时间。因此,为了加快查找速度,要求将所有的空闲分区,按从小到大递增的顺序进行排序。这样,第一次找到的满足要求的空闲分区,必然是最佳的。
缺点 :每次分配之后形成的剩余部分,却是一些小的碎片,不能被别的作业利用。因此,该算法的内存利用率是不高的。 最坏适应分配算法:
该算法从所有未分配的分区中挑选一个 最大的空闲分区分配给作业
,目的是使分配后剩余的空闲分区足够大,可以被别的作业使用。为了查找到最大的空闲分区,需要查遍整个空闲分区表,从而增加了查找时间。因此,为了加快查找速度,要求将所有的空闲分区按从大到小递减的顺序进行排序。这样,第一次找到的空闲分区,必然是最大的。优点:最坏适应分配算法在分配后剩余的空闲分区可能比较大,仍能满足一般作业的要求,可供以后使用。从而最大程度地减少系统中不可利用的碎片。缺点:这种算法使系统中的各空闲分区比较均匀地减小,工作一段时间以后,就不能满足对较大空闲分区的分配要求。
最佳适应算法(Best Fit): 它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小
在最近的过去很久未使用的在最近的将来也不会使用
LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!
LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!
LRU:仅与上一次的使用时间有关,选择距离最远的;
LFU:与一定时间内的使用频率有关,选择频率最小的;
LRU 最近最久未使用 recently:也就是首先淘汰最长时间未被使用的页面!
LFU 最不频繁被使用 frequenly:也就是淘汰一定时期内被访问次数最少的页!
在下面关于虚拟存储器的叙述中,正确的是 要求程序运行前不必全部装入内存且在运行过程中不必一直驻留在内存。
虚拟存储的基本原理是:在程序装入时不必将其全部读到内存,而只需将当前需要执行的部分页或段读到内存,就可让程序开始执行。在程序执行过程中,如果需执行的指令或访问的数据尚未在内存,则由处理器通知操作系统将相应的页或段调入到内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的页或段调出保存在外存上,从而腾出空间存放将要调入的页或段
虚存的可行性基础是计算机中著名的局部性原理。
虚存最基本的特征是 多次性
虚拟内存的特征是:
1.虚拟扩充 即不是物理上而是逻辑上扩充了内存容量
2.部分装入 即每个作业不是全部一次性地装入内存,而是只装入一部分
3.离散分配 即不必占用连续的内存空间,而是“见缝插针”
4.多次对换 即所需的全部程序和数据要分成多次调入内存
根据程序执行的互斥性和局部性两个特点,我们允许作业装入的时候只装入一部分,另一部分放在磁盘上,当需要的时候再装入到主存,这样以来,在一个小的主存空间就可以运行一个比它大的作业。因此虚拟存储的主要技术是部分对换。
根据程序执行的互斥性和局部性两个特点,我们允许作业装入的时候只装入一部分,另一部分放在磁盘上,当需要的时候再装入到主存,这样以来,在一个小的主存空间就可以运行一个比它大的作业。同时,用户编程的时候也摆脱了一定要编写小于主存容量的作业的限制。也就是说,用户的逻辑地址空间可以比主存的绝对地址空间要大。对用户来说,好像计算机系统具有一个容量很大的主存储器,称为“虚拟存储器”。
虚拟存储(Storage Virtualization)是指将多个不同类型、独立存在的物理存储体,通过软、硬件技术,集成转化为一个逻辑上的虚拟的存储单元,集中管理供用户统一使用。这个虚拟逻辑存储单元的存储容量是它所集中管理的各物理存储体的存储量的总和,而它具有的访问带宽则在一定程度上接近各个物理存储体的访问带宽之和。
页式管理有: 静态页式管理; 动态页式管理;
其中,静态页式管理是在作业或进程执行前,把作业或进程全部装进内存中,如果内存中可用页面数小于请求页面数,该作业或进程等待。
动态页式管理不会把作业或进程一次性全部装进内存,只装入被反复调用或执行的部分,其他部分在执行过程中动态装入。
静态页式管理是一次性为要求内存的进程分配足够多的页面,无法将外存的空间利用起来实现虚存
虚存是 充分利用了地址空间
把辅存作为对主存的扩充,向用户提供了一个比实际主存大得多的地址空间,即充分利用了辅存的地址空间。
虚拟存储器的最大容量 = min(内存+外存,2^n)。n为计算机的地址总线位数。
页式虚拟存储管理的主要特点是不要求将作业同时全部装入到主存的连续区域
程序动态链接的时刻是 装入时 调用时
动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载库。大多数操作系统将解析外部引用(比如库)作为加载过程的一部分。在这些系统上,可执行文件包含一个叫做import
directory的表,该表的每一项包含一个库的名字。根据表中记录的名字,装载程序在硬盘上搜索需要的库,然后将其加载到内存中预先不确定的位置,之后根据加载库后确定的库的地址更新可执行程序。可执行程序根据更新后的库信息调用库中的函数或引用库中的数据。这种类型的动态加载成为装载时加载
,被包括Windows和Linux的大多数系统采用。 操作系统在加载应用软件时要完成的最复杂的工作之一就是加载时链接。其他操作系统可能在运行时解析引用。在这些系统上,可执行程序调用操作系统API,将库的名字,函数在库中的编号和函数参数一同传递。操作系统负责立即解析然后代表应用调用合适的函数。这种动态链接叫做运行时链接
。因为每个调用都会有系统开销,运行时链接要慢得多,对应用的性能有负面影响。现代操作系统已经很少使用运行时链接。
可以动态链接的库,在Windows上是dynamic link library (DLL),在UNIX或Linux上是Shared
Library。库文件是预先编译链接好的可执行文件,存储在计算机的硬盘上。大多数情况下,同一时间多个应用可以使用一个库的同一份拷贝,操作系统不需要加载这个库的多个实例。
动态链接 是指在作业运行之前,并不把几个 目标程序 段链接起来。要运行时,先将主程序所对应的 目标程序
装入内存并启动运行,当运行过程中又需要调用某段时,才将该段(目标程序)调入内存并进行链接。可见, 动态链接 也要求以段作为管理的单位。
首次适应算法(First Fit):
从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。
在可变式分区分配方案中,只需要进行一次比较就可以判定系统是否能满足作业对主存空间要求的算法是 最差适应算法
最先适应算法:依次判定后找到第一个满足要求的哈 最佳适应算法:对空闲区按从小到大排序,第一个满足的就是啦
最差适应算法:对空闲区按从大到小排序,第一个满足的就是啦固定式分区算法:是分区的
在内存管理中,内部碎片是已经被分配出去的的内存空间大于请求所需的内存空间。
外部碎片是指还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。
固定分区存在内部碎片,可变式分区分配会存在外部碎片; 页式虚拟存储系统存在内部碎片;段式虚拟存储系统,存在外部碎片
为了有效的利用内存,使内存产生更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。
为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。
在内存管理中,内部碎片是已经被分配出去的的内存空间大于请求所需的内存空间。
外部碎片是指还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。
段式存储管理会出现外部碎片。
静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变。
动态重定位即在程序运行过程中要访问数据时再进行逻辑地址与物理地址的变换(即在逐条指令执行时完成地址映射。
动态内存分配是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。
内存的静态分配和动态分配的区别主要是两个: 一是时间不同。静态分配发生在程序编译和连接的时候。动态分配则发生在程序调入和执行的时候。
二是空间不同。堆都是动态分配的,没有静态分配的堆。
系统"抖动"现象的发生是由 置换算法选择不当
在请求分页存储管理中,刚被替换出去的页,立即又要被访问因无空,此时因无空闲内存,又要替换另一页,而后者又是下一次要被访问的页,于是系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,这种现象称为抖动现象。一般都是由于置换算法不佳引起
在固定分区分配中,每个分区的大小是 可以不同但预先固定
固定分区分配,是满足多道程序设计的存储技术,可以将内存划分成多个区,每个区运行一个作业,从而达到多道程序设计的多个作业同时在内存中的设计。
但是固定分区分配是提前将内存划分成多个区,区的大小可以不同,但是划分好后,个数和大小都不能发生改变。
作业到来,选择一个合适大小的区放置,但是作业长度不一,不会有太合适的区恰好满足其大小,从而会造成区空间的浪费,并且此浪费非常严重。
在可变式分区分配方案中,某一作业完成后,系统收回其主存空间,并与相邻空闲区合并,为此需修改空闲区表,造成空闲区数减2的情况是 有上邻空闲区,也有下邻空闲区
作业归还分区,要调整空闲区表,把空闲区表调整成空闲区长度递减的次序排列登记。
可变分区分配方式下,当收回主存时,应检查是否有与归还区相邻的空闲区,若有,则应合并成一个空闲区。
相邻可能有上邻空闲区、下邻空闲区、既上邻又下邻空闲区、既无上邻又无下邻空闲区。
若有上邻空闲区,只修改上邻空闲区长度(为收回的空闲区长度与原上邻区长度之和)即可;
若有下邻空闲区,改记录这个下邻空闲区记录的地址为收回空闲区的地址,长度为下邻空闲区的长度和收回空闲区的长度即可;
若既有上邻又有下邻空闲区,改记录上邻区记录的长度(为上邻区长度、下邻区长度和收回区长度之和),再把下邻区记录的标志位改为空即可;
若既无上邻区又无下邻区,那么找一个标志位为空的记录,记下该回收区的起始地址和长度,且改写相应的标志位为未分配,表明该登记栏中指示了一个空闲区。
还有一种情况,合并后空闲区数不变,是有下邻区,没有上邻区
在可变式分区分配方案中,某一作业完成后,系统收回其主存空间,并与相邻空闲区合并,为此需修改空闲区表,造成空闲区数减 1 的情况是 有上邻空闲区,也有下邻空闲区
在可变分区存储管理中的拼接技术可以 集中空闲区
用“拼接”技术把存储空间内的碎片合并成一个更大的空间。
如果一个程序为多个程序所共享,那么该程序的代码在执行的过程中不能被修改,即程序应该是可重入码
可重入码:当被多个线程调用的时候,不会引用任何共享数据,他们是线程安全的。(注意与线程安全做区别 可重入是线程安全的真子集)
重入代码(Reentry code)也叫纯代码(Pure
code)是一种允许多个进程同时访问的代码。为了使各进程所执行的代码完全相同,故不允许任何进程对其进行修改。程序在运行过程中可以被打断,并由开始处再次执行,并且在合理的范围内(多次重入,而不造成堆栈溢出等其他问题),程序可以在被打断处继续执行,且执行结果不受影响。
物理地址=内存块号*块长+页内地址 ;
块的大小与叶大小一致;
由于页面大小是4K = 2^12 ,所以逻辑地址的后12位为 页内地址;
所以物理地址 = 2 *(2^12) + 0 = 8192;
逻辑地址=页号页面大小+页内地址=04096+0=0 页号=逻辑地址/页面大小; 0/4096=0
页内地址=逻辑地址%页面大小;0%4096=0 通过页号0找出对应的块号为2,另外,块大小=页面大小=4096
物理地址=块号块大小+页内地址=24096(4KB)+0=8192
存储模型可以分为六种方式:
这里的连续区应该就是单一连续区,页式存储改善了内存利用率低的特点
引入段式分配才是为了满足用户的需求
那么应该是引入多道序程序提高系统利用率,而基于段页式不连续的内存分配的交换技术更好地满足了多道程序的运行需要。
段号为2,那么查表可以知道段首地址为480KB,也就是说段号为2的这个段的段首在存储区中的位置为480KB,然后154为逻辑地址中的偏移量,也就是相对于地址480KB的相对位置,那么物理地址就是 480KB+154
首先,页式存储是一维的,段式存储是二维的。 其次,这是两种存储管理的设计初衷决定的,跟逻辑地址的结构没有关系。
在程序员的角度,你想操作一个内存地址,
(1)页式存储,你直接给一个逻辑地址就行,所以是一维的。虽然这个逻辑地址包含(页号,偏移量),但是,分页那是系统自己完成的事,我们不知道也不用关心最终地址到底在哪个页上。
(2)段式存储,你必须给出(段号,偏移量),所以是二维的。 因为分段的好处就是程序模块化,不同的段权限不同,所以在哪个段上,是我们关心的。
分段对应的是内存具体存储管理的一种方式,是对具体内存进行管理,段号+基地址,分段尺寸最大为具体内存。
在动态链接时先将主程序所对应的目标程序装入内存并启动运行,运行过程中需要调用某段时才将该段内存合并进行链接。
而作业的大小不受内存大小限制,由虚拟存储器解决空间不够问题,允许作业装入的时候只装入一部分,另一部分放在 磁盘上,当需要的时候再装入到主存,这样以来,在一个小的主存空间就可以运行一个比它大的作业。同时,用户编程的时候也摆脱了一定要编写小于主存容量的作业的限制。
在下面的I/O控制方式中,需要CPU干预最少的方式是 I/O通道控制方式
程序IO方式,是采用busy-waiting的方式,即CPU会采用轮询的方式来询问数据的方式来询问数据-------效果最差
中断IO方式,是设备控制器当取出一个数据之后向CPU发送一个中断,然后CPU将数据从控制器中取到CPU寄存器,再然后转移到内存中。这种方式,CPU是以字节的方式来响应数据的。
DMA方式,是CPU通过向DMA控制器设定若干参数,然后DMA打开了一条内存到设备的通道,这样,设备(内存)中的数据可以不通过CUl来进行数据交互。缺点是,DMA是多少设备就需要多少DMA,而且,DMA方式下,CPU的访问设备是以数据块为周期的。
IO通道方式,IO通道相当于一个简单的处理机,有自己的指令,也可以执行指令。指令存储在内存。
IO通道相当于一条PCI总线,一条IO通道可以连接所有的设备控制器。然后CPU向IO通道发出指令,IO通道将会自动进行获取数据。
另外,IO通道是以一组块为单位进行获取的。
所以,IO通道方式需要最少的CPU干预
一个独立于CPU的专门I/O控制的处理机,控制设备与内存直接进行数据交换。
它有自己的通道命令,可由CPU执行相应指令来启动通道,并在操作结束时向CPU发出中断信号。
通道指令的格式一般由:操作码,记数段,内存地址段,结束标志组成。
一个系统中可设立三种类型的通道:字节多路通道、数组多路通道、选择通道。
DMA控制器的出现已经减轻了CPU对数据输入输出的控制、使得CPU的效率合显著的提高.
而通道的出现则进一步提高了CPU的效率.这是因为通道是一个特殊功能的处理器.
它有自己的指令和程序专门负责数据输入输出的传输控制.而CPU将“传输控制”的功能下放给通道后只负责“数据处理”功能.这样.通道与CPU分时使用内存,实现了CPU内部运算与I/O设备的平行工作.
CPU输出数据的速度远远超过打印机的打印速度,影响程序执行速度,为解决这一问题,可以采用 缓冲技术
通道是一个独立与CPU的专管输入/输出控制的处理机,它控制设备与内存直接进行数据交换。引入通道的目的是让数据的传输独立于CPU,使CPU从繁重的I/O工作中解脱出来。它有自己的通道指令,这些指令受CPU启动,并在操作结束向CPU发出中断信号。通道技术主要是为了减轻CPU的工作负担,增加了计算机系统的并行工作程度。
CPU要完成一组I/O操作,只需要向I/O通道发送一条I/O指令,通道接到指令,通过执行通道程序,并且与设备控制器一起共同来实现对I/O设备的控制和操作。
CPU控制I/O通道,I/O通道控制设备控制器,设备控制器控制设备
通道是一种特殊的处理机,具有(执行I/O指令集)能力。
I/O通道的目的是为了建立独立的I/O通道,使得原来一些由CPU处理的I/O任务由通道来承担,从而解脱cpu。
通道所能执行的命令局限于I/O操作的指令,也就是执行I/O指令集。
虚拟存储器:它使得应用程序认为它拥有连续的可用的内存,而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
并行技术可以分为多进程编程和多线程编程。通常用IPC的形式来实现进程间的同步,如管道,信号量,消息队列或者共享存储。在所有IPC敏感词享存储器是最快的。
缓冲技术是为了缓和CPU和I/O设备速度不匹配的矛盾,提高CPU和I/O设备的并行性,在现代操作系统中,几乎所以的I/O设备在与处理机交换数据时都用了缓存区,并提供获得和释放缓冲区的手段。
总的来说,缓冲区技术用到了缓冲区,而缓冲区的引入是为了缓和CPU和I/O设备速度不匹配,从而可以有效的减少CPU的终端频率,提高CPU和I/O设备的并行性。
max(磁盘到缓冲区,CPU处理) + 缓冲区到用户区 = max(80, 30) + 40 = 120
缓存区存在的意义是:使用户输入数据的速度与cpu处理数据的速度相协调; 因而,用户输入数据的过程与cpu处理的过程可以并行;
缓冲是进一步提高两者的并行,而通道就是为了解放CPU才提出来的,如果没有通道,CPU需要对设备进行较多的控制,如何能并行?
缓冲区的作用是提高了IO速度,减少了中断的可能性
磁盘设备的特点
传输速率较高,以数据块为传输单位
I/O控制方式常采用DMA方式
可以寻址,随即地读/写任意数据块
一段时间内只允许多个用户(进程)访问
假脱机又称为Spooling,是用来保存设备输出的缓冲区,这些设备不能接受交叉的数据流。例如打印机虽然只能一次打印一个任务,但是可能有多个程序希望希望并发打印而又不能将其输出混在一起。应用程序的输出先是假脱机到一个独立的磁盘上。当应用程序完成打印时,假脱机系统将响应的待送打印机的假脱机文件进行排队。
虚拟设备是种技术,将独占设备变成共享设备
spooling技术又称“假脱机”技术 :是用软件的方式实现脱机技术 脱机技术:脱离主机的控制进行的输入/输出 操作
例子:共享打印机:打印机原本是一种“独占式”设备,使用spooling技术
可以变为逻辑上的共享设备,当多个用户进程提出打印请求时,系统会答应它们的请求,但不会真正把打印机分配给它们,而是把数据放到磁盘的输出井中,然后把该进程用户打印请求表挂到假脱机队列中,当打印机空闲时,才进行打印
SPOOLing (即 外部设备 联机并行操作),即Simultaneous Peripheral Operation
On-Line的缩写,它是关于慢速 字符设备 如何与计算机主机交换信息的一种技术,通常称为“ 假脱机 技术”。 SPOOLing 技术特点:
(1)提高了I/O速度.从对低速I/O设备进行的I/O操作变为对输入井或输出井的操作,如同脱机操作一样,提高了I/O速度,缓和了CPU与低速I/O设备速度不匹配的矛盾.
(2)设备并没有分配给任何进程.在输入井或输出井中,分配给进程的是一存储区和建立一张I/O请求表.
(3)实现了虚拟设备功能.多个进程同时使用一独享设备,而对每一进程而言,都认为自己独占这一设备,不过,该设备是逻辑上的设备.
①提高了I/O的速度。
②将独占设备改造为共享设备。
③实现了虚拟设备功能。
虚拟设备是种技术。假脱机对设备本身而言实现了将独占设备变成共享设备
使用SPOOLing系统的目的是为了提高(I/O设备)的使用效率。
SPOOLing (即外部设备联机并行操作),即Simultaneous Peripheral Operation On-Line的缩写,它是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为“假脱机技术”。
该技术是在通道技术和多道程序设计基础上产生的,它由主机和相应的通道共同承担作业的输入输出工作,利用磁盘作为后援存储器,实现外围设备同时联机操作。
SPOOLing系统由专门负责I/O的常驻内存的进程以及输入井、输出井组成;它将独占设备改造为共享设备,实现了虚拟设备功能。
缓和CPU与低速I/O设备速度不匹配的矛盾; 实现了 虚拟设备 功能 。
虚拟设备是指把一个物理设备变换成多个对应的逻辑设备。
通过SPOOLing技术可将一台物理I/O设备虚拟为多台逻辑I/O设备,允许多个用户共享一台物理I/O设备,如打印机。
是指将命令的执行结果重新导出到其他的设备或者文件。主要包括输入重定向和输出重定向
I/O重定向,是指用于I/O操作的设备可以更换(重定向),而不必改变应用程序。比如调试程序,可将所有输出送屏幕显示,而程序调试完后,如需正式打印出来,需将I/O重定向中的数据结构—逻辑设备表中的显示终端改为打印机。
在调试程序时,可以把所有输出送到屏幕显示,而不必正式输出到打印设备,其运用了 IO重定向
一计算机系统配备了三台HP1000激光打印机、一台绘图机。为此该系统需在内存中配置(2)个设备驱动程序。
把计算机与许多终端用户连接起来,分时操作系统将系统 处理机
时间与内存空间按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于时间间隔很短,每个用户的感觉就像他独占计算机一样。分时操作系统的特点是可有效增加资源的使用率。例如UNIX系统就采用剥夺式动态优先的CPU调度,有力地支持分时操作。——百度百科词条:分时操作系统
分时会导致进程切换,效率反而不高。 应该是多道程序的出现是为了提高系统资源的利用率
分时系统可以很好的将一台计算机提供给多个用户使用,主要用于查询系统。
用户需求表现:
1人机交互
2 共享主机
3 便于用户上机
进程数为 10 的情况下,系统开销比率等于切换进程总时间 / 进程总共运行时间,其中切换进程运行时间为 1010ms ,进程运行总时间为
30010+1010ms ,因此系统开销比率为 1010/(30010+1010),
可以看出系统开销比率与进程数无关,故选择等于选项。
cpu利用率的瓶颈是硬盘的读写慢:
一,安装 一个更快的硬盘。相当于拓宽公路。因此A肯定没有为题。
二,减少进程数。相当于本来拥堵的公路车采取限号,让整个路更通畅了。这里有一个误区,并不是进程数越多,cpu利用率越高。就好像公路上车越多,单位时间内通过的车就越多一样。也可能情况相反,还不如让车少一点,单位时间内通过的车可能会更多。
对换空间的硬盘利用率为97.7% 可见进程数目太多导致内存不足,导致频繁的换页
CPU和I/O设备占用率较低,而磁盘交换区占用率非常高,说明当前系统频繁缺页,频繁进行页面置换,导致真正执行任务的时间变短,效率变低,系统发生抖动。因此要缓解这种情况就需要降低系统缺页率,才能使系统有更多时间来处理任务而不是置换页面。
对于A,安装一个更快的硬盘,既把交换分区放在更快的硬盘上,相当于给你电脑把分页文件pagefile.sys放在固态硬盘上肯定比你放在机械硬盘上在交换页面的时候速度要快,但是这并没有从根本上解决页面置换算法的抖动现象,换入换出的频率并没有改变,只是一定程度上的改善了这一状况。
对于D,减少进程运行数目,这样每个进程分配到的内存空间会相对增大,可以有效降低缺页率。 还有在增加内存的情况下也可以从根本上解决这一情况。
在利用RS-232串口进行通信时,其通信速率为9.6Kb/s(b为bit)。如果通信串口中设置了一个16位寄存器作为缓冲寄存器,这意味着每隔(1.6ms)时间便要中断一次CPU。
t=16/(9.6*2^10)=1.62ms
在数据通讯的时候,1Kb/s = 1000bit/s,只有关于内存和存储时,才是1024,9.6kb/s = 9600bit/s,计算出约为1.6ms
假定把磁盘上的一个数据块中的信息输入到一个双缓冲区的时间为T=0.1ms,将缓冲区中的数据传送到用户区的时间M=0.05ms,而CPU对数据的处理时间C=0.05ms,这样系统对每个数据块的处理时间为:
因为是双缓冲,所以从磁盘读数据到缓冲区和CPU处理缓冲区数据可以同步进行,因此时间为0.1ms
对于单缓冲: 假定从磁盘把一块数据输入到缓冲区的时间为T,操作系统将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理的时间为C。由于T和C是可以并行的,当T>C时,系统对每一块数据的处理时间为M十T,反之则为M+C,故可把系统对每一块数据的处理时间表示为Max(C,T)+M。
对于双缓冲: 系统处理一块数据的时间可以粗略地认为是MAC(C, T)。如果CT,则可使CPU不必等待设备输入。对于字符设备,若釆用行输入方式,则釆用双缓冲可使用户在输入完第一行之后,在CPU执行第一行中的命令的同时,用户可继续向第二缓冲区输入下一行数据。而单缓冲情况下则必须等待一行数据被提取完毕才可输入下一行的数据。
对每一块的平均耗时:MAX(T,C+M);
文件分配对应于文件的物理结构,是指如何为文件分配磁盘块。常用的磁盘空间分配方 法有三种:连续分配、链接分配和索引分配。
顺序分配:顺序分配方法要求每个文件在磁盘上占有一组连续的块。
隐式链接分配:
每个文件对应一个磁盘块的链表;磁盘块分布在磁盘的任何地方,除最后一个盘块外,每一个盘块都有指向下一个盘块的指针,这些指针对用户是透明的。
显式链接分配:是指把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。
该表在整个磁盘仅设置一张,每个表项中存放链接指针,即下一个盘块号。 在该表中,凡是属于某一文件的第一个盘块号,或者说是每一条链的链首指针所对应的盘块号,均作为文件地址被填入相应文件的FCB的“物理地址”字段中。
由于查找记录的过程是在内存中进行的,因而不仅显著地提高了检索速度,而且大大减少了访问磁盘的次数。由于分配给文件的 所有盘块号都放在该表中,故称该表为文件分配表(File Allocation Table, FAT)。
MS-DOS 采用的就是这种方式。
文件目录:把所有的FCB组织在一起,就构成了文件目录,即文件控制块的有序集合;
目录文件:为了实现对文件目录的管理,通常将文件目录以文件的形式保持在外存,这个文件就叫目录文件。
操作系统,是计算机系统中负责支撑应用程序运行环境以及用户操作环境的系统软件,同时也是计算机系统的核心与基石。即操作系统首先是软件,而且是系统软件。它在计算机系统中的作用,大致可以从两方面体会:对内,操作系统管理计算机系统的各种资源,扩充硬件的功能;对外,操作系统提供良好的人机界面,方便用户使用计算机
多道程序技术运行的特征:多道、宏观上并行、微观上串行
多道程序运行的特征:多道 、宏观上并行、实际上多道程序是串插运行的
引入多道程序的目的在于 充分利用CPU,减少CPU等待时间
多道程序设计技术是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制下,相互穿插运行,两个或两个以上程序在计算机系统中同处于开始到结束之间的状态,
这些程序共享计算机系统资源。
与之相对应的是单道程序,即在计算机内存中只允许一个的程序运行。
即:提高CPU的利用率。
在多道程序环境下,多个程序共享计算机资源当某个程序等待I/O操作时,CPU可以执行其他程序,大大提高CPU的利用率。
进程唯一表征为以下元素:标示符,状态,优先级,程序计数器,内存指针,上下文数据,I/O状态信息,记账信息。这些信息被存储在一个称为进程控制块(PCB)的数据结构中。
UNIX操作系统是著名的 分时系统
UNIX操作系统(尤尼斯),是一个强大的多用户、多任务 操作系统 ,支持多种 处理器架构 ,按照操作系统的分类,属于 分时操作系统
UNIX系统是一个多用户,多任务的分时操作系统。
UNIX的系统结构可分为三部分:操作系统内核(是UNIX系统核心管理和控制中心,在系统启动或常驻内存),系统调用(供程序开发者开发应用程序时调用系统组件,包括进程管理,文件管理,设备状态等),应用程序(包括各种开发工具,编译器,网络通讯处理程序等,所有应用程序都在Shell的管理和控制下为用户服务)。
UNIX系统大部分是由C语言编写的,这使得系统易读,易修改,易移植。
UNIX提供了丰富的,精心挑选的系统调用,整个系统的实现十分紧凑,简洁。
UNIX提供了功能强大的可编程的Shell语言(外壳语言)作为用户界面具有简洁,高效的特点。
UNIX系统采用树状目录结构,具有良好的安全性,保密性和可维护性。
UNIX系统采用进程对换(Swapping)的内存管理机制和请求调页的存储方式,实现了虚拟内存管理,大大提高了内存的使用效率。
UNIX系统提供多种通信机制,如:管道通信,软中断通信,消息通信,共享存储器通信,信号灯通信。
不是分时系统的特征 成批性
特征:
交互性 多路性 独占性
操作系统的特征:并发,共享,虚拟和异步 并发:计算机中存在多个运行的程序,需要OS管理和调度。
多个应用程序交替执行,需要知道所有运行的程序当前的执行的位置,当前正在执行的是哪一个应用,如果应用之间有切换的时候,切换到下一个应用的时候,它上次执行到什么位置,这次就从什么时候开始。当时的状态是什么样子,都需要操作系统来维护。
共享: “同时”共享 和 互斥共享
多个应用并发执行的时候,宏观上要体现出它们在同时访问资源的情况,而微观上要实现它们的互斥访问。比如说我们说到的内存,两个应用同时访问内存,那这个时候,每个应用需要知道它访问的是哪一个,另一个应用访问的是哪一个,他们俩之间不能访问出错,其中一个需要保护的内存资源,不能让另外一个应用去访问。在微观上需要对它们做很好的隔离,因为在数据总线上任何时刻只有一个应用去访问存储单元,这就是所说的微观上的互斥。
虚拟:利用多道程序设计技术(程序的交替运行),让每个用户都觉得有一个计算机专门为他服务。
操作系统在每个应用执行的时候,这种交替执行的交替频率特别高,让用户在应用的时候感觉不太出来这台机器还有其他用户在用,当然负载大到一定程度,用户是可以感觉到的。
异步:
1.程序的执行不是一贯到底的,而是走走停停,向前推进的速度不可预知。
2.只要运行的环境相同,OS需要保证程序运行的结果也要相同。如果说某个应用就是需要知道跟时间相关的这种走走停停的信息,也是可以在操作系统的支持之下,发现这种时间上的差异的。
并行性:两个或多个事件在同一时刻发生
并发性:两个或多个事件在同一时间间隔内发生作业只能并发操作,进程可以并行
数据、内存、CPU
处理机管理、存储管理、文件管理、设备管理
分区 存储管理支持多道程序设计,算法简单,但存储碎片多。
分区分配是能满足多道程序设计需要的一种最简单的存储管理技术,如可变式分区法,基本思想是,当用户作业要求进入主存时,在主存可利用的空间区中,找到大于等于用户作业所需要的空间容量,如果该空间大于用户用需要的容量,那么操作系统将会把该分区分成两部份,一部份大小是刚好用户作业所需要的大小,一份则是较小剩下来的,由此可见,这样就会产生很多小的存储碎片。
其他选项就不是很简单的算法了,均需要地址变换。
为了支持多道程序系统和分时系统,支持多个程序并发执行,引入了分区式存储管理。分区式存储管理是把内存分为一些大小相等或不等的分区,操作系统占用其中一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。分区式存储管理虽然可以支持并发,但难以进行内存分区的共享。
常用的分区方法有固定分区和动态分区,而动态分区中常用的分区分配算法有首次适配法,下次适配法,最佳适配法,最差适配法。
为了解决分区分配带来的碎片问题,引入了伙伴系统:无论已分配分区或空闲分区,其大小均为2的k次幂。在系统运行过程中,由于不断的划分,可能会形成若干个不连续的空闲分区,将这些空闲分区根据分区的大小进行分类,对于每一类具有相同大小的所有空闲分区,单独设立一个空闲分区双向链表。这样,不同大小的空闲分区形成了k个空闲分区链表。
原语是一种特殊的系统调用命令,它的特点是 执行时不可中断
原语和广义指令都可以被进程所调用,两者的差别在于原语有不可中断性,它是通过在执行过程中关闭中断实现的,且一般由系统进程调用。
原语是由若干个 机器指令 构成的完成某种特定功能的一段程序,具有不可分割性·即原语的执行必须是连续的,在执行过程中不允许被中断。
原语通常由若干条指令组成,用来实现某个特定的操作。
通过一段不可分割的或不可中断的程序实现其功能。
原语是操作系统的核心,它不是由进程而是由一组程序模块所组成,是操作系统的一个组成部分,它必须在管态(一种机器状态,管态下执行的程序可以执行特权和非特权两类指令,通常把它定义为操作系统的状态)下执行,并且常驻内存,而个别系统有一部分不在管态下运行。
原语和广义指令都可以被进程所调用,两者的差别在于原语有不可中断性,它是通过在执行过程中关闭中断实现的,且一般由系统进程调用。
许多广义指令的功能都可用目态(一种机器状态,通常把它作为用户程序执行时的状态)下运行的系统进程完成,而不一定要在管态下完成,例如文件的建立、打开、关闭、删除等广义指令,都是借助中断进入管态程序,然后转交给相应的进程,最终由进程实现其功能。
引进原语的主要目的是为了实现进程的通信和控制。
系统调用的目的是 请求系统服务
请求系统服务。
操作系统编制了许多不同功能的子程序,供用户程序执行中调用。这些由操作系统提供的子程序称为系统功能调用,简称系统调用。
系统调用是操作系统为用户程序提供的一种服务界面,或者说,是操作系统保证程序设计语言能正常工作的一种支持。
操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。
系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。
系统调用,也称为系统功能调用。操作系统编制了许多不同功能的小程序。供用户程序执行中调用。这些由操作系统提供的子程序称为系统调用。
时间片轮转法是以选择一个单位时间片进行调度的,若当前进程在单位时间片内没有执行完成,会将其根据上下文以FIFO的形式放到队列最后,进而执行下一个时间片的进程
时间片轮转就是保证每个都能得到等概率的执行
计算机结构分析自底向上依次是: 硬件->驱动程序->内核->用户接口程序->应用程序。
用户接口程序:基于文本的叫shell,基于图标的叫图形用户界面(GUI)如Gnome、KDE。
系统调用为用户程序提供了接口。
内核空间和用户空间之间存在着明显的权限差异。
而操作系统会在程序,系统部件以及内核与外部程序之间设置安全隔离,系统调用此时提供了一个系统级的接口,使得用户程序可以合法使用系统功能。(超越用户态的权限和功能)
对临界资源,应采取 互斥访问 方式,来实现共享
(1) 批处理操作系统的特点有:
a.用户脱机使用计算机。用户提交作业之后直到获得结果之前就不再和计算机打交道。作业提交的方式可以是直接交给计算中心的管理操作员,也可以是通过远程通讯线路提交。提交的作业由系统外存收容成为后备作业。
b.成批处理。操作员把用户提交的作业分批进行处理。每批中的作业将由操作系统或监督程序负责作业间自动调度执行。
c.多道程序运行。按多道程序设计的调度原则,从一批后备作业中选取多道作业调入内存并组织它们运行,成为多道批处理。
(2)分时操作系统的特点有:
a. 交互性:首先,用户可以在程序动态运行情况下对其加以控制。其次,用户上机提交作业方便。分时系统还为用户之间进行合作提供方便。
b.多用户同时性:多个用户同时在自己的终端上上机,共享CPU和其他资源,充分发挥系统的效率。
c.独立性:客观效果上用户彼此间感觉不到有别人也在使用该台计算机,如同自己独占计算机一样。
就绪队列中进程的数目;
系统的处理能力;
系统对响应时间的要求
是分时系统中确定时间片大小需要考虑的因素。
(3) 实时操作系统的特点有:
a.实时时钟管理(定时处理和延时处理)。
b. 连续的人-机对话,这对实时控制往往是必须的。
c.要求采取过载保护措施。例如对于短期过载,把输入任务按一定的策略在缓冲区排队,等待调度; 对于持续性过载,可能要拒绝某些任务的输入;
在实时控制系统中,则及时处理某些任务,放弃某些任务或降低对某些任务的服务频率。
d.高度可靠性和安全性需采取冗余措施。双机系统前后台工作,包括必要的保密措施等。
(4) 网络操作系统的特点有:
a.计算机网络是一个互连的计算机系统的群体。
b. 这些计算机是自治的,每台计算机有自己的操作系统,各自独立工作,它们在网络协议控制下协同工作。
c.系统互连要通过通信设施(硬件、软件)来实现。 d.系统通过通信设施执行信息交换、资源共享、互操作和协作处理,实现多种应用要求。
网络操作系统:不是基本的操作系统。
(5)分布式操作系统的特点有:
a.计算机网络的开发都遵循协议,而对于各种分布式系统并没有制定标准的协议。当然,计算机网络也可认为是一种分布式系统。
b.分布式系统要求一个统一的操作系统,实现系统操作的统一性。
c.分布式操作系统对用户是透明的。但对计算机网络,若一个计算机上的用户希望使用另一台计算机上的资源,则必须明确指明是哪台计算机。
d.分布式系统的基础是网络。分布式系统已不仅是一个物理上的松散耦合系统,同时还是一个逻辑上紧密耦合的系统。
e.分布式系统还处在研究阶段。而计算机网络已经在各个领域得到广泛的应用。
页式虚拟存储器管理方法的
主要优点是页表硬件少,查表速度快,主存零头少;
主要缺点是分页无逻辑意义,不利于存储保护。
而段式虚拟存储器管理方法的
优点是段的界限分明,支持程序的模块化设计,易于对程序段的编译、修改和保护;便于多道程序的共享。
主要缺点是因为段的长度不同,所以主存利用率不高,且因为段间地址不连续会产生大量的内存碎片,造成浪费;段表庞大查表速度慢。
RAID是一种把多块独立的 硬盘 (物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供 数据备份 技术。组成 磁盘阵列 的不同方式称为 RAID级别 (RAID Levels)。在用户看起来,组成的磁盘组就像是一个硬盘,用户可以对它进行分区,格式化等等。总之,对磁盘阵列的操作与单个硬盘一模一样。不同的是,磁盘阵列的存储速度要比单个硬盘高很多,而且可以提供自动数据备份。数据备份的功能是在用户数据一旦发生损坏后,利用备份信息可以使损坏数据得以恢复,从而保障了用户数据的安全性。
RAID 0 可以把多块硬盘连成一个容量更大的硬盘群,可以提高磁 盘的性能和吞吐量。RAID
0没有冗余或错误修复能力,成本低,要求至少两个磁盘,一般只是在那些对数 据安全性要求不高的情况下才被使用。
RAID1 称为磁盘镜像:把一个磁盘的数据镜像到另一个磁盘上,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,具有很高的数据冗余能力,但磁盘利用
率为50%,故成本最高,多用在保存关键性的重要数据的场合。RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。
RAID 2 是RAID 0的改良版,以汉明码(Hamming
Code)的方式将数据进行编码后分割为独立的位元,并将数据分别写入硬盘中。因为在数据中加入了错误修正码(ECC,Error
Correction Code),所以数据整体的容量会比原始数据大一些。
RAID 3 是把数据分成多个“块”,按照一定的容错算法,存放在N+1个硬盘上,实际数据占用的有效空间为N个硬盘的空间总和,而第N+1个硬盘上存储的数据是校验容错信息,当这N+1个硬盘中的其中一个硬盘出现故障时,从其它N个硬盘中的数据也可以恢复原始数据,这样,仅使用这N个硬盘也可以带伤继续工作(如采集和回放素材),当更换一个新硬盘后,系统可以重新恢复完整的校验容错信息。由于在一个硬盘阵列中,多于一个硬盘同时出现故障率的几率很小,所以一般情况下,使用RAID3,安全性是可以得到保障的。
拓展知识:
操作系统的五大管理功能:
(1)作业管理:包括任务、界面管理、人机交互、图形界面、语音控制和虚拟现实等;
(2)文件管理:又称为信息管理;
(3)存储管理:实质是对存储“空间”的管理,主要指对主存的管理;
(4)设备管理:实质是对硬件设备的管理,其中包括对输入输出设备的分配、启动、完成和回收;
(5)进程管理:实质上是对处理机执行“时间”的管理,即如何将CPU真正合理地分配给每个任务。
文件控制块 FCB 是文件存在的标志,它记录了系统管理文件所需要的全部信息。
创建进程的主要步骤:
( 1 )申请空白 PCB 。
( 2 )为新进程分配资源。
( 3 )为新进程分配其他必要资源。
( 4 )初始化进程控制块。
( 5 )将新进程插入就绪队列,如果进程就绪队列能够接纳新进程, 便将新进程插入就绪队列。
进程创建原语的主要任务是 创建进程控制块PCB,并分配所需的各种资源
同步反映了进程间的合作关系,
互斥反映了进程间的竞争关系。
Spooling系统中的用户程序可以随时将输出数据送到输出井中,待输出设备空闲时再由 Spooling系统完成数据的输出操作。
SPOOLing是对脱机I/O工作方式的模拟,SPOOLing系统中的输入井是对脱机输入中的(磁盘)进行模拟,输出井是对脱机输出中的(磁盘)进行模拟,输入进程是对脱机输入中的(外围控制机)进行模拟。
在 分时系统中,时间片越小不一定好。
多道程序环境下,操作系统分配资源的基本单位是 进程
设计分时操作系统时,首先要考虑的是 交互性和响应时间;
设计实时操作系统时,首先要考虑的是 实时性和可靠性
实时操作系统可以分为 。
在分时操作系统环境下运行的作业通常称为 终端型作业。
在请求页式存储管理中,在(内存中无空闲页面)时调用置换算法。
在请求页式存储管理中,若所需页面不在内存中,则会引起 缺页中断
在批处理系统中,作业调度程序从后备作业队列中选出若干作业,使其进入 内存
不属于作业管理程序任务的是 为作业对应的进程分配处理器
作业调度程序从处于就绪状态的队列选取适当的作业投入运行。 错误
在没有快表的情况下,分页系统每访问一次数据,要访问( 2 )次内存;分段系统每访问一次数据,要访问( 2 )次内存;段页式系统每访问一次数据,要访问( 3 )次内存。
PCB是进程存在的唯一标志,也是系统感知进程存在的唯一实体。多道程序的引入主要是为了提高CPU的利用率。
当作业进入完成状态,操作系统 将该作业的控制块从当前作业队列中剔除,收回其所占资源
既考虑等待时间,有考作业执行时间的调度算法是:响应比高者优先
产生死锁的主要原因:系统资源不足和进程推进顺序不当 多个进程竞争资源出现了循环等待。
段页式管理的地址映象表是:每个作业或进程一张段表,每个段一张页表。
页式存储管理的地址是一维的,段式存储管理的地址是二维的。
页式存储管理中,页表的起始地址存放在(寄存器)中。
位示图可用于 磁盘空间管理
一般来说,文件名及属性可以收纳在( 目录)中以便查找。
设基址寄存器的内容为 1000 ,当执行指令 “ LOAD A , 2000 ”时,操作数的地址是 3000
页式存储管理 每访问一次数据 ,要访问(2) 次内存
设置互斥信号量 mutex,表示缓冲池是否可用,初值为1。;
设置生产者的同步信号量buffer(empty),表示缓冲区个数(空单元数),初值为n。;
设置消费者的同步信号量product(full),表示产品个数(满单元个数),初值为0。
在一个请求分页存储管理系统中,内存块大小1K,已知作业A为3K,把它分为3页,作业分批装入内存后,其页表及存储块表如图所示:当作业中指令访问相对地址 2500 时。
1) 系统得到2500后,发现不在内存中,检测发现内存块5有空,将第三页放到内存中,根据地址2500的相对地址和内存块5的起始地址确定实际物理地址。
2500的相对地址(页内偏移量): 2500-10242 = 452
物理地址:10245+452 = 5572
桌上有一个空盘子,可放一个水果,爸爸只可放苹果,妈妈只放橘子,儿子只可取苹果,女儿只可取橘子,使用PV操作实现四个人的互斥
var semaphore plant = 1, apple = 0, orange = 0
void dad():
while True:
P(plant);
place an apple;
V(apple);
void mom():
while True:
P(plant);
place an orange;
V(orange);
void son():
while True:
P(apple);
eat an apple;
V(plant);
void daughter():
while True:
P(orange);
eat an orange;
V(plant);
所谓系统开销,是指CPU运行非用户程序所需要的时间。所谓系统开销所占的比率,是指系统用于进程间切换的时间(即系统开销)与两次CPU调度间隔时间(即CPU运行用户程序时间与系统开销时间的和)的比值。现在,就绪队列中的进程以时间片轮转的方法为主。
并行:指两个或多个事件在同一时刻进行。
并发:指两个或多个事件在同一时间间隔内发生。
在多道程序环境下,并发是指宏观上内有多道程序同时运行,微观上这些程序是在交替运行。
当进程访问某个逻辑地址中的指令或数据时,地址变换机构自动地将逻辑地址分为页号和页内地址两部分,并将页号和页表寄存器中的页表长度进行比较,若页号不小于页表长度,便产生越界中断,否则使以页号为索引去检索页表,从中得到该页的物理块号,送入物理地址寄存器与页内地址拼接,形成对应的物理地址
计算机系统是一个资源集合体,包括软件资源换和硬件资源
操作系统是一种软件
计算机硬件是操作系统赖以工作的实体,操作系统的运行离不开计算机的支持
(1)航空订票系统;(2)过程控制系统;(3)机器口语翻译系统
进程的调度方式有两种:剥夺和非剥夺方式。在剥夺方式下,一旦有优先级高于当前执行进程优先级的进程存在时,便立即发生进程调度,转让处理机。而非剥夺方式是即使在就绪队列中有优先级高于当前执行进程的进程存在,当前进程仍将继续占有处理机,直到由于该进程自己的原因而让出处理机。
…
知识整理,但不代表我会了,内容是真多,救救孩子吧!o(╥﹏╥)o