操作系统 动态分区
动态分区试图解决固定分区带来的问题。在这种技术中,分区大小不是最初声明的,而是在进程加载时声明的。
第一个分区被保留给操作系统。剩下的空间被分成几部分。每个分区的大小将等于进程的大小。分区的大小根据进程的需求而变化,以避免内部碎片。
动态分区相对于固定分区的优势
1. 没有内部碎片
由于动态分区根据进程的需求创建分区,因此可以明确地知道分区中不会有任何未使用的剩余空间,所以不存在内部碎片。
2. 进程大小没有限制
在固定分区中,由于没有足够的连续内存,无法执行大小超过最大分区大小的进程。然而,在动态分区中,进程的大小不会受限,因为分区的大小是根据进程大小决定的。
3. 多道程序的程度是动态的
由于不存在内部碎片,分区中不会有任何未使用的空间,因此可以在内存中同时加载更多的进程。
动态分区的缺点
外部碎片
没有内部碎片并不意味着没有外部碎片。
假设有三个进程P1(1 MB)、P2(3 MB)和P3(1 MB)被加载到主内存的各自分区中。
过了一段时间,P1和P3完成了它们的任务并且它们占用的空间被释放。现在主内存中有两个未使用的分区(1 MB和1 MB),但是无法使用它们来加载一个2 MB的进程,因为它们不是连续的。
规则规定进程必须在主内存中连续存在才能执行。我们需要改变这个规则来避免外部碎片。
复杂的内存分配
在固定分区中,分区列表只会被创建一次并且永远不会改变,但是在动态分区中,每当分配给新的进程时,分区大小会发生变化,因此分配和回收非常复杂。操作系统必须跟踪所有的分区。
由于在动态内存分配中,分配和回收操作非常频繁,而且分区大小每次都会变化,因此对于操作系统来说管理所有事情将变得非常困难。