-
非连续内存分配:分页(主流方式),分页地址空间与分页寻址方案
分页与分段的区别:段的大小可变,页大小不变
建立方案,转换逻辑地址为物理地址(Pages to frames):页表,MMU/TLB
帧(物理内存)划分物理内存至固定大小的帧(大小是2的次幂):帧号+帧内偏移 地址计算的实例:
页(逻辑内存)划分逻辑地址空间至相同大小的页:
页内偏移的大小=帧内偏移的大小
页寻址机制:页表由操作系统提前建立
-
页表概述、TLB(转换后备缓冲区)
resident bit为0则相应的物理内存不存在,为1则对应的物理帧存在(因为不是所有页都有对应的帧)
分页机制的性能问题:
访问一个内存单元需要两次内存访问:一次获取页表项,一次用于访问数据。
页表可能非常大:64位的机器,每页1024字节,一个页表会很大
因为很大,页表不能放在CPU当中,而放在内存中。处理方法: 缓存(caching) 间接(Indirection)访问 缓存:TLB(Translation Look——aside Buffer) 缓存近期访问的页帧转换项。TLB使用associative memory实现,有快速访问的性能。如果TLB命中,物理页号可以很快被获取,如果未命中,对应的表项被更新到TLB中。TLB在CPU中 ![在这里插入图片描述](https://img-blog.csdnimg.cn/680e1c456409409b9fa9ed89e2d53fc2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56a55rSL5Y2a,size_20,color_FFFFFF,t_70,g_se,x_16)
-
非连续内存分配:页表:二级,多级页表
二级页表:
一级页表存放的是以及页表的起始地址,二级页表存放帧地址。
这种方式使得不存在映射关系的页表项不需要占用内存值(若一级中不存在(resident bit==0)则二级不需要保留空间)
多级页表:
时间换空间,时间开销增大,空间开销减小。
时间开销可以通过之前的TLB机制缓解。
-
非连续内存分配:页表:反向页表
大地址空间问题:前向映射页表变得繁琐。
不是让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对应。逻辑(虚拟)地址空间增长速度快于物理地址空间。基于页寄存器(Page Registers)的方案:消耗内存很小
基于关联内存(associative memory)的方案:
基于哈希(hash)查找的方案:
-
虚拟内存:
虚拟内存的起因
理想中的存储器:更大、更快、更便宜的非易失性储存器
实际上的存储器:
程序只能在内存中执行,那么我们希望能想办法利用到磁盘的空间。5.1. 覆盖技术:
在较小的可用内存中运行较大的程序。常用于多道程序系统,与分区存储管理配合使用。
原理:
例子:
将没有相互调用关系的BC放在同一个分区
只用了100k,比上图要更高效。缺点:
由程序员来把大的程序划分为若干个小的功能块,并确定各模块的覆盖关系,费时费力;覆盖模块从外存装入内存,实际上是以时间延长来换取空间节省5.2. 交换技术:
目标:多道程序在内存中时,让正在运行的程序或者需要运行的程序获得更多资源。
方法:可将暂时不能运行的程序送到外存,从而获得空闲内存空间;操作系统把一个进程的整个地址空间的内容保存到外存中,而将外存中的某个进程的地址空间读到内存中。换入换出内容大小为整个程序的地址空间。
问题:
1. 交换时机的确定:因为交换会产生很多额外开销。只有当内存不够或者有不够危险时换出
2. 交换区的大小:必须足够大以存放所有用户进程的所有内存映射像的拷贝,必须能对这些内存映像进行直接存取。
3. 程序换入时的重定位:换出后再换入不一定在同一处地方。要采用动态地址映射的方法覆盖与交换的比较: ![在这里插入图片描述](https://img-blog.csdnimg.cn/f6706635ef5147a49e0615be8381445c.png)
5.3. 虚存技术:
目标:
程序的局部性原理:程序在执行过程中的一个较短时间,所指向的指令地址和指令的操作数地址,分别局限于一定的区域,表现为:
时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问一个集中在一个较短的时间内
空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的及格数据应该集中在一个较小的区域内。
程序的局部性原理时实现虚拟内存技术的前提。虚存技术基本概念:在页式或者段式内存管理的基础上实现:
虚存技术基本特征:
虚拟页式内存管理:
页表表项:
后备存储: