计算机操作系统 汤小丹

https://blog.csdn.net/weixin_42214698/article/details/120875693(全)

一、什么是操作系统?

        操作系统(Operating System, OS)是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。其主要作用是管理好这些设备,提高他们的利用率和系统的吞吐量,并为用户和应用程序提供一个简单的借口,便于用户使用。他是计算机系统中最基本的系统软件。

操作系统的目标?

在计算机系统上配置操作系统,其主要目标是:方便性、有效性、可扩充性和开放性。

操作系统的作用?

操作系统作为用户与计算机硬件系统之间的接口;OS作为计算机系统资源的管理者(资源可分为四类:处理机管理、存储器管理、I/O设备管理以及文件(数据和程序)管理);OS实现了对计算机资源的抽象。

操作系统的基本特性?

并发、共享、虚拟、异步。并发和共享是最基本的特征,二者互为存在条件。

并行性和并发性。并行性指的是两个或多个事件在统一时刻发生。而并发性是指的是两个或多个事件在统一时间间隔内发生。单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行。

资源共享:从宏观上看,资源共享是指多个任务可以同时使用系统的软硬件资源。从微观上看,资源共享是指多个任务可以交替互斥的使用系统的某个资源。(临界资源:在一段时间内只允许一个进程访问的资源叫做临界资源或独占资源,许多硬件资源如打印机、磁带机等 )。实现资源共享的方式主要有互斥共享方式(临界资源)和同时访问方式。

虚拟,一个物理实体映射为若干个对应的逻辑实体(分时或分空间)。 虚拟是操作系统管理系统资源的重要手段,可提高资源利用率。用到的两大技术:

          时分复用技术:虚拟处理机技术(利用多道程序设计技术,为没到程序建立至少一个进程,让多道程序并发执行,通过分时复用的方法,能实现同时(宏观上)为多个用户服务,使的每个终端用户都认为有一个处理机专门为他服务,用户感受到的处理机称为虚拟处理器)、虚拟设备技术  

          空分复用技术:虚拟存储技术 

异步,1.执行结果不确定 2.多道程序设计环境下,程序按异步方式运行。多个进程并发执行,进程“时走时停”,不可预知每个进程的运行推快慢,引发执行顺序与时间的不确定。

进程的异步性:由于各用户程序性能的不同,比如有的侧重计算而较少需要I/O,而有的程序计算少。I/O操作多,这样可能先进入内存的作业后完成,而后进入内存的作业先完成。或者说进程是以人们不可预知的速度向前推进的,此为进程的异步性。

操作系统的主要功能?

操作系统的主要功能主要分为五类:处理机管理、存储器管理、设备管理、文件管理、用户接口。

处理机管理的功能:主要任务:1,对处理机进行分配。2,对处理机运行进行有效的控制管理。(注意:处理机分配和运行是以进程为基本单位,因此对处理机的管理可以归结为对进程的管理)功能:进程控制、进程通信、进程同步、进程调度。

存储管理的功能:主要任务:1,为多道程序的运行提供良好的环境。2,方便用户使用存储器。3,提高存储器的利用率。4,从逻辑上扩充内存。功能:内存分配、内存保护、地址映射、内存扩充。

设备管理的功能:主要任务:1,为用户分配I/O设备。2,完成用户提出的I/O请求。3,提高I/O设备的利用率即速度。4,方便用户使用I/O设备。功能:缓冲管理、设备分配、设备处理、虚拟设备、磁盘调度。

文件管理的功能:主要任务:1,对用户文件和系统文件进行管理。2,方便用户使用文件。3,保证文件的安全性。功能:文件存储管理空间的管理、目录管理、文件的读写管理、文件的共享和保护。

用户接口管理的功能:主要任务:方便用户使用操作系统。功能:命令接口、程序接口(系统调用)、图形接口。

现代操作系统的新功能:系统安全、网络的功能和服务、支持多媒体。

微核结构?

尽最大努力剔除核心子系统中的多余成分,并把它们移到核外子系统中实现,核心子系统只实现一些必要的简单的概念及其属性,从而保持核心子系统简洁高效。

二、操作系统的发展过程?

1. 手工发展阶段

特点:输入输出缓慢,计算机处理速度相比过快。

缺点:用户独占全机,人机速度矛盾。

2批处理(单道批处理系统、多道批处理系统)

单道批处理系统:这可以说是第一代操作系统。单道批处理系统把一批作业以脱机的方式放在磁带上,并在操作系统上配置监督程序,在它的监督下将磁带的第一个作业放在内存中,其它作业等待,等内存中的作业处理完再调用磁带上一个作业。就是说,内存中一次只能处理一个作业处理完后,再通过算法从外存中选一个作业进入内存。如果这个作业还有IO处理则会一直占用CPU,效率低。

多道批处理系统:将多道作业调入内存中,使它们共享CPU和系统的各个资源。由于内存中有多道程序,这样可以当A程序运行IO操作时B程序运行CPU充分利用系统的各种资源提高效率。就是说,内存中多道程序同时 ‘准备’ 运行,若中断一个则执行另一个。优点:资源(CPU、内存和I/O设备)利用率高、系统吞吐量大。缺点:内存分配和保护问题。系统需要给作业分配内存空间,并使其相互不影响。资源竞争问题、作业管理问题,系统中存在大量作业需要进行管理和分配资源。

3、分时系统:如果说推动多道批处理系统的发展的动力为提高资源的利用率和吞吐量,那么推动分时系统的发展和形成的主要动力为,满足用户对人机交互的需求。分时系统处理流程:作业直接进入内存,在内存中每个作业只能运行一定的时间然后暂停,运行其它程序。分时系统是按时间分配资源。优点:交互性强,缺点:频繁中断程序会消耗资源,一些程序是不能中断的。

4、实时操作系统:在实时操作系统地控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格地时间内容处理完时间。周期性实时任务和非周期性实时任务。周期性实时任务是指的是外部设备周期性的发出激励信号给计算机,要求他按照周期循环之行,以便周期性的控制某外部设备。反之非周期性的实时任务没有明显的周期性,但是都唏嘘练习者一个截止时间(最后期限)。他又可分为:开始截止时间,指的是某任务在某时间以前必须开始执行。完成截止时间,指某任务在某时间以前必须完成。

硬实时和软实时任务。硬实时任务指的是系统必须满足任务对截止时间的要求,否则可能出现难以预测的后果。软实时任务也联系着一个截止时间,但并不严格,若偶尔错过了任务的截止时间,对系统的影响也不会太大。

特点:及时性和可靠性

优点:能优先响应一些紧急任务,无需排队。

三、进程的描述和控制

进程图:

进程图是用于描述进程间关系的一颗有向树。

前驱图?

前趋图(Precedence Graph) 是一个有向无循环图,可记为DAG,用于描述程序/进程之间执行的先后顺序。图中每个结点可用来表示一个进程或程序段,结点间的有向边表示两个结点之间存在的偏序或前趋关系。如P1与 P2存在前趋关系,记作P1 -> P2,表示在P2开始执行之前P1必须完成,此时称P1是P2的直接前趋,P2是P1的直接后继。没有前趋的结点称为初始结点,没有后继的结点称为终止结点,每个结点还有一个重量,用于表示该结点所含有的程序量或程序的执行时间。

程序的顺序执行:在计算机系统中只有一个程序在运行,这个程序独占系统中所有资源,其执行不受外界影响。 一道程序执行完后另一道才能开始。程序顺序执行时,具有这样三个特征:顺序性,指的是处理机严格地按照程序所规定的顺序执行,即每一个操作都必须在下一个操作开始之前结束;封闭性,程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态只有本程序才能改变,程序一旦开始执行,其执行结果不受外界因素影响;可再现性,只要程序执行的环境和初始条件相同,当程序重复执行时,不论是从头到尾不停顿的执行还是停停走走的执行,都可以获得相同的结果。

