【操作系统】内存管理

这篇具有很好参考价值的文章主要介绍了【操作系统】内存管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本系列参考王道考研-操作系统以及博主@BitHachi

内存的基础知识

什么是内存

【操作系统】内存管理
【操作系统】内存管理

因为cpu的处理速度很快,而外存的读取速度又很慢,所以我们就需要先加载到内存中,内存的读取速度比外存要快得多,如此实现更高效的处理

【操作系统】内存管理

进程的工作原理

指令的工作原理

从X=X+1大致看一下指令的执行过程

【操作系统】内存管理

【操作系统】内存管理

【操作系统】内存管理
【操作系统】内存管理

指令的工作基于地址。每个地址对应一个数据的存储单元。

逻辑地址(相对地址)vs物理地址(绝对地址)

【操作系统】内存管理

从写程序到程序运行—编译、链接、装入

【操作系统】内存管理

不修改装入模块中的指令地址就直接装入内存的话:

【操作系统】内存管理
【操作系统】内存管理

也就是说只有当装入模块使用的内存从#0开始时,不修改装入模块中的指令地址才能行得通

装入的三种方式

  • 绝对装入 【操作系统】内存管理

    这也叫就意味着这个程序换一台就不能运行了,此方式灵活性较低

  • 静态重定位
    【操作系统】内存管理

  • 动态重定位
    【操作系统】内存管理
    【操作系统】内存管理
    【操作系统】内存管理

链接的三种方式

首先我们了解一下什么是链接:

程序的链接阶段主要做了以下几件事:

  1. 符号解析:将各个模块中使用的符号(函数名、全局变量名等)替换为实际的地址。例如如果模块A调用模块B的函数foo(),那么链接器会找到模块B中foo()的实际地址,并在模块A的调用指令中填入那个地址。
  2. 重定位:修改程序中用到的地址,以适应最终的加载地址。例如模块A中有一个data段从0x1000开始,模块B有一个data段从0x2000开始。那么链接器可能决定模块A加载到0x5000,模块B加载到0x6000。这时候链接器需要修改模块A中所有0x1000的地址为0x5000,修改模块B中的0x2000为0x6000。
  3. 解决外部符号:如果有模块调用了未定义的外部符号(例如调用了标准库函数),那么链接器需要链接适当的库来满足这些外部需求。
  4. 重复符号处理:如果有多个模块定义了相同的符号,链接器需要决定使用哪一个,并可能报错。
  5. 生成输出文件:链接的最后,链接器会将所有输入的目标文件组合成一个输出文件(可执行文件或共享库)。这个输出文件就包含了所有符号解析、重定位等处理的结果。

所以简单来说,链接的作用是将多个目标模块组合为一个连贯的程序,使其可以顺利执行或被其他程序使用。它解决了跨模块的符号引用和地址变化等问题,并生成最终的输出文件。

  • 静态链接
    【操作系统】内存管理

  • 装入时动态链接【操作系统】内存管理

  • 运行时动态链接
    【操作系统】内存管理

我们总结一下这一章:
【操作系统】内存管理

什么是内存管理?

内存空间的分配与回收

【操作系统】内存管理

内存空间的扩展(实现虚拟性)

【操作系统】内存管理

地址转换

【操作系统】内存管理

地址转换三种方式

【操作系统】内存管理

内存保护

【操作系统】内存管理
内存保护的两种方式

【操作系统】内存管理
【操作系统】内存管理

最后我们总结一下这一章:
【操作系统】内存管理

覆盖与交换技术

【操作系统】内存管理

覆盖技术

【操作系统】内存管理
【操作系统】内存管理

交换技术

【操作系统】内存管理

复习一下进程调度
【操作系统】内存管理

【操作系统】内存管理

最后我们总结一下这一章:
【操作系统】内存管理

内存的分配与回收

【操作系统】内存管理

单一连续分配

【操作系统】内存管理

固定分区分配

【操作系统】内存管理

分区说明表
【操作系统】内存管理

动态分区分配(可变分区分配)

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
系统要用怎样的数据结构记录内存的使用情况呢?

【操作系统】内存管理
当多个空闲分区都能满足要求时,应该选择哪个分区进行分配?

