viernes, 25 de agosto de 2017

Unidad 1. Introducción a los Sistemas Operativos

INTRODUCCIÓN
Un Sistema operativo es un programa que administra el hardware de una computadora. También proporciona las bases para los programas de aplicación, y actúa como intermediario entre el usuario y el hardware. Estas tareas, pueden ser llevadas a cabo de varias formas, lo que permite que algunos sistemas Operativos se diseñen para ser prácticos, otros eficientes y otros para ser ambas cosas.

Dado que un sistema operativo es un software grande y complejo, debe crearse pieza por pieza. En este curso veremos, entre otras cosas, una introducción a los principales componentes de un sistema operativo.
Imagen relacionada
                             

1.1. Definición y Concepto.

¿Qué es un Sistema Operativo?

Un sistema operativo es un programa, o conjunto de programas que torna amigable, eficiente y productivo el uso de un computador (hardware), permitiendo la ejecución aplicaciones de usuario. Es el intermediario entre las aplicaciones de usuario y el hardware.




Metas:
  •  Brindar un ambiente de realización y ejecución de aplicaciones
  • Proveer un entorno sin interferencias a cada usuario (interferencia: Lo que un usuario modifica en su entorno, no interfiera ni modifique lo de otro usuario)
  •  Administrar en forma equitativa los recursos(hardware y software)
  •   Hacerlo de la forma mas amigable e intuitiva posible 

Todas las aplicaciones de usuario requieren un conjunto común de operaciones que son incorporadas al sistema operativo. Tareas principales: Implementar diferentes entornos para diferentes usos (interfaz grafica, shells, tipo web, etc)
  •  Proveer una o más interfaces con el usuario.
  • Proveer a las aplicaciones un conjunto de servicios(a través de los “system services”)
  • Eficiencia y equidad en la administración de recursos.

1.2. Funciones y características.

En general, se puede decir que un Sistema Operativo tiene las siguientes caracteristicas:

Conveniencia. Un Sistema Operativo hace mas conveniente el uso de una computadora.

Eficiencia. Un Sistema Operativo permite que los recursos de la computadora se usen de la manera mas eficiente posible.

Habilidad para evolucionar. Un Sistema Operativo debera construirse de manera que permita el desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio.

Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para poder compartir los recursos.

 Relacionar dispositivos (gestionar a traves del kernel). El Sistema Operativo se debe encargar de comunicar a los dispositivos perifericos, cuando el usuario asi lo requiera.

1.3. Historia de los Sistemas Operativos.

Los Sistemas Operativos, al igual que el Hardware de los computadores, han sufrido una serie de cambios revolucionarios llamados generaciones. En el caso del Hardware, las generaciones han sido marcadas por grandes avances en los componentes utilizados, pasando de válvulas (primera generación) a transistores (segunda generación), a circuitos integrados (tercera generación), a circuitos integrados de gran y muy gran escala (cuarta generación). 
Cada generación Sucesiva de hardware ha ido acompañada de reducciones substanciales en los costos, tamaño, emisión de calor y consumo de energía, y por incrementos notables en velocidad y capacidad. 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.
Resultado de imagen para sistemas operativos


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. 
Con las primeras computadoras, desde finales de los años 40 hasta la mitad de los años 50, el programador interactuaba de manera directa con el hardware de la computadora, no existía realmente un Sistema Operativo; las primeras computadoras utilizaban bulbos, la entrada de datos y los programas se realizaban a través del lenguaje maquina (bits) o a través de interruptores.

Durante los años 50's y 60's.- A principio de los 50's, la compañia 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.


     Se ha desarrollado otra versión, la cual se ha hecho en base a etapas o generaciones:


    Generación Cero (década de 1940)

Los primeros sistemas computacionales no poseían sistemas operativos. Los usuarios tenían completo acceso al lenguaje de la máquina. Todas las instrucciones eran codificadas a mano.

    1a. Etapa (1945-1955): Bulbos y conexiones.

