【问题标题】:How does an OS kernel define all the inputs and outputs?操作系统内核如何定义所有输入和输出?
【发布时间】:2014-10-07 01:51:17
【问题描述】:

我想知道操作系统内核如何定义自己的输入和输出以使计算机运行。当然,你需要合适的硬件才能让它工作,但你怎么能简单地做一些变量并称之为USB_PORT_1或其他什么?是不是也跟固件有关?分配任意值本身不会做任何事情,因此当您将 1 TB 硬盘插入内核标记为 USB3_PORT_0 的 USB 3.0 插槽时,硬件和软件的交互之间肯定缺少一些东西。此时固件中显然发生了一些事情,那是什么?

原因:我正在做一个。

【问题讨论】:

  • 看看这对你有没有帮助--->searchitchannel.techtarget.com/feature/…
  • 当我说USB3_PORT_0 或类似的话时,我可能不是很宽泛。我的意思是一般来说,比如...键盘输入、硬盘上的位置、处理器中的寄存器、处理器中的哪个内核、当前信息到哪个总线等等......我想你现在明白了;我的问题比你想象的要广泛。
  • @karimRaslan 阅读有关计算机体系结构的信息毫无意义,但是不要浪费时间来查找驱动程序与内核的接口方式。

标签: io operating-system kernel


【解决方案1】:

要真正了解硬件和软件之间的交互,您必须了解事物在低层次上的运作方式。什么是变量?在编程语言中,变量可以被赋值,以后可以修改等等。但是这在机器中物理存储在哪里?事实是它可以存储在多个地方。它可能在处理器的一个寄存器中,也可能在 RAM 中,也可能在完全不同的地方。

当内核希望与硬件通信时,有时它可能会通过您所谓的固件,但大多数情况下它不必这样做。硬件以多种方式将自身暴露给内核,但最简单的方式是将其视为 RAM。 RAM 可以通过地址访问,因此 0x1000 是 RAM 中某处的内存地址。一般来说,没有理由将任何特定地址映射到 RAM。假设我有一个 USB 控制器。我可以将一些地址(我们称之为 0xDEADBEEF)映射到这个内存控制器。所以,如果我从 0xDEADBEEF 读取它可能会告诉我有多少设备连接到系统。另一个相邻的地址可能会告诉我哪个端口等等。每个设备的执行方式不同,所以我们有设备驱动程序告诉内核如何访问设备,然后内核不必担心特定的内存地址或任何东西,它只是将所有内容抽象为名为“USB3_PORT_0”的东西。内核和软件只是使用它来引用设备,设备驱动程序将其转换为一组通过中断等方式通过内存进行的访问。

我无法列举硬件和软件可以交互的方式的数量,但是这应该让您了解它是如何完成的。

【讨论】:

  • 那么这类似于JNI(Java Native Interface)吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 2022-06-21
  • 2021-02-20
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多