【操作系统】内存管理
如何进行分区的分配?

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
如何进行分区的回收?

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

内部碎片与外部碎片

【操作系统】内存管理
【操作系统】内存管理

最后总结一下本章内容:

【操作系统】内存管理

动态分区分配算法

【操作系统】内存管理

首次适应算法

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

最佳适应算法

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

最坏(大)适应算法

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

临近适应算法

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

四种算法归纳比较

【操作系统】内存管理

分页存储

【操作系统】内存管理
【操作系统】内存管理

基本分页存储管理的思想

【操作系统】内存管理

分页存储管理的重要概念

【操作系统】内存管理

如何实现地址的转换

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

如何计算页号和页偏移量

【操作系统】内存管理
为什么页面大小一般设为2的整数次幂?

【操作系统】内存管理

【操作系统】内存管理

分页存储的逻辑结构

【操作系统】内存管理

如何知道页面在内存中的起始地址?

【操作系统】内存管理
【操作系统】内存管理

最后我们总结一下这一章的内容:
【操作系统】内存管理

分页存储管理的基本地址变换结构

【操作系统】内存管理

页表寄存器

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

例题:
【操作系统】内存管理

对页表项大小的进一步讨论

【操作系统】内存管理

总结一下:
【操作系统】内存管理

快表的地址变换结构

我们前面说了分页存储管理的基本地址变换结构,这一章是对基本地址变换结构的改进版。

【操作系统】内存管理

什么是快表

【操作系统】内存管理

能否把整个页表都放在TLB中?
【操作系统】内存管理

局部性原理引入快表机制

【操作系统】内存管理

引入快表后,地址的变换过程

一个例图了解基于快表的地址变换结构

【操作系统】内存管理
引入快表后,地址变换的过程的文字描述:
【操作系统】内存管理
【操作系统】内存管理

基本地址变换与快表地址变换的比较

【操作系统】内存管理

二级页表

为什么引入二级页表?

因为单级页表存在一些问题,所以引入二级页表和多级页表,有两个问题:

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

二级页表的原理和地址结构

  • 对页表再次分组
    【操作系统】内存管理

  • 二级页表的地址结构及对应关系
    【操作系统】内存管理

如何实现二级页表的地址变换?

【操作系统】内存管理
上面的部分我们解决了问题一,接下来是问题二,这里简单叙述一下,后面的文章会继续深入剖析。

【操作系统】内存管理

几个小细节

【操作系统】内存管理

最后总结一下:
【操作系统】内存管理

基本分段存储管理

【操作系统】内存管理

什么是分段?

【操作系统】内存管理

分段的逻辑地址结构

【操作系统】内存管理

段表

【操作系统】内存管理

地址变换

【操作系统】内存管理
【操作系统】内存管理

分段、分页管理的对比

【操作系统】内存管理
【操作系统】内存管理

分段实现信息共享共享

【操作系统】内存管理

为什么分页不方便实现信息共享和保护?

【操作系统】内存管理

分段比分页更容易实现信息共享的原因主要有:

  1. 分段的地址空间是逻辑地址空间,与物理地址空间分离。每个段都有一个段表,映射逻辑地址到物理地址。这个映射可以在不同的进程中共享,所以多个进程可以共享同一个段。
  2. 分段允许段重叠,不同进程可以共享某些段。而分页的页映射通常是唯一的,不允许重叠,所以难以直接在地址空间中共享页面。
  3. 分段的粒度较大,通常是一个函数、数据结构等,更适合作为共享单元。而分页的页大小较小,不太方便作为共享信息的基本单元。
  4. 分段可以实现共享只读段,多个进程只读访问同一段,而分页实现只读共享页较为困难。

具体例子:

  • 共享程序代码段:多个进程可以共享只读的代码段,从而减少内存占用。
  • 共享库段:多个进程可以共享动态链接库的代码和数据段。
  • 共享数据段:多个进程共享只读数据段,如常量数据。
  • 堆栈段不共享:每个进程有自己的唯一堆栈段。

相比而言,分页实现共享信息较为困难,通常需要更复杂的机制,如复制现有的共享页等,比较低效。所以,总体来说,分段更容易高效实现信息共享。

最后总结一下:
【操作系统】内存管理

