viernes, 6 de mayo de 2016

Bloqueo mutuo

Bloqueo Mutuo 
En sistemas operativos, el bloqueo mutuo (también conocido como interbloqueo, traba mortal, deadlock, abrazo mortal) es el bloqueo permanente de un conjunto de procesos o hilos de ejecución en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos. A diferencia de otros problemas de concurrencia de procesos, no existe una solución general para los interbloqueos.
Todos los interbloqueos surgen de necesidades que no pueden ser satisfechas, por parte de dos o más procesos. En la vida real, un ejemplo puede ser el de dos niños que intentan jugar al arco y flecha, uno toma el arco, el otro la flecha. Ninguno puede jugar hasta que alguno libere lo que tomó.

En el siguiente ejemplo, dos procesos compiten por dos recursos que necesitan para funcionar, que sólo pueden ser utilizados por un proceso a la vez. El primer proceso obtiene el permiso de utilizar uno de los recursos (adquiere el lock sobre ese recurso). El segundo proceso toma el lock del otro recurso, y luego intenta utilizar el recurso ya utilizado por el primer proceso, por lo tanto queda en espera. Cuando el primer proceso a su vez intenta utilizar el otro recurso, se produce un interbloqueo, donde los dos procesos esperan la liberación del recurso que utiliza el otro proceso.

Condiciones necesarias[editar]

También conocidas como condiciones de Coffman por su primera descripción en 1971 en un artículo escrito por E. G. Coffman.
Estas condiciones deben cumplirse simultáneamente y no son totalmente independientes entre ellas.
Sean los procesos P0, P1, ..., Pn y los recursos R0, R1, ..., Rm:
  • Condición de exclusión mutua: existencia de al menos de un recurso compartido por los procesos, al cual sólo puede acceder uno simultáneamente.
  • Condición de retención y espera: al menos un proceso Pi ha adquirido un recurso Ri, y lo retiene mientras espera al menos un recurso Rj que ya ha sido asignado a otro proceso.
  • Condición de no expropiación: los recursos no pueden ser expropiados por los procesos, es decir, los recursos sólo podrán ser liberados voluntariamente por sus propietarios.
  • Condición de espera circular: dado el conjunto de procesos P0...Pm(subconjunto del total de procesos original),P0 está esperando un recurso adquirido por P1, que está esperando un recurso adquirido porP2,... ,que está esperando un recurso adquirido por Pm, que está esperando un recurso adquirido por P0. Esta condición implica la condición de retención y espera.





Evitando bloqueos mutuos[editar]

Los bloqueos mutuos pueden ser evitados si se sabe cierta información sobre los procesos antes de la asignación de recursos. Para cada petición de recursos, el sistema controla si satisfaciendo el pedido entra en un estado inseguro, donde puede producirse un bloqueo mutuo. De esta forma, el sistema satisface los pedidos de recursos solamente si se asegura que quedará en un estado seguro. Para que el sistema sea capaz de decidir si el siguiente estado será seguro o inseguro, debe saber por adelantado y en cualquier momento el número y tipo de todos los recursos en existencia, disponibles y requeridos. Existen varios algoritmos para evitar bloqueos mutuos:
  • Algoritmo del banquero, introducido por Dijkstra.
  • Algoritmo de grafo de asignación de recursos.
  • Algoritmo de Seguridad.
  • Algoritmo de solicitud de recursos.





Prevención 

Los bloqueos mutuos pueden prevenirse asegurando que no suceda alguna de las condiciones necesarias vistas anteriormente.
  • Eliminando la exclusión mutua: ningún proceso puede tener acceso exclusivo a un recurso. Esto es imposible para procesos que no pueden ser encolados (puestos en un spool), e incluso con colas también pueden ocurrir interbloqueos.
  • La condición de posesión y espera puede ser eliminada haciendo que los procesos pidan todos los recursos que van a necesitar antes de empezar. Este conocimiento por adelantado muchas veces es imposible nuevamente. Otra forma es requerir a los procesos liberar todos sus recursos antes de pedir todos los recursos que necesitan. Esto también es poco práctico en general.
  • La condición de no expropiación puede ser también imposible de eliminar dado que un proceso debe poder tener un recurso por un cierto tiempo o el procesamiento puede quedar inconsistente.
  • La condición de espera circular es la más fácil de atacar. Se le permite a un proceso poseer sólo un recurso en un determinado momento, o una jerarquía puede ser impuesta de modo tal que los ciclos de espera no sean posibles.



RAID DE DISCOS

