考研操作系统知识点总结

主要是基于2023年王道操作系统复习指导书自己总结的知识点,希望可以帮助到有需要的人,转载请标明出处

计算机系统概述

操作系统的基本概念

计算机系统自上而下可大致分为四个部分:用户

​ 应用程序

​ 操作系统:管理各种计算机硬件,为应用程序提供基础,并充当计算机硬件与用户之间的中介

​ 硬件

操作系统的定义:

是控制和管理整个计算机硬件和软件资源,合理的组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合

操作系统的特征:

并发(最基本特征):是指两个或多个事件在同一时间间隔内发生,操作系统的并发性是指,计算机中同时存在多个运行的程序,因此它具有处理和调度多个程序同时执行的能力,引入进程的目的是使程序并发运行

共享(最基本特征):操作系统的资源可供内存中多个并发执行的进程共同使用

互斥共享:一个请求必须一次性完成;一个时间段只允许一个进程访问的资源称为临界资源,计算机中大部分物理设备,以及某些软件所用的栈、变量和表格都属于临界资源

同时访问方式:一个请求可以分多个时间段完成;典型的资源是磁盘设备,一些用重入码编写的文件也可以“同时”共享

虚拟:把一个物理上的实体变为若干逻辑上的对应物;os中利用了多种虚拟技术来实现虚拟处理器虚拟内存虚拟外部设备

​ 一些虚拟技术:时分复用技术,如处理器的分时共享;空分复用技术,如虚拟存储器

​ 没有并发, 就谈不上虚拟

异步:进程以不可知的速度向前推进,就是进程的异步性;异步性使得os运行在一种随机的环境下,但只要运行环境相同,os就须保证多次运行进程前后都能获得相同的结果

并发和共享之间的关系:两者互为依存的条件,①资源共享是以并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题;②若系统不能对资源共享实现有效的管理,那么必将影响到程序的并发执行,甚至根本无法并发执行

操作系统的功能:包含了我们接下来要学习的全部内容

1、操作系统作为计算机系统资源的管理者

①处理机管理(进程管理),包括进程控制(PCB)、进程同步、进程通信、死锁处理、处理机调度

②存储器管理 ,内存的分配与回收、地址映射、内存保护与共享、内存扩充等

③设备管理,主要任务是完成用户的IO请求,包括缓冲管理,设备分配、设备处理和虚拟设备等功能

④文件管理,文件存储空间的管理、目录管理和文件读写管理和保护

2、os作为用户与计算机硬件系统之间的接口

①命令接口 :用户通过这些接口来组织和控制作业的执行

​ 联机命令接口(交互式),适用于分时或实时系统

​ 脱机命令接口(批处理),适用于批处理系统

②程序接口 :编程人员通过该接口请求os的系统服务,用户通过在程序中使用这些系统调用来请求os为其提供的服务

​ 由一组系统调用也成为广义指令组成

​ 只能通过用户程序间接使用

​ 系统调用大概可以分为以下几类:设备管理、文件管理、进程控制、进程通信、内存管理

3、os实现了对计算机资源的扩充

裸机 ,即没有任何软件支持的计算机;把覆盖了软件的机器称为扩充机或虚拟机

习题

①os与用户通信接口通常包括:shell(命令解析器)、命令解析器、一组广义指令(系统调用)构成了程序接口

②计算机开机后,os最终被加载到RAM(random access memory)中

③说明库函数与系统调用的区别(简答题)

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

操作系统的发展历程

手工阶段(此阶段无os)

①用户独占全机,资源利用率低;②CPU等待手工操作,CPU利用率低

所有的工作都要人工干预,人机矛盾越来越大

批处理阶段(出现os)

①单道批处理

引入了脱机输入/输出技术(外围机+磁带),监督程序

特点:①顺序性 ②自动性 ③单道性

缺点:内存中只存放一道作业,每当其在运行期间发出IO请求后,高速的CPU便处于等待低速IO完成的状态,对资源的利用率和系统吞吐量低

②多道批处理

允许多个程序同时进入内存,在CPU中交替运行

特点:①多道 ②宏观上并行 ③微观上串行

要解决的问题:①如何分配处理器(后面要学的处理机调度策略和算法)

​ ②内存分配以及保护问题(后面要学的内存管理)

​ ③IO设备如何分配(设备管理)

优点:资源利用率高,系统吞吐量大

缺点:用户响应时间长,不具备人机交互能力

分时操作系统

多个用户通过终端同时共享一台主机,其也支持多道程序设计的系统,但多道批处理是实现作业自动控制而无需人为干预的系统,而分时系统是实现人机交互的系统

特点:①同时性:多个用户同时使用

​ ②交互性:时间片轮转,人机交互

​ ③独立性:多个用户互不干扰

​ ④及时性:用户能在很短时间内得到反馈

实时操作系统

硬实时系统:某个动作必须在规定时刻发生,如飞行自动控制系统,

软实时系统:能够偶尔接受违反规定时间且不会引起任何永久性的损失,如飞机订票系统、银行管理系统

特点:①及时性 ; ②可靠性

网络操作系统和分布式计算机系统

两者的本质不同是,分布式计算机系统中的若干计算机相互协同完成同一任务

个人计算机操作系统

目前使用最广泛的操作系统

习题:

①提高单机资源利用率的关键技术:多道程序设计技术

②关于多任务操作系统的叙述,具有并发和并行的特点,需要实现对共享资源的保护;不需要运行在多CPU的硬件平台上

③IBM-PC中的操作系统是微型计算机操作系统

操作系统运行环境

处理器运行模式
特权指令与非特权指令

分别对应操作系统内核程序与用户自编程序

①特权指令指不允许用户直接使用的,如IO指令、置中断指令、存取用于内存保护器的寄存器、送程序状态字到程序状态字寄存器等的指令

②非特权指令,用户直接使用,不能直接访问系统中的软硬件资源,仅限于访问用户的地址空间

用户态与核心态

也成为目态与管态

从内核态->用户态,是一个主动的过程,即执行一个修改PSW(程序状态寄存器)的特权指令

用户态->内核态,是一个被动的过程,由"中断"引发

一些与硬件关联较紧密的模块,如时钟管理、中断处理、设备驱动等处于最底层,其次是运行频率较高的程序,如进程管理、存储器管理和设备管理等,这两部分内容构成了操作系统的内核,内核是计算机配置的底层软件

时钟管理

第一功能是计时,如进程切换,时间片轮转调度等方方面面都要依赖于时钟

中断机制

中断机制中,只有一小部分功能属于内核,负责保护和恢复中断现场的信息,转移控制权到相关的处理程序

原语

这些程序的运行具有原子性;处于操作系统最底层,最接近硬件;运行时间都比较短,调用频繁

定义原语的直接方法是关闭中断

设备驱动、CPU切换、进程通信等功能中的部分操作都可以定义为原语

系统控制的数据结构及处理

系统中用来登记状态信息的数据结构有,如作业控制块、进程控制块、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等

对这些数据结构的基本操作有,进程管理、存储器管理、设备管理

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

中断和异常的概念
中断和异常的定义

​ 故障(Fault) 可能被内核修复,如非法操作码、缺页故障、除数为0、运算溢出等 是软件中断

​ 内部异常(不能被屏蔽) 自陷/访管(Trap) 用于在用户态下调用操作系统的内核程序 是软件中断

​ 终止(Abort) CPU无法继续执行 是硬件中断

中断

​ 可屏蔽中断 INTR线发出的中断请求

​ 外部中断(硬件 ,在指令周期尾,检查是否有外界中断信号处理)

​ 不可屏蔽中断 NMI发出的中断请求,如电源掉电

习题★

中断处理是操作系统必须提供的功能, 为进程提供系统调用命令并不是操作系统必须要提供的

②进程调度不需要硬件的支持

​ 时钟管理需要硬件支持,需要硬件计数器保持时钟的运行

​ 中断处理的前三个步骤都是由硬件直接实现(隐指令)的

​ 地址映射中需要基地址(或页表)寄存器和地址加法器的支持

③进入中断处理的程序属于操作系统程序,但中断处理程序本身可能是用户程序

④**计算机通过硬件完成操作系统由用户态到核心态的转换,**这是通过中断机制实现的

⑤ 在操作系统中,只能在核心态下执行的指令是:置时钟指令、广义指令、输入输出

​ 诸如读时钟指令、取数指令、寄存器清零都是可以通过汇编语言实现的,可以在用户态下执行

⑥在内核态,可以执行除访管指令外的其他所有指令

⑦不可能在用户态发生的事件是进程切换 系统调用可能在用户态发生

⑧中断处理要保存PC和程序状态寄存器(PSW)的内容,其中由子程序调用保存PC

​ 在处理外部中断时,应由操作系统保存的是通用寄存器的内容

​ ⑨执行系统调用的过程:传递系统调用参数->执行陷入指令->执行相应的服务程序->返回用户态

​ ⑩由时钟中断服务程序更新的部分内容有:内核中时钟变量的值,当前进程占用CPU的事件、当前进程在时间片内的剩余执行时间

​ 11、中断相关操作中,有提供中断服务、初始化中断向量表、保存中断屏蔽字

​ 在中断中,由硬件自动保存被中断程序的断点(PC)

​ 12、

处理器为什么要区分核心态和用户态两种操作方式?什么情况下进行两种方式的切换?
/*区分执行态的主要目的是保护系统程序。用户态到核心态的转换发生在中断产生时,而核心态到用户态的转换则发生在中断返回应用程序时*/

为什么说知道出现中断和通道技术后,多道程序概念才变得有用?
/*多道程序并发是指有的程序在CPU上运行,而另一些程序在IO设备下进行传输,即通过CPU操作与外设传输在时间上的重叠必须有中断和通道技术的支持,原因如下:
 ①通道是一种控制一台或多台外部设备的硬件机构,他一旦被启动就独立于CPU运行,因而做到了输入输出操作与CPU并行工作。但早期CPU与通道的联络方法是由CPU向通道发出询问指令了解通道工作是否完成的。若未完成,则主机就循环询问知道通道工作结束为止。因此,这种询问技术是无法真正做到CPU与IO并行工作的
 ②在硬件上引入了中断机制。所谓中断,就是在输入输出结束时,或硬件发生某种故障时,由相应的硬件向CPU发出信号,这时CPU立即停下工作而转向处理中断请求,待处理完中断后再继续原来的工作
 因此,通道技术和中断技术结合起来就可以实现CPU与IO设备并行工作,即CPU启动通道传输数据后便去执行其他程序的计算工作,而通道则进行输入输出操作;当通道工作结束时,再通过中断机构向CPU发出中断请求,CPU则暂停正在执行的工作,对出现的中断进行处理,处理完成后再继续原来的工作。这样就是实现了CPU与IO的并行工作,此时,多道程序的概念才变为现实*/

操作系统结构

分层法

硬件为第0层,用户接口为最高层。形成单向依赖,即每层只能调用与其邻近的低层的功能和服务

优点:①便于系统的调试和验证 ②易于扩充和维护

问题:① 合理定义各层比较困难,且依赖关系固定后,往往就显得不够灵活 ②效率较差,每执行一个功能,要自上而下的穿越多层

模块化

将操作系统按功能划分为具有一定独立性的模块,各个模块具有某方面的管理功能,并规定好各模块间的接口,使其通过接口通信

衡量模块独立性的两个标准: 内聚性,模块内各部分之间联系的紧密程度,内聚性越高,模块独立性越好

耦合度,模块间的联系,耦合度越低,模块独立性越好

​ 优点:①提高了操作系统设计的正确性、可理解性和可维护性;②增强了os的可适应性;③加速了os的开发过程

​ 缺点:①模块间的接口规定很难满足实际需求;②各模块设计者齐头并进,每个决定无法建立在上一个已验证的正确决定的基础上,无法找到一个可靠的决定顺序

宏内核

指将系统的主要模块功能都作为一个紧密联系的整体运行在核心态,从而为用户提供高性能的系统服务,但内核代码庞大,结构混乱,不易于维护,并且随着体系结构和需求的不断发展,这一问题愈发严重

从操作系统的发展来看,宏内核取得了绝对的胜利(在桌面操作系统中),目前主流的操作系统,如windows、android、ios、macos、linux等,都是基于宏内核的架构

微内核

是指将内核中最基本的功能保留在内核,而将哪些不需要在核心态执行的功能移到核心态执行,从而降低内核的复杂度

微内核结构分为两大部分:微内核和多个服务器 是一种C/S架构模式,采用面向对象技术

​ 微内核通常包括:①与硬件处理紧密相关的部分;②一些较基本的功能;③客户与服务器之间的通信

​ 操作系统的绝大部分功能都放在了微内核之外的一组服务器之中(进程),如提供对进程(线程)进行管理的进程(线程)服务器,提供虚拟存储器管理功能的虚拟存储器服务器等

​ 微内核与服务器借助由微内核提供的消息传递机制来实现交互,采用的消息传递方式

​ 微内核具有很好的可靠性,因为只有微内核运行在核心态,其他服务器都是运行在用户态,当一个模块中出现错误时,只会导致该模块崩溃,而不会使整个系统崩溃

