Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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:
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:
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.
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)
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.
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
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).
Otras mejoras
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.
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.
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.
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.
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
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
La terminal
1. Modo texto
2. Modo gráfico
La red
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
t1 R1 (ok)
t2 R2 (ok)
t3 R3 (ok)
t4 R2 (*)
t5 R3 (*)
t6 R1 (*)
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
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
s_mtime _u32 Determina cuándo se realizó el último montaje de este sistema de ficheros.
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).
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