|
|
El sistema de ficheros virtual, page-cache y buffer-cache en Linux 2.4.10+
(16637 lectures)
Por Ricardo Galli Granada
gallir
(http://mnm.uib.es/gallir/)
Creado el 05/11/2001 17:11 modificado el 05/11/2001 17:11
|
Continuando con el tema de page-cache y buffer-cache en Linux, en éste artículo
doy una descripción, que aunque simple y general, un poco más detallada del
funcionamiento del page-cache y buffer-cache en Linux. Como ya sabréis, a partir
del 2.4.10 hubo dos cambios importantes, la nueva gestión de memoria virtual del
kernel basado en una nueva implementación de Andrea Arcangeli y la unificación
de las técnicas de buffer-cache y page-cache. | Pagina1/4 |
Introducción
Un fichero es una abstracción muy importante en programación.
Los ficheros sirven para almacenar datos de forma permanente y ofrecen
un pequeño conjunto de primitivas muy potentes (abrir, leer, avanzar
puntero, cerrar, etc.). Los ficheros se organizan normalmente en estructuras
de árbol, donde los nodos intermedios son directorios capaces de agrupar
otro ficheros.
El sistema de ficheros es la forma en que el sistema operativo organiza,
gestiona y mantiene la jerarquía de ficheros en los dispositivos de
almacenamiento, normalmente discos duros. Cada sistema operativo soporta
diferentes sistemas de ficheros. Para mantener la modularización del
sistema operativo y proveer a las aplicaciones con una interfaz de
programación (API) uniforme, los diferentes sistemas operativos implementan
una capa superior de abstracción denominada Sistema de Ficheros
Virtual (VFS: Virtual File System). Esta capa de software
implementa las funcionalidades comunes de los diversos sistemas de
ficheros implementados en la capa inferior.
Los sistemas de ficheros soportados por Linux se clasifican en tres
categorías:
- Basados en disco: discos duros, disquetes, CD-ROM. Estos sistemas
son Ext2, ReiserFS, XFS, Ext3, UFS, ISO9660, etc.
- Sistemas remotos (de red): NFS, Coda, y SMB.
- Sistemas especiales: procfs, ramfs y devfs.
El modelo general de ficheros puede ser interpretado como orientado
a objetos, donde los objetos son construcciones de software (estructura
de datos y funciones y métodos asociados) de los siguientes tipos:
- Super bloque: mantiene información relacionada a los sistemas
de ficheros montados. Está representado por un bloque de control de
sistema almacenado en el disco (para sistemas basados en disco).
- i-nodo: mantiene información relacionada a un fichero individual.
Cada i-nodo contiene la meta-información del fichero: propietario,
grupo, fecha y hora de creación, modificación y último acceso, más
un conjunto de punteros a los bloques del disco que almacenan los
datos del fichero.
- Fichero: mantiene la información relacionada a la interacción
de un fichero abierto y un proceso. Este objeto existe sólo cuando
un proceso interactúa con el fichero.
- Dentry: enlaza una entrada de directorio (pathname)
con su fichero correspondiente. Los objetos dentry recientemente
usados son almacenados en una caché (dentry cache) para acelerar
la translación desde un nombre de fichero al i-nodo correspondiente.
Todos los sistemas Unix modernos permiten que los datos del sistema
de ficheros sean accedidos de dos formas distintas:
- Asociación (mapping) de memoria con mmap: La llamada
de sistema mmap() permite a los procesos de usuario acceder de forma
directa a los datos del page-cache mediante asociación de memoria.
El objetivo de mmap es permitir el acceso a los datos mediante direcciones
del sistema de memoria virtual, por lo que los datos de ficheros pueden
ser tratados como estructuras de memoria estándares. Los datos del
fichero son leídos y copiados a la page-cache bajo demanda
(lazily) cuando se generan fallos de página por intentos de
acceso a páginas no residentes en RAM.
- Llamadas de sistema de acceso directo al sistema de E/S de bloques,
tales como read y write: La llamada de sistema read()
lee los datos de los dispositivos de bloques a la caché del núcleo
(para CDs y DVDs se puede evitar esta copia mediando el parámetro
O_DIRECT del ioctl), luego se copian al espacio de direcciones
del proceso. La llamada de sistema write() copia los datos en la dirección
opuesta, desde la memoria del proceso a la caché del núcleo y eventualmente,
en un futuro próximo, a los bloques correspondientes del disco.
Estas interfaces son implementadas usando el buffer-cache o
el page-cache para almacenar temporalmente en la memoria del
núcleo.
|
Paginas: 1 2 3 4 Abreviatura Siguiente>> |
|
|
|
|
|
|---|
|
|
|
|
Calificacion
    Vots: 43 |
Danos tu opinion:
|
|
|
|
|
|
|
|