GUIA NRO. 1 ARQUITECTURA DEL COMPUTADOR. TI - PII Orígenes de los Sistemas Operativos Los primeros sistemas En un principio solo existía el hardware del computador. Los primeros computadores eran (físicamente) grandes maquinas que se operaban desde una consola. El programador escribía un programa y luego lo controlaba directamente desde la consola. En primer lugar, el programa se cargaba manualmente en la memoria, desde los interruptores del tablero frontal, desde una cinta de papel o desde tarjetas perforadas. Luego se pulsaban los botones adecuados para establecer la dirección de inicio y comenzar la ejecución del programa. Mientras este se ejecutaba, el programador – operador lo podía supervisar observando las luces en la consola. Si se descubrían errores, el programador podía detener el programa, examinar el contenido de la memoria y depurar el programa directamente desde la consola. La salida del programa se imprimía o perforaba en cintas de papel o tarjetas para su impresión posterior. Un aspecto importante de este entorno era su naturaleza interactiva directa. El programador también era el operador del sistema de computación. La mayoría de los sistemas utilizaban un esquema de reservaciones para asignar tiempo de maquina. Si alguien quería usar el computador acudía a la hoja de registro, buscaba el siguiente tiempo libre de la maquina que fuera conveniente y se agotaba para usarla. Sin embargo, con este procedimiento se presentaban ciertos problemas. Suponga que usted se había registrado para usar una hora del tiempo del computador dedicada a ejecutar el programa que estaba desarrollando, pero se topaba con un error difícil y no podía terminar en esa hora. Si alguien mas había reservado el siguiente bloque de tiempo usted debía detenerse, rescatar lo que pudiera y volver mas tarde para continuar. Por otra parte, si el programa se ejecutaba sin problemas, podría terminar en 35 minutos, pero como pensó que necesitaría la maquina durante mas tiempo se registró para usarla una hora, y permanecería inactiva durante 25 minutos. Conforme transcurrió el tiempo, se desarrollaron software y hardware adicional empezaron a popularizarse los lectores de tarjetas, impresoras de líneas y cintas magnéticas, se diseñaron ensambladores, cargadores y ligadores para facilitar las tareas de programación, y se crearon bibliotecas de funciones comunes de manera que estas podían copiarse a un nuevo programa si tener que escribirlas de nuevo. Las rutinas que efectuaban operaciones de entrada / salida tenían una importancia especial. Cada nuevo dispositivo de E / S poseía sus propias características, lo que requería una cuidadosa programación. Asimismo, para cada uno de ellos se escribía una subrutina especial llamada manejador de dispositivo. Este sabe como deben usarse una serie de aspectos relacionados con el dispositivo, el cual poseía su propio manejador. Una tarea sencilla como leer un carácter de un lector de cinta de papel, podía conllevar complicadas secuencias de operaciones específicas para el dispositivo. En lugar de tener que escribir cada vez el codigo necesario, bastaba usar el manejador de dispositivo de la biblioteca. Más tarde aparecieron los compiladores de los lenguajes de programación, lo que facilito la tarea de desarrollo de programas, pero hizo más complejo el funcionamiento del computador. Por ejemplo, al preparar la ejecución de un programa en el lenguaje FORTRAN, el programador primero debía cargar en el computador el compilador de este lenguaje, que generalmente se guardaba en una cinta magnética, por lo que había que montar la cinta adecuada en la unidad correspondiente. El programa se leía a través del lector de tarjetas y se escribía en otra cinta. El compilador de FORTRAN producida una salida en lenguaje ensamblador, que luego tenia que ensamblarse. Para esto era necesario montar otra cinta con el ensamblador. Finalmente el programa en código binario estaba listo para ejecutarse, se cargaba en memoria y se depuraba desde la consola como antes. Observe que era necesario un considerable tiempo de preparación para realizar un trabajo, ya que estos consistían en la ejecución de varios pasos. Monitor Sencillo El tiempo de preparación para los trabajos representaba un verdadero problema. Durante el lapso en que se montaban las cintas o el programador operaba la consola, la UCP permanecía inactiva. Recuerde que al inicio se disponía de pocos computadores y su costo era muy alto. Por eso, el tiempo de maquina era muy valioso y los dueños querían que sus computadores se usaran todo lo posible. La solución tuvo dos facetas. En primer lugar se contrato un operador profesional, por lo que el programador no operaba directamente la maquina. Al momento en que este terminaba un trabajo el operador iniciaba el siguiente con lo que se eliminaban los periodos de inactividad en los que el computador permanecía reservado pero no se usaba. Puesto que el operador tenia mas experiencia que el programador para operar la maquina, este ultimo solo proporcionaba las tarjeteas o cintas necesarias junto con una breve descripción de cómo se debía ejecutar el trabajo. Por supuesto, el operador no podía depurar un programa incorrecto desde la consola, ya que no comprendía el programa, de modo de que en caso de un error en el programa se hacia un volcado de la memoria, y el programador efectuaba la depuración a partir del volcado. Esto permitía al operador proseguir de inmediato con el trabajo siguiente, pero representaba un problema de depuración algo mas complicado para el programador. El segundo ahorro considerable de tiempo se logro al reducir el tiempo de preparación. Los trabajos con requisitos similares se agrupaban en lotes, y se ejecutaban como un grupo en el computador. Por ejemplo, suponga que el operador recibía un trabajo en FORTRAN, uno en COBOL y otro en FORTRAN. Si los ejecutaba en ese orden, tenia que preparar el computador para FORTRAN, luego para COBOL y después nuevamente para FORTRAN. Sin embargo, si ejecutaba los dos programas de FORTRAN como un lote, podía preparar el computador una sola vez para FORTRAN ahorrando así bastante tiempo al ordenador. Estos cambios, separar al operador del usuario y agrupar trabajos similares, mejoraron bastante la utilización. Los programadores dejaban sus programas con el operador, quien los clasificaba y agrupaba en lotes con requisitos similares, y en cuanto estuviera disponible el computador, ejecutaba cada lote. La salida de cada uno de los trabajos se devolvía al programador correspondiente. Pero aun persistían los problemas. Por ejemplo, cuando se detenía un trabajo, el operador debía percatarse de la situación observando la consola, determinar por que se detuvo el programa, efectuar un volcado si es necesario y luego cargar el lector de tarjetas o de cinta de papel con el siguiente trabajo y volver a preparar el computador. Durante esta transición de un trabajo a otro, la UCP permanecía inactiva. Para superar este tiempo de inactividad se desarrollo la secuencia automática de trabajos. Con esta técnica se crearon los sistemas operativos rudimentarios. Lo que se deseaba era un procedimiento para transferir automáticamente el control de un trabajo al siguiente. Con este fin se creo un pequeño programa llamado Monitor Residente, el cual, siempre reside en memoria. Inicialmente (al encender el computador) se invocaba al monitor Residente que transfería el control a un programa. Cuando este terminaba, devolvía el control al Monitor Residente, el cual pasaba al siguiente programa. Así, el monitor pasaba automáticamente de un programa a otro. Pero, ¿Cómo sabía el Monitor Residente cual programa debía ejecutar? Previamente se le había dado al operador una breve descripción de cuales programas se debían ejecutar y con que datos. Para proporcionar esa información directamente al monitor se crearon las tarjetas de control. La idea es sencilla: además de los programas y los datos para un trabajo, se incluyen tarjetas especiales que contienen instrucciones para indicar al monitor Residente cual es el programa que se ejecutará. Por ejemplo, un programa de un usuario requeriría ejecutar uno de estos tres programas: el compilador de FORTRAN (ftn), el ensamblador (asm) o el programa de usuario (run). El Monitor Residente tiene varias partes identificables. Una parte principal es el intérprete de tarjetas de control; este es responsable de leer y llevar a cabo las instrucciones de las tarjetas al momento de la ejecución. El intérprete de tarjetas de control invoca a intervalos a un cargador para que cargue en la memoria los programas del sistema y las aplicaciones. Por tanto, el cargador forma parte del monitor residente. Tanto el interprete de tarjetas de control como el cargador necesitan efectuar operaciones de E / S, por lo que el monitor Residente cuenta con un conjunto de manejadores para los dispositivos de E / S. Estos sistemas por lotes funcionan bastante bien. El Monitor Residente proporciona una secuenciación automática de trabajos siguiendo las indicaciones de las tarjetas de control. Cada una de ellas indica que debe ejecutarse un programa, el monitor lo carga en memoria y le transfiere el control. Cuando el programa termina, devuelve el control al monitor, el cual lee la siguiente tarjeta de control, carga el programa adecuado, etc. Este ciclo se repite hasta que se interpretan todas las tarjetas de control del trabajo. Luego el Monitor Residente continua automáticamente con el siguiente programa. Operación Fuera de Línea Todo aquel que posea una computadora, desea obtener de ésta el mayor rendimiento al menor de los costos posibles. El cambio a los sistemas por lotes con secuenciación automática de trabajos se efectuó para mejorar el rendimiento. El problema es que las personas son demasiado lentas en comparación con el computador. Por tanto es deseable sustituir la intervención humana por software de sistema operativo. La secuenciación automática de trabajos elimina la necesidad de que las personas establezcamos la secuencia de trabajos y dediquemos tiempo a su preparación. Incluso con la secuenciación automática de trabajos, la UCP aun tiene periodos de inactividad. El problema es la velocidad de los dispositivos mecánicos de E / S, los cuales son intrínsecamente mas lentos que los dispositivos electrónicos. Esto quiere decir que la lentitud de los dispositivos de E / S provoca que la UCP con frecuencia se encuentre esperando E / S. por ejemplo, un compilador puede procesar 300 o mas tarjetas por segundo. Por otra parte, un lector de tarjetas rápido puede leer solo 1200 tarjetas por minuto. Entonces, la dificultad es la siguiente: mientras se lleva a cabo una operación de E / S, la UCP esta inactiva esperando que termine la E / S, y mientras la UCP esta trabajando, los dispositivos de E / S están inactivos. Por supuesto, con el paso del tiempo se obtuvieron dispositivos de E / S mas rápidos, gracias a las mejoras tecnológicas, pero las velocidades de las UCP aumentaron un mas, por lo que el problema no se resolvió, sino que se complico. Una solución fue sustituir los lentos lectores de tarjetas (dispositivos de entrada) e impresoras de línea (dispositivos de salida) con unidades de cinta magnética. La mayoría de los sistemas de computación de finales de los años 50 y principios de los 60 eran sistemas por lotes que leían tarjetas perforadas y escribían en impresoras de líneas o perforadores de tarjetas. Sin embargo, en vez de que la UCP leyera directamente de las tarjetas estas primero se copiaban a una cinta magnética. Cuando la cinta se llenaba lo suficiente, se desmontaba y llevaba al computador. Cuando se requería una tarjeta como entrada al computador. Cuando se requería una tarjeta como entrada para un programa se leía el registro equivalente de una cinta. En forma parecida, la salida se escribía en la cinta y el contenido de esta se imprimía mas tarde. Los lectores de tarjetas y las impresoras de línea se operaban fuera de línea; no lo hacia el computador personal. Para el procesamiento fuera de línea se utilizaban dos métodos. Se desarrollaron dispositivos de propósito especial (lectores de tarjetas, impresoras de líneas) que enviaban la salida a la cinta magnética o recibían la entrada de ella directamente. El otro método era dedicar un pequeño computador a la tarea de copiar de la cinta y en ella. Este pequeño computador era un satélite del computador principal. El procesamiento satélite fue uno de los primeros casos de sistemas de computación múltiples que trabajaban en conjunto para mejorar el rendimiento. La principal ventaja de la Operación Fuera de Línea era que el computador principal ya no estaba restringido por la velocidad de los lectores de tarjetas o las impresoras, sino por la velocidad mucho mayor de las unidades de cinta magnética. Además, no era necesario modificar los programas para pasar de una operación directa a una operación fuera de línea. Considere un programa que se ejecuta en un sistema con un lector de tarjetas conectado. Cuando requiere una tarjeta, llama al manejador del lector de tarjetas en el monitor residente. Si pasamos a una operación fuera de línea del lector de tarjetas, únicamente hay que modificar el manejador del dispositivo. Cuando el programa necesita una tarjeta de entrada, llama a la misma rutina que antes. Sin embargo, ahora el código para la rutina no es el manejador del lector de tarjetas, sino una llamada al manejador de la cinta magnética. En ambos casos, la aplicación recibe el mismo contenido de la tarjeta. Esta capacidad para ejecutar un programa con diferentes dispositivos de E / S se denomina independencia de dispositivos, y se obtiene cuando el sistema operativo es capaz de determinar el dispositivo que realmente usa un programa cuando solicita E / S. La verdadera mejora al emplear la operación fuera de línea es la posibilidad de usar varios sistemas lector – cinta y cinta – impresora con una misma UCP. No obstante ahora hay un mayor retardo para iniciar la ejecución de un trabajo determinado, primero debe leerse la cinta, y luego demora hasta que se lean otros trabajos que la llenen. Posteriormente hay que rebobinar la cinta, desmontarla, llevarla hasta la UCP, y montarla en una unidad de cinta disponible. Almacenamiento Temporal (Buffers y Spoolers) Almacenamiento temporal con buffers Un buffer es un método para hacer simultanea la E / S de un trabajo con su propio computo. La idea es la siguiente: después de haber leído los datos, cuando la UCP esta lista para comenzar a trabajar con ellos se ordena al dispositivo que inicie de manera inmediata l siguiente lectura. En este momento tanto la UCP como el dispositivo se encuentran ocupados. Con un poco de suerte, cuando la UCP este lista para el siguiente elemento de datos, el dispositivo de entrada habrá terminado de leerlo. La UCP puede entonces comenzar con el tratamiento de los datos siguientes. Esto puede hacerse de manera similar para la salida. En este caso la UCP cera datos para colocarlos en el buffer hasta que un dispositivo de salida pueda tomarlos. En la practica el buffer pocas veces mantiene ocupados todo el tiempo a la UCP y sus dispositivos de E / S, ya que alguno, el dispositivo de E / S o la UCP terminara primero. Si la UCP termina antes encontrara el buffer vacío y deberá esperar, ya que no puede continuar hasta que se lea el siguiente registro y se encuentre en memoria listo para ser procesado. Si el dispositivo de entrada termina antes, entonces deberá esperar o podrá proseguir con la lectura del siguiente registro. Si además, el dispositivo de entrada es, de forma continua, mas rápido que la UCP, el buffer se llenará y el dispositivo tendrá que esperar a vaciarse. Por tanto, los buffers pueden ser útiles, pero rara vez bastan. La mayoría de los trabajos de los primeros de los sistemas de computación estaban limitados por E / S, ya que los dispositivos de E / S no podían igualar el ritmo de la UCP. Almacenamiento temporal con spoolers Aunque la preparación de trabajos fuera de línea prosiguió durante cierto tiempo, fue rápidamente reemplazada en la mayoría de los sistemas. Los sistemas con disco empezaron a popularizarse y superaron de forma considerable la operación fuera de línea. El problema en los sistemas con cinta era que el lector de tarjetas no podía escribir de un extremo a otro de la cinta magnética mientras la UCP leía del otro. Toda la cinta se tenia que escribir antes de rebobinarla y leerla, problema que se elimino con los sistemas con discos. Como la cabeza del disco se mueve de una área a otra de este, se puede cambiar rápidamente de un sector utilizado por el lector de tarjetas para almacenar nuevas tarjetas a la posición requerida por la UCP para leer la siguiente. En un sistema con disco las tarjetas se leen directamente del lector de tarjetas al disco. La ubicación del contenido de las tarjetas se anota en una tabla que mantiene el sistema operativo. Cuando se ejecuta un trabajo, el sistema operativo satisface las solicitudes de entrada en el lector de tarjetas leyendo del disco. De forma similar, cuando el trabajo solicita a la impresora que imprima una línea, esta se copia a un buffer del sistema y se escribe en el disco. Cuando se termina el trabajo, se lleva a cabo la impresión real. Con este tipo de almacenamiento se utiliza al disco como un buffer de gran tamaño, para tratar de leer lo más posible de los dispositivos de entrada y almacenar los archivos hasta que los dispositivos de salida estén listos para recibirlos. La ventaja del spooler sobre el buffer es que el primero hace simultanea la E / S de un trabajo con el calculo de otros trabajos. Multiprogramación El aspecto más importante de la planificación de trabajos es la multiprogramación. La Operación Fuera de Línea y el uso de Buffers y Spoolers realizados al mismo tiempo que la E / S tienen sus limitaciones. Un solo usuario un puede, en general, mantener todo el tiempo ocupados a la UCP o los dispositivos de E / S. la Multiprogramación aumenta la utilización de la UCP organizando los trabajos de manera que siempre se tenga algo que ejecutar. El concepto es el siguiente: el Sistema Operativo escoge uno de los trabajos del depósito y lo comienza a ejecutar. En algún momento el trabajo tendrá que esperar a que se efectúe alguna tarea de E / S. En un sistema no multiprogramado la UCP estaría inactiva. En un sistema multiprogramado, el Sistema Operativo cambia a otro trabajo y lo ejecuta. Cuando ese trabajo tiene que esperar, la UCP cambia a otro. Eventualmente el primer trabajo deja de esperar y recupera la UCP; mientras haya otro trabajo por ejecutar, la UCP nunca estará inactiva. Este tipo de sistemas operativos son bastante complejos. Para que pueda haber varios programas listos para ejecutarse, debe conservarlos todos en memoria al mismo tiempo. Cuando esto se consigue, se necesita alguna forma de administración de memoria. Además, si al mismo tiempo existen varios programas listos para ejecutarse, el sistema debe elegir uno de ellos. Esta decisión se toma por medio de la planificación de la UCP. Finalmente, si varios programas se ejecutan concurrentemente, es necesario limitar la posibilidad de que se interfieran unos a otros. Sistemas Distribuidos Una tendencia de los sistemas de computación es distribuir los cálculos entre varios procesadores. A estos sistemas se les conoce con el nombre de Sistemas Distribuidos, y en ellos los procesadores pueden variar en cuanto a tamaño y función. Pueden incluir pequeños microprocesadores, estaciones de trabajo, minicomputadoras y grandes sistemas de computación de propósito general. Para referirse a estos procesadores se usan varios nombres, como instalaciones, nodos, computadores, etc., según el contexto en que se mencionen. Por lo general, los sistemas distribuidos constituyen una colección de computadoras físicamente separadas y posiblemente heterogéneas que están conectadas en red para proporcionar a los usuarios acceso a los diversos recursos que el sistema mantiene. Existen varias razones para construir sistemas distribuidos, y las principales son las siguientes: Compartimiento de recursos: si varias instalaciones (con distintas capacidades) están conectadas entre si, entonces un usuario puede utilizar en una instalación los recursos disponibles en otra. Por ejemplo, en la instalación A se puede utilizar una impresora láser solo disponible en la instalación B. el mismo tiempo, en B es posible tener acceso a un archivo que reside en A. Aceleración de los calculos: Si un calculo determinado puede dividirse en varios subcalculos que se ejecuten concurrentemente, un sistema distribuido permitirá distribuir los calculos entre las diversas instalaciones y tambien ejecutarlos concurrentemente. Ademas, si en un momento dado una instalación esta sobrecargada con trabajos, algunos de ellos pueden pasarse a otras instalaciones con poca carga. Confiabilidad: si falla una instalación de un sistema distribuido, las restantes pueden, potencialmente, continuar operando. Si el sistema se compone de varias instalaciones autónomas de gran tamaño, la avería de una no debe afectar a las demás. Si por otra parte el sistema esta compuesto por varias maquinas pequeñas, cada una responsable de una función indispensable dentro del sistema, entonces un solo error puede detener el funcionamiento de todo el sistema. Comunicación: existen varias situaciones donde los programas necesitan intercambiar datos entre si. Cuando varias instalaciones esta conectadas entre si por una red de comunicaciones, los procesos en las distintas instalaciones tienen la oportunidad de intercambiar información. Sistemas en Tiempo Real Otra variante de los sistemas operativos es el sistema en Tiempo Real. Estos poseen restricciones temporales bien definidas, por lo que el procesamiento debe llevarse a cabo dentro de los límites definidos o el sistema fallara. Estas restricciones temporales dictaminan los recursos de los que comúnmente se dispone en los sistemas de Tiempo Real. Por lo general, no hay ningún tipo de almacenamiento secundario o es limitado, y en su lugar los datos se almacenan en la memoria a corto plazo. Sistemas Monousuario Al reducirse los costos de hardware, cada vez se ha hecho mas factible contra con un sistema de computación para un solo usuario. A este tipo de computadores se les conoce con el nombre de computadores personales. Los dispositivos de E / S han cambiado, desapareciendo los tableros de interruptores y los lectores de tarjetas y apareciendo los teclados y los ratones. Las impresoras de líneas y perforadoras de tarjetas se han reemplazado por pantallas e impresoras pequeñas y veloces. Los objetivos de los sistemas operativos han cambiado con el tiempo, en vez de tratar de maximizar la utilización de la UCP y los periféricos, han optado por la comodidad y la rapidez de respuesta a los usuarios. Funcionamiento de la computadora La computadora es una maquina destinada a procesar datos. Este procesamiento involucra dos flujos de información: el de datos y el de instrucciones. Se parte del flujo de datos que han de ser procesados. Este flujo de datos es tratado mediante un flujo de instrucciones, generado por la ejecución de un programa, y produce el flujo de resultado. Para realizar esto, la computadora consta de uno o más CPU’s y de una serie de controladoras de dispositivos conectadas a través de un bus común que proporciona acceso a la memoria compartida. Antes de la ejecución del programa, este y sus respectivos datos deben cargarse en memoria, lo cual constituye una secuencia que la computadora realiza a una alta velocidad. Cada controladora de dispositivo se encarga de un tipo específico de dispositivo. La CPU y las controladoras de dispositivos pueden funcionar de forma concurrente, compitiendo por la memoria. Para asegurar el acceso ordenado a la memoria, se proporciona una controladora de memoria, cuya función es sincronizar el acceso a la misma. Para que la computadora empiece a funcionar, por ejemplo, cuando se inicia o enciende, es necesario que tenga un programa de inicio o arranque que ejecutar. Este programa de inicio o arranque se almacena en una memoria ROM y permite la inicialización de todos los aspectos del sistema. Además, debe saber como cargar el Sistema Operativo e iniciar su ejecución. Para conseguirlo el programa de inicio debe localizar y cargar en memoria el núcleo del Sistema Operativo. Después, el Sistema Operativo comienza ejecutando su primer proceso y espera a que se produzca algún suceso. Los sistemas operativos modernos están controlados por medio de Interrupciones. Si no hay ningún proceso que ejecutar, ningún dispositivo de E / S al que dar servicio y ningún usuario al que responder, el Sistema Operativo debe permanecer inactivo esperando a que algo ocurra. La ocurrencia de algún suceso normalmente se indica mediante una Interrupción, bien sea de Hardware o de Software. El Hardware puede activar una interrupción en cualquier instante enviando una señal a la CPU. El Software puede activar una interrupción, en este caso denominada Excepción, solicitando un servicio del Sistema Operativo a través de la ejecución de una operación denominada Llamadas al Sistema. Cuando se interrumpe a la CPU, deja lo que esta haciendo e inmediatamente transfiere la ejecución a una posición establecida, la cual posee la dirección de inicio de donde se encuentra la rutina que va a atender la interrupción. Esta rutina, también denominada Rutina de Servicio, se ejecuta, y cuando termina, la CPU reanuda la operación que estuviera haciendo. Además, la interrupción debe transferir el control a la rutina de servicio apropiada a dicha instrucción. Para ello: Se convoca una rutina que examina la información de la interrupción. Esta rutina se encarga luego de llamar a otra rutina que procesa a la interrupción como tal. Estructura de Almacenamiento Cada sistema de almacenamiento proporciona las funciones básicas para guardar los datos y mantenerlos hasta que sean recuperados en un instante posterior. Las principales diferencias entre los distintos sistemas de almacenamiento están relacionadas con la velocidad, el coste, el tamaño y la velocidad. La amplia variedad de sistemas de almacenamiento en un sistema informático puede organizarse en una jerarquía según la velocidad y el coste. Los niveles superiores son caros pero rápidos, y generalmente están representados por memorias de tamaño relativamente reducido pero de alta velocidad para almacenar la información que se esta utilizando en un momento determinado. A medida que se desciende por la jerarquía, el coste disminuye mientras el tiempo de acceso a los datos almacenados aumenta. En este tipo de almacenamiento, podemos encontrar dispositivos como los discos, los cuales permiten altas cantidades de datos de forma permanente pero que son accedidos a baja velocidad. Además de diferenciarse en velocidad y en el coste, los distintos sistemas de almacenamiento pueden ser o no volátiles. Arquitectura de un Sistema Informático Un sistema informático puede clasificarse de varias maneras. Una de estas clasificaciones se refiere a la cantidad de procesadores de propósito general empleados: Sistemas con un solo procesador: la mayor parte de los sistemas operativos usan un solo procesador. En un sistema de este tipo hay una CPU principal capaz de ejecutar un conjunto de instrucciones de propósito general. Muchos sistemas disponen de procesadores de propósito especial, como por ejemplo los encontrados en un disco o una tarjeta gráfica. Todos estos procesadores de propósito especial ejecutan con conjunto limitado de instrucciones y no ejecutan procesos de usuario. De esta forma se libera a la CPU principal del trabajo adicional de ejecutar las tareas de estos dispositivos. Sistemas Multiprocesador: estos sistemas disponen de dos o más procesadores que se comparten el acceso a memoria y dispositivos periféricos. Cada uno de ellos puede ejecutar un programa, debiendo cada uno de ellos compartir el procesador. Estos presentan las siguientes ventajas: Mayor rendimiento: al aumentar el número de procesadores es de esperar que se realice mas trabajo en menos tiempo. Cuando múltiples procesadores cooperan en una tarea, cierta carga de trabajo se emplea en conseguir que todas las partes funcionen correctamente. Esta carga de trabajo, mas la contienda por recursos compartidos, reducen la ganancia de añadir procesadores adicionales. De esta forma, la mejora en velocidad con N procesadores no es N, sino que es menor que N. Economía de escala: estos sistemas pueden ser más baratos que los que tienen un solo procesador, ya que pueden compartir periféricos y almacenamiento. Si varios programas operan sobre el mismo conjunto de datos, es mas barato almacenar dichos datos en un disco y que todos los procesadores lo compartan, que tener muchas computadoras, cada una con un disco. Mayor Fiabilidad: en muchas aplicaciones resulta crucial conseguir la máxima fiabilidad del sistema informático. La capacidad de continuar proporcionando servicio proporcionalmente al nivel de hardware sobreviviente se denomina Degradación Suave. Algunos sistemas van más allá de esto, y se denominan sistemas tolerantes a fallos, dado que pueden sufrir un fallo en cualquier componente y seguir operando. Para ello se requiere un mecanismo que permita detectar, diagnosticar y posiblemente corregir el fallo. Los sistemas multiprocesador pueden ser de dos tipos: Asimétrico: a cada procesador se le asigna una tarea específica. Un procesador maestro controla el sistema y el resto espera a que este dé instrucciones. Es decir, el procesador maestro planifica y asigna las tareas de los procesadores esclavos. Simétrico: bajo este régimen los procesadores operan bajo las mismas condiciones. Operaciones del Sistema Operativo Operación en Modo Dual Para asegurar la correcta ejecución del Sistema Operativo, se debe distinguir entre dos niveles de ejecución: Nivel de Usuario: en esta, la computadora solo ejecuta un subconjunto de las instrucciones maquina, quedando prohibidas las demás. Nivel de Núcleo: es el más permisivo, ya que la computadora ejecuta todas sus instrucciones sin ninguna restricción. Cuando el sistema informático esta ejecutando una aplicación de usuario, el sistema se encuentra en modo usuario. Sin embargo, cuando una aplicación de usuario ejecuta un servicio del sistema Operativo, se debe pasar al nivel de Núcleo para atender la solicitud. Cuando se arranca el Sistema Operativo, el hardware se inicia en modo o Nivel de Núcleo. El Sistema Operativo se carga y se inicia las aplicaciones de usuario en el modo o Nivel de Usuario. Cuando se produce una excepción o interrupción e hardware conmuta del modo Usuario al modo Núcleo. En consecuencia, cuando el Sistema Operativo obtiene el control del computador, estará en modo núcleo. El sistema cambia a modo Usuario antes de pasar el control a un programa de usuario. Con el Modo Dual se busca proteger al Sistema Operativo de errores que pueden ser causados por el usuario. Esta protección se consigue designando a las instrucciones de maquina como privilegiadas para que se ejecuten solo en modo Núcleo. Gestión de Procesos El componente principal de un sistema operativo es el que se encarga de la gestión de Procesos. El Proceso es el elemento central de un sistema Operativo, puesto que su función consiste en generar y gestionar los procesos y en atender sus peticiones. El proceso puede definirse como un programa en ejecución. De forma mas precisa, puede definirse como la unidad de procesamiento gestionada por el Sistema Operativo. No hay que confundir Programa con Proceso. Un programa es un conjunto de instrucciones mientras que el proceso surge cuando el programa esta en ejecución. El Sistema Operativo mantiene por cada proceso una serie de estructuras de información que permite identificar las características de este así como los recursos que tiene asignados. Además, debe encargarse de ofrecer una serie de actividades en lo que se refiere a la gestión de procesos: Crear y borrar los procesos Suspender y reanudar los procesos Proporcionar mecanismos para: La sincronización de procesos La comunicación de procesos Dependiendo de la capacidad del sistema operativo para atender simultáneamente varios procesos y usuarios, podemos encontrar: Sistemas Operativos Monotarea: solo permite que exista un proceso en cada instante Sistemas Operativos Multitarea: permite que coexistan varios procesos a la vez. Para ello, el sistema operativo reparte el tiempo del procesador entra cada uno de ellos. Sistemas Operativos Monousuario: permiten un solo usuario a la vez. Sistemas Operativos Multiusuario: soporta varios usuarios trabajando simultáneamente desde varios terminales. A su vez, cada usuario puede tener activos mas de un proceso Gestión de Memoria La memoria principal es fundamental en la operación de un sistema informático. Ésta, se encuentra estructurada como una matriz de palabras o bytes cuyo tamaño se encuentra en el rango de cientos de miles a miles de millones de posiciones. Cada palabra o byte tiene su propia dirección. La memoria es un repositorio de datos rápidamente accesibles, accesibles por la CPU y los dispositivos de E / S. Como ya se ha mencionado anteriormente, para que un programa pueda ser ejecutado por la CPU, sus datos deben transferirse a la memoria principal. Una vez que terminado este proceso, se libera el espacio de memoria ocupado por dichos datos y se declara disponible para que el próximo programa pueda ser cargado y ejecutado. Para mejorar tanto la utilización de la CPU como la velocidad de respuesta de la computadora frente a los usuarios, las computadoras pueden mantener varios programas en memoria, lo que hace necesario la creación de ciertos esquemas que permitan la correcta gestión de esta situación. La gestión de memoria se encarga entonces de: Asignar memoria a los procesos. Proporcionar memoria a los procesos cuando lo soliciten y liberarla cuando así lo requieran Tratar los posibles errores de acceso a la memoria, evitando que unos procesos interfieran en la memoria de otros. Controlar que partes de la memoria están actualmente en uso y por parte de quien. Gestión de Almacenamiento Para que el sistema informático sea cómodo para los usuarios, el sistema operativo proporciona una vista lógica y uniforme del sistema de almacenamiento de la información. El sistema operativo abstrae las propiedades físicas de los dispositivos de almacenamiento y define una unidad de almacenamiento lógico denominada Archivo. De esta forma, se ofrece al usuario una visión lógica compuesta por una serie de objetos (archivos y directorios) identificables por un nombre lógico sobre los que se puede realizar una serie de operaciones, y una visión física que ha de incluir los detalles de cómo están almacenados estos objetos en los periféricos correspondientes, Los archivos son entonces, una colección de información relacionada entre sí bajo un mismo nombre. Cada archivo tiene una información asociada que utilizan tano los usuarios como el sistema operativo. Entre las informaciones mas usuales se pueden destacar las siguientes: Tipo de archivo Propietario del archivo: se refiere al identificador de usuario que creo el archivo. Tamaño del archivo Instantes importantes en la vida del archivo, tales como: Instante en que se creo Instante de la ultima modificación Instante del ultimo acceso Derechos de acceso al archivo (solo lectura, lectura – escritura, solo escritura) Gestión del Almacenamiento Masivo La memoria principal es demasiado pequeña para acomodar todos los datos y programas. Además, los datos que guarda se pierden al desconectar la alimentación. Por estas razones, un sistema informático debe proporcionar un almacenamiento secundario como apoyo a la memoria principal. El Sistema Operativo se encarga de las siguientes actividades en lo que se refiere al almacenamiento masivo: Gestión del espacio libre Asignación del espacio de almacenamiento Planificación del dispositivo del almacenamiento masivo Almacenamiento en Caché El almacenamiento en caché es una técnica importante de los sistemas informáticos. Normalmente la información se mantiene en algún sistema de almacenamiento, como por ejemplo la memoria principal. Cuando se usa, esta información se copia de forma temporal en un sistema de almacenamiento mas rápido, en este caso, la caché. Cuando se necesita una información en especifico primero se comprueba si esta en caché. Si lo está, se usa directamente dicha información de la caché; en caso contrario, se utiliza la información original, colocando una copia en la caché bajo la suposición de que será utilizada nuevamente. Protección y Seguridad Si un sistema informático tiene múltiples usuarios y permite la ejecución concurrente de múltiples procesos, entonces el acceso a los datos debe regularse. Para dicho propósito se emplean mecanismos que solo puedan utilizar los recursos aquellos procesos que hayan obtenido la apropiada autorización del sistema operativo. Por ejemplo, el hardware de direccionamiento de memoria asegura que un proceso se pueda ejecutar dentro de su propio espacio de memoria, el temporizador asegura que ningun proceso pueda obtener el control de la CPU sin después ceder el control. De esta forma se evidencia que la integridad de los distintos dispositivos de hardware esta protegida. Por tanto, protección es cualquier mecanismo que controle el acceso de procesos y usuarios a los recursos de un sistema informático. También se hace necesario garantizar la identidad de los usuarios y definir lo que cada uno de los puede hacer. El primer término se denomina Autenticación, y su objetivo es determinar que un usuario es quien dice ser. Para ello cada usuario contará con un identificador de usuario univoco y con el que podrá iniciar una sesión en el sistema. El segundo término se refiere a los Privilegios, los cuales especifican los recursos a los que puede acceder cada usuario. Estos privilegios, se basan en una lista que especifica los grupos y usuarios que pueden acceder a un recurso (Información por Recurso), o en la asociación de cada usuario a una lista de recursos a las que puede acceder (Información por Usuario)