Академический Документы
Профессиональный Документы
Культура Документы
Choapas
.................................. 7
Conclusión. ................................................................................................... 27
..................... 28
TRANSICIONES ....................................................................................... 35
Paralelismo............................................................................................. 42
Concurrencia ................................................................................. 44
Prevención ............................................................................................. 74
Detección .............................................................................................. 80
Recuperación ....................................................................................... 85
Secuenciabilidad ................................................................................. 90
Teoría de seriabilidad........................................................................... 91
Multiprogramación.
1.4. Clasificación.
Los sistemas operativos han estado en funcionamiento durante más
de medio siglo. Durante este tiempo se ha desarrollado una variedad
bastante extensa de ellos, no todos se conocen ampliamente.
Continuando con los sistemas cada vez más pequeños, llegamos a las
computadoras de bolsillo (handheld). Una computadora de bolsillo o PDA
(Personal Digital Assitant, Asistente personal digital) es una computadora
que cabe en los bolsillos y realiza una pequeña variedad de funciones,
como libreta de direcciones electrónica y bloc de notas. Además, hay
muchos teléfonos celulares muy similares a los PDAs, con la excepción de su
teclado y pantalla. En efecto, los PDAs y los teléfonos celulares se han
fusionado en esencia y sus principales diferencias se observan en el tamaño,
el peso y la interfaz de usuario. Casi todos ellos se basan en CPUs de 32 bits
con el modo protegido y ejecutan un sofisticado sistema operativo.
Los sistemas operativos que operan en estos dispositivos de bolsillo son
cada vez más sofisticados, con la habilidad de proporcionar telefonía,
fotografía digital y otras funciones. Muchos de ellos también ejecutan
aplicaciones desarrolladas por terceros. De hecho, algunos están
comenzando a asemejarse a los sistemas operativos de computadoras
personales de hace una década. Una de las principales diferencias entre los
dispositivos de bolsillo y las PCs es que los primeros no tienen discos duros de
varios cientos de gigabytes, lo cual cambia rápidamente. Dos de los
sistemas operativos más populares para los dispositivos de bolsillo son
Symbian OS y Palm OS.
En general, las capas más bajas trabajan con escalas de tiempo más
cortas. Algunas partes del sistema operativo deben interactuar
directamente con el hardware del computador, donde los sucesos pueden
tener una escala de tiempo tan breve como unas pocas billonésimas de
segundo. En el otro extremo del abanico, las partes del sistema operativo
que se comunican con el usuario, que envía las ordenes con un ritmo más
tranquilo, pueden trabajar en una escala de tiempo de unos pocos
segundos. El uso de un conjunto de niveles se adapta bien a este entorno.
1.6. Núcleo.
Todas las operaciones en las que participan procesos son controladas
por la parte del sistema operativo denominada núcleo (nucleus, core o
kernel, en inglés). El núcleo normalmente representa sólo una pequeña
parte de lo que por lo general se piensa que es todo el sistema operativo,
pero es tal vez el código que más se utiliza. Por esta razón, el núcleo reside
por lo regular en la memoria principal, mientras que otras partes del sistema
operativo son cargadas en la memoria principal sólo cuando se necesitan.
Cada sistema operativo tiene un tipo distinto de kernel: así los Unix más
tradicionales como FreeBSD usan un kernel " monolítico" en el que está todo
compilado dentro, otros usan los llamados "microkernels" como el Darwin,
Hurd e incluso Windows (krnl32.dll). GNU/Linux usa un kernel "modular"
(vmlinuz); un núcleo bastante grande comparado con un microkernel, pero
que es capaz de delegar funciones en los llamados " módulos”, partes
independientes del núcleo que pueden ser incorporadas dinámicamente si
hacen falta y luego descargadas si molestan. Así se pueden cargar "drivers"
para hardware, firewall o funciones especiales de red (ppp, rdsi, etc)
cuando se necesiten y cuando, por ejemplo, se cierre la conexión a internet,
liberar la memoria que usaba ese modulo.
Manejo de interrupciones.
Creación y destrucción de procesos.
Cambio de estado de los procesos.
Despacho.
Suspensión y reanudación de procesos.
Sincronización de procesos.
Comunicación entre procesos.
Manipulación de los bloques de control de procesos.
Apoyo para las actividades de entrada/salida.
Apoyo para asignación y liberación de memoria.
Apoyo para el sistema de archivos.
Apoyo para el mecanismo de llamada y retorno de un
procedimiento.
Apoyo para ciertas funciones de contabilidad del sistema.
Núcleo o Kernel y niveles de un Sistema Operativo.
El Kernel consiste en la parte principal del código del sistema
operativo, el cual se encargan de controlar y administrar los servicios y
peticiones de recursos y de hardware con respecto a uno o varios procesos,
este se divide en 5 capas:
Los procesos en el estado listo son los que pueden pasar a estado de
ejecución si el planificador los selecciona. Los procesos en el estado
ejecución son los que se están ejecutando en el procesador en ese
momento dado. Los procesos que se encuentran en estado bloqueado
están esperando la respuesta de algún otro proceso para poder continuar
con su ejecución. Por ejemplo, operación de E/S.
Creación de Procesos
Interno: Sistemas.
Externo: Usuario.
2) Descripción de la máquina virtual asociada: como espacio virtual
asignado, tipo de mapeo, tipo de acceso.
TRANSICIONES
Estados:
3. Ocurre cuando todos los procesos han utilizado su parte del tiempo
y es hora de que el primer proceso vuelva a correr.
Transiciones de estado.
Suspensión y Reanudación.
Una suspensión puede ser iniciada por el propio proceso o por otro. En
un sistema con un solo procesador el proceso en ejecución puede
suspenderse así mismo; ningún otro proceso podría estar en ejecución al
mismo tiempo para realizar la suspensión (aunque otro proceso sí podría
solicitar la suspensión cuando se ejecute). En un sistema de múltiples
procesadores, un proceso en ejecución puede suspender a otro que se esté
ejecutando en ese mismo momento en un procesador diferente.
Por otro lado, un hilo es una entidad más reducida capaz de convivir
junto a otros hilos bajo el contexto de un único proceso, permitiendo
compartir la información de estado, el área de memoria y/o los recursos
asociados a ese proceso.
Dentro de un proceso puede haber uno o más hilos de control cada uno
con:
Procesos ligeros
Una tarea (o proceso pesado) está formada ahora por una o más
hebras.
Paralelismo
Entre los elementos que son distintos para cada hilo están el contador
de programa, los registros y el estado. El contador de programa se necesita
porque los hilos, al igual que los procesos, pueden suspenderse y reanudarse.
Los registros se necesitan porque cuando los hilos se suspenden sus registros
deben guardarse. Por último, los hilos, al igual que los procesos, pueden estar
en los estados de ejecutándose, listo o bloqueado.
2.4. Concurrencia y secuencialidad.
Concurrencia
Regiones críticas
Algoritmo 2
Variables compartidas
– var flag: array [0..1] of boolean;
inicialmente flag [0] = flag [1] = false.
– flag [i] = true ? Pi listo para entrar en su sección crítica
Proceso Pi
repeat
flag[i] := true;
while flag[j] do no-op;
sección crítica
flag [i] := false;
sección restante
until false;
Satisface la exclusión mútua, pero no el requerimiento de progreso. (P0
pone flag[0 ] =true y P1 pone flag[1 ] =true; cada uno esperando al otro
indefinidamente)
Algoritmo 3
Existen tres algoritmos diseñados para este fin, son los siguientes:
Espera Activa.
Espera no Activa
Mecanismos de Hardware.
Por definición se tiene que el valor del semáforo debe ser mayor que
cero, VAL(S)>0. En el caso cuando el valor del semáforo es cero que relación
nos queda:
La finalidad más útil de los monitores es reunir todas las funciones que
operan sobre un conjunto de datos compartidos en un sólo módulo, de
manera que todos los accesos a esos datos estarán forzados a utilizar dichas
funciones.
Contadores de eventos:Es un mecanismo para sincronizar actividades
sin que sea necesario forzar la exclusión mutua, ya sea por que no
deseamos limitar la concurrencia de las actividades, o simplemente
porque no lo necesitamos. Se basa en una variable entera que cuenta
determinadas operaciones.
Mecanismos de Hardware
Son instrucciones hardware que aseguran la exclusión mutua. Entre las más
utilizadas son las siguientes:
Con lo anterior solo un proceso podrá entrar a la región crítica con lo que se
esta asegurando la exclusión mutua.
MUTEX = 1
Productor consumidor.
Productor gana
se apodera del buffer
¡¡¡sorpresa el buffer esta lleno!!!
no va a poder depositar
y por lo tanto va a liberar el buffer
nunca hace V( ).
Mecanismo de semáforos
init()
Inicializa el semáforo antes de que cualquier proceso haya ejecutado ni
una operación wait() ni una operación signal() al límite de número de
procesos que tengan derecho a acceder el recurso. Si se inicializa con 1,
se ha contruido un semáforo binario.
wait()
Si el estado indica cero, el proceso se queda atrapado en el semáforo
hasta que sea despertado por otro proceso. Si el estado indica que un
proceso más puede acceder el recurso se decrementa el contador y la
operación termina con exito.
La operación wait() tiene que estár implementada como una instrucción
atómica. Sin embargo, en muchas implementaciones la
operación wait() puede ser interrumpida. Normalmente existe una forma
de comprobar si la salida del wait() es debido a una interrupción o porque
se ha dado acceso al semáforo.
signal()
Una vez se ha terminado el uso del recurso, el proceso lo señaliza al
semáforo. Si queda algún proceso bloqueado en el semáforo uno de ellos
sea despertado, sino se incrementa el contador.
La operación signal() también tiene que estár implementada como
instrucción atómica. En algunás implementaciones es posible comprobar si
se haya despertado un proceso con exito en caso que hubiera alguno
bloqueado.
Para despertar los procesos se puede implementar varias formas que se
destinguen en sus grados de justicia, por ejemplo con un simple sistema
tipo FIFO.
Mecanismo de Monitores
Todas las estructuras que hemos visto hasta ahora siguen provocando
problemas para el programador:
El control sobre los recursos está distribuido por varios puntos de un
programa
No hay protección de las variables de control que siempre fueron
globales
Por eso se usa el concepto de monitores que implementan un nivel aún
más alto de abstracción facilitando el acceso a recursos compartidos.
Interbloqueo (DeadLock)
Conjunto de Aristas
Evasion de Deadlocks
Estado Seguro
Asignar recursos en orden lineal: Esto significa que todos los recursos
están etiquetados con un valor diferente y los procesos solo pueden
hacer peticiones de recursos 'hacia adelante'. Esto es, que si un
proceso tiene el recurso con etiqueta '5' no puede pedir recursos
cuya etiqueta sea menor que '5'. Con esto se evita la condición de
ocupar y esperar un recurso.
Los sistemas de spool suelen ser los más propensos al dead lock. Varios
trabajos parcialmente complejos que generan líneas de impresión a un
archivo de spool pueden interbloquearse si el espacio disponible para
trabajar se llena antes de completarse alguno de esos trabajos. La solución
más común es limitar los spoolers de entrada de modo que no se lean más
archivos cuando se llega al límite de su capacidad.
Postergación indefinida.
En los sistemas que mantienen procesos en espera mientras realizan
la asignación de recursos y/o procesan la planificación de decisiones, es
posible que un proceso sea postergado de manera indefinida mientras otro
reciben la atención del sistema. A esta situación se le conoce como
postergación indefinida, es diferente del dead lock pero sus consecuencias
son igual de negativas.
En algunos sistemas la postergación indefinida se evita aumentando
la prioridad de un proceso mientras espera por un recurso, a esto se le llama
envejecimiento.
1) Prevención:
En las técnicas de prevención el interés se centra en condicionar un
sistema para que elimine toda probabilidad de que ocurra un dead lock
(normalmente a costa de recursos).
2) Evitación:
En las técnicas para evitar, la idea es poner condiciones menos
estrictas que la prevención, para lograr una mejor utilización de los recursos,
pero procurando no caer en un dead lock.
3) Detección:
Los métodos de detección se usan en sistemas que permiten la
ocurrencia de un dead lock de forma voluntaria o involuntaria.
4) Recuperación:
Los métodos de recuperación se usan para romper los dead lock en
un sistema, para poder liberarlo de ellos y los procesos estancados pueden
continuar y llegar a su fin
Caracterización.
Debe ser obvio que los bloqueos mutuos son indeseables, pues
cuando se dan, los procesos nunca terminan su ejecución y los recursos del
sistema se paralizan, impidiendo que se inicien otros procesos. Antes de
analizar los distintos métodos para tratar el problema del bloqueo mutuo se
describirán las circunstancias que los caracterizan.
1.- Los procesos reclaman control exclusivo de los recursos que solicitan
(exclusión mutua).
2.- Los procesos mantienen los recursos que se les han asignado mientras
esperan por recursos adicionales (condición de espera).
3.- No se pueden tomar los recursos que los procesos tienen hasta su
completa utilización (condición de no apropiatividad).
4.- Existe una cadena circular de procesos en la cual cada uno de ellos
mantiene uno o más recursos que son requeridos por el siguiente proceso de
la cadena (condición de espera circular).
Prevención
* Exclusión mutua.
La condición de exclusión mutua debe conservarse para recursos no
compartibles. Los recursos compartibles, no requieren acceso mutuamente
excluyente y, por tanto, no pueden participar en un dead lock. Los archivos
de sólo lectura son un buen ejemplo de recursos compartibles. Si varios
procesos tratan de abrir al mismo tiempo un archivo de sólo lectura, se les
puede otorgar accesos simultáneos al archivo, por lo general no es posible
evitar dead lock`s negando la condición de exclusión mutua. Por su
naturaleza algunos recursos no pueden compartirse.
Prevención de Deadlocks
La estrategia consiste en anular alguna de las cuatro condiciones
necesarias para que se produzca un Deadlock.
1. No puede ser anulada porque existen recursos que deben ser usados
en modalidad exclusiva.
2. La alternativa sería hacer que todos los procesos solicitaran todos los
recursos que habrán de utilizar antes de utilizarlos al momento de su
ejecución lo cual sería muy ineficiente.
3. Para anular esta condición cuando un proceso solicita un recurso y
este es negado el proceso deberá liberar sus recursos y solicitarlos
nuevamente con los recursos adicionales. El problema es que hay
recursos que no pueden ser interrumpidos.
4. Espera Circular: esta estrategia consiste en que el sistema operativo
numere en forma exclusiva los recursos y obligue a los procesos a
solicitar recursos en forma ascendente. El problema de esto es que
quita posibilidades a la aplicación.
Deadlock no puede ocurrir a menos que tenemos todas las cuatro
condiciones. Si aseguramos que no puede ocurrir por lo menos una de las
condiciones, no podemos tener deadlock.
Exclusión mutua. En general, no podemos eliminar esta condición.
Hay recursos como impresoras que no son compatibles.
Retención y espera. Para no ocurrir esta condición, cuando un
proceso solicita recursos, no puede retener otros. Protocolos:
o Un proceso puede solicitar recursos solamente si no tiene
ningunos.
o Un proceso tiene que solicitar todos los recursos antes de la
ejecución.
Problemas:
o La utilización de recursos puede ser baja.
o Starvation (bloqueo indefinido) si se necesitan algunos recursos
populares.
No apropiación. Si un proceso retiene varios recursos y solicita otro
que no está disponible, se le expropian todos los recursos que
retiene. El proceso tiene que recuperar todos los recursos antes de
ejecutar otra vez.
Pero en general no podemos expropiar recursos como impresoras y
grabadores.
Espera circular. Hacemos una ordenación de los tipos de recursos en
el sistema (R1, R2, ...). Un proceso tiene que solicitar sus recursos en
orden (y todos los ejemplares de un tipo al mismo tiempo). Si
necesita un tipo de recurso más baja en la ordenación, tiene que
liberar los otros que retiene.
Problemas con la prevención de deadlock: Utilización baja de
recursos y reducción de la productividad del sistema.
Evitar
Evitación
Detección
La prioridad
El tiempo que el proceso ha corrido
El número y tipo de los recursos adquiridos
La clase de proceso (batch o interactiva)
La starvation es un problema.
Detección y Recuperación
Representación vectorial
Recuperación
Una forma de elegir los procesos que pueden ser retirados es de acuerdo a
las prioridades de los procesos. Pero esto también tiene sus dificultades.
Secuenciabilidad
2. Para leer una zona concreta del archivo hay que avanzar siempre, si la
zona está antes de la zona actual de lectura, será necesario "rebobinar" el
archivo.
3. Los ficheros sólo se pueden abrir para lectura o para escritura, nunca de
los dos modos a la vez.
Archivos Secuenciales
Teoría de seriabilidad
Procedure P
begin
Start;
temp := Leer(x);
temp := temp + 1;
Escribir(x, temp);
Commit;
end
Puede ser presentado como r1[x] -› w1[x] -› c1. Los subíndices identifican esta
transacción particular y la distinguen de cualquier otra transacción que
acceda al mismo dato. En general, usaremos r1[x] (o w1[x] para denotar la
ejecución de Leer (o Escribir) ejecutado por la transacción T1 sobre el dato x.
T1 = r1[x] -› w1[x] -› c1
T3 = r3[x] -› w3[y] -› w3[x] -› c3
T4 = r4[y] -› w4[x] -› w4[y] -› w4[z] -› c4
Planificación a
Medio Plazo
En los sistemas
de multiprogramación y tiempo compartido varios procesos residen en la
memoria principal. El tamaño limitado de ésta hace que el número de
procesos que residen en ella sea finito. Puede ocurrir que todos los procesos
en memoria estén bloqueados, desperdiciándose así la CPU. En algunos
sistemas se intercambian procesos enteros (swap) entre memoria principal y
memoria secundaria (normalmente discos), con esto se aumenta el número
de procesos, y, por tanto, la probabilidad de una mayor utilización de la
CPU.
Ser equitativa: debe intentar hacer una planificación justa, esto es,
se debe tratar a todos los procesos de la misma forma y no aplazar
indefinidamente ningún proceso. La mejor forma de evitarlo es
emplear alguna técnica de envejecimiento; es decir, mientras un
proceso espera un recurso, su prioridad debe crecer.
Ser eficiente: debe maximizar el uso de los recursos tales como
intentar que la ocupación de la CPU sea máxima. Al mismo tiempo
se debe intentar reducir el gasto extra por considerar que es
trabajo no productivo. Normalmente el idear algoritmos eficientes
supone invertir recursos en gestión del propio sistema.
Lograr un tiempo bueno de respuesta, es decir, que los usuarios
interactivos reciban respuesta en tiempos aceptables.
Lograr un tiempo de proceso global predecible. Esto quiere decir
que un proceso debe ejecutarse aproximadamente en el mismo
tiempo y casi al mismo costo con independencia de la carga del
sistema.
Elevar al máximo la productividad o el rendimiento, esto es,
maximizar el número de trabajos procesados por unidad de
tiempo. Eso supone, por un lado, dar preferencia a los procesos
que ocupan recursos decisivos y, por otro, favorecer a los procesos
que muestran un comportamiento deseable. En el primer caso
conseguimos liberar el recurso cuanto antes para que esté
disponible para un proceso de mayor prioridad. Con el segundo
criterio escogemos a los procesos que no consumen muchos
recursos dejándole al sistema mayor capacidad de actuación.
El Reloj de Interrupciones.
Uso de Prioridades
Existe una variante de este esquema llamada selfish round robin (SRR).
En este esquema los procesos que entran al sistema se colocan primero en
una lista de espera hasta que su prioridad alcanza el nivel de proceso para
la lista de activos. Mientras un proceso está en la lista de espera, su prioridad
aumenta en una relación a; cuando un proceso entra a la lista de activos
su prioridad se incrementa en una relación b.