Title: Diapositiva 1
1BUFFER
Es el área de almacenaje temporal, por lo general en la RAM. El objetivo de la mayor parte del Buffer es de actuar como un área propia, necesita el permiso de la CPU antes de la transferencia de datos a un dispositivo. Como la lectura y la escritura de datos a un disco son relativamente lentos, muchos programas almacenan la información de los cambios de datos dentro de un Buffer y luego lo copian a un disco. Por ejemplo, los procesadores de texto emplean un buffer para almacenar los cambios de un archivo. Entonces cuando se guarda el archivo, el procesador de texto lo pone al día, respecto a los cambios efectuados con el contenido del Buffer.
2BUFFER
Esto es mucho más seguro que el tener
acceso sobre el archivo que hay guardado en disco
originario, así podemos evitar posibles fallos
irremediables, por eso cuando hay un corte de
luz, toda la información que tengamos almacenada
dentro del Buffer se pierde, por eso muchas veces
cuando hacemos un documento, es aconsejable
guardar la información cada cierto tiempo. Otro
ejemplo común de Buffer, es utilizado para la
impresión de documentos, cuando entra una orden
de impresión, la información del documento se
guarda dentro del buffer, y cuando ha recogido
toda la información y después de hacer la
comprobación de si se quiere seguir con el
proceso de impresión pasa toda la información al
papel a través de la impresora.
3 Es un área de memoria principal
reservada para contener los datos leídos de un
archivo mientras se utilizan. Cuando esta área
temporal queda llena, el programa puede empezar a
utilizar estos datos. Manejar un buffer implica
trabajar con grandes grupos de datos de memoria
Ram para que el número de accesos al
almacenamiento se reduzca.
BUFFER
El sistema operativo es quien maneja realmente
los buffer del sistema. La entrada buffer del
CONFIG.SYS permite especificar el numero de
almacenamientos intermedios (o accesos) de discos
que ha de usar del DOS, esto dependerá del tipo
de configuración de cada sistema y se mide en
términos de tiempos que consume el
desplazamiento, el retraso por rotación y el
tiempo de transferencia. Cada sector objeto de
lectura anticipada consume un equivalente de
memoria de 512 bytes. En esta ocasión se
revisaran diversas formas de administrar el
buffer para tratar de reducir lo mas posible los
costosos accesos a dispositivos que son muy
lentos respecto al CPU.
4- Almacenamiento temporal único por demanda
-
- Es utilizado cuando existe un registro por
bloque y un almacenamiento por archivo. En este
caso el buffer es llenado por demanda del
programa del usuario. - El buffer contiene un apuntador al programa y un
área de datos. - El programa de canal es similar a este
- Esperar que se pida una lectura.
- Mandar una orden de E/S a la unidad de control.
- Esperar a que se llene el buffer.
- Generar una interrupción para que se utilice el
buffer. - En esta espera el CPU y el programa del usuario
están ociosos. -
5Almacenamiento temporal por anticipación
Se utiliza para evitar esos tiempos ociosos, o
sea que se pretende anticipar a la solicitud de
lectura del programa manteniendo el buffer lleno.
La estructura de este tipo de buffer esta
formado por un apuntador al programa, una bandera
de estado (0 vacío, 1 lleno) y el área de datos.
El canal esta revisando continuamente la
bandera y si el buffer utiliza la bandera cambia
su estado para que el buffer sea llenado de
nuevo.
6Programa de canal para llenar el buffer
Ciclo Si bandera1 ir a ciclo
Emite un comando de inicio E/S a la Unidad de
Control Esperar mientras el
buffer se llena Bandera 1
Ir a ciclo. Programa de
canal para desalojar el buffer Espera
Si bandera 0 ir a espera
Lee el contenido del buffer en el área de trabajo
del registro Bandera 0
Ir a espera.
7Almacenamiento temporal con bloques Este
caso se utiliza para cuando en el bloque leído
existen n registros.La estructura del buffer
incluye un contador (respecto a la estructura
anterior) para indicar el registro (registro del
buffer) próximo a leer. Programa de canal
para llenar el buffer Ciclo Si bandera
1 ir a ciclo Emite un comando
de E/S a la unidad de control
Esperar mientras el buffer se llena
Contador 1
Bandera 1 Ir a ciclo.
8Programa de canal para desalojar el buffer
Espera Si bandera 0 ir a espera.
Lee el registro (contador)
dentro del área de trabajo.
contador contador 1 Si
contador gt n Bandera 0
Vete a espera La
rutina de desalojo esta en espera de las
lecturas, pero el programa puede ejecutar otras
instrucciones en ese tiempo y mientras se
desaloja no puede ser llenado.
9Doble almacenamiento temporal Es
utilizado para n registros por bloque, en este
caso existen dos buffers, uno se llena mientras
el otro desaloja, esto reduce la espera.
Lógicamente la estructura del buffer cambia,
incluye un apuntador al otro buffer. Existen
dos apuntadores para utilizar la anticipación de
llenado y desalojo, estos son P-llenar
Apunta al buffer que se esta llenando o debe
llenarse. P-desalojo Apunta al buffer que se
esta desalojando o debe desalojarse. Se llena
el buffer apuntado por P-llenar
10Programa de llenado Ciclo Si P-llenar
.bandera 1 ir a ciclo Emite
comando de E/S a la U. de C.
Esperar mientras P-llenar .buffer está
llenándose P-llenar .contador
1 P-llenar .bandera 1
P-llenar P-llenar .siguiente
Ir a ciclo. El programa se
cicla cuando un buffer está lleno y el otro no
está totalmente vacío.
11Programa de desalojo Espera Si
P-desalojo .bandera-llenar0 ir a espera
Leer registro (P-vacío
.contador) dentro del área de trabajo del
Registro P-desalojo
.contador P-desalojo .contador 1
Si P-desalojo .contador gt n
P-desalojo .bandera -
llenar 0 P-desalojo
P-desalojo .siguiente Ir a
espera. Esta rutina esta en ciclo solo
cuando un buffer ya desalojó y el otro está vacío
o empieza a llenarse. Si el buffer es llenado
con más rapidez que desalojado, el programa
permanecerá en ciclo, pero esto es preferible a
tener ocioso al CPU. Existe una forma de atenuar
este problema y es encadenar mas buffers.
12Triple almacenamiento temporal En esta
situación se pretende que el buffer 1 este lleno,
el buffer 2 se este llenando y el buffer 3 este
desalojando. Si persiste el problema de que
el llenado es más rápido que el desalojo, la
rutina de desalojo tendrá que esperar. El tener
varios buffers en actividad es que los periodos
ociosos se reducen, pero a su vez aumenta la
complejidad, el tiempo de ejecución de las
rutinas de llenado y desalojo y lo que se
requiere de memoria principal.
13El BUFFER o CACHE es una memoria que va incluida
en la controladora interna del disco duro, de
modo que todos los datos que se leen y escriben a
disco duro se almacenan primeramente en el
buffer. La regla de mano aquí es 128kb-Menos de 1
Gb, 256kb-1Gb, 512kb-2Gb o mayores. Generalmente
los discos traen 128Kb o 256Kb de cache.
Memoria CACHE (tamaño del BUFFER)
Si un disco duro está bien organizado (si no,
utilizar una utilidad desfragmentadora DEFRAG,
NORTON SPEEDISK, etc.), la serie de datos que se
va a necesitar a continuación de una lectura
estará situada en una posición físicamente
contigua a la última lectura, por eso los discos
duros almacenas en la caché los datos contiguos,
para proporcionar un acceso más rápido sin tener
que buscarlos. De ahí la conveniencia de
desfragmentar el disco duro con cierta
frecuencia. El buffer es muy útil cuando se está
grabando de un disco duro a un CD-ROM, pero en
general, cuanto más grande mejor, pues contribuye
de modo importante a la velocidad de búsqueda de
datos.
14Intercambio (swapping)
- En un sistema de procesamiento por lotes,
organizar la memoria en particiones fijas es
simple y efectivo cada trabajo se carga en la
memoria cuando le toque su turno, y se queda en
memoria hasta que termine. Si hay suficientes
particiones para mantener a la CPU siempre
ocupada, no habría razones para usar nada
diferente. - Pero en un sistema interactivo, de tiempo
compartido, la situación es diferente, ya que es
posible que la memoria no alcance para mantener a
todos los procesos. - En este caso se usa el disco como apoyo para
extender la capacidad de la memoria algunos
procesos se pasan temporalmente a disco, recordar
(scheduler de largo plazo).
15-
- Intercambio (swapping)
- El sistema operativo mantiene una tabla que
indica qué partes de la memoria están
desocupadas, y cuáles en uso. Las partes
desocupadas son hoyos en la memoria
inicialmente, toda la memoria es un solo gran
hoyo. Cuando se crea un proceso o se trae uno del
disco, se busca un hoyo capaz de contenerlo, y se
pone el proceso allí. - Las particiones ya no son fijas, sino que van
cambiando dinámicamente, tanto en cantidad como
en ubicación y tamaño. Además, cuando un proceso
es pasado a disco, no hay ninguna garantía de que
vuelva a quedar en la misma posición de memoria
al traerlo de vuelta, de manera que es
imprescindible el apoyo del hardware para hacer
ligadura en tiempo de ejecución.
16Intercambio (swapping)
- Hasta ahora hemos supuesto que los procesos son
estáticos en tamaño pero es mas realista pensar
que pueden crecer, por ejemplo vía asignación
dinámica de memoria. Si es así, conviene reservar
un poco mas de memoria que la que estrictamente
necesita al momento de ponerlo en memoria. Al
hacer swapping, no es necesario guardar todo el
espacio que tiene reservado, sino solo el que
esta usando. Que pasa si un proceso quiere crecer
mas allá del espacio que se le había reservado?
Si hay un hoyo contiguo se puede usar. Si no, se
puede pasar el proceso a un hoyo mas grande. Si
no hay ninguno, se pasa a disco hasta que haya.
También se puede, simplemente, matar al proceso. - Otro punto que hay que tener en cuenta al usar
swapping, es el I/O que pudiera estar pendiente.
Cuando se hace, por ejemplo, input, se especifica
una dirección de memoria donde se va a poner lo
que se lea desde el dispositivo. Supongamos que
proceso A trata de leer del disco hacia la
dirección d, pero el dispositivo esta ocupado
17Intercambio (swapping)
- Si los procesos pueden crecer, conviene reservar
un poco más de memoria que la que estrictamente
necesita al momento de ponerlo en memoria. Al
hacer swapping, no es necesario guardar todo el
espacio que tiene reservado, sino sólo el que
está usando. Qué pasa si proceso quiere crecer
más allá del espacio que se le había reservado? - Otro punto que hay que tener en cuenta al usar
swappping, es el I/O que pudiera estar pendiente.
Cuando se hace, por ejemplo, input, se especifica
una dirección de memoria donde se va a poner lo
que se lea desde el dispositivo. Supongamos que
proceso A trata de leer del disco hacia la
dirección d, pero el dispositivo está ocupado su
solicitud, por lo tanto, es encolada. Entretanto,
el proceso A es intercambiado a disco, y la
operación se completa cuando A no está en
memoria. En esas circunstancias, lo leído se
escribe en la dirección d, que ahora corresponde
a otro proceso. Para evitar tal desastreno pasar
a disco procesos co I/O pendiente, o bien hacer
siempre I/O desde y hacia buffers del sistema
operativo.
18Intercambio (swapping)
- Se basa en tener un único proceso en memoria
principal y el resto en memoria secundaria (en
tiempo compartido hay mas tiempo que en memoria). - Cuando el proceso acaba, se trae otro de la
memoria auxiliar.
Swapping out
Memoria principal
Swapping In
Memoria secundaria p.e. Disco duro
19- Particiones
- La memoria mas simple para permitir multitarea
es darle a cada programa un lugar fijo en memoria
para que corra. Dividimos la memoria en
particiones de tamaño fijo e instruimos al linker
o al compilador para que se le asigne una
dirección fija al programa. Será importante ver
cual es el rango de direcciones de memoria
comprometido durante la ejecución de nuestro
programa. Pero de esta manera cuando queramos
correrlo deberemos esperar a que ese rango de
direcciones quede libre. Recordemos que estamos
hablando de espacio de memoria plana. Cada
proceso a memoria es a una única dirección de
rango 0-MAXMEM. -
- Debido a que cada programa debe correr en una
partición debe correr en una partición
particular, el sistema operativo debe mantener
una cola de espera separada para manejar cada
partición. Cuando se libera una partición otro
programa (el que sigue la cola) puede cargarse y
ejecutarse en esa partición.
20- Particiones
- Otro aspecto en el que se consume espacio de
memoria en este sistema es que será poco
frecuente que un programa ocupe completamente su
partición. Esto se conoce como fragmentación
interna (aunque en realidad se trata del fenómeno
opuesto a la fragmentación, con un mismo
resultadoel desperdicio de memoria). Algo de
esta memoria desperdiciada podría aprovecharse si
permitimos que mas de un programa se ejecute
dentro de una misma partición. -
21- Partición fija
- Descripción
- La memoria principal se divide en un conjunto de
particiones fijas durante la generación del
sistema. Un proceso se puede cargar en una
partición de mayor o igual tamaño. - Ventajas
- Sencilla de implementar poca sobrecarga del
sistema operativo. - Desventajas
- Empleo ineficiente de la memoria debido a la
fragmentación interna el numero de procesos
activos es fijo. -
22- En la mayoría de los esquemas de gestión de
memoria, se puede suponer que el esquema
operativo ocupa una parte fija de la memoria
principal y que el resto de la memoria esta
disponible para ser usada por varios procesos. El
esquema mas sencillo de gestión de la memoria
disponible es dividirla en regiones con limites
fijos.
Proceso 5
Proceso 4
Libre y desperdiciada
Proceso 1
Memoria con partición fija
23- Partición dinámica
- Descripción
- Las particiones se crean dinámicamente, de forma
que cada proceso se carga en una partición de
exactamente el mismo tamaño que el proceso. - Ventajas
- No hay fragmentación interna poca sobrecarga
del sistema operativo. - Desventajas
- Uso ineficiente del procesador debido a la
necesidad de compactación para contrarrestar la
fragmentación externa.
24- Partición simple
- Descripción
- La memoria principal se divide en un conjunto de
marcos de igual tamaño que los marcos. Un proceso
se carga situando todas sus paginas en marcos
libres pero no necesariamente contiguos. - Ventajas
- No tiene fragmentación externa
- Desventajas
- Hay una pequeña cantidad de fragmentación interna.