[Kos-dev] Des nouvelles...

d2 kos-dev@enix.org
22 Jul 2002 18:55:43 +0200


--=-=-=


Hello,

Je viens de regarder le code : les idte pour les irq ont les bits 8-15
a 0x8E, soit 10001110 en binaire -> bits 8/9 resp. a 0/1 => interrupt
gate => IF a 0 (cf Intel 5.10.1.2) => interruptions desactivees.

Le EOI est envoye apres l'appel de l'ISR, et spawn_dsr() est appele
apres l'EOI pour l'ISR la plus externe seulement. D'autre part, dans
spawn_dsr(), les interruptions sont explicitement reactivees a chaque
lancement de DSR, et bien sur desactivees a chaque iteration de la
boucle de choix du DSR (ca me parait safe cote race condition).

Ce qui donne le chronogramme suivant :

--=-=-=
Content-Type: application/xfig
Content-Disposition: attachment; filename=chrono-irq.fig

#FIG 3.2
Landscape
Center
Metric
A4      
100.00
Single
-2
1200 2
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
	1 1 1.00 75.00 150.00
	 2475 4950 10170 4950
2 2 0 0 0 11 50 0 30 0.000 0 0 -1 0 0 5
	 2475 4275 3600 4275 3600 4725 2475 4725 2475 4275
2 1 0 3 19 5 50 0 30 8.000 0 0 -1 1 0 2
	1 1 3.00 90.00 180.00
	 3600 4950 3600 2475
2 1 0 3 4 5 50 0 30 8.000 0 0 -1 1 0 2
	1 1 3.00 90.00 180.00
	 4725 4950 4725 2475
2 1 0 1 -1 5 50 0 30 4.000 0 0 -1 1 0 2
	1 1 1.00 60.00 150.00
	 4185 3330 4185 3600
2 2 0 0 0 19 50 0 20 0.000 0 0 -1 0 0 5
	 3600 3600 5175 3600 5175 3825 3600 3825 3600 3600
2 1 0 1 -1 5 50 0 30 4.000 0 0 -1 1 0 2
	1 1 1.00 60.00 150.00
	 5400 2655 5400 2925
2 1 0 1 -1 5 50 0 30 4.000 0 0 -1 0 1 2
	0 0 1.00 60.00 120.00
	 5265 3150 5265 3600
2 2 0 0 0 4 50 0 20 0.000 0 0 -1 0 0 5
	 5265 2925 6840 2925 6840 3150 5265 3150 5265 2925
2 1 0 1 -1 5 50 0 30 4.000 0 0 -1 1 0 2
	1 1 1.00 60.00 150.00
	 6840 3150 6840 3600
2 2 0 0 0 5 50 0 30 0.000 0 0 -1 0 0 5
	 6840 3600 7740 3600 7740 3825 6840 3825 6840 3600
2 2 0 0 0 19 50 0 30 0.000 0 0 -1 0 0 5
	 8640 4275 9765 4275 9765 4725 8640 4725 8640 4275
2 2 0 0 0 12 50 0 30 0.000 0 0 -1 0 0 5
	 7740 4275 8640 4275 8640 4725 7740 4725 7740 4275
2 1 0 1 -1 5 50 0 30 4.000 0 0 -1 1 0 2
	1 1 1.00 60.00 150.00
	 7740 3825 7740 4275
2 1 0 1 -1 5 50 0 -1 4.000 0 0 -1 0 0 3
	 8370 4050 8640 4275 8910 4050
2 1 0 1 -1 5 50 0 30 4.000 0 0 -1 1 0 2
	1 1 1.00 60.00 150.00
	 7470 3330 7470 3600
2 2 0 0 0 5 50 0 30 0.000 0 0 -1 0 0 5
	 5175 3600 5265 3600 5265 3825 5175 3825 5175 3600
2 1 0 1 -1 5 50 0 30 4.000 0 0 -1 0 1 2
	0 0 1.00 60.00 120.00
	 5175 3825 5175 4275
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
	0 0 1.00 60.00 120.00
	 5850 4275 5265 3825
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
	0 0 1.00 60.00 120.00
	 6075 4275 6840 3825
4 0 0 50 0 0 16 0.0000 4 195 705 2700 4590 Task A\001
4 0 -1 50 0 12 16 1.5708 4 210 1950 4230 3330 mark_dsr(24);\001
4 0 19 50 0 18 16 1.5708 4 210 615 3690 2430 IRQ 1\001
4 0 4 50 0 18 16 1.5708 4 210 615 4815 2430 IRQ 0\001
4 0 7 50 0 0 16 0.0000 4 165 495 4140 3780 ISR1\001
4 0 -1 50 0 12 16 1.5708 4 210 1950 5445 2655 mark_dst(12);\001
4 0 7 50 0 0 16 0.0000 4 195 555 5805 3105 ISR 0\001
4 0 -1 50 0 0 14 1.5708 4 195 1005 8595 2385 [ blocking ]\001
4 0 0 50 0 0 16 0.0000 4 195 690 7875 4590 Task B\001
4 0 -1 50 0 0 16 0.0000 4 195 780 6930 3780 DSR 24\001
4 0 0 50 0 0 16 0.0000 4 195 765 8820 4590 DST 12\001
4 0 -1 50 0 1 14 1.5708 4 195 1035 8820 4095 reschedule()\001
4 0 -1 50 0 12 14 1.5708 4 180 1485 8595 4095 sem->take()\001
4 0 -1 50 0 1 14 0.0000 4 150 285 7785 4095 iret\001
4 0 -1 50 0 1 14 1.5708 4 195 1035 7515 3285 reschedule()\001
4 0 -1 50 0 1 14 0.0000 4 150 285 6480 3465 iret\001
4 0 0 50 0 0 12 0.0000 4 135 300 4905 4455 EOI\001
4 0 -1 50 0 1 14 0.0000 4 210 1035 5490 4455 spawn_dsr()\001
4 0 -1 50 0 1 14 0.0000 4 150 195 5310 3465 sti\001
4 0 0 50 0 0 12 0.0000 4 135 300 6795 2880 EOI\001

--=-=-=


Je la rajoute sur le cvs.

Bonne soiree,

-- 
d2

--=-=-=--