玩具OS文件系统[关闭]

问题描述 投票:3回答:2

我在assembly / c中开发了一个运行基本终端的基本内核。我把它设置为用grub运行iso。

我想继续这个操作系统,但没有文件系统,我觉得我真的没有别的办法。经过很长一段时间在互联网上,我已经想出了实现这一点我真的无能为力。

人们已经说过实现FAT或制作VFS,但没有任何进一步,也没有教程,也没有任何参考。

有人可以解释文件系统是如何工作的,我可以在哪里开始/我可以连接预制系统,以及如何使用它?

另外,在编译我的操作系统时,我无法访问标准库。我使用gcc,nasm,ld和grub-mkrescue(用于磁盘映像)。我使用qemu进行模拟。

编辑减少OT

有人可以详细描述文件系统的工作原理,所以当我查看已经实现的文件系统的来源(如FAT)时,我能理解如何将它应用到我自己的操作系统中吗?

编辑 - 更简单

更容易。我怎么能直接访问硬盘?我的内核完全在保护模式下运行,因此我可以切换并直接写入硬盘驱动器。可以使用如下文件实现文件系统:

name特殊字符文本特殊字符

即:

hello world.script 0x00 println“Hello,world !!”为0x00

在不需要特殊分段的地方,你只需查看文件名和特殊字符(不是像'\ 0'这样的字符串),然后读取,直到找到第二个非字符串字符。

是否有办法通过切入和退出保护模式或写入硬盘驱动器来实现这一点?

c assembly filesystems kernel osdev
2个回答
9
投票

首先,阅读qazxsw poi上的wiki页面以获得一些广阔的视野。

关于file systems发展的相关资源是operating system(但也许你的问题在这里是偏离主题的)。 OSdev也可以提供帮助(解释Linux的运作方式)。 OSdev详细解释了KernelnewbiesFAT的wikipages。

您可以设计一个没有任何文件的操作系统(但其他一些Ext2机器)。见persistence。你可以有持久的过程(也读到关于this answerapplication checkpointinggarbage collectioncontinuations)。

但是你应该阅读一些关于操作系统的好书(例如hibernation,或者免费下载的by Tanenbaum书)。熟练掌握一些现有的免费软件操作系统,例如: Linux(和POSIX),所以阅读Operating Systems: Three Easy Pieces(至少要了解很多概念并获得一个好的术语)。

恕我直言,Advanced Linux Programming是一个如此丑陋和低效的文件系统,它不值得研究(除了遗留和兼容性原因)。 FAT(参见Ext4)应该会更好,而here上的wikipage有一个很好的画面。

您可以调整一些库,为您的内核提供文件系统(例如Ext2)。

你也许可以调整libext2来处理原始磁盘分区。

你可能有一个sqlite的概念,它不像MSDOS(或Windows)或POSIX或file文件。例如,它可能是一系列固定大小的记录(例如1K字节),而不是字节流。

您可以将操作系统组织为<stdio.h>,并具有应用程序代码给出的文件系统。看看microkernelVSTa

您当然需要一个磁盘驱动程序,它从驱动器中获取/写入块(4K字节)(磁盘I / O总是按块或HURD。旧的小磁盘有512字节块。新的大磁盘有4K字节,请参阅disk sectors) 。应该是中断驱动并使用advanced format。你需要一个任务DMA。 AFAIU,你scheduler使用BIOS(也许是won't);你需要了解常见硬件(UEFISATA)的工作原理。

你应该发布(今天!)你的玩具操作系统AHCI(例如free software + GPLv3)以获得反馈和贡献。

您可以复制(如果许可证兼容)来自其他github操作系统的现有代码,您当然会研究他们的源代码来理解事物。

因此编写一些任务调度程序,一个free software处理程序,一个page fault,然后添加中断驱动的磁盘IO,以及上面的一些文件系统代码。然后你就会开始明白操作系统不能是一个小玩具......你可能会考虑使用微内核或virtual memory方法。


3
投票

如果许可条款适合您的需要,最简单的方法是使用现有的开源文件系统。 exokernel就是这样一个图书馆,没有任何使用限制。您只需使用提供的存根和示例提供设备控制接口层。

© www.soinside.com 2019 - 2024. All rights reserved.