Sistema de Administracion de Archivos





Archivos


Los sistemas de archivos (filesystem en inglés), estructuran la información guardada en una unidad de almacenamiento (normalmente un disco duro de una computadora), que luego será representada ya sea textual o gráficamente utilizando un gestor de archivos. La mayoría de los sistemas operativos poseen su propio sistema de archivos.

Lo habitual es utilizar dispositivos de almacenamiento de datos que permiten el acceso a los datos como una cadena de bloques de un mismo tamaño, a veces llamados sectores, usualmente de 512 bytes de longitud. El software del sistema de archivos es responsable de la organización de estos sectores en archivos y directorios y mantiene un registro de qué sectores pertenecen a qué archivos y cuáles no han sido utilizados. En la práctica, un sistema de archivos también puede ser utilizado para acceder a datos generados dinámicamente, como los recibidos a través de una conexión de red (sin la intervención de un dispositivo de almacenamiento).

Los sistemas de archivos tradicionales proveen métodos para crear, mover, renombrar y eliminar tanto archivos como directorios, pero carecen de métodos para crear, por ejemplo, enlaces adicionales a un directorio o archivo (enlace duro en Unix) o renombrar enlaces padres (“..” en Unix).

El acceso seguro a sistemas de archivos básicos puede estar basado en los esquemas de lista de control de acceso o capacidades. Las listas de control de acceso hace décadas que demostraron ser inseguras, por lo que los sistemas operativos experimentales utilizan el acceso por capacidades. Los sistemas operativos comerciales aún funcionan con listas de control de acceso

Rutas y nombre de archivos

Generalmente un sistema de archivos tiene directorios que asocian un nombre de archivo a cada archivo, usualmente conectando el nombre de archivo a un índice en una tabla de asignación de archivos de algún tipo —como FAT en sistemas de archivos MS-DOS o los inodos de los sistemas Unix

La estructura de directorios suele ser jerárquica, ramificada o “en árbol”, aunque en algún caso podría ser plana. En algunos sistemas de archivos los nombres de archivos son estructurados, con sintaxis especiales para extensiones de archivos y números de versión. En otros, los nombres de archivos son simplemente cadenas de texto y los metadatos de cada archivo son alojados separadamente.

En los sistemas de archivos jerárquicos, usualmente, se declara la ubicación precisa de un archivo con una cadena de texto llamada “ruta” —o path en inglés—. La nomenclatura para rutas varía ligeramente de sistema en sistema, pero mantienen por lo general una misma estructura. Una ruta viene dada por una sucesión de nombres de directorios y subdirectorios, ordenados jerárquicamente de izquierda a derecha y separados por algún carácter especial que suele ser una barra (‘/’) o barra invertida (‘\’) y puede terminar en el nombre de un archivo presente en la última rama de directorios especificada.

Sistema de Entrada y Salida








Esquema Entradas y Salidas

El sistema de entrada/salida está construido como un conjunto de manejadores apilados, cada uno de los cuales está asociado a un dispositivo de entrada/salida (archivos, red, etc.).

Ofrece a las aplicaciones y entornos de ejecución servicios genéricos que permiten manejar los objetos de E/S del sistema. A través de ellos se puede acceder a todos los manejadores de archivos y de dispositivos tales como: discos, redes, consola, tarjetas de sonido, etc.

La arquitectura de E/S, es compleja y está estructurada en capas, cada una de las cuales tiene una funcionalidad bien definida.

Interfaz del sistema operativo para E/S

Proporciona servicios de E/S sincrona y asíncrona a las aplicaciones y una interfaz homogénea para poderse comunicar con los manejadores de dispositivo ocultando los detalles de bajo nivel.

Sistema de Archivos

Proporcionan una interfaz homogénea, a través del sistema de archivos virtuales, para acceder a todos los sistemas de archivos que proporciona el sistema operativo (FFS, SV, NTFS, FAT, etc).

Gestor de redes

Proporciona una interfaz homogénea para acceder a todos los sistemas de red que proporciona el sistema operativo (TCP/IP, Novell, etc.). Además permite acceder a los manejadores de cada tipo de red particular de forma transparente.

Gestor de bloques

Los sistemas de archivos y otros dispositivos lógicos con acceso a nivel de bloques se suelen se suelen limitar a traducir las operaciones del formato del usuario de bloques que entiende el dispositivo y se las pasan a este gestor de bloques.

Gestor de caché

Optimiza la E/S mediante la gestión de almacenamiento intermedio en memoria para dispositivos de E/S de tipo bloque.

Manejadores de dispositivo

Proporcionan operaciones de alto nivel sobre los dispositivos y las traducen en su ámbito interno a operaciones de control de cada dispositivo particular.

Cada uno de estos componentes se considera un objeto del sistema, por lo que habitualmente todos los sistemas operativos permiten modificar el sistema operativo de forma estática o dinámica para reemplazar, añadir o quitar manejadores de dispositivos. Sin embargo, por razones de seguridad no se permite a las aplicaciones de usuario acceder directamente a los dispositivos, sino a través de la interfaz de llamadas al sistema.

Elementos de un Sistema Operativo – Administracion de Memoria

Ejemplo de Memoria RAM
Administración de la Memoria

La parte del sistema operativo que administra la memoria se llama administrador de la memoria. Para ello existen diferentes esquemas de administración de memoria desde los mas simples hasta los mas elaborados entre los cuales se ubican:

Administración de la memoria sin intercambio o paginación.

Los sistemas de administración de memoria se pueden clasificar en dos tipos. Los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecución (intercambio y paginación) y aquellos que no.

Monopogramación sin intercambio o paginación.

Es en forma secuencial pues solo se tiene un objeto en memoria en cada instante, el usuario carga toda la memoria con un programa, esto implica que cada proceso debe contener controladores de dispositivo para cada uno de los dispositivos E/S que utilice.

Multiprogramación y uso de la memoria.

La multiprogramación facilita la programación de una aplicación al dividirla en dos o mas procesos. La mayoría de los procesos tardan cierto tiempo en la espera de datos de dispositivos E/S.

Un modelo para el uso y aprovechamiento de la CPU es el modelo probabilístico dado por la fórmula :

Uso de la CPU = 1 – pn

Multiprogramación con particiones fijas

El objetivo en todo esto es tener mas de un proceso en memoria a la vez, solución posible sería dividir la memoria en n partes al inicio de una sesión de uso de la máquina, pero aún así se obtiene el desperdicio de particiones grandes con una tarea pequeña, la respuesta puede ser tener particiones pequeñas también.

Las tareas que van llegando se forman hasta que una partición adecuada está disponible, en cuyo momento la tarea se carga en esa partición y se ejecuta hasta terminar.

Intercambio

En un sistema por lotes la organización de la memoria en particiones fijas es adecuado pero en un ambiente multiusuario la situación es distinta con el tiempo compartido, ya que existen mas usuarios de los que puede albergar la memoria, por lo que es conveniente albergar el exceso de los procesos en disco., por supuesto para ser ejecutados estos procesos deben ser trasladados a la memoria principal. Al traslado de procesos de disco a memoria y viceversa se le llama intercambio.

Multiprogramación con particiones variables.

Mediante un algoritmo de administración de memoria las particiones variables varían de forma dinámica durante el uso de la máquina, evitando desperdicio de memoria

Otros métodos de administración de memoria que tenemos son:

la administración de memoria con mapa de bits

la memoria se divide en unidades de asignación, a cada asignación le corresponden un bit en el mapa de bits, un mapa de bits es una forma sencilla para llevar un registro de las palabras de la memoria en una cantidad fija de memoria.

la administración de memoria con listas ligadas

otra forma de mantener un registro en memoria es mediante una lista ligada donde cada entrada de la lista específica un hueco o un proceso.

la administración de memoria con el sistema de los asociados

basado en el sistema binario o utiliza para las direcciones.

Memoria Virtual

El método diseñado por Fotheringham en 1961 se conoce como Memoria Virtual, la idea es que el tamaño combinado de la pila, programa y datos puede exceder la memoria física disponible para ello. El S.O. mantiene en memoria aquellas partes del programa que se deben permanecer en memoria y el resto lo deja en disco, las partes entre el disco y la memoria se intercambian de modo que se vayan necesitando.

