连续分配管理方式
连续分配管理方式属于内存空间的分配和回收的内容
连续分配:指为用户进程分配的必须是一个连续的内存空间.
1.单一连续分配
(1)只支持单道程序,内存分为系统区和用户区,用户程序放在用户区
(2)无外部碎片,有内部碎片
在单一连续分配方式中,内存被分为系统区和用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程的相关数据。内存只能有一道用户程序,用户程序独占整个用户区空间。
优点:实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护。(早期的PC操作系统MS-DOS )
缺点:只能用于单用户,单任务的操作系统中,有内部碎片;存储器利用率极低。
2.固定分区分配
(1)支持多道程序,内存用户空间分为若干个固定大小的分区,每个分区只能装一道作业
(2)无外部碎片,有内部碎片
(3)两种分区方式:
1.分区大小相等:缺乏灵活性,适合用一台计算机控制多个相同对象的场合
2.分区大小不等:增加了灵活性,可以满足不同大小的进程需求,根据常在系统中运行的作业大小情况进行划分。
操作系统需要建立一个数据结构–分区说明表,来实现各个分区的分配与回收。每个表项对应一个分区,通常按分区大小排列。每个表项包括对应分区的大小、起始地址、状态。
用数据结构的数组或链表即可表示这个表.
当某用户程序要装入内存时,由操作系统内核程序根据用户程序大小检索该表,从中找到一个能满足大小的、未分配的分区,将之分配给该程序,然后修复状态。
优点:实现简单,无外部碎片。
缺点:a.当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,但这又会降低性能;b.会产生内部碎片,内存利用率低
3.动态分区分配
(1)支持多道程序,在进程装入内存时,根据进程的大小动态的建立分区
(2)无内部碎片,有外部碎片
(3)外部碎片可用“紧凑”技术来解决
(4)回收内存分区时,可能遇到四种情况
1.回收区之后有相邻的空闲分区
2.会收区之前有相邻的空闲分区
3.回收区前后有相邻的空闲分区
4.回收区前后没有相邻的空闲分区
动态分区分配,又称可变分区分配。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。
灵魂三问:
1.系统要用什么样的数据结构记录内存的使用情况?
有两种常用的数据结构:
1.空闲分区表
每一个空闲分区对应一个表项。表项中包含分区号、分区大小、分区起始地址等信息。
2.空闲分区链
每个分区的起始部分和末尾部分分别设置前向指针和后向指针。起始部分处还可记录分区的大小等信息。
2.当很多空闲分区都能满足需求时,应该选择哪个分区进行分配?
把一个新作业装入内存时,需要按照一定的动态分区分配算法,从空闲分区表(或空闲分区链)中选出一个分区分配给该作业。由于分配算法对系统性能有很大影响,因此对其有很多的研究.
具体细节在后面会进行详细讲解。
3.如何进行分区的分配和回收操作?
回收后进行空闲区的合并