基于Matplotlib库绘制的六种进程调度算法的时序图

 这篇文章明明超水标题却过分高大上

操作系统的小组作业,因为不会在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

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值