Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was ist ein Linux-Handle?

Was ist ein Linux-Handle?

青灯夜游
青灯夜游Original
2022-02-25 13:39:455824Durchsuche

Unter Linux ist ein Handle eine vom System verwaltete Referenz-ID. Der Kernel kann das Handle verwenden, um die Adresse des Dateiobjekts im Kernel zu berechnen Sie erhalten den Handle des Objekts.

Was ist ein Linux-Handle?

Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.

Was ist ein Handle? Ein Handle ist ein Bezeichner. Solange wir das Handle des Objekts erhalten, können wir jede Operation am Objekt ausführen. Ein Handle ist kein Zeiger. Dieses Handle kann ein Bezeichner, ein Zuordnungsschlüssel oder ein Zeiger sein. fd kann bis zu einem gewissen Grad als Ersatz für Handles angesehen werden. Linux verfügt über entsprechende Mechanismen, es gibt jedoch keinen einheitlichen Handle-Typ. Verschiedene Arten von Systemressourcen werden durch ihre jeweiligen Typen identifiziert und über ihre jeweiligen Schnittstellen bedient.

Auf Betriebssystemebene haben Dateioperationen auch ein ähnliches Konzept wie FILE. In Linux wird dies als Dateideskriptor (File Descriptor) und in Windows als Handle (Handle) bezeichnet (im Folgenden zusammenfassend als „when“ bezeichnet). (es besteht keine Unklarheit) als Handle). Der Benutzer öffnet die Datei über eine bestimmte Funktion, um ein Handle zu erhalten, und bearbeitet die Datei anschließend über das Handle.

Grobe Erklärung

Windows ist Handle, Liunx ähnelt fd. Im frühesten Windows-Entwicklungsbuch wird Handle als „Handle“ übersetzt. Obwohl es nicht gut klingt, finde ich persönlich, dass es ziemlich ausdrucksstark ist. Obwohl Sie nur den Griff halten, können Sie die gesamte Tür ziehen, und Sie müssen sich nicht darum kümmern, wie die Tür aussieht.

Wenn eine Tür mehrere Griffe hat und diese von verschiedenen Personen (Prozessen) gehalten werden , die Tür Es ist schwer zu sagen, wohin sie gehen soll. Der Grund für die Gestaltung eines solchen Handles besteht darin, dass das Handle Benutzer daran hindern kann, Dateiobjekte im Betriebssystemkernel nach Belieben zu lesen und zu schreiben. Unabhängig davon, ob es sich um Linux oder Windows handelt, ist das Dateihandle immer mit dem Dateiobjekt des Kernels verknüpft, die Details der Zuordnung sind für den Benutzer jedoch nicht sichtbar. Der Kernel kann die Adresse des Dateiobjekts im Kernel über das Handle berechnen, diese Möglichkeit steht Benutzern jedoch nicht zur Verfügung.

Handhabung in Liunx

Beim Linux-Systemdesign folgen wir dem Prinzip, dass alles eine Datei ist, d. h. Festplattendateien, Verzeichnisse, Netzwerk-Sockets, Festplatten, Pipes usw., all dies sind Dateien , in unserem Beim Öffnen wird ein fd zurückgegeben, bei dem es sich um das Dateihandle handelt. Wenn Sie häufig Dateien öffnen oder einen Netzwerk-Socket öffnen und vergessen, ihn freizugeben, wird das Handle durchgesickert. Im Linux-System gibt es eine Begrenzung für die Anzahl der Dateihandles, die ein Prozess aufrufen kann. Standardmäßig beträgt die maximale Anzahl der Handles, die jeder Prozess aufrufen kann, 1024. Wenn diese Grenze überschritten wird, wird der Prozess nicht aufgerufen Dadurch können neue Dateien oder Netzwerk-Sockets nicht geöffnet werden und es kommt zu einer Dienstverweigerung für Online-Server.

Das Folgende ist ein praktisches Beispiel. Unter Linux stehen fd mit den Werten ​​0, 1 und 2 für Standardeingabe, Standardausgabe und Standardfehlerausgabe. Der durch Öffnen der Datei im Programm erhaltene fd beginnt von 3 an zu wachsen.

Was genau ist fd?

Im Kernel verfügt jeder Prozess über eine private „Open-File-Tabelle“. Diese Tabelle ist ein Array von Zeigern, und jedes Element zeigt auf ein Kernel-Open-File-Objekt.

Und fd ist der Index dieser Tabelle. Wenn der Benutzer eine Datei öffnet, generiert der Kernel intern ein offenes Dateiobjekt, findet ein leeres Element in dieser Tabelle, lässt dieses Element auf das generierte offene Dateiobjekt verweisen und gibt den Index dieses Elements als fd zurück.

Da sich diese Tabelle im Kernel befindet und der Benutzer nicht darauf zugreifen kann, kann er die Adresse des geöffneten Dateiobjekts nicht abrufen, selbst wenn der Benutzer über fd verfügt, und kann es nur über die vom System bereitgestellten Funktionen bedienen.

In der C-Sprache ist der Kanal zum Bearbeiten von Dateien die FILE-Struktur. Es ist nicht schwer, sich vorzustellen, dass die FILE-Struktur in der C-Sprache eine Eins-zu-Eins-Beziehung mit fd haben muss fd.

In der Programmierung ist ein Handle ein spezieller intelligenter Zeiger. Wenn eine Anwendung auf Speicherblöcke oder Objekte verweisen möchte, die von anderen Systemen (z. B. Datenbanken und Betriebssystemen) verwaltet werden, werden Handles verwendet.

Der Unterschied zwischen einem Handle und einem gewöhnlichen Zeiger besteht darin, dass der Zeiger die Speicheradresse des referenzierten Objekts enthält, während das Handle eine vom System verwaltete Referenzkennung ist, die vom System an eine Speicheradresse verschoben werden kann. Dieser indirekte Objektzugriffsmodus verbessert die Kontrolle des Systems über das referenzierte Objekt.

In der Speicherverwaltung von Betriebssystemen (wie Mac OS und Windows) waren Handles in den 1980er Jahren weit verbreitet. Dateideskriptoren in Unix-Systemen sind grundsätzlich Handles. Wie andere Desktop-Umgebungen nutzt die Windows-API in großem Umfang Handles, um Objekte im System zu identifizieren und Kommunikationskanäle zwischen dem Betriebssystem und dem Benutzerbereich einzurichten. Beispielsweise wird ein Formular auf dem Desktop durch ein Handle vom Typ HWND identifiziert.

Heutzutage haben die Erhöhung der Speicherkapazität und virtuelle Speicheralgorithmen dazu geführt, dass einfachere Zeiger immer beliebter werden, während Handles, die auf einen anderen Zeiger zeigen, in Ungnade gefallen sind. Trotzdem beziehen sich viele Betriebssysteme immer noch auf Zeiger auf private Objekte und interne Array-Indizes, die ein Prozess als Handles an den Client übergibt.

Verwandte Empfehlungen: „Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist ein Linux-Handle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist Linux KVM?Nächster Artikel:Was ist Linux KVM?