3.3 Manejo de localidades temporales de memoria (buffers)

• La forma más fácil de leer un programa es carácter por carácter pero es ineficiente.

• La forma más eficiente es realizar una copia a la memoria de todo el código fuente. Pero esto en la gran mayoría de las ocasiones es impráctico por las dimensiones de los programas. Para solucionar este problema se sugiere utilizar buffers

Manejo de buffers

• Existen muchas formas de dividir el trabajo, pero siempre se deberá llevar dos punteros, uno al

carácter actual y otro al inicial del lexema.

• El manejo de buffers es esencial para realizar el análisis de grandes programas de mejor manera

La diferente de velocidad entre los dos tipos de memoria es muy grande, por lo que resulta interesante definir algún tipo de estrategia que reduzca este diferencial.

- Un buffer se define como un conjunto de bytes que son leídos o escritos desde un dispositivo de almacenamiento, en la memoria primaria.

- Cuando se desea leer una información, se lee un bloque de información en el que aparece.

- La modificación de un dato se realiza sobre el buffer, que posteriormente debe ser enviado al dispositivo de almacenamiento.

- La utilización de esta técnica permite reducir el número de accesos a memoria secundaria.

Número de Buffers y Velocidad de Acceso

- El manejo de buffers por parte del administrador de ficheros permite reducir el número de accesos a memoria secundaria. - Pero una cuestión fundamental es el número de buffers a utilizar. - Si sólo se utiliza un buffer, un problema que realice lecturas y escrituras de modo alterno, debería leer un bloque en cada operación. - Esto se resuelve mediante la utilización de un buffer para escritura y otro para lectura. - Pero la lectura, o escritura, alterna sobre varios ficheros puede provocar el mismo problema. - Otra alternativa es la utilización de ambos bloques para lecturas y escrituras de modo alternado.

- La generalización de esta idea es el caso real, varios buffers que se manejan de modo indistinto para lecturas y escrituras.

- La gestión de estos buffers es realizada por el administrador de ficheros, aunque el usuario puede controlar el número de buffers.

- Si todos los buffers están ocupados, se debe vaciar uno de ellos para posibilitar una lectura.

- Normalmente se utiliza al algoritmo LRU, es decir, se vacía el buffer menos recientemente utilizado.