目录
1.设计一个测试方法并编写测试程序,测试XV6中一个文件所能占用的最大磁盘块数
3.修改XV6文件系统的相关代码,使得文件所能占用的最大磁盘块数有所增加,给出并分析你的代码
4.重新第一步中的测试程序,再次观察文件所能占用的最大磁盘块数,并分析所得结论
近来有空闲,把前几个学期做的实验上传上来。如有错误的地方欢迎大佬批评指正,有更好的方法也期待您的分享~
一、实验目的
针对节点混合索引做实验。I节点中存放文件的属性和文件磁盘块地址等信息
二、具体任务安排
1.设计一个测试方法并编写测试程序,测试XV6中一个文件所能占用的最大磁盘块数
(1)设计测试方法
1)打开XV6源代码文件系统的相关文件:
①打开fs.h文件,该文件定义了文件系统的数据结构和函数。
②打开fs.c文件,该文件实现了文件系统的具体操作函数。
2)编写测试程序
①在测试程序中,首先需要创建一个新文件,并将其打开以便进行写入操作。
②然后使用一个循环不断向文件中写入数据,直到文件无法再写入更多数据为止。
③在每次写入数据之后,可以通过调用相关的文件系统函数,如balloc()分配新的磁盘块,然后将数据写入磁盘块。
④可以通过记录已写入的磁盘块数量,或者记录文件大小(以字节为单位)来确定文件所占用的磁盘块数
3)运行测试程序
①在XV6源代码目录下,使用make qemu命令编译和运行XV6操作系统。
②在XV6命令行界面下,运行编写的测试程序,观察输出结果。
(2)编写测试程序
设计的测试程序的代码如下:
#include "types.h"
#include "stat.h"
#include "user.h"
#include "fcntl.h"
#define BLOCK_SIZE 512 // 假设磁盘块大小为512字节
int main(void) {
int fd = open("testfile", O_WRONLY | O_CREATE); // 打开文件进行写入
if (fd < 0) {
printf(1, "Failed to open the file.\n");
exit();
}
char buffer[BLOCK_SIZE]; // 缓冲区,用于写入文件的数据
int block_count = 0; // 记录已写入的磁盘块数量
while (1) {
int bytes_written = write(fd, buffer, BLOCK_SIZE); // 向文件写入一个磁盘块大小的数据
if (bytes_written < BLOCK_SIZE)
break; // 文件无法再写入更多数据,退出循环
block_count++; // 更新已写入的磁盘块数量
}
printf(1, "The file occupies %d disk blocks.\n", block_count);
close(fd); // 关闭文件
exit();
}
在CLion里面打开xv6所在的文件夹→新建C文件【test1.c】→输入上面设计的代码→【Makefile】UPROGS后面添加【_test1\】→在终端中输入【cd xv6-public】→输入【make qemu】→输入【test1】运行该程序,打印“The file occupies 140 disk blocks”,说明XV6中一个文件所能占用的最大磁盘块数为140个。结果如图1所示。

最低0.47元/天 解锁文章
1882

被折叠的 条评论
为什么被折叠?



