Está en la página 1de 28

Introducción

Los dispositivos que debe manejar el sistema operativo, incluyen:

 Teclado
 Monitor
 Dispositivos de almacenamiento: discos, cintas, disquetes, etc.
 Impresoras
 Red
 MODEM
 Ratón
 etc.
Cómo se puede ver, se abarca una gran variedad de tipos de dispositivos, la cual está cambiando
constantemente. Ésto complica el diseño del SO dado que éste tiene que establecer una interfaz entre las
aplicaciones y el equipo, lo más simple y uniforme posible. Es decir, la interfaz debe ser la misma para todos
los dispositivos a nivel de aplicación (principio de independencia de dispositivos).

La amplia variedad de dispositivos hace difícil la aplicación del principio de independencia de dispositivos,
dado que existen diferencias radicales entre los dispositivos, en los siguientes aspectos:

 Velocidad de los datos


 Aplicaciones
 Complejidad del control
 Unidad de transferencia: se puede tratar por bloques o por caracteres
 Representación de los datos: cada dispositivo puede utilizar diferentes sistemas de codificación
 Condiciones de error

Los dispositivos son mucho más lentos que el procesador y la memoria, ya que estos se miden en Ghz y
nanosegundos respectivamente, mientras que los dispositivos están en el orden de milisegundos.

Esta diferencia y el deseo de aplicaciones interactivas hace que la E/S sea el cuello de botella.

Por lo que el sistema operativo debe proporcionar un sistema de E/S que persiga los siguientes objetivos:

 Interfaz sencilla y fácil de utilizar


 Optimizar la E/S
 Permitir conectar cualquier dispositivo sin tener que remodelar el sistema E/S ni el sistema operativo

Caracterización de los dispositivos de E/S

Componentes generales de los dispositivos

Los dispositivos constan de tres componentes:

 Periférico, o componente mecánica: es el dispositivo en sí


 Controlador, o componente electrónica: es el adaptador que interactúa entre el dispositivo y el procesador,
a través del bus del sistema.
 Driver, o componente lógica: es la parte de software que convierte los comandos generales del sistema
operativos, en instrucciones específicas para el dispositivo
Clasificación de dispositivos según el uso

Según su función, los dispositivos se pueden clasificar en:

 Dispositivos de interfaz de usuarios


 Dispositivos de almacenamiento
 Dispositivos de comunicaciones

Clasificación de dispositivos según la transferencia de información

Según como se envíe y recupere la información del dispositivo.

 dispositivos de bloques: son los que reciben/entregan información en bloques direccionados de tamaño fijo, y
es posible leer o escribir cada bloque independientemente y tienen operaciones de localización. Por ejemplo:
discos duros
 dispositivos de caracteres: son los que reciben/entregan información un flujo de caracteres que no son
direccionables y no tienen funciones de localización. Por ejemplo: teclado, monitor, puertos.

Clasificación de dispositivos según su direccionamiento

El procesador, en general, no interactua directamente con el dispositivo, sino con los adaptadores. La interfaz
entre el procesador y el adaptador puede ser a través de:

 proyección en memoria:Se asigna a cada controlador un rango de direcciones a través de las cuáles se
accede a sus registros y se programa con instrucciones de acceso a memoria. Se reserva una zona de memoria
física para asignar acontroladores de E/S
 proyección en puertos: Al controlador se le asigna un puerto de E/S, una
interrupción hardware y se programa con operaciones de E/S (portin y portout) para indicar que registro se
quiere manipular y como

Organización de la E/S
La interacción entre el procesador y los controladores de los dispositivos, puede ser de tres formas:

 E/S programada
 E/S dirigida por interrupciones
 E/S directa a memoria (DMA)

E/S programada (polling)

El procesador monitorea constantemente los dispositivos para determinar si están listos o contienen
información disponible para procesar.

Simple y eficiente si los dispositivos son de uso constante, o el procesador no tiene otras tareas que realizar.

E/S dirigida por interrupciones

El procesar emite una orden, por los puertos o direcciones de memoria correspondientes y continua
procesando otras tareas. Cuando el dispositivo está listo o tiene información disponible, activa una
interrupción, dónde el driver procesa la información

Por ejemplo, en la IBM PC se tienen las siguientes interfaces:


Controlador E/S Puerto E/S Interrupción

Reloj 040 - 043 8

Teclado 060 - 063 9

RS232 2 2f8 - 2ff 11

Disco duro 320 - 32f 13

puerto paralelo 378 - 37f 15

Monitor a color 3d0 - 3df

Disco flexible 3f0 - 3f7 14

RS232 1 3f8 - 3ff 12

 El procesador no pierde tiempo chequeando el estado de los dispositivos


 La rutina de servicio de interrupción deberá ser eficiente al máximo, ya que mientras esté en ejecución el
procesador no puede realizar otras tareas, incluyendo otras interrupciones

E/S con acceso directo a memoria

