当前位置: 技术问答>linux和unix
相同线性地址映射到的物理内存应该是不一样吧?
来源: 互联网 发布时间:2017-04-02
本文导语: 不同进程相同线性地址映射到物理内存相同吗?如何映射的? 不同进程中有3G的用户空间,3G用户空间的线性地址表示应该是一样吧?也就是0x000000000~0xbffffffff 但,不同进程映射的物理内存肯定是不一样的; 也就是说相同的...
不同进程相同线性地址映射到物理内存相同吗?如何映射的?
不同进程中有3G的用户空间,3G用户空间的线性地址表示应该是一样吧?也就是0x000000000~0xbffffffff
但,不同进程映射的物理内存肯定是不一样的;
也就是说相同的线性地址如:0x08040000映射到的物理页应该是不一样的,这是如何做到的?如何映射?
|
物理内存必须不一样,一个程序开两个各自都运行的好好的,不会冲突吧?
原理就是楼上说的分页机制了。
原理就是楼上说的分页机制了。
|
不一定
貌似如果是共享的代码段或者数据段,还是有可能一样的吧
貌似如果是共享的代码段或者数据段,还是有可能一样的吧
|
共享的代码段,他们用的应该是同一个线性地址吧,struct vma_area中的 user_count可以说明这个问题
|
分页机制不是一两句话说清楚的,涉及硬件MMU,内核,具体的还是要去看书,看代码。
同一个线性地址当然可以映射到不同的物理地址,但是也可以映射到相同的物理地址。
这个全靠发生缺页中断时,内核设置页表,MMU从页表查到线性地址对应的物理地址得来。
当然MMU不一定要从内存中查找页表,也可能从TLB中。
同一个线性地址当然可以映射到不同的物理地址,但是也可以映射到相同的物理地址。
这个全靠发生缺页中断时,内核设置页表,MMU从页表查到线性地址对应的物理地址得来。
当然MMU不一定要从内存中查找页表,也可能从TLB中。
|
可以去看下分页机制。分页机制实现了相同的线性地址映射到不同的物理空间
|
共享的代码段,他们用的应该是同一个线性地址吧
他们用的是同一个物理地址。
不同进程相同线性地址映射到物理内存相同吗?如何映射的?
不同进程中有3G的用户空间,3G用户空间的线性地址表示应该是一样吧?也就是0x000000000~0xbffffffff
但,不同进程映射的物理内存肯定是不一样的;
也就是说相同的线性地址如:0x08040000映射到的物理页应该是不一样的,这是如何做到的?如何映射?
每一个进程都有自己的页表。进程根据页表把线性地址转换为物理地址。如果此页不在内存会发生缺页中断,把该页调入内存。
他们用的是同一个物理地址。
不同进程相同线性地址映射到物理内存相同吗?如何映射的?
不同进程中有3G的用户空间,3G用户空间的线性地址表示应该是一样吧?也就是0x000000000~0xbffffffff
但,不同进程映射的物理内存肯定是不一样的;
也就是说相同的线性地址如:0x08040000映射到的物理页应该是不一样的,这是如何做到的?如何映射?
每一个进程都有自己的页表。进程根据页表把线性地址转换为物理地址。如果此页不在内存会发生缺页中断,把该页调入内存。