Paginación

El espacio de direcciones de cada proceso se divide en bloques de tamaño uniforme llamados páginas, los cuales se pueden colocar dentro de cualquier para página marco disponible en memoria. Cuando las tablas de páginas son muy grandes se puede utilizar un esquema de paginación de varios niveles para que las páginas se paginen a sí mismas.

Existen distintos niveles de paginación y a su vez distintos modelos de computadoras han trabajado con ellas.

Paginación de nivel 1: PDP-11

Paginación de 2 niveles: la VAX

Paginación de 3 niveles: la SPARC

Paginación de 4 niveles: la 68030

Memoria asociativa

En los algoritmos de paginación las tablas de páginas se mantienen en la memoria debido a su gran tamaño, en potencia este diseño tiene un efecto enorme en el rendimiento.

Algoritmos de reemplazo de páginas.

Cuando ocurre un fallo de página el sistema operativo debe elegir una página para retirarla de la memoria y hacer un espacio para la página por recuperar. Si la página por eliminar fue modificada mientras estaba en memoria, debe escribirla en el disco para mantener actualizada la copia del disco, si por el contrario la página no ha sido modificada la copia del disco ya está actualizada por lo que no es necesario volver a escribir, la página por leer sólo escribe encima de la página por retirar.

Aunque es posible elegir una página al azar para el reemplazo relacionado con un fallo de página, el rendimiento del sistema es mucho mejor si se elige una página de poco uso.

Algoritmo de reemplazo de páginas optimo

Mejor algoritmo posible para reemplazo de páginas pero irrealizable en la práctica.

Al momento de ocurrir un fallo de página cierto conjunto de páginas se encuentran en la memoria, en la siguiente instrucción se hará referencia a una de estas páginas, otras páginas no se utilizaran sino hasta mucho después, cada página puede ejecutarse con el número de instrucciones ejecutadas antes de la primera referencia a esa página, el algoritmo dice que se elimine la página con la mayor etiqueta; si una página no va a utilizase sino hasta mucho después que otra la eliminación de la primera retrasa el fallo de página lo mas posible, el único problema de este algoritmo es que es irrealizable. Al momento del fallo de página el S.O. no tiene forma de saber a qué página se hace referencia.

Algoritmo de página de uso no muy reciente.

En un fallo de página , el sistema operativo inspecciona todas las páginas y las divide en cuatro categorías según los valores actuales de los bits R y M

Clase 0: No se ha hecho referencia ni ha sido modificada

Clase 1: No se ha hecho referencia pero ha sido modificada

Clase 2: Se ha hecho referencia pero no ha sido modificada

Clase 3: Se ha hecho referencia y ha sido modificada

El algoritmo NRU implica una hipótesis que indica que es mejor eliminar una página modificada sin referencias al menos por lo general un intervalo de reloj, este algoritmo es fácil de comprender, de implantación eficiente y con un rendimiento que, aún sin ser el óptimo si es adecuado en muchos casos.

• Algoritmo de reemplazo ” primero en entrar, primero en salir FIFO”

El sistema operativo tiene una lista de todas las páginas que se encuentran en memoria, siendo la primera página la mas antigua y la última la mas reciente, en un fallo de página, se elimina la primera página y se añade la nueva al final de la lista.

• Algoritmo de reemplazo de páginas de la segunda oportunidad

Una modificación simple del FIFO que evita deshacerse de una página de uso frecuente inspecciona el bit R de la página mas antigua, busca una página antigua sin referencias durante el anterior intervalo de tiempo.

• Algoritmo de reemplazo de páginas del reloj

Aunque el anterior algoritmo es razonable un mejor enfoque es mantener las páginas en una lista circular con la forma de un reloj, una manecilla apunta hacia la mas antigua. Al ocurrir un fallo de página se inspecciona la página a la que apunta la manecilla si su bit R=0 se retira de la memoria, se inserta la nueva página en su lugar en el reloj y la manecilla avanza una posición, si R=1 la manecilla avanza una posición y el bit se limpia, esto continua hasta encontrar una página con R=0.

• Segmentación

La memoria virtual que hemos analizado hasta ahora es unidimensional, puesto que cada segmento constituye un espacio independiente de direcciones, los distintos segmentos pueden crecer o reducirse en forma independiente sin afectar a los demás.

Una memoria segmentada tiene otras ventajas como hacer mas sencilla la administración de las estructuras de datos que crecen o se reducen, si cada procedimiento ocupa un segmento independiente con la posición inicial cero el ligado independiente de los procesos compilados es mucho mas sencillo.

Bit que se activa si se hace referencia a la página en cuestión

Bit que se activa si se modifica la página



Elementos de un Sistema Operativo – Administrador de procesos



Esquema de Administracion de Procesos

El siguiente documento describe las características que presentan los sistemas operativos para la administración de procesos en los sistemas mono y multiprocesadores. Se comienza con una introducción sobre la funcionalidad de un proceso para luego entrar en los detalles de implementación típicos de los sistemas operativos. Aún no termine la totalidad del documento pero lo quiero publicar en Internet para obtener feedback por parte de los lectores interesados en el mismo.

Procesos

¿Qué es un proceso?

Un proceso es un programa en ejecución. Un proceso simple tiene un hilo de ejecución, por el momento dejemos esta última definición como un concepto, luego se verá en más detalle el concepto de hilo. Una vez definido que es un proceso nos podríamos preguntar cuál es la diferencia entre un programa y un proceso, y básicamente la diferencia es que un proceso es una actividad de cierto tipo que contiene un programa, entradas salidas y estados.

Los procesos pueden ser cooperantes o independientes, en el primer caso se entiende que los procesos interactúan entre sí y pertenecen a una misma aplicación. En el caso de procesos independientes en general se debe a que no interactúan y un proceso no requiere información de otros o bien porque son procesos que pertenecen a distintos usuarios.

Estados de los procesos

Un proceso puede estar en cualquiera de los siguientes tres estados: Listo, En ejecución y Bloqueado.

Los procesos en el estado listo son los que pueden pasar a estado de ejecución si el planificador los selecciona. Los procesos en el estado ejecución son los que se están ejecutando en el procesador en ese momento dado. Los procesos que se encuentran en estado bloqueado están esperando la respuesta de algún otro proceso para poder continuar con su ejecución. Por ejemplo operación de E/S.



Implantación de los procesos

La implementación del modelo de procesos se logra debido a que el sistema operativo almacena en una tabla denominada tabla de control de procesos información relativa a cada proceso que se esta ejecutando en el procesador. Cada línea de esta tabla representa a un proceso.

La información que se almacena es la siguiente:

1) Identificación del proceso.

2) Identificación del proceso padre.

3) Información sobre el usuario y grupo.

4) Estado del procesador.

5) Información de control de proceso

5.1) Información del planificador.

5.2) Segmentos de memoria asignados.

5.3) Recursos asignados.

Comunicación entre procesos

Condiciones de competencia

Las condiciones de competencia se dan cuando dos o más procesos intentan acceder a un mismo recurso.

Secciones críticas

Para solucionar las condiciones de competencia se implementó un modelo para prohibir que dos procesos accedan al mismo recurso. El modelo en cuestión se denomina exclusión mutua.

Exclusión mutua con espera ocupada

Las soluciones con espera ocupada funcionan de la siguiente manera, cuando un proceso intenta ingresar a su región crítica, verifica si esta permitida la entrada. Si no, el proceso se queda esperando hasta obtener el permiso.

Desactivación de interrupciones

El método más simple para evitar las condiciones de competencia es hacer que cada proceso desactive todas sus interrupciones antes de entrar a su sección crítica y las active una vez que salio de la misma. Este modelo como se puede observar, éste modelo tiene una gran problema y es que si se produce una falla mientras que el proceso esta en la región crítica no se puede salir de la misma y el sistema operativo no recuperaría el control.

Variables cerradura

En éste caso se genera una variable la cual puede tener dos valores o bien 0 (no hay ningún proceso en su sección crítica) o bien 1 (indicando que la sección crítica está ocupada) entonces cada proceso antes de ingresar a la sección crítica verifica el estado de la variable de cerradura y en caso de que la misma este en 0, le cambia el valor e ingresa a la misma y en caso de que la misma sea 1 el proceso se queda verificando el estado de la misma hasta que el mismo sea 0.

