操作系统实验五 文件系统 16281012 聂小禹

操作系统实验五 文件系统

实验要求

本实验要求在模拟的I/O系统之上开发一个简单的文件系统。

用户通过create, open, read等命令与文件系统交互。

文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0至L − 1。I/O系统利用内存中的数组模拟磁盘。

Task1 概要设计

定义文件系统时,我们首先需要对存储文件的磁盘进行划分,主要分为两大部分:

数据区: 存放文件的具体数据
保留区: 用于实现位图区和文件描述区
我们使用文件记录区,存储当前文件的名字是用户可见的,可以利用其得到我们文件的位图0-1矩阵。

Inode table 主要存储文件的地址存放信息,可以对应到数据区中进行存储和读取。

这里必须明确,文件记录区和inode table也是磁盘的一部分

数据区也就是我们的磁盘最主要的部分,用于存储文件数据。

实现如下内容

1.三个虚拟分区对应的数据结构
2.设计每个文件的数据结构
3.文件存储和磁盘的存储关系函数
4.对应的create函数等
5.文件打开记录表的实现
6.用户实现界面

Task2 数据结构

对块的数据结构进行定义,对于磁盘主要定义用来存储数据的data数组,模拟扇区512byte的数据区

typedef struct MyBlock
{
   
	char data[512];   //对应扇区的字节
	char flag;        //是否存储
	MyBlock* next;
}myblock;

对文件的基础信息进行定义,主要包含4项,包括文件名称,创建时间,和修改时间,其中content代表正文存储的块地址。

typedef struct File         //文件结构体
{
   
	char* name;            //文件命名
	char* time;            //创建时间
	char* changeTime;      //修改时间
	myblock* content;
}file;

打开文件链表

typedef struct OpenFile
{
   
	int index;
	int pos;
	myblock* data;
}openFile;

Task 3 交互

在这里插入图片描述

Task4 初始化和修改

4.1 Create

1.查看文件名是否存在非法字符
2.查看位图,查看是否重名
3.查看位图,寻找对应空的位置块
4.申请磁盘空间,存储文件的data

在这里插入图片描述

int create(char* filename)// 根据指定的文件名创建新文件。
{
   
    file newfile;
    newfile.name = filename;
    
    //命名是否含有非法字符
    for (int i = 0; i < 8; i++)
    {
   
        if (strchr(filename, error[i][0]))
        {
   
            cout << "Error: Illegal letters" << endl;
            break;
        }
    }
    int temp = 1;
    int pos = 0;
    // 是否命名重复
    for (int i = 0; i < B_MAX; i++)
    {
   
        if (ldisk[0][0][i].flag == '1')
        {
   
            if (strcmp(ldisk[0][0][i].data,filename)==0)
            {
   
                temp = 0;
                break;
            }
        }
        else
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值