El mecanismo de interrupciones, puede funcionar muy bien para dispositivos de caracteres o de bloques
pequeños. Sin embargo para dispositivos de bloques grandes ésto retardaría el tiempo de CPU en leer los
datos del adaptador y pasarlos a la memoria del usuario, según la capacidad del bus de datos. Para liberar al
CPU de esta carga de trabajo, se inventó el acceso directo a memoria o DMA (por sus siglas en inglés).

El mecanismo de DMA consiste en que el procesador envía el requerimiento al adaptador indicandole,


además de los parámetros del comando específico, la dirección de memoria donde se encuentra el bloque de
datos a trabajar, el CPU continua su trabajo, mientras que el adaptador inicia el procesamiento de la petición
en forma paralela. Cuando el adaptador termina su proceso, los datos ya están en la memoria del usuario y
generá una interrupción para verificar el estado de la operación

Diferentes configuraciones de DMA

Otras mejoras

Cachés de disco en el controlador


Arquitectura del sistema de E/S
Se debe buscar la independencia del dispositivo haciendo un diseño de capas logiciales así:

 Interrupciones
 Manejadores de dispositivos
 Interfaz del SO
 Aplicaciones del usuario

Manejadores de interrupciones

Son el nivel más bajo, y deben ocultase de los proceso manejadores. Al recibir una interrupción, rutean el
requerimiento al driver correspondiente.

Manejadores de dispositivos (driver)

Tienen el código específico para cada dispositivo. Su función es aceptar solicitudes abstractas de la interfaz
del SO y asegurarse que se cumpla la requisición. También convertir los datos del dispositivo al formato
general del SO.

Interfaz del SO independiente del dispositivo

Son las librerias y API del SO que proporciona al programador y a la línea de comando del usuario para lidiar
con los dispositivos.

Éstas librerías deben realizar varias funciones independientes del dispositivo:

 Sincronización uniforme
 Nominación uniforme
 Protección
 Tamaño de bloque abstracto
 Planificación de E/S
 Gestión de errores
Aplicaciones del usuario

Las aplicaciones del usuario, tiene acceso al API del SO para trabajar con los dispositivos de E/S. Sin
embargo, existen otras aplicaciones como los demonios, o bibliotecas que hacen procesos de manejo por
cola, como colas de impresión, servidores de correo, etc.

Plug and play

 Los dispositivos tienen firmware para identificarse en el bus de dispositivos


 Aceptan dinámicamente la configuración del SO (IRQ, slot, etc)
 El SO, con la identificación proporcionada, puede instalar y configurar el driver adecuado

Buffering
Necesidad

 Los procesos deben esperar hasta que los procesos de E/S terminen, por lo que se necesita un almacenamiento
intermedio
 Si no hay buffering se necesita que páginas del usuario permanezcan en memoria, durante la E/S

Orientaciones del buffering

 Orientado a bloques:
o Usado para dispositivos de bloques
o La información es almacenada en bloques de tamaño fijo
o Las transferencias son hechas un bloque a la vez
 Orientado a flujos
o Usado para dispositivos de caracter (en generar para lo que no es almacenamiento)
o Las transferencias como un flujo de datos
o El buffer es visto como una cola circular

Tipos de buffering

Dispositivos especiales

El reloj

Normalmente no se considera un dispositivo más, sino se le da un tratamiento específico. Sus funciones son:

 Mantener la fecha y hora del sistema: Leer el reloj del BIOS al arrancar y, a partir de alli, mantener la hora
del sistema tomando en cuenta los distintos horarios y políticas de cada país
 Gestión de temporizadores: necesitado por programas del usuario (agendas con avisos) y el sistema en sí
(manejador de red). Tomar el cuenta que existen pocos temporizadores, por lo que se deben manejar
adecuadamente.
 Contabilidad y estadísticas: Éstos procesos necesitan de la medición del tiempo para poder dar estadísticas
adecuadas
 Soporte de planificación de procesos: El planificador utiliza el reloj del sistema para determinar el tiempo
adecuado para otogar y quitar el procesador a cada proceso
Las funciones del reloj como para estadísticas y soporte de planificación de procesos, sólo sirven
internamente dentro del nivel de kernel. Las funciones de mantener la fecha y la gestión de
temporizadores necesitan un API especial para que puedan ser usados por los procesos.

En POSIX, la gestión de temporizadores está definida con las siguientes cinco primitivas:

Nombre Descripción

Timer_create Crea un temporizador

Timer_delete Elimina un temporizador


Timer_getoverrun Cuenta de desbordamiento

Timer_gettime Tiempo restante

Timer_settime Programa y arranca el temporizador

Tradicionalmente la planificación de procesos y estadísticas se ha realizado a través de la interrupción


periódica del reloj, o resolución del reloj (100hz-1000hz), pero en el kernel 2.6.21 de linux ya se implementa
a través de temporizadores (dynticks= dynamic ticks), lo que supone mejoras en uso del CPU para ahorro de
energía y optimización dentro de un hipervisor.

La terminal

1. Modo texto
2. Modo gráfico

La red

- Dispositivos de comunicación / de caracter


- API especial para la red (SOCKETS), debido a varios factores:

- No se puede tratar como un archivo más


- Direcciones de otras máquinas
- Protocolo de comunicación
- Timeout
- Retry

- Sockets: se basa en las siguientes funciones


- Crear socket
- Escuchar
- llamar
- Recibir
- enviar
- cortar
- Destruir un socket

Administración de procesos
Necesidad
 La sincronización de procesos creados por diferentes equipos
de programadores, está a cargo del sistema operativo
Formas de iniciar un proceso
1. El arranque del sistema.
2. La ejecución, desde un proceso, de una llamada al sistema
para creación de procesos.
3. Una petición de usuario para crear un proceso.
4. El inicio de un trabajo por lotes.
Formas de finalizar un proceso
1. Salida normal (voluntaria).
2. Salida por error (voluntaria).
3. Error fatal (involuntaria).
4. Eliminado por otro proceso (involuntaria).

Definiciones
Interbloqueo
Se dice que dos o más procesos están bloqueados, cuando
están suspendidos en espera de un evento que sólo puede ser
activado por uno de los procesos bloqueados, y por lo tanto
dicho evento nunca sucederá
Postergación indefinida o Inanición (Starving)
Se dice que uno o más procesos están en postergación
indefinida cuando la política de planificación del sistema
permite que un proceso quede en espera de un evento por un
tiempo indefinido. Esto puede suceder, por ejemplo, cuando
la asignación de recursos se realiza por prioridad. De este modo
un proceso de baja prioridad estará suspendido mientras
existan otros procesos de mayor prioridad.
Envejecimiento: aumentar la prioridad de los procesos conforme pasa el
tiempo
Clasificación de recursos
Para el estudio del interbloqueo, los recursos se pueden
clasificar en:
 Compartido/exclusivos: Se dice que un recursos es
compartido si puede ser utilizado por más de un proceso al
mismo tiempo. Son exclusivos los que pueden ser utilizados
sólo por un proceso a la vez
 Apropiativos/inapropiativos: Son apropiativos los recursos
asignados a un proceso, que pueden ser desasignados del
proceso, por al sistema para asignarlos a otro proceso.
Los recursos involucrados en los interbloqueos son los exclusivos e
inapropiativos
Condiciones necesarias para el interbloqueo
Coffman, Elphuck y Shoshani, establecieron cuatro
condiciones, necesarias y suficientes, para que se dé un
interbloqueo:
Exclusión mutua
Si dos procesos solicitan un recurso exclusivo, uno de los
dos quedará suspendido hasta que el favorecido libere el
recurso.
Contención o retención y espera
Si un proceso necesita más de un recurso para realizar su
trabajo, conservará en su poder los recursos exclusivos ya
asignados, mientras espera por otro recurso adicional.
Inapropiatividad
Los recursos asignados a un proceso, sólo pueden ser
liberados por el proceso mismo y no pueden ser
desasignados por el sistema, cuando otro proceso los
necesite.
Espera circular
Dependencia: Si un proceso P1 está suspendido en espera
de un recurso exclusivo que está asignado a otro proceso P2,
entonces decimos que P1 depende de P2 (P1 <= P2).
Espera circular: Existe una cadena circular de procesos en
espera de un recurso, si existe una cadena de dependencias
entre procesos de la forma P1 <= P2 <= P3 <= ... <= Pn <=
P1
Ejemplos:
Asignación de recursos sin ciclos
Asignación de recursos con espera circular e interbloqueados

Formas de enfrentar los interbloqueos


Existen varias políticas y estrategias que el sistema operativo
puede tomas, para tratar con los interbloqueos:
 Indiferencia:Problema del usuario y del programador,
lograr que no se dé el interbloqueo.
 Prevención:Consisten en condicionar el sistema con una
serie de restricciones a los programadores, para que no se
den al menos una de las condiciones del interbloqueo, por lo
que éste nunca sucederá.
 Evitación o predicción: Esta estrategia consiste en dejar que
las condiciones para el interbloqueo se puedan dar, pero en
el momento de asignar recursos, y se detecte
que puede ocurrir un interbloqueo, deniega la asignación del
recurso que puede desencadenar el interbloqueo.
 Detección y recuperación: En esta política, el sistema deja
que suceda el interbloqueo, pero se implementan procesos
encargados de revisar el estado de asignación de los
procesos, para detectar los interbloqueo. Una vez detectado,
se pueden implementar políticas de recuperación de
interbloqueo, que básicamente consisten en matar procesos.
Indiferencia (algoritmo del avestruz)
 Simple y eficiente, dado que el sistema operativo no gasta
procesador ni recursos en el manejo del
interbloqueo. Usualmente es la política preferida en los
sistemas actuales
 El costo esperado de un interbloqueo suele ser muy bajo
 Costo esperado = Probabilidad (desastre) * Costo (desastre)
 Sólo se deben proporcionar herramientas para revisar el
estado de los procesos
 complica el trabajo del operador
