miércoles, 11 de marzo de 2015

I. Introducción a los sistemas operativos

1.1 Definición y concepto
Software cuya labor es administrar todos los dispositivos de una computadora y proporcionar a los programas de usuario una interfaz más sencilla para comunicarse con el hardware.


1.2 Funciones y características

Se tendrá como punto de partida la máquina tal cual, es decir, el hardware básico del computador, con una CPU, memoria central y periféricos. Sin ayuda del software las operaciones de cargar y ejecutar un programa se debe realizar de forma manual, es decir totalmente bajo control humano. El operador debe llevar a cabo una secuencia de tareas:
  • Colocar el programa fuente almacenado en el dispositivo de entrada adecuado (cintas, tarjetas, discos...).
  • Desencadenar la ejecución de un programa de lectura para el dispositivo elegido.
  • Desencadenar la ejecución de un compilador que traduzca el programa fuente.
  • Colocar los datos de entrada en el dispositivo adecuado.
  • Ejecutar el programa objeto.
  • Sacar los resultados por impresora.
Consiste en la existencia de varias actividades simultáneas o paralelas. Ejemplo de ello lo son la superposición de las operaciones de I/O con el proceso de computación, así como la coexistencia en memoria de varios programas. La concurrencia lleva asociado el problema de conmutar de una tarea a otra, así como proteger una determinada actividad de los efectos de las otras, así como la sincronización de tareas que sean mutuamente dependientes.
1.3 Evolución histórica
Para tratar de comprender los requisitos de un Sistema Operativo y el significado de las principales características de un Sistema Operativo contemporáneo, es útil considerar como han ido evolucionando estos con el tiempo.
Existen diferentes enfoques o versiones de como han ido evolucionando los Sistemas Operativos     La primera de estas versiones podría ser esta: 
En los 40's, se introducen los programas bit a bit, por medio de interruptores mecánicos y después se introdujo el lenguaje maquina que trabajaba por tarjetas perforadas. 
Durante los años 50's y 60's.- A principio de los 50's, la compania General's Motors implanto el primer sistema operativo para su IBM 170. Empiezan a surgir las tarjetas perforadas las cuales permiten que los usuarios (que en ese tiempo eran programadores, diseñadores, capturistas, etc.), se encarguen de modificar sus programas. Establecían o apartaban tiempo, metían o introducían sus programas, corregían y depuraban sus programas en su tiempo. A esto se le llamaba trabajo en serie. Todo esto se traducía en perdida de tiempo y tiempos de programas excesivos.
En los años 60's y 70's se genera el circuito integrado, se organizan los trabajos y se generan los procesos Batch (por lotes), lo cual consiste en determinar los trabajos comunes y realizarlos todos juntos de una sola vez. En esta época surgen las unidades de cinta y el cargador de programas, el cual se considera como el primer tipo de Sistema Operativo.
En los 80's, inicio el auge de la INTERNET en los Estados Unidos de América. A finales de los años 80's comienza el gran auge y evolución de los Sistemas Operativos. Se descubre el concepto de multiprogramación que consiste en tener cargados en memoria a varios trabajos al mismo tiempo, tema principal de los Sistemas Operativos actuales.
Los 90's y el futuro, entramos a la era de la computación distribuida y del multiprocesamiento a través de múltiples redes de computadoras, aprovechando el ciclo del procesador.
Se tendrá una configuración dinámica con un reconocimiento inmediato de dispositivos y software que se añada o elimine de las redes a través de procesos de registro y localizadores.
La conectividad se facilita gracias a estándares y protocolos de sistemas abiertos por organizaciones como la Organización Internacional de normas, fundación de software abierto, todo estará mas controlado por los protocolos de comunicación OSI y por la red de servicios digital ISDN.

1.4 Clasificación

1.5 Estructura niveles o estratos de diseño
Según [alcal92], se deben observar dos tipos de requisitos cuando se construye un SO, los cuales son: Requisitos de usuario: sistema fácil de usar y de aprender, seguro, rápido y adecuado al uso al que se le quiere destinar. Requisitos del software: donde se engloban aspectos como el mantenimiento, forma de operación, restricciones de uso, eficiencia, tolerancia frente a los errores y flexibilidad.
  • Estructura monolítica:

Es la estructura de los primeros sistemas operativos constituidos fundamentalmente por un solo programa compuesto de un conjunto de rutinas entrelazadas de tal forma que cada una puede llamar a cualquier otra (ver figura).  
  • Estructura jerárquica:
A medida que fueron creciendo las necesidades de los usuarios y se perfeccionaron los sistemas, se hizo necesaria una mayor organización del software, del sistema operativo, donde una parte del sistema contenía subpartes y esto organizado en forma de niveles. De tal forma que cada una de ellas estuviera perfectamente definida y con un claro interface con el resto de elementos.