RAID DE DISCOS


  • RAID (Redundant Array of Independent Disks)

  • Conjunto Redundante De Discos Independientes

  • Matriz redundante de discos independientes
DEFINICIÓN
El ARAID es un sistema que nos permite implementar un volumen de almacenamiento de datos en tiempo real que a su vez, está formado por múltiples discos duros con el objetivo de conseguir más espacio o bien proteger la información y conseguir mayor tolerancia a fallos de disco (evitando pérdida de información si el disco duro sufre una avería).
Es un método de combinación de varios discos duros para formar una única unidad lógica en la que se almacenan los datos de forma redundante. Ofrece mayor tolerancia a fallos y más altos niveles de rendimiento que un sólo disco duro o un grupo de discos duros independientes. 

Las principales finalidades de un sistema RAID son:
üMejorar la tolerancia a fallos y errores.
üAumentar la integridad de los datos.
üMejorar el rendimiento de los sistemas.
üOfrecer una alternativa económica frente a los sistemas SCSI.

Sus ventajas son:
üMayor fiabilidad 
üMayor rendimiento y tasa de transferencia 
üMayor capacidad de almacenamiento  
üMayor integridad. 

Tipos de Raid 



Otros tipos de Raid 



RAID 0, también llamado conjunto divididovolumen dividido, distribuye los datos equitativamente entre dos o más discos (usualmente se ocupa el mismo espacio en dos o más discos) sin información de paridad que proporcione redundancia
     El RAID 1  también llamado raid de espejo crea una copia exacta de un conjunto de datos en dos o más discos. Esto resulta útil cuando queremos tener más seguridad desaprovechando capacidad, ya que si perdemos un disco, tenemos el otro con la misma información. 



TIPOS DE RAID





TIPOS DE RAID

TIPOS DE RAID
RAID 5 es conocido como distribuido con paridad y es  una configuración bastante usual en esta configuración se realiza una división por bloques de información y se distribuyen entre los discos que forman el conjunto. Además, se genera un bloque de paridad que, a modo de redundancia, nos permite reconstruir la información de volumen completo si, por ejemplo, uno de los discos se averiase. En este tipo de configuraciones, como mínimo debemos contar con 3 discos duros y, como nos podemos imaginar, solamente se tolera el fallo en uno de los discos.


RAID 0+1 es una combinación de dos configuraciones simultáneas RAID 0 y RAID 1; concreta mente, se requieren  4 discos duros que se tomarán por parejas para que cada una de éstas forme un RAID 0  y se realice la división de la información,  con las dos parejas, se monte un RAID 1 (un espejo). Dicho de otra forma, con esta configuración tendremos un RAID 0 redundado en espejo.



RAID 1+0 (o también conocido como RAID 10) es la configuración “contraria” al RAID 0+1; en este caso en vez de realizar un espejo del RAID 0 (los discos en striping), lo que hacemos es aplicar el espejo a cada disco, si en un RAID 0 repartimos los bloques de información entre dos discos, en el RAID 1+0 lo que hacemos es similar pero cada uno de estos discos, a su vez, está en espejo con otro. Por tanto, es una configuración de 4 discos en la que montamos un par de espejos y, por encima, repartimos la información entre dichos 
espejos.













Algoritmo Del Banquero

Algoritmo Del Banquero

 El Algoritmo del banquero, en sistemas operativos es una forma de evitar el interbloqueo, propuesta por primera vez por Edsger Dijkstra. Es un acercamiento teórico para evitar los interbloqueos en la planificación de recursos. Requiere conocer con anticipación los recursos que serán utilizados por todos los procesos. Esto último generalmente no puede ser satisfecho en la práctica.

 Este algoritmo usualmente es explicado usando la analogía con el funcionamiento de un banco. Los clientes representan a los procesos, que tienen un crédito límite, y el dinero representa a los recursos. El banquero es el sistema operativo.

