广工_操作系统_实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统实验报告

学院_____计算机学院_______ 专业______软件工程________ 班级______ ________ 学号_____ _______ 姓名_______ _________ 指导教师

(2010年10 月)

学号:姓名:协作者:________

实验__一__题目__ 进程调度___第周星期___

一、实验目的

用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。

二、实验内容和要求

编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。

·每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行的时间、已用CPU时间、进程状态等。

·进程的优先数以及需要的运行时间事先由人为指定(也可以随机数产生)。

·如果运行一个时间片后进程的已占用CPU时间已达到所需要的运行时间,则撤销该进程,如果还未达到,则把它送回队尾。

三、实验主要仪器设备和材料

实验环境

硬件环境:IBM-PC 或兼容机

软件环境:C语言编程环境

四、实验原理及设计方案

1、实验原理

将程序顺序的输入进程队列后,开始执行程序,当运行了一个时间片后,如果进程所占的CPU时间达到所需的运行时间时,该进程完成,并撤销该进程,否则则把进程送回队尾。

2、设计方案

用一个进程控制块(PCB)表示进程。输入进程名称,优先级,运行时间后,通过模拟系统对进程采用“轮转法”调度,得到各个时间片进程的运行情况。

3、相关数据结构的说明

struct pcb // 定义进程控制块 PCB

{

char name[10]; // 进程名称

char state; // 进程当前状态

int super; // 进程优先级

int ntime; // 进程运行所需时间

int rtime; // 进程已运行时间

struct pcb* link; // 连接到队列中下一个进程的指针}

4、程序流程图(详细)

5、给出程序中源程序名和可执行程序名。

源程序名:pcb.cpp

可执行程序名:pcb.exe

输入数据:in.txt

输出数据:out.txt

6、程序清单(源程序中要附有详细的注释)

#include

#define getpch(type) (type*)malloc(sizeof(type))

struct pcb // 定义进程控制块PCB

{

char name[10]; // 进程名称

char state; // 进程当前状态

int super; // 进程优先级

int ntime; // 进程运行所需时间

int rtime; // 进程已运行时间

struct pcb* link;

}*ready,*p,*rear;

typedef struct pcb PCB;

void push() // 建立将进程按FCFS 排入队列的函数{

rear->link = p;

rear = p;

p->link = NULL;

p->state = 'w'; // 插入队尾后把状态改成'w'

}

void input() // 建立进程控制块函数

{

int i,num;

printf(" 请输入进程数量");

scanf("%d",&num);

p=getpch(PCB); // 给p 分配空间

for( i=0; i< num; i++)

{

printf("\n 进程号No.%d ",i);

p = getpch(PCB);

printf(" 输入进程名:");

scanf("%s",p->name);

printf(" 输入进程优先等级:");

scanf("%d",&p->super);

printf(" 输入进程所需运行时间:");

scanf("%d",&p->ntime);

p->rtime = 0; // 为进程的已运行时间初始化为0

p->state = 'w'; // 为进程的状态初始化为'w'

p->link = NULL;

push();

}

}

void disp(PCB* pr) // 建立进程显示函数

{

printf("\n qname\tstate\tsuper\tndtime\truntime \n");

printf("| %s\t",pr->name);

printf("|%c\t",pr->state);

printf("|%d\t",pr->super);

printf("|%d\t",pr->ntime);

printf("|%d\t",pr->rtime);

printf("\n");

}

void check() // 建立进程查看函数

{

system("cls");

PCB *pr;

pr=ready->link;

while(pr!=NULL) // 队列从头到尾显示进程

{

相关文档
最新文档