进程调度C语言实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
typedef struct ProcessNode{ // 进程结点的基本结构char name; // 进程名int service_time; // 服务时间
int arrive_time; // 到达时间
int priority; // 优先级
struct FCFS_time{ // 先到先服务
int finish_time; // 完成时间
int turnaround_time; // 周转时间
float weigtharound_time;// 带权周转时间
}FCFS_time;
struct SJF_time{ // 短作业优先
int finish_time;
int turnaround_time;
float weigtharound_time;
int flag;
}SJF_time;
struct RR_time{ // 时间片轮转的结点
int finish_time;
int turnaround_time;
float weigtharound_time;
int flag_time;// 赋值为进程的服务时间,为0 则进程完成}RR_time;
struct Pri_time{ // 优先权非抢占式
int finish_time;
int turnaround_time;
float weigtharound_time;
}Pri_time;
struct ProcessNode*next;
}ProcessNode,*Linklist;
void main()
{
int choice;
Linklist read_information();
Linklist FCFS_scheduling(Linklist head);
Linklist SJF_scheduling(Linklist head);
Linklist RR_scheduling(Linklist head);
Linklist Pri_scheduling(Linklist head);
head=read_information();// 读入进程的基本信息
do{
p=head->next;
printf("\n");
printf("\n");
printf(" 请在 1—5 之间选择 : ");
scanf("%d",&choice);
printf("\n");
printf("\n"); printf(" ********** 进程初始信息输出 ********** \n");
输出初始化后的进程基本信息 printf("\n");
printf(" 进程名称 ");
printf(" 到达时间 ");
printf(" 服务时间 ");
printf(" 优先级 ");
printf("\n");
while(p)
{
printf(" %c ",p->name);
printf(" %d ",p->arrive_time);
printf(" %d ",p->service_time); printf(" %d
",p->priority);
printf("\n");
p=p->next;
}
printf("\n");
printf(" ************************************ \n");//
输出进程的调用选择项 printf("\n");
printf("1 、FCFS---先- 到先服务
\n"); printf("2 、SJF 短作业优先
\n");
printf("3 、 RR ---- 时间片轮转 \n");
printf("4 、Pri ----- 优先权调度 \n");
printf("\n"); printf(" ************************************ \n");
{
case 1: FCFS_scheduling(head); break;
case 2: SJF_scheduling(head);
break;
case 3: RR_scheduling(head); break;
case 4: Pri_scheduling(head); break;
// case 5: exit();
}
}while(choice!=5);
Linklist read_information()// 进程读入函数{
int i;
int num;
// ProcessNode ; Linklist pro; Linklist p; Linklist head;
printf("\n");
printf(" ************ 进程调度算法************ \n");
printf("\n");
printf(" 请输入进程的个数:");
scanf("%d",&num);
printf("\n");
printf(" ************* 初始化信息************* \n");
printf("\n");
head=(Linklist)malloc(sizeof(ProcessNode));// 头结点head->next=NULL;
p=head;
for(i=1;i<=num;i++)
{
pro=(Linklist)malloc(sizeof(ProcessNode));// 创建进程结点
printf(" 输入第%d 个进程信息:\n",i);