​ 微内核结构采用了机制与策略分离的原理;机制的部分是要放入核心态中,由微内核实现;而策略是要放入用户态中,由服务器实现

​ 举例子来解释一下什么是机制、策略

​ 如为了实现对进程调度功能,需要在进程管理中设置一个或多个优先级队列,这部分就属于机制部分;而对用户进程如何分类,以及优先级的确认方式,属于策略问题;再如,实现将逻辑地址变换为物理地址等的页表机制和地址转换机制是属于机制部分,而页面置换算法、内存分配与回收则属于策略问题

微内核的功能

​ ①进程(线程)管理

​ ② 低级存储器管理

​ ③ 中断和陷入处理

微内核优点:①扩展性和灵活性

​ ②可靠性和安全性

​ ③可移植性

​ ④分布式计算,能很好的适应分布式系统和网络系统

其主要问题是性能问题 ,因为需要频繁的在核心态和用户态之间进行切换

其在实时、工业、航空以及军事应用中特别流行

虚拟机
第一类虚拟机管理程序

其就像一个操作系统,唯一一个运行在最高特权级的程序,直接运行在系统硬件上 也成为裸金属架构

第二类虚拟机管理程序

运行在宿主操作系统上, 称为寄居架构 VMware Workstation是首个X86平台下的第二类虚拟机管理程序

运行在两类虚拟机管理程序上的操作系统都被称为客户操作系统

虚拟机可以用软件实现,也可以用硬件实现

操作系统引导

操作系统是一种程序,以数据的形式存放在硬盘中,操作系统引导是指①计算机利用CPU运行特定程序,

​ ②通过程序识别硬盘,

​ ③识别硬盘分区,

​ ④识别硬盘分区上的操作系统,

​ ⑤最后通过程序启动操作系统

引导过程:

​ ①激活CPU,激活的CPU读取ROM中的boot程序,将指令寄存器置为BIOS的第一条指令,即开始执行BIOS的指令

​ ②硬件自检,检查硬件是否出现故障

​ ③加载带有操作系统的硬盘,BIOS开始读取Boot Sequence,把控制权交给启动顺序排在第一位的存储设备

​ ④加载主引导记录MBR,其作用是告诉CPU去硬盘的哪个主分区去找操作系统

​ ⑤找到硬盘活动分区,并加载

​ ⑥加载分区引导记录PBR,其作用是寻找并激活分区根目录下用于引导操作系统的程序(启动管理器)

​ ⑦加载启动管理器

​ ⑧加载操作系统

​ 操作系统的引导程序分为两种,①是位于ROM中的自举程序(boot程序,BIOS的组成部分),用于启动具体的设备;②是位于装有操作系统硬盘的活动分区的引导扇区中的引导程序(启动管理器),用于引导操作系统

​ 引导过程①②更详细的一个过程: CPU加电,CS:IP指向FFFF0H;执行JMP指令跳转到BIOS;登记BIOS中断例程入口地址;进行硬件自检;进行操作系统引导

进程与线程

进程的概念

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

程序是静态的,是存放在磁盘里的可执行文件,是一系列指令的集合,多个进程可以运行同一个程序

多进程也称为多任务

引入进程的目的:

为了更好的描述和控制程序的并发执行,实现操作系统的并发性和共享性

进程实体的组成:

又称为进程映像,是静态的

①程序段 ; ②数据段 ③PCB(进程控制块)

PCB(进程控制块)

①创建进程的实质就是创建PCB

PCB是进程存在的唯一标志

③常驻内存,任何时刻都可以存取,在进程结束时删除

④主要包括进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息

⑤PCB在系统中的组织方式:链接方式,将同一状态的PCB链接成一个队列;索引方式,将同一状态的进程组织在一个索引表中

进程的特征

①动态性 ②并发性 ③独立性 ④异步性

进程的状态转换

①运行态 ②就绪态 ③阻塞态 (三种基本状态) ④创建态 ⑤结束态

解释一下创建态:创建的步骤,先申请一个空白的PCB,并向PCB中填写入用于控制和管理进程的信息,然后为该进程分配运行时所必须的资源,最后将该进程转入就绪态并插入就绪队列。但是进程创建所需的资源得不到满足,如内存不足,此时创建工作尚未完成,此时处于创建态

运行态到阻塞态是主动行为,阻塞态到就绪态是被动行为

进程控制

​ 进程控制的主要功能是对系统中所有的进程实施有效的管理

一般把进程控制用的程序段称为原语

进程的创建

​ 创建原语

​ 父进程和子进程 。允许一个进程创建另一个进程,此时创建者就是父进程。子进程可以继承父亲的所有资源,子进程撤销时,将其从父进程那里获得的资源归还给父进程。父进程撤销时,通常也会同时撤销其所有的子进程

进程的终止

终止原语

引起终止的三种事件:正常终止、异常终止、外界干预

过程:找到其所属的PCB,读取进程状态。若处于执行态,则终止其运行;若有子孙进程,终止所有子孙进程;将其所属的所有资源归还给父进程或操作系统;从PCB队列中删除该PCB

进程的阻塞和唤醒

​ 阻塞(Block)原语、唤醒(Wakeup)原语。二者必须成对出现

​ 阻塞过程:找到其PCB;若为运行态,保护其现场,将其转为阻塞态,停止运行;将该PCB插入相应的阻塞队列

​ 唤醒过程:找到要唤醒的PCB;将其从阻塞队列移出,转为就绪态;插入就绪队列中

进程的通信

低级通信:如PV操作

高级通信:以较高的效率传输大量数据的通信方式,如共享存储、消息传递、管道通信

①共享存储

​ 在通信的进程之间存在一块可以直接访问的共享空间,通过对这片共享空间进行读/写操作实现进程之间的信息交换

需要使用同步互斥工具,如PV操作,对共享空间的读写操作进行控制

低级方式的共享是基于数据结构的共享

高级方式的共享是基于存储区的共享

​ 操作系统只为通信进程提供存储空间和同步互斥工具,数据交换则由用户自己安排读写指令完成

​ 是通过特殊的系统调用实现的

②消息传递

​ 在消息传递系统中,进程间的数据交换以**格式化的消息(Message)**为单位。

​ 进程间通过系统提供的发送消息接受消息两个原语进行数据交换,隐藏了通信的实现细节

​ 是当前应用最广泛的进程间通信机制,微内核与其服务器之间的通信就采用了该方式,该方式能很好的支持多处理机系统、分布式系统和计算机网络

直接通信方式

​ 消息由进程直接发送到进程,并挂在接受进程的消息缓冲队列上

间接通信方式

​ 消息被发送到某个中间实体,一般被称为信箱,接受进程从该中间实体取得消息。广泛应用于计算机网网络中

③管道通信

​ 管道是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又称为pipe文件

​ 管道机制必须提供:互斥同步确定对方存在

​ 限制管道的大小。管道是一个固定大小的缓冲区,在Linux中,大小为4KB,这带来了问题,即若写的比读的快,则write()调用将默认的被阻塞;而读的比写的快,read()调用也将默认的被阻塞

​ 从管道读数据是一次性操作,数据一旦被读取,就释放空间以便写更多数据

​ 管道只能采用半双工通信,要实现两个进程互动通信,需要两个管道,是FIFO信息流

​ 只要管道没空,读进程就可以从管道读数据

​ 只要管道没满,写进程就可以从管道写数据

​ 管道可以理解为共享存储的优化和发展

​ 408中,可以同时多个写、一个读

线程和多线程模型

​ 引入进程的目的是为了实现程序多道并发执行,提高资源利用率和系统吞吐量;引入线程的目的是为了减小程序在并发执行时所付出的时空开销

​ 在引入线程后,进程只作为资源的分配单位,而线程作为处理机的分配单位,且线程自己不拥有系统资源,与其他线程共享进程的资源

线程与进程的比较

​ ①调度

​ 传统操作系统中,进程作为调度的基本单位,每次调度都要进行上下文切换,开销大;而在引入线程的os中,线程切换的代价远小于进程,但从一个进程的线程,切换到另一个进程的线程,也需要上下文切换

​ ②并发性

​ 线程的引入,使os具有了更好的并发性,提高了资源利用率和系统吞吐量(这不是其引入的主要目的)

​ ③拥有资源

​ 进程拥有系统资源,线程不拥有

​ ④独立性

​ 每个进程之间都拥有独立的地址空间和资源,除了共享全局变量外,不允许其他进程访问。同一进程中的不同线程共享进程的地址空间和资源

​ ⑤系统开销

​ 线程切换只需要保存和设置少量的寄存器内容,且通信十分容易,甚至无需os的干预

​ ⑥支持多处理机系统

​ 对于传统的单线程进程,进程只能运行在一个处理机上,而多线程进程,可以将进程中的多个线程分配到多个处理机上运行

​ 线程控制块中包括:①线程标识符 ②一组寄存器:程序计数器(PC)、状态寄存器和通用寄存器 ③线程运行状态 ④优先级 ⑤线程专有存储区 ⑥堆栈指针

​ 一个线程可以读、写甚至清除另一个线程的堆栈

线程的实现方式

​ ①用户级线程(ULT)

​ ②内核级线程(KLT)

​ ③组合方式 一对一;多对一;n对m(n≥m)

习题

​ ①进程与程序的根本区别是动态与静态特点

​ ②一个进程释放了一台打印机,它可能会改变(另一个等待打印机的进程)状态

​ ③封闭性,指进程的执行结果只取决于进程本身,不受外界影响;失去封闭性是指,并发进程共享变量,起执行结果与速度有关

​ ④C语言,内存中一般分为三个段,正文段(代码和赋值数据段)、数据堆段、数据栈段。二进制代码和常量常存放在正文段

​ ⑤ 系统动态DLL库(动态链接库)中的系统线程,被不同的进程所调用,它们是相同的线程

​ 同一个系统的进程可以由系统调用的方法被不同的进程或线程多次使用

​ ⑥键盘驱动程序为每个正在运行的应用配备一个线程,用以响应该应用的键盘输入不是多线程系统的特长,因为系统只有一个键盘,且速度较慢,完全可以用一个线程

​ ⑦设备分配不会导致新进程的创建,设备分配是通过在系统中设置相应的数据结构实现的

​ ⑧进程中的若干线程不能共享的是进程P中某线程的堆指针,可王道的书中又说" 一个线程可以读、写甚至清除另一个线程的堆栈",怪!

王道P53
进程和程序之间可以形成一对一,一对多,多对一的关系,请举例说明
父进程创建子进程和主程序调用子程序有何不同
为何进程之间的通信必须借助于os内核功能?简单说明进程通信的几种主要方式
多线程与多任务有什么区别
处理机调度

​ 狭义的进程调度是指从就绪队列中选择一个要运行的进程

​ 进程切换是指一个进程让出处理机,另一个进程占用处理机的过程

​ 广义的进程调度包括以上两者

调度的层次

​ ①高级调度(作业、长程调度)

​ 是内存与辅存之间的调度,按照一定原则从外存上处于后备队列的作业中挑选,为它们分配内存、输入输出设备等必要资源

​ 多道批处理系统中大多配有高级调度,其他系统中通常不配置

​ 无->创建态->就绪态

​ ②中级调度(内存、中程调度)

​ 其目的是为了提高内存利用率和系统吞吐量

​ 将那些暂时不能运行的进程调度至外存等待 ,当内存空闲且其具备运行条件后,再将其调度至内存

​ 就绪态----挂起态的转换

​ ③低级调度(进程、短程调度)

​ 就绪态—运行态

​ 从就绪队列中选取一个进程,将处理机分配给它,各种操作系统中必须配置这级调度

调度时考虑的因素

​ ①CPU利用率: c p u 运行时间 c p u 运行时间 + 等待时间 \frac{cpu运行时间}{cpu运行时间+等待时间} cpu运行时间+等待时间cpu运行时间

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

​ ③周转时间:指作业从提交到完成所花费的时间,=作业完成时间-作业提交时间,包括作业等待、就绪队列中排队、运行时间以及输入输出操作所花时间

​ 平均周转时间=(所有作业周转时间总和)/n

​ ④带权周转时间: 作业周转时间 作业实际运行时间 \frac{作业周转时间}{作业实际运行时间} 作业实际运行时间作业周转时间

​ ⑤等待时间:处理机调度算法实际上并不影响作业的执行或者输入输出操作的时间,只影响作业在就绪队列中等待所花时间,因此衡量一个调度算法的优越,常常只需简单的考察等待时间

是指进程处于等待处理机的时间之和,区分一下响应时间

​ ⑥响应时间:指用户从提交请求到系统首次产生相应所用时间,在交互式系统中,很看重这一点

调度的实现
调度程序

​ ①排队器:将系统中所有就绪进程按照一定策略排成一个或多个队列

​ ②分派器:依据调度程序选择的进程,将其从就绪队列中取出,将CPU分配给新进程

​ ③上下文切换器:第一次切换:将当前进程的上下文保存到其PCB中,再装入分派程序的上下文

​ 第二次切换:移除分派程序的上下文,将新选进进程的CPU现场信息装入对应寄存器中

为减少上下文切换的切换时间,通常采用两组寄存器,其中一组供内核使用,一组供用户使用

