sábado, 18 de septiembre de 2021

1.1. Definición y concepto

Sin el software, una computadora solo es una masa metálica sin utilidad. Con el software, una computadora puede almacenar, procesar y recuperar información, encontrar errores de ortografía en manuscritos, tener aventuras e intervienen muchas otras valiosas actividades para ganar el sustento. El software de computadoras puede clasificarse en general en 2 clases: los programas de sistemas que controlan la operación de la computadora en sí y los programas de aplicación, los cuales resuelven los problemas de los usuarios.

El programa fundamental de todos los programas es el sistema operativo (SO), que controla todos los recursos de la computadora y proporciona los recursos por los cual pueden escribirse los programas de aplicación.


Se puede definir de la siguiente manera:

Programa informático que se inicia al encender el ordenador para coordinar su funcionamiento y permitir la comunicación eficaz de la máquina con el usuario.

 

Como concepto más general podríamos decir que: 

Un Sistema Operativo es un conjunto de programas que controlan los programas de los usuarios (cargándolos, ejecutándolos, etc.) y los dispositivos de entrada/salida (repartiéndolos entre varios usuarios), y que tiene por objeto facilitar el uso de la computadora y conseguir que ésta se utilice eficientemente.

1.2. Funciones y características

Funciones:

Los sistemas operativos, en su condición de capa software que posibilitan y simplifica el manejo de la computadora, desempeñan una serie de funciones básicas esenciales para la gestión del equipo. Entre las más destacables, cada una ejercida por un componente interno (módulo en núcleos monolíticos y servidor en micronúcleos), podemos reseñar las siguientes:

Proporcionar más comodidad en el uso de un computador.

Gestionar de manera eficiente los recursos del equipo, ejecutando servicios para los procesos (programas)

Brindar una interfaz al usuario, ejecutando instrucciones (comandos).

Permitir que los cambios debidos al desarrollo del propio SO se puedan realizar sin interferir con los servicios que ya se prestaban (evolutividad).

Un sistema operativo desempeña 5 funciones básicas en la operación de un sistema informático: suministro de interfaz al usuario, administración de recursos, administración de archivos, administración de tareas y servicio de soporte y utilidades.

 

1. Interfaces del usuario

 Es la parte del sistema operativo que permite comunicarse con él, de tal manera que se puedan cargar programas, acceder archivos y realizar otras tareas. Existen tres tipos básicos de interfaces: las que se basan en comandos, las que utilizan menús y las interfaces gráficas de usuario.

2. Administración de recursos

Sirven para administrar los recursos de hardware y de redes de un sistema informático, como la CPU, memoria, dispositivos de almacenamiento secundario y periféricos de entrada y de salida.

3. Administración de archivos

Un sistema de información contiene programas de administración de archivos que controlan la creación, borrado y acceso de archivos de datos y de programas. También implica mantener el registro de la ubicación física de los archivos en los discos magnéticos y en otros dispositivos de almacenamiento secundarios.

4. Administración de tareas

Los programas de administración de tareas de un sistema operativo administran la realización de las tareas informáticas de los usuarios finales. Los programas controlan que áreas tiene acceso al CPU y por cuánto tiempo. Las funciones de administración de tareas pueden distribuir una parte específica del tiempo del CPU para una tarea en particular, e interrumpir al CPU en cualquier momento para sustituirla con una tarea de mayor prioridad.

5. Servicio de soporte

Los servicios de soporte de cada sistema operativo dependerán de la implementación particular de éste con la que estemos trabajando. Entre las más conocidas se pueden destacar las implementaciones de Unix, desarrolladas por diferentes empresas de software, los sistemas operativos de Apple Inc., como Mac OS X para las computadoras de Apple Inc., los sistemas operativos de Microsoft, y las implementaciones de software libre, como GNU/Linux o BSD producidas por empresas, universidades, administraciones públicas, organizaciones sin fines de lucro y/o comunidades de desarrollo.

 

CARACTERÍSTICAS

En general puede decirse que un sistema operativo tiene las siguientes características:

 

1     Conveniencia: Un sistema operativo hace más conveniente el uso de la computadora

2     Eficiencia: Un sistema operativo permite que los recursos de una computadora se usen de la manera más eficiente posible.

3     Habilidad para evolucionar:  Un sistema operativo deberá construirse de manera que permita el desarrolla, prueba o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio.

4     Encargado de administrar el hardware: El sistema operativo de encarga de administrar de una mejor manera los recursos de una computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para compartir los recursos.

