import random
class PCB:
# 进程的优先权
pro_pri = []
# 进程名,定义为一个列表
progress_name = []
# 进程
pro_ser = []
def __init__(self,N):
self.pro_na(N)
def pro_na(self,N):
# N表示的是进程的数量
# 优先权列表
self.pro_pri=random.sample(range(0,100),N)
# 进程的名称
for i in range(N):
self.progress_name.append(i)
#进程的服务时间
self.pro_ser=random.sample(range(0,100),N)
class Priority:
# 构造函数
def __init__(self,pro_pri,pro_ser,progress_name):
self.pre_pro(pro_pri,pro_ser,progress_name)
# 定义一个函数,返回元素的下标,以列表和目标元素作为参数
def re_subscript(self,list, obj):
for i in range(len(list)):
if list[i] == obj:
return i
# 将列表的元素从小到大进行排列
def pre_pro(self,list1,list2,list3):
while len(list2)>0:
# 循环取出第一个列表中的最大元素,这个元素对应的下标对应的再pro_ser列表中优先级最高
# list1是优先权对应的列表,list2是服务时间对应的列表,list3是进程对应的名称
max_ele=max(list1)
sub=self.re_subscript(list1,max_ele)
ex_pro=list2[sub]
print("第",list3[sub],"个","进程正在执行!")
# 该进程对应的优先权减三
list1[sub]-=3
# 改进程对应的服务时间减一
list2[sub]-=1;
if ex_pro<=0:
del list1[sub]
del list2[sub]
del list3[sub]
print("还有",len(list2),"个进程!")
def main():
N=int(input('请输入进程的数量:'))
pcb=PCB(N)
pro_pri=pcb.pro_pri
progress_name=pcb.progress_name
pro_ser=pcb.pro_ser
pri=Priority(pro_pri,pro_ser,progress_name)
def main1():
N=int(input("请输入进程数量:"))
# 假设进程同时到达,服务时间为下列列表中的时间
service_time=random.sample(range(0,20),N)
progress_name=random.sample(range(0,20),N)
# 使用count记录有多少个进程已经完成
count=0
# 使用n记录一次循环中有多少进程完成
n=0
lenth=len(service_time)
while count<N:
for i in range(N-count):
i-=n
print(service_time)
# ,设置时间片为1,每一个进程轮转一次服务时间就减1
service_time[i]=service_time[i]-1
# 如果服务时间为0就将其从就绪队列里删除
if service_time[i]==0:
del service_time[i]
print('第',progress_name[i],'个进程已经结束了')
del progress_name[i]
# 记录有多少个进程的服务时间已经变为了0
count=count+1
n+=1
# 一次循环结束之后将n置为0
n=0
print('一共轮转了',count, '次!')
# 选择算法
s=int(input("请输入1选择优先权算法,输入其他任意数字选择时间片轮转法:"))
if s==1:
main()
else:
main1()
操作系统实验--优先权算法 and 时间片轮转法--python实现
最新推荐文章于 2022-12-30 21:54:16 发布