段页式存储管理

【操作系统】内存管理

分页、分段的优缺点分析

【操作系统】内存管理
【操作系统】内存管理

分段+分页=段页式管理

【操作系统】内存管理

段页式管理的逻辑地址结构

【操作系统】内存管理

段页式存储的段表、页表

【操作系统】内存管理

段页式管理的地址转换过程

【操作系统】内存管理

最后总结一下:
【操作系统】内存管理

虚拟内存

【操作系统】内存管理
【操作系统】内存管理

传统存储管理的特征、缺点

【操作系统】内存管理

局部性原理

【操作系统】内存管理

虚拟内存的定义和特征

【操作系统】内存管理
【操作系统】内存管理

如何实现虚拟内存技术

【操作系统】内存管理

最后总结一下:
【操作系统】内存管理

请求分页管理方式

【操作系统】内存管理

页表机制—请求页表与基本页表的区别

【操作系统】内存管理

缺页中断机构

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

地址变换机构

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

最后总结一下:
【操作系统】内存管理

页面置换算法

【操作系统】内存管理

最佳置换算法—OPT

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

先进先出置换算法—FIFO

【操作系统】内存管理
【操作系统】内存管理

最近最久未使用置换算法—LRU

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

时钟置换算法—CLOCK

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

改造型时钟置换算法

  • 只需一轮
    【操作系统】内存管理

  • 需要两轮
    【操作系统】内存管理

  • 需要三轮:
    【操作系统】内存管理
    【操作系统】内存管理

  • 需要四轮
    【操作系统】内存管理【操作系统】内存管理
    【操作系统】内存管理
    【操作系统】内存管理

总结:
【操作系统】内存管理

页面分配策略

【操作系统】内存管理

驻留集

【操作系统】内存管理

驻留集(Resident Set)是操作系统管理内存的一个重要概念。它指的是一个进程当前占用的内存页面集合

当一个进程运行时,它需要从辅助存储器(如硬盘)将代码和数据读入内存。不可能将整个进程的所有代码和数据都读入内存,因为内存有限。所以,操作系统会根据一定的页面置换算法(如LRU),选择将一些页面驻留在内存中,这些驻留在内存中的页面集合就是驻留集。

驻留集是描述一个进程运行时实际占用内存的页面集合,它的大小和内容随着进程的运行而动态变化,密切相关到操作系统的内存管理和进程调度。

页面分配、置换策略

【操作系统】内存管理

固定分配局部置换、可变分配局部置换、可变分配全局置换

【操作系统】内存管理
【操作系统】内存管理

何时调入页面?

【操作系统】内存管理

从何处调页?

【操作系统】内存管理
【操作系统】内存管理
【操作系统】内存管理

抖动(颠簸)现象

【操作系统】内存管理

工作集

工作集(Working Set)是操作系统内存管理的一个重要概念,与驻留集相类似,但有一定区别。

工作集指的是进程在最近一段时间内实际访问的页面集合。它表示进程近期的内存访问局部性,通过工作集的大小可以反映出进程最近一段时间的内存使用情况和访问模式。

操作系统通过定期统计每个进程的工作集,来发现进程的内存访问模式的变化。当工作集大小发生较大变化时,说明进程的内存访问模式可能已发生改变,这时操作系统会相应地调整进程的驻留集,以适应新的工作集大小和访问模式。

工作集与驻留集的主要区别在于:

  1. 工作集反映的是进程最近一段时间的内存访问情况,它是短期的和动态变化的。而驻留集表示进程当前占用的内存,它由工作集演变而来,相对而言是较长期和稳定的。
  2. 工作集的页面可能没有全部驻留在内存,而驻留集中的页面全部在内存中。工作集只是访问的页面集合,不代表这些页面实际驻留在内存。
  3. 操作系统不直接管理工作集的大小,它通过STATISTICS得到工作集信息,并据此调整驻留集。而驻留集的大小由操作系统的页面置换算法直接管理。
  4. 工作集用于发现进程内存访问模式的变化,指导驻留集的调整,而驻留集直接影响进程的运行效率。

