可变分区与空闲区链:主存高效分配与回收实践

需积分: 10 12 下载量 28 浏览量 更新于2024-09-17 收藏 6KB TXT 举报
本文档主要探讨了采用可变式分区管理方法在主存分配与回收中的应用,特别是通过空闲区链的数据结构来有效地管理内存资源。首先,我们定义了一个名为`block`的结构体,它包含了分区的基本属性,如分区的大小(`size`)、状态(`state`,标记为0表示空闲,1表示已被占用)、前一个分区的地址(`prioraddress`)以及下一个分区的地址(`nextaddress`)。同时,还定义了两个指针`prior`和`next`分别用于链接空闲区链。 `addjob`函数是核心部分,它负责将新的作业(`job1`数组)添加到执行作业列表(`job2`二维数组),并根据作业数据的大小(`datasize`)动态地分配内存。在添加作业之前,函数会遍历`job2`数组,确保有足够的空闲分区可用。一旦找到合适的空闲区,函数将作业名、新的分区地址和数据大小存储在`job1`和`job2`中,并更新该分区的状态为已占用。 `init`函数用于初始化空闲区链。它首先创建一个初始的空闲分区,其大小为20KB,然后连续创建两个更大的分区,分别为50KB和100KB,它们分别链接到之前的分区。这个过程展示了如何通过连续分配大分区来满足不同大小的需求,同时也保留了空闲区链的结构以便于后续的内存分配和回收。 这种可变分区管理策略的优势在于可以根据实际需求动态调整分区大小,提高了内存利用率,并且通过空闲区链可以方便地跟踪和回收已分配但未使用的内存空间。然而,需要注意的是,这种管理方式可能会带来额外的开销,比如查找和插入操作的时间,因此在设计系统时需要权衡性能和灵活性之间的平衡。 这篇文档提供了对可变式分区在内存管理中的实践应用,以及如何通过空闲区链进行内存分配和回收的深入理解,这对于操作系统、内存管理系统的设计者和开发者来说是非常有价值的参考资料。
2010-12-23 上传
(1)进程的调度采用优先数调度算法。 (2)采用动态优先数法确定进程的优先级别。 (3)设计三个链队列,分别用来表示运行队列、就绪队列和完成队列。 (4)用户输入进程标识符以及进程所需的时间,申请空间存放进程 PCB 信息。 优先数调度算法为每个进程设一个优先数,它总是把处理机给就绪队列中具有最高优先权的进程,常用的算法有静态优先数法和动态优先数法。 动态优先数法,使进程的优先权随时间而改变。初始的进程优先数取决于进程运行所需要的时间,时间达,则优先数低。采取了将进程优先数定为用一个较大的数(50)减去进程运行所需要的时间。随着进程的运行对优先数进行调整,每次运行时都是从就绪队列中选取优先数最大的进程运行,所以将就绪队列按照优先数的大小从高到低排列,这样,每次取队头进程即可。 进程每执行一次,优先数减一个数(自定),CPU 时间数加 1,进程还需要的时间数减 1。如果进程所需要的时间为 0,说明进程运行完毕,将其状态变为完成状态“F”,将此 PCB 插入到完成队列中,若就绪队列不空,则将就绪队列中的第一个 PCB 变为运行状态。进程若没有完成,则将其优先数和就绪队列中第一个 PCB 的优先数作比较,如果小,则将其变为就绪态,插入到就绪队列中适当的位置,将就续队列中的第一个 PCB 变为运行态投入运行,重复上述过程,直到就绪队列为空,所有进程成为完成态为止。