内存
基本概念
操作系统内存管理的目的:
- 抽象:逻辑地址空间
- 保护:独立地址空间
- 共享:访问相同内存
- 虚拟化:更多的地址空间
物理地址空间:硬件支持的地址空间
逻辑地址空间:一个运行的程序所拥有的内存范围,对纯软件开发人员可见的地址空间
内存分配
外部碎片:在分配单元间的未使用内存
内部碎片:在分配单元中的未使用内存
连续内存分配方法
最先匹配分配
从头找,使用第一块可用空闲块
优点:简单,不浪费后面内存块
缺点:容易产生外部碎片
最优匹配分配
从头寻找和申请内存最匹配的内存块
优点:简单,避免分割大空闲块,最小化外部碎片的产生
缺点:产生了更加细小的外部碎片,重分配慢
最差适配算法
和最优适配算法相对
优点:避免太多微小碎片,若分配中等尺寸效果最好
缺点:重分配慢,容易破坏大空闲块导致大分区无法被分配
碎片管理:对已产生的碎片进行清理
压缩式:直接在内存中对程序进行重定位
交换式:将等待程序暂存到硬盘中
非连续内存分配方法
优点:更好内存利用,允许共享,支持动态加载和链接
缺点:涉及逻辑地址到物理地址的转化,是需要额外开销的(软件实现)
分段(用的比较少)
堆、栈、数据段、代码段、文件映射区
逻辑/物理地址之间的转化
- 逻辑地址包含了段号和段内偏移两个信息
- 段表存放了逻辑地址段号和物理地址段号的映射关系
分页
分段的段大小是可变的,分页的页帧是固定大小(4K)
帧:物理页寻址
页:逻辑地址寻址
逻辑地址到物理地址:
页表
页表记录着逻辑地址和物理地址之间的映射关系,这也是逻辑地址连续,物理地址可以不连续的关键。
页表由操作系统在初始化的时候建立,并将基地址保存在相应寄存器中。
多级页表:减少空间代价
反向页表/基于哈希(少数高端CPU使用)
多级页表又让访问变慢
不让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对应。页寄存器的方案设计使得寄存器容量只与物理地址空间大小相关,和逻辑地址空间大小不相关。
以物理地址的帧号为索引,页表项内容是页号。(一直没有搞清楚知道帧号为什么不直接访问物理内存,这只是一种理想的思路,于是延伸出基于哈希查找方式)
感觉这是相对于之前页表的另一种建立映射关系的方式。
转换后备缓冲区(TLB):减少时间消耗
CPU中内存管理单元(MMU)中有一个叫做Translation Look-aside Buffer(TLB)的缓冲。
概念: 缓存近期访问的页帧转换表项
组成: 二元数组(p,f),p 为 Key, f 为 value。
特点: 访问速度块(如果在TLB中存在地址,不需要访问页表了),并发查找,容量代价高
虚拟内存技术
目的:更大的可使用的内存空间
覆盖技术(程序内):一个程序内不会同时执行,且不会相互调用的模块共享同一块内存空间
交换技术(程序间):以程序为单位将暂不运行的程序整个导出到硬盘中,运行时再导入
虚存技术: 以页为粒度,动态导入导出硬盘
局部性原理
程序的局部性原理(principle of locality) :指程序在执行过程中的一个较短时期,所执行的指
令地址和指令的操作数据地址,分别局限于一定区域。
时间局部性: 一条指令的一次执行和下次执行,一个数据的一次访问和下一次访问都集中在一个较短时期内;
空间局部性: 当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内。
外循环是行访问过程的开销小
虚存技术具体实现
页表项
-
驻留位(存在位): 表示该页在内存还是在外存。如果该位等于"0"将导致缺页中断。
-
保护位:表示允许对该页做何种类型的访问,如只读,可读写,可执行等,如果权限不允许,会产生异常。
-
修改位:表明此页在内存中是否被修改(写,更新)过。用"0"和“1”表示。
-
访问位:如果该页面被访问过(包括读操作或写操作),则设置此位为"1",用于页面置换算法。因为将页面置换出去时,要决定换出哪一页,尽量把当前不经常访问的页面置换出去。
缺页中断
如果有空闲页,就将数据从硬盘读到对应页中,并修改页表项对应参数
若无空闲页,就需要用到页面置换算法
页面置换算法
局部置换算法:
- 最优页面置换算法:未来很长用不到的置换掉
- 先进先出算法
- 最近最久为使用:最近使用页会移到头部,维护链表开销大
- 时钟页面置换算法:环形页表,用一bit表示页表最近是否有用
- 二次机会法:时钟算法改进,尽量不置换需要写操作的页
进程调度
评价指标:CPU使用率、吞吐量、周转时间、等待时间、相应时间
调度算法
- 先来先服务:简单,平均等待时间可能会很大
- 短进程优先:平均等待时间最短,容易导致饥饿
- 最高响应比优先: 综合考虑执行时间和等待时间
- 轮询:时间片内轮流执行每个进程,公平,进程间切换开销大
- 多级反馈队列:高优先级队列(最高优先级优先),低优先级(轮询),动态调整优先级(等待时间越长优先级越高,执行时间越多优先级越低)
- 公平共享
- 实时调度算法
IPC
(1)消息: 软件中断通知事件处理,效率高,但不能进行数据交互
(2)(匿名)管道: 血缘关系进程间通讯,有大小限制
命名管道: 不相干进行间的通讯
(3)消息队列: 多个不相干进行间的通讯,克服了管道通信的数据是无格式子节流的问题,有大小限制
(4)共享内存: 直接通讯,快速、高效,缺点是容易数据冲突(同步数据访问)
(5)socket: 对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23)