MLOCK 2 C -Funktion

MLOCK 2 C -Funktion
Die mit dem virtualisierten Adressbereich verknüpften physischen Seiten, die am ADDR beginnen. Die Seiten, die durch eine oder sogar mehr MLOCK -Methoden eingeschränkt wurden. Der Speicher sollte während des gesamten Bereichs zugewiesen werden. Die angegebenen Seiten nach einem solchen MLOCK -Aufruf führen nicht zu fehlerhaften Seiten oder Adressübersetzungsproblemen, es sei denn, sie werden freigegeben. Auf Systemen mit Entwicklungstools TLBs können sie dennoch zu Schutzversagen oder TLB-MISS-Problemen führen. Sobald alle eingeschränkten Zuordnungen für die Seiten gelöscht sind, werden die tatsächlichen Seiten im Speicher aufbewahrt.

Durch ihre virtuellen Adressübersetzungen können die verschiedenen Operationen dieselben Realseiten blockieren. Durch verschiedene virtuelle Übersetzungen derselben Seiten oder gestapelten MLOCK -Anfragen zum identischen Adressbereich kann eine Einzelmethode auch mehrere Seiten haben, die gesperrt sind. Eine Aufruf zur Munmap () -Funktion.

Nach nur einer Gabel werden die blockierten Übersetzungen nicht an den Kinderprozess weitergegeben. Themen können nur eine bestimmte Menge physischer RAM schließen, da es sich um ein relativ knappes Gut handelt. Sowohl die Beschränkung der Asset-Beschränkung von Rlimit_Memlock Asset als auch die plattformweite „verdrahtete Seiten“ können durch einen einzelnen Thread blockiert werden. Obwohl die NETBSD -Implementierungen das nächste Vielfache der Seitenzahl runden würden, muss der transportable Code sicherstellen.

Rückgabewerte

Rückkehr 0 bedeutet, dass der Anruf erfolgreich ist und fast alle Seiten im Bereich entweder blockiert oder freigegeben wurden. Der Sperrzustand jeder Seite in der Domäne bleibt unverändert, wenn der numerische Wert -1 beträgt, was auf eine Ausnahme hinweist. Der Fehler wird in dieser Situation angezeigt, indem der globale Standort errno festgelegt wird.

Fehler

Die Funktion mLock () kann aus mehreren Gründen fehlschlagen. In diesem Teil des Artikels werden wir die Anzahl der Ausnahmen diskutieren, die wir nach dem Fehler der Funktion mLock () zusammen mit ihren Gründen für die Ausführung von Ausführung erhalten haben. Hier sind einige der Fehler, die wir bisher finden können:

  • Eagain: Dieser Fehler kann auftreten, wenn die Sperrung des angegebenen Bereichs entweder als der Server oder den Schwellenwert pro Prozess für eingeschränkten Speicher weitergehen würde. Daher stürzt der MLOCK () in einem solchen Fall ab.
  • Einval: Dieser Fehler kann auftreten, wenn die angegebene Adresse, sondern die Länge nicht die Seite koordiniert ist. In diesem Fall funktioniert die Lösung nicht so, wie sie sollte.
  • Enomem: Das Fehler- oder Übersetzungsproblem einer Seite tritt auf, wenn dieser Fehler gefunden wird. Dies liegt daran.
  • Eperm: Der Eperm-Fehler wird bisher auf einer Plattform gefunden, auf der die Buchhaltung der Verriegelung nicht unterstützt wird und die Funktion mLock () von einem Nicht-Root-Benutzer aufgerufen wird.

Die Munlock () -Funktion, die gleichzeitig mit der Funktion mLock () verwendet wird, kann aus mehreren Gründen fehlschlagen. In diesem Teil des Artikels werden wir die Anzahl der Ausnahmen diskutieren, die wir nach dem Versagen der Munlock () -Funktion erhalten, zusammen mit ihren Gründen für die Ausführung. Hier sind einige der Fehler, die wir bisher finden:

  • Einval: Die Lösung rund nicht und weder die Adresse noch die angegebene Länge ist die Seite ausgerichtet.
  • Enomem: In mehreren der bereitgestellten Adressbereiche gibt es nicht zugewiesene Adressen. Der angegebene Adressbereich ist nicht vollständig eingeschränkt.

Beispiel:

Um das Konzept der MLOCK () C -Funktion zu verstehen, werfen wir einen einfachen Beispiel an. Wir haben eine neue C -Datei namens „MSEG erstellt.c ”innerhalb des Ordners" Linux "Works".

Wir starten diesen Code mit der Verwendung der Standard -C -Bibliotheken, die für die reibungslose Ausführung des C -Codes erforderlich sind, i.e. stdio.H und Unistd.H. Das sys/mman.H Header wird verwendet, um die Verwendung der Speicherverriegelungsfunktionen zu ermöglichen. Danach beginnt die Ausführung mit der Initialisierung einer Ganzzahlvariablen von Data_Size bis 2048. Das Zeichenarray „Data_lock“ der Data_Size ist definiert und an die benutzerdefinierte Memory_Lock () -Funktion zusammen mit der Variablen data_size als Argument in der ersten „if“ -Anweisung übergeben.

Die benutzerdefinierte Memory_lock () -Funktion wird ausgeführt und erhält die Größe einer Seite in der Variablen page_size. Das Page_Offset wird berechnet und die Adresse wird an die Seitengrenze angepasst. Die Größe wird mit der Seite page_offset angepasst und die Funktion mLock () wird aufgerufen und mit den Variablen "Größe" und "Adress" zurückgegeben und zurückgegeben. Die Methode "if" Anweisung PERROR () wirft einen Fehler "lock_memory", wenn das zurückgegebene Ergebnis gleich -1 ist. Andernfalls druckt die Anweisung an der elen.

Eine weitere Anweisung "IF-ELSE" wird verwendet, um das Schloss freizugeben. Die Funktion MEAMMEIT_UNLOCK () wird in der Anweisung „if“ aufgerufen, indem die Data_lock und data_size als Argumente bestanden werden. Nach derselben Prozedur folgt diese Funktion, wie wir in der Funktion memory_lock () befolgt werden. Die einzige Änderung besteht darin. Die zweite Anweisung "if" wirft eine Ausnahme "Unlock_Memory" mit der Perror -Funktion aus, wenn das Ergebnis -1 äquivalent ist. Andernfalls wird in der else -Anweisung angezeigt, dass „der Speicher entsperrt wird“ mit der Printf -Funktion.

Wir haben eine Objektdatei dieser C-Datei mit der Option GCC Compiler "-o" erstellt.

Nachdem wir die Objektdatei ausgeführt hatten.

Abschluss

Hier geht. Wir haben die Erklärung, die Syntax, die Fehler und die Rückgabewert der MLOCK -Funktion zusammen mit einem detaillierten Beispiel hinzugefügt. Dieses Tutorial würde den Benutzern ausreichen, um diese Funktion in der C -Programmiersprache in die Hände zu bekommen.