DJ4-3 连续分配存储管理方式

news2024/9/22 22:38:44

目录

4.3.1  单一连续分配

4.3.2  固定分区分配

1. 分区说明表

2. 内存分配过程

4.3.3  动态分区分配

一、分区分配中数据结构

二、分区分配算法

三、分区分配操作

4.3.4  可重定位分区分配

1. 紧凑

2. 动态重定位

3. 动态重定位分区分配算法


连续分配是指为用户程序分配一个连续的内存空间。

因为程序空间本来就是连续的,所以用连续的内存装入连续的程序能够减少管理工作的难度。

4.3.1  单一连续分配

单一连续分配:内存中仅装有一道用户程序,即整个内存的用户空间由该程序独占。

在单道程序环境下,当时的存储器管理方式是把内存分为两部分:系统区和用户区。系统区仅提供给 OS 使用,它通常是放在内存的低址部分。而在用户区内存中,仅装有一道用户程序,即整个内存的用户空间由该程序独占。

4.3.2  固定分区分配

将整个内存用户空间划分为若干个固定大小的区域,每个区域称为一个分区(region),在每个分区中只装入一道作业 ,从而支持多道程序并发设计。

1. 分区说明表

分区说明表:指出可用于分配的分区数以及每个分区的起始地址、大小及状态。其中,各分区是按其大小进行排队的。

Q:为什么第一个分区的地址不是从 0 开始的?

A:因为内存的低址存放的是系统区的内容。

2. 内存分配过程

作业装入内存时,内存分配程序检索分区说明表,从中找出一个尚未使用的满足大小要求的分区分配给该作业,然后修改分区的状态。如果找不到合适的分区就拒绝为该作业分配内存。

内存中已分配给用户的但未被使用的区域称为 “内零头”,而采用固定分区分配方式将会产生内零头。比如:下例中的作业 B 得到 64KB 的分区,但是只使用了 30KB 的大小。

固定分区分配方式

特点:采用分区说明表这一数据结构记录分区的大小和使用情况。

优点:易于实现,开销小。

缺点:

  • 内零头造成浪费
  • 分区总数固定,限制了并发执行的程序数目
  • 存储空间的利用率太低

现在的操作系统几乎不用这种方式了。

4.3.3  动态分区分配

动态分区分配又称为可重定位分区分配,它是根据进程的实际需要,动态地为之分配连续的内存空间。即分区的边界可以移动,且分区的大小是可变的。

虽然动态分区分配中还是有划分内存区域这个概念,但是在实际分配中可以根据实际需要动态地修改分区的大小 (?)

一、分区分配中数据结构

常用的数据结构有以下两种形式,选其一即可。

1.  空闲分区表

虽然空闲分区表和分区说明表长得很像,但是两者的区别还是蛮大的:

  • 空闲分区表只记录空闲的分区
  • 因此这些分区的地址不是连续的
  • 空闲分区表中的分区没有按顺序排列

2.  空闲分区链

在每个分区的首部和尾部设置一些用于控制分区分配的信息,其中重复设置了分区大小和状态位表目,这是为了方便检索。

二、分区分配算法


 

三、分区分配操作

涉及动态分区分配的主要操作有分配内存和回收内存。

这些操作是在应用程序接口中通过系统调用发出的。

1. 分配内存

分配内存:向操作系统提出一特定存储量的请求。它并不要求这个分配的存储区域位于特定的位置,但是这个区域必须是连续的。

系统利用某种分配算法,从空闲分区表或链中找到所需大小的分区。

  • 请求的分区大小为 u.size
  • 表中每个空闲分区的大小为 m.size
  • 事先规定不再切割的剩余分区的大小为 size

从原分区划出分区时可能形成外零头:虽然剩余区域大小大于 size,但是仍可能因为太小了而长期不能被分配出去。将该分区从表或链中移出时将会产生内零头,除非 m.size = u.size 成立。

2. 回收内存

回收内存:当进程运行完毕释放内存时,系统根据回收区的首址,从空闲区表或链中找到相应的插入点,插入回收的内存。

一个回收的分区与空白区邻接的情况有四种,对这四种情况分别作如下处理:


 

4.3.4  可重定位分区分配

1. 紧凑

将内存中的所有作业进行移动,使它们全都相邻接,把原来分散的多个小分区合成一个大分区。

连续分配方式的一个重要特点是,一个系统程序或用户程序必须被装入一片连续的内存空间中,因此需要一个连续的大的空闲分区。

需要解决的问题:把一个作业从一个存储区域移动到另一个存储区域时,需要对作业中的某些地址部分和地址常数等进行调整。       

2. 动态重定位

在动态运行时装入的方式中,作业装入内存后的所有地址都仍然是相对地址,将相对地址转换为物理地址的工作,被推迟到程序指令要真正执行时进行。

程序在执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加而形成的。

3. 动态重定位分区分配算法

动态重定位分区分配算法与动态分区分配算法基本上相同,差别仅在于:在这种分配算法中,增加了紧凑的功能。

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

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

相关文章

【数据结构】堆(一)

😛作者:日出等日落 📘 专栏:数据结构 如果我每天都找出所犯错误和坏习惯,那么我身上最糟糕的缺点就会慢慢减少。这种自省后的睡眠将是多么惬意啊。 目录 🎄堆的概念及结构: 🎄堆的实…

万丈高楼平地起 AI帮你做自己

AI的自我介绍 AI是人工智能(Artificial Intelligence)的英文缩写,是一种通过计算机技术模拟和延伸人类智能的技术和应用。AI可以被看作是一种智能化的计算机程序或系统,它能够自动地执行一些需要人类智能才能完成的任务&#xf…

