Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
dec637bc
提交
dec637bc
9月 11, 2016
创建
作者:
Frans Kaashoek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Replace I_BUSY with sleep locks
上级
2adb7c21
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
20 行增加
和
21 行删除
+20
-21
console.c
console.c
+1
-0
file.c
file.c
+2
-1
file.h
file.h
+2
-2
fs.c
fs.c
+10
-17
pipe.c
pipe.c
+2
-1
sysfile.c
sysfile.c
+2
-0
uart.c
uart.c
+1
-0
没有找到文件。
console.c
浏览文件 @
dec637bc
...
...
@@ -7,6 +7,7 @@
#include "param.h"
#include "traps.h"
#include "spinlock.h"
#include "sleeplock.h"
#include "fs.h"
#include "file.h"
#include "memlayout.h"
...
...
file.c
浏览文件 @
dec637bc
...
...
@@ -6,8 +6,9 @@
#include "defs.h"
#include "param.h"
#include "fs.h"
#include "file.h"
#include "spinlock.h"
#include "sleeplock.h"
#include "file.h"
struct
devsw
devsw
[
NDEV
];
struct
{
...
...
file.h
浏览文件 @
dec637bc
...
...
@@ -14,7 +14,8 @@ struct inode {
uint
dev
;
// Device number
uint
inum
;
// Inode number
int
ref
;
// Reference count
int
flags
;
// I_BUSY, I_VALID
struct
sleeplock
lock
;
int
flags
;
// I_VALID
short
type
;
// copy of disk inode
short
major
;
...
...
@@ -23,7 +24,6 @@ struct inode {
uint
size
;
uint
addrs
[
NDIRECT
+
1
];
};
#define I_BUSY 0x1
#define I_VALID 0x2
// table mapping major device number to
...
...
fs.c
浏览文件 @
dec637bc
...
...
@@ -135,9 +135,7 @@ bfree(int dev, uint b)
//
// * Locked: file system code may only examine and modify
// the information in an inode and its content if it
// has first locked the inode. The I_BUSY flag indicates
// that the inode is locked. ilock() sets I_BUSY,
// while iunlock clears it.
// has first locked the inode.
//
// Thus a typical sequence is:
// ip = iget(dev, inum)
...
...
@@ -165,7 +163,13 @@ struct {
void
iinit
(
int
dev
)
{
int
i
=
0
;
initlock
(
&
icache
.
lock
,
"icache"
);
for
(
i
=
0
;
i
<
NINODE
;
i
++
)
{
initsleeplock
(
&
icache
.
inode
[
i
].
lock
,
"inode"
);
}
readsb
(
dev
,
&
sb
);
cprintf
(
"sb: size %d nblocks %d ninodes %d nlog %d logstart %d\
inodestart %d bmap start %d
\n
"
,
sb
.
size
,
sb
.
nblocks
,
...
...
@@ -277,11 +281,7 @@ ilock(struct inode *ip)
if
(
ip
==
0
||
ip
->
ref
<
1
)
panic
(
"ilock"
);
acquire
(
&
icache
.
lock
);
while
(
ip
->
flags
&
I_BUSY
)
sleep
(
ip
,
&
icache
.
lock
);
ip
->
flags
|=
I_BUSY
;
release
(
&
icache
.
lock
);
acquiresleep
(
&
ip
->
lock
);
if
(
!
(
ip
->
flags
&
I_VALID
)){
bp
=
bread
(
ip
->
dev
,
IBLOCK
(
ip
->
inum
,
sb
));
...
...
@@ -303,13 +303,10 @@ ilock(struct inode *ip)
void
iunlock
(
struct
inode
*
ip
)
{
if
(
ip
==
0
||
!
(
ip
->
flags
&
I_BUSY
)
||
ip
->
ref
<
1
)
if
(
ip
==
0
||
!
holdingsleep
(
&
ip
->
lock
)
||
ip
->
ref
<
1
)
panic
(
"iunlock"
);
acquire
(
&
icache
.
lock
);
ip
->
flags
&=
~
I_BUSY
;
wakeup
(
ip
);
release
(
&
icache
.
lock
);
releasesleep
(
&
ip
->
lock
);
}
// Drop a reference to an in-memory inode.
...
...
@@ -325,16 +322,12 @@ iput(struct inode *ip)
acquire
(
&
icache
.
lock
);
if
(
ip
->
ref
==
1
&&
(
ip
->
flags
&
I_VALID
)
&&
ip
->
nlink
==
0
){
// inode has no links and no other references: truncate and free.
if
(
ip
->
flags
&
I_BUSY
)
panic
(
"iput busy"
);
ip
->
flags
|=
I_BUSY
;
release
(
&
icache
.
lock
);
itrunc
(
ip
);
ip
->
type
=
0
;
iupdate
(
ip
);
acquire
(
&
icache
.
lock
);
ip
->
flags
=
0
;
wakeup
(
ip
);
}
ip
->
ref
--
;
release
(
&
icache
.
lock
);
...
...
pipe.c
浏览文件 @
dec637bc
...
...
@@ -4,8 +4,9 @@
#include "mmu.h"
#include "proc.h"
#include "fs.h"
#include "file.h"
#include "spinlock.h"
#include "sleeplock.h"
#include "file.h"
#define PIPESIZE 512
...
...
sysfile.c
浏览文件 @
dec637bc
...
...
@@ -11,6 +11,8 @@
#include "mmu.h"
#include "proc.h"
#include "fs.h"
#include "spinlock.h"
#include "sleeplock.h"
#include "file.h"
#include "fcntl.h"
...
...
uart.c
浏览文件 @
dec637bc
...
...
@@ -5,6 +5,7 @@
#include "param.h"
#include "traps.h"
#include "spinlock.h"
#include "sleeplock.h"
#include "fs.h"
#include "file.h"
#include "mmu.h"
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论