ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

操作系统内存管理深度解析:페이징(Paging)与세그먼테이션(Segmentation)原理与实践指南

操作系统内存管理深度解析:페이징(Paging)与세그먼테이션(Segmentation)原理与实践指南 教程知识库【免费下载链接】tech-interview-for-developer 신입 개발자 전공 지식 기술 면접 백과사전 项目地址https://gitcode.com/GitHub_Trending/te/tech-interview-for-developer点击查看免费下载本文基于开源面试百科仓库 tech-interview-for-developer 中 Paging and Segmentation.md 整理扩充而成。多道程序设计系统中多个进程需要同时驻留主存操作系统必须对主存进行动态分割与分配由此诞生了连续内存管理固定分区、动态分区与不连续内存管理分页、分段两大技术体系。读完本文你将系统掌握页Page与帧Frame、段Segment的核心概念理解简单分页、简单分段、虚拟内存分页、虚拟内存分段的区别与各自面对的碎片问题并能结合内存管理单元MMU、页面置换算法等知识回答操作系统面试中的高频追问。为什么需要分页与分段多道程序系统的内存管理诉求在单道程序时代一个程序独占全部主存即可运行。但在多道程序设计multiprogramming系统中多个进程需要同时驻留于主存才能实现 CPU 的高效复用与任务切换。操作系统必须承担主存管理的职责多道程序设计系统要容纳多个进程就需要对主存进行动态分割把有限的主存空间合理划分给不同进程这就是内存管理memory management工作的由来。主存main memory是 CPU 可直接访问的存储设备进程若要执行其程序必须首先被加载进内存参见仓库文档 Memory.md 中对主存与 MMU 的说明。而内存空间是有限且宝贵的如何把有限的空间分配给数量不定、大小不一的进程正是分页与分段等技术要解决的核心问题。从更宏观的角度看内存管理也是操作系统五大核心职责之一——存储设备管理参见 Operation System.md 中저장장치 관리章节。内存管理技术总览连续分配与不连续分配依据程序在内存中的放置方式内存管理技术分为两大类1. 连续内存管理Contiguous Memory Management连续内存管理要求整个程序作为一个整体被连续地分配在内存的一块大空间中。它又可以细分为两种分区方式固定分区Fixed Partitioning主存被预先划分为固定大小的若干分区partition每个分区容纳一个进程。由于进程大小与分区大小很难完全一致几乎必然产生内部碎片Internal Fragmentation——分配给进程的分区内部存在未被利用的剩余空间。动态分区Dynamic Partitioning分区根据进程的实际大小在装载时动态创建进程被装入与其大小相同的分区中。这避免了内部碎片但频繁的分配与回收会使内存中出现许多零散的小空闲区产生外部碎片External Fragmentation——空闲空间总量足够却因不连续而无法被大进程利用。2. 不连续内存管理Non-contiguous Memory Management不连续内存管理允许程序的不同部分被分配映射到内存中彼此不相邻的地址空间从根源上规避了必须找一整块连续空间的限制。它建立在以下三个基础概念之上概念定义特点页Page进程被划分出的固定大小的片段尺寸固定是逻辑虚拟地址空间的划分单位帧Frame与页大小相等的主存物理内存片段尺寸固定是物理内存的划分单位段Segment不同大小的逻辑块被连续放置在内存空间中尺寸可变按程序逻辑结构划分其中单页页的大小是固定的页与页之间一一对应地装入帧中而段的大小是可变的每个段是一个独立的逻辑单位。关键记忆点固定尺寸 → 分页Paging可变尺寸 → 分段Segmentation。此外碎片Fragmentation是指存储空间中空闲区域或数据被分割成多个小片段的现象——无论是内部碎片还是外部碎片本质都是内存利用率下降的体现。分页Paging详解简单分页Simple Paging简单分页是最基础的分页形式其核心思想是每个进程被划分为长度均等的页Page这些页与物理内存中大小相同的**帧Frame**一一对应装载。简单分页的优点与代价不存在外部碎片因为页与帧大小完全一致物理内存以帧为单位分配不会产生无法利用的零散空闲区。存在少量内部碎片进程最后一个页往往装不满一个帧这部分剩余空间即内部碎片。由于页的尺寸通常很小内部碎片量也很小在可接受范围内。分页的地址转换与 MMU分页得以实现离不开**内存管理单元MMUMemory Management Unit**这一硬件。根据仓库 Memory.md 的记载MMU 负责把逻辑地址虚拟地址转换为物理地址并总管 CPU 访问内存的整个过程包括内存保护与缓存管理。进程在运行时使用的是虚拟地址用户视角下的地址空间而真实数据存放在物理地址中。MMU 通过页表Page Table完成从虚拟页号到物理帧号的映射实现快速地址转换。之所以需要 MMU是因为若没有 MMUCPU 只能直接访问物理地址程序员需要自行管理内存分配负担极重MMU 免去了用户逐字节手动分配存储空间的麻烦MMU 使得进程的实际尺寸可以超过物理内存容量仍能运行——这正是虚拟内存的用武之地。在进程内部逻辑地址空间本身也被组织为**代码段Code、数据段Data、栈段Stack**三部分详见 Process Address Space.md代码段存放程序源代码数据段存放全局变量栈段存放函数调用与局部变量。这种划分一方面最大化数据共享、节省内存同一程序的代码内容一致可共享另一方面利用栈的 LIFO 特性高效管理函数调用。分段Segmentation详解简单分段Simple Segmentation简单分段按程序的逻辑结构如主程序、子程序、栈、数据区等把进程划分为若干大小不同的段每个进程被划分为多个段Segment每个段是一个独立的逻辑单位被连续放置于内存中。简单分段的优点与代价没有内部碎片段的划分依据是程序逻辑边界而非固定尺寸段的大小即所需大小不会在段内部留下浪费空间。内存使用效率更高段按需分配避免了固定尺寸划分造成的空间浪费。动态分区带来的开销更小段的装载类似于动态分区但只在段级别进行管理。存在外部碎片不同进程的段大小各异反复装载/卸载后内存中会出现零散的小空闲区依然面临外部碎片问题。分页与分段的直观对比维度分页Paging分段Segmentation划分单位大小固定页/帧可变段划分依据物理尺寸程序逻辑结构外部碎片无有内部碎片少量无地址空间视角线性、对程序员透明按逻辑模块对程序员可见虚拟内存从全部装载到按需装载虚拟内存分页Virtual Memory Paging虚拟内存分页是简单分页的进阶形态其核心理念是与简单分页不同不需要把进程的全部页面都加载进内存。进程运行期间只有被访问的页面才需要时自动从磁盘调入。由此带来的效果无外部碎片继承简单分页按帧分配的特性突破了物理内存容量限制进程的逻辑尺寸可以远大于物理内存这是虚拟内存价值的直接体现代价是更复杂的软件/硬件管理需要维护页表状态位有效位、修改位等并处理缺页page fault复杂的页面管理会带来额外开销。虚拟内存分段Virtual Memory Segmentation虚拟内存分段在简单分段基础上引入按需装载不需要的段不被加载进内存当进程需要某个尚未驻留的段时系统会自动将其调入。其特点与代价无内部碎片段的边界即逻辑边界段级按需调入大幅节省物理内存占用复杂的段表与内存管理同样会带来开销。虚拟内存的落地机制内存过分配与页面置换虚拟内存允许假装拥有超过物理内存的空间这背后是**内存过分配Over-Allocating**机制。根据仓库 Memory.md过分配是指分配给进程的内存总大小超过实际物理内存大小操作系统利用虚拟内存对用户隐瞒了这一事实。但以下场景可能暴露破绽进程运行过程中发生页面错误Page Fault系统在磁盘上定位引发缺页的页面需要把该页载入空闲帧时却发现所有帧都已被占用。此时必须腾出空闲帧有两种思路直接终止一个进程回收其帧但会明显暴露内存其实不够用的事实对用户不可接受换出Swap Out一个进程利用页面置换Page Replacement把某个进程的页写回磁盘、腾出帧再用该帧装载所需页面。由于分页机制是操作系统为了提升系统效率主动选择的方案理应无感地完成因此页面置换是正确处理过分配的途径。页面置换的完整流程为进程运行发生缺页 → 在磁盘定位缺失页面 → 检查有无空闲帧有则直接使用无则选定 victim 帧写回磁盘并更新页表→ 将缺失页载入空闲帧并更新页表 → 进程像什么都没发生一样继续运行。为降低页面置换造成的磁盘 I/O 开销可采取两种策略详见 Memory.md 与 Page Replacement Algorithm.md修改位Dirty Bit优化为每个页维护一个修改位。若 victim 页的修改位为 set内存中内容已被改写与磁盘副本不同换出时须写回磁盘若为 clear内容与磁盘副本一致换出时无需写回磁盘从而把磁盘写入次数最多减少一半。选择更优的置换算法减少缺页发生的概率经典算法有FIFO先入先出、OPT最优置换淘汰未来最久不用的页理论最优但难以实现、LRU最近最少使用基于近期不用则将来大概率也不用的局部性假设是可实际落地中表现最好的算法之一。此外还有全局置换Global面向内存中所有进程的页与局部置换Local只在本进程页内选择 victim两种替换范围实践中全局替换通常更高效。从原理到实战面试高频追问与答题框架结合本仓库 Paging and Segmentation.md 及配套文档以下是在技术面试中围绕本主题最常被追问的问题及推荐回答要点Q1为什么操作系统要采用分页/分段答多道程序系统需要多个进程同时驻留主存主存必须动态分割。连续分配固定分区/动态分区分别产生内部碎片与外部碎片不连续分配分页/分段打破了整块连续约束是更高效的现代方案。Q2分页与分段有什么区别答分页按固定尺寸划分页/帧无外部碎片、有少量内部碎片分段按逻辑结构划分可变大小的段无内部碎片、存在外部碎片。分页对程序员透明分段则与程序结构对应代码/数据/栈段。Q3什么是虚拟内存分页如何支撑它答虚拟内存允许进程只装载所需页面虚拟内存分页或所需段虚拟内存分段必要时自动按需调入从而突破物理内存容量限制配合内存过分配、页面置换FIFO/OPT/LRU与修改位优化对用户保持无感。Q4页面置换为什么要避免修改过的 victim 页答修改位 set 的页换出时必须写回磁盘产生额外一次磁盘 I/O修改位 clear 的页可直接丢弃帧内容开销减半。因此应优先选择未被修改的页作为 victim参见 Page Replacement Algorithm.md。Q5进程地址空间为什么划分为代码/数据/栈三部分答最大化共享代码在同类进程中完全相同可共享、节省内存并利用栈的 LIFO 特性高效管理函数与局部变量全局变量单独存放便于多函数共用详见 Process Address Space.md。小结分页Paging与分段Segmentation是操作系统内存管理的两条主干路线前者以固定尺寸的页/帧解决外部碎片后者以逻辑为界的段消除内部碎片而虚拟内存分页/分段则进一步把按需装载引入系统配合 MMU 地址转换、内存过分配处理与页面置换算法构成了现代操作系统支撑多道程序与大型进程的完整机制。想要深入理解本主题的完整知识链建议按顺序阅读仓库内的 Paging and Segmentation.md、Memory.md、Page Replacement Algorithm.md 与 Process Address Space.md并结合 Operation System.md 中存储设备管理的定位形成对操作系统整体职责的闭环认知。赞分享教程知识库【免费下载链接】tech-interview-for-developer 신입 개발자 전공 지식 기술 면접 백과사전 项目地址https://gitcode.com/GitHub_Trending/te/tech-interview-for-developer点击查看免费下载相关推荐操作系统内核深度解析进程管理与内存分配终极指南操作系统内核深度解析进程管理与内存分配终极指南 操作系统内核是计算机系统的核心负责管理硬件资源并为应用程序提供稳定的运行环境。其中进程管理和内存分配是内核文档教程知识库kb_text_shape.h实战教程构建多语言文本渲染引擎kb_text_shape.h实战教程构建多语言文本渲染引擎 在全球化应用开发中多语言文本渲染是核心挑战之一。kb_text_shape.h作为一款轻量级单超参数调优秘籍提升Deep RL模型性能的实用技巧超参数调优秘籍提升Deep RL模型性能的实用技巧 在深度强化学习Deep RL领域超参数调优是提升模型性能的关键步骤。GitHub 加速计划 / ha上一篇Evcxr错误处理完全手册解决常见编译问题的指南下一篇告别游戏数据丢失Playnite元数据导出完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进