总之,工作集和驻留集都描述进程占用和访问的内存,但工作集更注重内存访问模式,用于发现进程内存模式的变化;而驻留集直接影响进程运行,由操作系统根据工作集信息加以管理。两者互为依存,共同服务于操作系统的内存管理。
【操作系统】内存管理

总结:

【操作系统】内存管理文章来源地址https://www.toymoban.com/news/detail-470094.html

到了这里,关于【操作系统】内存管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【操作系统】内存管理概念

    1、 编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译成机器语言) 2、 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块 ① 静态链接:在程序运行之前,先将各目标模块及它们所需的库函

    2024年02月06日
    浏览(50)
  • 从操作系统角度了解内存管理

    内存管理的主要功能有: 内存空间的分配与回收 。由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。 地址转换 。在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致, 因此存储管理必须提供地址变换功能,把逻辑地

    2024年02月09日
    浏览(44)
  • 操作系统-笔记-第三章-内存管理

    一、第一章——操作系统的概念 二、第二章——【进程】 二、第二章——【线程】​编辑 二、第二章——【进程调度】 二、第二章——【进程同步与互斥】 二、第二章——【锁】 三、第三章——内存管理 四、第四章——文件管理 五、第五章——输入输出管理 ​​​​​

    2024年02月11日
    浏览(63)
  • 王道操作系统学习笔记(1)——操作系统基本概念

    本文介绍了操作系统的基本概念,文章中的内容来自B站王道考研操作系统课程,想要完整学习的可以到B站官方看完整版。 操作系统:系统资源的管理者(处理机管理、存储器管理、文件管理、设备管理) 交互式命令(在终端中输命令)和批处理命令(Shell脚本) 并发: 宏

    2024年02月10日
    浏览(47)
  • 【JavaEE】简单了解操作系统、进程&内存管理

    目录 前言:  一、操作系统: 操作系统的定位: 应用程序: 系统调用: 操作系统内核: 驱动程序: 硬件设备:  二、进程:  什么是进程?  进程的描述与组织:  描述: 组织: PCB中的 特征(属性) CPU分配——进程调度:  进程调度的相关属性:  三、内存管理:

    2024年02月03日
    浏览(35)
  • 【操作系统和强化学习】1.内存管理策略

    CPU的调度可以提高CPU的利用率和计算机的响应用户的速度。为了改进性能,应该将多个进程保存在内存中。也就是说必须共享内存。 本文讨论的是如管理内存。 内存是现代计算机运行的核心,由一个很大的字节数组来组成,每个字节都有各自的地址。 CPU根据程序计数器的值

    2024年02月02日
    浏览(77)
  • 计算机系统结构与操作系统实验三(6)-内存管理

    实现内存管理 这里修改makefile文件和run.sh文件 在《操作系统真相还原源码》的基础上稍加修改makefile 注意:这里要用 make all 命令来执行makefile文件了 本实验所有源码👉👉👉 计算机系统结构与操作系统实验三bochs源代码

    2024年02月15日
    浏览(43)
  • 【操作系统笔记04】操作系统之内存管理方式(分页、分段、段页式)、虚拟存储技术、页面置换算法

    这篇文章,主要介绍操作系统之内存管理方式(分页、分段、段页式)、虚拟存储技术、页面置换算法。 目录 一、操作系统 1.1、基地址变换机构 1.2、具有快表的地址变换机构

    2023年04月21日
    浏览(41)
  • 头歌操作系统 课后作业4.1:段式内存管理 答案

    第1关:0号进程和1号进程的mynext变量的取值变化 编程要求 根据相关知识,修改版本 1.3 内核回答问题: 通过 gdb 调试查找答案,将第三关的答案填写在 /data/workspace/myshixun/第三关.txt 中。 1 号进程的 output_char 函数调用会执行几次? 每次调用时,1 号进程和 0 号进程的 mynext 变

    2024年02月06日
    浏览(42)
  • 【地铁上的面试题】--基础部分--操作系统--内存管理

    内存管理是指操作系统或编程语言运行时环境对计算机系统中的内存资源进行分配、使用和回收的过程。其主要目标是有效地管理内存资源,以提供给程序足够的内存空间来存储和执行程序所需的数据和指令。内存管理的作用包括: 内存分配:将可用的内存空间分配给程序和

    2024年02月11日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包