分段内存管理

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/genzld/article/details/83479654

分页系统的缺点

  缺点的改进:

①页表太大?这个缺点用多级页表来克服了。②多级页表速度慢?这个问题用TLB解决了大部分。页面的来回更换?这个问题用页面更换算法解决了。

  缺点③:共享困难,虽然理论上我们可以按页面进行共享,似乎可以!但是呢这根本就是不现实的,因为一个页面的内容很可能存在代码和数据,即很难使得一个页面里面只包含可共享的内容 或者 不可共享的内容。

  缺点④:一个进程只能占用一个虚拟地址空间,这也是分页系统无法克服的。所以一个程序的大小最大只能和虚拟地址空间的大小一样,其所有的内容都必须在这个虚拟地址空间中分布。

但是很多人觉得一个程序不必要分配多个虚拟地址空间!

那么我们来看一个例子:编译器的工作过程。我们知道在编译器工作时需要保持多个数据结构:词法分析树,常数表,代码段,符合表 ,调用栈。使用保持多个数据结构并没有任何问题,问题出现在:这些数据结构可以独立的增长和缩小,从而造成了该数据结构所需的内存空间的变化。

那么我们来想怎么实现在一个虚拟地址空间内,实现各个数据段的空间的增加和减少???

解决方法:那一个程序占用一个虚拟空间不能解决我们各个数据结构段增长的需求!那么就使用多个虚拟地址空间来解决。

分段管理系统

  定义:分段管理是将一个程序按照逻辑单元分成多个程序段,每个段使用自己单独的虚拟地址空间。5个段占用5个虚拟地址空间。这样一个段占用一个虚拟地址空间,就不会发生空间增长时碰撞到另一个段的问题。

 

  分段原理:一个程序占据多个虚拟地址空间,那么不通过的段有可能有同样的虚拟地址空间。在分段情况下,一个虚拟地址空间又段号和段内偏差。段号找相应的段地址空间!

  实现手段:由于分段内存管理 和 基本内存管理有着类似之处,所以分段也是使用 基址---极限管理模式。不过这里使用的是一组 基址—极限对。而对每一对基址极限用于其中一段的管理。

分段管理的一个重要数据结构就是段表。该表存放的是虚拟的段号到该段所在内存基址的映射。如果一个段不存在,则段号对应的基址将不存在。

分段的优缺点

  优点:

1.每个逻辑单元可以独占一个虚拟地址空间,这样所写程序的空间大为增长。

2.共享性强。

3.相比于分页,当对于空间稀疏的程序,分页仍然需要分配虚拟页面。而分段不给他分配任何的虚拟空间。

缺点:既然是分段,就存在前面基本内存管理的缺点-----外部碎片化 和 一个段必须全部加载到内存上。

展开阅读全文

没有更多推荐了,返回首页