用C++运行的时间片轮算法
根据给定的文件信息,我们可以总结出以下关于“用C++实现的时间片轮算法”的相关知识点: ### 时间片轮算法简介 时间片轮算法(Round Robin Scheduling Algorithm),是一种简单的进程调度策略,它将所有等待执行的任务放入一个队列中,并为每个任务分配一个固定的时间片(通常称为时间量子)。在该时间片内,任务可以运行,当时间片结束时,即使任务尚未完成,也会被中断并放入队列的末尾,以便其他任务有机会运行。这种方式确保了所有任务都能获得一定的处理器时间,避免了个别任务长期占用资源导致其他任务无法执行的情况。 ### 源代码分析 #### 基本数据结构定义 程序通过一系列头文件的包含来引入必要的库支持: - `stdio.h`:用于标准输入输出。 - `stdlib.h`:提供内存管理和其他通用函数。 - `string.h`:提供字符串操作函数。 - `iostream.h`:提供C++中的输入输出流支持。 接下来定义了一个名为`node`的结构体类型,用来表示进程控制块(Process Control Block, PCB)的信息,包括: - 进程名`name`; - 优先级`prio`; - 当前已经运行的时间`round`; - 使用CPU的时间`cputime`; - 需要运行的总时间`needtime`; - 运行计数器`count`; - 当前状态`state`; - 指向下一个进程的指针`next`。 #### 主要功能函数解析 1. **初始化函数** - `void firstin()`: - 将就绪队列的头部进程设置为当前运行进程,并更新其状态为运行状态。 2. **打印函数** - `void prt1(char a)` 和 `void prt2(char a, PCB*q)`: - `prt1`函数根据参数`a`打印相应的提示信息; - `prt2`函数根据参数`a`和进程控制块`q`,打印当前进程的状态信息。 3. **进程列表打印函数** - `void prt(char algo)`: - 该函数遍历当前正在运行、就绪队列以及已完成的进程列表,并调用`prt1`和`prt2`函数进行打印。 4. **插入函数** - `void insert(PCB*q)`: - 该函数将新创建的进程控制块`q`按照轮转顺序插入到就绪队列中。 5. **进程创建函数** - `void create(char alg)`: - 该函数负责创建指定数量的进程,并将它们添加到就绪队列中。 6. **时间片轮转调度函数** - `void timeslicecycle(char alg)`: - 该函数实现了时间片轮转调度的核心逻辑,即为每个进程分配固定的时间片,时间片结束后将进程重新放回就绪队列,并选择下一个进程运行。 7. **主函数** - `void main()`: - 用户输入进程的数量,并调用`create`函数创建进程; - 调用`timeslicecycle`函数执行时间片轮转调度。 ### 总结 通过以上对源代码的分析,我们可以了解到该程序实现了时间片轮转算法的基本功能,包括进程的创建、插入、调度和状态管理等。此外,还提供了进程状态的打印功能,便于调试和理解算法的工作原理。时间片轮转算法作为一种简单有效的调度策略,在操作系统领域有着广泛的应用。
#include<stdlib.h> //要调用的头文件
#include<string.h> //要调用的头文件
#include<iostream.h> //要调用的头文件
typedef struct node //用结构体定义
{
char name[10];
int prio;
int round;
int cputime;
int needtime;
int count;
char state;
struct node *next;
}PCB;
PCB *finish,*ready,*tail,*run; //队列指针
int N; //进程数
void firstin()
{
run=ready; //就绪队列头指针赋值给运行头指针
run->state='R'; //进程状态变为运行态
ready=ready->next; //就绪队列头指针后移到下一进程
}
//输出标题函数
void prt1(char a)
{
if(toupper(a)=='P') //优先级法
cout<<" "<<endl;
cout<<"进程名 占用CPU时间 到完成还要的时间 轮转时间片 状态"<<endl;
//进程PCB输出
void prt2(char a,PCB *q)
{
if(toupper(a)=='P') //优先级法的输出
cout<<q->name<<" "<<q->cputime<<" "<<q->needtime<<" "<<
q->round<<" "<<q->state<<endl;
}
//输出函数
void prt(char algo)
{
PCB *p;
prt1(algo); //输出标题
if(run!=NULL) //如果运行指针不空
prt2(algo,run); //输出当前正在运行的PCB
p=ready; //输出就绪队列PCB
while(p!=NULL)
{
prt2(algo,p);
p=p->next;
}
p=finish; //输出完成队列的PCB
while(p!=NULL)
{
prt2(algo,p);
p=p->next;
}
getchar(); //按住任意键继续
剩余5页未读,继续阅读
- qewueg2013-12-30一般,不是很好
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Spring Cloud商城项目专栏 049 支付
- sensors-18-03721.pdf
- Facebook.apk
- 推荐一款JTools的call-this-method插件
- json的合法基色来自红包东i请各位
- 项目采用YOLO V4算法模型进行目标检测,使用Deep SORT目标跟踪算法 .zip
- 针对实时视频流和静态图像实现的对象检测和跟踪算法 .zip
- 部署 yolox 算法使用 deepstream.zip
- 基于webmagic、springboot和mybatis的MagicToe Java爬虫设计源码
- 通过实时流协议 (RTSP) 使用 Yolo、OpenCV 和 Python 进行深度学习的对象检测.zip