Sie sind auf Seite 1von 2

The buffer cache

Como se mencion en el captulo anterior , el kernel mantiene los archivos en dispositivos de


almacenamiento masivo , como discos , y permite que los procesos para almacenar nueva
informacin o recordar informacin previamente almacenada . Cuando un proceso quiere
acceder a los datos de un archivo, el kernel trae los datos en la memoria principal, donde el
proceso puede examinarlo, modificarlo , y solicitar que los datos se guardan en el sistema de
archivos nuevo. Por ejemplo , recordar el programa de copia en la Figura 1.3 : El ncleo lee
los datos desde el primer archivo en la memoria , y luego escribe los datos en el segundo
archivo . Del mismo modo que debe aportar datos de archivos en la memoria, el kernel tiene
que llevar los datos auxiliares en la memoria para manipularla. Por ejemplo , el super bloques
de un sistema de archivos se describe el espacio libre disponible en el sistema de archivos ,
entre otras cosas. El kernel lee el superbloque en la memoria para acceder a sus datos y
escribir de nuevo al sistema de archivos cuando se quiere salvar sus datos. De manera
parecida , el inodo describe el diseo de un archivo . El kernel lee un inodo en la memoria
cuando se quiere acceder a los datos en un archivo y escribe manipula estos datos auxiliares ,
sin el conocimiento explcito o peticin de los procesos en ejecucin .
El ncleo podra leer y escribir directamente a/y desde el disco para todos los sistemas de
accesos, pero el tiempo de respuesta del sistema y el rendimiento sera pobre debido a la lenta
tasa de transferencia del disco. Por lo tanto, el kernel intenta minimizar la frecuencia de
acceso a disco , manteniendo una encuesta de bferes de datos internos , llamada la cach del
bfer , cosa que contiene los datos en bloques de disco usados recientemente.
La figura 2.1 muestra la posicin del mdulo de cach del bfer en la arquitectura del ncleo
entre el subsistema de archivo y (bloque) de controladores de dispositivo.

Al leer los datos del disco, el ncleo intenta leer del buffer cache. Si los datos ya estn en la
memoria cach, el ncleo no tiene que leer el disco. Si los datos no estn en la memoria
cach, el ncleo lee los datos del disco y lo almacena en cach, utilizando un algoritmo que
trata de salvar a la mayor cantidad de buenos datos en la cach como sea posible. Del mismo
modo, los datos que se escriben en el disco se almacena en cach para que estar all si el
ncleo ms tarde intenta leerlo. El ncleo tambin trata de minimizar la frecuencia de las
operaciones de escritura en disco mediante la determinacin de si los datos realmente se
deben almacenar en el disco o si se trata de datos transitorios que pronto se sobrescribe, los
algoritmos del kernel de nivel ms alto instruyen al mdulo de cach del bfer de datos de
pre-cach o retrasar-escribir datos para maximizar el efecto de almacenamiento en cach . En
este captulo se describen los algoritmos del kernel utiliza para manipular buffers en la cach
del bfer .

3.1 Buffer Headers (Encabezados )


Durante la inicializacin del sistema, el ncleo asigna espacio para un nmero de buffers,
configurable segn el tamao de la memoria y de las limitaciones de rendimiento del sistema.
El buffers se compone de dos partes: una matriz de memoria que contiene los datos del disco
y un encabezado de bfer que identifica al bfer. Debido a que existe una relacin uno a uno
entre los encabezados de bfer y las matrices de datos, en el texto que se refieren con
frecuencia a ambas partes como un "buffer", y el contexto debe dejar claro a qu parte se
refiera en lo que se discute.
Los datos en un buffer se corresponden a los datos de un bloque de disco lgico en un sistema
de archivos, y el kernel identifica el contenido del bfer mediante el examen de campos de
identificador en la cabecera del bfer. El buffer es la copia en memoria del bloque de disco; el
contenido del mapa de bloques de disco en la memoria intermedia, pero el mapeo es temporal
hasta que el ncleo decide asignar otro bloque de disco en la memoria intermedia. Un bloque
de disco nunca se puede asignar a ms de un buffer a la vez. Si dos buffers eran para contener
datos para un bloque de disco, el kernel no sabra cual buffer contena los datos actuales y
podra escribir datos incorrectos de vuelta al disco. Por ejemplo, supongamos que mapeamos
un bloque de disco en dos buffers, A y B. Si el kernel escribe datos primero en el buffer A y
luego en el buffer B, el bloque de disco debe contener el contenido del buffer B si todas las
operaciones de escritura llenar completamente el buffer. Sin embargo, si el ncleo se invierte
el orden cuando se copian los buffers a disco, el bloque de disco contendr datos incorrectos.