Wie schützt das Betriebssystem vor der Interaktion von Treibern beim Multitasking?

417
Vit

Ich habe nachgedacht. Betrachten wir dieses Beispiel: Wir haben 2 Programme, die auf dem PC laufen. Der erste ist zum Beispiel der Internetbrowser und der zweite ist eine WiFi-Scansoftware. Nun möchte der Browser die Internetverbindung über WLAN nutzen, aber für den WiFi-Scanner muss der WLAN-Adapter in den Scan-Modus geschaltet werden ...

OK, welche Seite in einer modernen Betriebssystemarchitektur ist für den Umgang mit solchen Kollisionen verantwortlich? Einige Betriebssystemebenen, Gerätetreiber oder das Programm selbst?

Denn der WiFi Scanner Scanner hat beispielsweise den WiFi Adapter in den Scanmodus geschaltet. Nun wurde der Browser gestartet. Das Betriebssystem wechselt also die CPU-Zeit zum Browser. Es ruft eine abstrakte OS-Schicht für ein Netzwerk auf, das den WLAN-Treiber aufruft und Daten von ihm empfangen möchte.

Grundsätzlich möchte ich wissen, wie diese Situationen gelöst werden. Ich habe viel darüber nachgedacht, aber ich habe es nie herausgefunden. Da gibt es mehrere Möglichkeiten:

Beispielsweise enthalten die in das Betriebssystem integrierten API-Funktionen, wie z. B. die Basis-API für das Drucken von Text in die Konsole, oder das Zeichnen in Windows, welcher Prozess zu welchem ​​tatsächlichen Frame auf dem Bildschirm selbst verarbeitet wird, und ruft den GPU-Treiber selbst auf, sodass keine Kollision entsteht.

Sie können jedoch Ihre eigenen Treiber schreiben, die nicht unter einer schweren Betriebssystem-API liegen. Und dann können zwei Anwendungen diesen Treiber für zwei entgegengesetzte Funktionen verwenden. Mein Hauptproblem in diesem Verständnis ist die Multitasking-Umgebung. Wie kann Prozess 2 eine Treiberfunktion aufrufen, wenn Prozess 1 ihn vorher aufgerufen hat und zu Prozess 2 gewechselt wurde, bevor die Treiberanforderung abgeschlossen wurde? Vielen Dank.

2

1 Antwort auf die Frage

3
Dr McKay

Beantworten Sie Ihre spezifische Frage (Browser mit Scanner). In jedem mir bekannten Betriebssystem verliert eine andere Anwendung die Konnektivität, wenn die WiFi-Karte in einen anderen Modus umgeschaltet wird (falls sie diesen Modus nicht zurückschalten kann, für einen Browser jedoch unwahrscheinlich). Die Konnektivität kehrt zurück, wenn der Scan abgeschlossen ist.

Und eine abstraktere Antwort. In jedem vernünftigen Betriebssystem gibt es eine HAL - Hardware Abstration Layer . Sogar X Server und Windows Windows rufen weder den Treiber für Video / Maus / Tastatur direkt auf. Jede Anforderung muss über HAL durchlaufen werden (ein Dateisystem muss beispielsweise nicht wissen, ob es sich bei einem bestimmten Gerät um ein Laufwerk, eine Festplatte oder etwas anderes handelt, es handelt sich lediglich um ein blockiertes Gerät).

Ich bin mir ziemlich sicher, dass HAL eine Art Warteschlange von Anforderungen unterhält, die an einen bestimmten Treiber weitergeleitet werden müssen. Im Grunde sind nur Probleme, die durch Multithreading verursacht werden, Race-Bedingungen, da diese Warteschlange FIFO ( First In First Out ) ist. In einer Situation mit einem Scanner und einem Browser gewinnt der Scanner, wenn er zuerst auf die WLAN-Karte zugreift, und die reguläre Konnektivität geht verloren. Wenn ein Browser jedoch zuerst seine Anfrage stellt, kann er Daten empfangen, und der Modus wird etwas später umgeschaltet.

Ich hoffe, das klärt die Dinge.