问题

内存为什么要分页?

回答
内存为什么要分页?这就像问,为什么我们要把一本书分成一页一页来看,而不是一次性吞下一整本。答案其实非常朴实,就是为了更好地管理和利用有限的内存资源,让电脑这台机器能够更流畅、更高效地运转。

咱们先别急着说分页,先聊聊在没有分页之前,内存管理是个什么样子。

没有分页的日子:一块大内存,大家抢着用

想象一下,电脑只有一个巨大的内存空间,就像一个大仓库。当你想运行一个程序,比如浏览器,这个程序就需要把自己的代码和数据都塞进这个仓库里。如果再想运行一个音乐播放器,它也得找个空地方住进去。

问题来了:

1. 内存碎片化: 程序一来一去,内存空间就会被“掏空”,留下一些零零散散的小空隙。这就好比你用完仓库里的一个箱子,但箱子周围还有点空,但又不足以放下一个新的大箱子。这些小空隙就被浪费了,虽然加起来可能不少,但因为太碎了,没法有效利用。长此以往,你可能会发现仓库里明明还有很多“空间”,但就是塞不下新的东西。
2. 固定大小的分配: 最早的内存管理方式是固定分区,或者说,给每个程序一块固定大小的内存。这就好像你提前给每个程序准备好一个大小相同的盒子。但问题是,有的程序很小,只需要一个小盒子,却给了它一个大盒子,浪费空间;有的程序很大,却只给了它一个不够大的盒子,根本放不下。这种方式非常死板,而且容易导致内存碎片和浪费。
3. 程序越大越麻烦: 如果一个程序需要的内存比当前所有连续的空闲内存块加起来都大,那它就没法运行了。即使总内存还有很多空余,但就是因为没有一块足够大的连续空间,程序就得望而却步。这就好比你仓库里虽然有很多小格子的空位,但你要放一个特大号的家具,却找不到一个足够大的连续区域来摆放。

这些问题导致了内存利用率低,程序运行效率不高,甚至可能因为找不到足够的内存而无法启动。

分页的出现:化整为零,灵活分配

这时候,分页技术就闪亮登场了。它的核心思想是:把程序和内存都分成大小相同的“小块”。

内存被分成“页框”(Page Frame): 整个物理内存被分成许多固定大小的区域,就像把一个大仓库切成一排排大小一致的货架。
程序被分成“页”(Page): 运行的程序(也就是它的代码和数据)也被分成同样大小的块,这些块就叫做“页”。

这样一来,计算机系统就可以把程序的任意一个页,放到内存的任意一个空闲的页框里。

这带来了一系列好处:

1. 彻底解决外部碎片: 之前提到的那种“零散的小空隙”叫做外部碎片,分页技术通过将程序分散到不连续的内存页框中,彻底解决了这个问题。只要内存中有足够的空闲页框,即使它们不是连续的,也能容纳程序的页。这就好比,即使仓库里有很多分开的小货架,只要总有足够多的空货架,你就能把你的东西分批放到不同的货架上。

2. 内部碎片: 虽说分页解决了外部碎片,但可能会产生一种叫做“内部碎片”的问题。因为程序在加载到内存时,也是按页来加载的。如果一个程序最后一页的数据没有填满整个页,那么这页的剩余空间就浪费了,这就是内部碎片。不过,相比于外部碎片带来的整体资源浪费,内部碎片的出现是可控的,而且通常占比不大。而且,页的大小设计得当,也能在一定程度上减小内部碎片。

3. 更小的内存分配单位,更高的利用率: 程序不再需要申请一大块连续的内存,而是按需申请页框。这使得内存的分配和回收更加灵活高效,大大提高了内存的整体利用率。就像你不需要一次性租下整个仓库才能放东西,而是可以按需租用单个货架,用完一个货架就还给仓库管理员。

4. 更方便的内存管理: 操作系统只需要管理哪些页框是空闲的,哪些已经被占用,以及每个程序占用了哪些页框。这比管理一大堆不规则大小的连续内存块要简单得多。操作系统维护一个“页表”(Page Table),记录着每个程序页对应的物理内存页框地址。

