Ir al contenido

Notas sobre Sistemas Operativos/Conceptos de Sistemas Operativos

De Wikilibros, la colección de libros de texto de contenido libre.

Grado de desarrollo: 75% (a fecha de 6 mar 2008)

Repaso de Conceptos de Hardware

[editar]

Archivo: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

CPU

[editar]
  • Instrucciones propias para cada CPU. Las instruccioles se traen de la memoria RAM y se ejecutan. Optimicaciones frecuentes:
  • 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

[editar]
   Dispositivo <-> 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

[editar]

Definiciones

[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

[editar]
 while (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)