Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 15
Текст из файла (страница 15)
+ Управляющая информация. Ядро использует для поддержки управляющей информации о процессе лве основные структуры данных; область ц и структуру ргос. Каждый процесс также обладает собственным стеком ядра и картами трансляции адресов. + Полномочия. Включают в себя идентификаторы пользователя и группы, ассоциируемые с данным процессом (которые будут описаны в разделе 2.3.3).
+ Переменные окружения. Это набор строк в форме: перененная=значение Переменные окружения наследуются от родительского процесса. Во многих вариантах 1Л~1Х такие строки хранятся в вершине стека. Стандартные пользовательские библиотеки имеют функции лля добавления, удаления или изменения переменных, а также лля возврата ее значения. При запуске новой программы вызывающий процесс может сообщить функции ехес о том, что переменные окружения должны остаться «родительскими» или вместо этого предложить новый набор переменных.
+ Аппаратный контекст. Включает содержимое регистров общего назначения, а также набора специальных системных регистров. Системные регистры содержат: Программный счетчик (ргодгаш соцпгег, РС). Хранит адрес следующей выполняемой инструкции'. Указатель стека (згас1с ро1пгег, 3Р). Содержит адрес верхнего элемента стека'.
Слово состояния процессора (ргосезьог згагцз туогс1, Ро'гйг). Содержит несколько битов с информацией о состоянии системы, в том числе о текущем и предыдущем режимах выполнения, текущем и предыдущем уровнях приоритетов прерываний, а также биты переполнения и переноса. ' Обозначение характерно для машин РОР и процессоров АЖУРНА, в архитектуре 1псе! зту роль играет регистр (Е)1Р— указатель команд,!пэггпсноп рошгег.
Обозначения эр и Рэйг в ней сохранились. В дальнейшем мы будем чаше пользоваться вторым термином. — Прим. ред. з Или нижнего, для машин, в которых стек растет вниз. Также на некоторых системах указатель стека может содержать адрес, по которому будет занесен следуюнгий помешаем ы й в стек элемент. 68 Глава 2. Ядро и процессы Регистры управления памятью, в которых отображаются таблицы трансляции адресов процесса, Регистры сопроцессора (Е)оаГ1пя ро1пГ цп11, ЕРП). Машинные регистры содержат аппаратный контекст текущего выполняемого процесса. Когда происходит переключение контекста, эти регистры сохраняются в специальном разделе области ц текущего процесса, который называется блоком управления прог(ессом (ргосезз сон!го! Ыос)с, РСВ).
Ядро выбирает следующий процесс для выполнения и загружает его аппаратный контекст из блока РСВ. 2.3.3. Полномочия пользователя Каждый пользователь системы имеет свой уникальный номер, называемый идентификатором пользователя (пзег 1Р, или ШР).
Системный администратор обычно также создает несколько различных групп пользователей, каждая из которых обладает уникальным идентификатором группы (пзег ягоцр 1Р, или С1Р). Эти идентификаторы определяют принадлежность файлов, права доступа, а также возможность посылки сигналов другим процессам.
Все перечисленные атрибуты получили единое название полномочий. Система различает привилегированного пользователя, называемого супер- пользователем (зпрегпзег), который обычно входит в систему под именем гоо1. Этот пользователь имеет П1Р, равный О, и С1Р, равный 1. Он обладает многими полномочиями, недоступными обычным пользователям. Он может иметь доступ к чужим файлам независимо от установок их защиты, а также выполнять ряд привилегированных системных вызовов (например, ткпод, используемый для создания специальных файлов устройств). Многие современные системы 1ЛЧ1Х, такие как БЧК4.1/Е8, поддерживают расширенные механизмы заигиты )8). В этих системах поддержка суперпользователя заменена разделением привилегий при проведении различных операций.
Каждый процесс обладает двумя идентификаторами пользователя— реальным (геа!) и действительным (е11есг(че)'. После того как пользователь входит в систему, программа входа в систему выставляет обеим парам ШР и С1Р значения, определенные в базе паролей (то есть в файле /егс/раззггд или в некоем распределенном механизме, например службе !чгз корпорации Вцп М1сгозузгещз). Когда процесс создается при помощи 1огк, потомок наследует полномочия от своего прародителя.
Эффективный П1Р и эффективный СП) влияют на создание файлов и доступ к ним. Во время создания файла ядро устанавливает ему атрибуты владельца файла как эффективные !)!Р и СП) процесса, из которого был сделан вызов на создание файла. Во время доступа процесса к файлу ядро использует ' Есть саге третий — сохраненный (гачева). — Прин. рад. 2.3. Определение процесса 69 эффективные идентификаторы процесса для определения, имеет ли он право обращаться к этому файлу (подробнее см. раздел 8.2). Реальный ШР и реальный С11Э идентифицируют владельца процесса и влияют на право отправки сигналов. Процесс, не имеющий привилегий суперпользователя, может передавать сигналы другому процессу только в том случае, если реальный или эффективный ШР отправителя совпадает с реальным ШР получателя.
Существуют три различных системных вызова, которые могут переопределять полномочия. Если процесс вызывает ехес для выполнения программы, установленной в режиме зиЫ (см. раздел 8.2.2), то ядро изменяет эффективный ШР процесса на ШР, соответствующий владельцу файла программы.
Точно так же, если программа установлена в реллгме з81И, ядро изменяет С1Р вызываемого процесса. Система 111ч1Х предлагает описанную возможность с целью предоставления специальных прав пользователям для определенных целей. Классическим примером такого подхода является программа раээад, позволяющая пользователям изменять свои пароли. Этой программе необходимо записать результат в базу данных паролей, которая обычно недоступна пользователям для прямых изменений (с целью защиты от модификаций записей других пользователей).
Таким образом, владельцем разэвд является суперпользователь, но программа имеет установленный бит Я)1Р. Это дает возможность обычному пользователю получить привилегии суперпользователя на время и в рамках выполнения программы раээад. Пользователь также может настраивать свои полномочия при помощи системных вызовов эе1ц1о и эе1д1о. Суперпользователю позволено при помощи этих вызовов изменять как реальные, так и эффективные идентификаторы ШР и С1Р. Обычные пользователи могут обращаться к этим вызовам только для изменения своих эффективных идентификаторов ШР или С1Р на реальные. Существуют некоторые различия в интерпретации полномочий в ОС Бузсещ Ъ' и ВЯР 1)Х1Х.
В системе 5'1гКЗ поддерживаются хранимые (эагес1) ШР и С1Р, которые имеют значения эффективных ШР и С1Р перед вызовом ехес. Системные вызовы эегц14 и ьетд14 могут восстановить эффективные идентификаторы из хранимых значений. Хотя в системе 4.3В8Р не поддерживается описанная возможность, пользователь ОС может войти в состав дополнительных групп (используя вызов зегдгоцрз). В то время как файлы, созданные пользователем, принадлежат его основной группе, он может иметь доступ к файлам, принадлежащим к его как основной, так и дополнительной группе (в зависимости от установок прав доступа к файлам для членов группы владельца).
В ОС 8УК4 встроены все перечисленные возможности. Система поддерживает дополнительные группы, а также поддерживает хранимые идентификаторы ШР и С1Р через вызов ехес. 70 Глава 2. Ядро и процессы 2.3.4. Область о и структура ргос Управляющая информация о процессе поддерживается с помощью двух структур данных, имеющихся у каждого процесса: области а и структуры ргос, В различных реализациях 111ч11Х ядро имеет массив фиксированного размера, состоящий из структур рсос и называемый таблицей процессов. Размер этого массива зависит от максимального количества процессов, которые одновременно могут быть запущены в системе. Современные варианты 111ь11Х, такие как БЪ'К4, поддерживают динамическое размещение структур ргос, но массив указателей на них также имеет фиксированный размер. Так как структура ртос находится в системном пространстве, она всегда видна ядру в любой момент времени, даже когда процесс не выполняется.
Область ц является частью пространства процесса. Это означает, что она отображаема и видима только в тот период времени, когда процесс выполняется. Во многих реализациях 111ч11Х область ц всегда отображается в один и тот же виртуальный адрес для каждого процесса, на который ядро ссылается через переменную ц. Одной из задач переключателя контекста является сброс этого отображения, с тем чтобы ядро через переменную ц «добралось» до физического расположения новой области ц. Иногда ядру системы необходимо получить доступ к области и процесса, не являющегося текущим. Такое возможно, но действие должно производиться не напрямую, а при помощи специального набора отображений.
Различия в особенностях доступа обусловлены особенностями информации, хранящейся в структуре ртос и области ц. Область ц содержит данные, необходимые только в период выполнения процесса. Структура ртос включает в себя такую информацию, которая может потребоваться даже в том случае, если процесс не выполняется. Основные поля области ц перечислены ниже: + блок управления процессом используется для хранения аппаратного контекста в то время, когда процесс не выполняется; + указатель на структуру ртос для этого процесса; + реальные и эффективные 1Л1) и С11)'; + входные аргументы и возвращаемые значения (или коды ошибок) от текущего системного вызова; + обработчики сигналов и информация, связанная с ними (см.