El problema aquí se presenta si dos procesos verifican al mismo tiempo que la variable cerradura esta en 0 e ingresan a la región crítica.

Alternancia estricta

El algoritmo de alternancia estricta no bloquea el ingreso a la región crítica cuando otro proceso se esta ejecutando. El problema de ésta solución es que cuando un proceso no esta en la sección crítica igualmente tiene bloqueado el acceso a la misma y por lo tanto no permite que otro proceso que requiera ingresar a la misma logre hacerlo.

Instrucción TSL

Esta solución requiere ayuda del hardware y es debido a que en general las computadoras diseñadas para tener más de un procesador tienen una instrucción TEST AND SET LOCK

Dormir y despertar

El modelo de espera acotada tienen el inconveniente que se desperdicia tiempo de procesador.

El problema del productor y el consumidor

El problema del productor y el consumidor describe el echo de que cuando hay dos o más procesos interactuando a través de un buffer común habiendo procesos que ponen información o datos y otros que los sacan se pueden llegar a dar condiciones en las cuales los procesos que ingresan los datos no puedan hacerlo debido a que el buffer ya se encuentra lleno y para el caso de los que sacan los datos del buffer intenten sacar datos cuando ya no hay nada que sacar. Para evitar estas condiciones se desarrollaron métodos de comunicación/sincronización entre procesos en los cuales se impide que esto suceda haciendo que el proceso productor “duerma” si el buffer está lleno y una vez que exista espacio el proceso “consumidor” despierte al productor para que siga generando o viceversa.

Planificación de procesos

La planificación es el proceso por el cual el sistema operativo selecciona que proceso ejecutar. La selección del proceso se basa en alguno de los algoritmos de planificación que se describen más abajo.

Expulsión

Es la característica por el cual el sistema operativo puede o no expulsar del estado de ejecución a un proceso dado. En este sentido entonces tenemos la planificación apropiativa en la cual el sistema operativo puede cortar en cualquier momento la ejecución de un proceso y la planificación no apropiativa en la cual una vez que el proceso esta en ejecución el sistema operativo no puede sacarlo de ese estado.

Objetivos de la planificación

Los objetivos de la planificación de proceso son:

• Equidad, todos los procesos deben poder ejecutarse

• Eficacia, mantener ocupada la CPU un 100% del tiempo

• Tiempo de respuesta, minimizar el tiempo de respuesta al usuario

• Tiempo de regreso, minimizar el tiempo que deben esperar los usuarios por lotes para obtener sus resultados

• Rendimiento, maximizar el número de tareas procesadas por hora.

Algoritmos de planificación

Los algoritmos de planificación son los que definen que política se va a seguir para que un proceso pase al estado de ejecución.

Planificación Round-Robin

En este tipo de planificación cada proceso tiene asignado un quantum de tiempo para ejecutarse y en el caso de que no pueda terminar la ejecución en su quantum el proceso pasa de nuevo a la cola de procesos para ser ejecutado por otro quantum luego de recorrer la cola para asegurarse que todos los procesos reciban ese quantum de procesamiento.

Planificación por prioridad

En la planificación round-robin todos los procesos son tratados con la misma prioridad. Para el caso de este tipo de planificación a cada proceso se le asigna una prioridad y los mismos son ejecutados

Colas múltiples

Las colas múltiples están basadas en una pila que sirve como índice de una lista de procesos que se tienen que ejecutar.

Primero el trabajo más corto

Este tipo de algoritmo de planificación se usa para trabajos en batch o de procesamiento or lotes en los cuales se puede saber cual es el tiempo de duración de la ejecución de cada proceso y entonces se puede seleccionar primero el trabajo más corto. El problema que se presenta con éste algoritmo es que los grandes procesos podrían sufrir de inanición dado que cualquier proceso pequeño se “cuela” sobre uno de mayor tamaño y como resultado final se podría dar el caso que el proceso grande nunca obtenga procesamiento.

Planificación garantizada

En este modelo de planificación se tiene en cuenta la cantidad de usuarios en el sistema y se le asigna a cada uno el tiempo de ejecución de 1/n (siendo n la cantidad total de usuarios) de esa forma el planificador tiene que llevar cuenta del tiempo de ejecución de los procesos y balancear el tiempo que están utilizando el procesador para cumplir con la ecuación previa.

Procesos ligeros

Los procesos ligeros son programas en ejecución son básicamente procesos pero a diferencia de éstos últimos que solo tienen un hilo de ejecución los primeros tienen el hilo principal más hilos secundarios o hijos, en éste caso todos los procesos hijos comparten la información del hilo principal pero además puede cada hilo tener su información privada.

Dentro de la información propia tenemos:

• Contador de programa

• Pila

• Registros.

• Estado del proceso ligero.

• Dentro de la información compartida tenemos:

• Variables globales.

• Archivos abiertos

• Señales

• Semáforos.

• Contabilidad.

Señales

Las señales son el mecanismo de comunicación que se establece entre los procesos. Para comparar se puede decir que las señales son a los procesos lo que las interrupciones son al procesador. Cuando un proceso recibe una señal detiene su ejecución, bifurca a la rutina del tratamiento de la señal que esta en el mismo proceso y luego una vez finalizado sigue la ejecución en el punto que había bifurcado anteriormente.

Las señales se pueden originar en un proceso o bien en el sistema operativo. Las señales se pueden enviar entre procesos, solo los que tengan el mismo uid, o bien el sistema operativo puede enviarle una señal a un proceso, por ejemplo excepciones de ejecución.

                                              Clasificacion de Sistemas Operativos


                                                                        Sistemas Operativos

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

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.

Cuando estos sistemas son bien planeados, pueden tener un tiempo de ejecución muy alto, porque el procesador es mejor utilizado y los Sistemas Operativos pueden ser simples, debido a la secuenciabilidad de la ejecución de los trabajos.

Algunos ejemplos de Sistemas Operativos por lotes exitosos son el SCOPE, del DC6600, el cual está orientado a procesamiento científico pesado, y el EXEC II para el UNIVAC 1107, orientado a procesamiento académico.

Algunas otras características con que cuentan los Sistemas Operativos por lotes son:

• Requiere que el programa, datos y órdenes al sistema sean remitidos todos juntos en forma de lote.

• Permiten poca o ninguna interacción usuario/programa en ejecución.

• Mayor potencial de utilización de recursos que procesamiento serial simple en sistemas multiusuarios.

• No conveniente para desarrollo de programas por bajo tiempo de retorno y depuración fuera de línea.

• Conveniente para programas de largos tiempos de ejecución (ej, análisis estadísticos, nóminas de personal, etc.).

• Se encuentra en muchos computadores personales combinados con procesamiento serial.

• Planificación del procesador sencilla, típicamente procesados en orden de llegada.

• Planificación de memoria sencilla, generalmente se divide en dos: parte residente del S.O. y programas transitorios.

• No requieren gestión crítica de dispositivos en el tiempo.

• Suelen proporcionar gestión sencilla de manejo de archivos: se requiere poca protección y ningún control de concurrencia para el acceso.

Sistemas Operativos de tiempo real.

Los Sistemas Operativos de tiempo real son aquellos en los cuales no tiene importancia el usuario, sino los procesos. Por lo general, están subutilizados sus recursos con la finalidad de prestar atención a los procesos en el momento que lo requieran. se utilizan en entornos donde son procesados un gran número de sucesos o eventos.

Muchos Sistemas Operativos de tiempo real son construidos para aplicaciones muy específicas como control de tráfico aéreo, bolsas de valores, control de refinerías, control de laminadores. También en el ramo automovilístico y de la electrónica de consumo, las aplicaciones de tiempo real están creciendo muy rápidamente. Otros campos de aplicación de los Sistemas Operativos de tiempo real son los siguientes:

• Control de trenes.

• Telecomunicaciones.

• Sistemas de fabricación integrada.

• Producción y distribución de energía eléctrica.

• Control de edificios.

• Sistemas multimedia.

Algunos ejemplos de Sistemas Operativos de tiempo real son: VxWorks, Solaris, Lyns OS y Spectra. Los Sistemas Operativos de tiempo real, cuentan con las siguientes características:

• Se dan en entornos en donde deben ser aceptados y procesados gran cantidad de sucesos, la mayoría externos al sistema computacional, en breve tiempo o dentro de ciertos plazos.

• Se utilizan en control industrial, conmutación telefónica, control de vuelo, simulaciones en tiempo real., aplicaciones militares, etc.

• Objetivo es proporcionar rápidos tiempos de respuesta.

• Procesa ráfagas de miles de interrupciones por segundo sin perder un solo suceso.

• Proceso se activa tras ocurrencia de suceso, mediante interrupción.

• Proceso de mayor prioridad expropia recursos.

• Por tanto generalmente se utiliza planificación expropiativa basada en prioridades.

• Gestión de memoria menos exigente que tiempo compartido, usualmente procesos son residentes permanentes en memoria.

• Población de procesos estática en gran medida.

• Poco movimiento de programas entre almacenamiento secundario y memoria.

• Gestión de archivos se orienta más a velocidad de acceso que a utilización eficiente del recurso.

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

Características de los Sistemas Operativos de tiempo compartido:

• Populares representantes de sistemas multiprogramados multiusuario, ej: sistemas de diseño asistido por computador, procesamiento de texto, etc.

• Dan la ilusión de que cada usuario tiene una máquina para sí.

• Mayoría utilizan algoritmo de reparto circular.

• Programas se ejecutan con prioridad rotatoria que se incrementa con la espera y disminuye después de concedido el servicio.

• Evitan monopolización del sistema asignando tiempos de procesador (time slot).

• Gestión de memoria proporciona protección a programas residentes.

• Gestión de archivo debe proporcionar protección y control de acceso debido a que pueden existir múltiples usuarios accesando un mismo archivos.

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

Los sistemas distribuidos deben de ser muy confiables, ya que si un componente del sistema se compone otro componente debe de ser capaz de reemplazarlo.

Entre los diferentes Sistemas Operativos distribuidos que existen tenemos los siguientes: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos, etc.

Características de los Sistemas Operativos distribuidos:

• Colección de sistemas autónomos capaces de comunicación y cooperación mediante interconexiones hardware y software .

• Gobierna operación de un S.C. y proporciona abstracción de máquina virtual a los usuarios.

• Objetivo clave es la transparencia.

• Generalmente proporcionan medios para la compartición global de recursos.

• Servicios añadidos: denominación global, sistemas de archivos distribuidos, facilidades para distribución de cálculos (a través de comunicación de procesos internodos, llamadas a procedimientos remotos, etc.).

Sistemas Operativos de red.

Son aquellos sistemas que mantienen a dos o más computadoras unidas atravé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 mas 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.

Historia, Evolucion y Generaciones de los S.O .
Historia de los Sistemas Operativos

Años 40

A finales de los años 40, con lo que podríamos llamar la aparición de la primera generación de computadoras, se accedía directamente a la consola de la computadora desde la cual se actuaba sobre una serie de micro interruptores que permitían introducir directamente el programa en la memoria de la computadora (en realidad al existir tan pocas computadoras todos podrían considerarse prototipos y cada constructor lo hacía sin seguir ningún criterio predeterminado). Por aquel entonces no existían los sistemas operativos, y los programadores debían interactuar con el hardware del computador sin ayuda externa. Esto hacía que el tiempo de preparación para realizar una tarea fuera considerable.

Años 50

A principios de los años 50 con el objeto de facilitar la interacción entre persona y computador, los sistemas operativos hacen una aparición discreta y bastante simple, con conceptos tales como el monitor residente, el proceso por lotes y el almacenamiento temporal.

Monitor residente



Su funcionamiento era bastante simple, se limitaba a cargar los programas a memoria, leyéndolos de una cinta o de tarjetas perforadas, y ejecutarlos. El problema era encontrar una forma de optimizar el tiempo entre la retirada de un trabajo y el montaje del siguiente. Era sumamente complicado, por el hecho de que eran tarjetas perforadas las cuales las tenia que leer el sistema.

Procesamiento por lotes

Como solución para optimizar, en un mismo núcleo de cinta o conjunto de tarjetas se montaban los programas, de forma que se ejecutaran uno a continuación de otro sin perder apenas tiempo en la transición.

Almacenamiento temporal

Su objetivo era disminuir el tiempo de carga de los programas, haciendo simultánea la carga del programa o la salida de datos con la ejecución de la siguiente tarea. Para ello se utilizaban dos técnicas, el buffering y el spooling.

Años 60

En los años 60 se produjeron cambios notorios en varios campos de la informática, con la aparición del circuito integrado la mayoría orientados a seguir incrementando el potencial de los computadores. Para ello se utilizaban técnicas de lo más diversas:

Multiprogramación

En un sistema multiprogramado la memoria principal alberga a más de un programa de usuario. La CPU ejecuta instrucciones de un programa, cuando el que se encuentra en ejecución realiza una operación de E/S; en lugar de esperar a que termine la operación de E/S, se pasa a ejecutar otro programa. Si éste realiza, a su vez, otra operación de E/S, se mandan las órdenes oportunas al controlador, y pasa a ejecutarse otro. De esta forma es posible, teniendo almacenado un conjunto adecuado de tareas en cada momento, utilizar de manera óptima los recursos disponibles.

Tiempo compartido



En este punto tenemos un sistema que hace buen uso de la electrónica disponible, pero adolece la falta de interactividad; para conseguirla debe convertirse en un sistema multiusuario, en el cual existen varios usuarios con un terminal en línea, utilizando el modo de operación de tiempo compartido. En estos sistemas los programas de los distintos usuarios residen en memoria. Al realizar una operación de E/S los programas ceden la CPU a otro programa, al igual que en la multiprogramación. Pero, a diferencia de ésta, cuando un programa lleva cierto tiempo ejecutándose el sistema operativo lo detiene para que se ejecute otra aplicación.

Tiempo real

Estos sistemas se usan en entornos donde se deben aceptar y procesar en tiempos muy breves un gran número de sucesos, en su mayoría externos al ordenador. Si el sistema no respeta las restricciones de tiempo en las que las operaciones deben entregar su resultado se dice que ha fallado. El tiempo de respuesta a su vez debe servir para resolver el problema o hecho planteado. El procesamiento de archivos se hace de una forma continua, pues se procesa el archivo antes de que entre el siguiente, sus primeros usos fueron y siguen siendo en telecomunicaciones.

Multiprocesador

Permite trabajar con máquinas que poseen más de un microprocesador. En un multiprocesador

Se denomina multiprocesador a un ordenador que cuenta con dos o más microprocesadores (CPUs).

Gracias a esto, el multiprocesador puede ejecutar simultáneamente varios hilos pertenecientes a un mismo proceso o bien a procesos diferentes.

Los ordenadores multiprocesadores presentan problemas de diseño que no se encuentran en ordenadores monoprocesador. Estos problemas derivan del hecho de que dos programas pueden ejecutarse simultáneamente y, potencialmente, pueden interferirse entre sí. Concretamente, en lo que se refiere a las lecturas y escrituras en memoria. Existen dos arquitecturas que resuelven estos problemas:

La arquitectura NUMA, donde cada procesador tiene acceso y control exclusivo a una parte de la memoria. La arquitectura SMP, donde todos los procesadores comparten toda la memoria. Esta última debe lidiar con el problema de la coherencia de caché. Cada microprocesador cuenta con su propia memoria cache local. De manera que cuando un microprocesador escribe en una dirección de memoria, lo hace únicamente sobre su copia local en caché. Si otro microprocesador tiene almacenada la misma dirección de memoria en su caché, resultará que trabaja con una copia obsoleta del dato almacenado.

Para que un multiprocesador opere correctamente necesita un sistema operativo especialmente diseñado para ello. La mayoría de los sistemas operativos actuales poseen esta capacidad.

Sistemas operativos desarrollados

Además del Atlas Supervisor y el OS/360, los años 70 marcaron el inicio de UNIX, a mediados de los 60 aparece Multics, sistema operativo multiusuario – multitarea desarrollado por los laboratorios Bell de AT&T y programado en PL/1 uno de los pocos SO desarrollados en un lenguaje de alto nivel en aquel tiempo, luego del fracaso del proyecto, UNIX comienza a desarrollarse a partir de este a finales de la década.

