首先,阅读维基页面文件系统 https://en.wikipedia.org/wiki/File_system有一些广阔的视野。
相关资源关于操作系统 https://en.wikipedia.org/wiki/Operating_system发展是OSdev http://osdev.org/(但也许你的问题在这里是题外话)。内核新手 http://kernelnewbies.org/也可以提供帮助(解释 Linux 是如何做的)。 OSdev 有维基页面解释FAT http://wiki.osdev.org/FAT & Ext2 http://wiki.osdev.org/Ext2详细信息。
您可以设计一个没有任何文件的操作系统(但还有其他一些文件)坚持 https://en.wikipedia.org/wiki/Persistence_%28computer_science%29机械)。看这个答案 https://softwareengineering.stackexchange.com/a/285678/40065。你可以有持久的进程(另请阅读应用程序检查点 https://en.wikipedia.org/wiki/Application_checkpointing, 垃圾收集 https://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29, 延续 https://en.wikipedia.org/wiki/Continuation, 冬眠 https://en.wikipedia.org/wiki/Hibernation_%28computing%29).
但是您应该阅读一些有关操作系统的好书(例如通过塔南鲍姆 http://freecomputerbooks.com/Modern-Operating-Systems-by-Andrew-Tanenbaum.html,或免费下载操作系统:三个简单的部分 http://pages.cs.wisc.edu/~remzi/OSTEP/书)。熟练使用一些现有的自由软件操作系统,例如Linux(和 POSIX),所以请阅读高级Linux编程 http://advancedlinuxprogramming.com/(至少要理解许多概念并获得良好的术语)。
恕我直言,FAT https://en.wikipedia.org/wiki/File_Allocation_Table是一个如此丑陋且低效的文件系统,不值得研究(除了遗留和兼容性原因)。Ext4 https://en.wikipedia.org/wiki/Ext4 (see here http://kernelnewbies.org/Ext4)应该更好&维基页面Ext2 https://en.wikipedia.org/wiki/Ext2有一张漂亮的照片。
您可以改编一些提供文件系统的库(例如libext2 http://git.tyndur.org/?p=libext2.git;a=summary)到你的内核。
你也许可以适应sqlite http://sqlite.org/在原始磁盘分区上工作。
你可能有一个想法file https://en.wikipedia.org/wiki/Computer_file它不像 MSDOS(或 Windows)或 POSIX 或<stdio.h>
文件。例如,它可能是固定大小的记录序列(例如 1Kbyte),而不是字节流。
您可以将您的操作系统组织为微内核 https://en.wikipedia.org/wiki/Microkernel并具有由应用程序代码给出的文件系统。调查VSTa https://en.wikipedia.org/wiki/VSTa and HURD https://www.gnu.org/software/hurd/hurd.html.
当然,您需要一个磁盘驱动程序,它可以从驱动器中获取/写入块(4K字节)(磁盘 I/O 始终按块或磁盘扇区 https://en.wikipedia.org/wiki/Disk_sector。旧的小磁盘有 512 字节的块。新的大磁盘有 4Kbytes,请参阅高级格式 https://en.wikipedia.org/wiki/Advanced_Format)。它应该是中断驱动并使用DMA https://en.wikipedia.org/wiki/Direct_memory_access。你需要一个任务调度程序 https://en.wikipedia.org/wiki/Scheduling_%28computing%29。阿法尤,你won't https://stackoverflow.com/a/31201991/841108为此使用 BIOS(也许UEFI https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface);你需要了解常见的硬件(SATA http://wiki.osdev.org/SATA & AHCI http://wiki.osdev.org/AHCI) works.
您应该发布(today!)你的玩具操作系统为自由软件 https://en.wikipedia.org/wiki/Free_software(例如,在GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html+ on github http://github.com/)以获得反馈和贡献。
您可以从其他地方复制(如果许可证兼容)现有代码自由软件 https://en.wikipedia.org/wiki/Free_software操作系统,你肯定会研究它们的源代码来理解事物。
所以编写一些任务调度程序,页面错误 https://en.wikipedia.org/wiki/Page_fault处理程序,一个虚拟内存 https://en.wikipedia.org/wiki/Virtual_memory,然后添加中断驱动的磁盘IO,以及上面的一些文件系统代码。然后你就会开始明白操作系统不能是一个small玩具....您可能会考虑微内核或外内核 https://en.wikipedia.org/wiki/Exokernel方法。