调度的时机、切换与过程

​ 不能进行进程切换的几种情况:

​ ①在处理中断的过程中;②进程在os内核的临界区;③其他完全需要屏蔽中断的原子操作过程

​ 进程调度的方式:①非抢占式调度,实现简单、系统开销小,适用于大多数的批处理系统,但不能用于实时和大多数分时

​ ②抢占式调度,能提高系统吞吐率和相应效率,遵循一定的原则,如优先级、短作业优秀、时间片原则

闲逛进程(idle)

不需要CPU以外的任何资源,不会发生阻塞,如果系统中没有就绪进程,就会调度闲逛进程运行,且如果没有其他进程就绪,就会一直运行,并在执行过程中测试中断

两种线程的调度

①用户级线程调度 ;②内核级线程调度

调度算法
先来先服务(FCFS)算法

既适用于作业调度,也适用于进程调度

是不可剥夺算法,经常结合其他调度策略一起使用

对长作业比较有利,对短作业不利;有利于CPU繁忙型(计算量大的),不利于IO繁忙型

短作业优先算法(SJF)

抢占式SJF(最短剩余时间优先算法),每当有新进程就绪时,就要对比包括正在运行进程的剩余时间,最短的占有CPU

非抢占式,一个进程运行完后,再比较最短剩余时间

缺点:①对长作业不利,会导致饥饿现象

​ ②未完全考虑作业的紧迫程度,不能保证紧迫性的作业会被及时处理

​ ③由于作业的长短是根据用户所提供的估计执行时间而定,所以并不一定能做到真正的短作业优先

抢占式的/或者说所有进程几乎同时到达 的SJF的平均等待时间,平均周转时间最少

优先级调度算法

既适用于作业调度,也适用于进程调度

①非抢占式的优先级调度 ②抢占式的优先级调度

①静态优先级:创建时确定,运行时不变。主要依据有进程类型、进程对资源的要求、用户要求

②动态优先级:主要依据有占有CPU的时间、就绪进程等待CPU时间等

优先级设置参考原则:

①系统进程>用户进程

②交互型进程>非交互型进程

③IO型>计算型

高响应比优先算法(HRRN)

响应比 = 等待时间 + 要求服务时间 要求服务时间 响应比=\frac{等待时间+要求服务时间}{要求服务时间} 响应比=要求服务时间等待时间+要求服务时间

主要用于作业调度,是FCFS和SJF的综合平衡

​ 非抢占式的,不会出现饥饿的

时间片轮转调度算法

抢占式的、适用于进程调度,主要用于分时os,有开销、不区分紧急程度

影响时间片长短的因素:①系统的响应时间;②就绪队列中的进程数目;③系统的处理能力

设计时间片时,要让切换进程的开销占比不超过1%

多级反馈队列调度算法

​ 是时间片轮转调度算法和优先级调度算法的综合与发展

​ 为提高系统吞吐量和缩短平均周转时间而照顾短进程,为获得较好的IO设备利用率和缩短响应时间而照顾IO型进程

不必事先估计进程的执行时间

​ 实现思想:①设置多个就绪队列,为每个队列赋予不同的优先级

​ ②赋予各个队列进程运行时间片大小不同值,优先级越高的,时间片越小

​ ③每个队列采用FCFS算法,新到的进程都会放在第一级队列的队尾,若其能在第一级时间片时间内完成,则撤出;若不能完成,则将其插入第二级队列的队尾,如此重复,直到其完成

​ ④若处理机正在处理第 i i i级的队列,此时任意更高优先级队列中插入新的进程,立刻将正在运行的进程放回第 i i i级队列的队尾,并将处理机分配给更高优先级的进程

​ 优势:①终端型作业用户:短作业优先

​ ②短批处理作业用户:周转时间较短

​ ③长批处理作业用户:经过前面几个队列会得到部分执行,不会长期得不到处理

​ 设计该算法需要考虑的因素有:

​ ①就绪队列的数量;②就绪队列的优先级;③各就绪队列的调度算法;④进程在就绪队列间的迁移条件

进程切换
上下文切换

上下文的概念:某一时刻CPU寄存器和程序计数器的内容

在进行上下文切换时,内核会将旧进程状态保存在其PCB中

流程:①挂起一个进程,保存CPU上下文

​ ②更新PCB信息

​ ③把进程的PCB引入响应的队列中

​ ④选择另一个进程,并更新其PCB

​ ⑤跳转到新进程PCB中的程序计数器所指向的位置执行

​ ⑥恢复处理机上下文

模式切换

用户态到内核态之间的切换称为模式切换

上下文切换只能发生在内核态

模式切换时,CPU逻辑上可能还在执行同一进程

调度与切换的区别

调度是一种决策行为;切换是指实际分配的行为,是执行行为

习题

①通过画出甘特图来求解周转时间问题,直观有效

②作业是以用户任务为单位,进程是以操作系统控制

③中断向量:是中断服务例行程序的入口地址

​ 中断向量地址:是中断服务例行程序的入口地址的地址

④UNIX是多用户、多任务os,支持多种处理器架构,按照os分类,属于分时os

⑤在进程处于临界区时不能进行处理机调度(❌),例如,临界资源是慢速外设时,若在进程访问打印机时,不能进行处理机调度,则系统性能会非常差;但是若进程处于os内核的临界区时,是不能进行处理机调度的

⑥P74 32 有一个小坑

为什么说多级反馈队列调度算法能较好的满足各类用户的需求 王道P75
王道P78 12 

同步与互斥

基本概念
临界资源

将一次仅允许一个进程使用的资源叫做临界资源,计算机中大部分物理设备,以及某些软件所用的栈、变量和表格都属于临界资源

访问过程分为四个部分:

​ ①进入区(进行上锁动作)

​ ②临界区,是临界资源的那段代码,又称为临界段

​ ③退出区(进行解锁动作)

​ ④剩余区

同步

也称为直接制约关系,源自不同进程之间的合作

互斥

也称为间接制约关系,一个进程进入临界区使用临界资源时,其他进程必须等待

同步机制的四个原则

①空闲让进,即临界区空闲时,允许一个进程进入

②忙则等待,当已有进程进入临界区时,其他进程必须等待

③有限等待,对请求访问的进程,应让其在有限等待时间内进入

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

实现临界区互斥机制必须遵循的是:①、②、③

实现临界区互斥的基本方法
软件实现:
单标志法
P0:                                           P1:
while(turn!=0)                           while(turn!=1)
critical section;                        critical section;
turn=1;                                  turn=0;
remained section;                        remained section
    
存在的问题:① 违背空闲让进原则,原因是每个进程进入临界区的权限只能被另一个进程赋予,若一个进程永不进入临界区,则另一个进程也无法进入,造成资源利用不充分
双标志先检查法
P0:                                           P1: 
while(flag[1]);   ①  如果是true,会死循环      while(flag[0]);   ②
flag[0]=true;     ③                         flag[1]=true;     ④
critical section;                           critical section;
flag[0]=false;                              flag[1]=false;
remained section;                           remained section;

优点是不用交替,可连续使用
缺点:违背忙则等待原则,若按照①②③④的顺序执行,则会导致P0、P1同时进入
这里的问题出在检查和修改操作不能一次性进行
双标志后检查法
P0:                                            P1:
flag[0]=true;                               flag[1]=true;
while(flag[1]);                             while(flag[0]);
critical section;                           critical section;
flag[0]=false;                              flag[1]=false;
remained section;                           remained section;

违背空闲让进原则、有限等待
Peterson’s Algorithm
P0:                                            P1:
flag[0]=true;turn=1;                        flag[1]=true;turn=0;              主动争抢、主动谦让
while(flag[1]&&turn==1)                     while(flag[0]&&turn==0)           检查对方
critical section;                           critical section;                 谁最后谦让,谁丧失主动权
flag[0]=false;                              flag[1]=false;
remained section;                           remained section;

遵循了空闲让进,忙则等待、有限等待,但未遵循让权等待
硬件实现:

通过硬件支持实现临界段问题的方法称为低级方法或元方法

中断屏蔽方法:

防止其他进程进入其临界区的最简单方法是关中断,这种方法限制了处理机交替执行程序的能力,因此执行的效率会降低,且只适用于内核进程,因为将关中断的权利交给用户,是很不明智的

且不适用于多处理机,因为关中断指令只对该处理机有效,若其他处理机执行,还是会冲突

硬件指令方法:

①TestAndSet指令,是原子操作,其功能是读出指定标志后把该标志设置为真

boolean TestAndCheck(boolean *lock){
    boolean old;
    old=*lock;
    *lock=ture;
    return old;   //最终返回的是old的值,即lock的初值,若lock传过来为true,返回的也是true,调用函数陷入死循环
}
为每个临界资源设置一个共享布尔变量lock,true表示正在被占用,初值设为false

while(TestAndCheck(boolean *lock));
critical section;
lock=false;
remained section;

②Swap指令,其功能是交换两个字(字节)的内容

Swap(boolean *a,boolean *b){
    boolean temp;
    temp=*a;
    *a=*b;
    *b=temp;
}//这一过程是原子的

为每个临界区设置一个共享变量lock,为每个进程设置局部变量key
key=true;
while(key!=false)
    Swap(&lock,&key)  //交换lock和key的值,当lock的值为false时,进入临界区
critical section;
lock=false;
remained section;

以上对TestAndCheck和Swap指令的描述仅仅是功能实现,而并非软件实现的定义,其是由硬件逻辑上直接实现的,不会被中断

硬件方法的优点:①适用于任意数目的进程,不管是单处理机还是多处理机 ②简单、容易验证其正确性 ③可以支持进程内多个临界区,只需要为每个临界区设置一个布尔变量

缺点:①不能实现让权等待 ②有的进程可能一直选不上,导致饥饿

互斥锁

函数acquire()获得锁、release()释放锁,每个互斥锁有一个布尔变量available,表示锁是否可用

acquire()
    while(!availabe)
        ;              //忙等待
    available=false;   //获得锁

release()
    available=ture;   //释放锁
    

release和acquire的执行必须是原子性的,因此互斥锁通常采用硬件机制来实现,其主要缺点是忙等待,互斥锁常用于多处理器系统,一个线程可以在一个处理器上等待,而不影响其他线程的执行

信号量

它只能被两个标准的原语wait(S)和signal(S),也记为“P操作”和“V操作”

分为整型信号量记录型信号量

整型信号量
wait(S){
    while(S<=0);
    S=S-1;
}

signal(S){
    S=S+1;
}

wait操作当s<=0,就会不断的进行测试,导致未遵循让权等待的准则,使得进程一直处于忙等的状态
记录型信号量
该机制是一种不存在“忙等”现象的进程同步机制

typedef struct{
    int value;
    struct process *L;    //进程链表
} semaphore
    
void wait(semaphore S){
    S.value--;
    if(S.value<0){
        add this process to S.L;
        block(S.L)                //bolck原语
    }
}


void signal(semaphore S){
    S.value++;
    if(S.value<=0){
        remove a process P from S.L;
        wakeup(P);                 //唤醒原语
    }
}

记录型信号量解决了整型信号量"忙等"的缺点
利用信号量机制实现同步
    
semaphore S=0;
P1(){
    x;
    V(S);
}

P2(){
    P(S);
    y;
}


利用信号量机制实现互斥

semaphore S=0;
P1(){
    P(S);     //加锁
    临界区;
    V(S);     //解锁
}

P2(){
    P(S);
    临界区;
    V(S)
}

利用信号量实现前驱关系 王道P95 就是同步的应用

管程

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

是被进程调用的,管程是语法范围,无法创建和撤销

组成:
    ①名称
    ②局部与管程内部的共享数据结构说明
    ③对该数据结构进行操作的一组过程(或函数)
    ④对局部与管程内部共享数据结构设置初始值的语句

monitor Demo{//名称
    共享数据结构 S;
    
    init_code(){   //初始化语句
        S=5;
    }
    
    //一组过程(函数)
    take_away(){
        对共享数据结构的一系列处理;
        S--;
    }
    
    give_back(){
        对共享数据结构的一系列处理;
        S++;
    }
}

相比较于PV操作而言,管程更像使用了面向对象思想而形成的
    ①管程把对共享资源的操作封装起来
    ②每次仅允许一个进程进入管程,从而实现进程互斥
条件变量
    
monitor Demo{//名称
    共享数据结构 S;
    condition x;   //定义一个条件变量,其没有值
    init_code(){   //初始化语句
        S=5;
    }
    
    //一组过程(函数)
    take_away(){
       if(S<=0)  x.wait();   //值是存储在S中的
        若资源充足,分配资源,并做一系列的处理
    }
    
    give_back(){
        归还资源,做一系列处理
        if(有进程等待)  x.signal();
    }
}

将阻塞原因定义为条件condition,多个条件变量对应多个不同原因的等待队列

与信号量的比较:
条件变量的wait和signal类似于PV操作
条件变量是“没有值”的,仅实现了"排队等待"功能,而信号量是有值的,信号量的值反应了剩余资源数,而在管程中,剩余资源数用共享数据结构记录

经典同步问题
生产者-消费者问题

