[操作系统]3.内存管理

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

和前面两篇是差不多的思路,仅为快速复习操作i系统基础知识点,例题暂无,考试不要参考,知识点来自王道操作系统

1.内存管理的基本要求和设定

内存管理主要完成的功能有

  • 内存空间的分配和回收
  • 地址转换(把逻辑地址转化为内存物理地址)
  • 内存空间的扩充(覆盖,交换,虚拟化)
  • 存储保护

因为一个进程如果想要执行,就必须从外存装入内存中,所以我们必须要对有限的内存进行一定的管理.

(1)程序运行的步骤:编译,链接,装载

程序如果想要运行,最重要的就是这三步骤

编译指的是把源代码编译成模块

链接:把模块以及所需的库函数连接起来形成一个整体,在这个阶段会生成逻辑地址

装入:把模块整体装入内存中,同时把逻辑地址转化为真实的物理内存地址

其中;链接有三种方式

静态链接:在程序运行之前,就完全装入链接

装入时动态链接:在装入内存的时候才开始链接

运行时动态链接:运行的时候才开始链接

装入也有三种方式,对于不同的地址转化方案

绝对装入:在编译的时候,就知道模块要放在内存的某个位置了,这种情况下地址不用转换,逻辑地址就算绝对地址

可重定位装入(静态重定位):在装入的时候完成地址变换,这种变换方法主要适用于一整块存入,只需要一个起始地址即可

动态重定位: 在运行的时候才进行地址变换,这种适用于分块存储进程的方式,但是需要一个重定向寄存器来协助

(2)关于内存保护

内存保护一共有两种可用的实现方式

(1)设置上下限寄存器,每次存入进程到内存中的时候,都会比较这两个寄存器的数值

(2)基址寄存器和界地址寄存器:分别给出起始地点,以及可用的大小

(3)覆盖和交换技术

在虚拟化技术没有诞生之前,我们常常使用这两种技术来扩充逻辑上的内存,营造出内存非常够用的假象.

1.覆盖技术:

覆盖技术指的是,把内存分成一个固定区,和多个覆盖区,覆盖区中的内容可以变化

举个例子,我们进行递归求解的时候通常可以画出一个递归树

递归树的同一层都不是同时发生的,彼此也没有依赖需求,这个时候,这些工作就可以共用一个覆盖区

而固定区是根节点,也就是main函数

2.交换技术

交换技术其实就算我们在第二章讲的调度部分的中级调度/内存调度

覆盖技术常用在同一个程序和进程中,而交换主要用于不同的进程之间

覆盖技术已经被虚拟化取代了

2.关于内存的管理方式(重点)

内存的管理方式是绝对的终点,内存管理主要有两种思路,第一种是连续内存管理,另一种是非连续内存管理

连续分配

(1)单一连续分配

在单一连续分配方式中,内存分为系统区和用户区,用户区一次只存入一个任务,这种分配模式适合单一用户和任务

(2)固定分区分配

固定分区分配指的是,把内存划分为固定大小的分区(可以相同,也可以不一样),然后每个分区只能存入一个任务,使用分区说明表这种数据结构对每个分区进行管理

但是这种容易产生内部碎片

内部碎片:指的是分给某个进程的空间没有被完全利用的部分
外部碎片:指的是没有分配给进程的空闲部分

 (3)动态分区分配

和上面不同,这次我们不在把内存认为的分割大小,而是直接动态地装入内存中.

一共有四种装入算法

首次适应算法:从高到低遍历所有空闲分区,然后选择第一个合适的

最佳适应算法:将分区按容量从高到低的顺序进行遍历,选择第一个合适的

最坏适应算法:将分区按容量从低到高的顺序进行遍历,然后第一个最合适的

邻近适应算法:在第一种的方法演变而来,遍历的起始节点是上一次的终点

但是这种分配无论使用何种算法,都会带来一定的外部碎片问题

非连续分配

(这个稍微恶心一点)非连续分配允许我们把一个进程拆分成多个部分,然后填入不同的位置

(1)基本分页管理:

基本分页管理的核心思想类似连续分配中的非连续固定分区,将内存划分为多个大小一致的分区,称之为页,然后按照这个分区的大小划分内存,称之为块

在进程中,逻辑地址的格式如下

块号P 块内地址W

 另外我们有一个名为页表的数据结构,每个对应的块号都可以指定式在内存中的第几个页

并且PW不需要明确给出,可以根据逻辑地址A和块大小L计算出来

假设存在一个逻辑地址A,页面大小为L

P=A/L    W=A%L   

