内存管理(操作系统笔记四)


内存的基本概念

内存 可存放数据。程序执行之前 必须先放到内存中才能被CPU处理 ——缓和CPU与硬盘之间的速度矛盾。

内存中就是一系列的存储单元,如果计算机 “按字节存储” ,则每个存储单元的大小为一个字节,即 1B8个二进制位 。如果计算机是 “按字编址” ,则每个存储单元的大小根据每个 字长 来确定。

补充:

210 = 1K (千) 220 = 1M (兆,百万) 230 = 1G(十亿,千兆)

覆盖与交换

连续分配管理方式

连续分配管理方法 :为一个用户程序分配一个 连续 的内存空间。

以上的 动态分区分配 中,当内存中有多个足够大的空闲块时,操作系统必须确定分配哪个内存块给进程使用,这就是 动态分区的分配策略 ,有以下这些算法。

非连续分配管理方式

非连续分配管理方式 根据分区大小是否固定,分为 分页存储管理方式分段存储管理方式

基本分页存储管理方式

分页存储一些词的表示,如下图

注意页号 是不需要占存储空间的,就像顺序表的索引页不需要占用存储空间, 块号 是需要占用存储空间的,块号 只表示 页框号 ,并不是 内存块的起始地址块号 的大小需要根据 有多少个页框 来确定。如下举个例子

物理内存大小4GB,页面大小为4KB,求每个页表项至少应该为多少个字节?

页框大小=页面大小=4KB= 2^12 B

4GB内存会被分为 232 / 212 = 220 个页框

页框号范围 0 ~ 220 - 1 ,至少要 20bit 来表示,所以每个页表项至少要 3B 来存储 (3*8=24bit)

基本分页存储管理 中,从 逻辑地址 转换到 内存中的物理地址 ,地址变换是基于 页表 实现的,这就是 地址变换机构

  • 分页管理 存在两个基本问题:

    • 每次访存操作都需要进行逻辑地址到物理地址的转换, 地址转换过程必须足够块,否则访存速度会降低
    • 每个进程引入 页表 ,用于存储映射机制, 页表不能太大,否则内存利用率会降低

以上 地址变换 过程中,若 页表 全部放在内存中,则存取一个数据或一条指令 至少需要访问两次内存第一次访问页表 ,确定存取的数据或指令的物理地址; 第二次是根据该地址存取数据或指令 。显然这种方法比通常执行指令的速度慢了一半。

地址变换机构中增设一个具有并行查找能力的高速缓冲存储器——快表,由称相联存储器(TLB)。

当一个进程的页表需要耗费巨大的连续内存来存储时,这不切合实际。所以,为了压缩页表,我们可得到 二级分页

建立多级页表的目的在于建立索引,以便于不用浪费主存空间去存储无用的页表项,也不用盲目的顺序式的查找页表项

基本分段存储管理方式

分页 VS 分段

段页式管理方式

虚拟内存管理

传统存储管理方式 的两个特征: 1. 一次性 :作业必须一次性全部装入内存后,才能开始运行。(这可能导致两种情况:作业太大而不能全部装入内存时使作业无法运行;当大量作业要求运行时由于内存不足以容纳所有作业,只能使少数作业先运行,导致 多道程序度的下降 ) 2. 驻留性 :作业数据在整个运行期间都会常驻内存。

  • 局部性原理 分两种:

    • 时间局部性 :现在访问的指令、数据在不久后很可能会被再次访问
    • 空间局部性 :现在访问的内存单元周围的内存空间,很可能在不久后被访问

