Alguém poderia explicar a dinâmica do sono / vigília no Linux?

1

Estou estudando os mecanismos de bloqueio em um sistema operacional e me deparei com essas funções POSIX:

pthread_cond_wait(pthread_cond_t *c, pthread_mutex_t *m);
pthread_cond_signal(pthread_cond_t *c);

Eu compreendo perfeitamente a ideia por trás do sono / acordar aqui. Mas eu não sei como isso é feito em HW e como isso está afetando o agendamento ... etc

Entendo que quando um encadeamento é executado: pthread_cond_wait () ele entra em suspensão (blocos), mas o que isso realmente significa? Sim, ele é desassociado e movido para um estado bloqueado em algum lugar em uma fila privilegiada. Mas quando outro processo executa pthread_cond_signal (), como a CPU ativa o encadeamento bloqueado? É durante a interrupção do timer que o kernel vai e verifica todas as variáveis de condição e então decide acordar um thread associado a um que foi liberado?

Eu não consegui encontrar uma explicação detalhada sobre isso em nenhum lugar on-line, ou talvez eu não esteja olhando corretamente.

Qualquer ajuda é muito apreciada.

    
por SFbay007 30.09.2017 / 20:55

1 resposta

1

Um processo / thread é acordado inserindo-o na fila de processos / threads a serem agendados. Se você olhar para a fonte de signal , há uma lista de threads do espaço do usuário que está aguardando a variável condicional, e um desses é ativado com uma chamada de sistema futex . Verificar um array de variáveis de condição a cada tick seria muito lento ...

So when they describe the thread being blocked, it doesn't mean it is being put in a blocked queue, like threads waiting on I/O?

Threads são implementados como uma mistura de espaço de usuário e espaço do kernel. Assim como um thread / processo aguardando E / S é colocado em uma lista de espaço de kernel para ser reprogramada quando essa operação de E / S específica é concluída, um encadeamento aguardando uma variável de condição é colocado em uma lista de espaço de usuário dessa variável de condição . Então a resposta para sua pergunta é "sim e não". :-)

E a implementação do segmento atual foi otimizada ao longo dos anos, por isso, não fique preso quando a implementação não corresponder aos princípios (mais simples).

    
por 16.02.2018 / 05:48