gpt4 book ai didi

assembly - 处理来自辅助 PIC : EOI order important? 的 x86 IRQ

转载 作者:行者123 更新时间:2023-12-04 02:26:25 25 4
gpt4 key购买 nike

我最近在我的应用程序中添加了一个部件,旨在允许它使用属于辅助 PIC 的 IRQ 进行操作。特别是,中断处理程序需要向两个 PIC 发送中断结束条件信号,而不是仅向主 PIC 发送信号。 This is my code :

  push cs
pop ds
mov al, 20h ; acknowledge interrupt
cmp byte [serial_use_irqmask + 1], 0
je @F
out 0A0h, al ; to secondary PIC
@@:
out 20h, al ; to primary PIC

现在,在添加这一部分时,我考虑是先将 EOI 发送给次要 PIC,还是首先发送给主要 PIC。无论哪种方式,搜索都没有产生任何陈述。但是,我发现有些示例似乎选择了我最终实现的顺序;即首先是次要 PIC,然后是主要 PIC。

我的问题是,这有关系吗?是否有实际理由更喜欢这两种顺序?

次要PIC优先的例子

bootlib中断处理程序:

                movb $0x20, %al # end of interrupt command
outb %al, $0xA0 # PIC2 command port
outb %al, $0x20 # PIC1 command port

osdev.org wiki 的文章 on Interrupts :

mov al, 20h
out A0h, al
out 20h, al

Pure64中断处理程序:

        mov al, 0x20        ; Acknowledge the IRQ
out 0xA0, al
out 0x20, al

Dos64-stub中断处理程序:

Irq0007_1:
mov al,20h
out 20h,al
pop rax
swint:
iretq
;--- IRQs 8-F
Irq080F:
push rax
mov al,20h
out 0A0h,al
jmp Irq0007_1

优先PIC示例

德语维基百科文章中的示例 "Softwarebremse" (“Bremse”的意思是“刹车”):

   mov al, 20h
out 020h, al
out 0a0h, al
sti

最佳答案

我认为这不重要。
8259A 数据表不再阐明,仅说明(两次):

An EOI command must be issued twice: once for the master and once for the corresponding slave.

没有明确说明顺序。

首先将 EOI 发送给从属设备仍然不允许从属设备发出任何 IRQ(直到向主设备发送 EOI),因为主设备不会处理任何从属设备的请求。当主机收到 EOI 时,将允许所有 IRQ。

首先将 EOI 发送给主机将允许新的主机 IRQ 但不允许从机 IRQ,直到从机也收到 EOI。

因此先将 EOI 发送给从机不会改变系统的“可中断性”,而主机仍在等待其 EOI。
这允许更好地控制系统准备好接受低优先级中断的时刻。假设在 iret 之前设置了 IF 标志。


就 PIC 而言,没有使用特定顺序的技术要求。

我认为丢失从属 IRQ 的风险没有区别:PIC 将在相关 IRQ 引脚有效后立即设置 IRR 位,但仅在收到来自 CPU 的 ACK 后才设置 ISR 位(并且 IRR 位被清除)。
IRR-ISR 对形成一个迷你队列,IRR 在仍在处理中断时缓冲请求。
当slave先收到EOI而master没有收到时,是master通过不向CPU发出中断请求来阻止slave设置ISR和清除IRR。当master先收到EOI而slave没有收到时,slave自己不会发出中断请求。
在任何情况下,IRR 都不会被清除,并且只能缓冲一个 IRQ 请求。

首先将 EOI 发送给主机可能会更早地解锁其(高优先级)IRQ,但我们正在讨论一些指令的时间。
再次假设 IF 标志在 iret 之前设置。

我看不出有任何理由更喜欢这两种顺序中的任何一种。

关于assembly - 处理来自辅助 PIC : EOI order important? 的 x86 IRQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67254711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com