分页入门:简单分页与其他内存管理方式,操作系统小白指南

在学习操作系统或刷题时,"分页"是个绕不过去的概念。你可能听过简单分页,也可能好奇分段、分段分页这些"兄弟"方式有什么不同。尤其是它们带来的"碎片"问题,还有"进程共用页表"这种特殊情况,可能是考试或题目里的重点。这篇博客会用小白能懂的方式,带你搞清楚这些知识,重点强调碎片问题和共用页表的场景!


什么是分页?为什么要用?

**分页(Paging)**是操作系统管理内存的一种方法。想象内存是个大仓库,程序是"货物",操作系统是"管理员"。为了高效利用空间,内存和程序被切成小块,分给程序用。分页有几种方式,每种方式都会影响"碎片"(内存浪费)的类型和程度。我们先从"简单分页"讲起,再看看其他方式,最后聊聊碎片和共用页表。


分页的三种方式与碎片情况

1. 简单分页(Simple Paging)

  • 怎么分?怎么用?
    • 内存和程序都切成固定大小的小块(页面),比如4KB一页。
    • 页面可以散落在内存各处,不需要连续。
  • 生活比喻: 像把书拆成固定大小的纸片,书架分成同样大小的格子,随便放哪儿都行。
  • 碎片情况 :
    • 外部碎片 : 很少。因为页面大小固定,不要求连续,零散空闲页面也能用。但如果空页面太分散,可能不够放新程序(比如总空闲8KB,但需要连续4KB)。
    • 内部碎片 : 存在。页面固定大小,程序用不满一页时,剩下的空间浪费。比如程序10KB,页面4KB,需要3页(12KB),最后2KB没用上。
  • 刷题Tips: 题目可能问:"简单分页有外部碎片吗?" 答案是:理论上很少,但不绝对。

2. 分段(Segmentation)

  • 怎么分?怎么用?
    • 按程序的逻辑单元切分,比如代码段、数据段,大小不固定。
    • 每段需要连续的内存空间。
  • 生活比喻: 像把行李按类型分(衣服一堆、鞋子一堆),每堆得塞进一个连续的大格子。
  • 碎片情况 :
    • 外部碎片 : 严重。因为需要连续空间,内存用了一段时间后,会出现很多小块空闲区域,总量够但不连续,没法用。比如内存剩5KB+3KB空闲,但一个6KB的段放不下来。
    • 内部碎片 : 没有。段大小按需分配,不会有固定块的浪费。
  • 刷题Tips: 题目可能问:"分段为啥碎片多?" 答案是:连续分配导致空闲块分散。

3. 分段分页(Segmented Paging)

  • 怎么分?怎么用?
    • 先按逻辑单元分段(比如代码段10KB)。
    • 每段再切成固定大小的页面(比如4KB),页面不需连续。
  • 生活比喻: 先把行李按类型分,再把每类切成小份,散开放进格子。
  • 碎片情况 :
    • 外部碎片 : 很少。段内的页面可以不连续,像简单分页一样灵活,空闲页面分散也能用。
    • 内部碎片 : 存在。页面固定大小,段内最后一页可能不满。比如代码段10KB,分3个4KB页,最后2KB浪费。
  • 刷题Tips: 题目可能问:"分段分页碎片咋样?" 答案是:外部少、内部有。

碎片对比总结

方式 外部碎片 内部碎片 原因
简单分页 很少 固定大小、不需连续
分段 严重 需连续、大小不固定
分段分页 很少 页面固定、不需连续

进程共用页表:啥时候会出现?

页表是内存管理的"地址簿",记录逻辑页面和物理页面的对应关系。通常,每个进程有自己的页表,确保独立性。但有些情况下,进程会共用页表,这在刷题或考试中可能是个陷阱点。

1. 共用页表的场景

  • 共享内存 : 多个进程需要访问同一块内存时(比如进程间通信),可以用同一个页表条目指向相同的物理页面。
    • 例子: 两个进程共享一个数据缓冲区,操作系统让它们的页表指向同一个物理地址。
  • 线程 : 一个进程内的多个线程天然共用页表。因为线程共享进程的内存空间,只用一个页表就够了。
    • 例子: 你写了个多线程程序,线程A和B操作同一块内存,用的是一张页表。
  • 节省空间 : 如果多个进程运行同一个程序(比如多个终端运行bash),操作系统可能让它们的代码段页面共用,只读不改,页表指向同一块物理内存。
    • 例子 : 系统中10个bash进程,代码部分页表都指向同一个地方,节省内存。

2. 生活比喻

想象页表是"地图",正常每个游客(进程)拿一张独享地图。但如果几个游客要去同一个景点(共享内存),可以用同一张地图;或者一群朋友(线程)一起旅行,只需一张地图就够。

3. 刷题Tips

  • 题目可能问:"进程共用页表的好处?" 答案是:节省内存、方便共享数据。
  • 或者问:"线程和进程页表区别?" 答案是:线程共用进程的页表,进程间通常独立。

为什么这些知识重要?

  • 碎片问题: 不同分页方式影响内存利用率,分段外部碎片多,简单分页和分段分页更高效但有内部碎片。考试可能让你分析哪种方式适合什么场景。
  • 共用页表: 理解它能帮你搞清楚进程、线程、共享内存的机制,刷题时遇到相关问题不慌。

小结:碎片与共用页表的重点

  • 简单分页: 外部碎片少,内部碎片有,简单高效。
  • 分段: 外部碎片多,无内部碎片,逻辑清晰但浪费空间。
  • 分段分页: 外部少、内部有,兼顾灵活性和逻辑。
  • 共用页表: 共享内存、线程、节省空间时出现,提升效率。

希望这篇博客让你对分页、碎片和共用页表有个清晰的认识!下次刷题,看到这些概念,记得想想"切法""碎片"和"共享"的比喻。有疑问欢迎留言~

相关推荐
程序员一诺2 分钟前
【Python使用】嘿马python数据分析教程第1篇:Excel的使用,一. Excel的基本使用,二. 会员分析【附代码文档】
后端·python
神奇侠202421 分钟前
快速入手-基于Django-rest-framework的serializers序列化器(二)
后端·python·django
Asthenia041222 分钟前
基于Segment-Mybatis的:分布式系统中主键自增拦截器的逻辑分析与实现
后端
Asthenia041223 分钟前
Seata:为微服务项目的XID传播设计全局的RequestInterceptor-将XID传播与具体FeignClient行为解耦
后端
无奈何杨32 分钟前
Docker/Compose常用命令整理总结
后端
搬砖的阿wei38 分钟前
从零开始学 Flask:构建你的第一个 Web 应用
前端·后端·python·flask
草巾冒小子1 小时前
查看pip3 是否安装了Flask
后端·python·flask
放肆的驴1 小时前
EasyDBF Java读写DBF工具类(支持:深交所D-COM、上交所PROP)
java·后端
shuair2 小时前
01 - spring security自定义登录页面
java·后端·spring
失乐园2 小时前
解密万亿级消息背后:RocketMQ高吞吐量核心机制解剖
java·后端·面试