王道操作系统整理

操作系统概述:

操作系统:控制和管理整个计算机系统硬件和软件资源,并合理组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。

 

并发:指两个或多个事件在同一时间间隔内发生。

引入进程的目的是使程序能并发执行。操作系统的并发性是通过分时实现的。

共享(资源共享):指系统中的资源可供内存中多个并发执行的进程共同使用。

 

并发和共享是操作系统两个最基本的特征。

 

虚拟;指把一个逻辑实体变成多个逻辑上的对应物。

 

异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

 

操作系统的功能:

处理机管理:即对进程的管理,有进程控制、进程同步、进程通信、死锁处理、处理机调度

存储器管理:内存分配、地址映射、内存保护、共享和内存扩充等功能。

设备管理:完成用户的I/O请求,方便用户使用各种设备,并提高设备利用率。包括缓冲管理、设备管理、设备处理和虚拟设备等功能。

文件管理:计算机中的信息都是以文件的形式存在的,负责文件管理的部分称为文件系统,包括文件存储空间的管理、目录管理和文件读写管理和保护等。

 

用户与计算机系统之间的接口:

命令接口:联机命令接口又称交互式命令接口,适用于分时或实时系统的接口。

      脱机命令接口又称批处理命令接口,适用于批处理系统,由一组作业控制命令(语言)组成。

程序接口:由一组系统调用命令(简称系统调用,也称广义指令)组成。

 

操作系统用作扩充机器:

没有任何软件支持的计算机称为裸机。

通常把覆盖了软件的机器称为扩充机器,又称之为虚拟机。

 

习题部分概念:

系统调用是操作系统 提供给应用程序使用内核功能的接口。

操作系统不提供管理应用缓存的系统调用。

引入多道程序设计后程序的执行就失去了封闭性和顺序性(是单道程序设计的基本特征)。

 

库函数是语言或应用程序的一部分,可以运行在用户空间中。而系统调用是操作系统的一部分,是内核提供给用户的程序接口,运行在内核空间中,而且许多库函数都会使用系统调用来实现功能。没有使用系统调用的库函数,执行效率通常比系统调用高。因为使用系统调用时,需要上下文切换以及状态转换(由用户态到内核态)

 

操作系统的发展:

手工阶段:(此阶段无操作系统)

批处理阶段:(操作系统开始出现)

单道批处理系统

多道批处理系统:宏观上并行,微观上串行

 

分时操作系统:实现它的关键问题是如何使用户能与自己的作业进行交互,即当用户在自己的终端上键入命令时,系统能及时接受并及时处理该命令,再将结果返回给用户。

主要特征:同时、交互、独立、及时性。

 

实时操作系统:为了能在某个时间限制内完成某些紧急任务而不需时间片排队,最主要的特点:及时性和可靠性。

 

网络操作系统和分布式操作系统:

分布式操作系统与网络操作系统本质上的不同之处在于分布式操作系统中,若干台计算机相互协同完成同一任务。

 

习题部分概念:

多道程序设计技术允许同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种软、硬件资源,当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序,即多道批处理系统的I/O设备可与CPU并行工作,这就是借助于中断技术实现的。

 

 

操作系统的运行环境

核心态:

一些与硬件关系较紧密的模块:时钟中断、中断处理、设备驱动

运行频率较高的程序:进程管理、存储器管理和设备管理等。

这两部分的内容构成了操作系统的内核。

核心态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令。

 

当中断或异常发生时,运行用户态的CPU会立即进入核心态,这是通过硬件实现的。

 

中断(Interruption):也称外中断,指来自CPU执行指令以外的事件发生,如设备发出I/O结束中断,表示设备输入\输出处理已经完成,希望处理机能够向设备发下一个输入/输出请求,同时让完成输入/输出后的程序继续运行。

异常(Exception):也称内中断,例外或陷入(Trap),指源自CPU执行指令内部的事件,如程序的非法操作码、地址越界、算术溢出、虚存系统的缺页以及专门的陷入指令等引起的事件。

 

系统调用:就是用户在程序中调用操作系统所提供的一些子功能,系统调用被看作特殊的公共子程序。

系统调用的功能:

设备管理:完成设备的请求和释放,以及设备启动等功能。

文件管理:完成文件的读、写、创建及删除等功能。

进程控制:完成进程的创建、撤销、阻塞及唤醒等功能。

进程通信:完成进程之间的消息传递或信号传递等功能。

内存管理:完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。

系统调用运行在系统的核心态。

 

习题部分概念:

操作系统关心的主要问题是管理计算机系统资源。

批处理的主要缺点是缺少交互性。

输入输出指令需要中断操作,中断必须在核心态下执行。

  多道性是为了提高系统利用率和吞吐量而提出的。

I/O通道实际上是一种特殊的处理机,它具有执行I/O指令的能力,并通过执行通道程序来控制I/O操作。

系统调用需要出发trap指令

程序设计无法形成屏蔽中断指令

 

中断是操作系统必须提供的功能,因为计算机的各种错误都需要中断处理,核心态与用户态切换也需要中断处理。

在用户态运行某些“危险性高”的指令会转到核心态去运行,这个过程称为访管中断。

广义指令(即系统调用命令),必须工作在核心态。广义指令的调用可能发生在用户态,调用广义指令的那条指令不一定是特权指令,但广义指令存在于核心态中,所以执行一定在核心态。

特权指令是指仅能由操作系统使用的指令。

子程序调用只需保存程序断点,即改指令的下一条指令的地址;中断调用子程序不仅要保护断点(PC的内容),还要保护程序状态字寄存器的内容PSW,在中断处理中,最重要的两个寄存器就是PC和PSWR。

trap指令、跳转指令和压栈指令均可以在用户态执行,其中trap指令负责由用户态转换成为内核态。而关中断指令为特权指令,必须在核心态才能执行。

关中断是权限非常大的指令。只有管态才能把它关掉。

