操作系统实验四

目录

1.引言

术语

2.前提说明

3.算法功能概述

OPT

FIFO

LRU

clock

PBA

4.关键数据结构

OPT\LRU

FIFO

CLOCK

PBA

访问序列与内存块等

5.主要算法

OPT

LRU

FIFO

CLOCK

PBA

随机序列

6.接口设计

7.实验结果

给定页面访问序列(64)各算法发生页面置换次数的平均值

不同的页面访问序列(128000)缺页率、算法开销(内存块=6)

不同的虚拟内存尺寸缺页率、算法开销

结论

8.附件

代码地址

参考文档


1.引言

本文档为实验四页面置换算法实验报告。其中2-6为概要设计,7为实验结果,8为附件。

术语

序号

用語

説明

1

OPT

最佳置换算法

2

FIFO

先进先出算法

3

LRU

最久最近未使用算法

4

CLOCK

改进型clock算法

5

PBA

页面缓冲算法

 

2.前提说明

模拟的虚拟内存的地址为16位,页面大小为1K。模拟的物理内存有32K。实验中为了测试会进行改动。

缺页率 = 缺页中断次数/页面访问次数。不计入为空时第一次存入。

3.算法功能概述

OPT

基本思想

选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存

评价

理想化算法,具有最好性能(对于固定分配页面方式,本法可保证获得最低的缺页率),但实际上却难于实现,故主要用于算法评价参照

FIFO

基本思想

选择最先进入内存即在内存驻留时间最久的页面换出到外存

进程已调入内存的页面按进入先后次序链接成一个队列,并设置替换指针以指向最老页面

评价

简单直观,但不符合进程实际运行规律,性能较差,故实际应用极少

LRU

基本思想

以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问的页面淘汰出内存

评价

适用于各种类型的程序,性能较好,但需要较多的硬件支持

clock

基本思想

① 从查寻指针当前位置起扫描内存分页循环队列,选择A=0且M=0的第一个页面淘汰;若未找到,转②

② 开始第二轮扫描,选择A=0且M=1的第一个页面淘汰,同时将经过的所有页面访问位置0;若不能找到,转①

评价

与简单Clock算法相比,可减少磁盘的I/O操作次数,但淘汰页的选择可能经历多次扫描,故实现算法自身的开销增大

PBA

基本思想

设立空闲页面链表和已修改页面链表,空闲页面链表同时用于物理块分配。

采用可变分配和基于先进先出的局部置换策略,并规定被淘汰页先不做物理移动,而是依据是否修改分别挂到空闲页面链表或已修改页面链表的末尾

当已修改页面链表达到一定长度如Z个页面时,一起将所有已修改页面写回磁盘,故可显著减少磁盘I/O操作次数

4.关键数据结构

页表用整数数组或结构数组来表示。

OPT\LRU

数组。具体见4.5。

FIFO

队列。因为stl中queue无法遍历,自定义。

typedef struct node

{

    int num;

    node* next;

} Node, *pNode;

typedef struct queue

{

    int n;

    pNode front;

    pNode rear;


} Queue, *pQueue; 

CLOCK

结构体

struct LNode

{

    int data;

    int flag;//访问位

    int modify;//修改位

}* nodes;

PBA

队列加链表。其中队列在FIFO数据结构基础上增加信息,共用。

typedef struct node

{

    int num;

    int flag;//访问位

    int modify;//修改位//PBA用

    node* next;

} Node, *pNode;

typedef struct queue

{

    int n;

    pNode front;

    pNode rear;


} Queue, *pQueue;//queue无法遍历

struct Link

{

    int num;//当前链表上的结点数

    Node* next;

};

Link idle;

Link modified;

访问序列与内存块等

页面访问序列串是一个整数序列,整数的取值范围为0到N - 1。页面访问序列串中的每个元素p表示对页面p的一次访问。

在宏定义中可修改序串长度及内存块数。

#define P 32    //物理内存块数

#define V 64   //虚拟内存块数

#define block 3 //分配内存块数

int* memo;//存储块

int access[V]; //访问序列

int lost = 0;//缺页数

int index = 0;//指示当前内存下标

5.主要算法

为计算开销使用了clock函数。

OPT

流程图

相关函数

void initMemo();//初始化存储空间,主要是设置分配空间的大小

