有人可以请我解释一下中断服务程序中发生了什么(虽然它取决于具体的例程,一般的解释就足够了)?这对我来说一直是个黑盒子。中断服务程序会发生什么?
回答
interrupt handlers上有很好的维基百科页面。
“中断处理程序,也称为一个中断服务例程(ISR),是在一个操作系统或它们的执行是通过一个中断的接收触发的设备驱动程序的回调子例程。中断处理程序具有的多个函数,这些函数根据中断产生的原因以及中断处理程序完成其任务的速度而有所不同。“
基本上,当一块硬件(一个硬件中断)或某个OS任务(软件中断)需要运行时,它会触发一个中断。如果这些中断没有被屏蔽(忽略),操作系统将停止它正在执行的操作,并调用一些特殊的代码来处理这个新事件。
一个很好的例子是从硬盘读取数据。驱动器速度很慢,您不希望操作系统等待数据恢复;你希望操作系统去做其他事情。因此,您设置了系统,以便在磁盘有请求的数据时引发中断。在磁盘的中断服务程序中,CPU将获取现在已准备好的数据并将其返回给请求者。
ISR经常需要快速发生,因为硬件可能有一个有限的缓冲区,如果它现在已经足够快地被关闭,它将被新数据覆盖。 当CPU正在服务一个ISR时,让ISR快速完成也很重要,否则其他中断将被屏蔽,这意味着如果CPU无法快速到达它们,则可能会丢失足够的数据。
要理解的最好方法是自己做一些简单的例子。
最小的16位例如
首先学习如何创建一个最小的bootloader OS和QEMU和实际的硬件上运行它,因为我在这里解释:https://stackoverflow.com/a/32483545/895245
现在,你可以在16运行位实模式:
movw $handler0, 0x00
mov %cs, 0x02
movw $handler1, 0x04
mov %cs, 0x06
int $0
int $1
hlt
handler0:
/* Do 0. */
iret
handler1:
/* Do 1. */
iret
这会怎么做才能:
Do 0.
Do 1.
hlt
:停止执行
注意处理器如何查找第一个处理程序的地址0
,并且在4
第二个:那就是处理程序表叫IVT,每个条目有4个字节。
Minimal example that does some IO使处理程序可见。
保护模式
现代操作系统在所谓的保护模式下运行。
在这种模式下处理有更多的选择,所以它更复杂,但精神是一样的。
参见
- 1. 先发中断处理程序会发生什么?
- 2. 中断HTTP流时会发生什么?
- 3. 如果HttpClient.execute()中断会发生什么?
- 4. 当电话中断应用程序时,android应用程序会发生什么?
- 5. 发生中断时,x86架构中会发生什么?
- 6. 服务被销毁后,远程进程托管服务会发生什么?
- 7. 如果中断处理程序开始旋转会发生什么?
- 8. 中断服务程序8086
- 9. 当程序运行时发生事件时会发生什么
- 10. 当我在域服务中写Me.objectcontext时会发生什么?
- 11. 什么都不能在中断服务程序?
- 12. System.Data.SqlClient.SqlTransaction.Dispose中会发生什么?
- 13. 当线程T1加入线程T2和T2时会发生什么事情会发生中断
- 14. 会发生什么?
- 15. 会发生什么?
- 16. 会发生什么?
- 17. 会发生什么?
- 18. 会发生什么?
- 19. 会发生什么?
- 20. 如果程序没有大括号,程序会发生什么?
- 21. 编程stm32f10x:链接寄存器在进入中断服务程序时会得到什么值?为什么?
- 22. 取消任务时会发生什么?
- 23. 为什么“java.rmi.ServerException:RemoteException发生在服务器线程中”显示?
- 24. 。服务器上发生了什么?
- 25. 请求来到Tomcat服务器时会发生什么?
- 26. 如果Web服务更改参数会发生什么情况?
- 27. 如果服务多次启动会发生什么?
- 28. 为什么会发生500内部服务器错误?
- 29. meteor当服务器丢失时会发生什么
- 30. 如果UDP服务器宕机,会发生什么