22-23 - 页式内存管理
---- 整理自狄泰软件唐佐林老师课程
查看所有文章链接:(更新中)深入浅出操作系统 - 目录
文章目录
- 1. 段式内存管理回顾
- 1.1 段式内存管理介绍
- 1.2 软硬件技术的发展
- 1.2.1 可行的解决方案:按段加载(局部性原理)
- 1.2.2 更进一步的解决方案:内存分页
- 1.2.3 段页式内存管理
- 2. 进阶虚拟存储技术(内存分页的意义)
- 2.1 页式内存管理中的地址
- 2.2 页式内存管理中的关键操作
- 3. 页式内存管理需要注意的问题
- 3.1 操作系统如何管理实际的物理内存
- 3.1.1 页框与页面(Frame and Page)
- 3.1.2 操作系统对物理内存的管理
- 3.2 页表与不同任务(APP)有怎样的关系?
- 3.3 页表对于任务的意义是什么?
- 3.4 页交换时如何选择需要替换的内存页?
- 3.4.1 FIFO页交换算法原理
- 3.4.2 LRU页交换算法原理
- 3.5 页表具体是如何构成的?
- 3.5.1 单级页表
- 3.5.2 二级页表
- 4. 小结
1. 段式内存管理回顾
1.1 段式内存管理介绍
- 这里的 “ 段 ” 具体的指什么?
- 一段连续的内存空间
- 为什么会有段式内存管理?
- 程序的各个部分相对独立(如:数据段、代码段)
- 早期x86处理器无法通过一个寄存器访问所有内存单元
- 解决早期程序运行时的重定位问题
- 段式内存管理的应用
- 在x86系列的处理器中,硬件对段式内存管理进行了直接支持
- 另外,段式内存管理也可使用纯软件实现
- 核心:段首地址 + 段内偏移地址 = 内存单元地址
- 段式内存管理在C语言中的体现
- 数组的本质:一片连续的内存(段)
- 数组名(array):数组的起始内存地址(段地址)
- 数组元素的访问:array[i] <==> *(array + i)
思考:
- 操作系统中只使用段式内存管理是否足够?
1.2 软硬件技术的发展
- 硬件技术:
- 计算机硬件独立化(硬件接口相同,可任意组装)
- 计算机配置差异化(各部件硬件参数不同,如:内存容量)
- 软件技术:
- 应用程序处理的问题越来越复杂(解决实际问题)
- 应用程序运行需要的资源越来越多(物理内存可能无法满足)
问题:
- 应用程序规模越来越大,导致多数时候无法加载进入内存,如何解决?
1.2.1 可行的解决方案:按段加载(局部性原理)
- 只将当前程序运行需要的段加载进内存
- 当某个段不再需要使用,立即从内存中移除
- 按段加载可能带来的 问题:
- 段的大小不确定,可能大于实际的物理内存
- 段加载时需要具体的长度信息,导致效率不高
- …
1.2.2 更进一步的解决方案:内存分页
- 页指的是固定大小的内存片(4KB)
- 每一个内存段由多个页组成
- 页 是进行内存管理的基本单位(加载页,换出页)
1.2.3 段页式内存管理
2. 进阶虚拟存储技术(内存分页的意义)
- 实模式下所使用的是什么地址空间?
- 保护模式下所使用的是什么地址空间?
- 如何分离不同应用程序所使用的内存空间?
- 程序运行需要的内存大于实际物理内存该怎么办?
- 虚拟内存空间(逻辑地址)
- 程序执行时内部所使用的内存空间(独立于其它程序)
- 物理内存空间(物理地址)
- 物理机器所配置的实际内存空间(所有程序共享)
- 逻辑地址需要进行 转换 才能得到相对应的物理地址
2.1 页式内存管理中的地址
- 地址 = 页号 +页内偏移
- 逻辑地址 = 逻辑页号 + 页内偏移
- 物理地址 = 物理页号 + 页内偏移
- 地址转换时仅变更页号即可,页内偏移不变
- 逻辑地址到物理地址的映射(重定位)
2.2 页式内存管理中的关键操作
- 页请求:
- 访问一个逻辑地址时,对应的页不在内存中
- 从外存中将目标页加到内存中
- 之后更新页表
- 访问一个逻辑地址时,对应的页不在内存中
- 页交换:
- 页请求时发现物理内存不足,需要将暂时不用的页移出
- 首先,决定并选择需要移除的页
- 将选中移除的页中的所有数据写入外存
- 更新页表,重新进行页请求
- 页请求时发现物理内存不足,需要将暂时不用的页移出
3. 页式内存管理需要注意的问题
- 操作系统如何管理实际的物理内存?
- 页表与不同任务(APP)有怎样的关系?
- 页表对于任务(APP)的意义是什么?
- 页交换时如何选择需要替换的内存页?
- 页表具体是如何构成的?
3.1 操作系统如何管理实际的物理内存
3.1.1 页框与页面(Frame and Page)
- 页框:物理内存空间中的页(物理页)
- 页面:逻辑内存空间中的页(逻辑页)
页框用于存储页面内容,而页面内容来源于逻辑内存空间
3.1.2 操作系统对物理内存的管理
- 操作系统必须知道物理内存的使用情况
- 建立结构对物理内存进行管理(页框表 Frame Table)
- 结构记录包括:页框是否被使用,被谁使用,等等
- 为具体的应用程序分配页表
方式之一:
- 任务表:
- 操作系统实现多任务(APP)的关键数据结构,用于记录各个任务的上下文信息。
3.2 页表与不同任务(APP)有怎样的关系?
- 每个任务都有专属的页表
- 页表是任务上下文的一部分
3.3 页表对于任务的意义是什么?
- 页表机制能保证任务无法意外的访问或破坏其它任务的内存
- 页表是虚拟内存空间和物理内存空间的 “分界线”
- 因为页表的存在,各个任务才具备相同且独立的内存空间
- 页表是虚拟内存通往物理内存的 “唯一通道”
任务只能在页表机制下间接访问分配的物理内存,因此无法对其它内存进行访问。
3.4 页交换时如何选择需要替换的内存页?
- 原则:挑选不再使用的内存页进行替换
- FIFO页交换算法
将最先进入内存的页移出 - LRU页交换算法
将当前最少使用的页从内存中移出
- FIFO页交换算法
3.4.1 FIFO页交换算法原理
注:通过页框表(Frame Table)判断是否有空闲页框
3.4.2 LRU页交换算法原理
- 核心思想:
- 如果某个页在最近一段时间内没有被访问到,那么在未来一段时间内被访问到的概率很小。
- 访问计数的更新方式
- 每个时间周期(Interval)将所有页框的访问计数减 1
- 当某个页面被访问时(RW)将访问计数加 1
- 则访问计数最小的页面是最近未被使用的页
3.5 页表具体是如何构成的?
- 页表的 本质是一个映射表
- 虚拟内存空间中的每一页映射到一个页框
- 页表可以看作是一维整型数组(单级页表)
3.5.1 单级页表
- 每个任务(APP)都有页表
- 单级页表大小固定(占用固定内存)
- 根据程序运行的局部性原理:
- 多数情况下,页表为稀疏状态
- 单级页表会占用大量内存资源
3.5.2 二级页表
- 把页号分为两段:页目录 + 二级页号
- 如果下级页表的所有表项为空,那么页目录为空
- 二级页表示例:
假设当前需要访问虚拟页 0x52,则:页目录为 0x5,二级页号为 0x2。所以,根据上图,对应的页框号为 0x31。
4. 小结
- 操作系统通过页框表对物理地址进行管理(分配与回收)
- 每个任务都有自己专属的页表,任务通过页表使用物理内存
- 需要页面置换时,通过规则选择短期内不再使用的页进行置换
- 单级页表能够快速映射对应的页框,但造成内存浪费
- 二级页表将页号分为两部分:页目录 + 二级页号
- 二级页表需要通过一次寻址才能映射到对应的页框
22-23 - 页式内存管理相关推荐
- 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述
上几篇文章学习了任务切换相关知识,如下: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套 今 ...
- Linux 操作系统原理 — 内存管理 — 页式内存管理技术
目录 文章目录 目录 虚拟内存技术 页式内存管理技术 虚拟内存技术 虚拟内存技术是操作系统实现的一种高效的物理内存管理方式,具有以下作用: 使得进程间彼此隔离:通过将物理内存和虚拟地址空间联系起来,并 ...
- 操作系统【五】分段内存管理+段页式内存管理
基本分段存储管理 与分页最大的区别:离散分配时所分配地址空间的基本单位不同 进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名,每段从0开始编址 内存分配规则:以段位单位进行分配 ...
- 连续内存分区式内存管理
目录 前言 分区式内存管理 动态分区内存管理 总结 本笔记参考黄工的https://mp.weixin.qq.com/s/k0W_LqI1zBAYC1GU1U2HQA 前言 内存管理模块主要负责内存的 ...
- 动态分区式内存管理(完整代码)
操作系统实验导航 实验一:银行家算法 https://blog.csdn.net/weixin_46291251/article/details/115384510 实验二:多级队列调度和多级反馈队列 ...
- ARM和英特尔的386系列内存管理MMU硬件机制不同,ARM是基于协处理CP15(核心是C2 TTRB0,1)分页式,386是以段寄存器和CR3寄存器分段分页式内存管理
ARM和英特尔的386系列内存管理MMU硬件机制不同,ARM是基于协处理CP15(核心是C2 TTRB0,1)分页式,386是以段寄存器和CR3寄存器分段分页式内存管理
- linux内存段页,linux内存管理-段式和页式管理
该博文参考国嵌视频和http://www.cnblogs.com/image-eye/archive/2011/07/13/2105765.html,在此感谢作者. 一.地址类型 物理地址:CPU通过 ...
- 详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系
进程状态之间的关系: 1.分段式内存管理: 分段:进程地址空间按照逻辑关系将自身划分为若干个段,每个段都有自己的段名,从0开始编址. 内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各 ...
- 我是如何学习写一个操作系统(八):内存管理和段页机制
前言 多进程和内存管理是紧密相连的两个模块,因为运行进程也就是从内存中取指执行,创建进程首先要将程序和数据装入内存.将用户原程序变成可在内存中执行的程序,而这就涉及到了内存管理. 内存的装入 绝对装入 ...
最新文章
- 鸿蒙系统tee内核,厉害!鸿蒙内核的技术定位,是赶第三代微内核的潮流
- 基于SSM实现学籍管理系统
- java 打印空心菱形,用for循环打印出空心菱形程序
- JS函数浅析之constructor、prototype属性
- 专家:教育等领域将成为人工智能“用武之地”
- 数据库获取的字符串按照逗号分隔,放进数组集合中
- why CRMFSH01 failed to return any value for my case
- chromebook刷机_您可以购买的最好的Chromebook,2017年版
- axi ps读写pl_PL读写DDR:Datamover能干什么
- 是什么缩写_网友:啊啊啊啊这是什么该死的缩写...“sm居然是这个意思??”...
- 投资数据中心所考虑的重要因素
- 使用PuTTY远程连接Linux
- matlab程序里nbus=x的意思,MATLAB潮流程序(IEEE14 直角坐标 牛拉法)
- html文本框最小数字,HTML5中的数字类型的输入框:数字选择器
- 软件测试行业发展前景怎么样?
- 再学 GDI+[22]: TGPLinearGradientBrush - 之一: TLinearGradientMode
- webpack-工程化工具
- 游戏引擎BigWorld宣布将在4.0版本支持HTML5
- go浏览器java_GO浏览器JAVAWP版下载_GO浏览器JAVA2016最新版_GO浏览器JAVA1.2.2-华军软件园...
- CDN加速的四大解决方案
热门文章
- oracle v rman status,RMAN 中V$ARCHIVED_LOG 中STATUS 为X 的文件处理
- db2 删除索引_[收录量]史上最全的百度索引量下降原因分析及解
- Webpack的基本使用
- 【转载】理解dropout
- 鸿蒙之下分城如果建设,率土之滨:分城数量不再限制,戍城、金虎台、拜将台让战斗更激烈...
- HDU 1290 献给杭电五十周年校庆的礼物(空间分割)
- 数据结构与算法-二叉搜索树
- Eclipse生成jar包和导入jar包
- 甩开三星自己干,苹果第一块自研屏幕要来了?
- 新手怎么把java源码做成app_怎么样将1个编写好的程序源代码做成1个软件!