DOS kann als eine Bibliothek betrachtet werden, die verwendet wird, um eine Datei-/Verzeichnisabstraktion für den PC bereitzustellen (und ein bisschen mehr). int 21h
ist ein einfacher Hardware- "Trick", der es einfach macht, Code aus dieser Bibliothek aufzurufen, ohne vorher zu wissen, wo er sich im Speicher befindet. Alternativ können Sie sich das als den Weg zur Nutzung der DOS-API vorstellen.
Jetzt ist das Thema der Software-Interrupts eine komplexe, zum Teil, weil die Konzepte im Laufe der Zeit entwickelt, wie Intel Funktionen der x86-Familie hinzugefügt, während versucht, mit alter Software kompatibel zu bleiben. Eine richtige Erklärung würde ein paar Seiten brauchen, aber ich werde versuchen, mich kurz zu fassen.
Die wichtigste Frage ist, ob Sie in real-Modus oder geschützten Modus sind.
Real-Modus ist die einfache, "ursprüngliche" Betriebsart für den x86-Prozessor. Dies ist der Modus, in dem DOS ausgeführt wird (wenn Sie DOS-Programme unter Windows ausführen, wird ein Real-Modus-Prozessor virtualisiert, in dem die gleichen Regeln gelten). Das gerade laufende Programm hat die volle Kontrolle über den Prozessor. Im Realmodus gibt es eine Vektortabelle, die dem Prozessor mitteilt, zu welcher Adresse er für jeden Interrupt von 0 bis 255 springen soll. Diese Tabelle wird vom BIOS und DOS sowie von Gerätetreibern und manchmal von Programmen mit gefüllt besondere Bedürfnisse. Einige dieser Unterbrechungen können durch Hardware (z. B. durch einen Tastendruck) erzeugt werden. Andere werden durch bestimmte Software-Bedingungen erzeugt (z. B. dividiere durch 0). Alle von ihnen können durch Ausführen der int n
Anweisung generiert werden.
Programme können das Flag "enable interrupts" setzen/löschen; Dieses Flag betrifft nur Hardware-Interrupts und wirkt sich nicht auf int
Anweisungen aus.
Die DOS-Entwickler entschieden sich für die Interrupt-Nummer 21h, um DOS-Anfragen zu bearbeiten - die Nummer hat keine wirkliche Bedeutung: Sie war zu der Zeit nur ein ungenutzter Eintrag. Es gibt viele andere (Nummer 10h ist eine BIOS-installierte Interrupt-Routine, die sich beispielsweise mit Grafiken beschäftigt). Beachten Sie auch, dass dies nur für IBM PC-kompatible Geräte gilt. x86-Prozessoren in zB eingebetteten Systemen können ihre Software- und Interrupt-Tabellen sehr unterschiedlich angeordnet haben!
Geschützter Modus ist der komplexe, "sicherheitsbewusste" Modus, der in den 286-Prozessor eingeführt und auf dem 386 erweitert wurde. Er bietet mehrere Berechtigungsebenen. Das Betriebssystem muss das alles konfigurieren (und wenn das Betriebssystem es falsch versteht, haben Sie einen potenziellen Sicherheits-Exploit). Benutzerprogramme sind im Allgemeinen auf einen "Minimalprivileg" -Modus beschränkt, bei dem der Versuch, auf Hardwareports zuzugreifen oder das Unterbrechungsflag zu ändern oder auf bestimmte Speicherbereiche zuzugreifen, das Programm anhält und das OS entscheidet, was zu tun ist (sei es Beenden) das Programm oder geben Sie dem Programm, was es zu wollen scheint).
Interrupt-Behandlung wird komplexer. Es genügt zu sagen, dass im Allgemeinen, wenn ein Benutzerprogramm einen Software-Interrupt ausführt, die Interrupt-Nummer nicht als ein Vektor in die Interrupt-Tabelle verwendet wird. Stattdessen wird eine allgemeine Schutzausnahme generiert, und der OS-Handler für diese Ausnahme kann (falls das Betriebssystem auf diese Weise entworfen wurde) herausfinden, was der Prozess wünscht und die Anfrage bearbeiten. Ich bin mir ziemlich sicher, dass Linux und Windows in der Vergangenheit (wenn nicht gerade) einen solchen Mechanismus für ihre Systemaufrufe verwendet haben. Aber es gibt andere Möglichkeiten, dies zu erreichen, wie zum Beispiel die SYSENTER-Anweisung.
Der andere Beitrag, den Sie verlinken, hat nicht wirklich viel mit INT 21h zu tun - es ist nicht etwas, wo Sie stoßen werden, wenn Sie mit 16-Bit-DOS-Code zu tun haben. Andere Betriebssysteme verwenden auch einen Interrupt für Systemaufrufe, allerdings nicht 21h - und nicht alte OS + CPUs verwenden stattdessen den neueren SYSCALL-Befehl. – snemarch