连续分配方式 -- 可重定位分区分配

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

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

1、动态重定位的引入

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

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

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

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

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

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

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

2、动态重定位的实现

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

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

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

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

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

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

算法流程图如下:

 

4、分区的存储保护

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

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

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

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

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

  • 11
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值