Antes de discutir los detalles con respecto a pdflush
, kjournald, and
kswapd`, revisemos primero un poco de historia en el contexto de qué es exactamente lo que estamos hablando en términos del núcleo de Linux.
La arquitectura GNU / Linux
La arquitectura de GNU / Linux puede considerarse como 2 espacios:
Entre User Space y Kernel Space se encuentra la Biblioteca GNU C ( glibc
). Esto proporciona la interfaz de llamada del sistema que conecta el kernel a las aplicaciones de espacio de usuario.
El Kernel Space se puede subdividir en 3 niveles:
- Interfaz de llamada del sistema
- Código de kernel independiente arquitectónico
- Código de arquitectura dependiente
La interfaz de llamada del sistema, como su nombre lo indica, proporciona una interfaz entre glibc
el núcleo y el núcleo. El Código de Kernel Independiente Arquitectónico se compone de las unidades lógicas como el VFS (Sistema de archivos virtuales) y el VMM (Administración de memoria virtual). El código dependiente arquitectónico son los componentes que son código específico de procesador y plataforma para una arquitectura de hardware dada.
Diagrama de la arquitectura GNU / Linux
Para el resto de este artículo, centraremos nuestra atención en las unidades lógicas VFS y VMM dentro del Kernel Space.
Subsistemas del kernel GNU / Linux
Subsistema VFS
Con un concepto de alto nivel de cómo está estructurado el kernel GNU / Linux, podemos profundizar un poco más en el subsistema VFS. Este componente es responsable de proporcionar acceso a los diversos dispositivos de almacenamiento en bloque que finalmente se asignan a un sistema de archivos (ext3 / ext4 / etc.) en un dispositivo físico (HDD / etc.).
Diagrama de VFS
Este diagrama muestra cómo un proceso write()
de un usuario atraviesa el VFS y, en última instancia, desciende al controlador del dispositivo donde está escrito en el medio de almacenamiento físico. Este es el primer lugar donde nos encontramos pdflush
. Este es un demonio que es responsable de enjuagar los bloques de datos y metadatos sucios al medio de almacenamiento en segundo plano. El diagrama no muestra esto, pero hay otro demonio, kjournald
que se encuentra al lado pdflush
, realizando una tarea similar escribiendo bloques de diario sucios en el disco. NOTA: Bloques de diario es cómo los sistemas de archivos como ext4 y JFS realizan un seguimiento de los cambios en el disco en un archivo, antes de que esos cambios tengan lugar.
Los detalles anteriores se analizan más adelante en este documento .
Resumen de write()
pasos
Para proporcionar una descripción general simple de las operaciones del sistema de E / S, utilizaremos un ejemplo en el que write()
una aplicación llama a la función Space.
- Un proceso solicita escribir un archivo a través de la
write()
llamada al sistema.
- El núcleo actualiza la caché de la página asignada al archivo.
- Un subproceso de kernel pdflush se encarga de vaciar el caché de la página al disco.
- La capa del sistema de archivos reúne cada búfer de bloque en un
bio struct
( consulte 1.4.3, “Capa de bloque” en la página 23 ) y envía una solicitud de escritura a la capa de dispositivo de bloque.
- La capa del dispositivo de bloque recibe solicitudes de las capas superiores y realiza una operación de elevador de E / S y coloca las solicitudes en la cola de solicitudes de E / S.
- Un controlador de dispositivo como SCSI u otros controladores específicos del dispositivo se encargarán de la operación de escritura.
- El firmware de un dispositivo de disco realiza operaciones de hardware como cabeza de búsqueda, rotación y transferencia de datos al sector en el plato.
Subsistema VMM
Continuando con nuestra inmersión más profunda, ahora podemos mirar en el subsistema VMM. Este componente es responsable de mantener la coherencia entre la memoria principal (RAM), el intercambio y el medio de almacenamiento físico. El mecanismo principal para mantener la consistencia es bdflush
. Como las páginas de memoria se consideran sucias, deben sincronizarse con los datos que están en el medio de almacenamiento. bdflush
coordinará con pdflush
demonios para sincronizar estos datos con el medio de almacenamiento.
Diagrama de VMM
Intercambiar
Cuando la memoria del sistema se vuelve escasa o el temporizador de intercambio del núcleo caduca, el kswapd
demonio intentará liberar páginas. Mientras el número de páginas gratuitas permanezca arriba free_pages_high
, kswapd
no hará nada. Sin embargo, si el número de páginas gratuitas cae a continuación, kswapd
comenzará el proceso de recuperación de la página. Después de kswapd
haber marcado las páginas para la reubicación, bdflush
se encargará de sincronizar cualquier cambio pendiente en el medio de almacenamiento, a través de los pdflush
demonios.
Referencias y lecturas adicionales