|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式操作系统基础知识 > 存储管理 > 分区存储管理(固定分区、可变分区、内存保护等) > 分区存储管理 >
|
相关知识点:3个
|
|
|
|
固定分区存储管理的基本思路是:各个用户分区的个数、位置和大小一旦确定后,就固定不变,不能再修改了。例如,在系统启动时,由管理员来手工划分出若干个分区,并确定各个分区的起始地址和大小等参数。然后,在系统的整个运行期间,这些参数就固定下来,不再改变。另外,为了满足不同程序的存储需要,各个分区的大小可以是相等的,也可以是不相等的。
|
|
|
当一个新任务到来时,需要根据它的大小,把它放置到相应的输入队列中去,等待合适的空闲分区。在具体的实现上,主要有两种实现方式,即多个输入队列和单个输入队列。
|
|
|
下图(a)是多个输入队列的一个例子。整个内存被分成五个区,包括四个用户分区和一个系统分区。操作系统放在内存地址低端,占用了100KB。分区1、分区2和分区3的大小分别是100KB、200KB和300KB,分区4的大小是100KB。在多个输入队列的方式下,对于每一个用户分区,都有一个相应的输入队列。在分区1的输入队列中有三个任务在等待,在分区2的输入队列中有一个任务在等待。分区3的输入队列是空的,而分区4的输入队列中有两个任务在等待。当一个新任务到来时,就把它加入到某一个输入队列中去。要求这个输入队列所对应的分区,是能够装得下该任务的最小分区。例如,假设现在又来了一个新任务,它的大小是180KB,那么应该把它加入到分区2的输入队列中去。因为在当前情形下,能够装得下该任务的只有分区2和分区3,而分区2比分区3要小,所以它更合适。
|
|
|
|
|
这种为每一个分区都设置一个输入队列的做法,有一个很大的缺点,它可能会出现内存利用率不高的问题,即小分区的输入队列是满的,而大分区的输入队列却是空的。例如,在上图(a)的这个例子中,在分区1的输入队列中,有3个任务在等待,而分区3的输入队列却是空的。也就是说,一方面,有很多小任务在等着进入内存;而另一方面,在内存中却存在着大量的空闲空间。事实上,如果把这300KB的空闲空间平均分给这三个任务,那么它们就都能进入内存了。
|
|
|
为了解决这个问题,人们又提出了单个输入队列的方法。它的基本思路是:对于所有的用户分区,只设置一个统一的输入队列。当一个新任务到来时,就把它加入到这个输入队列当中。然后当某个分区变得空闲的时候,就从这个队列中选择合适的任务去占用该分区。在任务的选择上,可以有两种方法。第一种方法是选择离队首最近的、能够装入这个分区的任务。如果选中的是一个比较小的任务,那么就会浪费大量的内存空间。第二种方法是先搜索整个队列,从中选择能够装入这个分区的最大任务,这样就能尽可能地减少所浪费的空间。
|
|
|
对于固定分区的存储管理方法,它的优点是易于实现,系统的开销比较小。无论是空闲空间的管理,还是内存的分配和回收算法,都非常简单。算法的时间复杂度和空间复杂度也比较低。因此,系统的管理开销比较小。但是它也有两个主要的缺点:第一,内存的利用率不高,内碎片会造成很大的浪费。所谓的内碎片,就是在任务所占用的分区内部,未被利用的空间。第二,分区的总数是固定的,这就限制了并发执行的程序个数。如果一开始只分了N个分区,那么最多只能有N个任务在同时运行,不够灵活。
|
|
|