一个老师给的作业,进程调度 排序问题!给个建议

远方1609 2004-12-26 04:04:44
#include "stdio.h"
#define N 10
//#define M 10
typedef struct
{
int m;
//int flag;
int priority;//优先级顺序
float zhixing;
float zhouzhuan;
float dq_zhouzhuan;
}process;
//int flag=0;//标志已经执行个进程的个数
//float time=0;//当前共执行的时间
void main()
{
//int plag=0;
float time=0;
int n;
int i,j,temp;
process fcfs[N],*p[N],*q;
float time_zhouzhuan=0,wtime_zhouzhuan=0;
//输入
printf("请输入进程的个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
fcfs[i].m=i+1;
//fcfs[i].linshi=0;
//fcfs[i].flag=0;
printf("请输入进程%d所需的执行时间和进程的优先级:",fcfs[i].m);
scanf("%f %d",&fcfs[i].zhixing,&fcfs[i].priority);
}
printf("haha");
// for(i=0;i<n;i++)
// {
// p[i]=&fcfs[i];
// }
//按优先级别的排序
for(j=0;j<n-1;j++)
{
printf("ok");//有问题
temp=j;
for(i=j+1;i<n;i++)
{
printf("ky");
if(p[i]->priority>p[temp]->priority)
temp=i;
}
printf("QQ");
q=p[j];//交换
p[j]=p[temp];
p[temp]=q;
}
printf("he");
//优先级算法
for(i=0;i<n;i++)
{
time+=p[i]->zhixing;
p[i]->zhouzhuan=time;
p[i]->dq_zhouzhuan=p[i]->zhouzhuan/p[i]->zhixing;
}
for(i=0;i<n;i++)
{
time_zhouzhuan+=p[i]->zhouzhuan;
wtime_zhouzhuan+=p[i]->dq_zhouzhuan;
}
time_zhouzhuan/=n;
wtime_zhouzhuan/=n;
//输出结果
printf("静态优先级算法的进程的执行顺序为:\n");
for(i=0;i<n;i++)
{
printf("%d ",p[i]->m);
}
printf("\n平均周转时间为%f",time_zhouzhuan);
printf("\n带权平均周转时间为%f",wtime_zhouzhuan);
}
/*#include "stdio.h"
void main()
{
int i,j,temp,n,q;
int a[10];

printf("请输入进程个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入进程%d的优先级别",i+1);
scanf("%d",&a[i]);
}
//排序
for(j=0;j<n-1;j++)
{
temp=j;
for(i=j+1;i<n;i++)
{
if(a[i]>a[temp])
temp=i;
}
q=a[j];
a[j]=a[temp];
a[temp]=q;
}
for(i=0;i<n;i++)
{
printf("%d",a[i]);
}
}*/







...全文
135 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
quaiyan 2004-12-27
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "stdlib.h"
#define N 10
//#define M 10
typedef struct
{
int m;
//int flag;
int priority;//优先级顺序
float zhixing;
float zhouzhuan;
float dq_zhouzhuan;
}process;
//int flag=0;//标志已经执行个进程的个数
//float time=0;//当前共执行的时间
void main()
{
//int plag=0;
float time=0;
int n;
int i,j,temp;
process fcfs[N],*p[N],*q;
float time_zhouzhuan=0,wtime_zhouzhuan=0;
//输入
printf("请输入进程的个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
fcfs[i].m=i+1;
//fcfs[i].linshi=0;
//fcfs[i].flag=0;
printf("请输入进程%d所需的执行时间和进程的优先级:",fcfs[i].m);
scanf("%f %d",&fcfs[i].zhixing,&fcfs[i].priority);
}
printf("haha");

for(i=0;i<n;i++)
{
p[i]=(process*)malloc(sizeof(process));//分配空间
p[i]=&fcfs[i];
}
//按优先级别的排序
for(j=0;j<n-1;j++)
{
printf("ok");//有问题
temp=j;
for(i=j+1;i<n;i++)
{
printf("ky");
if(p[i]->priority>p[temp]->priority)
temp=i;
}
printf("QQ");
q=p[j];//交换
p[j]=p[temp];
p[temp]=q;
}
printf("he");
//优先级算法
for(i=0;i<n;i++)
{
time+=p[i]->zhixing;
p[i]->zhouzhuan=time;
p[i]->dq_zhouzhuan=p[i]->zhouzhuan/p[i]->zhixing;
}
for(i=0;i<n;i++)
{
time_zhouzhuan+=p[i]->zhouzhuan;
wtime_zhouzhuan+=p[i]->dq_zhouzhuan;
}
time_zhouzhuan/=n;
wtime_zhouzhuan/=n;
//输出结果
printf("静态优先级算法的进程的执行顺序为:\n");
for(i=0;i<n;i++)
{
printf("%d ",p[i]->m);
}
printf("\n平均周转时间为%f",time_zhouzhuan);
printf("\n带权平均周转时间为%f",wtime_zhouzhuan);
}
远方1609 2004-12-27
  • 打赏
  • 举报
