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

处理机调度实验报告

};
(2)局部变量
insert()函数:
指针变量head为指向链表的头指针;
指针变量tail为一个遍历链表指针;
指针变量pretail为一个指向tail所指向的结点前一个结点的指针,用来查找插入位置;
指针变量p指向新申请到的新结点;
create()函数中:
指针变量p指向新申请到的新结点;
整型变量i用来实现for循环。
display(head);
getchar();
}
printf("结束!");
}
2、程序运行结果截图如下:
第一题截图:
选择菜单显示:
输入数据后
五、实习总结
六、教师评语及成绩
评语:
成绩:
年月日
入口参数:无
出口参数:建立的链表的头指针
函数流程图如图二所示:
(3)输出模拟函数:PCB* module(PCB *head)
用来模拟进程运行,并将结果显示给用户,此函数没有返回值。此函数只是依次把链表的第一个进程结点运行一次,然后改变优先数和执行完所需时间,再插入到链表中去,并保持链表有序,如果一个进程结点执行时间变为0,则将其从链表里删除,并且释放内存,一直重复下去,直到此链表为空,因为此函数中插入结点和create
printf("=========================\n");
while (h!=NULL)
{
printf("进程名=%s,要求运行时间=%d,优先数=%d,状态=%c\n",h->NAME ,h->TIME,h->PRIORITY ,h->STATE );
h=h->next;
}
printf("=========================\n");
}
return (head);
}
cpp文件
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include"chuli.h"
void display(PCB *head)
{
PCB *h=head;
printf("\n就绪队列中的进程为:\n");
printf("\t\t\t\t=========================\n");
free(run);
}
return head;
}
void main()
{
PCB *head=NULL;
head=creat(head);
display(head);
while (head!=NULL)
{
head=module(head);
int TIME;//表示进程所需要的运行时间
int PRIORITY;//表示进程的优先级
char STATE;//表示进程的状态,为r时表示就绪,为e时表示已执行完
struct PCB *next;
};
PCB*insert(PCB *head,PCB *p)
{
struct PCB *tail,*pretail;//tail为一个遍历指针,pretail是指向tail所指的前一个结点的指针
if (run->TIME>0) head=insert(head,run);
else
{
printf("\t\t\t\t%s is finished!\n",run->NAME);
printf("\t\t\t\t=========================\n");
printf("\t\t\t\t进程名=%s,要求运行时间=%d,优先数=%d,状态=%c\n",run->NAME ,run->TIME,run->PRIORITY ,run->STATE );
head=NULL;
for(i=1;i<=5;i++)
{
printf("\n进程号No.%d:\n",i);
p=(struct PCB *)malloc(sizeof(struct PCB));
printf("请输入进程的名字:");
scanf("%s",name);
strcpy(p->NAME,name);
实验报告
(学院)系:信息工程学院
专业:网络工程
姓名:
班级:
学号:
指导教师:
2012年12月26日
操作系统实验报告
姓名
学号
日期
12月26日
实验室
机房152
指导教师
设备编号
实习题目
设计一个按优先数调度算法实现处理器调度的程序
一、实验内容
选择一个调度算法,实现处理器调度。
二、实验目的
在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实习模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。
}
if((p->PRIORITY) >(tail->PRIORITY))
{
if(head==tail)//如果此时链表中只有一个进程结点
{
p->next =head;
head=p;
}
else//如果此时链表中有多个进程结点
{
pretail->next =p;
pretail=p;
p->next =tail;
入口参数:建立的链表的头指针
出口参数:无
函数流程图如图三所示
四、程序实现及运行结果截图
1、源程序文件夹
处理机
头文件
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
struct PCB//定义结构体PCB
{
char NAME[10];//表示进程名字
if (run->TIME==0) run->STATE='e';
printf("进程名=%s,要求运行时间=%d,优先数=%d,状态=%c\n",run->NAME ,run->TIME,run->PRIORITY ,run->STATE );
printf("=========================\n");
三、实验过程
1、数据结构设计:
(1)全局变量
struct PCB//定义结构体PCB
{
char NAME[10];//表示进程名字
int TIME;//表示进程所需要的运行时间
int PRIORITY;//表示进程的优先级
char STATE;//表示进程的状态,为r时表示就绪,为e时表示已执行完
struct PCB *next;
}
PCB* module(PCB *head)
{
PCB *run;
run=head;
head=head->next;
run->TIME--;
run->PRIORITY--;
run->next=NULL;
printf("%s is running!\n",run->NAME);
printf("=========================\n");
}
}
else
{
tail->next =p;
p->next =NULL;
}
return head;
}
PCB* creat(PCB* head)
{
struct PCB *p;//head为头指针,p指向新申请到的结点
int i;
char name[10];
int time;
int priority;
char state='r';
printf("请输入该进程执行完所需的时间(>0):");
scanf("%d",&time);
p->TIME =time;
printf("请输入该进程的优先级:");
scanf("%d",&priority);
p->PRIORITY =priority;
p->STATE =state;
head=insert(head,p);
display()函数:
指针变量h为指向链表的头指针;
module()函数
指针变量run为一个遍历链表指针;
main()函数
2、算法设计
(1)主函数
void main()
函数功能:初始化一些信息,再通过菜单选择要执行的操作:
主函数流程如图1所示。
2)创建函数PCB* creat(PCB* head)用来建立一个就绪进程链表,其中每个结点为一个PCB结构体,此链表是一个按照PRIORITY(进程优先数)排序的有序链表,此函数返回建立的链表的头指针。
pretail=tail=head;
if(head==NULL)
{
相关主题