Serviço Kernel e_sleep

Propósito

Força a thread de kernel de chamada a aguardar a ocorrência de um evento compartilhado.

Sintaxe

#include <sys/types.h> #include <sys/errno.h> #include <sys/sleep.h> int e_sleep ( palavra_do_evento, bandeiras) tid_t *palavra_do_evento; int bandeiras;

Parâmetros

Item Descrição
palavra_do_evento Especifica a palavra de evento compartilhado. O kernel usa o parâmetro event_word para ancorar a lista de processos dormindo sobre este evento. O parâmetro event_word deve ser inicializado para EVENT_NULL antes de seu primeiro uso.
sinalizadores Especifica as bandeiras que controlam a ação em ocorrência de sinais. Essas bandeiras podem ser encontradas no arquivo /usr/include/sys/sleep.h . O parâmetro bandeiras é usado para controlar como os sinais afetam a espera de um evento. As bandeiras a seguir estão disponíveis para o serviço e_sleep :
EVENTO_SIGRETO
Indica a finalização da espera para o evento por um sinal desmascarado. O valor de retorno é configurado como EVENT_SIG.
EVENTO_SIGWAKE
Indica a finalização do evento por um sinal desmascarado. Esta sinalização resulta na transferência de controle para o retorno do último serviço setjmpx com o valor de retorno configurado para EINTR.
EVENT_SHORT
Proíbe a espera de ser terminada por um sinal. Esta bandeira só deve ser usada para manchadas curtas, garantidas de cercada.

Descrição

O serviço kernel e_sleep é usado para esperar que o evento compartilhado especificado ocorra. O kernel coloca a thread do kernel atual na lista ancorada pelo parâmetro event_word . Esta lista é usada pelo serviço e_wakeup para acordar todas as threads esperando que o evento ocorra.

O âncora para a lista de eventos, o parâmetro event_word , deve ser inicializado para EVENT_NULL antes de seu primeiro uso. As extensões do kernel não devem alterar esta âncora enquanto ela está em uso.

O serviço e_wakeup não acorda um encadeamento que não está atualmente dormindo na função e_sleep . Ou seja, se uma operação e_wakeup para um evento for emitida antes do processo chamar o serviço e_sleep para o evento, o thread ainda dorme, aguardando no próximo serviço e_wakeup para o evento. Isto implica que as rotinas usando esta capacidade devem garantir que nenhuma janela de temporalidade exista em que eventos poderiam ser perdidos devido ao serviço e_wakeup ser chamado antes que a operação e_sleep para o evento tenha sido chamada.

Nota: O serviço e_sleep pode ser chamado com interruptos desativados apenas se a palavra de evento ou de bloqueio for pintada.

Ambiente de Execução

O serviço kernel e_sleep pode ser chamado a partir do ambiente de processo apenas.

Valores De Retorno

Item Descrição
EVENTO_SUCC Indica uma operação bem-sucedida.
EVENTO_SIG Indica que a sinalização EVENT_SIGRET está configurada e a espera é finalizada por um sinal.