Prevención (Estrategias de Havender/Prevención estática)
Se pueden adoptar ¿4? posibles estrategias de prevención del
interbloqueo, una para cada condición. Ya que para se dé un
interbloqueo son necesarias las cuatro, con negar una de
ellas, se niega la posibilidad del interbloqueo:
Negación de la exclusividad
 Sólo se aplica a recursos compartidos, es muy difícil poder
aplicarlo a todos los recursos, dado que hay recursos que son
inherentemente de uso no compartido.
 Uso de spoolers: dar un API concurrente (compartido) a los
procesos para accesar recursos. La estrategia básica es que
un servicio del sistema (daemon) proporciona un API, y ese
servicio es el único que accesa el recurso compartido,
exclusivo. Ej: una impresa es un recurso exclusivo e
inapropiativo, pero con el uso de un spooler se convierte en
un recurso compartido.
 Test & Get: un API especial que permite revisar primero si
el recurso está disponible, y pedirlo, o retornar un código de
error que indica que no está disponible. Requiere que los
procesos hagan uso de este API.
Negación de la contención
 Estrategia 1: El proceso pide al sistema TODOS los recursos
a necesitar antes de iniciar su proceso (todo o nada). No
siempre se sabe cuántos recursos se utilizarán.
 Estrategia 2: También puede establecerse que un procesos
puede pedir recursos cuando no tiene recursos asignados
 No siempre se conoce la cantidad de recursos que se
necesitará, por lo que lo que el operador debe configurar, por
prueba y error, lograr que los procesos funcionen
adecuadamente
 Obliga a optimizar los programas por medio de división. El
programador de modularizar extremadamente bien los
procesos para utilizar los recursos por fases, de forma que
para cada fase, se piden los recursos y se liberan, antes de la
siguiente fase
 La utilización de recursos resulta muy pobre
 Puede resultar una postergación indefinida de un proceso que
requiera muchos recursos
Negación de la inapropiatividad
 Si un proceso que tiene recursos asignados, pide un nuevo
recurso que no está disponible, deberá liberar los recursos
asignados y pedirlos posteriormente.
 Sólo se aplica a recursos apropiativos y recursos que se
pueden almacenar su estado para reasignarlo, o que puedan
hacerles rollback
 puede llevar a que la ejecución de un proceso se prolongue
indefinidamente, debido a que nadie puede garantizar que
termine en un tiempo determinado.
 Pobre utilización del tiempo de procesamiento
Negación de la espera circular
 Se impone un orden a los recursos
 Cada proceso sólo puede pedir los recursos en orden
ascendente (o descendente)
Tiempo\requerimientos P1 P2 P3

t1 R1 (ok)

t2 R2 (ok)

t3 R3 (ok)

t4 R2 (*)

t5 R3 (*)
t6 R1 (*)

P1 => P2 => P3 => P1


Tiempo\requerimientos P1 P2 P3

t1 R1 (ok)

t2 R2 (ok)

t3 R1 (*)

t4 R2 (*)

t5 R3 (ok)

..

ti FINALIZA

ti DESPIERTA

Tj FINALIZA DESPIERTA

Tj+1 R3 (ok)

Tn FINALIZA

DEMOSTRACIÓN:
P0 => P1 => P2 => … => Pn => P0
Para que haya una dependencia de Pi A Pj, significa que Pi
tiene asignados recursos <= k, y está pidiendo un Rk+1, el
cual está asignado a Pj, lo que significa que Pj tiene
asignados recursos >= k+1, por lo tanto Pn ¡=> P0
En general las técnicas de prevención, aunque logran su
objetivo de eliminar los interbloqueos, provocan una pobre
utilización de los recursos, incluyendo el procesador.
También el algunos casos, provocan postergación indefinida.
Evitación o Predicción ( Estrategias de Dijkstra, Habermann)
Con la evitación no se tienen reglas estáticas a los procesos,
sino que el sistema operativo analiza cada petición de
recursos y determina si el sistema quedará en un
estado estable o inestable, en este último caso, se deniega la
petición, posponiéndola temporalmente.
Conceptos
La evitación se basa en los siguientes conceptos:
 Estado de asignación de recursos:Número de recursos
asignados, disponibles y máximo de recursos posibles por
proceso.
 Secuencia segura:Secuencia de finalización de procesos, tal
que todos los procesos puedan finalizar exitosamente,
iniciando en un determinado estado de asignación de
recursos
 Estado seguro de asignación de recursos:Estado de
asignación de recursos, donde existe al menos una secuencia
segura.
 Estado inseguro de asignación de recursos: No existe
ninguna secuencia segura. Obsérvese, que aunque un estado
inseguro no implica que exista interbloqueo, talvez una
secuencia determinada de eventos lleve a uno.
Algoritmo del banquero (Dijkstra, Habermann)
En este algoritmo, de evitación en general procede así:
 Necesita que cada proceso declare el máximo número de
recursos a utilizar
 En cada requerimiento, determina si el asignar los recursos
