广工计算机操作实验报告.doc
文本预览下载声明
操作系统实验报告
学 院 计算机
专 业 网络工程
班 级 xxxxxxxx
学 号 xxxxxxxxx
姓 名 xxxxxxx
指导教师 xxxxxxxxx
2013 年 6 月 23 日
目录
实验一 进程调度 1
实验二 作业调度 14
实验三 文件系统 27
实验四 主存空间的分配与回收 40
实验一 进程调度
一、实验目的
用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度简单轮转法的基本思想是:所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程直至所有的进程运行完毕。可变时间片轮转法①、估计运行时间减一
②、输出当前运行进程的名字
用这两个操作来模拟进程的一次运行。
进程运行一次后,以后的调度则将当前指针依此下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程。同时还应判断该进程的剩余运行时间是否为零。若不为零,则等待下一轮的运行,若该进程的剩余运行时间为零,则将该进程的状态置为完成态C,并退出循环队列。
若就绪队列不空,则重复上述的(5)和(6)步骤直到所有的进程都运行完为止。
在所设计的调度程序中,应包含显示或打印语句。显示或打印每次选中的进程的名称及运行一次后队列的变化情况。
进程名(进程标识) 链接指针(指出下一个到达进程的进程控制块首地址。按照进程到达的顺序排队。系统设置一个队头和队尾指针分别指向第一和最后一个进程。新生成的进程放队尾。) 到达时间(进程创建时的系统时间或由用户指定,调用时总是选择到达时间最早的进程) 估计运行时间(由设计者任意指定一个时间值) 进程状态(就绪、运行或完成三种状态之一)
2.轮转法的流程图如下
3.简单轮转法源程序如下#include stdio.h
#include stdlib.h
#include conio.h
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
struct pcb { /* 定义进程控制块PCB */
char name[10];
char state;
int ntime;
int rtime;
struct pcb* link;
}*ready=NULL,*p;
typedef struct pcb PCB;
int sort() /* 建立对进程进行优先级排列函数*/
{
PCB *first, *second;
int insert=0;
if((ready==NULL)) /*优先级最大者,插入队首*/
{ p-link=ready;
ready=p;
}
else /* 进程比较优先级,插入适当的位置中*/
{ first=ready;
second=first-link;
while(second!=NULL)
{ /* 插入进程优先数最低,则插入到队尾*/
first=first-link;
second=second-link;
}
if(insert==0) first-link=p;
}
}
int input() /* 建立进程控制块函数*/
{
int i,num=4;
system(cls); /*清屏*/
printf(\t\t\t-------进程调度简单轮转法-------\n);
printf(\t\t\t班级:2010级网络工程(2)班\n);
printf(\t\t\t姓名:xxxxxx\n);
printf(\t\t\t学号: 3110006515\n\n);
printf(\n 请输入4个进程号.);
for(i=0;inum;i++)
{
printf(\n 进程号No.%d:\n,i);
p=getpch(PCB);
printf(\n 输入进程名:);
scanf(%s,p-name);
printf(\n 输入进程运行时间:);
scanf(%d,p-ntime);
printf(\n);
p-rtime=0;p-state=W;
p-link=NULL;
sort();
}
}
in
显示全部