分布式共享内存一致性控制与编程实现
立即解锁
发布时间: 2025-08-19 01:59:14 阅读量: 1 订阅数: 8 

### 分布式共享内存一致性控制与编程实践
#### 1. Clix - DSM 的面向对象设计
分布式共享内存(DSM)协议的属性通常涵盖多个方面,具体如下表所示:
| 属性方面 | 具体内容 |
| ---- | ---- |
| 一致性模型 | 顺序、释放、条目、范围等 |
| 对象粒度 | 字节、字、页、任意 |
| 共享分辨率 | 位、字节、字 |
| 目录 | 基于主节点或迁移节点确定处理访问请求的节点 |
| 修改模式 | 更新或失效 |
| 通信模式 | 同步或异步 |
每个方面都有其对应的抽象:
- 内存对象提供合适的共享分辨率。
- 内存控制负责监督对象在粒度级别上的访问。
- 目录项记录对象的内部状态。
同时,具体一致性模型的实现方面被隔离到不同的类中,以便在其他一致性模型中复用。例如,副本集记录拥有内存对象副本的节点,调度器对传入请求进行排队和处理以实现同步通信。最后,通过定义上述各个方面,将这些抽象组合起来实现具体的一致性模型。该设计还支持每个节点在实现层和用户层的多线程。
#### 2. 顺序一致性的示例实现
顺序一致性通过紧密耦合的两个类实现:`SeqConsistency (SC)` 和 `SeqObjectControl (SOC)`。以下是 `SeqObjectControl` 类的代码:
```cpp
class SeqObjectControl {
public: ...
void protect(int objectld);
void unprotect(int objectld);
void invalidate(int objectld);
void setMemObjectW(int objectld,/*!in!*/MemPage* pMemObject)/*!async!*/;
void setMemObjectR(int objectld,/*!in!*/MemPage* pMemObject,
f*!in!*/ Continuation* pContinuation) f*!async!*/;
void copyMemObjectW(int objectld, int node) f*!async!*/;
void copyMemObjectR(int objectld, int node,
/*!in!*/ Continuation* pContinuation) f*!async!*/;
void unprotectW(int objectld) f*!async!*/;
void invalidateW(int objectld) f*!async!*/;
}/*!dual!*/;
```
这两个类由于通信结构而分离。`SC` 实现外部服务器,接受并处理来自其他节点的请求,请求以互斥方式处理。处理请求的操作可能包括修改内存对象的访问权限,这些操作会交给相应的 `SOC` 实例。`SOC` 将修改 MMU 访问权限的任务委托给 `MemorySegment (MS)`,`MS` 是从 VAST 框架派生的非对偶类的实例。`MS` 重载了 VAST 定义的页面错误处理程序,该处理程序区分读写访问,并向所有者的 `SC` 实例的相应方法发出远程对象调用。
下面是读取错误处理的流程:
```mermaid
graph LR
A[节点 R 的 MS 故障处理程序] -->|同步调用| B[页面主节点 H 的 SC 的 acquireR()]
B -->|排队请求并生成延续| C[若无前序请求,处理 R 的请求]
C -->|添加 R 到副本集| D{是否有写者活动}
D -- 否 --> E[请求 H 的 SOC 通过 copyMemObjectR() 移交页面给 R]
E -->|异步调用| F[通过 setMemObjectR() 将页面从 H 的 SOC 传输到 R 的 SOC]
F -->|激活 R 上的故障线程| G[R 的 SOC 异步发送确认给 H 的 SC]
D -- 是 --> H[H 的 acq
```
0
0
复制全文
相关推荐










