Q1: "É" wake_up
. Ele acorda todas as tarefas que estão esperando pelos dados do disco . Se eles não estivessem esperando por esses dados, eles não estariam esperando naquela fila.
Q2: Não tenho certeza se entendi a pergunta. Cada entrada da fila de despertar contém um ponteiro para a tarefa. try_to_wake_up
recebe um ponteiro para a tarefa que deve acordar. É chamado uma vez por função.
Q3: existem muitas filas de espera. Há um para cada evento que pode acontecer. O driver de disco configura uma fila de espera para cada solicitação para o disco. Por exemplo, quando o driver do sistema de arquivos quer o conteúdo de um determinado bloco de disco, ele pergunta ao driver do disco por esse bloco e, em seguida, a solicitação começa com a tarefa que fez a solicitação do sistema de arquivos. Outras entradas podem ser adicionadas à fila de espera se outra solicitação para o mesmo bloco chegar enquanto esta ainda estiver pendente.
Quando ocorre uma interrupção, o driver de disco determina qual disco possui dados disponíveis a partir das informações transmitidas pelo hardware e procura a estrutura de dados que contém os dados do kernel para esse disco para localizar qual solicitação deve ser preenchida. Nessa estrutura de dados, entre outras, estão a localização onde os dados devem ser gravados e a fila de ativação correspondente indicando o que fazer a seguir.
Q4: O processo faz uma chamada de sistema, digamos, para ler um arquivo. Isso aciona algum código no driver do sistema de arquivos que determina que os dados precisam ser carregados do disco. Esse código faz uma solicitação ao driver de disco e adiciona o processo de chamada à fila de espera da solicitação. (Na verdade, existem mais camadas do que isso, mas você entende.) Quando a leitura do disco é concluída, o evento da fila de espera é acionado e o processo é removido da fila de espera do disco. O código acionado pelo evento da fila de espera é uma função fornecida pelo driver do sistema de arquivos, que copia os dados para a memória do processo e faz com que a chamada do sistema read
retorne.