您的当前位置:首页正文

【操作系统】为什么要分段?为什么要分页?

2024-11-09 来源:个人技术集锦

为什么要分段?

分段要基于物理硬件的历史来说

然后可能会问16位基址如何映射到20位呢?
他是通过段基址左移4位(基址*16倍变为20位)来映射
如要访问(0x05801)的内存 就是通过(0x0058)左移4位+(0x0001)获得
0x0580+0x0001=0x00581

你如果觉得16位左移4位会溢出?维基百科有一段是这样说的

我们经常谈的程序可执行文件的分段,例如代码段数据段这些,在最开始其实就是为了跟上面描述的硬件上的内存分段机制对应,并且逻辑上能够更清晰有序地构造程序的组织结构。

为什么要分页?

分页是在分段后的一段时间出的
是为了解决分段粒度大,因为段需要整段的加载进内存以及整段换出,造成内存碎片大,不易于管理,虽然可以通过将段置换出磁盘再加载的方式减少碎片,但是效率实在太低
分页管理通过划分物理空间为一块块固定大小的页与之对应,能够将程序分割成一页一页加载进内存,提升了内存的利用率

分段和分页的优缺点

  • 分段:

    • 优点:
      每个逻辑单元课单独占用一个虚拟空间,使编写程序的空间大为增长
      段氏按照逻辑划分,信息共享十分方便
    • 缺点:
      每一段都占用不固定大小的连续空间,一个段必须全部加载到内存,造成内存碎片过多
  • 分页:

    • 优点:固定大小分页,减少了内存碎片,降低了内存磁盘换入换出的消耗
    • 缺点:一个进程只能占优一个虚拟空间,导致程序大小至多与虚拟空间大小一样大,所有内容都必须从该空间分配

总结

首先,说了分段的来源
然后说了分段的缺点从而引入了分页
所以利用了段的方便管理以及页的内存利用的优点得出了段页式管理
可以将程序分为具有逻辑意义的不同大小的段(方便进程管理,代码共享和信息保护),为了利用空间再对段进行分页

显示全文