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系统以支持内存映射文件。