如果另一个页面未"full",两个进程可以共享同一页面吗?



如果我有一个进程需要6KB的RAM,并且页面大小为4KB,我需要分配两个页面。另一个进程是否可以自己访问剩余的2KB,以便两个进程共享同一页表?

两个进程是否可以共享同一个页面,以防另一个页面不是"满的";?

理论上这是可能的,但存在重大问题:

  • 正如@Peter所说,允许两个进程共享同一页将绕过传统的进程内存保护,因为对于大多数处理器来说,访问保护粒度不会小于一整页。

  • 这两个过程必须以某种方式协调谁可以获得共享页面的哪个部分。这可能包括

    • 简单的协调,即进程1得到前半部分,进程2得到后半部分——但当进程1或进程2需要更多内存时,这就变得很愚蠢了,因为在那一点上,如果只拥有自己的页面可能会更好。

    • 进程之间进行通信,以正式确定谁获得该页面的内容。这种通信通常是某种同步,这在许多情况下是一个瓶颈。

      考虑同一进程中的多个线程——一些现代运行时系统,例如Java和C#,提供了一个单独的每个线程堆,这样简单的内存分配就不需要与其他线程同步。

如果一个页面未满,则表示每个进程的浪费不到一页,这不是很高的开销,因此考虑到安全和协调问题,这并不是真正需要解决的问题。

实际上,操作系统已经在进程之间共享了整个物理内存,尽管是在页面粒度上,因此存在共享(只是不是页面内共享(,浪费量是有限的。

相关内容

  • 没有找到相关文章

最新更新