pedidos deja un estado inseguro de asignación de recursos,
entonces se pospone el requerimiento. De lo contrario se
asignan los recursos solicitados.
Procedimiento de asignación
Cuando un proceso solicita recursos, el sistema operativo
procede así:
1. Determinar si hay disponibles
2. Determinar que no exceda su máximo declarado
3. Determinar que, si se concede la petición, el sistema quede
en estado seguro
Si no se cumple cualquiera de estas condiciones, el proceso
queda suspendido hasta que exista una liberación de
recursos.
Estructuras de datos:
sea m el número de tipos de recursos y n el número de
procesos
int disponible [m] ; // unidades de R j disponibles
int max[n][m]; // máximo número de requerimientos del
proceso Pi del recurso Rj
int asignado [n][m]; // asignación actual del proceso P i del
recurso Rj
int necesario [n][m]; // necesario [i][j] = max [i][j] -
asignados[i][j]
int requerimiento[m]; // vector de requerimiento de cada
petición de recursos
Relación <= entre vectores
si x in N m , y in N m : x <= y ssi para todo i = 0,...,m-1 :
x[i] <= y[i]
Por ejemplo:
<1,1,1> <= <2,5,7>
<1,1,1> NO <= <2,0,7>
Algoritmo
void requerimiento_de_recursos (int requerimiento[],
idProceso i) {
if (requerimiento >= necesario[i] )
error () ; // máximo de recursos estimados agotados
i f (requerimiento >= disponible)
suspender () ; // recursos no disponibles
disponible -= requerimiento;
asignado [i] += requerimiento;
necesario[i] -= requerimiento;
if (! estado_seguro ()) {
// regresamos al estado anterior
disponible += requerimiento;
asignado[i] -= requerimiento;
necesario[i] += requerimiento;
suspender () ;
}
}
int estado_seguro() {
int disp_temp = disponible;
bool terminado[n] = (FALSE,...,FALSE);
int i;
// encontrar un p[i] tal que terminado[i] = FALSE y
necesario[i] <= disponible
while (terminado!=(TRUE,...TRUE)){
for (i=0; (i < n && terminado[i]) || necesario[i] >
disp_temp); i++) {
if (i == n-1) {
return FALSE;
}else
if (!terminado[i]){
disp_temp += asignados[i] ;
terminado[i] = TRUE;
} //if
} //for
} // while
return TRUE ;
}//estado_seguro
Ejemplo
proceso\recurso R1 (7) R2(7) R3(7)

P1 5 3 1

P2 3 2 3
Maximos
P3 2 3 1

P4 5 0 3

P1 3 3 1

P2 2 2 2
Asignados
P3 0 1 1

P4 0 0 1

P1 2 0 0

P2 1 0 1
Necesarios
P3 2 2 0

P4 5 0 2

Disponibles 2 1 2

Sobre este estado de asignación de recursos (qué es estable


¿?) supongamos las siguiente peticiones de recursos:
 P2[1,0,1]:El sistema queda en un estado seguro
 P3[2,0,0]:El sistema queda en un estado inseguro
Desventajas
 necesita el conocimiento del máximo por recurso que usará
cada proceso
 implica un retardo en cada asignación de recursos, lo que
puede degradar el sistema si se manejan muchos recursos y/o
procesos
 Se requiere una garantía de devolución: c/proceso liberará
