Softwareinterrupts, die in einer Queue landen bzw. irgendwas mit APIC zu tun haben? Das ist mir neu. Was passiert da?
Nun, irgendwo müssen die Interrupts wohl in einer Art Queue gehalten worden sein, so dass diese nach dem STI jeweils den Aufruf ihrer ISR bewirken. In wie weit dies mit Bochs zusammenhängt und ob es mit IRQs/IPIs entsprechend funktioniert, muss ich noch prüfen. Ist vielleicht noch hilfreich zu erwähnen, dass ich bisher noch mit dem alten PIC arbeite.
Edit: seltsam, ich hätte schwören können, nach CLI keine Interrupts mehr empfangen zu haben. Ändert jedoch nichts an der eigentlichen Problemstellung. Zumindest was IRQs und IPIs betrifft.
Zum genaueren Verständnis: Die Queue wird atomisch vom Hauptteil der ISR, welche für alle ISR gleich ist in die Queue geschrieben und im Scheduler beim Taskwechsel (bzw. bei mir im Hypervisor vor jedem Code-Block) atomisch gelesen und abgearbeitet. Mit diesem Prinzip würde ich dann ggf. eine zentrale Methodik zur Synchronisation relaisieren.
Wäre natürlich denkbar, dass sich die Queue-Register bzw. ihre Speicherlayouts je nach CPU-Modell unterscheiden. Falls irgendjemand, der den Thread liest genaue Zahlen hat, bitte hier posten!!!