---- 整理自狄泰软件唐佐林老师课程

查看所有文章链接:(更新中)深入浅出操作系统 - 目录

文章目录

  • 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页交换算法
      将当前最少使用的页从内存中移出

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 - 页式内存管理相关推荐

  1. 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述

    上几篇文章学习了任务切换相关知识,如下: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套 今 ...

  2. Linux 操作系统原理 — 内存管理 — 页式内存管理技术

    目录 文章目录 目录 虚拟内存技术 页式内存管理技术 虚拟内存技术 虚拟内存技术是操作系统实现的一种高效的物理内存管理方式,具有以下作用: 使得进程间彼此隔离:通过将物理内存和虚拟地址空间联系起来,并 ...

  3. 操作系统【五】分段内存管理+段页式内存管理

    基本分段存储管理 与分页最大的区别:离散分配时所分配地址空间的基本单位不同 进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名,每段从0开始编址 内存分配规则:以段位单位进行分配 ...

  4. 连续内存分区式内存管理

    目录 前言 分区式内存管理 动态分区内存管理 总结 本笔记参考黄工的https://mp.weixin.qq.com/s/k0W_LqI1zBAYC1GU1U2HQA 前言 内存管理模块主要负责内存的 ...

  5. 动态分区式内存管理(完整代码)

    操作系统实验导航 实验一:银行家算法 https://blog.csdn.net/weixin_46291251/article/details/115384510 实验二:多级队列调度和多级反馈队列 ...

  6. ARM和英特尔的386系列内存管理MMU硬件机制不同,ARM是基于协处理CP15(核心是C2 TTRB0,1)分页式,386是以段寄存器和CR3寄存器分段分页式内存管理

    ARM和英特尔的386系列内存管理MMU硬件机制不同,ARM是基于协处理CP15(核心是C2 TTRB0,1)分页式,386是以段寄存器和CR3寄存器分段分页式内存管理

  7. linux内存段页,linux内存管理-段式和页式管理

    该博文参考国嵌视频和http://www.cnblogs.com/image-eye/archive/2011/07/13/2105765.html,在此感谢作者. 一.地址类型 物理地址:CPU通过 ...

  8. 详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系

    进程状态之间的关系: 1.分段式内存管理: 分段:进程地址空间按照逻辑关系将自身划分为若干个段,每个段都有自己的段名,从0开始编址. 内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各 ...

  9. 我是如何学习写一个操作系统(八):内存管理和段页机制

    前言 多进程和内存管理是紧密相连的两个模块,因为运行进程也就是从内存中取指执行,创建进程首先要将程序和数据装入内存.将用户原程序变成可在内存中执行的程序,而这就涉及到了内存管理. 内存的装入 绝对装入 ...

最新文章

  1. Codechef REBXOR[dp+字典树]
  2. Peer J:整合高通量绝对丰度定量方法解析土壤细菌群落及动态
  3. matlab相关系数影像匹配_双目立体匹配步骤详解
  4. eclipse搭建Android开发环境
  5. python-re模块
  6. Java后端--25--内存数据库Redis讲解
  7. 数据中心热度高 苹果也来掺一脚
  8. ChainOfResponsibilityPattern(23种设计模式之一)
  9. Linux命令:tac
  10. vue前端页面数据加载添加loading效果
  11. 2017初赛普及c语言答案,NOIP2017初赛普及组C++试题
  12. 8uftp无法取得目录列表,解决8uftp无法取得目录列表的问题只需4步
  13. MongoDB学习笔记之索引(一)
  14. 手写计算机在线计算,计算器中的神器《MyScript手写计算器》
  15. c r 语言教程,R语言初级教程
  16. 从PROXMOX群集中安全删除节点
  17. 未来几年,谁能拯救手机拍照功能? 1
  18. golang构建htpp服务
  19. i春秋 upload
  20. 台式计算机软件打不开,电脑打开软件显示乱码的解决方法 电脑点击软件没反应怎么办...

热门文章

  1. 发票查验一直网络异常、无法显示验证码、点击查验没反应怎么办?
  2. 学计算机的什么是镜像,一、什么是windows镜像?什么是Ghost?它们有什么优缺点?...
  3. 书法作品落款时间的农历传统雅称摘要
  4. 某宝2020最新登录加密算法和滑小鸡算法
  5. 计算机毕设-学籍管理系统
  6. PHP面试题狼与兔子,假设一座圆形的山, 山脚分布着N个山洞, 山洞与山洞形成一个圆环,选择其中一个山洞作为起始, 兔子每天前进到l个洞, 狼每天前进到第k个洞 求多少天后, 兔子与狼在一个洞里
  7. java纳秒级时间戳_golang的time包:秒、毫秒、纳秒时间戳输出方式
  8. 企业进行固定资产盘点的作用
  9. 什么是迭代(迭代法)
  10. LaTex论文排版 | (30) 三线表