miércoles, 15 de febrero de 2012

Diagrama de los posibles estados que tiene un proceso

Para representar un proceso debemos recoger toda la información que nos de el estado de ejecución de un programa: el código y datos del programa, una pila de ejecución, el PC indicando la próxima instrucción, los valores actuales del conjunto de registros de la CPU, un conjunto de recursos del sistema (memoria, archivos abiertos, etc.).
Varios procesos pueden ejecutar incluso el mismo programa (p.ej. un editor) pero cada uno uno tiene su propia representación.
Cada proceso está en un estado de ejecución que caracteriza lo que hace y determina las acciones que se pueden sobre él.
Preparado - en espera de la CPU.
Ejecutándose - ejecutando instrucciones.
Bloqueado - esperando por un suceso.
Conforme un programa se ejecuta, pasa de un estado a otro.





A su vez el proceso (o partes del espacio de memoria virtual del proceso) puede estar cargado en memoria o "swapped" a disco.

Además de estos estados básicos un proceso puede estar detenido (stopped). En este caso se le prohibe ejecutar al proceso. Hay mecanismos para detener y rearrancar un proceso a través de las señales STOP y CONT que veremos más adelante.
El estado stopped es el estado en que queda un proceso lanzado a correr desde un interprete de comandos (shell) cuando se presiona o la tecla configurada como "suspend" en el terminal que estemos utilizando.
Finalmente el otro estado en que a menudo un administrador encuentra a un proceso es el estado zombie o exiting. Un proceso en este estado está en proceso de terminación. Este caso se discute más en detalle en el apartado "Ciclo de vida de un proceso".

Historia de los SO

En esta entrada se ofrecerá una visión general a lo largo de la historia de los distintos tipos de SO asociados a sus respectivos tipos de máquina. 

  • Primeros sistemas
  • Sistemas por lotes
  • Mejoras en la gestión de la E/S.
  • Sistemas por lote multiprogramados. 
  • Sistemas de tiempo compartido. 
  • Ordenadores personales. 
  • Sistemas paralelos:multiprocesadores. 
  • Sistemas distribuidos. 
  • Sistemas de tiempo real. 
Primeros Sistemas
Se caracterizan por:
  • Gran tamaño
  • Apenas soporte lógico (tableros enchufables, tarjetas perforadas....). 
  • Necesidad de ser un usuario experto para manejarlo.
  • Un solo usuario en cada momento (lista de reserva para poder utilizarlo). 
 El modo de trabajo hacía que la máquina estuviera parada mucho tiempo y el equipo era muy caro.

Sistemas por lotes
Su objetivo sacar más provecho a la máquina gracias a una mejor organización del trabajo. Los operadores agrupaban los trabajos por lotes, que eran trabajos con necesidades similares y que eran ejecutados en la computadora como un grupo de tareas. A medida que la computadora quedaba libre, se ejecutaba un lote. 

Aparece el operador especialista, donde el programador no manipula directamente el equipo, sino que entrega su trabajo (job) al primero y éste somete la tarea al sistema y entrega los resultados al programador, el cual corrige sus errores mientras el operador sigue ejecutando otras tareas. Como resultado de este proceso, hubo un aumento considerable de la productividad.  

Las tareas se agrupaban en lotes que se procesaban de manera automática. El operador se encargaba de preparar lotes con trabajos que requieran una misma operación y se ejecutaban sin más intervención. 

Fue en esta etapa cuando se pensó que podría ser mejor dar las órdenes directamente al computador y no a un operador. Así nació el primer SO. 
Para ello era necesario que el computador tuviera un pequeño monitor residente (controlador) para realizar acciones de manera automática distinguiendo tarjetas de instrucciones de programas de usuarios y tarjetas de control. 

¿Qué elementos tenía un Sistema por Lotes? 
  • Lenguaje de control de tareas (JLC, job control language)
  • Monitor residente 
    • Programa fijo en memoria con rutina imprescindible para que el sistema por lotes funcione: intérprete del JLC, cargador de programas, rutinas de E/S... 
    • automatiza tareas del antiguo operador. 
    • Es el primer sistema operativo auténtico.
Primeros problemas
La E/S era muy lenta en comparación con la CPU. Ello provocaba que ésta quedara ociosa mucho tiempo esperando la finalización de operaciones de E/S. Para tratar el problema se usaron algunas técnicas:
  • Operación fuera de línea (offline): 
El computador central dialoga directamente sólo con dispositivos rápidos (cintas magnéticas). Un pequeño computador (satélite o canal) se encarga de las transferencias con dispositivos lentos (tarjetas, impresora). Como resultado hubo un mejor aprovechamiento del procesador central y una ejecución paralela de cálculos y operaciones de E/S. Se comprobó que se pudo aumentar la velocidad utilizando varios satélites. 
Para trabajar con offline no hacía falta recompilar los programas antiguos. Los trabajos seguían usando los mismos servicios para la E/S, lo que cambiaba era su implementación en el SO: Independencia del dispositivo.
  • Uso de búferes. 
La operación de E/S se realiza sólo cuando el dispositivo está preparado. 
El uso de búferes no resuelve totalmente el problema de la lentitud de los equipos E/S. Su eficacia depende fundamentalmente de la velocidad de los equipos de E/S y del tipo de tareas en ejecucción. 
  • Spooling. (Simultaneous Peripheral Operation On-line)