程序顺序执行的特点

顺序性:一个程序开始执行必须要等到前 一个程序已执行完成。

封闭性:程序一旦开始执行,其计算结果不受外界因素影响。

可再现性:程序的结果与它的执行速度无关(即与时间无关),只要给定相同的输入,一定会得到相同的结果。

程序的并发执行:若干个程序同时在系统中执行,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始。只有在不存在前趋关系的程序之间才有可能并发执行,否则无法并发执行。

程序并发执行的特点

间断性:在并发执行时由于共享系统资源以及相互合作,可能会导致程序在执行过程中互相制约,造成程序间断性的活动规律。

失去程序的封闭性: 程序在并发执行时,是多个程序共享系统中的资源,因此这些资源的状态将由多个程序来改变。

不可再现性:如循环程序A、B,共享变量N。 程序A执行N:=N+1;程序B执行Print(N),后将N置0。 两个程序以不同速度运行,可能出现三种情况:

             N:=N+1在Print(N)和N=0之前,此时N值分为N+1,N+1, 0

             N:=N+1在Print(N)和N=0之后,此时N值分为N, 0, 1

             N:=N+1在Print(N)和N=0之间,此时N值分为N, N+1, 0

程序在并发执行时,由于失去了封闭性,其计算结果必将与并发程序的执行速度有关,从而使程序的执行失去了可再现性。程序经过多次执行后,虽然它们执行时的环境和初始条件相同,但等到的结果却各不相同。

进程与线程?

进程由程序段、数据段、进程控制块三部分组成。进程是对运行时程序的封装,是进程实体的运行过程,进程是一个可拥有资源的独立单位,同时又是一个可独立调度和分派的基本单位,实现了操作系统的并发,进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。线程是操作系统可识别的最小执行和调度单位(调度和分派基本单位)。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。在OS中引入进程的目的是为了使多个程序可以并发执行,以提高资源利用率和系统吞吐量。在OS中再引入线程,则是为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性。

进程与线程的比较?

调度:在传统的操作系统中,拥有资源的基本单位和独立调度分配的基本单位都是进程。

并发性:在引入线程的操作系统分中,不仅进程之间可以并发执行,而且一个进程中的多个线程之间也可以并发执行,因而使得操作系统具有更好的并发性,提高资源的利用率和系统吞吐量。

拥有资源,无论是传统的操作系统还是引入线程的操作系统,进程都是拥有资源的单位,他可拥有自己的资源。

独立性:在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低的多。

系统开销,由于在创建或者撤销进程时,系统都要为止分配或回首资源,如内存空间,I/O设备,操作所付出的开销大于创建或撤销线程时的开销。

进程的特征?

结构特征:由程序段、数据段、进程控制块三部分组成;

 动态性:进程的实质是程序的执行过程;动态性是进程最基本的特征。进程实体具有一定的生命周期。

并发性:多个进程可同存于内存中,能在一段时间内同时运行;引入进程的目的正是为了使进程实体能够并发执行; 程序不能参与并发执行。

独立性:进程是独立运行的基本单位,独立获得资源和调度的基本单位;

异步性:各进程按各自独立的不可预知的速度向前推进。

进程与程序的区别?

程序:指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念;

程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的;

 进程更能真实地描述并发,而程序不能;

 进程是由程序和数据、进程控制块三部分组成的;

 进程具有创建其他进程的功能,而程序没有;

 同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。同一程序可以对应多个进程。

进程的基本状态及转换?

由于多个进程在并发执行时共享系统资源。致使他们在运行过程中呈现间断性的运行规律,所以进程在其生命周期内可能具有多种状态。每个进程至少处于以下三种状态之一。

1)就绪(Ready)状态: 进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。

2)执行(Running)状态: 当一个进程已获得必要的资源,并占有中央处理机执行时进程所处的状态。

3)阻塞(Blocked)状态: 正在执行的进程,由于发生某事件(如等待输入/输出完成)而暂时无法执行下去时,便放弃处理机,此时进程所处的状态。

进程创建状态需要做的事?

申请一个空白的PCB;向PCB中填写用于控制和管理进程的信息;然后为进程分配运行时所必须的资源;最后,把该进程转入就绪状态并插入就绪队列中。

进程终止状态需要做的事?

等待操作系统进行善后处理;将其PCB清零,并将PCB空间返还系统。

进程什么时候进入终止状态?

当一个进程达到自然结束点;出现无法克服的错误;被操作系统所终结;被其他有终止权的进程所终结,他将进入终止状态。

进程控制块PCB?

为了使参与并发执行的每个程序(含数据)都能独立地运行,在操作系统中必须为止配备一个专门的数据结构,称为进程控制快(process control block, pcb)。由程序段、相关的数据段、和PCB三部分构成进程实体,简称为进程。

PCB的作用?

PCB的作用是将一个不能独立运行的程序变成一个可以独立运行的基本单位,一个能与其他进程并发执行的进程。

OS利用PCB来对并发执行的进程进行控制和管理

  PCB是OS感知进程存在的唯一标志。

进程与PCB是一一对应的。 PCB应常驻内存。

PCB提供进程调度和管理所需要的信息

PCB实现与其他进程的同步与通信。

进程通信的类型?

共享存储器系统;管道通信系统;消息传递系统;客户机-服务器系统(其主要的实现方法分为三类:套接字、远程调用和远程方法调用)

PCB的信息?(P45)

1. 进程标识符(process ID),用于唯一地标识一个进程

外部标识符:进程名,通常基于可执行文件名

内部标识符:用户标识符(user ID);进程组关系

 2.处理机状态(处理机上下文):CPU现场保护信息

 寄存器值(通用、程序计数器、程序状态字PSW,栈 指针)

 指向赋予该进程的段/页表的指针

3.进程调度信息

进程状态,表明进程当前的状态,它是作为进程调度和对换时的依据

进程优先级,描述进程使用处理机的优先级别

进程调度所需其他信息,与采用的进程调度算法有关

事件,进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因

4.进程控制信息

程序和数据的地址,进程实体中的程序和数据的内存或外存地(首)址,便于调度执行

进程同步和通信机制,实现进程同步和进程通信时必需的机制,如消息队列指针、信号量

资源清单,在该清单中列出进程在运行期间所需的全部资源(除CPU以外),另外还有一张已分配到该进程的资源的清单

链接指针,它给出了本进程PCB所在队列中的下一个进程的PCB的首地址

线程的状态和线程控制块?

P84

OS内核?

通常将一些与硬件紧密相关的模块(如终端处理程序等)、各种常用设备的驱动程序以及运行频率较高的模块(如始终管理、进程调度和许多模块所公用的一些基本操作),都安排在仅靠硬件的软件称此中,将他们常驻内存,即通常被称为OS内核。PCB和TCB都放在内核中。

原语操作?

进程控制一般是由OS的内核中的原语来实现的。所谓原语(Primitive),就是由若干条指令组成的,用于完成一定功能的一个过程。他与一般过程的区别是:他们是原子操作。所谓原子操作指的是,一个操作中的所有动作要么全做,要么全不做。是一个不可分割的基本单位。

信号量机制?

信号量是可用资源的数量。

分为整型信号量、记录型信号量、AND信号量、信号量集。

管程?

代表共享资源的数据结构以及对该共享数据结构实施操作的一组过程所组成的资源管理程序共同构成了一个操作系统的资源管理模块,我们称之为管称,是一种进程同步工具。管程由四部分组成:管程的名称;局部于管程的共享数据结构说明;对该程序进行操作的一组过程;对局部于管程的共享数据设置初始值的语句。

条件变量?

一个进程被阻塞或挂起的条件(原因)可能有多个,因此在管城中设置了多个条件变量,标志管程中的进程因为什么而阻塞,把其放入因该条件而阻塞的队列中,对这些条件变量的访问只能在管程中进行。

PV操作?