Resultado de imagen para 1a. Etapa (1945-1955): Bulbos y conexiones.Después de los infructuosos esfuerzos de Babbage, hubo poco progreso en la construcción de las computadoras digitales, hasta la Segunda Guerra Mundial. A mitad de la década de los 40's, Howard Aiken (Harvard), John Von Newman (Instituto de Estudios Avanzados, Princeton), J. Prespe R. Eckert y Williams Mauchley (Universidad de Pennsylvania), así como Conrad Zuse (Alemania), entre otros lograron construir máquinas de cálculo mediante bulbos. Estas máquinas eran enormes y llenaban cuartos completos con decenas de miles de bulbos, pero eran mucho más lentas que la computadora casera más económica en nuestros días. 
Los lenguajes de programación eran desconocidos (incluso el lenguaje ensamblador). No se oía de los Sistemas Operativos el modo usual de operación consistía en que el programador reservaba cierto periodo en una hoja de reservación pegada a la pared, iba al cuarto de la máquina, insertaba su conexión a la computadora y pasaba unas horas esperando que ninguno de los 20,000 o más bulbos se quemara durante la ejecución. La inmensa mayoría de los problemas eran cálculos numéricos directos, por ejemplo, el cálculo de valores para tablas de senos y cosenos. 
A principio de la década de los 50's la rutina mejoro un poco con la introducción de las tarjetas perforadas. Fue entonces posible escribir los programas y leerlas en vez de insertar conexiones, por lo demás el proceso era el mismo. 

    2a. Etapa. (1955-1965): Transistores y Sistemas de Procesamiento por lotes.
La introducción del transistor a mediados de los años 50's modifico en forma radical el panorama. Las computadoras se volvieron confiables de forma que podían fabricarse y venderse a clientes, con la esperanza de que ellas continuaran funcionando lo suficiente como para realizar un trabajo en forma. 
Dado el alto costo del equipo, no debe sorprender el hecho de que las personas buscaron en forma por demás rápidas vías para reducir el tiempo invertido. La solución que, por lo general se adoptó, fue la del sistema de procesamiento por lotes.
Resultado de imagen para 2a. Etapa. (1955-1965): Transistores y Sistemas de Procesamiento por lotes.

    3ra Etapa (1965-1980): Circuitos integrados y multiprogramacion..

Imagen relacionadaLa 360 de IBM fue la primera lineal principal de computadoras que utilizo los circuitos integrados, lo que proporciono una gran ventaja en el precio y desempeño con respecto a las máquinas de la segunda generación, construidas a partir de transistores individuales. Se trabajó con un sistema operativo enorme y extraordinariamente complejo. A pesar de su enorme tamaño y sus problemas el sistema operativo de la lineal IBM 360 y los sistemas operativos similares de esta generación producidos por otros fabricantes de computadoras realmente pudieron satisfacer, en forma razonable a la mayoría de sus clientes. También popularizaron varias técnicas fundamentales, ausentes de los sistemas operativos de la segunda generación, de las cuales la más importante era la de multiprogramación. Otra característica era la capacidad de leer trabajos de las tarjetas al disco, tan pronto como llegara al cuarto de cómputo. Así, siempre que concluyera un trabajo el sistema operativo podía cargar un nuevo trabajo del disco en la partición que quedara desocupada y ejecutarlo. 

    4ta Etapa (1980-Actualidad): Computadoras personales. 
Un interesante desarrollo que comenzó a llevarse a cabo a mediados de la década de los ochenta ha sido el crecimiento de las redes de computadoras personales, con sistemas operativos de red y sistemas operativos distribuidos. 
En los sistemas operativos de red, los usuarios están conscientes de la existencia de varias computadoras y pueden conectarse con máquinas remotas y copiar archivos de una maquina a otra. Cada máquina ejecuta su propio sistema operativo local y tiene su propio usuario. 
Por el contrario, un sistema operativo distribuido es aquel que aparece ante sus usuarios como un sistema tradicional de un solo procesador, aun cuando esta compuesto por varios procesadores. En un sistema distribuido verdadero, los usuarios no deben ser conscientes del lugar donde su programa se ejecute o de lugar donde se encuentren sus archivos; eso debe ser manejado en forma automática y eficaz por el sistema operativo.

Resultado de imagen para 4ta Etapa (1980-Actualidad): Computadoras personales.


1.4. Clasificación

Sistema Operativo Multitareas.
            Es el modo de funcionamiento disponible en algunos sistemas operativos, mediante el cual una computadora procesa varias tareas al mismo tiempo. Existen varios tipos de multitareas. La conmutación de contextos (context Switching) es un tipo muy simple de multitarea en el que dos o más aplicaciones se cargan al mismo tiempo, pero en el que solo se esta procesando la aplicación  que se encuentra en primer plano (la que ve el usuario). 
