逻辑地址与物理地址

某计算机系统页面大小为4K,进程的页面变换表如下所示。若进程的逻辑地址为2D16H。该地址经过变换后,其物理地址应是()

第一步,先将系统页面大小按字节单位byte化成二进制,那么4*1024=4096

在这里插入图片描述
例子:4K,4096/16=256,余数为0    记录一个0

256/16=16,余数为0          记录一个0

16/16=1,  余数为0         再记录一个0    最后结果为1.

那么从最后的结果记录十六进制得出结果:1000!然后化成二进制,0001  0000  0000  0000  一共有12个0

这里的4K转成二进制的12个0,就代表了逻辑地址的后12位,是页内偏移量。

第二步:把逻辑地址  2D16H  转成二进制如下:

0010  1101  0001  0110    这里的后12位取出来!

前4位二进制化成的十进制对应页号    0010  对应页号2,物理块号4!化成二进制是:0100

第三步:把上面物理块号二进制作为物理地址的开头二进制!把逻辑地址的后12位取出来,作为物理地址的后12位!组合如下:

0100  1101  0001  0110  化成16进制的物理地址是:4D16H

—————————————————————————————————————————————————————————————————

某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时一用户页表中已调入内存的页面的页号和物理块号的对照表如下:

在这里插入图片描述
则逻辑地址  0A5C(H)  所对应的物理地址是什么?

分析:这道题有多种方法计算结果,这里还是沿用上面的方法来计算!需要留意的是每个页面的大小,以及逻辑地址

页面大小1K即是1024的二进制表示为:  0100  0000  0000  这里一共有10个0!取逻辑地址的后10位作为物理地址的实际地址

逻辑地址的二进制为:  0000  1010  0101  1100  后10位是:  10  0101  1100

逻辑地址的剩余位是:  000010  前面多余的2位0可以省略,化成十进制为2,页号2对应物理块号  11

物理地址块号11直接化成二进制是:  1011

将块号的二进制以及逻辑地址的后10位拼在一起是:  1011  10  0101  1100  中间不够4位,前面的向后移,前面不够4位,直接加0!!那么,真正的逻辑地址二进制是:  0010  1110  0101  1100  化成十六进制是:2E5CH

总结一下里面经历过的进制转换:

1:页面大小K化成字节即是乘以1024,再化成二进制。看里面的0的个数,这里假设为n个

2:逻辑地址的后n位置取出来作为物理地址的后n位的真实地址,逻辑地址的剩余位化成  十进制  对应页号表

3:页号表对应的物理块号是  十进制  ,化成二进制作为物理地址的开头

4:将整个物理地址拼好,将二进制换算成十六进制

5:特别注意,如果剩余N位的十进制超出表给出的页号表,则为超出范围。要么是超出范围,要么是你算错了!

6:有的计算题给的页面单位为:M!!,这里的单位是  K  !!请仔细注意换算后有多少个0

7:计算地址必须仔细看参数!最重要的参数是:每页面的大小单位K 而且必须要化成字节(byte)才能换算!即是要乘以1024

—————————————————————————————————————————————————————————————————

分页式存储管理系统中,主存容量为1M
假定某采用分页式虚拟存储系统中,主存储容量为1M,被分为256份,某作业的地址空间占4页,页号为0,1,2,3,被分配要主存的第2,4,1,5块中,回答

(1)主存地址应该用是____位来表示

(2)作业每一页的长度为_____,逻辑地址中的页内地址(单元号)占用____位

分析:主容量为1M!而且被分成256份!那么先把M化成k吧!

1*1024=1024K  1024K被分成256份,那么每一份的大小为:1024除以256=4K  问题(2)中的每页长度为4K,然后4K换算成二进制即是212次方!12个0!!这里的页内地址是术语,意思即是对应物理地址的真实二进制地址!即是后面的12位。问题(2)中的答案为占用了12位