bool isInMemo (int n); //指定页号是否已经在内存中

void testOptimal();//算法实现函数

LRU

流程图

相关函数

void testLRU();

void initMemo();

bool isInMemo (int n);

FIFO

流程图

相关函数

void initQueue (pQueue q);//初始

void push (pQueue q, int num);//

void pop (pQueue q);//

void destroy (pQueue q);//销毁

bool findInQueue (pQueue q, int num);//查

void testfifo();

void fifo (pQueue q, int num);//算法

CLOCK

流程图

相关函数

void testClock();

PBA

流程图

相关函数

void addToLink (int data, int type);

void emptyIdle();

void emptyModi();

void PBA (pQueue q,int num);

void testPBA ();

void initQueue (pQueue q);//初始

void push (pQueue q, int num);//

void pop (pQueue q);//

void destroy (pQueue q);//销毁

bool findInQueue (pQueue q, int num);//查

随机序列

流程

1.确定虚拟内存的尺寸N,工作集的起始位置p,工作集中包含的页数e,工作集移动率m(每处理m个页面访问则将起始位置p +1),以及一个范围在0和1之间的值t;

2.生成m个取值范围在p和p + e间的随机数,并记录到页面访问序列串中;

3.生成一个随机数r,0 ≤ r ≤ 1;

4.如果r < t,则为p生成一个新值,否则p = (p + 1) mod N;

5.如果想继续加大页面访问序列串的长度,请返回第2步,否则结束。

相关函数

void generate();//生成访问序列

6.接口设计

随着访问序列的移动,每一页调用一次相关接口进行页面置换,同时计算开销。

void testOptimal();

void testLRU();

void testfifo();

void testClock();

void testPBA ();

7.实验结果

结果界面如图,方便起见直接放表格。

给定页面访问序列(64)各算法发生页面置换次数的平均值

序列

OPT

LRU

FIFO

CLOCK

PBA

1

31

46

46

44

28

2

30

47

45

44

26

3

33

44

44

44

27

内存块=3时平均

31.33333

45.66667

45

44

27

4

22

22

24

27

23

5

22

24

25

27

24

6

16

19

20

20

16

内存块=6时平均

20

21.66667

23

24.66667

21

 

 

不同的页面访问序列(128000)缺页率、算法开销(内存块=6)

 

OPT

LRU

FIFO

CLOCK

PBA

序列

缺页率

算法开销ms

缺页率

算法开销ms

缺页率

算法开销ms

缺页率

算法开销ms

缺页率

算法开销ms

1

0.26033

4962

0.3602

12

0.3689

11

0.4244

10

0.2987

17

2

0.2028

3013

0.3269

10

0.338

10

0.3779

10

0.2268

17

3

0.2921

5930

0.3808

13

0.3871

11

0.4505

8

0.3074

18

平均

0.251743

4635

0.355967

11.66667

0.364667

10.66667

0.4176

9.333333

0.277633

17.33333

 

7-2-1 缺页率

 

7-2-2 算法开销(除OPT)

不同的虚拟内存尺寸缺页率、算法开销

过小(128)时算法开销较小,不计

 

OPT

LRU

FIFO

CLOCK

PBA

序列长

缺页率

算法开销ms

缺页率

算法开销ms

缺页率

算法开销ms

缺页率

算法开销ms

缺页率

算法开销ms

128000

0.26033

4962

0.3602

12

0.3689

11

0.4244

10

0.2987

17

12800

0.331

70

0.4045

2

0.4059

2

0.4832

1

0.3433

2

128

0.2578

 

0.3593

 

0.3828

 

0.4141

 

0.3438 

 

 

结论

1分配到内存块数越多,缺页率约小,置换次数越少。

2.最佳置换算法具有最好性能。但时间最久,可能是扫描了整个访问序列寻找最长时间不访问页面。

3.最近最久未使用置换算法与页面置换算法性能较好,尤其数据较大时PBA具有优越性。但可能与本实验设定的链表长度与算法逻辑有关。

4.改进型clock算法性能最差,但耗时较低,推测实现过程中对于是否修改的随机设定代码有待改进。

8.附件

代码地址

https://github.com/Woochy-Young/OS/tree/master/LAB4

参考文档

编号

文档名称

作者

1

页面置换算法

王飞

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值