操作系统实验三:文件管理(XV6节点混合索引)

目录

一、实验目的

二、具体任务安排

1.设计一个测试方法并编写测试程序,测试XV6中一个文件所能占用的最大磁盘块数

 2.分析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所示。

图 1 文件所能占用的最大磁盘块数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值