use*_*165 4 unix directory implementation system file
我目前的操作系统课程项目是设计和实现一个基本的文件系统.我已经阅读了我们的书中有关文件系统的章节,但我迷失在哪里开始.我知道一些所需的结构(文件控制块,系统范围的打开文件表,每进程打开文件表,r + w缓冲区,目录结构),以及我需要支持的操作(打开,读取,写入,删除,创建,关闭).
我已经提供了10MB'驱动器'来实现内部的文件系统.任何有关资源或直接答案的帮助将不胜感激.
编辑:这是一个指向https://www.dropbox.com/s/971ec21u3yn62wz/Laboratory%20Project%204_5%20Creating%20a%20File%20System.pdf的链接
你提出了一个非常广泛的问题.目前尚不清楚您是否必须实现真正的文件系统,但现在看来您需要实现您的教授定义的一组操作.
你写:
我知道一些所需的结构(文件控制块,系统范围的打开文件表,每进程打开文件表,r + w缓冲区,目录结构)
在我看来,你专注于错误的事情.这些是真实操作系统用于支持对文件系统的有效访问的内存中结构.
我把作业中提到的"目录结构"看作是指盘上结构.这就是你可能需要关注的内容.你有一大块存储空间,你需要分发一些小块.所以你需要编写一个存储分配器.困难的部分是设计磁盘结构.你必须跟踪哪些块是免费的.文件可以删除,所以你最终会有漏洞.两种简单的方法是使用位图或连续自由空间列表.无论您选择哪种方法,它们都会成为您的代码的一部分,您希望自己选择另一种方法.
您还需要一个跟踪名称的结构.当用户创建文件时,他会为其命名.要稍后打开文件,他会给出相同的名称.磁盘结构需要支持这一点.还有其他元数据:最后修改日期(您的作业特别需要这个),文件大小,数据位置.您可以使用分配器来获取存储元数据的空间.
通常在存储开头(或附近)有一个固定块来保存配置信息和指向加载文件系统所需的其他存储的指针.
为了更好地概述Unix文件系统概念,我可以推荐Marshall Kirk McKusick和George V. Neville-Neil,第8章本地文件系统的"FreeBSD操作系统的设计与实现".
http://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0201702452
具体这些子章节:
这有助于人们分别考虑存储分配和命名.
您的作业页面包含一些很棒的参考.我有机会查看实用文件系统设计,作者慷慨地在网上发布.我可以特别推荐这些章节:
可能还有:
也许你遇到的问题是这个项目看起来很大而且势不可挡.它真的有助于将其分解成更小的部分.如果您仍然迷失方向,请首先实施您最了解的部分.
让我们回到你的任务细节.它提到了这些文件系统限制:
在这种情况下的约束并不坏,这很好,因为它们限制了你必须处理的内容,并允许你削减一些角落.(我不再说了,因为弄清楚细节是你的任务的重点.)
如果您仍然卡住,可以将源代码读取到FAT等简单文件系统.这是一个非常容易理解的FAT描述:
http://www.pjrc.com/tech/8051/ide/fat32.html
(另请查看维基百科.)
以下是用于嵌入式应用程序的FAT C实现的链接:
http://ultra-embedded.com/?fat_filelib
源代码只有大约5K行.
祝好运.