El banco confía en que no tendrá que permitir a todos sus clientes la utilización de todo su crédito a la vez. El banco también asume que si un cliente maximiza su crédito será capaz de terminar sus negocios y devolver el dinero a la entidad, permitiendo servir a otros clientes.
El algoritmo mantiene al sistema en un estado seguro. Un sistema se encuentra en un estado seguro si existe un orden en que pueden concederse las peticiones de recursos a todos los procesos, previniendo el interbloqueo. El algoritmo del banquero funciona encontrando estados de este tipo.
Los procesos piden recursos, y son complacidos siempre y cuando el sistema se mantenga en un estado seguro después de la concesión. De lo contrario, el proceso es suspendido hasta que otro proceso libere recursos suficientes.
En términos más formales, un sistema se encuentra en un estado seguro si existe una secuencia segura. Una secuencia segura es una sucesión de procesos, <P_1,..., P_n>, donde para un proceso P_i, el pedido de recursos puede ser satisfecho con los recursos disponibles sumados los recursos que están siendo utilizados por P_j, donde j < i. Si no hay suficientes recursos para el proceso P_i, debe esperar hasta que algún proceso P_j termine su ejecución y libere sus recursos. Recién entonces podrá P_i tomar los recursos necesarios, utilizarlos y terminar su ejecución. Al suceder esto, el proceso Pi+1 puede tomar los recursos que necesite, y así sucesivamente. Si una secuencia de este tipo no existe, el sistema se dice que está en un estado inseguro, aunque esto no implica que esté bloqueado.
Así, el uso de este tipo de algoritmo permite impedir el interbloqueo, pero supone una serie de restricciones:
  • Se debe conocer la máxima demanda de recursos por anticipado.
  • Los procesos deben ser independientes, es decir que puedan ser ejecutados en cualquier orden. Por lo tanto su ejecución no debe estar forzada por condiciones de sincronización.
  • Debe haber un número fijo de recursos a utilizar y un número fijo de procesos.
  • Los procesos no pueden finalizar mientras retengan recursos




Algoritmo De barbero

Algoritmo del barbero


El problema del barbero durmiente es un problema de sincronización; consiste en una barbería en la que trabaja un barbero, que tiene un único sillón de barbero y varias sillas para esperar. Cuando no hay clientes, el barbero se sienta en una silla y se duerme. Cuando llega un nuevo cliente, éste o bien despierta al barbero o —si el barbero está afeitando a otro cliente— se sienta en una silla(o se va si todas las sillas están ocupadas por clientes esperando). El problema consiste en realizar la  actividad del barbero sin que ocurran condiciones de carrera. La solución implica el uso de semáforos y objetos de exclusión mutua para proteger la sección crítica.Un semáforo es una variable protegida (o tipo abstracto de datos) que constituye el método clásico para restringir o permitir el acceso a recursos compartidos (por ejemplo, un recurso de almacenamiento) en un entorno de multiprocesamiento. Fueron inventados por Edsger Dijkstra y se usaron por primera vez en el sistema operativo THEOS.En electrónica y en programación concurrente, se conoce como condición de carrera al error que se produce en programas o circuitos lógicos que no se han construido adecuadamente para su ejecución simultánea con otros procesos.









Sistemas operativos (Semáforo)

SEMÁFORO

 Un semáforo es una variable especial (o tipo abstracto de datos) que constituye el método clásico para restringir o permitir el acceso a recursos compartidos (por ejemplo, un recurso de almacenamiento del sistema o variables del código fuente) en un entorno de multiprocesamiento (en el que se ejecutarán varios procesos concurrentemente).


Operaciones

Los semáforos sólo pueden ser manipulados usando las siguientes operaciones.

