操作系统实验:虚拟存储器 (C语言实现) 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。

本文通过详细介绍如何在模拟环境中实现分页式虚拟存储管理的地址转换、触发缺页中断,并利用先进先出(FIFO)页面调度算法处理中断,展示了内存管理和中断处理的基本原理。代码示例和运行结果展示了整个过程的操作和处理机制。

一实验内容:

模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺 页中断。


二.实验题目:

模拟分页式存储管理中硬件的地址转换和产生缺页中断。

用先进先出(FIFO)页面调度算法处理缺页中断。

由于是模拟调度算法,所以,不实际启动输出一页和装入一页的程序,而用输出调 出的页号和装入的页号来代替一次调出和装入的过程。


三.代码实现:

指令集包括pageNumber(页号) ,offset(单元号), operation(操作)三个成员组成,本次程序初始化指令集如下图所示:(该表已在“void Order_init() ”函数中预写入)

注:初始化(initial)时默认上表的0-3号页面已装入主存,且使用了内存块的第1,5,8,9块(Memory_used[Mnum])。

#include<stdio.h>
#include<stdlib.h>

#define Pnum 7 //页表长度
#define Mnum 10 //主存块数
#define Onum 12 //指令集总数

struct Page_table 
{
	int pageNumber; //页号
	int memoryBlock; //主存块号
	int flag;  //标志位 0表示页不在主存 1表示页在主存
	int diskLocation; //磁盘位置
}page_table[Pnum];

struct Order_table
{
	int pageNumber;//页号
	int offset; //单元号
	char operation; //操作
}Order_table[Onum];
  
int before_page = -1;//保存被FIFO算法置换出的页号
int Memory_uesd[Mnum] = {1,0,1,1,1,0,1,1,0,0}; //数组下标表示块号,对应值为0表示未使用,
												//1模拟被非页占用 2模拟内存分配给模拟作业的块数,本次模拟分配4块,块号依次为1,5,8,9
int Memory_list[4] = { 0,1,2,3 }; //表示已被装入内存的页号,共四个位置,初始默认0,1,2,3页已装入 若未装入,则用-1占位
void show_page_table() //打印当前页表
{
	printf("【页表】:\n");
	int i = 0;
	for (i; i < Pnum; i++)
	{
		printf("页号:%d", page_table[i].pageNumber);
		printf("  块号:%2d", page_table[i].memoryBlock);
		printf("  标志位:%d", page_table[i].flag);
		printf("  磁盘位置:%.3d\n", page_table[i].diskLocation);
	}
	printf("\n");
}

void show_Memory_list() //打印已装入内存的页及其对应在内存中的块号
{
	int i = 0;
	for (i; i < 4; i++)
	{
		if (Memory_list[i] != -1)
		{
		printf("【%d】:第%d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值