为什么我们说操作系统完全依赖于硬件(而不是像RAM/USB等硬件外围设备)?硬件独立性这个词的意思是,操作系统应该运行在没有任何底层硬件抽象层的任何平台上,如ARM/x86/xtensa/starcore等。
您能给我一个简单/通用操作系统中的确切硬件依赖项吗?这到底意味着操作系统中的哪些点是访问硬件的,还是取决于平台?
同样,有没有可能编写一个简单的操作系统或RTOS (使用C语言)而不依赖于任何硬件或平台(即没有任何VM概念),这样它就可以在任何平台上运行?
我希望从操作系统内核端得到答案,而不是像RAM /键盘/鼠标那样从外围端得到答案
我将给你一个操作系统中确切的硬件依赖性的例子,“在上下文切换时(任务/线程的上下文应该仅在底层平台/CPU的帮助下存储)”。
__Kanu
发布于 2010-09-25 03:46:08
通常,以下内容依赖于硬件:
针对代码访问和protection
在某种程度上,从某种程度上讲,操作系统内核需要建立在某些东西之上。大多数内核都是这样写的,它们与硬件接触的表面积尽可能小,但那里必须有一些接触点。
你可以用C编写内核的大部分(通常是这种情况)。但你需要在一些东西上运行。如果你对操作系统的定义稍加混淆,你可能会有一个依赖于硬件的“微内核”,并在其上构建许多上面的抽象,就像玩具操作系统一样,但你会在性能/准确性/复杂性方面受到影响。
发布于 2010-09-25 03:53:27
任何操作系统都至少依赖于一块硬件: CPU。有不同的CPU,每个CPU的工作方式不同,并且具有不同的“本地语言”。因为操作系统“只是一个需要在CPU上运行的程序”,所以它必须用CPU的本地语言编写,因此依赖于它。例如,你不能在ARM或PowerPC处理器上运行普通的视窗系统。它只能在英特尔兼容的CPU上运行。
可以编写一个可以针对不同CPU编译并在其上运行的操作系统,大多数UNIXes,如Linux、FreeBSD等都是很好的例子。但是需要为它们想要在其上运行的每个CPU进行编译(“翻译”)。
除了CPU,操作系统还需要一些方法来处理一些东西,所以它需要像硬盘或ROM、屏幕和键盘一样的输入和输出(但不一定;例如,电梯不需要真正的键盘,通常甚至不需要屏幕)。访问这些设备有各种不同的方法,操作系统依赖于这些方法(例如,像PCI总线这样的总线系统,或者像用于串行端口的16550这样的专用芯片)。
发布于 2010-09-25 03:44:35
从内存管理到计时器(调度),从网络到视频,再到键盘,再到BIOS,几乎所有关于操作系统的东西都在某种程度上依赖于硬件。所有这些都需要依赖于硬件的C代码和/或汇编。
这并不意味着你不能提取出很多在不同架构之间共享的通用C代码。Linux就是一个典型的例子。它已经被移植到大量的硬件平台上,每个平台都需要定制代码。然而,仍然有大量的共享C代码(例如文件系统驱动程序)。
当然,即使是ANSI C的部分也只能在你的硬件上运行,前提是你的编译器可以针对它。
https://stackoverflow.com/questions/3790419
复制相似问题