内存管理之固定分区和动态分区详解

下面先介绍一个概念

:一个固定长度的数据块,存储在二级存储器中(如磁盘)。数据页可以临时复制入内存的页框中。

段:一个变长的数据块,存储在二级存储中,整个段可以临时复制到内存的可用区域(分段),或者将段分成许多页,将页单独复制到内存中(分段分页相结合)。

重定位:就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程

       操作系统存储至少要分成两级:内存和外存。内存提供快速的访问,成本相对较高,是易失性的,不能永久存储。外存比内存慢,但是便宜,非易失性,可以长期存储程序和数据。而较小的内存用于保存当前使用的程序和数据。

      内存管理最基本的操作时由处理器把程序装入内存中执行。

固定分区

原理:又称定长分区或静态分区模式,是满足多道程序设计需要的最简单的存储管理技术。基本思想:给进入主存的用户作业划分一块连续存储区域,把作业装入该连续存储区域,若有多个作业装入主存,则它们可并发执行。

使用大小相等的固定分区有两个难点:程序可能太大而不能放到一个分区中,内存的,利用率很低。由于被装入的数据块小于分区大小,从而导致分区内部有浪费现象,成为“内部碎片”。对与大小不等的分区策略,最简单的方法就是把每个进程分配到能够容纳它的最小分区中。

目前已经基本上没有什么场合使用固定分区。

优势:实现简单,只需要极少的操作系统开销

缺点:有内部碎片,对内存的使用不充分,活动进程的最大数目是固定的。

   

可变分区:可变分区存储管理不是预先把内存中的用户区域划分成若干固定
分区,而是在作业要求装入内存时,根据用户作业的大小和当时内存空间使用情况决定是否为该作业分配一个分区。因此分区大小不是预先固定的,而是按作业需求量来划分的;分区的个数和位置也不是预先确定的。它有效地克服了固定分区方式中,由于分区内部剩余内存空置造成浪费的问题。

一、主存空间的分配和回收
  系统初启时,整个用户区可看作一个大的空闲区。当作业要求装入时,根据作业对内存需求量,从空闲区中划出一个与作业大小一致的分区来装入该作业,剩余部分仍为空闲区。当空闲区能满足需求时(即空闲区长度>=作业长度),作业可装入;否则,作业暂时不能装入。图3.9是可变分区存储空间分配示意。


装入内存的作业执行结束后,所占分区被收回成为一个空闲区,这个空闲区又可用于装入其他作业。随着作业不断装入和撤离,内存空间被分成许多分区,有的被作业占用,有的空闲。如图3.10所示。可见内存中空闲区数目和大小是在不断变化的。


系统设置一张“ 空闲区表 ”,用来记录空闲区的起始地址和长度。当有作业要装入内存时,在空闲区表中找一找“ 未分配 ”的栏目,从中找出一个能容纳作业的空闲区。若空闲区大于作业的长度时则被分成两部分,一部分分配给作业;另一部分仍作为空闲区登记在表中。若找到的空闲区等于作业长度时,分配后该栏目状态改为“空”状。当有作业撤离收回所占分区后,应把收回区域的起始地址和长度登记在状态为“空”的栏目中,且将状态改为“未分配”。如果收回的区域正好和某一空闲区相邻,则应将其合并成一个分区后登记。如图3.11所示。