P65

进程是指进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

进程实体(进程映像、进程): 程序段、相关的数据段、进程控制块PCB。

四、处理机调度与死锁

https://blog.csdn.net/yo_bc/article/details/81204098

处理机调度的层次?

        高级调度。又称长程调度或作业调度。它的调度对象为作业。主要功能是根据某种算法,决定将外存上处于后备队列的哪几个作业调入内存,为他们创建进程,分配必要的资源,并将他们放入就绪队列。只适用于多道批处理系统中,不适合实时和分时系统。

        低级调度。又称进程调度或短程调度。它的调度对象为进程或内核级线程。主要功能是,根据某种算法,决定就绪队列中那个进程应获得处理机,并由分派程序将处理机分派给被选中的进程。进程调度是最基本的一种调度,适用于所有类型的操作系统。

        中级调度。又称内存调度。主要目的是为了提高内存利用率和系统吞吐量。应使那些暂时不能运行的进程不再占用宝贵的内存资源,而将它们调至外存(特定区域对换区)上去等待,把此时的进程状态称为就绪驻外存状态或挂起状态。当他们已经具备运行条件且内存又稍有空闲时,由中级调度来决定,将外存上的哪些已经具备运行条件的就绪进程重新调入内存,并修改状态为就绪状态。中级调度实际上就是存储器管理中的对换功能。

        进程调度的运行频率最高,不宜使进程调度算法太复杂。作业调度的周期较长,故允许作业调度算法花费较多的时间。中级调度的运行频率基本上介于两种调度之间。

处理机调度算法的目标?

P93

处理机调度算法的共同目标是:提高系统资源利用率;提高吞吐量(单位时间内执行进程的数量);缩短周转时间。

作业与作业调度?

在多道批处理系统中,作业是用户提交给系统的一项相对独立的工作。

作业调度算法?P97

先来先服务FCFS;短作业优先SJF;优先度调度算法PSA;高响应比优先调度算法HRRN。

先来先服务优缺点:有利于长作业(进程),不利于短作业(进程)。有利于CPU繁忙型作业,不利于I/O繁忙型作业。用于批处理系统,不适于分时系统。大进程执行慢。

短作业优先优缺点:必须预先知道作业的运行时间。对长作业非常不利,长作业的周转时间会明显的偏长。该算法会忽视作业的等待时间,可能会使作业等待时间过长,出现饥饿现象。人机无法实现交互。该调度算法没有完全考虑作业的紧迫程度,不能保证紧迫性作业得到即时处理。

进程调度?P99有算法题。

实时调度?P105

死锁概述?

定义:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

资源问题:

可重用性资源和消耗性资源

1)可重用性资源。

是一种可供用户重复使用多次的资源。每一个可重用性资源只能分配给一个进程使用,不允许多个进程共享。资源的单元数目是相对固定的,在运行期间既不能创建也不能删除它。例如设备、文件。

2)消耗性资源。

在进程运行期间,由进程动态地创建和消耗。资源的单元数目在进程运行期间可以不断变化的。进程可以请求若干个可消耗性资源单元。可消耗性资源通常由生产者创建,消费者消耗。例如进程间通信的消息。

可抢占性资源和不可抢占性资源。

1)可抢占性资源不会引起死锁。

2)不可抢占性资源是指资源一旦被分配给进程,只能在进程用完后自行释放。

计算机系统中的死锁

竞争不可抢占性资源引起死锁。

两进程分别保持一个临界资源,而又分别因请求对方所保持的资源被阻塞。

竞争可消耗性资源引起死锁。

一进程需接受到对方发送的消息a后才能发送消息b,而另一进程需接受到对方发送的消息b后才能发送消息a。

进程推进顺序不当引起死锁。

同样是请求和保持原因。

产生死锁的必要条件?

产生死锁必须具备下面四个必要条件,只要其中任何一个条件不成立,死锁就不会发生。

1)互斥条件:进程对所分派的资源进行排他性使用,即在一段时间内某资源只由一个进程占用。如果其它进程请求该资源则只能等待。

2)请求和保持条件:指进程已经保持了至少一个资源,又请求新资源却被因为该资源被其他进程占用,而导致请求被阻塞,但又对自己已获得的其它资源保持不放。

3)不可抢占条件:已获得资源在未使用完成之前不能被抢占,只能进程使用结束后自己释放。

4)循环等待条件:即存在一个进程——资源的循环链。

处理死锁的方法?

1)预防死锁:即破坏产生死锁的四个必要条件中的一个或几个条件。

2)避免死锁:在资源的动态分配过程中,用某种方法去防止系统进入不安全状态。

3)检测死锁:允许发生死锁,但可通过系统所设置的检测机构,及时地检测出死锁的发生,然后采取适当措施。

4)解除死锁:常用的实施方法是撤消或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程。

上述方法对死锁的防范程度逐渐减弱,但对应的是资源利用率的提高,以及进程因资源因素而阻塞的频度下降(即并发程度提高)。

预防死锁?

由于互斥条件是非共享设备所必须的,不仅不能改变,还应加以保证,因此主要是破坏其它三个条件。

1、破化“请求和保持”条件

第一种协议。

规定所有进程在开始运行之前,都必须一次性地申请其在整个运行过程所需的全部资源。在整个运行期间便不会再提出资源要求,从而破坏了请求条件。在分配资源时,只要有一种资源不能满足某进程的要求,即使其它所需的各资源都空闲,也不分配给该进程,即在该进程的等待期间,它并未占有任何资源,因而也破坏了保持条件。

第二种协议。

由于进程有时候也不清楚自己需要哪些资源,所以第一种协议这种情况下不适用。第二种协议,允许进程只获得运行初期所需的资源后,便开始运行。进程运行过程中再逐步释放已分配给自己的、且已用毕的全部资源,然后再去请求新的所需资源。

2、破坏“不可抢占”条件

当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请。这意味着某一进程已经占有的资源,在运行过程中会被暂时地释放掉,也可认为是被抢占了,从而破坏了“不可抢占”条件。

3、破化“循环等待”条件

系统将所有类型资源进行线性排队,并赋予不同的序号。规定每个进程必须按序号递增的顺序请求资源。假如某进程已请求到一些序号较高的资源,后来它又想请求一个序号低的资源时,它必须先释放所有具有相同和更高序号的资源后,才能申请序号低的资源。在采用这种策略后不可能再出现环路,因而破坏了“循环等待”条件。这种预防死锁的策略比前两种相比,资源利用率和系统吞吐量都有较明显的改善。

避免死锁?

银行家算法P119

安全状态?

系统在进行资源分配之前,应先计算此次资源分配的安全性。所谓安全状态,是指系统能按某种进程推进顺序(P1,P2,…,Pn)给每个进程 Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。此时称(P1,P2,…,Pn)为安全序列。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。虽然并非所有不安全状态都必然会导致转为死锁状态,但当系统进入不安全状态后就可能进入死锁状态。反之只要系统处于安全状态,系统便不会进入死锁状态。

避免死锁的实质在于:系统在进行资源分配时,如何使系统不进入不安全状态。

利用银行家算法避免死锁

Dijkstra的银行家算法名字是由于该算法原本是为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。

为实现银行家算法,每一个新进程在进入系统时,它必须申明在运行过程中,可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量。

银行家算法中的数据结构。

在系统中必须设置四种数据结构,分别用来描述系统中可利用的资源、所有进程对资源的最大需求、系统中的资源分配,以及所有进程还需要多少资源的情况。

1)可利用资源向量 Available。这是一个含有 m 个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果 Available[j]=K,则表示系统中现有 R j类资源K 个。

2)最大需求矩阵 Max。这是一个 n×m 的矩阵,它定义了系统中 n 个进程中的每一个进程对 m 类资源的最大需求。如果 Max[i,j]=K,则表示进程 i 需要 Rj 类资源的最大数目为 K。

