• Ревизионные люки и люки ревизионные информация форум

    ревизионные люки и люки ревизионные информация форум

    www.rus-vent.ru

  • О ремонт квартир под ключ

    Свежая новость о ремонт квартир под ключ в рассрочку со скидками. Качественно.

    dss-c.ru





Linux Kernel (Ядро линукса) (часть 2)


Структуры данных, ассоциированные с сигналами

Для каждого процесса в системе ядро должно отслеживать, какие сигналы в данный момент висят или замаскированы. Ядро также должно отслеживать, как каждая группа потоков будет обрабатывать сигналы. Для этих целей ядро использует несколько структур, доступных через дескриптор процесса.
Поля дескриптора процесса, имеющие отношение к обработке сигнала
Поле blocked хранит сигналы, замаскированные процессом на данный момент. Это массив sigset t, имеющий по одному биту на каждый тип сигнала:
typedef struct {
unsigned long sig[2];
} sigset_t;
Поскольку каждое число типа unsigned long включает в себя 32 бита, максимальное количество сигналов, объявляемых в Linux, равно 64 (это значение определяет макрос nsig). Поскольку сигнала с номером 0 нет, номер сигнала равен индексу соответствующего бита в переменной sigset t плюс единица. Номера с 1 по 31 соответствуют сигналам, а номера с 32 по 64 — сигналам реального времени.

Дескриптор сигнала и дескриптор обработчика сигналов

Поле signal дескриптора процесса указывает на дескриптор сигнала — структуру signai struct, которая отслеживает совместно используемые висящие сигналы. На самом деле, дескриптор сигнала включает в себя и поля, не имеющие непосредственного отношения к обработке сигналов, например, riirn— массив ограничений на ресурсы для каждого процесса или поля pgrp и session, в которых хранятся идентификаторы процессов для лидера группы
и, соответственно, лидера сессии данного процесса. Фактически, как уже было сказано в главе 3, дескриптор сигнала совместно используется всеми процессами, принадлежащими одной группе потоков, т. е. всеми процессами, созданными системным вызовом clone о с установленным флагом clone thread. Таким образом, дескриптор сигнала имеет поля, которые должны быть идентичными для каждого процесса в одной группе потоков.
Поля дескриптора сигнала, имеющие отношение к обработке сигналов.

Помимо дескриптора сигнала каждый процесс обращается к дескриптору обработчика сигналов. Это структура sighand struct, описывающая, как каждый сигнал должен быть обработан группой потоков.

дескриптор обработчика сигналов может быть совместно использован несколькими процессами, созданными системным вызовом clone о с установленным флагом clone sighand; при этом поле count этого дескриптора показывает количество процессов, совместно использующих данную структуру. В многопоточном приложении, удовлетворяющем стандарту POSIX, все облегченные процессы в группе потоков работают с одним дескриптором обработчика сигналов.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

Linux Kernel (Ядро линукса) (часть 1)

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть другие прерывания того же типа, и другие процессоры могут приступить к их обработке. Без спин-блокировки к главному дескриптору прерывания могли бы обратиться сразу несколько процессоров. Как мы...

Linux Kernel (Ядро линукса) (часть 2)

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

Linux Kernel (Ядро линукса) (часть 3)

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer head. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...