Para activar otra tarea que se encuentre en segundo plano, el usuario debe traer al primer plano la ventana o pantalla que contenga esa aplicación. En la multitarea cooperativa, la que se utiliza en el sistema operativo Macintosh, las tareas en segundo plano reciben tiempo de procesado durante los tiempos muertos de la tarea que se encuentra en primer plano (por ejemplo, cuando esta aplicación esta esperando información del usuario), y siempre que esta aplicación lo permita. En los sistemas multitarea de tiempo compartido, como OS/2, cada tarea recibe la atención del microprocesador durante una fracción de segundo. Para mantener el sistema en orden, cada tarea recibe un nivel de prioridad o se procesa en orden secuencial. Dado que el sentido temporal del usuario es mucho más lento que la velocidad de procesamiento del ordenador, las operaciones de multitarea en tiempo compartido parecen ser simultáneas.

Sistema Operativo Monotareas.
            Los sistemas operativos monotareas son más primitivos y es todo lo contrario al visto anteriormente, es decir, solo pueden manejar un proceso en cada momento o que solo puede ejecutar las tareas de una en una. Por ejemplo cuando la computadora esta imprimiendo un documento, no puede iniciar otro proceso ni responder a nuevas instrucciones hasta que se termine la impresión.

Sistema Operativo Monousuario.
            Los sistemas monousuarios son aquellos que nada más puede atender a un solo usuario, gracias a las limitaciones creadas por el hardware, los programas o el tipo de aplicación que se este ejecutando.
            Estos tipos de sistemas son muy simples, porque todos los dispositivos de entrada, salida y control dependen de la tarea que se esta utilizando,  esto quiere decir, que las instrucciones que se dan, son procesadas de inmediato; ya que existe un solo usuario. Y están orientados principalmente por los microcomputadores.

Sistema Operativo Multiusuario.
            Es todo lo contrario a monousuario; y en esta categoría se encuentran todos los sistemas que cumplen simultáneamente las necesidades de dos o más usuarios, que comparten mismos recursos. Este tipo de sistemas se emplean especialmente en redes.
            En otras palabras consiste en el fraccionamiento del tiempo (timesharing).

Secuencia por Lotes.
            La secuencia por lotes o procesamiento por lotes en microcomputadoras, es la ejecución de una lista de comandos del sistema operativo uno tras otro sin intervención del usuario. En los ordenadores más grandes el proceso de recogida de programas y de conjuntos de datos de los usuarios, la ejecución de uno o unos pocos cada vez y la entrega de los recursos a los usuarios. Procesamiento por lotes también puede referirse al proceso de almacenar transacciones durante un cierto lapso antes de su envío a un archivo maestro, por lo general una operación separada que se efectúa durante la noche.
            Los sistemas operativos por lotes (batch), en los que los programas eran tratados por grupos (lote) en ves de individualmente. La función de estos sistemas operativos consistía en cargar en memoria un programa de la cinta y ejecutarlo. Al final este, se realizaba el salto a una dirección de memoria desde donde reasumía el control del sistema operativo que cargaba el siguiente programa y lo ejecutaba. De esta manera el tiempo entre un trabajo y el otro disminuía considerablemente.

Tiempo Real.
            Un sistema operativo en tiempo real procesa las instrucciones recibidas al instante, y una vez que han sido procesadas muestra el resultado. Este tipo tiene relación con los sistemas operativos monousuarios, ya que existe un solo operador y no necesita compartir el procesador entre varias solicitudes.
            Su característica principal es dar respuestas rápidas; por ejemplo en un caso de peligro se necesitarían respuestas inmediatas para evitar una catástrofe.

Tiempo Compartido.

            El tiempo compartido en ordenadores o computadoras consiste en el uso de un sistema por más de una persona al mismo tiempo. El tiempo compartido ejecuta programas separados de forma concurrente, intercambiando porciones de tiempo asignadas a cada programa (usuario). En este aspecto, es similar a la capacidad de multitareas que es común en la mayoría de los microordenadores o las microcomputadoras. Sin embargo el tiempo compartido se asocia generalmente con el acceso de varios usuarios a computadoras más grandes y a organizaciones de servicios, mientras que la multitarea relacionada con las microcomputadoras implica la realización de múltiples tareas por un solo usuario.




