Книга: Архитектура операционной системы UNIX
6.2.4 Пространство процесса
6.2.4 Пространство процесса
Каждый процесс имеет свое собственное пространство, однако ядро обращается к пространству выполняющегося процесса так, как если бы в системе оно было единственным. Ядро подбирает для текущего процесса карту трансляции виртуальных адресов, необходимую для работы с пространством процесса. При компиляции загрузчик назначает переменной 'u' (имени пространства процесса) фиксированный виртуальный адрес. Этот адрес известен остальным компонентам ядра, в частности модулю, выполняющему переключение контекста (раздел 6.4.3). Ядру также известно, какие таблицы управления памятью используются при трансляции виртуальных адресов, принадлежащих пространству процесса, и благодаря этому ядро может быстро перетранслировать виртуальный адрес пространства процесса в другой физический адрес. По одному и тому же виртуальному адресу ядро может получить доступ к двум разным физическим адресам, описывающим пространства двух процессов.
Процесс имеет доступ к своему пространству, когда выполняется в режиме ядра, но не тогда, когда выполняется в режиме задачи. Поскольку ядро в каждый момент времени работает только с одним пространством процесса, используя для доступа виртуальный адрес, пространство процесса частично описывает контекст процесса, выполняющегося в системе. Когда ядро выбирает процесс для исполнения, оно ищет в физической памяти соответствующее процессу пространство и делает его доступным по виртуальному адресу.
Рисунок 6.7. Карта памяти пространства процесса в ядре
Предположим, например, что пространство процесса имеет размер 4 Кбайта и помещается по виртуальному адресу 2М. На Рисунке 6.7 показана карта памяти, где первые два регистра из группы относятся к программам и данным ядра (адреса и указатели не показаны), а третий регистр адресует к пространству процесса D. Если ядру нужно обратиться к пространству процесса A, оно копирует связанную с этим пространством информацию из соответствующей таблицы страниц в третий регистр. В любой момент третий регистр ядра описывает пространство текущего процесса, но ядро может сослаться на пространство другого процесса, переписав записи в таблице страниц с новым адресом. Информация в регистрах 1 и 2 для ядра неизменна, поскольку все процессы совместно используют программы и данные ядра.
- 6.1 СОСТОЯНИЯ ПРОЦЕССА И ПЕРЕХОДЫ МЕЖДУ НИМИ
- 6.2 ФОРМАТ ПАМЯТИ СИСТЕМЫ
- 6.2.2 Страницы и таблицы страниц
- 6.2.3 Размещение ядра
- 6.2.4 Пространство процесса
- 6.3 КОНТЕКСТ ПРОЦЕССА
- 6.4 СОХРАНЕНИЕ КОНТЕКСТА ПРОЦЕССА
- 6.5 УПРАВЛЕНИЕ АДРЕСНЫМ ПРОСТРАНСТВОМ ПРОЦЕССА
- 6.6 ПРИОСТАНОВКА ВЫПОЛНЕНИЯ
- 6.7 ВЫВОДЫ
- 6.8 УПРАЖНЕНИЯ
- Адресное пространство процесса
- 3.1. Адресное пространство Linux
- Контекст процесса
- Создание процесса
- Глава 14 Адресное пространство процесса
- Отображение файла на адресное пространство процесса
- 6.5 УПРАВЛЕНИЕ АДРЕСНЫМ ПРОСТРАНСТВОМ ПРОЦЕССА
- Встраиваемый сервер
- Функции munmap() и do_munmap(): удаление интервала адресов
- Области памяти
- 3.2.3. Системные вызовы: brk() и sbrk()