Сбрк - Sbrk
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
BRK и sbrk основные управление памятью системные вызовы используется в Unix и Unix-подобный операционные системы для управления объемом памяти, выделенной для сегмент данных из процесс.[1] Эти функции обычно вызываются из функции библиотеки управления памятью более высокого уровня, такой как маллок. В исходной системе Unix BRK и sbrk были единственными способами, которыми приложения могли получить дополнительное пространство данных; более поздние версии позволяли это также делать с помощью mmap вызов.[2][3]
Описание
Вызовы brk и sbrk динамически изменять объем пространства, выделенного для сегмента данных вызывающего процесса. Изменение осуществляется путем сброса прерывания программы процесса, которое определяет максимальное пространство, которое может быть выделено. Разрыв программы - это адрес первого места за текущим концом области данных. Объем доступного пространства увеличивается с увеличением значения разрыва. Доступное пространство инициализируется нулевым значением, если разрыв не будет уменьшен, а затем увеличен, поскольку он может повторно использовать те же страницы каким-либо неопределенным образом. Значение разрыва может быть автоматически округлено до размера, подходящего для управление памятью архитектура.[4]
sbrk и BRK считаются устаревшими даже по стандартам 1997 года (Единая спецификация UNIX v2 или POSIX.1-1998).[5] Они были удалены в POSIX.1-2001.[6]
Сигнатуры и поведение функций
#включают <unistd.h>int BRK(пустота* end_data_segment);пустота *sbrk(intptr_t приращение);
sbrk используется для настройки значения прерывания программы путем добавления возможно отрицательного размера, а BRK используется для установки значения разрыва на значение указателя. Набор приращение нулевое значение, чтобы получить текущее значение прерывания программы.
После успешного завершения BRK подпрограмма возвращает значение 0, а sbrk подпрограмма возвращает предыдущее значение прерывания программы (если доступное пространство увеличивается, это предыдущее значение также указывает на начало новой области). Если какая-либо подпрограмма завершилась неудачно, значение −1 возвращается и errno глобальная переменная установлен, чтобы указать на ошибку.[5]
Не каждая Unix-подобная система поддерживает идею о том, что пользователь может управлять сегментом данных. В Mac OS X реализация sbrk является эмуляцией и имеет максимальный размер 4 мегабайта. При первом вызове для моделирования сегмента выделяется именно такая большая область. Когда этот предел достигнут, возвращается -1 и errno установлен на ЭНОМЕМ. BRK всегда ошибки.[7]
Коды ошибок
Ошибка ЭНОМЕМ установлен, и выделенное пространство остается неизменным, если выполняется одно или несколько из следующих условий:
- Запрошенное изменение выделяет больше места, чем разрешено установленным системой максимумом.
- Запрошенное изменение устанавливает значение перерыва в значение больше или равно начальный адрес любого прикрепленного Общая память сегмент.
Смотрите также
Рекомендации
- ^ «Концепции памяти процесса». Фонд свободного программного обеспечения. Получено 9 октября 2015.
- ^ «Новый malloc (3) для OpenBSD» (PDF). Получено 13 июн 2018.
- ^ «Управление памятью POSIX». blog.pr4tt.com.
- ^ Спецификация X / Open CAE, системные интерфейсы и заголовки (PDF) (2-е изд.). X / Open Company Ltd., Великобритания, сентябрь 1994 г., стр. 64. Получено 9 октября 2015.
- ^ а б "brk, sbrk - изменить выделение пространства (НАСЛЕДИЕ)". Единая спецификация UNIX®, версия 2. 1997. Получено 30 ноября 2019.
- ^ Linux Программиста Руководство - Системные вызовы –
- ^ https://opensource.apple.com/source/Libc/Libc-1272.250.1/emulated/brk.c.auto.html