我正在学习C语言中的位运算符,现在我正在开发一个带有FIFO替换算法的页面模拟器来处理操作系统学科,并遇到了使用位运算符的困难。
SIZE PAGE 1024 // 1024 bits == 128 BYTES
PHYSICAL MEMORY SIZE 10 // 10 bits (PHYSICAL)
VIRTUAL MEMORY SIZE 16 // 16 bits (VIRTUAL)
NUMBER PHYSICAL PAGES 8 // 8 FRAMES
NUMBER OF VIRTUAL PAGES 512
如果我们有16位虚拟内存,那么逻辑地址范围为0到65535 ((2^16) -1)。因此,我们将有9位用于地址和7位用于数据。
以数字546 (0000 0010 0010 0010)为例:
Page Number | Offset
0000 0010 0 | 010 0010
&1111 1111 1 | 000 0000
0000 0010 0 | 000 0000
so, using right shift >> I get the value of the address.
重要的是考虑页面编号,偏移量将没有用处。我试图通过文本操作来解决这个问题,但由于没有考虑前导零,这会导致问题,在使用int和位运算时将是正确的。我找到了一个执行提取的示例,但即使进行必要的更改后仍然出现问题,这里是链接:点击这里。
void extract_fields(unsigned int address){ ... }
如果有人能帮我,因为我不确定如何根据地址应用位掩码,请非常感谢,我相信这将对很多人有所帮助,因为疑问是一件经常发生的事情,也是出于学术目的。
0000 0010 0010 0010
开始,并将其分成9位和7位的块。 - user3386109