操作系统实验报告(6)

2019-08-01 23:24

山东科技大学学生课程设计

struct process* list();//

void insert(struct process *head,struct process *p);// void delete(struct process *q);

int getcount(struct process *head,int time); struct process* end(struct process *head); void move(struct process *headf,struct process *headt,int n);

//void runrr(struct process *head);

struct process* list()//按到达时间排成一个队列 {

struct process *head=(struct

process*)malloc(sizeof(struct process)); head->next=NULL; struct process *p; int i;

totaltime=0;

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

printf(\请输入进程的个数:\ scanf(\ for(i=0; i

p=(struct pro*)malloc(sizeof(struct process)); printf(\ printf(\进程编号:\ scanf(\ printf(\进程名:\ scanf(\ printf(\到达时间:\

- 23 -

山东科技大学学生课程设计

scanf(\ printf(\运行时间:\ scanf(\

totaltime=totaltime+p->runtime; p->rrtime =

1;////////////////////////////////// p->next=NULL; insert(head,p); }

return head; }

void insert(struct process *head,struct process *p)//插入节点 {

struct process *t=search(head,p->arrivetime); p->next=t->next; t->next=p; }

struct process* search(struct process *head,int atime)//查找第一个到达时间小于atime的节点,返回其前一个的指针 {

struct process *p,*q;///////////////////////// p=head;

q=head->next;

while(q!=NULL&&p->arrivetime<=atime) {

p=q;

q=q->next; }

return p;

- 24 -

山东科技大学学生课程设计

}

void delete(struct process *q)//删除节点 {

struct process *t; t=q->next;

q->next=t->next; free(t); }

int getcount(struct process *head,int time) //查看当前就绪队列中的进程数 {

int rcount=0;

struct process *p,*q;///////// p=head; q=p->next;

while(q!=NULL&&q->arrivetime<=time) {

p=q;

q=q->next; rcount++; }

return rcount; }

struct process* end(struct process *head)//查找并返回循环队列队尾节点的前一个节点 {

- 25 -

山东科技大学学生课程设计

struct process *p,*q; q=head;

p=head->next;

while(p->next!=head) {

q=p;

p=p->next; }

return q; };

void move(struct process *headf,struct process

*headt,int n)//将headF后的n个节点移动到循环队列的headT中 {

struct process *r,*s,*t; s=headf; t=s->next;

r=t;//q记录要移动的第一个节点 while(n>1) {

t=t->next; n--; }

s->next=t->next; s=end(headt); t->next=s->next; s->next=r; }

void runrr(struct process *head)

- 26 -

山东科技大学学生课程设计

{

int time=0;

int newcount;//记录新到达的进程数 struct process* runhead=(struct process*)malloc(sizeof(struct process));

runhead->next=runhead;//创建新的循环链表,存放当前就绪队列中的进程

struct process *p,*q; p=runhead;

q=p->next;//p记录当前应运行的进程

while(time<=totaltime) {

newcount=getcount(head,time); if(newcount>0)

move(head,runhead,newcount);//将head后的newarrive个节点移动到runhead队列中 if(runhead->next==runhead) time++;

else if(q==runhead) {

p=q;

q=q->next; } else {

printf(\ printf(\现在开始运行进程:%s\\n\ printf(\进程编号:?\\n\ printf(\进程名:s\\n\

- 27 -


操作系统实验报告(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:DNF大转移NPK补丁翻译

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: