操作系统实验指导书

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

操作系统实验指导书

计算机工程学院

实验一进程调度

实验性质:设计

建议学时:6学时

实验目的:

通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。

实验内容:

设计程序模拟进程的轮转法调度过程。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。

程序要求如下:

1).输出系统中进程的调度次序;

2).计算CPU利用率。

实现提示:

用C语言实现提示:

1)程序中进程可用PCB表示,其类型描述如下:

struct PCB_type {

char name ; //进程名

int state ; //进程状态

2——表示“执行”状态

1——表示“就绪”状态

0——表示“阻塞”状态

int cpu_time ; //运行需要的CPU时间(需运行的时间片个数)

}

2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下:

struct QueueNode{

struct PCB_type PCB;

Struct QueueNode *next;

}

并设全程量:

struct QueueNode *ready_head=NULL, //ready队列队首指针

*ready_tail=NULL , //ready队列队尾指针

*blocked_head=NULL, //blocked队列队首指针

*blocked_tail=NULL; //blocked队列队尾指针

3)设计子程序:

start_state(); //读入假设的数据,设置系统初始状态

dispath(); //模拟调度

calculate(); //计算CPU利用率

实验要求:

1)上机前仔细编好程序;

2)上机时独立调试程序

3)写出上机报告(包括思想、源程序、实例运行结果)。

测试用数据:

n=2

m=3

t=5

blocked_head

运行结果

实验体会

实验二分区式存储管理

实验性质:设计

建议学时:4

实验目的:

通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。

实验内容:

设计程序模拟内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。

假定系统的内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的内存空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。

实现提示(C语言):

1.程序中自由链队列的结点类型可描述如下:

struct freelink{

int len, address;/* len为分区长度

/* address为分区起始地址

struct freelink *next;

}

内存占用区用链表描述,其结点类型描述如下:

struct busylink{

char name; /* 作业或进程名name=’S’ 表示OS占用

int len , address;

struct busylink *next;

}

并设全程量:

struct freelink *free_head=NULL; //自由链队列(带头结点)队首指针

struct busylink *busy_head=NULL, //占用区队列队(带头结点)首指针

*busy_tail=NULL;//占用区队列队尾指针

2.设计子函数:

void start(void); /* 设置系统初始状态*/

{ struct freelink * p;

struct busylink *q;

free_head=(struct freelink*)malloc(sizeof(struct freelink));

free_head->next=NULL; // 创建自由链头结点

busy_head=busy_tail=(struct busylink*)malloc(sizeof(struct busylink));

busy_head->next=NULL; // 创建占用链头结点

p=( struct freelink *)malloc(sizeof(struct freelink));

p->address=64;

p->len=640-64; (OS占用了64K)

p->next=NULL;

free_head->next=p;

q=( struct busylink *)malloc(sizeof(struct busylink));

q->name=‟S‟; /* S表示操作系统占用*/

q->len=64; q->address=0; q->next=NULL;

busy_head->next=q; busy_tail=q;

}

void requireMemo(char name, int require); /*模拟内存分配*/

void freeMemo(char name); /* 模拟内存回收*/

void past(int time);/* 模拟系统过了time 时间*/

void printlink();/* 输出内存空闲情况(自由链的结点)*/ 3.设计主函数:

main()

{ start();

past(t1);

requireMemo(…A‟,8); requireMemo(…B‟,16);

requireMemo(…C‟,64); requireMemo(…D‟,124);

printlink();

past(t2);

freeMemo(…C‟);

printlink();

past(t3);

requireMemo(…E‟,50);

printlink();

freeMemo(…D‟ );

printlink();

}

实验要求:

1)上机前仔细编好程序;

2)上机时独立调试程序;

3)写出上机报告(包括算法、源程序、实例运行结果)。

相关文档
最新文档