Parte Buffer ES
Parte Buffer ES
Parte Buffer ES
Los Buffer son Espacios de memoria principal que se reservan para el almacenamiento
intermedio de datos procedentes o con destino a los periféricos.
Supóngase que un proceso de usuario desea leer bloques de datos de una cinta de uno en uno,
teniendo cada bloque una longitud de 512 bytes. Los datos tienen que leerse en una zona de
datos del espacio de direcciones del proceso de usuario que corresponde con las direcciones
virtuales desde la 1000 hasta 1511. La manera más sencilla sería enviar un mandato de E/S a
la unidad de cinta y, a continuación, esperar hasta que los datos estén disponibles. La espera
puede ser activa (comprobando continuamente el estado del dispositivo) o, de manera más
práctica, suspendiendo el proceso hasta que se produzca una interrupción.
Las posiciones virtuales desde la 1000 a la 1511 deben permanecer en la memoria principal
durante el curso de la transferencia del bloque. En caso contrario, se pueden perder algunos
datos.
Si se utiliza paginación, al menos la página que contiene las posiciones de memoria requeridas
debe fijarse como residente en la memoria principal. Por tanto, aunque algunas páginas del
proceso pueden expulsarse al disco, es imposible expulsar completamente al proceso, incluso
aunque lo precise el sistema operativo. Nótese también que hay riesgo de que se produzca el
interbloqueo de un único proceso. Si un proceso emite un mandato de E/S, se suspende
esperando el resultado, y, a continuación, se expulsa antes del inicio de la operación, el
proceso se bloquea esperando el evento de E/S y la operación de E/S se bloquea esperando a
que el proceso se traiga de nuevo a memoria. Para evitar este interbloqueo, la memoria de
usuario involucrada en la operación de E/S debe quedarse residente en la memoria principal
inmediatamente antes de que se emita la petición de E/S, incluso aunque la operación de E/S
se encole y no pueda ejecutarse durante algún tiempo.
Para evitar estas sobrecargas e ineficiencias, es a veces conveniente realizar las transferencias
de entrada antes de que se hagan las peticiones correspondientes y llevar a cabo las
transferencias de salida un cierto tiempo después de que se haya hecho la petición. Esta
técnica se conoce como E/S con buffers.
A la hora de analizar las distintas estrategias de gestión de buffers, es a veces importante hacer
una distinción entre dos tipos de dispositivos de E/S: orientados a bloques y orientados a flujo
de caracteres. Un dispositivo orientado a bloques almacena información en bloques que son
usualmente de tamaño fijo realizándose las transferencias de bloque en bloque.
Generalmente, es posible
hacer referencia a los datos mediante su número de bloque. Los discos y las cintas son
ejemplos de dispositivos orientados a bloques. Un dispositivo orientado a flujo de caracteres
transfiere los datos, tanto de entrada como de salida, como un flujo de bytes, sin estructura de
bloques. Los terminales, las impresoras, los puertos de comunicación, el ratón y otros
dispositivos apuntadores, y la mayoría de los dispositivos que no son de almacenamiento
secundario están orientados a flujos de caracteres.
BUFFER ÚNICO
El tipo más sencillo de esquema que puede proporcionar el sistema operativo es el buffer
único. Cuando un proceso de usuario emite una petición de E/S, el sistema operativo asigna un
buffer para la operación en la parte de sistema de la memoria principal.
Para dispositivos orientados a bloques, el esquema con un buffer único se puede describir de
la siguiente manera: las transferencias de entrada usan el buffer del sistema. Cuando se
completa la transferencia, el proceso mueve el bloque al espacio de usuario e inmediatamente
pide otro bloque. A esto se le denomina lectura adelantada, o entrada anticipada; esta
operación se realiza con la esperanza de que se acabará necesitando ese bloque. Para muchos
tipos de cómputos, se trata de una suposición razonable durante la mayor parte del tiempo
porque normalmente se accede a los datos de forma secuencial. Sólo al final de una secuencia
de procesamiento se leerá innecesariamente un bloque.
Esta técnica complica la lógica en el sistema operativo. El sistema operativo debe hacer un
seguimiento de la asignación de buffers del sistema a los procesos de usuario. También afecta
a la lógica del intercambio: si la operación de E/S afecta al mismo disco que se está usando
para el intercambio, prácticamente no tiene sentido encolar las escrituras en disco requeridas
para expulsar el proceso sobre ese mismo dispositivo. Este intento de expulsar el proceso y
liberar memoria principal no comenzará en sí mismo hasta que termine la operación de E/S
previa, en cuyo momento la expulsión del proceso al disco puede haber dejado de ser
apropiada.
En el caso de E/S línea a línea, se puede utilizar el buffer para almacenar una única línea. El
proceso de usuario se suspende durante la entrada de datos, esperando la llegada de una línea
completa. Con respecto a la salida, el proceso de usuario puede copiar una línea de salida en el
buffer y continuar el procesamiento. No se necesita suspender el proceso a menos que tenga
una segunda línea de salida que enviar al buffer antes de que se vacíe el mismo al terminar la
primera operación de salida. En el caso de E/S byte a byte, la interacción entre el sistema
operativo y el proceso de usuario sigue el modelo productor-consumidor.
BUFFER DOBLE
Con este nuevo esquema, un proceso transfiere datos a (desde) un buffer mientras el sistema
operativo vacía (o llena) el otro. Esta técnica se conoce como buffer doble o intercambio de
buffers.
Con respecto a la entrada orientada a flujo de caracteres, se plantean de nuevo los dos modos
de operación alternativos. En el caso de la E/S línea a línea, el proceso de usuario no necesita
suspenderse debido a una operación de entrada o salida, a menos que el proceso vaya por
delante del buffer doble. En el caso de operación byte a byte, el buffer doble no ofrece
ninguna ventaja adicional sobre un buffer único de doble longitud. En ambos casos, se utiliza el
modelo productor-consumidor.
BUFFER CIRCULAR
Un esquema de buffer doble debería suavizar el flujo de datos entre un dispositivo de E/S y un
proceso. Si el interés está centrado en el rendimiento de un determinado proceso, se desearía
que la operación de E/S fuera capaz de mantener el ritmo del proceso. El buffer doble puede
ser inadecuado si el proceso realiza ráfagas rápidas de E/S. En este caso, el problema puede
aliviarse frecuentemente utilizando más de dos buffers.
Cuando se utilizan más de dos buffers, al conjunto de buffers se le denomina buffer circular,
siendo cada buffer individual una unidad del buffer circular. Se trata simplemente de un
modelo productor-consumidor con un buffer acotado.
El uso de buffers es una técnica que amortigua los picos en la demanda de E/S. Sin embargo,
por muchos buffers que se utilicen, estos no permitirán a un dispositivo de E/S mantener el
ritmo de un proceso indefinidamente cuando la demanda media del proceso sea mayor que la
que puede servir el dispositivo de E/S. Incluso con múltiples buffers, todos los buffers acabarán
llenándose y el proceso tendrá que esperar después de procesar cada fragmento de datos. Sin
embargo, en un entorno de multiprogramación, donde hay diversas actividades de E/S y
distintos procesos que hay que atender, el uso de buffers es una técnica que puede
incrementar la eficiencia del sistema operativo y el rendimiento de los procesos individuales.
1. Explique cual es el error de logica en el buffer único.
R//El sistema operativo debe hacer un seguimiento de la asignación de buffers del
sistema a los procesos de usuario. También afecta a la lógica del intercambio: si la
operación de E/S afecta al mismo disco que se está usando para el intercambio,
prácticamente no tiene sentido encolar las escrituras en disco requeridas para expulsar
el proceso sobre ese mismo dispositivo. Este intento de expulsar el proceso y liberar
memoria principal no comenzará en sí mismo hasta que termine la operación de E/S
previa, en cuyo momento la expulsión del proceso al disco puede haber dejado de ser
apropiada.
2. En la gestión de buffers ¿Cuál es la distinción entre dos tipos de dispositivos de E/S?
R//Orientado a bloques
Orientado a flujo de caracteres