我正在阅读有关操作系统如何使用中断与硬件通信的信息,只是想知道,除了中断驱动之外,是否还有其他架构?在 Robert Love 的 Linux 内核一书中,他说 Linux 处理的大部分架构都是中断驱动的,那么其他的呢?有人可以举个例子吗?谢谢。
4 回答
对您的问题的简短回答是,只有一个其他模型,那就是轮询。在轮询模型中,系统反复询问硬件是否发生了任何事情。这种模型的缺点是 CPU 总是忙于询问,并且只有在询问时才能知道活动。如果它开始做其他事情,它可能会错过一个动作(因为它在动作时没有要求活动)。
更长的答案:
如果您考虑一下,实际上可能只有两种可能的系统:轮询(拉)和事件驱动(推)。在前者中,您询问硬件是否发生了任何事情,而在后者中,硬件会告诉您。换句话说:前者的代理是CPU/OS,后者是硬件。由于有两方,每一方都可以做两件事中的一件,这意味着我们只能有两种类型的系统(推/中断和拉/轮询),再加上一个混合系统(中断驱动和基于轮询的不同的时间或不同的环境)。
可以想象实现这三个系统中的任何一个的多种方法,并且可以将它们视为不同的模型,即使在幕后,它们实际上是在实现其中一个可能的系统。不过,我想这并不是您真正想要的。
在低级别,轮询是主要的替代方案。然而,在架构上,主要方法是单片的,中断直接驱动设备驱动程序和微内核,其中设备驱动程序可能是在硬件事件发生时由内核通知的独立进程。中断仍然会发生,但它们由一个非常小的内核管理。我怀疑这是您的报价所指的差异。轮询不再很常见。Minix 是最著名的基于微内核的操作系统之一,因为它用于教学。
我猜,它是一些硬实时系统,系统不使用异步中断,而是在明确定义的时间(可能是周期性的)检查(轮询)I/O 设备的状态。如果设备未准备好或处于意外状态,系统会报告故障。
我将轮询架构等同于确定性进程导向,将中断驱动等同于随机进程导向。就其自身的优点而言,两者都不是更好的,而且两者都是普遍需要的。这取决于外部任务和接口。通常,系统必须允许许多进程的交互,并且计划架构以在进程的上下文中划分随机性是有益的,而不是在遇到必须定期服务且没有随机性的随机服务约束的同时满足要求。糟糕的设计会随机违反某些面向时序约束的服务,从而无法解决软件级别的功能困境。使用离散事件仿真建模以额外的复杂性对随机过程进行建模,