计算机体系结构
内存层次结构
逻辑地址空间:软件
物理空间:硬盘
对于电脑:
CPU缓存:128k
主存:2g
磁盘:500g
管理内存方法
- 程序重定位
- 分段
- 分页
- 虚拟内存
- 按需分页虚拟内存
地址空间&地址生成
逻辑地址空间:软件
物理地址空间:硬盘
软件运行分配的地址空间最终都要落在内存或者硬盘上,具体落在什么地方,看系统分配。
c经过编译,生成.s文件,经过汇编生成.o,链接后.exe
过程如下:
- 当cpu要执行某条指令的时候,ALU会需要这条指令的内容,发出一个请求,参数就是逻辑地址。
- CPU里面的MMU会去查找映射表中是否存在对应的物理地址,如果没有就去内存中找,找到以后,CPU控制器会给主存发送我需要某个物理地址的内容,主存会把内存的内容通过总线传给CPU,CPU拿到指令后就可以对这条指令进行执行了。
操作系统方面:建立逻辑地址和物理地址映射关系
地址安全检测
操作系统要确保每个应用程序地址合法,根据头地址和长度判断,符合要求会返回物理地址,不符合会内存异常。
??内存不够的意思是不是:逻辑地址对应的物理地址已经超出有效地址范围,所以发生了内存不够了??
内存碎片
- 定义:空闲内存不能利用
- 外部碎片:在分配单元间的未使用内存
- 内部碎片:在分配单元中的未使用内存
- 动态分配
- 第一匹配分配
- 第一个满足的分配
- 优点简单,易于产生更大的空闲块
- 缺点容易产生外部碎片,(比如第一个空间满足占了以后,又占了第二块儿空间,一二之间的空间就不能利用了)
- 最优匹配
- 与目标相差最小,使用最小的可用空间块,碎片最小
- 最差匹配分配
- 为了分配n字节,使用最大的可用空闲块
- 优势:适用于分配中等尺寸
- 缺点:易于破坏大块,将来再分配大块就无法分配。
- 第一匹配分配
碎片整理
- 压缩式碎片整理:将代码压缩
- 交换式碎片整理:内存空间不够,将部分代码,交换到磁盘中,等程序执行完,再将程序拷贝到主存。
非连续内存
- 存在意义
- 减少内存碎片
- 允许共享代码和数据
- 支持动态加载和链接
- 缺点
- 需要建立虚拟地址和物理地址之间转换
- 建立转换
- 分段
- 分页
- 分段
- 分段地址空间
- 寻址方案 (硬件机制)
- 段寄存器+地址寄存器
- 段寄存器:存储段号,即内存“块”地址
- 地址寄存器:段内偏移量
- 寻址过程简述
- 段表:存储两个信息,base对应每个段号的物理地址,limit纪录每个段的长度。 由操作系统生成。
- cpu取指令后,获取到逻辑地址,首先从段表找到对应的段号,然后根据段内偏移长度,判断是否超出limit,如果超出会杀掉程序,然后就找到了物理地址所在时段。
- 分段地址空间
- 分页
- 与分段区别
- 每个段大小是可变的,但是页帧大小是固定的。
- 分页地址空间
- 帧:物理内存
- 页:逻辑内存
- 表示相同,便于寻址。比如都是4K大小。 512-》512、1024-》1024
- 逻辑物理地址转换
- 页表
- MMU(内存管理单元)/TLB
- 寻址方案
- 物理地址(帧)寻址公式
- 物理地址(帧)寻址公式
- 逻辑地址(页)寻址公式相同
页寻址过程:CPU获取逻辑地址页号后,根据页表(操作系统生成),找到帧号(物理地址),再加上偏移量o就找到物理地址。 - 逻辑地址可能比物理地址大,通过虚拟地址实现。
- 逻辑地址页是连续的,类似数组,但是物理地址帧不是连续的。但好处就是减少了碎片。
- 与分段区别
- 页表项第二位表示物理叶帧是否存在,0不存在,1存在。
- 页表存在的问题
- 非常大,64位机器如果每页1024字节,那么页表大小为 264/210=254
- 因为大,CPU放不下,只能放到内存中,每次寻址需要访问2次内存。速度慢问题。
- 解决方法:1.缓存 2.间接访问
- 缓存:CPU里面的MMU(内存管理单元)里面的TLB,可以缓存最近访问的页帧转换,就不用查页表了,提高访问效率。但容量有限。未找到的话,去页表中寻址,然后由硬件[x86]/操作系统[mips]更新到TLB。
- 空间问题:
寻址过程:逻辑地址存储两个地址,先根据p1找到p2的起始地址,然后再根据p2找到物理地址。可以看到多了一次寻址过程,以时间换空间。
节省空间的原因:第一次寻址没找到的话对应二级页表的pageTable,就不会存在了。而一级页表对应项还会存在。所以节省了空间。
- 缓存:CPU里面的MMU(内存管理单元)里面的TLB,可以缓存最近访问的页帧转换,就不用查页表了,提高访问效率。但容量有限。未找到的话,去页表中寻址,然后由硬件[x86]/操作系统[mips]更新到TLB。
- 反向页表
- 页表与物理空间大小相对应
以页号为key,以桢号为value,key和物理内存大小是相同的。
好处:这种的页表占用内存小,
- 页表与物理空间大小相对应
- 如何建立关系(物理和逻辑地址)
- 基于关联存储器方案(不够实用)
- 基于hash查找的方案
- PID(当前运行程序id)+pageNO,算出对应的桢号。问题是hash冲突。还是要放入内存,利用TLB机制。需要硬件软件配合。
- PID(当前运行程序id)+pageNO,算出对应的桢号。问题是hash冲突。还是要放入内存,利用TLB机制。需要硬件软件配合。