先来先服务FCFS算法:进程先进入的先服务。
短作业优先SJF算法:根据当前到来的进程,筛选当前所有进程中所需运行时间最短的进程。
时间片轮转算法:根据时间片的大小,切换进程,直到每个进程都运行完成。
计算出每个进程的开始时间,结束时间,周转时间T=开始时间-到达时间,带权周转时间W = T/运行时间,平均周转时间,平均带权周转时间。

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct P
{char name;//进程名字int come;//进程到达时间int need;//进程所需运行时间int start;//进程开始运行时间int finish;//进程运行结束时间int flag;struct P *next;
} P;
P p[5];
int n = 5;
char str[100] = {0};
//先来先服务
void FCFS()
{int start[n];//开始时间int success[n];//完成时间int t[n];float w[n];float tsum =0,wsum = 0;start[0] = p[0].come;success[0]=p[0].need+p[0].come;for(int i = 1; i<n; i++){success[i] = success[i-1]+p[i].need;start[i] = success[i-1];}printf("FCFS算法:\n");for(int i=0; i<n; i++){t[i] = success[i]-p[i].come;tsum = t[i] + tsum;w[i] = (float)t[i]/p[i].need;wsum = wsum+w[i];printf("%c开始时间:%d  周转时间T:  %d  带权周转时间W:  %.2lf\n",p[i].name,start[i],t[i],w[i]);}printf("\n平均周转时间:%.2lf\n",(float)tsum/n);printf("\n平均带权周转时间:%.2lf\n",wsum/n);
}
void sort(int s,int k)//开始,结束
{P temp;for(int i = s; i<k-1; i++){for(int j = i+1; j<k; j++){if(p[i].need>p[j].need){temp = p[i];p[i]= p[j];p[j] = temp;}}}
}
//短作业优先
void SJF()
{int start[n];//开始时间int success[n];int t[n];float w[n];int j;float tsum = 0,wsum = 0;/*for(int i = 0;i<n;i++)//初始化未激活状态0{p[i].flag = 0;}*/start[0] = p[0].come;success[0]=p[0].need+p[0].come;for(int i = 1; i<n; i++){for(j = i; j<n; j++){if(p[j].come>success[i-1]){j=j+1;break;}}sort(i,j);//到达时间早于当前进程结束时间的激活,进行排序,取运行时间最小的进程success[i] = success[i-1]+p[i].need;start[i] = success[i-1];}/*for(j = 1;p[j].come<=success[0]&&j<n;j++){}sort(1,j);success[1] = success[0]+p[1].need;*//*for(int i = 1;i<n;i++){success[i] = success[i-1]+p[i].need;start[i] = success[i-1];}*/printf("SJF算法:\n");for(int i=0; i<n; i++){t[i] = success[i]-p[i].come;tsum = t[i] + tsum;w[i] = (float)t[i]/p[i].need;wsum = wsum+w[i];printf("%c 开始时间:%d  周转时间T:  %d  带权周转时间W:  %.2lf\n",p[i].name,start[i],t[i],w[i]);}printf("\n平均周转时间:%.2lf\n",(float)tsum/n);printf("\n平均带权周转时间:%.2lf\n",wsum/n);
}
void TT()
{int time = 0;int count[n];int q;int a = 1;//循环标志int c = 0;//记录数组长度int sum = 0;//数组总长int t[n];float w[n];float tsum = 0,wsum = 0;printf("请输入时间片\n");scanf(" %d",&q);for(int i = 0; i<n; i++){p[i].flag = 1;count[i] = p[i].need;sum = sum + p[i].need;}while(a){for(int i = 0; i<n; i++){if(p[i].flag==1){if(count[i]-q>0)//未完成{for(int j = 0;j<q;j++){//printf("%c ",p[i].name);c++;str[c] = p[i].name;}count[i] = count[i]-q;}else if(count[i]-q == 0)//完成{for(int j = 0;j<q;j++){//printf("%c ",p[i].name);c++;str[c] = p[i].name;}count[i] = count[i]-q;p[i].flag = 0;}else if(count[i]-q < 0)//完成{for(int j = 0;j<count[i];j++){//printf("%c ",p[i].name);c++;str[c] = p[i].name;}count[i] = 0;p[i].flag = 0;}}}if(c==sum)a = 0;}for(int i = 1;i<=c;i++){printf("%c ",str[i]);}for(int i = c ;i>=1;i--)//查找完成时间{if(str[i]=='a'){p[0].finish = i;break;}}for(int i = c ;i>=1;i--)//查找完成时间{if(str[i]=='b'){p[1].finish = i;break;}}for(int i = c ;i>=1;i--)//查找完成时间{if(str[i]=='c'){p[2].finish = i;break;}}for(int i = c ;i>=1;i--)//查找完成时间{if(str[i]=='d'){p[3].finish = i;break;}}for(int i = c ;i>=1;i--)//查找完成时间{if(str[i]=='e'){p[4].finish = i;break;}}printf("时间片轮转算法:\n");//完成时间printf("完成时间\n");for(int i = 0;i<n;i++){printf("%d ",p[i].finish);}printf("\n");for(int i=0; i<n; i++){t[i] = p[i].finish-p[i].come;tsum = t[i] + tsum;w[i] = (float)t[i]/p[i].need;wsum = wsum+w[i];printf("%c 周转时间T:  %d  带权周转时间W:  %.2lf\n",p[i].name,t[i],w[i]);}printf("\n平均周转时间:%.2lf\n",(float)tsum/n);printf("\n平均带权周转时间:%.2lf\n",wsum/n);
}
void sortQuan(int *quan)//开始,结束
{P temp;for(int i = 1; i<n-1; i++){for(int j = i+1; j<n; j++){if(quan[j]>quan[i]){temp = p[i];p[i]= p[j];p[j] = temp;}}}
}
void SN()
{int success[n];int t[n];float w[n];int j;int quan[n];float tsum = 0,wsum = 0;success[0]=p[0].need+p[0].come;printf("请输入各权值\n");for(int i=0;i<n;i++){scanf(" %d",&quan[i]);}sortQuan(quan);for(int i = 1; i<n; i++){success[i] = success[i-1]+p[i].need;}printf("静态非抢占算法:\n");for(int i=0; i<n; i++){t[i] = success[i]-p[i].come;tsum = t[i] + tsum;w[i] = (float)t[i]/p[i].need;wsum = wsum+w[i];printf("%c 周转时间T:  %d  带权周转时间W:  %.2lf\n",p[i].name,t[i],w[i]);}printf("\n平均周转时间:%.2lf\n",(float)tsum/n);printf("\n平均带权周转时间:%.2lf\n",wsum/n);
}
int main()
{int r,f = 1;printf("请输入5个进程的名字、到达时间 和 服务时间\n");for(int i = 0; i<n; i++){scanf(" %c %d %d",&p[i].name,&p[i].come,&p[i].need);}printf("**************\n\n");printf("1.FCFS\n");printf("2.短作业优先SJF\n");printf("3.时间片轮转\n");printf("4.静态非抢占\n");printf("5.退出\n");printf("**************\n\n");while(f){scanf(" %d",&r);switch(r){case 1:FCFS();break;case 2:SJF();break;case 3:TT();break;case 4:SN();break;case 5:f = 0;}}return 0;
}