3)分配矩阵 Allocation。这也是一个 n×m 的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果 Allocation[i,j]=K,则表示进程 i 当前已分得 R j类资源的数目为 K。

4)需求矩阵 Need。这也是一个 n×m 的矩阵,用以表示每一个进程尚需的各类资源数。如果 Need[i,j]=K,则表示进程 i 还需要 R j类资源 K 个,方能完成其任务。

上述三个矩阵间存在下述关系:Need[i, j]=Max[i, j]-Allocation[i, j]

银行家算法。

设 Request[i] 是进程 P i 的请求向量,如果 Request[i][j]=K,表示进程 P i需要 K 个 R j类型的资源。当 P i发出资源请求后,系统按下述步骤进行检查:

1)如果 Request[i][j]≤Need[i,j],便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。

2)如果 Request[i][j]≤Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi 须等待。

3)系统试探着把资源分配给进程 P i,并修改下面数据结构中的数值:

Available[j] = Available[j]-Request[i][j];

Allocation[i,j] = Allocation[i,j]+Request[i][j];

Need[i,j] = Need[i,j]-Request[i][j];

4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程 Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程 Pi等待。

安全性算法。

系统所执行的安全性算法可描述如下:

1)设置两个向量:

① 工作向量 Work,它表示系统可提供给进程继续运行所需的各类资源数目,它含有 m个元素,在执行安全算法开始时,Work=Available。

② Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]=false;当有足够资源分配给进程时,再令 Finish[i]=true。

2)从进程集合中找到一个能满足下述条件的进程:

① Finish[i]=false;

② Need[i,j]≤Work[j];

若找到,执行步骤(3),否则,执行步骤(4)。

3)当进程 Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:

Work[j] = Work[j]+Allocation[i,j];

Finish[i] = true;

go to step 2;

(4) 如果所有进程的 Finish[i]=true 都满足,则表示系统处于安全状态;否则,系统处于不安全状态。

死锁的检测和解除?

死锁的检测?

为了能对系统中是否发生了死锁进行检测,必须:1)保存有关资源的请求和分配信息;2)提供一种算法,以利用这些信息来检测系统是否已进入死锁状态。

资源分配图。

系统死锁可利用资源分配图来描述。该图是由一组结点 N 和一组边 E 所组成的一个对偶 G=(N,E)。

把 N 分为两个互斥的子集,一组进程结点和一组资源结点。

由进程 Pi指向资源 Rj,它表示进程 Pi请求一个单位的 Rj资源。由资源 Rj指向进程 Pi,它表示把一个单位的资源 Rj分配给进程 Pi。

用圆圈代表一个进程,用方框代表一类资源。

死锁定理?

利用把资源分配图加以简化的方法,来检测系统是否为死锁状态。

1)在资源分配图中,找出一个既不阻塞又非独立的进程结点 Pi。消去pi所求的请求边和分配边,使之成为孤立的结点。表示其运行完毕。依次进行。

2)在进行一系列的简化后,若能消去图中所有的边,使所有的进程结点都成为孤立结点,则称该图是可完全简化的;若不能通过任何过程使该图完全简化,则称该图是不可完全简化的。

有关文献已经证明,所有的简化顺序,都将得到相同的不可简化图。同样可以证明:S 为死锁状态的充分条件是:当且仅当 S 状态的资源分配图是不可完全简化的。该充分条件被称为死锁定理。

采用类似于银行家算法中安全性算法也可进行死锁检测。

死锁的解除?

1)抢占(死锁进程所需的)资源。2)终止(死锁)进程。

1、终止进程的方法?

1)终止所有死锁进程。

2)逐个终止进程,直至有足够的资源,以打破循环等待。

选择终止进程的策略最主要的依据是,为死锁解除所付出的”代价最小“。

2、付出代价最小的死锁解除算法。

一种付出代价最小的死锁解除算法是类似于动态规划地去选择被终止进程。

还有一个比较有效的方法是类似于贪心地去选择被终止进程。

五、存储器管理

计算机系统存储层次示意图

内存管理的功能?

  1. 内存分配,为每个进程分配一定的内存空间
  2. 地址映射,把程序中的相对地址转换为计算机中的绝对地址,内存中的物理地址
  3. 内存保护,检查地址的合理性,防止越界访问
  4. 内存扩充,解决供大于求的问题,采用虚拟存储地址。

程序的装入和链接?

用户程序要在系统中运行,必须先把它装入内存,然后再将其转变为一个可执行的程序,通常要经历以下几个步骤:

1)编译,由编译程序将用户源代码编译成若干个目标模块。 
2)链接,由链接程序将编译后形成的一组目标模块,以及它们所需要的库函数链接在一起,形成一个完整的装入模块。 
3)装入,由装入程序将装入模块装入内存。

4)执行

程序的装入方式?

1、绝对装入方式。

仅能运行单道程序时可以采用该种方式。装入模块被装入内存后,程序中的逻辑地址(相对地质)与实际内存地址完全相同,不需对程序和数据的地址进行修改。

2、可重定位装入方式。

采用可重定位装入方式,根据内存的当前情况,将装入模块装入到内存的适当位置。值得注意的是,在采用可重定位装入程序将装入模块装入内存后,会使装入模块中的所有逻辑地址与实际装入内存的物理地址不同。通常是把在装入时对目标程序中指令和数据地址的修改过程称为重定位。又因为地址变换通常是在装入时一次完成的,以后不再改变,故称为静态重定位。

3、动态运行时装入方式。

动态运行时的装入程序在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此,装入内存后的所有地址都仍是相对地址。为使地址转换不影响指令的执行速度,这种方式需要一个重定位寄存器的支持。

程序的链接?

1、静态链接方式。

在程序运行之前,先将各目标模块及它们所需的库函数,链接成一个完整的装配模块,以后不再拆开。把这种事先链接的方式称为静态链接方式。在将这几个目标模块装配成一个装入模块时,须解决以下两个问题:

1)对相对地址进行修改。这是因为在由编译程序所产生的所有目标模块中,使用的都是相对地址,其起始地址都为 0,每个模块中的地址都是相对于起始地址计算的。

2)变换外部调用符号。将每个模块中所用的外部调用符号也都变换为相对地址。

这种先进行链接所形成的一个完整的装入模块,又称为可执行文件。

2、装入时动态链接。

指用户源程序经编译后所得的目标模块,在装入内存时采用边装入边链接的链接方式。这样便于装入前修改和更新,以及实现对目标模块的共享。

3、运行时动态链接。

将对某些模块的链接推迟到程序执行时才进行链接,亦即,在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS 去找到该模块并将之装入内存,把它链接到调用者模块上。凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上,这样不仅可加快程序的装入过程,而且可节省大量的内存空间。

连续分配内存的管理方式?

1、单一连续分配

只能用于单道程序环境下。在单道程序环境下,当时存储器管理方式是把内存分为用户区和系统区两部分,系统区只提供给OS使用,通常放在内存的低址部分。整个内存的用户区由一个程序独占。这样的存储器分配方式被称为单一连续分配方式

2、固定分区分配

将内存用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业。

划分分区的方法。

分区大小相等、分区大小不等。

内存分配。

通常将分区按大小进行排队,并为之建立一张分区使用表,其中各表项包括每个分区的起始地址、大小及状态(是否已分配)。当有一用户程序要装入时,由内存分配程序检索该表,从中找出一个能满足要求的、尚未分配的分区,将之分配给该程序,然后将该表项中的状态置为“已分配”。

3、动态分区分配

又称可变分区分配,他是根据进程的实际需要,动态的为止分配内存空间。

动态分区分配中的数据结构。

常用的数据结构有以下两种形式:

空闲分区表,用于记录每个空闲分区的情况。每个空闲分区占用一个表目,表目包括分区号、分区大小、分区始址、状态。

