Книга: Архитектура операционной системы UNIX

6.5.3 Присоединение области к процессу

6.5.3 Присоединение области к процессу

Ядро присоединяет область к адресному пространству процесса во время выполнения системных функций fork, exec и shmat (алгоритм attachreg, Рисунок 6.19). Область может быть вновь назначаемой или уже существующей, которую процесс будет использовать совместно с другими процессами. Ядро выбирает свободную запись в частной таблице областей процесса, устанавливает в ней поле типа таким образом, чтобы оно указывало на область команд, данных, разделяемую память или область стека, и записывает виртуальный адрес, по которому область будет размещаться в адресном пространстве процесса. Процесс не должен выходить за предел установленного системой ограничения на максимальный виртуальный адрес, а виртуальные адреса новой области не должны пересекаться с адресами существующих уже областей. Например, если система ограничила максимально-допустимое значение виртуального адреса процесса 8 мегабайтами, то привязать область размером 1 мегабайт к виртуальному адресу 7.5M не удастся. Если же присоединение области допустимо, ядро увеличивает значение поля, описывающего размер области процесса в записи таблицы процессов, на величину присоединяемой области, а также увеличивает значение счетчика ссылок на область.

Кроме того, в алгоритме attachreg устанавливаются начальные значения группы регистров управления памятью, выделенных процессу. Если область ранее не присоединялась к какому-либо процессу, ядро с помощью функции growreg (см. следующий раздел) заводит для области новые таблицы страниц; в противном случае используются уже существующие таблицы страниц. Алгоритм завершает работу, возвращая указатель на точку входа в частную таблицу областей процесса, соответствующую вновь присоединенной области. Допустим, например, что ядру нужно подключить к процессу по виртуальному адресу 0 существующую (разделяемую) область, имеющую размер 7 Кбайт (Рисунок 6.20). Оно выделяет новую группу регистров управления памятью и заносит в них адрес таблицы страниц области, виртуальный адрес области в пространстве процесса (0) и размер таблицы страниц (9 записей).

алгоритм attachreg /* присоединение области к процессу */
входная информация:
 (1) указатель на присоединяемую область (заблокированную)
 (2) процесс, к которому присоединяется область
 (3) виртуальный адрес внутри процесса, по которому будет присоединена область
 (4) тип области
выходная информация: точка входа в частную таблицу областей процесса
{
 выделить новую запись в частной таблице областей процесса;
проинициализировать значения полей записи:
  установить указатель на присоединяемую область;
  установить тип области;
  установить виртуальный адрес области;
 проверить правильность указания виртуального адреса и размера области;
 увеличить значение счетчика ссылок на область;
 увеличить размер процесса с учетом присоединения области;
 записать начальные значения в новую группу аппаратных регистров;
 return (точку входа в частную таблицу областей процесса);
}

Рисунок 6.19. Алгоритм присоединения области

Оглавление книги


Генерация: 0.043. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз