UNIVERSIDAD NACIONAL EXPERIMENTAL DE LAS FUERZAS ARMADAS NUCLE CARACAS; SEDE CHUAO SECCION I; TURNO NOCTURNO; INGENIERIA EN SISTEMAS CATEDRA: GERENCIA DE LA INFORMATICA PROFESOR: PEDRO FERNANDEZ
SISTEMAS OPERATIVOS (ADMINISTRACION Y CONTROL)
AUTOR:
Caracas, 10 de abril de 2014
INTRODUCCION
Qu es un sistema operativo?
A pesar de que todos nosotros usamos sistemas operativos casi a diario, es difcil definir qu es un sistema operativo. En parte, esto se debe a que los sistemas operativos realizan dos funciones diferentes. Proveer una mquina virtual, es decir, un ambiente en el cual el usuario pueda ejecutar programas de manera conveniente, protegindolo de los detalles y complejidades del hardware. Administrar eficientemente los recursos del computador. El sistema operativo como mquina virtual Un computador se compone de uno o ms procesadores o CPUs, memoria principal o RAM, memoria secundaria (discos), tarjetas de expansin (tarjetas de red, modems y otros), monitor, teclado, mouse y otros dispositivos. O sea, es un sistema complejo. Escribir programas que hagan uso correcto de todos estos componentes no es una tarea trivial. Peor an si hablamos de uso ptimo. Si cada programador tuviera que preocuparse de, por ejemplo, cmo funciona el disco duro del computador, teniendo adems siempre presentes todas las posibles cosas que podran fallar, entonces a la fecha se habra escrito una cantidad bastante reducida de programas. Es mucho ms fcil decir `escriba lo apuntado por este puntero al final del archivo "datos"', que Poner en determinados registros del controlador de disco la direccin que se quiere escribir, el nmero de bytes que se desea escribir, la posicin de memoria donde est la informacin a escribir, el sentido de la operacin (lectura o escritura), amn de otros parmetros; Decir al controlador que efectu la operacin. Esperar decidir qu hacer si el controlador se demora ms de lo esperado (cunto es "lo esperado"?). Interpretar el resultado de la operacin (una serie de bits). Reintentar si algo anduvo mal, etc. Adems, habra que reescribir el programa si se instala un disco diferente o se desea ejecutar el programa en otra mquina. Hace muchos aos que qued claro que era necesario encontrar algn medio para aislar a los programadores de las complejidades del hardware. Esa es precisamente una de las tareas del sistema operativo, que puede verse como una capa de software que maneja todas las partes del sistema, y hace de intermediario entre el hardware y los programas del usuario. El sistema operativo presenta, de esta manera, una interfaz o mquina virtual que es ms fcil de entender y de programar que la mquina "pura". Adems, para una misma familia de mquinas, aunque tengan componentes diferentes (por ejemplo, monitores de distinta resolucin o discos duros de diversos fabricantes), la mquina virtual puede ser idntica: el programador ve exactamente la misma interfaz. El sistema operativo como administrador de recursos La otra tarea de un sistema operativo consiste en administrar los recursos de un computador cuando hay dos o ms programas que ejecutan simultneamente y requieren usar el mismo recurso (como tiempo de CPU, memoria o impresora). Adems, en un sistema multiusuario, suele ser necesario o conveniente compartir, adems de dispositivos fsicos, informacin. Al mismo tiempo, debe tenerse en cuenta consideraciones de seguridad: por ejemplo, la informacin confidencial slo debe ser accesada por usuarios autorizados, un usuario cualquiera no debiera ser capaz de sobrescribir reas crticas del sistema, etc. (En este caso, un usuario puede ser una persona, un programa, u otro computador). En resumen, el sistema operativo debe llevar la cuenta acerca de quin est usando qu recursos; otorgar recursos a quienes los solicitan (siempre que el solicitante tenga derechos adecuados sobre el recurso); y arbitrar en caso de solicitudes conflictivas.
Recursos administrados por un sistema operativo Los recursos administrados por un sistema operativo son: Tiempo del procesador. Memoria Principal. Dispositivos Perifricos. Software. Tiempo del procesador. El recurso ms importante en el sistema de computacin es el procesador central. Sin acceso al CPU. Los programas no pueden ejecutarse. La estrategia ms simple para asignar este recurso sera asignarlo a un trabajo de usuario hasta que finalice. Esta estrategia es usada en muchos computadores. Sin embargo la mayora de los programas gastan ms de la mitad de su tiempo esperando que terminen operaciones de Entrada/Salida. Esto nos lleva a tratar de compartir el tiempo del CPU entre varios usuarios, lo cual implica un mecanismo ms complejo que nos permita utilizar eficientemente el tiempo del procesador y explotar el paralelismo existente con las operaciones de Entrada/Salida. Memoria Principal Un segundo recurso que es escaso en la mayora de los computadores es la memoria principal. Un programa se puede ejecutar solamente si tiene asignada la memoria fsica que necesita, ya que el procesador accesa las instrucciones y los datos que se encuentran en esa memoria fsica. Si el sistema operativo soporta la ejecucin simultnea de varios trabajos entonces la memoria est compartida entre esos varios trabajos. En estos casos el S.O. debe asignar eficientemente la memoria a esos trabajos, evitando desperdicios. El objetivo principal de los diferentes esquemas de administracin de memoria (que se estudiarn en detalle aqu), es la reduccin del desperdicio que ocurre como consecuencia de los diferentes tamaos de los programas de usuario. La mayora de estos esquemas son complejos y generan un overhead (tiempo durante el cual el CPU procesa al S.O.) considerable, siendo muy difcil cuantitativamente la contribucin de estos esquemas a la eficiencia general del sistema. Dispositivos Perifricos La mayora de los dispositivos perifricos se asignan a un solo usuario, no se comparten entre varios usuarios. Esta situacin puede ser muy ineficiente en el caso de algunos dispositivos tales como la impresora, si el trabajo al que fuese asignado este dispositivo tuviese un tiempo largo de ejecucin. Por otra parte, los dispositivos de acceso directo son compartidos entre los usuarios a travs del sistema de archivos y pueden ocurrir demoras derivadas del uso compartido que pudieran ser intolerables en un momento dado. La asignacin de los dispositivos a los usuarios tiene implicaciones muy fuertes en la eficiencia y comportamiento del sistema de computacin. Dado que la mayora de los equipos incluye una sola impresora, los sistemas operativos incluyen normalmente un sistema de SPOOLING (operaciones perifricas simultneas en lnea) que evita las ineficiencias que se generaran si este dispositivo fuese asignado a un trabajo por vez. Sin embargo, en computadores pequeos, el overhead ocasionado por el spooler sera intolerable y pudiera ser tal vez ms efectivo abortar y recomenzar algn trabajo. Por otra parte el uso no controlado de los dispositivos por parte de los usuarios puede ocasionar "trancas". El sistema pudiera llegar a estar procesando varios trabajos que se encuentren simultneamente trancados (Deadlock) sin realizar ningn tipo de trabajo til. Software Los recursos de software de un sistema de computacin, consisten en las funciones disponibles al usuario con el objeto de administrar datos y controlar la ejecucin de programas. Entre estos recursos se encuentran los servicios de administracin de archivos, los despachadores, libreras del sistema y rutinas de utilidad. El mtodo ms utilizado para permitir a varios usuarios compartir un recurso de software, es haciendo este recurso de software reentrante. La utilizacin de software reentrante, evita tener en la memoria varias copias de ese software, situacin que sera muy ineficiente. En computadores pequeos puede ser imposible la implementacin de programas reentrantes. Evolucin de los sistemas operativos Los sistemas operativos y la arquitectura de computadores han evolucionado de manera interrelacionada: para facilitar el uso de los computadores, se desarrollaron los sistemas operativos. Al construir y usar los sistemas operativos, se hace obvio que ciertos cambios en la arquitectura los simplificara. Por eso, es conveniente echar una mirada a la historia. La primera generacin (1945-1955): tubos de vaco Lo cierto es que el primer computador digital fue diseado por el matemtico ingls Charles Babbage hace cerca de siglo y medio. Era un computador totalmente mecnico, que Babbage nunca pudo construir, principalmente debido a que la tecnologa de la poca no era capaz de producir las piezas con la precisin requerida. Despus de eso, poco se hizo hasta la segunda guerra: alrededor de 1940 se construyeron las primeras mquinas calculadoras usando tubos de vaco. Estas mquinas de varias toneladas de peso eran diseadas, construidas, programadas y operadas por el mismo grupo de personas. No haba ni lenguajes de programacin, ni compiladores; mucho menos sistema operativo. Cada programa se escriba en lenguaje de mquina, usando tableros con enchufes e interruptores y tena que manejar todo el sistema (lo que era factible gracias a que el programador era el mismo que dise y construy la mquina). Con el tiempo se introdujeron las tarjetas perforadas, para reemplazar al tablero, pero el sistema era esencialmente el mismo.
La segunda generacin (1955-1965): transistores y procesamiento por lotes La introduccin de los transistores permiti aumentar sustancialmente la confiabilidad de los computadores, lo que a su vez hizo factible construir mquinas comerciales. Por primera vez hubo una separacin entre diseadores, constructores, y programadores. La aparicin de los primeros compiladores (de FORTRAN) facilit la programacin, a costa de hacer mucho ms compleja la operacin de los computadores. Por ejemplo, para probar un programa en FORTRAN recin escrito, el programador deba esperar su turno, y: Cargar compilador de FORTRAN, tpicamente desde una cinta magntica. Poner el alto de tarjetas perforadas correspondientes al programa FORTRAN y correr el compilador. El compilador genera cdigo en assembler, as que hay que cargar ahora el ensamblador para traducirlo a lenguaje de mquina. Este paso requiere poner otra cinta con el ensamblador. Ejecutar el ensamblador, para generar el programa ejecutable. Ejecutar el programa Si hay errores en cualquiera de estos pasos, el programador deba corregir el programa y comenzar todo de nuevo. Obviamente, mientras el programador pona cintas y tarjetas, y mientras se devanaba los sesos para descubrir por qu el programa no funciona, la CPU de millones de dlares de costo se mantena completamente ociosa. Ms que rpido, se idearon mecanismos para mantener a la CPU siempre ocupada. El primero fue separar el rol de programador del rol de operador. Un operador profesional demoraba menos en montar y desmontar cintas, y poda acumular lotes de trabajos con requerimientos similares: por ejemplo, si se acumula la compilacin de varios programas FORTRAN, entonces el compilador de FORTRAN se carga una sola vez para todos los trabajos. An as, en la transicin de un trabajo a otro la CPU se mantena desocupada. Aparecieron entonces los monitores residentes, que fueron los precursores de los sistemas operativos. Un monitor residente es un pequeo programa que est siempre en la memoria del computador, desde que ste se enciende. Cuando un programa termina, se devuelve el control al monitor residente, quien inmediatamente selecciona otro programa para ejecutar. Ahora los programadores, en vez de decirle al operador qu programa cargar, deban informrselo al monitor (mediante tarjetas de control especiales): $JOB $FTN Programa FORTRAN $LOAD $RUN Datos para el programa $END Esto se conoce como procesamiento por lotes: el programador deja su alto de tarjetas, y despus vuelve a retirar la salida que se emite por la impresora (y que puede ser nada ms que la notificacin de que el programa tena un error de sintaxis). La tercera generacin (1965-1980): circuitos integrados y multiprogramacin El procesamiento por lotes evita que la CPU tenga que esperar tareas ejecutadas por lentos seres humanos. Pero ahora el cuello de botella se traslad a los dispositivos mecnicos (impresoras, lectoras de tarjetas y de cinta), intrnsecamente ms lentos que que las CPUs electrnicas. Para resolver esto, aparece, dentro de la tercera generacin de computadores, la multiprogramacin: varios trabajos se mantienen permanentemente en memoria; cuando uno de ellos tiene que esperar que una operacin (como grabar un registro en cinta) se complete, la CPU contina con la ejecucin de otro trabajo. Si se mantiene un nmero suficiente de trabajos en la memoria, entonces la CPU puede estar siempre ocupada. Pero el sistema sigue siendo esencialmente un sistema de procesamiento por lotes; los programadores no interactan en lnea con el computador, los tiempos de respuesta desde que se deja un trabajo para ejecucin hasta conocer el resultado son demasiado grandes. (En cabio, los computadores de primera generacin eran interactivos!) De ah nace el concepto de tiempo compartido que es una variante de la multiprogramacin en la cual una CPU atiende simultneamente los requerimientos de varios usuarios conectados en lnea a travs de terminales. Ya que los usuarios humanos demoran bastante entre la emisin de un comando y otro, una sola CPU es capaz de atender, literalmente, a cientos de ellos simultneamente (bueno, en realidad, uno despus de otro, pero los usuarios tienen la ilusin de la simultaneidad). Al mismo tiempo, cuando no hay ningn comando que ejecutar proveniente de un usuario interactivo, la CPU puede cambiar a algn trabajo por lote. La cuarta generacin (1980- ): computadores personales Con el advenimiento de la integracin a gran escala, que permiti concentrar en un solo chip miles, y luego millones de transistores, naci la era de la computacin personal. Los conceptos utilizados para fabricar los sistemas operativos de la tercera generacin de computadores siguen siendo, en general, adecuados para la cuarta generacin. Algunas diferencias destacables: Dado los decrecientes costos de las CPUs, ya no es nada de grave que un procesador est desocupado. La creciente capacidad de las CPUs permite el desarrollo de interfaces grficas; buena parte del cdigo de los sistemas operativos de hoy es para manejar la interfaz con el usuario. Los sistemas paralelos (un computador con varias CPUs), requieren sistemas operativos capaces de asignar trabajos a los distintos procesadores. Las redes de computadores y sistemas distribuidos abren nuevas posibilidades e imponen nuevas obligaciones a los sistemas operativos. Apoyo del hardware Interrupciones: la base de los sistemas operativos modernos Un computador moderno se compone de una CPU (a veces ms de una) y una serie de controladores de dispositivos, conectados a travs de un bus comn a la memoria. Cada controlador est a cargo de un tipo especfico de dispositivo. Cuando se enciende el computador, se ejecuta automticamente un pequeo programa, cuya nica tarea es cargar el sistema operativo en la memoria, y entregarle el control (ejecutarlo). El sistema operativo hace las inicializaciones del caso, y luego simplemente espera a que algn evento ocurra. La ocurrencia de un evento es, por lo general, sealizada por una interrupcin de software o hardware. Los controladores de dispositivo pueden gatillar una interrupcin en cualquier momento, enviando una seal a la CPU a travs del bus del sistema. Las interrupciones de software son gatilladas por procesos, por la va de ejecutar una instruccin especial que se conoce como llamada al sistema. Ejemplos de eventos que gatillan interrupciones: terminacin de una operacin de I/O, llamadas al sistema, divisin por cero, alarmas del reloj. Para cada tipo de interrupcin, debe existir una rutina que la atienda: el servidor de la interrupcin.
Cuando la CPU es interrumpida: La CPU deja de hacer lo que estaba haciendo, que puede haber sido nada, (si simplemente estaba esperando), o la ejecucin de un proceso. Determina el tipo de interrupcin. Ejecuta el servidor de interrupcin correspondiente. Contina lo que fue interrumpido. Ms en detalle, una forma de hacer todo esto es la siguiente: Dado que existe una cantidad limitada (y reducida) de tipos de interrupciones posibles, se usa una tabla con las direcciones de los servidores de cada interrupcin, tpicamente en las primersimas posiciones de la memoria. Esta tabla se conoce como vector de interrupciones. As por ejemplo, si las direcciones ocupan 4 bytes, la direccin del servidor de la interrupcin i se guarda en los 4 bytes a partir de la posicin 4i de la memoria. Cuando ocurre una interrupcin: 1a. La CPU debe memorizar lo que estaba haciendo para continuarlo despus: se guarda el PC (y posiblemente otros registros) en el stack del sistema. 1b.Se deshabilitan las interrupciones para que la CPU no sea interrumpida mientras atiende una interrupcin (situacin que podra generar caos). 2. Se determina la direccin del servidor de la interrupcin. 3. Se transfiere el control a esa direccin. 4. La rutina que atiende la interrupcin debe finalizar con una instruccin IRET, que restablece el estado que la CPU tena cuando fue interrumpida, usando los datos almacenados en el stack. Esquemas ms sofisticados enmascaran (deshabilitan selectivamente) las interrupciones en vez de deshabilitarlas totalmente (punto 1b), de manera que una interrupcin de alta prioridad SI pueda interrumpir a la CPU cuando est atendiendo una de menor prioridad. Todos los sistemas operativos modernos se basan en interrupciones (interrupt driven). Si no hay procesos que ejecutar, ni dispositivos ni usuarios que atender, el sistema operativo no hace nada: se "sienta" a esperar que algo pase. Cuando algo pasa, se sealiza una interrupcin, y el sistema operativo entra en actividad (o sea, los servidores de interrupcin son parte del sistema operativo). Ejemplo: multiprogramacin (timesharing. El sistema operativo inicializa el timer o reloj en una tajada de tiempo, y lo echa a andar. El sistema operativo entrega el control a un proceso. El proceso ejecuta. Concluido el tiempo prefijado, el timer provoca una interrupcin. El manejador de interrupciones del timer (que es parte del sistema operativo), guarda la informacin del proceso interrumpido necesaria para poder reanudarlo despus. Se repite el ciclo, escogiendo ahora otro proceso. Se puede obtener multiprogramacin sin interrupciones? Windows 3.x versus Windows 95: cooperative versus preemptive multitasking. Otro ejemplo: manejo de dispositivos de I/O Para comenzar una operacin de I/O, el sistema operativo escribe los registros del caso en el controlador del dispositivo. A su vez, el controlador determina qu hacer mirando el contenido de esos registros. Por ejemplo, si se trata de una solicitud de lectura, inicia la transferencia de datos desde el dispositivo hacia la memoria. Cuando finaliza la transferencia, el controlador le avisa a la CPU a travs de una interrupcin. Esto permite que la CPU, en vez de esperar que la transferencia termine (lo que sera I/O sincrnico), en el intertanto puede realizar otra tarea (I/O asincrnico). Una secuencia tpica: El proceso que est ejecutando en la CPU solicita una operacin de I/O, mediante una llamada al sistema. El sistema operativo suspende el proceso, ponindolo en la cola de procesos suspendidos, y comienza la operacin de I/O. El sistema operativo escoge otro proceso para que siga ejecutando en la CPU. Cuando la operacin de I/O se completa, el control vuelve al sistema operativo gracias a que el controlador del dispositivo provoc una interrupcin. El sistema operativo, determina, segn la interrupcin y sus tablas internas, que el proceso que haba sido suspendido ahora puede reanudarse, as que lo pone en la cola de procesos listos para ejecutar. El sistema operativo reanuda ese, o tal vez otro proceso de la cola de procesos listos. Proteccin En los primeros computadores el operador tena el control completo del sistema. Con el tiempo, se fueron desarrollando los sistemas operativos, y parte del control se traspas a ellos. Adems, para mejorar la utilizacin del sistema, se comenz primero a manejar varios programas en memoria en forma simultnea, y luego a atender simultneamente a varios usuarios. Pero el remedio trajo su propia enfermedad, ya que un programa poda por error o por mala intencin de su creador, modificar datos de otros programas, o peor an, modificar el propio sistema operativo, lo que poda botar todo el sistema. En general, un programa puede alterar el normal funcionamiento del sistema de las siguientes formas: Ejecutando una instruccin de I/O ilegal (por ejemplo, que borre todos los archivos del disco). Sobrescribiendo reas de la memoria que pertenecen al sistema operativo. No devolviendo el control de la CPU al sistema operativo. Para evitar esto, es indispensable el apoyo del hardware, a travs de los siguientes mecanismos. Operacin dual Para asegurar una operacin adecuada, se debe proteger al sistema operativo y todos los programas del malfuncionamiento de cualquier otro programa. Para eso, el hardware debe proveer al menos dos modos de operacin. Modo usuario. Modo sistema (o privilegiado, protegido o supervisor). El bit de modo indica el modo de operacin actual. Cuando se enciende el computador y se carga el sistema operativo, se comienza en modo sistema. El sistema operativo siempre cambia a modo usuario antes de pasar el control a un proceso de usuario. Cuando ocurre una interrupcin, el hardware siempre cambia a modo sistema. De esta manera, el sistema operativo siempre ejecuta en modo sistema. Cul es la gracia? Que hay ciertas operaciones crticas que slo pueden ser ejecutadas en modo sistema. Proteccin de I/O Para prevenir que un usuario ejecute instrucciones de I/O que puedan provocar dao, la solucin es simple: las instrucciones de I/O slo pueden ejecutarse en modo sistema. As los usuarios no pueden ejecutar I/O directamente, sino que deben hacerlo a travs del sistema, quien puede filtrar lo que sea del caso. Para que este mecanismo de proteccin sea completo, hay que asegurarse que los programas de usuario no puedan obtener acceso a la CPU en modo sistema. Por ejemplo, un programa de usuario podra poner una direccin que apunte a una rutina propia en el vector de interrupciones. As, cuando se produzca la interrupcin, el hardware cambiara a modo sistema, y pasara el control a la rutina del usuario. O, tambin, el programa de usuario podra reescribir el servidor de la interrupcin. Se requiere entonces...
Proteccin de memoria No slo hay que proteger el vector de interrupciones y las rutinas servidoras, sino que, en general, queremos proteger las reas de memoria utilizadas por el sistema operativo y por otros programas. Esto lo vamos a ver con ms detalle ms adelante, pero una forma es usando dos registros: base y lmite, que establecen el rango de direcciones de memoria que el programa puede accesar legalmente. Para que esto funcione, hay que comparar cada direccin accesada por un programa en modo usuario con estos dos registros. Si la direccin est fuera del rango, se genera una interrupcin que es atendida por el sistema operativo, quien aborta el programa (usualmente con un lacnico mensaje "segmentation fault"). Esta comparacin puede parecer cara, pero teniendo presente que se hace en hardware, no lo es tanto. Obviamente, el programa usuario no debe poder modificar estos registros: las instrucciones que los modifican son instrucciones protegidas. Proteccin de CPU Lo nico que falta, es asegurarse que el sistema operativo mantenga el control del buque, o sea, hay que prevenir, por ejemplo, que un programa entre en un ciclo infinito y nunca devuelva el control al sistema operativo. Esto se logra con un timer, tal como vimos en el ejemplo de multiprogramacin. Instrucciones privilegiadas Instruccin para cambiar a modo protegido Instrucciones para modificar registros de administracin de memoria (por ej., base y lmite) Instruccin para manejar el timer Instruccin para deshabilitar interrupciones Instrucciones para hacer I/O Entonces, cmo hace I/O un programa de usuario, si slo el sistema operativo puede hacerlo? El programa le pide al sistema operativo que lo haga por l. Tal solicitud se conoce como llamada al sistema, que en la mayora de los sistemas operativos se hace por medio de una interrupcin de software o trap a una ubicacin especfica del vector de interrupciones. Ejemplo hipottico, (parecido a MSDOS), para borrar un archivo: Poner en registro A el cdigo de la operacin: 41h = borrar archivo Poner puntero al nombre del archivo en registro B INT 21h (generar interrupcin de software) Como la llamada es a travs de una interrupcin, se hace lo de siempre: cambiar a modo protegido, y pasar control a la direccin en la posicin 4*21h del vector de interrupciones, o sea, a la rutina que maneja las llamadas al sistema (o tal vez, la rutina que maneja las llamadas que tienen que ver con archivos; puede que otras clases de llamadas sean atendidas por medio de otras interrupciones). Dicha rutina examina el registro A para determinar qu operacin debe ejecutar, y despus determina el nombre del archivo a travs del registro B. En seguida, decide si la operacin es vlida: puede que el archivo no exista o pertenezca a otro usuario; segn eso, borra el archivo o "patalea" de alguna manera. Cuando uno hace esto en un lenguaje de alto nivel, como C, simplemente escribe: char* Nombre = "Datos"; remove(Nombre); El compilador de C es quien se encarga de traducir esto a una llamada al sistema, ocultando el detalle de la interfaz con el sistema operativo. En resumen: los sistemas operativos modernos se apoyan ampliamente en el hardware. Las necesidades recin vistas (interrupciones, instrucciones privilegiadas, proteccin de memoria) fueron impuestas a los diseadores de hardware por los requerimientos de multiprogramacin de los sistemas operativos. Por eso dijimos que la historia de los sistemas operativos est interrelacionada con la historia de la arquitectura de computadores.
Conceptos claves que afectan el diseo de un S.O. Relocalizacin Relocalizar un conjunto de instrucciones y/o datos consiste en asignarle, para su ejecucin, un conjunto de de direcciones de memoria independientes del proceso de traduccin. Un programa puede ser traducido relativo a cierta direccin y cargado en memoria para su ejecucin en otra direccin. El proceso de relocalizacin comprende todas las actividades necesarias para la ejecucin de este programa en el nuevo conjunto de direcciones. La relocalizacin puede efectuarse en tiempos diversos: a) En tiempo de enlace por un cargador/enlazador. b) En tiempo de carga por un cargador relocalizador. c) En tiempo de ejecucin. Reentrancia Se dice que un programa es reentrante cuando una sola copia de ese programa puede ser simultneamente utilizada por varios usuarios. La reentrancia requiere que cada programa deba estar compuesto de dos partes: 1) Una parte o segmento, el cual contiene las instrucciones del programa y debe ser "pura" (no debe modificarse a si misma) ya que es compartida. 2) Una segunda parte que contiene los datos que si pueden ser modificados por el programa. Interrupciones Una Interrupcin es un mecanismo del hardware que obliga al CPU a suspender su actividad para atender un evento externo. Este mecanismo fue desarrollado como un medio para incrementar la eficiencia del procesador. El objetivo de su desarrollo est ligado a la simultaneidad de las actividades del CPU y las operaciones de entrada/salida, ya que se necesitaba un mecanismo a travs del cual pudiera indicarse al cpu la finalizacin de estas actividades. Otro motivo de su desarrollo fue la creacin de un mecanismo para manejar ciertas condiciones internas tales como: divisin por cero, overflow, cdigos de operacin invlidos, condiciones de reloj, etc. Canales y Procesadores de E/S El concepto de canal ha existido por muchos aos. Un canal es un procesador especial que ejecuta unos programas particulares llamados programas de canal. Usualmente son costosos, por lo que existen normalmente un nmero limitado en los sistemas de computacin. El objetivo de los programas de canal es realizar operaciones de entrada/salida. Los programas de canal normalmente comparten la memoria principal con los programas de usuario. Existen normalmente dos tipos de canales: Multiplexores: Est orientado a la transmisiones carcter por carcter, por lo que se utiliza con dispositivos de baja velocidad. Selectores: permite la transmisin de bloques de informacin entre la memoria y los dispositivos, por lo que se usa asociado a dispositivos de alta velocidad. Buffering Un buffer es un rea de memoria principal utilizada para almacenar datos durante las operaciones de entrada y salida. Por ejemplo durante una entrada los datos son colocados en el buffer por el canal al terminar la transferencia, esos datos pueden ser accesados por el procesador. Si se usa un solo buffer el proceso se lleva a cabo de la forma siguiente: el canal deposita datos en el buffer, el procesador los procesa, y asi sucesivamente. El procesador no puede comenzar a procesar los datos hasta que el canal termine de depositarlos en el buffer.
El uso de dos buffer permite superponer actividades las actividades de procesamiento y entrada/salida. Mientras el canal deposita datos en el buffer, el procesador procesa los datos depositados en el otra buffer. Cuando el procesador termina con los datos del primer buffer, comienza a procesar los datos del segundo y simultneamente el canal deposita datos en el primer buffer, esta tcnica es mejor conocida como doble buffering. Proteccin de la memoria principal En los sistemas multiusuario es necesario utilizar un mecanismo de proteccin de las reas de memoria para prevenir que un usuario accese el conjunto de direcciones de otro usuario o del sistema operativo. Estos mecanismos se basan en la limitacin del rango de direcciones que un programa puede referenciar. Por ejemplo, si un programa utiliza direcciones contiguas de memoria, pudieran utilizarse un par de registros que delimitarn el lmite inferior y superior del rango de direcciones usado por el programa. Si el programa tratara de accesar direcciones superiores o inferiores al rango de direcciones delimitado por el par de registros se producira una interrupcin de hardware. Pudieran tambin utilizarse claves de proteccin asociadas a reas de memoria; un programa solo pudiera accesar las reas de memoria que tuviesen claves de proteccin iguales a las del programa. Relojes Un sistema de computacin puede tener varios relojes. El reloj intervalo timer (reloj para medir intervalos de tiempo) se utiliza para prevenir que un usuario monopolice el CPU. Despus de un perodo de tiempo este reloj genera una interrupcin y el procesador puede as ser asignado a otro trabajo. Pueden existir tambin otros relojes para llevar la cuenta de la fecha y hora y otros fines.
Direccionamiento de Base y desplazamiento
En la medida que crecieron las capacidades de memoria de los computadores, las arquitecturas tuvieron que ser modificadas para poder acomodar rangos muy grandes de direcciones. Un computador que puede accesar 16 MB requerira un campo de direccin de 24 bits, lo que implicara instrucciones de mquina muy grandes, sobre todo en caso de instrucciones de varios operandos. Para solucionar este problema la mayora de las arquitecturas incluyen algn tipo de direccionamiento de base y desplazamiento bajo el cual, un nmero (desplazamiento) es sumado al contenido de algn registro (registro base) para generar una direccin de memoria. Este esquema tiene adems la ventaja de hacer a los programas independientes del lugar de memoria donde son cargados, lo que es muy valioso en sistemas de multiprogramacin donde los programas son cargados cada vez en un lugar diferente. Estado de problema, Estado Supervisor, Instrucciones Privilegiadas Los sistemas de computacin tienen normalmente varios estados de ejecucin que son utilizados para incrementar la seguridad del sistema. Normalmente existe un estado de problema y uno o varios estados de supervisor. Se dice que un procesador se encuentra en estado de problema cuando procesa las instrucciones que forman el sistema operativo. Cuando un procesador se encuentra en un estado particular solo puede ejecutar un subconjunto del conjunto de instrucciones. Un usuario que se encuentre en estado de problema no puede ejecutar ciertas instrucciones, ya que si al usuario se le permitiese la ejecucin de este tipo de instrucciones, pudiera realizar acciones que afecten la seguridad del sistema o modificar informacin confidencial perteneciente a otro usuario. Las instrucciones que inician la ejecucin de programas de cana, las instrucciones que modifican los relojes, las instrucciones que manipulan ciertos registros del CPU, etc., son ejemplos de instrucciones que no pueden ejecutarse en estado de problema, son instrucciones llamadas privilegiadas que solo pueden ejecutarse en estado supervisor, sea, cuando se ejecuta el sistema operativo. El sistema operativo es considerado como el usuario ms confiable, por lo cual realiza su ejecucin en estado de supervisor bajo el cual puede ejecutar todo el conjunto de instrucciones del equipo. En algunos sistemas se utilizan ms de dos estados. Es interesante hacer notar que el nmero de instrucciones privilegiadas (instrucciones que solo pueden ejecutarse en estado supervisor) se han incrementado con la evolucin de la arquitectura de hardware lo que indica que las nuevas generaciones de arquitecturas han incorporado al hardware, ms y ms funciones que antes eran realizadas por el sistema operativo. Algunos microcomputadores tienen en hardware la totalidad del sistema operativo. Spooling En un sistema que utilice spooling (operaciones perifricas simultneas en lnea) un dispositivo de alta velocidad (disco) se interpone entre un programa en ejecucin y un dispositivo de baja velocidad que est siendo utilizado por el programa. Por ejemplo, en lugar de imprimir lneas directamente a la impresora, las lneas se graban a disco, lo que permite al programa terminar ms rpido y que el impresor pueda ser compartido eficientemente entre varios usuarios. Cuando exista disponibilidad fsica del impresor las lneas pueden leerse del disco e imprimirse.
Microprogramacin (Firmware) Unidades de control micro programables El concepto de microprogramacin es generalmente atribuido al profesor Maurice Wilkes, el cual en 1.951 present los conceptos que forman la base de las tcnicas actuales de microprogramacin.
En los aos 60 cuando apareci la IBM 360, la microprogramacin fue utilizada en gran escala. Durante los aos 60, los fabricantes de computadores utilizaron la microprogramacin para la implementacin del conjunto de instrucciones. A comienzos de los 70, apareci la microprogramacin dinmica, la cual permite que nuevos microprogramas sean cargados fcilmente en la memoria de la unidad de control, donde son ejecutados. La microprogramacin envuelve la programacin de las instrucciones de mquina. Los microprogramas residen en una unidad de control donde son ejecutados. Los microprogramas estn formados por microinstrucciones que son an ms elementales que las instrucciones de lenguaje de mquina. Cada instruccin en lenguaje de mquina se implementa a travs de un microprograma. El uso de esta tcnica implica que la memoria en donde residen los microprogramas sea mucho ms rpida que la memoria principal. La microprogramacin se relaciona con los sistemas operativos, porque en los sistemas operativos existen secuencias de instrucciones que se ejecutan frecuentemente. La implementacin microprograma de esta secuencia de instrucciones, mejora notablemente el comportamiento de un sistema de computacin, reduce los costos de desarrollo y mejora la seguridad del sistema (ya que el microprograma no puede ser violentado por los programas de usuario); el inconveniente, quizs, es la limitaciones a la hora de realizar modificaciones. Emulacin Es una tcnica bajo la cual una mquina se comporta como si fuese otra. El conjunto de instrucciones de la mquina emulada es microprogramada en la mquina husped. De esta manera los programas objeto de la mquina emulada corren en la mquina husped.
Lenguajes de Programar S.O. Durante mucho tiempo los sistemas operativos fueron implementados en lenguaje ensamblador. En los ltimos aos se han diseado e implementado varios lenguajes para implementar sistemas operativos. La mayora de los lenguajes de programar sistemas operativos son ms eficientes que el lenguaje ensamblador. Sin embargo usualmente se necesita el uso de lenguaje ensamblador para implementar ciertas funciones. La utilizacin de lenguajes de programacin de sistemas ha reducido el tiempo necesario para programar un S.O., ya que se estima que las funciones que deben implementarse en lenguaje ensamblador (pulida), solo representan el 1% del esfuerzo de programacin necesario. Un ejemplo de un lenguaje de programacin de sistemas es el C, con el que se elabor casi en su totalidad el S.O. UNIX. Componentes del Sistema Operativo. Gestin de procesos Un proceso es simplemente, un programa en ejecucin que necesita recursos para realizar su tarea: tiempo de CPU, memoria, archivos y dispositivos de E/S. El SO es el responsable de: Crear y destruir procesos Parar y reanudar procesos Ofrecer mecanismos para que los procesos puedan comunicarse y se sincronicen La gestin de procesos podra ser similar al trabajo de oficina. Se puede tener una lista de tareas a realizar y a estas fijarles prioridades alta, media, baja por ejemplo. Debemos comenzar haciendo las tareas de prioridad alta primero y cuando se terminen seguir con las de prioridad media y despus las de baja. Una vez realizada la tarea se tacha. Esto puede traer un problema que las tareas de baja prioridad pueden que nunca lleguen a ejecutarse. y permanezcan en la lista para siempre. Para solucionar esto, se puede asignar alta prioridad a las tareas ms antiguas. Gestin de la memoria principal La memoria es una gran tabla de palabras o bytes que se referencian cada una mediante una direccin nica. Este almacn de datos de rpido acceso es compartido por la CPU y los dispositivos de E/S, es voltil y pierde su contenido ante fallos del sistema. El SO es el responsable de: Conocer qu partes de la memoria estn siendo utilizadas y por quin Decidir qu procesos se cargarn en memoria cuando haya espacio disponible Asignar y reclamar espacio de memoria cuando sea necesario Gestin del almacenamiento secundario Un sistema de almacenamiento secundario es necesario, ya que la memoria principal (almacenamiento primario) es voltil y adems muy pequea para almacenar todos los programas y datos. Tambin es necesario mantener los datos que no convenga mantener en la memoria principal. El SO se encarga de: Planificar los discos. Gestionar el espacio libre. Asignar el almacenamiento. Verificar que los datos se guarden en orden El sistema de entrada y salida Consiste en un sistema de almacenamiento temporal (cach), una interfaz de manejadores de dispositivos y otra para dispositivos concretos. El sistema operativo debe gestionar el almacenamiento temporal de E/S y servir las interrupciones de los dispositivos de E/S.
Sistema de archivos Los archivos son colecciones de informacin relacionada, definidas por sus creadores. stos almacenan programas (en cdigo fuente y objeto) y datos tales como imgenes, textos, informacin de bases de datos, etc. El SO es responsable de: Construir y eliminar archivos y directorios. Ofrecer funciones para manipular archivos y directorios. Establecer la correspondencia entre archivos y unidades de almacenamiento. Realizar copias de seguridad de archivos. Existen diferentes sistemas de archivos, es decir, existen diferentes formas de organizar la informacin que se almacena en las memorias (normalmente discos) de los ordenadores. Por ejemplo, existen los sistemas de archivos FAT, FAT32, ext3, NTFS, XFS, etc. Desde el punto de vista del usuario estas diferencias pueden parecer insignificantes a primera vista, sin embargo, existen diferencias muy importantes. Por ejemplo, los sistemas de ficheros FAT32 y NTFS, que se utilizan fundamentalmente en sistemas operativos de Microsoft, tienen una gran diferencia para un usuario que utilice una base de datos con bastante informacin ya que el tamao mximo de un fichero con un sistema de archivos FAT32 est limitado a 4 gigabytes, sin embargo, en un sistema NTFS el tamao es considerablemente mayor. Sistemas de proteccin Mecanismo que controla el acceso de los programas o los usuarios a los recursos del sistema. El SO se encarga de: Distinguir entre uso autorizado y no autorizado. Especificar los controles de seguridad a realizar. Forzar el uso de estos mecanismos de proteccin. Sistema de comunicaciones Para mantener las comunicaciones con otros sistemas es necesario poder controlar el envo y recepcin de informacin a travs de las interfaces de red. Tambin hay que crear y mantener puntos de comunicacin que sirvan a las aplicaciones para enviar y recibir informacin, y crear y mantener conexiones virtuales entre aplicaciones que estn ejecutndose localmente y otras que lo hacen remotamente. Programas de sistemas Son aplicaciones de utilidad que se suministran con el SO pero no forman parte de l. Ofrecen un entorno til para el desarrollo y ejecucin de programas, siendo algunas de las tareas que realizan: Manipulacin y modificacin de archivos. Informacin del estado del sistema. Soporte a lenguajes de programacin. Comunicaciones. Gestor de recursos Como gestor de recursos, el sistema operativo administra: La unidad central de procesamiento (donde est alojado el microprocesador). Los dispositivos de entrada y salida. La memoria principal (o de acceso directo). Los discos (o memoria secundaria). Los procesos (o programas en ejecucin). Y en general todos los recursos del sistema. Clasificacin Administracin de tareas Monotarea: Solamente permite ejecutar un proceso (aparte de los procesos del propio SO) en un momento dado. Una vez que empieza a ejecutar un proceso, continuar hacindolo hasta su finalizacin y/o interrupcin. Multitarea: Es capaz de ejecutar varios procesos al mismo tiempo. Este tipo de SO. normalmente asigna los recursos disponibles (CPU, memoria, perifricos) de forma alternada a los procesos que los solicitan, de manera que el usuario percibe que todos funcionan a la vez, de forma concurrente. Administracin de usuarios Monousuario: Slo permite ejecutar los programas de un usuario al mismo tiempo. Multiusuario: Permite que varios usuarios ejecuten simultneamente sus programas, accediendo a la vez a los recursos de la computadora. Normalmente estos sistemas operativos utilizan mtodos de proteccin de datos, de manera que un programa no pueda usar o cambiar los datos de otro usuario. Manejo de recursos Centralizado: Permite usar los recursos de una sola computadora. Distribuido: Permite utilizar los recursos (memoria, CPU, disco, perifricos...) de ms de una computadora al mismo tiempo. Ejemplos de sistemas operativos Microsoft Windows. Mac OS X. GNU/Linux. Unix. Solaris. FreeBSD. OpenBSD. Google Chrome OS. Debian. Ubuntu. Mandriva. Sabayon. Fedora. Linpus Linux. Haiku (BeOS). Ejemplos de sistemas operativos para dispositivos mviles. Android. iOS. Bada. BlackBerry OS. BlackBerry 10. Windows P.hone. Symbian O.S. HP webOS. Firefox OS. Ubuntu Phone OS.
CONCLUSION
BIBLIOGRAFIA -Cfr., entre otros: Tanenbaum, A. (1992) Modern Operating Systems, Englewood Cliffs: Prentice-Hall; Haldar, S. y Aravind, A. A. (2010) Operating Systems, Pearson Education India, pp. 12 y ss.; Turner, R. W. (1986) Operating Systems: design and implementation, MacMillan. -Cisco Systems (1992). cisco.com (ed.): Fundamentos de UNIX (certificacin). Consultado el 10 de febrero de 2010. -Washington Post - Debut de Windows 95 (en ingls). -toastytech.com (ed.): BeOS 5.0 Personal Edition (en ingls) (2010). Consultado el 10 de febrero de 2010.