操作系统-思维导图整理
自制思维导图
文章目录
- 操作系统
- 基础
- 概述
- 功能和目标
- 发展阶段
- 中断和异常
- 系统调用
- 运行机制和体系结构
- 进程
- 概念
- 进程状态
- 进程控制
- 进程通信
- 线程、多线程模型
- 进程互斥和同步
- 死锁
- 处理机调度
- 基本概念
- 进程调度
- 算法调度评价指标
- 调度算法分类
- 内存
- 基础知识
- 内存空间的分配
- 内存空间的扩充(实现虚拟性)
- 内存管理
- 文件管理
- 基础
- 文件的逻辑结构
- 文件目录
操作系统
基础
概述
概念(定义)
- 负责管理协调硬件、软件等计算机资源的工作
- 为上层用户、应用程序提供简单易用的服务
- 是一种系统软件
基本特征
共享
所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)
生活实例:
互斥共享方式:使用QQ和微信视频。同一时间段内摄像头只能分配给其中一个进程。
同时共享方式:使用QQ发送文件A,同时使用微信发送文件B。宏观上看,两边都在同时读取并发送文件,
说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的。互斥共享-对摄像头的共享使用
- 一个时间段内只允许一个进程访问该资源
同时共享-对硬盘资源的共享使用
- 允许一个时间段内由多个进程“同时”对它们进行访问
并发
- 并发:老渣分开约两个
- 并行:小渣一次约两个
虚拟
虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。
空分复用技术-虚拟存储技术
时分复用技术-虚拟处理器技术
虚拟技术中的“时分复用技术”。微观上处理机在各个微小的时间段内交替着为各个进程服务
异步
异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,
而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
功能和目标
资源的管理者
- 处理机管理-qq的正常运行
- 存储器管理-打开qq.exe,进程进内存
- 文件管理-文件夹里qq.exe
- 设备管理-qq聊天开摄像头
向上层提供服务
给普通用户的
GUI用户图形界面
命令接口
联机命令接口
- 交互命令接口:用户说一句,系统做一句
脱机命令接口
- 批处理命令接口:用户说一堆,系统做一堆
给程序员的
程序接口
- 即系统调用
对硬件机器的扩展
没有任何软件支持的计算机成为裸机。在裸机上安装的操作系统,
可以提供资源管理功能和方便用户的服务功能,将裸机改造成功能
更强、使用更方便的机器
通常把覆盖了软件的机器成为扩充机器,又称之为虚拟机
发展阶段
手工阶段
- 人机速度矛盾
批处理阶段
单道批处理
- 优:缓解人机速度矛盾
- 缺:资源利用率低
多道批处理(操作系统开始出现)
- 优:资源利用率高
- 缺:不能人机交互
分时操作系统
- 优:提供人机交互
- 缺:不能优先处理紧急业务
实时操作系统
硬实时操作系统
- 必须在绝对严格的规定时间内完成处理-导弹控制系统,自动驾驶系统
软实时操作系统
- 能接受偶尔违反时间的规定-12306火车订票系统
其他
- 网络操作系统
- 分布式操作系统
- 个人操作系统
中断和异常
中断的作用
- 让操作系统强行夺回CPU的控制权
- 使CPU从用户态变为内核态
中断的分类
内中断(也称“异常、例外”)
与当前执行的指令有关,
中断信号的来自CPU内部陷阱
由陷入指令引发,是应
用程序故意引发的,用于系统调用故障
由错误条件引起的,可能被
内核程序修复。内核程序修
复故障后会把 CPU使用权还
给应用程序,让它继续执行
下去。如:缺页故障。终止
由致命错误引起,内核程序无法
修复该错误,因此一般不再将CPU
使用权还给引发终止的应用程序,
而是直接终止该应用程序。如:
整数除0、非法使用特权指令
外中断(也称“中断”)
与当前执行的指令无关,
中断信号的来自CPU外部- 时钟中断
- I/O中断请求
中断的处理过程
- 每条指令执行结束后,CPU检查是否有外部中断信号
- 如果有外部中断信号,则需要保护被中断进程的CPU环境
- 根据中断信号类型转入相应的中断处理程序
- 恢复原进程的CPU环境并退出中断,返回原进程继续往下执行
系统调用
“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用
程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务
为什么要用
- 同时打印例子-保证系统的稳定性和安全性
是什么
- 操作系统对应用程序/程序员提供的接口
适用范围
- 与共享资源有关的操作(如存储分配、I/O操作、文件管理、设备管理等)
和库函数的区别
- 有的库函数是对系统函数的进一步封装
- 有的库函数没有使用系统调用
调用过程
- 1.传递系统调用参数
- 2.执行陷入/Trap/访管指令
- 3由操作系统内核程序处理系统调用请求
- 4.返回用户程序
运行机制和体系结构
运行机制
指令
- 特权指令
- 非特权指令
处理器状态
- 核心态
- 用户态
程序
- 内核程序
- 应用程序
操作系统内核
时钟管理
- 实现计时功能
中断处理
- 负责实现中断机制
原语(设备驱动,cpu切换等)
- 是一种特殊的程序
- 处于操作系统最底层,是最接近硬件的部分
- 这种程序运行具有原子性–运行不可中断
- 运行时间较短,调用频繁
对系统资源进行管理的功能
- 进程管理
- 存储器管理
- 设备管理
体系结构
大内核-类比创业公司,管理员多职务
- 优:高性能
- 缺:代码庞大,结构混乱,维护困难
微内核-类比大公司,管理员职务单一
- 优:内核功能少,结构清晰,方便维护
- 缺:需要频繁地在内核态和用户态之间切换,性能低
进程
概念
定义
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
组成
PCB是给操作系统用的,程序段、数据段是给进程自己用的。
PCB
PCB是进程存在的唯一标志。
- 进程描述信息
- 进程控制和管理信息
- 资源分配清单
- 处理机相关信息
程序段
- 存放要执行的程序代码
数据段
- 存放程序运行过程中处理的各种数据
组织形式
链接方式
- 按进程状态将PCB分为多个队列
索引方式
- 按照进程状态建立几张索引表,各表项指向一个PCB
特征
动态性
- 进程最基本的特性
并发性
独立性
- 进程是系统进行资源分配、调度的独立单位
异步性
- 各进程以不可预知的速度向前推进,可能导致进程结果的不确定性
结构性
进程状态
状态
创建态
- 进程正在被创建,操作系统为进程分配资源、初始化、PCB
就绪态
- 万事俱备,只欠CPU:已经具备运行条件,但由于没有空闲CPU,暂时不能运行
运行态
- 占有CPU资源,并在CPU上运行
阻塞态/等待态
- 因等待某一事件而暂时不能运行
终止态
- 进程正从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB
状态之间的转换
就绪-运行
- 进程被调度
运行-就绪
- 时间片到,或CPU被其他高优先级的进程抢占
运行-阻塞
- 等待系统资源分配,或等待某时间发生。(中断处理)是主动行为
阻塞-就绪
- 资源分配到位,等待的事件发生。是被动行为
创建-就绪
- 系统完成创建进程相关的工作
运行-终止
- 进程运行结束,或运行过程中遇到不可修复的错误。如除0
进程控制
基本概念
进程控制就是实现进程状态之间的转换
进程控制用原语实现
原语用关/开中断实现
原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。
可以用 “关中断指令”和“开中断指令”这两个特权指令实现原子性原语是一种特殊的程序
原语的执行必须一气呵成,不可中断
相关原语
进程控制会导致进程状态的转换。无论哪个进程控制原语,要做的无非三类事情:
- 更新PCB中的信息
a. 所有的进程控制原语一定都会修改进程状态标志
b. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
c. 某进程开始运行前必然要恢复期运行环境 - 将PCB插入合适的队列
- 分配/回收资源
- 进程的创建
- 进程的终止
- 进程的阻塞
- 进程的唤醒
- 进程的切换
- 更新PCB中的信息
进程通信
共享存储
设置一个共享空间
要互斥地访问共享空间
两种方式
- 基于数据结构(低级)
- 基于存储区的共享(高级)
管道通信
- 设置一个特殊的共享文件(管道),其实就是一个缓冲区
- 一个管道只能实现半双工通信
- 实现双向同时通信要建立两个管道
- 各进程要互斥访问管道
- 写满时,不能再写。读空时,不能再读。
- 没写满,不能读。没读空,不能再写
消息传递
传递结构化的消息(消息头/消息体)
系统提供“发送/接受原语“
两种方式
直接通信方式
- 消息直接挂到接收方的消息队列里
间接(信箱)通信方式
- 消息先发到中间体(信箱)
线程、多线程模型
概念
- 可理解为“轻量级进程”
- 可增加并发度,减少并发带来的开销
引入线程机制后,和传统的进程机制对比
- 资源分配、处理机调度
- 并发性
- (实现并发的)开销
重要属性
- 线程是处理机调度的单位,进程是资源分配的单位
- 同一进程的各线程共享进程进程拥有的资源
- 同一进程内的线程切换不会导致进程切换
实现方式
用户级线程
- 从用户视角看的线程
内核级线程
- 从操作系统视角看的线程(内核级线程才是处理机分配的单位)
组合方式
- 上述两种方式的组合
多线程模型
多对一模型
- 优:进程管理开销小效率高
- 缺:一个线程阻塞会导致整个进程都被阻塞(并发度低)
一对一模型
- 优:各个线程可分配到多核处理机并执行,并发度高
- 缺:进程管理开销大
多对多模型
- 集合了两者的优点
进程互斥和同步
概念
进程同步
- 解决进程异步后不能按照指定的先后顺序执行的问题
进程互斥
对临界资源的访问,需要互斥的进行,即同一时间段内只能允许一个进程访问该资源
四个部分
进入区
- 检查是否可进入临界区,若可进入,需要“上锁”
临界区
- 访问临界资源的那段代码
退出区
- 负责“解锁”
剩余区
- 其余代码部分
需要遵循的原则
空闲让进
- 临界区空闲时间,应允许一个进程访问
忙则等待
- 临界区正在被访问时,其他试图访问的进程需要等待
有限等待
- 要在有限时间内进入临界区,保证进程不会饥饿
让权等待
- 进入不了临界区的进程,要释放处理机,防止忙等
进程互斥软件实现方法
单标志法
- 在进入区只做“检查”,不上锁
- 违背“空闲让进”原则
双标志先检查法
- 在进入区先“检查”,后“上锁”,退出区“解锁”
- 违背“忙则等待”原则
双标志后检查法
- 在进入区“先加锁”后检查,退出区“解锁”
- 解决了“忙则等待”,但违背“空闲让进”、“有限等待”原则
Peterson算法
- 在进入区“主动争取-主动谦让-检查对方是否想进、己方是否谦让”
- 不遵循让权等待
进程互斥硬件实现方法
中断屏蔽方法
- 使用“开/关中断”指令实现
- 优点:简单高效
- 缺点:只适用于单处理机、操作系统内核进程
TestAndSet(Ts指令/TSL指令)
- 优点:实现简单,使用多处理机环境
- 缺点:不满足“让权等待”
Swap指令(XCHG指令)
- 优点:实现简单,使用多处理机环境
- 缺点:不满足“让权等待”
信号量机制
整形信号量
- 用一个整数型变量作为信号量,数值表示某种资源数
- 对信号量只能执行初始化、P、V三种操作
- 不满足让权等待原则
记录型信号量
- S.value表示某种资源数,S.L指向等待该资源的队列
- P操作中,一定是S.value–,之后可能需要执行block原语
- V操作中,一定是S.value++,之后可能需要执行wakeup原语
- 可以用记录型信号量实现系统资源的申请和释放
- 可以用记录型信号量实现进程互斥、进程同步
信号量实现进程互斥
- 设置互斥信号量,初始值为1
- 临界区之前对信号量执行P操作
- 临界区之后对信号量执行V操作
信号量实现进程同步
- 设置同步信号量,初始值为0
- 在“前操作”之后执行V操作
- 在“后操作”之前执行P操作
管程
为什么要引入
- 解决信号量机制编码麻烦、易出错的问题,封装成一个对象,通过函数调用
组成
- 共享数据结构
- 对数据结构的初始化语句
- 调用数据结构的函数
基本特征
- 各外部进程/线程只能通过访问特定的“入口”才能访问共享数据
- 每次仅允许一个进程在管程内执行某个内部过程
其他
- 各进程必须互斥访问管程的特性是由编译器实现的
- 可在管程中设置条件变量及等待/唤醒操作以解决同步问题
- 在java中通过关键字synchronized实现
死锁
概念
各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进
死锁、饥饿、死循环
- 死锁:至少两个进程一起死锁,死锁进程处于阻塞态
- 饥饿:可以只有一个进程饥饿,饥饿进程可能阻塞也可能就绪
- 死循环:可能只有一个进程发生死循环,死循环的进程可上处理机
- 死锁和饥饿是操作系统要解决的问题,死循环是应用程序员要解决的
死锁产生的条件
互斥条件
不剥夺条件
请求和保持条件
- 保持着某些资源不放的同时,请求别的资源
循环等待条件
- 存在一种进程资源的循环等待
- 循环等待未必死锁,死锁一定有循环等待
什么时候会发生
- 对不可剥夺资源的不合理分配
处理策略
预防死锁:破坏死锁产生的四个必要条件
破坏互斥条件
- 将临界资源改造为可共享使用的资源(如SPOOLing技术)
- 缺点:可行性不高,很多时候无法破坏互斥条件
破坏剥夺条件
- 申请资源得不到满足时,立即释放拥有的资源
- 申请的资源被其他进程占用时,由操作系统协助剥夺(考虑优先级)
- 缺点:实现复杂;剥夺资源可能导致部分工作失效;反复申请和释放导致系统开销大;可能导致饥饿
破坏请求和保持条件
- 运行前配好所有需要的资源,之后一直保持
- 缺点:资源利用率低,可能导致饥饿
破坏循环等待条件
- 给资源编号,必须按编号从小到大的顺序申请资源
- 缺点:不方便增加新设备;会导致资源浪费;用户编程麻烦
避免死锁:避免系统进入不安全状态
银行家算法
- 1.检查此次申请是否超过了之前声明的最大需求数
- 2.检查此时系统剩余的可用资源是否还能满足此次请求
- 3.试探着分配,更改各数据结构
- 4.用安全性算法检查此次分配是否会导致系统进入不安全状态
安全性算法
- 检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收
- 不断重复上述过程,看最终是否能让所有进程进入安全序列
死锁的检测和解除:允许死锁发生,系统负责检测出死锁并解除
检测
数据结构:资源分配图
两种节点
- 进程节点
- 资源节点
两种边
- 进程节点->资源节点
- 资源节点->进程节点
死锁检测算法
- 依次消除与不阻塞进程(申请资源数足够的进程)相连的边,直到无边可消
- 死锁定理:若资源分配图是不可完全简化的,说明发生了死锁
解除
- 资源剥夺法
- 撤销进程法(终止进程法)
- 进程回退法
处理机调度
基本概念
按某种算法选择一个进程将处理机分配给它
三个层次
高级调度(作业调度)
- 按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程
中级调度(内存调度)
- 按照某种规则,从挂起队列中选择合适的进程将其数据调回内存
低级调度(进程调度)
- 按照某种规则,从就绪队列中选择一个进程为其分配处理机
三层调度的联系、对比
高级调度
- 外存->内存(面向作业)
- 发生频率:最低
中级调度
- 外存->内存(面向进程)
- 发生频率:中等
低级调度
- 内存->CPU
- 发生频率:最高
进程调度
时机
什么时候需要进程调度
主动放弃
- 进程正常终止
- 运行过程中有异常终止
- 主动阻塞(等待I/O)
被动放弃
- 分给进程的时间片用完
- 有更晋级的事情需要处理(I/O中断)
- 有更高优先级的进程进入就绪队列
什么时候不能进程调度
- 在处理中断的过程中
- 进程在操作系统内核程序临界区中
- 原子操作过程中(原语)
切换与过程
切换过程
- 对原来运行进程各种数据的保存
- 对新的进程各种数据的恢复
结论
- 进程调度、切换是有代价的
- 并不是调度越频繁,并发度就越高
方式
非剥夺调度方式(非抢占式)
- 只能由当前运行的进程主动放弃CPU
剥夺调度方式(抢占式)
- 可由操作系统剥夺当前进程的CPU使用权
算法调度评价指标
CPU/设备利用率
- 忙碌时间/总时间
系统吞吐量
- 单位时间内完成了多少作业量
周转时间
- 周转时间:作业完成时间-作业提交时间
- 平均周转时间
- 带权周转时间:作业周转时间/作业实际运行时间
- 平均带权周转时间
等待时间
- 进程/作业处于等待处理机状态时间之和
响应时间
- 从用户提交请求到首次产生响应所用的时间
调度算法分类
先来先服务
- 优点:公平
- 缺点:对短作业不利
- 是否会导致饥饿:不会
- 是否可抢占:否
短作业优先
- 优点:“最短的”平均等待/周转时间
- 缺点:对长作业不利
- 是否导致饥饿:会
- 是否可抢占:是
高响应比
- 结合了上面两种
- 是否会饥饿:会
- 是否可抢占:否
时间片轮转
- 时间片不能太大,太大了会退化为先来先服务
- 时间片太小,进程切换频繁
- 优:公平,相应快,适用分时操作系统
- 缺:高频切换需要一定的开销,而且不区分任务的紧急程度
- 是否导致饥饿:不会
- 是否可抢占:是
优先级调度
- 优:可以用优先级区分各种紧急程度、重要程度,适用于实时操作系统
- 缺:若一直有高优先级的进程进来,则低优先级的进程会饥饿
- 是否饥饿:是
- 是否可抢占:是
多级反馈队列算法
- 对其他的算法进行权衡
- 是否可抢占:是
- 是否饥饿:是
- 优点:平衡优秀666
内存
基础知识
概念
- 内存可存放数据
- 缓和CPU与硬盘之间的速度矛盾
- 按字节编址vs按字编址
进程运行基本原理
指令的工作原理
- 操作码+若干参数(可能包含地址参数)
逻辑地址(相对地址)vs物理地址(绝对地址)
过程
编辑源代码文件
- .java编辑文件
编译
- 由源代码生成目标代码(高级语言翻译为机器语言)
- .class编译文件
链接
- 由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块,链接后形成完整的逻辑地址
- .obj目标文件
装入
- 由装入模块装入内存运行,装入后形成物理地址
- .exe可执行文件
三种链接方式
- 静态链接
- 装入时动态链接
- 运行时动态链接
三种装入模式
- 绝对装入
- 可重定位装入
- 动态运行时装入
内存空间的分配
连续分配管理方式
碎片
内部碎片
- 分配给某进程的内存区域中,如果有些部分没有用上
外部碎片
- 是指内存中的某些空闲分区由于太小而难以利用
单一连续分配
- 只支持单道程序,内存分为系统区和用户区,用户程序放在用户区
- 无外部碎片,有内部碎片
固定分区分配
支持多道程序,内存用户空间分为若干个固定大小的分区,每个分区只能装一道作业
无外部碎片,有内部碎片
两种分区方式
- 分区大小相等
- 分区大小不等
动态分区分配
支持多道程序,在进程装入内存时,根据进程的大小动态地建立分区
无内部碎片,有外部碎片
外部碎片可用“紧凑”技术来解决
相邻的空间分区要合并
算法
首次适应算法
- 思想:从头到尾找合适的分区
- 排序:空闲地区以地址递增次序排列
最佳适应算法
- 思想:优先使用更小的分区,以保留更多更大的分区
- 排序:空闲分区以容量递增排列
最坏适应算法
- 思想:优先使用更大的分区,以防止产生太小的不可用的碎片
- 排序:空闲分区以容量递减排列
领近适应算法
- 思想:在首次适应算法的基础上,每次从上次查找结束位置开始查找
- 排序:空闲分区以地址递增排列
非连续分配管理方式
基本分页存储管理
思想
- 把进程分页,各个页面可离散地放到各个的内存块中
计算
- 页号=逻辑地址/页面大小
- 页内偏移量=逻辑地址%页面大小
页表
- 页表记录进程页面和实际存放的内存块之间的对应关系
- 一个进程对应一张页表,进程的每一页对应一个页表项,每个页表项由“页号”和“块号”组成
- 每个页表项的长度是相同的
如何实现地址转换
- 1.计算出逻辑地址对应的页号
- 2.找到对应页面在内存中的存放位置
- 3.算出逻辑地址对应的页内偏移量
- 4.物理地址=页面初始值+页面偏移量
二级分页
一级分页存在的问题
- 所有页表必须连续存放,页表过大时需要很大的连续空间
- 在一段时间内并非所有页面都用得到,因此没必要让整个页表常驻内存
逻辑地址结构:(一级页号,二级页号,页内偏移量)
如何实现地址转换
- 按照地址结构将逻辑结构拆分成三部分
- 从PCB中读出页目录表始址,根据一级页号查页目录表,找到下一级页表在内存中的存放位置
- 根据二级页号查表,找到最终想访问的内存块号
- 结合页内偏移量得到物理地址
快表
是一种访问速度比内存快很多的高速缓存
用来存放最近访问的页表项的副本
类似程序执行中的redis缓存
引入快表后,地址转换会根据页号找快表
- 如果快表中没有值,则去找页表,然后把找到的值赋给快表
- 如果快表中有值,则直接从快表中取值
基本分段存储管理
分段
- 将地址空间按照程序自身的逻辑关系划分为若干个段,每段从0开始编址
- 每个段在内存中占据连续空间,但各段之间可以不相邻
- 逻辑地址结构:(段号,段内地址)
地址变换
- 1.由逻辑地址得到段号、段内地址
- 2.段号与段表寄存器中的段长度比较,检查是否越界
- 3.由段表始址、段号找到对应段表项
- 4,根据段表中记录的断肠,检查段内地址是否越界
- 5.由段表中的“基址+段内地址”得到最终的物理地址
- 6.访问目标单元
分段vs分页
- 分页的主要目的是为了实现离散分配,提高内存利用率。分段的主要目的是更好地满足用户需求
- 分页对用户不可见,分段对用户可见
- 程序员操作分段更容易
- 分段更容易实现信息的共享和保护
- 分页(单级页表)、分段访问一个逻辑地址都需要两次访文内存,分段存储中也可以引入快表机构
段页式管理
先分段+后分页
- 将地址空间按照 程序自身的逻辑关系划分为若干个段,在将各段分为大小相等的页面
- 将内存空间分为与页面大小相等的一个个内存,系统以块为单位为进程分配内存
- 逻辑地址结构:(段号,页号,页内偏移量)
分段和分页的缺点
- 分页不方便按照逻辑模块实现信息的共享和保护
- 分段如果段长过大,为其分配很大的连续空间不方便。而且段氏管理会产生外部碎片
地址变换
- 1.由逻辑地址得到段号,页号,页内偏移量
- 2.段号与段表寄存器中的段长度比较,检查是否越界
- 3.由段表始址、段号找到对应的段表项
- 4.根据段表中记录的页表长度,检查页号是否越界
- 5.由段表汇总的页表地址、页号得到查询页表,找到相应的页表项
- 6.由页面存放的内存块号、页内偏移量得到最终的物理地址
- 7.访问目标单元
访问次数
- 第一次查段表,第二次查页表,第三次访问目标单元
- 可引入快表机构
内存空间的扩充(实现虚拟性)
覆盖技术
一个固定区
- 存放最活跃的程序段
- 固定区的程序段在运行过程中不会调入调出
若干覆盖区
- 不可能同时被访问程序段可共享一个覆盖区
- 覆盖区中的程序段在运行过程中会根据需要调入调出
必须由程序员声明覆盖结构,操作系统完成自动覆盖
覆盖技术只用于早期的操作系统中,现在已成为历史。
缺点:对用户不透明,增加了用户编程负担。
交换技术
- 内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中
某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度) - 磁盘分为文件区和对换区,换出的进程放在对换区
- 内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中
覆盖和交换的区别
- 覆盖是同一个程序或者进程中的
- 交换是在不同的进程(作业)之间的
虚拟内存
基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。
在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续
执行程序。
若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存。基本概念
传统存储管理方式的缺点
- 一次性:作业数据必须一次全部调入内存
- 驻留性:作业数据在整个运行期间都会常驻内存
局部性原理
- 时间局部性:现在访问的指令、数据在不久之后很可能被再次访问
- 空间局部性:现在访问的内存单元周围的内存空间,很可能在不就后会被访问
- 高速缓存技术:使用频繁的数据放到更高速的存储器中
虚拟内存的定义和特征
程序不需全部装入即可运行,运行时根据需要动态调入数据,若内存不够,还需换出一些数据
特征
- 多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存
- 对换性:无需在作业运行时一直常驻内存,而是允许在作业运行过程中,将作业换入、换出
- 虚拟性:从逻辑上扩充了内存容量,使用户看到的内存容量,远大于实际的容量
如何实现虚拟内存技术
访问信息不在内存时,由操作系统负责将所需的信息从外存调入内存(请求调页功能,缺页中断)
内存空间不够时,将内存中暂时用不到的信息换出到外存(页面置换功能)
虚拟内存的实现
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
请求分页管理方式
页表机制
- 在基本分页的基础上增加了几个表项
- 状态位:表示页面是否已在内存中
- 访问字段:记录最近被访问过几次,或记录上次访问的时间,供置换算法选择换出页面时参考
- 修改位:表示页面调入内存后是否被修改过,只有修改过的页面才需要在置换时写回外存
- 外存地址:页面在外存中存放的位置
缺页中断机构
- 找到页表项后检查页面是否已在内存,若没在内存,产生缺页中断
- 缺页中断处理中,需要将目标页面调入内存,内存满时还要换出页面
- 缺页中断属于内中断,属于内中断中的“故障”,即可能被系统修复的异常
- 一条指令在执行过程中可能产生多次缺页中断
地址变换(与基本分页不同的地方)
- 找到页表项需要检查页面是否在内存中
- 若页面不在内存中,需要请求调页(缺页中断)
- 若内存空间不够,还需要换出页面
- 页面调入内存后,需要修改相应页面项
页面置换算法
最佳置换算法(OPT)
- 规则:优先淘汰未来不会被访问的页面
- 优缺点:缺页率最小,性能最好,但无法实现
先进先出置换算法(FIFO)
- 规则:优先淘汰最先进入内存的页面
- 优缺点:实现简单,但性能差
最近最久未使用置换算法(LRU)
- 规则:优先淘汰最近最久没访问的页面
- 优缺点:性能很好,但需要硬件支持,算法开销大
时钟置换算法/最近未用算法(CLOCK)
- 规则:(访问位)的方式,有访问的页面值为1,循环扫描各页面第一轮淘汰访问=0的,并将扫描过的页面访问位改为1。1轮没中,进行第二轮
- 优缺点:实现简单,算法开销小,但未考虑页面是否被修改过
改进型时钟置换算法CLOCK
- 规则:(访问位,修改位)的形式,
第一轮,淘汰(0,0)也就是没有访问也没有修改过的。
第二轮,淘汰(0,1)也就是没有访问但修改过的,并且扫描后将1变为0
第三轮,淘汰(0,0)也就是有访问但是没有修改过的
第四轮,淘汰(1,0)也就是有访问且有修改过的 - 优缺点:算法开销小,性能也好
- 规则:(访问位,修改位)的形式,
页面分配策略
驻留集
- 指请求分页存储管理中给进程分配的内存块的集合
置换策略
- 固定分配vs可变分配:区别在于进程运行期间助留集大小是否可变
- 局部置换vs全局置换:区别在于发生缺页时是否只能从进程自己的页面中选择一个换出
抖动(颠簸)现象
- 页面频换换入换出的现象,主要原因是分配给进程的物理块不够
内存管理
地址转换
操作系统负责实现逻辑地址到物理地址的转换
三种方式
- 绝对装入
- 可重定位装入
- 动态运行时装入
存储保护
保证各进程在自己的内存空间内运行,不会越界访问
两种方式
- 设置上下限寄存器
- 利用重定位寄存器、界地址寄存器进行判断
文件管理
基础
- 定义:一组有意义的信息的集合
- 属性:文件名、标识符、类型、位置、大小、保护信息等
- 文件内部应该如何组织(文件的逻辑结构)
- 文件之间应该如何被组织(目录结构)
文件的逻辑结构
无结构文件
- 文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:Windows 操作系统中的 .txt 文件
有结构文件
由记录组成,分为定长记录、可变长记录
逻辑结构
顺序文件
- 串结构:记录顺序与关键字无关
- 顺序结构:记录按关键字顺序排列
- 可变长记录的顺序文件无法实现随机存取,定长记录可以
- 最大缺点:不方便增加/删除 记录
索引文件
- 建立一张索引表,每个记录对应一个表项。各记录不用保持顺序,方便增加/删除记录
- 索引表本身就是定长记录的顺序文件,一个索引表就是一条定长记录,因此索引文件可支持随机存取
- 若索引表按关键字顺序排列,则可支持快速检索
- 解决了顺序文件不方便增/删记录的问题,同时让不定长记录的文件实现了随机存取。但索引表可能占用很多空间。
索引顺序文件
- 将记录分组,每组对应一个索引表项
- 检索记录时先顺序查索引表,找到分组,再顺序查找分组
- 当记录过多时,可建立多级索引表
文件目录
文件目录的实现
- 一个文件对应一个FCB,一个FCB就是一个目录项,多个FCB组成文件目录
- 对目录的操作:搜索、创建文件、删除文件、显示文件、修改文件
目录结构
单级目录结构
- 一个系统只有一张目录表,不允许文件重名
两级目录结构
- 不同用户的文件可以重名,但不能对文件进行分类
多级(树形)目录结构
- 不同目录下的文件可以重名,可以对文件进行分类,不方便文件共享
- 系统根据“文件路径”找到目标文件
- 从根目录出发的是“绝对路径”
- 从“当前目录”出发的路径是“相对路径”
无环图目录结构
- 在树形目录结构基础上,增加一些指向同一节点的有向边,使整个目录成为一个有向无环图
- 为共享节点设置一个共享计数器,计数器为0时才真正删除该节点
索引结点
- 除了文件名之外的所有信息都放到索引结点中,每个文件对应一个索引结点
- 目录项中只包含文件名、索引结点指针,因此每个目录项的长度大幅减小
- 由于目录项长度减小,因此每个磁盘块可以放跟多的目录项,检索文件时磁盘的I/O的次数就少了很多
操作系统-思维导图整理相关推荐
- redis源码剖析(十六)——服务端思维导图整理
redis服务端思维导图整理
- 有理数思维导图,七年级数学思维导图整理
最近在整理有理数思维导图的时候突然发现,叫了这么多年的"有理数"竟然是个错误的叫法!看完安利后,瞬间觉得自己这么些年的数学是不是白学了!有理数可谓是数学学习过程中必备知识点,那今天 ...
- 考研马原 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理
本文的思维导图将考研马原进行了整理并标记出重点内容,同时对于同类事件,按时间顺序的时间都进行了整理,而且对于1800中的易错题目等重点内容也有整理 思维导图源文件已经发布在我的资源当中,有需要的可以去 ...
- Java基础编程及思维导图整理
我把Java基础编程及思维导图整理的超级详细,小白都能看懂 Java基础编程及其思维导图 目录: Java学习导图 一.Java基本语法 1.关键字与标识符 2.变量分类 3.运算符 4.流程控制 二 ...
- 考研思修 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理
本文的思维导图将考研思修进行了整理并标记出重点内容,而且对于1800中的易错题目等重点内容也有整理 思维导图源文件已经发布在我的资源当中,有需要的可以去 我的主页 了解更多学科的精品思维导图整理 本文 ...
- 思维导图整理大厂面试高频数组23: 股票问题大总结, 彻底搞懂股票问题
此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...
- ❤️思维导图整理大厂面试高频数组: 两万字详解各种数组求和(建议收藏)❤️
此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...
- ❤️思维导图整理大厂面试高频数组19: 股票问题III的dp数组构建/初始化和空间优化难点, 力扣123❤️
此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...
- ❤️思维导图整理大厂面试高频数组20: 股票问题IV的dp数组构建和几个重要注意点❤️
此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...
最新文章
- CentOS7系统上Kubernetes集群搭建
- 修改Sublime Text3左侧导航字号大小及行高
- java 中线程池的种类,原理以及源码解析(1)
- 华为交换机初始化_华为交换机恢复出厂设置
- 中国重汽微服务管理_springcloud微服务架构实战:商家管理微服务设计
- 同一页面实现多个Tab选项卡功能
- 用U盘安装一个Linux系统
- maven配置testng_TestNG Maven Surefire插件配置
- html列自动变高,HTML_CSS三行三列DIV高度自适应的设置,用脚本控制三行三列div高度自 - phpStudy...
- Git和SourceTree配合使用
- C++总结学习(一)
- 问答列表html,HTML这个样子的图文列表怎么写
- linux 交叉编译 makefile,简单谈谈Makefile和交叉编译工具链
- elasticsearch自定义分词器---拼音分词器
- 结构化、半结构化和非结构化数据
- ios vue 添加本地音乐_苹果手机vue怎么添加自己的音乐
- windows下网络诊断基本命令
- TouchEvent
- 华硕主板固态硬盘不识别_华硕主板认不到固态硬盘怎么办?
- 使用 WordPress快速个人建站指南