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



         

Sys_msgsnd() - часть 2


  • Если для данного процесса имеются какие либо сигналы, ожидающие обработки, то вызовом процесс изымается из очереди ожидания для процессов-отправителей, блокировка снимается, вызывается для освобождения буфера сообщения и процессу возвращается код EINTR. Иначе осуществляется переход на выполнение необходимых проверок.
  • Для передачи сообщения напрямую процессу-получателю вызывается .
  • Если процессов-получателей, ожидающих данное сообщение, не было обнаружено, то сообщение msg помещается в очередь ожидающих сообщений (msq->q_messages). Обновляются поля q_cbytes и q_qnum в дескрипторе очереди сообщений, а так же глобальные переменные msg_bytes и msg_hdrs, содержащие в себе общий объем сообщений в байтах и общее количество сообщений.
  • Если сообщение было благополучно передано процессу-получателю либо поставлено в очередь, то обновляются поля q_lspid и q_stime в дескрипторе очереди и освобождается глобальная блокировка.



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