①分析:生产者与消费者对缓冲区访问是互斥的关系;同时消费者与生产者优势协同合作即同步的关系

semaphore mutex=1;
semaphore empty=n;    //空闲缓冲区个数
semaphore full=0;     //缓冲区满个数

producer(){
    while(1){
        p(empty);     //注意一下两个p之间的顺序,若先p(mutex),若此时empty为0,那么会导致生产者和消费者死锁
        p(mutex);
        producing....;
        v(mutex);
        v(full);
    }
}

consumer(){
    while(1){
        p(full);
        p(mutex);
        consuming...;
        v(mutex);
        v(empty);
    }
}

一个复杂的生产者-消费者问题

桌子上有一个盘子,每次只能向其中放入一个水果,爸爸专向盘子中放苹果,妈妈放橘子,儿子专等吃橘子,女儿专等吃苹果。只有盘子为空时,才可向里面放水果;仅当盘子中有自己需要的水果时,女儿和儿子才可以从盘子取出

①分析:爸爸妈妈互斥的访问盘子,爸爸女儿同步、妈妈儿子同步

semaphore plate=1,apple=0,orange=0;
father(){
    while(1){
      prepare an apple;
      P(plate);
      add apple into the plate;
      V(apple);   
    }
}

mother(){
    while(1){
      prepare an orange;
      P(plate);
      add orange into the plate;
      V(orange);  
    }
}

son(){
    while(1){
      P(orange);
      take an orange from plate;
      V(plate);                      //注意父亲和母亲进程在P(plate)后,都没有释放plate的操作
      eating orange;        
    }
}

daughter(){
    while(1){
      P(apple);
      take an apple from plate;
      V(plate);
      eating apple;        
    }
}
读者-写者问题

允许多个读者同时对文件执行读操作,只允许一个写者往文件里写信息,任一写者在完成操作之前不允许其他读者或写者工作,写者写操作之前,应让已有的读者和写者全部退出

分析:①怎么解决多个读者问题 ,引入了count计数器

​ ②如何做到读写公平

这里直接写读写公平的伪代码实现,实现思想是,当有一个写进程请求写操作时,不允许其他读进程再申请读操作
int count=0;         //计数器,记录读进程的数量
semaphore mutex=1;    //计数器互斥信号量,在更新count值时使用
semaphore rw=1;      //读写互斥访问文件
semaphore w=1;       //实现读写公平的关键信号量

writer(){
    P(w);
    P(rw);                 
    writing...;
    V(rw);
    V(W);
}

reader(){
    P(W);          //在没有写进程请求时,才能进入,若有写进程请求,则读进程全部堵塞
    P(mutex);      //对计数器进行互斥的更新
    if(count==0)
        P(rw);      //当没有读进程时,才进行P(rw)操作
    count++;
    V(mutex);
    V(W);          //注意释放W信号量的位置,在reading之前的一步
    reading...;
    P(mutex);
    count--;
    if(count==0)
        V(rw);       //当没有读进程后,才释放文件
    V(mutex);
}

导致写饥饿的实现就是将w信号量去除,自己可以思考一下去除了会怎么样
哲学家进餐问题

本题的关键是如何让一名哲学家拿到左右两根筷子而不造成死锁或者饥饿现象

解决方法有两个:①让他们同时拿起两根筷子②对每名哲学家的动作制定规则,避免饥饿或死锁的发生

可以有如下一些限制条件:①至多允许4名哲学家同时进餐;②仅当一名哲学家左右两边的筷子都可用时,才允许他抓起筷子;③对哲学家顺序编号,要求奇数号哲学家先拿左边的筷子,再拿右边的筷子,而偶数号哲学家相反

用第二种限制条件来写一下

semaphore chopstick[5]={1,1,1,1,1};
semaphore mutex=1;
Pi(){
    do{          
      P(mutex);                             //mutex信号量实现了该限制条件,若没有该信号量,若五个哲学家同时拿起其左边
      P(chopstick[i]);                      //的筷子,就会导致死锁,但是设置了mutex,就保证了同时拿起左右筷子
      P(chopastick[(i+1)%5]);               //存在问题是,当有一个哲学家拿筷子中途被堵塞,则不会有下一个哲学家拿筷子
      V(mutex);
      eat;
      V(chopstick[i]);
      V(chopastick[(i+1)%5]);
      think;
    } while(1);
}
吸烟问题

三个吸烟者、一个供应者,抽烟者需要三中材料:烟草、纸、胶水。三个吸烟者分别拥有上述一份材料,剩下两份材料由供应者循环提供

分析:吸烟者与供应者之间是同步关系;抽烟是互斥关系

semaphore finish=0;          //吸烟是否完成
semaphore offer1=0;          //烟草和纸的组合
semaphore offer2=0;          //烟草和胶水的组合
semaphore offer3=0;          //纸和胶水的组合
int num=0;

provider(){
    num++:
    num=num%3;
    if(num==0)
        V(offer1);
    if(num==1)
        V(offer2);
    if(num==2)
        V(offer3);
    P(finish);
}

smoker1(){
    P(offer1);
    V(finish);
}

smoker2(){
    P(offer2);
    V(finish);
}

smoker3(){
    P(offer3);
    V(finish);
}
习题

①注意区分临界资源和共享资源

​ 二者区别在于,一段时间内能否允许被多个进程访问(并发使用),磁盘存储介质、可重入的程序代码是共享资源;公用队列是临界资源

②用P、V操作实现进程同步,信号量的初始值由用户确定

③一个系统中共有5个并发进程涉及某个相同的变量A,变量A的相关临界区是由5个临界区构成的

​ 临界区是指访问临界资源的那段代码,那么5个并发进程自然有5个操作共享变量A的代码段

④管程中signal操作的作用和信号量机制中的V操作相同(❌)

​ V操作一定会改变信号量的值,而signa是针对某个条件变量的,若不存在因为该条件而阻塞的进程,signal不会产生影响

⑤关于PV操作的408大题都要再好好看一下,写在平板上了

死锁

死锁的定义

多个进程因竟争资源而造成的互相等待的现象,若无外力作用,这些进程都将无法向前推进

死锁产生原因:

①系统资源的竞争,只有对不可剥夺资源的竞争才可能产生死锁

②进程推进顺序非法,请求和释放资源的顺序不当,信号量使用不当

死锁产生的必要条件

①互斥条件

②不剥夺条件,进程所获得资源在使用完成前,不能被其他进程强行夺走

③请求并保持条件,进程已经保持了至少一个资源,又提出新的资源请求

④循环等待条件,存在一中进程资源的循环等待连

​ 循环等待条件与死锁的定义是有区别的,死锁的定义更加严格,它要求 p i p_i pi所等待的资源必须由 p i + 1 p_{i+1} pi+1来满足;而循环等待条件则无此限制

若系统中每类资源都只有一个资源,那么资源分配图含圈就成为了系统出现死锁的充分必要条件

死锁预防

①破坏互斥条件

如SPooLing技术,把独占设备在逻辑上改成了共享设备,但破坏互斥条件在很多情况下是行不通的

②破坏不剥夺条件

当一个已保持了某些不可剥夺资源的进程请求新的资源得不到满足时,必须释放自己已经保持的资源,或者由OS协助进行剥夺

常用于状态易于保存和恢复的资源,如CPU的寄存器以及内存资源;一般不能用于打印机之类的资源

实现复杂,增加系统开销、降低吞吐量,可能会导致进程饥饿

③破坏请求并保持条件

预先静态分配方法,进程在运行前一次性申请完它所需的所有资源

实现简单,但系统资源浪费严重,还会导致饥饿现象

④破坏循环等待条件

顺序资源分配法。首先给资源编号,规定每个进程必须按照编号递增的顺序申请资源

要求编号相对稳定,限制了新类型设备的增加,会给用户编程带来麻烦

死锁避免(银行家算法)

属于事先预防策略,在资源动态分配的过程中,防止系统进入不安全状态

安全状态:系统能按照某种进程推进顺序 ( P 1 、 P 2 . . . . P i ) (P_1、P_2....P_i) (P1P2....Pi)为每个进程 P i P_i Pi分配其所需的资源,直至满足每个进程对资源的最大需求,是每个进程都可顺序完成。此时称 P 1 、 P 2 . . . . P i P_1、P_2....P_i P1P2....Pi为一个安全序列,若系统无法找到一个安全序列,则系统处于不安全状态

并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态

银行家算法

​ 数据结构描述:

​ Available(可利用资源向量),含有m个元素,每个元素代表一类可用的资源项目

​ Max(最大需求矩阵)n×m矩阵,n个进程中每个进程对m类资源的最大需求量

​ Allocation(分配矩阵 n×m),表示每个进程已分配得到的m类资源的数量

​ Need(需求矩阵 n×m),表示每个进程接下来对m类资源的需求数量

​ 算法过程:

​ ①设Request是进程的请求向量

​ ②若Request的值<=need矩阵中的值,转向步骤③

​ ③若Request的值<=Available数组中的值,转向步骤④

​ ④ 执行安全性算法

死锁的检测及解除

资源分配图,用圆圈代表一个进程、用框代表一类资源,进程到资源的边称为请求边,资源到进程的边称为分配边

死锁定理,S为死锁的条件是当且仅当S状态的资源分配图是不可完全简化的

死锁解除:①资源剥夺法;②撤销进程法;③进程回退法

​ 如何决定对哪个进程动手:进程优先级、进程已经执行多长时间、还要多久完成、进程已使用多少资源、进程是交互还是批处理等

习题

① 若有m个同类资源,n个进程,每个进程需要k个资源,那么要想不发生死锁: m > = n ( k − 1 ) + 1 m>=n(k-1)+1 m>=n(k1)+1

②进程与程序的区别 (王道 P163)

③ 死锁与饥饿 (王道 P163)

④银行家算法工作原理 (王道 P164)

⑤进程同步与互斥的区别和联系 (王道P164)

内存管理

程序的链接

编译:由编译程序将用户源代码编译成若干目标模块

链接:由链接程序将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块,链接后形成完整的逻辑地址

(1) 静态链接

在程序运行之前,链接称一个完整的装入模块,以后不再拆开

(2) 装入时动态链接

在程序装入内存时, 采用边装入边链接的方式,其优点是便于修改和更新,以实现对目标模块的共享

(3) 运行时动态链接

在程序执行中需要该目标模块时才进行,凡在执行中未被用到的目标模块,都不会被装入内存和被链接到装入模块,其优点是加快程序的装入过程,可节省大量的内存空间

内存的装入

装入后形成物理地址

(1) 绝对装入

只用于单道程序环境,在编译时就产生绝对地址的目标代码

(2)可重定位装入(静态重定位)

在多道程序环境下,多个目标模块的起始地址通常从0开始,程序中的其他地址都是相对于起始地址的

在装入时,对目标程序中指令和数据地址的修改过程称为重定位

要求一个作业装入内存时,必须分配要求的全部内存空间,若没有足够内存,则无法装入

此外,若作业一旦装入内存,整个运行期间就不能在内存中移动,也不能申请内存空间

(3)动态运行时装入(动态重定位)

地址转换推迟在程序真正要执行时才进行,装入内存的所有地址都是相对地址,需要一个重定位寄存器的支持

可以将程序分配到不连续的存储空间,在程序运行前装入部分代码即可投入运行,根据需要动态申请分配内存,便于程序段共享

进程的内存映像

当一个程序调入内存运行时,就构成了进程的内存映像,包括:

①代码段,只读,程序调入内存时就指定了大小

②数据段,包括全局变量和静态变量,程序调入内存时就指定了大小

③PCB

④堆

⑤栈,从用户空间的最大地址往最低地址方向增长

内存保护

① 在CPU中设置一对上、下限寄存器,存放用户作业在主存中的下限和上限地址(是物理地址),每当CPU要访问一个地址时,进行比较

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

​ 重定位寄存器中含最小的物理地址,界限地址寄存器含最大的逻辑地址,内存管理机构动态的将逻辑地址与界限寄存器中的最大逻辑地址比较,若越界,则报错;若满足,则用重定位寄存器中的最小物理地址加上逻辑地址映射为最后的物理地址

​ 加载重定位寄存器和界限地址寄存器必须要特权指令

内存共享

只有那些只可读的区域才可以共享。

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

覆盖与交换

①覆盖:主要用于早期的计算机系统,基本思想:将用户空间分为一个固定区和若干覆盖区。经常活跃的放在固定区,其他的按调用关系分段,将那些即将要访问的放入覆盖区,其他段放在内存,在需要调用前,系统将其调入覆盖区,覆盖掉原有的段

​ 最大特点是打破了一个进程必须全部放入主存才能运行的限制,该技术对用户和程序员不透明

②交换:把处于等待状态的程序从内存移入到辅存,称为换出;把准备好竞争的程序从辅存移入到内存,称为换入

​ 中级调度就是采用的交换技术

​ 交换空间通常是磁盘的一整块,且独立于文件系统,使用起来比较快(采用连续分配方式,I/O更快)

​ 在内存吃紧时开始,系统负荷降低时暂停;交换需要备份存储,通常是磁盘

覆盖技术是针对同一个进程或程序中;交换技术是在不同进程(作业)中