JavaEE初阶学习:初识网络

1.网络发展史 1.独立模式 独立模式:计算机之间相互独立; 2.网络互连 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。 网络互连:将多…

除了Figma,再给你介绍10款好用的协同设计软件

组织结构越来越复杂,团队中的每个人都有独特的技能、经验和专业知识。我们怎样才能让团队更好地合作?在这种情况下,协同设计应运而生。 UI的未来是协同设计!如果你想把握未来的设计趋势,不妨从使用高效的协同设计软件…

Docker的安装以及本地部署ILLA Builder

1.安装Docker,当前版本V4.18.0 。Docker引擎启动运行之后,效果如下图(喜欢暗黑主题) Docker启动可能出错,“Docker Desktop requires a newer WSL kernel version.” 如下图所示 解决方法,比较简单&#xf…

测试用例的基本要素和设计方法

作者:爱塔居 专栏:软件测试 作者简介:大三学生,希望同大家一起进步! 文章简介:介绍写测试案例的功能需求测试和非功能需求测试和具体方法:判定表、正交表、等价类、边界值等 文章目录 目录 文章…

if条件语句

if条件语句 条件测试 test 测试表达式是否成立,若成立返回0,否则返回其他数值 格式1 :test 条件表达式;格式2 :[ 条件表达式 ] echo $?参数作用-d测试是否为目录 (Directory)-e测试目录或文件是否存在(Exist)-f测…

好物周刊#1:提示工程师养成指南

文章目录 🎈 项目ddruntiny-vuenetease-recent-profile 💻 软件BobScreenToGifSnipaste 🕸️ 网站BrowserFramedocsmallDimmy.club 🔌 插件AdGuard[Global Speed: 视频速度控制](https://microsoftedge.microsoft.com/addons/deta…

强化学习-Double DQN、竞争网络结构和Rainbow(第4章)

来源书籍: TENSORFLOW REINFORCEMENT LEARNING QUICK START GUIDE 《TensorFlow强化学习快速入门指南-使用Python动手搭建自学习的智能体》 著者:[美]考希克巴拉克里希南(Kaushik Balakrishnan) 译者:赵卫东 出版…

【每日一题】leetcode21 - - 合并两个有序链表

文章目录 1.题目描述2.解题思路方法1:方法2: 1.题目描述 题目链接:力扣21,合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2.解题思路 方法1:…

牛客网Verilog刷题——VL38

牛客网Verilog刷题——VL38 题目答案 题目 设计一个自动贩售机,输入货币有三种,为0.5/1/2元,饮料价格是1.5元,要求进行找零,找零只会支付0.5元。需要注意的是,投入的货币会自动经过边沿检测并输出一个在时钟…

【采坑专栏】【错误记录】起系统

doc说明 一级标题分大的,二级标题尽量加,三级标题是具体问题 语法 我的老毛病-易错的 多驱 复制粘贴导致前后一样 管脚约束还是直接选吧 多驱动 Vivado WARNING:Multi-driven net Q with xth driver pin 警告的原因和消除方法 出现这…

注意力机制:基于Yolov8的Triplet注意力模块,即插即用,效果优于cbam、se,涨点明显

论文:https://arxiv.org/pdf/2010.03045.pdf 本文提出了可以有效解决跨维度交互的triplet attention。相较于以往的注意力方法,主要有两个优点: 1.可以忽略的计算开销 2.强调了多维交互而不降低维度的重要性,因此消除了通道和权…

STM32F4_SRAM中调试代码

目录 1. 在RAM中调试代码 2. STM32的三种存储方式 3. STM32的启动方式 4. 实验过程 通过上一节的学习,我们已经了解了SRAM静态存储器; 1. 在RAM中调试代码 一般情况下,我们在MDK中编写工程应用后,调试时都是把程序下载到芯片…

Android类似微信聊天页面教程(Kotlin)四——数据本地化

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

Flink从入门到精通之-07处理函数

Flink从入门到精通之-07处理函数 之前所介绍的流处理 API,无论是基本的转换、聚合,还是更为复杂的窗口操作,其实都是基于 DataStream 进行转换的;所以可以统称为 DataStream API,这也是 Flink 编程的核心。而我们知道…

同样是测试,你年薪50W,我年薪10W,我哭了...

软件测试可以拿到年薪50万? 开什么玩笑? 我才月薪15K。 小伙伴看到标题是不是一开始的反应是这样的?是的话举一个小爪爪吧! 那软件测试到底能不能拿到年薪50万呢? 没有吃过猪肉还没见过猪跑吗,你自己没…

【云原生-深入理解Kubernetes-1】容器的本质是进程

文章目录 👹 关于作者一、为什么会出现容器?二、容器是什么?三、容器“边界”的实现手段3.1、进程如何运行的?3.2、Namespace 与 Docker 边界容器的本质是一个进程这是怎么做到的呢? 总结✊ 最后参考 👹 关…

践行公益担当|人情如故,爱心依旧

爱心助学 情暖童心 随着改革开放,少数民族地区发生了翻天覆地的变化,城乡经济持续发展,人民生活水平日益提高。但对于很多居住在偏远山区的民族自然村,由于山区的地形限制,自然生存环境恶劣,交通及文化、教…

Android 项目必备(四十五)-->2023 年如何构建 Android 应用程序

Android 是什么 Android 是一种基于 Linux 内核并由 Google 开发的开源操作系统。它用于各种设备包括智能手机、平板电脑、电视和智能手表。 目前,Android 是世界上移动设备使用最多的操作系统; 根据 statcounter 的一份最近 12 个月的样本报告;Android 的市场份额…