1.6 Núcleo
Kernel o Núcleo. Es el programa medular que ejecuta programas y gestiona dispositivos de hardware tales como los discos y las impresoras.




Link: https://www.youtube.com/watch?v=PqRwmVZ3ALI


II. Administración de procesos y del procesador

2.1 Concepto de proceso
Programas.- Colección de instrucciones que el procesador interpreta y ejecuta, se almacenan en sistemas no volátiles necesitando ser cargados en memoria principal para poder ser ejecutados, se considera un ente estático.
Procesos.- Programa en ejecución, el sistema operativo les asigna recursos, Se consideran un ente dinámico. El proceso es una abstracción creada por el SO, que se compone de: Código de Programa: sección texto Contexto de Ejecución: PC, registros del procesador y una pila para invocación de procedimientos Sección de Datos, que contiene variables globales Recursos del sistema.

2.2 Estados y transiciones de los procesos
Los estados se pueden dividir en: Activos e inactivos Activos los que compiten por el procesador. Tipos:
Ejecución.- Cuando el proceso tiene el control del cpu.
Preparado (Listo).- Tienen las condiciones para ser ejecutados pero no están en ejecución por alguna causa. Bloqueado.- No pueden ejecutarse porque necesitan algún recurso no disponible
Inactivos.- No pueden competir por el cpu Los 3 estados principales pueden no ser suficientes Justificación: Si todos los procesos están en bloqueados esperando un suceso y no hay memoria disponible para nuevos procesos, el procesador estará desocupado, sin uso.
La Solución: procesos suspendidos:
• Permitir la ejecución de más procesos
• Ampliar la memoria principal
• Intercambio de procesos entre memoria y disco (swapping)
--suspendido listo: el proceso está suspendido, pero se encuentra listo para ejecutarse
--suspendido bloqueado: el proceso está suspendido y además está esperando que suceda un evento
• El sistema operativo puede poner en suspendido un proceso y transferirlo a disco
• El espacio liberado en la memoria principal es usado para traer otro proceso ¿Qué proceso elegir para cargar en memoria?

  • Uno nuevo 
  • Uno previamente suspendido (debemos elegir los que se encuentran en suspendido listo y no en suspendido bloqueado) 


TRANSICIONES DE ESTADO.-  Cambio de un estado a otro
Comienzo (Creación).- Un proceso comienza al ser dada la orden de ejecución insertándose en la lista de listos
Ejecución.- Cuando el CPU está inactivo y en la cola de listos haya un proceso en espera de ser ejecutado. (Pasa al CPU)
Bloqueado.- Un proceso en ejecución solicita una operación a un dispositivo, durante la espera el proceso se bloqueará. Su PCB se insertará en la lista de bloqueados.
Preparado.- 4 causas:
1.- Orden de ejecución de un programa en espera
2.- Si un proceso está bloqueado esperando una operación de entrada/salida y ésta termina.
3.- Si un proceso está en ejecución y aparece una interrupción que fuerza al sistema operativo a ejecutar otro proceso, el 1º pasará a listo y su PCB se inserta en la lista de listos (Quantum, proceso de mayor prioridad)
4.- Activación.- Un proceso suspendido listo pasará a listo al ser reactivado
Suspendido bloqueado.- Un proceso está bloqueado y el sistema operativo lo suspende
Suspendido listo.- 3 causas:
1.- Suspensión de un proceso listo
2.- Suspensión de un proceso en ejecución
3.- Desbloqueo de un proceso suspendido bloqueado al desaparecer la causa de su bloqueo

2.3 Procesos ligeros: Hilos o hebras
Un hilo de ejecución, en sistemas operativos, es similar a un proceso en que ambos representan una secuencia simple de instrucciones ejecutada en paralelo con otras secuencias. Los hilos permiten dividir un programa en dos o más tareas que corren simultáneamente, por medio de la multiprogramación. En realidad, este método permite incrementar el rendimiento de un procesador de manera considerable. En todos los sistemas de hoy en día los hilos son utilizados para simplificar la estructura de un programa que lleva a cabo diferentes funciones. Todos los hilos de un proceso comparten los recursos del proceso. Residen en el mismo espacio de direcciones y tienen acceso a los mismos datos. Cuando un hilo modifica un dato en la memoria, los otros hilos utilizan el resultado cuando acceden al dato. Cada hilo tiene su propio estado, su propio contador, su propia pila y su propia copia de los registros de la CPU. Los valores comunes se guardan en el bloque de control de proceso (PCB), y los valores propios en el bloque de control de hilo (TCB).

