操作系统 调度算法一:采用基于静态优先级的立即抢占式调度算法
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
struct pcb_list
{
int ID;
int Priority;
int In1;
int In2;
int Alltime;
struct pcb_list *next;
}; //PCB结构体
pcb_list *CreatePcb()
{
FILE *fp;
pcb_list *head,*s,*r;
if((fp=fopen( "jc.txt ", "r "))==NULL) //打开文件
{
cout < < "Can 't open this file! " < <endl;
exit(0);
}
s=(pcb_list*)malloc(sizeof(pcb_list)); //分配节点空间
head=r=NULL;
fscanf(fp, "%d%d%d%d%d ",&s-> ID,&s-> Priority,&s-> In1,&s-> In2,&s-> Alltime); //读文件
while(s-> ID!=3)
{
if(head==NULL)head=s;
else r-> next=s;
r=s;
s=(pcb_list*)malloc(sizeof(pcb_list));
fscanf(fp, "%d%d%d%d%d ",&s-> ID,&s-> Priority,&s-> In1,&s-> In2,&s-> Alltime);
}
r-> next=s;r=s;
if(r!=NULL)
r-> next=NULL;
fclose(fp);
return head; //返回头指针
}
void Scheduling(struct pcb_list *head) //基于静态优先级的立即抢占式调度
{ pcb_list *p,*q,*r;
p=head; q=p-> next;r=q-> next;//头节点
if(p-> Priority <q-> Priority) //第一个进程的优先级小于第二个进程的优先级
{ int time1=(q-> In1*60+q-> In2)-(p-> In1*60+p-> In2);
cout < <p-> In1 < < ": " < <p-> In2 < < "~ " < <q-> In1 < < ": " < <q-> In2 < < '0 ' < < " " < <time1 < < " " < <p-> ID < <endl;
if(q-> Priority <r-> Priority) //第二个进程的优先级小于第三个进程的优先级
{ int time2=(r-> In1*60+r-> In2)-(q-> In1*60+q-> In2);
int t1=(r-> In1*60+r-> In2+r-> Alltime)/60;
int t2=(r-> In1*60+r-> In2+r-> Alltime)%60;
cout < <q-> In1 < < ": " < <q-> In2 < < '0 ' < < "~ " < <r-> In1 < < ": " < <r-> In2 < < " " < <time2 < < " " < <q-> ID < <endl;
cout < <r-> In1 < < ": " < <r-> In2 < < "~ " < <t1 < < ": " < <t2 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
int t5=q-> Alltime-time2;
int t3=(t1*60+t2+t5)/60;
int t4=(t1*60+t2+t5)%60;
cout < <t1 < < ": " < <t2 < < "~ " < <t3 < < ": " < <t4 < < " " < <t5 < < " " < <q-> ID < <endl;
int t6=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int t7=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
cout < <t3 < < ": " < <t4 < < "~ " < <t6 < < ": " < <t7 < < " " < <p-> Alltime-time1 < < " " < <p-> ID < <endl;
}//if
else
{ //第二个进程的优先级大于第三个进程的优先级
int q1=(q-> In1*60+q-> In2+q-> Alltime)/60;
int q2=(q-> In1*60+q-> In2+q-> Alltime)%60;
//打印第二个进程的完整信息
cout < <q-> In1 < < ": " < <q-> In2 < < '0 ' < < "~ " < <q1 < < ": " < <q2 < < " " < <q-> Alltime < < " " < <q-> ID < <endl;
if(p-> Priority> r-> Priority)
{ //第一个进程的优先级大于第三个进程的优先级
int m1=(q1*60+q2+p-> Alltime-time1)/60;
int m2=(q1*60+q2+p-> Alltime-time1)%60;
cout < <q1 < < ": " < <q2 < < "~ " < <m1 < < ": " < <m2 < < " " < <p-> Alltime-time1 < < " " < <p-> ID < <endl;
int m3=(m1*60+m2+r-> Alltime)/60;
int m4=(m1*60+m2+r-> Alltime)%60;
cout < <m1 < < ": " < <m2 < < "~ " < <m3 < < ": " < <m4 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
}
else
{ //第一个进程的优先级小于第三个进程的优先级
int q3=(q1*60+q2+r-> Alltime)/60;
int q4=(q1*60+q2+r-> Alltime)%60;
cout < <q1 < < ": " < <q2 < < "~ " < <q3 < < ": " < <q4 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
int t6=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int t7=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
cout < <q3 < < ": " < <q4 < < "~ " < <t6 < < ": " < <t7 < < " " < <p-> Alltime-time1 < < " " < <p-> ID < <endl;
}
}//else
}//if
else if(p-> Priority <r-> Priority) //第一个进程的优先级大于第二个进程的优先级
{ // 且第一个进程的优先级小于第三个进程的优先级
int time3=r-> In1*60+r-> In2-p-> In1*60-p-> In2;//69
cout < <p-> In1 < < ": " < <p-> In2 < < "~ " < <r-> In1 < < ": " < <r-> In2 < < " " < <time3 < < " " < <p-> ID < <endl;
int a1=(r-> In1*60+r-> In2+r-> Alltime)/60;
int a2=(r-> In1*60+r-> In2+r-> Alltime)%60;
cout < <r-> In1 < < ": " < <r-> In2 < < "~ " < <a1 < < ": " < <a2 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
int a3=(a1*60+a2+p-> Alltime-time3)/60;
int a4=(a1*60+a2+p-> Alltime-time3)%60;
cout < <a1 < < ": " < <a2 < < "~ " < <a3 < < ": " < <a4 < < " " < <p-> Alltime-time3 < < " " < <p-> ID < <endl;
int a5=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int a6=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
cout < <a3 < < ": " < <a4 < < "~ " < <a5 < < ": " < <a6 < < " " < <q-> Alltime < < " " < <q-> ID < <endl;
}
else
{ //第一个进程的优先级最大
int p1=(p-> In1*60+p-> In2+p-> Alltime)/60;
int p2=(p-> In1*60+p-> In2+p-> Alltime)%60;
//打印第一个进程的完整信息
cout < <p-> In1 < < ": " < <p-> In2 < < "~ " < <p1 < < ": " < <p2 < < " " < <p-> Alltime < < " " < <p-> ID < <endl;
if(q-> Priority> r-> Priority) //第二个进程的优先级大于第三个进程的优先级
{
//打印第二个进程的完整信息
int r1=(p1*60+p2+q-> Alltime)/60;
int r2=(p1*60+p2+q-> Alltime)%60;
cout < <p1 < < ": " < <p2 < < "~ " < <r1 < < ": " < <r2 < < " " < <q-> Alltime < < " " < <q-> ID < <endl;
//打印第三个进程的完整信息
int r3=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int r4=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
cout < <r1 < < ": " < <r2 < < "~ " < <r3 < < ": " < <r4 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
}
else
{ //第二个进程的优先级小于第三个进程的优先级
int p3=(p1*60+p2+r-> Alltime)/60;
int p4=(p1*60+p2+r-> Alltime)%60;
//打印第三个进程的完整信息
cout < <p1 < < ": " < <p2 < < "~ " < <p3 < < ": " < <p4 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
int p5=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int p6=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
//打印第二个进程的完整信息
cout < <p3 < < ": " < <p4 < < "~ " < <p5 < < ": " < <p6 < < " " < <q-> Alltime < < " " < <q-> ID < <endl;
}
}
}//Scheduling
void main()
{pcb_list *h;
h=CreatePcb();
Scheduling(h);
}
#include <stdio.h>
#include <stdlib.h>
struct pcb_list
{
int ID;
int Priority;
int In1;
int In2;
int Alltime;
struct pcb_list *next;
}; //PCB结构体
pcb_list *CreatePcb()
{
FILE *fp;
pcb_list *head,*s,*r;
if((fp=fopen( "jc.txt ", "r "))==NULL) //打开文件
{
cout < < "Can 't open this file! " < <endl;
exit(0);
}
s=(pcb_list*)malloc(sizeof(pcb_list)); //分配节点空间
head=r=NULL;
fscanf(fp, "%d%d%d%d%d ",&s-> ID,&s-> Priority,&s-> In1,&s-> In2,&s-> Alltime); //读文件
while(s-> ID!=3)
{
if(head==NULL)head=s;
else r-> next=s;
r=s;
s=(pcb_list*)malloc(sizeof(pcb_list));
fscanf(fp, "%d%d%d%d%d ",&s-> ID,&s-> Priority,&s-> In1,&s-> In2,&s-> Alltime);
}
r-> next=s;r=s;
if(r!=NULL)
r-> next=NULL;
fclose(fp);
return head; //返回头指针
}
void Scheduling(struct pcb_list *head) //基于静态优先级的立即抢占式调度
{ pcb_list *p,*q,*r;
p=head; q=p-> next;r=q-> next;//头节点
if(p-> Priority <q-> Priority) //第一个进程的优先级小于第二个进程的优先级
{ int time1=(q-> In1*60+q-> In2)-(p-> In1*60+p-> In2);
cout < <p-> In1 < < ": " < <p-> In2 < < "~ " < <q-> In1 < < ": " < <q-> In2 < < '0 ' < < " " < <time1 < < " " < <p-> ID < <endl;
if(q-> Priority <r-> Priority) //第二个进程的优先级小于第三个进程的优先级
{ int time2=(r-> In1*60+r-> In2)-(q-> In1*60+q-> In2);
int t1=(r-> In1*60+r-> In2+r-> Alltime)/60;
int t2=(r-> In1*60+r-> In2+r-> Alltime)%60;
cout < <q-> In1 < < ": " < <q-> In2 < < '0 ' < < "~ " < <r-> In1 < < ": " < <r-> In2 < < " " < <time2 < < " " < <q-> ID < <endl;
cout < <r-> In1 < < ": " < <r-> In2 < < "~ " < <t1 < < ": " < <t2 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
int t5=q-> Alltime-time2;
int t3=(t1*60+t2+t5)/60;
int t4=(t1*60+t2+t5)%60;
cout < <t1 < < ": " < <t2 < < "~ " < <t3 < < ": " < <t4 < < " " < <t5 < < " " < <q-> ID < <endl;
int t6=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int t7=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
cout < <t3 < < ": " < <t4 < < "~ " < <t6 < < ": " < <t7 < < " " < <p-> Alltime-time1 < < " " < <p-> ID < <endl;
}//if
else
{ //第二个进程的优先级大于第三个进程的优先级
int q1=(q-> In1*60+q-> In2+q-> Alltime)/60;
int q2=(q-> In1*60+q-> In2+q-> Alltime)%60;
//打印第二个进程的完整信息
cout < <q-> In1 < < ": " < <q-> In2 < < '0 ' < < "~ " < <q1 < < ": " < <q2 < < " " < <q-> Alltime < < " " < <q-> ID < <endl;
if(p-> Priority> r-> Priority)
{ //第一个进程的优先级大于第三个进程的优先级
int m1=(q1*60+q2+p-> Alltime-time1)/60;
int m2=(q1*60+q2+p-> Alltime-time1)%60;
cout < <q1 < < ": " < <q2 < < "~ " < <m1 < < ": " < <m2 < < " " < <p-> Alltime-time1 < < " " < <p-> ID < <endl;
int m3=(m1*60+m2+r-> Alltime)/60;
int m4=(m1*60+m2+r-> Alltime)%60;
cout < <m1 < < ": " < <m2 < < "~ " < <m3 < < ": " < <m4 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
}
else
{ //第一个进程的优先级小于第三个进程的优先级
int q3=(q1*60+q2+r-> Alltime)/60;
int q4=(q1*60+q2+r-> Alltime)%60;
cout < <q1 < < ": " < <q2 < < "~ " < <q3 < < ": " < <q4 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
int t6=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int t7=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
cout < <q3 < < ": " < <q4 < < "~ " < <t6 < < ": " < <t7 < < " " < <p-> Alltime-time1 < < " " < <p-> ID < <endl;
}
}//else
}//if
else if(p-> Priority <r-> Priority) //第一个进程的优先级大于第二个进程的优先级
{ // 且第一个进程的优先级小于第三个进程的优先级
int time3=r-> In1*60+r-> In2-p-> In1*60-p-> In2;//69
cout < <p-> In1 < < ": " < <p-> In2 < < "~ " < <r-> In1 < < ": " < <r-> In2 < < " " < <time3 < < " " < <p-> ID < <endl;
int a1=(r-> In1*60+r-> In2+r-> Alltime)/60;
int a2=(r-> In1*60+r-> In2+r-> Alltime)%60;
cout < <r-> In1 < < ": " < <r-> In2 < < "~ " < <a1 < < ": " < <a2 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
int a3=(a1*60+a2+p-> Alltime-time3)/60;
int a4=(a1*60+a2+p-> Alltime-time3)%60;
cout < <a1 < < ": " < <a2 < < "~ " < <a3 < < ": " < <a4 < < " " < <p-> Alltime-time3 < < " " < <p-> ID < <endl;
int a5=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int a6=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
cout < <a3 < < ": " < <a4 < < "~ " < <a5 < < ": " < <a6 < < " " < <q-> Alltime < < " " < <q-> ID < <endl;
}
else
{ //第一个进程的优先级最大
int p1=(p-> In1*60+p-> In2+p-> Alltime)/60;
int p2=(p-> In1*60+p-> In2+p-> Alltime)%60;
//打印第一个进程的完整信息
cout < <p-> In1 < < ": " < <p-> In2 < < "~ " < <p1 < < ": " < <p2 < < " " < <p-> Alltime < < " " < <p-> ID < <endl;
if(q-> Priority> r-> Priority) //第二个进程的优先级大于第三个进程的优先级
{
//打印第二个进程的完整信息
int r1=(p1*60+p2+q-> Alltime)/60;
int r2=(p1*60+p2+q-> Alltime)%60;
cout < <p1 < < ": " < <p2 < < "~ " < <r1 < < ": " < <r2 < < " " < <q-> Alltime < < " " < <q-> ID < <endl;
//打印第三个进程的完整信息
int r3=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int r4=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
cout < <r1 < < ": " < <r2 < < "~ " < <r3 < < ": " < <r4 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
}
else
{ //第二个进程的优先级小于第三个进程的优先级
int p3=(p1*60+p2+r-> Alltime)/60;
int p4=(p1*60+p2+r-> Alltime)%60;
//打印第三个进程的完整信息
cout < <p1 < < ": " < <p2 < < "~ " < <p3 < < ": " < <p4 < < " " < <r-> Alltime < < " " < <r-> ID < <endl;
int p5=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)/60;
int p6=(p-> In1*60+p-> In2+p-> Alltime+q-> Alltime+r-> Alltime)%60;
//打印第二个进程的完整信息
cout < <p3 < < ": " < <p4 < < "~ " < <p5 < < ": " < <p6 < < " " < <q-> Alltime < < " " < <q-> ID < <endl;
}
}
}//Scheduling
void main()
{pcb_list *h;
h=CreatePcb();
Scheduling(h);
}