Systemopkald vs. afbrydelse
En typisk processor udfører instruktioner én efter én. Men der kan være tilfælde, hvor processoren skal stoppe midlertidigt og holde den aktuelle instruktion og udføre et andet program eller kodesegment (boende et andet sted). Efter at have gjort dette, vender processoren tilbage til normal udførelse og fortsætter, hvor den slap. Et systemopkald og en afbrydelse er sådanne lejligheder. Et systemkald er et opkald til en subrutine, der er indbygget i systemet. En interrupt er en programkontrolafbrydelse forårsaget af eksterne hardwarehændelser.
Hvad er et systemopkald?
Systemopkald giver programmer, der kører på computeren, en grænseflade til at tale med operativsystemet. Når et program skal bede om en tjeneste (som det ikke selv har tilladelse til) fra kernen af operativsystemet, bruger det et systemkald. Processer på brugerniveau har ikke de samme tilladelser som de processer, der interagerer direkte med operativsystemet. For at kommunikere med en ekstern I/O-enhed eller for at interagere med andre processer, skal et program bruge systemkald.
Hvad er en afbrydelse?
Under normal afvikling af et computerprogram kan der være hændelser, der kan få CPU'en til midlertidigt at stoppe. Begivenheder som denne kaldes interrupts. Afbrydelser kan være forårsaget af enten software- eller hardwarefejl. Hardware-afbrydelser kaldes (simpelthen) Interrupts, mens software-interrupts kaldes Exceptions eller Traps. Når først en interrupt (software eller hardware) er hævet, overføres kontrollen til en speciel subrutine kaldet ISR (Interrupt Service Routine), der kan håndtere de forhold, der opstår ved afbrydelsen.
Som nævnt ovenfor er udtrykket Interrupt norm alt forbeholdt hardware-afbrydelser. De er programkontrolafbrydelser forårsaget af eksterne hardwarehændelser. Her betyder ekstern eksternt til CPU'en. Hardwareafbrydelser kommer norm alt fra mange forskellige kilder såsom timer-chip, perifere enheder (tastaturer, mus osv.), I/O-porte (serielle, parallelle osv.), diskdrev, CMOS-ur, udvidelseskort (lydkort, video). kort osv.). Det betyder, at hardwareafbrydelser næsten aldrig forekommer på grund af en eller anden begivenhed relateret til det eksekverende program. For eksempel kan en hændelse som et tastetryk på tastaturet af brugeren eller en intern hardware-timer-timeout forårsage denne form for afbrydelse og kan informere CPU'en om, at en bestemt enhed har brug for noget opmærksomhed. I en situation som denne stopper CPU'en, hvad den end gjorde (dvs. sætter det aktuelle program på pause), leverer den service, som kræves af enheden og vender tilbage til det normale program.
Hvad er forskellen mellem systemopkald og afbrydelse?
Systemkald er et opkald til en underrutine, der er indbygget i systemet, mens Interrupt er en hændelse, som får processoren til midlertidigt at holde den aktuelle udførelse. En stor forskel er dog, at systemopkald er synkrone, mens afbrydelser ikke er det. Det betyder, at systemopkald forekommer på et fast tidspunkt (norm alt bestemt af programmøren), men afbrydelser kan forekomme når som helst på grund af en uventet hændelse, såsom et tastetryk på tastaturet af brugeren. Derfor skal processoren, når der nogensinde opstår et systemkald, kun huske, hvor den skal vende tilbage til, men i tilfælde af en afbrydelse skal processoren huske både stedet og systemets tilstand. I modsætning til et systemopkald har en afbrydelse norm alt ikke noget at gøre med det aktuelle program.