运行截图




操作系统——进程调度 C语言版相关推荐

  1. 红旗linux9支持软件,红旗linux系统下载|红旗Linux操作系统9.0正式版下载(c语言编写) 最新版_数码资源网...

    今天带来的红旗Linux操作系统9.0正式版相信是很多从事编程行业人员非常了解的,红旗Linux系统下载是非常专业的c语言编写软件,同时红旗Linux操作系统9.0正式版还拥有开关机加速.Firstc ...

  2. linux操作系统下 c语言编程入门

    linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...

  3. linux操作系统下c语言编程入门

    linux操作系统下c语言编程入门  整理编写:007xiong  原文:Hoyt等 (一)目录介绍 1)Linux程序设计入门--基础知识  2)Linux程序设计入门--进程介绍  3)Linux ...

  4. 【转贴】linux操作系统下c语言编程入门

    [转贴]linux操作系统下c语言编程入门 发信人: Lerry (驴是的念来过倒·杏红等头墙上爬), 信区: Linux 标 题: linux操作系统下c语言编程入门 发信站: 哈工大紫丁香 (Fr ...

  5. c语言分隔符分离出str字符串中的数字,C语言版Tokenize()函数,由分隔符获取字符串...

    测试环境: 操作系统: Windows10 64位 运行环境: Visual Studio 10 函数: /********************************************** ...

  6. XYplorer 21.50.0100多语言版,资源管理器件之一

    XYplorer 21.50.0100多语言版,资源管理器件之一 小型但功能强大的XYplorer 软件是可以完全替代Windows资源管理器的软件之一,尽管它具有多种语言功能,拖放并执行各种图形文件 ...

  7. OpenGL + Win32 SDK 开发框架的搭建(C语言版)

    项目介绍: 近来公司需要建立一个OpenGL的开发环境,我需要设计一个框架,以便不熟悉Win32 API的用户能够直接"书写 glXXX代码". 卖点: 1. 只使用C语言. 2. ...

  8. c语言调用pdf文档,使用PDFLib生成PDF文档方法介绍(C语言版)

    本文简单介绍了PDFLib生成PDF文档(C语言版)的基本使用方法. 1.基本环境 ① 打开.关闭.文档信息设定: 新建PDFLib对象,PDF_new() 设定错误处理的方式,PDF_set_par ...

  9. Windows 11 消费者版 (含家庭版/专业版/专业工作站/家庭单语言版) 分享下载

    Windows 11 消费者版 (含家庭版/专业版/专业工作站/家庭单语言版) Window10已经出来很久了,那么下一代操作系统什么时候出呢?今天给大家分享一下网上泄露的Window11版本.感受一 ...

最新文章

  1. HDU4081(次小生成树)
  2. Bugku-CTF之flag在index里
  3. 是什么牌子_电暖气片什么牌子好
  4. 常用排序算法之——堆排序
  5. 2020-11-12(内容提供者,内容解析者,内容观察者)
  6. javaScript ie8 不支持 new Date(2017-07);只支持new Date(2017/07/01)
  7. java jdbc rowset_JDBC RowSet的使用
  8. Qt4_实现File菜单
  9. java中将数字颠倒的工具类,java开发中常用的数字工具类
  10. apicloud - addEventListener 接收不到 sendEvent 的解决方法
  11. java class 内容查看_015-JVM-使用javap查看class文件内容
  12. ios开发自定义Cell分割线(分隔线)选中(点击时)时消失
  13. Gram matrix(格拉姆矩阵)
  14. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_6_File类判断功能的方法...
  15. [渝粤教育] 四川大学 土木工程概论 参考 资料
  16. 【清华大学】深入理解操作系统(陈渝) 第二章
  17. 2022年四川二级建造师建设工程法规及相关知识《解决建设工程纠纷法律制度》练习及答案
  18. 网络编程学习(11)/ FTP项目(5) ——文件上传和上传断点续存功能
  19. 千兆上网行为管理路由评测
  20. 武汉大学计算机学院保研清华,保研到清华、北大的外校学生,武大最多、山大次之...

热门文章

  1. xunsearch mysql,centos 配置xunsearch 操作步骤
  2. Redis——基于尚硅谷Redis课程
  3. IBM公布了2项合作 Watson将塑造这样的未来医疗?
  4. 多线程 三种创建方式及区别
  5. Win10 WLAN驱动正常但仍然不显示无线网络解决办法
  6. vue cli配置代理解决跨域问题
  7. 一个木函v7.0.4 多功能工具箱
  8. CobaltStrike-4.4-K8修改版安装使用教程
  9. dibea地贝扫地机器人怎么样_地贝扫地机器人好不好 地贝扫地机器人有哪些特点【详解】...
  10. App怎么上架到苹果商店(app store)?上架app的流程。