没有文件系统和没有操作系统相同?


Answers:


1

Filesystem基本上是将文件存储在内存中的方法。

存储设备,例如硬盘,闪存驱动器,光盘,存储卡等可以存储固定数量的字节。一个空的,已擦除的48字节内存包含:

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00

现在,假设我有两个文本文件

  1. 第一个叫做Greetings.txt并包含这个词Hello
  2. 另一个名为Username.txt并包含单词gronostaj

文件使用ASCII编码,因此每个字母对应一个字节。使用ASCII编码后,文件的字节为:

  1. 名称 47 72 65 65 74 69 6e 67 73 2e 74 78 74

    内容 48 65 6c 6c 6f

  2. 名称 55 73 65 72 6e 61 6d 65 2e 74 78 74

    内容 67 72 6f 6e 6f 73 74 61 6a

(我正在使用该网站表格第二列的十六进制值。)

我可以将第一个文件的内容放在我们的内存中,如下所示:

48 65 6c 6c 6f 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00

但是有一些问题。

  • 如果我想在内存中放置第二个文件怎么办?我怎么知道一个文件的结束而另一个文件的开始?
  • 文件有名称,我该如何存储?

要解决这些问题,我们可以发明一个简单的文件系统。假设我们将文件名与其内容交错,以便每个文件名后面跟着该文件的内容,并用零字节分隔它们。两个连续的零字节意味着“不再有文件”。

47 72 65 65 74 69 6e 67    <- first 8 bytes of name 1
73 2e 74 78 74 00 48 65    <- next 5 bytes of name 1, then 00, then 2 bytes of content 1
6c 6c 6f 00 55 73 65 72    <- next 3 bytes of content 1, then 00, then 4 bytes of name 2
6e 61 6d 65 2e 74 78 74    <- next 8 bytes of name 2
00 67 72 6f 6e 6f 73 74    <- 00, then 7 bytes of content 2
61 6a 00 00 00 00 00 00    <- 2 bytes of content 2, then 00 00, so no more files

或者同样的事情,但没有ASCII编码:(我们不能将它存储在内存中,这只是为了便于阅读)

 G  r  e  e  t  i  n  g
 s  .  t  x  t 00  H  e
 l  l  o 00  U  s  e  r
 n  a  m  e  .  t  x  t
00  g  r  o  n  o  s  t
 a  j 00 00 00 00 00 00

一个真正的文件系统还会:

  • 存储文件创建和修改日期,属性,权限,元数据和其他内容
  • 包含某种目录,以便几乎可以立即访问文件,而无需扫描整个磁盘,直到找到它们
  • 支持目录
  • 支持包含00字节的文件和文件名
  • 能够从一些失败中恢复
  • 支持更改文件长度而无需移动后续文件

但是你明白了。

现在,操作系统。大多数计算机的操作系统都包含文件,因此您需要一个文件系统来存储操作系统。但是您可以创建一个单片操作系统,它不必使用持久文件,也不会存储在文件中。FreeRTOS就是一个例子。因此,虽然文件系统和操作系统通常是紧密耦合的,但它们实际上可以彼此不存在。

“单片”是指“单片二进制代码”。它将是一个所谓的blob:一个没有名称,创建日期或任何其他属性的字节序列。毕竟,CPU只处理指令序列。他们不关心文件元数据或文件系统,他们只是想要执行任务。如果你能把这些指令表示为字节,那么blob就足够了!

并且blob可以很容易地存储在内存中,而不需要任何类型的文件系统。实际上我们在第一个例子中做了那个,当我们把文件1的内容放在内存中时。

我希望这回答了你的问题!


0

BIOS,操作系统和文件系统是不同且独立的元素,操作系统可以存在于设备的只读存储器中。所以没有消息不相等,但操作系统有一个工作,是程序和硬件之间的接口。如果设备没有操作系统,则设备上运行的程序是操作系统。

如果系统没有报告文件系统或分区/文件系统损坏或不完整,那么系统可能没有操作系统; 但

......可能是大容量存储设备配置错误; 或者更具体地说,bios配置使用的磁头和磁道的数量与设备已被格式化使用的磁头和磁道的数量不同。当发生这种情况时,引导程序无法加载完整的文件分配系统。系统是否有电量耗尽,导致设置信息丢失。如果正确匹配BIOS设置与格式将恢复系统...

Bios是硬件的基本接口。操作系统是程序使用的接口,已经标准化,因此程序无需关心正在使用的特定硬件。文件系统是访问大容量存储设备的标准数据表。

bios首先从驱动器接口设备上的只读存储器加载,设置用于访问的中断点。Int 13是大容量存储设备的接入点。

https://en.wikipedia.org/wiki/INT_13H ...然后bios加载分区表,从磁道0,设备的扇区0和引导程序。http://www.ntfs.com/fat-partition-sector.htm

