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

----- 可重定位分区分配

1、动态重定位的引入

在连续分配方式中,必须把一个系统或用户程序装入一连续的内存空间。如果在系统中只有若干个小的分区,即使它们的容量总和大于要装入的程序,但由于这些分区不相邻接,也无法把该程序装入内存。这种不能被利用的小分区称为“零头”或“碎片”。

当内存中出现几个互不邻接的小分区,它们单独的容量不能满足作业的大小,但它们的容量总和大于作业的要求时,若想把作业装入,可采用的一种方法是:将内存中的所有作业进行移动,使它们全部相邻接,这样,即可把原来分散的多个小分区拼接成一个大分区,这时就可把作业装入该区。

拼接(紧凑/紧缩)-- 这种通过移动内存中作业的位置,然后把原来多个分散的空闲小分区拼接成一个大分区的方法,称为“拼接”或“紧凑”。所谓拼接是指移动内存(存储器)中所有已分配区到内存的一端,使本来分散的小空闲区连成一个大的空闲区。

---- 由于经过紧凑后的某些用户程序在内存中的位置发生了变化,此时若不对程序和数据的地址加以修改(变换),则程序必将无法执行。为此,在每次“紧凑”后,都必须对移动了的程序或数据进行重定位。

---- 拼接时机(什么时候拼接):

第一种方案是在某个分区回收时立即进行拼接,这样在内存中总是只有一个连续的空闲区。但由于拼接很费时间,拼接频率过高会使系统开销加大。

第二种方案是当找不到足够大的空闲区空闲区的总容量可以满足作业要求时进行拼接。拼接的频率比第一种要小得多,但空闲区的管理稍微复杂一些。

2、动态重定位的实现

---- 在动态运行时装入的方式中,作业装入内存后的所有地址都仍然是相对地址逻辑地址),将相对地址转换为物理地址的工作,被推迟到程序指令要真正执行时进行。为使地址的转换不会影响到指令的执行速度,必须有硬件地址变换机构的支持,即需在系统中增设一个重定位寄存器,用来存放程序(数据)在内存中的起始地址。程序在执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加而形成的。

---- 地址变换过程是在程序执行期间,随着对每条指令或数据的访问自动进行的,故称为动态重定位。

---- 当系统对内存进行了“紧凑”而使若干程序从内存的某处移至另一处时,不需对程序做任何修改,只需用该程序在内存的新起始地址,去置换原来的起始地址即可。

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

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

---- 通常,在找不到足够大的空闲分区来满足用户需求时进行紧凑。

算法流程图如下:

4、分区的存储保护

---- 存储保护是为了防止一个作业有意或无意地破坏操作系统其他作业。常用的存储保护方法有界限寄存器存储保护键方法。

---- 采用界限寄存器方法实现存储保护又有两种方式:

1)上、下界寄存器方法。采用上、下界寄存器分别存放作业的结束地址开始地址。在作业运行过程中,将每一个访问内存的地址都同这两个寄存器的内容进行比较。在正常情况下,这个地址应大于下界寄存器,且小于上界寄存器的内容,如超出这个范围便产生保护性中断。

2)基址、限长寄存器方法。采用基址和限长寄存器分别存放作业的起始地址作业的地址空间长度。当作业执行时,将每一个访问内存的相对地址和这个限长寄存器比较,如果超过了限长,则发出越界中断信号,并停止作业的运行。

---- 存储保护键方法是给每个存储块分配一个单独的保护键,它相当于一把锁。存储块不同于分区,一个分区由若干个存储块组成,每个存储块大小相同,一个分区的大小必须是存储块的整数倍。此外,进入系统的每个作业也被赋予一个保护键,它相当于一把钥匙。当作业运行时,检查钥匙和锁是否一致,如果二者不匹配,则系统发出保护性中断信号,并停止作业的运行。

