存储管理(一)

目录

一、存储管理的功能

1.地址映射(地址重定位)

2.主存分配和回收

3.存储保护

4.主存扩充(虚拟存储)

二、程序的装入与链接

程序的装入:

程序的链接

三、连续分配方式

单一连续分配

固定分区分配

动态分区分配

1.分区分配的数据结构

2.分配及回收操作

3.分配算法——(重点掌握)

可重定位分区分配

一、存储管理的功能

1.地址映射(地址重定位)

逻辑地址:相对地址,虚拟地址,首地址为0,其他相对于首地址而编址。

物理地址:绝对地址,实地址,内存中储存单元的地址,可直接寻址。

为了CPU正确访问内存单元,需将用户中逻辑地址转换为物理地址,这一过程将地址重定位。

2.主存分配和回收

调入策略(何时调入内存),放置策略(放在何处),置换策略(内存不够,换出那个程序),分配结构(记录内存使用情况,如:空闲分区表

3.存储保护

保证内存中多道程序只能在给定的存储区域内活动并互不产生干扰。防止越界和防止越权。

界限寄存器(上下地址寄存器):如为越界按地址访问,否则产生中断。

4.主存扩充(虚拟存储)

为了使程序员在编程时不受内存的结构和容量的限制,系统为用户构造一种存储器,其结构可能与内存结构不同,容量可能远远超过内存的实际容量。这种面向编程的存储器称为虚拟存储器。由虚存构成的存储空间称为虚存空间,或称虚地址空间。 

原理:将正在使用的部分放在内存,暂时不使用的放在外存。在需要时调入内存,不需要的部分调出内存。

二、程序的装入与链接

程序的装入:

把程序装入内存空间,有三种方式。

(1)绝对装入方式:在可执行文件中记录内存地址,装入时直接定位内存空间。

优点:装入过程简单。缺点:依赖硬件结构,不使用于多道程序系统。

(2)可重定位方式:在可执行文件中,列出需重定位的地址单位和相对地址值。当用户程序装入内存时,一次性实现逻辑地址到物理地址的转换。

说明:重定位表中列出所有修改的位置。如:重定位表的150表示相对地址150处的内容为相对地址(即100为从0起头的相对位置)。在装入时,要依据重定位后的首地值(2000)修改相对地址。
重定位修改:重定位表中的150->绝对地址2150
(=2000+150)
内容修改:内容100变成2100(=100+2000) 

 优点:不需要硬件支持,可以装入有限多道程序。缺点:一次性全部装入,通常需要连续占用空间,装入后内存不能移动。

(3)动态运行时装入:把装入模块装入主存后,并不立即将装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正执行时才进行。实现时需要重定位寄存器。

优点:VOS可以将一个程序分散存放于不连续的内存空间,可以移动程序。能够支持程序执行中产生的地址引用,如指针变量。/它是虚拟存储的基础。
缺点:需要硬件支持,OS实现较复杂。

程序的链接

 静态链接,装入时动态链接,运行时动态链接。

三、连续分配方式

单一连续分配

内存分为两个区域:系统区、用户区。应用程序装入到用户区,可使用用户区全部空间。
每次只允许一个程序占用,用户区注意:不能分割,只适用于单用户、单任务的OS.

固定分区分配

固定分区就是把内存划分为个数固定、大小相等或不等的多个区域。分区的划分由计算机的操作员或者由操作系统给出,并给出分区说明表。注意:每个分区只装入一道作业。

优点:易于实现,开销小。
缺点:内存碎片(零头)造成浪费,分区总数固定,限制了并发执行的程序数目。

动态分区分配

一、原理
根据进程的需要,分配空间,作业装入内存时,把可用内存分出一个连续区域给作业,且分区大小正好适合作业大小的需要分区大小和个数依装入作业的需要而定。

二、实现

1.分区分配的数据结构

不同系统根据设计要求采用不同的结构。常用的有空闲分区表和空闲分区队列结构。

2.分配及回收操作

从空闲区的底部开始向上划出SIZE大小的空闲区给用户。只需要修改大小。

释放某存储区时,系统首先检查释放区是否与系统中的空闲区相邻,相邻就将释放区结合到空闲区当中去。

3.分配算法——(重点掌握)

1、首次(最先)适应法(FF)要求空闲分区按首址递增的次序组织空闲分区表(队列)。当分配内存时,按顺序从空闲分区表中获取内存。
2、下次(循环首次)适应法(NF):按分区的先后次序,从上次分配的分区起查找(到最后分区时再回到开头),找到符合要求的第一个分区
3、最佳适应法(BF):要求按空闲区大小递增的次序组成空闲分区表(队列)
。当分配内存时,优先从最接近他所要内存大小的分区开始申请。所谓最佳指选中的空闲区是满足要求的最小空闲区。
4、最坏适应法(WF):要求按空闲区大小递减的顺序组成空闲分区表(队列),当分配内存时,优先从最大的空闲区去申请所要内存。

可重定位分区分配

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot学习笔记3.27

目录 实战篇第二课 1.注册参数的校验: 学习过程中遇到的问题: 1.什么是正则表达式 2.怎么自定义异常? 1. 创建全局异常处理类 2. 定义响应对象 3. 使用 ExceptionHandler 4. 设置响应状态码 5. 返回统一响应 6. 测试全局异常处理 …

基于springboot+vue的游戏账号交易系统的设计与实现

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

小测验——合并多个网格文件调用相机参数进行适配

文章目录 一、前言1.1 对于rule1.2 对于ask、agent、edit1.3 对于没有notepad二、代码展示一、前言 1.1 对于rule 对于.cursorrules里面的文件内容,就是从提示词、项目简介、技术架构、目录结构、代码规范这几方面进行介绍 1.2 对于ask、agent、edit 切换模式在聊天框下方…

敏捷测试(Agile Testing)

敏捷测试(Agile Testing) 敏捷测试是在敏捷开发(Agile Development)环境下进行的软件测试方法,强调快速反馈、持续测试、团队协作,以确保软件质量贯穿整个开发周期。与传统瀑布模型不同,敏捷测…

FreeRTOS内核实现与应用学习之6——多优先级

在FreeRTOS中,数字优先级越小,逻辑优先级也越小;在任务创建时,会根据任务的优先级将任务插入就绪列表不同的位置。 相同优先级的任务插入就绪列表中的同一条链表中。 要想任务支持优先级,即只要实现在任务切换&#xf…

【C++篇】C++入门基础(二)

💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习! 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C感兴趣的…

Mysql架构之日志讲解:redo log,undo log,bin log 日志

一、buffer pool缓冲区 讲日志之前,我们要先认识一下buffer pool缓冲区。 mysql想完成数据的修改,会先从存储引擎层读取数据,把数据读取到服务层进行数据的修改,再通过存储引擎层把数据更新到数据库中。 mysql每次读取数据都会…

容器主机CPU使用率突增问题一则

关键词 LINUX、文件系统crontab 、mlocate根目录使用率 There are many things that can not be broken! 如果觉得本文对你有帮助,欢迎点赞、收藏、评论! 一、问题现象 业务一台容器服务器,近期经常收到cpu不定期抖动告警&#x…

simpleITK - Setup - matplotlib‘s imshow

使用 matplotlib 显示内联图像 在此笔记本中,我们将探索使用 matplotlib 显示笔记本中的图像,并致力于开发可重复使用的函数来显示 SimpleITK 图像的 2D、3D、颜色和标签叠加层。 我们还将研究使用需要输入图像重叠的图像过滤器的微妙之处。 %matplot…

Github 热点项目 awesome-mcp-servers MCP 服务器合集,3分钟实现AI模型自由操控万物!

【今日推荐】超强AI工具库"awesome-mcp-servers"星数破万! ① 百宝箱式服务模块:AI能直接操作浏览器、读文件、连数据库,比如让AI助手自动整理Excel表格,三分钟搞定全天报表; ② 跨领域实战利器:…

硬件老化测试方案的设计误区

硬件老化测试方案设计中的常见误区主要包括测试周期不足、测试条件过于单一、样品选择不当等方面。其中,测试周期不足尤为突出,容易导致潜在缺陷未被完全暴露。老化测试本质上是通过加速产品老化来模拟长期使用状况,因此测试周期不足会严重削…

CSS学习笔记5——渐变属性+盒子模型阶段案例

目录 通俗易懂的解释 渐变的类型 1、线性渐变 渐变过程 2、径向渐变 如何理解CSS的径向渐变,以及其渐变属性 通俗易懂的解释 渐变属性 1. 形状(Shape) 2. 大小(Size) 3. 颜色停靠点(Color Sto…

Java StringUtils工具类常用方法详解

StringUtils是Apache Commons Lang库中一个极其常用的工具类,它提供了大量处理字符串的静态方法,能够简化我们的日常开发工作,提高代码的可读性和健壮性。下面我将详细介绍StringUtils类中最常用的方法及其使用场景。 一、StringUtils的基本…

设计模式(创建型)- 原型模式

目录 定义 类图 角色 优缺点 优点 缺点 应用场景 案例展示 浅克隆 深克隆 定义 原型模式旨在创建重复的对象,同时确保良好的性能表现。它通过复制现有对象(原型)来创建新对象,而非使用传统的构造函数创建方式。这种设计…

MQ的数据一致性,如何保证?

1 数据一致性问题的原因 这些年在Kafka、RabbitMQ、RocketMQ踩过的坑,总结成四类致命原因: 生产者悲剧:消息成功进Broker,却没写入磁盘就断电。消费者悲剧:消息消费成功,但业务执行失败。轮盘赌局&#x…

Angular由一个bug说起之十五:自定义基于Overlay的Tooltip

背景 工具提示(tooltip)是一个常见的 UI 组件,用于在用户与页面元素交互时提供额外的信息。由于angular/material/tooltip的matTooltip只能显示纯文本,所以我们可以通过自定义Directive来实现一个灵活且功能丰富的tooltip Overlay…

简单介绍一下Unity中的ScriptableObject

ScriptableObject的本质 ScriptableObject是Unity引擎中的一个特殊基类,允许你创建不依附于游戏对象的数据容器,以资产(Asset)形式存储在项目中。这些资产: 可在编辑器中创建和配置 在构建后作为资产打包 可通过Resources或AssetBundle加…

ubuntu24.04.2 NVIDIA GeForce RTX 4060笔记本安装驱动

https://www.nvidia.cn/drivers/details/242281/ 上面是下载地址 sudo chmod x NVIDIA-Linux-x86_64-570.133.07.run # 赋予执行权限把下载的驱动复制到家目录下,基本工具准备,如下 sudo apt update sudo apt install build-essential libglvnd-dev …

LabVIEW 布尔控件回车键触发程序退出

在 LabVIEW 开发过程中,部分用户可能会遇到按下回车键(Enter)后,程序意外退出的问题。该问题主要源于布尔控件的属性设置冲突,包括键分配、数据绑定及 Tab 键行为等。本文将详细分析问题根源,并提供一套完整…

分布式系统面试总结:3、分布式锁(和本地锁的区别、特点、常见实现方案)

仅供自学回顾使用,请支持javaGuide原版书籍。 本篇文章涉及到的分布式锁,在本人其他文章中也有涉及。 《JUC:三、两阶段终止模式、死锁的jconsole检测、乐观锁(版本号机制CAS实现)悲观锁》:https://blog.…