Skip to Content
面试题库Operating System[面试题] 页表和段表分别是什么?分页和分段有什么区别?

[面试题] 页表和段表分别是什么?分页和分段有什么区别?

📖 版块 A:知识讲解版 (温故知新)

  • 页表(Page Table)
    1. 分页管理中的核心数据结构。
    2. 负责建立“虚拟页号 -> 物理块号”的映射关系。
    3. 程序访问地址时,硬件会根据页号查页表,再定位到具体物理页框。
  • 段表(Segment Table)
    1. 分段管理中的核心数据结构。
    2. 每一项通常记录段基址、段长度以及访问权限等信息。
    3. 逻辑地址一般写成“段号 + 段内偏移”。
  • 分页和分段的核心区别
    1. 划分依据不同
      • 分页按固定大小切分。
      • 分段按逻辑意义切分。
    2. 长度是否固定不同
      • 页大小固定。
      • 段长度可变。
    3. 语义不同
      • 页对程序员基本无感,没有业务语义。
      • 段通常有明确语义,比如代码段、数据段、栈段。
    4. 碎片类型不同
      • 分页基本避免外部碎片,但可能有内部碎片。
      • 分段容易产生外部碎片。
  • 一句话总结
    1. 分页偏管理效率,分段偏逻辑表达。

🎤 版块 B:面试实战版 (高手逐字稿)

Q:页表和段表分别是什么?分页和分段有什么区别?

🧠 破局思路:这题最怕答成“分页固定、分段不固定”就结束了。真正能拉开差距的是你把“操作系统视角”和“程序员视角”都说出来。

💬 高手逐字稿

先说页表和段表是什么。

如果操作系统采用的是分页管理,那么核心数据结构就是页表。页表的作用非常直接:把虚拟地址里的页号,映射到物理内存里的页框号。程序访问一个地址时,硬件会先根据页号去查页表,找到对应的物理块,再结合页内偏移定位到真正的物理地址。

如果采用的是分段管理,那对应的核心数据结构就是段表。段表里通常记录每个段的基址、长度以及权限信息。程序地址一般表示成“段号 + 偏移量”,系统先通过段号找到段表项,再检查偏移量是否越界,最后定位实际地址。

接下来再说分页和分段的区别。我一般会从四个角度答。

第一,划分方式不同。分页是按固定大小切分,页和页之间没有逻辑含义;分段是按程序逻辑切分,比如代码段、数据段、栈段。

第二,长度特征不同。页的大小是固定的,由系统预先规定;段的大小是可变的,取决于程序本身的逻辑结构。

第三,面向的目标不同。分页更像是操作系统为了方便内存管理做的抽象,核心目标是规整和高效;分段更像是为了贴近程序员的认知模型,强调逻辑意义和边界。

第四,碎片问题不同。分页通常不会有严重的外部碎片,但可能会因为最后一页没装满而产生内部碎片;分段由于每段长度不固定,更容易产生外部碎片。

所以如果一句话总结:分页是“为系统管理服务”的,分段是“为程序逻辑服务”的。

这也是为什么现代操作系统里,经常会把两者结合起来,最后演化成段页式管理。

最后更新于:
⏱️

登录后开始阅读

当前 MVP 版本只开放邮箱密码登录注册。完成登录后即可进入面试题内容。

还没有账号?先去注册