xv6 操作系统中文件结构中的争用条件

Race condition in file struct in xv6 OS

提问人:kaladin 提问时间:11/15/2023 更新时间:11/15/2023 访问量:19

问:

我正在为 RISK-V xv6 做麻省理工学院的实验室,并且正在处理 .我想知道我应该如何安排自旋锁以安全地同时修改文件结构(请参阅它)。我决定检查一下文件锁定是如何在 xv6 中实现的,但后来我发现在修改共享文件结构时没有锁,例如 和。kernel/file.ckernel/file.hfilewritefileread

// there is no lock when modifying file flags
int
fileread(struct file *f, uint64 addr, int n)
{
  int r = 0;

  if(f->readable == 0)
    return -1;
  ...
  return r;
}

是否真的存在竞争条件,因为这是玩具教育操作系统,或者我忽略了为什么这样做是安全的?

我已经检查了对此函数的所有引用和调用,但仍然没有锁。而且,当然,此文件结构绝不是修改它的过程所私有的

c 并发 操作系统 争用条件 xv6

评论

0赞 Craig Estey 11/16/2023
xv6是/曾经是一个真正的操作系统。它是 1980 年之前最先进的 Unix v6 的 AT&T 源代码。该操作系统最初在 PDP-11 上运行。只有一个处理器。因此,无需锁定。而且,无论如何,它都没有关于处理器间锁定的特殊说明。系统只有 64KB 的核心内存。Unix v6 --> Unix v7 --> System III --> System V。而且,它是 FreeBSD、OpenBSD、NetBSD 的鼻祖。所有这些版本的源代码都是原始 Unix v6 源代码的分支。这与从头开始编写的 Linux/Minix 形成鲜明对比。*BSD
0赞 Craig Estey 11/16/2023
此外,如果结构从基本级别(即不在 ISR 中)访问,我们也不需要禁用/重新启用中断。因此,考虑到上下文:单个 CPU 且无法从 ISR 访问,按原样操作是安全的。
0赞 Craig Estey 11/16/2023
要将其移植到多核 CPU,是的,您需要添加自旋锁、互斥锁或 rwlocks。这将是一项艰巨的任务,要找到所有实例并将它们包装在锁对中。并且,对于对 [其他] 结构的所有其他类似访问。

答: 暂无答案