Inicia(Semáforo s, Entero v)
{
  s = v;
}
P(Semáforo s)
{
  if(s>0)  
      s = s-1;  
  else
      wait();
}
La cual mantendrá en espera activa al regido por el semáforo si éste tiene un valor inferior o igual al nulo.
V(Semáforo s)
{
   if(!procesos_bloqueados)
        s = s+1;  
   else
        signal(); 
}
Estas instrucciones pueden modificarse para evitar la espera activa, haciendo que la operación P duerma al mismo proceso que la ejecuta si no puede decrementar el valor, mientras que la operación V despierta a un proceso que no es quien la ejecuta. En un pseudolenguaje más entendible, la operación P suele denominarse "wait" o "espera" y la operación V "signal" o "señal"
La verificación y modificación del valor, así como la posibilidad de irse a dormir (bloquerse) se realiza en conjunto, como una sola e indivisible acción atómica. El sistema operativo garantiza que al iniciar una operación con un semáforo, ningún otro proceso puede tener acceso al semáforo hasta que la operación termine o se bloquee. Esta atomicidad es absolutamente esencial para resolver los problemas de sincronización y evitar condiciones de competencia.
Cuando el semáforo alcance el valor 0, significará que todos los recursos están siendo utilizados, y los procesos que quieran solicitar un recurso deberán esperar a que el semáforo sea positivo, esto es: alguno de los procesos que están usando los recursos habrá terminado con él e incrementará el semáforo con un signal o V(s).
Inicia se utiliza para inicializar el semáforo antes de que se hagan peticiones sobre él, y toma por argumento a un entero. La operación P cuando no hay un recurso disponible, detiene la ejecución quedando enespera activa (o durmiendo) hasta que el valor del semáforo sea positivo, en cuyo caso lo reclama inmediatamente decrementándolo. V es la operación inversa: hace disponible un recurso después de que el proceso ha terminado de usarlo. Las operaciones P y V han de ser indivisibles (o atómicas), lo que quiere decir que cada una de las operaciones no debe ser interrumpida en medio de su ejecución.
La operación V es denominada a veces subir el semáforo (up) y la operación P se conoce también como bajar el semáforo (down), y también son llamadas signal y wait o soltar y tomar.
Para evitar la espera activa, un semáforo puede tener asociada una cola de procesos (normalmente una cola FIFO). Si un proceso efectúa una operación P en un semáforo que tiene valor cero, el proceso es detenido y añadido a la cola del semáforo. Cuando otro proceso incrementa el semáforo mediante la operación V y hay procesos en la cola asociada, se extrae uno de ellos (el primero que entró en una cola FIFO) y se reanuda su ejecución.
Gestión de entradas y salidas: en el momento en que se pulsa el botón deberá activarse un subprograma que paralice la circulación y permita el paso a los peatones y en el cual ya esté predeterminado un tiempo de espera para volver a reanudar la circulación.
Gestión de entradas y salidas: en el momento en que se pulsa el botón deberá activarse un subprograma que paralice la circulación y permita el paso a los peatones y en el cual ya esté predeterminado un tiempo de espera para volver a reanudar la circulación.

SISTEMAS OPERATIVOS

CONCURRENCIA.

Concurrencia de procesos

La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos puedan coincidir en el acceso a un recurso compartido o, dicho de otra forma, que requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.

El problema del productor y consumidor

Un ejemplo de un problema de concurrencia sería el siguiente: Dados dos procesos A (productor) y B (consumidor), suponiendo que ambos se ejecutan indefinidamente en el tiempo, el proceso A debe recibir tiempo de ejecución antes que B, tras esto, el proceso B debe recibir su oportunidad de ejecución, dando paso de nuevo al proceso A y así sucesivamente, siguiendo un esquema de alternancia estricta.

Recuerde que el planificador de procesos, al desconocer la naturaleza de los procesos y sus objetivos, no dispone de información suficiente para garantizar la secuencia de ejecución descrita en el ejemplo anterior. Por tanto, suponiendo que ambos procesos se encuentran en estado preparado, podría seleccionar al proceso B  para pasar a estado activo antes de seleccionar al proceso A, situación que no es deseada.
Recuerde que el planificador de procesos, como hemos visto en capítulos anteriores, emplea criterios de planificación que no tienen en consideración el objetivo de los procesos. Podemos decir que el  planificador de procesos desconoce cuál es el propósito de los procesos, únicamente puede observar su comportamiento, es decir, si presentan un comportamiento más o menos interactivo.
Por tanto, el programador, a la hora de modelar los procesos, debe emplear mecanismos de arbitraje que ofrece el sistema operativo y que permiten resolver el problema de concurrencia que se plantee.

Mecanismos de arbitraje

Los mecanismos de arbitraje que ofrece el sistema operativo son básicamente dos:
  • Mecanismos de sincronizacion : el sistema operativo ofrece mecanismos que permiten a los procesos coordinar su ejecución para conseguir el objetivo sin que sucedan situaciones no deseadas, como por ejemplo que dos o más procesos coincidan simultáneamente en el acceso a un cierto recurso que no se puede compartir.
  • Mecanismos de mensajería: el sistema operativo ofrece mecanismos de comunicación entre procesos mediante mensajes. El intercambio de mensajes entre procesos permite coordinarlos.

Programación concurrente

El término programación concurrente se emplea con frecuencia para referirse a un conjunto de programas que funcionan en cooperación.
Hay tres formas de interacción entre procesos cooperativos:
  • Concurrencia: Hay un recurso común, si varios procesos modificaran la misma información a la vez , cada uno podría destruir parte del trabajo de los demás. Si lo hacen uno tras otro, en serie, se obtendrá el resultado correcto.
  • Sincronización: El Sistema Operativo se encarga de enviarle señales a los procesos para coordinar su evolución y conseguir que progrese armónicamente.
  • Comunicación: El S.O. transmite mensajes entre los procesos, que se usan para intercambiar, enviar o recibir información.