5     Relacionar los dispositivos (gestionar a través del kernel): El sistema operativo debe de encargar de comunicar a los dispositivos cuando el usuario así lo requiera.

6     Organizar datos para acceso rápido y seguro.

7   Manejar comunicación en red: El sistema operativo permite al usuario manejar con alta facilidad todo lo referente a la instalación y el uso de las redes de los ordenadores.

8     Procesamiento por bytes de flujo a través del bus de datos.

9    Facilitar las entradas y salidas: Un sistema operativo debe hacerle fácil al usuario el acceso y manejo de los dispositivos de entrada/salida de la computadora.

10  Técnicas de recuperación de errores.

11  Evita que otros usuarios interfieran. El Sistema Operativo evita que los usuarios se bloqueen entre ellos, informándoles si esa aplicación está siendo ocupada por otro usuario.

12  Generación de estadísticas

13  Permite que se puedan compartir el hardware y los datos entre los usuarios.

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 éstos con el tiempo.

Existen diferentes enfoques o versiones de cómo 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 leng. máquina 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 máquina (bits) o a través de interruptores.

 

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

 

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, inició 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.

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.

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.

Toda la programación se llevaba a cabo en lenguaje de maquina absoluto y con frecuencia se utilizaban conexiones para controlar las funciones básicas de la máquina. 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.

 

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.

 

3ra Etapa (1965-1980): Circuitos integrados y multiprogramación 

La 360 de IBM fue la primera línea 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 trabajo con un sistema operativo enorme y extraordinariamente complejo. A pesar de su enorme tamaño y sus problemas el sistema operativo de la línea 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.

 

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.

 

Actualidad de los Sistemas Operativos

La actualidad de los Sistemas Operativos, la acaparan mayoritariamente “los tres grandes”, Windows, Unix y Mac Os, en sus respectivas versiones actuales.

Paralelamente, estamos ante la evolución de los microprocesadores pasando de 32 a 64 bits, aumentando con ello el rendimiento y capacidad, ya existen sistemas operativos desarrollados específicamente para máquinas de 64 bits, tales como distribuciones de Linux y la versión de Windows XP para 64 bits.

Se podría decir que el futuro es de los “dobles”, junto a los procesadores de 64 bits han aparecido los Microprocesadores de doble núcleo, en un primer momento “virtual” y ahora implementando físicamente dos núcleos en un mismo chip.

La aplicación principal del doble núcleo es la división de tareas y por tanto mayor rapidez al realizarlas (“Divide y vencerás”)

1.4. Clasificación

Con el paso del tiempo, los Sistemas Operativos fueron clasificándose de diferentes maneras, dependiendo del uso o de la aplicación que se les daba. A continuación, se mostrarán diversos tipos de Sistemas Operativos que existen en la actualidad, con algunas de sus características:

Sistemas Operativos por lotes.

Los Sistemas Operativos por lotes, procesan una gran cantidad de trabajos con poca o ninguna interacción entre los usuarios y los programas en ejecución. Se reúnen todos los trabajos comunes para realizarlos al mismo tiempo, evitando la espera de dos o más trabajos como sucede en el procesamiento en serie. Estos sistemas son de los más tradicionales y antiguos, y fueron introducidos alrededor de 1956 para aumentar la capacidad de procesamiento de los programas.

 

Sistemas Operativos de multiprogramación (o Sistemas Operativos de multitarea).

Se distinguen por sus habilidades para poder soportar la ejecución de dos o más trabajos activos (que se están ejecutado) al mismo tiempo. Esto trae como resultado que la Unidad Central de Procesamiento (UCP) siempre tenga alguna tarea que ejecutar, aprovechando al máximo su utilización.

Su objetivo es tener a varias tareas en la memoria principal, de manera que cada uno está usando el procesador, o un procesador distinto, es decir, involucra máquinas con más de una UCP.

Sistemas Operativos como UNIX, Windows 95, Windows, Windows NT, MAC-OS, OS/2, soportan la multitarea.

Las características de un Sistema Operativo de multiprogramación o multitarea son las siguientes:

1.     Mejora productividad del sistema y utilización de recursos.

2.     Multiplexa recursos entre varios programas.

3.     Generalmente soportan múltiples usuarios (multiusuarios).

4.     Proporcionan facilidades para mantener el entorno de usuarios individuales.

5.     Requieren validación de usuario para seguridad y protección.

 

Sistemas Operativos de tiempo compartido.