空闲分区链,在每个分区的起始部分设置一些用于控制分区分配的信息,以及用于链接各分区所用的前向指针;在分区尾部则设置一后向指针,以及前后都重复设置状态位和分区大小表目。通过前、后向链接指针,可将所有的空闲分区链接成一个双向链。

动态分区分配算法。

顺序式搜索算法、索引式搜索算法。

分区分配操作。

1)分配内存:

系统应利用某种分配算法,从空闲分区链(表)中找到所需大小的分区。设请求的分区大小为 u.size,表中每个空闲分区的大小可表示为 m.size。若 m.size-u.size≤size(size 是事先规定的不再切割的剩余分区的大小),说明多余部分太小,可不再切割,将整个分区分配给请求者;否则(即多余部分超过 size),从该分区中按请求的大小划分出一块内存空间分配出去,余下的部分仍留在空闲分区链(表)中。然后,将分配区的首址返回给调用者。

2)回收内存:

当进程运行完毕释放内存时,系统根据回收区的首址,从空闲区链(表)中找到相应的插入点,此时可能出现以下四种情况之一:

①回收区与插入点的前一个空闲分区相邻接,此时应将回收区与插入点的前一分区合并。

②回收分区与插入点的后一空闲分区相邻接,此时也可将两分区合并。

③回收区同时与插入点的前、后两个分区邻接,此时将三个分区合并。

④回收区既不与前一个邻接,又不与后一个邻接,这时应为回收区单独建立一新表项,填写回收区的首址和大小,并根据其首址插入到空闲链中的适当位置。

基于顺序搜索的动态分区分配算法?

顺序搜索,是指依次搜索空闲分区链上的空闲分区,去寻找一个其大小能满足要求的分区。

内存碎片:内存空间不断被划分,会留下许多难以利用的、很小的空闲分区。

首次适应算法。

要求空闲分区链以地址递增的次序链接,该算法简单,容易实现。在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止。该算法倾向于优先利用内存中地址部分的空闲分区,从而保留了高址部分的大空闲分区。缺点是低址部分不断被划分,会留下很多难以利用的很小的空闲分区,称为碎片。而每次查找又都是从低址部分进行,增加查找空用空闲分区的开销。

循环首次适应算法。

在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区,从中划出与请求作业大小相等的内存空间分配给作业。实现可通过设置一起始查寻指针,用于指示下一次起始查寻的空闲分区,并采用循环查找方式。该算法能使内存空中的空闲分区分不的更均匀,不至于使小的空闲分区集中在存储区的一端,减少查找空闲分区的开销。缺点缺乏大的空闲分区。

最佳适应算法。

总是把能满足要求、又是最小的空闲分区分配给作业,为了加速寻找,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。优点是每一分区浪费空间是最少的,大的分区留在后面了。但是因为每次切割下来的剩余部分总是最小的,在存储器中会留下许多难以利用的碎片。

最坏适应算法。

在扫描整个空闲分区表或链表时,总是挑选一个最大的空闲区,分割一部分空间给作业使用。要求将所有的空闲分区按其容量以从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求即可。优点是使剩下的空闲分区不至于太小,查找效率高,但是缺点缺乏大的空闲分区。

基于索引搜索的动态分区分配算法

1、快速适应算法。

又称为分类搜索法。是将空闲分区根据其容量大小进行分类,对于每一类具有相同容量的所有空闲分区,单独设立一个空闲分区链表,同时在内存中设立一张管理索引表,该表的每一个表项对应了一种空闲分区类型,并记录了该类型空闲分区链表表头的指针。

该算法仅需要根据进程的长度,寻找到能容纳它的最小空闲区链表,并取下第一块进行分配即可。在分配过程中,不会对任何分区产生分割。分配速度快,空间利用率不高

2、伙伴系统。

规定,无论已分配分区或空闲分区,其大小均为 2 的 k 次幂(k 为整数,l≤k≤m)。通常 2^m是整个可分配内存的大小。

对于每一类具有相同大小的所有空闲分区,单独设立一个空闲分区双向链表。

当需要为进程分配一个长度为 n 的存储空间时,首先计算一个 i 值,使 2^(i-1) < n ≤ 2^i,然后在空闲分区大小为 2^i 的空闲分区链表中查找。若找到则直接分配。否则,则在分区大小为 2^(i+1) 的空闲分区链表中寻找。若存在 2^(i+1) 的一个空闲分区,则把该空闲分区分为相等的两个分区,这两个分区称为一对伙伴,其中的一个分区用于分配,而把另一个加入分区大小为 2^i 的空闲分区链表中。若仍然找不到,依次类推去寻找更高1次幂的分区。

与一次分配可能要进行多次分割一样,一次回收也可能要进行多次合并,如回收大小为 2^i的空闲分区时,若事先已存在回收块所对应的2^i伙伴块的空闲分区时,则应将其与伙伴分区合并为大小为2^(i+1)的空闲分区,若事先已存在新合并空闲块对应的2^(i+1)伙伴块的空闲分区时,依次类推合并。

对于一个大小为2^k,地址为x的内存块,其伙伴块的地址则用buddy k (x)表示,其通式为:

if(x MOD 2^(k+1) == 0) {

buddy k (x) = x + 2^k;

}

else if(x MOD 2^(k+1) == 2^k) {

buddy k (x) = x - 2^k;

}

3、哈希算法。

构造一张以空闲分区大小为关键字的哈希表,该表的每一个表项记录了一个对应的空闲分区链表表头指针。

动态可重定位分区分配?

1、紧凑。

在连续分配方式中,必须把一个系统或用户程序装入一连续的内存空间。当一台计算机运行了一段时间后,它的内存空间将会被分割成许多小的分区,而缺乏大的空闲分区。

通过移动内存中作业的位置,以把原来多个分散的小分区拼接成一个大分区的方法,称为“拼接”或“紧凑”。由于经过紧凑后的某些用户程序在内存中的位置发生了变化。为此,在每次“紧凑”后,都必须对移动了的程序或数据进行重定位。

2、动态重定位

在动态运行时装入的方式中,作业装入内存后的所有地址都仍然是相对(逻辑)地址,将相对地址转换为物理地址的工作,被推迟到程序指令要真正执行时进行。

地址变换过程是在程序执行期间,随着对每条指令或数据的访问借助重定位寄存器自动进行的,故称为动态重定位。当系统对内存进行了“紧凑”而使若干程序从内存的某处移至另一处时,不需对程序做任何修改,只要用该程序在内存的新起始地址,去置换原来的起始地址即可。增设硬件机构,重定位寄存器

3、动态重定位分区分配算法。

动态重定位分区分配算法与动态分区分配算法基本上相同,差别仅在于:在这种分配算法中,增加了紧凑的功能。

对换?

对换的引入。 
所谓“对换”,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据调入内存。对换是改善内存利用率的有效措施。

对换的类型。

1)整体对换。

处理机中级调度实际上就是存储器的对换功能。其目的用于解决内存紧张问题。由于中级调度是以进程为单位的,故又称之为“进程对换”或“整体对换”。

2)页面(分段)对换。

以进程的一个“页面”或“分段”为单位进行的,分别称为“页面对换”、“分段对换”,又统称为“部分对换”。

对换空间的管理

对对换空间管理的主要目标。

在具有对换功能的 OS 中,通常把外存分为文件区和对换区。

1)对文件区管理的主要目标。

由于通常的文件搜时较长时间驻留在外存上,对他们的访问频率是比较低的。故对文件区管理的主要目标是提高文件存储空间的利用率,其次才是访问速度,为此,对文件区采取离散分配方式。

2)对对换区管理的主要目标。

对换空间只占用磁盘空间的小部分,用于存放从内存暂时对换出的进程,由于这些进程在对换区驻留的时间是短暂的,而对换频率却较高,故对对换区管理的目标是提高进程换入和换出的速度。为此,采取的是连续分配方式,较少考虑外存中的碎片问题。

