问题描述: 
   每个进程有它自己的私有地址空间。进程A可能有一个存放在它的地址空间中的数据结构,地址是0x12345678,而进程B则有一个完全不同的数据结构存放在它的地址空间中,地址是0x12345678。当进程A中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程A的数据结构。当进程B中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程B的数据结构。进程A中运行的线程不能访问进程B的地址空间中的数据结构,反之亦然。
   
 问题1: 为什么同一个能地址存放不同的数据结构,说说其原理,给点思路..问题2:n当一个线程时间片未用完时,而这个线程执行结束了,系统会马上选择另一个线程执行,还是等待这个线程时间片结束再选择另一个线程执行 ? ?

解决方案 »

  1.   

    嘿嘿,这么快有人来了..楼上的意思可是这样的: 对进程A来说地址0x12345678 是进程A 的4GB地址空间中的一个地址,对进程B来说地址0x12345678 是进程B 的4GB地址空间中的一个地址。 进程A的 4GB虚拟地址空间和进程B的4GB虚拟地址空间是两个不同的虚拟地址空间。是这个意思吗?
      

  2.   

    并不是一下子就映射完到物理内存的,即使一下子就映射到硬盘的页文件上也是不现实的,每个进程都有4GB的私有地址空间,一开机一般都有30来个进程,那就需要120多G的磁盘空间!其实如何调度是由操作系统来完成的,至于采用什么算法来调度更好,那是写操作系统时应该考虑的了。
      

  3.   

    每个进程都有4GB的虚拟地址空间,但是并不是真的有这么多的物理空间,实际主存大小由硬件决定,虚拟空间大小则由操作系统决定,0x12345678不过A进程虚拟空间中的一个地址,在实际运行时,操作系统会将其映射到实际主存中。B进程的0x12345678同样也只是B进程虚拟空间中的一个地址,运行时也会映射到实际主存中,映射到的实际主存肯定是不一样。
      

  4.   

    你这个是进程间通讯的问题,一般来说,每个进程的内存都是被操作系统隔离的,但是系统也提供了ipc通讯的方式,象 内存映射文件,socket或者pipe 等,都可以使得两个进程进行数据通讯.