内核通过硬盘的存储空间来实现虚拟内存,这块区域称之为交换空间(swap space)。内核不断地在交换空间和实际物理之间反复交换虚拟内存存储单元中的内容。这使得系统以为它拥有比物理内存更多的可用内存。
内存存储单元会被按组分成很多块,这些块称作页面(page)。内核会将每个内存页面放在物理内存或交换空间。然后内核会维护一个内存页面表,来指明哪些页面位于物理内存内,哪些页面会被换到磁盘上。
内核会记录哪些内存页面正在使用,并自动把那一段时间未访问的内存页面复制到交换空间区域(称之为换出,swapping out)--即使还有可用内存。当程序要访问一个已被换出的内存页面时,内核必须从物理内存换出另外一个内存页面来给它让出空间,然后从交换空间换入(swapping in)请求的内存页面。显然,这个过程要花费时间,并使得运行中的进程变慢。只要Linux系统在运行,为运行中的程序换出内存页面的过程就不会停歇。
默认情况下,运行在Linux系统上的每个进程都有各自的内存页面。进程不能访问其它进程正在使用的内存页面。内核维护着它自己的内存区域。处于安全考虑,用户进程不能访问内核进程使用的内存。
为了方便共享数据,你可以创建一些共享内存页面。多个进程可以在同一块内存区域进行读取喝写入操作。内核维护和管理这块公用内存区域并控制每个进程访问这块共享区域。
每个共享内存段都有个所有者,也就是创建它的用户。每个段也都有标准的Linux权限设置来设定其他用户是否可以访问该段。这个键值用来限定其他用户是否可以访问共享内存段。