您的位置:首页 > 其它

大话操作系统(2)内存管理

2015-12-15 14:12 155 查看
December 15, 2015 11:54 AM

程序运行是执行一条条指令,指令存放在存储器里,有的存储器读写快,但是容量低,比如缓冲,有的存储器容量大,但是读写速度慢,如硬盘,还有的性能介于两者之间,比如内存。我们希望所有的指令都最好放在缓冲,这样速度就会很快,但是,一方面缓冲容量小,另一方面比较昂贵,不可能所有指令都放在缓冲里,这样就需要有一个机制对这些不同的存储器进行管理,以适应不同情况下的内存分配,这便是即将提到的内存管理。

内存管理主要达到两个目标:

1.地址保护,即一个进程不能不能访问两一个进程的地址空间,使得不同进程互不干扰的工作;

2.地址独立,程序指令的地址(虚拟地址)应该是与物理主存地址无关的,这样保证在不同的硬件平台上均可以稳定的工作,我们事先不能确定在不同硬件平台上确定分配的物理地址。

虚拟内存技术:

程序执行要先载入内存在执行,以提升运行速度,现在的普通计算主存相对硬盘都很小,不可能一下将程序都直接载入内存中执行,那怎么解决这个问题呢?将磁盘空间看成主存的一部分,用户程序存放于磁盘上相当于存放于主存内。程序执行时虚拟内存尽量从缓冲满足用户的需求。

多通道内存管理

程序加载到内存完毕后,计算物理地址(基地址),即动态地址翻译。程序运行实际的物理地址是基地址和虚拟地址的和,如果地址超过指定的极限,被视为地址出界而禁止访问,否则正常访问。

分页:内存被不同的进程分割成尺寸大小不一的空间,一段时间后会产生散布在进城之间的外部碎片。比如第一个进程使用了的200Kb的内存空间,执行完成释放掉后,接下来可能会有一个180Kb的进程使用该空间,但是剩下的20Kb就不太好再分配出去,类似的情况很常见,就会在内存空间产生很多这样的碎片。为此,对内存进行分页,即将内存按照某种规定的大小进行分配,每一个部分称为一页,然后按页进行内存分配,一个虚拟页面可以分配到任意一个物理页面。一个程序每次只加载当前需要的部分,其余部分放在磁盘上,如果需要更多的空间,为其分配一个页即可。虚拟地址由页面号号页内偏移量组成。页表提供虚拟页面到物理页面的映射。页面越大,内部碎片就越大,浪费就越多。

内存抖动,对一个不在内存的页面访问,会产生缺页中断,内存没有可用空间,变为磁盘访问,速度慢一百万倍,整个系统速率急剧下降,这种现象叫内存抖动。

页面更换:在运行时,一个程序的所有页面并不一定都在内存中,因此在执行过程中就会出现某个页面不在内存的情况,此时此生缺页中断,中断服务程序负责将位于磁盘的数据加载到物理内存,如果有空闲页面,直接使用,如果没有,挑选某个使用过的进行替换。

页面更换准则:

公平算法:

随机算法

FIFO

第二次机会(FIFO+使用频率)

时钟算法(页面访问为为0,替换,不为0,清0,找一下个)

非公平:

列表内容

最优

NRU(最近未使用)

LRU(最近使用最少)

工作集(寻找一个不属于当前工作集的页面)

段式内存管理:按照逻辑单元分成多个段,每个段使用自己独立的虚地址空间,如符号表、代码段、常数表、词法树、调用栈。同时方便共享,一个段全部共享或者全部不共享(分页无法做到)。

分段分页
一个逻辑单元对应一个虚拟地址空间,程序编写长度不受限一个程序最多只能和一个虚拟空间一样大
方便共享不方便共享
容易产生外部碎片没有外部碎片
段页式内存管理:结合两种管理方式的优点,将程序分为多个段,段内又进行分页管理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: