8.16 练习
- 为什么要在
balloc
中panic
?xv6可以恢复吗?
- 为什么要在
ialloc
中panic
?xv6可以恢复吗?
- 当文件用完时,
filealloc
为什么不panic
?为什么这更常见,因此值得处理?
- 假设在
sys_link
调用iunlock(ip)
和dirlink
之间,与ip
对应的文件被另一个进程解除链接。链接是否正确创建?为什么?
create
需要四个函数调用都成功(一次调用ialloc
,三次调用dirlink
)。如果未成功,create
调用panic
。为什么这是可以接受的?为什么这四个调用都不能失败?
sys_chdir
在iput(cp->cwd)
之前调用iunlock(ip)
,这可能会尝试锁定cp->cwd
,但将iunlock(ip)
延迟到iput
之后不会导致死锁。为什么不这样做?
- 实现
lseek
系统调用。支持lseek
还需要修改filewrite
,以便在lseek
设置off
超过f->ip->size
时,用零填充文件中的空缺。
- 将
O_TRUNC
和O_APPEND
添加到open
,以便>
和>>
操作符在shell中工作。
- 修改文件系统以支持符号链接。
- 修改文件系统以支持命名管道。
- 修改文件和VM系统以支持内存映射文件。