不同进程相同线性地址映射到物理内存相同吗?

nbnitboy 2013-02-03 05:58:35
不同进程相同线性地址映射到物理内存相同吗?如何映射的?

不同进程中有3G的用户空间,3G用户空间的线性地址表示应该是一样吧?也就是0x000000000~0xbffffffff
但,不同进程映射的物理内存肯定是不一样的;
也就是说相同的线性地址如:0x08040000映射到的物理页应该是不一样的,这是如何做到的?如何映射?
...全文
399 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
FancyMouse 2013-02-04
  • 打赏
  • 举报
回复
mymtom 2013-02-04
  • 打赏
  • 举报
回复
一般是不同的,但是有些是相同的(比如共享内存,比如共享库的代码段,Linux下的内核部分)
楼主需要看看操作系统中关于虚拟内存的部分。

http://zh.wikipedia.org/zh-cn/%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98
http://zh.wikipedia.org/zh-cn/%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E5%8D%95%E5%85%83
nbnitboy 2013-02-04
  • 打赏
  • 举报
回复
引用 6 楼 mymtom 的回复:
引用 4 楼 nbnitboy 的回复:一个相同线性地址如何就映射到了不同物理页;可以简单讲下原因吗? 不同的进程页表里的内容是不一样的。 http://en.wikipedia.org/wiki/Page_table
稍微有点理解,具体如何映射不管,可能有不同实现; 1. 不同进程有不同的页表(不同页目录??),页表中各页表项指定的物理页表基址可能跟进程ID有关,不同进程id相同线性地址映射到的页物理地址不同;(即页表中填入的页物理基址与进程id有关) 2. 在0.12内核中线性地址空间是不同的,即第一个进程空间是(如:0~64M,那么第二进程的线性地址空间是64M~128M),这样的话,不同进程的线性地址肯定是不一样的,所以映射到的物理内存也是不一样的; 0.12中只有一个页目录,这样的话一个线性地址对应的页表是唯一的;
mymtom 2013-02-04
  • 打赏
  • 举报
回复
引用 4 楼 nbnitboy 的回复:
一个相同线性地址如何就映射到了不同物理页;可以简单讲下原因吗?
不同的进程页表里的内容是不一样的。 http://en.wikipedia.org/wiki/Page_table
nbnitboy 2013-02-04
  • 打赏
  • 举报
回复
引用 1 楼 morris88 的回复:
看看《深入理解linux内核》
无聊
nbnitboy 2013-02-04
  • 打赏
  • 举报
回复
引用 2 楼 mymtom 的回复:
一般是不同的,但是有些是相同的(比如共享内存,比如共享库的代码段,Linux下的内核部分) 楼主需要看看操作系统中关于虚拟内存的部分。 http://zh.wikipedia.org/zh-cn/%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98 http://zh.wikipedia.org/zh-cn/%E5%86%85%E5%AD%9……
这里只讲到了线性地址映射到物理内存过程,映射一个线性地址,物理地址一般是不一样的啊; 比如:线性地址x=0x08090000 经过f(x)转换后y=f(x),不同进程一般是不一样的物理内存; 这个是怎么区分的? 我知道一个线性地址一般前10位表示页目录项,中间10位表示页表项,后12位表示偏移;但是按照这种算出来的物理页应该是一样的(线性地址一样的话);但经验告诉我除了共享之外,其他段肯定是映射到不同物理内存的; 一个相同线性地址如何就映射到了不同物理页;可以简单讲下原因吗?
morris88 2013-02-03
  • 打赏
  • 举报
回复
看看《深入理解linux内核》

23,127

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