对换空间空闲盘块管理中的数据结构。

与动态分区分配方式中的数据结构相似,即空闲分区表或空闲分区链。在每个表目中包含两项:对换区的首址及其大小,分表用盘块号和盘块数表示。

对换空间的分配与回收。

与动态分区分配方式中内存分配与回收方法雷同。

进程的换出与换入

1、进程的换出。

换出过程:

1)选择被换出的进程。首先选择处于阻塞或睡眠状态的进程,如果有多个,则选择优先级最低的进程。在有的系统除了考虑优先级,还需考虑进程在内存的驻留时间。如果系统中已无阻塞进程且内存仍不足时,则选择优先级最低的就绪进程换出。

2)进程换出过程。只能换出非共享的程序和数据段,对于共享的只要还有进程需要,就不能换出。在进行换出时,①需要申请对换空间。②若申请成功,就启动磁盘,将该进程的程序和数据传送到磁盘的对换区上。③若传送成功,便可回收该进程所占的内存空间,并对该进程的PCB和内存分配表等进行相应的修改,若还有可换出进程,则继续换出,直至内存中再无阻塞进程为止。

2、进程的换入。

定时执行换入操作。找出“就绪”状态但已换出的进程,将其中换出时间最久的进程作为换入进程,为它申请内存。若申请成功则调入,若失败则需先将内存中的某些进程换出,再将进程换入。直到外存中再无“就绪且换出”状态的进程为止,或者已无足够的内存来换入进程时,对换进程停止换入。

https://blog.csdn.net/yo_bc/article/details/81262412

基于允许将一个进程直接分散地装入到许多不相邻接的分区中,则无须再进行“紧凑” 的思想而产生了离散分配方式。分为以下三种:

1)分页存储管理方式:将用户程序的地址空间分为若干个固定大小的区域,称为“页”或者“页面”。也将内存空间分为若干个物理块或页框,页和框的大小相同。

2)分段存储管理方式:把用户程序的地址空间分为若干个大小不同的段。分配以段为单位。

3)段页式存储管理方式:是分页和分段两种存储方式相结合的产物。

分页存储管理方式?

P148

地址变换机构?

实现从逻辑地址到物理地址的转换。由于页内地址和物理地址是一一对应的(例如,对于页面大小是 1 KB 的页内地址是 0~1023,其相应的物理块内的地址也是 0~1023,无须再进行转换),因此,地址变换机构的任务实际上只是将逻辑地址中的页号,转换为内存中的物理块号。又因为页面映射表的作用就是用于实现从页号到物理块号的变换,因此,地址变换任务是借助于页表来完成的。

基本的地址变换机构?

页表大多驻留在内存中。在系统中只设置一个页表寄存器 PTR,在其中存放页表在内存的始址和页表的长度。平时,进程未执行时,页表的始址和页表长度存放在本进程的 PCB 中。当调度程序调度到某进程时,才将这两个数据装入页表寄存器中。因此,在单处理机环境下,虽然系统中可以运行多个进程,但只需一个页表寄存器。

当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表。查找操作由硬件执行。在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。于是,这一错误将被系统发现并产生一地址越界中断。若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。

有快表的地址变换机构?P151

由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据。

为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”,或称为“快表”,在 IBM 系统中又取名为 TLB,用以存放当前访问的那些页表项。此时的地址变换过程是:在 CPU 给出有效地址后,由地址变换机构自动地将页号 P 送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号进行比较,若其中有与此相匹配的页号,便表示所要访问的页表项在快表中。于是,可直接从快表中读出该页所对应的物理块号,并送到物理地址寄存器中。如在块表中未找到对应的页表项,则还须再访问内存中的页表,找到后,把从页表项中读出的物理块号送地址寄存器;同时,再将此页表项存入快表的一个寄存器单元中,亦即,重新修改快表。但如果联想寄存器已满,则 OS 必须找到一个老的且已被认为不再需要的页表项,将它换出。

访问内存的有效时间?P151

从进程发出指定逻辑地址的访问请求,经过地址变换,到在内存中找到对应的实际物理地址单元并取出数据,所需要花费的总时间,称为内存的有效访问时间(EAT)。

假设访问一次内存的时间为t,在基本分页存储管理方式中,有效访问时间分为第一次访问内存时间(即查找页表对应的页表项所耗费的时间t)与第二次访问内存时间(即访问页表项中的物理块号与页内地址所拼接成的实际物理地址所耗费的时间t)之和: EAT = t + t = 2t;

在快表中查找到所需表项存在着命中率的问题。所谓命中率,是指使用快表并在其中成功查找到所需页面的表项的比率。

则:EAT = а×λ + (t+λ)(1-а) + t = 2t + λ - t×а;

上式中,λ表示查找快表所需要的时间,а表示命中率,t表示访问一次内存所需要的时间。

分页存储管理的优缺点?P155

分段存储管理?

分段存储管理方式的引入

1、方便编程。

通常,用户把自己的作业按照逻辑关系划分为若干个段。程序员们都迫切地需要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的。

2、信息共享。

实现对程序和数据的共享时,是以信息的逻辑单位为基础的。分页系统中的“页”只是存放信息的物理单位(块),并无完整的意义。而段却是信息的逻辑单位,因此可以为该被共享过程建立一个独立的段,极大地简化了共享的实现。

3、信息保护。

信息保护同样是对信息的逻辑单位进行保护的。在分页系统中,一个函数可能要占用若干个页面,而且其中的第一个和最后一个页面还会装有其它程序段的数据,它们可能有着不同的保护属性。

4、动态增长。

5、动态链接。

运行时动态链接要求的是以目标程序(即段)作为链接的基本单位,因此,分段存储管理方式非常适合动态链接。

分段系统的基本原理

1、分段。

作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。每个段都从 0 开始编址,并采用一段连续的地址空间。段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。整个作业的地址空间由于是分成多个段,因而呈现出二维特性。其逻辑地址由短号和段内地址组成。

2、段表。

在分段式存储管理系统中,则是为每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中。在系统中为每个进程建立一张段映射表,简称“段表”。每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度。可见,段表是用于实现从逻辑段到物理内存区的映射。

3、地址变换机构。

为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度 TL。在进行地址变换时,系统将逻辑地址中的段号与段表长度TL 进行比较。若 S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址,然后,再检查段内地址 d 是否超过该段的段长 SL。若超过,即 d>SL,同样发出越界中断信号;若未越界,则将该段的基址与段内地址相加,即可得到要访问的内存物理地址。

像分页系统一样,当段表放在内存中时,每要访问一个数据,都须访问两次内存,从而极大地降低了计算机的速率。解决的方法也和分页系统类似,再增设一个联想存储器,用于保存最近常用的段表项。

4、分页和分段的主要区别。

相似之处:

两者都采用离散分配方式,且都要通过地址映射机构来实现地址变换。

不同:

1)页是信息的物理单位,分页是为了提高内存的利用率。段则是信息的逻辑单位,分段的目的是为了能更好地满足用户的需要。

2)页的大小固定且由系统决定。而段的长度却不固定,决定于用户所编写的程序。

3)分页中用户程序的的逻辑地址空间是一维的,分页完全是系统的行为,只需要一个记忆符即可表示一个地址。而分段中用户程序的逻辑地址空间是二维的,在标识一个地址时,既需给出段名, 又需给出段内地址(正是因为段的大小不固定导致的)。

信息共享?

1、分页系统中对程序和数据的共享。

虽然也能实现对程序和数据的共享,但远不如分段系统来得方便。

2、分段系统中对程序和数据的共享。

可重入代码又称为“纯代码”,是一种允许多个进程同时访问的代码。可重入代码是一种不允许任何进程对它进行修改的代码。但事实上,大多数代码在执行时都可能有些改变。为此,在每个进程中,都必须配以局部数据区,把在执行中可能改变的部分拷贝到该数据区,这样,程序在执行时,只需对该数据区(属于该进程私有)中的内容进行修改,并不去改变共享的代码,这时的可共享代码即成为可重入码。

