内存
内存使用与分段
每一条指令都要从逻辑地址算出物理地址——地址翻译
<段号,段内偏移>
GDT[Global Descriptor Table] 全局描述符表
LDT[Local Descriptor Table] 局部描述符表
内存分区与分页
固定分区
可变分区——时间长了会造成内存碎片
段面向用户 页面向硬件
多级页表与快表
为了提高内存的利用率,页应该小,但这样页表就大了。
第一种尝试
只存放到用到的页
第二种尝试
使用多级页表——类比成书的章目录和节目录(分层的思想)
增加了空间的利用率,但牺牲了时间效率
所以TLB 相联快速存储(局部性原理),是寄存器(就是加了一层缓存)
TLB条目数在64——1024之间
原因:
- 程序的地址访问存在局部性(多为循环和顺序结构)
- 空间局部性
内存的换入换出
实现虚拟内存就应该换入换出
换入换出实现了“大内存” 吧细小的内存整理
换出页面算法
- FIFO
- LRU Least resently used最近最少使用 用过去预知未来
- 两种实现方法
- 1——时间戳
- 2——将时间计数修改为是和否(Clock算法 快慢指针实现 一种近似)