您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页操作系统处理机调度实验报告

操作系统处理机调度实验报告

来源:华佗小知识
 处理机调度算法实验报告

学 号 专 业 姓 名 班 级 时 间 实验题目:处理机调度算法 一、实验目的 在了解操作系统的基础上全面了解处理机调度算法的实现以及过程,详细了解处理机调度算法的机制,充分了解调度的过程及状态,采用优先数法进程调度算法来模拟演示进程调度 二、实验内容与步骤: 1. 了解进程的三种状态状态:ready、running、finish 2.了解进程需要的CPU时间以时间片为单位确定 3.编写一段程序 #include #include #define P_NUM 5 #define P_TIME 50 enum state{ ready, execute, block, finish }; struct pcbb{ char name[4]; int priority; int cputime; int needtime; int count; enum state process; struct pcbb *next; }; typedef struct pcbb pcb; void display_menu(){ printf(\"CHOOSE THE ALGORITHM:\\n\"); printf(\"1 PRIORITY\\n\"); printf(\"2 ROUNDROBIN\\n\"); printf(\"3 EXIT\\n\"); } pcb* get_process(){ pcb *q; pcb *p; pcb *t; int i = 0; printf(\"input name and time\\n\"); while (i < P_NUM){ q=(pcb *)malloc(sizeof(pcb)); scanf(\"%s\ scanf(\"%d\ q->cputime = 0; q->priority = P_TIME - q->needtime; q->process = ready; q->next = NULL; if(i==0){ p = q; t = q; } else{ t->next = q; t = q; } i++; } return p; } void free_process(pcb *p){ pcb *q; while(p!= NULL){ q = p; p = p->next; free(q); } } void display(pcb *p){ printf(\"name cputime needtime priority state\\n\"); while(p){ printf(\"%s\ printf(\" \"); printf(\"%d\ printf(\" \"); printf(\"%d\ printf(\" \"); printf(\"%d\ printf(\" \"); switch(p->process){ case ready:printf(\"ready\\n\");break; case execute:printf(\"execute\\n\"); break; case block:printf(\"block\\n\"); break; case finish:printf(\"finish\\n\"); break; } p = p->next; } } int process_finish(pcb *q){ int b1 = 1; while(b1&&q){ b1 = b1&&q->needtime==0; q = q->next; } return b1; } void cpuexe(pcb *q){ pcb *t = q; int tp = 0; while(q){ if (q->process!=finish){ q->process = ready; if(q->needtime==0){ q->process = finish; } } if(tppriority&&q->process!=finish){ tp = q->priority; t = q; } q = q->next; } if(t->needtime!=0){ t->priority -=3; t->needtime --; t->process = execute; t->cputime++; } } void priority_cal(){ pcb *p; p = get_process(); int cpu = 0; while(!process_finish(p)){ cpu++; printf(\"cputime:%d\\n\ cpuexe(p); display(p); sleep(2); } free_process(p); printf(\"All processes have finished\\n\"); } pcb *get_process_round(){ pcb *q; pcb *p; pcb *t; int i = 0; printf(\"input name and time\\n\"); while (icputime = 0; q->count = 0; q->process = ready; q->next = NULL; if(i==0){ p = q; t = q; } else{ t->next = q; t = q; } i++; } return p; } void cpu_round(pcb *q){ if(q->needtime==1) q->cputime++; else q->cputime +=2; q->needtime -=2; if(q->needtime<0){ q->needtime = 0; } q->count++; q->process = execute; } pcb *get_next(pcb *k,pcb *head){ pcb *t; t = k; do{ t =t->next; }while ( t && t->process == finish); if(t == NULL){ t = head; while(t->next!=k && t->process == finish){ t = t->next; } } return t;} void set_state(pcb *p){ while(p){ if(p->needtime == 0){ p->process = finish; } if(p->process == execute){ p->process = ready; } p = p->next; }} void display_round(pcb *p){ printf(\"name cputime needtime count while(p){ printf(\"%s\ printf(\" \"); printf(\"%d\ printf(\" \"); printf(\"%d\ printf(\" \"); printf(\"%d\ printf(\" \"); switch(p->process){ case ready:printf(\"ready\\n\");break; state\\n\"); case execute:printf(\"execute\\n\"); break; case block:printf(\"block\\n\"); break; case finish:printf(\"finish\\n\"); break; } p = p->next; }} void round_cal(){ pcb *p; pcb *r; p = get_process_round(); int cpu = 0; r=p; while(!process_finish(p)){ if(r->needtime==1) cpu+=1; else cpu+=2; cpu_round(r); r = get_next(r,p); printf(\"cputime:%d\\n\ display_round(p); set_state(p); sleep(2);} free_process(p); } main(){ display_menu(); int k; scanf(\"%d\ switch(k){ case 1:priority_cal();break; case 2:round_cal();break; case 3:break; default:printf(\"YOU HAVE NOT CHOOSE ANY ALGORITHM!\\n\"); } } 运行后结果如下: [root@rhel5hbzy ~]# gcc -o chuliji chuliji.c [root@rhel5hbzy ~]# ./m CHOOSE THE ALGORITHM: 1 PRIORITY 2 ROUNDROBIN 3 EXIT 1 input name and time jing 2 aaaa 8 bbbb5 ffff4 ggg 6 cputime:1 name cputime needtime priority state jing- 1 1 45 execute aaaa* 0 8 42 ready bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 0 6 44 ready rtyucputime:2 name cputime needtime priority state jing* 2 0 42 execute aaaa* 0 8 42 ready bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 0 6 44 ready 5cputime:3 name cputime needtime priority state jing* 2 0 42 finish aaaa* 0 8 42 ready bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 1 5 41 execute 2cputime:4 name cputime needtime priority state jing* 2 0 42 finish aaaa' 1 7 39 execute bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 1 5 41 ready cputime:5 name cputime needtime priority state jing* 2 0 42 finish aaaa' 1 7 39 ready bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 2 4 38 execute cputime:6 name cputime needtime priority state jing* 2 0 42 finish aaaa$ 2 6 36 execute bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 2 4 38 ready cputime:7 name cputime needtime priority state jing* 2 0 42 finish aaaa$ 2 6 36 ready bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 3 3 35 execute cputime:8 name cputime needtime priority state jing* 2 0 42 finish aaaa! 3 5 33 execute bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 3 3 35 ready cputime:9 name cputime needtime priority state jing* 2 0 42 finish aaaa! 3 5 33 ready bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 4 2 32 execute cputime:10 name cputime needtime priority state jing* 2 0 42 finish aaaa- 4 4 30 execute bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 4 2 32 ready cputime:11 name cputime needtime priority state jing* 2 0 42 finish aaaa- 4 4 30 ready bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 5 1 29 execute cputime:12 name cputime needtime priority state jing* 2 0 42 finish aaaa 5 3 27 execute bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 5 1 29 ready cputime:13 name cputime needtime priority state jing* 2 0 42 finish aaaa 5 3 27 ready bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 6 0 26 execute cputime:14 name cputime needtime priority state jing* 2 0 42 finish aaaa 6 2 24 execute bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 6 0 26 finish 3 cputime:15 name cputime needtime priority state jing* 2 0 42 finish aaaa 7 1 21 execute bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 6 0 26 finish cputime:16 name cputime needtime priority state jing* 2 0 42 finish aaaa 8 0 18 execute bbbb2 0 0 50 finish ffff2 0 0 50 finish ggg 6 0 26 finish All processes have finished [root@rhel5hbzy ~]# rtyu2 bash: rtyu2: command not found [root@rhel5hbzy ~]# 3 bash: 3: command not found 三、分析与体会 多道程序设计中,通常是若干个进程同时处于就绪状态,必须依照某种策略来决定哪个进程优先占有处理机。因而引起进程调度。本实验模拟单处理机情况下的处理机调度问题,使我加深了对进程调度的理解。通过本次试验,使我加深了对进程调度的具体细节的理解,掌握LINUX系统结构、实现处理机和各种典型的算法,系统了解了操作系统的设计和实验思路,动手能力更强了。

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

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务