提问人:kaladin 提问时间:11/15/2023 更新时间:11/15/2023 访问量:19
xv6 操作系统中文件结构中的争用条件
Race condition in file struct in xv6 OS
问:
我正在为 RISK-V xv6 做麻省理工学院的实验室,并且正在处理 .我想知道我应该如何安排自旋锁以安全地同时修改文件结构(请参阅它)。我决定检查一下文件锁定是如何在 xv6 中实现的,但后来我发现在修改共享文件结构时没有锁,例如 和。kernel/file.c
kernel/file.h
filewrite
fileread
// 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;
}
是否真的存在竞争条件,因为这是玩具教育操作系统,或者我忽略了为什么这样做是安全的?
我已经检查了对此函数的所有引用和调用,但仍然没有锁。而且,当然,此文件结构绝不是修改它的过程所私有的
答: 暂无答案
评论
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