![](https://csdnimg.cn/release/download_crawler_static/86274931/bg1.jpg)
lab 6 文件系统
宁晨然 17307130178
1.实验目的
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,由文件系统的接口,对
对象操纵和管理的软件集合,对象及属性组成。
xv6 使用的文件系统比大多数“真实”文件系统(包括 xv6 UNIX )要简单得多,它可以提供基本功
能:创建、读取、写入和删除按层次目录结构组织的文件。
您将负责将块读入块缓存并将其刷新回磁盘;分配磁盘块;将文件偏移映射到磁盘块;以及在
IPC 接口中实现读、写和打开。
2.实验过程
2.1 系统环境I/O权限
修改 env.c 中的 env_create() 函数,当 i386_init() 最后调用 ENV_CREATE(fs_fs,
ENV_TYPE_FS); 启动文件系统的时候,这个宏定义在 env.h 中;其实不用关注其中的宏定义细节,重要
的就是 env_create() 函数,当接收 EnvType 为 ENV_TYPE_FS ,意思就是设置文件系统的环境。这个
时候赋予系统IO操作权限。
赋予IO操作权限的方式是通过 EFLAGS 寄存器的 IOPL 位来控制。可知 env_create() 中创建了一个环
境,修改其中的 trapframe 中的 eflags 值, e->env_tf.tf_eflags |= FL_IOPL_MASK; 就可以将
IOPL 位置1。
#define ENV_CREATE(x, type) \
do { \
extern uint8_t ENV_PASTE3(_binary_obj_, x, _start)[]; \
env_create(ENV_PASTE3(_binary_obj_, x, _start), \
type); \
} while (0)
void env_create(uint8_t *binary, enum EnvType type)
{
// LAB 3: Your code here.
struct Env *e;
int r;
if ((r = env_alloc(&e, 0) != 0))
{
panic("create env failed");
}
// If this is the file server (type == ENV_TYPE_FS) give it I/O privileges.
// LAB 5: Your code here.
if (type == ENV_TYPE_FS)
e->env_tf.tf_eflags |= FL_IOPL_MASK;
load_icode(e, binary);
e->env_type = type;