Antes de discutir os detalhes a respeito pdflush
, kjournald, and
kswapd`, vamos primeiro obter um pouco de fundo sobre o contexto do que exatamente estamos falando em termos do Kernel Linux.
A arquitetura GNU / Linux
A arquitetura do GNU / Linux pode ser pensada em 2 espaços:
Entre o Espaço do Usuário e o Espaço do Kernel, fica a GNU C Library ( glibc
). Isso fornece a interface de chamada do sistema que conecta o kernel aos aplicativos de espaço do usuário.
O Kernel Space pode ser subdividido em 3 níveis:
- Interface de chamada do sistema
- Código do Kernel Independente da Arquitetura
- Código Dependente de Arquitetura
A Interface de Chamada do Sistema, como o próprio nome indica, fornece uma interface entre o glibc
e o kernel. O Código do Kernel Independente da Arquitetura é composto pelas unidades lógicas, como o VFS (Sistema Virtual de Arquivos) e o VMM (Gerenciamento de Memória Virtual). O Código Dependente da Arquitetura é o componente que é o código específico da plataforma e do processador para uma determinada arquitetura de hardware.
Diagrama da arquitetura GNU / Linux
No restante deste artigo, focaremos nossa atenção nas unidades lógicas do VFS e VMM dentro do espaço do kernel.
Subsistemas do kernel GNU / Linux
Subsistema VFS
Com um conceito de alto nível de como o kernel GNU / Linux está estruturado, podemos nos aprofundar um pouco mais no subsistema VFS. Este componente é responsável por fornecer acesso aos vários dispositivos de armazenamento em bloco que, por fim, são mapeados para um sistema de arquivos (ext3 / ext4 / etc.) Em um dispositivo físico (HDD / etc.).
Diagrama do VFS
Este diagrama mostra como write()
o processo de um usuário atravessa o VFS e, finalmente, desce até o driver do dispositivo onde está gravado no meio de armazenamento físico. Este é o primeiro lugar onde encontramos pdflush
. Este é um daemon responsável pela liberação de blocos de dados sujos e de buffer de metadados para a mídia de armazenamento em segundo plano. O diagrama não mostra isso, mas há outro daemon, kjournald
que fica ao lado pdflush
, executando uma tarefa semelhante ao gravar blocos de diário sujos no disco. NOTA: Os blocos de diário são como sistemas de arquivos como ext4 e JFS controlam as alterações no disco em um arquivo, antes que essas alterações ocorram.
Os detalhes acima são discutidos mais adiante neste documento .
Visão geral das write()
etapas
Para fornecer uma visão geral simples das operações do sistema de E / S, usaremos um exemplo em que a função write()
é chamada por um aplicativo Espaço do Usuário.
- Um processo solicita a gravação de um arquivo através da
write()
chamada do sistema.
- O kernel atualiza o cache da página mapeado para o arquivo.
- Um thread do kernel pdflush cuida da liberação do cache da página no disco.
- A camada do sistema de arquivos junta cada buffer de bloco a
bio struct
( consulte 1.4.3, “Camada de blocos” na página 23 ) e envia uma solicitação de gravação para a camada de dispositivo de bloco.
- A camada de dispositivo de bloco obtém solicitações das camadas superiores e executa uma operação de elevador de E / S e coloca as solicitações na fila de solicitações de E / S.
- Um driver de dispositivo, como SCSI ou outros drivers específicos, cuidará da operação de gravação.
- Um firmware de dispositivo de disco realiza operações de hardware como cabeçote de busca, rotação e transferência de dados para o setor no prato.
Subsistema VMM
Continuando nosso mergulho mais profundo, agora podemos analisar o subsistema VMM. Este componente é responsável por manter a consistência entre a memória principal (RAM), a troca e o meio de armazenamento físico. O principal mecanismo para manter a consistência é bdflush
. Como as páginas da memória são consideradas sujas, elas precisam ser sincronizadas com os dados contidos na mídia de armazenamento. bdflush
coordenará com os pdflush
daemons para sincronizar esses dados com o meio de armazenamento.
Diagrama do VMM
Troca
Quando a memória do sistema se torna escassa ou o timer de troca do kernel expira, o kswapd
daemon tentará liberar páginas. Enquanto o número de páginas gratuitas permanecer acima free_pages_high
, kswapd
não fará nada. No entanto, se o número de páginas gratuitas cair abaixo, kswapd
o processo de reclame será iniciado. Depois de kswapd
marcar as páginas para realocação, bdflush
cuidará de sincronizar as alterações pendentes no meio de armazenamento, através dos pdflush
daemons.
Referências e Leituras Adicionais