连续分配方式 -- 可重定位分区分配相关推荐

  1. 动态分区分配及可重定位分区分配

    动态分区分配及可重定位分区分配 分区大小不固定 分区分配的数据结构 二维表格(连续存储结构) 空闲分区表记录空闲分区的大小,位置和状态 已分配区表记录已占用分区的大小,位置和状态 双向循环链表(离散存 ...

  2. 深入分析Kafka架构(三):消费者消费方式、三种分区分配策略、offset维护

    本文目录 一.前言 二.消费者消费方式 三.分区分配策略 3.1.分配分区的前提条件 3.2.Range分配策略 3.3.RoundRobin分配策略 3.4.Sticky分配策略 四.offset维 ...

  3. java动态分区分配算法,操作系统_动态分区分配算法课程设计_java版

    <操作系统_动态分区分配算法课程设计_java版>由会员分享,可在线阅读,更多相关<操作系统_动态分区分配算法课程设计_java版(13页珍藏版)>请在人人文库网上搜索. 1. ...

  4. linux内存分配方式有三种,浅谈操作系统的内存分配原则

    在多道程序当中,如果要让我们的程序运行,必须先创建进程.而创建进程的第一步便是要将程序和对应的数据装入内存.把用户的源程序变成可执行的程序要经历 编译 - 链接 - 装入 三个过程. 此刻我要说的就是 ...

  5. 连续分配管理方式的动态分区分配算法(首次适应、最佳适应、最坏适应、邻接适应算法)

    一.动态分区分配算法(连续分配管理方式) 动态分区分配算法:在动态分区分配方式中, 当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配? (一)首次适应算法 算法思想:每次都从低地址开始查找,找 ...

  6. 【学习笔记】第三章——内存 I(交换技术、进程七状态模型、动态分区分配、动态分区算法)

    文章目录 一. 交换状态.进程七状态模型 二. 内存的分配方式 三. 动态分配算法 一. 交换状态.进程七状态模型 交换技术:内存空间紧张,把某些进程暂时换出外存.(进程在内存与磁盘间动态调度) 进程 ...

  7. Kafka 原理以及分区分配策略剖析

    欢迎关注方志朋的博客,回复"666"获面试宝典 ‍ ‍一.简介‍ ‍ Apache Kafka 是一个分布式的流处理平台(分布式的基于发布/订阅模式的消息队列[Message Qu ...

  8. 二十八、动态分区分配算法

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

  9. 操作系统(三十六)动态分区分配算法

    3.5 动态分区分配算法 上节讲述了连续分区分配方式中有动态分区分配的方式,如果在动态分区分配算法中有许多空闲分区都满足需求的时候,那该如何分配空间呢,今天来介绍四种分配方法解决这个问题. 目录 3. ...

最新文章

  1. [CQOI2014]和谐矩阵
  2. 有哪些LSTM(Long Short Term Memory)和RNN(Recurrent)网络的教程?
  3. C++继承中关于子类构造函数的写法
  4. Java实例——基于jsoup的简单爬虫实现(从智联获取工作信息)
  5. 算法图解:如何判断括号是否有效?
  6. Distribution is all you need:这里有12种做ML不可不知的分布
  7. php post不完整,如何在PHP中检查不完整的POST请求
  8. iis6 服务器做301跳转返回状态码200解决方法。
  9. 基于Go的马蜂窝旅游网分布式IM系统技术实践
  10. 如何下载知乎或好看视频
  11. 雅典娜暴利烹饪系列(下)
  12. 解决springboot无法访问此网站,springboot启动后无法访问网站
  13. 《鸟哥的Linux私房菜-基础篇》学习笔记
  14. 股票软件开发总体方案
  15. POJ 2245 Lotto G++
  16. 关于新浪微博粉丝关注分享消息队列等架构的调研资料
  17. 通往WinDbg的捷径(一)
  18. Linux- 部署iSCSI -并使用win10挂载iSCSI盘
  19. 大道无形 难以揣摩的苹果商店审核制度
  20. zsh报错 Insecure completion-dependent directories detected

热门文章

  1. 禁止MDA对话框的产生
  2. 【面经】三七互娱Java游戏研发实习(一面)
  3. 计算机英语及教学法,计算机英语教学方法探析
  4. 借助ENVI软件,使用shp数据裁剪不规则影像问题
  5. XILINX 7系列FPGA_Slice_存储器_XADC篇
  6. 逻辑代数几个重要定理
  7. java期末知识点总结_java期末复习
  8. 经常打开一个文件夹,如何快速打开
  9. 【ELM分类】基于matlab遗传算法优化ELM神经网络数据分类【含Matlab源码 2138期】
  10. 教你十秒钟学会剪映抠绿幕