高速缓存技术 :使用频繁的数据放到更高速的存储器中(快表、页高速缓存及虚拟内存技术从广义上讲,都属于高速缓存技术)(依赖原理为 局部性原理

请求分页管理方式

请求分页存储管理基本分页存储管理 的主要区别:在程序执行的过程中,当所 访问的信息不在内存时,由操作系统负责将所有信息从外存调入内存 ,然后继续执行程序;若空间不够,由操作系统负责 将内存中暂时用不到的信息换出到外存

  • 请求页表项 中增加了4个字段:

    • 状态位P :用于指示该页是否已经被调入内存,供程序访问时参考。
    • 访问字段A :用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问,供置换算法换出页面时参考。
    • 修改位M :标识该页在调入内存后是否被修改过。
    • 外存地址 :用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。

更具体的地址变换流程如下图

  • 只有"写指令"才需要修改"修改位" 。并且,一般来说只需要需该快表中的数据,只有要将快表项删除时才需要写回内存中的慢表,这样可以减少访存次数。
  • 和普通的中断处理一样,缺页中断处理依然需要保留CPU现场。
  • 换出页面 时需要使用 “页面置换算法”
  • 换入/换出页面都需要 启动慢的I/O操作 ,所以如果此操作太频繁将会有很大开销。
  • 页面调入内存后需要 修改慢表 ,同时也许要将表项 复制到快表 中。

页面置换算法(确定将如何换入/换出)

请求分页存储管理基本分页存储管理 其中的一点区别就在于内存空间不够时,操作系统需要将暂时用不到的信息换出到外存,选择调出页面的算法就称为 页面置换算法 。(算法的英文缩写要记住)

页面分配策略

驻留集 :指请求分页存储管理中 给一个进程分配的物理页框的集合 就是这个进程的驻留集

  • 调入页面的时机

    • 预调页策略 :运行前提前调入内存,目前预调页的成功率仅50%,所以这种策略主要用于 进程的首次调入 ,由程序员指出应先调入哪些页。
    • 请求调页策略 :进程运行时,发现缺页了才调入内存。

外存中分为 对换区文件区对换区采用连续存储方式,速度更快文件区采用离散存储方式,速度更慢 。因为两个区的不同,所以有 从何处调入页面 的问题。

  • 从何处调入页面

    • 系统拥有足够的对换区空间 :运行将所以的数据从文件区复制到对换区,之后所有的页面调度都在内存和对换区之间进行
    • 系统缺少足够的对换区空间 :不会修改的数据每次从文件区调入,会修改的数据调出到对换区,需要时再从对换区调入
    • UNIX方式 :第一次使用的页面都从文件区调入,调出的页面都写回对换区,再次使用时从对换区调入

抖动(颠簸) 现象:页面频繁的换入换出,主要原因时因为 分配给进程的物理块不够

工作集 是指再某段时间间隔内,进程要访问的页面集合。(驻留集大小要大于工作集大小)

内存管理(操作系统笔记四)相关推荐

  1. Windows内存管理学习笔记(三)—— 无处不在的缺页异常

    Windows内存管理学习笔记(三)-- 无处不在的缺页异常 缺页异常 实验一:设置虚拟内存 无处不在的缺页 位于页面文件 保留与提交的误区 实验二:理解缺页异常 EXECUTE_WRITECOPY ...

  2. Windows内存管理学习笔记(二)—— 物理内存的管理

    Windows内存管理学习笔记(二)-- 物理内存的管理 物理内存 实验一:理解MmNumberOfPhysicalPages MmPfnDatabase _MMPFN 物理页状态 六个链表 实验二: ...

  3. Windows内存管理学习笔记(一)—— 线性地址的管理

    Windows内存管理学习笔记(一)-- 线性地址的管理 用户空间线性地址的管理 实验一:理解用户空间线性地址管理 Private Memory 实验二:理解Private Memory 堆 实验三: ...

  4. 陈延伟:任督二脉之内存管理总结笔记

    任督二脉之内存管理第一节课总结 本文是任督二脉之内存管理课程第一节课的总结说明,由于水平有限,可能无法对宋老师所讲完全理解通透,如有错误,请及时指证. 本文从5个方面进行说明: 1.  物理/虚拟/总 ...

  5. 郝健: Linux内存管理学习笔记-第5节课

    前序文章: 郝健: Linux内存管理学习笔记-第1节课 郝健: Linux内存管理学习笔记-第2节课 郝健: Linux内存管理学习笔记-第3节课 郝健: Linux内存管理学习笔记-第4节课 摘要 ...

  6. 郝健: Linux内存管理学习笔记-第6节课

    前序文章: 郝健: Linux内存管理学习笔记-第1节课 郝健: Linux内存管理学习笔记-第2节课 郝健: Linux内存管理学习笔记-第3节课 郝健: Linux内存管理学习笔记-第4节课 郝健 ...

  7. 郝健: Linux内存管理学习笔记-第4节课

    前序文章: 郝健: Linux内存管理学习笔记-第1节课 郝健: Linux内存管理学习笔记-第2节课 郝健: Linux内存管理学习笔记-第3节课 摘要 page cache free命令的详细解释 ...

  8. 【转】.net框架读书笔记---CLR内存管理\垃圾收集(四)

    弱引用 当一个根指向一个对象时,该对象不可能被垃圾收集器收集,在这种情况下,通常说存在一个该对象的强引用(strong reference).垃圾收集器还支持弱引用(weak reference)的概 ...

  9. Linux内存管理原理笔记

    一.内存管理 1. 每个进程应该有自己的内存空间.内存空间都是独立的.相互隔离的.对于每个进程来讲,看起来应该都是独占的.进程不能直接访问物理内存地址,因为假如三个程序同时访问或写入同一个物理内存地址 ...

最新文章

  1. APPLE:疑问驱动下的学习与实践
  2. 中批注转成pdf看不到_超实用的PDF在线转换器,你绝对用的到~
  3. 阅读mutate源码学习dplyr
  4. laydate兼容bootstrap
  5. windows server 2008 R2系统安装教程
  6. [Qt教程] 第19篇 2D绘图(九)图形视图框架(上)
  7. Robo 3T SQL
  8. 【转】PCA算法学习_1(OpenCV中PCA实现人脸降维)
  9. c语言释放整个链表,最简单的链表删除第一个节点时释放内存的问题
  10. 移动通信学习笔记_01概述
  11. C#学习笔记(十一):动态类型
  12. inuri .php id=,php常用函数(遇见就补充)
  13. Sharding-JDBC水平分表(分片策略)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记008
  14. h3c服务器设置u盘引导,H3C FlexServer R390服务器装系统前的准备工作
  15. 自定义协议_面试官:Netty如何实现自定义协议?尽量详细点
  16. 【电路仿真】基于matlab simulink三相半波可控整流电路【含Matlab源码 331期】
  17. MacOS Ventura 13.0.1 (22A400) 正式版带 OC 0.8.6 and winPE 双分区原版黑苹果镜像
  18. 思科CISCO常用命令汇总
  19. idea手动执行maven命令的三种方式
  20. c语言中八进制输出的格式说明符,C 的输入输出格式说明符讲解

热门文章

  1. android内存攻击,观点|Rowhammer:针对物理内存的攻击可以取得 Android 设备的 root 权限...
  2. 无处 不在的无线智能——6g 的关键驱动与研究挑战_再谈6G
  3. mysql timestampdiff_「timestampdiff」MySQL timestampdiff()函数 - seo实验室
  4. 各种边距clientWidth、offsetWidth、scrollWidth、clientLeft、getBoundingClientRect详解
  5. css3中绚丽的图片翻转特效
  6. 2022-2028全球与中国宠物雨衣市场现状及未来发展趋势
  7. 加盟刷脸支付代理这个项目到底能不能做?
  8. 电子学会C语言一级模拟题:收集瓶盖赢大奖
  9. 人工智能还不错,人工智障就算了
  10. 一、opencv详细介绍