TLA+ 《Specifying Systems》翻译初稿——Section 5.3 A Linearizable Memory(一个可线性化内存系统)

本节描述了一个简单的可线性化的内存系统规约的写作过程

我们现在定义一个非常简单的内存系统:处理器 p p p发出一个内存请求,在等到响应之后才发出下一个请求。在规约中,我们通过访问(读取或修改)一个变量 m e m mem mem来执行请求,该变量表示内存当前的状态。因为在响应处理器 p p p的请求之前,内存还可以接收到来自其他处理器的请求,所以访问 m e m mem mem的时机很重要。我们允许在请求和响应之间的任何时间访问 m e m mem mem,这就是所谓的“可线性化内存”。更少限制、更实用的内存规约,可以在第11.2节中可找到。

除了 m e m mem mem之外,规约还有内部变量 c t l ctl ctl b u f buf buf,其中 c t l [ p ] ctl[p] ctl[p]表示处理器 p p p的请求状态, b u f [ p ] buf[p] buf[p]表示请求或响应。考虑请求 r e q req req [ o p ↦ " W r " , a d d ↦ a , v a l ↦ v ] [op \mapsto "Wr",add \mapsto a, val \mapsto v] [op"Wr",adda,valv],这是一个向内存地址 a a a写入 v v v的请求,完成后生成 N o V a l NoVal NoVal响应。处理这个请求的过程参见如下3个步骤:
[ c t r l [ p ] = " r d y " b u f [ p ] = ⋯ m e m [ a ] = ⋯ ] R e q ( p ) → [ c t r l [ p ] = " b u s y " b u f [ p ] = r e q m e m [ a ] = ⋯ ] D o ( p ) → [ c t r l [ p ] = " d o n e " b u f [ p ] = N o V a l m e m [ a ] = v ] R s p ( p ) → [ c t r l [ p ] = " r d y " b u f [ p ] = N o V a l m e m [ a ] = v ] \left [ \begin{array}{ll} ctrl[p] &="rdy" \\buf[p] &= \cdots \\mem[a] &= \cdots \end{array} \right ]\underrightarrow{Req(p)} \left [ \begin{array}{ll} ctrl[p] &="busy" \\buf[p] &= req \\mem[a] &= \cdots \end{array} \right ]\\ \underrightarrow{Do(p)} \left [ \begin{array}{ll} ctrl[p] &="done" \\buf[p] &= NoVal \\mem[a] &= v \end{array} \right ]\underrightarrow{Rsp(p)} \left [ \begin{array}{ll} ctrl[p] &="rdy" \\buf[p] &= NoVal \\mem[a] &= v \end{array} \right ] ctrl[p]buf[p]mem[a]="rdy"== Req(p)ctrl[p]buf[p]mem[a]="busy"=req= Do(p)ctrl[p]buf[p]mem[a]="done"=NoVal=v Rsp(p)ctrl[p]buf[p]mem[a]="rdy"=NoVal=v

一个 R e q ( p ) Req(p) Req(p)步骤表示处理器 p p p发出一个请求,当 c t l [ p ] = " r d y " ctl[p]="rdy" ctl[p]="rdy"时,它是使能的;这个步骤将 c t l [ p ] ctl[p] ctl[p]设置为“ b u s y busy busy”,将 b u f [ p ] buf[p] buf[p]设置为 r e q req req。一个 D o ( p ) Do(p) Do(p)步骤表示内存访问;它在 c t l [ p ] = " b u s y " ctl[p]= "busy" ctl[p]="busy"时使能,并将 c t l [ p ] ctl[p] ctl[p]设置为 " d o n e " "done" "done",将 b u f [ p ] buf[p] buf[p]设置为响应 N o V a l NoVal NoVal。一个 R s p ( p ) Rsp(p) Rsp(p)步骤表示内存对 p p p的响应;它在 c t l [ p ] = " d o n e " ctl[p]="done" ctl[p]="done"时使能,并设置 c t l [ p ] = " r d y " ctl[p]="rdy" ctl[p]="rdy"

编写规约是一种最直接的练习,可以用 T L A + TLA+ TLA+的符号表征对这些变量的修改。在接下来的模块 I n t e r n a l M e m o r y InternalMemory InternalMemory中,可以看到内部规约( m e m mem mem c t l ctl ctl b u f buf buf可见(自由变量))的写作过程,而内存规约(其中隐藏了三个内部变量),则可在第53页图5.3中的 M e m o r y Memory Memory模块中找到。
TLA+ 《Specifying Systems》翻译初稿——Section 5.3 A Linearizable Memory(一个可线性化内存系统)_第1张图片
TLA+ 《Specifying Systems》翻译初稿——Section 5.3 A Linearizable Memory(一个可线性化内存系统)_第2张图片

你可能感兴趣的:(TLA+)