Notas sobre Sistemas Operativos/Conceptos de Sistemas Operativos
Repaso de Conceptos de Hardware
editarArchivo:ArquitecturaComputadora.gif
- Componentes:
- CPU
- Memoria
- Dispositivos de E/S.
- Comunicados por el BUS del sistema: Conjunto de conectores (16, 32, 64...) divididos en datos, dirección, control y alimentación.
- Algunos tipos de Acceso a Dipositivos
- Blocking
- Non-Blocking
- Polling
- Interrupciones
- w:en:Direct_Memory_Access
CPU
editar- Instrucciones propias para cada CPU. Las instruccioles se traen de la memoria RAM y se ejecutan. Optimicaciones frecuentes:
- Pipeline
- w:en:Superescalar
- Todos los CPUs tiene registros: espacios de memoria internos, de tiempo de acceso menor a un ciclo de CPU. (Ej. 32 registros de 32bits).
- Las instrucciones pueden operar sobre los registros o direcciones de memorias.
- Algunos registros especiales: IP, SP, PSW (FLAGS).
- Dos modos de operación:
- Kernel: Acceso a todas las instrucción y al hardware
- Usuario: No se perminen ciertas instrucciones de E/S, Restricciones de uso de memoria.
- El modo se determina con un bit en algún registro de control de CPU. En modo Usuario no se puede modificar este bit.
- Para hacer un operación restrigida determinada (ej. E/S) los programas de usuario tiene que recurrir a alguna de las Llamada al Sistemas (System calls) definidas por el SO. De esta manera, el CPU pasa a modo kernel, ejecuta la rutina correspondiente (que es parte del SO) y luego vuelve a modo usuario y a la ejecución del proceso.
- Un mecanismo similar es utilizado cuando el dispositivo de hardware requiere atención del CPU (interrupción) ó cuando el CPU mismo genera una excepción (ej. División por cero, error de protección). En este caso, el SO decide que hacer y cómo informar al proceso que esta usando el dispositivo o que generó la excepción. Un método de comunicación en este caso son las señales.
- Protección de CPU: Se ajusta una interrupcción periódica para que interrumpa el CPU. El handler de la interrución correspondiente llama al scheduler. El intervalo de tiempo de la interrupción se llama 'time slice'.
Memoria
editar- Lo ideal sería una memoria extremadamente rápida (CPU Hz), abundante y barata -> como no es posible se utiliza un modelo de capas.
- Capas según menor velocidad de acceso y mayor capacidad: (valores típicos)
- Registros (1nseg, 1<KB) *
- Cache (pueden ser varios niveles) (2nseg,L1: 8Kb, L2: 512Kb) *
- Principal (RAM) (10nseg, 1Gb) *
- Disco (10mseg, 50Gb)
- Cinta (100seg, 100Gb)
Volatiles
editar- Cache hits and misses. Consitencia (también en cachés de software).
- Otras: EEPROM y CMOS.
- Memoria Principal: Se cargan multiples programas a la vez en memoria, hay dos problemas:
- Protección entre los programas y el kernel; y entre los programas en sí.
- Relocación
- Estos problemas se resuelven a nivel hardware.
- Protección y Relocación: Registros base y límite. Puede haber varios conjuntos de registros base y límite.
- Definiciones
- Dirección virtual
- Dirección física.
- MMU: Memory Management Unit.
- Problemas de performace: Cambios de Contexto <-> Cache y Ajuste de los registros de la MMU.
Dispositivos E/S
editarDispositivo <-> Controlador <-> Driver (harware) (hardware) (software)
- Ejemplo: El Driver pide al controlador de disco que lea el sector 9234 de disco 2 -> luego el controlador decodifica 9234 al C/S/H según el dísco instalado, mueve los cabezales del disco, espera, leer el sector en una memoria interna, y genera una interrupción. Podría también haber escrito la memoria principal antes de general la interrupción en caso que el controlador esté usando DMA.
- Los controlados se maneja por registros internos, en algunas arquitecturas están mapeados en memoria y se acceden con instrucciones normales y en otras se utilizan intrucciones especiales (IN y OUT).
- Protección.
- El driver es parte del kernel porque ejecuta funciones de E/S. Problema: Hay muchos dispositivos -> muchos drivers -> kernel gigante. La solución es leer los drivers dinámicamente, en mayor o menor grado.
- Busy waiting (Sincrónico): syscall (Programa usuario) -> Kernel -> driver -> controlador [espera]. Cuando la info esta disponible, vuelve por mismo camino.
- Interrupcion (Asincrónico): syscall (Programa usuario) -> Kernel -> driver -> controlador [programa interrupción para cuando termine]. Luego el SO puede bloquear o no el programa, pero el CPU hace otras cosas, hasta que el controlador genera la interrupción y una rutina handler en el sistema operativo recibe la interrupción y decide que hacer con ella (e.j. continuar el programa). Listas de espera para cada dispositivo. Bottom Halves.
- Interrupciones: Prioridades, STI/CTI.
- DMA
Conceptos de Sistemas Operativos
editarDefiniciones
editar- Deadlocks (Abrazos mortales): Cuando dos o mas procesos se están esperando mutuamente, en una situación sin salida.Ejemplos.
- Memory Management (Manejo de Memoria): Estrategia de determinado SO para el uso de memoria. Los problemas a resolver son Protección y Mapeo de programas. Ej. Memoria Virtual.
- Shell: El shell es un programa de usuario, que recive comandos del usuario. No es parte del sistema operativo, pero esta intimamente relacionado con este. En sus funciones están: Crear procesos y archivos, mover/copiar/borrar archivos, obtener información del sistema, etc. Los procesos hijos del shell heredan 3 descriptores de archivos: stdin, stdout, stderr. Este por defecto se encuentran direccionados a la consola en la que el shell se está ejecutando.
- Procesos -> Programa en ejecución
- Cada processo contiene, entre otros:
- Mapeo en memoria: Dónde esta almacenado el .text, .data y el stack del proceso.
- El estado de registros
- Tabla de archivos en uso -> Estado de cada archivo
- Credenciales (UID,GID, EUID, GUID)
- Otros (PID, PPID, contadores, estados, prioridades, cwd ...)
- Existe una tabla de procesos, donde cada registro contiene la información anterior. La tabla es en general un estructura linkeada y una hash-table con índice por PID. [ps auxwww]
- Los procesos pueden crear nuevos procesos, y heredar algunos atributos de su padre. De esta [pstree]
- El SO provee medios de comunicación entre procesos.
- El proceso se comunica con el SO mediante las Llamadas al sistema (syscalls), para, por ejemplo:
- Abrir un archivo
- Alocar memoria
- Crear un nuevo archivo
- Sobreescribir su .text
- Otro medio de comunicación son las señales. (Análogas a las interrupciones, pero a nivel software).
- Un programa puede mandar señales a otros programas, el SO puede mandar señales al programa. Los programas pueden definir handlers para las señales enmascarables ó utilizar los handlers por defecto dados por el SO. Algunas señales (como SIGSTOP ó SIGKILL) no son enmascarables, es decir, el handler provisto por el SO no puede ser reemplazado.
- Algunas excepciones y interrupciones manejadas por el SO son 'traducidas' a señalales para los procesos.
- Superusuario -> números de UID especiales.
- Diferencia Proceso <-> Programa.
Archivos
editar- El concepto de archivos y directorios se encuentra en prácticamente todos los sistemas operativos.
- Sistema jerárquico. Cada archivo ser identifica con su directorio y nombre.
- Existe un directorio 'root', padre de todos los directorios. Las referencia a archivos pueden ser absolutas (referidas desde el directorio root) ó relativos (referidas al directorio actual: cwd).
- Permisos y seguridad.
- UNIX: montaje de sistemas de archivos, pipes, archivos especiales (de dispositivos).
System Calls, Syscalls (Llamadas al Sistemas)
editar- Rutinas de servicios prestados del SO a los programas.
- Las rutinas que reciben las llamadas al sistema funcionan en modo kernel.
- El programa no ejecuta directamente la llamada al sistema (aunque podría), sino que llama a la biblioteca de funciones estándar de C,,y esta realiza la llamada.
- Ejemplo read (fd, *buffer, nbytes).
- El método de llamadas al sistema requiere soporte de hardware: un programa de usuario está pasando el CPU a modo kernel. Similar a una interrupción de software.
- POSIX define unas 100 syscalls, tipos:
- Manejo de procesos (crear, esperar, leer, terminar procesos)
- Manejo de archivos (abrir, cerrar, leer, escribir, información)
- Manejo de directorio (crear, morrar, mover directorios, definir links, borrar links, montar/desmontar sistemas de archivos)
- Otros (credenciales de archivos, mandar señales, sleep)
- Win32: No hay arból de procesos
- UNIX: ~100 syscalls <-> ~100 libc procedures
- Win32: >1000 procedures <-> ? syscalls. (muchas llamadas al GUI). no hay señales, links, seguridad, y montaje de sistema de archivos.
- Win32: La llamadas dependen de la versión de win. A partir de W2K, hay syscalls de seguridad, y links.
Ejemplo fork, shell
editarwhile (1) { read_command (command, params); child_pid = fork(); if ( child_pid != 0 ) { // Padre waitpid (-1,&status, 0); } else { // Hijo execve (command, parametres, 0); } }
Estructuras de Sistemas Operativos
editar- Monolíticos: Todo el SO linkado junto. Cualquier rutina puede llamar a cualquiera. No hay protección entre rutinas.
- Por capas: MULTICS. Grados de jerarquía dentro del kernel, las rutinas de menor jerarquía llaman a las de mayor con un mecanismo similar a una syscall. Protección de memoria entre capas. Las capas tiene acceso a diferentes recursos.
- Máquinas Virtuales: VM/370. Un monitor central corre varios programas que simulan una máquina virtual (simulador de hardware: mode kernel/user, interrupciones, etc). Cara una de ellas corre un sistema operativo. Java.
- Cliente-Servidor: Microkernels. Separa el sistema operatiovo en módulos: Sistema de Archivos, Memoria, Procesos, etc. El kernel sólo se dedica a pasar mensajes entre los módulos. La mayoría de los módulos en user-mode.
Referencias
editar- Esta clase está basada en "Modern Operating Systems", Sencond Edition, Andrew S. Tanenbaum (Capitulo 1) y "Operating Systems Concepts", Silberschatz & Galvin, ( Capitulos 2 y 3)