加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

实现文件系统的基础知识

发布时间:2020-12-15 21:32:15 所属栏目:安全 来源:网络整理
导读:我目前的操作系统课程项目是设计和实现一个基本的文件系统.我已经阅读了我们的书中有关文件系统的章节,但我迷失在哪里开始. 我知道一些所需的结构(文件控制块,系统范围的打开文件表,每进程打开文件表,rw缓冲区,目录结构),以及我需要支持的操作(打开,读取,写
我目前的操作系统课程项目是设计和实现一个基本的文件系统.我已经阅读了我们的书中有关文件系统的章节,但我迷失在哪里开始.
我知道一些所需的结构(文件控制块,系统范围的打开文件表,每进程打开文件表,rw缓冲区,目录结构),以及我需要支持的操作(打开,读取,写入,删除,创建,关).

我已经提供了10MB’驱动器’来实现内部的文件系统.
任何有关资源或直接答案的帮助将不胜感激.

编辑:这是指向https://www.dropbox.com/s/971ec21u3yn62wz/Laboratory%20Project%204_5%20Creating%20a%20File%20System.pdf的链接

解决方法

你提出了一个非常广泛的问题.目前尚不清楚您是否必须实现真正的文件系统,但现在看来您需要实现您的教授定义的一组操作.

你写:

I know some of the structures needed (file control blocks,system-wide open file table,per-process open file table,r+w buffers,directory structure)

在我看来,你专注于错误的事情.这些是真实操作系统用于支持对文件系统的有效访问的内存中结构.

>文件控制块 – 你的版本可能非常简单
>系统范围的打开文件表 – 您不需要它来支持单个用户
>每进程打开文件表 – 您只需要一个,它可能非常简单.
> r w buffers – 这是一项性能增强,并非分配严格要求,如果需要可以在以后添加.
>目录结构 – 啊,现在你正在做点什么.

我把作业中提到的“目录结构”看作是指盘上结构.这就是你可能需要关注的内容.你有一大块存储空间,你需要分发一些小块.所以你需要编写一个存储分配器.困难的部分是设计磁盘结构.你必须跟踪哪些块是免费的.文件可以删除,所以你最终会有漏洞.两种简单的方法是使用位图或连续自由空间列表.无论您选择哪种方法,它们都会成为您的代码的一部分,您希望自己选择另一种方法.

您还需要一个跟踪名称的结构.当用户创建文件时,他会为其命名.要稍后打开文件,他会给出相同的名称.磁盘结构需要支持这一点.还有其他元数据:最后修改日期(您的作业特别需要这个),文件大小,数据位置.您可以使用分配器来获取存储元数据的空间.

通常在存储开头(或附近)有一个固定块来保存配置信息和指向加载文件系统所需的其他存储的指针.

为了更好地概述Unix文件系统概念,我可以推荐Marshall Kirk McKusick和George V. Neville-Neil,第8章本地文件系统的“FreeBSD操作系统的设计与实现”.

http://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0201702452

具体这些子章节:

> 8.8.本地文件存储
> 8.3.命名
> 8.9.伯克利快速文件系统

这有助于人们分别考虑存储分配和命名.

您的作业页面包含一些很棒的参考.我有机会查看Practical File System Design,作者在网上慷慨地发布了这个内容.我可以特别推荐这些章节:

>第4章BFS的数据结构
>第6章分配政策

可能还有:

>附录A文件系统构建工具包

也许你遇到的问题是这个项目看起来很大而且势不可挡.它真的有助于将其分解为更小的部分.如果您仍然迷失方向,请首先实施您最了解的部分.

让我们回到你的任务细节.它提到了这些文件系统限制:

>文件大小最多为16384字节
>磁盘上的分配单元或块均为512字节.
>您的总存储区域为2-10 MB

在这种情况下的约束并不坏,这很好,因为它们限制了你必须处理的内容,并允许你削减一些角落. (我不再说了,因为弄清楚细节是你的任务的重点.)

如果您仍然卡住,可以将源代码读取到FAT等简单文件系统.这是一个非常容易理解的FAT描述:

http://www.pjrc.com/tech/8051/ide/fat32.html

(另请查看维基百科.)

以下是用于嵌入式应用程序的FAT C实现的链接:

http://ultra-embedded.com/?fat_filelib

源代码只有大约5K行.

祝好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读