操作系统学习(五)-- 操作系统之内存管理

操作系统之内存管理 L20 内存使用和分段

Memory and Segmentation

内存使用:将程序放到内存中,PC指向开始地址

重定位:修改程序中的地址(是相对地址)-即逻辑地址

什么时候完成重定位?(编译时,程序只能放在内存固定的位置;载入时,一旦载入就不能动,灵活,慢一些)

但是程序载入后乃需要移动

操作系统学习(五)-- 操作系统之内存管理

运行是重定位

执行指令都要从逻辑地址算出物理地址:地址翻译

基地址放在PCB中

操作系统学习(五)-- 操作系统之内存管理

程序分段

操作系统学习(五)-- 操作系统之内存管理

PCB要放每段的基址

操作系统学习(五)-- 操作系统之内存管理

GDT表是操作系统的段表,LDT每个进程的段表

L21内存分区与分页

Memory Partition and paging

编译时,将代码分段,然后在内存中找到空闲的分区,将数据从磁盘读入到内存中(设备驱动)

内存怎么分割?

1.固定分区(需求不一)

2.可变分区

分页:解决内存分区导致的内存效率问题

操作系统学习(五)-- 操作系统之内存管理

将请求内存打散--->引出物理内存分页

页表地址表示

MMU内存管理单元,地址%页表大小(4K)=>左移12位,商为页码,余数为页内偏移

逻辑地址和物理地址

一个程序多个段组成,每个段打散成多个页,分配到内存中的多个页中

操作系统学习(五)-- 操作系统之内存管理

多级页表和快表

Multilevel Paging

页表机制实际有问题,引出多级页表

为了提高内存空间利用率,页应该小,但是页小了页表就大了

页表大了,页表放置就成问题了

这里的页号和地址位数有关(逻辑地址),页框号和物理内存有关;大部分的页号(逻辑地址)不会用到

无效的页号(部分逻辑页号没有使用)

操作系统学习(五)-- 操作系统之内存管理

只存放用到的页

每执行一次指令,都需要查询页表一次,这样指令执行的速度就变慢了

这样必须页号连续才行,

操作系统学习(五)-- 操作系统之内存管理

多级页表

32位地址,逻辑地址分成3部分。

内存中页表变得很小

操作系统学习(五)-- 操作系统之内存管理

访问12MH的内存空间,但是只需要16K的内存空间

访问时间变长,尤其是64位系统

操作系统学习(五)-- 操作系统之内存管理

块表(TLB)一组相联快速存储

块表+多级页表==>保证了空间利用和时间的折中

操作系统学习(五)-- 操作系统之内存管理

TLB越大,越好,但是成本越高,一般[64,1000].

程序的地址访问存在局部性,空间局部性,程序多体现为循环,顺序结构

L23 段页结合的实际内存管理

Segmentation and Paging

虚拟内存 / 地址空间 将段页结合起来

先在虚拟内存分段,然后再分页载入内存

操作系统学习(五)-- 操作系统之内存管理

重定位(地址翻译)

两层地址翻译:段和页翻译

从用户的角度有段--内存硬件的角度看页

操作系统学习(五)-- 操作系统之内存管理

一个实际的段,页式内存管理

操作系统学习(五)-- 操作系统之内存管理

如何载入内存

操作系统学习(五)-- 操作系统之内存管理

5步实现

分配虚存,建段表

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpppy.html