操作系统experiment3

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

实验2 存储管理
1. 实验目的
存储管理的主要功能之一是合理地分配空间,请求页式管理式一种常用的虚拟存储管理技术。

本实验的目的是通过请求页式管理中页面置换算法的模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

2. 实验内容
(1) 通过随机数产生一个指令序列,共320条指令,指令地址按下述原则生成
①50%的指令是顺序执行;
②25%的指令是均匀分布在前地址部分;
③25%的指令是均匀分布在后地址部分;
具体的实施方法是
①在[0, 319] 的指令地址之间随机选取一起点m ;
②顺序执行一条指令,即执行地址为m+1 的指令;
③在前地址[0, m+1] 中随机选取一条指令并执行,该指令的地址是m’;
④顺序执行一条指令,其地址为m’+1 ;
⑤在后地址[m’+2, 319] 中随机选取一条指令并执行;
⑥重复上述步骤①~⑤,直到执行320次指令。

(2) 将指令序列变为页地址流
设:①页面大小为1K ;
②用户页面内存容量为4页到32页;
③用户虚存容量为32K 。

在用户虚存中,按每K 存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0, 9]);
第10条~第19条指令为第1页(对应虚存地址为[10, 19]);
……
……
第310条~第319条指令为第31页(对应虚存地址为[310, 319]);
按以上方式,用户指令可组成32页。

(3) 计算并输出下述各种算法在不同内存容量下的命中率
①First-In-First-out (FIFO) Page Replacement
②Least-Recently-Used (LRU) Page Replacement
③Optimal Page Replacement
其中③和④为选择内容
页地址流长度
页面失效次数-命中率= 1
在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。

3. 随机数的产生方法
关于随机数产生的办法,Linux 或者Unix 系统提供函数srand()和rand(),分别进行初始化和产生随机数。

例如
srand(getpid() * 10); /* 用进程号作为“种子”初始化随机数序列*/
语句可初始化一个随机数;
Rf = (X * rand()/(RAND_MAX+1.0));
语句可用来产生 [0, (X-1)] 中的随机数。

Ri = (int) (X * rand()/(RAND_MAX+1.0));
语句可用来产生 [0, (X-1)] 中的随机整数。

4. 数据结构定义范例
本实验模拟虚拟存储区和内存工作区,其相关可定义如下:
(1) 页面结构 /* that is the page table of processes */
typedef struct {
int pn, pfn, counter, time;
} pl_type;
pl_type pl[total_vp]; /* 页面结构数组 */
其中pn 为page number ,pfn 为frame number ,counter 为一个周期内访问该页面的次数,time 为访问时间。

(2) 页面控制结构
struct pfc_struct {
int pn, pfn;
struct pfc_struct *next;
};
typedef struct pfc_struct pfc_type;
pfc_type pfc[total_pf] ;
pfc_type *freepf_head, *busypf_head, *busypf_tail ;
其中pfc[total_pf] 定义用户进程页面控制结构数组,
*freepf_head为空页面头指针,
*busypf_head为忙页面头指针,
*busypf_tail 为忙页面尾指针。

(3) 变量定义
int a[total_instruction]; /* 指令流数据组*/
int page[total_instruction]; /* 每条指令所属页号*/
int offset[total_instruction]; /* 每条指令的页内偏移值*/
int total_pf; /* 用户进程的内存页面数,根据题意是4<= total_pf <= 32 */ int disaffect; /* 页面失效次数*/
说明:这些数据结构和变量定义仅是一种参考。

相关文档
最新文档