作业调度和空闲分区分配算法

本文中红色字体为自创算法,未经验证,如果不可行,希望不吝赐教!

一、常见的批处理作业调度算法:

1.先来先服务调度算法(FCFO):

1.算法总结:按照各个作业进入到系统的的自然顺序来调度作业,首先到来的作业排在前面,也是最先被执行的,后续的作业被逐次被执行,该算法即可用于作业调度,也可以用于进程调度,使之运行直到完成或者因为发生某件事阻塞而放弃处理机。

2.算法分析:该算法的硬件实现和软件逻辑比较简单,根据作业的先后到来顺序执行对各个作业而言也是十分公平的,首先进入系统的作业是被先发生的,理应被最先执行,其后的作业按照顺序执行也是很合理的,但是由于先后顺序不一定体现了作业的优先程度,以下情况的发生暴露了该算法的不合理性:1.后来的作业可能对系统而言十分重要,需要以插队的方式优先被执行。2.最后进入的作业目标可能是为了修改正在执行的作业某些地方而需要被立即执行,在这种算法中都不能被满足。3.后进入的短作业等待执行时间往往比实际处理时间要长很多。

3.算法改进:1根据该算法不合理性的第一条而产生的多级队列调度算法能够以多级队列的形式展开优先权并且根据不同优先权插入相应的队列而解决该问题,具体算法见多级队列调度算法。2. 根据该算法不合理性的第二条而产生的基于优先数调度算法能够让系统根据作业预先设定的优先数来排队下一个需要执行的作业从而解决该问题,具体算法见基于优先数调度算法。3.根据该算法不合理性的第三条而产生的短作业优先调度算法能够实际而方便的解决该问题,具体算法见短作业优先调度算法。

2.短作业优先调度算法(SPF):

1.算法总结:短作业指的是该作业被执行时所需要花费的时间比较短,由于系统无法评估未执行的作业被执行时所花费的时间,因此需要用户在提交作业时预先设置一个该作业执行可能需要花费的时间,然后由系统根据优先数和处理时间来排队处理下一个即将被执行的作业,即优先调度并处理短作业。

2.算法分析:该算法缩短了短作业的处理时间,理论上使得该算法排队的作业平均周转时间比FCFO算法要短,但存在以下不足:1.短作业优先在一定程度上使得长作业的排队时间变长2.人为的估算时间不准确,常常导致误差比较大的事件发生。

3.算法改进:1..根据该算法不合理性的第一条而产生的高响应优先比算法能够动态分析作业的优先权使长作业不至于长时间等待而解决该问题,具体算法见高响应优先比算法。2. 根据该算法不合理性的第二条而产生的基于时间片轮转算法能够让系统平均个分配给每个作业一个相同的时间片来顺次轮转从而解决该问题,具体算法见时间片轮转调度算法。

3.高响应比优先算法(HRN):

1.算法总结:为每个作业引入一个动态的优先权,使作业的优先权随着等待时间的增加而以速率a提高,则一个作业在长时间的等待后优先权变高具体规律可描述如下:

     优先权==      

2.算法分析:由公式可以看出如果作业的等待时间相同,则服务时间短的优先权高,因此该算法利于短作业,但是当服务时间相同时,等待的时间越长则优先权越高,体现了FIFS算法的原则,长作业因此也不会长时间等待而得不到执行,但该算法存在以下不足1.该算法的优先权定义较为简单,2.实现起来的系统开销也比较大,因为要进行响应比计算。

3.算法改进:1..根据该算法不合理性的第一条而产生的基于优先数调度算法能够分析作业的各方面需求而动态的增长优先权从而解决该问题,具体算法见优先数调度算法。2..根据该算法不合理性的第二条而产生的批处理作业调度创新型算法能够减轻硬件负担从而解决该问题,具体算法见批处理作业调度创新型算法。

4.基于优先数调度算法(HPF):

1.算法总结:根据作业的优先权种类(动态优先权和静态优先权)以不同的抢占方式来排队作业的执行顺序,静态优先权指的是作业在运行期间优先数不变,根据作业类型,作业对资源的需求以及用户要求来制定优先数,而动态优先权指的是被指定优先数后再根据作业的等待时间以速率a动态增长提高优先权。

