Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Поля, связанные с отношениями между процессами
Следующие поля структуры task_struct связаны с отношениями между процессами. Каждая задача или процесс р имеет родителя, который его создал. Процесс р тоже может создавать процессы и поэтому тоже может иметь детей. Так как родитель р может создать больше одного процесса, вполне возможно, что процесс р будет иметь сестринские процессы. Рис. 3.4 иллюстрирует, как task_struct хранит эти связи процессов. Глава 3 • Процессы: принципиальная модель выполнения > 's parent's task_struct children.next children.prev task_struct task struct task struct
runlistnext runlist.prev M runlistnext runlist.prev У runlist.next runlist.prev p's task_struct reaLparent parent siblings.next siblings.prev children.next children.prev ptrace's task__struct Рис. 3.4. Поля, связанные с отношениями между процессами ReaLparent real__parent указывает на описатель родителя текущего процесса. Он указывает на дескриптор процесса init (), если оригинальный родитель этого процесса был уничтожен. В предыдущих ядрах это называлось p_opptr. 3.2 Описатель процесса 3.2.3.2 parent parent - это указатель на описатель родительского процесса. На рис. 3.4 видно, что он указывает на ptrace_task_struct. Когда для процесса запускается ptrace, родительское поле task__struct указывает на процесс ptrace. 3.2.3.3 children children - это структура, указывающая на список детей текущего процесса. 3.2.3.4 sibling sibling - это структура, указывающая на список сестринских процессов текущего процесса. 3.2.3.5 groupjeader Процесс может быть членом группы процессов, и каждая группа процессов имеет процесс, являющийся ее лидером. Если наш процесс является членом группы, group_ leader указывает на описатель лидера этой группы. Лидер группы обычно получает tty, с которого был создан данный процесс и который называется управляющим терминалом (controlling terminal). 3.2.4 Поля, связанные с удостоверением процесса В многопользовательских системах необходимо разделять процессы, создаваемые различными пользователями. Это необходимо делать в целях безопасности и для защиты пользовательских данных. Поэтому у каждого процесса имеется удостоверение, позволяющее системе определить, к чему у него есть доступ, а к чему нет. Рис. 3.5 иллюстрирует поля task__struct, связанные с удостоверением процесса. 3.2.4.1 uid и gid Поле uid содержит число ГО пользователя, который создал процесс. Это поле используется для защиты и обеспечения безопасности. Аналогично поле gid содержит групповой идентификатор группы, к которой принадлежит процесс; uid и gid со значением 0 относятся к пользователю root и его группе. 3.2.4.2 euid и egid Эффективный пользовательский идентификатор обычно хранит то же самое значение, что и поле пользовательского идентификатора. Он изменяется, если у выполняемой программы установлен бит UID (SUID). В этом случае эффективный идентификатор пользователя представляет собой идентификатор владельца файла программы. Обычно это применяется для того, чтобы позволить пользователям запускать отдельные программы Глава 3 • Процессы: принципиальная модель выполнения
Рис. 3.5. Поля, связанные с удостоверением процесса с теми же правами, что и у других пользователей (например, root). Эффективный идентификатор группы работает точно так же и хранит значение, отличное от поля gid, только в том случае, если установлен бит группового идентификатора (SGID). Suid и sqid suid (сохраненный пользовательский идентификатор) и sqid (сохраненный групповой идентификатор) употребляются в системных вызовах setuid (). Fsuidn fsqid Значения fsuidn fsqid используются для процессов файловой системы. Обычно они содержат те же значения, что uid и gid, за исключением случаев, когда выполняется системный вызов setuid (). 3.2 Описатель процесса Groupjnfo Пользователь в Linux может быть членом одной или нескольких групп. Эти группы могут обладать различными правами на доступ к системе и данным. Поэтому процесс должен наследовать эти удостоверения. Поле group_inf о указывает на структуру типа group__inf о, содержащую информацию, связанную с группами, членом которых является процесс. Структура group_inf о позволяет процессу ассоциироваться с несколькими группами, количество которых ограничено только размером памяти. На рис. 3.5 вы можете видеть, что поле group_info с именем small_block является массивом NGROUP_ SMALL (в нашем случае из 32 элементов) элементов gid_t. Если задача принадлежит более чем 32 группам, ядро может выделить дополнительные блоки или страницы, которые будут хранить необходимое количество gid__t за пределами NGROUP_SMALL. Поле nblocks хранит количество выделенных блоков, a ngroups хранит значения элементов в массиве small_block, хранящих значение gid_t. Популярное:
|
Последнее изменение этой страницы: 2016-03-25; Просмотров: 782; Нарушение авторского права страницы