Внутреннее устройство ядра Linux 2.4


         

В памяти размещается новая структура




  1. В памяти размещается новая структура msr и добавляется в начало очереди ожидания.


  2. В поле r_tsk в msr заносится указатель на текущий процесс.


  3. В поле r_msgtype и r_mode

    заносятся ожидаемый тип сообщения и режим поиска соответственно.


  4. Если установлен флаг MSG_NOERROR, то в поле r_maxsize заносится значение из msgsz, в противном случае - значение INT_MAX.


  5. В поле r_msg заносится признак того, что сообщение не найдено.


  6. После завершения инициализации, процесс приобретает статус TASK_INTERRUPTIBLE, глобальная блокировка очереди сообщений снимается и вызывается планировщик schedule().


  7. После активизации ожидающего процесса сразу же проверяется поле r_msg. Это поле содержит либо сообщение переданное напрямую, либо код ошибки. Если поле содержит сообщение то далее переходим к операциям (к п. 10). В противном случае - опять выполняется глобальная блокировка.


  8. После того как блокировка установлена, поле r_msg проверяется еще раз. Если в процессе установки блокировки было получено сообщение, то производится переход к операциям (к п. 10).


  9. Если поле r_msg осталось без изменений, то, следовательно, процесс был активирован для выполнения повторной попытки получить сообщение. Проверяется наличие необработанных сигналов для данного процесса и если таковые имеются, то глобальная блокировка снимается и процессу возвращается код EINTR. Иначе - производится попытка получить сообщение.


  10. Если поле r_msg содержит код ошибки, то снимается глобальная блокировка и процессу передается ошибка.


  11. После проверки адреса пользовательского буфера msp, тип сообщения записывается в mtype и содержимое сообщения копируется в поле mtext функцией . И в заключение освобождается память вызовом функции .



  12. Содержание  Назад  Вперед