2.4 Concurrencia y secuenciabilidad
La concurrencia comprende un gran número de cuestiones de diseño, incluyendo la comunicación entre procesos, competencia por los recursos, sincronización de la ejecución de varios procesos y asignación del tiempo de procesador a los procesos y es fundamental para que existan diseños como Multiprogramación, Multiproceso y Proceso distribuido Los procesos son concurrentes si existen simultáneamente 2 o más y llegan al mismo tiempo a ejecutarse. La concurrencia puede presentarse en tres contextos diferentes:
• Varias aplicaciones: (multiprogramación) para permitir que el cpu sea compartido entre varios trabajos 
• Aplicaciones estructuradas: Como ampliación del diseño modular y la programación estructurada, algunas aplicaciones pueden implementarse eficazmente como un conjunto de procesos concurrentes. • Estructura del sistema operativo: Las mismas ventajas de estructuración son aplicables a los sistemas operativos que están implementados como un conjunto de procesos.  

Tipos de computadora en los que puede haber concurrencia: 
• Multiprogramación con un CPU. El sistema operativo se encarga de repartir el CPU entre los procesos, intercalando su ejecución para dar una apariencia de ejecución simultánea. 
• Multiprocesador. Máquina formada por más de un CPU que comparten memoria principal. Los procesos no sólo intercalan su ejecución sino también la superponer. 
• Multicomputadora. Es una máquina de memoria distribuida formada por una serie de computadoras, es posible la ejecución simultánea de los procesos en los diferentes CPU’s. La concurrencia será aparente siempre que el número de procesos sea mayor que el de procesadores disponibles y será real cuando haya un proceso por procesador (Paralelismo). 

2.5 Niveles, objetivos y criterios de planificación
  • Planificación de largo plazo.- (Planificación de trabajos), determina a qué trabajos se les permite entrar al sistema, cuál es el próximo trabajo que se va a ejecutar. Existe en los sistemas por lotes donde la decisión se basa en las necesidades de recursos y su disponibilidad. En los sistemas de tiempo compartido tiene como misión cargar los programas que se desea ejecutar en memoria, es por tanto el encargado de crear los procesos. 
  • Planificación de mediano plazo.- (Planificación de Swapping), determina a qué proceso se le permite competir por el CPU. Suspende y/o activa temporalmente procesos para mantener una operación uniforme en el sistema y ayuda a realizar algunas funciones para optimizar el rendimiento del sistema.
  • Planificación de corto plazo.- (Planificación de CPU), determina a qué proceso deberá asignarse el CPU (despachar). Esta operación se realiza muchas veces por segundo, por lo que el despachador debe estar permanente en memoria
Objetivos de la planificación 
Justicia.- Sin favorecer o perjudicar procesos 
Máxima capacidad de ejecución.- Realizar los trabajos lo más rápido posible. Minimizar los cambios de procesos 
Máximo número de usuarios interactivos.- Simultáneos Predecibilidad.- Saber en todo momento cómo será la ejecución. 
Mínima sobrecarga.- A menor sobrecarga mayor velocidad. Minimizar los cambios de contexto Equilibrio en el uso de recursos.- Que estén ocupados equitativamente el mayor tiempo posible Seguridad de las prioridades.- Ejecutar más pronto los de más alta prioridad Muchos de estos objetivos están en conflicto unos con otros, esto hace que la planificación sea un problema complejo.
2.6 Técnicas de administración del planificador
Ciclo de ráfaga del CPU y de E/S. El éxito de la planificación del CPU depende de la siguiente prioridad observada de los procesos: la ejecución de un proceso consiste en un ciclo de ejecución del CPU y de E/S, y los procesos se alternan entre estos dos estados. La ejecución del proceso se hace alternando una ráfaga de CPU y una ráfaga de E/S. La última ráfaga de CPU terminará con una solicitud al sistema para que concluya la ejecución. 
Planificador del CPU. Siempre que el CPU queda inactivo, el sistema operativo debe seleccionar para su ejecución uno de sus procesos de la lista de listos. La selección es revisada por el planificador a corto plazo, 
Estructura de planificación. Las decisiones de planificación del CPU pueden efectuarse cuando un proceso cambia: 
  • De ejecución a bloqueado 
  • De ejecución a listo 
  • De bloqueado a listo 
  • Cuando termina.
Algoritmos de planificación Los procesos que se asignan al cpu son tomados de la lista de listos. Esta lista se alimenta de 2 puntos: 
  • Cuando un usuario inicia la ejecución de un programa, el planificador a largo plazo recibe la orden de ejecución, crea el proceso y lo pasa al planificador a corto plazo. 
  • Cuando un proceso deja de estar en ejecución y no hay causas de bloqueo, o deja de estar bloqueado.
Políticas de planificación: 
  • Apropiativas.- Producen un cambio de proceso con cada cambio de contexto; el proceso que usa el cpu puede ser suspendido y permitir el acceso al cpu a otro proceso. (Tiempo compartido y tiempo real) 
  • No apropiativas.- Un proceso no abandona nunca el procesador desde su comienzo hasta su fin. (Por lotes).





FIN.