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开始编址. 内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各 ...
- 我是如何学习写一个操作系统(八):内存管理和段页机制
前言 多进程和内存管理是紧密相连的两个模块,因为运行进程也就是从内存中取指执行,创建进程首先要将程序和数据装入内存.将用户原程序变成可在内存中执行的程序,而这就涉及到了内存管理. 内存的装入 绝对装入 ...
最新文章
- Codechef REBXOR[dp+字典树]
- Peer J:整合高通量绝对丰度定量方法解析土壤细菌群落及动态
- matlab相关系数影像匹配_双目立体匹配步骤详解
- eclipse搭建Android开发环境
- python-re模块
- Java后端--25--内存数据库Redis讲解
- 数据中心热度高 苹果也来掺一脚
- ChainOfResponsibilityPattern(23种设计模式之一)
- Linux命令:tac
- vue前端页面数据加载添加loading效果
- 2017初赛普及c语言答案,NOIP2017初赛普及组C++试题
- 8uftp无法取得目录列表,解决8uftp无法取得目录列表的问题只需4步
- MongoDB学习笔记之索引(一)
- 手写计算机在线计算,计算器中的神器《MyScript手写计算器》
- c r 语言教程,R语言初级教程
- 从PROXMOX群集中安全删除节点
- 未来几年,谁能拯救手机拍照功能? 1
- golang构建htpp服务
- i春秋 upload
- 台式计算机软件打不开,电脑打开软件显示乱码的解决方法 电脑点击软件没反应怎么办...
热门文章
- 发票查验一直网络异常、无法显示验证码、点击查验没反应怎么办?
- 学计算机的什么是镜像,一、什么是windows镜像?什么是Ghost?它们有什么优缺点?...
- 书法作品落款时间的农历传统雅称摘要
- 某宝2020最新登录加密算法和滑小鸡算法
- 计算机毕设-学籍管理系统
- PHP面试题狼与兔子,假设一座圆形的山, 山脚分布着N个山洞, 山洞与山洞形成一个圆环,选择其中一个山洞作为起始, 兔子每天前进到l个洞, 狼每天前进到第k个洞 求多少天后, 兔子与狼在一个洞里
- java纳秒级时间戳_golang的time包:秒、毫秒、纳秒时间戳输出方式
- 企业进行固定资产盘点的作用
- 什么是迭代(迭代法)
- LaTex论文排版 | (30) 三线表