操作系统第四章-存储器管理

news2025/4/9 1:30:36

4.1 内存的基本知识

4.1.1 逻辑地址和物理地址

逻辑地址又称为相对地址
物理地址又称为绝对地址

一. 逻辑地址

内存中有多个进程,相对地址是相对于进程的起始地址而言的地址.

二.物理地址

绝对地址是在整个内存下的地址

4.2 程序的装入和链接

引入:用户程序要在系统中运行,必须先将它装入内存,然后再将其转变为一个可以执行程序,通常需要以下几个步骤:
编译--------->链接--------->装入
编译:高级语言翻译为机器语言,由源代码文件生成目标模块.
链接:链接后形成完整的逻辑地址,目标模块生成装入模块.
装入:装入后形成物理地址,装入模块装入内存.

4.2.1 链接的三种方式

静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
运行时动态链接·在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。

4.2.2 装入的三种方式(该节重点)

绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。

  • 绝对装入只适用于早期的单道程序阶段,此时还没有产生操作系统

静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从O开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。

  • 用于早期的多道批处理操作系统

动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从o开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。

  • 用于现代操作系统

在这里插入图片描述

4.3 内存管理

引入:
内存管理的目标(内存管理要做什么):
(1)内存空间的分配与回收
(2)内存空间的扩充(实现虚拟性)
(3)地址转换
(4)存储保护

4.3.1 内存保护

内存保护可采取两种方法:
方法一:在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址时,CPU检查是否越界。
方法二:采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。重定位寄存器中存放的是进程的起始物理地址。界地址寄存器中存放的是进程的最大逻辑地址。

4.3.2 连续分配管理方式

一.单一连续分配

在单一连续分配方式中,内存被分为系统区用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。
内存中只能有一道用户程序,用户程序独占整个用户区空间。
优点:实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护
缺点:只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。

二.固定分区分配

背景:多道程序系统
20世纪60年代出现了支持多道程序的系统,为了能在内存中装入多道程序,且这些程序之间又不会相互干扰,于是将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业,这样就形成了最早的、最简单的一种可运行多道程序的内存管理方式。

两种形式:分区大小相等或分区大小不等

分区大小相等:缺乏灵活性,但是很适合用于用一台计算机控制多个相同对象的场合(比如:钢铁广有n个相同的炼钢炉,就可把内存分为n个大小相等的区域存放n个炼钢炉控制程序)
分区大小不等:增加了灵活性,可以满足不同大小的进程需求。根据常在系统中运行的作业大小情况进行划分(比如:划分多个小分区、适量中等分区、少量大分区)

操作系统需要建立一个数据结构―一分区说明表,来实现各个分区的分配与回收。每个表项对应一个分区,通常按分区大小排列。每个表项包括对应分区的大小、起始地址、状态(是否已分配)。
在这里插入图片描述
优点:实现简单,无外部碎片。
缺点: a.当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,但这又会降低性能; b.会产生内部碎片,内存利用率低。

三.动态分区分配

动态分区分配又称为可变分区分配。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。
动态分区分配没有内部碎片,但是有外部碎片

内部碎片,分配给某进程的内存区域中,如果有些部分没有用上。外部碎片,是指内存中的某些空闲分区由于太小而难以利用。如果内存中空闲空间的总和本来可以满足某进程的要求,但由于进程需要的是一整块连续的内存空间,因此这些“碎片”不能满足进程的需求。

可以通过紧凑(拼凑,Compaction)技术来解决外部碎片。

4.3.3 回收内存分区

回收内存分区时,可能遇到四种情况

  • 回收区之后有相邻的空闲分区
  • 回收区之前有相邻的空闲分区
  • 回收区前、后都有相邻的空闲分区
  • 回收区前、后都没有相邻的空闲分区

4.3.3 动态分区分配算法

一.首次适应算法

算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
如何实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

在这里插入图片描述

二.最适应算法

算法思想:由于动态分区分配是一种连续分配方式、为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区。
在这里插入图片描述

三.最坏适应算法

又称最大适应算法( Largest Fit)
算法思想:为了解决最佳适应算法的问题――即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。
如何实现:空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

在这里插入图片描述

四.邻近适应算法

