【问题标题】:How to create an interrupt table如何创建中断表
【发布时间】:2011-02-28 04:29:17
【问题描述】:

我的操作系统课有一个家庭作业,我需要为模拟操作系统编写一个中断表。根据之前的任务,我已经设置了合适的驱动程序:

我的理解是我应该有一个中断类型数组,沿着interrupt_table[x] 的行,其中x = 0 表示陷阱,x = 1 表示时钟中断,等等。interrupt_table应该包含指向每种中断类型的适当处理程序的指针,然后应该调用适当的驱动程序?我是否正确理解这一点?谁能指出我创建这些处理程序的正确方向?

感谢您的帮助。

【问题讨论】:

    标签: c operating-system interrupt-handling


    【解决方案1】:

    有关中断处理程序的大多数细节因操作系统而异。唯一接近通用的是,您通常希望尽可能少地在中断处理程序本身中合理地逃脱。通常,您只需确认中断,记录足够的输入以便在您准备好时能够处理它,然后返回。其他一切都是单独完成的。

    【讨论】:

      【解决方案2】:

      你的理解听起来不错。

      这个模拟操作系统的模拟程度如何?如果它完全在您教授自己设计的“机器”上运行,那么毫无疑问,她已经给出了一些关于提供哪些中断、如何探测可能存在的中断以及哪些类型的任务中断的规范处理程序应该这样做。

      如果是针对成熟的 x86 计算机或类似设备,或许 Linux arch/x86/pci/irq.c 可以为您提供提示。

      【讨论】:

        【解决方案3】:

        您在收到中断时执行的操作取决于特定的中断。经验法则是找出特定中断需要注意的关键点,然后“仅”执行该操作(仅此而已)并尽快退出处理程序。此外,中断处理程序只是驱动程序的一小部分(这就是您应该设计的方式)。例如,如果您在某个串行端口上接收到一个传入字节的中断,那么您只需从 in-register 中读取该字节并将其放在某个“易失性”变量中,然后结束处理并退出处理程序。其余的(例如,您将如何处理串行端口上的传入字节)可以在驱动程序代码中处理。

        经验法则仍然是:“不多也不少”

        【讨论】:

          猜你喜欢
          • 2017-05-21
          • 1970-01-01
          • 2010-11-05
          • 1970-01-01
          • 1970-01-01
          • 2019-11-16
          • 1970-01-01
          • 2020-12-30
          • 1970-01-01
          相关资源
          最近更新 更多