操作系统实验五

该实验旨在构建一个简单的文件系统,基于模拟的I/O系统。文件系统包括文件创建、删除、打开、读写等功能,使用逻辑块编号管理磁盘。用户通过create, open, read等命令与文件系统交互。文件描述符位图和数据块位图用于跟踪磁盘块的分配。实验涵盖了文件的读写指针管理、目录结构以及打开文件表的实现。" 113372954,10545194,Android YUV数据处理:像素操作详解,"['Android开发', '图像处理', '移动开发', 'YUV格式']
摘要由CSDN通过智能技术生成

1 实验简介

本实验要求在模拟的I/O系统之上开发一个简单的文件系统。用户通过create, open, read等命令与文件系统交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0至L-1。I/O系统利用内存中的数组模拟磁盘。

2 实验内容

2.1 I/O系统

实际物理磁盘的结构是多维的:有柱面、磁头、扇区等概念。I/O系统的任务是隐藏磁盘的结构细节,把磁盘以逻辑块的面目呈现给文件系统。逻辑块顺序编号,编号取值范围为0至L-1,其中L表示磁盘的存储块总数。可以利用数组ldisk[C][H][B]构建磁盘模型,其中CHB分别表示柱面号,磁头号和扇区号。每个扇区大小为512字节。I/O系统从文件系统接收命令,根据命令指定的逻辑块号把磁盘块的内容读入命令指定的内存区域,或者把命令指定的内存区域内容写入磁盘块。由于能力不足本次实验忽略柱面号磁头号,定义为ldisk[L][B]。

第一部分为第0块,对应文件描述符位图;第二部分为第1至4块,共4*32*8 = 1024作为数据块位图,下一部分共100个块,存储100个文件的文件描述符,第四部分为数据块,共1024个数据块。

文件系统和I/O系统之间的接口由如下两个函数定义:

read_block(int i, char *p);

该函数把逻辑块i的内容读入到指针p指向的内存位置,拷贝的字符个数为存储块的长度B

bool read_block(int i, char *p){

    memcpy(p, ldisk[i], B);

    return true;

}

write block(int i, char *p);

该函数把指针p指向的内容写入逻辑块i,拷贝的字符个数为存储块的长度B

bool write_block(int i, char *p){

    memcpy(ldisk[i], p, B);

    return true;

}

此外,为了方便测试,我们还需要实现另外两个函数:

一个用来把数组ldisk 存储到文件;

void save_date(){

    FILE *fp = fopen("data.txt", "w");

    if (fp == NULL){

       printf("无法打开存储文件\n");

       return;

    }

    fwrite(&ldisk[0][0], 1, L*B, fp);

    fclose(fp);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值