2.算法分析:1.静态优先权由于被指定,虽然实践起来简单易行,但是不够精确,会出现优先权低的长时间不被执行的现象。2.动态优先权则一味的依仗时间作为唯一增长凭据,不适应紧急情况的发生。

3.算法改进:1..根据该算法不合理性的第一条而产生的动态优先权调度算法能动态增长作业的优先权避免优先数低的长期不被执行的问题,具体算法见动态优先权调度算法2..根据该算法不合理性的第二条而产生的批处理作业调度创新型算法能够根据时间和插队加一机制动态增加优先数从而解决该问题,具体算法见批处理作业调度创新型算法。

5.多级队列调度算法:

1.算法总结:根据作业的优先权及其他因素把不同的作业分成不同的执行队列,处理机首先调度高级别的队列,再逐次处理级别低的队列,当有作业要进入队列时需要根据不同级别划分而插入到响应的队列中,当更高级别的队列中出现作业时,处理机应该挂起目前执行的作业转去执行更高优先级别的作业,处理机处理作业时也是采用时间片轮转的方式,在时间片内没有完成的作业排到相应队列尾部,调度程序每次调度时,依次比较队列中作业的优先权。

2.算法分析:该算法根据不同的优先级别对作业排队,从而较好的完成了作业排序,使得高优先权的作业每次都能首先被执行,优先序列保证了这点,但缺点是1.比其他算法更加消耗硬件资源2.低优先权的作业会因为经常插入的高优先权作业而耽误,造成长时间不被执行。

3.算法改进:1..根据该算法不合理性的第一条而产生的批处理作业调度创新型算法能减轻硬件负担从而解决该问题,,具体算法见批处理作业调度创新型算法2..根据该算法不合理性的第二条而产生的批处理作业调度创新型算法能够根据时间和插队加一机制动态增加优先数从而解决该问题,具体算法见批处理作业调度创新型算法。

6.批处理作业调度创新型算法:

1.算法构思:系统一次调入若干作业,将作业以优先权排序,同时按照动态优先数生成的算法为每个作业设置一个速率a,按照时间增加优先权,若有紧急型作业进入,必须马上执行,则在执行该作业的同时将下一个将要执行的作业和该组队列中优先数最低的作业同时加一,保证下一个作业和优先数最低的作业不会被持续性拖延。

2.算法分析:改算法保证了1.系统开销较多级队列调度算法而言小。2.在 按照动态生成优先数时时间不再是唯一衡量依据。3.在保证了紧急型作业被立即执行时,也保证了下一个作业和优先数最低的作业不会被持续性拖延。但随着最低优先权作业的优先等级的提高,逐渐超过一些作业而成为不是最低优先权的作业,使得被超过的作业因优先等级低而被持续拖延。

二、空闲分区分配算法:

1.首次适应算法(FF):

1.算法总结:该算法将空闲分区链以地址递增的次序链接,在分配的时候从链首开始查找,直至找到一个大小合适的空闲分区,再根据进程大小从空闲分区中分去一块,如果不能找到则返回内存分配失败

2.算法分析:该算法倾向于优先利用内存中低地址部分的空闲分区,从而保存了髙地址部分的大空闲分区,为以后达到的大进程分配大的空间地址创造条件。但该算法存在以下不足:1.每次查找都从开始的低地址部分寻址,必然增加查找可用空闲分区时的开销2.低地址部分的不断划分必然导致许多难以利用的,很小的空闲分区。

3.算法改进:1..根据该算法不合理性的第一条而产生的首次循环适应调度算法能够根据起始查询指针从上次查询地址开始寻址从而解决该问题,具体算法见首次循环适应调度算法。2.根据该算法不合理性的第二条而产生的最佳适应调度算法能够根据适当大小划分内存空间给进程来减少分区碎片的产生从而解决该问题,具体算法见最佳适应调度算法。

2.首次循环适应算法:

1.算法总结:改算法由首次适应算法演变而来,在为进程分配内存时设置一个起始查询指针,来记录上次查询的最好位置,作为下次查询的起始位置,并且是循环查找,即当查找到链尾时转向链首开始查询,如果循环查找仍然未能找到,则返回内存分配失败。

2.算法分析:该算法使得内存空间的分配趋向均匀,从而减小查找空闲分区的开销,但具有以下不足:1.会造成内存分配时大空间的不足。2.造成整个内存的分区碎片不再局限于低地址,而是分布于整个内存。

