Está en la página 1de 6

UNIDAD VI SISTEMA OPERATIVO LINUX

6.1 BUFFER CACHE

6.1.1 Estructura del equipo buffer


El buffer cache está formado por una serie de buffers organizados. Hay una lista de buffers libres (`free
list'), y una serie de colas (hash) para facilitar el acceso a los buffers sin recorrerlos todos.
Cada buffer está constituido por una cabecera y un área de datos, que es un array de memoria donde se
almacenan los datos de disco contenidos en el buffer.
La distribución del buffer queda como sigue:

 Los dos primeros campos (número de dispositivo y de bloque) se utilizan como identificativo del buffer.
 El campo status incluye varios campos que indican el estado actual del buffer:
 Si está libre u ocupado (utilizado por un proceso);
 Si los contenidos son válidos o no,
 Si el buffer es de escritura retardada;
 Si se produce una lectura o escritura;
 Si hay procesos en espera para utilizar el buffer.
La asignación de estos campos se hace con un LRU de bloques de disco al buffer.
 El primer puntero señala el área de datos, que es la zona de memoria donde están los datos del bloque
del disco.
 Los punteros 2º y 3º apuntan al buffer posterior y anterior en la cola hash.
 Los punteros 4º y 5º indican los buffers posterior y anterior en la free list.
En el buffer cache se distinguen dos estructuras de datos:
 Free List (única): es una lista circular doblemente enlazada, siendo los elementos de esta lista buffer
headers. Tiene un buffer especial al principio de la lista, usado para marcar el principio y el final de la lista.
 Colas Hash (múltiples). Son una serie de colas circulares doblemente enlazadas, con un buffer especial
que indica principio y final de la cola. La diferencia con la free list radica en que la cola hash está
organizada en una tabla hash según el número de bloque y el número de dispositivo lógico, siendo así
más rápida la búsqueda.
6.1.2 Ambientes para el manejo de buffers

6.1.3 Lectura y escritura de bloques de disco

Lectura de un Bloque de Disco

• Un proceso busca el buffer requerido en el buffer caché.


• Si el buffer está en el buffer caché, el kernel lo devolverá inmediatamente sin necesidad de
realizar una lectura física del disco.
• Si no está el buffer en el buffer caché, se realizan las siguientes acciones:
– El kernel realiza una petición de lectura al controlador de disco.
– El proceso duerme ⇒ Evento: operación de E/S.
– El kernel informa al controlador del disco, que quiere leer datos.
– El controlador de disco transmite los datos al buffer.
– Finalmente, el controlador de disco interrumpe al procesador cuando la E/S se ha completado,
para que despierte a los procesos dormidos.
– El gestor de interrupciones de disco despierta al proceso que dormía: el contenido del bloque
de disco ya está en el buffer.
Lectura Asíncrona de un Bloque de Disco

• Anticipación de lectura de segundo bloque de disco ⇒ muy útil en lecturas secuenciales de


archivos.
• Como ejemplo podemos ver que, cuando un proceso lee un archivo secuencialmente:
– Solicitar la segunda operación de E/S asíncronamente.
– Los datos estarán muy probablemente en memoria cuando se necesiten.
• Mejora el rendimiento del sistema respecto a operaciones de entrada/salida.
• El kernel comprueba si el primer bloque está en el buffer caché.
• Si no está ⇒ Solicita al controlador de disco que lo lea de forma inmediata.
• Si el segundo bloque no está en el buffer caché ⇒ Solicita al controlador de disco que lo lea de
forma asíncrona.
• El proceso duerme ⇒ Evento: Espera fin lectura del primer bloque.
• Cuando el proceso se despierta ⇒ Devuelve el buffer para el primer bloque, pero no se
preocupa por la finalización de la segunda operación de lectura.
• Al finalizar la segunda operación de lectura:
– El controlador de disco interrumpe al procesador cuando la E/S se ha completado.
– El manejador de interrupciones nota que la E/S era asíncrona y devuelve el buffer (en cuyo
contenido está el segundo bloque del disco).
Escritura de un Bloque de Disco
• El kernel informa al controlador del dispositivo (disco) que quiere escribir el contenido de un
buffer.
• El controlador del dispositivo (disco) planifica el bloque para una operación de E/S.
• Si la escritura es síncrona:
– El proceso va a dormir esperando su finalización.
– Cuando despierta ⇒ libera el buffer.
• Si la escritura es asíncrona:
– El kernel inicia la escritura, pero no espera su conclusión.
– Liberará el buffer cuando la escritura se complete (escritura retardada).

6.1.4 Ventajas y desventajas del buffer cache


Ventajas:
? El acceso a disco es más uniforme, pues se hace siempre a través del buffer cache. Esto provoca un
código más modular.
? Aumenta la velocidad del disco.
? Aumenta la integridad, ya que un bloque no puede estar en dos buffers.
Desventajas:
? Sistema sensible a cortes de electricidad.
? Para grandes cantidades de datos, puede hacer lento el acceso a disco.

6.2 EL ENTORNO DE PROGRAMACION

6.2.1 El Shell – comandos

man

Proporciona información sobre los comandos u otros programas del entorno Linux (manual
pages). En el caso particular de los comandos de la shell de Linux, dado que estos suelen tener
una gran cantidad de modificadores, lo usual es conocer solo algunas funcionalidades de los
comandos más conocidos y recurrir a las manual pages del comando cuando se desee más
información.

ls

Lista el contenido de un directorio. Si lo usamos sin argumentos, lista el contenido del directorio
actual o corriente.

more

Filtro que permite desplegar en una terminal el contenido de un archivo de texto de a una pantalla
a la vez.

cd

Cambia el directorio corriente (Change Directory) en que nos encontramos posicionados. Si se


utiliza sin argumentos, cambia al directorio raíz del homedir del usuario.

mkdir

Crea entradas de directorios.

rmdir
Elimina entradas de directorios vacíos. Para eliminar un directorio y todo su contenido, ver el
comando rm más adelante.
passwd
Cambia la contraseña del usuario. Las contraseñas deben cumplir las condiciones que se indican
en el mismo o en las carteleras.

rm

Elimina archivos o directorios.

cp
Copiar archivos o directorios. Para copiar un directorio se debe agregar el modificador "-r".

mv
Mueve archivos o directorios. La sintaxis de este comado es similar a la del cp, solo que no es
necesario utilizar el modificador "-r".

Este comando es útil a la hora de renombrar archivos o directorios (moviéndolo con el nombre
con el que se lo quiere renombrar) dado que la mayoria de las shell de Linux no poseen un
comando especifico para esto.

du

Reporta el espacio de disco utilizado por archivos y directorios (du = disk usage).

eject

Extrae el CD-ROM.

mount y umount

Estos dos comandos son necesarios para montar el disquete y el cd-rom y desmontar el disquete.

exit

Cierra la shell actual.

6.2.2 Shell – script

1- ¿QUÉ ES EL SHELL SCRIPT?

Un Shell Script es un script para la shell de comandos (terminal). Para crear un script basta con
un editar un fichero nuevo y en el nombre poner .sh Ejemplo: HolaMundo.sh

Una vez creado, empezamos a editarlo. Se puede utilizar un editor de textos gráfico como
gedit o un editor en terminal como vim, nano o emacs.

En la primera línea del script se debe indicar que shell que vas a usar ( /bin/bash/ , /usr/
bin/perl , etc ) Aunque da igual la que uses lo importante es el contenido:

#! /bin/bash

#! Se conoce con el nombre de Sha Bang.


Se denomina “sha-bang” a la secuencia #! con la que se inician los scripts. Su función es
indicarle al sistema que se trata de un conjunto de comandos para que sean interpretados. En
realidad, es un número mágico de dos bytes. El número mágico es un marcador especial para
indicar el tipo de archivo, en este caso, indica que se trata de un script de shell ejecutable.

Para introducir comentarios se debe poner #. Por cada linea que deseéis poner un comentario,
lo primero que debe tener es #. Es importante añadir comentarios comentando la utilidad del
script o las variables que se crean.

2- ¿CÓMO EJECUTAR UN SCRIPT?

Antes de poder ejecutarlo, debemos darle permisos de ejecución. (+x) por ello, haremos uso
del comando chmod y damos permisos de ejecución, si se desea, se pueden dar a todos los
usuarios y grupos.

chmod 755 /ruta_del_script Para el usuario propietario

chmod 777 /ruta_del_script Para cualquier usuario

Una vez hecho todo lo anterior, usaremos:

./nombredelscript.sh

Pero también podemos usar si es un shell script:

sh nombredelscript.sh

3- CÓDIGO DE UN SCRIPT

Ya tenemos el script creado, le hemos puesto la cabecera y le hemos cambiado los permisos,
ya solo falta meter el código.

Vamos a empezar desarrollando lo esencial para ir desarrollando estructuras más complejas:

Lo primero es saber cómo dar valor a una variable. Es tan sencillo como poner:

nombre_variable=valor

Si deseas guardar la salida de un programa solo tienes que ponerlo entre tildes invertidas:

nombre_variable=`comando`

Tambien hay un comando que lee por teclado las variables ( read ). Para ponerlo es:

read [opciones] nombre_variable1 nombre_variable2 nombre_variableN

ejemplo:

read -p “Introduce el nombre y los apellidos” nombre apellidos

Tiene un montón de opciones pero estas son las más importantes y usadas:

-n num_car : Número máximo de caracteres que puedes introducir por teclado

-p “frase” : Te muestra por pantalla una frase para tu saber que debes introducir

-d “delimitador” : Especificas cual va a ser el delimitador, es decir si dices que el delimitador


sera “;” pues todo lo que venga antes de un “;” lo cogerá una variable y todo lo que venga
después de ese delimitador hasta el próximo “;” lo cogerá otra variable.
Cuando queremos utilizar el valor de una variable en el código, nos referiremos a éste como:

$nombre_variable

También podría gustarte