扩展共享内存
扩展共享内存允许 32 位进程分配小至 1 个字节的共享内存段(取整为最接近的页)。 此特性可供在进程环境中将变量 EXTSHM 设置为 ON、1SEG 或 MSEG 的那些进程使用。
扩展共享内存从根本上消除了只有 11 个共享内存区域的限制。 64 位进程不受 EXTSHM 变量的影响。
将 EXTSHM 设置为 ON 与将该变量设置为 1SEG 效果相同。 无论何种设置,小于 256 MB 的任何共享内存在内部作为 mmap 段创建,因此与 mmap 有着相同的性能影响。 大于等于 256 MB 的任何共享内存作为工作段在内部创建。
如果 EXTSHM 设置为 MSEG,那么所有共享内存在内部都作为 mmap 段创建,从而获得更好的内存利用率。
一个进程可以得到的共享内存区域的数量是没有限制的。 文件映射与以前一样受支持,但消耗的地址空间大小是 256 MB 的倍数(段大小)。 在该模式下不支持重定义共享内存区域的容量。 内核进程有着相同行为。
扩展共享内存有以下限制:
- 输入输出的方式被限制为和内存映射区域的一样。
- 只支持 uphysio() 类型的 I/O(非原始 I/O)。
- 这些共享内存区域不能被作为 I/O 缓冲区(其中缓冲区固定的取消发生在中断处理程序内)使用。 例如,这些区域不能用作 async I/O 缓冲区。
- 这些段不能使用 plock() 子例程来固定,因为内存映像段不能用 plock() 来固定。