Años 70

Debido al avance de la electrónica, pudo empezar a crearse circuitos con miles de transistores en un centímetro cuadrado de silicio, lo que llevaría, pocos años después, a producir los primeros sistemas integrados. Ésta década se podría definir como la de los sistemas de propósito general y en ella se desarrollan tecnologías que se siguen utilizando en la actualidad. Es en los años 70 cuando se produce el boom de los miniordenadores y la informática se acerca al nivel de usuario.

En lo relativo a lenguajes de programación, es de señalar la aparición de Pascal y C, el último de los cuales se creó específicamente para reescribir por completo el código del sistema operativo Unix, convirtiéndolo en uno de los pocos SO escritos en un lenguaje de alto nivel. En el campo de la programación lógica se dio a luz la primera implementación de Prolog, y en la revolucionaria orientación a objetos, Smalltalk.

Inconvenientes de los sistemas existentes

Se trataba de sistemas grandes y costosos, pues antes no se había construido nada similar y muchos de los proyectos desarrollados terminaron con costos muy por encima del presupuesto y mucho después de lo que se marcaba como fecha de finalización. Además, aunque formaban una capa entre el hardware y el usuario, éste debía conocer un complejo lenguaje de control para realizar sus trabajos. Otro de los inconvenientes es el gran consumo de recursos que ocasionaban, debido a los grandes espacios de memoria principal y secundaria ocupados, así como el tiempo de procesador consumido. Es por esto que se intentó hacer hincapié en mejorar las técnicas ya existentes de multiprogramación y tiempo compartido.

Características de los nuevos sistemas

Para solventar los problemas antes comentados, se realizó un costosísimo trabajo para interponer una amplia capa de software entre el usuario y la máquina, de forma que el primero no tuviese que conocer ningún detalle de la circuitería.

Sistemas operativos desarrollados

• MULTICS (Multiplexed Information and Computing Service): Originalmente era un proyecto cooperativo liderado por Fernando Corbató del MIT, con General Electric y los laboratorios Bell, que comenzó en los 60, pero los laboratorios Bell abandonaron en 1969 para comenzar a crear el sistema UNIX. Se desarrolló inicialmente para el mainframe GE-645, un sistema de 36 bits; después fue soportado por la serie de máquinas Honeywell 6180.

Fue uno de los primeros sistemas operativos de tiempo compartido, que implementó un solo nivel de almacenamiento para el acceso a los datos, desechando la clara distinción entre los ficheros y los procesos en memoria, y uno de los primeros sistemas multiprocesador.

• MVS (Multiple Virtual Storage): Fue el sistema operativo más usado en los modelos de mainframes -ordenadores grandes, potentes y caros usados principalmente por grandes compañías para el procesamiento de grandes cantidades de datos- System/370 y System/390 de IBM, desarrollado también por IBM y lanzado al mercado por primera vez en 1974. Como características destacables, permitía la ejecución de múltiples tareas, además de que introdujo el concepto de memoria virtual y finalmente añadió la capacidad de que cada programa tuviera su propio espacio de direccionamiento de memoria, de ahí su nombre.

• CP/M (Control Program/Monitor): Desarrollado por Gary Kildall para el microprocesador 8080/85 de Intel y el Zilog Z80, salió al mercado en 1976, distribuyéndose en disquetes de ocho pulgadas. Fue el SO más usado en las computadoras personales de esta década. Su éxito se debió a que era portátil, permitiendo que diferentes programas interactuasen con el hardware de una manera estandarizada. Estaba compuesto de dos subsistemas:

o CCP (Comand Control Processor): Intérprete de comandos que permitía introducir los mandatos con sus parámetros separados por espacios. Además, los traducía a instrucciones de alto nivel destinadas a BDOS.

o BDOS (Basic Disk Operating System): Traductor de las instrucciones en llamadas a la BIOS.

El hecho de que, años después, IBM eligiera para sus PC a MS-DOS supuso su mayor fracaso, por lo que acabó desapareciendo.

Años 80

Con la creación de los circuitos LSI -integración a gran escala-, chips que contenían miles de transistores en un centímetro cuadrado de silicio, empezó el auge de los ordenadores personales. En éstos se dejó un poco de lado el rendimiento y se buscó más que el sistema operativo fuera amigable, surgiendo menús, e interfaces gráficas. Esto reducía la rapidez de las aplicaciones, pero se volvían más prácticos y simples para los usuarios. En esta época, siguieron utilizándose lenguajes ya existentes, como Smalltalk o C, y nacieron otros nuevos, de los cuales se podrían destacar: C++ y Eiffel dentro del paradigma de la orientación a objetos, y Haskell y Miranda en el campo de la programación declarativa. Un avance importante que se estableció a mediados de la década de 1980 fue el desarrollo de redes de computadoras personales que corrían sistemas operativos en red y sistemas operativos distribuidos. En esta escena, dos sistemas operativos eran los mayoritarios: MS-DOS(Micro Soft Disk Operating System), escrito por Microsoft para IBM PC y otras computadoras que utilizaban la CPU Intel 8088 y sus sucesores, y UNIX, que dominaba en los ordenadores personales que hacían uso del Motorola 68000.

Apple Macintosh

se produjo en enero de 1984, al precio de 2495 dólares. Muchos usuarios, al ver que estaba completamente diseñado para funcionar a través de una GUI (Graphic User Interface), acostumbrados a la línea de comandos, lo tacharon de juguete. A pesar de todo, el Mac se situó a la cabeza en el mundo de la edición a nivel gráfico.

MS-DOS

En 1981 Microsoft compró un sistema operativo llamado QDOS que, tras realizar unas pocas modificaciones, se convirtió en la primera versión de MS-DOS (MicroSoft Disk Operating System). A partir de aquí se sucedieron una serie de cambios hasta llegar a la versión 7.1, versión 8 en Windows Milenium, a partir de la cual MS-DOS dejó de existir como tal y se convirtió en una parte integrada del sistema operativo Windows.

Años 90

GNU/Linux

La idea de un Sistema Operativo Libre para la humanidad nace en 1984, impulsada por Richard Stallman, ex-empleado del MIT. Motivado por esta idea comienza la construcción y desarrollo de las herramientas elementales que componen un Sistema Operativo, a esta parte del desarrollo del Sistema Operativo se le conoce como proyecto GNU. En esta etapa Richard Stallman cuenta con la colaboración de miles de programadores a nivel mundial. En 1991 aparece la primera versión del núcleo Linux. Creado por Linus Torvalds, pero antes de que este apareciera ya existía la mayoría de las herramientas que componían al Sistema Operativo, pero aun así el núcleo Linux tiene una importancia fundamental para el proyecto, es tal la importancia de este que el proyecto termina llamándose GNU/Linux, dando un 50% de importancia a ambas partes.

Este sistema es similar a Unix, basado en el estándar POSIX , un sistema que en principio trabajaba en modo comandos. Hoy en día dispone de Ventanas, gracias a un servidor gráfico y a gestores de ventanas como KDE, GNOME entre muchos. Recientemente GNU/Linux dispone de un aplicativo que convierte las ventanas en un entorno 3D como por ejemplo Beryl o Compiz. Lo que permite utilizar linux de una forma visual atractiva.

Microsoft Windows

A mediados de los años 80 se crea este sistema operativo, pero no es hasta la salida de Windows 95 que se le puede considerar un sistema operativo, solo era una interfaz gráfica del MS-DOS. Hoy en día es el sistema operativo más difundido en el ámbito doméstico aunque también hay versiones para servidores como Windows NT. Microsoft ha diseñado también algunas versiones para superordenadores, pero sin mucho éxito. Años después se hizo el Windows 98 que era el más eficaz de esa época Después se crearía el sistema operativo de Windows ME (Windows Millenium Edition) aproximadamente entre el año 1999 y el año 2000. Un año después se crearía el sistema operativo de Windows 2000 en ese mismo año. Después le seguiría el sistema operativo más utilizado en la actualidad, Windows XP y otros sistemas operativos de esta familia especializados en las empresas. Ahora el más reciente es Windows Vista, que, actualmente, tiene muchas críticas. Ahora está en desarrollo el sistema operativo Windows 7, que ya salio al mercado