分区表告诉硬盘驱动器的大小和机器地址分区表+ 3E hex的引导例程(如果我正确地记得我的逆向工程,这是在机器上的0000:063E十六进制),通常加载操作系统,和能够更先进的司机。

如果计算机的操作系统没有大容量存储支持,您仍然可以使用此BIOS支持并基于大容量存储设备构建系统扩展。但请注意,操作系统可能会打开和关闭中断以保持对BIOS顺序的请求。

bios本身无法处理多线程操作。具体地,调用bios以指示硬盘驱动器准备好在特定位置读取或写入。然后在第二次调用bios时进行读写操作。需要更高级的操作系统,因为某些程序必须阻止一个程序准备读取数据而另一个程序想要写入数据或数据将被覆盖。

程序使用大容量存储设备需要文件系统,而不会有使用硬盘驱动器或BIOS来覆盖数据或锁定其他程序的风险。


Altair Basic在8080年代使用的操作系统非常简约。您可以通过指定开始说出文件的头部和轨道来将文件保存到硬盘驱动器。没有使用文件系统,用户必须记住文件保存的头部和轨道号,他自己。

没有太多的磁盘操作系统,但它工作。用于读取键盘和向显示器发送信息的例程也是最小的。


0

我认为这里有两点需要解决:

  • 有些系统没有文件系统 - 这是否意味着他们没有操作系统?
  • 如果没有文件系统(或者它是只读的),可以在哪里存储配置

Baremetal

有些系统没有操作系统 - 有一个应用程序,该应用程序软件直接与硬件连接。这对于复杂度低的小型微控制器系统来说很常见。在这种情况下,软件通常是定制的,开发团队从头开始编写驱动程序和抽象,或使用供应商代码来促进其设计目标。

话虽如此,这样的系统可以支持文件系统。诸如FAT之类的简单文件系统通常用于存储日志并在功能上提供固件更新。

配置通常会被格式化并直接写入原始非易失性存储器,而不使用文件系统。

嵌入式系统 - 调度程序

上升到一个水平,我们发现稍大的系统和复杂性的增加。在这一点上,我们将发现实时操作系统(RTOS) - 虽然并非所有实时操作系统都具有实时要求 - 如果功能设计了特定的设置。这些系统将使用一组计划执行的“ 任务 ”构建 - 通常无法运行其他/任意任务。这些系统通常使用供应商或社区生成的代码来支持文件系统,网络等。

配置可以写入原始存储,或作为文件存储在文件系统中。

查看FreeRTOSThreadX等...

嵌入式系统

现在我们发现更大的嵌入式系统。复杂性已经上升,在这个级别上,我们发现依赖于文件系统来组织系统配置和应用程序/软件。我们现在能够执行任意应用程序,并且内核将为各种硬件提供大量驱动程序。

在这里,我们看看LinuxQNX,“ Windows Embedded Compact ”等......

通常会系统构建软件,调用busybox等项目来提供大部分功能,并使用buildrootYocto等项目来构建各种应用程序并生成图像。

配置很可能被写入文件 - 尽管没有什么可以阻止开发人员像以前一样使用原始存储,因为这些系统通常会在自定义硬件上运行。

文件系统是必需的,但可能不可写,并且可能纯粹是“ 内存中 ” - 大小有限,并且所有更改(如果RW)在重新启动时都会丢失。

完整的用户/服务器系统

在这里,我们看到运行窗口系统的桌面PC,读写文件系统(通常在大型磁盘上),任意代码执行丰富,配置绝对存储为文件 - 这是您熟悉的系统类型。我们在这里讨论的术语服务器通常与台式机非常相似。

在Linux世界中,这将是一个“ 分发 ”。您通常会找到某种形式的包管理,因此安装/卸载应用程序是下载和解包的问题(如果您使用的是Gentoo,也可以编译)。

这里我们看看Linux,WindowsWindows Server等......


上面我提到过,较小的系统通常将配置存储在原始非易失性存储中。这是通过决定要存储的内容,整理数据并将其写入存储来完成的。

例如,我们可能希望存储以下简单配置:

  • 法兰具有精确52458的旋转步骤
  • 凸缘必须旋转到位置554705:00
  • 法兰必须旋转到正电子4988518:00

这些数字都适合16位整数,所以我们用它来表示步骤。对于时代,我们决定存储在BCD中以便与RTC更好地兼容,所以就是这样。

我们有以下数据:

  • 52458 - > 0xCCEA
  • 5547 - > 0x15AB
  • 05:00 - > 0x0500
  • 49885 - > 0xC2DD
  • 18:00 - > 0x1800

可以将值整理并写入存储为10个字节:

0x00000000    CC EA 15 AB 05 00 C2 DD 18 00

应用程序知道如何解释这个,所以不需要支持。通过支持,我指的是按名称定位存储区域(例如:文件系统和文件名),并与人分享对配置的理解(例如:JSON / XML / YAML / TOML)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.