2

为什么我们说操作系统完全依赖于硬件(除了 RAM/USB 等硬件外围设备)?硬件独立这个词的意思是,操作系统应该在没有任何底层硬件抽象层(如 ARM/x86/xtensa/starcore 等)的任何平台上运行。

您能否给我一个简单/通用操作系统中的确切硬件依赖关系?这意味着操作系统中的所有点都在访问硬件还是取决于平台?

是否可以编写一个简单的操作系统或 RTOS(使用 C 语言)而不依赖任何硬件或平台(即没有任何 VM 概念),以便它可以在任何平台上运行?

我期待来自操作系统内核方面的答案,而不是来自外围设备方面的答案,如 RAM /keyboard/mouse

我将举一个“在上下文切换时(任务/线程的上下文应仅在底层平台/CPU 的帮助下存储)”的操作系统中确切硬件依赖性的示例
__Kanu

4

5 回答 5

4

通常,以下内容取决于硬件:

  • 系统启动/重置
  • 中断处理
  • 虚拟内存管理和保护
  • 设备 I/O
  • 代码访问和安全的系统级保护
  • 一些互斥原语。

在某种程度上,非常低,操作系统内核需要位于某些东西之上。大多数内核都是这样编写的,它们以尽可能小的表面积接触硬件,但那里必须有一些接触点。

您可以用 C 编写大部分内核(通常是这种情况)。但是您需要在某些东西上运行。如果您对操作系统的定义稍加修改,您可能会拥有一个依赖于硬件的“微内核”,并在其上构建上述许多作为玩具操作系统的抽象,但您会在性能方面受到影响/准确性/复杂性。

于 2010-09-24T19:46:08.450 回答
4

任何操作系统都至少依赖于一个硬件:CPU。有不同的 CPU,每个 CPU 的工作方式不同,并且具有不同的“本地语言”。由于操作系统“只是一个程序”,需要在 CPU 上运行,因此必须用 CPU 编写本机语言,因此依赖于它。例如,您不能在 ARM 或 PowerPC 处理器上运行普通的 Windows。它仅在与 Intel 兼容的 CPU 上运行。

可以编写一个可以针对不同 CPU 编译并在其上运行的操作系统,大多数 UNIX,如 Linux、FreeBSD 等都是很好的例子。但是需要为他们想要运行的每个 CPU 进行编译(“翻译”)。

除了 CPU,操作系统还需要处理某些东西的方法,因此它需要输入和输出,如硬盘或 ROM、屏幕和键盘(但不一定;例如电梯不需要真正的键盘,通常甚至不需要屏幕)。并且有各种不同的方法可以访问这些设备中的每一个,并且操作系统取决于这些方法(例如,像 PCI 总线这样的总线系统,或者像 16550 这样的专用芯片用于串行端口)。

于 2010-09-24T19:53:26.990 回答
1

操作系统的几乎所有内容都以某种方式依赖于硬件,从内存管理到计时器(调度)到网络到视频到键盘再到 BIOS。所有这些都需要依赖于硬件的 C 代码和/或汇编。

这并不意味着您不能提取出许多在架构之间共享的通用 C 代码。Linux 就是一个典型的例子。它已被移植到大量硬件平台,每个平台都需要自定义代码。但是,仍然有大量共享的 C 代码(例如文件系统驱动程序)。

当然,即使是 ANSI C 的部分也只能在您的编译器可以针对它的情况下在您的硬件上运行。

于 2010-09-24T19:44:35.037 回答
1

如果一个操作系统没有硬件依赖,它怎么能从输出世界接收输入,并将结果输出给他们呢?

于 2010-09-24T19:45:18.237 回答
1

输入和输出发生的每个点都取决于硬件。

中断发挥作用的每个点都取决于硬件。

管理内存本身的每个点都取决于硬件。

换句话说,如果你关心它,它可能取决于硬件。

伙计,我喜欢嵌入式系统。

于 2010-09-24T19:56:39.417 回答