#创造灵感#按照优先级(优先数越小,优先级越大)对就绪队列进行排序,类似于链表中的排序。
从班级纪律委员cjr的代码中得到启发,xiexie
时间片轮转算法:
对资源的分析:由输入的两个进程已经运行所需时间可以得知,pid1的资源开始占用的需求点为(6/2)3,pid2的资源开始占用的需求点为(7/2)3(系统进程和用户进程各一半)。因此在pid1运行的3时刻,即总运行时间的5时刻,pid1开始占用资源,在pid2运行的3时刻,总运行时间的7时刻pid2开始占用资源,但此时资源占用时长还未结束,pid1需要继续使用资源,因此pid2要下CPU,让pid1继续使用CPU。直到总运行时间的10时刻,此时资源空闲,pid2可以占用资源。
对CPU的分析:时间片为2,因此在2时刻,pid1下cpu,3-4pid2上CPU,不断轮转,但在7时刻,由于pid1还在使用资源,因此pid2只能先下CPU,让pid1继续使用CPU。pid1继续使用CPU,继续进行轮转调度直到9,pid1运行结束,只剩下pid2这一个进程使用CPU。
接着使用Visio软件绘制甘特图如下图2所示:
时间轮转算法系统中CPU、资源分配的甘特图
修改为高优先级调度算法:
通过比较优先数prio使进程按照优先级进行排列
类似于对链表进行排序。
然后在runIn()函数中调用sortList(ready)对就绪队列进行排序如下图9所示,使得进程按照优先级排列,排在最前面的优先级最高。
在runIn()中调用sortList(ready)按照优先级对进程进行排序
输入3个进程,pid1 2,pid2 3,pid3 4
对资源的分析:由输入的三个进程已经运行所需时间可以得知,pid1的资源开始占用的需求点为(2/2)1,pid2的资源开始占用的需求点为(3/2)向下取整为1,pid3的资源占用需求点为(4/2)2,(系统进程和用户进程各一半)。由于使用的算法为高优先级调度算法,pid2的优先级大于pid3的优先级大于pid1的优先级。因此在pid2运行的1时刻,即总运行时间的1时刻,pid2开始占用资源,资源占用时间为3,则在4时释放资源。接下来是pid3运行的2时刻,总运行时间的5时刻pid3开始占用资源,资源占用时间为3 ,则在8时释放资源。最后是pid1需要在运行的1时刻,总运行时间的8时刻使用资源,资源占用3后,直到总运行时间的11时刻,此时资源空闲。
对CPU的分析:由于使用的算法为高优先级调度算法,因此pid2的优先级大于pid3的优先级大于pid1的优先级。Pid2从0-3时刻使用CPU,在3时刻使用完毕,下CPU。3-7pid3上CPU,但在7时刻,进程结束使用CPU。最后,pid1从8-11使用CPU,9时刻所有进程都使用完CPU。使用Visio软件绘制相应的甘特图如下图所示:
高优先级调度算法的CPU、资源分配甘特图
输入5个进程,pid1 3, pid2 4, pid3 5,pid4 6,pid5 7。
对资源的分析:由输入的三个进程已经运行所需时间可以得知,pid2的资源开始占用的需求点为(4/2)2,pid4的资源开始占用的需求点为(6/2)3,pid3的资源占用需求点为(5/2)向下取整为2, pid1的资源占用需求点为(3/2)向下取整为1, pid5的资源占用需求点为(7/2)向下取整为3,(系统进程和用户进程各一半)。由于使用的算法为高优先级调度算法,pid2的优先级大于pid4的优先级大于pid3的优先级大于pid1的优先级大于pid5的优先级。因此在pid2运行的2时刻,即总运行时间的2时刻,pid2开始占用资源,资源占用时间为3,则在5时释放资源。接下来是pid4运行的3时刻,总运行时间的7时刻pid4开始占用资源,资源占用时间为3 ,则在10时释放资源。接下来是pid3运行的2时刻,总运行时间的12时刻pid3开始占用资源,资源占用时间为3 ,则在15时释放资源。接下来是pid1运行的1时刻,总运行时间的16时刻pid1开始占用资源,资源占用时间为3 ,则在19时释放资源。最后是pid5需要在运行的3时刻,总运行时间的21时刻使用资源,资源占用3后,直到总运行时间的24时刻,此时资源空闲。
对CPU的分析:由于使用的算法为高优先级调度算法,因此pid2的优先级最大,pid2从0-4时刻使用CPU,在4时刻使用完毕,下CPU。4-10时刻pid4上CPU,但在10时刻,进程pid4结束使用CPU。然后,pid3从10-15时刻使用CPU, pid1从15-18时刻使用CPU ,最后pid5从18-25时刻使用CPU ,25时所有进程都使用完CPU。
介是Tsingxianlan发的第一篇blog哟,如果有不对的地方,请批评指正。