C 为什么操作系统(OS)被称为硬件相关/平台相关

C 为什么操作系统(OS)被称为硬件相关/平台相关,c,operating-system,hardware,platform,C,Operating System,Hardware,Platform,为什么我们说操作系统完全依赖于硬件(而不是RAM/USB等硬件外围设备)? “硬件独立性”一词意味着,操作系统应该在没有任何底层硬件抽象层(如ARM/x86/xtensa/starcore等)的任何平台上运行 您能给我一个简单/通用操作系统中确切的硬件依赖关系吗?究竟是指操作系统中的哪些点正在访问硬件,还是取决于平台 还有可能编写一个简单的操作系统或RTO(使用C语言),而不依赖任何硬件或平台(即没有任何虚拟机概念),以便在任何平台上运行吗 我希望从操作系统内核方面得到答案,而不是从RAM/键盘

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

您能给我一个简单/通用操作系统中确切的硬件依赖关系吗?究竟是指操作系统中的哪些点正在访问硬件,还是取决于平台

还有可能编写一个简单的操作系统或RTO(使用C语言),而不依赖任何硬件或平台(即没有任何虚拟机概念),以便在任何平台上运行吗

我希望从操作系统内核方面得到答案,而不是从RAM/键盘/鼠标等外围设备方面得到答案

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

__Kanu

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

这并不意味着你不能提取出很多架构间共享的C代码。Linux就是一个典型的例子。它已经被移植到大量的硬件平台上,需要为每个平台定制代码。然而,仍然有大量的共享C代码(例如文件系统驱动程序)


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

如果操作系统没有硬件依赖性,它如何从输出世界接收输入,并将结果输出回给它们?

通常,以下内容与硬件相关:

  • 系统启动/重置
  • 中断处理
  • 虚拟内存管理与保护
  • 设备I/O
  • 系统级代码访问和安全保护
  • 一些互斥原语
从某种程度上说,操作系统内核需要位于某些东西之上。大多数内核都是以尽可能小的表面积与硬件接触的方式编写的,但那里必须有一些接触点


您可以用C编写大部分内核(通常是这样)。但是你需要在一些东西上面跑。如果你对操作系统的定义有点含糊其辞,你可能会有一个依赖于硬件的“微内核”,并将上面的许多抽象构建为一个玩具操作系统,但你会在性能/准确性/复杂度方面受到影响。

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

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


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

每个输入和输出点都依赖于硬件

中断发挥作用的每一点都依赖于硬件

管理内存本身的每个点都依赖于硬件

换句话说,如果你关心它,它可能是硬件相关的


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

你能澄清一下你在说什么/在问什么吗?谁说操作系统完全依赖于硬件?你是在问一个简单的操作系统还是一个普通的操作系统,因为微软的Windows和普通的Unix和Linux都不简单?硬件访问属于哪一类?而且,考虑到每一条指令都是在硬件电路中执行的,你说的硬件到底是什么意思?它应该在任何平台上运行…@Renjith:因为很难弄清楚你实际上在问什么,除了你问了很多(现代操作系统中确切的硬件依赖性?),而且,您不必费心定义硬件或平台之类的关键事物——CPU是硬件的一部分吗?公羊?你真的,真的需要澄清你在说什么。如果你的英语不好,不要试图简明扼要,你只会把事情弄糊涂。谢谢大卫。我当然会编辑我的问题,使它更准确。我只想指出,OSX和Windows都是这方面的经典例子。@Randolpho,它们的移植都没有Linux那么广泛。是的,但两者都是从一开始就被设计来支持这样做的,并且都已经成功移植。这是他们的设计固有的。与MS-DOS、Windows 9x或经典Mac OS相比。@quixoto:Mac OSX是一种基于Mach微内核的BSD Unix,上面有很多NeXT的东西。它可以在两到三种架构上运行,但经典的MacOS可以在两种架构上运行(680?0和PowerPC)。MS Windows至少设计为在多个体系结构上运行,但其移植不如Linux广泛。@吉诃多:是的,两个系统一开始都非常可移植,但现在都只在x86上运行。我不知道这是否是一个虚假信息,链接很可笑。据称它是“独立于硬件”的,并且只需要