
课程名称 操作系统
实验学期 至 学年 第 学期
学生所在系部
年级 专业班级
学生姓名 学号
任课教师
实验成绩
信息科学与技术系制
实验报告须知
1 学生上交实验报告时,必须为打印稿(A4纸)。页面空间不够,可以顺延。
2 学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。
3 教师应该填写的内容包括:实验成绩、教师评价等。
《 操作系统 》课程实验报告
实验室:小型机实验室(二教217) 2010 年 5 月 4 日
| 实验题目 | 进程调度算法模拟 | ||||||||||
| 一、实验目的 1掌握处理机调度及其实现; 2 掌握进程状态及其状态转换; 3 掌握进程控制块PCB及其作用 二、设备与环境 1. 硬件设备:PC机或终端一台 2. 软件环境:(说明安装的操作系统环境,如Windows操作系统或者Linux操作系统,介绍相应的开发工具,如vs或vi,gcc,gdb,C等相关的开发工具或平台)。 三、实验内容 1用C语言实现采用先来先服务进程调度算法对10个进程的调度。 2 用C语言实现采用高优先权进程调度算法对10个进程的调度。 3用C语言实现采用短作业优先进程调度算法对10个进程的调度。 四、实验结果及分析 1.实验步骤 根据要求大致确定需要用到的函数以及实现方法 写出三个文件的代码 编译,修改语法错误 链接执行,观察结果,查看有无逻辑错误 2.相关数据结构定义 typedef struct node { char name[MAXSIZE];//进程名称 int state;//0表示进程处于就绪态,1表示进程处于等待态 int prio;//优先级 int time;//需要在cpu上处理的时间 struct node* next;//链指针 }PCB; 3.实验代码(要求加注释) void insert1(PCB *p,PCB *queue) { PCB *q; q=queue; while(q->next) q=q->next; q->next=p; p->next=NULL; }//先来先服务把进程p插入就绪或等待队列的尾部
void creat1(int n) { PCB *p; int i; ready=new PCB; ready->next=NULL; wait=new PCB; wait->next=NULL;//带头结点的队列 run=NULL; for(i=1;i<=n;i++) { p=new PCB; cout< cout<<"进程状态:"; p->state=rand()%2; cout< cout< insert1(p,ready);//当state为0时,插入到就绪队列中 else insert1(p,wait);//否则插入到等待队列中 } } void runing() { PCB *p; cout << "当前执行进程:"; if(!run) cout<<"空"< cout< cout<<"空"; else for(p=ready->next;p;p=p->next) cout< cout< cout<<"空"; else for(p=wait->next;p;p=p->next) cout< cout< void FCFS(int n) { srand((int)time(0)); int state_change; PCB *p; cout< srand((int)time(0)); cout< cout< { if(ready->next) { run=ready->next; ready->next=run->next; } runing(); state_change=rand()%2; cout< { p=wait->next; wait->next=p->next; insert1(p,ready); } run=NULL; } cout< //********************************************************************** void insert2(PCB *p,PCB *queue) { PCB *q,*preq; preq=queue;q=queue->next; while(q&&(q->prio)<=(p->prio)) { preq=q; q=q->next; } if(!q) { preq->next=p; p->next=NULL; } else { p->next=q; preq->next=p; } }//把p插入优先级队列中,队列仍然按照优先级高低排列 void creat2(int n) { srand((int)time(0)); PCB *p; run=NULL; for(int i=0;i p=new PCB; cout< cout<<"进程状态:"; p->state=rand()%2; cout< cout< cout< cout< cout< cout< insert2(p,ready);//当state为0时,插入到就绪队列中 else insert1(p,wait);//否则插入到等待队列中 } } void FPF(int n) { srand((int)time(0)); int wait_state_change,run_state_change,cpu_time=rand()%5+1; //cpu_time表示一次在cpu上的执行时间 PCB *p; cout<<"************高优先级********************************"< srand((int)time(0)); cout< cout< { if(ready->next) { run=ready->next; ready->next=run->next; } runing(); wait_state_change=rand()%2; cout<<"wait_state_change="< { p=wait->next; wait->next=p->next; insert1(p,ready); } if(run&&run->time>cpu_time) { run->time-=cpu_time; run_state_change=rand()%2; cout<<"run_state_change="< insert1(run,ready); else insert1(run,wait); } else run=NULL; } cout< //********************************************************************** void insert3(PCB *p,PCB *queue) { PCB *q,*preq; preq=queue;q=queue->next; while(q&&(q->time)<=(p->time)) { preq=q; q=q->next; } if(!q) { preq->next=p; p->next=NULL; } else { p->next=q; preq->next=p; } }//把p插入作业按时间排列的队列中,队列仍然按照时间长短排列 void creat3(int n) { srand((int)time(0)); PCB *p; run=NULL; for(int i=0;i p=new PCB; cout<<"请输入进程名称:"; cin>>p->name; cout<<"进程状态:"; p->state=rand()%2; cout< cout< cout< cout< insert3(p,ready);//当state为0时,插入到就绪队列中 else insert1(p,wait);//否则插入到等待队列中 } } void SPF(int n) { srand((int)time(0)); int state_change; PCB *p; cout<<"***********短作业优先*******************************"< cout< srand((int)time(0)); cout< { if(ready->next) { run=ready->next; ready->next=run->next; } runing(); state_change=rand()%2; cout< { p=wait->next; wait->next=p->next; insert1(p,ready); } run=NULL; } cout< void main() { int n; cout<<"请输入进程个数:"; cin>>n; cout< FPF(n); SPF(n); } 4.实验结果分析 先来先服务FCFS进程调度算法采用非抢占方式,实现方法比较简单,但使短作业和实时性要求较高的作业等待的时间过长;高优先级,此处采用抢占方式,另外还加入了时间片轮转方法;短作业优先方法是一种非抢占方式,没有考虑长作业和实时任务的要求。 五、实验心得 通过这次实验,我在以前学过的知识的基础上有了提高,学到了很多新知识:比如将用户作业和就绪进程按提交的顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度。调度时从后备队列中选择若干优先权最高的个作业进入内存;或从就绪队列中选择优先权最高的进程,将处理机分配给它。调度时根据估计的运行时间首先调度运行占用CPU时间最短的作业或进程 | |||||||||||
| 教师评价 | 评定项目 | A | B | C | D | 评定项目 | A | B | C | D | |
| 算法正确 | 实验结果正确 | ||||||||||
| 程序结构合理 | 报告规范 | ||||||||||
| 综合评定等级 | |||||||||||
