《操作系统处理机调度实验报告(共10页).doc》由会员分享,可在线阅读,更多相关《操作系统处理机调度实验报告(共10页).doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 处理机调度算法实验报告学 号姓 名时 间专 业班 级实验题目:处理机调度算法一、实验目的在了解操作系统的基础上全面了解处理机调度算法的实现以及过程,详细了解处理机调度算法的机制,充分了解调度的过程及状态,采用优先数法进程调度算法来模拟演示进程调度 二、实验内容与步骤:1. 了解进程的三种状态状态:ready、running、finish2.了解进程需要的CPU时间以时间片为单位确定3.编写一段程序#include #include #define P_NUM 5#define P_TIME 50enum stateready,execute,block,finish
2、;struct pcbbchar name4;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 PRIORITYn);printf(2 ROUNDROBINn);printf(3 EXITn);pcb* get_process()pcb *q;pcb *p; pcb *t; int i = 0;printf
3、(input name and timen);while (i name);scanf(%d,&q-needtime);q-cputime = 0;q-priority = P_TIME - q-needtime;q-process = ready;q-next = NULL;if(i=0)p = q;t = q;elset-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 cputi
4、me needtimepriority staten);while(p)printf(%s,p-name);printf( );printf(%d,p-cputime);printf( );printf(%d,p-needtime);printf( );printf(%d,p-priority);printf( );switch(p-process)case ready:printf(readyn);break;case execute:printf(executen); break;case block:printf(blockn); break;case finish:printf(fin
5、ishn); 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-n
6、ext;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:%dn,cpu);cpuexe(p); display(p); sleep(2);free_process(p); printf(All processes have finishedn);pcb *get_process_round(
7、)pcb *q;pcb *p; pcb *t; int i = 0;printf(input name and timen);while (iname);scanf(%d,&q-needtime);q-cputime = 0;q-count = 0;q-process = ready;q-next = NULL;if(i=0)p = q;t = q;elset-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-n
8、eedtimeneedtime = 0;q-count+;q-process = execute;pcb *get_next(pcb *k,pcb *head)pcb *t;t = k;dot =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 = exe
9、cute)p-process = ready;p = p-next;void display_round(pcb *p)printf(name cputime needtimecount staten);while(p)printf(%s,p-name);printf( );printf(%d,p-cputime);printf( );printf(%d,p-needtime);printf( );printf(%d,p-count);printf( );switch(p-process)case ready:printf(readyn);break;case execute:printf(e
10、xecuten); break;case block:printf(blockn); break;case finish:printf(finishn); 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;elsecpu+=2; cpu_round(r);r = get_next(r,p); printf(cputime:%dn,cpu);display_round(p);se
11、t_state(p);sleep(2);free_process(p); main()display_menu();int k;scanf(%d,&k);switch(k)case 1:priority_cal();break;case 2:round_cal();break;case 3:break;default:printf(YOU HAVE NOT CHOOSE ANY ALGORITHM!n);运行后结果如下:rootrhel5hbzy # gcc -o chuliji chuliji.crootrhel5hbzy # ./mCHOOSE THE ALGORITHM:1 PRIORI
12、TY2 ROUNDROBIN3 EXIT1input name and timejing 2aaaa 8bbbb5ffff4ggg 6cputime:1name cputime needtime priority statejing- 1 1 45 executeaaaa* 0 8 42 readybbbb2 0 0 50 finishffff2 0 0 50 finishggg 0 6 44 readyrtyucputime:2name cputime needtime priority statejing* 2 0 42 executeaaaa* 0 8 42 readybbbb2 0 0
13、 50 finishffff2 0 0 50 finishggg 0 6 44 ready5cputime:3name cputime needtime priority statejing* 2 0 42 finishaaaa* 0 8 42 readybbbb2 0 0 50 finishffff2 0 0 50 finishggg 1 5 41 execute2cputime:4name cputime needtime priority statejing* 2 0 42 finishaaaa 1 7 39 executebbbb2 0 0 50 finishffff2 0 0 50
14、finishggg 1 5 41 readycputime:5name cputime needtime priority statejing* 2 0 42 finishaaaa 1 7 39 readybbbb2 0 0 50 finishffff2 0 0 50 finishggg 2 4 38 executecputime:6name cputime needtime priority statejing* 2 0 42 finishaaaa$ 2 6 36 executebbbb2 0 0 50 finishffff2 0 0 50 finishggg 2 4 38 readycpu
15、time:7name cputime needtime priority statejing* 2 0 42 finishaaaa$ 2 6 36 readybbbb2 0 0 50 finishffff2 0 0 50 finishggg 3 3 35 executecputime:8name cputime needtime priority statejing* 2 0 42 finishaaaa! 3 5 33 executebbbb2 0 0 50 finishffff2 0 0 50 finishggg 3 3 35 readycputime:9name cputime needt
16、ime priority statejing* 2 0 42 finishaaaa! 3 5 33 readybbbb2 0 0 50 finishffff2 0 0 50 finishggg 4 2 32 executecputime:10name cputime needtime priority statejing* 2 0 42 finishaaaa 4 4 30 executebbbb2 0 0 50 finishffff2 0 0 50 finishggg 4 2 32 readycputime:11name cputime needtime priority statejing*
17、 2 0 42 finishaaaa 4 4 30 readybbbb2 0 0 50 finishffff2 0 0 50 finishggg 5 1 29 executecputime:12name cputime needtime priority statejing* 2 0 42 finishaaaa 5 3 27 executebbbb2 0 0 50 finishffff2 0 0 50 finishggg 5 1 29 readycputime:13name cputime needtime priority statejing* 2 0 42 finishaaaa 5 3 2
18、7 readybbbb2 0 0 50 finishffff2 0 0 50 finishggg 6 0 26 executecputime:14name cputime needtime priority statejing* 2 0 42 finishaaaa 6 2 24 executebbbb2 0 0 50 finishffff2 0 0 50 finishggg 6 0 26 finish3cputime:15name cputime needtime priority statejing* 2 0 42 finishaaaa 7 1 21 executebbbb2 0 0 50
19、finishffff2 0 0 50 finishggg 6 0 26 finishcputime:16name cputime needtime priority statejing* 2 0 42 finishaaaa 8 0 18 executebbbb2 0 0 50 finishffff2 0 0 50 finishggg 6 0 26 finishAll processes have finishedrootrhel5hbzy # rtyu2bash: rtyu2: command not foundrootrhel5hbzy # 3bash: 3: command not found三、分析与体会多道程序设计中,通常是若干个进程同时处于就绪状态,必须依照某种策略来决定哪个进程优先占有处理机。因而引起进程调度。本实验模拟单处理机情况下的处理机调度问题,使我加深了对进程调度的理解。通过本次试验,使我加深了对进程调度的具体细节的理解,掌握LINUX系统结构、实现处理机和各种典型的算法,系统了解了操作系统的设计和实验思路,动手能力更强了。专心-专注-专业