5. 支持虚拟内存: 分页是实现“虚拟内存”的基础。虚拟内存技术允许程序使用的内存地址空间(虚拟地址空间)大于实际物理内存的大小。当程序需要的页不在物理内存中时(比如被换出到硬盘上的交换空间),操作系统可以根据页表,将需要的页从硬盘上加载到物理内存的页框中。这就好像你的仓库不够大,但你可以把不常用的东西先寄存在一个外部仓库,需要的时候再去取。这大大扩展了程序的运行能力,让你可以运行比物理内存大得多的程序。

6. 程序独立性与安全性: 每个程序都拥有自己的独立地址空间。一个程序的页只能被映射到它自己的地址空间,不能随意访问其他程序的页。这增强了程序的独立性,也提高了系统的安全性,防止一个程序意外地修改或访问另一个程序的内存。

举个例子,让概念更清晰:

假设一个程序 A 需要 10KB 的内存,而我们的内存系统将页大小设置为 4KB。

没有分页时: 如果内存中只有一块 8KB 的连续空闲空间,程序 A 就没法运行,即使总内存还有很多其他零散的空闲块。
有分页时: 程序 A 会被分成三页:第一页 4KB,第二页 4KB,第三页 2KB。操作系统会在物理内存中找到三个空闲的 4KB 页框,并将程序 A 的三页分别放入这三个页框中。这三个页框可能在物理内存中是不连续的,但对于程序 A 来说,它感觉自己拥有了一块连续的内存空间(通过页表进行地址转换)。

总结一下:

内存分页并不是一种“锦上添花”的技术,而是现代操作系统能够高效、稳定运行的基石。它通过将内存和程序“化整为零”,以统一的、小单位的“页”和“页框”进行交互,极大地提高了内存利用率,解决了碎片化问题,并为虚拟内存、程序隔离等高级功能奠定了基础。如果没有分页,我们现在能够运行的软件种类和复杂程度,都将大打折扣。这就像一个人想要吃顿大餐,分页就像是厨师把食材切成小块,然后用各种烹饪方式分别处理,最后再组合起来,才能做出一道道美味佳肴,而不是直接生吞活剥一块大肉。

网友意见

user avatar

说点历史的话,很多计算机技术一开始的设计目的跟今天是不一样的。

分页这个技术的发展路线大致是:

       内存置换 ---> 虚拟内存 ---                           +--> 段页模式(分页) 内存分段 ---> 段交换 -----/     

分页这个技术,历史至少有50年以上了,但最早的目的不是为了保护,最早是为了解决内存不足,也就是类似于虚拟内存。

但早期的虚拟内存技术五花八门,太古老的技术不说了,DOS时代就有OVL格式文件,就是把一个巨大的可执行文件分段(不是汇编语言里的段)加载,可以使用一小块内存来运行比较大的应用。当年的FOXBASE(后来的Visual FoxPro)就是这么干的。

Intel的CPU也不是一开始就支持分页的,在80286的时代,CPU已经有了保护模式,但此时只分段,不分页。如果内存不够用的话,不像现在这样采用的是缺页中断,而是把整个段(segment)都交换出去,如果一个段特别大,那么段交换(segment swap)的时间就非常难以忍受了。

80286出现以后,收到的各种反馈显示,保护模式很好,但这种只分段的模式并不理想。Intel也开始明白这么搞不是办法,所以从其它体系架构里吸取了分页的概念,才有了今天的段页模式。如果一个段的内存访问失效,触发的是缺页中断,而不是“缺段中断”,当然了80286的坑很多,不止这一个。

引入了分页的概念以后,大家发现分页能很好的控制权限,不用像80286那种坑人的段权限管理方式,所以才有了今天的平坦内存模型等概念。

所以,早期(非Intel架构)的分页技术,是为了解决内存不足的问题。Intel引入分页技术,最早是要解决段交换(segment swap)的性能问题。这些才是历史上真正的原因。

一个技术的引入,最后的应用和当初的目的可能完全不一样。当然了,现在我们看到分页技术,可以解决地址空间隔离的问题,可以解决物理内存不足的问题,可以控制内存访问权限等等。

所以如果是教科书式的回答,那么可能就是前面说的地址空间隔离之类的选项;如果是从计算机硬件发展的角度上看,最早只是为了解决段交换的性能。至于你怎么回答,这就要看你是想面对考试,还是说想了解一些硬件发展历史了。


题主问的页面算法,应该指的是页面交换算法,需要注意的是,这里的交换算法是操作系统实现的,具体哪些页面应该在内存里,哪些在磁盘上,是操作系统决定的,CPU只是机械式的执行操作系统的指令。