回复
是老师的作业。感觉排序的方法不怎么好,哪位给个好的方法。给代码最好,谢谢!
zhengwei1984222 2004-12-27
  • 打赏
  • 举报
回复
要什么建议?
xuzheng318 2004-12-26
  • 打赏
  • 举报
回复
作业!
操作系统课程实验基于Java实现的操作系统进程调度器+内存管理源码(含实验报告) 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【备注】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 目录 一 实验概述 1 (一) 实验目的 1 (二) 实验内容及要求 1 二 需求分析 2 (一) 模块与功能划分 2 (二) 作业与进程 2 (三) 进程状态 3 三 总体设计 3 (一) 内存管理 3 (二) 调度过程 4 四 详细设计 5 (一) 内存分配模块 5 (二) 进程执行函数 7 (三) 短程调度函数 9 (四) 中程与长程调度函数 9 五 实验运行及结果 11 结束语 12 (一)实验目的 多道系统中,进程与进程之间存在同步与互斥关系。当就绪进程数大于处理机数时,需按照某种策略决定哪些进程先占用处理机。在可变分区管理方式下,采用首次适应算法实现主存空间的分配和回收。 本实验模拟实现处理机调度及内存分配及回收机制,以对处理机调度的工作原理以及内存管理的工作过程进行更深入的了解。 (二)实验内容及要求 1. 实验内容 (1)选择一个调度算法,实现处理机调度; (2)结合(1)实现主存储器空间的分配和回收。 2. 实验具体要求 (1)设计一个抢占式优先权调度算法实现多处理机调度的程序,并且实现在可变分区管理方式下,采用首次适应算法实现主存空间的分配和回收。 (2)PCB内容包括:进程名/PID;要求运行时间(单位时间);优先权;状态;进程属性:独立进程、同步进程(前趋、后继)。 (3)可以随机输入若干进程,可随时添加进程,并按优先权排序; (4)从就绪队首选进程运行:优先权-1;要求运行时间-1;要求运行时间为0时,撤销该进程;一个时间片结束后重新排序,进行下轮调度; (5)考虑两个处理机,考虑同步进程的处理机分配问题,每次调度后,显示各进程状态,运行进程要显示在哪个处理机上执行。 (6)规定道数,设置后备队列和挂起状态。若内存中进程少于规定道数,可自动从后备队列调度一作业进入。被挂起进程入挂起队列,设置解挂功能用于将制定挂起进程解挂入就绪队列。 (7)结合实验一PCB增加所需主存大小,主存起始位置;采用首次适应算法分配主存空间。 (8)自行假设主存空间大小,预设操作系统所占大小并构造未分配分区表。表目内容:起址、长度、状态(未分/空表目)。 (9)进程完成后,回收主存,并与相邻空闲分区合并。 (10)最好采用图形界面;

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