Se le llama programación concurrente ya que la concurrencia fue la primera forma de iterar recursos entre procesos cooperativos.




. Definición de concurrencia
  • Dos o más procesos decimos que son concurrentes, paralelos, o que se ejecutan concurrentemente, cuando son procesados almismo tiempo, es decir, que para ejecutar uno de ellos, no hace falta que se haya ejecutado otro.
  • En sistemas multiprocesador, esta ejecución simultánea podría conseguirse completamente, puesto que podremos asignarle, por-ejemplo, un proceso A al procesador A y un proceso B al procesador B y cada procesador realizaran la ejecución de su proceso.
  • Cuando tenemos un solo procesador se producirá un intercalado delas instrucciones de ambos procesos, de tal forma que tendremos la sensación de que hay un paralelismo en el sistema (concurrencia, ejecución simultánea de más de un proceso).
  • Ahora bien, está claro que en esto tenemos que tener en cuenta que mientras un proceso está escribiendo un valor en una variable determinada, puede darse el caso que otro proceso que es concurrente al primero vaya a leer o escribir en esa misma variable, entonces habrá que estudiar el caso en el que un proceso haga una operación sobre una variable (o recurso en general) yotro proceso concurrente a él realice otra operación detal forma que no se realice correctamente. Para estudiar el  resto, y determinar el tipo de operaciones que se pueden realizar sobre recursos compartidos utilizaremos las condiciones de Bernstein.

Condiciones de Bernstein.
  • Condiciones que nos determinan si dos procesos se pueden ejecutar de forma paralela.

  •    R (S1) es el conjunto de variables cuyo valor es accedido durante la ejecución de la instrucción. 
       W (S1) es el conjunto de variables cuyo valor cambia durante la ejecución de la instrucción.
  • Condiciones de Bernstein: Dos procesos se pueden ejecutar de forma concurrente.









Mejor ajuste y peor ajuste


Administración de memoria: (peor ajuste mejor ajuste) 

Primer acercamiento: Partir la memoria en varios bloques Originalmente del mismo tamaño (¡más sencillo!) Por ejemplo: En 512KB de memoria física caben el sistema operativo mas otros 7 programas de 64KB (16 bits) cada uno El sistema operativo típica mente  usa la región más baja, a partir de 0x0000 La memoria mapeada a los diversos dispositivos queda dentro del segmento del SO. 



 Hay tres estrategias principales para dar espacio en la memoria a un nuevo proceso:

Primer ajuste Asigna al nuevo proceso al primer bloque de tamaño suficiente.

Mejor ajuste Asigna al nuevo proceso al bloque más chico en que quepa.

Peor ajuste Asigna al nuevo proceso al bloque más grande que haya disponible.

Primer ajuste
  • El mecanismo más fácil de implementar.
  • Ejecución más rápida.
  • Pero no considera facilitar las cosas para el futuro.
Mejor ajuste 
  • Requiere revisión completa de los bloques disponibles.
  •  mantenerlos en una lista ordenada.
  • Empleando un ordenamiento en montículo (heap), puede ser tan ágil/simple como el primer ajuste.
  • Busca que el desperdicio sea el menor posible.
  • Pero va generando muchos bloques muy pequeños.
Peor ajuste
  • Busca que los bloques que van quedando tras la creación de nuevos procesos tiendan a ser del mismo tamaño 
  • Balanceando el tamaño de los bloques remanentes. 


Segmentación Y Paginacion Por demanda

 SEGMENTACIÓN POR DEMANDA 

El sistema operativo asigna la memoria por segmentos y los controla por medio de descriptores de segmento que incluyen información sobre el tamaño, protecciones y ubicación del segmento. Un proceso no requiere de todos sus segmentos se encuentren en memoria para poder ejecutarse. En vez de esto el descriptor  de segmento contiene un bit de validez para cada segmento, el cual indica si se encuentra actualmente en memoria.



Hay varios mecanismos que permiten implementar la segmentación por demanda pero todos ellos son poco óptimos, algunas veces conviene no implementa ningún mecanismo de memoria virtual antes que utilizar segmentación por demanda.


  • Cuando un proceso  direcciona un segmento que contiene datos o código, el  hard examina este bit de validez. 


  • Si el segmento esta en memoria principal, el acceso continua sin problemas en caso contrario se genera una trampa al SO (falla de segmento), igual que sucede en las implantaciones de la paginacion por demanda.

