分段要基于物理硬件的历史来说
然后可能会问16位基址如何映射到20位呢?
他是通过段基址左移4位(基址*16倍变为20位)来映射
如要访问(0x05801)的内存 就是通过(0x0058)左移4位+(0x0001)获得
0x0580+0x0001=0x00581
你如果觉得16位左移4位会溢出?维基百科有一段是这样说的
我们经常谈的程序可执行文件的分段,例如代码段数据段这些,在最开始其实就是为了跟上面描述的硬件上的内存分段机制对应,并且逻辑上能够更清晰有序地构造程序的组织结构。
分页是在分段后的一段时间出的
是为了解决分段粒度大,因为段需要整段的加载进内存以及整段换出,造成内存碎片大,不易于管理,虽然可以通过将段置换出磁盘再加载的方式减少碎片,但是效率实在太低
分页管理通过划分物理空间为一块块固定大小的页与之对应,能够将程序分割成一页一页加载进内存,提升了内存的利用率
分段:
分页:
首先,说了分段的来源
然后说了分段的缺点从而引入了分页
所以利用了段的方便管理以及页的内存利用的优点得出了段页式管理
可以将程序分为具有逻辑意义的不同大小的段(方便进程管理,代码共享和信息保护),为了利用空间再对段进行分页