基于时间片的轮转调度算法

时间:2026-01-17

基于时间片的轮转调度算法 实验目的:深入了解算法的实现过程

实验内容:用C++模拟基于时间片的轮转算法

实验步骤:1、编写代码

2、运行调试

3、查看结果

4、编写实验报告

实验要求

在提交的实验报告中,必须包含如下内容:

(1) 设计思想、系统结构图、数据结构及程序流程图。

(2) 调试通过的源程序清单(含必要注释)及运行结果。

实验结果:

实验小结:

时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。时间片轮转调度中关键的一点是时间片的长度的选取。本实验默认时间片为1,在试验过程中基本满足了实验要求。通过本次实验,我更加了解了时间片轮转调度算法,通过翻看课本,对其的理解更加的深刻了,在以后的学习中,我会更加努力 的学习操作系统的相关课程。当然,实验中也遇到了问题,但都不是理论上的问题,而是编程的问题,根本原因还是编程基础不牢。以后会在编程方面努力。

源代码:

#include "stdio.h"

#include"stdlib.h"

struct PCB

{

int pid; //进程标识符

int rr; //已运行时间

int time; //进程要求运行时间

char sta; //进程的状态

struct PCB *next; //链接指针

};

struct PCB pcb1,pcb2,pcb3,pcb4,pcb5,*tail,*head,*rp;

init()

{

int i,time;

pcb1.pid = 1;

pcb2.pid = 2;

pcb3.pid = 3;

pcb4.pid = 4;

pcb5.pid = 5;

pcb1.rr =pcb2.rr =pcb3.rr =pcb4.rr =pcb5.rr = 0;

pcb1.sta = pcb2.sta = pcb3.sta = pcb4.sta = pcb5.sta = 'w'; printf("请输入时间片p1需要运行的时间:");

scanf("%d",&time);

pcb1.time = time;

printf("请输入时间片p2需要运行的时间:");

scanf("%d",&time);

pcb2.time = time;

printf("请输入时间片p3需要运行的时间:");

scanf("%d",&time);

pcb3.time = time;

printf("请输入时间片p4需要运行的时间:");

scanf("%d",&time);

pcb4.time = time;

printf("请输入时间片p5需要运行的时间:");

scanf("%d",&time);

pcb5.time = time;

pcb1.next=&pcb2;

pcb2.next=&pcb3;

pcb3.next=&pcb4;

pcb4.next=&pcb5;

pcb5.next=&pcb1;

head = &pcb1;

tail = &pcb5;

}

void printf1()

{

printf("+---------------|---------------|---------------|---------------+\n");

printf("|\tpid\t|\trr\t|\ttime\t|\tSTA\t|\n");

printf("|---------------|---------------|---------------|---------------|\n");

}

printf2()

{

printf("processes p%d running\n",head->pid);

printf1();

printf("|\t%d\t|\t%d\t|\t%d\t|\t%c\t|\n",head->pid,head->rr,head->time,head->sta);

printf("|---------------|---------------|---------------|---------------|\n");

rp=head;

while(rp!=tail)

{

rp=rp->next;

printf("|\t%d\t|\t%d\t|\t%d\t|\t%c\t|\n",rp->pid,rp->rr,rp->time,rp->sta);

printf("|---------------|---------------|---------------|---------------|\n");

}

}

operation()

{

int flag=1;

while (flag<=5)

{

head->rr ++;

if ((head->rr==head->time)||(head->time==0))

{

tail->sta='w';

head->sta='f';

printf2();

head=head->next;

tail->next=head;

flag++;

}

else

{

tail->sta='w';

head->sta='r';

printf2();

tail=head;

head=head->next;

}

}

}

void main()

{

init(); //初始化

printf("this is the begin state :\n"); printf2(); //显示初始状态 operation(); //运行

}

…… 此处隐藏:191字,全部文档内容请下载后查看。喜欢就下载吧 ……
基于时间片的轮转调度算法.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219