比较和交换符合POSIX的文件系统对象

Vol*_*lov 6 filesystems algorithm posix atomic compare-and-swap

POSIX兼容的操作系统可以通过文件系统对象(文件和文件夹)以原子方式执行多项操作.这是一个可能的原子操作列表:

  • 重命名或移动文件或文件夹
  • 创建硬链接
  • 创建符号链接
  • 创建文件夹
  • 创建并打开一个空文件

是否可以构建比较和交换算法来根据这些操作来操作文件?

假设我们有几个进程在单个文件上执行并发读/写.文件的特点是其修订版.假设修订版已添加到文件名中,并且文件的符号链接可由进程用来读取它.这些进程不能(由于某些原因)与互斥锁,信号量等同步,但它们能够创建辅助文件和文件夹.他们是否能够对文件执行基于修订的比较和交换修改(创建新文件,创建和重命名符号链接),这意味着如果多个进程同时修改它,一个将成功,其余将成功失败了一些错误代码?

该算法必须能够抵抗任何算法步骤中任何过程的突然终止.

Dav*_*tat 6

好家伙。

让我们假设每个进程都可以访问一个唯一标识符,以避免破坏对称性的问题。这是一次性共识对象的免等待实现。

  1. 创建一个具有唯一名称的目录。
  2. 在该目录中创建一个文件,其名称是创建过程的输入。
  3. 将目录重命名为共识对象的名称。除非这是第一次这样的重命名,否则这将失败。
  4. 列出我们尝试重命名自己的目录。里面的文件名是共识决定。

现在可以使用分布式计算中的标准结果以无需等待的方式模拟任意对象。玩得开心垃圾收集=P