分页系统存在的一个没法容忍,同时也是分页系统没法解决的一个缺点就是:一个进程只能占有一个虚拟地址空间。在此种限制下,一个程序的大小至多只能和虚拟空间同样大,其全部内容都必须从这个共同的虚拟空间内分配。html
分段管理就是将一个程序按照逻辑单元分红多个程序段,每个段使用本身单独的虚拟地址空间。例如,对于编译器来讲,咱们能够给其5个段,占用5个虚拟地址空间,以下图所示:数据结构
如此,一个段占用一个虚拟地址空间,不会发生空间增加时碰撞到另外一个段的问题,从而避免因空间不够而形成编译失败的状况。若是某个数据结构对空间的需求超过整个虚拟之地所可以提供的空间,则编译仍将失败。不过出现这种可能的几率恐怕不会比太阳从西边出来的几率高出多少。spa
优势:操作系统
(1)每一个逻辑单元可单独占用一个虚拟地址空间,这样使得编写程序的空间大为增加。3d
(2)因为段式按逻辑关系划分,所以共享起来十分方便。htm
(3)对于空间稀疏的程序来讲,分段管理将节省大量的空间。blog
缺点:进程
(1)外部碎片和一个段必须所有加载到内存。内存
那么,解决办法是什么呢?分页,不过此次的分页不是前面提到的直接对程序进程进行分页,而是对程序里面的段进行分页,因而就造成了所谓的段页式内存管理模式。get
段页式管理就是将程序分为多个逻辑段,在每一个段里面又进行分页,即将分段和分页组合起来使用。这样作的目的就是想同时得到分段和分页的好处,但又避免了单独分段或单独分页的缺陷。
若是咱们将每一个段看作一个单独的程序,则逻辑分段就至关于同时加载多个程序。
采用多级页表,顶级为段表,次级为页表。由段号在段表里面得到所应该使用的页表,而后在该页表里面查找物理页面号,以下图所示:
若是须要,次级页表又能够再分为两个或者多个层次,造成层次更为丰富的段页式层次结构。
(1)一开始,人们根据直觉,将一个程序做为一整段进行管理,从而造成了纯粹分段(固定加载地址、固定分区、非固定分区、交换)管理模式,也称为基本内存管理模式,这种模式因为直观易实现,曾经大为流行。
(2)可是,纯粹分段存在重大缺陷(因为此种模式下一个程序只有一段,从而致使内存空间增加困难,外部碎片、程序不能超过物理内存容量、一个程序必须同时加载到内存才能执行等缺点),为了克服这些缺点,引入了页式内存管理模式。
(3)显然,页式内存管理克服了纯粹分段的一系列缺点,但又存在共享不方便、一个程序只能在一个徐地址空间增加的问题,为了解决这个问题,引入了逻辑分段。逻辑分段将一个程序按逻辑关系分解为多个段,从而扩大了程序可使用的虚拟地址空间并解决了共享难的问题。
(4)可是,逻辑分段终究仍是分段,天然又引入了分段的缺点。而要客服这些缺点,天然又想到了分页。这样,人们又引入了段页式管理模式。
所以,内存管理模式经历了从纯粹分段到分页,再到逻辑分段,再到段内分页的演变过程,以下图所示:
邹恒明,《操做系统之哲学原理》,机械工业出版社