基于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

已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页