【计算机操作系统】编程实现FCFS
2023-09-11 14:18:28 时间
一、实验目的及要求
了解进程调度的概念和方法,通过本实验以加深对进程调度的理解。
二、实验原理与内容(题目)
通过编写c语言程序,实现先来先服务的进程调度算法。
三、实验过程(实验代码)
(一)新建c文件,FCFS.c
(二)写一个PCB结构体,用于记录必要的进程信息
/**
* 进程的超简化PCB结构
**/
typedef struct FCFS{
char processName[20]; //进程名
struct FCFS *next; //下一进程
}PCB;
(三)写一个inputProcess函数,用于接收进程的输入
/**
* 输入进程
*
**/
void inputProcess(PCB *L){
PCB *follow = L; //
PCB *P;
char processName[15];
printf("Please input the process and input end to exit \n\n");
for(int i = 1;strcmp(processName,"end");i++){
//输入进程名称
printf("the No.%d processName: ",i);
scanf("%s",processName);
if (!strcmp(processName,"end")){
break;
}
P=(PCB*)malloc(sizeof(PCB));
strcpy(P->processName,processName);
//将进程连接到队列下一个
follow->next = P;
P->next = NULL;
follow = P;
}
}
(四)写一个outputProcess函数,用于输出FCFS算法调度下进程运行的序列。
/**
* 输出进程运行顺序
*
**/
void outputProcess(PCB *L){
PCB *p;
p= L->next;
printf("the process sequence: \n");
while (p)
{
printf("%-15s", p->processName);
p=p->next;
}
printf("\n");
}
(五)写一个main方法,调用函数实现FCFS算法
int main(int argc, char const *argv[]){
//初始化进程PCB队列
PCB *L = (PCB*)malloc(sizeof(PCB));
L->next = NULL;
//输入进程
inputProcess(L);
//如果队列非空,输出进程运行序列
if( L->next != NULL){
outputProcess(L);
}
return 0;
}
(六)运行程序,记录结果。
五、测试/调试及实验结果分析
此次实验的测试/调试结果完全符合预期,从截图可以看出进程的运行顺序是按照进程进入系统的顺序来的,这符合先来先服务调度算法的思想。
六、实验结论与体会
先来先服务调度算法是按照作业到达的先后顺序进行调度,或者说是考虑在系统中等待时间最长的进程。在这个实验程序这里,等待时间的定义并不是位于同一时间的,而是总的等待时间。先来先服务调度算法考虑的是当下等待时间最长的作业,而不管作业所需运行时间的长短。这种调度算法具有片面性。
在实现这个算法时,我切身体会到了先来先服务算法的特点,FCFS的特点是每次调度都是从就绪的进程对列选择一个最先进入该队列的进程。但这样的调度方式也会有明显的缺点,不考虑作业所需要执行时间的长短,就会导致进程处理的效率低下。
相关文章
- 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)
- 网络编程 -- RPC实现原理 -- NIO多线程 -- 迭代版本V1
- 《Arduino计算机视觉编程》一1.3 总结
- PHP 编程中 10 个最常见的错误,你犯过几个?
- 渗透小白如何学编程
- HTTP 笔记与总结(5)socket 编程:使用 HTTP 协议模拟登录并发帖
- Linux网络编程:基于UDP的程序开发回顾篇
- 《Java遗传算法编程》—— 2.3 关于本书的代码示例
- 《Python密码学编程》——2.8 使用在线比较工具检查输入的代码
- 《iOS编程指南》——导读
- 《CUDA C编程权威指南》——3.7 总结
- 【计算机考研408数据结构】历年统考编程大题—线性表
- 成佩涛编程之路(成佩涛黑客)
- 逆序三位数——第2周C编程练习
- 编程参考 - error number的使用
- 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---01
- msp430入门编程06