赞
踩
其实最为简单的内存分配的方法就是将内存分为多个固定大小的分区,每个分区只能容纳一个进程,所以多道程序的程序数就会受到分区的限制,对于这种方法就是在一个分区空闲的时候就可以从输入队列当中选择一个进程,以便调入到空闲分区,当进程终止时,其分区可以被其他进程所使用,这种方法最开始是被IBM OS/360操作系统使用,当然现在不再使用,因为其的规模庞大,运行缓慢,没有什么人使用
在可变分区方案里,操作系统有一个表,用于记录哪些内存可用和哪些内存和哪些内存已经被占用,刚开始的时候,所有的内存都可用于用户进程,因此我们可以把这块内存看做是一个孔,当有新进程需要内存的时候,就去为该进程去查找足够大的孔,如果找到了,就可以从该孔为该进程分配所需的内存,孔内未分配的内存可以下次再去使用
在任意的时候都会有一组可用的孔大小列表和输入队列,操作系统根据调度算法来对输入队列进行排序,内存不断的分配给进程,直到下一个进程的内存不能满足为止,这个时候没有足够大的可用的孔来装入内存,操作系统就可以等到有足够大的空间,或者往下扫描输入队列以确定是否有其他内存需求较小的进程可以被满足
通常来说,一组大小不同的孔分散在内存当中,当新进程需要内存的时候,系统会为该进程查找足够大的孔,如果孔太大了,那么就会分为两块,一块分配给新进程,另一块就还给孔集合,当进程终止时,它将释放其的内存,这个内存就会还给孔集合,如果新孔与其他孔相邻,那么就会将这些孔给合并成大孔,这个时候,系统就可以去检查是否有进程在等待内存空间,新合并的内存空间是否满足等待进程
从一组可用的孔当中去选择一个空闲的孔有很多种方法,一种就是首次适应,还有就是最佳适应,还有就是最差适应
其实首次适应和最佳适应方法在执行时间和利用空间方面都要好于最差适应方法,首次适应和最佳适应方法在利用空间方面差不多,不过首次适应方法会更快
外部碎片
随着进程装入和移出内存,空闲的内存空间被分为小片段,当所有的空闲的这些小片段的内存之和可以满足请求,但是并不连续的时候,这个时候就会出现外部碎片的问题,这个问题可能会很严重,这个就是外部碎片
内部碎片
比如说我们有一个2018B大小的孔,并且采用了多分区的内存分配方案,假如有一个进程需要2016B,如果我们去准确的分配所需要的块,那么还剩下一个2B的孔,维护这个小孔的开销要比孔本身大得多,因此,通常将内存以固定大小的块为单位来分配,如果采用这种方案的话,进程所分配的内存可能要比所要的要大,这两个数字之差就称为内部碎片,这部分内存在分区当中,不过不能使用
解决外部碎片问题的方法
静态重定位
静态重定位就是在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变
动态重定位
动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时 由动态地址变换机构(硬件)自动进行把相对地址转换为绝对地址。动态重定位需要软件和硬件相互配合完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。