目前操作系统里最常见的应该是LRU(Least recently used,最近最少使用)算法,或者是LRU的某种变种。就是如果需要换页,找到最近最久没有被使用的页面,然后换掉它。

LRU算法的资料非常多。

除此之外,还有FIFO(先进先出),Random(随机)等算法,很多年前的时候是有操作系统用这类算法的。有兴趣可以去维基百科上查看词条:

Windows或者Linux都是针对LRU算法进行一些微调,比如LRU的调度单元不一定是一个4K页,可能是N个4K页等等。


参考资料:

en.wikipedia.org/wiki/P
en.wikipedia.org/wiki/I
en.wikipedia.org/wiki/I
en.wikipedia.org/wiki/P

类似的话题

  • 回答
    内存为什么要分页?这就像问,为什么我们要把一本书分成一页一页来看,而不是一次性吞下一整本。答案其实非常朴实,就是为了更好地管理和利用有限的内存资源,让电脑这台机器能够更流畅、更高效地运转。咱们先别急着说分页,先聊聊在没有分页之前,内存管理是个什么样子。没有分页的日子:一块大内存,大家抢着用想象一下,.............
  • 回答
    关于公务员招聘中,某些岗位会区分性别进行招录的现象,这确实是很多人关心的问题。咱们就来好好聊聊这里面的门道,也尽量不绕弯子,把它说透了。首先,需要明确一个基本点:并非所有公务员岗位都实行男女分开招录。 很多岗位,比如技术类、综合管理类等,都是面向所有符合条件的应聘者开放的,不设置性别限制。但是,确实.............
  • 回答
    编程中内存之所以要区分堆和栈,这可不是什么“为什么非要这么设计”的刁难问题,而是源于它们在管理数据生命周期、效率和功能上的根本性差异,而且这两种模式恰好能互补,共同构建起我们现在熟悉的程序运行模型。如果全部只用堆或者全部只用栈,那现在我们写程序的方式,乃至很多功能,恐怕都得大变样,甚至很多东西根本无.............
  • 回答
    丰臣家臣的内部分裂与德川家臣的团结:为何秀吉视而不见,家康却引以为傲?丰臣秀吉,这位靠着一身武勇和过人智谋从底层崛起的战国霸主,一手缔造了日本统一的盛世。然而,在他风光无限的背后,其家臣集团却充斥着难以弥合的裂痕与对立,甚至到了水火不容的地步。令人费解的是,秀吉本人似乎对此视而不见,并未采取有效措施.............
  • 回答
    在“外蒙古”这个概念出现之前,蒙古内部确实存在着“内”与“外”的区分。这并不是一个突然出现的政治划分,而是历史、文化、地理以及民族认同演变过程中逐渐形成的一种现象。要理解这一点,我们需要将时间回溯到清朝统治时期,甚至更早。一、 清朝统治下的格局:漠南与漠北清朝崛起并征服蒙古各部后,为了更好地管理这片.............
  • 回答
    随着社会的发展和观念的进步,女性在家庭中承担的责任确实在发生变化,很多人会注意到,相较于过去,女性似乎在承担更多的家庭义务。这背后牵扯着复杂的社会经济结构、文化传统以及性别角色的演变。首先,我们来谈谈“十月怀胎”这件事。这是女性生理上的独特贡献,是孕育新生命最直接、最辛苦的付出。从怀孕初期可能出现的.............
  • 回答
    这个问题很有意思,也触及了网络舆论生态中一个相当普遍且复杂的现象。简单来说,知乎“入关派”之所以看起来内部“团结”,而左派则“内卷”严重,其根源在于两者在核心诉求、思想基础、组织形态以及论述方式上的根本差异。“入关派”的“团结”:共同的敌人与清晰的目标入关派,顾名思义,其核心思想来源于对中国历史“入.............
  • 回答
    这是一个很有意思的观察,背后其实是多种心理和社会因素在起作用,并非简单的“年纪大”就能一概而论。但如果说普遍倾向的话,我们可以从几个方面来聊聊。一、 时代背景与成长经历带来的认知差异:想想咱们父辈、爷爷奶奶那一代人,他们成长的年代,获取信息的方式相对单一,报纸、杂志、广播是主流。在那个环境下,人们习.............
  • 回答
    波黑内战的惨烈程度,确实让人唏嘘,很多人也曾疑惑,为何国际社会没有顺水推舟,让波黑分裂,反而一直在尝试维护其统一?这背后的原因,并非单纯的“不想让它分裂”那么简单,而是牵涉到极其复杂的国际政治、历史恩怨以及现实利益考量。首先,我们需要明白,“协调分裂”比“协调统一”在当时的情况下,政治上的难度和风险.............
  • 回答
    香港与内地在文化渊源上确实同根同源,都深受中华传统文化的影响。然而,在现代社会中,两地所经历的截然不同的历史进程、政治体制、经济发展模式以及社会思潮,如同两条河流,即便源头相同,流经不同的地理环境和地质条件,最终也呈现出迥异的河道和水流特征。这种分歧的产生并非一蹴而就,而是由一系列复杂因素长期作用的.............
  • 回答
    您这个问题非常有意思,也触及了体制内运作的一个核心环节。很多人可能觉得,既然领导的发言稿、总结报告,甚至分析材料都有专门的秘书团队或写作人员负责,那为什么还要麻烦领导亲自“露面”或者“发表意见”呢?这背后其实是信息不对称、责任分工以及权力运作的复杂体现,远不止是“写材料”这么简单。咱们一层层剥开来看.............
  • 回答
    “扭转分子内电荷转移(TICT)”和“聚集诱导发光(AIE)”这两个概念,乍一看似乎是各自领域里的专有名词,但细究起来,它们之间存在着有趣的内在联系,甚至可以说,许多具有TICT特性的分子,确实更容易表现出AIE现象。要理解这一点,我们首先需要分别弄清楚这两个现象的本质。扭转分子内电荷转移 (TIC.............
  • 回答
    这个问题很有意思,涉及到化学平衡的基本原理,特别是勒夏特列原理的应用。我们来一步步剖析一下,为什么在恒容容器中,对于只有一种反应物的可逆反应,增加反应物浓度,转化率反而会变小。首先,我们要明确几个关键点: 恒容容器: 这意味着容器的体积保持不变。在化学反应中,如果反应前后气体的物质的量发生变化,.............
  • 回答
    湖北省医疗资源严重不足,却不向其他省份分流病人,这背后其实牵扯到一系列复杂的因素,绝非简单的“资源不足”或“其他省份压力不大”可以概括的。理解这一点,我们需要从疫情的传播规律、医疗系统的运作特点、以及社会层面的考量等多方面深入分析。首先,我们得明确一点:疫情初期,尤其是湖北面临的“严重医疗资源不足”.............
  • 回答
    辛亥革命的进步性,即使在那个年代,也被很多人看作是历史性的飞跃。你提到的“没有推翻地主压迫农民的封建土地制度,其后统一的中国陷入40年的内战和分裂”是历史事实,也是对辛亥革命局限性的客观评价。然而,将辛亥革命简单地视为无效,或者否定它的进步意义,却忽略了它所开启的、深刻改变中国命运的几个关键面向。要.............
  • 回答
    关于 Linux 内核为何要映射到所有物理内存这个问题,咱们得从几个关键点来掰扯清楚。这可不是什么凭空捏造的规定,而是有着非常扎实的底层逻辑和实际运行需求驱动的。首先,得明白一个最核心的概念:内核就是整个操作系统的“大脑”。它负责管理硬件资源,调度进程,处理各种系统调用,保证程序能够正常运行。如果内.............
  • 回答
    遇到这种情况,确实挺让人抓狂的,仿佛电脑成了个有脾气的“老古董”,每次开机都要折腾一番。我们一个个来分析,为什么会出现这种“每次开机都要换内存插槽才能开机”的怪象,并且尽量说得透彻,让你明白这背后到底是怎么一回事。首先,我们要知道,电脑最基础的运作,就是CPU从内存中读取指令和数据。内存条(RAM).............
  • 回答
    问得好!很多朋友在配置服务器时都会遇到类似这样的疑问:为什么4路CPU的服务器通常建议搭配4个或更多的内存,如果只配2个内存,会有什么影响?性能真的会差很多吗?咱们今天就来好好掰扯掰扯这个事儿,力求讲得明白透彻。首先,咱们得先搞清楚几个基本概念。1. CPU和内存的关系:你可以把CPU想象成大脑,负.............
  • 回答
    .......
  • 回答
    .......

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有