算法思想:首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。
如何实现:空闲分区以地址递增的顺序排列(可排成一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
在这里插入图片描述
总结:在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是智慧燃气,智慧燃气解析干货!

关键词:智慧燃气、智慧燃气系统、智慧燃气平台、智能燃气、燃气智能管网、数据挖掘 在互联网技术、无线通信技术、物联网技术、卫星通信技术、大数据、云计算技术飞速发展的今天,业界提出了“智慧城市”的概念。智慧城市的范围很广,包含智慧…

Flask 网站装潢, 简易更换模板

Flask 网站装潢,简易更换模板 本博文找个好看的网页模板,并简单改一改变成flask模板,并展示 主博客目录:《从零开始学习搭建量化平台笔记》 文章目录 Flask 网站装潢,简易更换模板下载模板Python 自动生成目录修改目录…

@reduxjs/toolkit配置react-redux解决createStore或将在未来被淘汰警告

通常 我们用redux都需要通过 createStore 但目前 你去用它 基本都会被划线 甚至有点厉害的的编辑器 他会直接告诉你这个东西基本快被弃用了 这个应该大家都知道 最好不要用已经被明确未来或弃用的语法 因为一旦弃用这个系统就需要维护 而且说 一般会被淘汰的语法 本身也就是有…

编程怎么学才高效?初学编程怎么样才容易入门?

学习编程并提高编程能力需要一种结构化的方法,其中包括理解基础概念、实践、反馈和持续学习。以下是一些高效学习编程的策略: 理解基础概念:在学习编程的初期,理解基础概念非常重要。这包括学习编程语言的基本语法、数据类型、控…

嵌入式与单片机之间的关系是什么?

今日话题,嵌入式与单片机之间的关系是什么?可以这样理解:嵌入式系统是一个大的范畴,而单片机则是嵌入式系统中的一个重要子类。通常情况下,制造商出厂的通用单片机内并没有预装应用程序,因此无法直接运行。…

799. 最长连续不重复子序列 java

目录 算法描述 输入格式 输出格式 数据范围 输入样例: 输出样例: 代码 算法分析 算法描述 给定一个长度为 n� 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。 输入格式 第一行包含整数 n&…

成集云 | 英克ERP对接批发销售门店 | 解决方案

方案介绍 批发连锁门店是一种以批发销售为主,通过连锁经营方式进行管理的商业组织形态。它通常由一个总店或总公司负责管理和运营,下面拥有多个分店或加盟店,形成一个连锁经营网络。主要业务是向下游零售商或消费者销售商品,因此…

华为ICT——第五章语音处理理论与实践

目录 语言学: 主要应用场景: 语言学: 语言学: 语音学(1) 语音学(2) 语音处理介绍: 人类语音的来源: 语言数据: 语言信号预处理: …

如何开始开发一个跑腿App系统?

1. 确定需求和功能规划 开始开发之前,需明确系统所需的基本功能,包括用户注册、登录、下单、配送员匹配、订单跟踪等。这些功能需要在系统设计之初明确。 2. 技术选型 选择适合的技术栈。前端可以使用框架如React、Vue.js,后端可选择Node…

HD.047 | 水文数据——全球植被数据集[V: VCI]

写在前面 植被作为影响联系土壤、大气、水分等地气要素的重要因素,其准确估算不仅对研究植被动态变化、植被物候过程具有重要意义,而且对于流域生态水文等方面具有十分重要的应用价值。目前已有大量全球植被数据产品,本期选取植被条件指数Vegetation Condition Index(VCI)…

利用两个栈s1,s2模拟一个队列时,如何用栈的运算来实现该队列的运算?写出模拟队列插入和删除的函数。一个栈s1用于插入元素,另一个栈s2用于删除元素

利用两个栈s1,s2模拟一个队列时,如何用栈的运算来实现该队列的运算?写出模拟队列插入和删除的函数。一个栈s1用于插入元素,另一个栈s2用于删除元素。 前置知识点(栈定义,及出栈入栈函数) #def…

目标检测 图像处理 计算机视觉 工业视觉

目标检测 图像处理 计算机视觉 工业视觉 工业表盘自动识别(指针型和数值型)智能水尺识别电梯中电动车识别,人数统计缺陷检测(半导体,电子元器件等)没带头盔检测基于dlib的人脸识别抽烟检测和睡岗检测/驾驶疲…

【Python语言速回顾】——数据可视化基础

目录 引入 一、Matplotlib模块(常用) 1、绘图流程&常用图 ​编辑 2、绘制子图&添加标注 ​编辑 3、面向对象画图 4、Pylab模块应用 二、Seaborn模块(常用) 1、常用图 2、代码示例 ​编辑 ​编辑 ​编辑 ​…

.net 5 发布后swagger页面不显示问题

1:项目右键属性-》生成xml--用于swagger文件读取 2:开启文件配饰swagger读取指定文件

AD9371 官方例程HDL JESD204B相关IP端口信号

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…

AI文章扩写:从1百字到1万字

人工智能(AI)作为一项前沿技术,正逐渐渗透到各个领域中。在写作领域,AI的应用已经取得了显著进展。本文将重点探讨如何利用人工智能扩写文章,为写作者提供一种快速、高效的创作辅助工具。 01 — AI文章扩写原理 人工…

跨境电商的新引擎:崛起的网红经济

随着全球数字化时代的崛起,跨境电商成为了国际贸易的新引擎,而在这个巨大的变革浪潮中,网红经济正在崭露头角,成为这一引擎的有力推动者。在这篇文章中,我们将深入探讨网红经济如何催生跨境电商的新动力,以…

手机端运维管理系统——图扑 HT for Web

随着信息技术的快速发展,网络技术的应用涉及到人们生活的方方面面。其中,手机运维管理系统可提供数字化、智能化的方式,帮助企业和组织管理监控企业的 IT 环境,提高运维效率、降低维护成本、增强安全性、提升服务质量,…

vue 自己捣鼓周日程日历组件

需求:想要一个周日程表,记录每天的计划,点击可查看详情。可自定义时间段通过后台获取时间段显示 分析: 通过需求,超级课程表app这款软件其中课表和这个需求很像,只不过这个需求第一列的时间段是自定义的,不是上午下午两个,但是原理都差不多 原本想找一些第三方插件使…

【23真题】千万别考这所!题目太格路了!

今天分享的是23年宁波大学912的信号与系统试题及解析。 本套试卷难度分析:22年宁波大学912考研真题,我也发布过,若有需要戳这里自取!22年题目还很正常,23年突然剑走偏锋,24年能不能恢复我不知道。但是你难…