共享内存模型是一种处理器通过读取和写入共享内存中的位置来连接的模型,该模型同样适用于所有处理器。每个处理器都可以拥有寄存器、缓冲区、缓存和本地内存条作为更多内存资源。必须考虑共享内存系统设计中的一些基本问题。这些涉及访问控制、同步、保护和安全。
访问控制指定哪些进程可以访问哪些资源。访问控制模型根据访问控制表的内容为处理器向共享内存发出的每个访问请求创建所需的检查。后者包含决定每次访问尝试合法性的标志。如果存在对资源的访问尝试,则在完成所需的访问之前,所有不允许的访问尝试和非法进程都将被阻止。来自共享进程的请求可以在执行期间修改访问控制表的内容。
具有同步规则的访问控制标志指定系统的功能。同步约束限制了从共享进程到共享资源的访问时间。适当的同步提供数据正确流动并提供系统功能。
保护是一项系统功能,可避免进程创建对属于其他进程的资源的任意访问。共享与保护不相容;共享允许访问,而保护限制它。
最简单的共享内存系统包括一个内存模块,可以从两个处理器创建。请求通过其两个端口出现在内存模块上。存储器模块内的仲裁单元将请求传递到存储器控制器。
如果内存模块不忙并且有单个请求到达,则仲裁单元将该请求传递给内存控制器,并且该请求被准予。在处理请求时,模块处于忙碌状态。如果在内存忙于为前一个请求提供服务时有新请求到达,则请求处理器可能会将其请求保留在线路上,直到内存空闲为止,或者它可能会在一段时间后重复其请求。
共享内存系统导致系统可分为统一内存访问 (UMA)、非统一内存访问 (NUMA) 和仅缓存内存架构 (COMA)。
在 UMA 系统中,所有处理器都可以通过互连网络访问共享内存,就像单个处理器访问其内存一样。因此,所有处理器对任何内存位置都有相同的访问时间。UMA 中使用的互连网络可以是单总线、多总线、交叉开关或多端口存储器。
在 NUMA 系统中,每个处理器都有一部分附加的共享内存。内存只有一个地址空间。因此,任何处理器都可以使用其真实地址直接访问任何内存位置。但是,模块的访问时间取决于与处理器的距离。这会导致不均匀的内存访问时间。