Funciones, servicios y partes de un Sistema Operativo




Estructura de un Sistema Operativo

Funciones De un Sistema Operativo

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.

Linux casi siempre ha sido considerado como un sistema operativo, pero esto no es totalmente cierto. Linux es tan solo el kernel del sistema operativo, es decir, el núcleo que se encarga de realizar todo el trabajo al controlar de forma directa todos los recursos y dispositivos del sistema, así como el más importante, el procesador.

El kernel entra en acción justo después de las verificaciones de la BIOS (Basic Input Output System), y toma el control del sistema, pudiendo llegar a detectar dispositivos que no fueron detectados por la BIOS. Una vez funcionando, el kernel se encarga de repartir los ciclos del reloj entre los diferentes procesos concurrentes, asignando a cada uno de ellos una porción suficiente de memoria y asegurándose de que no interfieran entre ellos.

Al mismo tiempo que los mantiene protegidos entre sí, también les proporciona la comunicación necesaria entre ellos, pues gestiona la comunicación entre procesos, que es uno de los pilares fundamentales en la definición de un sistema Unix. Y, por supuesto, también se encarga del control a bajo nivel de los dispositivos periféricos, desde los discos duros hasta los dispositivos móviles como las unidades ZIP, pasando por los dispositivos de entrada/salida que permiten la interacción con el usuario.

Es decir, el kernel constituye el sistema operativo, pero en la definición también entra el conjunto de comandos que permiten al usuario interaccionar con él. Y esos comandos, que son los que el usuario llama sistema operativo, no forman parte de Linux, si no que son desarrollados por grupos independientes, en bastantes ocasiones ajenos al sistema Linux, pero siempre pertenecientes a la más amplia comunidad Unix.

Esto es posiblemente el segundo punto fuerte de Linux, pues le permite acceder a una amplia gama de programas y utilidades, robustas y completamente depuradas después de muchos años de uso en plataformas Unix, y cuya migración a Linux requiere de unas mínimas variaciones en el código en el peor de los casos, ya que internamente no existen diferencias. Obtenemos la ventaja añadida de que al tratarse normalmente de programas de código abierto, la migración se facilita enormemente al permitir la colaboración directa y sin obstáculos entre diferentes grupos de desarrollo.




Aplicaciones, aplicaciones y más aplicaciones

Dentro de este conjunto de comandos englobamos desde los íntimamente relacionados con el sistema operativo hasta utilidades de tipo general, cuya historia no tiene que tener relación directa con Linux. Esta amplia variedad permite la existencia de muy diferentes distribuciones de Linux.

Dentro de este grupo de aplicaciones, merecen atención especial las relacionadas con los aspectos gráficos que, sin ser parte de Linux, son las que mayores preguntas y quebraderos de cabeza producen.

Linux trabaja usando principalmente X11, que es el protocolo estándar cliente/servidor de las estaciones de trabajo. El desarrollo de los servidores y clientes definidos como parte del entorno X Window es llevado a cabo por un conjunto de programadores agrupados en el consorcio XFree86, cuyo campo de acción va más allá del entorno Linux, incluyendo otros Unix para PC.

Aunque X Window es un sistema de ventanas sumamente potente y flexible de por sí, carece de algunas propiedades que el usuario de PC atribuye al sistema de ventanas.

La primera de ellas es que el gestor de ventanas, que permite a los usuarios manejar los elementos visuales sobre la pantalla, no forma parte de la definición del protocolo. Aunque la distribución estándar del sistema incluye un gestor completamente funcional, existen más de una docena de gestores alternativos, bastante más potentes y que hacen hincapié en aspectos diferentes, permitiendo al usuario una amplia gama para elegir y añadiendo una elevada capacidad para ser configurado al gusto del usuario.

La segunda característica que extraña al usuario habitual es la ausencia de escritorios, que hace un par de años se empezaron a desarrollar para Linux, y que a estas alturas ya son perfectamente funcionales. Los más conocidos son KDE y GNOME, los cuales dotan al entorno de ventanas de las capacidades típicas de un escritorio Windows, al cual la mayor parte de los usuarios están acostumbrados.

Funciones de un Sistema Operativo



Sistemas Operativos

Funciones De un Sistema Operativo

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.

Sistemas Operativos – Conceptos basicos



Logo Linux




Logo de Windows 7

Un sistema operativo es un software de sistema, es decir, un conjunto de programas de computación destinados a realizar muchas tareas entre las que destaca la administración de los dispositivos periféricos.

Cuando se aplica voltaje al procesador de un dispositivo electrónico, éste ejecuta un reducido código en lenguaje ensamblador localizado en una dirección concreta en la ROM (dirección de reset) y conocido como reset code, que a su vez ejecuta una rutina con la que se inicializa el hardware que acompaña al procesador. También en esta fase suele inicializarse el controlador de las interrupciones. Finalizada esta fase se ejecuta el código de arranque (startup code), también código en lenguaje ensamblador, cuya tarea más importante es ejecutar el programa principal (main()) del software de la aplicación.[1]

Un sistema operativo se puede encontrar en la mayoría de los aparatos electrónicos que utilicen microprocesadores para funcionar, ya que gracias a éstos podemos entender la máquina y que ésta cumpla con sus funciones (teléfonos móviles, reproductores de DVD, autoradios, computadoras, radios, etc).



MAc OS logo

Historia, Evolucion y Generaciones de los S.O .

Historia de los Sistemas Operativos


Años 40

A finales de los años 40, con lo que podríamos llamar la aparición de la primera generación de computadoras, se accedía directamente a la consola de la computadora desde la cual se actuaba sobre una serie de micro interruptores que permitían introducir directamente el programa en la memoria de la computadora (en realidad al existir tan pocas computadoras todos podrían considerarse prototipos y cada constructor lo hacía sin seguir ningún criterio predeterminado). Por aquel entonces no existían los sistemas operativos, y los programadores debían interactuar con el hardware del computador sin ayuda externa. Esto hacía que el tiempo de preparación para realizar una tarea fuera considerable.

Años 50

A principios de los años 50 con el objeto de facilitar la interacción entre persona y computador, los sistemas operativos hacen una aparición discreta y bastante simple, con conceptos tales como el monitor residente, el proceso por lotes y el almacenamiento temporal.

Monitor residente

Su funcionamiento era bastante simple, se limitaba a cargar los programas a memoria, leyéndolos de una cinta o de tarjetas perforadas, y ejecutarlos. El problema era encontrar una forma de optimizar el tiempo entre la retirada de un trabajo y el montaje del siguiente. Era sumamente complicado, por el hecho de que eran tarjetas perforadas las cuales las tenia que leer el sistema.

Procesamiento por lotes

Como solución para optimizar, en un mismo núcleo de cinta o conjunto de tarjetas se montaban los programas, de forma que se ejecutaran uno a continuación de otro sin perder apenas tiempo en la transición.

Almacenamiento temporal

Su objetivo era disminuir el tiempo de carga de los programas, haciendo simultánea la carga del programa o la salida de datos con la ejecución de la siguiente tarea. Para ello se utilizaban dos técnicas, el buffering y el spooling.

Años 60

En los años 60 se produjeron cambios notorios en varios campos de la informática, con la aparición del circuito integrado la mayoría orientados a seguir incrementando el potencial de los computadores. Para ello se utilizaban técnicas de lo más diversas:

Multiprogramación

En un sistema multiprogramado la memoria principal alberga a más de un programa de usuario. La CPU ejecuta instrucciones de un programa, cuando el que se encuentra en ejecución realiza una operación de E/S; en lugar de esperar a que termine la operación de E/S, se pasa a ejecutar otro programa. Si éste realiza, a su vez, otra operación de E/S, se mandan las órdenes oportunas al controlador, y pasa a ejecutarse otro. De esta forma es posible, teniendo almacenado un conjunto adecuado de tareas en cada momento, utilizar de manera óptima los recursos disponibles.

Tiempo compartido

