为什么操作系统(OS)被视为依赖于硬件/平台

时间:2010-09-24 19:42:11

标签: c operating-system hardware platform

为什么我们说操作系统纯粹依赖硬件(除了RAM / USB等硬件外设)? 硬件独立性这个词意味着,操作系统应该运行在任何底层硬件抽象层上,如ARM / x86 / xtensa / starcore等等。

您能否在简单/通用操作系统中向我提供确切的硬件依赖性?确切地说,操作系统中的所有点都是访问硬件还是取决于平台?

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

我期待OS内核方面的答案,而不是外围方面的答案,如RAM /键盘/鼠标

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

5 个答案:

答案 0 :(得分:4)

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

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

在某种程度上,一种操作系统内核需要处于某种状态。大多数内核都是这样编写的,它们以尽可能小的表面积触摸硬件,但必须有一些触点。

你可以在C中编写大部分内核(通常就是这种情况)。但是你需要在某些事情上运行。如果你稍微偏爱一个操作系统的定义,你就可以拥有一个依赖于硬件的“微内核”,并将上面的许多内容构建为一个玩具操作系统的抽象,但你的性能会受到影响/精度/复杂性。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

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

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

当然,即使是ANSI C的部件也只能在您的硬件上运行,如果您的编译器可以将其作为目标。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

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

换句话说,如果您关心它,它可能依赖于硬件。

男人我喜欢嵌入式系统。