C语言/C++实现时间片轮转调度算法【操作系统】 您所在的位置:网站首页 质心算法c语言实现程序运行 C语言/C++实现时间片轮转调度算法【操作系统】

C语言/C++实现时间片轮转调度算法【操作系统】

2024-06-16 00:24| 来源: 网络整理| 查看: 265

实验目的:

用C/C++编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。

实验要求:

设计一个有N个进程并发的进程调度程序。每个进程有一个进程控制块(PCB)表示(可以用PCB直接代表进程实体,略去每个进程的程序段和数据段的具体运行)。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已用CPU时间、进程状态等等,并初始化设置一批进程控制块实例,通过对进程控制块实例对象的控制,来模拟进程调度的控制过程。

选取以下一种调度算法模拟实现。每进行一次调度,都打印一次运行进程、就绪队列、以及各个进程的PCB的相关信息,以便进行检查。

(1)时间片轮转调度算法:每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一(可以不考虑进程阻塞的情况)。

进程的到达时间、运行时间为进程初始化时程序员输入的时间。

就绪进程获得CPU后只能运行一个时间片(时间片由程序员初始化输入),运行后更新已占用CPU时间。

若运行一个时间片后(或一个时间片内),进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程;若运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,则把它插入就绪队列队尾等待CPU。

重复以上过程,直到所要进程都完成为止。

代码实现【开源】: #include #include #include //#include #define MAX_PROCESSES 100 //最大进程数量 using namespace std; typedef struct PCB { string name; //进程名 int arrival_time; //到达时间 int run_time; //需要运行时间 int used_cpu_time; //已用CPU时间 int status; //进程状态 0: waiting, 1: running, 2: completed } PCB; PCB processes[MAX_PROCESSES];//定义进程结构体 //queue PCBQue;//进程队列 PCB PCBQue[MAX_PROCESSES];//模拟进程队列 int num_processes = 0;//总共有几个进程 int que_num = 0;//进程队列元素个数 PCB rear;//若队首进程在一个时间片内未完成,则将此队首放在这里,用于后面放在队尾继续执行 int rearFlag = 0;//是否完成标志,用于判断在一个时间片里,队首进程是否已经执行完毕 void add_process(string name, int arrival_time, int run_time) { processes[num_processes].name = name; processes[num_processes].arrival_time = arrival_time; processes[num_processes].run_time = run_time; processes[num_processes].used_cpu_time = 0; processes[num_processes].status = 0; // waiting,等待状态 ++num_processes; } bool isAllCompleted()//判断所有进程是否都完成了 { float avg = 0; for(int i=0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有