En este punto tenemos un sistema que hace buen uso de la electrónica disponible, pero adolece la falta de interactividad; para conseguirla debe convertirse en un sistema multiusuario, en el cual existen varios usuarios con un terminal en línea, utilizando el modo de operación de tiempo compartido. En estos sistemas los programas de los distintos usuarios residen en memoria. Al realizar una operación de E/S los programas ceden la CPU a otro programa, al igual que en la multiprogramación. Pero, a diferencia de ésta, cuando un programa lleva cierto tiempo ejecutándose el sistema operativo lo detiene para que se ejecute otra aplicación.

Tiempo real

Estos sistemas se usan en entornos donde se deben aceptar y procesar en tiempos muy breves un gran número de sucesos, en su mayoría externos al ordenador. Si el sistema no respeta las restricciones de tiempo en las que las operaciones deben entregar su resultado se dice que ha fallado. El tiempo de respuesta a su vez debe servir para resolver el problema o hecho planteado. El procesamiento de archivos se hace de una forma continua, pues se procesa el archivo antes de que entre el siguiente, sus primeros usos fueron y siguen siendo en telecomunicaciones.

Multiprocesador

Permite trabajar con máquinas que poseen más de un microprocesador. En un multiprocesador

Se denomina multiprocesador a un ordenador que cuenta con dos o más microprocesadores (CPUs).

Gracias a esto, el multiprocesador puede ejecutar simultáneamente varios hilos pertenecientes a un mismo proceso o bien a procesos diferentes.

Los ordenadores multiprocesadores presentan problemas de diseño que no se encuentran en ordenadores monoprocesador. Estos problemas derivan del hecho de que dos programas pueden ejecutarse simultáneamente y, potencialmente, pueden interferirse entre sí. Concretamente, en lo que se refiere a las lecturas y escrituras en memoria. Existen dos arquitecturas que resuelven estos problemas:

La arquitectura NUMA, donde cada procesador tiene acceso y control exclusivo a una parte de la memoria. La arquitectura SMP, donde todos los procesadores comparten toda la memoria. Esta última debe lidiar con el problema de la coherencia de caché. Cada microprocesador cuenta con su propia memoria cache local. De manera que cuando un microprocesador escribe en una dirección de memoria, lo hace únicamente sobre su copia local en caché. Si otro microprocesador tiene almacenada la misma dirección de memoria en su caché, resultará que trabaja con una copia obsoleta del dato almacenado.

Para que un multiprocesador opere correctamente necesita un sistema operativo especialmente diseñado para ello. La mayoría de los sistemas operativos actuales poseen esta capacidad.

Sistemas operativos desarrollados

Además del Atlas Supervisor y el OS/360, los años 70 marcaron el inicio de UNIX, a mediados de los 60 aparece Multics, sistema operativo multiusuario – multitarea desarrollado por los laboratorios Bell de AT&T y programado en PL/1 uno de los pocos SO desarrollados en un lenguaje de alto nivel en aquel tiempo, luego del fracaso del proyecto, UNIX comienza a desarrollarse a partir de este a finales de la década.

Años 70

Debido al avance de la electrónica, pudo empezar a crearse circuitos con miles de transistores en un centímetro cuadrado de silicio, lo que llevaría, pocos años después, a producir los primeros sistemas integrados. Ésta década se podría definir como la de los sistemas de propósito general y en ella se desarrollan tecnologías que se siguen utilizando en la actualidad. Es en los años 70 cuando se produce el boom de los miniordenadores y la informática se acerca al nivel de usuario.

En lo relativo a lenguajes de programación, es de señalar la aparición de Pascal y C, el último de los cuales se creó específicamente para reescribir por completo el código del sistema operativo Unix, convirtiéndolo en uno de los pocos SO escritos en un lenguaje de alto nivel. En el campo de la programación lógica se dio a luz la primera implementación de Prolog, y en la revolucionaria orientación a objetos, Smalltalk.

Inconvenientes de los sistemas existentes

Se trataba de sistemas grandes y costosos, pues antes no se había construido nada similar y muchos de los proyectos desarrollados terminaron con costos muy por encima del presupuesto y mucho después de lo que se marcaba como fecha de finalización. Además, aunque formaban una capa entre el hardware y el usuario, éste debía conocer un complejo lenguaje de control para realizar sus trabajos. Otro de los inconvenientes es el gran consumo de recursos que ocasionaban, debido a los grandes espacios de memoria principal y secundaria ocupados, así como el tiempo de procesador consumido. Es por esto que se intentó hacer hincapié en mejorar las técnicas ya existentes de multiprogramación y tiempo compartido.

Características de los nuevos sistemas

Para solventar los problemas antes comentados, se realizó un costosísimo trabajo para interponer una amplia capa de software entre el usuario y la máquina, de forma que el primero no tuviese que conocer ningún detalle de la circuitería.

Sistemas operativos desarrollados

• MULTICS (Multiplexed Information and Computing Service): Originalmente era un proyecto cooperativo liderado por Fernando Corbató del MIT, con General Electric y los laboratorios Bell, que comenzó en los 60, pero los laboratorios Bell abandonaron en 1969 para comenzar a crear el sistema UNIX. Se desarrolló inicialmente para el mainframe GE-645, un sistema de 36 bits; después fue soportado por la serie de máquinas Honeywell 6180.

Fue uno de los primeros sistemas operativos de tiempo compartido, que implementó un solo nivel de almacenamiento para el acceso a los datos, desechando la clara distinción entre los ficheros y los procesos en memoria, y uno de los primeros sistemas multiprocesador.

• MVS (Multiple Virtual Storage): Fue el sistema operativo más usado en los modelos de mainframes -ordenadores grandes, potentes y caros usados principalmente por grandes compañías para el procesamiento de grandes cantidades de datos- System/370 y System/390 de IBM, desarrollado también por IBM y lanzado al mercado por primera vez en 1974. Como características destacables, permitía la ejecución de múltiples tareas, además de que introdujo el concepto de memoria virtual y finalmente añadió la capacidad de que cada programa tuviera su propio espacio de direccionamiento de memoria, de ahí su nombre.

• CP/M (Control Program/Monitor): Desarrollado por Gary Kildall para el microprocesador 8080/85 de Intel y el Zilog Z80, salió al mercado en 1976, distribuyéndose en disquetes de ocho pulgadas. Fue el SO más usado en las computadoras personales de esta década. Su éxito se debió a que era portátil, permitiendo que diferentes programas interactuasen con el hardware de una manera estandarizada. Estaba compuesto de dos subsistemas:

o CCP (Comand Control Processor): Intérprete de comandos que permitía introducir los mandatos con sus parámetros separados por espacios. Además, los traducía a instrucciones de alto nivel destinadas a BDOS.

o BDOS (Basic Disk Operating System): Traductor de las instrucciones en llamadas a la BIOS.

El hecho de que, años después, IBM eligiera para sus PC a MS-DOS supuso su mayor fracaso, por lo que acabó desapareciendo.

Años 80

Con la creación de los circuitos LSI -integración a gran escala-, chips que contenían miles de transistores en un centímetro cuadrado de silicio, empezó el auge de los ordenadores personales. En éstos se dejó un poco de lado el rendimiento y se buscó más que el sistema operativo fuera amigable, surgiendo menús, e interfaces gráficas. Esto reducía la rapidez de las aplicaciones, pero se volvían más prácticos y simples para los usuarios. En esta época, siguieron utilizándose lenguajes ya existentes, como Smalltalk o C, y nacieron otros nuevos, de los cuales se podrían destacar: C++ y Eiffel dentro del paradigma de la orientación a objetos, y Haskell y Miranda en el campo de la programación declarativa. Un avance importante que se estableció a mediados de la década de 1980 fue el desarrollo de redes de computadoras personales que corrían sistemas operativos en red y sistemas operativos distribuidos. En esta escena, dos sistemas operativos eran los mayoritarios: MS-DOS(Micro Soft Disk Operating System), escrito por Microsoft para IBM PC y otras computadoras que utilizaban la CPU Intel 8088 y sus sucesores, y UNIX, que dominaba en los ordenadores personales que hacían uso del Motorola 68000.

Apple Macintosh

se produjo en enero de 1984, al precio de 2495 dólares. Muchos usuarios, al ver que estaba completamente diseñado para funcionar a través de una GUI (Graphic User Interface), acostumbrados a la línea de comandos, lo tacharon de juguete. A pesar de todo, el Mac se situó a la cabeza en el mundo de la edición a nivel gráfico.