可变分区方式常用的内存分配算法有:“最先适应”分配算法、“最优适应”分配算法、“最坏适应”分配算法。
  1.最先适应分配算法


  每次分配总是顺序查找空闲区表,找到能满足长度要求的空闲区就分配。优点是实现简单,缺点是可能将大的空闲区分割成许多小的空闲区,形成许多不连续的“碎片”。碎片长度可能不能满足作业要求,降低了内存利用率。
  改进方法,可把空闲区按地址顺序从小到大登记在空闲区表中,有利于大作业。问题是归还空区时须按地址插入表中适当位置。

  2.最优适应分配算法

  按作业要求从所有空闲区中挑选一个能满足要求的最小空闲区,这样保证不去分割一个更大的区域,使装入大作业时比较容易得到满足。实现办法:将空闲区按长度以递增次序登记在表中,分配时按空闲区表顺序查找即可。缺点是可能碎片更小而无法使用。回收时也要按长度扦入。

  3.最坏适应分配算法

  这种算法总是挑选一个最大的空闲区分割一部分给作业使用,使剩下部分不致太小,仍可供分配使用。实现办法:空闲区表中的登记项按空闲区长度递减顺序排列,按序查找分配。图3.12是上述分配算法的示例。






   二、地址转换和存储保护

  采用可变分区方式时,一般采用动态重定位方式装入作业。因此要有硬件的地址转换机构支持。硬件设置两个专用的控制寄存器:基址寄存器和限长寄存器,以及一些加法和比较线路等。如图3.13所示。

 

  当某作业可以占用处理器时,进程调度便把该作业所占分区首地址(如a)送入基址寄存器,将作业所占分区最大地址(如a+k)送入限长寄存器。CPU 每执行一条指令时都要由硬件的地址转换机构把逻辑地址转换成绝对地址。其绝对地址应满足下式:
       基址寄存器内容<=绝对地址<=限长寄存器内容

  否则,产生一个地址越界中断,停止程序执行。

  在多道程序设计系统中 ,也只需一对 基址寄存器和限长寄存器及PSW,改变当前运行进程时 ,要注意保护和恢复这些现场信息,一般保存在各进程的PCB中。

三、移动技术

  由于可变分区方式有硬件的地址转换装置支持,且多采用动态重定位装入作业,因而需要时可对内存中作业改变存放区域。这种工作称为“移动”,由操作系统来完成。如图3.14所示。

移动技术主要用于实现下述两个目的:

  1.集中分散的空闲区

  使用移动技术可将分散的空闲区连成一片形成一个大的空闲区,便于容纳新作业。

  2.便于作业动态扩充内存

  一道作业在执行过程中要求扩充内存,只要移动邻近的作业就可增加所占连续区内存。

  完成上述工作要做两件事:一是在内存中移动程序,其次要适当修改相应作业的基址寄存器和限长寄存器的内容。

  当然,移动会增加系统的开销;而且,也不能任意移动作业,比如若一道作业正在等待外围设备I/O数据时 ,就不能移动该作业。这是由于外围设备和内存间信息交换是按绝对地址进行的,若这时改变了存放区域,作业和外围设备之间交换就不是正确的信息。又如动态扩充内存可能导致死锁发生。例如,内存由A,B两进程占用,若A申请动态扩充内存,不满足,则等待;而B也申请动态扩充内存,不满足,则也等待。于是,死锁发生!

 

  • 28
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android动态分区是一种在存储设备上为应用程序和数据进行分区管理的技术。它允许用户将存储设备的空间灵活地划分为多个分区,并将不同的应用程序和数据存储在不同的分区中。 首先,Android动态分区可以提供更灵活的存储管理。通常情况下,存储设备被划分为内部存储和外部存储。内部存储用于安装应用程序和存储数据,而外部存储则用于存储媒体文件等。通过动态分区,用户可以根据自己的需求,自由地划分存储设备的空间,使得内部存储和外部存储可以互相调整大小,从而更好地满足用户的存储需求。 其次,动态分区可以提供更好的隔离保护。每个应用程序和数据都被存储在独立的分区中,这样可以避免不同应用程序之间的干扰和冲突。当一个应用程序出现问题时,只需要清除或重置相关的分区,而不会影响其他应用程序的正常运行。这种隔离性可以增加系统的稳定性和安全性。 另外,Android动态分区还可以优化存储空间的使用。系统会将一些常用的应用程序和数据放置在内部存储的快速区域,这样可以提高应用程序和数据的访问速度。同时,一些很少使用的应用程序和数据可以被移动到外部存储的缓慢区域,从而释放内部存储空间,让更常用的应用程序和数据能够更好地运行。 总的来说,Android动态分区是一种可以提供灵活存储管理、更好的隔离保护和优化存储空间使用的技术。它可以为用户提供更好的使用体验,并提高系统的稳定性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值