Permiten la simulación de que el sistema y sus recursos son todos para cada usuario. El usuario hace una petición a la computadora, está la procesa tan pronto como le es posible, y la respuesta aparecerá en la terminal del usuario.

 

Los principales recursos del sistema, el procesador, la memoria, dispositivos de E/S, son continuamente utilizados entre los diversos usuarios, dando a cada usuario la ilusión de que tiene el sistema dedicado para sí mismo. Esto trae como consecuencia una gran carga de trabajo al Sistema Operativo, principalmente en la administración de memoria principal y secundaria.

Ejemplos de Sistemas Operativos de tiempo compartido son Multics, OS/360 y DEC-10.

 

Sistemas Operativos distribuidos.

Permiten distribuir trabajos, tareas o procesos, entre un conjunto de procesadores. Puede ser que este conjunto de procesadores esté en un equipo o en diferentes, en este caso es trasparente para el usuario. Existen dos esquemas básicos de éstos. Un sistema fuertemente acoplado esa es aquel que comparte la memoria y un reloj global, cuyos tiempos de acceso son similares para todos los procesadores. En un sistema débilmente acoplado los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local.

 

Sistemas Operativos de red

Son aquellos sistemas que mantienen a dos o más computadoras unidas a través de algún medio de comunicación (físico o no), con el objetivo primordial de poder compartir los diferentes recursos y la información del sistema.

El primer Sistema Operativo de red estaba enfocado a equipos con un procesador Motorola 68000, pasando posteriormente a procesadores Intel como Novell Netware.

Los Sistemas Operativos de red más ampliamente usados son: Novell Netware, Personal Netware, LAN Manager, Windows NT Server, UNIX, LANtastic.

 

Sistemas Operativos paralelos.

En estos tipos de sistemas operativos se pretende que cuando existan dos o más procesos que compitan por algún recurso se puedan realizar o ejecutar al mismo tiempo.

En UNIX existe también la posibilidad de ejecutar programas sin tener que atenderlos en forma interactiva, simulando paralelismo (es decir, atender de manera concurrente varios procesos de un mismo usuario). Así, en lugar de esperar a que el proceso termine de ejecutarse (como lo haría normalmente), regresa a atender al usuario inmediatamente después de haber creado el proceso.

Ejemplos de estos tipos de Sistemas Operativos están: Alpha, PVM, la serie AIX, que es utilizado en los sistemas RS/6000 de IBM.

1.5. Estructura: niveles o estratos de diseño

Sistemas monolíticos

En estos sistemas operativos se escriben como un conjunto de procedimientos, cada uno de los cuales puede llamar a cualquiera de los otros siempre que lo necesite. Cuando se emplea esta técnica, cada procedimiento del sistema tiene una interfaz bien definida en términos de parámetros y resultados, y cada una tiene la libertad de llamar a cualquiera otra, si la última ofrece algún cálculo útil que la primera necesite.



Sistemas en estratos

Estos sistemas operativos se organizan como una jerarquía de estratos, cada uno construido arriba del que está debajo de él. El primer sistema construido en esta forma fuel el sistema THE que se fabricó en Technische Hogeschool Eindhoven de Holanda por E. W Dijkstra (1968) y sus alumnos. El sistema THE era un sistema de lote para una computadora alemana, la Electrológica X8, que tenía 32K de palabras de 27 bits (los bits eran costosos en aquellos días)

 

Estructura por microkernel

Las funciones centrales de un SO son controladas por el núcleo (kernel) mientras que la interfaz del usuario es controlada por el entorno (shell). Por ejemplo, la parte más importante del DOS es un programa con el nombre "COMMAND.COM" Este programa tiene dos partes. El kernel, que se mantiene en memoria en todo momento, contiene el código máquina de bajo nivel para manejar la administración de hardware para otros programas que necesitan estos servicios, y para la segunda parte del COMMAND.COM el shell, el cual es el intérprete de comandos.

 


Estructura cliente – servidor

Una tendencia de los sistemas operativos modernos es la de explotar la idea de mover el código a capas superiores y eliminar la mayor parte posible del sistema operativo para mantener un núcleo mínimo. El punto de vista

usual es el de implantar la mayoría de las funciones del sistema operativo en los procesos del usuario. Para solicitar un servicio, como la lectura de un bloque de cierto archivo, un proceso del usuario (denominado proceso cliente) envía la solicitud a un proceso servidor, que realiza entonces el trabajo y regresa la respuesta. En este modelo, que se muestra en la figura 4, lo único que hace el núcleo es controlar la comunicación entre los clientes y los servidores.

 


