将虚拟地址的逻辑地址转换为物理地址
Translating logical to physical addresses for a virtual address
我目前正在从事一个将逻辑地址转换为物理地址的项目。问题是:
该项目包括编写一个程序,将虚拟机的逻辑地址转换为物理地址2^16的地址空间=65536字节。您的程序将从包含逻辑地址,并使用TLB和页表,将每个逻辑地址转换为对应的物理地址,并输出存储在转换后的物理地址的字节的值住址确保您的程序使用快速操作,如左/右移运算符。
说明:您的程序将读取包含几个32位的文件表示逻辑地址的整数。但是,您需要只关心16位地址,因此必须屏蔽每个逻辑地址的最右边16位。这16位被划分转换为(1)8位页码和(2)8位页面偏移
我已经做了一些研究,并开发了以下代码,然而,我知道我不会转移页面并丢弃正确数量的比特。我得到了一些示例I/O,目前我的代码给出了错误的答案。如有任何帮助,我们将不胜感激。
编辑:示例I/O
Virtual address: 16916 Physical address: 20 Virtual address: 62493 Physical address: 285 Virtual address: 30198 Physical address: 758
#define MASK_BITS(x) ((x) & (unsigned int)0x0000FFFF)
unsigned long long int MapAddress(unsigned long long int address){
unsigned long long int page = MASK_BITS(address);
unsigned long long int offset = MASK_BITS(address);
printf("The mapped address %llu contains:n", address);
page = page >> 13;
printf("Page Number : %llun", page);
offset = offset & 0x1FFF;
printf("Offset = %llunn", offset);
return 0;
}
void myFunction()
{
FILE *fp = fopen("/PATH/TO/addresses.txt", "r");
char buffer[32];
unsigned long long int x;
int cnt = 1;
while(!feof(fp)){
fscanf(fp, "%s", buffer);
x = atol(buffer);
MapAddress(x);
cnt++;
}
fclose(fp);
return;
}
指令说地址被拆分为8位页面和偏移量,但您的代码使用的是13位而不是8位。您需要偏移8位才能得到页码,并屏蔽较低的8位才能获得偏移量。
unsigned long long int MapAddress(unsigned long long int address){
address = MASK_BITS(address);
printf("The mapped address %llu contains:n", address);
unsigned long long int page = address >> 8;
printf("Page Number : %llun", page);
unsigned long long int offset = address & 0xFF;
printf("Offset = %llunn", offset);
return 0;
}
相关文章:
- 无法将内存地址转换为值
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 将Wiimote MAC地址转换为PIN码,从C++转换为Python或Javascript
- 将函数的地址转换为UINTPTR_T给我不正确的结果
- 如何确保QFile写入相同的物理地址?
- 使用 ITK 将物理点转换为索引
- 将IP地址转换为单个数字
- 将地址转换为Python GDB中的特定类型
- 编译器如何知道物理地址的对齐方式
- C/C++ 中的奇怪地址转换
- 将虚拟地址的逻辑地址转换为物理地址
- 如何将二进制 IPv6 地址转换为十六进制
- C++如何将 IP 地址转换为字节
- 是否可以访问物理地址0
- 将函数地址转换为 64 位整数:未定义/行为不当
- dll-IAT中的指针-物理地址
- 将字符串Mac地址转换为字节数组
- 将指向函数的指针数组作为"int"参数传递是否可以将地址转换为整数?
- 如何在c++中将char*指针地址转换为int
- 正确地将int型地址转换为char指针