Se utiliza el disco como un enorme búfer. El proceso lee/escribe sobre el disco en lugar del dipositivo E/S. 
Mientras se ejecuta un trabajo, el SO lee los datos del siguiente trabajo de la cinta/tarjetas del disco e imprime la salida del anterior trabajo del disco a la impresora. 
Permite solapar la E/S de un proceso ya terminado con las operaciones en CPU de otro proceso.


Multiprogramación. 
El modo de operación offline y el spoolig aumentan el rendimiento de la CPU pero tienen sus limitaciones. En algún momento, la CPU queda ociosa esperando por alguna operación de E/S.

En multiprogramación, la CPU y la E/S trabajan a la misma vez por lo que se terminan más trabajos en menos tiempo.


Tiempo compartido
Soportan el uso “interactivo” del sistema: Cada usuario tiene la ilusión de disponer de la máquina completa. debido a la optimización del tiempo de respuesta.
Se basa en asignar fracciones de tiempo - se reparte el tiempo de CPU de forma equitativa entre los procesos. 
Permite la participación activa de los usuarios en la edición, depuración de programas, y ejecución de los procesos.

Ordenadores personales. 
La aparición de microprocesador permitió fabricar computadores baratos, asequibles par el consumo de masas alrededor de los años 80. Se le dió mucha importancia a la facilidad de uso aunque tenían bajos tiempos de respuestas. Se usaban tecnología de los grandes SO pero prescindían de ciertos servicios (protección, multiprogramación, etc...). 

Sistemas paralelos-multiprocesadores. 
Son sistemas con más de un procesador. Pueden ejecutar varias instrucciones simultáneamente en paralelo. Son sistemas estrechamente acoplados puesto que los procesadores comparten una memoria común. 

Ventajas: Aumento de la velocidad de procesamiento con bajo coste y cierta tolerancia a fallos. 

Inconvenientes: Necesidad de sincronización entre procesos.

Sistemas distribuidos. 
Múltiples procesadores conectados mediante una red.
Sistemas debilmente acoplados: los procesadores no comparten memoria ni reloj.

Ventajas:
  • Compartición de recursos dispersos. 
  • Ayuda al trabajo cooperativo de equipos humanos. 
  • Aumento de la velocidad. 
  • Fiabilidad (tolerancia a fallos, alta disponibilidad). 
Inconvenientes
  • No comparten memoria: la comunicación es más compleja y no se puede tener un estado global visible por todos los nodos al instante. 
  • red de comunicación no fiable. 
  • heterogeneidad de los nodos. 

Sistemas de tiempo real.
Para poder ejecutar satisfactoriamente tareas que han de completarse en un plazo prefijado (ej. sistemas de control industrial, sistemas multimedia).
Dos tipo:
  • s.t.r crítico: para tareas que siempre deben cumplir los plazos de terminación. Adecuados para la industria. Muy simples, incompatible con tiempo compartido, memoria virtual, etc. 
  • s.t.r. no crítico: intentan cumplir los plazos, pero no los garantizarán al 100%. Adecuados para multimedia, etc. 

martes, 14 de febrero de 2012

Partes de un Sistema Informático.

¿De qué elementos se compone un Sistema Informático?

Un Sistema Informático es un conjunto de partes que se relacionan entre sí. 
  • Hardware: la parte tangible. El hardware incluye computadoras o cualquier tipo de dispositivo electrónico inteligente, que consisten en procesadores, memoria, sistemas de almacenamiento externo, etc.
  • Software: lo tangible. Se llama así al conjunto general de programas,que más genéricamente se refiere al equipamiento lógico o soporte lógico de una computadora digital. Su objetivo se centra en que un Sistema Informático sea utilizable.
  • Personas (usuarios del sistema): Humanware.
    • Usuarios
    • Programadores

¿Qué es el Sistema Operativo?
El SO controla y coordina el uso del hardware entre los distintos programas para diversos usuarios.  Es un programa que sirve de intermediario entre los usuarios y el hardware cuyo objetivo se centra en:
  • Ejecutar las aplicaciones de los usuarios. 
  • Administrar eficientemente los recursos de la máquina (mayor eficiencia). 
  • Facilitar la interacción con el computador (que sea fácil de usar). 
El SO se encarga de administrar los recursos determinando a quién se les entrega, en qué cantidad y en qué momento y durante cuanto tiempo. Podemos decir, que tiene una Política de Gestión de Recursos.
En el Sistema tenemos dos participantes: los procesos y los recursos.
    • Un proceso es un programa en ejecución. 
    • Un recurso puede ser real o virtual, físico o lógico. 
Los procesos compiten por el uso de los recursos y para que no existe problemas, se necesitará un árbitro imparcial que asigne recursos a los procesos de forma justa y eficiente.
El SO también actúa como interfaz. Ésto es una capa entre el usuario y el hardware que ofrece una abstracción de la realidad, más cómoda, más conveniente, más fácil para el usuario y para el programador.

Definición SO utilizando un ejemplo que permita compararlo con la vida real. 

Un SO es como el dependiente de una tienda cuyo almacén de ser visible para los clientes (usuarios) sería incomprensible (almacén=hardware). El dependiente se encarga de administrar los recursos del almacén a los clientes y facilita la interacción tienda-cliente. La tienda actúa como interfaz entre el almacén y el cliente, la cuál ofrece una visión agradable para él y más fácil a la hora de solicitar algún producto.