闲逛的时候看到一些笔试题,可悲的是我第一个都不会...
"对于一个内存地址32位,内存页为8KB的系统,地址0x0005F123的页号和页内偏移地址是多少."
我一开始想把16进制的地址转换为10进制,再做一次除法取余数就完了。
但是太麻烦了,原来操作系统也讲过这个,可惜都还给老师了...
今天问了微机原理老师,好在老师比较给力,还记得怎么做...
先计算一下 一共2**32个地址,每个页2**13个地址,一共2**19个,
地址的二进制是 0000 0000 0000 0101 1111 0001 0010 0011
每个页的最大地址是 0000 0000 0000 0000 0010 0000 0000 0000
那么偏移地址就是 11 0001 0010 0011 - 10 0000 0000 0000.
页号就是0101 111 - 1 (因为页号从0开始)
如果换成10进制计算的话结果是一样的。
一开始我还反应不过来,为什么这样做,于是老师又举了个例子:
如果每个页是4个单位,那21号地址怎么算?
21 : 010 101
4 : 100
这样就好看了。
PS:虽然是一个小问题,但是还是可以延伸出很多东西,呵呵,
看来思维还是不行啊,总是想要按10进制看待计算机的问题就太麻烦了...
"对于一个内存地址32位,内存页为8KB的系统,地址0x0005F123的页号和页内偏移地址是多少."
我一开始想把16进制的地址转换为10进制,再做一次除法取余数就完了。
但是太麻烦了,原来操作系统也讲过这个,可惜都还给老师了...
今天问了微机原理老师,好在老师比较给力,还记得怎么做...
先计算一下 一共2**32个地址,每个页2**13个地址,一共2**19个,
地址的二进制是 0000 0000 0000 0101 1111 0001 0010 0011
每个页的最大地址是 0000 0000 0000 0000 0010 0000 0000 0000
那么偏移地址就是 11 0001 0010 0011 - 10 0000 0000 0000.
页号就是0101 111 - 1 (因为页号从0开始)
如果换成10进制计算的话结果是一样的。
一开始我还反应不过来,为什么这样做,于是老师又举了个例子:
如果每个页是4个单位,那21号地址怎么算?
21 : 010 101
4 : 100
这样就好看了。
PS:虽然是一个小问题,但是还是可以延伸出很多东西,呵呵,
看来思维还是不行啊,总是想要按10进制看待计算机的问题就太麻烦了...