覆盖技术已经称为历史,但交换技术在如(UNIX)中,仍具有很强生命力

连续分配管理方式
单一连续分配

适用于单用户、单任务的os,系统区在低地址部分;用户去内存中,仅有一道用户程序,空间独占

固定分区分配

适用于多道os,将内存空间划分为若干大小的区域,每个分区只装入一道作业

分区大小相等,缺乏灵活性

分区大小不等

需要建立一张分区说明表,包括每个分区的起始地址、大小以及状态

存在两个问题,①程序太大而放不进任何一个分区,这就需要采用覆盖技术;

​ ②程序小于固定分区大小时,会导致内部碎片,但无外部碎片

动态分区分配

适用于动态重定位

又称为可变分区分配,在进程装入内存时,根据进程的实际需求,动态的为之分配内存

会产生很多的外部碎片,可通过紧凑/拼接技术来解决外部碎片问题

动态分区分配算法

首次适应算法(First Fit)

​ 空闲区分区以地址递增的顺序链接,分配内存时,从链首开始顺序查找,找到第一个大小满足的分区即可

邻近适应算法(Next Fit)

​ 循环首次适应算法,分配内存时,从上次查找结束的位置开始继续查找

最佳适应算法(Best Fit)

​ 空闲分区按容量递增的次序形成空闲分区链,找到第一个能满足要求的最小分区

最坏适应算法(Worst Fit)

​ 空闲分区按容量递减的次序形成空闲分区链,找到第一个能满足要求的(最大分区),从中分割一部分

首次适应算法最简单、通常也是最好的和最快的,不过会使得内存低地址部分出现很多小的空闲分区,每次分配查找时都要经过,增加了开销;更有可能将高地址的大分区块保留下来

邻近适应算法常常在尾部分裂成小碎片,通常比首次适应算法要差,会导致高地址、低地址都有相同的概率被使用,导致无大分区块可用

最佳适应算法,性能通常很差,因为会留下很小的难以利用的内存块,会产生最多的外部碎片

最坏适应算法,会很快导致没有可用的大内存块,因此性能也非常差

动态分区的合并

设置一张空闲分区链表

①回收区与插入点的前一个空闲分区相邻

②回收区与插入点的后一个空闲分区相邻

③回收区与插入点前后两个空闲分区都相邻

④回收区没有相邻的空闲分区

基本分页存储管理

基本思想:把内存空间划分为相等且固定的块,块相对较少,作为主存的基本单位,每个进程也以块为单位进行划分,进程执行时,以块为单位逐个申请主存中的块空间,这样,进程只有在为最后一个不完整的块申请时,才会产生内部碎片,每个进程平均只产生半个块大小的内部碎片;与固定分区分配相比,块的大小要小很多;

分页管理是从计算机的角度考虑设计的,目的是提高内存的利用率,提升计算机的性能,对用户完全透明

页面/页:进程中的块

页框/页帧:内存中的块

为方便转换,页面大小是2的整数幂

地址结构: 逻辑地址

3111
页号P页内偏移量W

地址长度为32位,011位为页内地址,大小为4kb,1231位为页号,最多允许有 2 20 页 2^{20}页 220

地址结构决定了虚拟内存的寻址空间有多大

页表:系统为每个进程建立一张页表,存在于PCB中,记录页面内存中对应的物理块号,实现页号到物理块号的映射

页号 块号

不占存储空间 对应主存

是隐式的,理解为数组下标

基本地址变换机构

过程:(假设给出的都是十进制数),逻辑地址A 页面长度L,需要用到页表寄存器(PTR)

① 页号P=(A/L);页内偏移量W=(A%L)

②比较页号P和页表长度M,若P>=M则越界

③页表起始地址F+页号P*页表项长度=页号P对应的页表项地址,取出该页表项内容b,即物理块号

④b*L+W=E,访问内存

整个过程是由硬件自动完成的,页式管理中地址空间是一维

在整个过程中访问两次内存,①是访问页表,②是访问逻辑地址对应的物理地址

具有快表的地址变换机构

高速缓冲存储器—快表,又称相联存储器(TLB),用来存放当前访问的若干页表项,TLB具有并行查找能力

过程:

①由硬件进行地址转换,将页号送入高速缓存寄存器,并将此页号于快表中的所有页号进行比较

②若匹配成功,则直接访问该逻辑地址的物理地址,只需要一次访存

③若失败,则继续按照基本过程进行,读出该页表项后,应同时将其放入TLB中

④注意,有些处理机设计对TLB的访问和基本过程是并行进行的,在快表中查找成功则终止慢表查找

​ 一般快表的命中率达90%,基于局部性原理

多级页表

建立多级页表的目的在于建立索引,以便不用浪费主存空间区存储无用的页表项,也不用盲目的顺序式查找页表项

为方便查询,顶级页表最多只能有一个页面,因此顶级页表总共可以容纳1k个页表项,逻辑地址占10位

基本分段存储管理

分段管理是考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长和动态链接等多方面需求

按照用户进程中的自然段划分逻辑空间,每段从0开始编址,并分配一段连续的地址空间(段内连续,段间不要求),整个作业的地址空间是二维的,<段号,段内偏移量>,段号和段内偏移量由用户显式提供,在高级程序设计语言中,由编译程序完成

段表: 段号 段长 本段在主存的实址

​ 隐式的

逻辑地址结构: 段号 段内偏移量

地址变换机构

段表寄存器 :段表实址+段表长度

过程:

①将段号S与段表长度M进行比较,若S≥M,则越界

②段表始址+段号S*段表项长度,找到对应段表项在内存中的位置

③将段内偏移量W和段表项中存储的段长比较,若W≥C,越界

④去除段表项中的始址b,E=b+W 找到物理地址

段的共享与保护

在分段系统中,段的共享是通过B

保护方法主要有:①存取控制保护;②地址越界保护

段页式管理

分页管理能有效提高内存利用率,分段管理能反应程序的逻辑结构并有利于段的共享和保护

在段页式系统中,作业的地址空间首先被分为若干逻辑段,每段有自己的段号,然后将每段分为若干大小固定的页。

​ 对内存空间的管理让和分页管理一样,分为若干和页面大小相同的存储块

每个进程有一个段表: 段号(隐式) 段长(页表长度) 页表起始地址

每个段对应自己的页表 : 页号(隐式) 内存块号

逻辑地址结构: 段号S 页号P 页内偏移量W

地址空间也是二维的

地址变换

通过段表寄存器找到页表始址(一次访存),通过页表找到页帧号(第二次访存),最后形成物理地址并访问(第三次访存)

①为什么要进行内存管理  王道P180
②多级页表解决了什么问题,又带来什么问题  (页数同上)
③ 关于分页、分段、段页  搞清楚三个问题:  逻辑地址结构     表项结构           地址变换过程
习题

①使用交换技术时,若一个进程正在I/O操作,不能换出,(处于临界段可以)

②对主存储器的访问以字/字节为单位

③王道P185-49、54

④王道P186-56 十六进制转二进制时,缺位在高位补0

⑤在虚拟内存管理中,地址变换机构将逻辑地址变换为物理地址,形成该逻辑地址的阶段是链接

⑥王道P186 -04

虚拟内存管理

传统存储器管理方式的特征(前面学到的那些):①一次性,即作业必须一次性全部装入后,才能运行;②驻留性,即作业被装入后一致留在内存,任何部分都不会被换出

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

​ 时间局部性:某条指令/某个数据,被执行后,不久后可能再次执行

​ 空间局部性:程序访问了某个存储单元,不久后,其附近的存储单元也将被访问

时间局部性通过将使用的指令和数据保存到高速缓存中,并使用高速缓存的层次结构实现;空间局部性通常使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现

虚拟存储器的定义和特征

基于局部性原理,在程序装入式,仅须将程序当前要运行的少数页面或段先装入内存,便可启动程序执行,执行过程中,需要则调入,不需要则调出,这样,系统好像为用户提供了一个比实际内存容量大的多的存储器,称为虚拟存储器

虚拟存储器包括作为虚拟内存那部分硬盘

系统提供了部分装入、请求调入、置换功能

特征:①多次性;②对换性;③虚拟性

实现方式:①请求分页存储管理;②请求分段存储管理;③请求段页式存储管理

硬件支持:①一定容量的内存和外存;②页表机制(段表机制),作为主要的数据结构;③中断机制;④地址变换机构

请求分页管理方式

于基本分页管理,多了请求分页和页面置换功能

请求分页机制中的页表项

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

状态位P:用于指示该页是否已经调入内存

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

修改位M:该页在调入内存后是否被修改过

外存地址:用于指出该页在外存上的地址,通常是物理块号

缺页中断机构

当访问的页面不在内存时,产生一个缺页中断,请求os将其调入内存,将该进程阻塞(页面调入后唤醒),若内存中有空闲块,则分配一个;若没有,则通过页面置换算法淘汰某页(若该页面在内存中被修改过,则要将其写回内存)

在指令执行期间而非一条指令执行完后产生和处理中断,属于内部异常(故障)

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

地址变换机构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ntXm2TOC-1673088689355)(C:\Users\HP\Desktop\请求分页.png)]

页框分配

驻留集大小

请求分页存储管理中给进程分配的物理块的合集

给一个进程分配的页框越少,驻留在主存中的进程就越多,从而提高CPU利用率;

若一个进程在主存中的页面过少,则尽管局部性原理,缺页率仍较高

若一个进程在主存中的页面过多,则由于局部性原理,对该进程的缺页率没有太明显影响

内存分配策略

在内存分配策略:固定和可变换分配策略;置换策略:全局置换和局部置换

①固定分配局部置换:为每个进程分配固定数目的物理块数,且发生缺页时,在进程内部的物理块中选出一页

②可变分配全局置换:先为每个进程分配一定数目的物理块,在进程运行期间,动态的增加或减少物理块数;在发生缺页时,从内存中空闲物理块中找到一页;但它会盲目的给进程增加物理块,从而导致并发能力下降

③可变分配局部置换:若进程在运行中频繁的发生缺页中断,则系统为该进程分配若干物理块,直至该进程的缺页率趋于适当程度,根据缺页的频率来动态的知难而进该或减少进程的物理块数

物理块调入算法(采用固定分配策略时):①平均分配;②按进程大小比列分配;③优先权分配

调入页面的时机:①预调页策略,根据局部性原理,但成功率约50%,主要用于进程的首次带哦如,由程序员指出应先调入哪些页

​ ②请求调页策略,目前虚拟存储器大多采用此策略,其缺点是每次仅调入一页,增加了I/O开销

从何处调入页面

①系统拥有足够的对换区空间,则与进程有关的文件都从文件区复制到对换区

②系统缺少足够的对换区,凡是不会被修改的文件都直接从文件区调入;当换出这些页面时,由于它们未被修改而不必将它们换出;对于哪些可能被修改的部分,在它们换出时要调到对换区,以后需要时再从对换区调入

③UNIX方式:未运行的页面都应从文件区调入。曾经运行过但又被换出的页面,放在对换区,下次调入时应从对换区调入

页面置换算法
最佳(OPT)算法

选择淘汰的页面是以后永不使用或最长时间内不再被访问的页面,以保证获得最低的缺页率,但无法预测进程在内存中的若干页面哪个是未来最长时间内不被访问的,所以该算法无法实现

先进先出(FIFO)算法

会出现所分配的物理块数增大而页面故障数不减反增的异常现象,称为Belady异常

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

Least recently used,它认为过去一段时间内未访问的页面,在最近的将来页不可能被访问。

访问字段A记录自上次被放问以来所经历的时间,淘汰页面时选择页面中的最大予以淘汰

OPT是向后看,LRU是向前看,LRU的算法性能较好,但需要寄存器和栈的硬件支持(看作是耗费高),实现困难,开销大(而引起耗费高的主要原因是需要对所有的页进行排序),最接近OPT

时钟(CLOCK)算法

1、简单的CLOCK算法:

​ 将内存中的所有页面视为一个循环队列,并有一个替换指针与之相关联,淘汰一个页面后,将该指针指向该页面的下一页

​ ①当页面第一次被装入或访问时,访问字段A设为1

​ ②选择一页淘汰时,检查访问字段A,若为0,则将该页替换出

​ ③若访问字段A为1,则将1置为0,暂不换出,给予第二次驻留内存的机会

​ ④循环检查,最多两轮,就会替换出一个页面

2、改进型CLOCK算法

​ 考虑一个页面换出时,若已被修改过,需要将该页写回磁盘,在改进型中,增加了置换代价—修改位

​ 1类 A=0,M=0,最近未被访问且未被修改,最佳

​ 2类 A=0,M=1,最近未被访问但被修改过,不是很好的淘汰页

​ 3类 A=1,M=0,最近被访问过,但未被修改,可能再被访问

​ 4类 A=1,M=1,最近被访问过,且被修改过,可能再被放问

​ ①寻找A=0,M=0的1类页面

​ ②若①失败,进行第二轮扫描,寻找A=0,M=1的页面,且在扫描过程中,将所有A=1的置为A=0

​ ③若②还失败,指针返回到最开始的位置,重复①、②一定可以找到一个