MS-DOS

En 1981 Microsoft compró un sistema operativo llamado QDOS que, tras realizar unas pocas modificaciones, se convirtió en la primera versión de MS-DOS (MicroSoft Disk Operating System). A partir de aquí se sucedieron una serie de cambios hasta llegar a la versión 7.1, versión 8 en Windows Milenium, a partir de la cual MS-DOS dejó de existir como tal y se convirtió en una parte integrada del sistema operativo Windows.

Años 90

GNU/Linux

La idea de un Sistema Operativo Libre para la humanidad nace en 1984, impulsada por Richard Stallman, ex-empleado del MIT. Motivado por esta idea comienza la construcción y desarrollo de las herramientas elementales que componen un Sistema Operativo, a esta parte del desarrollo del Sistema Operativo se le conoce como proyecto GNU. En esta etapa Richard Stallman cuenta con la colaboración de miles de programadores a nivel mundial. En 1991 aparece la primera versión del núcleo Linux. Creado por Linus Torvalds, pero antes de que este apareciera ya existía la mayoría de las herramientas que componían al Sistema Operativo, pero aun así el núcleo Linux tiene una importancia fundamental para el proyecto, es tal la importancia de este que el proyecto termina llamándose GNU/Linux, dando un 50% de importancia a ambas partes.

Este sistema es similar a Unix, basado en el estándar POSIX , un sistema que en principio trabajaba en modo comandos. Hoy en día dispone de Ventanas, gracias a un servidor gráfico y a gestores de ventanas como KDE, GNOME entre muchos. Recientemente GNU/Linux dispone de un aplicativo que convierte las ventanas en un entorno 3D como por ejemplo Beryl o Compiz. Lo que permite utilizar linux de una forma visual atractiva.

Microsoft Windows

A mediados de los años 80 se crea este sistema operativo, pero no es hasta la salida de Windows 95 que se le puede considerar un sistema operativo, solo era una interfaz gráfica del MS-DOS. Hoy en día es el sistema operativo más difundido en el ámbito doméstico aunque también hay versiones para servidores como Windows NT. Microsoft ha diseñado también algunas versiones para superordenadores, pero sin mucho éxito. Años después se hizo el Windows 98 que era el más eficaz de esa época Después se crearía el sistema operativo de Windows ME (Windows Millenium Edition) aproximadamente entre el año 1999 y el año 2000. Un año después se crearía el sistema operativo de Windows 2000 en ese mismo año. Después le seguiría el sistema operativo más utilizado en la actualidad, Windows XP y otros sistemas operativos de esta familia especializados en las empresas. Ahora el más reciente es Windows Vista, que, actualmente, tiene muchas críticas. Ahora está en desarrollo el sistema operativo Windows 7, que ya salio al mercado

Funciones, servicios y partes de un Sistema Operativo

Estructura de un Sistema Operativo

Funciones De un Sistema Operativo

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.

Linux casi siempre ha sido considerado como un sistema operativo, pero esto no es totalmente cierto. Linux es tan solo el kernel del sistema operativo, es decir, el núcleo que se encarga de realizar todo el trabajo al controlar de forma directa todos los recursos y dispositivos del sistema, así como el más importante, el procesador.

El kernel entra en acción justo después de las verificaciones de la BIOS (Basic Input Output System), y toma el control del sistema, pudiendo llegar a detectar dispositivos que no fueron detectados por la BIOS. Una vez funcionando, el kernel se encarga de repartir los ciclos del reloj entre los diferentes procesos concurrentes, asignando a cada uno de ellos una porción suficiente de memoria y asegurándose de que no interfieran entre ellos.

Al mismo tiempo que los mantiene protegidos entre sí, también les proporciona la comunicación necesaria entre ellos, pues gestiona la comunicación entre procesos, que es uno de los pilares fundamentales en la definición de un sistema Unix. Y, por supuesto, también se encarga del control a bajo nivel de los dispositivos periféricos, desde los discos duros hasta los dispositivos móviles como las unidades ZIP, pasando por los dispositivos de entrada/salida que permiten la interacción con el usuario.

Es decir, el kernel constituye el sistema operativo, pero en la definición también entra el conjunto de comandos que permiten al usuario interaccionar con él. Y esos comandos, que son los que el usuario llama sistema operativo, no forman parte de Linux, si no que son desarrollados por grupos independientes, en bastantes ocasiones ajenos al sistema Linux, pero siempre pertenecientes a la más amplia comunidad Unix.

Esto es posiblemente el segundo punto fuerte de Linux, pues le permite acceder a una amplia gama de programas y utilidades, robustas y completamente depuradas después de muchos años de uso en plataformas Unix, y cuya migración a Linux requiere de unas mínimas variaciones en el código en el peor de los casos, ya que internamente no existen diferencias. Obtenemos la ventaja añadida de que al tratarse normalmente de programas de código abierto, la migración se facilita enormemente al permitir la colaboración directa y sin obstáculos entre diferentes grupos de desarrollo.




Aplicaciones, aplicaciones y más aplicaciones

Dentro de este conjunto de comandos englobamos desde los íntimamente relacionados con el sistema operativo hasta utilidades de tipo general, cuya historia no tiene que tener relación directa con Linux. Esta amplia variedad permite la existencia de muy diferentes distribuciones de Linux.

Dentro de este grupo de aplicaciones, merecen atención especial las relacionadas con los aspectos gráficos que, sin ser parte de Linux, son las que mayores preguntas y quebraderos de cabeza producen.

Linux trabaja usando principalmente X11, que es el protocolo estándar cliente/servidor de las estaciones de trabajo. El desarrollo de los servidores y clientes definidos como parte del entorno X Window es llevado a cabo por un conjunto de programadores agrupados en el consorcio XFree86, cuyo campo de acción va más allá del entorno Linux, incluyendo otros Unix para PC.

Aunque X Window es un sistema de ventanas sumamente potente y flexible de por sí, carece de algunas propiedades que el usuario de PC atribuye al sistema de ventanas.

La primera de ellas es que el gestor de ventanas, que permite a los usuarios manejar los elementos visuales sobre la pantalla, no forma parte de la definición del protocolo. Aunque la distribución estándar del sistema incluye un gestor completamente funcional, existen más de una docena de gestores alternativos, bastante más potentes y que hacen hincapié en aspectos diferentes, permitiendo al usuario una amplia gama para elegir y añadiendo una elevada capacidad para ser configurado al gusto del usuario.

La segunda característica que extraña al usuario habitual es la ausencia de escritorios, que hace un par de años se empezaron a desarrollar para Linux, y que a estas alturas ya son perfectamente funcionales. Los más conocidos son KDE y GNOME, los cuales dotan al entorno de ventanas de las capacidades típicas de un escritorio Windows, al cual la mayor parte de los usuarios están acostumbrados.

       Funciones de un Sistema Operativo


Sistemas Operativos
Funciones De un Sistema Operativo

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.

                                                                          Logo Linux


                                                                   Logo de Windows 7


   Sistemas Operativos – Conceptos basicos

Un sistema operativo es un software de sistema, es decir, un conjunto de programas de computación destinados a realizar muchas tareas entre las que destaca la administración de los dispositivos periféricos.

Cuando se aplica voltaje al procesador de un dispositivo electrónico, éste ejecuta un reducido código en lenguaje ensamblador localizado en una dirección concreta en la ROM (dirección de reset) y conocido como reset code, que a su vez ejecuta una rutina con la que se inicializa el hardware que acompaña al procesador. También en esta fase suele inicializarse el controlador de las interrupciones. Finalizada esta fase se ejecuta el código de arranque (startup code), también código en lenguaje ensamblador, cuya tarea más importante es ejecutar el programa principal (main()) del software de la aplicación.[1]

Un sistema operativo se puede encontrar en la mayoría de los aparatos electrónicos que utilicen microprocesadores para funcionar, ya que gracias a éstos podemos entender la máquina y que ésta cumpla con sus funciones (teléfonos móviles, reproductores de DVD, autoradios, computadoras, radios, etc).

                 MAc OS logo




BLOGGER

Seguidores