操作系统学习(五)-- 操作系统之内存管理
2017-07-09 15:27
302 查看
操作系统之内存管理
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步实现
分配虚存,建段表
GDT表是操作系统的段表,LDT每个进程的段表
父子进程都有自己的虚拟内存和物理内存,内存共用父进程的,然后进程就放在内存中
第5步内存用起来
相关文章推荐
- 操作系统 学习笔记3-内存管理
- 操作系统的学习(3)——物理内存管理:非连续内存分配
- C/C++学习----第四章 内存分配及其管理
- LwIP协议栈学习--内存管理
- Linux学习总结—启动、内存结构和管理
- 内功修炼之操作系统学习(二:处理器管理)
- 操作系统管理内存的机制——为什么要设置虚拟内存?
- LCC学习笔记之一 --内存和字符串管理
- 浅谈操作系统对内存的管理
- Qt学习笔记 01 - Meta data 和 内存管理
- 操作系统原理学习笔记--进程管理
- PowerPC体系结构学习笔记之内存管理
- 操作系统学习笔记(19)--贴一个内存设置的代码
- 操作系统学习笔记(14) 存储管理-储存管理的任务
- 轻松学习Linux之认识内存管理机制
- 模拟内存动态管理——学习篇(原创)
- C++学习体会:内存管理
- 操作系统学习笔记(34)--内存分页
- 操作系统学习笔记(16) 存储管理-程序装入内存技术
- 内功修炼之操作系统学习(四:存储管理)