​ 改进型减少了磁盘I/O操作,但算法本身的开销增大

抖动和工作集

抖动

频繁的页面调度行为称为抖动或颠簸

产生抖动的根本原因是,系统中同时运行的进程太多,由此分配给每个进程的物理块太少,不能满足进程正常运行的基本要求,致使每个进程频繁的发生缺页

工作集

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

工作集W可由时间t和工作窗口大小Δ来确定,t时刻最近访问过的Δ个页面(去掉重复的) 王道P217-39

在实际应用中,工作集窗口会设置的很大,对于局部性良好的程序来说,工作集的大小比工作集窗口Δ小的多,通常,驻留集要大于工作集大小

内存映射文件

将磁盘文件的全部或部分内容与进程虚拟地址空间的某个区域建立映射关系,便可以直接访问被映射的文件,而不必执行文件I/O操作,适合用来管理大尺寸文件

多个进程允许并发的内存映射同一文件,以便允许数据共享,很多时候内存共享是通过内存映射来实现的

虚拟存储器性能影响因素及改进方式

缺页率(缺页率高称为抖动)是影响虚拟存储的主要因素,且缺页率又受到页面大小、分配给进程的物理块数(取决于工作集)、页面置换算法和程序的编制方式的影响

1)、为什么要引入虚拟内存
2)、虚拟内存空间的大小由什么因素决定
 ①虚拟内存的实际容量<内存容量和外存容量之和
 ②虚拟内存的最大容量≤计算机的地址位数能容纳的最大容量
3)、虚拟内存是怎么解决问题的,会带来什么问题
1、2、3王道P213
习题

①考虑页面置换算法,系统有m个物理块供调度,初始时全为空,页面引用串长度为p,包含了n个不同的页号,无论用什么算法,缺页次数不会少于(n次) 解析:无论使用哪一个算法,每种页面第一次访问时不可能在内存中,必然发生缺页

②页面失效次数(包括驻留集为空时,每个页面第一次访问) vs 页面置换次数(不包括驻留集为空时,每个页面第一次访问)

③在虚拟存储器中,决定是否会发生页故障的是合法位 解析:合法位是指示了该页面是否在内存中

④虚拟存储只能基于非连续分配技术

⑤王道P217-42

文件管理

基本概念

文件是以硬盘载体的存储在计算机上的信息资源集合,用户在进行输入\输出中,以文件为基本单位

首先,文件中肯定包括一块存储空间,更准确的说,是存储空间中的数据;其次,包括分类和索引信息;最后,要包含一些关于访问权限的信息

​ 文件: 由创建者所定义的,具有文件名的一组相关元素的集合,分为有结构文件和无结构文件

​ 记录 记录 记录 记录: 一组相关数据项的集合,用于描述一个对象在某方面的属性

数据项 数据项: 文件系统中最低级的数据组织形式,分为基本数据项和组合数据项

文件的属性

①名称,文件名称唯一;②类型,被支持不同类型的文件系统所使用;③创建者;④所有者;⑤位置(文件存放路径–用户;外存地址–os);⑥ 大小;⑦保护;⑧创建时间、最后一次修改时间和最后一次存取时间;⑨标识符,标识符唯一,os用于区分各个文件的一种内部名称

文件控制块FCB

用来存放控制文件需要的各种信息的数据结构,以实现"按名存取"

FCB的有序集合称为文件目录,一个FCB就是一个文件目录项

FCB主要包含:①基本信息;②存取控制信息;③使用信息

一个文件目录也被视为一个文件,称为目录文件

索引结点

文件目录通常存放在磁盘上,在检索目录的过程中,只用到了文件名,仅当找到一个目录项,才需从该目录项中读取该文件的物理地址,因此,有的系统(如UNIX),便采用了文件名和文件描述信息分开的方法,将文件描述信息单独形成一个称为索引结点的数据结构,简称i结点(inode)。在文件目录中,每个目录项仅由文件名和指向该结点的指针构成

①磁盘索引结点,是指存放在磁盘上的索引结点。每个文件有一个唯一的磁盘索引结点

②内存索引结点,是指存放在内存中的索引结点,当文件被打开时,要将磁盘索引结点复制到内存的索引结点中,增加了一些内容,如访问计数、状态(指示i结点是否上锁或被修改)、逻辑设备号、链接指针等

文件的基本操作

1)创建文件,为新文件分配必要的外存空间,在目录中为之创建一个目录项

2)写文件,为了写文件,执行一个系统调用,系统为该文件维护一个写位置的指针

3)读文件,为了读文件,执行一个系统调用,系统维护一个读位置的指针,通常一个进程只对一个文件读或写,因此当前操作位置可作为每个进程与当前文件位置的指针。

4)重新定位文件,也称为文件定位,搜索目录找到适当的条目,并将当前文件位置指针重新定位到给定值,不涉及读、写文件

5)删除文件,删除该文件所占存储空间,删除目录项

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

这6个基本操作可由组合起来执行其他文件操作

文件的打开与关闭

在文件使用之前通过系统调用open被显式的打开。os维护一个包含所有打开文件信息的表(打开文件表),是指将该文件的属性从外存复制到内存打开文件表目中,并将该表目的编号(也称为索引)返回给用户,从而节省再次搜索目录的开销。当文件不再使用时,用系统调用close关闭它

要读一个文件,首先要用open系统调用打开该文件。open中的参数包括文件的路径名、文件名,而read只需使用open返回的文件描述符,并不使用文件名作为参数,read要求用户输入三个参数:文件描述符fd;buf缓冲区首地址;传送的字节数n

两级打开文件表:每个进程表和整个系统表。

进程表中存储的是进程对文件的使用信息;系统打开文件表包含文件相关信息

系统打开文件表为每个文件关联一个计数器(OpenCount)以记录多少进程打开了该文件

文件名不必是打开文件表的一部分,因为一旦完成对FCB在磁盘上的定位,系统就不再使用文件名

对于访问打开文件表的索引,UNIX称之为文件描述符,Windows称之为文件句柄

每个打开文件都具有如下关联信息:

①文件指针,每个进程打开文件表都唯一保存自己对该文件的读写位置指针

②文件打开计数器(系统文件为每个文件维护)

③文件磁盘位置 ;④访问权限

文件保护

通过口令保护、加密保护和访问控制等方式实现。其中口令和加密是为了防止用户文件被他人存取或窃取,而访问控制则用于控制用户对文件的访问方式

访问类型:①读;②写;③执行;④添加;⑤删除;⑥列表清单,此外还可以对文件的重命名、复制和编辑加以控制,这些高层的功能可以通过系统查询调用低层系统调用来实现

访问控制:为每个文件和目录增加一个访问控制列表(Access-Control- List,ACL),以规定每个用户及其所允许的访问类型。优点是可以使用复杂的访问方式,缺点是长度无法预计并可导致复杂的空间管理

精简的访问列表采用:①拥有者,创建该文件的用户

​ ②组,和拥有者在同一个组的用户

​ ③其他,系统内的其他用户

口令,用户在建立一个文件时提供一个口令,系统为其建立FCB时附上相应口令,同时告诉允许访问的其他用户,这种方法的时间和空间开销不大,但口令存放在系统内部,不够安全

密码,用户对文件进行加密,文件被访问时需要密钥,保密性强,节省了存储空间,但编码和译码需要花费较长时间

注意两个问题:①现代操作系统常用的文件保护方法是,将访问控制列表与用户、组、其他成员访问控制方案一起组合使用

​ ②不仅需要提供单个文件的保护机制,还需提供目录保护机制,且目录操作与文件操作并不相同,因此需要不同的保护机制

相对于加密保护机制,访问控制机制的安全性较差。因为访问控制的级别和保护力度较小,因此它的灵活度相对较高。若访问控制不由系统实现,则系统本身的安全无法保证。加密机制若由系统实现,则加密方法无法拓展
文件的逻辑结构

1、无结构的文件(流式文件)

将数据按顺序组织称记录并积累、保存,以字节为单位。对记录文件的访问只能通过穷举搜索的方式,对大多数应用不适合;只对那些对基本信息单位操作不多的文件适用,如源程序文件、目标代码文件

2、有结构的文件(记录式文件)

①顺序文件

文件中记录一个接一个的顺序排列。第一种是串结构,记录之间的顺序和关键字无关,通常是按照存入时间的先后排列;第二种是顺序结构,所有记录按关键字顺序排列

对记录进行批量操作时,顺序文件的效率是所有逻辑文件中最高的;对于顺序存储设备(如磁盘),也只有顺序文件才能被存储并能有效工作。但在增删改查单个记录的场合,顺序文件的性能也比较差

②索引文件

对于定长的记录文件,要查找第i条记录,就和数组的查找模式是一致的

对于变长的记录文件,我们可以建立一张索引表,为主文件的每个记录在索引表中分别设置一个表项,包含指向变长记录的指针和记录长度;索引表本身按照关键字排序且是一个定长记录的顺序文件

索引文件由逻辑文件和索引表组成

③索引顺序文件

将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表,在索引表中为每组中的第一条记录建立一个索引项,其中包含有该记录的关键字值和指向该记录的指针

同一组中的关键字可以无序,但组与组之间的关键字必须有序

对含有N条记录的顺序文件,平均查找需要 N 2 \frac{N}{2} 2N

对含有N条记录的索引顺序文件,假设N条记录分为 N 1 2 组,每组 N 1 2 条记录 N^{\frac{1}{2}}组,每组N^{\frac{1}{2}}条记录 N21组,每组N21条记录 索引表中查找要 N 1 2 2 \frac{N^{\frac{1}{2}}}{2} 2N21,在每个族中查找要 N 1 2 2 \frac{N^{\frac{1}{2}}}{2} 2N21次,一共需要 N 1 2 N^{\frac{1}{2}} N21次,类似于数据结构中的分块查找

④直接文件或散列文件

通过散列函数转换的键值直接决定记录的物理地址,没有顺序的特性,有很高的存取速度,但是会引起冲突

有结构文件逻辑上的组织,是为在文件中查找数据服务的

文件的物理结构

文件的物理结构就是研究文件的实现,即文件数据在物理结构上是如何分布和组织的,这一问题从两个方面回答:一是文件的分配方式,讲的是对磁盘非空闲块的管理;二是文件存储空间的管理,讲的是对磁盘空闲块块的管理

文件分配,即如何为文件分配磁盘块

1、连续分配

每个文件在磁盘上占有一组连续的块,支持顺序访问和直接访问,实现简单、存取速度快;缺点是文件长度不宜动态增加、删除或插入时,需要对相邻的记录做物理上的移动、反复增删文件会产生外部碎片、很难确定一个文件需要的空间大小

2、链接分配

是一种离散分配的方式,消除了外部碎片,提高了利用率

①隐式链接,目录项中只含有文件第一块的指针和最后一块的指针,除最后一个文件块外,每个盘块都有指向文件下一个磁盘的指针,对用户透明,只适合顺序访问,随机访问效率低。且稳定性也是一个问题,如系统在运行过程中,若导致链表中指针的丢失或损坏,会导致文件数据的丢失

②显式链接,把用于链接文件各物理块的指针,从每个物理块的末尾提取出来,显式存放在内存的一张链接表中,该表在整个磁盘中仅设置一张,称为文件分配表(File Allocation Table FAT),FAT不仅记录了文件各块之间的先后链接关系,同时还标记了空闲的磁盘块

FAT在系统启动时就会被读入内存,因此查找记录的过程是在内存中进行的,显著的提高了检索速度,明显较少了磁盘访问次数,支持顺序访问和随机访问

3、索引分配

FAT需要占用较大的内存空间,且打开某个文件时,只需将该文件对应的磁盘块编号调入内存即可,完全没有必要将真个FAT调入内存

索引分配将每个文件的所有盘块号都集中放在一起构成索引块,每个文件都有一个索引块,索引块的第i个条目指向文件的第i个块

支持直接访问,没有外部碎片,缺点是增加了存储空间的开销,且对索引块大小的确定是一个问题

解决索引块太小无法支持大文件的方法:

①链接方案,每个索引块的尾部存放指向下一个该文件索引块的地址指针(若有256个索引块,当你查找第256个块时,要将前255个都读入内存,显然是低效的)

②多层索引,

③混合索引

4、混合索引分配

①小文件,最好能将它们的每个盘块地址直接放入FCB中,即为直接寻址,若每个盘块大小为4KB,每个指针大小4B,文件不大于40KB

②中型文件,采用单级索引,首先从FCB中找到该文件的索引表,从中获得文件的盘块地址,一次间址,文件不大于4MB

③大型文件,采用多级索引,即多次间址,文件超过40KB+4MB

习题

①某文件系统的目录项由文件名和索引结点组成,每个目录项长度为64字节,4字节存放索引节点号,60字节存放文件名,且文件名只能由小写英文字母组成,则该文件系统能创建的文件数量的上限是 2 32 2^{32} 232 王道(252)

②能提高文件访问速度的有:提前读、延迟写、为文件分配连续的簇、采用磁盘高速存储

③某文件系统,针对每个文件,用户类别分为4类,访问权限分为5类,若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为 20位 (王道252)

