Sbrk
BRK und SBRK sind grundlegend Speicherverwaltung Systemaufrufe benutzt in Unix und Unix-artig Betriebssysteme zur Steuerung der an die zugewiesenen Speichermenge Datensegment des Prozess.[1] Diese Funktionen werden typischerweise von einer höheren Speicherverwaltungsbibliotheksfunktion aufgenommen, wie z. Malloc. Im ursprünglichen Unix -System, BRK und SBRK Wären die einzigen Möglichkeiten, wie Anwendungen zusätzlichen Datenraum erhalten konnten; Spätere Versionen ermöglichten dies auch mit der MMAP Anruf.[2][3]
Beschreibung
Die BRK- und SBRK -Anrufe sich dynamisch ändern Die Menge an Platz für das Datensegment des Aufrufprozesses. Die Änderung erfolgt durch Zurücksetzen der Programmunterbrechung des Prozesses, der den maximalen Platz bestimmt, der zugewiesen werden kann. Die Programmpause ist die Adresse des ersten Standorts über das aktuelle Ende des Datenbereichs hinaus. Die Menge des verfügbaren Raums steigt mit zunehmendem Bruchwert. Der verfügbare Speicherplatz wird auf einen Wert von Null initialisiert, es sei denn, die Pause wird gesenkt und dann erhöht, da er dieselben Seiten auf eine nicht näher bezeichnete Weise wiederverwendet werden kann. Der Unterbrechungswert kann automatisch auf eine für die geeignete Größe abgerundet werden Speicherverwaltung die Architektur.[4]
SBRK und BRK wurden auch nach Maßstäben von 1997 als Vermächtnis angesehen (Einzel -Unix -Spezifikation v2 oder pox.1-1998).[5] Sie wurden in POSIX.1-2001 entfernt.[6]
Funktionssignaturen und Verhalten
#enthalten int BRK(Leere* end_data_segment); Leere *SBRK(intptr_t Zuwachs);
SBRK wird verwendet, um den Programm des Programmunterbrechungswerts durch Hinzufügen einer möglicherweise negativen Größe anzupassen BRK wird verwendet, um den Break -Wert auf den Wert eines Zeigers einzustellen. Satz Zuwachs Parameter auf Null, um den aktuellen Wert des Programmbruchs zu holen.
Nach erfolgreicher Fertigstellung die BRK Unterroutine gibt einen Wert von 0 und die zurück SBRK Unterroutine gibt den vorherigen Wert der Programmpause zurück (wenn der verfügbare Speicherplatz erhöht wird, weist dieser vorherige Wert auch auf den Beginn des neuen Gebiets hin). Wenn eine Unterroutine erfolglos ist, ein Wert von –1 wird zurückgegeben und die Errno Globale Variable wird so eingestellt, dass der Fehler angezeigt wird.[5]
Nicht jedes Unix-ähnliche System unterhält das Konzept, dass der Benutzer das Datensegment steuert. Das Mac OS X Implementierung von SBRK ist eine Emulation und hat eine maximale Zuweisung von 4 Megabyte. Bei einem ersten Anruf wird ein Bereich von genau so groß zugewiesen, um das simulierte Segment zu halten. Wenn diese Grenze erreicht ist, wird –1 zurückgegeben und die Errno ist eingestellt auf Enomem. BRK Immer Fehler.[7]
Fehlercodes
Der Fehler Enomem wird gesetzt und der zugewiesene Raum bleibt unverändert, wenn einer oder mehrere der folgenden Teile wahr sind:
- Die angeforderte Änderung verteilt mehr Platz, als durch ein systembehindertes Maximum zulässig ist.
- Die angeforderte Änderung legt den Pausenwert auf einen Wert fest größer als oder gleich wie Die Startadresse von beigefügten Angehörigen geteilte Erinnerung Segment.
Siehe auch
Verweise
- ^ "Verarbeitung von Gedächtniskonzepten". Kostenlose Software -Stiftung. Abgerufen 9. Oktober 2015.
- ^ "Ein neuer Malloc (3) für OpenBSD" (PDF). Abgerufen 13. Juni 2018.
- ^ "POSIX -Speicherverwaltung". blog.pr4tt.com.
- ^ X/Open CAE -Spezifikation, Systemoberflächen und Header (PDF) (2 ed.). X/Open Company Ltd., Großbritannien September 1994. p. 64. Abgerufen 9. Oktober 2015.
- ^ a b "BRK, SBRK - Änderung der Raumzuweisung (Vermächtnis)". Die Single UNIX ® Spezifikation, Version 2. 1997. Abgerufen 30. November 2019.
- ^ Linux Programmierer Handbuch - Systemaufrufe - -
- ^ "Brk.c".