Las rutinas de administración de memoria primero determinan si hay espacio suficiente para el segmento, Si no se efectúa una compactacion, Si luego de la compactacion el espacio disponible es escaso se escoge un segmento  para escribir en almacenamiento secundario e incorpora todo el segmento requerido 


La segmentación por demanda requiere de un considerable tiempo de procesamiento adicional,Por lo que esta no es un medio optimo para aprovechar al máximo Lo recursos de un sistema de computación.

PAGINACION POR DEMANDA
   La paginación por demanda es un sistema de paginacion con el cual, además de las ventajas de la paginación convencional, se busca disminuir los tiempos de respuesta y aumentar la cantidad de programas en memoria. Para lograr estos objetivos se hace uso de un intercambiador perezoso (llamado paginador) el cual carga a memoria solo las páginas que serán utilizadas por el programa en ejecución, de esta manera se logra un menor tiempo de carga y un ahorro en cuanto a espacio utilizado por dicho programa, ya que, por un lado, no necesitamos que todo el programa este en memoria para comenzar su ejecución mientras que, por otra parte, al no estar el programa completo en memoria, disminuimos considerablemente el espacio que éste ocupa.
Ya que el paginador solo busca las páginas que se necesitan para ejecutar algún programa, debemos agregar un bit que nos diga si las referencias de memoria son válidas o no, de lo contrario, al no encontrar una página no podríamos diferenciar si el paginador aún no la carga o si esta es realmente una referencia inválida.


El proceso que se sigue es el siguiente:
  1. Se intenta leer la página requerida
  2. Si la página requerida ya esta en memoria, simplemente se lee.
  3. Si no está en memoria, revisa si la referencia es válida.
  4. Si la referencia es inválida, se aborta.
  5. Si la referencia es válida, se intenta cargar la página.
      6. Cuando la página sea cargada, se reintenta la instrucción.

Al buscar una página, si esta no está en memoria, necesitará ser cargada. A este proceso se le llama fallo de página.

Al iniciar la ejecución de un programa, la tabla de páginas cuenta con todas sus entradas inválidas por lo cual el paginador fallará hasta tener lo necesario para iniciar el programa. Luego de esta carga inicial se comprobará si la siguiente página a utilizar ya está en memoria, en caso de que la página se encuentre, ésta es leída, pero cuando la página no es encontrada (y es una referencia válida) tenemos dos posibilidades:

  • Si existe un frame libre, se carga y se lee.
  • Si no tenemos frames libres, se intercambia la página de algún frame por la información a utilizar

El criterio utilizado para seleccionar qué página será intercambiada varía dependiendo de la implementación del sistema. Muchos de los problemas que presenta el sistema de paginación por demanda son debido a los fallos de página y principalmente a saber cuál es la página más conveniente para intercambiar. Esto se debe a que no podemos saber cuales páginas serán utilizadas prontamente y cuales no se volverán a utilizar, existen variados algoritmos que buscan aminorar este problema, los cuales, serán analizados más adelante.

Ventajas

A continuación se verán algunas de las ventajas de utilizar paginación por demanda:
  • Al no cargar las páginas que no son utilizadas ahorra memoria para otras aplicaciones.
  • Al mejorar el uso de la memoria, mejora el grado de multiprogramación.
  • Carga inicial más rápida ya que solo lee del disco lo que se utilizará.
  • Capacidad de hacer funcionar programas que ocupan más memoria que la poseída.
  • COW (Copia en escritura): Permite utilizar las mismas páginas para dos procesos (padre-hijo) hasta que uno de estos las modifique.
 

Fallos de páginas

Como hemos visto anteriormente, cuando un proceso requiere una página que no está en memoria se genera un fallo de página. La gran mayoría de las dificultades de la paginación por demanda se deben a cómo los fallos de página son tratados.
Gestión de un fallo de página
En primer lugar, para que los fallos de página puedan ser tratados correctamente necesitamos un sistema que sea capaz de reiniciar una instrucción, de esta manera pasará lo siguiente:
  • Una instrucción necesita una página que no está en memoria.
  • Se genera fallo de página (No se puede satisfacer la instrucción).
  • Se carga a memoria la página requerida.
  • Se reinicia la instrucción

Como vemos en este proceso existe una carga a memoria, éste es uno de los factores determinantes para saber si la paginación por demanda es conveniente o no, puesto que, en el peor de los casos, puede existir una carga en memoria por instrucción lo que nos daría tiempos de ejecución mucho peores que con una paginación regular.