设计一个简单的任务调度器,支持两种操作:
add task_id priority time
你需要开发一个简单的任务调度系统,该系统按任务优先级进行调度,优先级范围是(0,99),数值越小优先级越高。只有高优头级任务执行完成后,低优先级任务才能执行,同等优先级的任务,按照FIFO原则,先进入调度系统的任务会优先调度,当优先级任务执行时,如新增了高优先级任务,高优先级任务会抢占低优先级任务。
请实现一个程序,模拟这个任务调度系统,
程序需要完成以下功能:
1.添加任务:将一个新任务添加到任务调度系统,任务包含一个唯一ID(task_id)[0,65535],优先级(priority)[0,99],运行时间(time)[1,10000]。运行时间的单位可以认为是一个时间片单元,无需关心单位。
2.执行任务:任务调度系统按照调度策略,调度任务并执行,调度系统
调度任务:并消耗对应时间片,时间片范围[1,100000]
输入格式
程序需要处理以下类型的输入:
1.添加任务 add task_id priority time
2.执行任务
run time
注
1.输入命令总行数不超过10000行
2.run命令可以有多个
3.空行即命令结束
显示任务调度系统当前执行的任务ID。若无任何任务,则显示idle。
输入
add 101 0 10
add 20 1 3
add 300 0 1
run 11
输出
20
add 101 0 10:添加任务101,其优先级为0,运行时间为10个时网片
add 20 1 3:添加任务20,其优先级为1,运行时间为3个时时间片
add 300 0 1:添加任务300,其优先级为0,运行时间为1个时间片
run11:调度系统调度任务并执行。首先调度任务101,运行了10个时间片,任务完成。接下来调度任务300(其优先级高于任务20),返行了1个时间片,任务完成。此时消耗完全部运行时间片(即11)
此时调度系统要运行的任务id即为20
输入
add 1 0 10
run 11
输出
idle
add 1 1 15:添加任务1,优先级0,运行为10个时间片
run 11:调度系统调度任务,并运行11个时间片。选择任务运行10个时间片。任务1完成,无任务待调度
调度系统无任何任务,因此显示idle
输入
add 1 1 15
run 11
add 2 0 6
run 3
输出
2
add 1 1 15:添加任务1,优先级1,运行为15个时间片
run 11:调度系统调度任务,并运行11个时间片。选择任务运行11个时间片。任务1还未完成。
add 2 0 6:添加任务2,优先级0,运行为6个时间片。
run3:调度系统调度任务,因为任务2优先级高于任务1、选择任务2运行3个时间片,任务2未完成。
任务2未完成,因此显示2