Poprzedni Następny

Przerwania w zwykłym Linuksie


if (index >= MAX_HWIFS)
return;
save_flags(flags);      /* all CPUs */
cli();            
hwif = &ide_hwifs[index];
if (!hwif->present)
	goto abort;
for (unit = 0; unit < MAX_DRIVES; ++unit) {
	drive = &hwif->drives[unit];
	if (!drive->present)
		continue;
	if (drive->busy || drive->usage)
		goto abort;
	if (DRIVER(drive)->cleanup(drive))
		goto abort;
}
 hwif->present = 0;
sti();
for (unit = 0; unit < MAX_DRIVES; ++unit) {
	drive = &hwif->drives[unit];
  • można je wyłączyć - makra cli() i sti()
  • kiedy są wyłączone, aktualnego procesu nie da się wywłaszczyć
  • w najnowszych kernelach czasy działania z wyłączonymi przerwaniami nie przekraczają 80 mikrosekund, niekiedy jednak to nadal zbyt dużo