标签:
// Pre. 地址绑定
1. 是逻辑地址向物理地址映射的过程
2. 根据映射发生的时间分类:
操作系统如何管理内存?核心思想就是用好内存,那么怎么用好内存?
------一。内存使用:
1. 要让exe文件执行,首先需要创建pcb。内存找一段空闲的区域,将程序放入到这段区域,将首地址存入pcb
2. pcb把基地址写入基址寄存器
3. 执行的时候,取基址寄存器的值,进行地址的重定位,获取物理地址(运行时重定位)
4. 进程上下文切换时,新进程把新的基址(位于pcb)写入基址寄存器,进行更新
5. 动态加载与动态链接
那么,是将整个程序都"放入这段区域"吗?
------二。分段:
1. No,是将进程的各段分别放入内存。2. 因此,pcb里面存的实际上是进程段表(LDT表),指示每个段的段首地址。
那么,如何在内存划分空闲区域呢?
------三。分区问题:
1. 固定分区:将内存分成多个固定大小的区域,每个分区只能容纳一个进程。
2. 可变分区:操作系统记录空闲分区表和已分区表,记录哪些内存可用(称之为“孔”)以及哪些内存已被占用,要多少给多少,每次分配内存或者释放内存都会对表更新。
3. 从一组可用孔选择一个空闲孔的方法(可变分区方式下动态分配存储问题):
------四。分页
1. 把物理内存划分为多个块,叫做帧;把逻辑内存划分为多个块,叫做页。进程的每一个段不是直接放到内存的,而是打散成多个页存入内存。为了将来能够重定位,在程序执行的时候找到物理地址,就引入了页表的概念,通过页表查询进程的第几页存储在内存的第几帧。
2. 页表的硬件实现方式:
3. 分页环境下的内存保护:内存保护是通过每个帧相关联的保护位来实现的,这些位通常保存在页表中,如读写位、有效无效位。
4. 共享页,如图所示。共享代码的进程共用某些段,这些段在内存的物理帧相同。减少了内存的消耗。
5. 为了提高内存使用率,每一页应该尽量小,这样会导致页表太大。由此,给出多级页表和哈希页表的机制。
6. 多级页表:
多级页表提高了空间效率,但是在时间上,由于多次访存,造成了耽搁。可用TLB(快表)进行改进。TLB根据局部性原理,存储的是经常访问的条目。TLB命中则不需多次访存,TLB未命中则把对应条目加入或替换进TLB。
7. 哈希页表
标签:
原文地址:http://blog.csdn.net/zzhhit2014/article/details/51242981