Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Поля, связанные с отношениями между процессами



Следующие поля структуры 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 • Процессы: принципиальная модель выполнения


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

nirrpnt >     groupjnfo      
    ngroups    
usage      
    -NGROUPS.SMALL  
task_struct   small_block  
      nblocks      
blocks    
       
uid    
euid  
fuid  
suid  
gid  
egid  
fgid  
sgid  
groupjnfo  
     
     
             

Рис. 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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.017 с.)
Главная | Случайная страница | Обратная связь