Heim > php教程 > PHP开发 > Hauptteil

Device Mapper-Mechanismus im Linux-Systemkernel (1) (3)

黄舟
Freigeben: 2016-12-23 14:08:03
Original
1445 Leute haben es durchsucht

3. Der User-Space-Befehl ruft die Funktion table_load über ioctl auf. Diese Funktion erstellt die Zuordnungstabelle des angegebenen zugeordneten Geräts und des zugeordneten Zielgeräts basierend auf den vom Benutzerbereich übergebenen Parametern. Diese Funktion erstellt zunächst die entsprechenden Strukturen dm_table und dm_target, ruft dann die Funktion dm_table_add_target in dm-table.c auf, um diese Strukturen gemäß den vom Benutzer übergebenen Parametern zu initialisieren, und ruft die Konstruktionsfunktion ctr des entsprechenden Zieltyps entsprechend auf Der durch die Parameter angegebene Zieltyp erstellt die Struktur, die dem Zielgerät im Speicher entspricht, und aktualisiert dann den in dm_table verwalteten B-Baum basierend auf der festgelegten dm_target-Struktur. Nachdem der obige Vorgang abgeschlossen ist, fügen Sie die erstellte dm_table zur hash_cell-Struktur hinzu, die der globalen Hash-Tabelle des zugeordneten Geräts entspricht.

4. Rufen Sie abschließend die Funktion do_resume über ioctl auf, um die Bindungsbeziehung zwischen dem zugeordneten Gerät und der Zuordnungstabelle herzustellen. Tatsächlich besteht der Prozess darin, den aktuellen dm_table-Strukturzeigerwert dem entsprechenden Zuordnungsfeld zuzuweisen mapped_device über die Funktion dm_swap_table und dann Ändern Sie dann das Feld „mapped_device“, das den aktuellen Status angibt.

Durch die oben genannten vier Hauptschritte erstellt der Geräte-Mapper ein zugeordnetes logisches Blockgerät im Kernel, das Benutzern bereitgestellt werden kann.

IO-Stream

Die wesentliche Funktion des Device Mappers besteht darin, IO-Anfragen vom dem logischen Gerät zugeordneten Gerät an das entsprechende Zielgerät weiterzuleiten, basierend auf der Zuordnungsbeziehung und den vom Ziel beschriebenen IO-Verarbeitungsregeln Treiber. Der Device Mapper verarbeitet alle Block-Lese- und Schreib-IO-Anfragen, die von den Schnittstellen generic_make_request und subscribe_bio des Block-Level-IO-Subsystems im Kernel an das zugeordnete Gerät gerichtet sind. E/A-Anfragen werden im Gerätebaum des Device Mappers durch Anforderungsweiterleitung von oben nach unten verarbeitet. Wenn eine Bio-Anfrage über das zugeordnete Gerät im Gerätebaum nach unten weitergeleitet wird, werden ein oder mehrere Bio-Klone erstellt und an das tiefer liegende Zielgerät gesendet. Der gleiche Vorgang wird dann auf jeder Ebene des Gerätebaums wiederholt. Solange der Gerätebaum groß genug ist, kann dieser Weiterleitungsprozess theoretisch unbegrenzt fortgesetzt werden. Auf einer bestimmten Ebene im Gerätebaum meldet der Zieltreiber, nachdem er eine Bio-Anfrage beendet hat, das Ereignis, das das Ende der Bio-Anfrage angibt, an sein oberes zugeordnetes Gerät. Dieser Vorgang wird auf jeder Ebene durchgeführt, bis das Ereignis schließlich auf das hochgeladen wird Bisher beendet der Device Mapper die ursprüngliche Bio-Anfrage auf dem Root-zugeordneten Gerät und beendet den gesamten E/A-Anfrageprozess.

Wenn Bio Schicht für Schicht im Gerätebaum des Geräte-Mappers weiterleitet, wird es schließlich an einen oder mehrere Blattzielknoten weitergeleitet und beendet. Da eine Bio-Anfrage nicht mehrere Zielgeräte (d. h. physische Raumsegmente) umfassen kann, klont der Geräte-Mapper auf jeder Ebene ein oder mehrere BIOS basierend auf den Zielzuordnungsinformationen des zugeordneten Geräts, die der Benutzer im Voraus mitgeteilt hat, und zerlegt das Nach der Aufteilung wird es an das entsprechende Zielgerät weitergeleitet. Diese geklonten BIOS werden zunächst zur Verarbeitung an den entsprechenden Zieltreiber auf dem zugeordneten Gerät übergeben. Die E/A-Anfragen werden gemäß den im Zieltreiber definierten E/A-Verarbeitungsregeln gefiltert und verarbeitet und dann zur Vervollständigung an das Zielgerät übermittelt. Der obige Vorgang wird in der Funktion dm_request in der Datei dm.c abgeschlossen. Der Zieltreiber kann diese BIOS wie folgt verarbeiten:

1. Stellen Sie diese BIOS zur späteren Verarbeitung in die Warteschlange

2. Leiten Sie die BIOS auf ein oder mehrere Zielgeräte oder verschiedene Sektoren auf jedem Ziel um Gerät;

3 Fehlerstatus an den Geräte-Mapper zurückgeben.

Die IO-Anfrage wird Schicht für Schicht im in Abbildung 2 dargestellten Gerätebaum gemäß dem oben beschriebenen Prozess verarbeitet, bis die IO-Anfrage abgeschlossen ist.

Zusammenfassung

Device Mapper bietet eine Zuordnungsarchitektur von logischen Geräten zu physischen Geräten im Kernel. Solange der Benutzer die Zuordnungsstrategie im Benutzerbereich formuliert, kann er die Verarbeitungsdetails entsprechend schreiben An seine eigenen Bedürfnisse kann das Zieltreiber-Plug-in für IO-Anfragen problemlos einen logischen Volume-Manager ähnlich wie LVM implementieren. Device Mapper stellt externe Schnittstellen in Form von ioctl bereit. Benutzer verwenden die Device Mapper-Bibliothek im Benutzerbereich, um ioctl-Befehle an das Zeichengerät des Device Mappers zu senden, um die interne Kommunikation abzuschließen. Es bietet außerdem einen Benachrichtigungsmechanismus für gewünschte Ereignisse über ioctl, der es dem Zieltreiber ermöglicht, bestimmte E/A-bezogene Ereignisse an den Benutzerbereich zu übertragen.

Das Obige ist der Inhalt des Device Mapper-Mechanismus (1) (3) im Linux-Systemkernel. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!