3.算法改进:1..根据该算法不合理性的第一条而产生的最佳适应调度算法能够根据空间大小划分适当内存给进程从而解决该问题,具体算法见最佳适应调度算法。2..根据该算法不合理性的第二条而产生的最佳适应调度算法能够根据空间大小划分适当内存给进程,将内存碎片减小到最低从而解决该问题,具体算法见最佳适应调度算法。

3.最佳适应算法:

1.算法总结:该算法将所有分区按照容量大小从小到大的顺序形成一空闲分区链,这样总是将既满足要求,容量又最小的空闲分区分割给作业,,避免了“大材小用”,也加速了查找,减轻了硬件负担。

2.算法分析:该算法从一定程度上减小了内存碎片的产生和大小,也优化了查找内存空间的硬件开销,但是该算法依旧会留下许多难以利用的更小的内存碎片。

3.算法改进:1..根据该算法不合理性的第一条而产生的最坏适应算法能够从最大程度上减小内存碎片从而解决该问题,具体算法见最坏适应算法。

4.最坏适应算法:

1.算法总结:该算法将所有分区按照容量大小从大到小的顺序形成一空闲分区链,这样总是挑选最大的空闲分区分割给进程使用,使得剩下的空闲分区不至于太小,而且查找方便,查找时只看第一个分区是否满足进程内存分配要求,如果否,返回失败。

2.算法分析:该算法从一定程度上减小了内存碎片的产生,同时查找效率比较高,但是存在分配中期缺乏大块内存空间使得大型进程无法分配空间而被拒绝执行。

3.算法改进:1..根据该算法不合理性的第一条而产生的快速适应算法能够直接分配,不产生内存碎片从而解决该问题,具体算法见快速适应算法。

5.快速适应算法:

1.算法总结:改算法也称为分类搜索法,将空闲分区按照容量大小分类,对于每一类具有相同容量的所有空闲分区单独设立一个空闲分区链表,这样使得系统中存在多个空闲分区链表,同时在内存起始的地方设立一张管理索引表,该表的每一个表项对应一种空闲分区类型,并记录该类型空闲分区链表表头的指针,分配内存时仅仅需要能容纳它的最小空闲分区链表,取下第一块进行分配即可。当内存匹配成功时,不对分区进行分割,直接将分区分配给内存即可,这样就不会产生碎片,也保留了最大的分区。

2.算法分析:该算法通过设立管理索引表来达到快速查找的目的很成功,并且不分割的特性使得空闲分区碎片产生的概率降到了零,同时也不伤害大分区的分配,为大型进程的执行创造了条件,但该算法存在以下不足需要改进:1.建立分区链表和管理索引表使得分区归还时的系统开销大。2.空闲分区虽然不分割,但是得不到利用依然会造成内存浪费,,是典型的以空间换时间的算法。

3.算法改进:1..根据该算法不合理性的第一条而产生的伙伴系统回收策略能够直接将对应的内存合并从而解决该问题,具体算法见伙伴系统回收策略。1..根据该算法不合理性的第二条而产生的空闲分区分配创新性算法能够对整体内存进行分配和回收,不会造成内存浪费从而解决该问题,具体算法见空闲分区分配创新性算法。

6. 空闲分区分配创新型算法:

1.算法构思:该算法将内存看做一块不进行分割的整体,同时设立管理索引表、回收索引表和分区链,管理索引表记录正在使用已经分配的内存空间,回收索引表用于记录回收回来的空间信息。当进来一个进程需要进行分配时,从整体内存中分配一块大小一致的给它,同时为其创建分区链表,并在管理索引表中记录该信息,当进程执行完毕需要释放内存空间时,根据表和链中的数据信息采用伙伴系统回收策略回收,并且记录到回收索引表,若回收回来的内存中可以与未分配的内存连接在一起,则进行合并,更改相应表项信息。

2.算法分析:该算法既不会产生内存碎片,也不会造成回收时系统开销大。

结束语:

本文根据参考文献的部分算法进行分析,总结前人的算法思想,分析算法对系统造成的影响及不足,并且在前人得基础上改进算法,得到本文在每种类型算法最后的改进型算法,单独分析利弊。红色字体部分是本人自创算法,为经过实践,如有不妥之处请指教!

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值