P对应的内存中的块为b(这个依靠页表直接提供)

则内存地址为 E=W

(2)基本分段管理

分段管理和分页管理最大的区别就是,分段管理是按照程序的逻辑自然分成大小不一的段落

内存中不在按照任何格式划分块,只按照某种逻辑or算法插入内存中

在分段的进程中,逻辑地址的格式如下

段号P 段内地址W

(注:由于各个段的长度不一致,所以段内地址的长度取决于大小最大的进程自然段)

另外存在一个名为段表的数据结构,负责对应每个段在进程中的段号,段的长度,以及段在内存中

段号P 段的长度 段的起始地址b

 这种就肥肠简单,因为该给出来的东西都给出来了

                                        E=b+W

(注2:仍然由于各个段的长度不一致,所以无法根据一个逻辑地址计算出P和W,所以这个数据结构必须明确地给出)

(3)段页式管理:

段页式管理方式集中了以上两种方式,先转化成多个段,然后段内进行分页

段号P1 页号P2 页内地址

3.关于虚拟内存

继交换和覆盖技术以后,虚拟内存式目前最常用的一种扩展内存的方式

交换和覆盖系统都有一个特征就是,想要执行的任务必须一次性完整的放入内存中,但是可能会遇到的就是一个任务消耗的内存过大,已经远远超过了真实内存

所以虚拟的核心就是,把一个任务分成多个部分,将要运行的部分放入内存中进行运行,例如gta5,当你进入某个建筑物的时候,整体的外部就可以暂时挂起,只运行建筑物有关的部分.

(1)局部性原理

局部性原理起始有两方面

(1)空间局部性:访问了内存的某个单元,则这个单元附近的地址近期也可能调用

(2)时间局部性:一条指令被执行过以后,大概率在短期内再次执行

这两条原理同时适用于数据结构,也就是goto语句有害的有力论证

(2)虚拟内存的特点

(1)多次:作业无需一次性插入内存中

(2)对换性:作业无需长期驻留在内存中

(3)虚拟性:用户能看到的容量,远大于实际容量

关于虚拟和实际容量的关系

虚拟容量的最大值是寻址的最大值

虚拟内存的最小值是min(最大值,内存+外存)

(3)

(4)交换算法

交换算法主要用来处理内存中任务块中的内存调入和调出

一共有四种算法,不过其中第四种算法clock使用方法过于抽象,这里就不适用了

(1)最佳算法OPT

核心思想就算找出未来不再使用的内存块,并且调出内存

这种算法最理想,但是8可能实现

(2)先进先出算法FIFO

最开始调入内存的块,第一个调出,和队列是类似的性质

(3)LRU最近最少使用算法

最近最少使用的内存块,调出内存

(4)clock算法,不怎么用就算文章来源地址https://www.toymoban.com/news/detail-478849.html

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

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

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

相关文章

  • 操作系统-笔记-第三章-内存管理

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

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

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

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

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

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

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

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

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

    2023年04月21日
    浏览(45)
  • 【操作系统】24王道考研笔记——第三章 内存管理

    1.基本概念 2.覆盖与交换 覆盖技术: 交换技术: 总结: 3.连续分配管理方式 单一连续分配 固定分区分配 动态分区分配 动态分区分配算法: 总结: 4.基本分页存储管理 定义: 页表: 地址转换的实现: 子问题: 逻辑地址结构: 总结: 5.基本地址变换机构 流程: 原理:

    2024年02月11日
    浏览(66)
  • 头歌操作系统 课后作业4.1:段式内存管理 答案

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

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

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

    2024年02月11日
    浏览(90)
  • 操作系统课程设计(作业调度、内存管理、进程调度、进程阻塞等)

    资源下载: https://download.csdn.net/download/fufuyfu/85811450 操作系统是计算机系统配置的基本软件之一。它在整个计算机系统软件中占有中心地位。其作用是对计算机系统进行统一的调度和管理,提供各种强有力的系统服务,为用户创造既灵活又方便的使用环境。本课程是计算机及

    2024年02月03日
    浏览(51)
  • 如何剪裁操作系统源码——移植FreeRTOS的内存管理模块到ARMV8裸片

    本文面向的需求场景是,为缺乏标准库实现的处理器IP移植内存管理模块,即为裸片部署C标准库中的 malloc() 和 free() 函数。 具体做法是——从操作系统的内存管理组件中剪裁出必要的源码,适配到目标处理器的开发环境(SDK/IDE/CMAKE工程子目录)中。 1.1 C标准库中的内存管理

    2024年02月13日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包