④为支持CD-ROM中视频文件的快速随机播放,播放性能最好的文件数据块组织方式是连续结构

⑤UNIX操作系统中,输入/输出设备视为特殊文件

⑥简述文件的外村分配中,连续分配、链接分配、索引分配各自的优缺点(王道P252)

目录

文件目录也是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用

上节说到,FCB的有序集合是文件目录,一个FCB就是文件目录项

用用户的角度看,目录在用户所需要的文件名和文件之间提供一种映射,所以目录管理要实现按名存取

目录结构

1、单级目录:整个文件系统只建立一张目录表,实现了按名存取,但查找速度慢,文件不允许重名,不便于文件共享,对多用户os是明显不合适的

2、两级目录:分为主文件目录,用于记录用户名及相应用户文件目录所在的存储位置

​ 用户文件目录,用于记录用户文件的FCB信息

​ 解决了不同用户文件重名的问题,文件系统可以在目录上实现访问限制。但两级目录缺乏灵活性,不能对文件分类

3、树形目录

绝对路径:从根目录出发到所找文件通路上所有目录名与数据文件名用分隔符’/'连接而成

相对路径: 当前(工作)目录:进程对文件的访问都是相对于当前目录进行的

通常每个用户都有各自的“当前路径”,登陆后自动进入

树形目录可以很方便的对文件进行分类,层次结构清晰,也能更有效的进行文件的管理和保护;但是其查找一个文件,需要按路径名逐级访问中间结点,增加了磁盘访问次数,影响查询速度,且不便于实现文件共享。目前大多数os如UNIX、Linux、Windows都采用树形结构

4、无环图目录结构

在树形结构的基础上增加一些指向同一结点的有向边,使目录称为一个有向无环图

共享文件(或目录)不同于文件拷贝(副本),若有两个文件拷贝,则每个程序员看到的是拷贝而不是原件,且若一个文件被修改,则另一个程序员的拷贝不会改变;对于共享文件,只存在一个真正的文件,任何改变都会为其他用户所见

为每个共享结点设置一个共享文件计数器,仅当共享计数器为0时,才删除该结点,否则删除请求用户的共享链

目录的操作

①搜索

②创建文件

③删除文件

④创建目录

⑤删除目录,有两种方式,不删除非空目录,要先删除目录中的所有文件,并递归删除子目录;可删除非空目录,目录中的文件和子目录全部同时被删除

⑥移动文件

⑦显示目录

⑧修改目录

目录实现

1、线性列表

2、哈希表

目录查询是通过在磁盘上反复搜索完成的,需要不断的进行IO操作,开销比较大,为减少IO操作,把当前使用的文件目录复制到内存,降低磁盘操作次数,提高系统速度

文件共享

1、基于索引结点的共享方式(硬链接)

在文件目录项中只设置文件名和指向该相应索引结点的指针,实现文件共享时,不同的目录项中索引结点指针指向同一个索引结点。在索引结点上设置链接计数器count

2、利用符号链接实现文件共享(软链接)

LINK类型的文件,在该文件中只包含被链接文件的路径名

只有文件主才拥有指向其索引结点的指针,而共享该文件的其他用户只拥有路径名,并不拥有其索引结点指针

在其他用户读共享文件时,系统根据文件路径名逐个查找目录,要多次的读盘,使得访问文件开销增大

软链接和硬链接都是文件系统中静态共享方法;两个进程同时对同一文件进行操作,这样的共享是动态共享

1、目录管理的要求是什么  (王道P267)
    ①实现按名存取,最基本的功能;②提高对目录的检索速度;③为了方便用户共享文件,目录还需要提供访问控制信息;④允许不同用户对不同文件采用相同的名字
 
2、目录查找某个文件可以使用什么方法
    线性表法和哈希表法。线性列表把文件名组织成一个线性表,查找时依次与线性表中的每个表项进行比较。若文件名按序排列,则可以使用折半查找降低平均查找时间,但建立新文件会增加线性表的开销。哈希表用文件名通过哈希函数得到一个指向文件的指针,方法迅速,注意冲突
习题

①文件在磁带上通常采用连续存储方法,在硬盘上通常不采用连续存储方法,在内存上采用随机存取方法

②对文件当访问控制,通常由用户访问权限和文件属性共同限制

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

文件系统结构

用户接口

文件目录系统:根据文件路径找到相应的FCB或索引结点

存取控制模块:完成文件保护相关功能

逻辑文件系统与文件信息缓冲区:将记录号转换为对应的逻辑地址

物理文件系统:将逻辑地址转换为物理地址

辅助分配模块:负责文件存储空间管理 设备管理模块:直接与硬件交互

文件系统在磁盘中的结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kyo8Gsdr-1673088689357)(C:\Users\HP\Desktop\文件系统磁盘中的结构.png)]

主引导记录(Master Boot Record MBR) 用来引导计算机,后面是分区表,该表给出了每个分区的起始和结束地址,当计算机启动时,BIOS读入并执行MBR,MBR做的第一件事是确定活动分区,读入它的第一块,即引导块

引导块(boot block),负责启动该分区的操作系统,为统一起见,每个分区都从一个引导块开始

超级块(super block) 包含文件系统的所有关键信息,计算机启动时,或者该文件首次使用时,超级块会被加载到内存

文件系统在内存中的结构

①内存中的安装表,包含每个已安装文件系统分区的有关信息

②内存中的目录结构的缓存包含最近访问目录的信息

③整个系统的文件打开表

④每个进程的文件打开表

外存空闲空间管理

一个磁盘可以分为4个分区,每个分区都可以有单独的文件系统,包含文件系统的分区通常称为,卷可以是磁盘的一部分,也可以是整个磁盘,还可以是多个磁盘组成的RAID集。在一个卷中,存放文件数据的空间(文件区)和FCB的空间(目录区)是分离的

空闲表法:适用于连续分配方式,与内存的动态分配方式类似,为每个文分配一块连续的存储空间

​ 第一个空闲盘块号 空闲盘块数量 不适用于大型文件系统

空闲链表法:①空闲盘块链,分配和回收过程非常简单,但在为一个文件分配盘块时可能会重复多次操作,效率低,且链长度会很长

​ ②空闲盘区链,每个盘区含有下一个空闲盘区的指针和指明本盘区大小的信息 不适用于大型文件系统

位示图法:利用二进制的一位来表示磁盘中一个盘块的使用情况,一个m×n位组成的位示图就可以表示m×n个盘块的使用情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJNrAkQI-1673088689358)(C:\Users\HP\Desktop\位示图.png)]

盘块号计算公式(以1开头): b = n ( i − 1 ) + j b=n(i-1)+j b=n(i1)+j

回收时的公式: i = ( b − 1 ) / n + 1 i=(b-1)/n+1 i=(b1)/n+1 j = ( b − 1 ) M O D n + 1 j=(b-1) MOD n+1 j=(b1)MODn+1

成组链接法:结合了空闲表和空闲链表两种方法,用来存放一组空闲盘块号的盘块称为成组链块,把顺序的n个空闲盘块号保存在第一个成组链块中,其最后一个空闲盘块则用于保存另一组空闲盘块号,如此继续

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gl0P8EsV-1673088689358)(C:\Users\HP\Desktop\笔记照片\chengzulianbiao.png)]

虚拟文件系统(VFS)

为用户程序提供了文件系统操作的统一接口,屏蔽了不同文件系统的差异和操作细节

VFS要求下层的文件系统必须实现某些规定的函数功能,一个新的文件系统想要在某操作系统上被使用,就必须满足VFS的要求

每打开一个文件,VFS就在主存中新建一个vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统

vnode中有一个函数功能指针,指向该文件系统(如UFS FAT)提供的函数功能呢

文件系统挂载:①在VFS中注册新挂载的文件系统。(内存中的挂载表)包含每个文件系统的相关信息,如文件系统类型,容量;

​ ②新挂在的文件系统,要向VFS提供一个函数地址列表

​ ③将新文件系统的加载到挂载点,也就是将新文件系统挂在到某个父目录下

什么是文件系统?王道P281


文件系统要完成哪些功能



王道P282-07

输入/输出(IO)管理

IO设备

1、设备的分类

按信息交换单位:①块设备,信息交换以数据块为单位。它属于有结构设备,如磁盘,磁盘的基本特征是传输速率较高、可寻址、即可随机的读写任一一块

​ ②字符设备,信息交换以字符为单位,属于无结构设备,如交互式终端机、打印机,基本特征是传输速率第,不可寻址,并且时常采用中断IO的方式

按传输速率:①低俗设备,如键盘、鼠标;②中速设备,如激光打印机;③高速设备,如磁盘、光盘

IO接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rwUGGsko-1673088689359)(C:\Users\HP\Desktop\笔记照片\设备控制器组成.png)]

又称为设备控制器,位于CPU和设备之间,既要与CPU通信,又要与设备通信,还要具有按CPU发来的命令去控制设备工作的功能

由三部分组成:①设备控制器与CPU的接口,该接口有三类信号线:数据线、地址线、控制线

②设备控制器与设备的接口,一个设备控制器可以连接一个或多个设备,因此控制器中有一个或多个设备接口,每个接口中都存在数据据、 控制和状态三种类型的信号

③IO逻辑,用于实现对设备的控制,通过一组控制线与CPU交互,同时通过地址线把地址发送给控制器

设备控制器的主要功能有:①接受和识别CPU发来的命令;②数据交换;③标识和报告设备的状态;④地址识别;⑤数据缓冲;⑥差错控制

IO端口

是指设备控制器中可被CPU直接访问的寄存器:

①数据寄存器

②状态寄存器,获取执行结果和设备的状态信息,以让CPU知道是否准备好

③控制寄存器,由CPU写入,以便启动命令或更改设备模式

为实现CPU与IO通信,有两种方法:

①独立编址,为每个端口分配一个IO端口号,所有IO端口形成IO端口空间,普通用户程序不能访问,只有os使用特殊的指令才可以

②统一编制,又称内存映射I/O,每个端口被分配唯一的内存地址,且不会有内存被分配到这一地址,通常分配靠近空间顶端的地址,简化了指令,可以采用对内存进行操作的指令来对寄存器进行操作

IO控制方式

设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送。外围设备和内存之间的输入/输出控制方式有4种

1、程序直接控制方式

该方式中,因为在CPU中没有采用中断机制,所以CPU要对外设状态进行循环检查,导致CPU与IO设备只能串行工作,CPU利用率相当低,数据传送单位:一个字;数据流向:IO–>CPU–>内存

2、中断驱动方式

基本思想是,允许IO设备主动打断CPU的运行并请求服务,从而解放CPU,使得其向IO控制器发送都命令后可以继续做其他有用的工作

该方式比程序直接控制方式有效,但其数据流向仍为:IO–>CPU–>内存,这就导致中断驱动方式仍然会消耗较多的CPU时间;数据传送单位仍未一个字

3、DMA方式

在中断驱动方式中,IO设备与内存之间的数据交换必须经过CPU中的寄存器,速度还是受限,DMA(直接存储器存取)思想是,在IO设备和内存之间开辟直接的数据交换通路,彻底解放CPU

①基本单位是数据块

②所传送的数据,是从设备直接送入内存的,或者相反

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

④缺点:所读写的只能是连续的多个块,且读入内存后在内存中必须是连续的

DMA中的四类寄存器:①命令/状态寄存器(CR),接受CPU发来的IO命令、有关控制信息或设备状态

②内存地址寄存器(MAR),输入时,存放把数据从设备传到内存的起始地址;输出时,存放内存到设备的内存源地址

③数据寄存器(DR) ;④数据计数器(PC),存放本次要传送的字(节)数

工作过程:CPU收到IO设备的DMA请求,它向DMA控制器发送一条命令,同时设置MAR和DC的初值,启动DMA控制器,然后继续其他工作;之后DMA控制器直接与存储器交互,传送整个数据块,每次传送一个字,这个过程不需要CPU参与。传送完成后,DMA发送一个中断信号给CPU

DMA与中断驱动的区别:①中断驱动每传送一个字,就要中断CPU,而DMA每传送一个或多个数据块,才中断CPU;②中断驱动数据传送要经过CPU,而DMA是设备与内存直接交互;③中断驱动的数据传送是在中断处理时由CPU控制完成的,而DMA方式则是在DMA控制器的控制下完成的

4、通道控制方式

IO通道是指专门负责输入/输出的处理机(大残CPU,一种硬件),是DMA的发展,可以实现CPU、设备、通道的并行操作

通道与DMA的区别:DMA方式需要CPU来控制传输的数据块大小、传输的内存位置;而通道方式中这些信息是由通道控制的。另外每个DMA控制器对应一台设备与内存传送数据,而一个通道可以控制多台设备与内存数据交换

过程:CPU要完成一组相关读写操作及有关控制时,只需向IO通道发送一条IO指令,给出其要执行的通道程序的首地址和要访问的IO设备,通道收到该指令后,执行通道程序即可

IO通道与CPU的区别,通道指令的类型单一,没有自己的内存,通道所执行的通道程序是放在主机的内存中,也就是通道与主机共享内存

IO软件层次结构

用户层IO软件,用户可以直接调用在用户层提供的、与IO操作相关的库函数,如C中printf(“hello”)

设备独立性软件,也成为设备无关性,用于实现用户程序与设备驱动器的统一接口、设备命令、设备的保护与设备的分配释放。为实现设备独立性,引入逻辑设备和物理设备两个概念,使用逻辑设备的好处:增加设备分配的灵活性;易于实现IO重定向

设备独立性主要功能分为**:执行所有设备的公有操作**,如对设备的分配与回收;将逻辑设备映射为物理设备;对设备进行保护;缓冲管理;差错控制;屏蔽设备之间信息交换单位大小和传输速率的差异;②向用户层提供统一接口

设备驱动程序,与硬件直接相关,负责具体实现系统对设备发出的操作指令,每类设备配置一个设备驱动程序,它是IO进程与设备之间的通信程序,常以进程的方式存在。设备具体的差别被设备驱动程序所封装,用于接受上层发来的抽象IO要求

中断处理程序,进行程序的上下文切换、对处理中断信号源进行测试,读取设备状态和修改进程状态

硬件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5N1Xeg1Z-1673088689359)(C:\Users\HP\Desktop\笔记照片\IOcengci.png)]

应用程序IO接口

字符设备接口,速率低,不可寻址,以字符为单位,采用中断驱动方式,属于独占设备

块设备接口,数据块为单位,速率较高,可寻址,采用DMA方式

网络设备接口,许多os提供的网络接口为网络套接字接口

阻塞/非阻塞IO,大多数os都是采用阻塞IO

习题

①共享设备是可寻址的和可随机访问的设备

②为便于上层软件的编制,设备控制器通道通常需要提供 控制寄存器、状态寄存器和控制命令

③(字节多路通道)用于连接大量的低俗或中速的IO设备

④将系统中的每台设备按照某种原则统一进行编号,这些编号作为区分硬件和识别设备的代号,该编号称为设备的(绝对号)

⑤将系统调用参数翻译成设备操作命令的工作由(设备无关的操作系统软件)完成

DMA方式与中断控制方式的主要区别是什么 王道P294
DMA方式与通道方式的主要区别是什么
设备独立性软件
高速缓存与缓冲区

1、磁盘高速缓存

使用磁盘高速缓存技术来提高磁盘的IO速度,是指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块信息,因此其逻辑上是磁盘的,物理上是内存的,其在内存中分为两种形式:一是在内存中开辟一个单独的空间,大小固定;二是把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘IO共享

2、缓冲区

引入目的:缓和CPU和IO设备间速度不匹配的矛盾;减少对CPU的中断频率,放宽对CPU中断响应时间的限制;解决基本数据单元大小不匹配的问题;提高CPU和IO设备之间的并行性

实现方法:采用硬件缓冲器,但成本过高,只有关键部位采用;采用缓冲区(位于内存区域)

①单缓冲

IO设备输入到缓冲区的时间为T,缓冲区传送到工作区的时间为M,工作区处理的时间为C 。

处理每块数据的用时为M+max(C,T)

当缓冲区非空时,不能往缓冲区冲入数据,只能从缓冲区取出;当缓冲区空时,要一次性将数据冲满后才可取出

②双缓冲

处理一块数据的用时为max(T,C+M)

③循环缓冲

包含多个大小相等的缓冲区,每个缓冲区有一个链接指针指向下一个缓冲区,形成环形

还需要两个指针in和out,分别指示可以输入数据的第一个缓冲区和可以提取数据的第一个满缓冲区

④缓冲池

由多个系统公用的缓冲区组成

按使用状况可以分为三个队列:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)

还具有4中缓冲区:用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区

根据不同的情形,将三个队列中的缓冲区放入对应的4种缓冲区中进行处理

高速缓存和缓冲区的对比:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dQkTrxmg-1673088689360)(C:\Users\HP\Desktop\笔记照片\gaosuhuancun.png)]

设备的分配与回收

分配的总原则是充分发挥设备的使用效率,尽可能的让设备忙碌,又要避免由于不合理的分配方法造成的进程死锁

独占式设备

分时共享使用设备

以SPOOLing方式使用外部设备

设备分配的数据结构:SDT—>DCT—>COCT—>CHCT

SDT:系统设备表,整个系统中只有一张,它记录已连接到系统中的所有物理设备的情况

DCT:设备控制表,一个DCT就表征一个设备

COCT:控制器控制表, 每个COCT有一个表项存放指向相应通道控制表的指针

CHCT:通道控制表,一个通道可以为多个设备控制器服务 COCT和CHCT是一对多的关系

设备分配方式:①静态分配主要用于独占设备,在作业开始执行前,由系统一次性分配该作业所要求的全部设备,不会导致死锁,但使用率低;②动态分配,通过系统调用向系统提出设备请求,根据先请求先分配、优先级高者优先等,动态分配,设备利用率高,但可能会导致死锁

设备的安全性分配:①安全分配方式,一个进程发出IO请求后就进入阻塞状态,不能再请求任何资源,缺点是对于一个进程来说,CPU和IO是串行工作的

​ ②不安全分配方式,进程在发出IO请求后仍继续运行,可以继续发出第二个、第三个IO请求,仅当其请求的IO设备被另一个进程所占用时,才进入阻塞态,优点是一个进程可以同时操作多个设备,使进程快速推进

逻辑设备名到物理设备名的映射,其实现了设备的独立性,在应用程序中用逻辑设备名来请求某类设备,在系统中设置一张逻辑设备表(Logical Unit Table LUT),表项包括逻辑设备名、物理设备名和设备驱动程序入口。

在整个系统中设置一张LUT,因此不允许相同的逻辑设备名,适用于单用户系统

为每个用户设置一张LUT,每当用户登陆时,系统为该用户建立一个进程,同时也为之建立一张LUT,放入进程的PCB中

SPOOLing技术(假脱机技术)

为了缓和CPU高速性和IO设备低俗性之间的矛盾,引入了假脱机输入/输出技术,它是一项将独占设备改造成共享设备的技术,主要目的是提高独占设备的利用率

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWIz8pdZ-1673088689366)(C:\Users\HP\Desktop\笔记照片\SPOOLing.png)]

SPOOLing系统的特点如下: ①提高了IO速度;②将独占设备改造为共享设备;③实现了虚拟设备功能

以空间换时间

SPOOLing系统由预输入程序、井管理程序和缓输出程序组成

SPOOLing技术需要磁盘空间(输入井和输出井)、内存空间(输入/输出缓冲区)的支持,不需要外围机的支持

1、当处理机和外部设备的速度差距较大时,有什么办法可以解决问题 王道P305
2、什么是设备的独立性,引入设备独立性的好处是什么
3、用于设备分配的数据结构有哪些,它们之间的关系 王道P308

习题

①缓冲区管理着重要考虑的问题是:实现进程访问缓冲区的同步

②磁带机不属于共享设备,磁盘属于共享设备

③提高单机资源利用率的关键技术是(多道程序设计技术)

④王道P307-27

磁盘

磁盘是表面涂有磁性物质的物理盘片,通过一个磁头的导体线圈从磁盘存取数据。在读写期间,磁头固定,磁盘在下面高速旋转。

每个扇区固定存储大小,一个扇区称为一个盘块,因此扇区的密度从外道向内道增加,磁盘的存储能力受限于最内道的最大记录密度

所有盘片上相对位置相同的磁道组成柱面,扇区是磁盘的最小可寻址的单位。

磁盘地址用柱面号、盘面号,扇区号组成,原因是比起盘面、柱面、扇区的形式,在读写逻辑上连续存取的地址时,可以极大减少寻道时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqrXI0fZ-1673088689367)(C:\Users\HP\Desktop\笔记照片\cipan.png)]

固定头磁盘,磁头相对于盘片的径向方向固定的,每个磁道一个磁头;磁头可移动的,称为活动头磁盘;磁盘永久固定在磁盘驱动器的叫固定盘磁盘;可移动的叫可换盘磁盘

磁盘初始化,一个新的磁盘只是一个磁性记录材料的空白盘,在磁盘可以存取数据之前,必须将它分为扇区,以便磁盘控制器能进行读写操作,这个过程叫做低级格式化(物理格式化)。每个扇区的数据结构通常由头部、数据区域(通常大小为512B)和尾部组成,头尾部包含了相关控制信息

分区,在可以使用磁盘存储文件之前,第一步要将磁盘分为一个或多个柱面组成的分区(即我们熟悉的C盘),每个分区的起始扇区和大小都记录在磁盘的主引导记录的分区表中;第二步是对物理分区进行逻辑格式化/高级格式化(创建文件系统)

操作系统将多个相邻的扇区组合在一起,形成一(Linux中称为块),为了更高效的管理磁盘,一簇只能存放一个文件的内容,文件所占用的空间只能是簇的整倍

引导块,计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器和内存等,接着启动操作系统。自举程序通常存放在ROM中,但只在ROM中保留很小的自举装入程序,而将完整功能的引导程序保存在磁盘的启动块上,启动块位于磁盘的固定位置,具有启动分区的磁盘称为启动磁盘或系统磁盘

坏块,对于简单磁盘,坏块可手动处理,如坏块会在FAT表上标明,因此程序不会使用;对于复杂的磁盘,控制器维护磁盘内的坏块列表,这个列表在出厂低级格式化时就已经初始化,低级格式化将一些块保留作为备用,os看不到这些块,控制器可以采用备用块来逻辑地替换坏块,称为扇区备用,对坏块的处理实质上就是使用某种机制使系统不去使用坏块

磁盘调度算法

①寻找(寻道)时间 T s T_s Ts,将磁头移动到指定磁道所需的时间,包括跨越n条磁道的时间,还包括启动磁头的时间s T s = m × n + s T_s=m×n+s Ts=m×n+s

​ m是与磁盘驱动器速度有关的常数,约为0.2ms,s约为2ms

②旋转延迟时间 T r T_r Tr,磁头定位到某一磁道的扇区所需要的时间,设磁盘的旋转速度为r,则 T r = 1 2 r T_r=\frac{1}{2r} Tr=2r1,找到目标扇区平均需要转半圈

③传输时间 T t T_t Tt,从磁盘读出或写入数据所经历的时间,取决于每次读写的字节数和磁盘的旋转速度, T t = b r N T_t=\frac{b}{rN} Tt=rNb,r为磁盘每秒的转数,N为一个磁道上的字节数

总存取时间 T a = T s + 1 2 r + b r N T_a=T_s+\frac{1}{2r}+\frac{b}{rN} Ta=Ts+2r1+rNb通常寻道时间因为要移动磁臂,所以占用时间最长

延迟时间和传输时间都与磁盘的转速相关,且线性相关,因此os无法优化,但os的磁盘调度算法会影响寻道时间

1)先来先服务算法

优点是具有公平性,若只有少量进程访问,且访问聚簇的扇区,有望达到较好的性能

2**)最短寻找时间优先算法**(SSTF)

选择调度的磁道是与当前磁头所在磁道距离最近的磁道,会产生饥饿现象

3)扫描算法(SCAN),又称电梯调度算法

在磁头当前方向上,选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。实际上就是在最短寻找时间优先算法的基础上规定了磁头运动的方向,但它对最近扫描过的区域不公平,在访问局部性方面不如FCFS和SSTF;磁头只有移动到最外/内侧时,才能反方向移动,即使你的请求没有最外/内侧,对各个位置的响应频率不平均(最外/内层的磁道相应频率高哦)

4)循环扫描算法(C-SCAN)

在扫描算法的基础上规定磁头单向移动来提供服务。避免了SCAN偏向于处理那些最接近最外/内层的磁道访问请求

对SCAN和C-SCAN,规定磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘断点,这种形式的SCAN和C-SCAN称为LOOK调度C-LOOK

磁盘是连续自转设备,磁头在读写一个物理块后,需要短暂的处理时间才能开始读写下一条

交替编号,在盘面上按扇区交替编号连续存放,则连续读写多条记录能减少磁头的延迟时间

错位命名,同柱面不同盘面的扇区若能错位编号,连续读写相邻的两个盘面的逻辑记录时,也能减少磁头延迟时间

固态硬盘

简称SSD是一种基于闪存技术的存储器,由一个或多个闪存芯片和闪存翻译层组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nVrwkQz-1673088689368)(C:\Users\HP\Desktop\笔记照片\SSD.png)]

数据是以页为单位读写的,只有在一页所属的块整个擦掉,才能写这一页。

随机写很慢,优点:由半导体存储器构成,随机访问时间比机械磁盘块,能耗低,抗震性好,安全性高

磨损均衡,固态硬盘的缺点,闪存的擦写寿命是有限的

动态磨损均衡,写入数据时,自动选择较新的闪存块

静态磨损均衡,技术更为先进,在没有数据写入时,SSD也会监测并自动进行数据的分配,让老的闪存块无需承担写数据的任务

习题

①既可以随机访问,又可以顺序访问的是:光盘、磁盘、U盘

②磁盘的操作系统引导扇区产生在(对硬盘高级格式化时)

③磁盘逻辑格式化所要作的工作是:建立文件系统的根目录、确定磁盘扇区校验码所占位数 王道P323-20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值