搜索
您的当前位置:首页正文

操作系统实验报告——时间片调度轮转算法

来源:小奈知识网
操作系统实验报告

第一次实验——时间片调度轮转算法

实验时间:2014.11.7 院系:计算机科学与技术学院 班级:软件2班

实验要求:

(1) 实验选题: 时间片调度轮转算法 (2) 程序流程图及程序代码

流程图 进 行 下 一 次 执 行

程序代码:

开始 确定时间片大小 空则等待 就绪队列 为空 否 选择队首进程进行执行一个时间片 该进程运行 完成 否 是 送到就绪队列末尾 #include #include #define N 20

typedef struct pcb{ char pname[N]; int runtime; int arrivetime; char state;

struct pcb*next; }PCB;

PCB head_input; PCB head_run; PCB * pcb_input; static char R='r',C='c'; unsigned long current; void inputprocess(); int readyprocess(); int readydata(); int runprocess(); FILE *f;

int readyprocess() {

while(1) { if(readydata()==0) return 1; else runprocess(); } }

int readydata() {

if(head_input.next==NULL) { if(head_run.next==NULL) return 0; else return 1; }

PCB *p1,*p2,*p3; p1=head_run.next; p2=&head_run; while(p1!=NULL) {

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

p1=p2;

p3=head_input.next; p2=&head_input; while(p3!=NULL) { if(((unsigned long)p3->arrivetime<=current)&&(p3->state==R)) { printf(\"时间片为 %8d(时间 始,\\n\

fprintf(f,\"时间片为 %8d(时间始,\\n\

p2->next=p3->next; p3->next=p1->next; p1->next=p3; p3=p2; } p3=p3; p3=p3->next; }

return 1; }

int runprocess() {

PCB *p1,*p2;

if(head_run.next==NULL) { current++; return 1; } else { p1=head_run.next; p2=&head_run; while(p1!=NULL) { p1->runtime--; current++; if(p1->runtime<=0) { printf(\"时间片为 %8d 时间束.\\n\

%4d);进程%4d);进程%4d 进程%s 开%s 开%s 结 fprintf(f,\"时间片为 %8d 时间 %4d 进程 %s 结束.\\n\

p1->state=C; p2->next=p1->next; delete p1; p1=NULL; } else { p2=p1; p1=p2->next; } } return 1; } }

void inputprocess() {

PCB *p1,*p2; int num;

unsigned long max=0;

printf(\"请输入进程的数量:\"); fprintf(f,\"请输入进程的数量:\"); scanf(\"%d\ fprintf(f,\"%d\\n\ p1=&head_input; p2=p1;

p1->next=new PCB; p1=p1->next;

for(int i=0;iruntime=(p1->runtime)*1000;

p1->arrivetime=(p1->arrivetime)*1000; p1->state=R; if((unsigned long)(p1->arrivetime)>max) max=p1->arrivetime; p1->next=new PCB; p2=p1; p1=p1->next; }

delete p1; p1=NULL;

p2->next=NULL; }

void main() {

f=fopen(\"result.txt\

printf(\"时间 1=1000 时间片\\n\"); fprintf(f,\"\\ntime 1=1000 time slice\\n\"); current=0; inputprocess(); readyprocess(); getch(); fclose(f); }

(3) PCB数据结构

typedef struct pcb{ char pname[N]; int runtime; int arrivetime; char state; struct pcb*next; }PCB;

(4)程序运行结果

(5) 总结

掌握了时间片轮转调度算法,时间片的大小确定很重要。同时体会到用手实践能帮助我们对理论知识的理解,要开动脑筋,勤于动手。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top