可重入代码:又称为纯代码,是一种允许多个进程同时访问,但不允许任何进程对他修改的代码。

段页式存储管理?

  1. 基本原理。 
    段页式系统的基本原理是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。在段页式系统中,其地址结构由段号、段内页号及页内地址三部分所组成。

2、在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据。

解决方法仍类似快表。在地址变换机构中增

设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍须再三次访问内存。

六、虚拟存储器

虚拟存储器作为现代操作系统中存储器管理的一项重要技术,实现了内存扩充功能。但该功能并非是从物理上实际地扩大内存的容量,而是从逻辑上实现对内存空间更大的程序运行,或者让更多的用户程序并发运行。这样既满足了用户的需要,又改善了系统的性能。

从物理上增加内存容量----对换

从逻辑上增加内存容量----虚拟存储器

虚拟存储器的定义?

当用户看到自己的程序能在系统中正常运行时,它会认为,该系统所具有的内存容量一定比自己的程序大,或者说,用户感觉到的内存容量比实际内存容量大得多。但用户所看到的大容量只是一种错觉,是虚的,故人们把这样的存储器称为虚拟存储器。综上所述,所谓虚拟存储器,仅把作业的一部分装入内存便可运行作业的存储管理系统,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。

虚拟存储器的特征?

(1) 多次性。一个作业中的程序和数据无需一次性全部装入内存,而是允许被分成多次调入内存执行。

(2) 对换性。一个作业中的程序和数据无需在作业运行时常驻内存,而是允许作业在运行过程中换进换出。

(3) 虚拟性。从逻辑上扩充内存容量,用户看到的内存容量远大于世纪内存容量。

(4)离散性。虚拟内存只能通过离散内存分配方式实现。

虚拟存储器的实现方法?

1)分页请求系统

分页请求系统是在分页系统的基础上增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。它允许用户程序只装入少数页面的程序(及数据)即可启动运行。以后,再通过调页功能及页面置换功能陆续地把即将运行的页面调入内存,同时把暂不运行的页面换出到外存上。置换时以页面为单位。为了能实现请求调页和页面置换功能,系统必须提供必要的硬件支持和实现请求分页的软件。(①请求分页的页表机制。

②缺页中断机构。

③地址变换机构。)

2)请求分段系统

请求分段系统是在分段系统的基础上,增加了请求调段及分段置换功能后所形成的段式虚拟存储系统。它运行用户程序只要装入少数段(而非所有的段)的程序和数据即可自动运行。以后通过调段功能和段的置换功能将暂不运行的段调出,再调入即将运行的段。置换是以段位单位进行的。为了实现请求分段,系统同样需要必要的硬件和软件支持。(请求分段的段表机制。

②缺段中断机构。

③地址变换机构。)

请求分页存储管理方式?

缺页中断?当要访问的页面不在内存时,便会产生缺页中断。

请求分页的地址变换过程图P170

页面置换算法思想与缺页率的计算?P174

抖动?在请求分页存储管理中,从主存(DRAM)中刚刚换出(Swap Out)某一页面后(换出到Disk),根据请求马上又换入(Swap In)该页,这种反复换出换入的现象,称为系统颠簸,也叫系统抖动。产生该现象的主要原因是置换算法选择不当。

请求分段存储管理方式?

请求分段系统中的中断处理过程。

请求段表和请求页表的表项。

七、输入输出系统

I/O系统是OS的重要组成部分,用于管理诸如打印机和扫描仪的等I/O设配,以及用于存储数据,如磁盘驱动器和磁带机等各种存储设备。

I/O系统的基本功能?

I/O系统的功能:第一、二方面为了方便用户使用I/O;第三、四方面用于提高CPU与I/O设备的利用率;第五、六方面为用户在共享设备时提供方便,以保证系统能有条不紊的运行,甚至能自动修复错误。

1、隐藏物理设备的细节

2、与设配的无关性

3、提高处理机和I/O设备的利用率

4、对I/O设备进行控制

目前对I/O设备由四种控制方式:1. 采用轮询的可编程I/O方式;2. 采用中断的可编程方式;3. 直接存储器访问方式;4. I/O通道方式

5、确保对设备的正确共享

共享性上分为两种设备:1. 独占设备;2. 共享设备

6、错误处理

对于临时性错误,可通过重试操作来纠正,只有发生持久性错误时,才需向上层报告。

I/O系统的层次结构和模型?

1、用户层IO软件:与用户交互,给用户操作设备提供了库函数(产生IO请求,格式化IO,Spooling)

2、设备独立性软件:实现用户与设备驱动器的统一接口,设备命令,设备保护,分配释放,缓冲区管理

3、设备驱动程序:与硬件直接想关,实现CPU向设备发出的操作命令,驱动IO设备工作

4、中断处理程序:保存被中断进程的CPU环境,转ISR,恢复现场,返回

I/O系统中各种模块之间的层次视图P194-->P191

I/O系统的上下接口。(1.2)

  1. 他是I/O系统与上层系统之间的接口,向上层提供对设备进行操作的抽象I/O命令,以方便高层对设备的使用。
  2. 软件/硬件接口(RW/HW接口)。上面是中断处理程序和用于不同设备的设备驱动程序,下面是各种设备的控制器。
  3. I/O系统的分层(4.5.6)
  4. 中断处理程序。他处于I/O系统的底层,直接与硬件进行交互。
  5. 设备驱动程序。他处于I/O系统的次底层,是进程和设备之间的通信程序,主要功能是,将上层发来的抽象I/O请求转换为对I/O设备的具体命令和参数,并且把他装入到设备控制器中的命令和参数寄存器中,或者相反。
  6. 设备独立性软件。现代OS中的I/O系统基本上都实现了与设备无官星,也称为与设备无官的软件。

I/O系统接口

IO系统与高层接口分类

根据设备类型可分3个接口:

1、块设备接口:典型的块设备接口是磁盘;该设备的基本特征是传输速率高,每秒钟数MB至数十MB;另一个特征是可寻址,即能制定数据的输入源地址以及输出的目标地址,即可随机的读取磁盘中的任意一块;磁盘设备的I/O常常采用DMA方式。虚拟存储器系统也要使用块设备接口。

2、流设备接口。比块设备接口慢,该接口又称为字符设备接口,用于控制字符设备的输入或者输出;字符设备的基本特征是传输速率比较低,通常每秒钟几个字节至数千字节;另一特征是不可寻址,即不能制定输入数据的原地址以及输出数据的目标地址;字符设备在输入/输出时,常采用中断驱动方式;字符设备的类型多,如键盘、打印机;大多数流设备都属于独占设备。

3、网络通信接口。现在的操作系统都提供面向网络接口,网卡等。

I/O设备和设备控制器

I/O设备类型

①按共享特性:独占设备和共享设备

②按传输特性:块设备和流设备(字符设备)

③按使用特性:存储设备和I/O设备

④按传输速率分类:低速,中速和高速设备

设备与控制器之间的接口

设备并不直接与CPU通信,而是与设备控制器通信。

CPU与IO设备之间的接口,可以连接一个或多个设备

实现IO设备与CPU之间的数据交换

分类:字符设备控制器,块设备控制器,网络设备控制器

设备控制器的基本功能

①接受和识别命令

②数据交换

③标识和报告设备状态

④地址识别

⑤数据缓冲区

⑥差错控制

I/O通道的定义:I/O通道是一种特殊的处理机,但是与处理机又不同: 通道没有自己的内存;通道指令类型单一。它具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作。

通道的类型?

①字节多路通道:以字节交叉方式工作,连接多个低速设备,按时间片轮转方式为多个设备服务

②数组选择通道:可连接多个高速设备,一次只服务一个设备,通道利用率低

③数组多路通道:将数组选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作相结合,按数组方式传输,速率高,通道利用率高。

瓶颈(进程饥饿)问题?

当设备比较多,可能会出现I/O通道不够用的情况,导致某些I/O设备长时间得不到响应,系统吞吐量下降,影响并行能力。

解决“瓶颈”办法: 增设通路而不增加通道,一个设备连接多个控制器,一个控制器连接多个设备。P202

中断机构和中断处理程序?

中断和陷入?

广义中断:CPU对系统内外的发生异步事件的响应过程。

中断: IO设备向CPU发出的信号,又称外部中断。CPU暂停正在执行的程序,保留CPU环境后,自动地转去执行该IO设备的中断处理程序。

陷入: 由CPU内部事件所引起的中断,又称内中断。例如:运算溢出,程序出错,如非法指令,地址越界。

中断向量表和中断优先级?

中断向量表,OS为每个中断都配备一个中断号和中断处理程序(ISR),ISR在内存的首地址称为中断向量,系统所有中断向量放在一起构成表格称为中断向量表IVT。当I/O设备发来请求中断信号时,由中断控制器确定请求的中断号,根据中断号去中断向量表中查找,取得该设备中断处理程序的入口地址,这样便可以转入中断处理程序执行。

中断优先级:根据中断紧迫程度为中断安排优先级;优先级越高越紧迫;高优先级可打断低优先级的执行,中断嵌套。

对多级中断源的处理方式

1、屏蔽(禁止)中断:处理中断时屏蔽所有中断

简单,所有中断按顺序处理,不能满足实时性要求高的中断请求

2、嵌套中断

如果同时有多个中断发送,先处理优先级高的中断

高优先级中断可抢占低优先级中断CPU

中断处理程序?

测定是否有未响应的中断信号。

②保护被中断进程的CPU环境。主要保存两部分内容:一是由硬件自动将处理机状态(PSW)和保存在程序计数器(PC)中下一条指令的地址保存在中断保留区中。二是CPU寄存器的(通用寄存器、段寄存器)内容都压入中断栈中。

③转入相应的设备处理程序。

④中断处理。处理完成之后,进入就绪队列。

⑤恢复CPU的现场并退出中断。

设备驱动程序?

设备处理程序又称设备驱动程序,是I/O系统的高层与设备控制器之间的通信程序,主要任务:①接受上层软件抽象I/O命令,转换为具体参数发给设备控制器,启动设备执行②由设备控制器发来的信号传送给上层软件。驱动程序与硬件密切相关,应为每类设备配置一种驱动程序

设备驱动程序功能?

① 接受设备无关层软件的命令和参数,将抽象命令转换为与设备相关的低层操作序列

② 检查I/O合法性,了解设备工作状态,传递与I/O设备有关的操作序列,设置设备工作方式

③发出I/O命令,若设备空闲便启动I/O设备完成操作;若设备忙碌则将请求块挂在设备队列上等待

④及时响应设备控制器的中断请求,根据中断类型调用相应中断处理程序。

针对CPU的虚拟:多道程序设计。针对内存的虚拟,虚拟内存。针对设备的虚拟,独占设备变成共享设备。

对I/O设备的控制方式?

把CPU从繁杂的I/O事务中解脱,专注于数据处理。

  1. 使用轮询的可编程I/O方式。处理机向控制器发出一条I/O指令,启动输入设备输入数据时,要同时把状态寄存器的忙/闲标志busy置为1,然后便不断循环测试busy。CPU大部分时间在等待I/O设备完成数据I/O的循环测试,造成对CPU的极大浪费,无法实现I/O操作和CPU操作的并行,无法使心啊进程间的并发。
  2. 使用中断的可编程的I/O方式。当某个进程要启动某个I/O设备工作时,便由CPU向响应涉别控制器发送一条I/O指令,然后立即返回执行原来的任务,CPU可与I/O设备并行操作。当I/O操作完成,产生中断,告知CPU操作已经完成。中断以字节为单位。可能导致中断频繁。
  3. 直接存储器访问方式(DMA)。中断驱动I/O仍以字节为单位进行I/O,每传送1字节发送一次中断。中断处理前后开销大,若用于块设备效率低,中断过于频繁。为进一步减少IO对CPU的干预,引入直接存储器访问方式,也称DMA。DMA传输特点:

①传输单位是数据块,CPU和I/O设备每次至少传输一个数据块。

②数据从设备直接送入内存,或者相反,不经过CPU。

③仅在传送开始和结束才需CPU干预,整块数据传送是在DMA控制器的控制下完成的。

④DMA比中断方式CPU和I/O设备并行度高。

DMA控制器中又以下四类寄存器:

1:命令/状态控制寄存器CR、用于接收从CPU发来的I/O命令,或有关控制信息,或设备的状态。

2:内存地址寄存器MAR、在输入时,它存放把数据从设备传送到内存的起始目标地址,在输出时,它存放内存到设备的内存源地址。

3:数据寄存器DR、用于暂存从设备到内存,或从内存到设备的数据。

4:字节计数器DC。存放本次CPU要读取的字节数。

DMA工作过程?

P211

与设备无关的I/O软件?

目的:方便用户和提高OS的可扩展性和可适应性。

设备无关性含义:应用程序所用设备不局限于某个具体的物理设备

设备分配中的数据结构

为分配独占设备必须具有相应数据结构:

①设备控制表DCT

②控制器控制表COCT

③通道控制表CHCT

④系统设备表SDT

P218设备分配程序的改进?

用户层的I/O软件?

虚拟设备技术?把独占设备转换为共享设备

假脱机(SPOLOLING)系统?也称为虚拟设备技术,利用假脱机技术可以把独占设备变成具有共享特征的虚拟设备,从而提高设备的利用率,主要应用于低速I/O设备。

为什么引入SPOOLING技术?SPOOLING技术特点?

①提高I/O速度,对低速设备操作转换为对磁盘缓冲区操作

②将独占设备改造为共享设备,没有为进程分配设备,只是在磁盘缓冲区分配空闲盘块和I/O请求表

③实现了虚拟设备功能,例如假脱机打印

SPOOLING系统的组成由以下四部分组成:P221

①输入输出井:磁盘上开辟,井文件,连接成队列

②输入输出缓冲区:内存中开辟,CPU与磁盘速度矛盾

③输入进程和输出进程:预输入,缓输出

④井管理:向输入井读信息或向输出井写信息

以打印机为例子,阐述SPOOLING技术的工作流程?P223

磁盘存储器的性能和调度?

磁盘数据组织和格式

磁盘结构:盘片,盘面,磁道,扇区,柱面

一个扇区称为一个盘块,各扇区间保留一定间隙

磁盘信息存储在扇区中,读写以扇区为单位,每个盘面都有磁头

磁盘访问时间Ta=寻道时间TS+旋转延迟时间Td+传输时间TT

磁盘调度算法?

先来先服务

最短寻道时间

基于扫描的磁盘调度算法(扫描算法、循环扫描算法)

八、文件管理

什么是文件系统?操作系统中负责存取和管理文件信息的模块称为文件系统,他负责文件的存储、检索、更新、共享和保护。文件系统的基本目标是实现“按名存取”。

文件的打开和关闭?P242

文件的逻辑结构分类?P243

顺序文件的优缺点,索引顺序文件?P247

文件目录?由文件说明索引组成的用于文件检索的特殊文件,用于标识系统中文件及其物理地址。

文件控制块FCB的内容?P249

九、磁盘存储器的管理

https://blog.csdn.net/woschengxuyuan/article/details/128133558

如何为一个文件分配磁盘空间,磁盘最小空间是盘块(扇区),即文件的盘块是如何组织的

1、连续组织方式优缺点

2、链接组织方式优缺点

3、索引组织方式优缺点P268

显示链接和隐示链接是如何实现的及其比较?P271

  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值