los recursos asignados. (suponga que después de hacer la
primera asignación de recursos, el proceso P2 no termina,
entonces ninguno de los procesos podría terminar, sin
necesidad de que haya interbloqueo.
Detección y recuperación
 El sistema no impone ninguna clase de reglas para prevenir o
evitar el interbloqueo
 Se puede tener un proceso de fondo o de activación manual
que analice las estructuras del sistema operativo y determine
si existe o no un interbloqueo.
 Una vez detectado el interbloqueo se procede a la
recuperación, que puede ser automática o manual.
Básicamente consiste en matar un proceso
Podría utilizar si no es muy costoso que haya un interbloqueo (el costo es menor
que el costo de implementar una de las otras políticas de interbloqueo.

Normalmente sería utilizado como herramienta de diagnóstico y recuperación


Detección por reducción de grafos de asignación
Detección por ciclos de espera
La técnica más sencilla para detectar un interbloqueo es
deducir un grafo dirigido de dependencias entre proceso por
medio de las colas de espera en cada recurso y determinar si
existen un ciclo en dicho proceso.
Por ejemplo, en la siguiente gráfica, al lado izquierdo, se
tiene un grafo del estado actual de asignación de recursos y a
la derecha vemos el grafo de espera entre procesos. Como se
puede apreciar, existe un ciclo en en grafo de espera, por lo
tanto existe un interbloqueo.

Condiciones necesarias para la detección


1. Conocer los procesos: acceso al PCB
2. Conocer los recursos: acceso a la tabla de recursos del
sistema
3. Conocer la asignación: debemos poder saber qué
recursos está asignado a cada proceso
4. Conocer la espera: debemos poder saber en que
recursos está esperando (suspendido) un proceso
Recuperación
Una vez que se detecta un interbloqueo, corresponde la
decisión sobre la recuperación del sistema sobre ese
interbloqueo, que básicamente se trata de matar un proceso y
recuperar sus recursos.
Esta recuperación puede ser manual o automática. La
recuperación automática es un tema difícil, ya que no se
pueden establecer, fácilmente, condiciones determinísticas
para saber cuál es el proceso más adecuado de eliminar.
Existen algunas posibilidades:
 El proceso con más recursos: se libera la mayor cantidad
cantidad de recursos, lo que permite continuar a la mayor
cantidad de procesos. Se deshace el "nudo" principal. Sin
embargo tiene la desventaja que normalmente será el proceso
más importante, lo que implica el mayor daño, o el mayor
tiempo de repetición.
 El proceso con menos recursos: se busca el menor daño, pero puede
ser que pocos procesos puedan continuar.
 El proceso que esté involucrado en más ciclos o
interbloqueos: se deshace el mayor número de
interbloqueos.
Sin embargo, hay que tomar en cuenta un criterio
subjetivo: la importancia del proceso, lo cual no está dado ni
por la cantidad de recursos que tiene asignados el proceso ni
el número de interbloqueos en que está involucrado. Lo cuál
hace de la recuperación manual, una forma muy
recomendable, siempre y cuando se cuente con un operador
entrenado en el funcionamiento de los procesos del usuario.
Herramientas para el interbloqueo en los sistemas operativos
existentes
SOLARIS
Utiliza la herramienta CAT (Crash Analysis Tool), que es parte del entorno del
sistema, y ayuda a analizar los archivos centrales del sistema. Esta herramienta
consiste en analizar la salida del desplome o error que se dio. Esta herramienta
genera archivos de salida en los cuales se describen las causas que provocaron
este estado en el sistema.
LINUX
Utiliza las siguientes herramientas:
GDB: Es una herramienta de rastreo y debugeo del kernel,
con la información obtenida en un error en el sistema.
INGO: Es un “perro guardián” que sirve para detectar y
reportar los interbloqueos.
SYSREQ: Permite observar las tareas, procesos y registros
dentro del kernel en caso de fallo.
KDB: Es un debugeador del kernel en línea de comando que
sirve para inspeccionar el estado de los procesos.
WINDOWS
Utiliza las siguientes herramientas:
WINDBG:
DBGMON:
I386KD: Es utilizado para cargar el archivo
MEMORY.DMP, el que fue generado por una computadora
con WINDOWS NT. Este archivo contiene información que
puede ser observada para verificar la integridad del sistema.
KD:
En general, la mayoría de herramientas sirven para observar
el estado del sistema, ya sea por el kernel o por archivos
generados conteniendo la información, y así poder saber el
estado del sistema y que situaciones, procesos y recursos se
encuentran involucrados en llevar al sistema a su estado
actual.
Verifier.exe:a partir de WinXp, detecta interbloqueos en
drivers
En Windows® XP La detección se presentó por medio del
control orientado a excepciones, que permite interceptar la
cadena de control de excepciones con propósitos de registro
y diagnóstico. En Windows Vista™ Windows Vista tiene
una nueva API muy interesante denominada Cruce
encadenado con esperas (WCT). API Cruce permite
determinar cuándo y por qué se produce interbloqueo en un
proceso. WCT notifica exactamente en qué objeto de
sincronización se encuentra el interbloqueo. Pero esta sólo
notifica un conjunto limitado de primitivas de
sincronización. Aun con esta limitante, resulta una API muy
útil y que deseará tener en su kit de herramientas de
depuración. API de WCT Uso y sus limitaciones Uso
examina si un subproceso se encuentra en espera en una
llamada de bloqueo. Si el subproceso se encuentra en una
llamada de bloqueo, busca el objeto que el subproceso
bloquea y determina, si es apropiado, el nombre del objeto y
qué subprocesos o procesos poseen ese objeto. Por ejemplo,
si el subproceso A espera que el proceso B complete la
ejecución y el proceso B invoca SendMessage para el
proceso A, existe un interbloqueo que WCT puede detectar y
notificar. Limitaciones El único problema que observo con la
API de WCT es que no notifica interbloqueos cuando se usa
WaitForMultipleObjects, lo que reduce su utilidad en
muchas aplicaciones. Por ejemplo, la sincronización .NET
usa WaitForMultipleObjects para toda la coordinación de
sincronizaciones. Aunque WCT no notificará que se produjo
un interbloqueo en el subproceso, notificará que el
subproceso está bloqueado. Lla API de WCT puede notificar
los periodos de espera, por lo que se puede decidir
manualmente si se produjo interbloqueo en un subproceso
específico, a través de la inspección y comparación con una
herramienta como LockWatcher (parte de la descarga de
código de este artículo). WCT es una API típica de Win32®,
lo cual significa que tiene que obtener un identificador
opaco, pasar ese identificador al método que registra los
datos y llamar a un formulario de CloseHandle cuando
finalice. La documentación del SDK de la plataforma
muestra todo lo que se necesita para inicializar y usar la API
de WCT. En la inicialización, siempre deberá llamar a la
función RegisterWaitChainCOMCallback para registrar las
funciones COM CoGetCallState y CoGetActivationState
para que WCT pueda notificar al propietario COM. Dado
que estas funciones no están documentadas, necesitará
obtenerlas de ole32.dll a través de GetProcAddress. Para
inicializar WCT, se debe usar la funcion
OpenThreadWaitChainSession exportada de advapi32.dll:

Sistemas de archivo
 Es de lo primero que se percibe y lo más útil para el usuario:
persistencia de datos
 Independencia del dispositivo: accesar todos los archivos de
la misma forma independientemente del dispositivo donde
estén almacenados
Organización del disco
Master Boot Record
- CHS = 0-0-0 del disco 0
- Históricamente era en el MBR dónde se cargaba el sistema
operativo
- Actualmente el MBR contiene un programa para cargar el
sistema operativo (loader)
- tabla de particiones (últimos 64 bytes)
- normalmente el loader lee la tabla de particiones y procede
a cargar el sistema operativo
- ejemplos de loaders: NTLDR, Lilo, Grub
Particiones
- separaciones lógicas de grupos contiguos de cilindros
- Históricamente si hizo por que algunos BIOS no eran capaces de manejar cierto
de cilindros
- la utilización principal es la tolerancia a fallos: es decir si falla una parte del
disco, no se pierde toda la información, sino sólo de la partición afectada
Particiones swap
- para manejo de memoria virtual
- el swap se puede manejar de dos formas:
 Una partición especial
o Ventaja: Es más eficiente, por que el file system de swap es
muy simple: básicamente un bitmap (o tabla de control) de
páginas y las páginas
o Desventaja: limitado en espacio
 Un archivo dentro de un file system
o Ventaja: puede crecer dinámicamente
o Desventajas:
 Si crece demasiado, puede producir hiperpaginación
 Al estar dentro de un filesystem, el acceso es más complejo
 Al crecer se puede producir fragmentación
Organización de archivos y directorios
FAT / FAT32

LONG FILE NAMES:


FAT12
 Direcciones de clusters de 12 bits
 Diseñado para disquetes
 Limitado a 32Mb
 Usado en DOS 2.0
FAT16
 Aumenta las direcciones de los clusters a 16 bits
 Sigue limitado a 32Mb, pero permite disminuir el tamaño de
los clusters
FAT32
Ext2

ESTRUCTURA DEL SUPERBLOQUE


s_inodes_count _u32 Número total de inodos del sistema de ficheros.

s_blocks_count _u32 Número total de bloques del sistema de ficheros.

s_r_blocks_count _u32 Número de bloques reservados para el administrador.

s_free_blocks_count _u32 Número total de bloques libres.

s_free_inodes_count _u32 Número total de inodos libres.

s_first_data_block _u32 Primer bloque de datos.

s_log_block_size _u32 Utilizado para calcular el tamaño del bloque lógico.

s_log_frag_size _u32 Utilizado para calcular el tamaño del fragmento.

s_blocks_per_group _u32 Número de bloques incluidos en un grupo.

s_frags_per_group _u32 Número de fragmentos incluidos en un grupo.

s_inodes_per_group _u32 Número de inodos contenidos en un grupo.

s_mtime _u32 Determina cuándo se realizó el último montaje de este sistema de ficheros.

s_wtime _u32 Determina cuándo se realizó la última escritura del superbloque.

Número de veces que se ha montado el sistema de ficheros en modo lectura-escritura


s_mnt_count _u16
sin haberse realizado una comprobación del mismo.

Máximo valor que puede tomar s_mnt_count. Llegado a este tope se obliga a la
s_max_mnt_count _u16
comprobación del sistema de ficheros.

s_magic _u16 Número "mágico" que identifica al sistema de ficheros (para Ext2 vale 0xEF53).

s_state _u16 Estado del sistema de ficheros.

s_errors _u16 Comportamiento ante errores.

s_minor_rev_level _u16 Nivel de revisión menor.


s_lastcheck _u32 Hora del último chequeo.

s_checkinterval _u32 Tiempo máximo entre chequeos.

s_creator_os _u32 Sistema operativo creador del sistema de ficheros.

s_rev_level _u32 Nivel de revisión.

s_dev_resuid _u16 uid por defecto para bloques reservados.

s_dev_resgid _u16 gid por defecto para bloques reservados.

s_first_ino _u32 Primer inodo no reservado.

s_inode_size _u16 Tamaño de la estructura de inodos.

s_block_group_nr _u16 Número de grupo de bloques de este superbloque.

s_feature_compat _u32 Conjunto de características compat.

s_feature_incompat _u32 Conjunto de características incompat.

s_feature_ro_compat _u32 Características compat. sólo lectura.

s_uuid[16] _u8 uuid de 128 bits para volumen.

s_volume_name[16] char Nombre del volumen.

s_last_mounted[64] char Directorio del último montaje.

s_algorithm_usage_bitmap _u32 Para compresión.

s_prealloc_blocks _u8 Número de bloques a intentar preasignar.

s_prealloc_dir_blocks _u8 Número a preasignar para directorios.

s_padding1 _u16 No documentada.

s_reserved[204] _u32 Relleno hasta el final del bloque.

DESCRIPTORES DE GRUPO
bg_block_bitmap _u32 Puntero al bloque que contiene el mapa de bits de los bloques de datos del grupo
bg_inode_bitmap _u32 Puntero al bloque de datos que contiene el mapa de bits de los inodos del grupo.
bg_inode_table _u32 Puntero al primer bloque de la tabla de inodos.
bg_free_block_count _u16 Número de bloques de datos libres en el grupo.
bg_free_inode_count _u16 Número de inodos libres en el grupo.
bg_used_dirs_count _u16 Número de inodos asociados a directorios en el grupo.
bg_pad _u16 No documentada.
bg_reserved[3] _u32 Supuestamente reservados para uso futuro.

I-NODES
i_mode _u16 Determina el tipo de fichero (ordinario, directorio, tubería, etc.) y derechos de acceso en modo
i_uid _u16 Identificador del usuario propietario del fichero.
i_size _u32 Tamaño del fichero en bytes.
i_atime _u32 Última vez en que el fichero fue accedido.
i_ctime _u32 Última vez en que se modificó el contenido de su inodo.
i_mtime _u32 Última vez en que se modificó el contenido del fichero.
i_dtime _u32 Hora de borrado.
i_gid _u16 Identificador del grupo al que pertenece el propietario del fichero.
i_links_count _u16 Número de enlaces duros a este fichero.
i_blocks _u32 Número de bloques que comprende el fichero correspondiente al inodo.
Contiene información miscelánea, por ejemplo si los datos del fichero están comprimidos o si
i_flags _u32
sustituyendo la información de los bloques físicos por datos aleatorios.
osd1 96 bits Dependiente del sistema operativo 1.
i_block[EXT2_N_BLOCKS] _u32 Matriz de punteros a los bloques de datos.
i_version _u32 Versión del archivo (para NFS).
i_file_acl _u32 ACL del archivo.
i_dir_acl _u32 ACL del directorio.
i_faddr _u32 Dirección del fragmento.
osd2 224 bits Dependiente del sistema operativo 2.
 Ext3
 Journal:
o Complejidad de una operación atómica en el sistema de
archivos
o Escritura y escritura contínua (no fragmentada)
o Recuperación rápida
o Consideraciones de escritura (manejo como un cache)
 NTFS
 Master File Table
o Descriptor por archivo 4K
o 1.5 K de datos
o Atributos adicionales
o Listado de bloques
o Descriptores adicionales
 Descriptores especiales
o Copia de la MFT
o Archivo de errores
o Manejo de journal
 Interfaz del sistema de archivos
 Tipos de archivos
 El SO debe facilitar el manejo de archivos. El sistema debe asociar acciones o
aplicaciones a cada archivo, dependiendo del tipo de archivo.
En un GUI, un doble click, significa diferente acción, para diferentes tipos de
archivos. Lo mismo para un click derecho.
Distinción del tipo de archivo:
 Extensiones: asociación fácil para el SO y para el
usuario. Es vulnerable a la decisión del usuario.
 Firmas: Todo tipo de archivo, tiene un inicio conocido,
lo cual lo identifica, y es conocido como la firma del tipo de
archivo. Da más seguridad al SO sobre el tipo de archivo
y lo asociará a la aplicación adecuada., por lo que el usuario
no tiene que preocuparse de las extensiones.
 El uso de las extensiones se ha popularizado por la facilidad al usuario.
KDE sigue una estrategia híbrida, primero basado en la extensión, ya que es más
rápido, pero en background, revisa las firmas de los archivo y hace las
correcciones a la presentación
 Contenido
 Archivos Mac: área de datos, área de recursos: internacionalización
 Organización de los directorios
 por nivel: uno y dos niveles

 árbol

 grafo acíclico

 Grafo cíclico

Compartición
 Semántica de consistencia:
o unix:
 Todos los cambios son visibles por todos los usuarios al
mismo tiempo
o sesiones
 Para cada sesión se crea una copia del archivo y se
reemplaza cuando el archivo es cerrado.
 Distintos de apertura de los archivos: read only, read/write,
output combinado con modos de compartición: SHARE
WRITE, SHARE NONE, SHARE READ
o Cache
 Permite hacer locks sobre regiones de archivos, de esta
forma cada sesión/usuario, modifica una parte del archivo,
sin importar lo que los otros usuarios usen o modifiquen
 Oportunistic lock
o
Arquitectura de sistemas de archivos
Virtual File System

Control de accesos
 Win NT: ACL
 linux: bits
 Netware: NDS
 Win2k: Active Directory

También podría gustarte