
高清,所以……高清软盘?
这是美国独立日之后的第二天,我们的大部分工作人员正在回到他们喜欢的工作机器上。如果这是1997年而不是2018年,那将意味着为某些人启动BeOS。未来的操作系统 – 从未在20多年前到过,所以鉴于假期,我们正在重新铺设这个极客的指南。这件作品最初于2010年6月2日播出; 它在下面看起来不变。
Be操作系统文件系统(简称为BFS)是Haiku,BeOS和SkyOS操作系统的文件系统。当它作为命运多Be的BeOS项目的一部分在90年代后期创建时,BFS的超前功能集立即打动了花哨的操作系统极客。该功能集包括:
- 64位地址空间
- 使用日记
- 高度多线程阅读
- 支持类似数据库的扩展文件属性
- 流文件访问的优化
有点历史
BFS由Dominic Giampaolo和Cyril Meurillon于1997年创建,他们都在Be工作。它被设计为多线程和轻量级,并支持大容量流媒体多媒体。它还旨在支持先前Be文件系统的数据库功能。即使它是在系统通常只有8MB RAM和仅9GB磁盘存储的时候编写的,但当时许多具有前瞻性的设计决策仍然有效。 在没有被苹果公司收购之后,BFS关门时并没有完全结束。2002年,AxelDörfler重新实施了Haiku的BFS作为开源项目。本文的最后一部分是对Axel的采访。 在我们讨论什么使BFS如此特殊之前,我们首先要介绍一些文件系统的基础知识。
放大 /看哪,BeOS尽其所能。
Wikimedia Commons
文件系统基础知识
在基本级别,存在用于管理永久存储设备上的数据的文件系统。大多数文件系统常用的功能包括:- 创建文件和目录
- 打开,读取,写入,删除和重命名文件
- 读取,写入和更新文件元数据或属性
BFS功能
既然我们已经掌握了文件系统的基础知识,那么让我们看一下使BFS独一无二的一些功能。 首先,BFS的64位寻址意味着无论将来有多大磁盘,您都可以使用BFS格式化整个磁盘。您可以创建超过8艾字节的分区,并且根据使用的块大小,您可以创建大小超过30 GB的文件。 BFS最重要和广受欢迎的功能之一是它对扩展属性的支持。用MP3文件的例子说明了属性重要性的一个例子。对MP3文件重要的信息字段是:歌曲标题,乐队,专辑,发行日期,编码率,长度,播放次数。如果要使用传统文件系统将此信息与每个MP3文件相关联,则可能必须创建自己的数据库,以支持在音乐收藏增长和更改时搜索,创建,更新或删除这些属性。相反,对于BFS,可以将这些属性或任何其他属性添加到文件系统本身。这意味着用于编辑或播放MP3的程序不需要创建或维护数据库,因为文件系统将为您处理这些功能。BFS支持在程序控制下或从命令行将属性与文件相关联。属性可以由文件系统搜索和排序,作为任何应用程序的扩展。如何做到这一点将在后面详细讨论。 BFS支持创建监视文件更改的持久性或“实时”查询的功能。这是一个挂钩到文件系统的查询,检查符合搜索条件的文件。在Haiku下,这些查询很容易创建,并且对系统资源的影响非常小。 BFS是记录的,这意味着它可以随时跟踪某些文件系统的一致性,并且不需要文件系统一致性工具,如fsck或chkdsk。日记记录还有助于在意外关闭后更快地启动系统。 在内部,BFS使用UTF-8字符作为目录和文件名。这意味着您可以在Haiku中使用几乎任何语言。您无需额外的努力就可以将文件名本地化为中文,使用变音符号的德语字符或草书阿拉伯语。 BFS为大文件访问提供了特殊的性能考虑。创建和阅读大型视频,音频或图像文件是BFS下的优化操作。BFS架构:超级块
超级块通常是文件系统的最高级数据结构。BFS超级块描述了物理磁盘,日志区域和索引。出于明显的性能原因,超级块在系统引导后保留在RAM中。
typedef struct disk_super_block {
char name[B_OS_NAME_LENGTH];
int32 magic1;
int32 fs_byte_order;
uint32 block_size;
uint32 block_shift;
off_t num_blocks;
off_t used_blocks;
int32 inode_size;
int32 magic2;
int32 blocks_per_ag;
int32 ag_shift;
int32 num_ags;
int32 flags;
block_run log_blocks;
off_t log_start;
off_t log_end;
int32 magic3;
inode_addr root_dir;
inode_addr indices;
int32 pad[8];
} disk_super_block;
该名称结构保存文件系统名称。三个幻数用于一致性检查以及版本编号。Fs_byte_order保持字节排序,block_size保存显式字节计数; block_shift,用作2的指数,也将计算块大小。这是一种有目的的冗余,用于文件系统的一致性检查。Num_blocks保存文件系统的可用块数,used_blocks保存当前正在使用的数量。的标志字段确定超级块的状态是否是清洁的或脏。ROOT_DIR指向所有文件和目录的根目录。指数指向扩展属性的索引部分的开头。该bfsinfo工具可用于转储一个系统的超级块的超级块。