操作系统-时间片轮转调度算法

基本概念

时间片轮转法(Round-Robin,RR)主要用于分时系统中的进程调度。为了实现轮转调度,系统把所有就绪进程按先入先出的原则排成一个队列。新来的进程加到就绪队列末尾。每当执行进程调度时,进程调度程序总是选出就绪队列的队首进程,让它在CPU上运行一个时间片的时间。时间片是一个小的时间单位,通常为10~100ms数量级。当进程用完分给它的时间片后,系统的计时器发出时钟中断,调度程序便停止该进程的运行,把它放入就绪队列的末尾;然后,把CPU分给就绪队列的队首进程,同样也让它运行一个时间片,如此往复。

例题

  1. 完成表格
进程到达时间服务时间完成时间周转时间带权周转时间
A03
B26
C44
D65
E82

解析:
进程处理的流程(P=1) :

		0.A	  CPU服务A		
		1.A	  CPU服务A		
		2.BA  当A执行完毕后被被放入队列的末尾,队列变成BA,CPU服务B
		3.AB  B执行完毕被放入末尾,队列变成AB,CPU服务A
		4.BC  A经过三次服务,处理完成。进程C进入队列并放在队尾,CPU服务B
		5.CB  B执行完毕被放入末尾,队列变成CB,CPU服务C
		6.BDC D进入队列放入队尾即B的后面,当C执行完毕后被放入末尾,队列变成BDC,CPU服务B
		7.DCB 接下来的服务以此类推
		8.CBED
		9.BEDC
		10.EDCB
		11.DCBE
		12.CBED
		13.BEDC
		14.EDCB
		15.DCB
		16.CBD
		17.BD
		18.D
		19.D

注:周转时间 = 完成时刻 - 进入系统时刻
带权周转时间 = 周转时间 / 所需服务时间

进程到达时间服务时间完成时间周转时间带权周转时间
A03441.33
B2618162.67
C4417133.25
D6520142.80
E821573.50
  • 41
    点赞
  • 207
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
时间片轮转调度算法是一种常见的进程调度算法,它将 CPU 时间分成若干个时间片,每个进程在一个时间片内运行一定时间,然后被暂停并放回就绪队列,等待下一次调度。这样可以保证每个进程都能获得一定的 CPU 时间,避免某些进程长时间占用 CPU 而导致其他进程无法运行的情况。 在实现时间片轮转调度算法时,通常需要使用一个循环队列来维护就绪队列,每次从队头取出一个进程运行,并将其放到队尾。如果一个进程的时间片用完了还没有运行完,则将其重新放到队尾,等待下一次调度。 以下是一个简单的 C++ 实现: ```c++ #include <iostream> #include <queue> using namespace std; struct Process { int pid; // 进程 ID int burst_time; // 运行时间 int remaining_time; // 剩余时间 }; int main() { int n, quantum; // 进程数和时间片长度 cout << "Enter the number of processes: "; cin >> n; cout << "Enter the time quantum: "; cin >> quantum; queue<Process> ready_queue; // 就绪队列 for (int i = 1; i <= n; i++) { int burst_time; cout << "Enter the burst time of process " << i << ": "; cin >> burst_time; ready_queue.push({i, burst_time, burst_time}); } int current_time = 0; // 当前时间 while (!ready_queue.empty()) { Process p = ready_queue.front(); ready_queue.pop(); int run_time = min(quantum, p.remaining_time); // 运行时间 current_time += run_time; p.remaining_time -= run_time; cout << "Process " << p.pid << " runs from " << current_time - run_time << " to " << current_time << endl; if (p.remaining_time > 0) { ready_queue.push(p); } } return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值