Máquina Virtual

Se trata de un tipo de sistemas operativos que presentan una interfaz a cada proceso, mostrando una máquina que parece idéntica a la máquina real subyacente. Estos sistemas operativos separan dos conceptos que suelen estar unidos en el resto de los sistemas: la multiprogramación y la máquina extendida. El objetivo de los sistemas operativos de máquina virtual es el de integrar distintos sistemas operativos dando la sensación de ser varias máquinas diferentes.





1.6. Núcleo

 NUCLEO

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.
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.

 

Cada sistema operativo tiene un tipo distinto de kernel: así los Unix más tradicionales como FreeBSD usan un kernel " monolítico" en el que está 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 núcleo bastante grande comparado con un microkernel, pero que es capaz de delegar funciones en los llamados " módulos" , partes independientes del núcleo que pueden ser incorporadas dinámicamente si hacen falta y luego descargadas si molestan.

 

El núcleo de un sistema operativo normalmente contiene el código necesario para realizar las siguientes funciones:

1.     Manejo de interrupciones.

2.     Creación y destrucción de procesos.

3.     Cambio de estado de los procesos.

4.     Despacho.

5.     Suspensión y reanudación de procesos.

6.     Sincronización de procesos.

7.     Comunicación entre procesos.

8.     Manipulación de los bloques de control de procesos.

9.     Apoyo para las actividades de entrada/salida.

10.  Apoyo para asignación y liberación de memoria.

 

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



2.1 Concepto de proceso

Un proceso no es más que un programa en ejecución, e incluye los valores actuales del

contador de programa, los registros y las variables. Conceptualmente cada unos de estos

procesos tiene su propia CPU virtual. Desde luego, en la realidad la verdadera CPU conmuta

de un proceso a otro.



Un proceso es un concepto manejado por el sistema operativo que consiste en el conjunto

formado por:

 Las instrucciones de un programa destinadas a ser ejecutadas por el

microprocesador.

 Su estado de ejecución en un momento dado, esto es, los valores de los registros de

la CPU para dicho programa.

 Su memoria de trabajo, es decir, la memoria que ha reservado y sus contenidos.

 Otra información que permite al sistema operativo su planificación.

Esta definición varía ligeramente en el caso de sistemas operativos multihilo, donde un

proceso consta de uno o más hilos, la memoria de trabajo (compartida por todos los hilos)

y la información de planificación. Cada hilo consta de instrucciones y estado de ejecución.

Los procesos son creados y destruidos por el sistema operativo, así como también este se

debe hacer cargo de la comunicación entre procesos, pero lo hace a petición de otros

procesos. El mecanismo por el cual un proceso crea otro proceso se denomina bifurcación

(fork). Los nuevos procesos pueden ser independientes y no compartir el espacio de

memoria con el proceso que los ha creado o ser creados en el mismo espacio de memoria.

En los sistemas operativos multihilo es posible crear tanto hilos como procesos. La

diferencia estriba en que un proceso solamente puede crear hilos para sí mismo y en que

dichos hilos comparten toda la memoria reservada para el proceso.

En este modelo: todo software ejecutable de la computadora, lo que a menudo incluye al

sistema operativo, esta organizado en una serie del proceso secuenciales, o simplemente

procesos.

La idea clave aquí es que un proceso es una actividad de algún tipo: tiene programa,

entrada, salida y un estado. Se puede compartir un procesador entre varios procesos,

usando algún algoritmo de planificación para determinar cuando debe de trabajar en un

proceso para atender a uno distinto.

Los sistemas operativos que manejan el concepto de proceso deben contar con algún

mecanismo para crear todos los procesos necesarios. en los sistemas muy sencillos, o en

los diseñados para ejecutar solo una aplicación.

En otros sistemas operativos existen llamadas al sistema para crear un proceso, cargar su

memoria y ponerlo en ejecutar. Sea cual sea la naturaleza exacta de la llamada al sistema.

Los procesos necesitan poder crear otros procesos.

En MINIX, los procesos se crean con la llamada al sistema FORK (bifurcar), que crea una

copia idéntica del proceso invocador. El proceso hijo también puede ejecutar FORK, así que

es posible tener un árbol de proceso

1.1. Definición y concepto

Sin el software, una computadora solo es una masa metálica sin utilidad. Con el software, una computadora puede almacenar, procesar y recupe...