当前位置:文档之家› 操作系统处理机调度实验报告

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

}
void cpuexe(pcb *q){
pcb *t = q;
int tp = 0;
while(q){ //让t指向优先级最高的进程
if (q->process!=finish){
q->process = ready;
if(q->needtime==0){
q->process = finish;
}
if(r->needtime==1)
cpu+=1;
else
cpu+=2; //时间片长度是2
cpu_round(r);
r = get_next(r,p); //获得下一个需要执行的进程
printf("cputime:%d\n",cpu);
display_round(p); //每调度一次就显示次
set_state(p);
display(p); //每调度一次就显示次
sleep(2);
}
free_process(p); //释放所有进程
printf("All processes have finished\n");
}
pcb *get_process_round(){
pcb *q;
pcb *p; //头指针
pcb *t; //尾指针
3)优先级调度的基本思想是,把当前处于就绪队列中优先级最高的进程投入运行,而不管各进程的下一个CPU周期的长短和其他因素。
具体步骤:
分析问题,提出解决问题的算法
编制程序
程序调试
记录实验结果,以及思考是否能够改善算法
程序及运行结果:
#include <stdio.h>
#include <stdlib.h>
操作系统实验报告
学号
姓名
时间
2011年12月16日
专业
网络工程
班级
5班
实验题目:处理机调度
实验目的:
(1)通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法,进一步掌握进程调度的概念和算法,加深对处理机分配的理解。
(2)了解Linux中进程(线程)的调度机制。
(3)学习使用Linux中进程(线程)调度算法,掌握相应的与调度有关的函数。
#define P_NUM 5
#define P_TIME 50
enum state{
ready,
execute,
block,
finish
};
struct pcbb{
char name[4];
int priority; //数越大优先级越高
int cputime; //已占用CPU的时间
int needtime; //执行时间
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;
printf("输入各进程的处理时间和优先级并以两个0为结束标志:\n");
while(scanf("%d %d",&n,&m)&&n&&m)
{
s=(linknode *)malloc(sizeof(linknode));
K++;
s->time=n;
s->priority=m;
s->averageTime=0;
{
int time;
int averageTime;
int priority;
struct link *next;
}linknode;
linknode *creat()
{
int n,m;
linknode *head,*r,*s;
head=r=(linknode *)malloc(sizeof(linknode));
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;
}
if(tp<q->priority&&q->process!=finish){
tp = q->priority;
t = q;
}
q = q->next;
}
if(t->needtime!=0){
t->priority -=3; //每执行一次优先级降低三个单位
t->needtime --;
t->process = execute;
default:printf("YOU HAVE NOT CHOOSE ANY ALGORITHM!\n");
}
}
优先级调度:
时间片轮转调度:
先来先服务调度算法及结果:
#include <stdio.h>
#include <stdlib.h>
int SUM=0,K=0;
typedef struct link
}
main()
{
linknode *head;
head=creat();
seekAverageTime(head);
print(head);
printf("平均处理时间为:%d\n",(SUM/K));
}
分析与体会:
通过做本实验,让我对进程或作业先来先服务、高优先权、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!对于时间片轮转法的处理要比优先级调度算法的理解要深。在实验的过程中遇到了很多困难,感谢同学们的帮助。
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){
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
p=p->next;
SUM+=sum;
}
}
void print(linknode *head)
{
linknode *p;
p=head->next;
printf("各进程处理时间为:");
while(p)
{
printf("%-4d",p->averageTime);
p=p->next;
}
printf("\n");
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){
printf("name cputime needtimeprioritystate\n");
while(p){
printf("%s",p->name);
printf("");
printf("%d",p->cputime);
printf("");
printf("%d",p->needtime);
printf("");
r->next=s;
相关主题