1024K*1024=1048576Byte  这个时候再换算成二进制!即是220次方,有20个0!问题(1)中的答案为  20

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 C/C++ 中实现基本分页系统的逻辑地址物理地址之间的转换,需要以下步骤: 1. 首先需要了解分页系统的工作原理。在分页系统中,逻辑地址由页号和页内偏移量组成。页号对应了虚拟内存中的一个页面,而页内偏移量对应了页面内的偏移量。 2. 使用页表来存储虚拟内存中的页面与物理内存中的帧之间的映射关系。页表是一个二维数组,其中的每一行对应了一个页面,每一列对应了一个帧。 3. 读取逻辑地址的页号部分,使用它来索引页表,找到对应的帧号。 4. 将帧号和页内偏移量相加,得到物理地址。 下面是一个示例代码,它实现了基本分页系统的逻辑地址物理地址之间的转换: ```c++ #include <iostream> // 页表,表示虚拟内存中的页面与物理内存中的帧之间的映射关系 int page_table[10][10]; // 转换函数,将逻辑地址转换为物理地址 int logical_to_physical(int logical_address) { // 页号 int page_number = logical_address / 10; // 页内偏移量 int ### 回答2: 基本分页系统是一种常用的内存管理技术,将逻辑地址转换为物理地址是其中一个重要的操作。 在C/C++编程语言中,可以使用指针和位运算来实现逻辑地址物理地址的转换。 首先,需要定义合适的数据结构表示页表。页表可以使用数组来实现,每个数组元素表示一个页表项,包含页号和对应的物理地址。 接下来,需要实现一个函数来进行地址转换。可以定义一个名为`translateAddress()`的函数,其参数包括逻辑地址、页表以及页表大小。 在函数内部,首先通过对逻辑地址进行位运算,获取页号和偏移量。然后根据页号在页表中查找对应的页表项,获取物理地址。 最后,将物理地址与偏移量相加,得到最终的物理地址。将物理地址返回即可完成逻辑地址物理地址的转换。 以下是一个简单的C代码实现示例: ```c #include <stdio.h> struct PageTableEntry { int pageNum; int physicalAddr; }; int translateAddress(int logicalAddr, struct PageTableEntry pageTable[], int pageSize) { int pageNum = logicalAddr >> 10; // 假设页大小为1024 int offset = logicalAddr & 0x3FF; // 假设页大小为1024 for (int i = 0; i < pageSize; i++) { if (pageTable[i].pageNum == pageNum) { return (pageTable[i].physicalAddr + offset); } } return -1; // 未找到对应的物理地址 } int main() { struct PageTableEntry pageTable[4] = { {0, 0x1000}, {1, 0x2000}, {2, 0x3000}, {3, 0x4000} }; int logicalAddr = 0x1234; int physicalAddr = translateAddress(logicalAddr, pageTable, 4); printf("Logical Address: 0x%X, Physical Address: 0x%X\n", logicalAddr, physicalAddr); return 0; } ``` 以上代码中,我们创建了一个包含4个页表项的页表,并定义了一个假设的逻辑地址`0x1234`。通过调用`translateAddress()`函数进行地址转换,最后输出逻辑地址物理地址。在实际使用中,可以根据需求进行适当的修改和扩展。 ### 回答3: 在C/C++编程中,可以通过一些计算来实现基本分页系统的逻辑地址物理地址的转换。 首先,我们需要了解分页系统的一些基本信息,例如分页大小、逻辑地址格式等。假设每页大小为4KB,逻辑地址由32位组成,其中高20位表示页号,低12位表示页内偏移量。 在程序中,可以定义一个页表数组来存储每个页号对应的物理页框号。假设页表数组为page_table,那么page_table[page_number]就可以得到对应的物理页框号。 转换逻辑地址物理地址的过程可以分为两步: 1. 提取逻辑地址中的页号和页内偏移量。通过对逻辑地址进行位移和与运算操作可以得到页号和页内偏移量。具体操作为: - 页号 = (逻辑地址 >> 12) & 0xFFFFF - 页内偏移量 = 逻辑地址 & 0xFFF 2. 将页号替换为对应的物理页框号。通过访问页表数组获取到对应的物理页框号,然后将物理页框号与页内偏移量进行运算得到物理地址。具体操作为: - 物理地址 = (page_table[页号] << 12) + 页内偏移量 最后,将计算得到的物理地址返回给调用者。 需要注意的是,在实际的操作系统中,分页系统的逻辑地址物理地址的转换过程可能更为复杂,例如还需要考虑地址的保护、页表的维护等问题。此处只是给出了一个简单的示例,供参考。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值