阅读:2607回复:2
物理地址,线性地址,虚拟地址的区分到底有什么用?
硬件是只能用物理地址,应用程序使用虚拟地址,那么线性地址就是双方进行地址映射的一个过渡?从resource里读出的I/O地址范围,内存地址范围是什么地址?对于编驱动的人来说,我直接用它作为
portbase,然后加上偏移量就实现了对硬件的读写,并没有使用这些概念,那么这些概念究竟在哪起了什么作用呢?而且库里有一些进行这些地址转换的函数,在什么时候用呢? |
|
最新喜欢:changb...
|
沙发#
发布于:2001-06-13 20:49
[B]逻辑地址[/B]
当一个程序访问存储器而并不考虑操作方式和具体的物理硬件上的细节时,它所使用的地址就称为逻辑地址。程序通过处理器的存储管理机制将它所使用的逻辑地址转换成有效的存储器读写操作所需要的地址。在实地址模式下,逻辑地址称为分段地址。在保护模式下,逻辑地址称为虚拟地址。 [B]虚拟地址[/B] 在保护模式下,程序访问存储器所使用的两部分逻辑地址称为虚拟地址。对于同一个虚拟地址,在不同的时刻和不同的程序中有可能对应不同的物理存储器地址。 [B]线性地址[/B] 每个由两部分组成的实地址模式下的分段地址或保护模式下的虚拟地址最终将被转换成一个线性地址。线性地址是一个无符号数,它指出了在处理器的线性地址空间中所要访问的存储器的偏移量。在早期的CPU中,如8086、8088、80286中,线性地址与物理地址是相同的。从80386开始,在CPU中加入了分页部件,线性地址还要经过分页部件处理后才能转换成物理地址。 [B]物理地址[/B] 在存储器中,数据的物理地址是与最终被安排在处理器的地址总线管脚上的信号等价的数字。物理地址是逻辑地址转换的最终结果。 |
|
板凳#
发布于:2001-06-13 21:07
那么这些地址间的映射由什么决定呢?
好比应用程序要往硬件的mailbox0里写数据,假设mailbox0在localbus上的地址是0x0100.那么在resource中得到的portbase是不是就相当于localbus上的地址0x0000映射到了主机的portbase地址上了呢?portbase是不是主机上的物理地址呢?其实没有这些概念,照样可以调试,但我觉得应该有必要把这些概念搞清楚,请高手赐教。 其实问题的关键就是我不理解硬件的地址空间怎么和主机地址空间映射成功的。 另外I/O端口映射,和内存映射在本质上是没什么区别的(除了内存映射需要MmMapIoSpace外),而且一般内存映射还分成好几块,这是为什么呢?干脆就设一块大的也未尝不可啊。 |
|
|