第四部分 Linux经典系统管理算法的模拟实现

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

第四部分Linux经典系统管理算法的模拟实现

设计题目3 动态多分区存储管理模拟系统

【实验目的】

1.对理论课中学习的内存管理当中的概念做进一步的理解;

2.了解内存管理任务的主要实现方法;

3.掌握内存的分配,回收等主要算法的原理;

4. 通过编程,熟悉分区式存储管理方法中内存分配回收算法的实现方式。

【实验预备知识】

在该实验中,我们通过模拟以可变分区管理方式来分配和回收主存,实现对计算机操作系统管理主存方式的加深理解。

该模拟实验中,为了实现可变分区的分配和回收,主要要解决三个问题。

(1)设计一个用来记录主存使用情况的数据结构,登记空闲区和作业区占用的情况;

(2)在设计好的该数据结构上面,再设计一个主存分配算法;

(3)在设计好的该数据结构上面,再设计一个主存回收算法。

记录主存使用情况的数据结构,使用到了两张表格:“空闲分区表”和“已分配分区表”。

“空闲分区表”用来记录空闲分区,表中除了分区起始地址和长度外,好要加一项“标志”,若是空闲的栏目,则该项内容为“空”;若登记了某块空闲分区,则该项内容为“未分配”,用数字“1”表示。

“已分配分区表”用来记录作业占用分区的情况,表中除了分区起始地址和长度外,也要加如一项“标志”,若是空闲的栏目,则该项内容为“空”;若登记了某块被分配的分区,则该项内容应填写为占用该分区的作业名称。

“空闲分区表”和“已分配分区表”见下表:

分区起始地址分区长度标志

0x6c74d300 64 0

0x6fd5ca00 108 1

…………

在本实验中,因为主要侧重于分区的管理,所以对登记分区情况的表格,使用了结构体数组这一简单的数据结构,但是初始化数组的时候,数组元素的个数一定要足够多。在现实中,登记分区情况的表格使用的是以结构体为元素的顺序链表,有能力的同学也可以在完成本实验后继续探索。

在编写程序当中,还需要注意以下几个问题。

(1)对与分配主存空间的算法,我们采用最优适应算法,该算法将按照作业要求挑选一个能满足要求的最小空闲分区分配。

(2)主存空间的回收中,要注意在可变分区方式下,除了要修改“空闲分区表”和“已分配分区表”外,还需要将回收的主存空间与可能的相邻空闲空间予以合并。

【实验内容】

编写程序,由必要的数据结构、主函数、主存分配函数和主存回收函数构成。实现在可变分区管理方式下,采用最优适应算法对主存分配与回收的模拟。

在主存分配函数中,要求实现的基本功能操作:寻找空闲分区,空闲分区表的修改,已分配分区表的修改。其中,若寻找到的最小适合空间相对作业请求的空间来说仍过大,则要分割该分区。

在主存回收函数中,要求实现的基本功能操作:回收作业释放的分区、修改已分配分区表、修改空闲分区表。其中,若回收的分区有上邻空闲分区或(和)下邻空闲分区的,要合并成为一个空闲分区,登记在空闲分区表的一个表项里。

【数据结构设计参考】

#define n 20 //模拟实验中,允许的最大作业数目

#define m 20 //模拟实验中,允许的最大空闲分区数目

#define minisize 100 //分配分区时,若寻找到的最小适合空间相对作业请求的空间来说

仍大于该数值,则要分割该分区

struct

{

float address; //已分配分区起始地址

float length; //已分配分区长度,单位为字节

int flag; //已分配分区表的标志项

}used_table[n]; //已分配分区表

struct

{

float address; //空闲分区起始地址

float length; //空闲分区长度,单位为字节

int flag; //空闲分区表的标志项

}free_table[m]; //空闲分区表

【进一步设计要求】

有能力的同学,可以将登记分区情况的结构体数组,改成采用链表结构,实现空间的合理利用,减少因为定长数组带来的内存浪费。

设计题目4 独占设备的分配回收模拟系统

【实验目的】

1.对理论课中学习的设备管理的概念做进一步的理解;

2.了解设备管理任务的主要实现方法;

3.通过编程学会独占设备的分配、回收等主要算法的原理。

【实验基本要求】

在操作系统当中,对于独占设备,通常使用静态分配方式,就是在一个作业执行准备其间,将该作业所需要使用到的设备分配给作业,在该作业执行其间这个设备归该作业占

用,直到作业执行结束才归还给系统。此实验中,就要通过模拟方法来实现简单的独占设备的分配和回收。

在操作系统中,通过设置”设备分配表”,用来记录计算机系统所配置的独占设备的类型,数量以及分配情况等。为了实现设备分配,回收过程的独立性,设备分配表一般由”设备类表”和”设备表”两部分组成。

“设备类表”记录了系统中的各类设备,每类设备占用一个登记项,登记该类设备的总数量,当前有几台空闲设备和该类设备在设备表中的起始地址。每一台设备在”设备登记表”中占用一个登记项,同类的若干台设备连续登记在设备表中。设备表中登记每一台设备的绝对号,设备的好坏使用情况,设备是否分配,设备是被哪一个作业占用和设备相对号。在该模拟实验中,设备类表和设备表均采用结构型的数据类型表示,在设备表中,用”1”表示设备好,用”0”表示设备设备坏,用”1”表示设备已分配,用”0”表示设备空闲。设备类表和设备表的内容和数据结构见下表。

设备类表结构

设备类拥有设备数量现存好的设备数量设备表起始地址

printer 3 2 16

……………………

设备表结构

绝对号好/坏已/未分配占用作业名相对号

116 1 1 job1 2

…………………………

在作业申请某台设备时,系统先查”设备类表”,如果该类设备的现存可使用数量可以满足申请要求,则从”设备类表”中得到该类设备的设备表起始地址,然后找到”设备表”中该类设备的起始地址,一次查询该类设备的每个登记项,找出”好的且未分配”的设备分配给该作业。分配后要修改设备类表中的现存设备数量,把分配给该作业的设备状态更改为”已分配”,且填上占用该设备的作业的作业名和程序中定义的相对号,最后,被设备的绝对号与相对号的对应关系通知用户。

当作业运行完成,释放设备时。系统首先要查看设备表,比较每一项,找到占用作业名与运行完作业的作业名相同的栏目,将这一栏的”已/未分配”设置为”未分配”(即设置为”0”),然后将设备表中对应设备类的”可使用数量”增加1。

【数据结构设计参考】

struct{

char type[10]; //设备类名

int count; //拥有设备数量

int remain; //现存的可用设备数量

int address; //该类设备在设备表中的起始地址

}equip_type[n]; //设备类表定义,假设系统有n个设备类型

struct{

int number; //设备绝对号

int status; //设备状态可否使用

int remain; //设备是否已分配

相关文档
最新文档