《操作系统原理》实验报告四

本文详细介绍了在Windows和Linux环境下实现页面替换算法(OPT、FIFO、LRU)的过程,以及验证Linux虚拟地址到物理地址转化的实验。通过编写程序,观察不同算法的命中率和在Windows下的耗时比较,加深了对操作系统内存管理和程序执行的理解。同时,实验过程中遇到的错误和解决方法也提供了宝贵的经验教训。
摘要由CSDN通过智能技术生成

一、实验目的
(1)理解页面淘汰算法原理,编写程序演示页面淘汰算法。
(2)验证 Linux 虚拟地址转化为物理地址的机制
(3)理解和验证程序运行局部性的原理。

二、实验内容
(1)在Windows环境下编写一个程序,模拟实现OPT,FIFO,LRU等页面淘汰算法。可以使用数组模拟内存,数组中的元素模拟为指令或数据。写不同方式的程序去 访问数组来模拟 CPU 访问内存的情况。分析运算结果,在分配不同的物理块情况下, 各算法的缺页情况有什么规律?可以 srand( )和 rand( )等函数定义和产生“指令”
序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的
命中率。 例如,实验中可以产生 320 条“指令”,每个“虚拟页”存放 10 条指令。 进程分配的页框是 4(可变,例如 32)。
(2)在 Linux 环境下,编写一个小程序,获取该程序中的某个变量的虚拟地址,
虚拟页号,页内偏移地址,物理页框号,页内偏移地址,物理地址,并将它们打 印出来。建议使用/proc/pid/pagemap 技术。
(3)在Windows 环境下,编写一个函数(特点:比较耗时,比如大型的多维数
组读写),用不同的方法测试其所花费的时间。在不同环境下比较其时间是否不同,并分析其含义。测量时间的函数请 baidu。

三、实验过程
(一)实验步骤
1)模拟实现OPT,FIFO,LRU等页面淘汰算法(Windows)
1.定义内存帧,指令序列,引用串,内存容量,虚拟内存容量;

1.		#define MAX_VIR_SIZE 64  
2.	#define MAX_MEM_SIZE 32  
3.	#define VIR_NO 2  
4.	#define MEM_NO 3  
5.	#define FALSE -1  
6.	  
7.	int mem_frame[MAX_MEM_SIZE];        //内存帧   
8.	  
9.	int instruction[MAX_VIR_SIZE * 10];   //指令序列   
10.	int reference[MAX_VIR_SIZE * 10];     //引用串   
11.	  
12.	int mem_size[MEM_NO] = {
    4, 18, 32 }; //内存容量   
13.	int vir_size[VIR_NO] = {
    32, 64 };    //虚存容量   
  1. 初始化页地址流,指令序列全为-1,引用串全为-1;
  2. 产生页地址流
1.	int generate_page(int vsize)  
2.	{
     
3.	    srand((unsigned)time(NULL)); /*播种子*/  
4.	    //产生指令序列   
5.	    for (int i = 0; i < vsize * 10; i += 5) {
     
6.	        instruction[i] = rand() % (vsize * 10 - 1);  
7.	        instruction[i + 1] = instruction[i] + 1;  
8.	        instruction[i + 2] = rand() % instruction[i + 1];  
9.	        instruction[i + 3] = instruction[i + 2] + 1;  
10.	        instruction[i + 4] = rand() % (vsize * 10 - instruction[i + 3] - 2) + instruction[i + 3] + 1;  
11.	    }  
12.	  
13.	    //将指令序列变换为对应的页地址流  
14.	    for (int i = 0; i < vsize * 10; i++)  
15.	        instruction[i] /= 10;  
16.	  
17.	    reference[0] = instruction[0];  
18.	  
19.	    int base = 0, j = 1;  
20.	    for (int i = 1; i < vsize * 10; i++) {
     
21.	        if (instruction[i] != instruction[base]) {
     
22.	            reference[j] = instruction[i];  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值