作业管理
1.进程调度:
-
进程调度是指计算机通过决策决定哪个就绪进程可以获得CPU使用权(多道程序设计前提)
- 保留旧进程的运行信息,请出旧进程
- 选择新进程,准备运行环境并分配CPU
-
进程的机制
- 就绪队列的排列机制:将就绪进程按照一定方式排成队列,以便调度程序最快找到进程
- 选择运行进程的委派机制:调度程序以一定的策略选择就绪进程,将CPU资源分配给它
- 新老进程的上下文切换机制:保存当前进程的上下文信息,装入被委派执行进程的运行上下文
-
进程调度原则
- 非抢占式的调度:进程只有完成/IO阻塞才让出处理器
- 抢占式的调度:允许调度程序以一定策略暂停当前运行程序
进程调度算法
-
先来先服务(按顺序)
-
短进程优先调度(长进程不友好)
-
高优先权优先调度(紧迫任务可以优先)
-
时间片轮转调度(“绝对公平”)
- 先来先服务原则排列就绪队列
- 每次从头部取出,分配一个时间片执行
2. 死锁:
死锁定义:两个或两个以上的进程,由于竞争资源/彼此通信造成阻塞现象,若无外力作用,它们都无法推进下去。此时系统处于死锁状态。
-
死锁产生
- 竞争资源:共享资源不满足各进程需求
- 进程调度顺序不当
-
四个必要条件(只满足1~2个不会死锁)
- 1互斥条件(排他性)
- 2请求保持条件(持有资源再申请时,进入等待)
- 3不可剥夺条件(未完成全不能被剥夺)
- 4环路等待条件(发生死锁时,必然存在进程-资源环形链)
死锁的处理
-
预防死锁方法:破坏1个或多个必要条件
- (条件2)一次性申请所有需要的资源
- (条件3)申请资源得不到满足,释放占有资源
- (条件4)线性申请资源
-
避免死锁(系统处于安全状态):如果操作系统能保证所有进程在有限时间内得到需要的全部资源,则系统处于安全状态否则系统是不安全的。
- 银行家算法
- 已分配资源表、所需资源表、可分配资源表
- 得到 还需分配资源表
- 银行家算法
存储管理
存储管理目的:
- 确保计算机有足够的内存处理数据
- 确保程序可以从可用内存中获取一部分内存使用
- 确保程序可以归还使用后的内存,以供其他程序使用
1.连续内存分配
内存分配(分配空闲区)
- 单一连续分配(单进程操作系统)
- 固定分区分配(预先分区好,支持多道程序的最简单存储分配)
- 动态分区分配(按照进程实际需要动态分配,常用)
- 空闲区:动态分区空闲表、动态分区空闲链
- 动态分配算法:
- 首次适应算法(FF算法,每次从头部开始)
- 循环适应算法(从上次检索位置开始分配)
- 最佳适应算法(空闲区链表按照容量从小到大排序)
- 快速适应算法(多个空闲链表,每个空闲链表存储一种容量的空闲区)
内存回收(回收空闲区)
- 空+回:只需空闲区容量增大为两者之和
- 回+空:合并两者,新空闲区使用回收空闲区的地址
- 空1+回+空2:合并三者,新空闲区使用空1地址
- 回:创建新空闲节点
2.段页式存储管理(非连续,将进程映射至物理空间)
-
页式存储(页面——相对逻辑空间定义,字块——相对物理设备定义)
- 将逻辑空间分成页面,物理空间分成物理块,以页面为单位把进程空间装进物理内存中分散的物理块
- 需要页面大小适中512B~8K(过小内存碎片过多,过大难以分配)
- 页表:页面+字块(记录页面与字块的关系)
- 地址:页号+页内偏移
- 多级页表
-
段式存储
- 把进程逻辑空间划分成若干段(非等分),段长度由连续逻辑长度决定,MAIN、X、Y
- 段表:段号+基址+段长
- 地址:段号+段内偏移
段式与页式存储管理对比(离散地管理):
-
段页式存储
- 逻辑空间按段式管理分成若干段,段内空间按页式管理分成若干页
- 页地址:页号+页内偏移
- 段地址:段号+段内偏移
- 段页地址:段号+段内页号+页内地址
3.虚拟内存:
物理内存不能无限增加,虚拟内存使得多道程序运行和大程序运行成为现实
-
程序局部性原理:
- CPU访问存储器时,访问的存储单元都趋于聚集在一块较小的连续区域中
- 程序运行时无需全部装入内存
- 发起页面中断,读取载入页面
-
虚拟内存的
- 请求页表机制
- 缺页中断机制
- 页面置换算法
-
页面置换算法(辅存)
- 先进先出FIFO(只有FIFO算法会出现Belady异常)
- 最不经常使用LFU
- 最近最少使用LRU
4.Linux存储管理
- 页内碎片(段页式存储时,进程没有占满这页)
- 页外碎片(给内存分页时,部分小内存不满足页大小,无法利用)
Buddy内存管理算法:经典内存管理方法,基于二进制优势(效率高)
- 目标:努力让内存分配与相邻内存合并能够快速进行
- 伙伴系统(内存的伙伴:相邻的相同大小的内存)
- 分配步骤
- 内存分配原则:向上取整为2幂大小
- 找空闲满足的内存
- 拆分至最小满足,再分配
- 回收步骤
- 判断伙伴在空闲链表?
- 在,则移除伙伴,合并成大的,向上循环
Linux交换空间(swap)
- 物理内存满时,将其转换至交换空间(磁盘)
- 使用交换空间速度会变慢
- 冷启动内存依赖、系统睡眠依赖、大进程空间依赖
Swap与虚拟内存区别:
- Swap是操作系统概念;虚拟内存是进程概念
- Swap解决系统物理内存不足问题;解决进程物理内存不足问题