大家好!我是未来村村长,就是那个“请你跟我这样做,我就跟你这样做!”的村长👨🌾!
||To Up||
未来村村长正推出一系列【To Up】文章,该系列文章重要是对Java开发知识体系的梳理,关注底层原理和知识重点。”天下苦八股文久矣?吾甚哀,若学而作苦,此门无缘,望去之。“该系列与八股文不同,重点在于对知识体系的构建和原理的探究。
一、概述
1、操作系统的基本概念
(1)概念
操作系统是控制和管理整个计算机系统的硬件与软件资源、合理组织调度计算机工作与资源分配,进而为用户和其它软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的系统软件。
操作系统的管理:
- 处理机管理:即对进程的管理
- 存储器管理:内存分配与回收、地址映射、内存保护与共享
- 文件管理:文件存储空间的管理、目录管理、文件读写管理和保护
- 设备管理:完成用户的I/O请求,包括缓冲管理、设备分配、设备处理与虚拟设备等功能
操作系统提供的接口:
- 命令接口:命令接口用于进行作业控制,分为联机控制方式和脱机控制方式。按作业控制方式不同可分为联机命令接口和脱机命令接口。联机控制是交互式,脱机控制是批处理。
- 程序接口:用户通过程序来请求操作系统提供文件、设备等相关服务
(2)特点
① 并发
并发:同一时间间隔,有两个或多个事件发生
并行:同一时刻,有两个或多个事件发生。并行需要对处理机(CPU)
② 共享
互斥共享:一段时间内只允许一个进程访问该资源
同时访问:允许某一时间间隔内,进程交替地对该资源进行访问,即“分时共享”
③ 虚拟
体现于:时分复用技术,空分复用技术
④ 异步
允许多个进程并发执行,这将导致进程的执行的断断续续的而不是一蹴而就的,这就是进程的异步性
2、操作系统的运行环境
(1)操作系统的运行机制
计算机系统中,通常CPU执行两种不同性质的程序,一种是操作系统内核程序,另一种是用户自编程序。内核程序是用户自编程序的管理者,内核程序执行的指令为特权指令。
用户态和核心态:所以CPU的运行状态根据不同程序执行可划分为用户态和核心态。用户自编程序运行在用户态,操作系统内核程序运行在核心态,只有在核心态CPU才能执行特权指令。
原语:处于操作系统最底层,最接近硬件的部分,运行具有原子性的程序称为原语,原语一般运行时间很短,但调度频繁,一般进程通信、CPU切换等操作皆为原语。
(2)中断与异常
① 中断与异常
中断:称为外中断,指CPU执行指令以外的事件的发生。
异常:称为内中断,指CPU指令执行内部的事件,如程序的非法操作码、地址越界、算术溢出等。
② 中断处理过程【外中断】
通过关中断保护程序的现场状态,进行断点的保存,取出中断服务程序的入口地址送入程序计数器PC,进行保护现场和屏蔽字。
然后进行开中断,执行中断服务程序,又进行关中断,恢复现场和屏蔽字。
最后进行开中断,通过中断返回,返回到程序的断点处,以便继续执行原程序。
③ 系统调用
系统调用:用户在程序中调用操作系统所提供的一些子功能,可分为:设备管理、文件管理、进程控制、进程通信、内存管理。某些功能的调用必须用到特权指令,则就会发生CPU执行状态的改变,即从用户态到核心态。
用户通过操作系统运行用户自编程序(或命令解释程序),而该程序可能会调用操作系统的底层管理程序提供服务支持,这时系统会通过硬件中断机制进入核心态,运行管理程序。
用户态转核心态的情况:
- 发生系统调用
- 用户程序出现错误状态
- 用户程序企图执行特权指令
二、进程管理
1、进程与线程
(1)进程
进程(Process):进程实体的运行过程,系统进行资源分配和调度的独立单位。
进程实体:程序段、相关数据段、PCB。
进程控制块(Process Contro Block,PCB):系统利用进程控制块来描述进程的基本情况和运行状态,进而控制和管理进程。创建进程实际上是创建PCB,撤销进程是撤销进程的PCB。
(2)进程的状态
运行态:进程在处理机上运行,单处理机一次只能有一个进程处于运行态。
就绪态:进程获得了除处理机以外的所有资源,进入就绪态。一般处于就绪态的进程较多,我们通常将其放入队列中,称为就绪队列。
阻塞态:进程在等待资源时,进入阻塞态。
创建态:进程正在被创建时进入创建态。
结束态:进程正常结束,或者发生中断时进入结束态
(3)进程控制
① 进程的创建
创建:
- 为进程分配一个唯一的进程标识号,申请一个空白PCB
- 为进程分配资源,如内存空间
- 初始化PCB【标志信息、处理机状态信息、处理机控制信息、进程的优先级】
- 进入就绪队列
② 进程的终止
引发进程终止的事件:进程正常结束、异常结束、外界干预
撤销:
- 根据终止进程的标识号,检索PCB,读取该进程状态
- 若进程处于执行状态,则立即停止,并检查其是否有子孙进程,若有也停止
- 将该进程所拥有的资源,换给操作系统或其父进程
- 删除其PCB
③ 进程的阻塞和唤醒
阻塞:
- 找到要被阻塞进程标识号对应的PCB
- 若该进程为运行态,保护其现场,将其状态转化为阻塞态,停止运行
- 将该PCB插入等待队列,将处理机资源调度给其它就绪进程
唤醒:
- 在等待队列找到相应进程的PCB,将其移出,状态设置为就绪态
- 将PCB插入就绪队列,等待调度
(4)进程的组织
进程由三部分组成:程序段、数据段和PCB(进程控制块),最核心的是PCB,是进程存在的唯一标志。
- PCB:
- 进程描述信息:
- 进程标识符:标志各个进程,每个进程都有唯一的标识符(号)
- 用户标识符:进程归属的用户
- 进程控制信息:
- 进程状态:描述进程的状态信息,作为处理机分配调度的依据
- 进程优先级:进程抢占处理机的优先级
- 资源分配清单:用于说明有关内存地址空间或虚拟空间的状况。【代码段指针、数据段指针、文件描述符、鼠标、键盘等】
- 处理机相关信息:处理机中各种寄存器的值,当进程切换时,处理机状态都必须保存在相应的PCB中
- 进程描述信息:
- 程序段:能被进程调度程序调度到CPU执行的程序代码段
- 数据段:一个进程的数据段,进程加工处理的数据,或者进程运行的结果
(5)进程的通信【字节一面被问到】
进程的通信是指进程之间的数据交换。通信方法通常为三类:共享内存、消息传递、管道通信。
① 共享内存
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行读/写操作实现进程之间的信息交换。进程空间一般独立,运行期间不能相互访问,由操作系统负责提供可共享使用的存储空间和同步互斥工具,数据的交换由用户的读写指令完成。
② 消息传递
若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现通信。进程通过系统提供的发送消息原语和接收消息原语进行数据交换。消息传递又分为直接通信方式和间接通信方式。
- 直接通信方式:发送进程直接把消息发送给接收进程,消息会放置在接收进程的消息缓冲队列上,接收进程从消息缓冲队列取得数据
- 间接通信方式:发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息,这个实体一般称为信箱。例如,计算机网络中的电子邮件系统SMTP。
③ 管道通信
管道指用于连接一个发送进程和一个接收进程实现通信的共享文件,又名pipe文件,管道即文件。管道通信是半双工通信,在管道通信中,pipe文件只允许一边写入,另一边读出,数据读出后便被管道抛弃。若要实现两个进程都能写入和读取,则需要建立两个管道,即使用两个pipe文件。
(6)线程
① 概念
线程:线程是进程的一个实体,是被系统独立调度和分派的基本单位
② 线程的属性
- 线程不拥有系统资源,但每一个线程都有一个唯一标识符和线程控制块。
- 同一进程中的各个线程共享该进程所拥有的资源
③ 线程的实现
线程的实现可分为两类:用户级线程和内核级线程。
- 用户级线程:有关线程管理的工作都由应用程序完成,内核意识不到线程的存在,线程通过应用程序使用线程库设计创建,如Java中的Runnale,Thread。
- 内核级线程:线程管理的所有工作由内核完成。
2、处理机调度
(1)调度的定义
处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法选择一个进程,并将处理机分配给它允许,以实现进程并发地执行。
(2)调度的层次——三级调度
一个作业从提交到完成,要经历以下三级调度:
- 作业调度:高级调度,主要任务是从外存调度作业,为其分配内存等资源,建立相应进程。
- 内存调度:中级调度,主要任务是将暂时不能运行的进程调度到外存中等待,此时的进程称为挂起态。
- 进程调度:低级调度,主要任务是按照一定算法从就绪队列选取一个进程,将处理机分配给它。
三级调度之间的联系:作业调度将任务调度从外存调度到内存,为任务建立进程,进程调度从就绪队列中调度进程并分配处理机资源,为了提高内存利用率,内存调度将暂时不能运行的进程挂起到外存,等到该进程具备运行条件时,又将其调回内存。
(3)进程的调度与切换
进程调度和进程切换是操作系统内核程序,请求调度的事件发生后,运行调度程序,调度了新的就绪进程,进行进程切换。
不能调度与切换的情况:
- 处理中断
- 原子操作
- 进程占用内核临界区
应该调度和切换:
- 进程无法执行并发送调度条件
- 中断处理结束
(4)进程调度方式
- 非抢占方式:当一个进程在处理机上执行时,直到该进程执行完成或发生某种事件进入阻塞态,才会把处理机分配给更为重要的进程。
- 抢占方式:当一个进程在处理机上执行时,遇到某个更为重要的进程需要使用处理机,会立即暂停当前正在执行的进程,将处理机分配给更重要的进程。
(5)典型调度算法
- 先来先服务算法
- 短作业优先算法
- 优先级调度算法
- 多级反馈队列调度算法:
- 设置多个就绪队列
- 赋予各个队列中进程执行的时间片大小各不同:优先级越高的队列,进程时间片越小
- 一个新进程进入内存后,先放入第一级末尾,若在一个时间片内没有执行完毕,转入下一级队列
- 当第一级队列为空时,才开始执行后续队列进程运行
3、进程同步
(1)基本概念
- 临界资源:一次仅允许一个进程使用的资源,称为临界资源,可将临界资源的访问分为四个阶段。
- 进入区:当进程为了获取临界资源进入临界区时,会进行判断可否进入,进入后设置访问临界区的标志,阻止其它进程进入
- 临界区:进程中访问临界资源的代码
- 退出区:将正在访问临界区的标志去除
- 剩余区:代码中剩余部分
- 同步:直接制约关系,是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。
- 互斥:间接制约关系,当一个进程进入临界区使用临界资源时,另一个进程必须等待。
(2)实现临界区互斥的方法
- 软件实现:在进入区设置进程访问临界区的标志,若已有进程处于临界区,则循环检查进入等待
- 硬件实现:
- 中断屏蔽方法:当进程正在处理临界区代码时,禁止一切中断发生(关中断),因为只有在CPU发生中断时才会进行进程切换,屏蔽中断后则会使当前进程执行完毕。【执行效率低】
- 硬件指令方法:为临界资源设置一个共享布尔变量lock,进程访问临界资源前,利用TestAndSet检查和修改标志lock,若有进程在临界区,则重复检查直到临界区进程退出
(3)信号量
信号量机制是功能较强的机制,它只能被两个标准原语访问:wait(S)和signal(S)访问,也可记为“P操作”和“V操作”。
PV操作在同步互斥的应用:若某个进程要用到某种资源时,先进行P操作(wait(S),S代表信号量),表示该资源已经被访问,此时该资源不能被访问。当某个进程要释放或提供某种资源时,会进行V操作(signal(S)),指资源可用,这时需要使用该资源的进程就会从阻塞态转为就绪态。
4、死锁
(1)死锁的概念
多个进程因竞争资源而造成的互相等待的僵局,若无外力作用,陷入僵局的进程无法推进
(2)死锁产生的原因
当系统中拥有不可剥夺资源且其数量不足以满足多个进程允许需要时,进程在允许中会因争夺资源而陷入僵局。又或者进程在运行过程中,请求和释放资源的顺序不当,也会造成死锁。
造成死锁的四个必要条件:
- 互斥条件:资源的使用具有互斥性
- 不剥夺条件:进程获取一个资源后不能,在使用结束前不能被剥夺
- 请求并保持条件:进程保持了一个资源,提出了新的资源请求,该资源已经被其它进程占用
- 循环等待条件:A等待B,B等待C,C等待A
(3)死锁的处理
① 预防死锁
设置某些限制条件,破坏产生死锁的四个必要条件中的一个或几个
- 破坏互斥条件:让所有资源共享【基本不可行】
- 破坏不剥夺条件:当一个保持某个互斥资源的进程请求新的资源得不到满足时,它必须释放已经保持的所有资源【实现复杂,增加系统开销】
- 破坏请求并保持条件:采用预先静态分配的方法,在进程运行前一次性进行资源的申请,若资源不满足则不能运行,一旦运行,直到结束才释放资源【资源浪费,“饥饿现象”】
- 破坏循环等待条件:采用顺序资源分配法,给系统中的资源编号,规定每个进程必须按编号的顺序请求资源。【限制新资源的增加】
② 避免死锁
在资源动态分配中,用某种方法放置系统进入不安全状态。
设定系统安全状态,在系统分配资源前,先进行此次分配的安全性计算,若此次分配会导致系统进入不安全状态,则不允许分配。
避免死锁的经典算法——银行家算法:
- 设定角色【操作系统-银行家、资源管理-资金管理、请求资源-请求贷款】
- 进程允许前先声明对各种资源的最大需求量,当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过该进程所声明的最大需求量,若超过则拒绝分配。【你需要多少就分配多少】
- 若不超过,再测试系统现存资源能否满足该进程尚需的最大资源量,若不满足,则推迟分配。【我有多少才能给你多少】
③ 死锁的检测及接触
通过系统的检测机构及时地检测死锁的发生,然后采取以下方法接触死锁:
- 资源剥夺法:将死锁进程的部分进行挂起,抢占其资源,分配到其它死锁进程
- 撤销进程法:强制撤销部分甚至全部死锁进程,并剥夺这些进程的资源
- 进程回退法:让一个进程或多个进程回退到发生死锁之前的点
三、内存管理
1、内存管理概念
(1)内存管理的基本原理和要求
① 内存管理的功能
- 内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦
- 地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此内存管理需要提供地址变换功能,把逻辑地址转换为相应的物理地址
- 内存空间的扩充:利用怩存储技术或自动覆盖技术,从逻辑上扩充内存
- 存储保护:保证各道作业在各自的存储空间中允许,互不干扰
② 程序的装入和链接
创建进程首先要将程序和数据装入内存,将用户源程序变为可在内存中执行的程序,通常需要以下步骤:
- 编译:由编译程序将用户源代码编译成若干目标模块
- 链接:由链接程序将编译后形成的一组目标模块及所需的库函数链接在一起,形成完整的装入模块
- 装入:由装入程序将装入模块装入内存中运行
程序的链接有以下三种方式:即代表在不同时段进行链接操作
- 静态链接
- 装入时动态链接
- 运行时动态链接
内存的装入也有三种方式:
- 绝对装入:装入程序按照装入模块的地址,将程序和数据装入内存,程序的逻辑地址和实际内存地址完全相同【只适合单道程序环境】
- 静态重定位装入:根据内存的当前情况,将装入模块装入内存的适当位置,即一个作业装入内存时必须给它分配要求的全部内存空间,若内存不够则不允许装入【多道程序环境】
- 动态重定位装入:装入程序把装入模块装入内存后,程序执行时才进行装入模块中的相对地址转换为绝对地址,装入内存后的所有地址均为相对地址。
- 该方法可以将程序分配到不连续的存储区中,在程序运行时,根据需要动态申请分配内存。
(2)逻辑地址空间和物理地址空间
编译后,每个目标模块都从0号单元开始存储和访问,这个地址称为其逻辑地址,而其实际存储的地址称为物理地址空间。
当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换为物理地址。
(3)内存保护
在内存分配前需要保护操作系统不受用户进程的影响,同时保护用户进程不受其他用户进程的影响,内存保护包含两种方法:
- 在CPU中设置一对上、下限寄存器,存放用户作业在主存下的下限和上限地址,每当CPU要访问一个地址时,分别和两个寄存器的值相比,判断有无越界。
- 采用重定位寄存器和界地址寄存器,内存管理机构动态地将逻辑地址与界地址寄存器进行比较,若未发生地址越界,加上重定位寄存器的值后映射为物理地址
- 重定位寄存器:保存最小的物理地址值,用来加完成物理地址的映射
- 界地址寄存器:保存逻辑地址的最大值,用来比,装入内存时进行逻辑地址的越界判断
2、内存分配管理
(1)连续分配管理方式
连续分配方式是指为一个用户程序分配一个连续的内存空间,连续分配方式主要包括单一连续分配、固定分区分配和动态分区分配。
① 单一连续分配
内存划分为系统区和用户区,系统区供操作系统使用,用户区供用户使用,这种方式下无须进行内存保护。内存只允许一道程序执行,只适用于单用户、单任务的操作系统,产生大量的内存碎片(内部碎片)。
② 固定分区分配
将用户内存空间划分为若干固定大小的区域,每个分区只装入一道作业。
-
分区大小相等:缺乏灵活性
-
分区大小不等:适用更多作业
缺点:产生内存碎片(内部碎片),当程序过大可能无法找到合适分区
③ 动态分区分配
不预先划分内存,在进程装入程序时,根据进程的大小动态地建立分区,并使分区大小正好适合进程的需要。但是因为其依旧为连续内存分配,在装入撤出的过程中还是会产生内存碎片(外部碎片),在进程装入或换入主存时,若内存有多个足够大的空闲块,则操作系统必须确定分配哪个内存块给进程使用,有以下分配策略算法:
- 首次适应:空闲分区以地址递增的次序链接,分配时顺序查找【数组结构】
- 最佳适应:空闲分区按容量递增的次序链接,分配时顺序查找(按容量进行分配,容易产生外部碎片)
- 最坏适应:空闲分区按容量递减的次序链接,分配时顺序查找
- 临近适应:空闲分区以地址递增的次序链接,分配时从上次查找结束的位置继续查找
(2)非连续分配管理方式
非连续分配允许一个程序分散地装入不相邻的内存分区。固定分区会产生内部碎片,动态分区会产生外部碎片,两种技术对内存的利用率都较低,由此产生非连续分配管理。
非连续分配管理方式根据分区大小是否固定,分为分页存储管理方式和分段存储管理方式。
分页存储管理方式根据是否将作业所有页面都装入内存才能运行,分为基本分页存储管理方式和请求分页存储管理方式。
① 基本分页存储管理方式
把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。
按“块”进行一一对应大小的分配,只会在进程的最后一个块(装不满的情况)产生业内碎片。
- 分页存储的几个基本概念
- 页面和页面大小:进程中的块称为页(Page),内存中的块称为页框(Page Frame),外存也以同样的方式进行划分。进程在执行时申请主存空间,即为每个页分配页框
- 地址结构:
- 页号P
- 页内偏移量W
- 页表:为了便于在内存中找到进程的每个页面所对应的物理块,系统为每一个进程建立一张页表,记录页面在内存中对应的物理块号,页表一般存放在内存中
-
基本地址变换机构
通过页表将逻辑地址转换为内存中的物理地址
② 基本分段存储管理方式
分页管理是从计算机的角度考虑设计的,目的是提高内存的利用率。分段管理考虑用户的使用和程序的编写。
-
分段
段式管理方式按照用户进程中的自然段划分逻辑空间,将用户进程分为n段,每段从0开始编址,为每个段分配连续的地址空间(段内连续,段间不连续)
-
段表
每个进程都有一张逻辑空间与内存空间映射的段表,每个段表项对应进程的一段,段表项对应该段在内存中的起始地址和长度
-
地址变换机构
通过段表实现逻辑地址到物理地址的变换
③ 段页式管理方式
将页内存储和分段存储结合形成了段页式管理方式。
段页划分:作业的地址空间首先被分成若干逻辑段,每段都有自己的段号,然后将每段分成若干大小固定的页。将内存空间分成若干和页面大小相同的存储块,对内存的分配以存储块为单位。
作业的逻辑地址:段号、页号和页内偏移量。
地址变换:系统为每个进程建立一张段表,每个分段建立一个页表。段表中包括段号、页表长度和页表起始地址。页表包括页号和块号。此外还有一个段表寄存器,指出作业的段表起始地址和段表长度。在地址变换时,首先通过段表查到页表起始地址,然后通过页表找到页帧号,最后形成物理地址。
3、虚拟内存管理
(1)相关基本概念
① 局部性原理
局部性原理表现在两个方面:
- 时间局部性:程序中某条指令被执行,不久后可能再执行
- 空间局部性:程序访问的存储单元可能集中在一定范围内
② 虚拟存储器
基于局部性原理,在程序装入时,将程序一部分装入内存,其余部分留在外存,就可以启动程序执行。程序执行过程中,当访问的信息不在内存时,由操作系统将所需要的部分调入内存并将暂时不使用的内容换到外存,然后继续执行程序。这样系统为用户提供比实际内存大得多的容量,称为虚拟存储器(虚拟存储技术)。
虚拟存储有以下特征:
- 多次性:无须在作业运行时一次性地全部装入内存
- 对换性:允许程序在运行过程中,进行换入和换出
- 虚拟性:从逻辑上扩充内存的容量
③ 虚拟内存技术的实现
虚拟内存技术允许将一个作业分多次调入内存,如果采用连续分配的方式,总会有一部分内存空间都处于空闲状态。因此虚拟内存的实现需要建立在离散分配的内存管理方式上。
虚拟内存实现有三种方式:请求分页存储管理、请求分段存储管理、请求段页式存储管理。无论哪种方式都需要以下硬件支持:
- 一定容量的内存和外存
- 页表机制(段表机制),作为主要的数据结构
- 中断机制,当程序要访问的部分尚未调入内存时,产生中断
- 地址变换技术,逻辑地址到物理地址的变换
(2)请求分页管理方式
请求分页系统建立在基本分页系统基础之上,增加了请求调页功能和页面置换功能,请求分页是最常用的虚拟存储器技术。
在请求分页系统中,只要求将当前需要的一部分页面装入内存,便可以启动作业运行。在程序运行过程中,当所要访问的内容不在内存中时,通过请求调页功能将其调入,通过页面置换功能将暂时不用的页面换到外存上。实现请求分页,除了这两个功能以外,系统还需要提供一定容量的内存和外存,页表机制、缺页中断机制和地址变换机制。
① 页表机制
请求页表项增加了4个字段,用于发现要访问的页面在不在内存中和该情况的处理。四个字段为:
- 状态位P:用于指示该页是否已调入内存
- 访问字段A:用于记录本页被访问的次数,或记录没有被访问的时间
- 修改位M:标识该页在调入内存后是否被修改
- 外存地址:用于指出该页在外存上的地址,通常为物理块号
② 缺页中断机制
当所要访问的页面不在内存中时,便产生一个缺页中断,请求操作系统将所缺的页调入内存。缺页中断作为中断,也要经历保护CPU环境、分析中断原因、转入缺页中断处理程序、恢复CPU环境等几个步骤。与一般中断相比,它有两个明显的区别:
- 在指令执行期间而非一条指令执行完后产生和处理中断信号,属于内部中断
- 一条指令在执行期间,可能产生多次缺页中断
③ 地址变换机制
在进行地址变换前,先检索快表:
- 若找到要访问的页,则修改页表项中的访问位,然后利用页表项中给出的物理块号和页内地址形成物理地址;
- 若未找到该页的页表项,则应到内存中取查找页表,再对比页表项中的状态位P,看该页是否已调入内存,未调入则产生缺页中断,请求从外存把该页调入内存。
(3)页面置换算法
进程运行时,若访问的页面不在内存中则需要将其调入,当内存无空闲空间时,需要从内存中调出一页程序或数据,送入磁盘的对换区。选择调出页面的算法就称为页面置换算法。常见的页面置换算法有四种:
- 最佳置换算法(OPT):选择被淘汰的页面是以后永不使用的页面,或最长时间不再被访问的页面,无法知道哪个页面永不访问,该算法难以实现
- 先进先出置换算法(FIFO):优先淘汰最早进入内存的页面,即驻留在内存中最久的页面。
- 只需要把调入内存的页面根据先后次序链接成队列,指针指向最早进入的页面(头节点)。【性能差】
- 最近最久未使用置换算法(LRU):认为过去一段时间未被访问的页面,在最近的将来可能也不会访问,选择最近最长时间未访问过的页面予以淘汰。
- 该算法为每个页面设置一个访问字段,记录页面自上次被访问以来经历的时间,淘汰页面时选择现有页面中未被访问时间最大的予以淘汰。【开销大】
- 时钟置换算法(CLOCK):是一种性能和开销相对均衡的算法。也被称为最近未使用算法,简单的CLOCK算法为页面设置一个访问位,再将内存中的页面通过链接指针链接成一个循环队列。
- 当某页被访问的时候,其访问位置设置为1。当淘汰一个页面的时候,只需要检查页的访问位,如果是0,就选择将该页换出(之前没被访问过);如果是1,则将其置换为0,暂时不换出(上次访问过,可能还会继续访问)。然后接着检查下一个页面,如果第一轮扫描结束后,所以的页面的访问位都是1,则会将这些页面全部置0,再进行第二次扫描(第二轮扫描中肯定有为0的页面)。因此,简单的CLOCK算法选择淘汰一个页面最多经过两轮扫描。
(4)页面分配策略
① 驻留集
在进程准备执行时,不需要将进程的所有页面加载到内存,这就需要决定给特定的进程分配几个页框,给一个进程分配的物理页框的集合就是这个进程的驻留集,分配需要考虑以下几点:
- 分配给一个进程的存储量越小,任何时候驻留在内存的进程数就越多,可以提供处理机的时间效率
- 若一个进程在内存中的页数过少,页错误率就会较高
- 若页数过多,根据局部性原理,给特定的进程分配更多的内存工具对该进程的错误率没有明显的影响
考虑以上三点因素,通常有以下三种分配策略:
- 固定分配局部置换:为每一个进程分配一定数目【难以确认】的物理块,在整个运行期间都不改变,若进程在运行中发生缺页,则只能从该进程在内存中的页面中选出一页换出,然后调入需要的页面
- 可变分配全局置换【最容易实现】:为每个进程分配一定数目的物理块,操作系统自身保持一个空闲物理块队列,当某进程发生缺页时,系统从空闲物理块队列中取出一个物理块分配给该进程,将欲调入的页装入其中。【盲目分配空闲物理块,导致并发能力下降】
- 可变分配局部置换:为每个进程分配一定数目的物理块,操作系统自身保持一个空闲物理块队列,当某进程发生缺页时,只允许从该进程的内存页面中选出一页换出,若该进程在运行中频繁进行换页操作,则系统会为其分配若干物理块,知道该进程的缺页率降低到一定程度。
② 调入页面的时机
为确定系统将进程运行时所缺页面调入内存的时机,可采取以下两种调页策略。
- 预调页策略:根据局部性原理,一次调入若干相邻的页可能比一次调入一页更高效,采取预测的手段,将预计不久后会访问到的页面预先调入内存
- 请求调页策略:进程在运行时需要访问的页面不在内存中时,发出请求调页请求,缺点是一次只调入一页,调入调出次数过多会花费较大开销。
③ 调入页面的来源
请求分页系统中的外存分为两部分,用于存放文件的文件区和用于存放对换页面的对换区。对换区通常采用连续分配的方式,文件区采用离散分配的方式,对换区的IO速度更快。
- 系统拥有足够的对换区空间:可以全部从对换区调入所需页面,以提高调页速度。在进程运行前,将与该进程有关的文件从文件区复制到对换区。
- 系统缺少足够的对换区空间:凡不会被修改的文件,直接从文件区调入;可能被修改的页面,将他们换出时须调到对换区,以后需要时再入对换区调入
- UNIX方式:与进程有关的文件都放在文件区,未运行的页面对从文件区调入,运行过的页面调出时放在对换区。
四、文件管理
1、文件系统基础
文件是输入输出的基本单位,是用户操作的基本单位。按照逻辑结构可分为流式文件(无结构文件)和记录式文件(有结构文件)。
- 流式文件:无结构,穷举搜索
- 记录式文件:
- 顺序文件:顺序存储【顺序查找】
- 索引文件:通过索引表来访问文件【索引查找】
- 索引顺序文件:为顺序存储的文件创建索引表【索引顺序查找】
- 直接文件/散列文件:以哈希表的形式存储【哈希查找】
2、文件管理
(1)文件保护
为了防止文件共享导致文件被破坏或未经核准的用户修改文件,文件系统为此建立了两种保护机制
- 访问类型限制:限定某些文件的读、写、执行、添加、删除、重命名、编辑等操作
- 访问权限控制:限定某些用户的访问权限,或者对相应的文件进行加密
(2)文件实现——分配与存储管理
文件是一种抽象数据类型,文件的物理结构就是其在物理存储设备上是如果分布和组织的,即研究其分配方式和文件存储空间管理。
① 文件分配
文件分配对应于文件的物理结构,指如何为文件分配磁盘块。常用的磁盘分配方式有连续分配、链接分配、索引分配。
- 连续分配:每个文件在磁盘上占有一组连续的块
- 链接分配:离散分配,消除外部碎片,动态分配磁盘块,通过指针搜索来访问
- 索引分配:链接分配不能直接进行访问,索引分配为每个文件建立索引块,即建立索引表,通过索引表进行文件的访问
② 文件存储管理
文件存储设备通常分成许多大小相同的物理块,文件存储设备的管理实际上是对空闲块的组织和管理。
3、磁盘组织与管理
磁盘是由表面涂有磁性物质的金属或塑料构成的圆形盘片。
五、I/O管理
I/O管理就是对I/O设备的管理,I/O设备分为人机交互外部设备【鼠标、键盘、打印机】、存储设备【磁盘、光盘】、网络通信设备【网络接口】
——————————————————
作者:未来村村长
参考:《2022年王道操作系统》——王道论坛编著
图源:网络
个人网站:www.76pl.com
👨🌾点个关注,在未来村不会迷路👩🌾
——————————————————