Recentemente, vi uma pergunta que desencadeou esse pensamento. Não foi possível encontrar uma resposta aqui ou através da máquina do Google. Basicamente, estou interessado em saber como a arquitetura de E / S do kernel é em camadas. Por exemplo, a kjournald
expedição para pdflush
ou o contrário? Minha suposição é que pdflush
(sendo mais genérico para as E / S de armazenamento em massa), ele fica em um nível mais baixo e aciona o SCSI / ATA / qualquer comando necessário para realmente executar as gravações e kjournald
lida com estruturas de dados do sistema de arquivos de nível superior antes da gravação. Também pude ver o contrário, com a kjournald
interface direta com as estruturas de dados do sistema de arquivos e o pdflush
despertar de vez em quando para gravar páginas de pagecache sujas no dispositivo através dekjournald
. Também é possível que os dois não interajam por algum outro motivo.
Basicamente: eu preciso de alguma maneira de visualizar (gráfico ou apenas uma explicação) a arquitetura básica usada para despachar E / S para armazenamento em massa no kernel do Linux.
Respostas:
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:
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 encontramospdflush
. 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 ladopdflush
, 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()
etapasPara 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.write()
chamada do sistema.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.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 ospdflush
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 acimafree_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 dekswapd
marcar as páginas para realocação,bdflush
cuidará de sincronizar as alterações pendentes no meio de armazenamento, através dospdflush
daemons.Referências e Leituras Adicionais
fonte