操作系统课程 2016~2017 年度第1 学期实验题目: 进程调度院系: 计算机学院班级: 140801 学号: 3114002 472 姓名: 黄凯鑫任课教师: 白明成绩评定: 五邑大学实验报告实验二题目: 进程调度完成日期: 201 6年 12月 11日 1 、实验目的(1)设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB ) 表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用 CPU 的时间以及进程的状态等,且可按调度算法的不同而增删。(2)调度程序应包含 2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。(3 )系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程 2 、实验内容(1)编制和调试示例给出的进程调度程序,并使其投入运行。(2 )自行设计或改写一个进程调度程序,在相应机器上调试和运行该程序,其功能应该不亚于示例。(3)直观地评测各种调度算法的性能。 3 、算法设计算法:(1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同, 就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。(2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置) 。每过一个时间片,运行进程占用处理机的时间片数加 1 ,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。实验源代码: #include <> #include <> #include <> #include <> #include <> #include <> enum state // 进程的状态{ Ready, Working, Finish }; struct pcb //PCB 数据结构{ int pid; int priority; int cputime; int needtime; int round; state process; pcb *next; }; int timepiece; pcb *get_process(){ // 优先数算法-- 输入进程个数 int proc; pcb *q; pcb *t; pcb *p; int i=0; cout << "Input Process Number(1-10): "; cin >> proc; while (proc<1 || proc>10) { cout << endl << "Illegal Input!" << endl << endl << "Input Process Number(1-10): "; cin>>proc; } //cout << endl << endl<< "Start Scheduling!!!\n\n"; getch(); srand((unsigned)time(NULL)); // 初始化随机数种子发生器 while (i<proc) { q=(struct pcb *)malloc(sizeof(pcb)); q->pid=rand()%10000; q->needtime=rand()%10+1; q->cputime=0; q->priority=rand()%100; q->process=Ready; q->next=NULL; // 利用随机数生成进程信息 if (i==0) { p=q; t=q; } else { t->next=q; t=q; } // 尾插法建立 PCB 节点 i++; } //while return p; } void display(pcb *p) { // 优先数算法结果输出 cout<<"ProcessID"<<" "<<"Cputime"<<" "<<"Needtime"<<" "<<"Priority"<<" "<<"State"<<endl; while(p) { cout<<" "<< p->pid; cout<<"\t\t"; cout<<p-
操作系统实验报告进程调度 来自淘豆网m.daumloan.com转载请标明出处.