BSD, Ядро, Память

Службы управления памятью (часть 3)

Изначально большинство исполняемых файлов компоновались статически. В статиче­ски скомпонованном двоичном файле все библиотечные процедуры и заглушки для системных вызовов загружались в двоичный файл во время компиляции. В настоящее время большинство двоичных файлов используют динамическое связывание. Двоичный файл с динамическим связыванием содержит лишь код откомпилированного приложе­ния и список нужных процедур (библиотечных и заглушек системных вызовов).

Службы управления памятью (часть 2)

Чтобы начать выполнение, ядро отображает кодовую часть файла в нижнюю часть адресного пространства, начиная со второй страницы виртуального адресного про­странства. Первая страница виртуального адресного пространства помечается как недействительная, чтобы попытки читать или записывать с использованием пустого указателя вызывали ошибку. Часть файла с инициализированными данными отобража­ется в адресное пространство сразу за кодом. После области инициализированных данных создается область с размером неинициализированных данных из заполненной нулями памяти.

Службы управления памятью (часть 1)

Каждый процесс начинает выполнение с тремя сегментами памяти: кода (text), данных и стека. Сегмент данных делится на инициализированные данные и неини­циализированные данные (известные также как BSS). Сегмент text является сегментом только для чтения и обычно разделяется между всеми процессами, выполняющими файл, тогда как в области данных и стека может быть осуществлена запись и они индиви­дуальны для каждого процесса. Сегмент text и инициализированные данные для процесса считываются из исполняемого файла.

Управление памятью внутри ядра

Ядро часто выделяет память, которая нужна лишь на протяжении одного системного вызова. В процессе пользователя такая кратковременная память была бы выделена в стеке времени выполнения. Поскольку у ядра ограниченный стек времени выполне­ния, нереально выделять в нем блоки памяти даже умеренного размера. Соответствен­но такая память должна выделяться посредством более динамического механизма. Например, когда система должна преобразовать имя пути, она должна выделить для хранения имени буфер в 1 Кб.

RSS-материал