先来先服务调度进程算法FIFO
2010-06-08 15:28
316 查看
前些日子上了几个月的操作系统实验课,写了一堆代码没事贴出来与大家分享一下!
下面是先来先服务调度进程算法FIFO的代码实现:
实现效果:
呵呵,其实只是模拟实现一下,没有真正的使用进程那些!
由于小弟的水平有限,代码仅供参考,Bug多多,欢迎拍砖!
呵呵!
下面是先来先服务调度进程算法FIFO的代码实现:
/* FIFODemo.cpp Author:XXX */ #include <stdio.h> #include <conio.h> #define N 20 //进程控制块结构 typedef struct pcb { char pName ; //进程名 int pArriveTime; //到达时间 int pRunTime; //估计运行时间 char pState; //进程状态 struct pcb* pNext; //链接指针 }PCB; //链表头 PCB head_input; //自定义系统时间 int sysTime; //进程总数 int num=0; //定义建立进程函数 void CreateProcessList() { PCB* pcs1; PCB* pcs2; //输入进程个数 printf("请输入进程个数:/n"); scanf("%d",&num); getchar(); pcs1=&head_input; pcs2=pcs1; //依次接受进程的信息 for (int i=0;i<num;i++) { pcs1->pNext=new PCB; pcs2=pcs1; pcs1=pcs1->pNext; printf("输入进程号为 No.%3d 的进程名 pName:",i+1); scanf("%s",pcs1->pName); getchar(); printf("进程运行时间 pRunTime:"); scanf("%d",&pcs1->pRunTime); getchar(); printf("进程到达时间 pArriveTime:"); scanf("%d",&pcs1->pArriveTime); getchar(); //建立进程队列 pcs1->pRunTime=(pcs1->pRunTime)*1000; pcs1->pArriveTime=(pcs1->pArriveTime)*1000; //设置进程状态为就绪 pcs1->pState='R'; } //最后一个为空节点 pcs1->pNext=NULL; printf("/n"); } //,由于进程是有序的到达的,所以依次顺序执行输出操作 void ExecProcessList() { PCB* pcs1; PCB* pcs2; //每个进程调度时间 int timeUsed=0; //没有进城执行的空闲时间 int freeTime=0; //总的调度时间 int totalTimeUsed=0; pcs1=head_input.pNext; while(pcs1!=NULL) { //pcs1指向对头的下一个进程 pcs1=head_input.pNext; //此时没有进程在进程队列里面等待 if (pcs1->pArriveTime/1000>sysTime) { freeTime=pcs1->pArriveTime/1000-sysTime; for (int i=0;i<freeTime;i++) { //每输出一次,系统时间增加一秒 printf("系统时间 sysTime:%3d./n",sysTime); sysTime++; printf("进程队列里没有等待进程./n/n"); } } //此时已经有进程到达 else if (pcs1->pArriveTime/1000<=sysTime) { //输出每次运行的统计信息 for (int j=0;j<(pcs1->pRunTime)/1000;j++) { //输出系统时间作为参照 printf("系统时间 sysTime:%3d./n",sysTime); if (0==j) { //到达进程开始执行 printf("进程 %s 开始运行./n/n",pcs1->pName); } printf("进程 %s 正在运行./n",pcs1->pName); printf("已经运行时间:%3d./n",j+1); printf("剩余时间:%3d./n",(pcs1->pRunTime/1000)-(j+1)); //判断此时还有哪些进程在队列里面 pcs2=pcs1->pNext; while (pcs2!=NULL) { //此时有进程在等待的话,说明有进程在队列里面 if (pcs2->pArriveTime/1000<=sysTime) { printf("进程 %s 在进程队列里等待运行./n",pcs2->pName); } pcs2=pcs2->pNext; } sysTime++; printf("/n"); } //单个进程的调度时间 timeUsed=sysTime-pcs1->pArriveTime/1000; //将进城状态设置为执行完的状态 pcs1->pState='C'; printf("进程 %s 终止运行./n",pcs1->pName); printf("进程调度时间 timeUsed:%3d./n/n",timeUsed); //进程调度的总时间 totalTimeUsed=totalTimeUsed+timeUsed; timeUsed=0; //将pcs1指向下一个元素 pcs2=pcs1; pcs1=pcs1->pNext; head_input.pNext=pcs1; //将此进程从进程队列里面删除 delete pcs2; } } //输出各任务的周转时间以及平均周转时间 printf("所有进程总的调度时间 totalTimeUsed:%3d./n",totalTimeUsed); printf("所有进程平均调度时间 timeUsed:%lf./n",(double)totalTimeUsed/(double)num); } //定义主函数 void main() { //设置系统当前时间为0 sysTime=0; //创建进程链表 CreateProcessList(); //依次执行进程 ExecProcessList(); }
实现效果:
呵呵,其实只是模拟实现一下,没有真正的使用进程那些!
由于小弟的水平有限,代码仅供参考,Bug多多,欢迎拍砖!
呵呵!
相关文章推荐
- linux进程调度算法:分时调度策略、FIFO调度策略、RR调度策略
- Java模拟操作系统进程调度算法—先来先服务、短作业优先、高响比优先
- Java模拟操作系统进程调度算法—先来先服务、短作业优先、高响比优先
- 操作系统进程调度算法 先到先服务 短作业 优先级 时间片轮转
- 先来先服务FCFS和短作业优先SJF进程调度算法
- 进程调度算法之“先来先服务”、“短任务优先”和“时间片轮选”
- 操作系统进程调度算法 先到先服务 短作业 优先级 时间片轮转
- 《操作系统》 先来先服务FCFS和短作业优先SJF进程调度算法相关计算及实验
- 操作系统进程调度算法(Java 实现)
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- 常见的进程调度算法
- 进程调度算法简介
- 进程调度算法Linux进程调度算法
- 进程调度算法
- 进程调度的典型算法
- 进程调度的典型算法
- 进程调度的典型算法
- 进程调度算法与task_struct结构体
- 进程的调度算法
- 【Linux】 进程调度算法