从硬件发展看内存管理 -----内存管理(一)

一、从硬件发展角度看内存管理

I、远古时代的内存管理

操作系统中大部分内存管理都是围绕硬件展开的,计算机硬件的变化影响着软件的实现。下面从单道批处理系统和多道批处理系统看内存管理的演变。

单道编程的内存管理。所谓单道,就是整个系统只有一个用户进程和一个操作系统。这种模型下,用户程序总是加载到同一个内存地址上运行,所以内存管理很简单。实际上根本就不用内存管理单元,程序使用的地址就是物理地址。不难发现,这种模型有很大的缺点:

1、无法运行比实际物理内存大的程序

2、系统只能运行一个程序

多道编程的内存管理。多道意味着可以并发运行多个进程,在内存管理出现了固定分区和动态分区两种技术。

固定分区:主存被划分成许多静态分区,进程可以装入大于或者等于自身大小的分区。实现比较简单。这个也有缺点:

1、程序大小必须和分区的大小必须匹配

2、活动进程的数目比较固定

3、地址空间无法增长

动态分区:当进程A运行时,先从一块大内存中切割一块与进程A大小一样的内存给进程A使用。当进程B准备运行时,我们可以从剩下的空闲内存中切割一块与进程B大小相等的内存块给进程B使用,以此类推。动态分区解决了固定分区的不足。但是随着时间的推移,这种方式会出现很多内存空洞,也就是内存碎片。

上述两种内存分配都存在俩种缺陷:

1、进程地址空间保护问题。所有用户进程可以访问全部的物理内存,这使得进程A可以随意改变进程B的数据。

2、内存使用效率低。内存所需不足时,需要选择一个进程进行整体换出,这种机制导致有大量数据换进换出。

II、分段机制

一开始人们就想到用分段机制。其实就是增加一个虚拟内存。它解决的是进程地址空间保护问题。现在每个进程运行时看到的地址是虚拟地址,需要通过CPU来映射物理地址,进程A和进程B被映射到不同的物理地址空间上。进程访问未映射的虚拟地址空间或者访问了不属于该进程的寻地址空间,CPU会捕捉这个越界访问异常,并且拒绝该次访问。

分段很明显是一次重大的改进,但是在内存紧张时,分段机制换出磁盘的依旧是整个进程。后来人们根据局部性原理,提出了分页机制。

III、分页机制

分段机制地址映射粒度太大。以至于整个内存分配效率比较低。分页机制就是把这种分配机制的单位继续细分分成固定大小的也。进程的虚拟地址空间也按照分页机制来划分,这样常用的代码段和数据段就常驻于内存中,而那些不常用的页可以放到磁盘中去,从而节省物理内存。

1、一级页表

对于32位系统中,规定页面大小为4KB。这样一来就可以将进程的虚拟地址离散的映射到物理地址上,但在每个进程页表中的页表项数可达1MB之多。显然非常浪费内存。

 2、二级页表

一级页表显现出来的就是页表太大。那是由于页表的编排是连续的,如果能将这1MB的拆分成一小个页面,然后管理。二级页表实现的就是这样的功能:用一个页表来存放另外1024个页表,每个页面还是4KB,现在每个一级页表都是4MB。现在只需要在内存中存放外部页表,只有当前需要的部分页表项调入内存,其他的页表项仍然存放在磁盘上。

 III、总结

页表机制的出现解决前面出现的三个问题:进程地址空间保护、内存使用率低、程序运行地址重定位。但是这些页表是如何被分配和回收的,当出现内存碎片又是如何处置的,这些会在分析伙伴系统提到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值