CLASIFICACIÓN
EJEMPLO
MULTIUSUARIO
LINUX
MONOUSUARIO
WINDOWS 3.0 Y 3.1 (PRIMERAS VERSIONES)
MULTITAREA
UNIX
TIEMPO REAL
WINDOWS CE, Mac Os
MULTIPROCESADOR
WINDOWS NT
DISTRIBUIDO
SOLARIS
CENTRALIZADO
MY SQL
LOTES SENCILLO
MS-DOS
HIBRIDO
ARCHGNU/LINUX


CLASIFICACIÓN DE LOS SISTEMAS OPERATIVOS
Los sistemas operativos se clasifican en:
·     Sistemas operativos por lotes.
·     Sistemas operativos multiprogramación o de multitarea.
·     Sistemas operativos multiusuario.
·     Sistemas operativos de tiempo compartido.
·     Sistemas operativos de tiempo real.
·     Sistemas operativos distribuidos.
·     Sistemas operativos de red.
·     Sistemas operativos paralelos.

1.5. Estructura: niveles o estratos de diseño

ESTRUCTURA MONOLÍTICA
Es la estructura de los primeros sistemas operativos. Fundamentalmente por un solo programa compuesto de un conjunto de rutinas entrelazadas de tal forma que cada una puede llamar a cualquier otra. 


CARACTERÍSTICAS
  • Núcleos tipo Unix
  •  Linux
  • Syllable
  • Unix
  • BSD (FreeBSD, NetBSD, OpenBSD)
  • Solaris
  • Núcleos tipo DOS
  • DR-DOS
  • MS-DOS
  • Familia Microsoft Windows 9x (95, 98, 98SE, Me)
  • Núcleos del Mac OS hasta Mac OS 8.6
  • OpenVMS
  • XTS-400
     ESTRUCTURA CLIENTE-SERVIDOR

Ø  Construcción de programa final a base de módulos compilados separadamente que se une a través del editor de enlaces.
Ø  Buena definición de parámetros de enlace entre la rutinas existentes.
Ø  Carecen de protección y privilegios al entrar y manejan diferentes aspectos de la computadora.
Ø  Generalmente están hechos a la medida
Ø  Por ejemplo los cajeros automáticos donde sólo tienen que cumplir una determinada función siguiendo una serie de procesos ya determinados. 
EJEMPLOS
Entre los sistemas operativos que cuentan con núcleos monolíticos se encuentran:
ESTRUCTURA JERÁRQUICA

Consiste en organizar el sistema operativo con una jerarquía de capas cada una construida sobre la que esta bajo ella.



          CARACTERÍSTICAS

Ø  Las zonas mas intensas o núcleo están mas protegidas de posibles accesos indeseados desde las capas mas externas.

Ø  Tienes un contacto mas próximo con el hardware

Ø  Núcleo mínimo, mas seguro y ágil.
En esta estructura se basan prácticamente la mayoría de los SO actuales. Otra forma de ver este tipo de sistema es la denominación de anillos concéntricos o “RINGS”

EJEMPLOS

        ·  Ø  Multics 

        ·  Ø   Unix

                                      ESTRUCTURA MAQUINA VIRTUAL 
Se trata de un SO que presenta una interfaces  cada proceso, mostrando una máquina que parece idéntica a la máquina real subyacente. Estos SO separan dos conceptos: Multiprogramación y La Máquina Extendida. Su objetivo es distinguir distintos SO dando la sensación de ser varias máquinas. Tiene capacidad de utilizar varios SO simultáneamente.


CARACTERÍSTICAS
  Ø  Se puede hacer varios sistemas operativos sin necesidad de crear particiones.
    Ø  Se puede simular el hardware

    Ø  Gran capacidad de disco duro-memoria ram

   Ø  Protección cada maquina virtual esta aislada de las otras y no puede inferir.

 

   EJEMPLOS
·         Ø  Nachos: sistema operativo se ejecuta en una virtual mips, cuyo emulador corre sobre Linux.
·         Ø  IBM IV: ofrecía a cada usuario su propia maquina virtual no multiprogramado.


   Es el tipo más reciente de los SO, que pueden ser ejecutados en la mayoría de las computadoras, ya sean grandes o pequeñas. Este sistema sirve para todo, por lo tanto es de propósito general y se basa en lo mismo que el resto de los SO convencionales: núcleo y procesos, presentando grandes diferenciasen cuanto a la forma de distribuir los trabajos entre sus diferentes partes.

CARACTERÍSTICAS
     Ø  Coordina, permite el trabajo entre iguales.
     Ø  Cliente; inicia las solicitudes o peticiones (maestro)
     Ø  Espera y recibe respuesta del servidor
     Ø  Se puede conectar a varios servidores a la vez .
     Ø  Servidor:
     Ø  Esclavo, espera las solicitudes del cliente
     Ø  Aceptan conexiones desde  un gran numero de clientes.


EJEMPLOS
Ø  Sistema operativo Novell NetWare 1983, plataforma mas fiable para ofrecer acceso seguro.
Ø  Windows 2000
Ø  Cualquiera de este puede compartir sus recursos con otro Windows 2000.
Ø  Windows xp.

1.6 Núcleo


Todas las operaciones en las que participan procesos son controladas por la parte del sistema operativo denominada núcleo (nucleus, core o kernel, en inglés). El núcleo normalmente representa sólo una pequeña parte de lo que por lo general se piensa que es todo el sistema operativo, pero es tal vez el código que más se utiliza. Por esta razón, el núcleo reside por lo regular en la memoria principal, mientras que otras partes del sistema operativo son cargadas en la memoria principal sólo cuando se necesitan.
  • Manejo de interrupciones.
  • Creación y destrucción de procesos.
  • Cambio de estado de los procesos.
  • Despacho.
  • Suspensión y reanudación de procesos.
  • Sincronización de procesos.
  • Comunicación entre procesos.
  • Manipulación de los bloques de control de procesos.
  • Apoyo para las actividades de entrada/salida.
  • Apoyo para asignación y liberación de memoria.
  • Apoyo para el sistema de archivos.
  • Apoyo para el mecanismo de llamada y retorno de un procedimiento.
  • Apoyo para ciertas funciones de contabilidad del sistema.
  • Núcleo o Kernel y niveles de un Sistema Operativo.

Los núcleos se diseñan para realizar "el mínimo" posible de procesamiento en cada interrupción y dejar que el resto lo realice el proceso apropiado del sistema, que puede operar mientras el núcleo se habilita para atender otras interrupciones.
El Kernel consiste en la parte principal del codigo del sistema operativo, el cual se encargan de controlar y administrar los servicios y peticiones de recursos y de hardware con respecto a uno o varios procesos, en otras palabras, el kernel es el corazon del sistema operativo.

Cada sistema operativo tiene un tipo distinto de kernel: asi los Unix mas tradicionales como FreeBSD usan un kernel " monolitico" en el que esta todo compilado dentro, otros usan los llamados "microkernels" como el Darwin, Hurd e incluso Windows (krnl32.dll). GNU/Linux usa un kernel "modular" (vmlinuz); un nucleo bastante grande comparado con un microkernel, pero que es capaz de delegar funciones en los llamados " modulos" , partes independientes del nucleo que pueden ser incorporadas dinamicamente si hacen falta y luego descargadas si molestan. Asi se pueden cargar "drivers" para hardware, firewall o funciones especiales de red (ppp, rdsi, etc) cuando se necesiten y cuando por ejemplo, se cierre la conexion a internet, liberar la memoria que usaba ese modulo.


El núcleo de un sistema operativo normalmente contiene el código necesario para realizar las siguientes funciones:
El Kernel consiste en la parte principal del código del sistema operativo, el cual se encargan de controlar y administrar los servicios y peticiones de recursos y de hardware con respecto a uno o varios procesos, este se divide en 5 capas:




Nivel 1. Gestión de Memoria: que proporciona las facilidades de bajo nivel para la gestión de memoria secundaria necesaria para la ejecución de procesos.
Nivel 2. Procesador: Se encarga de activar los cuantums de tiempo para cada uno de los procesos, creando interrupciones de hardware cuando no son respetadas.
Nivel 3. Entrada/Salida: Proporciona las facilidades para poder utilizar los dispositivos de E/S requeridos por procesos.
Nivel 4. Información o Aplicación o Interprete de Lenguajes: Facilita la comunicación con los lenguajes y el sistema operativo para aceptar las ordenes en cada una de las aplicaciones. Cuando se solicitan ejecutando un programa el software de este nivel crea el ambiente de trabajo e invoca a los procesos correspondientes.
Nivel 5. Control de Archivos: Proporciona la facilidad para el almacenamiento a largo plazo y manipulación de archivos con nombre, va asignando espacio y acceso de datos en memoria.

Unidad 1. Introducción a los Sistemas Operativos

INTRODUCCIÓN Un Sistema operativo es un programa que administra el hardware de una computadora. También proporciona las bases para los prog...