u014285517的专栏

博客转移至:http://zsxwt.me/(已弃,将陆续把该博客的文章转移回CSDN)

程序模拟分页系统的地址变换过程

注:下面分析都是建立在基本分页存储管理方式的基本地址变换机构基础之上的。

题目:

某系统程序空间与物理空间都是2GB,页面大小为4KB。已知某进程的页表如下,请编写程序模拟分页系统的地址变换过程。


其实就是实现下逻辑地址到物理地址的转化。

下面的图说明了上面页表的作用(表左边用户程序对应了逻辑地址,右边内存对应着物理地址):

下面是页号和页内地址的计算公式(上面的图没反应页内地址):

页号P和页内地址d的计算公式
– P=INT [A/L] INT:整除函数
– d=[A] % L %:取余
–A:逻辑地址空间中的地址,L:页面大小


其实这也算不上什么公式,想想理所当然的嘛。。。

我们又知道:

内存空间被划分为与页面等长的若干区,称为物理块或页框。如下图:



不难进而得出物理地址 = 块号*页面大小 + 块内地址 = 块号*页面大小 + 页内地址

结合上述分析不难得出模拟程序为:

#include<stdio.h>

int pageTable[10]={32102,443217,6723,8985,11238,
29065,234205,45812,240561,300451};

//页面大小 
#define PageSize 4096

//传入参数:逻辑地址(假设输入合法) 
int formulaMethod(int logicalAddress) {
	//页号 
	int P = logicalAddress/PageSize;
	//页内地址
	int d = logicalAddress%PageSize;
	//块号 
	int Fno = pageTable[P]; 
	//返回计算所得的物理地址 
	return Fno*PageSize + d; 	 
}

int main() {
	int logicalAddress;
	printf("请输入逻辑地址:");
	scanf("%d",&logicalAddress); 
	printf("物理地址为:%d\n",formulaMethod(logicalAddress)); 
}






阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014285517/article/details/50099517
个人分类: 操作系统
上一篇Add Two Numbers
下一篇Longest Substring Without Repeating Characters
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