这篇文章明明超水标题却过分高大上
操作系统的小组作业,因为不会在Word里画图,想到了Matplotib,用几个最基本的语句,勉勉强强去捣鼓出来了,查手册,查百度,写代码的时间够用Word画好几份作业了,我真的是好懒啊,又懒又菜...
根据下信息,分别画图说明使用先来先服务、时间片轮转、短进程优先、最高响应比优先、不可抢占式优先级法和可抢占式优先级法时进程调度情况。
进程名
产生时间
要求服务时间
优先级
P1
0
10
3
P2
1
1
1
P3
2
2
3
P4
3
1
4
P5
4
5
2
一、先来先服务
按时间顺序依次调度进程
import matplotlib.pyplot as plt import pylab as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.figure(figsize=(10,4)) x = np.linspace(0,10,1000) p1 = 1+x*0 plt.plot(x,p1,label="$P1$",color="r",linewidth=2) x = np.linspace(10,11,1000) p2 = 2+x*0 plt.plot(x,p2,label="$P2$",color="b",linewidth=2) x = np.linspace(11,13,1000) p3 = 3+x*0 plt.plot(x,p3,label="$P3$",color="c",linewidth=2) x = np.linspace(13,14,1000) p4 = 4+x*0 plt.plot(x,p4,label="$P4$",color="m",linewidth=2) x = np.linspace(14,19,1000) p5 = 5+x*0 plt.plot(x,p5,label="$P5$",color="k",linewidth=2) plt.xlim((0, 19)) plt.ylim((1, 5)) plt.xticks(np.arange(0,21,1)) plt.yticks(np.arange(0,7,1)) plt.ylabel('P',fontproperties='SimHei',fontsize=15,color='green') plt.xlabel('Time',fontproperties='SimHei',fontsize=15,color='green') plt.title(u"先来先服务算法") plt.grid() plt.legend() plt.show()
二、时间片轮转
每个进程给1个时间片,按时间顺序,谁先用完谁结束。
import matplotlib.pyplot as plt import pylab as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.figure(figsize=(10,4)) x = np.linspace(0,1,1000) p1 = 1+x*0 plt.plot(x,p1,label="$P1$",color="r",linewidth=2) x = np.linspace(1,2,1000) p2 = 2+x*0 plt.plot(x,p2,label="$P2$",color="b",linewidth=2) x = np.linspace(2,3,1000) p3 = 3+x*0 plt.plot(x,p3,label="$P3$",color="c",linewidth=2) x = np.linspace(3,4,1000) p4 = 4+x*0 plt.plot(x,p4,label="$P4$",color="m",linewidth=2) x = np.linspace(4,5,1000) p5 = 5+x*0 plt.plot(x,p5,label="$P5$",color="k",linewidth=2) x = np.linspace(5,6,1000) p1 = 1+x*0 plt.plot(x,p1,color="r",linewidth=2) x = np.linspace(6,7,1000) p3 = 3+x*0 plt.plot(x,p3,color="c",linewidth=2) x = np.linspace(7,8,1000) p5 = 5+x*0 plt.plot(x,p5,color="k",linewidth=2) x = np.linspace(8,9,1000) p1 = 1+x*0 plt.plot(x,p1,color="r",linewidth=2) x = np.linspace(9,10,1000) p5 = 5+x*0 plt.plot(x,p5,color="k",linewidth=2) x = np.linspace(10,11,1000) p1 = 1+x*0 plt.plot(x,p1,color="r",linewidth=2) x = np.linspace(11,12,1000) p5 = 5+x*0 plt.plot(x,p5,color="k",linewidth=2) x = np.linspace(12,13,1000) p1 = 1+x*0 plt.plot(x,p1,color="r",linewidth=2) x = np.linspace(13,14,1000) p5 = 5+x*0 plt.plot(x,p5,color="k",linewidth=2) x = np.linspace(14,19,1000) p1 = 1+x*0 plt.plot(x,p1,color="r",linewidth=2) plt.xlim((0, 19)) plt.ylim((1, 5)) plt.xticks(np.arange(0,21,1)) plt.yticks(np.arange(0,7,1)) plt.ylabel('P',fontproperties='SimHei',fontsize=15,color='green') plt.xlabel('Time',fontproperties='SimHei',fontsize=15,color='green') plt.title(u"时间片轮转算法") plt.grid() plt.legend() plt.show()
三、短进程优先
按时间来,遇到一起的谁短谁先来,而且是一次性执行完。
import matplotlib.pyplot as plt import pylab as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.figure(figsize=(10,4)) x = np.linspace(0,10,1000) p1 = 1+x*0 plt.plot(x,p1,label="$P1$",color="r",linewidth=2) x = np.linspace(10,11,1000) p2 = 2+x*0 plt.plot(x,p2,label="$P2$",color="b",linewidth=2) x = np.linspace(11,12,1000) p4 = 4+x*0 plt.plot(x,p4,label="$P4$",color="m",linewidth=2) x = np.linspace(12,14,1000) p3 = 3+x*0 plt.plot(x,p3,label="$P3$",color="c",linewidth=2) x = np.linspace(14,19,1000) p5 = 5+x*0 plt.plot(x,p5,label="$P5$",color="k",linewidth=2) plt.xlim((0, 19)) plt.ylim((1, 5)) plt.xticks(np.arange(0,21,1)) plt.yticks(np.arange(0,7,1)) plt.ylabel('P',fontproperties='SimHei',fontsize=15,color='green') plt.xlabel('Time',fontproperties='SimHei',fontsize=15,color='green') plt.title(u"短进程优先算法") plt.grid() plt.legend() plt.show()
四、最高响应比优先
(运行时间+上一个进程结束的时间-产生时间)/(运行时间),第一个进程运行完是10,第二个进程在1的时候就产生了,但是它至少得等到10才能执行,也就是(1+10-1)/1,第三个进程在第2时产生,它至少也得等到10才执行,也就是(2+10-2)/2,第四个进程在第3时产生,它至少也得等到10才执行,也就是(1+10-3)/1,第五个进程在第4时产生,它至少也得等到10才执行,也就是(5+10-4)/5,谁最大谁先来,所以把2执行完。然后是4,然后是3,最后是5。
import matplotlib.pyplot as plt import pylab as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.figure(figsize=(10,4)) x = np.linspace(0,10,1000) p1 = 1+x*0 plt.plot(x,p1,label="$P1$",color="r",linewidth=2) x = np.linspace(10,11,1000) p2 = 2+x*0 plt.plot(x,p2,label="$P2$",color="b",linewidth=2) x = np.linspace(11,12,1000) p4 = 4+x*0 plt.plot(x,p4,label="$P4$",color="m",linewidth=2) x = np.linspace(12,14,1000) p3 = 3+x*0 plt.plot(x,p3,label="$P3$",color="c",linewidth=2) x = np.linspace(14,19,1000) p5 = 5+x*0 plt.plot(x,p5,label="$P5$",color="k",linewidth=2) plt.xlim((0, 19)) plt.ylim((1, 5)) plt.xticks(np.arange(0,21,1)) plt.yticks(np.arange(0,7,1)) plt.ylabel('P',fontproperties='SimHei',fontsize=15,color='green') plt.xlabel('Time',fontproperties='SimHei',fontsize=15,color='green') plt.title(u"最高响应比优先算法") plt.grid() plt.legend() plt.show()
五、不可抢占式优先级法
先按顺序,然后直接上优先级越小越先,优先级不可被打断,也就是完整执行结束才能下一个。
import matplotlib.pyplot as plt import pylab as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.figure(figsize=(10,4)) x = np.linspace(0,10,1000) p1 = 1+x*0 plt.plot(x,p1,label="$P1$",color="r",linewidth=2) x = np.linspace(10,11,1000) p2 = 2+x*0 plt.plot(x,p2,label="$P2$",color="b",linewidth=2) x = np.linspace(11,16,1000) p5 = 5+x*0 plt.plot(x,p5,label="$P5$",color="k",linewidth=2) x = np.linspace(16,18,1000) p3 = 3+x*0 plt.plot(x,p3,label="$P3$",color="c",linewidth=2) x = np.linspace(18,19,1000) p4 = 4+x*0 plt.plot(x,p4,label="$P4$",color="m",linewidth=2) plt.xlim((0, 19)) plt.ylim((1, 5)) plt.xticks(np.arange(0,21,1)) plt.yticks(np.arange(0,7,1)) plt.ylabel('P',fontproperties='SimHei',fontsize=15,color='green') plt.xlabel('Time',fontproperties='SimHei',fontsize=15,color='green') plt.title(u"不可抢占优先级算法") plt.grid() plt.legend() plt.show()
六、可抢占式优先级法
一个进程在运行中可以被优先级高的进程抢断。
import matplotlib.pyplot as plt import pylab as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.figure(figsize=(10,4)) x = np.linspace(0,1,1000) p1 = 1+x*0 plt.plot(x,p1,label="$P1$",color="r",linewidth=2) x = np.linspace(1,2,1000) p2 = 2+x*0 plt.plot(x,p2,label="$P2$",color="b",linewidth=2) x = np.linspace(2,4,1000) p1 = 1+x*0 plt.plot(x,p1,color="r",linewidth=2) x = np.linspace(4,9,1000) p5 = 5+x*0 plt.plot(x,p5,label="$P5$",color="k",linewidth=2) x = np.linspace(9,16,1000) p1 = 1+x*0 plt.plot(x,p1,color="r",linewidth=2) x = np.linspace(16,18,1000) p3 = 3+x*0 plt.plot(x,p3,label="$P3$",color="c",linewidth=2) x = np.linspace(18,19,1000) p4 = 4+x*0 plt.plot(x,p4,label="$P4$",color="m",linewidth=2) plt.xlim((0, 19)) plt.ylim((1, 5)) plt.xticks(np.arange(0,21,1)) plt.yticks(np.arange(0,7,1)) plt.ylabel('P',fontproperties='SimHei',fontsize=15,color='green') plt.xlabel('Time',fontproperties='SimHei',fontsize=15,color='green') plt.title(u"可抢占优先级算法") plt.grid() plt.legend() plt.show()
周转时间:真正结束时间-产生时间
带权周转时间:周转时间/要求服务时间
P1
P2
P3
P4
P5
平均
先来先服务
(FCFS)
周转时间
10
10
11
11
15
11.4
带权周转时间
1
10
5.5
11
3
6.1
短进程优先非抢占(SPF)
周转时间
10
10
12
9
15
11.2
带权周转时间
1
10
6
9
3
5.8
高响应比
优先法
周转时间
10
10
12
9
15
11.2
带权周转时间
1
10
6
9
3
5.8
时间片轮转(RR)
周转时间
19
1
5
1
10
7.2
带权周转时间
1.9
1
2.5
1
2
1.68
不可抢占式优先级法
周转时间
10
10
16
16
12
12.8
带权周转时间
1
10
16
16
2.4
7.48
可抢占式优先级法
周转时间
16
1
16
16
5
10.8
带权周转时间
1.6
1
8
16
1
5.52