Memory management 为什么16位地址和12位偏移量会导致4KB页面大小?

Memory management 为什么16位地址和12位偏移量会导致4KB页面大小?,memory-management,operating-system,virtual-memory,memory-mapping,Memory Management,Operating System,Virtual Memory,Memory Mapping,我正在读《现代操作系统》这本书。我对“页面大小”感到困惑 在书中,作者说 传入的16位虚拟地址为 拆分为4位页码,然后 12位偏移量。用4位表示 页码,我们可以有16页,和 用12位作为偏移量,我们可以 在一个 页面 为什么是4096字节?使用12位,我们可以在一个页面中寻址4096个条目,对吗。但是,一个条目是地址(在本例中,地址大小=16位)。所以我认为我们可以寻址4096(条目)*16(位)=4096(条目)*2(字节)=8KB,但为什么书中说我们可以寻址4096(字节) 提前感谢!:)

我正在读《现代操作系统》这本书。我对“页面大小”感到困惑

在书中,作者说

传入的16位虚拟地址为 拆分为4位页码,然后 12位偏移量。用4位表示 页码,我们可以有16页,和 用12位作为偏移量,我们可以 在一个 页面

为什么是4096字节?使用12位,我们可以在一个页面中寻址4096个条目,对吗。但是,一个条目是地址(在本例中,地址大小=16位)。所以我认为我们可以寻址4096(条目)*16(位)=4096(条目)*2(字节)=8KB,但为什么书中说我们可以寻址4096(字节)


提前感谢!:)

这是假设字节寻址内存(过去30年几乎每台机器都使用字节寻址内存),因此每个地址都引用一个字节,而不是一个条目或地址或任何其他较大的值。要保存16位的值,需要两个连续的地址(两个字节)


30多年前,曾经有一些机器是用文字来称呼的,工作起来就像你猜想的那样。但这类机器在处理面向字节的数据(如ASCII字符)时遇到了困难,因此不再受欢迎。如今,字节可寻址性、8位字节和2位补码整数等基本上都是假设的。12位是一页中的偏移量。偏移量以字节为单位,而不是以地址为单位。2^12是4096。

您计算的是页面大小,即内存中页面表中页面的大小。当我们使用12位作为偏移量时,物理内存中的每一帧都是2^12=4096K。但是,页表中的每一页占用内存中的2^12个条目x 2字节=8K。

好的,那么您有16位虚拟地址,让我们看看它是什么意思。这意味着您有2**16=65536字节

4位页码,表示有16页,如2^4=16 现在您将这些页面命名为第1页、第2页……第16页

现在我们只剩下12位,让我们看看12位可以代表多少地址2**12=4096字节


65536字节也可以通过将其划分为16个页面来实现,每个页面包含4096字节,分别为4096*16=65536

,因为使用12位,我们可以寻址
2^12=4096
插槽。每个插槽代表一个地址,其大小为字节可寻址内存中的1字节。因此,总大小是4096*1=4096字节=4KB。

我在70年代和80年代在一个大型主机上工作,这个主机是word寻址的。他们提供了一个选项,可以添加硬件,允许您直接寻址字节或BCD字符。非常感谢。这个答案消除了我在作业中遇到的许多不确定性。目前有一些处理器使用字寻址,但它们都倾向于专门的嵌入式类型,如数字信号处理器(DSP)。我曾经参与过一个项目,其中最小的可寻址单元是16位。在那台机器上,sizeof(char)==sizeof(int)==1。对于字符串来说,这是一种浪费,但是这个应用程序对8位数据的使用非常有限,所以浪费不是问题。