好文档 - 专业文书写作范文服务资料分享网站

操作系统实验处理机调度C语言实现

天下 分享 时间: 加入收藏 我要投稿 点赞

#include #include #include #include #define N 20

#define MAX 100

typedef struct PCB //pcb进程控制块定义 {

int num[N]; //进程序号 char name[10]; //进程名 char state; //进程状态

int tijiaotime; //进程到达时间 int runtime; //进程开始时间 int finishtime; //进程结束时间 int needtime; //服务时间 int pro;//进程优先级

struct PCB *next; //链接指针指向下个作业的 }pcb;

struct PCB *head_input; struct PCB *head_run; struct PCB *head_run_pre;

unsigned long current; //记录系统当前时间的变量

int time=10000,n; //计时器

pcb *head=NULL,*p,*q;

void getInfo() //创建进程 {

int num;

printf(\请输入要建立的进程个数:\ scanf(\

for(num=0;num

p=(pcb *)malloc(sizeof(pcb)); if(head==NULL) {head=p;q=p;}

printf(\依次输入:\\n进程号进程名到达时间服务时间 \\n\

scanf(\ if(p->tijiaotime < time) time=p->tijiaotime; q->next=p; p->runtime=0; p->finishtime=0;

p->next=NULL; p->state='W'; q=p; } }

// *********************1.先来先服务调度算法*******************************

void run_fcfo(pcb *p1)//定义先来先到服务的算法 {

time = p1->tijiaotime > time? p1->tijiaotime:time; p1->runtime=time;

printf(\现在时间是%d,开始运行进程%s\\n\ time+=p1->needtime; p1->state='F';

p1->finishtime=time;

printf(\进程名开始时间所需时间结束时间\\n\

printf(\ %d %d \}

void fcfo()//定义运行进程函数 {

int i,j,t;

for(j=0;j

p=head; t=10000;

for(i=0;i

if(p->tijiaotimestate=='W') {

t=p->tijiaotime;

q=p; //标记当前未完成的进程 }

p=p->next; }

%d run_fcfo(q); } } // ************************2.优先级调度************************************

int readydata() { //建立就绪队列

if(head_input->next==NULL) {

return 0; }

struct PCB *p1=head_input->next,*pmax,*p2; int maxpro=0xffff; pmax=p1;

p2=head_input; while(p1!=NULL) {

if(p1->propro; head_run_pre=p2; pmax=p1; } p2=p1; p1=p1->next; }

head_run=pmax;

head_run_pre->next=head_run->next; return 1; }

void runprocess() //运行进程函数 {

head_run->runtime-=10; head_run->pro++; struct PCB *p1,*p2; printf(\时间片的大小 %d\ current+=10;

printf(\ %s 开始\\n\

服务算法

printf(\时间片的大小 %d\ printf(\ %s 结束\\n\ if(head_run->runtime<=0) {//判断进程是否运行结束 } else {

p1=head_input;

p2=head_input->next; p1->next=head_run; head_run->next=p2; } }

int readyprocess() {

while(1) {

if(readydata()==0) return 0; else runprocess(); } }

void Init() {

head_input=new PCB; head_input->next=NULL; current=0; int numpro;

printf(\请重新输入要建立的进程个数:\ scanf(\

printf(\请依次输入进程名运行时间优先级\\n\ for(int i=0;istate='C'; p1->next=NULL; struct PCB *p2=head_input->next; head_input->next=p1; p1->next=p2;

} }

// ************************3.时间片轮转调度服************************************ void shijianpian() { int b,i,X,t,k;

int a[MAX];//存放进程的剩余时间 int cnt[MAX];//存放进程调度次数 printf(\请输入进程数:\scanf(\

printf(\请输入时间片t大小:\scanf(\

printf(\请依次输入各个进程的服务时间\for(i=0;i

scanf(\cnt[i]=0; }

printf(\被调度进程\\t进程调度次数 \\t本次运行时间结果\\t剩余时间\\n\k=1; while(k) {

for(i=0;i

if(a[i]!=0) if(a[i]>=t) {

a[i]-=t; b+=t;

cnt[i]=cnt[i]+1;

printf(\ } else { b=b+a[i];

cnt[i]=cnt[i]+1; a[i]=0;

printf(\}

else continue; }

for(i=0;i

务算法

操作系统实验处理机调度C语言实现

#include#include#include#include#defineN20#defineMAX100typedefstructPCB//pcb进程控制块定义{intnum[N];//进程序号charnam
推荐度:
点击下载文档文档为doc格式
66m2k1ctxd8xzko02xoc4ddq3430jm00y7v
领取福利

微信扫码领取福利

微信扫码分享