计操实验 多级反馈队列C语言

article/2025/8/15 4:17:28

计操实验 多级反馈队列C语言

需求:
1.队列4级,每一级的队列长度均为10;第一级的时间片为T,第二级的时间片为2T,第三级的时间片为4T,第四级的时间片为8T;(T的大小自己定)
2.非立即抢占的剥夺式调度算法;
3.要有:在调度高级别队列时,有新来的进程进入系统。

流程图:在这里插入图片描述
代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define T 1typedef struct Node
{int ArrivalTime;  //到达时间 int WorkTime;  //服务时间 int number;    //到达顺序 int flag;     //0等待,1运行完成 struct Node *next;
}Process;
typedef struct QueueList
{int TimeSlice;  //时间片 int length;   //队列长度 Process *front; //队列第一个进程指针 struct QueueList *next;
}Queue;Queue *head = NULL;
Process *Finish = NULL; //已完成 
int time = 0;void InitQueue()
{Queue *temp;for(int i=0;i<4;i++){temp = (Queue*)malloc(sizeof(Queue));temp->front = NULL;temp->TimeSlice = pow(2,i)*T;temp->length = 10;temp->next = NULL;if(head == NULL){head = temp;temp = NULL;}else{Queue *temp2;temp2 = head;while(temp2->next != NULL){temp2 = temp2->next;}temp2->next = temp;temp = NULL;}}
}
void InitProcess()
{int num;printf("请输入进程数量:"); scanf("%d",&num);if(num > 10){printf("超过队列长度!"); exit(1);}Process *temp;for(int i=0;i<num;i++){temp = (Process*)malloc(sizeof(Process));printf("请输入第%d个进程的到达时间及服务时间:",i+1);scanf("%d %d",&temp->ArrivalTime,&temp->WorkTime);temp->flag = 0;temp->next = NULL;temp->number = i+1;if(head->front == NULL){temp->next = NULL;head->front = temp;}else{Process *temp2;temp2 = head->front;while(temp2->next != NULL){temp2 = temp2->next;}temp->next = NULL;temp2->next = temp;}}
}void Insert2NextQueue(Process *P,Queue *Q)
{//将进程P插入Q队尾 if(Q->front == NULL){P->next = NULL;Q->front = P;}else{Process *temp;temp = Q->front;while(temp->next != NULL){temp = temp->next;}P->next = NULL;temp->next = P;}
}void RunFirstProcess(Queue *Q)
{if(Q->front->WorkTime <= Q->TimeSlice){time += Q->front->WorkTime;Q->front->WorkTime = 0;Q->front->flag = 1;printf("t=%d时刻:第%d个进程运行结束\n",time,Q->front->number);Process *temp,*temp2;temp = Finish;temp2 = Q->front->next;if(Finish == NULL){Finish = Q->front;Finish->next = NULL;}else{while(temp->next != NULL){temp = temp->next;}Q->front->next = NULL;temp->next = Q->front; }Q->front = temp2;}else{Q->front->WorkTime -= Q->TimeSlice;time += Q->TimeSlice;Process *temp,*temp2;temp = Q->front;temp2 = Q->front->next;if(Q->next != NULL){Insert2NextQueue(temp,Q->next);Q->front = temp2;	}else{//Insert2NextQueue(Q->front,Q);	if(temp2 != NULL){Q->front = temp2;if(temp2->next != NULL){temp2 = temp2->next;}temp2->next = temp;temp->next = NULL;}}}}void MLFQ()
{Queue *Q1=head;Queue *Q2=Q1->next;Queue *Q3=Q2->next;Queue *Q4=Q3->next; while(1){if(Q1->front != NULL && time >= Q1->front->ArrivalTime){//Q1取第一个进程运行 RunFirstProcess(Q1);}else{if(Q2->front != NULL && time >= Q2->front->ArrivalTime){//Q2取第一个进程运行 RunFirstProcess(Q2);}else{if(Q3->front != NULL && time >= Q3->front->ArrivalTime){//Q3取第一个进程运行RunFirstProcess(Q3); }else{if(Q4->front != NULL && time >= Q4->front->ArrivalTime){//Q4取第一个进程运行RunFirstProcess(Q4); }else{if(Q1->front != NULL || Q2->front != NULL || Q3->front != NULL || Q4->front != NULL){time++;}else{printf("所有进程运行完毕");}break; }}}}} 
}int main()
{InitQueue();InitProcess();MLFQ();return 0;
}

http://chatgpt.dhexx.cn/article/HJdpm2Hm.shtml

相关文章

【操作系统】轮转和多级反馈队列

随着计算机的技术逐渐步入家用后&#xff0c;新的调度指标接踵而来&#xff0c;周转时间已经不能满足人们日常工作的需求&#xff0c;更多时候人们更希望计算机能有更好的交互性&#xff0c;使其能更快地去响应任务&#xff0c;由此针对优化响应时间的调度策略也遍地开花&#…

多级反馈队列调度算法(c++)

如果对你有帮助&#xff0c;可以给卑微的博主留个赞、关注、收藏 (不是) (骗一下数据&#xff0c;说不定以后面试就过了&#xff0c;拜谢) 操作系统基本调度算法&#xff0c;多级反馈队列调度算法。在划分时间片的调度算法中&#xff0c;多级反馈队列算法兼顾提高系统吞吐…

多级反馈队列调度算法

实验目的&#xff1a; 在Linux下编程实现多级反馈队列调度算法&#xff0c;采用三级调度策略&#xff0c;所有进程先按到达顺序进入一级队列&#xff0c;按照时间片为2轮转一次&#xff0c;一个时间片内未完成的进程被依次移入二队列尾部。当一级队列中没有进程时&#xff0c;开…

多级反馈队列调度

多级反馈队列 ​ 多级反馈队列&#xff08;Multi-level Feedback Queue&#xff0c; MLFQ&#xff09;&#xff0c;与上个世纪70年代提出&#xff0c;主要应用于时分共享系统。主要解决两方面问题&#xff1a;一个是优化周转时间&#xff0c;一个是要给用户很好的交互体验。ML…

多级反馈队列算法

步骤&#xff1a; 0时刻&#xff0c;P1到达就绪队列&#xff08;时间片为4的&#xff09;P1先执行2ms&#xff0c;P2到达还未到时间片&#xff0c;P1继续执行2ms后&#xff0c;时间片到达了&#xff0c;P1滑到下一个就绪队列&#xff08;时间片为6的&#xff09;此时&#xff…

linux多级反馈队列的实现,多级反馈队列调度算法详解

通常在使用多级队列调度算法时&#xff0c;进程进入系统时被永久地分配到某个队列。例如&#xff0c;如果前台和后台进程分别具有单独队列&#xff0c;那么进程并不从一个队列移到另一个队列&#xff0c;这是因为进程不会改变前台或后台的性质。这种设置的优点是调度开销低&…

对数线性模型

http://blog.csdn.net/pipisorry/article/details/52788947 特征和指示特征 对数线性模型log linear model 对数线性模型有&#xff1a;最大熵模型和逻辑斯谛回归。 [概率图模型原理与技术] [PGM&#xff1a;无向图模型&#xff1a;马尔可夫网 ] 皮皮blog 最大熵模型的一般形式…

广义线性模型(Generalized Linear Model)之三:Poisson回归

广义线性模型&#xff08;Generalized Linear Model&#xff09;之三&#xff1a;Poisson回归 一、泊松回归&#xff08;Poisson regression&#xff09;简介&#xff08;一&#xff09;泊松回归&#xff08;二&#xff09;计数数据&#xff08;三&#xff09;泊松分布1&#x…

MIT自然语言处理第五讲:最大熵和对数线性模型

MIT自然语言处理第五讲&#xff1a;最大熵和对数线性模型&#xff08;第一部分&#xff09; 自然语言处理&#xff1a;最大熵和对数线性模型 Natural Language Processing: Maximum Entropy and Log-linear Models 作者&#xff1a;Regina Barzilay&#xff08;MIT,EECS Depar…

机器学习教程 之 线性模型:线性回归、对数几率回归、线性判别分析

常用的三个线性模型的原理及python实现——线性回归&#xff08;Linear Regression&#xff09;、对数几率回归&#xff08;Logostic Regression&#xff09;、线性判别分析&#xff08;Linear Discriminant&#xff09;。 这可能会是对线性模型介绍最全面的博客 文章目录 一、…

机器学习(二)线性模型——线性回归、对数几率回归、线性判别分析

一、线性回归 线性回归&#xff08;linear regression&#xff1a;试图学得一个线性模型以尽可能准确地预测实值输出标记。 1.最简单的形式&#xff1a;输入属性的数且只有一个&#xff0c; 最小二乘法&#xff1a;基于均方差误差最小化来进行模型的求解&#xff0c;在线性回…

对数线性模型:逻辑斯谛回归和最大熵模型

http://blog.csdn.net/pipisorry/article/details/52788947 对数线性模型log linear model 对数线性模型有&#xff1a;最大熵模型和逻辑斯谛回归。 特征和指示特征 对数线性模型的一般形式 [概率图模型原理与技术] 某小皮 对数线性模型的不同形式 因子图 将因子转换到对…

从线性到非线性模型-对数线性模型

从线性到非线性模型 1、线性回归&#xff0c;岭回归&#xff0c;Lasso回归&#xff0c;局部加权线性回归 2、logistic回归&#xff0c;softmax回归&#xff0c;最大熵模型 3、广义线性模型 4、Fisher线性判别和线性感知机 5、三层神经网络 6、支持向量机 code: https://…

论文总结3 对数线性模型 罗盛

研究变量之间的相互关系、列联表、对应分析 目录 一、模型介绍 二、比较-对数线性模型&对应分析 1.相同&不同 2.相互关系 三、应用实例 1.模型确立 2.列因素&因子负荷 四、总结经验 一、模型介绍 列联表分析无法系统地评价变量间的联系&#xff0c;无法…

对数线性模型之一(逻辑回归), 广义线性模型学习总结

经典线性模型自变量的线性预测就是因变量的估计值。 广义线性模型:自变量的线性预测的函数是因变量的估计值。常见的广义线性模型有:probit模型、poisson模型、对数线性模型等等。对数线性模型里有:logistic regression、Maxinum entropy。本篇是对逻辑回归的学习总结,以及…

机器学习篇——对数线性模型

建议首先看cs229讲的广义线性模型、exponential family&#xff08;指数分布族&#xff09; 对数线性模型包括逻辑回归、最大熵模型和条件随机场等 1、模型 条件概率分布&#xff08;对数线性模型、概率模型&#xff09;、判别模型 逻辑回归&#xff1a; 概率分布可由广…

对数线性模型(Logistic回归算法)

1.Logistic分布&#xff1a; logistic分布定义&#xff1a;设X是连续随机变量&#xff0c;X服从logistic分布&#xff0c;即为X具有下列分布函数和密度函数&#xff1a; 其中&#xff0c;mu为位置参数&#xff0c;r>0为形状参数&#xff1b; logistic分布的分布函数F(x)的…

Log-Linear Models

一&#xff0c;简介 引入 对数线性模型被广泛应用于NLP中&#xff0c;对数线性模型的一个关键优点在于它的灵活性&#xff1a;它允许非常丰富的特征集合被用于模型中。常见的对数线性模型有Logistic回归、最大熵模型、MEMMs和CRFs等。 目的 1&#xff0c;Trigram LM Trigr…

Android getText(int resId)和getString(int resId)

Android提供多种获取资源文件方法&#xff0c;但是需要注意以下方法&#xff1a; CharSequence getText(int resId)&#xff1a;返回本地、样式化的字符。 String getString(int resId) &#xff1a;返回字符串 比如&#xff1a; String.xml文件中定义资源文件&#xff1a; <…

Resid

关于Resid服务器闪退问题&#xff0c;导致客户端&#xff1a;Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝无法连接解决方案。 前言&#xff1a;最近在整理计算机文档时发现过去学习过程中自己出现bug和解决办法&#xff0c;就整理一下发到个人博客…