In dit artikel leert u meer over het verschil tussen de ISR En functie oproep , maar voordat u de verschillen bespreekt, moet u in het kort kennis maken met de ISR en de functieaanroep.
restoperator van Python
Wat is ISR?
Een interrupt service routine (ISR) is een softwareroutine die hardware aanroept als reactie op een interrupt. ISR onderzoekt een interrupt, bepaalt hoe deze moet worden afgehandeld, voert deze uit en retourneert een logische interruptwaarde. Als er geen verdere afhandeling nodig is, informeert de ISR de kernel met een retourwaarde. Een ISR moet zeer snel presteren om te voorkomen dat de werking van het apparaat en de werking van alle ISR's met een lagere prioriteit worden vertraagd.
Hoewel een ISR gegevens van een CPU-register of een hardwarepoort naar een geheugenbuffer kan verplaatsen, vertrouwt deze over het algemeen op een speciale interruptthread (of taak), de interrupt service thread (IST) genoemd, om het grootste deel van de vereiste verwerking uit te voeren. Als aanvullende verwerking vereist is, retourneert de ISR een logische interruptwaarde naar de kernel. Vervolgens wijst het een fysiek interruptnummer toe aan een logische interruptwaarde.
Mechanisme voor het afhandelen van onderbrekingen
Hieronder vindt u het mechanisme voor de afhandeling van interrupts in de volgende stappen, zoals:
- Een interrupt is een toestand die ervoor zorgt dat de CPU het huidige programma opschort en een ISR uitvoert. Een ISR is een speciaal geschreven programma om de toestand te verhelpen die de interrupt veroorzaakte.
- Nadat een interrupt is afgehandeld, keert de CPU terug naar het hoofdprogramma, precies bij de volgende instructie waar hij was gebleven.
- Bij interruptgestuurde gegevensoverdracht zal het I/O-apparaat, telkens wanneer het klaar is voor de gegevensoverdracht, de CPU onderbreken. In de ISR zal de CPU de gegevensoverdracht uitvoeren.
- Deze methode is beter dan pollen, omdat de CPU geen tijd hoeft te verspillen aan het controleren van de status van het I/O-apparaat. Een toetsenbord is een goed voorbeeld van interruptgestuurde I/O-toegang.
- In plaats van de CPU te controleren, zou het toetsenbord de CPU moeten onderbreken wanneer een toets wordt ingedrukt. Er wordt dus geen tijd verspild aan het herhaaldelijk controleren van het toetsenbord terwijl de gebruiker helemaal niet typt.
- Het I/O-apparaat vraagt om een interrupt door het verzenden van de $overline{INTR}$ signaal naar de CPU.
- Wanneer CPU ontvangt $overline{INTR}$ signaal, voltooit het de uitvoering van de huidige instructie en voert vervolgens de ISR uit. Wanneer de CPU gereed is, verzendt deze een bevestigingssignaal via de TERWIJL lijn.
- ISR wordt uitgevoerd en de CPU keert terug naar het hoofdprogramma.
- I/O-apparaten schakelen de $overline{INTR}$ signaal na uitvoering.
Bijvoorbeeld: In het onderstaande voorbeeld vindt I/O-overdracht plaats via interruptgestuurde I/O.
- Als een I/O-apparaat dat een gegevensoverdracht met de processor wil uitvoeren, de processor moet onderbreken.
- Een interrupt is een voorwaarde die ervoor zorgt dat de processor een Interrupt Service Routine uitvoert.
- In de ISR voert de processor de gegevensoverdracht uit met het I/O-apparaat.
In dit voorbeeld onderbreekt u het verzoek door op de toetsenbordtoets te drukken,
- In plaats van dat de processor controleert of een toets wordt ingedrukt, onderbreekt het toetsenbord de processor bij het indrukken van een toets.
- In de ISR van het toetsenbord, die deel uitmaakt van de toetsenborddriversoftware, leest de processor de gegevens van het toetsenbord.
Voordelen van ISR
Hieronder staan de volgende voordelen van ISR, zoals:
computer definiëren
- Asynchrone ISR-gebeurtenissen kunnen op elk moment tijdens de uitvoering van het programma plaatsvinden.
- ISR slaat de pc, vlaggen en registers op de stapel op, schakelt alle interrupts uit en laadt het adres van de ISR.
- ISR kan geen argumenten hebben die aan haar kunnen worden doorgegeven.
- ISR kan geen waarden retourneren.
- ISR maakt de interrupts mogelijk.
- Over het algemeen is de ISR klein omdat het de tijd van een ander proces kost.
- Sommige van ISR hebben hun eigen stack.
Wat is functieoproep?
Een functieaanroep wordt ook wel een subroutineaanroep genoemd. Een subroutine is een reeks instructies die het programma herhaaldelijk nodig heeft. Het maakt deel uit van een groter programma dat verantwoordelijk is voor het uitvoeren van een specifieke taak. Het grotere programma kan een zware werklast uitvoeren, en de subroutine voert mogelijk slechts een eenvoudige taak uit, die ook onafhankelijk is van de resterende programmacodering.
Een functie is zo gecodeerd dat deze meerdere keren en vanaf verschillende plaatsen kan worden aangeroepen (zelfs vanuit andere functies). Wanneer een functie wordt aangeroepen, kan de processor naar de plaats gaan waar de code voor de functie zich bevindt en de instructies van de functie één voor één uitvoeren. Na het voltooien van de functies keert de processor terug naar precies waar hij was gebleven en gaat hij verder met de uitvoering vanaf de volgende instructie.
Functies zijn een geweldig hulpmiddel voor hergebruik van code. Veel moderne programmeertalen ondersteunen functies. Een verzameling functies wordt a genoemd bibliotheek . Bibliotheken worden vaak gebruikt als middel om software te delen en te verhandelen. In sommige gevallen kan het hele programma een reeks subroutines zijn.
In het geval van een 8086-processor wordt een subroutine aangeroepen door a TELEFOONGESPREK instructie en controlerendementen door a RECHTS instructie. Het verkleint de omvang van het programma.
Verschil tussen ISR en functieoproep
Een functie moet expliciet worden aangeroepen en maakt deel uit van dezelfde context en uitvoeringsdraad als de aanroeper ervan. Een hardware-ISR wordt niet expliciet aangeroepen, maar eerder aangeroepen door een externe gebeurtenis. De context van de huidige thread wordt automatisch behouden wanneer een interrupt wordt aangeroepen voordat de context naar de ISR wordt geschakeld.
In ruil daarvoor vindt de omgekeerde contextschakelaar plaats, waardoor de toestand van de processor vóór de interrupt wordt hersteld, zodat de uitvoering doorgaat vanaf het punt van onderbreking. Hieronder staan nog enkele verschillen tussen ISR en functieaanroep.
ISR | Functie oproep |
---|---|
De interrupt wordt gewoonlijk geïnitieerd door een interne of externe signaalmicroprocessor in plaats van door het uitvoeren van instructies. De ISR wordt uitgevoerd nadat de huidige status van het programma in de stapel is opgeslagen. ISR voert verschillende taken uit, afhankelijk van het onderbroken apparaat of de instructies die door een programmeur zijn geschreven. | De functieaanroep wordt aangeroepen door instructies uit te voeren, die de specifieke taken uitvoeren en de omvang van het programma verkleinen. |
De hardware bepaalt het adres van de ISR. Het ISR-adres wordt in de interruptvectortabel geschreven en het ISR-adres voor elke interrupt ligt vast. | Het adres van de subroutine wordt in de instructie geschreven, die in de hoofdprogrammacode wordt geschreven. |
ISR wordt gebruikt voor alle algemene taken. | Functieaanroepen worden gedaan voor programmaspecifieke taken. |
Wanneer er een interrupt optreedt tijdens de uitvoering van een huidig programma, voert de processor daarom na de uitvoering van de huidige instructie ISR uit. Na de uitvoering van ISR moet de processor het programma hervatten op precies dezelfde manier als voordat de interrupt plaatsvond. Hiervoor worden de PC-inhoud, µP-registers en enkele statusvoorwaarden opgeslagen. De verzameling van alle statusbitvoorwaarden in een microprocessor wordt PSW (programmastatuswoord) genoemd.
| Hier wordt alleen een pc op de stapel opgeslagen om het adres van de volgende instructie in het hoofdprogramma op te halen. De subroutine moet toegang hebben tot gegevens van de oproepende subroutine en resultaten naar die subroutine retourneren. Daarom worden subroutineparameters en datakoppeling uitgevoerd. Dit kan via
|