操作系统—C语言进程调度模拟.c
来源:互联网 发布:linux系统ping命令参数 编辑:程序博客网 时间:2024/05/19 00:49
/*______________________________进程调度模拟程序设计说明:选择算法以后,进程由用户创建。______________________________*/#include<stdio.h>#include<stdlib.h>#define Left 75#define Right 77typedef struct node{int ID; //进程IDint PRIORITY; //进程优先数int CPUTIME; //进程占用CPU的时间int ALLTIME; //进程所需要时间char STATE; //进程当前状态 struct node *next;//指向下一个进程}PRO;int CHIP; //时间片数int NUM; //进程个数int A=0; // 0代表先来先服务算法 1时间片轮转调度算法PRO *p; //进程队列队头;void choose(){//选择 char ch;while(1){switch(A){case 0:printf("→[先来先服务算法] [时间轮算法] [优先级服务算法]");break;case 1:printf(" [先来先服务算法]→[时间轮算法] [优先级服务算法]");break;case 2:printf(" [先来先服务算法] [时间轮算法]→[优先级服务算法]");break;}ch=getch();if(ch==Left) A--;if(ch==Right) A++;if(A<0) A=2;if(A>2) A=0;if(ch=='\r') break;system("cls");}}int num(){//计算所有进程是否都调度完毕 返回为完成进程个数int i=NUM;PRO *t1;t1=p;while(t1!=NULL){ if(t1->ALLTIME==0)i--;t1=t1->next;} return i;}PRO *_sort(PRO *h){//链表排序子函数PRO *p,*max;max=h;p=h;while(p->next!=NULL){//找max的节点p=p->next;if(max->PRIORITY<p->PRIORITY)max=p;}p->next=h;//形成环形链表while(p->next!=max)//找出min节点前面的节点并让它指向NULLp=p->next;p->next=NULL;h=max;return h;}PRO *sort(PRO *h){//链表排序int i=4;PRO *p;if(h==NULL)return h;h=_sort(h);p=h;while(p->next!=NULL){p->next=_sort(p->next);p=p->next;}return h;}int show(){//显示当前状态 PRO *t1;t1=p;printf("ID PRIORITY CPUTIME ALLTIME STATE\n"); while(t1!=NULL){ printf("P%-3d%-10d%-9d%-7d %c\n",t1->ID,t1->PRIORITY,t1->CPUTIME,t1->ALLTIME,t1->STATE); t1=t1->next;} printf("-------------------------------------\n\n");}void queue(){//先来先服务算法 int t;PRO *t1=p; printf("先来先服务算法,初始状态到每一个时间片用完状态:\n"); show(); while(t1!=NULL){t=CHIP;while(t!=0&&t1!=NULL){t--;t1->ALLTIME--;t1->CPUTIME++;t1->STATE='E';if(t1->ALLTIME==0){//进程调度完毕t1->STATE='F';t1=t1->next;}}show(); }}void time(){//时间片轮转调度算法 int t,i;PRO *t1=p; printf("时间片轮转调度算法,初始状态到每一个时间片用完状态:\n"); show(); while(1){t=CHIP;while(t!=0&&t1!=NULL&&t1->ALLTIME!=0){ t--; t1->ALLTIME--; t1->CPUTIME++;t1->STATE='E';if(t1->ALLTIME==0){//进程调度完毕 t1->STATE='F';t=CHIP;//剩下时间段不要}}show();if(t1->STATE!='F')t1->STATE='R';if(t1!=NULL)t1=t1->next;if(t1==NULL)t1=p;i=num();if(i==0)//i等于0,表示所有进程运行完毕break; }}void priority(){//优先级算法 int t;PRO *t1;p=sort(p);t1=p;printf("优先级算法,初始状态到每一个时间片用完状态:\n"); show(); while(t1!=NULL){t=CHIP;while(t!=0&&t1!=NULL){t--;t1->ALLTIME--;t1->CPUTIME++;t1->STATE='E';if(t1->ALLTIME==0){//进程调度完毕t1->STATE='F';t1=t1->next;}}show(); }}create_process(){//创建进程PRO *t1,*t2;int i=1;system("cls"); printf("请输入时间片数:");scanf("%d",&CHIP); printf("请输入想创建进程个数(大于1):");scanf("%d",&NUM);p=(PRO *)malloc(sizeof(PRO));t1=p;t1->ID=i;t1->STATE='R';t1->CPUTIME=0;//开始创建时 占用cpu时间为0printf("请输入进程P%d的优先级:",i);scanf("%d",&t1->PRIORITY); printf("请输入进程P%d的需要运行时间:",i);scanf("%d",&t1->ALLTIME); while(i++<NUM){ t2=(PRO *)malloc(sizeof(PRO));t1->next=t2; t2->ID=i;t2->STATE='R'; t2->CPUTIME=0;//开始创建时 占用cpu时间为0 printf("请输入进程P%d的优先级:",i); scanf("%d",&t2->PRIORITY); printf("请输入进程P%d的需要运行时间:",i); scanf("%d",&t2->ALLTIME);t1=t2;}t1->next=NULL;}int main(){choose();//先选择算法create_process();//再创建进程system("cls");if(A==0)queue();if(A==1)time();if(A==2)priority();return 0;}
0 0
- 操作系统—C语言进程调度模拟.c
- 进程调度模拟(C语言)
- 用c语言模拟进程调度
- 【操作系统】C语言模拟操作系统实现磁盘调度算法——电梯调度算法
- C 模拟进程调度
- 【操作系统】C语言模拟操作系统优先数调度算法
- 操作系统用C语言模拟基于时间片进程调度程序
- 操作系统用C语言模拟进程基于优先级的调度程序
- 操作系统实验--C语言模拟进程管理
- 操作系统 单处理器进程调度模拟实验(c++)
- 操作系统进程调度管理实验【C语言】【源码】【windows版】
- 模拟进程调度管理[C#]
- C语言模拟最高优先数优先进程调度算法
- C语言 磁盘调度模拟
- 操作系统的进程管理(c语言模拟)
- 操作系统FCFS,SJF进程调度(C++)
- 进程调度---c模拟程序实现
- 操作系统进程调度模拟程序
- Android错误解决记录
- Recent Contest #1(Mar 18-Mar24, 2014)
- 设计模式六大原则(2):里氏替换原则
- WinCE MUI的实现
- SMTP命令与ESMTP命令简介(附带命令通信)
- 操作系统—C语言进程调度模拟.c
- 黑马程序员--------------交通灯管理系统
- 电脑内存常见问题处理方法
- 设计模式六大原则(3):依赖倒置原则
- Smart Host IP 列表
- 杂
- 设计模式六大原则(4):接口隔离原则
- cd命令
- 设计模式六大原则(5):迪米特法则