进程调度-操作系统实验

、实验过程

1.优先级(抢占式)调度算法

(1)流程图

图一

(2)步骤

①运行当前选择的进程

②修改代表状态的时间值

③获得新的就绪队列

2.轮转法

(1)流程图

图二

(2)步骤

①处理预就绪队列,获得就绪队列

②运行当前选择的进程

③修改代表状态的时间值

④获得新的预就绪队列

二、实验分析与实现

1.优先级(抢占式)调度算法中,均将进程状态分为未到达、就绪中、运行中和已结束四种,分别以0(初始值)、1、2、3四个state值进行标记。

图三
图四

代码:

#优先级(抢占)调度算法-各进程当前状态
def priority_stateshow(processes,current_time,readyrow):
    for Process in processes:
        if current_time >= Process.arrival_time:
            if Process.remaining_time ==0:
                Process.state=3
            elif Process in readyrow:
                if Process is readyrow[0]:
                    Process.state=2
                else:
                    Process.state=1

priority_stateshow(processes, current_time, readyrow)
print_state(processes, current_time)

rotation_stateshow(processes, current_time, readyrow)
print_state(processes, current_time)

不同状态效果展示:

图五

2.在最后一时刻,所有进程应全部结束。调度结果的打印使用同一个函数,只需获取在相应调度结束时的各进程属性。

代码:

printresult(processes)

图六
图七

3.使用random.randian()函数,达到随机生成进程相关属性的目的。其中,为模拟进程号以到达先后为顺序由小到大标注,arrival_time的生成采用random.sample()函数,随进程号i一起被标记为对应进程属性。

代码:

def init_Process():
    number = int(input("请输入需要随机生成的进程的个数4~8:"))
    processes = []
    #arrival_time随机生成,但由小到大,通过此与进程号形成关联
    sorted_numbers = sorted(random.sample(range(8), number))
    for i in range(number):
        processes.append(Process(i, sorted_numbers[i], random.randint(1, 10), random.randint(1, number)))
    print("当前生成的进程集processes1为:")
    return processes
图八

4.为使两种调度算法使用同一生成的进程集以对比效果,采用了Python的`multiprocessing`模块来创建和管理多个并发执行进程,在此,将优先级调度算法与轮转法看作两个并发的进程。

代码:

manager1 = multiprocessing.Manager()
shared_data1 = manager1.list()  # 创建一个共享的列表,用于存储数据

processes1 = init_Process()
init_print(processes1)

p1 = multiprocessing.Process(target=prompt_priority_scheduling, args=(processes1, shared_data1))
p2 = multiprocessing.Process(target=rotation_scheduling, args=(processes1, shared_data1))

p1.start()
p2.start()

p1.join()
p2.join()

实现效果见图6、图7(上)中生成属性的对比。

5.为保证代码的准确性和通用性,采用processes0作为验证进程集,效果如下:

图九
图十
图十一
图十二

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值