文档详情

广工计算机操作实验报告.doc

发布:2017-08-27约3.03万字共55页下载文档
文本预览下载声明
操作系统实验报告 学 院 计算机 专 业 网络工程 班 级 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
显示全部
相似文档