内中断是指来自CPU和内存内部产生的中断,包括程序运算引起的各种错误,如地址非法、校验错、页面失效、非法指令、用户指令执行特权指令自行中断(INT)和除数为零等。以上都是在指令的执行过程中产生的。

内中断不能被屏蔽,一旦出现应立即处理,

异常处理完后,并不都是会返回到发生异常的指令继续执行,还可能跳过,如除数为0和自行中断(INT)都会自行跳过中断指令。

外部中断处理过程,PC值由中断隐指令自动保存,而通用寄存器内容由操作系统保存。

 

区分执行态的主要目的是保护系统程序。用户态到核心态的转换发生在中断产生时,而核心态到用户态的转换则发生在中断返回用户程序时。

多道程序并发执行是指有的程序在CPU上运行,而另一些程序正在I/O设备上进行传输,即通过CPU操作与外设传输在时间上的重叠必须有中断和通道技术的支持。原因如下:

(1)通道是一种控制一台或多台外部设备的硬件机构,它一旦被启动就独立于CPU运行,因而做到了输入/输出操作与CPU并行工作。

(2)在硬件上引入了中断技术。中断就是在输入/输出结束时,或硬件发生某种故障时,由相应的硬件(即中断及后)向CPU发出信号,这时CPU立即停下工作而转向处理中断请求,待处理完中断后再继续原来的工作。

因此,通道技术和中断技术结合起来就可以实现CPU与I/O设备并行工作,即CPU启动通道传输数据后便去执行其他程序的计算工作,而通道则进行输入输出操作;当通道工作结束时,再通过中断机构向CPU发出中断请求,CPU则暂停正在执行的操作,对出现的中断进行处理,处理完后再继续原来的工作。

 

大内核:将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务。

微内核:为解决操作系统内核代码难以维护的问题,于是提出微内核的体系结构。最大的问题时性能问题。但微内核更稳定。

 

特权指令(有特殊权限的指令):清内存、置时钟、分配系统资源、修改虚存的段表和页表、修改用户的访问权限等。

用户态下只能使用非特权指令,核心态下可以使用全部指令

当在用户态下使用特权指令时,将产生中断以阻止用户使用特权指令。

从用户态转换为核心态的唯一途径是中断或异常

 

访管指令是一条可以在用户态下执行的指令,将操作系统从用户态转换为核心态,称为访管中断。访管中断由访管指令产生,程序猿使用访管指令向操作系统请求服务。

访管指令本身不是特权指令,其基本功能是让程序拥有“自愿进管”的手段,从而引起访管中断。

 

进程管理

进程:为更好的描述和控制程序的并发性,实行OS的并发和虚拟。

概念:进程是一个具有独立功能的程序关于某个数据集合的一次运动活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码的本身,还包括当前活动,通过程序计数器的值和处理寄存器的内容来表示。

组成:一个进程实体由程序段、相关数据段和PCB三部分构成,其中PCB是标志一个进程存在的唯一标识,程序段是进程运行的程序的代码,数据段则是存储程序运行过程中相关的一些数据。

进程控制块(PCB):系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。PCB创建后,常驻内存。

PCB内的信息:进程标志信息、进程控制信息、进程资源信息、CPU现场信息(p31有更详细的描述)

进程映像(进程实体):由程序段(能被进程调度程序调度到CPU运行的程序的代码段)、相关数据(存储程序运行期间相关的数据,可以是原始数据也可以是相关结果)、和PCB三部分组成。

 

所谓的进程创建,实质上是创建进程映像中的PCB;撤销进程,实质上是撤销进程的PCB。

进程映像是静态的,而进程是动态的。

PCB是进程存在的唯一标志!

 

进程的特征:

动态性:进程是程序的一次执行,它有创建、活动、暂停、终止等过程,具有一定的生命周期,是动态的产生、变化和消亡的。动态性是进程最基本的特征。

并发性:指多个进程实体,同存于内存中,能在一段时间内同时运行,并发性是进程的重要特征,同时也是操作系统的重要特征。

独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位,凡未建立PCB的程序都不能作为一个独立的单位参与运行。

异步性:由于进程相互制约,使进程具有执行的间断性,即进程各自按照各自独立的、不可预知的速度向前推进。

结构性:从结构上看:进程实体是由程序段、数据段和进程控制块三部分组成。

 

进程的状态与转换:

运行状态:进程正在处理机上运行。

就绪状态:进程以处于准备运行的状态,获得了除处理机之外的一切所需资源。

阻塞状态:又称等待状态,等待某一事件而暂停运行,如等待某可用资源,等待可用的内存资源,等待I/O,即使处理机空闲,该阻塞进程也不能运行。

创建状态:进程正在被创建,尚未转到就绪状态。过程:申请一个空白PCB,并向PCB中填写一些控制和管理进程的信息;然后由系统为该进程分配运行时所必需的资源,最后把该进程转入到就绪状态。

结束状态:正常结束或因其他原因中断退出。

 

就绪->运行

运行->就绪

运行->阻塞

阻塞->就绪

进程从运行状态变成阻塞状态是一个主动的行为,而从阻塞状态变到就绪状态是一个被动的行为,需要其他相关进程协助。

 

进程控制

进程创建:终端用户登录系统、作业调度、系统提供服务、用户程序的应用请求等。(在撤销父进程时,也必须同时撤销其所有子进程)

进程终止:正常结束(任务完成准备推出运行),异常结束(存储区越界、保护错、非法指令、特权指令错、I/O故障等)

进程阻塞和唤醒:Block(被阻塞进程自我调用实现),Wakeup(被另一个进程调用实现)

进程切换:指处理机从一个进程的运行转到另一个进程上运行

 

进程的通信

高级通信方式是指以较高的效率传输大量数据的通信方式。

 

共享存储:低级通信方式的共享是基于数据结构的共享;高级通信方式则是基于存储区的共享。

消息传递:通信的进程之间不存在可直接访问的共享空间,必须利用OS提供的消息传递方法,OS提供发送消息和接收消息两个原语进行数据交换

直接通信:直接发送给接收方,挂到接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。

间接通信:通过信箱通信

管道通信:利用共享文件(pipe文件)半双工通信,某一时刻只能单向传输。写满后才读,读空后才写。(不属于任何文件系统,单独构成一个文件系统,指存在于内存中,容量大小通常为内存上的一页,因为不受磁盘大小的限制)

 

线程:由线程ID、程序计数器、寄存器集合和堆栈组成。

轻量级进程、一个基本的CPU执行单元、程序执行流的最小单元、是进程中的一个实体、不拥有系统资源。引入线程后,进程只作为除CPU以外系统资源的分配单元、线程则作为处理机的分配单元。

线程是独立调度的基本单位,进程是拥有资源的基本单位。

在同一个进程中,线程的切换不会引起进程的切换。

从一个进程内的线程切换到另一个进程中的线程,会引起进程的切换。

 

习题部分概念:

CPU可以空闲,当系统发生死锁时,则有可能进程全部处于死锁状态,(处于阻塞状态的进程只要所需的资源没有到,及时CPU空闲也不能运行)

引入线程后,进程仍然是资源分配的单位,线程是处理器调度和分配的单位,线程本身不具有资源,它可以共享所属进程的全部资源。

一个内核进程映射的多个用户级线程间的切换不需要在内核级切换进程,也就不需要内核的支持了。

多对一的线程模型用户级线程的“多”对操作系统透明,当其中的一个线程被阻塞后,整个进程和所有线程都会被阻塞。

 

C语言程序在内存中分三个段:

正文段(代码和赋值数据段):二进制代码和常量存放在正文段(全局赋值变量

数据堆段:动态分配的存储区

数据栈段:临时使用的数据变量(未赋值的局部变量和实参传递)

进程的优先级在PCB内

同一个系统中的进程(或线程)可以用系统调用的方法,被不同的进程(或线程)多次使用。

对进程的管理和控制功能室通过执行各种原语来实现的,如创建原语等。

设备分配是通过在系统中设置相应的数据结构实现的,不需要创建进程。

全局变量是对同一进程而言的。

p(wait)操作表示进程请求某一资源。

每个进程有自己独立的地址空间,操作系统利用硬件地址机制对进程的地址空间进行了严格的保护,限制了每个进程只能访问自己的地址空间。

 

处理机调度

作业调度(高级调度):从外存到内存的调度

中级调度(内存调度):为了提高内存利用率和系统吞吐量,将暂时不能运行的进程调至外存等待

进程调度(低级调度):按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给他。

 

系统吞吐量:表示单位时间内CPU完成的作业的数量

周转时间:作业完成事件-作业提交时间

带权周转时间:作业周转时间/作业实际运行时间

响应比:(等待时间+要求服务时间)/要求服务时间

 

引入处理机调度的原因就是为了合理地处理计算机软硬件资源。

优先级调度算法分适用于实时操作系统

高响应比、时间片轮转、多级反馈队列适合分时操作系统

时间片轮转调度算法是绝对可抢占的,由时钟中断来产生。

 

进程同步

为了协调进程之间相互制约的关系引入进程同步的概念

 

临界资源:一次仅允许一个进程使用的资源

临界区:访问临界资源的那段代码

同步(直接制约关系):

是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系就是源自它们之间的相互合作。

 

互斥(间接制约关系):当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用 临界资源的进程退出临界区后另一个进程才允许区访问此临界资源。

 

临界区互斥

同步机制(临界区互斥)应遵循的原则:

闲则让进

忙则等待

有限等待

让权等待:当进程不能进入临界区时,应立即释放处理机,防止进程忙等。

基本方法:

软件实现:

单标志法:违背“空闲让进”原则

双标志法先检查:违背“忙则等待”原则

双标志法后检查:会导致“饥饿现象”

皮特森算法:单标志和双标志后检查的结合

硬件实现:

中断屏蔽:进区关中断,出区开中断

硬件指令法:设立原子操作指令

信号量:利用PV操作实现互斥

 

管程:一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。

组成:

局部于管程的共享变量说明

对该数据结构进行操作的一组过程

对局部于管程的共享数据设置初始值的语句,管程的名字

引入管程的目的是为了解决临界区分散所带来的管理和控制问题。在没有管程之前,对临界区的访问分散在各个进程中,不易发现和纠正分散在用户程序中的不正确地使用P、V操作等问题。管程将这些分散在各进程中的临界区集中起来,并加以控制和管理,管程一次只允许一个进程进入管程内,从而既便于系统管理共享资源,又能保证互斥。

 

习题部分概念:

进程同步是指进程之间的一种直接的协同工作关系,这些进程之间的并发是异步的,它们相互合作共同完成一项任务。

用PV操作实现实现进程同步,信号量的初值应根据具体情况而定。

可重入代码(纯代码):允许多个进程同时访问的代码。

该代码可以被任何进程在任一时刻共享,就要求任一个进程在调用此段代码时都以同样的方式运行;而且进程在运行过程中被中断后再继续运行,其执行结果也不受影响,这就要求代码不能被任何进程修改,否则无法满足共享的需要。

 

 

死锁:多个进程因竞争临界资源而造成的一种僵局(互相等待),若无外力作用,这些进程就无法向前推进。

 

死锁产生的原因:

系统资源的竞争(非剥夺资源)

进程推进顺序非法

死锁产生的必要条件

互斥条件

不剥夺条件

请求和保持条件

循环等待条件

 

银行家算法的数据结构:

可利用资源矢量Available

最大需求矩阵Max

分配矩阵Allocation

需求矩阵Need  Need=Max-Allocation

 

解决方案

预防死锁

破坏互斥条件:有些资源(如打印机)必须互斥使用,无法破坏互斥条件

破坏不剥夺条件:增加系统开销,降低吞吐量(剥夺资源法)

破坏请求和保持条件:严重浪费系统资源,这个能导致饥饿现象(一次性分配)

破坏循环等待条件:浪费系统资源,并造成编程不便(顺序资源分配法)

避免死锁

安全状态:能找到一个分配资源的序列能让所有进程都顺利完成

银行家算法:采用预分配策略检查分配完成时系统是否处于安全状态

检测死锁

利用死锁定理化简资源分配图以检测死锁的存在

解除死锁

资源剥夺法:挂起某些死锁进程并抢夺它的资源,以便让其他进程继续推进

撤销进程法:强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源

进程回退法:让进程回退到足以回避死锁的地步

 

习题部分概念:

资源有序分配可以限制循环等待条件的发生

死锁的四个必要条件中,无法破坏的是互斥使用条件,因为有些资源根本不能同时访问,打印机只能互斥使用

资源预分配属于预防死锁(要求用户在使用资源之前将所有资源一次性申请到)

 

死锁:两个或多个进程无限地等待一个事件,而该事件只能由这些等待进程之一来产生(大于或等于两个)

饥饿(无限期等待):进程在信号量内无穷等待的情况(一个)

 

银行家算法的原理

该算法的主要思想是避免系统进入不安全状态。在每次进行资源分配时,它首先检查系统是否有足够的资源满足要求,如果有,如果有,则先进行分配,并对分配后的新状态进行安全性检查。如果新状态安全,则正式分配上述资源,否则就拒绝分配上述资源。这样,它保证系统始终处于安全状态,从而避免死锁现象的发生。

 

进程同步、互斥的区别和联系

并发进程的执行会产生相互制约的关系:一种是进程之间竞争使用临界资源,只能让他们逐个使用,这种现象称为互斥,是一种竞争关系;另一种是进程之间协同完成任务,在关键点上等待另一个进程发来的消息,以便协同一致,是一种协作关系。

 

进程和作业的关系p138

进程是系统资源的使用者,而把用户要求计算机完成的一串任务称为作业。

 

内存管理

内存管理的功能:

内存空间的分配和回收

地址转换

内存空间的扩充

内存保护

 

将用户源程序变为可在内存中执行的程序的步骤:

编译

链接

装入:由装入程序将装入模块装入内存运行

程序链接的三种方式:

静态链接:在装入之前链接完成

装入时动态链接:在装入内存时,边装入边链接

运行时动态链接:在执行中动态链接

 

程序装入内存的三种方式:

绝对装入:逻辑地址与实际内存地址完全相同,只适用于单道程序,通常使用符号地址。

可重定位装入:装入时对目标程序中指令和数据的修改过程(这个过程称为重定位),地址变换通常是在装入时一次完成(这又称为静态重定位)

动态运行时装入(动态重定位):将地址变换推迟到程序真正要执行时才进行。(可以分配到不连续的存储区)

 

逻辑地址(相对地址):编译后,每个目标模块都是从0号单元开始编址

逻辑地址空间:链接程序将各个模块链接成一个完整的可执行目标程序时,链接程序顺序依次按各个模块的相对地址构成的统一的从0号单元开始编址的逻辑地址空间。

物理地址空间:指在内存中的物理单元的集合,是地址转换的最终地址,进程在运行时执行指令和访问数据最后都要通过物理地址从主存中存取。

地址重定位:在装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位。

 

内存保护

重定位寄存器(基址寄存器)和界地址寄存器(限长寄存器)

覆盖:

将用户空间分成一个固定区和若干个覆盖区,将经常活跃的部分放在固定区,其余部分按调用关系分段。在需要调用前,系统再将其掉入覆盖区替换覆盖区中所有的段。(内存能更新的地方只有覆盖区的段,不在覆盖区中的段会常驻内存)(同样可用于固定分区分配)(最大长度受内存容量限制,覆盖段由程序猿设计)

 

交换:

将处于等待状态的程序从内存移到辅存,把内存空间腾出来,这个过程又叫换出;

把准备好竞争CPU运行的程序从辅存移到内存,这一过程叫做换入。(中级调度就是采用交换技术)

 

交换技术主要是在不同进程(或作业)之间进行,而覆盖技术则用于同一个程序或进程中。

连续分配管理方式

单一连续分配

固定分区分配

分区大小相等

分区大小不等

动态分区分配

外部碎片

内部碎片

紧凑

首次适应:地址从小到大

最佳适应:空间从小到大

最坏适应:空间从大到小

邻近适应:上次查完的结束位置开始查找

非连续分配管理方式

基本分页存储管理

不会产生外部碎片

每个进程平均只产生半个块大小的内部碎片(也叫页内碎片)

页(Page):进程中的块

块(Block):对外存进行同页单位大小一样的划分

页表:便于在内存中找到进程的每个页面所对应的物理块,页表一般存放在内存中。

页式管理中地址空间是一维德

分页式管理方式的两个主要问题:

地址变换必须足够快,否则访存速度会降低

页表不能太大,否则内存利用率会降低

需要两次访存:一次访问页表,确定所存储的数据或指令的物理地址,第二次才根据该物理地址存储数据或指令。

 

快表(又称联想寄存器TLB):用来存放当前访问的若干页表项,以加速地址变换的过程。

主存中的页表也常称为慢表。

二级页表:页表的页表,为了查询方便,顶级页表最多只能有一个页面。(也即顶级页表中的所有表项只占一个页面)

 

基本分段存储管理方式

 

段内要求连续,段间不要求连续

段表:每个进程都有一张逻辑空间与内存空间映射的段表,其中每一个段表项对应进程的一个段,段表项纪录该段在内存中的起始地址和段的长度。用于实现从逻辑段到物理内存区的映射

 

段页式存储管理方式

三次访问主存:先查找段表,得到页表起始地址,和页表长度,

再查找段表,得到块号

最后根据物理地址访问数据和指令。

 

地址空间:

分页式:一维

分段式的地址空间:二维

段页式:二维

简言之,确定一个地址需要几个参数就是几维。

 

 

习题部分概念:

进程正在进行I/O操作时不能换出主存,否则它的I/O数据区将被新换入的进程占用,导致错误

页表和段表都存放在内存中,系统提供给用户的物理地址空间为总的空间大小减去页表或段表的长度。

内存分页管理是在硬件和操作系统层面实现的,对用户、编译系统、连接装置程序等上层是不可见的。

分段是在用户编程时,将程序按照逻辑划分为几个逻辑段

覆盖和交换是为了提高内存的利用率而引入的,也就是在较小的内存空间中用重复使用的方法来节省存储空间是一种以时间换空间的技术。换入换出速度越快付出的时间代价就越小。

虚拟存储器与非虚拟存储器的主要区别:

非虚拟存储器中,作业必须全部装入内存且在运行过程中一直驻留内存,

在虚拟存储器中,作业不必全部装入内存且在运行过程中也不必一直驻留内存。

页面大小确定的因素:

进程的平均大小、页表占用的长度等。一旦确定,所有页面就都是等长的,(一般为2的整数幂倍,这样便于系统管理)

在多个进程并发执行时,所有进程的页表大多数驻留在内存中,在系统中只设置一个页表寄存器(PTR),在其中存放页表在内存的起始地址和页表的长度。平时,进程未执行时,页表的起始地址和页表的长度存放在本进程的PCB中,当调度到某进程时,才将这两个数据装入页表寄存器中。每个进程都有一个单独的逻辑地址,有一张属于自己的页表。

 

分区固定的都会产生内部碎片,而无外部碎片

页式存储管理对用户时透明的,

静态重定位是在程序运行之前由装配程序完成的,必须分配其要求的全部连续内存空间

多级页面不仅不会加快地址的变换速度,因为增加了更多的查表过程,反而会使地址的变换速度减慢。

 

虚拟存储器管理

传统存储管理方式的特征:

一次性

驻留性

 

快表、页高速缓存以及虚拟内存技术从广义上讲,都是属于高速缓存技术,这些技术所依赖的原理是局部性原理。

 

局部性原理

时间局部性原理:

如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问,产生时间局部性的典型原因,是由于在程序中存在大量的循环操作。

空间局部性原理:

一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内被访问的地址,可能集中在一定的范围内,这是因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数据、表等形式簇聚存储的。

虚拟存取器:

基于局部性原理,在程序装入时,可以将程序的一部风装入内存,而将其余部分留在外存,就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存中时,由操作系统将所需要的部分掉入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要掉入内存的信息,这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。

 

虚拟存储器技术的实现

请求分页存储管理

请求分段存储管理

请求段页式存储管理

 

不管哪种方式,都需要支持以下几个方面:

一定容量的内存和外存

页表机制(或段表机制),作为主要的数据结构

中断机构,当用户程序要访问的部分尚未调入内存,这产生中断

地址变换机构,逻辑地址到物理地址的变换

 

请求分页系统中的页表项

页号 物理块号 状态位P 访问字段A 修改位M 外存地址

状态位P:用于指示该页是否已调入内存,供程序访问时参考

访问字段:用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问过供置换算法换出页面时参考

修改为M:标识该页在调入内存后是否被修改过。

外存地址:用于指出该页在外存上的地址,通常是物理块,供调入该页时参考

缺页中断机构

在请求分页系统中,每当所要访问的页面不在内存时,便产生一个缺页中断,请求操作系统将所缺页的进程阻塞(调页完成唤醒)

缺页中断与一般的中断的区别:

在指令执行期间产生和处理中断信号,而非一条指令执行完后,属于内部中断。

一条指令在执行期间,可能产生多次缺页中断。

 

地址变换机构:

在进行地址变换时,先检索快表,

若找到要访问的页,便修改页表项中的访问位(写指令则还需要重置修改位),然后利用页表项中给出的物理块号和页内地址形成物理地址。

若未找到该页的页表项,应到内存中去查找页表,再对比页表项中的状态位P,看该页是否已调入内存,未调入则产生缺页中断,请求从外存把该页调入内存。

 

页面置换算法

最佳置换算法(OPT):调出最长时间内不在被访问的页面

FIFO:只有FIFO会产生Belady现象(Belady即当所分配的物理块数增大而页故障数不减反增的现象)

最近最久未使用算法(LRU):

Clock(又称最久最久未使用NRU):

堆栈类算法不可能出现belady异常

 

调入页面的时机:

预调页策略:

请求调页策略:

从何处调入页面:

系统拥有足够的对换区空间:从对换区调入页面

系统缺少足够的对换区空间:从文件区调入

UNIX方式:与进程有关的文件都放在文件区,故未运行过的页面,都应从文件区调入。曾经运行过但又被换出的页面,由于被放在对换区,因此下次调入时应从对换区调入。进程请求的共享页面若被其他进程调入内存,则无需再从对换区调入。

 

抖动

刚刚换出的页面马上又要换入内存,刚刚换入的页面马上就要换出内存,这种频繁的页面调度行为称为抖动,或颠簸。(是由页面置换算法不合理引起的一种现象)

 

工作集

指在某段时间间隔内,进程要访问的页面集合。

 

原理:让操作系统跟踪每个进程的工作集,并为进程分配大于其工作集的物理块。如果还有空闲物理块,则可以再调入一个进程到内存以增加多道程序数。如果所有工作集之和增加以至于超过了可用物理块的总数,那么操作系统会暂停一个进程,将其页面调出并且将其物理块分配给其他进程,防止出现抖动。

 

 

习题部分概念:

内存没有页面,需要从外存读入,会发生磁盘I/O。

无论采用什么页面置换算法,每种页面第一次访问时不可能再内存中,必然发生缺页。

虚拟存储扩充内存的基本方法是将一些页或段从内存中调入、调出,而调入、调出的基本手段是覆盖与交换。

请求分页存储管理就是为了解决内存容量不足而使用的方法,它基于局部性原理实现了以时间换取空间的目的。它的主要特点是间接扩充了内存。

在具有对换功能的操作系统中,通常把外存分为文件区和对换区。前者用于存放文件,后者用于存放从内存换出的进程。(对换区的大小与抖动无关)

 

地址翻译:TLB—>页表(TLB不命中)—>Cache—>主存(Cache不命中)—>外存(缺页)

 

 

文件管理

文件系统的实现

文件:文件是以计算机硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序、等等。

在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行输入、输出中,则以文件为基本单位。

文件系统:用于对文件的维护和管理,如访问、修改和保存文件等。

 

文件的结构(从底向上定义)

数据项:数据项是文件系统中最低级的数据组织形式,可分为:

基本数据项:是数据中可命名的最小的逻辑数据单位,即原子数据。

组合数据项:由多个基本数据项组成

记录:记录是一种相关的数据项的集合

文件:文件是指由创建者所定义的一组相关信息的集合,逻辑上可分为:

有结构文件(又称记录式文件):文件由一组相似的记录组成,如考生的报考信息记录。

无结构文件(又称流式文件):被看成是一个字符流,比如一个二进制文件或字符文件。

 

文件的属性

名称

标识符:对人不可读的一种内部名称

类型

位置:指向设备和设备上文件的指针

大小

保护

时间、日期和用户标识

所有文件的信息都保存在目录结构中,而目录结构也保存在外存上。文件信息在需要时再调入内存

 

文件的基本操作

创建文件:两个步骤

1、在文件系统中为文件找到空间;

2、在目录中为新文件创建条目,该条目记录文件名称、在文件系统中的位置等。

写文件

读文件

文件重定位(文件寻址)

删除文件:

先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。

截断文件:将文件长度设为0,并释放其空间。允许文件所有属性不变,并删除其内容。

 

文件的打开和关闭

使用系统调用open,将指明文件的属性(包括该文件在外存上的物理位置)从外存拷贝到内存打开文件目录表的一个表目中,并将该表目的编号(或称为索引)返回给用户。

操作系统维护一个包含所有打开文件信息的表(打开文件表(open file table))当用户需要一个文件操作时,可通过该表的一个索引指定文件,就省略了搜索环节。

当文件不再使用时,进程可以关闭它,操作系统从打开文件表中删除这一条目。

open通常返回一个指向打开文件表中的一个条目的指针。通过使用该指针(而非文件名)进行所有的I/O操作,在open调用完成之后,操作系统对该文件的任何操作,都不再需要文件名,只需要open调用返回的指针。

 

打开文件时会关联到的信息

文件指针:系统跟踪上次读写位置作为当前文件位置指针

文件打开计数:跟踪代开和关闭的数量,当该计数为0时,系统关闭文件,删除该条目。

文件磁盘位置:

访问权限

 

文件的逻辑结构

文件的逻辑结构是从用户观点出发看到的文件的组织形式。

文件的物理结构是从实现观点出发,又称为文件的存储结构,是指文件在外存上的存储组织形式。

 

(1)无结构文件(流式文件):将数据按顺序组织成记录并积累保存,它是有序相关信息项的集合,以字节(Byte)为单位。

对记录的访问只能通过穷举搜索的方式,但字符流的无结构文件管理简单,方便用户操作

对基本信息单位操作不多的文件较适合于采用字符流的无结构方式,如源程序文件、目标代码文件等。

 

(2)有结构文件(记录式文件)按记录的组织形式分为:

1、顺序文件:文件中的记录一个接一个地顺序排列,记录可以是定长的或变长的,可以顺序存储或以链表形式存储,在访问时需要顺序搜索文件。有如下两种结构:

串结构:记录之间的顺序与关键字无关。

顺序结构:所有记录按关键字顺序排序

2、索引文件:通过公式i*L计算来获得第i个记录相对于第一个记录的地址。

因为变长记录文件只能顺序查找,系统开销较大,可以建立一张索引表以加快检索速度,

索引表本身是定长记录的顺序文件。

3、索引顺序文件:是顺序和索引两种组织形式的结合。索引顺序文件将顺序文件中的所有记录分成若干组,为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的关键字值和指向该记录的指针。

查找记录时,通过索引表找到其所在的组,然后在该组中使用顺序查找就能很快的找到记录。

4、直接文件或散列文件(Hash File):给定记录的键值或通过Hash函数转换为键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件、没有顺序的特性。

 

 

 

目录结构

文件目录用于关联文件管理系统和文件集合。包含属性、位置和所有权等信息。

目录管理要实现“按名存取”,提供文件名和文件之间的映射

提供用于控制访问文件的信息

目录管理通过树形结构来解决和实现重名问题。

 

文件控制块(FCB):用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。

FCB的有序集合称为文件目录,一个FCB就是一个文件目录项,为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项。

FCB中的信息:

基本信息:文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。

存放控制信息:如文件存取权限

使用信息:建立、修改时间等

磁盘索引结点:存放在磁盘上的索引结点,主要内容如下

文件主标识符

文件类型

文件存取权限

文件物理地址

文件长度

文件链接计数

文件存取时间

文件被打开时,内存中的索引结点增加了以下内容:

索引结点编号

状态

访问计数

逻辑设备号

链接指针

 

目录结构

搜索

创建文件

删除文件

显示目录

修改目录

 

单级目录结构

两级目录结构:主文件目录、用户文件目录

多级目录结构(树形目录结构)

进程对个文件的访问都是相对于当前目录进行的。

无环图目录结构:便于实现文件共享

 

硬链接就是多个指针指向一个索引结点,保证只要还有一个指针指向索引结点,索引结点就不能删除;软连接就是把到达共享文件的路径记录起来,当要访问文件的时候,根据路径寻找文件。

硬链接的查找速度会比软连接快。

 

文件保护

访问类型

访问控制(访问控制表)ACL:通过访问者的身份进行限制

拥有者

其他

口令和密码是另外两种访问控制方法

口令指用户在建立一个文件时提供一个口令,系统为其建立FCB时附上响应口令,同时告诉允许共享该文件的其他用户。缺点时口令直接存储在系统内部不安全

密码指用户对文件进行加密,文件被访问时需要使用密匙

 

习题部分概念:

open中的参数包含文件的路径名和文件名,而read只需要使用open返回的文件描述符,并不适用文件名作为参数。

文件目录项即FCB,通常由文件基本信息、存储控制信息和使用信息组成。基本信息包括文件物理位置。但文件目录项不包括FCB的物理位置信息(这应该是有OS管的)

建立符号链接时,引用计数值直接复制’建立硬链接时,引用计数值加1.删除文件时,删除操作对于符号链接是不可见的,这并不影响文件系统,当以后再通过符号链接访问时,发现文件不存在,直接删除符号链接;但对于硬链接则不可以直接删除,引用计数值减1,若值不为0,则不能删除此文件,因为还有其他硬链接指向此文件。

PCB中保存有对文件访问的控制信息

访问控制必须由系统实现,系统本身的安全性才能得到保证

加密机制不要由系统实现,因为会很难扩展

一个文件被用户进程首次打开即被执行了open操作,会把文件的FCB调入内存,而不会把文件内容调入内存,只有进程希望获取文件内容时才会读入文件内容;

一个文件存放在磁带中通常采用连续存放,文件在硬盘上一般不采用连续存放方法。

对一个文件的访问,常由用户访问权限和文件属性共同限制。用户优先级与用户是否有权限访问这个文件没有相关关系。

防止受损常采用备份的方法保护文件,而存取控制矩阵的方法是用于多用户之间的存取权限保护。

 

文件系统的实现

目录实现

线性列表

哈希表

文件实现:(文件实际上是一种抽象的数据类型)

文件的实现就是研究研究文件的物理结构。即文件数据在物理存储设备上是如何分布以及组织起来的。

文件的分配方式:讲的是对磁盘非空闲块的管理

文件存储空间管理:讲的是对磁盘空闲块的管理

 

 

文件分配方式(文件的物理结构)

连续分配:要求每个文件在磁盘上占有一组连续的块

支持顺序访问和直接访问,优点是实现简单、存取速度快。

      缺点在于文件长度不宜动态增加,反复增删文件后会产生外部碎片,因而只适用于长度固定的文件

 

链接分配:采用离散分配的方式,消除了外部碎片,故而显著的提高了磁盘空间的利用率,

优点:对文件的增删改非常方便

可分为:

显示链接:把用于链接文件各物理块的指针,从每个物理块的块末尾提取出来,显式地存放在内存的一张链接表中,文件要查找当前块的下一块地址时,只需找到链接表中相应的位置,即可找到下一块的地址,由于分配给文件的所有盘块号都放在该表中,故这个链接表又称为文件分配表(FAT)。

隐式链接:缺点是无法直接访问盘块,只能通过指针顺序访问文件,以及盘块指针消耗掉了一定的存储空间。

 

索引分配:它把每个文件的所有的盘块号都集中放在一起构成索引块(表),每个文件都有其索引块,这是一个索引块地址的数组,通过索引块的第i个条目的指针来查找和读入所需的块。创建文件时,索引块的所有指针都设为空。

有以下方法来解决索引块大小的问题:

链接方案:一个索引块通常为一个磁盘块,其本身能够直接读写。为了处理大文件可以将多个索引块链接起来。

多层索引:多层索引使第一层索引块指向第二层的索引块,第二层的 索引块再指向文件块。

混合索引:将多种索引分配方式相结合的分配方式。例如,系统既采用直接地址,又采用单级索引分配方式或两级索引分配方式。

索引方式需要两次访问外存:首先要读取索引块的内容,然后在访问具体的磁盘块。

 

三种分配方式比较:p228

 

存储空间管理

空闲表:将所有空闲块组织成表

属于连续分配方式,系统为外存上的所有空闲区建立一张空闲盘块表,空闲盘区的分配与内存的动态分配类似,采用首次适应算法和循环首次适应算法。

 

空闲链表法:将所有空闲块组织成链表

空闲盘块链:将磁盘上的所有空闲空间,以盘块为单位拉成一条链。

优点:分配和回收一个盘块的过程非常简单

空闲盘区链:是将磁盘上的所有空闲盘区(每个盘区可包含若干个盘块)拉成一条链。在每个盘区上除含有用于指示下一个空闲盘区的指针外,还应有能指明本盘区大小(盘块数)的信息。分配盘区的方法与内存的动态分区分配类似,通常采用首次适应算法。在回收盘区时,同样也要将回收区与相邻接的空闲盘区相合并。

 

 

 

位示图:利用二进制的每位记录空闲块

利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应。当为0时表示空闲,当为1时表示已分配。

 

成组链接:空闲表和空闲链表的结合,适合大的文件系统

思想:把顺序的n个空闲扇区地址保存在第一个空闲扇区内,其后一个空闲扇区内则保存另一个顺序空闲扇区的地址,如此继续,直至所有空闲扇区均予以链接。

 

习题部分概念:

 

直接存取即为随机存取,采用连续分配和索引分配的文件都适合于直接存取方式,只有采用链接分配的文件不具有随机存取特性。

为实现快速连续分配,连续结构最优。

 

连续分配、链接分配、索引分配三者比较

连续分配方式:

优点:可随机访问(磁盘),访问速度快;

缺点:要求有连续的存储空间,容易产生碎片,降低磁盘空间利用率,不利于磁盘的增长扩充

链接分配方式:

优点:不要求连续的磁盘空间,有利于扩充文件

缺点:只适合顺序访问,不适合随机访问,链接指针占用一定存储空间,降低存取效率

索引分配方式:

优点:既支持顺序访问也支持随机访问,查找效率高,便于文件删除

缺点:索引表会占用一定的存储空间

 

磁盘的组织和管理

磁盘:由表面涂有磁性物质的金属或塑料构成的圆形盘片,通过一个称为磁头的导体线圈从磁盘中存取数据。

磁道:磁盘在盘面上的数据存储在一组同心圆中。

扇区:磁道又划分为几百个扇区

盘块:一个扇区称为一个盘块

 

磁盘地址用 :“柱面号*盘面号*扇区号(或块号)”表示

 

固定头磁盘:磁头相对于盘片的径向方向固定

活动头磁盘:每一个磁道一个磁头,磁头可移动,磁头臂可以来回伸缩定位磁道。

固定盘磁盘:磁盘永久固定在磁盘驱动器内

可换盘磁盘:磁盘可移动和替换

 

磁盘调度算法

寻找时间Ts:活动头磁盘在读写信息钱,将磁头移动到指定磁道所需要的时间

Ts=与磁盘驱动器速度有关的常数*跨越的磁道条数+启动磁臂的时间

延迟时间Tr:磁头定位到某一磁道的扇区(块号)所需要的时间

Tr=1/(2*磁盘的旋转速度)

传输时间Tt:从磁盘读出或向磁盘写入数据所经历的时间

Tt=(每次所读/写的字节数)/磁盘每秒的转速*一个磁道上的字节数

寻道时间与磁盘调度算法相关。而延迟时间和传输时间都与磁盘旋转速度有关,且为线性相关

总的平均时间Ta:= Ts+Tr+Tt

 

磁盘调度算法:

先来先服务(FCFS):平均寻道距离大,仅应用在磁盘I/O较少的场合

最短寻找时间优先(SSTF):可能出现饥饿

扫描(Scan)算法(又称电梯算法):可避免饥饿

循环扫描(CSCAN):对两端磁道请求的不公平

 

对盘面扇区进行交替编号,对磁盘片组中的不同盘面错位命名可以减少延迟时间。

 

扇区管理

磁盘初始化:对磁盘进行低级格式化和高级格式化。

在磁盘能存储数据之前,必须进行如下操作:

低级格式化(物理分区):将磁盘分成扇区以便磁盘控制器能进行读和写操作。

为了能让磁盘存储文件,OS还需要将自己的数据结构记录在磁盘上:

第一步:将磁盘分为由一个或多个柱面组成的分区(即C、D盘分区)

第二步:将物理分区进行逻辑格式化(创建文件系统),操作系统将初始的文件系统数据结构存储在磁盘上,这些数据结构包括空闲和已分配的空间以及一个初始为空的目录。

 

引导块:存放自举程序

计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器、和内存等,接着启动操作系统。

自举程序通常存放在ROM中,完整功能的自举程序保存在磁盘的启动块上,启动块位于磁盘的固定位。拥有启动分区的磁盘称为启动磁盘或者系统磁盘。

坏区:对于损坏扇区的处理

扇区备份:控制器可以用备份块来逻辑的替换坏区。

对坏区的处理实质上就是用某种机制,使系统不去使用坏区。

 

习题部分概念:

文件以块为单位存放在磁盘,文件的读写也是以块为单位。

磁盘调度算法是为了减少寻找时间 ,扇区数据的处理时间主要影响传输时间。

 

I/O管理

习题部分概念:

大法

可寻址是块设备的基本特征

共享设备是指在一段时间内允许多个进程同时访问的设备,在同一时间内,即对于某一个时刻共享设备仍然允许一个进程访问。

分配共享设备是不会引起进程死锁的。

 

中断寄存器位于计算机主机,不存在I/O地址寄存器

每一种设备对应的设备控制器都对应一组相应的控制命令,CPU通过控制命令控制设备控制器。

 

字节多路通道:通常含有许多非分配型子通道,其数量可达几十个到几百个,每一个通道连接一台I/O设备,并控制该设备的I/O操作。这些子通道按时间片轮转的方式共享主通道。各个通道循环使用主通道,各个通道每次完成其I/O设备的一个字节交换,然后让出主通道的使用权。这样只要字节多路通道扫描每个子通道的速度足够快,而连接到子通道上的设备的速度不是太高时,便不至于丢失信息。

 

设备的固有属性决定设备的使用方式;

设备的独立性可以提高设备分配的灵活性和设备的利用率;

设备的安全性可以保证分配设备时不会导致永久阻塞。

设备分配时一般不需要考虑及时性。

设备分配与回收

设备分配方式:

静态分配:一次性分配该作业所要求的全部设备、控制器(如通道等)

动态分配:在进程执行过程中根据执行需要进行。

 

设备分配算法:

先请求先分配

优先级高者优先

 

设备分配的安全性:

安全性分配算法:每当进程发出I/O请求后便进入阻塞状态,直到其I/O操作完成时才被唤醒

不安全分配方式:进程在发出I/O请求后继续运行,需要时又接着发I/O请求,仅当进程所请求的设备已被另一进程占用时,才进入阻塞状态。

优点:一个进程可同时操作多个设备,从而使进程推进迅速

缺点:可能产生死锁

 

设备独立性是指应用程序独立于具体使用的物理设备。

应用程序通过逻辑设备名来请求使用某类设备,在系统中设置一张逻辑设备表(LUT)用于将逻辑设备名映射为物理设备名,LUT表项包括逻辑设备名、物理设备名和设备驱动程序如何地址;系统通过查找LUT来寻找相应的物理设备和驱动程序。

 

 

假脱机I/O技术:SPLOOLing(Simultaneous Peripheral Operation On-Line)

 

 

特点:提高了I/O的速度;将独占设备改造为共享设备;实现虚拟设备功能。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值