Sistemas operativos y entornos amigables - ALIPSO.COM: Monografías, resúmenes, biografias y tesis gratis.
Aprende sobre marketing online, desarrollo de sitios web gratis en Youtube
Suscribite para recibir notificaciones de nuevos videos:
Sábado 20 de Abril de 2024 |
 

Sistemas operativos y entornos amigables

Imprimir Recomendar a un amigo Recordarme el recurso

Agregado: 12 de ABRIL de 2000 (Por ) | Palabras: 34637 | Votar | Sin Votos | Sin comentarios | Agregar Comentario
Categoría: Apuntes y Monografías > Computación > Varios >
Material educativo de Alipso relacionado con Sistemas operativos entornos amigables
  • Sistemas de Informacion General:
  • Procesal civil sistemas para apreciar la prueba:
  • Bases de datos: introducción a los sistemas de archivos.: Almacenamiento. Tipos de acceso. Componentes físicos. Tipos de organización. Accesos a disco. Operaciones sobre ficheros.

  • Enlaces externos relacionados con Sistemas operativos entornos amigables

    SISTEMAS OPERATIVOS Y ENTORNOS AMIGABLES


    1-FUNCIONES DEL SISTEMA OPERATIVO

    Casi sin excepción, toda computadora tiene un sistema operativo. Varían mucho según los distintos modelos de computadora, pero el sistema operativo siempre esta ahí.

    Para la mayoría de los usuarios el sistema operativo es la máquina. nunca ven una máquina en bruto'; en vez de esto ven y utilizan la interfaz que presenta el sistema operativo.

    Una máquina en bruto es un dispositivo poco agradable. Para que realice una determinada tarea, requiere un programa en una representación binaria específica del código particular de máquina.

    En especial, necesita programas más o menos complicados para manejar sus periféricos antes de que pudiera siquiera comunicarse con el mundo exterior.

    En computadoras personales grandes, en minicomputadoras y en macrocomputadoras, es posible identificar cierto número de partes individuales de software del sistema, la mayor parte, destinadas a la preparación de programas: editores, ensambladores, compiladores, editores de enlace, etc.

    Abarcando todo esto se encuentra el sistema operativo. Dicho sistema se ha descripto como el pegamento que mantiene juntos a todos los otros componentes. También se le puede considerar lo que proporciona una infraestructura: un medio común en el cual los diferentes programas de sistemas pueden operar, incluyendo los mecanismos para comunicarse con los dispositivos periféricos.

    Hace muchos año, quedó claro que debía determinarse una forma de proteger a los programadores de la complejidad del hardware. La forma en que esto ha evolucionado de manera gradual es colocando un nivel de software por arriba del simple hardware, con el fin de controlar todas las partes del sistema y presentar al usuario una interfaz o máquina virtual que facilite la comprensión del programa. Este nivel de software es el sistema operativo.

    es posible definir la función de un sistema operativo como aquella que proporciona un medio para el usuario de un sistema de computación, cualesquiera que sean sus necesidades: desarrollo de programas, control de procesos en tiempo real, manejo de base de datos, nómina, etc.; En el caso de una computadora personal sólo hay un usuario, y la función única del sistema operativo es implantar la interfaz con el usuario. en el caso de un sistema con múltiples usuarios el sistema operativo debe compartir los recursos a fin de proporcionar la interfaz del usuario a cada uno de éstos.

    2- CATEGORIAS DEL SISTEMA OPERATIVO

    * Un solo usuario y múltiples usuarios: se explican por sí mismos.

    * Un sistema de multiprogramación es aquel en el cual el procesador(es) disponible (s) (s) comparten (por el sistema operativo) varios programas corresidentes en la memoria principal, a fin de mejorar la utilización de la C.P.U.

    * Un sistema de alta prioridad - baja prioridad es un sistema de un solo usuario en el cual dos programas están multiprogramados. Uno (el de alta prioridad) interactúa con la terminal y corre tanto como sea posible; el programa de baja prioridad se asigna al procesador siempre que el programa de alta prioridad no pueda continuar. En cuanto el trabajo de alta prioridad esté libre para continuar, lo hace.

    Un sistema de alta prioridad - baja prioridad en un caso particular de sistema de un solo usuario y procesos múltiples.

    Un sistema concurrente o de tareas múltiples es una generalización del sistema de alta prioridad - baja prioridad en la cual la persona que utiliza el sistema de un sólo usuario puede iniciar cierto número de trabajos concurrentes, asignando el exhibidor de la terminal a cualquiera de los trabajos, según se necesite.

    Un sistema de tiempo compartido, es aquel que comparte el procesador y la memoria entre cierto número de programas, asociado cada uno con una terminal interactiva remota, de manera tal que cada usuario considera que tiene una máquina para el solo.

    * Un sistema de procesamiento de transacciones se parece a un sistema de tiempo compartido ya que da servicio a cierto número de terminales remotas. Sin embargo, mientras que en un sistema de tiempo compartido cada usuario remoto está asociado con un programa distinto, y es independiente por completo de las otras terminales y programas, en un sistema. En un sistema Tiempo Compartido todas las terminales están conectadas al mismo programa. Este programa acepta transacciones provenientes de sus terminales, las procesa y envía respuestas.

    * Un sistema de aplicación general es un sistema de múltiple usuarios que combinan procesamientos por lotes, tiempo compartido y tal vez procesamiento de transacciones en un sólo sistema( generalmente, grande y complejo)

    3- HISTORIA DE LOS SISTEMAS OPERATIVOS

    La primera computadora digital real fue diseñada por el primer matemático inglés Charles Babbage (1792 - 1871). Nunca logró que funcionara de manera adecuada, ya que ésta era un diseño puramente mecánico y la tecnología de su época no podía producir las ruedas, engranes, levas y demás partes mecánicas con la precisión que él necesitaba. No tenía Sistema Operativo.

    1945 - 1955: la primera generación, bulbos y conexiones

    Después de los infructuosos esfuerzos de Babbage, hubo poco progreso en la construcción de las computadoras digitales, hasta la Segunda Guerra Mundial. Se logró construir máquinas de cálculo mediante bulbos. Éstas máquinas eran enormes y llenaban cuartos complejos con decenas de miles de bulbos, y eran mucho más lentas que la computadora casera más económica en nuestros días.

    Un solo grupo de personas diseñaba, construía, programaba, operaba y daba mantenimiento a cada máquina.

    No se oía de los sistemas operativos. El modo usual de operación consistía en que el programador reservaba cierto período en una hoja de reservación pegada a la pared, iba al cuarto de la máquina, insertaba su conexión en la computadora y pasaba unas horas esperando que ninguno de los 20.000 o más bulbos se quemara durante la ejecución.

    1955 - 1965: La segunda generación: Transistores y sistemas de procesamiento por lotes.

    Ésta introducción del transistor a mediados de los años cincuenta modificó en forma radical el panorama. Las computadores se volvieron confiables. Por primera vez, hubo una clara separación entre los diseñadores, constructores, operadores, programadores y personal de mantenimiento.

    Para ejecutar un trabajo, el programador debía primero escribir el programa en hojas de papel para después perforar las tarjetas. Después debía llevar el paquete de tarjetas perforadas al cuarto de lectura y dárselas a uno de los programadores.

    Dado el alto costo del equipo, no debe sorprender el hecho de que las personas buscaron en forma por demás, rápida, vías para reducir el tiempo invertido. La solución que, por lo general se adoptó, fue la de sistema de procesamiento por lotes.

    1965 - 1980: La tercera generación: Circuitos Inttegrados y Multiprogramación

    A principios de la década de los sesenta, estaban las computadoras científicas de gran escala, orientadas a palabras como la 7094, la cual se utilizaba en cálculos científicos y de ingeniería. Por otro lados, estaban las computadoras comerciales, orientadas a caracteres, como la 1401, de uso común para el ordenamiento de cintas a impresión por los bancos y las compañías aseguradoras.

    El desarrollo y mantenimiento de dos líneas de productor completamente distintas era una propuesta cara para los fabricantes.

    I.B.M. intentó resolver ambos problemas a la vez; para ello, introdujo el sistema 360. El 360 era una serie de máquinas con software compatible, con un rango desde la 1401 hasta máquinas más poderosas que la 7094.

    La 360 fue la primera línea principal de computadoras que utilizo los circuitos integrados ( a pequeña escala), lo que proporciono una gran ventaja de precio y desempeño con respecto de las maquinas de la segunda generación, construidas a partir de transistores individuales.

    No había forma de que IBM (o cualquier otra empresa) pudiera escribir un pedazo de software que cumpliera con todos los requisitos en conflicto. El resultado fue un sistema operativo enorme y extraordinariamente complejo. También popularizaron varias técnicas fundamentales, ausentes de los sistemas operativos de la segunda generación, de las cuales la mas importante tal vez sea la multiprogramación .

    Otra de las características principales de los sistemas operativos de la tercera generación era la capacidad de leer trabajos de las tarjetas de discos, tan pronto como llegaron al cuarto de computo,

    Así, siempre que concluyera un trabajo, el sistema operativo podía cargar un nuevo trabajo del disco en la partición que quedara desocupada y ejecutarlo. Esta técnica se llama SPOOLiING y también se utilizo para las salidas. Con el spooling, las 1401 ya no fueron necesarias y desapareció el transporte de las cintas de un lado al otro,

    Aunque los sistemas operativos de la tercera generación eran adecuados para los grandes cálculos científicos y la ejecución de un procesamiento por lotes.

    Con los sistemas de tercera generación, el tiempo transcurrido entre el envío de un trabajo y la obtención de la salida era a menudo de varias horas.

    Este deseo de una rápida respuesta preparo el camino para el tiempo compartido, variante de la multiprogramación en la que cada usuario tenia una terminal en línea.

    Otro desarrollo fundamental durante la tercera generación fue el crecimiento fenomenal de las minicomputadoras.

    Ken Thompson, se encontró una pequeña minicomputadora PDP-7 que nadie utilizaba e intento escribir una versión desprotegida de multics para un solo usuario.

    Este trabajo desemboco en el sistema operativo UNIX, que en la actualidad domina los mercados de las minicomputadoras y estaciones de trabajo.

    3-d 1980-1990: La cuarta generación: Computadoras personales

    Con el desarrollo de los circuitos LCI (Large Scale Integracion) , chips con miles de transistores en un centímetro cuadrado de silicio, se inicio la era de la computadora. Las computadoras personales no eran muy distintas de las minicomputadoras del tipo de la PDP-11, pero en términos del precio si eran distintas.

    Las computadoras personales mas poderosas utilizadas por empresas, universidades e instalaciones de gobierno reciben el nombre de ESTACIONES DE TRABAJO, pero en realidad solo son computadoras personales grandes.

    Un interesante desarrollo que comenzó a llevarse a cabo a mediados de la década de los ochenta ha sido el crecimiento de las redes de computadoras personales con sistemas operativos de red y sistemas operativos distribuidos. En un sistema operativo de red, los usuarios están conscientes de la existencia de varias computadoras y pueden conectarse con maquinas remotas y copiar archivos de una maquina a otra. Cada maquina ejecuta su propio sistema operativo local y tiene su propio usuario.

    Por el contrario, un sistema operativo distribuido es aquel que aparece ante sus usuarios como un sistema tradicional de un solo procesado, aun cuando este compuesto por varios procesadores. En un sistema distribuido verdadero, los usuarios no deben ser conscientes del lugar donde su programa se ejecute o del lugar donde se encuentran sus archivos; eso debe ser manejado en forma eficaz y automática por el sistema operativo.

    Estructura de los sistemas operativos

    Examinaremos cuatro estructuras distintas.

    Sistemas monolíticos

    Este tipo de organización es la mas común: La estructura consiste en que no existe estructura alguna.

    El sistema operativo se escribe como una educación de procedimientos, cada uno de los cuales puede llamar a los demás cada vez que así lo requiera cuando se usa esta técnica, cada procedimiento del sistema tiene una interfaz bien definida en términos de parámetros y resultados y cada uno de ellos es libre de llamar a cualquier otro si estos últimos proporciona cierto calculo útil para el primero.

    Para construir el programa objeto real del sistema operativo mediante este punto de vista uno compila en forma individual los procedimientos o los archivos que contienen los procedimientos y después los enlaza en un solo archivo objeto con el ligador. En términos del ocultamiento de la información, esta es prácticamente nula: Cada procedimiento es visible a los demás.

    Los servicios que proporcionan el sistema operativo se solicita colocando los parámetros bien definidos, como en los registros o en la pila, para después ejecutar una instrucción especial de trampa de nombre llamada al núcleo o llamada al supervisor.

    Esta instrucción cambia la maquina del modo usuario al modo núcleo y transfiere el control al sistema operativo.

    El sistema operativo examina entonces los parámetros de la llamada para determinar cual de ellos se desea realizar; A continuación, el sistema operativo analiza una tabla que contiene en la entrada un apuntador al procedimiento que realiza la k-esima llamada al sistema. Esta operación identifica el procedimiento de servicio, al cual se llama. Por ultimo, la llamada al sistema termina y el control regresa al programa del usuario.

    Esta organización sugiere una estructura básica del sistema operativo:

    1- Un programa principal se llama al procedimiento del servicio solicitado.

    2- Un conjunto de procedimiento de servicios que lleva a cabo las llamadas al sistema.

    3- Un conjunto de procedimientos utilitarios que ayudan al procedimiento de servicio.

    Sistemas con capas

    Consiste en organizar el sistema operativo como una jerarquía de capas, cada una construida sobre la inmediata inferior. El mismo sistema construido de esta manera fue el sistema THE desarrollado en Holanda.

    El sistema tenia seis capas como se muestra en la figura. La capa 0 con la asignación del proceso t alterna entre los procesos cuando ocurren las interrupciones o expiran los cronómetros sobre la capa 0, el sistema consta de procesos secuenciales, cada uno de los cuales se podía programar sin tener que preocuparse por el hecho de que varios procesos estuvieran en ejecución en el mismo procesador. En otras palabras la capa 0 proporcionaba la multiprogramacion basica de la CPU.

    La capa 1 realizaba la administración de la memoria. Por encima de la capa 1, los procesos no debían preocuparse se estaban en la memoria o en el recipiente; el software de la capa 1 se encargaba de garantizar que las paginas llegaran a la memoria cundo fueran necesarias

    CAPAS

    ---------------------------------------------------------------------------------------------------

    5 El procesador

    ---------------------------------------------------------------------------------------------------

    4 Programas del usuario

    ---------------------------------------------------------------------------------------------------

    3 Control de entrada/ salida

    --------------------------------------------------------------------------------------------------

    2 Comunicación operador - proceso

    --------------------------------------------------------------------------------------------------

    1 Administración de la memoria y del disco

    --------------------------------------------------------------------------------------------------

    0 Asignación del procesador y multiprogramación

    --------------------------------------------------------------------------------------------------

    La capa 2 se encarga de la comunicación entre cada proceso y la consola del operador . La capa 3 controla los dispositivos E/S y guarda en almacenes (buffers) los flujos de información entre ellos. Por encima de la capa tres cada proceso puede trabajar con dispositivos de E/S con propiedades adecuadas, en vez de dispositivos reales con muchas peculiaridades. La capa 4 es donde estaban los programas del usuario. Estos no tenían que preocuparse por el proceso, memoria, consola o control de E/S . El proceso operador del sistema se localizaba en la capa 5.

    Una generalización mas avanzada del concepto de capas se presento en el sistema MULTICS. En lugar de capas, MULTICS estaba organizado como una serie de anillos concéntricos, siendo los anillos interiores los privilegiados, cuando un procedimiento de un anillo exterior deseaba llamar a un procedimiento de un anillo exterior debía hacer el equivalente a una llamada al sistema; es decir; una instrucción TRAP cuyos parámetros eran validadas con cuidado antes de permitir que procediese la llamada. Aunque todo el sistema operativo era parte del espacio de direcciones de cada proceso del usuario en MULTICS, el hardware posibilito el diseño de procedimientos individuales (segmentos de memoria, en realidad) de forma protegida contra la lectura , escritura o ejecución.

    Maquinas virtuales

    Son versiones iniciales de OS/360 eran, en sentido estricto, sistemas de procesamiento por lotes. Sin embargo, muchos de los usuarios de 360 deseaban tener tiempo compartido.

    El sistema de tiempo compartido oficial de IBM, tSS/360, tuvo una entrada retrasada y cuando finalmente apareció era tan grande y lento que pocos lugares lo adoptaron

    Este sistema cuyo nombre original era CP/CMS y que ahora se llama VM/370 se baso en una observación astuta: un sistema de tiempo compartido proporciona multiprogramación y una maquina extendida con una interfaz mas conveniente que el mero hardware. La esencia de Vm/370 es la total separación entre estas dos funciones.

    El corazón del sistema, llamado monitor de la maquina virtual se ejecuta en el hardware simple y realiza la multiprogramación , proporcionando no una, sino varias maquinas virtuales a la siguiente capa superior; Sin embargo, la diferencia de los demás sistemas operativos, estas maquinas virtuales no son maquinas extendidas con archivos u otras características adecuadas. En lugar de esto, son copias exactas de hardware simple, con su modo núcleo/usuario, interrupciones y todo lo demás que posee la maquina real.

    Puesto que cada maquina virtual es idéntica al hardware real , cada una puede ejecutar cualquier sistema operativo que se ejecute en forma directa sobre el hardware.

    Las distinta maquinas virtuales pueden, y por lo general lo hacen , ejecutar distintos sistemas operativos.

    Cuando un programa CMS ejecuta una llamada al sistema, la llamada es atrapada por el sistema operativo en su propia maquina virtual, no a VM/370, de la misma forma en que lo haría si se ejecutar en una maquina real en vez de una virtual. CMS proporciona entonces las instrucciones normales de E/S en hardware para la lectura de disco virtual lo necesario para llevar adelante la llamada. Estas instrucciones de E/S son atrapadas por VM/370, que entonces las lleva a cabo como parte de al simulación del hardware verdadero. Al hacer una separación total de las funciones de multiprogramación y proporcionar una maquina extendida , cada una de las partes puede ser mas sencilla, flexible y tener un fácil mantenimiento.

    Modelo cliente - servidor

    VM/370 gano mucho en sencillez al trasladar gran parte del código tradicional del sistema operativo (al implantar la maquina extendida) en una capa superior, CMS.

    Sin embargo, VM/370 sigue siendo un programa complejo, puesto que la simulación de varios 370 virtuales no es tan simple (en especial si usted desea que todo sea eficaz).

    Una tendencia de los sistemas operativos modernos es la de explorar mas esta idea de mover el codigo a capas superiores y eliminar la mayor parte posible del sistema operativo para mantener un nucleo mínimo. El punto de vista usual es el de implantar la mayoría de las funciones del sistema operativo en los procesos del usuario.

    Para solicitar un servicio, como la lectura de un bloque de cierto archivo, un proceso del usuario (denominado en este caso proceso cliente) envía la solicitud a un proceso servidor, que realiza entonces el trabajo y regresa la respuesta.

    Otra de las ventajas del modelo cliente- servidor es su capacidad de adaptación para su uso en los sistemas distribuidos.

    Algunas funciones del sistema operativo (como el cargado de comandos en los registros físicos del dispositivo de E/S) son difíciles, si no es que imposibles de realizar a partir de programas del usuario. Existen dos formas de enfrentar este problema. Una es la de hacer que algunos procesos de servidores críticos se ejecuten en realidad en modo núcleo, con acceso total al hardware pero de forma que se comuniquen con los demás procesos mediante el mecanismo normal de mensajes.

    La otra forma es la de construir una cantidad mínima de mecanismos dentro del núcleo, pero manteniendo las decisiones de política relativas a los usuarios dentro del espacio del usuario


    4 -PROCESOS

    La CPU ejecuta una elevada cantidad de programas, y aunque su principal ocupación es la ejecución de los programas, también se requiere para otras actividades del sistema. A estas actividades se las denomina procesos.

    Un proceso es la unidad de trabajo dentro de un sistema.

    Proceso secuencial

    Es un programa en ejecución. La ejecución de un proceso debe proceder en forma secuencial, en cualquier momento se ejecuta como máximo una instrucción en nombre del proceso. Un proceso es más que el código del programa aunado a la actividad que se desarrolle, por lo general, incluye tambien la pila del proceso que contiene datos temporales y una sección de datos con variables globales.

    Un proceso es una entidad activa.

    Estado de un proceso

    El estado de un proceso se define en parte por la actividad de este proceso y cada proceso secuencial puede encontrarse en uno de los siguientes estados

             En ejecución: las instrucciones se están ejecutando.

             En espera: el proceso está esperando a que ocurra algún suceso.

             Listo: el proceso está esperando que se le asegure a un procesador.

    Bloque de control de procesos

    Un bloque de control de procesos, es un registro de datos que contiene diversa información relacionada con un proceso concreto que incluye

             Estado del proceso

             Contador del programa

             Registros de la CPU

             Información de la planificación de la CPU

             Información de la administración de memoria.

             Información contable.

             Información del estado de la E/S.

    Procesos concurrentes

    Los procesos pueden ejecutarse concurrentemente.

    Existen varias razones para permitir la ejecución concurrente

             Compartir recursos físicos.

             Compartir recursos lógicos.

             Acelerar los cálculos.

             Modularidad.

             Comodidad.

    Creación de procesos

    Un proceso puede crear varios procesos nuevos a través de una llamada al sistema para la creación de procesos.

    El proceso que crea se lo llama padre y al creado hijo.

    Si un proceso crea otro nuevo, hay dos alternativas habituales de implantarlo.

             El padre continua su ejecución concurrentemente con los hijos.

             El padre espera o que sus hijos hayan terminado. En general el proceso necesitará recursos (memoria o archivos) cuando crea un subproceso, este último puede obtener recursos directamente del sistema operativo que queda restringido a su padre.

    4.2 TERMINACION DE PROCESOS

    El proceso termina cuando concluye la ejecución de su último enunciado y solicita al sistema operativo que elimine el proceso.

    Un proceso puede provocar la terminación de otro a través de la llamada al sistema apropiado.

    Varios sistemas no permiten que los hijos existan si los padres han terminado. En estos sistemas cuando el padre termina, también deben terminar los hijos A éste fenómeno se lo denomina terminación en cascada.

    RELACION ENTRE PROCESOS

    Un proceso puede ser independiente si no puede afectar o ser afectado por los otros procesos que se ejecutan. Tiene las siguientes características:

             Su estado no es compartido de ninguna manera por otro proceso.

             Su ejecución es determinista, es decir, el resultado de la ejecución depende en exclusiva del estado de entrada.

             Su ejecución es reproducible, es decir, el resultado de la ejecución será el mismo para una misma entrada.

             Su ejecución puede detenerse o renunciarse sin ocasionar efectos adversos.

    Un proceso es cooperativo cuando:

             Su estado es compartido por otros procesos.

             El resultado de su ejecución depende de una secuencia de ejecución relativa.

             El resultado de su ejecución no es determinista.

    4.3 PLANIFICACION

    Los beneficios de la multiprogramación son un aumento de la utilización de la CPU. La productividad es la cantidad de trabajo desarrollado en intervalo de tiempo.

    Colas de planificación

    Conforme los procesos entran en el sistema, se colocan en una cola de trabajos formada por todos los procesos que residen en almacenamiento secundario esperando la aseguración de la memoria principal.

    Planificadores

    En un sistema por lotes se presentan mas procesos que los que se pueden ejecutar de inmediato, estos procesos se envian a un "spooler" en un dispositivo de almacenamiento masivo. El planificador a corto plazo selecciona uno de los procesos de éste depósito y los carga en memoria para su ejecución. El planificador a corto plazo selecciona uno de los procesos listos para la ejecución y le asegura la cpu.

    La diferencia entre los planificadores es la frecuencia de su ejecución.

    El planificador a largo plazo controla el grado de multiprogramación si, éste es estable, entonces la tasa promedio de creación de promedios debe ser igual a la tasa promedio de salida de procesos. En algunos sistemas es posible que no existan planificadores a largo plazo o que su función sea mínima.

    Planificación de la CPU

    Es una función fundamental del sistema operativo. Casi todos los recursos de un computador se planifican antes de usarse.

    Siempre que la CPU queda inactiva, el sistema operativo debe seleccionar para su ejecución uno de los procesos de la cola de procesos listos y le asegura la CPU. Esta cola no es necesariamente "primero que entra, primero que sale".

    Las decisiones de planificación pueden efectuarse en 4 circunstancias.

    1.        Cuando un proceso cambia del estado de ejecución, al estado de espera.

    2.        Cuando un proceso cambia del estado de ejecución al estado de listo.

    3.        Cuando un proceso cambia del estado de espera al estado de listo.

    4.        Cuando termina el proceso.

    Algoritmos de planificación

    Los criterios que se emplean para la utilización de los algoritmos son los siguientes:

             Utilización de la CPU, queremos que la CPU se mantenga tan ocupado como sea posible (entre un %40 y %90).

             Productividad, una medida del trabajo es el número de procesos que se completan por unidad de tiempo.

             Tiempo de retorno, el tiempo de retorno es el intervalo entre el momento de ofrecer el proceso y el momento de aceptarlo.

             Tiempo de espera, es el tiempo de espera para cada proceso.

             Tiempo de respuesta, es la calidad de tiempo para comenzar a responder.

    Es deseable maximizar la utilización de la CPU y la productividad, y minimizar los tiempos de respuesta, retorno y espera.

    Hay varios algoritmos para la planificación de la CPU:

             Planificación servicio por orden de llegada

    Es definitivamente el más sencillo. Con este esquema el proceso que primero solicita la CPU es al primero que se le asegura.

    El código para la planificación es sencillo de escribir y comprender.

    El tiempo de espera promedio es bastante largo. Es especialmente conflictivo en los sistemas de tiempo compartido.

             Planificación "Primero el trabajo mas breve"

    Asocia a cada proceso la longitud de su siguiente ráfaga de CPU. Cuando la CPU está disponible, se le asegura al proceso que tiene la ráfaga más corta. Si dos procesos tienen la misma longitud se utiliza el orden de llegada.

    Este tipo de planificación se utiliza frecuentemente. No puede usarse en planificación a corto plazo.

             Planificación por prioridades

    Se asocia una prioridad a cada proceso y la CPU se asegura al de mayor prioridad. Los de igual prioridad se ordena por orden de llegada.

    Las prioridades pueden definirse interna o externamente.

    El serio problema de este tipo de algoritmos es el bloqueo indefinido o inanición. Un proceso de baja prioridad puede quedar esperando indefinidamente.

             Planificación circular

    Está diseñada especialmente para sistemas de tiempo compartido.

    Se define una pequeña unidad de tiempo. La cola de procesos listos se trata como una cola circular, el planificador la recorre asegurando la UCP o cada proceso por intervalo de hasta un cuanto tiempo.

    Mantenemos la cola de procesos listos, como una cola. Primero entrada primero salida. El planificador toma el primer proceso de la cola programa un cronometro para que interrumpa después de un tiempo y despache el proceso.

             Planificación de múltiples niveles

    Este algoritmo divide la cola de procesos listos en diversa colas. Los procesos se aseguran a una cola. Cada cola tiene su propio algoritmo de planificación. Debe existir planificación entre las colas. Cada cola tiene prioridad absoluta sobre las colas de menor prioridad.

    4.4 COORDINACION DE PROCESOS

    Un proceso productor genera información que será aprovechada por un proceso consumidor. Para permitir que se genere concurrentemente, debemos crear un depósito (pool) de buffers que puede llenar el productor y vaciar el consumidor.

    El problema del productor - consumidor con buffers ilimitado, no establece limite en el número de buffers: el consumidor puede tener que esperar nuevos elementos, pero el productor siempre puede producirlos por que siempre hay buffers vacios. El problema de buffers limitado, supone un número fijo de buffers y el productor puede tener que esperar si están llenos y el consumidor si están vacios.

    EL PROBLEMA DE LA SECCION CRITICA

    Cada proceso tiene un segmento de código llamado sección crítica en el cual el proceso puede estar modificando variables comunes, actualizando una tabla, escribiendo en un archivo,etc. La ejecución de las secciones críticas de los procesos es mutuamente excluyente en el tiempo.

    Una solución para la sección crítica debe cumplir con tres requisitos:

    1.        EXCLUSION MUTUA: Si un proceso se está ejecutando en su sección crítica ningún otro proceso se puede estar ejecutando en la suya.

    2.        PROGRESO: Si ningún proceso se está ejecutando en su sección y hay otros procesos que desean entrar en las suyas, entonces sólo aquellos procesos que no se están ejecutando en su sección restante pueden participar en la decisión de cuál será el siguiente en entrar en la sección crítica, y esta selección no puede postergarse indefinidamente.

    3.        ESPERA LIMITADA: Debe haber un límite en el número de veces que se permite que los demás procesos entren en su sección crítica después de que un proceso haya efectuado una solicitud para entrar en la suya y antes de que se conceda esa solicitud.

    HARDWARE DE SINCRONIZACION

    Como resolver el problema de la sección crítica?

    El problema de la sección crítica puede solucionarse simplemente evitando que ocurran interrupciones mientras se modifica una variable compartida, pero por desgracia no siempre es factible esta solución. Por esto, muchas máquinas ofrecen instrucciones de hardware especiales que permiten evaluar y modificar el contenido de una palabra o intercambiar automáticamente el contenido de dos palabras.

    Semáforos

    Las soluciones al problema de la sección crítica a veces no son tan sencillos de generalizar es por eso que se puede utilizar una herramienta de sincronización llamada semáforo.Un semáforo S es una variable entera a la que, salvo por la asignación de valores iniciales, sólo puede accederse mediante dos operaciones atómicas comunes: espera y señal. Las modificaciones al valor entero del semáforo en las operaciones espera y señal se ejecutan indivisiblemente. Es decir, cuando un proceso modifica el valor del semáforo, ningún otro proceso puede modificar simultáneamente ese mismo valor.

    Implantación

    La principal desventaja de las soluciones para el problema de la sección crítica es que todas requieren una espera activa. Mientras un proceso se encuentra en su sección crítica, cualquier otro proceso que intente entrar en esa sección deberá ejecutar un ciclo continuo en la sección de entrada. La espera activa desperdicia ciclos de CPU que otros procesos podrían usar productivamente. A éste tipo de semáforos se los llama cerradura giratoria. La ventaja de una cerradura giratoria es que no es necesario efectuar un cambio de contexto cuando el proceso debe esperar a una cerradura. Por esto, cuando se espera que las cerraduras tengan una duración muy breve, las cerraduras giratorias son bastante útiles.

    Para superar la necesidad de la espera activa, podemos modificar la definición de las operaciones espera y señal del semáforo. Cuando un proceso ejecuta la operación espera y encuentra que el valor del semáforo no es positivo, debe esperar, pero puede bloquearse a si mismo para no esperar activamente.Un proceso bloqueado debe reiniciarse con la ejecución de una señal de otro proceso. La operación bloquear suspende al proceso que la invoca. La operación despertar reanuda la ejecución de un proceso bloqueado.

    Debemos garantizar que dos procesos no pueden ejecutar operaciones espera y señal al mismo tiempo en el mismo semáforo.

    Bloqueos mutuos y bloqueos indefinidos

    La implantación de un semáforo con cola de espera puede dar como resultado una situación donde dos o más procesos esperen indefinidamente un suceso que solo puede ocasionar uno de los procesos de espera. Cuando se llega a este estado, se dice que los procesos están el bloqueo mutuo.

    Decimos que un conjunto de procesos está en bloqueo mutuo cuando uno de los procesos del conjunto está esperando un suceso que solamente puede ser provocado por otro proceso del conjunto.

    PROBLEMAS CLASICOS DE SINCRONIZACION

    El problema del buffer limitado

    El problema del buffer limitado se presentó anteriormente y se usa habitualmente para ilustrar el poder de las operaciones primitivas de sincronización.

    El problema de lectores y escritores

    Un objeto de datos va a ser compartido por varios procesos concurrentes. Algunos solo quieren leer el contenido del objeto compartido, mientras que otros quieren actualizarlo. Distinguimos estos dos tipos de procesos llamándolos lectores y escritores respectivamente. Para que no surjan conflictos es necesario que los escritores tengan acceso exclusivo al objeto compartido. El problema de los lectores y escritores tiene distintas variantes, todas relacionadas con prioridades.

    CONSTRUCCIONES LINGUISTICAS

    Aunque los semáforos ofrecen un mecanismo adecuado y eficaz para la sincronización de procesos, si se utilizan incorrectamente pueden surgir errores de sincronización difíciles de detectar, ya que estos errores suceden sólo si se presenta una determinada secuencia de ejecuciones, y ni siempre aparecen estas secuencias.

    Estas dificultades se presentarán incluso si un solo proceso no se comporta adecuadamente. Esta situación puede ser el resultado de un error involuntario de programación o de un programador poco cooperativo.

    Para tratar el tipo de errores que hemos mencionado, los investigadores han presentado muchas construcciones lingüísticas, y a continuación describiremos varias de ellas.

             REGIONES CRITICAS: La primera construcción de sincronización de alto nivel es la región crítica. Las construcciones de la región crítica protegen contra algunos de los errores mas sencillos que se puede llegar a cometer en cuanto a la solución con semáforos para el problema de la sección crítica. Si ocurren errores en la lógica del programa, quizá no sea tan sencillo reproducir una secuencia concreta de sucesos.

             MONITORES: Otra construcción de alto nivel para la sincronización es el tipo monitor el cual se caracteriza por un conjunto de operadores definidos por el programador. Los distintos procesos no pueden usar directamente la representación de un tipo monitor, por lo que un procedimiento definido dentro de un monitor sólo puede tener acceso a las variables declaradas localmente y a los parámetros formales. La construcción monitor asegura que sólo un proceso a la vez puede estar activo en el monitor. Para establecer lo correcto de este sistema se deben comprobar dos condiciones. Primero, los procesos de usuario siempre deberán efectuar sus llamadas al monitor en el orden correcto. Segundo, debemos asegurar que un proceso poco cooperativo no ignore la puerta de exclusión mutua que ofrece el monitor y trate de llegar directamente al recurso, sin utilizar los protocolos de acceso. Sólo si se aseguran estas dos condiciones podremos garantizar que no ocurrirán errores dependientes del tiempo y que no se burlará el algoritmo de planificación.

    COMUNICACION ENTRE PROCESOS

    Principalmente hay dos esquemas complementarios de comunicación: sistemas de memoria compartida y de mensajes. Los sistemas de memoria compartida requieren que los procesos comunicantes compartan algunas variables. Se espera que los procesos intercambien información por medio de estas variables compartidas. En un sistema de memoria compartida, la responsabilidad de proporcionar la comunicación recae sobre los programadores de aplicaciones. El método del sistema de mensajes permite que los procesos intercambien mensajes.

    La función de un sistema de mensaje es permitir que los procesos se comuniquen entre sí sin tener que recurrir a variables compartidas. Un medio para la comunicación facilita basicamente dos operaciones "enviar" y "recibir".

    4.5 NOMINACION

    Los procesos que desean comunicarse deben tener una manera de referirse unos a otros. Pueden utilizar la comunicación directa o la comunicación indirecta.

    Comunicación directa: Cada proceso que desea enviar o recibir un mensaje debe nombrar explícitamente al receptor o emisor de la comunicación. Un enlace de este esquema posee las siguientes características:

             Se establece un enlace automáticamente entre cada par de procesos que quieren comunicarse. Sólo necesitan saber la identidad del otro.

             Un enlace está asociado a dos procesos exactamente.

             Hay un solo enlace entre cada par de procesos.

             El enlace es bidireccional.

    Comunicación Indirecta: Los mensajes se envian y reciben usando buzones. Cada buzón tiene una denominación única. Dos procesos pueden comunicarse solamente si comparten un buzón.

             Se establece enlace solamente si comparten buzón.

             Un enlace puede asociarse a más de dos procesos.

             Entre cada par de procesos en comunicación, puede haber varios enlaces diferentes.

             Un enlace puede ser unidireccional o bidireccional.

    Un buzón puede pertenecer a un proceso o al sistema. Si pertenece a un proceso, entonces hacemos una distinción entre el dueño y el usuario del buzón. Cuando termina un proceso dueño de un buzón, éste desaparece .

    Un buzón que pertenece al sistema operativo tiene existencia propia, es independiente y no está unido a un proceso en particular.

    4.6 UTILIZACION DE BUFFERS

    Un enlace tiene cierta capacidad que determina el número de mensajes que puede contener temporalmente. Esta propiedad puede considerarse como una cola de mensajes unidas al enlace.

             Capacidad cero: La cola tiene una longitud 0, de modo que el enlace no puede tener a ningún mensaje esperando.

             Capacidad limitada: El enlace tiene una capacidad finita. Si el enlace está lleno, el emisor debe demorarse hasta que haya espacio disponible en la cola.

             Capacidad ilimitada: La cola tiene una longitud potencialmente infinita, por lo que en ella puede esperar cualquier número de mensajes. El emisor nunca se demora.

    CONDICIONES DE EXCEPCION

    Un sistema de mensajes es particularmente útil en un entorno distribuido, donde los procesos pueden residir en distintas instalaciones (máquinas).En este entorno es mucho mas probable que ocurra un error durante la comunicación que en un entorno con una sola máquina.

             Mensajes perdidos

             Mensajes alterados: El mensaje puede llegar a su destino, pero alterarse por el camino. Esta situación es similar a la de mensaje perdido. El sistema operativo retransmitirá el mensaje original o notificará este suceso al proceso.

    EJEMPLO: MACH

    Ejemplo de un sistema operativo basado en mensajes. Hay operaciones de envío y recepción bastante flexibles. Cuando un mensaje se envía a un buzón, éste puede estar lleno. Si no lo está, el mensaje se copia al buzón y el hilo emisor continua. Si el buzón está lleno, el hilo emisor tiene cuatro opciones:

    1.       Esperar indefinidamente hasta que hay espacio en el buzón.

    2.       Esperar como máximo n milisegundos.

    3.       No esperar sino regresar de inmediato.

    4.       Se puede entregar un mensaje al sistema operativo para que lo guarde aunque el buzón esté lleno

    4.7 BLOQUEOS MUTUOS

    En un entorno de multiprogramación varios procesos pueden competir por un número finito de recursos. Un proceso solicita recursos, y si en ese momento no están disponibles, el proceso entra en un estado de espera. Puede suceder que los procesos en espera nunca cambien de estado, porque los recursos que solicitan están en poder de otros procesos también en espera. A esta situación se le llama bloqueo mutuo.

    MODELO DEL SISTEMA

    Un proceso debe solicitar un recurso antes de usarlo y liberarlo al terminar su uso. Puede solicitar cuantos recursos requiera para llevar a cabo su tarea.

    1.       Solicitud: Si la solicitud no puede atenderse de inmediato entonces el proceso solicitante debe esperar hasta que pueda adquirir el recurso.

    2.       Utilización: El proceso puede trabajar con el recurso

    3.       Liberación: El proceso libera al recurso.

    Un conjunto de procesos se encuentra en estado de bloqueo mutuo cuando cada uno de ellos espera un suceso que sólo puede originar otro proceso del mismo conjunto.

    CARACTERIZACION DE LOS BLOQUEOS MUTUOS

    Una situación de bloqueo mutuo puede surgir por las siguentes cuatro razones:

    1.       Exclusión Mutua

    2.       Retención y espera

    3.       No apropiación

    4.       Espera circular

    Subrayamos que se deben presentar las cuatro condiciones para que pueda aparecer un bloqueo mutuo. La condición de espera circular implica la condición de retención y espera, por lo que las cuatro condiciones no son completamente independientes.

    METODOS PARA MANEJAR BLOQUEOS MUTUOS

    Existen dos métodos principales para tratar el problema de los bloqueos mutuos. Podemos usar un protocolo para asegurar que el sistema nunca entre en un estado de bloqueo mutuo. Por otra parte, podemos permitir que el sistema entre en un bloqueo mutuo y luego se recupere (aunque esta última opción sea difícil y costosa).

    PREVENCION DE BLOQUEOS MUTUOS

             Exclusión mutua: La condición de exclusión mutua debe conservarse para recursos no compartibles

             Retención y espera: Para asegurar que la condición de retención y espera nunca se dé en el sistema debemos garantizar que, cuando un proceso solicita un recurso, no retenga otros. Un protocolo que puede usarse requiere que cada proceso solicite todos sus recursos y que le sean asignados antes de que comience su ejecución podemos implantar esta característica requiriendo que las llamadas al sistema para solicitar recursos antecedan a las demás llamadas del sistema. Un protocolo alternativo permite que un proceso solicite recursos sólo cuando no tiene ninguno: Un proceso puede solicitar recursos y utilizarlos, pero antes de que pueda solicitar más recursos, debe liberar todos los tiene asignados. El segundo método permite que el proceso solicite inicialmente sólo la unidad de cinta y el archivo en disco. Copia de la unidad de cinta al disco y luego libera los dos recursos. Las desventajas de estos dos procesos son: La utilización de recursos puede ser muy baja, pues puede ser que se asignen varios recursos, pero no se usen durante un período muy prolongado. En segundo lugar, es posible el bloqueo indefinido. Un proceso que requiere varios recursos populares quizá tenga que esperar indefinidamente porque alguno de los recursos que necesita siempre está asignado a otro proceso.

             No apropiación: La tercera condición necesaria es que no se presente una apropiación de los recursos que ya se han asignado. Si un proceso solicita algunos recursos, primero comprobamos que estén disponibles.

             Espera circular: Una forma de asegurar que no se presente la condición de espera circular consiste en imponer una ordenación total de todos lo tipos de recursos y requerir que cada proceso solicite los recursos siguiendo un orden de numeración ascendente.

    EVITACION DE BLOQUEOS MUTUOS

    Otro método para evitar los bloqueos mutuos consiste en requerir información adicional sobre cómo se solicitarán los recursos. Los diversos algoritmos difieren en la cantidad y tipo de información que requieren. El modelo más sencillo y útil requiere que cada proceso declare el número máximo de recursos de cada tipo que puede necesitar. Con información a priori para cada proceso es posible construir un algoritmo que asegure que el sistema nunca entrará en el estado de bloqueo mutuo. Este algoritmo define la estrategia de evitación de bloqueos mutuos.

    DETECCION DE BLOQUEOS MUTUOS

    Si un sistema no emplea un algoritmo de prevención o evitación de bloqueos mutuos, entonces puede ocurrir una situación de bloqueo mutuo. En este entorno, el sistema debe ofrecer

             Un algoritmo que examine el estado del sistema para determinar si ha ocurridoun bloqueo mutuo.

             Un algoritmo para recuperarse del bloqueo mutuo.

    Cabe destacar que un esquema de detección y recuperación requiere tiempo de procesamiento adicional que incluye no sólo los costos de tiempo de ejecución para el mantenimiento de la información necesaria y la ejecución del algoritmo de detección, sino además las pérdidas potenciales que comprende recuperarse de un bloqueo mutuo.

    UTILIZACION DE LOS ALGORITMOS DE DETECCION

    Si los bloqueos mutuos aparecen con frecuencia, entonces hay que invocar más a menudo al algoritmo de detección. Los recursos asignados a los procesos en bloqueo mutuo estarán inactivos hasta que éste se pueda romper y además puede crecer el número de procesosque participen en el ciclo de bloqueo mutuo. Podemos invocar al algoritmo de detección de bloqueos mutuos cada vez que no pueda atenderse de inmediato una solicitud de asignación. En este caso no sólo podemos identificar el conjunto de procesos en bloqueo mutuo, sino también el proceso específico que causó el bloqueo mutuo.

    Pero si con cada solicitud se invoca al algoritmo de detección de bloqueos mutuos, puede incurrirse en un tiempo de procesamiento adicional considerable.

    RECUPERACION DESPUES DE BLOQUEOS MUTUOS

    Existen tres posibilidades para la recuperación de un bloqueo mutuo:

             Informar al operador.

             Dejar que el sistema se recupere automáticamente del bloqueo mutuo:

    1.                   Abortando todos los procesos que están en bloqueo mutuo.

    2.                   Abortartando un proceso en cada ocasión hasta eliminar el ciclo de bloqueo mutuo Este método incurre en mucho tiempo de procesamiento adicional, ya que, después de abortar cada proceso, hay que invocar al algoritmo de detección de bloqueos mutuos a fin de determinar si aún quedan procesos en este estado.

             Expropiación de recursos: Se va quitando sucesivamente recursos de los procesos y los asignamos a otros hasta romper el ciclo de bloqueo mutuo. Hay que considerar tres aspectos: Selección de la víctima osea, determinar que procesos y recursos se expropiarán , Retroceso ya que no se puede continuar con la ejecución normal luego de haber expropiado unrecurso, debemos retroceder el proceso hasta llegar a un estadio seguro, que suele ser abortar el proceso y luego reiniciarlo.Bloqueo indefinido Puede suceder que siempre se elija como víctima al mismo proceso lo que produce que éste nunca concluya la tarea asignada.

    ESTRATEGIA COMBINADA PARA EL MANEJO DE BLOQUEOS MUTUOS

    Se ha planteado que ninguna de las estrategias básicas para el manejo de bloqueos mutuos (prevención, evitación y detección) es por sí sola, apropiada para la amplia gama de problemas de asignación de recursos que pueden surgir en los sistemas operativos. Una posibilidad es combinar las tres estrategias básicas, permitiendo el uso de la estrategia óptima para cada clase de recursos del sistemas. El método propuesto se basa en el concepto de que todos los recursos pueden dividirse en clases ordenadas jerárquicamente.

    Se aplica una técnica de ordenación de recursos a las clases. Para cada clase puede usarse la técnica más apropiada para el manejo de bloqueos mutuos.

    Es fácil mostrar que un sistema que emplea esta estrategia no estará sujeto a bloqueos mutuos. Un bloqueo mutuo no puede implicar a más de una clase, ya que se utiliza la técnica de ordenación de recursos. Para cada clase se emplea una de las estrategias básicas. Por consiguiente, el sistema no está sujeto a bloqueos mutuos.

    5-SISTEMAS DE ARCHIVO

    Todas las aplicaciones de computadora necesitan almacenar y recuperar la información. Para el almacenamiento de información a largo plazo se tienen tres condiciones esenciales:

    1.- Debe ser posible almacenar una cantidad muy grande de información

    2.- La información debe sobrevivir a la conclusión del proceso que la utiliza.

    3.- Debe ser posible que varios procesos tengan acceso concurrente a la información.

    La solución a estos problemas es el almacenamiento de la información en discos y otros medios externos, en unidades llamadas archivos. La información allí almacenada debe ser persistente; es decir, no debe verse afectada por la creación y termino de un proceso. Los archivos son administradores por el sistema operativo. Aquella parte del sistema operativo que trabaja con los archivos se conoce como sistemas de archivos.

    5.1.- Archivos: (Analizados desde el punto de vista del usuario; es decir, forma de uso y propiedades).

    -Nombre de los archivos: Cuando un proceso crea un archivo le da a este un nombre. Cuando el proceso concluye, el archivo sigue existiendo y otros procesos pueden tener acceso a el mediante su nombre.

    Muchos sistemas operativos utilizan nombres de archivos con dos partes separadas por un punto, (como en "prog.c"). La parte posterior al punto es la extensión del archivo e indica por lo general algo relativo al archivo. Alguna de las extensiones de archivos mas comunes son:

    Extensión

    Significado

    File . bak

    File . bas

    File . bin

    File . dat

    File . ftn

    File . tex

    File . txt

    Archivo de respaldo

    Programa fuente en BASIC

    Programa ejecutable en binario

    Archivos de datos

    Programa fuente en FORTRAN

    Archivo de entrada para el programa de formato tex

    En ciertos casos las extensiones son meras convenciones y no están forzadas de alguna forma.

    Estructura de un archivo: Pueden estructurarse de varias maneras:

     

     

     

     

    hormiga

    zorro

    cochino

    gato

    vaca

    perro

    chivo

    león

     

    gallina

    ibis

    borrego

    A) Secuencia de bytes B) Secuencia de registros c) Árbol

    El ejemplo "C" es una serie no estructurada de bytes. De hecho al sistema operativo no le interesa ni se preocupa por el contenido de cualquier archivo. Lo único que ve son bytes; cualquier significado debe ser impuesto por los programas a nivel usuario. Tanto UNIX como MS-DOS utilizan este enfoque.

    El hecho de que el sistema operativo considere a los archivos como una simple serie de bytes proporciona una máxima flexibilidad.

    En la figura "B" un archivo es una secuencia de registros de longitud fija, cada una con su propia estructura interna. En este tipo de archivos la idea es que la operación de lectura regrese un archivo y la de escritura escriban sobre o añadan un registro. Un sistema operativo que utiliza este tipo de archivos es cp/m.

    El tercer tipo de estructura de archivo, consta de un árbol de registro, los cuales no necesariamente tienen la misma longitud; cada uno de ellos contiene un campo KEY (llave) en una posición fija del registro. El árbol se ordena mediante este campo, con el fin de poder realizar con rapidez la búsqueda de una llave particular. La operación básica aquí, es la de obtener un registro con una llave especifica. Se utiliza en las grandes computadoras (mainframe).

    Tipos de archivos: Muchos sistemas operativos soportan varios tipos de archivos.

    Los archivos regulares son aquellos que contienen información del usuario. Los directorios son archivos de sistemas para el mantenimiento de una estructura del sistema de archivos. Los archivos especiales de caracteres tienen relación con la entrada / salida y se utilizan para modelar dispositivos señales de E / S, tales como terminales, impresoras y redes. Los archivos especiales de bloqueo se utilizan para modelos discos.

    Los archivos regulares son en general archivos en ASC II o binarios. La gran ventaja de los archivos en ASC II es que pueden exhibir e imprimir tal cual son y pueden editarse mediante un editor de texto común. Los archivos en binario impresos producen una lista incomprensible de algo que parece aleatorio y sin sentido. Todos los sistemas operativos deben reconocer un sistema de archivos, su propio archivo ejecutable.

    Acceso a un archivo: Los primeros sistemas operativos tenían un solo tipo de acceso a los archivos: el acceso secuencial. En estos sistemas el proceso podía leer en orden sobre los bytes de un registro en cierto archivo, comenzando desde el principio, pero no podía saltearse alguno o leerlo en otro orden.

    Estos archivos podían ser rebobinados para leerlos cuantas veces fuera necesario. Son convenientes cuando el medio de almacenamiento son las cintas magnéticas y no los discos.

    Cuando se comienzan a utilizar los discos para almacenamiento de archivos fue posible leer los bytes o registros de un archivo en un orden cualquiera o bien tener acceso a los registros a través de una clave, en vez de una posición. Los archivos cuyos bytes o registros pueden leerse de cualquier modo se llaman archivos de acceso aleatorio y son esenciales en muchas aplicaciones ( ej.: para sistemas de base de datos. Si en una aerolínea se quiere reservar un asiento de un vuelo en particular, el programa de reservación debe poder tener acceso al registro de ese vuelo sin tener que leer antes los registros de cientos de otros vuelos ).

    Se utilizan dos métodos para determinar el punto de inicio de una lectura: 1 Cada operación READ da la posición del archivo con cual iniciar, 2 La operación especial SEEK establece la posición de trabajo.

    Atributos del archivo: Algunos de los posibles atributos de los archivos son:

    Campo

    Significado

    Protección

    Contra seña

    Bandera de sistemas

    Bandera temporal

    Posición de la llave

    Longitud de la llave

    Tamaño actual

    Quien debe tener acceso y de que forma

    Contraseña necesaria para tener acceso

    0 archivo normal, 1 archivo de sistema

    0 normal, 1 elimina al salir del proceso

    Ajuste de la llave dentro de cada registro

    Numero de bytes en el campollave

    Numero de bytes en el archivo

    Los atributos son elementos adicionales de información que los sistemas operativos asocian a cada archivo.

    Operaciones con archivos: Los distintos sistemas proporcionaron diversas operaciones para permitir el almacenamiento y recuperación de archivos. Este es un análisis de las llamadas mas comunes al sistema relacionado con los archivos:

    A) Create (crear ): El archivo se crea sin datos. El propósito es anunciar que el archivo esta por llegar y establecer algunos de los atributos.

    B) Delete ( eliminar ): Si el archivo ya no es necesario debe eliminarse para liberar espacio en disco.

    C) Read ( leer ): Los datos se leen del archivo quien hace la llamada debe especificar la cantidad de datos necesarios y proporcionar un buffer para colocarlos.

    D) Seek ( buscar ): Para los archivos de acceso aleatorio se necesita un método para especificar el punto de donde tomar los datos. Después de llevar a cabo esta llamada, los datos se pueden leer o escribir en esa posición.

    E) Rename ( cambiar de nombre ): Hace posible la modificación del nombre de un archivo existente.

    5.2.- Directorios:

    Sistemas jerárquicos de directorio: Un directorio contiene por lo general varios datos, uno por archivo. Al abrir un archivo el sistema operativo busca en su directorio hasta encontrar el nombre del archivo por abrir. Extrae entonces los atributos y direcciones en disco a la que apunta y los coloca en una tabla dentro de la memoria principal.

    El numero de directorios varia de sistema a sistema. El sistema mas sencillo es aquel donde el sistema tiene un solo directorio en todos los archivos de todos los usuarios ( solo se utiliza en microcomputadoras primitivas ). Otro diseño es directorio raíz del cual se desprende un directorio por usuario y de allí los archivos. Lo que se necesita es una jerarquía general: cada usuario puede tener tantos directorios como sea necesario, de forma que los archivos se agrupen de forma matricial.


    Directorios

    del

    usuario


    Archivo


    Subdirectorio

    del usuario

    Nombre de las rutas de acceso: Cuando el sistema de archivos esta organizado como un árbol de directorio se necesita una forma de determinar los nombres de los archivos. Se utilizan dos métodos: En el primero cada archivo tiene tiene una ruta de acceso absoluta, la cual consta de la ruta de acceso desde el directorio raíz hasta el archivo. Ej: La ruta de acceso /usr/ast/mailbox indica que el directorio raíz contiene un subdirectorio usr, el cual a su vez contiene un subdirectorio ast el cual contiene al archivo mailbox. Si el primer carácter de la ruta es un separador entonces la ruta de acceso es absoluta.

    El otro tipo es la ruta de acceso relativa, esta se utiliza junto al concepto de directorio de trabajo. Un usuario puede designar a un directorio como el directorio de trabajo, en cuyo caso todos los nombres que no comiencen con el directorio raíz se toman en relación con el directorio de trabajo Ej.: Si el directorio de trabajo es /usr/ast entonces el archivo cuya ruta de acceso absoluta es /usr/ast/mailbox puede llamarse solo con mailbox.

    La mayoría de los sistemas operativos que soportan un sistema jerárquico de directorio tienen dos entradas especiales en cada directorio: "." (punto) y ".." (punto punto). Punto indica al directorio de trabajo, punto punto a su padre.

    Operaciones con directorios: Ej.: tomado del unix.

    A) Create ( crear): Se crea un directorio, el cual esta vacío

    B) Delete ( eliminar ): Se elimina un directorio, solo se puede hacer si el directorio esta vacío: es decir, que solo contenga punto y punto-punto.

    C) Read dir ( leer directorio ) : Ingresa la siguiente entrada en un directorio abierto. Siempre regresa una entrada de formato normal, sin importar el tipo de estructura de directorio que se utilice.

    D) Rename ( cambiar de nombre ): Se les puede cambiar de nombre, a los directorios, igual que a los archivos.

    E) Link ( ligar ) : El ligado permite que un archivo aparezca en mas de un directorio.

    5.3 Implantación del sistema de archivos: ( Analizado desde el punto de vista del implantador ).

    Implantación de archivos: El aspecto clave de la implantación del almacenamiento de archivos es el registro de los bloques asociados a cada archivo. Se utiliza distintos métodos.

    -A) Asignación adyacente: Almacena cada archivo como un bloque adyacente de datos en el disco. Tiene dos ventajas. La primera es su fácil implementacion. La segunda es el excelente rendimiento.

    También tiene dos aspectos negativos. El primero es que no es realizable a menos que se conozca el tamaño máximo del archivo al momento de su creación. Sin esta información el sistema no sabe cuanto espacio en memoria debe reservar. La segunda es la fragmentacion del disco que resulta de este método.

    -B) Asignación en forma de larga lista: Mantienen a cada archivo como una lista ligada de bloques en disco. Con este método se pueden utilizar cada bloque del disco, sin perder espacio, debido a la fragmentacion. Por otro lado, aunque la lectura secuencial del archivo es directa, el acceso aleatorio es en extremo lento.

    -C) Asignación mediante una lista ligada a un índice: La desventaja del sistema anterior se elimina tomando la palabra del apuntador de cada bloque del disco y colocándola en una tabla o índice de la memoria. Mediante esta organización todo el bloque esta disponible para datos. Además, el acceso aleatorio es mucho mas sencillo. Su principal desventaja es que toda la tabla debe estar en memoria todo el tiempo para que funcione.

    -D) Nodos - I : Asocia a cada archivo una pequeña tabla llamada nodo - I (modo índice ), la cual contiene los atributos y direcciones en disco de los bloques del archivo.

    Implantación de directorios: Antes de poder leer un archivo este debe ser abierto. Al abrir un archivo el sistema operativo utiliza el nombre de la ruta de acceso dado por el usuario para localizar el dato en el directorio. El dato del directorio contiene la información necesaria para encontrar los bloques del disco. La principal función del sistema de directorios es asociar el nombre en ASC II del archivo con la información necesaria para localizar datos.

    Archivos compatibles: Cuando varios usuarios trabajan juntos con un proyecto, con frecuencia, necesitan compartir los archivos. Con frecuencia conviene que un archivo compartido aparezca en forma simultánea en mas de un directorio. Ej.: si un archivo de C esta presente en un directorio de B, la conexión entre B y el archivo compartido se llama enlace.

    Los enlaces simbólicos se dan cuando B se enlaza con un archivo de C haciendo que el sistema cree un archivo de tipo LINK, el cual entra en el directorio B. Este nuevo archivo solo contiene el nombre de la ruta de acceso del archivo al cual se enlaza. Cuando B desea leer el archivo enlazado, el sistema operativo ve que el archivo por leer es del tipo LINK busca el nombre del archivo y lo lee.

    El problema de los enlaces simbólicos es su alto costo, y otro problema que presentan los enlaces en general es que un archivo puede tener dos o mas rutas de acceso. Los programas que parten de un cierto directorio y encuentran todos los archivos de dicho directorio y de sus directorios localizaran varias veces un archivo enlazado.

    Administración del espacio en disco: Existen dos estrategias posibles para almacenar un archivo de n bytes: asignar n bytes consecutivos de espacio en el disco o dividir el archivo con cierto numero de bloques ( no necesariamente ) adyacentes.

    El primero tiene el problema obvio de que si un archivo crece deberá desplazarse probablemente en el disco. El mismo problema ocurre con los segmentos en la memoria excepto que el desplazamiento de un segmento en la memoria sea mas rápida que el de un archivo.

    A) Tamaño del bloque: Dado la forma en que están organizados los bloques; el sector la pista y el cilindro son ..... ................ abrir de asignación de tamaño.

    B) Registro de los bloques libres: después de elegido el tamaño del bloque, el siguiente aspecto a considerar es la forma de llevar un registro de los bloques libres. Un método consiste en el uso de una lista ligada de bloques de discos, en la que cada bloque contiene tanto números de bloques libres como pueda. Otra técnica es el mapa de bits. Un disco con n bloques necesita un mapa de bits con n bits, si existe espacio disponible en la memoria para contener el mapa de bits este método es preferible.

    C) Disk quotas: Para evitar que las personas se apropien de un espacio excesivo en el disco, los sistemas operativos multiusuarios, como UNIX, proporcionan con frecuencia un mecanismo para establecer las cuotas en el disco. La idea es que un administrador del sistema asigne a cada usuario una proporción máxima de archivos y bloques y que el sistema operativo garantice que los usuarios no excedan sus cuotas.

    Confiabilidad del sistema de archivos: Si el sistema de archivos de una computadora se pierde ya sea por razones de hardware, software, u otros será difícil restaurar toda la información. Las consecuencias pueden ser catastróficas. Aunque el sistema de archivos no puede ofrecer protección alguna contra la destrucción física del equipo y los medios puede ayudar a proteger la información.

    A) Manejo de un bloque defectuoso : Los discos tienen con frecuencia bloques defectuosos, para estos hay dos soluciones: una en hardware que consiste en dedicar un sector del disco a la lista de bloques defectuosos y otra en software la cual requiere que el usuario o el sistema de archivos construyan con cuidado un archivo con todos los bloques defectuosos. Esta técnica los elimina de la lista de bloques libres de forma que nunca pueden aparecer en los archivos de datos.

    B) Respaldos: Los archivos deben ser respaldados. Los sistemas de archivos de discos flexibles se respaldan copiando todo el disco en otro limpio; mientras que los de disco duro se respaldan mediante un salvado de todo el disco a una cinta magnética.

    Desempeño del sistema de archivo: El acceso a disco es mucho mas lento que el acceso a la memoria. Por esto muchos sistemas de archivo han sido diseñados para reducir el numero de acceso a disco necesario.

    La técnica mas común para reducir los accesos al disco es el bloque cache o buffer cache ( del francés cacher que significa ocultar ). Aquí el cache es una colección de bloques que pertenecen desde el punto de vista lógico al disco, pero no se mantienen en la memoria por razones de rendimiento. Otra técnica importante es la reducción de la cantidad de movimiento del brazo del disco, colocando los bloques que probablemente tengan un acceso secuencial mas cercano entre si de frecuencia en el mismo cilindro. Al escribir un archivo de salida, el sistema de archivos ebe asignar los bloques, uno a la vez, conforme sea necesario.

    5.4.- Seguridad: La protección de la información que contienen los archivos en contra del uso no autorizado es esencial en todos los sistemas de archivos.

    El ambiente de seguridad: La seguridad tiene muchas facetas, dos de las mas importantes son la perdida de datos y los intrusos.

    Los intrusos pueden ser pasivos, solo desean leer los archivos; o activos desean hacer cambios no autorizados a los datos. Otro aspecto de la seguridad es la privacia, es la protección de las personas respecto del mal uso de la información en contra de uno mismo.

    Principios del diseño para seguridad:

    A) El diseño del sistema debe ser publico, pensar que el intruso no conocerá la forma de funcionamiento del sistema es engañar a los diseñadores.

    B) El estado predefinido debe ser el de no acceso.

    C) El sistema no debe verificar el permiso, determinar que el acceso esta permitido y después abandonar esta información para su uso posterior. Muchos sistemas verifican el permiso al abrir el archivo y no después de abrirlo, esto significa que el usuario que abra un archivo y lo tenga abierto por semanas seguirá teniendo acceso a el, incluso en el caso de que el propietario haya cambiado la protección del archivo.

    D) Se debe dar a cada proceso el mínimo privilegio posible.

    E) El mecanismo de protección debe ser simple, uniforme e integrado hasta las capas mas bajas del sistema.

    F) El esquema elegido debe ser psicológicamente adecuado, si los usuarios sienten que la protección de sus archivos implica demasiado trabajo, no los protegerán.

    Autentificacion del usuario: Muchos de los métodos de autentificacion se basan en la identificación de algo conocido por el usuario, algo que posee el usuario o algo que es el usuario:

    A) Contraseñas: El usuario debe escribir una contraseña o password. Esta autentificacion es fácil de vencer a través de combinaciones de nombres y contraseñas.

    B) Identificación física: Se trata de verificar si el usuario tiene cierto elemento; una tarjeta plástica con una cinta magnética, etc. La tarjeta se inserta en la terminal, la cual verifica de que tarjeta se trata. Otro punto de vista es la medición de características físicas difíciles de reproducir. Ej.: Lectora de huellas digitales o vocales, etc.

    Otra es el análisis de la firma, de la longitud de los dedos, etc.

    C) Medidas preventivas: Todas las entradas al sistema deben ser registradas. Cuando un usuario se conecta al sistema este debe informar la hora y terminal de la ultima conexión, de forma que pueda detectar posibles intentos de sabotajes. Otro paso será tender trampas para atrapar a los intrusos.

    5.5.- Mecanismos de protección:

    Dominios de protección: Un sistema de cómputos contiene muchos objetivos que necesitan protección ( Ej. del hardware: CPU, segmentos de memoria, etc. ).

    Un dominio es un conjunto de pareja ( objeto - derecho ). Cada una determina un objetivo y cierto subconjunto de las operaciones que se puedan llevar a cabo en el. Un derecho es el permiso para llevar a cabo algunas operaciones.

    Modelos de protección: Se identifican seis operaciones que puede llevar a cabo la matriz de protección, las cuales se pueden utilizar como base del modelo de cualquier sistema de protección. Estas operaciones son : CREAR OBJETO, ELIMINAR OBJETO, CREAR DOMINIO, ELIMINAR DOMINIO, INSERTAR DERECHO, ELIMINAR DERECHO.

    Estas seis primitivas se pueden combinar en comandos de protección. Son estos comandos los que pueden ejecutar los programas del usuario para modificar la matriz.

    La política de seguridad tiene dos reglas:

    A) Ningún proceso puede leer un objeto de un nivel superior al suyo, pero puede leer con libertad los objetos de niveles inferiores o de su mismo nivel. Un proceso secreto puede leer procesos confidenciales pero no totalmente secretos.

    B) Ningún proceso puede escribir información en un objeto de nivel inferior al suyo. Un proceso secreto puede escribir en un archivo totalmente secreto pero no en uno confidencial.

    6.-ADMINISTRACION DE LA MEMORIA

    La memoria es un importante recurso que debe administrarse con cuidado. La parte del sistema operativo que administra la memoria se llama administrador de la memoria. Su labor consiste en llevar un registro de las partes de memoria que se estén utilizando y aquéllas que no, con el fin de asignar espacio en memoria a los procesos cuando éstos la necesiten y liberarlo cuando terminen, así como administrar el intercambio entre la memoria principal y el disco, en los casos en que la memoria principal no pueda albergar a todos los procesos.

    Los sistemas de administración de la 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.

    ADMINISTRACION DE LA MEMORIA SIN INTERCAMBIO O PAGINACION

    El esquema más sencillo de administración de memoria es aquel en el que sólo se tiene un proceso en memoria en cada instante. El usuario carga toda la memoria con un programa del disco o cinta y utiliza toda la máquina. La monoprogramación implica que cada proceso debe contener controladores de dispositivo para cada uno de los dispositivos de E/S que utilice.

    Si el sistema está organizado de esta forma, sólo se puede ejecutar un proceso a la vez. El usuario escribe un comando en la terminal y el sistema operativo carga el programa solicitado desde el disco a la memoria y lo ejecuta. Cuando el proceso termina, el sistema operativo envía un carácter indicado (el símbolo de comandos) en la terminal y espera un comando de la misma para poder cargar otro proceso, que se escribe encima del anterior.

    Aunque la monoprogamación se utiliza en ciertas ocasiones en las computadoras pequeñas, las grandes computadoras con muchos usuarios casi nunca la usan. Una razón para la multiprogramación es que facilita la programación de una aplicación al dividirla en dos o más procesos. Otra razón es que la mayoría de los procesos tardan una porción sustancial de su tiempo en la espera de la conclusión de la E/S al disco. Se pueden mencionar el modelo teórico, el probabilístico, de cola y por lote.

    La multiprogramación presenta dos problemas esenciales por resolver : la reasignación y la protección. Una alternativa para ambos problemas fue la de equipar la máquina con dos registros especiales de hardware, llamados el registro base y el registro límite. Cuando se planifica la ejecución de un proceso, el registro base carga con la dirección del inicio de la partición, mientras que el registro límite se carga con la longitud de la partición. A cada dirección de memoria generada en forma automática se le añade el contenido del registro base antes de ser enviado a memoria. También se verifican las direcciones, con el fin de que no rebasen el registro límite y se dirijan a una parte de la memoria por fuera de la partición activa. El hardware protege ambos registros, con el fin de evitar que los programas del usuario los modifiquen.

    ADMINISTRACION DE LA MEMORIA CON INTERCAMBIO O PAGINACION

    El traslado de los procesos de la memoria principal al disco y viceversa se llama intercambio. Este se puede llevar a cabo con particiones fijas o variables. La diferencia principal entre las particiones fijas y las particiones variables es que el número, posición y tamaño de las particiones varía en forma dinámica en el segundo caso al crearse o intercambiarse más procesos, mientras que en el primer caso estas características son fijas.

    Es posible combinar todos los huecos en uno grande, si se mueven todos los procesos hacia la parte inferior, mientras sea posible. Esta técnica se conoce como compactación de la memoria.

    Existen tres formas utilizadas por los sistemas operativos para llevar un registro del uso de la memoria : mapas de bits, listas y sistemas amigables.

    n    Con un mapa de bits, la memoria se divide en unidades de asignaciones. El tamaño de la unidad de asignación es un aspecto importante de diseño. Mientras más pequeña sea esta unidad, más grande será el mapa de bits. Un mapa de bits es una forma sencilla par llevar un registro de las palabras de la memoria en una cantidad fija de memoria, puesto que el tamaño del mapa solo depende del tamaño de la memoria y el tamaño de la unidad de asignación. La búsqueda en un mapa de bits de ciertas cadenas es una operación lenta, por lo que los mapas no se utilizan con frecuencia.

    n    Otra forma de mantener un registro de la memoria es mediante una lista ligada de los segmentos de memoria asignados o libres, en donde un segmento puede ser un proceso o un hueco entre dos procesos. Cuando los procesos y los huecos se mantienen en una lista ordenada por direcciones, se pueden utilizar diversos algoritmos para asignar la memoria par un proceso de reciente creación o intercambiado. Los diferentes tipos de algoritmos que se pueden encontrar son : el primero en ajustarse, el siguiente en ajustarse, el mejor en ajustarse y el peor en ajustarse. Estos algoritmos pueden agilizarse si se tiene dos listas independientes, una para los procesos y otra para los huecos. De esta forma, todos ellos pueden dedicarse a inspeccionar los huecos, no los procesos. El precio que se paga por ese aumento de velocidad al momento de asignar la memoria es la complejidad adicional y disminución de la velocidad al liberar la memoria, puesto que un segmento liberado debe ser el eliminado de la lista de procesos e insertarse en la lista de huecos. El de ajuste rápido, es el que mantiene listas independientes para algunos de los tamaños que se soliciten más frecuentemente. Con el ajuste rápido, la búsqueda de un hueco del tamaño pedido es muy rápida, pero tiene la misma desventaja de los demás esquemas en el sentido de qué, al ordenar por tamaño los huecos y terminar o intercambiarse un proceso, la búsqueda de sus vecinos para ver si es posible una función es una operación cara. Si no se lleva a cabo la función, la memoria se fragmentará con rapidez en un gran número de pequeños huecos inútiles.

    n    El sistema asociado es un algoritmo de administración de la memoria que aprovecha el hecho de que las computadoras utilizan números binarios para las direcciones, con el fin de hacer más rápido la función de los huecos adyacentes cuando un proceso termina o se pasa a disco. Los sistemas asociados tienen una ventaja sobre los algoritmos que ordenan los bloques por tamaño pero no necesariamente en direcciones múltiplos del tamaño del bloque. La ventaja consiste en que cuando se libera un bloque de tamaño 2k, el administrador de la memoria tan sólo debe buscar en la lista de huecos de 2k para ver si es posible una fusión. En los algoritmos que permiten que los bloques de memoria se dividan de formas arbitrarias, se debe realizar una búsqueda en todas las listas de huecos. El resultado es que el sistema asociado es muy rápido. Los algoritmos para la administración del hueco de intercambio son los mismos que se utilizan para la administración de la memoria principal.

    MEMORIA VIRTUAL

    La idea fundamental detrás de la memoria virtual es que el tamaño combinado del programa, los datos y la pila puede exceder la capacidad de memoria física disponible para él. El sistema operativo mantiene aquellas partes del programa que se utilicen en cada momento en la memoria principal y el resto permanece en el disco.

    La mayoría de los sistemas con memoria virtual utilizan una técnica llamada paginación. En cualquier computadora, existe un conjunto de direcciones de memoria que pueden producir los programas. Estas direcciones generadas por los programas se llaman direcciones virtuales, y conforman el hueco de direcciones virtuales. Al utilizar la memoria virtual, las direcciones virtuales no pasan en forma directa al bus de memoria, sino que van a una unidad de administración de la memoria, un chip o conjunto de chips que asocian las direcciones virtuales con las direcciones de la memoria física. El hueco de direcciones virtuales se dividen en unidades llamadas páginas. Las unidades correspondientes en la memoria física se llaman marcos para páginas. Las páginas y los marcos tienen siempre el mismo tamaño. Las transferencias entre la memoria y el disco siempre por unidades de página. El número de página virtual se divide en un número de página virtual y un ajuste. El número de página virtual se utiliza como un índice en la tabla de páginas para encontrar la entrada de esa página virtual. El número de marco se asocia al extremo superior del ajuste y reemplaza al número de página virtual para formar una dirección física que se puede enviar a la memoria. La finalidad de la tabla de páginas es asociar las páginas virtuales con los marcos, pero hay que enfrentar dos aspectos fundamentales : 1) la tabla de páginas puede ser demasiado grande, 2) la asociación debe ser rápida.

    Para evitar el problema de tener unas tablas inmensas de páginas en la memoria todo el tiempo, muchas computadoras utilizan una tabla de páginas con varios niveles. El secreto del m

    0todo de las tablas de páginas de varios niveles consiste en evitar mantener todas las tablas en la memoria todo el tiempo. En particular, aquellas que no sean necesarias no deben mantenerse ahí. Pueden ser de nivel 1, 2, 3 y 4.

    Veamos ahora el funcionamiento de la memoria asociativa. Cuando se presenta una dirección virtual ante la MMU para su traducción, el hardware verifica en primer lugar si su número de página virtual se encuentra en la memoria asociativa, al comparar con todos los datos al mismo tiempo. Si coincide con alguno y el acceso no viola los bits de protección el marco de página se toma en forma directa de la memoria asociativa, sin necesidad de pasar a la tabla de páginas. Si el número de página virtual esta presente en la memoria asociativa, pero la instrucción intenta escribir en una página exclusiva para lectura, se genera un fallo de página de la misma forma en que se genera a partir de la propia tabla de páginas. Podemos encontrar paginación a nivel cero y tablas de páginas invertidas.

    ALGORITMOS DE REEMPLAZO DE PAGINAS

    Cuando ocurre un fallo de página, el sistema operativo debe elegir una página par 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 la memoria, debe volver escribirse en el disco para mantener actualizada la copia del disco. Si, por el contrario la página no a sido modificada, la copia en disco ya está actualizada, por lo que no es necesario volver a escribirlo. La página por leer sólo escribe encima de la página por retirar. Los algoritmos mas importantes son : el algoritmo de reemplazo de páginas óptimo, el algoritmo de reemplazo de páginas según el uso no tan reciente, el algoritmo de reemplazo FIFO, el algoritmo de reemplazo de páginas de la segunda oportunidad, el algoritmo de reemplazo de páginas - la de menor uso reciente -, simulación del algoritmo del uso más reciente en software.

    Con frecuencia, el tamaño de página es un parámetro que pueden elegir los diseñadores del sistema operativo. La definición del tamaño óptimo de página requiere el balance de varios factores en competición.

    El hecho de que una computadora posea una memoria virtual no significa que la E/S no exista. La memoria virtual y la E/S interactúan en formas muy sutiles.

    La implantación de la segmentación difiere del caso de paginación en un sentido esencial : las páginas tienen un tamaño fijo y los segmentos no. Podemos encontrar segmentación pura y segmentación con paginación. Mutilics e Intel 386 soportan tanto la paginación como la segmentación.

    7 - SISTEMAS DISTRIBUIDOS

    7.1- ESTRUCTURA DE SISTEMAS DISTRIBUIDOS

    Un sistema distribuido es un conjunto de procesadores que no comparten ni memoria ni reloj, en su lugar cada procesador cuenta con su propia memoria local y se comunican entre si a traves de diversas líneas de comunicación.

    Ofrece al usuario acceso a los diversos recursos que mantiene el sistema, y se mejora la velocidad de los cálculos, la disponibilidad y confianza de los datos.

    Básicamente hay dos esquemas para construir sistemas de multiprocesadores:

    a) Los fuertemente acoplados: Comparten memoria y reloj , la comunicación entre ellos se hace generalmente a través de la memoria compartida.

    b) Los debilmente acoplados : No comparten memoria ni reloj y se comunican a través de canales de alta velocidad o teléfonos.

    Hoy cuatro motivos para la utilización de sistemas distribuidos:

    a) Comparticion de recursos

    b) Aceleración de los cálculos (calculo concurrente)

    c) Confiabilidad

    d) Comunicación

    7.2- TOPOLOGIA :

    a) Conexión total: Secomunican todas las instalaciones entre si , tienen un alto costo básico pero su velocidad y confiabilidad son altísimas.

    b) Conexión parcial: Hay conexión directa entre algunos pares de procesadores,

    c) Jerárquica: Organización tipo árbol , su costo de instalación es mas bajo que las anteriores pero si un procesador falla los que de el dependen quedan incomunicados.

    d) Estrella: Una instalación se comunica con todas las demás , el problema se presenta si la instalación central se convierte en un cuello de botella

    e) Anillo: Cada instalación se comunica con dos instalaciones de manera que quedan comunicadas en forma de anillo. Pueden ser unidireccionales o bidireccionales.

    f) Canal multiacceso: Las instalaciones se comunicanm entre si por medio de un canal comun.

    7.3-COMUNICACION:

    La comunicación en un sistema distribuido debe tener en cuenta cuatro aspectos básicos:

    a) Estrategias de encaminamiento: Cuando hay mas de un canal para la comunicación entre dos procesadores se utilizan técnicas de encaminamiento para que el procesador decida por que canal mandar la información / datos

    b) Estrategias de conexión : Se refiere a como se unirán los procesos para enviarse información /datos entre si .puede ser por enlace firme, temporal , o por paquetes por diferentes rutas, que luego se ensamblaran

    c) Conflictos: Principalmente en las redes de anillo o multiacceso suelen generarse conflictos cuando dos o mas procesadores quieren utilizar un mismo canal en un mismo momento.

    Hay distintas formas para superar este incoveniente:

    - Detección portadora de acceso múltiple: Cada procesador escucha y en el momento en que esta libre envía el mensaje.

    - Paso de testigo: Un mensaje "testigo" circula por el canal, y cuando una instalación quiere enviar un mensaje toma el testigo y deja su mensaje.

    - Ranuras de mensaje: Circulan por en sistema varias "ranuras" donde cada procesador deposita el mensaje cuando lo requiere.

    7.4 - TIPOS DE SISTEMAS OPERATIVOS

    Un sistema operativo distribuido proporciona al usuario acceso a los recursos que ofrece el sistema .Existen dos estructuras básicas :

    a) Sistemas de red: Su principal función es transferir los archivos de una maquina a otra .El problema se presenta porque el usuario debe saber donde esta cada archivo.

    b) Sistemas operativos distribuidos: Los usuarios pueden acceder a archivos remotos de la misma manera que lo hacen a los locales, la migración de datos queda por completo manejeda por el sistema operativo.

    Para la transferencia de archivos se utilizan generalmente dos formas:

    - Transferir el archivo a la instalación local y luego devolverlo con las modificaciones hechas (Estructura que utiliza el sistema ANDREW)

    - Transferir solo los datos necesarios , con el mismo procedimiento que el anterior.

    4.1 Migración de cálculos: Cuando los archivos a utilizar son grandes y/o están en varias instalaciones ,se puede pedir al los distintos procesadores que hagan los cálculos y luego remitan la información al solicitante.

    4.2 Migración de procesos: Una instalación puede requerir que otras hagan algún proceso en lugar de ellas, con el objetivo de equilibrar las cargas de trabajo, acelerar los cálculos o por una preferencia de hardware o software.

    Estos sistemas operativos pueden utilizarse en forma conjunta para lograr una mayor eficiencia de trabajo.

    7.5 - ASPECTOS DE DISEÑO

    El reto para muchos diseñadores es lograr una transparencia total en la multiplicidad de los procesadores, el usuario debe poder utilizar cualquier dispositivo con la facilidad con que utiizan los locales.

    Por otro lado se debe lograr que el sistema tenga una alta tolerancia en cuanto a las fallas en el hardware, debe poder seguirse trabajando aun cuando no funcionen ciertas instalaciones

    El diseño debe resistir una elevada carga de servicios, adaptarse al crecimiento en la cantidad de usuarios y permitir una sencilla integración de recursos adicionales, esto se llama sistema escalonado.

    7.6 PROCESOS.

    ORDENACION DE LOS SUCESOS.

    En los sistemas centralizados se puede determinar el orden de los sucesos ya que tienen memoria y reloj conjuntos ¿ Que pasa con ello en los sistemas distribuidos ? .

    Una de las formas para salvar este inconveniente es la asignación de un contador particular (reloj lógico) que va aumentando en un valor monótonamente creciente. En el caso que haya procesadores de distinta velocidad entonces el mas lento toma el valor de el reloj lógico a partir del que tiene cuando llega al procesador .

    EXCLUSION MUTUA

    a) Enfoque centralizado:

    Uno de los procesadores actúa como coordinador para evitar que dos procesos entren en su sección critica por medio de permisos de entrada y avisos de salida, y si el algoritmo que coordina estos procesos esta bien diseñado no habrá nunca espera infinita.

    b) Enfoque distribuido:

    En los criterios descentralizados se puede utilizar la marca de tiempo.

    El procesador que desee entrar en su sección critica (p1) envía un mensaje que llega a todos los procesos y estos responderán de inmediato si no están en su sección critica . Si el proceso (p1) no recibe respuesta de alguno de los otros procesos , entonces quiere decir que hay un procesos en su sección critica.

    En caso que un procesador (p2) reciba el mensaje de (p1) y quiera también entrar en sección critica, compara la marca de tiempo de p1 con la suya , y en base a esto responde o entra en la sección.

    Para la exclusión mutua también se puede utilizar la técnica del paso de testigo antes explicada.

    SOLIDEZ

    Para que un sistema sea sólido, no debe darse la posibilidad de perdida de mensajes, para ello el sistema debe detectar cuando se produzca alguna falla, ya sea de comunicación o de instalación .

    SISTEMAS DE ARCHIVOS

    UN sistema de archivos distribuido tiene la característica que sus clientes, servidores, y dispositivos de almacenamiento están distribuidos por las distintas instalaciones .En vez de un dispositivo centralizado de datos, existenvarios dispositivos de almacenamiento independientes.

    En situación ideal el sistema debe parecer a los clientes como un sistema centralizado convencional, debe ser transparente y no distinguir entre local y remoto.

    Depende del S.A.D. localizar los archivos y hacer la transferencia de datos.

    Hay diversas formas para la nominación de los archivos, una de ellas es la de nombrar a ellos en base al nombre de su anfitrión y su nombre local.

    Las solicitudes de acceso son en general manejadas por dos métodos:

    a) Con el servicio remoto, las solicitudes se entregan a un servidor, el cual ejecuta los accesos y envía los resultados al cliente.

    b) Utilización de memoria cache: Se transfiere una copia de los datos necesarios a la memoria cache y se trabaja sobre esa copia. La idea es que pueda utilizarse el archivo en forma local para no adicionar trafico a la red y dar un tiempo de respuesta mas breve para situaciones reiterativas.

    Ejemplos de sistemas que se manejan en forma distribuida:

    - UNIX UNITED

    - NFS

    - ANDREW

    - SPRITE

    - LOCUS

    8- ENTRADA SALIDA

    Una de las funciones principales de un sistema operativo es el control de todos los dispositivos de entrada/salida de la computadora.

    La forma de administrar la E/S por parte del sistema operativo es el tema de este capítulo.

    En primer lugar, analizaremos algunos de los principios del hardware de E/S y después, del software de E/S en general.

    Después de esta introducción, estudiaremos con detalle tres dispositivos comunes de E/S : discos, relojes y terminales.

    8.1 PRINCIPIOS DEL HARDWARE DE E/S

    En este libro nos interesaremos por la programación de los dispositivos de E/S, no por su diseño, construcción o mantenimiento ; así, nuestro interés estará restringido a la forma de programar el hardware y no a su funcionamiento interno. Sin embargo, es frecuente que la programación de muchos dispositivos de E/S esté íntimamente ligada con su operación interna.

    DISPOSITIVOS DE E/S

    Los dispositivos de E/S se pueden dividir de manera general en dos categorías : dispositivos de bloque y dispositivos de carácter. Un dispositivo de bloque es aquel que almacena la información en bloques de tamaño fijo, cada uno con su propia dirección. Los tamaños comunes de los bloques van desde 128 bytes hasta 1024 bytes. La propiedad esencial de un dispositivo de bloque es que en todo momento el programa puede leer o escribir en cualquier de los bloques. Los discos son dispositivos de bloque.

    Otro tipo de dispositivo de E/S es el dispositivo de carácter. Un dispositivo de carácter envía o recibe un flujo de caracteres, sin sujetarse a una estructura de bloques. No se pueden utilizar direcciones ni tienen una operación de búsqueda. Las terminales, impresoras de línea, cintas de papel, tarjetas perforadas, interfaces de una red, ratones y muchos otros dispositivos no parecidos a los discos, son dispositivos de carácter.

    Este esquema de clasificación no es perfecto. Los relojes no tienen direcciones por medio de bloques. Tampoco generan o aceptan flujos de caracteres. Las pantallas mapeadas a memoria tampoco se ajustan al modelo.

    1.2 CONTROLADORES DE DISPOSITIVOS :

    Las unidades de E/S constan por lo gral. De un componente mecánico y otro electrónico. El componente electrónico se llama controlador del dispositivo o adaptador. En las mini y microcomputadoras , éste toma con frecuencia la forma de una tarjeta de circuitos impresos que se puede insertar en la computadora,. El componente mecánico es el propio dispositivo.

    La tarjeta controladora tiene por lo general un conector, en el que se puede conectar el cable que va al dispositivo en sí. Muchos controladores pueden manejar dos, cuatro y hasta ocho dispositivos idénticos.

    Mencionamos esa distinción entre controlador y dispositivo porque el sistema operativo casi siempre trabaja con el controlador y no con el dispositivo. Casi todas las micro y utilizan el modelo de un bus, para la comunicación entre la CPU y los controladores. Los grandes mainframes utilizan con frecuencia otro modelo, con varios buses y computadoras especializadas en E/S llamadas canales de E/S.

    La interfaz entre el controlador y el dispositivo es con frecuencia de muy bajo nivel.Un disco, por ej., puede recibir un formato de 8 sectores de 512 bytes por pista. Sin embargo, lo que realmente sale de la unidad es un flujo de bits en serie, que comienza con un preámbulo, seguido de 4096 bits en un sector y por último una suma para verificación o un código corrector de errores. El preámbulo se escribe al dar formato al disco y contiene el número de cilindro y sector, el tamaño de sector y otros datos similares.

    La labor del controlador es convertir el flujo de bits en serie en un bloque de bytes y llevar a cabo cualquier corrección de errores necesaria. Lo común es que el bloque de bytes se ensamble, bit a bit, en un buffer dentro del controlador. Después de verificar la suma y declarar al bloque libre de errores, se le puede copiar en la memoria principal.

    Cada controlador tiene unos cuantos registro que utiliza para  la comunicación con la CPU. En ciertas computadoras, estos registro son parte del espacio normal de direcciones de la memoria.

    La asignación de direcciones de E/S a dispositivos se lleva a cabo mediante una lógica de descodificación del bu asociada al controlador.

    El sistema operativo realiza la E/S al escribir comandos en los registros de los controladores.

    Al aceptar un comando, la CPU puede dejar al controlador y dedicarse a otro trabajo. Al terminar el comando, el controlador provoca una interrupción para permitir que el sistema operativo obtenga el control de la CPU y verifique los resultados de la operación. La CPUobtiene los resultados y el estado del dispositivo al leer uno omás bytes de información de los registros del controlador.

    ACCESO DIRECTO A MEMORIA (DMA) :

    Muchos controladores, en particular los correspondientes a los dispositivos de bloque, permiten el acceso directo a memoria o DMA. Si no se tuviera éste, la forma de acceder al disco sería la siguiente :

    El controlador lee en serie el bloque de la unidad hasta que todo el bloque se encuentra en el buffer interno del controlador. A continuación calcula la suma de verificación para corroborar que no existen errores de lectura. Entonces, el controlador provoca una interrupción. Cuando el sistema operativo empieza su ejecución , puede leer el bloque del disco por medio del buffer del controlador, un byte o una palabra por vez, en un ciclo, en el que durante cada iteración se lee un byte o una palabra del registro del controlador y se almacena en memoria.

    DMA se crea para ahorrar tiempo a la CPU, y de ésta forma la CPU le proporciona la dirección del bloque en el disco, la dirección en memoria adonde debe ir el bloque y el número de bytes por transferir.

    Después que el controlador ha leído todo el bloque del dispositivo a su buffer y ha corroborado la suma de verificación, copia el primer byte o palabra a la memoria principal, en la dirección especificada por medio de la dirección de memoria de DMA.

    El  buffer interno se necesita porque si el controlador intentara escribir los datos en la memoria de forma directa, tendría que recurrir al bus del sistema para cada una de las palabras transferidas. Si el bus estuviera ocupado debido a que lo utilizara otro dispositivo, entonces el controlador debería esperar. So la siguiente palabra llegase antes de que la anterior hubiera sido almacenada, el controlador la tendría que almacenar en alguna parte. Si el bus estuviese demasiado ocupado, el controlador terminaría por almacenar unas cuantas palabras y con una gran tarea de administración al mismo tiempo.

    Aunque los datos se transfieren del controlador a la memoria, ya sea mediante la CPU o mediante el propio controlador, el siguiente sector pasará debajo de la cabeza del disco y los bits llegarán al controlador. Los controladores simples no pueden enfrentarse a la E/S simultánea, de forma que mientras se lleva a cabo una transferencia en la memoria, el sector que pasa debajo de la cabeza del disco se pierde.

    Como resultado, el controlador sólo podrá leer hasta el siguiente bloque, La lectura de una pista completa se realizará entonces en dos rotaciones completas, una para los bloques nones y otra para los pares. Si el tiempo necesario para una transferencia de un bloque del controlador a la memoria por medio del bus es mayor que el tiempo necesario para leer un bloque del disco, podría ser necesario leer un bloque y después saltar dos o más bloques.

    El salto de bloques, que se ejecuta para darle tiempo al controlador para la transferencia de los datos a la memoria se llama separación. Al dar formato al disco, los bloques se numeran tomando en cuenta el factor de separación.

    PRINCIPIOS DEL SOFTWARE DE E/S :

    La idea básica es organizar el software como una serie de capas, en donde las capas inferiores se encarguen de ocultar las peculiaridades del hardware a las capas superiores y de forma que éstas se preocupen por presentar una interfaz agradable, limpia y regular a los usuarios.

    OBJETIVOS DEL SOFTWARE DE E/S :

    Un concepto clave en el diseño del software de E/S es la independencia del dispositivo. Debe ser posible escribir programas que se puedan utilizar con archivos en un disco flexible o un disco duro, sin tener que modificar los programas para cada tipo de dispositivo.

    El sistema operativo debe encargarse de los problemas causados por el hecho de que estos dispositivos sean distintos y requieran directivas de dispositivos muy diferentes.

    El objetivo de lograr nombres uniformes está muy relacionado con el de independencia del dispositivo. El nombre de un archivo o dispositivo debe ser sólo una cadena o un entero y no de debe depender del dispositivo.

    Otro aspecto importante del software de E/S es el manejo de errores. En gral. los errores deben manejarse lo más cerca posible del hardware. Si el controlador descubre un error de lectura, debe tratar de corregirlo, en la medida de lo posible. Si no puede corregirlo, entonces el manejador del dispositivo debería controlarlo, tal vez mediante la forma de leer el bloque de nuevo.

    Otro de los aspectos claves son las transferencias síncrona (por bloques) o asíncrona (controlada por interruptores). La mayor parte de la E/S es asíncrona.

    Los programas de los usuarios son mucho más fáciles de escribir si las operaciones de E/S son por medio de bloques. El sistema operativo se encarga de hacer que operaciones controladas por interruptores parezcan del tipo de bloques para el usuario.

    Algunos de los dispositivos de E/S, como los discos, pueden ser utilizados por varios usuarios al mismo tiempo.

    Otros dispositivo, como las impresoras, deben dedicarse a un solo usuario hasta concluir con él.

    El uso de dispositivos de uso exclusivo presenta también una serie de dificultades. El sistema operativo debe administrar los dispositivos compartidos y de uso exclusivo de forma que evite dichos problemas.

    Estos objetivos se logran de una forma comprensible y eficiente al estructurar el software de E/S en cuatro capas :

    1)    Directivas de dispositivos

    2)    Software de sistema operativo independiente de los dispositivos.

    3)    Manejadores de interrupciones

    4)    Software a nivel usuario

    MANEJADORES DE INTERRUPCIONES :

    Las interrupciones deben ocultarse en lo más profundo de las entrañas del sistema operativo, de forma que sólo una pequeña parte del sistema sepa de ellas. La mejor forma de esconderlas es que cada proceso que inicie una operación de E/S se bloquee hasta que termine la E/S y ocurra la interrupción.

    Al ocurrió la interrupción el procedimiento de interrupción realiza lo debido para eliminar el bloqueo del proceso que lo inició.

    El efecto real de la interrupción será que un proceso antes boqueado podrá continuar su ejecución.

    MANEJADORES DE DISPOSITIVOS :

    Todo el código que depende de los dispositivos aparece en los manejadores de los dispositivos. Cada uno de éstos controla sólo un tipo de dispositivo ; o a lo más, una clase de dispositivos muy cercanos entre sí.

    Cada controlador tiene uno o más registros de dispositivos, los cuales se utilizan para dale los comandos. Los manejadores de dispositivos proveen estos comandos y verifican su ejecución adecuada. Así el manejador del disco es la única parte del sistema operativo que conoce el número de registros de un controlador de disco y el uso que tienen éstos. El se encarga de los sectores, pistas, cilindros, cabezas, movimiento del brazo, factores de separación, control del motor, tiempos de descenso de la cabeza y el resto de la mecánica del funcionamiento adecuado del disco.

    Es decir, la labor de un manejador de dispositivo es la de acepar las solicitudes abstractas que le hace el software independiente del dispositivo y verificar la ejecución de dicha solicitud.

    El primer paso para llevar a cabo una solicitud de E/S para un disco es traducirla de términos abstractos a términos concretos. Para un manejador de disco, esto quiere decir estimar el lugar donde se encuentra en realidad el bloque solicitado, verificar si el motor de la unidad funciona, si el brazo está colocado en el cilindro adecuado, etc.

    Una vez determinados los comandos, pueden ocurrir dos tipos de situaciones :

      El dispositivo debe esperar hasta que el controlador realice cierto trabajo, de forma que el manejador se bloquea hasta que ocurre una interrupción que elimina el bloqueo.

    La operación termina sin retraso, por lo que el manejador no necesita el bloqueo.

    En cualquier caso, debe verificar los errores después de terminar la operación. Si todo está en orden, el manejador dispondrá de datos para transferirlos al software independiente del dispositivo. Por último, regresa cierta información de estado para informar de los errores a quien lo llamó. Si existen otras solicitudes pendientes, debe seleccionar e iniciar alguna de ellas, Si no hay pendientes, el manejador se bloquea en espera de una solicitud.

    SOFTWARE DE E/S INDEPENDIENTE DEL DISPOSITIVO :

    Aunque una parte del software de E/S es dependiente del dispositivo, una gran parte de él es independiente.

    La función básica del software independiente del dispositivo es llevar a cabo las funciones de E/S comunes a todos los dispositivos, además de proporcionar una interfaz uniforme del software a nivel usuario.

    El software independiente del dispositivo se encarga de asociar los nombres simbólicos de los dispositivos con el nombre adecuado.

    Un aspecto muy relacionado con los nombres es el de la protección ; MS-DOS, no tiene protección alguna, en cambio UNIX utiliza un esquema más flexible. Loas archivos especiales correspondientes a los dispositivos de E/S están protegidos por los bits usuales rwx. El administrador del sistema puede establecer entonces los permisos adecuados para cada dispositivo.

    Los distintos discos pueden tener diferentes tamaños de sector. Es labor del software independiente del dispositivo ocultar este hecho y proporcionar un tamaño uniforme de los bloques a los niveles superiores.

    De esta forma, las capas superiores sólo trabajan con dispositivos abstractos que utilizan el mismo tamaño de bloque lógico, de forma independiente al tamaño de sector físico.

    El almacenamiento en buffer también es otro aspecto, tanto de los dispositivos de bloque como los de carácter. Si un proceso del usuario escribe la mitad de un bloque, el sistema operativo mantendrá los datos en forma interna hasta que se escriban el resto de ellos, en cuyo momento el bloque podrá pasar al disco. Para los dispositivos de carácter, los usuarios pueden escribir los datos al sistema de manera más rápida que la velocidad con la que pueden salir, por lo que se requiere el uso de buffers

    Al crear un archivo y llenarlo de datos, los nuevos bloques del disco deben ser asignados al archivo. Para  esto, el sistema operativo necesita una lista o un mapa de bits de los bloques libres del disco, pero el algoritmo para localizar un bloque libre es independiente del dispositivo y se puede realizar por arriba de la capa del manejador.

    Algunos dispositivos, como las unidades de cinta magnética, sólo se pueden utilizar por un proceso en determinado momento. El sistema operativo se encarga de examinar las solicitudes para el uso del dispositivo y aceptarlas o rechazarlas, según la disponibilidad del dispositivo solicitado.

    El manejo de errores lo realizan los manejadores. La mayoría de los errores dependen en gran medida del dispositivo, por lo que sólo éste sabe qué hacer. Un error común se produce cuando un bloque del disco ha sido dañado y no se puede leer más. Después de que el manejador ha intentado leer el bloque un cierto número de veces, se da por vencido e informa del hecho al software independiente del dispositivo.

    Interfaz uniforme para los manejadores de dispositivos

    nombres de los dispositivos

    protección del dispositivo

    proporcionar un tamaño de bloque independiente del dispositivo

    uso de buffers

    asignación de espacio en los dispositivos por bloques

    asignación y liberación de los dispositivos de uso exclusivo

    informe de errores

    funciones del software de E/S independiente del dispositivo

    SOFTWARE DE E/S EN EL ESPACIO DEL USUARIO :

    Aunque la mayoría del software de E/S está dentro del sistema operativo, una pequeña parte de él consta de bibliotecas ligadas entre sí con los programas del usuario e incluso programas completos que se ejecutan dentro de del núcleo.

    No todo el software de E/S a nivel usuario consta de procedimientos de biblioteca. Otra categoría importante es el sistema de spooling. El spooling es una forma de trabajar con los dispositivos de E/S de uso exclusivo en un sistema de multiprogramación. Supongamos el caso de una impresora y un archivo especial que un proceso abrió y después no llevó a cabo actividad alguna durante horas. Ningún proceso podría imprimir nada.

    En vez de esto, lo que hace es crear un proceso especial, llamado un demonio, y un directorio especial, llamado directorio de spooling. Para imprimir un archivo, un proceso genera en primer lugar todo el archivo por imprimir y lo pone en el directorio de spooling. El demonio, que es el único proceso con permiso para utilizar el archivo especial de la impresora, debe imprimir los archivos en el directorio. Al proteger el archivo especial contra el uso directo de los usuarios, se elimina el problema de tener a alguien manteniendo algún archivo abierto un largo tiempo innecesario.

    Para enviar un archivo a alguna parte, un usuario lo coloca en un directorio de spooling de la red, Más adelante, el demonio de la red lo toma y transmite.

    Solicitud de E/S capa Réplica de E/S

    Procesos del usuario

    hace llamadas a E/S ; da formato a la E/S ; spooling

    software independiente del dispositivo

    nombre, protección, bloqueo, uso de buffers, asignación

    manejadores de dispositivos

    conforma los registros del dispositivo ; verifica el estado

    manejadores de la interrupciones

    despiera el manejador al terminar la E/S

    hardware

    lleva a cabo la operación de E/S

    funciones de E/S

    capas del sistema de E/S y las principales funciones de cada capa

    Las flechas de la figura anterior muestran el flujo de control. Por ejemplo, cuando un programa del usuario intenta leer un bloque de un archivo, se llama al sistema operativo para llevar a cabo la llamada. El software del dispositivo busca, por ejemplo en el caché. Si el bloque necesario no se encuentra ahí, llama al manejador del dispositivo para que éste pase la solicitud al hardware. El proceso se bloque entonces hasta que termina la operación con el disco.

    Al terminar con el disco, el hardware genera una interrupción. Se ejecuta el manejador de interrupciones para descubrir lo ocurrido. Extrae entonces el estado del dispositivo y despierta para terminar con la solicitud de E/S para que continúe el proceso.

    DISCOS :

    Las ventajas principales respecto de la memoria central en cuanto a almacenamiento, son :

    1.     La capacidad de espacio de almacenamiento disponible es mucho más grande.

    2.     El precio por bit es más barato

    3.     La información no se pierde al apagar la computadora.

    HARDWARE PARA DISCOS :

    Todos los discos reales están organizados mediante cilindros, cada uno de los cuales contiene tantas pistas como cabezas apiladas en forma vertical. Las pistas se dividen en sectores y el número usual de sectores en torno de la circunferencia es de ocho a 32. Todos los sectores contienen el mismo número de bytes, aunque una ligera reflexión mostrará que los sectores cercanos a la orilla del disco serán mayores físicamente que los cercanos al anillo. El espacio adicional no se utiliza.

    Una característica de dispositivo es la posibilidad de que un controlador realice búsquedas en una o más unidades al mismo tiempo. Esto se conoce como búsquedas traslapadas.

    Muchos controladores pueden también leer o escribir en una unidad mientras buscan en otras, pero ninguno puede leer o escribir en dos unidades al mismo tiempo.

    ALGORITMOS DE PROGRAMACIóN DEL BRAZO DEL DISCO :

    El tiempo para la lectura o escritura de un bloque de disco está determinado por tres factores : el tiempo de búsqueda (el tiempo necesario para mover el brazo hasta el cilindro apropiado), el retraso rotacional (el tiempo necesario para que el sector adecuado rote debajo de la cabeza) y el tiempo real de la transferencia. Para la mayoría de los discos, el tiempo de búsqueda domina.

    Si el manejador del disco acepta solicitudes, una a la vez, y las lleva a cabo en ese orden poco se puede hacer para reducir el tiempo de búsqueda. Sin embargo es posible otra estrategia si el disco está demasiado cargado.

    Para esto consideremos un disco con 4o cilindros. Se presenta una solicitud para leer un bloque en el cilindro 11. Mientras se busca el cilindro, llegan nuevas solicitudes para los cilindros 1,36,16,34,9 y 12, en ese orden. Cuando termina la solicitud activa, por medio del algoritmo anterior, podría pasar al cilindro 1, después al 36, etc. Este algoritmo necesitaría movimientos del brazo de 10,35,20,18,25 y 3 respectivamente, para un total de 111 cilindros.

    Ora alternativa es manejar siempre a continuación la solicitud más cercana, a fin de minimizar el tiempo de búsqueda. Este algoritmo, reduce a la mitad el número de movimientos del brazo en comparación con el anterior. Pero éste último tiene un inconveniente : con un disco muy cargado, el brazo tenderá a permanecer a la mitad del disco la mayoría del tiempo, de modo que las solicitudes de los extremos deberán esperar hasta que una fluctuación estadística en la carga provoque que no existan solicitudes cerca de la mitad del disco. Las solicitudes lejanas de la mitad obtendrán un mal servicio. Los objetivos de tiempo mínimo de respuesta y justicia entran en conflicto. Sin embargo la mayoría de los elevadores utilizan un algoritmo distinto para reconciliar los objetivos conflictivos de eficiencia y justicia. El algoritmo del elevador necesita que el software solo conserve 1 bit : el de la dirección actual, ARRIBA Y ABAJO. Al terminar con una solicitud, el manejador del disco o elevador verifica el bit. Si indica ARRIBA, el brazo o cabina se desplaza hacia la siguiente solicitud pendiente hacia arriba, si ésta existe. Si no existen solicitudes pendientes en posiciones más altas, se invierte el bit de dirección. Cuando el bit indica ABAJO, el movimiento es hacia la siguiente posición inferior solicitada, si ésta existe.

    Una ligera modificación de éste algoritmo con una variación menor en los tiempos de respuesta es rastrear siempre en la misma dirección. Después de darle servicio al cilindro con el número mayor, el brazo pasa al cilindro de número menor con una solicitud pendiente y continúa su movimiento hacia arriba.

    Algunos controladores de disco proporcionan una forma para que el software inspeccione el número del sector activo debajo de la cabeza. Si dos o más solicitudes para el mismo cilindro están pendientes, el manejador puede enviar una solicitud para el sector que pasará por debajo de la cabeza. Al mejorar la tecnología de los discos, los tiempos de búsqueda se acortan, pero no se modifica el retraso debido a la rotación.

    Otra tendencia es el trabajo conjunto de varios discos. Una configuración interesante es la de 38 unidades ejecutándose en paralelo. Cuando se realiza una operación de lectura, entran a la computadora 38 bits a

    la vez, uno por cada unidad.

    MANEJO DE ERRORES :

    Los disco están sujetos a una amplia gama de errores.

    1.     Error de programación

    2.     Error temporal en la suma de verificación.

    3.     Error permanente en la suma de verificación

    4.     Error de búsqueda

    5.     Error del controlador

    Los errores de programación ocurren cuando el manejador le dice al controlador que busque un cilindro no existente, lea un sector no existente, utilice una cabeza no existente o transfiera desde o hacia una memoria no existente.

    Los errores temporales en la suma de verificación son provocados por partículas de polvo en el aire, que penetran entre la cabeza y la superficie del disco. La mayor parte del tiempo se podrán eliminar al repetir la operación unas cuantas veces. Si persiste el error, el bloque puede ser marcado como un bloque defectuoso de forma que el software lo evite.

    Otra alternativa es que controladores de disco inteligentes reserven unas cuantas pistas que por lo general no estén disponibles para los programas del usuario. Al dar formato a una unidad de disco, el controlador determina los bloques defectuosos y sustituye en forma automática una de las pistas de repuesto por la pista defectuosa.

    Los errores de búsqueda son provocados por problemas mecánicos en el brazo, El controlador lleva un registro interno de la posición del brazo. Para realizar una búsqueda, envía una serie de pulsaciones al motor del brazo, un pulso por cada cilindro, para desplazar el brazo hacia el nuevo cilindro.

    Algunos controladores corrigen de manera automática los errores de búsqueda, pero otros sólo activan un bit de error y dejan el resto al manejador, el cual se encarga del error enviando un comando RECALIBRATE, para mover el brazo tan lejos como sea posible y modificar la idea interna del controlador acerca del cilindro activo.

    Como hemos visto el controlador es en realidad una peque4a computadora especializada, con software, variables, buffers y, en ciertas ocasiones, fallas.

    Los diseñadores de controladores prevén lo peor y proporcionan una clavija en el chip o tarjeta la cual obliga al controlador a olvidar lo que realizaba para inicializarse él mismo. Si todo lo demás falla, el manejador del disco puede activar un bit para invocar ésta señal y volver a inicializar al controlador.

    OCULTAMIENTO DE UNA PISTA A LA VEZ :

    Una desventaja del ocultamiento de una pista a la vez es que las transferencia del caché al programa que hace la llamada deben ser realizadas por el CPU mediante un ciclo programado, en vez de dejar que el hardware DMA realice la labor.

    Algunos controladores llevan este proceso un poco más adelante y realizan el ocultamiento de una pista a la vez en su propia memoria interna, en forma transparente al manejador, de modo que las transferencias entre el controlador y la memoria puedan utilizar DMA.

    Un disco en RAM tiene la ventaja del acceso instantáneo (no existe retraso rotacional o debido a las búsquedas), lo que lo hace adecuado para el almacenamiento de programas o datos con acceso frecuente.

    El disco en RAM se divide en n bloques, según la cantidad de memoria asignada a él. Cada bloque tiene el mismo tamaño que el bloque de los discos reales. Cuando el manejador recibe un mensaje para la lectura o escritura en un bloque, solo calcula el lugar de la memoria del disco en RAM donde se encuentra el bloque solicitado y lee o escribe en él, en vez de utilizar un disco flexible o un disco duro. Por lo general, se puede hacer la transferencia al llamar un procedimiento en lenguaje ensamblador, el cual copia desde o hacia el programa del usuario a la máxima velocidad posible para el hardware.

    Además de los discos también tenemos relojes y terminales. Para los relojes, lo importante es mantener un registro de varias solicitudes con un solo reloj. Para el caso de las terminales hay que distinguir entre la entrada y la salida. Los aspectos de la entrada son el modo crudo o el modo cocinado, el almacenamiento en buffers, el eco, los caracteres de relleno, la edición de líneas y el manejo de caracteres especiales. El software de salida se encarga del movimiento del cursor y otras secuencias de escape.

    8. ESTUDIO 2 : MS-DOS

    Sistema Operativo de un solo procesador. A diferencia de UNIX, que se puede ejecutar en una amplia gama de máquinas distintas, MS-DOS sólo se ejecuta en el Intel 8088 y sus sucesores, 286, 386 y 486. MS-DOS es sin duda el sistema operativo de más amplio uso de todos los tiempos.

    8.1HISTORIA DE MS-DOS

    La primera computadora personal fue la Altair, producida en 1975 por la compañía MITS de Albuquerque, Nuevo México. Tenía un CPU con el Intel 8080 de 8 bits y 256 bytes de memoria. Un joven llamado Bill Gates escribió una versión de BASIC para la Altair. Después de unos cuantos años, muchas compañías comenzaron a fabricar computadoras personales con base en el chip 8080. Casi todas ellas trabajaban con un sistema operativo llamado CP/M, producido por Digital Research.

    8.1.1La PC-IBM

    Alrededor de 1980, IBM decidió que las computadoras personales eran un área donde debería estar presente. Le dijo a uno de sus gerentes Philip Estridge, que fuera a Boca Ratón, Florida, y que no regresara hasta tener una computadora personal.

    Estridge pronto decidió que la única forma en que él podía producir una computadora personal era mediante el uso de componentes estándar, disponibles, en vez de diseñar los suyos propios. Para entonces, Intel había producido el 8086 de 16 bits y el 8088. Estridge eligió el 8088. IBM sabía que BASIC era popular entre los usuarios de las microcomputadoras, por lo que acudió a Bill Gates con el fin de obtener la licencia del intérprete de BASIC para su uso en la PC de IBM. En aquel entonces, Microsoft se encargaba de vender UNIX, pero UNIX, necesitaba 100 K, sólo para el sistema operativo y un disco duro. La máquina de IBM tenía 64 K, sin disco duro. Gates sugirió que IBM utilizara el sistema operativo CP/M-86 de Digital Research. IBM habló de esto con Digital Research, pero el programa de desarrollo de CP/M-86 estaba retrasado.

    Fue así como IBM regresó a Microsoft y les pidió que escribieran un sistema operativo del tipo de CP/M. Gates sabía de una compañía, Seattle Computer Products, que había escrito un sistema operativo del tipo CP/M, llamado 86-DOS. Microsoft compró entonces el 86-DOS y contrató en abril de 1981 a su autor, Tim Patterson, para realizar unos cuantos arreglos. Cambiaron su nombre por el de MS-DOS y lo entregó a tiempo a IBM. Cuando IBM anunció la PC en agosto de 1981, MS-DOS estaba ahí, junto a ella.

    La gran virtud de MS-DOS era que podía ejecutar la mayor parte del software que se utilizaba entonces en el 8080 bajo CP/M.

    Estas fueron las versiones de MS-DOS que estubieeron en el mercado:

    MS-DOS Versión 1.0

    MS-DOS Versión 2.0

    MS-DOS Versión 3.0

    MS-DOS Versión 4.0

    MS-DOS Versión 5.0

    MS-DOS Versión 6.0

    MS-DOS Versión 6.2

    MS-DOS Versión 6.22

    8.2 PANORAMA DE MS-DOS

    8.2.1 Uso de MS-DOS

    Para utilizar MS-DOS sólo hay que encender la computadora. Unos segundos después, aparece el indicador del shell. No existe un procedimiento de entrada ni contraseñas, puesto que MS-DOS está pensado para utilización en una computadora personal. Por la misma razón, los archivos y directorios no tienen propietarios y no existen bits de protección.

    Para ejecutar un programa, se escriben su nombre y argumentos en el shell. Algunas de las características del shell de UNIX también están presentes en MS-DOS. Los caracteres comodines * y ? están presentes y concuerdan con todas las cadenas y un carácter arbitrario, respectivamente, al igual que en un UNIX. Así copy *.c src

    indica que se copien todos los archivos del directorio activo con terminación.c al directorio src y

    del directorio en que está.

    indica la eliminación en el directori activo de todos los archivos cuyo nombre tenga exactamente tres caracteres.

    Command.com no distingue entre las letras mayúsculas y minúsculas. Así se puede escribir

    COPY A B

    con el mismo efecto de

    copy a b

    El redireccionamiento de la entrada y salida estándar y los filtros funciona de la misma manera que en UNIX e incluso utiliza la misma notación. También se permiten los entubamientos, pero se implantan de manera distinta (mediante archivos temporales). Otras características tomadas de UNIX son las variables del shell, indicadores adaptables por el usuario y los guiones en shell, llamados archivos de procesamiento por lotes en MS-DOS.

    Por otro lado, sólo se permite el uso de "[a-z]" en cierto rango y no se reconocen el entrecomillado de las cadenas.

    Los comandos de MS-DOS se dividen en dos categorías: internos y externos. Los internos se ejecutan por el propio shell: los externos son auténticos programas que por lo general, se encuentran en el directorio \dos o \bin

    En MS-DOS muchas de las utilerías de más uso son comandos internos del shell. En total existen 40 comandos internos. Algunos de los más comunes aparecen en la figura 8-2, junto con su equivalente en UNIX.

    Comando de MS-DOS

    Equivalente en UNIX

    Descripción

    copy

    cp

    Copia uno o más archivos

    date

    date

    Exhibe o modifica fecha actual

    del

    rm

    Elimina uno o más archivos

    dir

    is

    Enlista archivos y directorios

    mkdir

    mkdir

    Crea un nuevo directorio

    rename

    mv

    Da a un archivo nuevo nombre

    rmdir

    rmdir

    Elimina un directorio vacío

    type

    cat

    Exhibe un archivo

    Fig. 8.2 Algunos de los comandos de MS-DOS integrados al shell.

    La construcción de tantos comandos dentro del shell representa una situación contradictoria. Por un lado, el hecho de no tener que buscarlos en un disco lento los hace más rápidos. Puesto que la PC de IBM original no tenía un disco duro, sin uda, esta fue la razón para incluirlos en esa ocasión en el shell. Por otro lado, todo ese código hace que el shell sea más grande. Para evitar que este problema se salga de contro, se ha mantenido un número mínimo de comandos internos. Por ejemplo, no existe forma de eliminar varios archivos no relacionados entre sí a la vez. El comando

    del tom dick harry

    no funciona, puesto que del sólo toma un argumento. Sin embargo, es válido decir

    del *.obj

    para eliminar todos los archivos que terminen con .obj

    Un problema relacionado con esto es la interpretación de los caracteres comodines. Supongamos que un usuario escribe

    dir *.c

    y se le indica que el único archivo que termina en .c es hypertext.c. Entonces escribe

    edir *.c

    y espera llamar al editor con hypertext. Para su sorpresa, el editor se queja de que *.c no es un archivo válido y termina. El problema es que el desarrollo de los comodines sólo funciona para los comandos internos y no para los externos. En MS-DOS, la lína de comandos se transfiere de manera literal al programa. El resultado neto de esto es que los usuarios deben recordar los comandos que manejan el desarrollo de los comodines y los que no.

    El hecho de que los comandos vean los comodines también puede ser una ventaja. Un comando externo como

    replace *.c *.old

    reemplaza de manera sistemática todas las extensiones de los archivos con terminación .c por .old. En UNIX esto es casi imposible de lograr.

    MS-DOS tiene directorios de trabajo, pero difieren de los de UNIX de manera importante. En UNIX, cada proceso tiene su propio directorio de trabajo, pero si un usuario escribe

    cd /usr/ast/src

    e inicia entonces un proceso, éste hereda a /usr/ast/src como un directorio de trabajo. Si el proceso cambia entonces de directorio de trabajo a /usr/ast/mail y hace su salida, el shell seguirá teniendo a usr/ast/src como directorio de trabajo y el siguiente proceso que inicie será colocado ahí. En contraste, los mismos sucesos en MS-DOS dejarán al segundo proceso en el directorio mail, puesto que MS-DOS sólo tiene un directorio de trabajo (para cada disco).

    MS-DOS 5.0 tiene un programa doskey que se puede instalar con el fin de registrar y guardar en un buffer todas las combinaciones de teclas. Su función es permitir la repetición de comandos, con o sin edición.

    8.2.2 El Shell de MS-DOS

    Muchos usuarios, en especial los principiantes, consideran que la interfaz de la línea de comandos de MS-DOS es crítica, o francamente hostil.

    Para facilitar la vida de estas personas, MS-DOS tiene ahora una interfaz orientada a la pantalla, llamada dosshell. Despliega los archivos y directorios en ventanas y permite que los usuarios realicen una gran cantidad de trabajo al apuntar mediante el ratón y oprimir el botón de éste.

    Al iniciar dosshell, ya sea en forma manual o automática al encender la máquina, se exhiben varias ventanas en la pantalla. Pueden aparecer varias pantallas, una de las cuales se muestra en la figura 8-3. Esta contiene ocho ventanas.

    La ventana superior es la barra de título, la cual identifica el programa en ejecución. A continuación aparece la barra de menú. Al oprimir el botón del ratón sobre File aparece un menú que permite a los usuarios desplazar, copiar, cambiar el nombre e imprimir archivos, crear directorios, así como otras operaciones análogas.

    El menú Options activa o desactiva varias opciones. También permite al usuario seleccionar los colores de la pantalla y cosas similares.

    El menú View controla los cuatro tipos de ventanas que se pueden exhibir y el tamaño de cada una.

    El menú Tree controla las opciones de la forma en que se exhiben los subdirectorios en la pantalla. Estas opciones afectan los valores predefinidos [+] y [-].

    El menú Help proporciona una amplia ayuda en línea en relación con varios aspectos de dosshell..

    La siguiente sección de la pantalla de la figura 8-3 contiene los iconos de unidad. En MS-DOS, cada unidad de disco tiene asignado un código. Los dos primeros discos se llaman A y B y el primer disco duro se llama C.

    La cadena C:\ que se muestra arriba de las unidades indica que el directorio de trabajo es el directorior aíz del disco duro.

    La ventana Directory Tree exhibe el directorio raíz de la unidad C. Una entrada con un símbolo [+] indica que el directorio en cuestión, como es el caso de PUBLISH, tiene subdirectorios que no se muestran. Al oprimir el botón sobre [+] este símbolo cambia por [-] y se muestran los subdirectorios, como en el caso de GAMES.

    La barra de recorrido (scroll bar) a la derecha de la ventana se utiliza si la información por exhibir excede el tamaño de la ventana.

    Al seleccionar una entrada del Directory Tree, sus archivos aparecen en la ventana File List a la derecha de ésta. En la figura 8-3, se seleccionó TEXT, por lo que se muestran sus archivos.

    Si el archivo es un programa ejecutable, este se ejecuta al oprimir dos veces el botón sobre él. Esta es la forma usual de ejecutar un programa desde dosshell.

    La ventana Main tiene una lista de los comandos de uso frecuente. Los programas se ejecutan al oprimir el botón del ratón sobre ellos.

    En un principio, MS-DOS era, un sistema de un único proceso. Sin embargo, en la verisón 6.0, es posible inicar un comando y después suspenderlo al escribir CTRL-ESC. Entonces vuelve a aparecer la pantalla dosshell, con el nombre del programa suspendido en la ventana Active Task List.

    Todos los programas suspendidos aparecen en esta ventana. Si se oprime el botón del ratón dos veces sobre alguno de ellos, este programa continúa su ejecución.

    Por último, la ventana Status. Tiene una lista de ciertas abreviaturas de comandos, exhibe mensajes y muestra la hora del día.

    Figura 8.3

    8.2.3 Configuración de MS-DOS

    MS-DOS se puede configurar en una infinidad de formas.

    El programa doskey es un ejemplo del uso de esta característica. Al registrar las interrupciones del teclado, doskey puede examinar todos los caracteres tecleados antes de que éstos pasen al sistema operativo. Además de reciclar comandos anteriores, doskey permite que los usuarios definan macros con nombres cortos para secuencias largas de teclas.

    Otra forma de configuración por parte del usuario es la capacidad de instalar manejadores de dispositivos adaptados a las necesidades de aquellos. Estos manejadores pueden cotnrolar a los dispositivos de E/S no estándar, como los sintetizadores de música MIDI. También pueden manejar los dispositvos estándar, como la memoria extendida, de forma no estándar (por ejemplo simular discos en RAM). Esta capacidad permite un alto grado de flexibilidad.

    Otro tipo muy distinto de posibilidades de configuración es el soporte de los diferentes lenguajes nacionales. La organización del teclado tradicional también difiere de país en país. Para el manejo de teclados diferentes, MS-DOS tiene la capacidad de asociar los códigos de teclas producidos por el teclado con diferentes caracteres. Gran parte de la capacidad de configuración de MS-DOS se controla mediante un archivo llamado config.sys. Puede contener comandos para la instalación de manejadores de dispositivos adecuados, establecer el soporte del lenguaje nacional, determinar la parte de la memoria donde debe colocarse el sistema operativo, asignar memoria para el buffer caghé, especificar el número máximo de archivos abiertos y seleccionar el shell. Además, después de procesar este archivo, se ejecuta un archivo por lotes llamado autoexec.bat para otros detalles de la inicialiación y configuración.

    8.3 CONCEPTOS FUNDAMENTALES EN MS-DOS

    En MS-DOS, el modelo de un proceso y su uso de memoria están fuertemente entrelazados e íntimamente relacionados con los detalles de la arquitectura del CPU 8088 y la arquitectura del sistema PC de IBM. Además, la programación del modelo de los procesos y de la memoria son inseparables de la implantación.

    8.3.1 Procesos en MS-DOS

    MS-DOS no es un sistema de multiprogramación como UNIX y no puede soportar varios procesos independientes en ejecución simultánea en la misma máquina. Tampoco es un sistema de monoprogramación. Es algo intermedio.

    En MS-DOS, el proceso padre y el hijo no pueden ejecutarse en paralelo. Cuando un proceso produce un hijo, el padre se suspende de manera automática hasta que el hijo hace una salida. Nada de lo que pueda hacer el padre puede evitar esto. Así, en cualquier momento puede existir un número arbitrario de procesos dentro de la memoria, pero sólo uno de ellos estar activo. Por esta razón, aunque MS-DOS permite la existencia de varios procesos a la vez, no es un verdadero sistema de multiprogramación.

    Sin embargo, es posible hacer un truco y lograr un limitado grado de multiprogramación mediante el manejo directo de las estructuras de datos del sistema operativo. Este truco sólo funciona debido a que MS-DOS se ejecuta en máquinas sin protección de memoria.

    MS-DOS tiene dos tipos de archivos binarios ejecutables, los que producen dos tipos ligeramente distintos de procesos. Un archivo con extensión .com, como prog.com es un simple archivo ejecutable. El archivo ejecutable es una imagen exacta, byte a byte, del código ejecutable. El archivo se carga en la memoria tal cual es y se ejecuta.

    Un proceso que inicia a partir de un archivo .com tiene un segmento texto + datos + pila de a lo más 64 K. Incluso aunque el proceso no pueda exceder de 64 K, se le asigna toda la memoria disponible. La pila está en la parte superior del segmento común de 64K. Si el proceso no planea producir procesos hijos, se puede ejecutar de esta manera. Si realmente va a producir hijos, debe regresar la parte no utilizada de la memoria al sistema operativo, mediante una llamada al sistema. Si se niega a liberar cierta memoria, el intento por producir un hijo fracasará, debido a la falta de memoria.

    El otro tipo de archivo ejecutable es el archivo .exe Un proceso creado a partir de estos archivos puede tener un segmento de texto, un segmento de datos, un segmento de pila y tantos segmentos adicionales como lo desee. A diferencia de los archivos .com, lo archivos .exe contienen información relativa a la reasignación, por lo que pueden ser reasignados conforme se cargan en la memoria. El sistema operativo indica la diferencia entre los archivos .com y los archivos .exe mediante los dos primeros bytes.

    Los primeros 256 bytes de cada proceso de MS-DOS forman un bloque especial de datos llamado PSP (prefijo del segmento de programa). El sistema operativo construye este bloque al momento de crear el proceso. Para los archivos .com, cuenta como parte del espacio de direcciones del proceso y se puede hacer referencia a él mediante las direcciones 0 a 255. Por esta razón todos los procesos .com comienzan en la dirección 256 y no en la dirección 0. Por el cotnrario los archivos .exe se reasignan por arriba de PSP. Esto evita desperdiciar 256 bytes de espacio de direcciones.

    PSP contiene el tamaño del programa, un apuntador al bloque del ambiente, la dirección del manejador CTRL-C, la cadena del comando, un apuntador al PSP del padre, la tabla de descriptores del archivo y otro información. Alguna de esta información es obsoleta y alguna otra es sólo para uso interno de MS-DOS.

    El bloque de ambiente es una parte de la memoria que contiene a todas las variables de shell, donde cada cadena termina con un byte nulo. Con respecto al ambiente, MS-DOS es igual que UNIX, excepto que en UNIX el puntador al ambiente no es una dirección fija de la parte inferior del espacio de direcciones del proceso, sino que es un parámetro de main.

    Si en la cadena de comando, el usuario escribe

    edit *.c

    la cadena de comando que se transfiere a edit es "*.c". El propio programa se encarga de desarrollar el *, si así lo desea. Algunos lo hacen y otros no: esta es la razón de que los comodines puedan actuar de maneras distintas con los comandos internos y externos.

    En MS-DOS un hijo hereda, por lo general, los archivos abiertos del padre y sus posiciones de archivo, a menos que ellos hubieran sido abiertos de modo especial, para inhibir la herehcia. Los archivos abiertos por el propio hijo se cierran de manera automática al terminar éste y su memoria es librada. Un hijo también puede regresar un estado de salida a su padre. Todo esto es igual en las características correspondientes a UNIX.

    A diferencia de UNIX, MS-DOS no soporta formas de intercambio (swapping) o paginación. Cuando un proceso produce un hijo, existe el peligro de que no exista la suficiente memoria para el hijo y sus futuros descendientes. Con el fin de reducir la probabilidad de que esto ocurra, muchos de los procesos que pueden tener hijos se construyen en dos partes. En la figura 8.4 vemos la máquina justo después de haber arrancado e iniciado command.com.

    Figura 8.4

    Supongamos ahora que este editor tiene la capacidad de que el usuario pase a command.com sin perder el contesto de la edición.

    Es probable que el enorme editor haya sido construído en la memoria dejando un pequeño espacio de resguardo (stub) después del intérprete o editor principal. Antes de regresar a command.com el enorme editor puede copiar su propia imagen central a un archivo en disco, reducir su asignación de memoria dejando exactamente sólo el espacio de resguardo y después producir al hijo, lo que da la situación de la figura 8.4(c). Si el usuario decide dar formato a un disco para guardar su archivo, pasamos a la figura 8-4 (d). Al terminar el programa de formato, regresamos a la figura 8-4(c). Cuando el usuario escriba

    exit

    para salir de command.com, el espacio de resguardo (stub) del enorme editor recupera el control y lee en el resto de sus procesos. Entonces puede continuar la edición a partir del punto donde se suspendió.

    Por lo general, cuando un proceso termina se reclama su memoria y el proceso desaparece para siempre. Sin embargo, MS.DOS también tiene una alternativa para un proceso que concluye, donde se indica al sistema que no recupere su memoria, sino que considere que hizo su salida

    Los procesos en MS-DOS pueden instalar sus propios manejadores de interrupciones. En particular, un proceso puede instalar un nuevo manejador del teclado, el cual se llama en cada interrupción del teclado. Este manejador se puede localizar dentro de los procesos TSR inalcanzables.

    El manejador examina rápidamente la combinación de teclas, para ver si es la tecla especial o combinación de teclas llamada tecla de activación (hot key), que activa el código TSR. Si este no es el caso, el carácter se coloca en la cola de entrada de caracteres del sistema operativo y el programa TSR regresa de la interrupción al programa de la aplicación. Si es la tecla de activación, el programa TSR vuelve a la vida y realiza lo que se supone deba hacer. Esta secuencia de eventos se muestra en la fig. 8-5. También es posible tener un manejador de interrupciones que busque varias teclas de activación y desvíe el control hacia el procedimiento adecuado.

    MS-DOS no es un sistema que vuelva a entrar (reentrant), lo que significa que no puede manejar una segunda llamada hasta terminar con la primera. Entre otras cosas, el programa TSR no puede utilizar MS.DOS para leer nuevos datos mediante el teclado y no lo puede utilizar para escribir en la pantalla. Tampoco lo puede utilizar para tener acceso a archivos.

    En la actualidad MS-DOS contiene ciertos puntos que posibilitan el hecho de que los programas TSR realicen llamadas al sistema mediante ciertos trucos con MS-DOS. Nada de esto está documentado en el manual oficial Microsoft MSDOS Programmer's Reference Manual.

    Sin embargo, la gran mayoría de los programas comerciales TSR, por necesidad, hacen un extenso uso de características no documentadas en MS.DOS.

    8.3.2 El modelo de memoria de MS-DOS

    MS-DOS tiene un modelo de memoria bastante complejo. El espacio de direcciones se divide en cuatro regiones, con tamaños y propiedades diferentes.

    La arquitectura de memoria del 8088

    El 8088 tiene 12 registros, como se muestra en la fig. 8-6. El primer bloque, AX, BX, CX y DX lo forman registros de 16 bits, cada uno de los cuales consta de una pareja de registros de 8 bits

    El segundo bloque, SI, DI, BP y SP son verdaderos registros de 16 bits, SI y DI son registros de índices: BP se utiliza, por lo general, para apuntar a la base del marco de pila activo y SP es el apuntador a la pila. Todos estos registros deben contener apuntadores.

    El tercer bloque, CS, DS, SS y ES son registros de segmento. Cada registro de segmento contiene los 16 bits superiores de una dirección de 20 bits. Los 4 bits inferiores siempre son nulos.

    Los registros de segmento contienen direcciones de memoria medidas no en bytes, sino en unidades de 16 bytes, llamadas párrafos. Por ejemplo, un registro de segmento con el valor 3 apunta al párrafo 3, que es la dirección 0x00030 (48 decimal).

    Cada registro de segmento tiene su propio uso. CS, iniciales de segmento de código, se utiliza para reasignar el contador del programa. DS, iniciales de segmento de dato, se utiliza para reasignar direcciones de datos SS, segmento de pila, se utiliza para reasignar referencias a la pila.

    Por último, ES, segmento extra, es un registro de segmento adicional, que se utiliza con distintos fines. Los segmentos tienen una longitud de 64 K bytes y se pueden reasignar en cualquier parte del espacio de direcciones de 1 megabyte.

    La figura 8-7 (a) muestra dos segmentos dentro del espacio de direcciones de IM. El segmento de código ocupa la región de 8K a 72K y el segmento de datos va de 512 K a 576 K. Para colocar el segmento de código en 8K, el registro CS debe contener el valor 8192/16 que es 512. En forma análoga, DS es 524288/16, que es 32768. No es posible que el segmento de código comience en la dirección 8190 o la dirección 8194, puesto que ninguno de estos valores se encuentra en la frontera de un párrafo; es decir, ninguno de ellos se puede expresar como un número de 20 bits cuyos 4 bits inferiores sean todos 0. Sólo las direcciones divisibles entre 16 tienen esta propiedad.

    Las instruccines de máquina en el 8088 contienen direcciones de 16 bits y ajustes de 16 bits. El contador del programa también tiene 16 bits

    Con los registros de segmento, los programas y los datos se pueden colocar en cualquier parte del espacio de direcciones de IM. El precio que se paga es que sólo se tiene un fácil acceso a 128 K. Para tener acceso a un lugar fuera de los segmentos de código o de datos, el programa debe cargar alguno de estos segmentos con un valor distintos o cargar ES y utilizar un tipo especial de direccionamiento que indique al CPU que utilice ES en vez de Ds.

    La arquitectura segmentada del 8088 indica que la escritura del programa que utilice más de 64K de código o datos es costosa.

    Se han desarrollado varios modelos distintos de programación para el 8088, según las necesidades de cada programa. La elección depende de si los segmentos de código y datos se asocian con la misma memoria o no. La longitud de los apuntadores al código y los datos, o bien si se necesita un espacio mayor de 64K para los datos estáticos. En todos los casos, la menor de las opciones utiliza direcciones y apuntadores de 16 bits; la mayor utiliza éstos de 32 bits.

    El área de memoria alta

    Los registros de segmentos con valores entre 0xF001 y 0xFFFF tienen parte de sus segmentos por arriba de 1M. En el 286 y los siguientes procesadores, su comportamiento depende del tipo de conexión del pin de la dirección A20 en el chip del CPU. Si está conectado de forma que funcione con los demás, HMA se puede utilizar para la memoria y el propio MS-DOS puede colocarse ahí. Sin embargo, si está conectado a tierra (forzado a0), entonces todas las direcciones entre 0x100000 y 0x101FFEF serán asociadas al rango 0x00000 y 0x0FFEF. Para que sea 100% compatible con el 8088, el pin se debe conectar a tierra.

    Memoria extendida

    El 286 y los siguientes CPU pueden tener memoria por arriba de la marca de 1 M. El 286 puede tener más de 16M; el 386 y 486 pueden tener hasta 4 gigabytes. La memoria por arriba de 1M se llama memoria extendida. El 86 y las máquinas superiores pueden tener dos o más modos de funcionamiento del CPU, uno de los cuales es el modo real. El modo real es el único que permite la compatibilidad con el 8088.

    MS-DOS sólo funciona en modo real, lo que dificulta el uso de la memoria extendida. En principio, MS.DOS no utiliza la memoria extendida en forma alguna. Ahora la memoria extendida sólo se utiliza para los discos RAM y el buffer caché. La estructura de MS-DOS no permite su uso para los programas.

    El área superior de la memoria

    En la PC la memoria entre 90 y 640K se reservaba para el sistema operativo, los manejadores de dispositivos y los programas ordinarios. Esta región se llama ahora la memoria convencional. Los restantes 348K, de 640K a 1M llamados área superior de memoria (UMA) estaban reservados para video RAM, ROM de BASIC y otras funciones relacionadas con la E/S.

    En un principio bastaban los 640K, pero al pasar el tiempo y agrandarse los programas, esto se convirtió en un predicamento En retrospectiva, la división del espacio de direcciones del 8088 en la memoria convencional de 640K y el área superior de memoria de 384K fue un error. Los dispositivos de E/S no necesitan tanto espacio de direcciones y los programas necesitan mucho más, por lo que hubiera sido mejor una divisin de 832K para programas y 192K para los dispositivos de E/S.

    Aunque la mayorái de las PC tengan de 200K a 300K de espacio de direcciones no utilizado en el área superior de la memoria, las direcciones exactas libres varían de una máquina a otra. Además, no están en bloques adyacentes, sino en una colaccin de huecos entre las tarjetas de E/S

    A partir de MS-DOS 5.0 Microsoft decidió permitir que los modelos 386 y CPU superiores utilizaran este espacio de direcciones, mediante la asociación de partes de la memoria extendida con los huecos. Así por ejemplo, si cierta máquina no tiene dispositivos de E/S, ROM video RAM enlas direccines 640K a 703K, 768K a 800K y 896K a 960K puede indicar a MS-DOS que asocie 160K de su memoria extendida con estos huecos, para poderlos utilizar como RAM.

    Sobreposiciones (overlays)

    La necesidad de un espacio de direcciones mayor de 640K data desde el CPU 286. En ese momento, se necesitaba una solución compatible con el 8088. Se diseñaron dos soluciones, una en software y otra en hardware. La solución en software que ofrece MS.DOS es una llamada al sistema que permite a un programa en ejecución cargar en la memoria un archivo .com o .exe, lo que se denomina una sobreposición (overlays), para recuperar después el control. El programa que hace la llamada llama entonces a un procedimiento que se encuentra en la sobreposición. Después de concluir la sobreposición, el control regresa al programa que hizo la llamada, que puede entonces liberar la memoria de la sobreposición y continuar. De esta forma, es posible que programas arbitrariamente grandes queden contenidos en una cantidad relativamente pequeña de memoria.

    La figura 8.9 muestra el funcionamiento de la sobreposición. La sobreposición raíz (root overlay) contiene el código de control del mecanismo de sobreposición y también puede contener tablas y estructuras de datos compartidas entre las fases del compilador.

    Un poco después de la incialización, la sobreposición raíz hace una llamada al sistema, que carga la sobreposición de la fase 1. Después de completar la carga, la sobreposición raíz puede llamar al procedimiento principal en la fase 1 mediante una instrucción de llamada a procedimiento. Se ejecuta la fase 1 y se coloca información en las tablas contenidas en la sobreposición raíz. Al terminar, el procedimiento principal de la fase 1 regresa al punto donde se hizo la llamada en la sobreposición raíz. En este punto, la sobreposición raíz puede pedir la carga de la fase 2 y llamarla entonces. La fase 2 puede leer la información depositada en las tablas de la sobreposición raíz por la fase 1.

    Memoria expandida

    Esquema de hardware llamada memoria expandida mediante el cual se podían conectar al 8088 grandes cantidades de memoria para su uso.

    Como MSDOS no puede utilizar de manera adecuada la memoria extendida, las máquinas 386 y 486 utilizan, por lo general, parte de la memoria extendida para relenar los huecos en el área superior de la memoria y el resto se utiliza a menudo para simular la memoria expandida.

    El espacio de direcciones de 1M en la PC de IBM se divide en 64 páginas de 16K cada una. Un hardware especial en la tarjeta de la memoria expandida asocia las 64 pag virtuales, con cualquier conjunto de marcos físicos de pág.

    El problema que intenta resolver la memoria expandida es ajustar programas y estructuras de datos grandes en un espacio de direcciones virtuales de 640 K. La memoria expandida es visible por completo para el programador

    8.3.3 El sistema de archivos en MS-DOS

    MS-DOS permite que el directorio raíz tenga subdirectorios y que éstos tengan de nuevo subdirectorios, con una profundidad sin límite.

    Los nombres de archivo en MS-DOS tienen una parte básica de 8 caracteres, que pueden estar seguidos de una extensión. La extensión siempre comienza con un punto y puede contener 1 a 3 caracteres. Las más comunes son:

    .bat .obj .txt

    .com .exe

    .doc .sys

    Para el shell de MS-DOS ABC, Abc y abc son el mismo archivo.

    Otra característica que posee MS-DOS es la presencia de atributos de archivo. Existen 4:

    1. Readonly

    2. Archive

    3. System

    4. Hidden

    copy a:\abc c: \usr\ast\xyz

    copia un archivo del disco en la unidad a: al disco duro. Si no se proporciona el código del dispositivo, se asume el valor activo.

    8.3.4 Entrada/Salida en MS-DOS

    MS-DOS soporta archivos especiales de carácter para la E/S hacia dispositivos seriales.

    La apertura de un archivo especial de carácter regresa un descriptor de archivo, que se puede utilizar para la lectura y escritura. Otros archivos especiales de carácter son com1 ltp1 y nul. Estos nombres no deben utilizarse como la primera parte del nombre de cualquier archivo, sin importar su extensión.

    Los archivos especiales de carácter soportan los modos crudo y cocinado. En el modo cocinado, la edición entre líneas es llevada a cabo por el sistema operativo y sólo el resultado final es disponible para el programa. En el modo crudo, los caracteres se transfieren al programa exactamente como son recibidos.

    Si un proceso inicia en MS-DOS, éste tiene cinco archivos abiertos de manera automática: entrada estándar, salida estándar, error estándar, la línea serial y la impresora, con los descriptores de archivo 0 y 4 respectivamente.

    MS-DOS permite a los usuarios instalar sus propios manejadores de dispositivos adaptados justo después de arrancar el sistema.

    Alguno de los manejadores de dispositivos más comunes:

    ANSI.SYS Manejador de la consola con secuencias de escape

    DISPLAY.SYS Manejador de la consola con soporte de lenguas extranjeras

    MOUSE.SYS Manejador del ratón

    PRINTER.SYS Manejador de la impresora con soporte de leng. extranj.

    RAMDRIVE.SYS Manej. del disco en RAM para memoria extendida

    SMARTDRV.SYS Manej. del buffer caché para memoria extendida

    9.- UNIX

    El análisis de UNIX se puede ejecutar en más tipos de computadoras que cualquier otro sistema operativo.

    1- UNICS

    En las décadas de los cuarentas y cincuentas, todas las computadoras eran personales. Al surgir los sistemas de procesamiento por lotes en la década de los sesentas, el programador escribía un trabajo en las tarjetas perforadas y lo llevaba al cuarto de máquinas. Al ensamblar un número suficiente de trabajos, el operador los leía como un solo lote. La salida se obtenía una hora o más después de que el programador enviaba las tarjetas.

    Para evitar algo no satisfactorio e improductivo, se inventó el concepto de tiempo compartido en Darmouth College y M.I.T.. Sólo ejecutaba el BASIC y tuvo éxito comercial a corto plazo; era de propósito general y tuvo un enorme éxito entre la comunidad científica. Los investigadores de M.I.T. unieron sus fuerzas con Bell Laboratories y General Electric e iniciaron el diseño de un sistema de segunda generación, MUKTICS, fue un fracaso.

    Se le diseñó para soportar en hardware cientos de usuarios en forma un poco más poderosa que una moderna PC/AT. Las razones del fracaso, fueron escritas en PL/I, la aparición del compilador de PL/I se atrasó y cuando finalmente apareció, funcionaba con bastantes dificultades. Además, era demasiado ambicioso para su época, casi como el trabajo de Charles Babbage en el siglo XIX.

    Bell Labs abandonó en cierto momento el proyecto, por lo que uno de sus investigadores, Ken Thompson, se lanzó a la búsqueda de algo interesante. Decidió volver a escribir un nuevo MULTICS (esta vez en lenguaje ensamblador) en una abandonada minicomputadora PDP-7. El sistema funcionó y pudo soportar su esfuerzo de desarrollo. En consecuencia, otro investigador de Bell Labs, Brian Kernighan, lo denominó de manera un tanto burlona UNICS (Sistema de información y cómputo con uniplexión) el nombre se afirmó, aunque más adelante se cambió por UNIX.

    2- UNIX EN LA PDP-11

    El trabajo de Thompson impresionó de tal forma, que pronto se le unió Dennis Ritchie y más tarde todo el departamento. Se hicieron dos desarrollos principales. El primero fue el traslado de UNIX de la obsoleta PDP_7 a las más moderna PDP_11/20 y después a la PDP-11/45 y la PDP-11/70; estas dominaron el mundo de las minicomputadoras. La PDP-11/45 y la PDP-11/70 tenían hardware de protección a la memoria, lo que permitió soportar varios usuarios al mismo tiempo.

    El segundo desarrollo fue con respecto al lenguaje en que se escribió UNIX. Thompson decidió volver a escribir UNIX en un lenguaje de alto nivel con su propio diseño, llamado B, era una forma simplificada de BCPL. Debido a ciertas debilidades de B, este intento no tuvo éxito. Ritchie diseño entonces un sucesor de B, llamado C y escribió un compilador excelente para él. Juntos, volvieron a escribir UNIX en C, fue el lenguaje correcto en el momento correcto.

    En 1974, la PDP-11 era la computadora a elegir en casi todos los departamentos de ciencia de la computación en las universidades y los sistemas operativos que venían con ella eran considerados ampliamente, como un desastre. UNIX vino a llenar ese hueco. Se organizaron reuniones científicas que indicaban el descubrimiento de cierto oscuro error y la forma de arreglarlo. La versión que se convirtió en el primer estandardel mundo académico fue la versión 6, llamada así porque era descrita en la sexta edición del manual del programador de UNIX. Después se reemplazó con la versión 7.

    3. UNIX portable

    Una vez escrito UNIX en C, su traslado a una nueva máquina (portarlo) fue más fácil que en los primeros días, requiere que primero se escriba un compilador en C para la nueva máquina. Después hay que escribir controladores de los dispositivos para los dispositivos de E/S de la nueva máquina, tales como las terminales, impresoras y discos. No se puede transferir de una máquina a otra, puesto que dos discos no tienen que funcionar de la misma manera, se debe volver a escribir un pequeño código dependiente de la máquina, como los controladores de las interrupciones y las rutinas para el manejo de la memoria.

    Aunque el compilador de Ritchie era rápido y producía un buen código objeto , éste era sólo para la PDP-11. Steve Johnson de Bell Labs diseñó e implantó el compilador portable de C instruido de formaque produjera el código de cualquier máquina razonable con sólo una cantidad moderada de esfuerzo.

    El traslado de UNIX a la Interdata fue lento al principio, después surgió un gran interés en la posibilidad de conectar varias máquinas entre sí en forma electrónica. El concepto de redes en UNIX tiene sus raíces en este período. Después UNIX fue portado a la VAX y otras computadoras.

    Poco tiempo después, AT&T lanzó su primer producto comercial de UNIX, el sistema III. No fue bien recibido, por lo que se reemplazó por el sistema V; versiones 2,3 y 4 cada una de ellas más grandes y compleja que su predecesora. La idea original detrás de UNIX, tener un sistema elegante y simple se ha desvanecido en forma gradual.

    4. UNIX de Berkeley

    Una de las muchas universidades que adquirió pronto la Versión 6 de UNIX fue la Universidad de California en Berkeley y pudo modificar el sistema de manera sustancial. Por medio del apoyo económico de DARPA, Berkeley produjo y distribuyó una versión mejorada para la PDP-11 llamada 1BSD seguida pronto por la 2BSD, para la PDP-11.

    Todavía más importante fueron la 3BSD y en particular la 4BSD, para la VAX, llamada 32V, era en esencia la versión 7. Por el contrario, 4BSD tenía un gran número de mejoras, el uso de la memoria virtual y la paginación, lo cual permitía que los programas fueran más grandes que la memoria física. Otro cambio permitía que los nombres de archivos fueran mayores de 14 caracteres. También se modificó la implantación del sistema de archivos, lo cual lo hizo más rápido . Se introdujo el uso de redes, lo que hizo que el protocolo de redes BSD, TCP/IP, se convirtiera en un estandart de hecho, mucho más utilizado. Berkeley añadió un número sustancial de programas de utilerías para UNIX, como un nuevo editor (vi), un nuevo shell (csh), compiladores de Pascal y Lips y mucho más.

    5. UNIX Estandar

    A fines de la década de los ochenta, se utilizaba ampliamente dos versiones distintas de UNIX: 4.3BSD y la versión 3 del Sistema V, aunada al hecho de que no existían estándares para el formato de los programas en binario. Los primero intentos por lograr un UNIX estándar fracasaron. Por ejemplo, AT&T lanzó el SVID, en donde se definían las llamadas al sistema, formato de archivos, etc. El primer intento serio por reconciliar las dos tendencias de UNIX se inició bajo los auspicios del IEEE Standards Board, un cuerpo muy respetado y lo mas importante neutral. El nombre colectivo del proyecto era POSIX. Después , el comité POSIX produjo un estandard conocido como 1003.1. La idea de POSIX es que un vendedor de software pudiera escribir un programa donde sólo utilice los procedimientos definidos en 1003.1 y el podía estar seguro que dicho programa podría ejecutarse en cualquier sistema conforme con UNIX. Si una característica estaba presente en el Sistema V y el BSD, se incluía en el estándar y si no, no se incluía. Como consecuencia de este algoritmo, 1003.1 recuerda al ancestro inmediato de ambos, la versión 7. Las dos áreas en las que 1003.1 difiere en gran medida de la Versión 7 son las señales y el manejo de las terminales, una nueva característica. El documento 1003.1 esta escrito de tal forma que tanto los implantadores de un sistema operativo como los autores de software lo puedan comprender, lo cual constituye otra novedad en el mundo de los estándares. Aunque el estandard 1003.1 se refiere sólo a las llamadas al sistema, los documentos relacionados con él intentan lograr un estándar para los programas de utilerías, redes y muchas otras características de UNIX.

    Además, el lenguaje C también tiene estándares de ANSI e ISO. Un grupo de vendedores encabezados por IBM, DEC. Hewlett Packard y otros no aceptaban la idea que AT&T tuviera el control del resto de UNIX, por lo que establecieron un consorcio conocido como OSF para producir un sistema que cumpliera con todos los estándares de IEEE y otro más, pero con otras características adicionales, tales como un sistema de ventajas (X11), una interfaz gráfica para el usuario (MOTIF), cómputo distribuido (DCE), manejo distribuido (DME) y mucho más.

    La reacción de AT&T fue formar su propio consorcio, UI (UNIX International) , se basa en el sistema V. El resultado neto es que tenemos ahora dos poderosos grupos industriales. Además, IBM tiene su propia variante, AIX, al igual que otras compañias. Todos estos sistemas evolucionan en direcciones distintas.

    1. Objetos de UNIX

    UNIX es un sistema interactivo de tiempo compartido. Fue diseñado por programadores, para programadores, y cuyo uso será en ambiente en donde la mayoría de lo usuarios son relativamente sofisticados y comprometidos en proyectos de desarrollo de software.

    ¿ Qué características desean de un sistema los buenos programadores?. La mayoría desea que sus sistemas sean sencillos, elegantes y consistentes.

    Mediante el comando 1sA* se enlistan todos los archivos que comienzan con "A" , entonces el comando rmA* debe indicar la eliminación de todos los archivos que comiencen con "A" y un asterisco. Esta característica se conoce a veces como el principio de sorpresa mínima.

    Otra cosa que en general desean los programadores experimentados es potencia y flexibilidad. Esto quiere decir que un sistema debe tener un número pequeño de elementos básicos, combinables entre sí para adecuarse a la aplicación. La mayoría de los programadores aborrecen la redundancia inútil. ¿Por que escribir copy si basta cp? Para extraer todas las líneas que contengan la cadena "ard" del archivo f, el programador en UNIX escribe - grep ard f -.

    El enfoque opuesto es que el programador seleccione el programa "grep" y que entonces "grep" se anuncie a sí mismo de la siguiente forma: "Hola, soy grep, busco patrones en los archivos. Por favor escribe tu patrón . Después de obtener el patrón. grep pide un nombre de archivo. Después, pregunta si existen más nombres de archivo. Por último, resume lo que va a hacer y pregunta si eso es correcto.

    2. Interfaces de UNIX

    En la parte inferior se encuentra el hardware, con el CPU, la memoria, los discos, terminales y otros dispositivos. El sistema operativo UNIX se ejecuta en el hardware. Su función es controlar a éste y proporcionar una interfaz de llamadas al sistema para todos los programas.

    Los programas hacen llamadas al sistema al colocar argumentos en registros y ejecutar instrucciones de señalamientos, para alternar del modo usuario a modo núcleo e iniciar UNIX.

    Estros procedimientos se escriben en lenguaje ensamblador, pero pueden ser llamados desde C. cada uno de ellos comienza por colocar sus argumentos en el lugar adecuado, para después ejecutar la instrucción de señalamiento.

    En POSIX se especifica la interfaz de la biblioteca, y no la interfaz de la llamada al sistema. En otras palabras , POSIX indica los procedimientos de biblioteca que debe proporcionar un sistema conforme con UNIX, lo que son sus parámetros, lo que deben realizar y los resultados que deben producir.

    Además el sistema operativo y la biblioteca de llamadas al sistema, todas las versiones de UNIX proporcionan un gran número de programas estándar, algunos de los cuales están especificados mediante el estándar POSIX 1003.2 y otros diferentes. Entre estos se encuentran el procesador de comandos (shell), compiladores, editores, programas para procesamiento de texto y las utilerías para el manejo de archivos. Tres interfaces distintas con UNIX: la verdadera interfaz de llamadas al sistema, la interfaz de biblioteca y la interfaz formada por el conjunto de programas estándar de utilerías.

    3. Entrada a UNIX

    Para utilizar UNIX, primero hay que entrar en él, con un nombre y contraseña. Esta identificación es necesaria con el fin de proporcionar seguridad, ya que UNIX mantiene información para saber a quién pertenece cada archivo. Cualquier persona que ejecute MS-DOS puede tener acceso a cualquier parte de la máquina, sin importar quién la haya creado.

    Mantienen los nombres y contraseñas de los usuarios en un archivo secreto, UNIX utiliza un mejor esquema. El archivo de contraseñas de los usuarios en un archivo secreto, UNIX utiliza un mejor esquema. El archivo de contraseñas contiene un renglón por usuario, con el nombre de entrada del usuario, el número de identificación, la contraseña cifrada, el directorio donde se aloja y otra información. Al entrar un usuario, el programa login cifra la contraseña recién leída de la terminal y la compara con la otra contraseña en el archivo de contraseñas. Si coinciden, se permite el acceso; si no, no se permite.

    4. El Shell de UNIX

    Después de un acceso el programa login inicializa el intérprete de la línea de comandos, determinado mediante la entrada correspondiente al usuario en el archivo de contraseñas y después sale. Aunque algunos usuarios tienen intérpretes , la mayoría de ellos utilizan el llamado shell que inicia a sí mismo, escribe después en la pantalla un carácter indicador que es un signo de porcentaje o dólar y espera que el usuario escriba una línea de comandos.

    Cuando el usuario escribe una línea de comandos, shell extrae la primera palabra de ésta, supone que es el nombre de un programa por ejecutar, busca este programa y lo ejecuta. Se suspende a sí mismo hasta

    que el programa termina, en cuyo momento intenta leer el siguiente comando. Todo lo que necesita es la capacidad de leer y escribir en la terminal y el poder de ejecutar otros programas.

    Los comandos pueden tener argumentos:

    a) CP SRC DEST

    Llama al programa cp con dos argumentos, src y dest. Este interpreta al primero como el nombre de un archivo existente. Hace una copia de este archivo y llama a la copia realizada dest.

    b) HEAD 20 FILE

    El primer argumento, -20, indica al comando head que imprima las primeras líneas de file, en lugar del número predeterminado de líneas, 10. Los argumentos que controlan la operación de un comando o determinan un valor especial se denomina banderas y por convención se indican mediante un guión.

    c) HEAD 20 FILE

    Es válido e indica a head que imprima en primer lugar las primeras 10 líneas de un archivo llamado 20 y que después imprima las primeras 10 líneas de un segundo archivo llamado file.

    d) Para facilitar la especificación de varios nombres de archivo, shell acepta caracteres mágicos, también llamados comodines.

    1S *:C

    indica al comando ls que enliste todos los archivos cuyo nombre termine en .c.. Si existen los archivos de nombre x.c, y.c y z.c, el comando anterior es equivalente a escribir.

    1s x.c y.c z.c

    Un programa del tipo de shell no tiene que abrir la terminal para leer o escribir en ella un archivo llamado entrada estándar y un archivo llamado error estándar. Por lo general , todos los se dirigen hacia la terminal, de forma que la lectura desde la entrada estándar proviene del teclado y la escritura a la salida estándar o el error estándar va hacia la pantalla. Muchos programas en UNIX también leen de entrada estándar y escriben en la salida estándar en forma predefinida. Por ejemplo:

    Sort

    Llama al programa sort, que lee líneas desde la terminal, las ordena en forma alfabética y escribe el resultado en la pantalla.

    Es posible redireccionar la entrada estándar y la salida estándar, esto a veces es útil. La sintaxis de la entrada estándar utiliza un signo "menor" (<) seguido del nombre del archivo de entrada. La salida estándar se redirecciona mediante un signo mayor (>). Se permite cambiar la dirección de ambas en el mismo comando. Por ejemplo, el comando

    sort <in> out

    hace que sort tome su entrada del archivo in y escriba la salida en el archivo out. Un programa que lea su entrada de la entrada estándar, la procese y escriba su salida en la salida estándar se conoce como un filtro. Consideremos la siguiente línea de comando:

    Sort <in> temp; head - 30 <temp; rm temp

    Primero ejecuta sort, toma la entrada de in y escribe la salida en temp. Al terminar shell ejecuta head, para imprimir las primeras 30 líneas de temp en la salida. Por último, elimina el archivo temporal. UNIX proporciona una construcción más sencilla para realizar lo mismo.

    Sort <in "borra" head -30

    La barra vertical, llamada el símbolo de tubo, indica que se tome la salida de sort y que se utilice como entrada de head, lo que elimina la necesidad de crear, utilizar y eliminar el archivo temporal. El entubamiento, puede contener un número arbitrario de comandos. El siguiente ejemplo contiene un entubamiento de 4 componentes:

    Grep ter *.t head -20 tail -5>foo

    Todas las líneas que contengan la cadena "ter" de todos los archivos que terminen en .t se escriben en la salida estándar, en donde se ordenan. Las primeras 20 se seleccionan mediante head, que después las transfiere a tail, el cual escribe las últimas cinco en foo.

    UNIX no sólo es un sistema compartido: también es un sistema de multiprogramación de propósito general. La sintaxis de shell para ejecutar un proceso de modo asíncrono ó en segundo plano es colocar una ampersand (&) después del comando. Así

    WC - 1 <a> b &

    ejecuta el programa contador de palabras, wc, para contar el número de líneas en su entrada, a, escribe el resultado en b, pero lo hace de modo asíncrono, por ejemplo:

    Sort <x barra Vertical head &

    Se pueden ejecutar varios entubamientos en modo asíncrono o en segundo plano de manera simultánea. También pueden tener parámetros y utilizar construcciones if, for, while, y case. Así, un guión en shell es en realidad un programa escrito en lenguaje shell. El shell C de Berkeley es un shell alternativo diseñado para que los guiones en shell se parezcan a los programas en C en muchos aspectos.

    5. Archivos y directorios en UNIX

    Un archivo en UNIX es una secuencia de 0 o más bytes que contiene información arbitraria. No se hace una distinción entre archivos en ASCII, archivos en binario u otros tipos de archivos. El significado de los bits de un archivo depende totalmente del propietario. Los nombres de los archivos se restringían antes a 14 caracteres arbitrarios, pero el UNIX de Berkeley aumentó el límite a 255 caracteres.

    Muchos programas esperan que los nombres de archivo consten de un nombre base y una extensión, separadas por un punto. Así, prog.c es, por lo general, un programa en C, prog.p es usualmente un programa en Pascal y prog.f un programa en FORTRAN. El sistema operativo no obliga a utilizar estas convenciones. los archivos se pueden proteger al asignarles a cada uno un modo de 9 bits, llamados bits de derechos. Los primeros tres bits se aplican a los demás miembros del grupo del poseedor. Los últimos tres bits se refieren a todas las demás personas.

    Los archivos se pueden agrupar en directorios, los directorios que se almacenan como archivos y se puede trabajar con ellos en gran medida como archivos. Están protegidos por los mismos nueve bits. Los directorios pueden contener subdirectorios, lo que produce un sistema jerárquico de archivos. El directorio raíz se llama / y contiene varios subdirectorios.

    6. Programas de utilerías en UNIX

    La interfaz del usuario con UNIX consta no sólo del shell, sino de un gran número de programas de utilerías estándar, que se pueden dividir en general en las seis categorías siguientes:

    1) Comandos para el manejo de archivos y directorios.

    2) Filtros

    3) Compiladores y Herramientas para el desarrollo de programas

    4) Procesamiento de texto

    5) Administración del sistema

    6) Varios

    El estándar POSIX 1003.2 especifica la sintaxis y semántica de un poco menos de 100 de estos programas. La idea de lograr un estándar de ellos es hacer posible que cualquier escriba guiones en shell utilicen estos programas y funcionen en todos los sistemas UNIX.

    Ejemplo:

    cp a b

    copia a a b pero elimina el original. Así, desplaza el archivo en vez de hacer una copia de él en el sentido usual. Se pueden concatenar varios archivos mediante cat, que lee cada uno de los archivos de entrada y los copia a la salida estándar. Los archivos se pueden eliminar mediante el comando rm. El comando chmod permite que el propietario modifique los bits de derechos para cambiar los permisos de acceso. Los directorios se pueden crear con mkdir y eliminar con "rmdir". Para ver una lista de los archivos en el directorio, se puede utilizar "ls".

    Otros filtros definidos por 1003.2 son "cut" y "paste" que permiten recortar y pegar líneas de texto en los archivos; "od" que convierte su entrada a texto en ASCII , en octal, decimal o hexadecimal; tr, que hace traducción de caracteres y pr que da formato a la salida para la impresora, con opciones para incluir encabezados de página, números de página, etc.

    Entre los compiladores y herramientas para la programación están cc, que llama al compilador de C y ar que junta procedimientos de biblioteca en archivos de biblioteca. Otra herramienta importante es make, la cual se utiliza para mantener programas grandes cuyo código fuente conste de varios archivos, algunos son archivos de encabezado. De esta manera, dos o más archivos fuente pueden compartir las mismas declaraciones. Sin embargo, si se modifica un archivo de encabezado, es necesario localizar todos los archivos fuente que dependen de él y volverlos a compilar. La función de make es mantener un registro de los archivos fuente que dependen de él y volverlos a compilar. La función de make es mantener un registro de los archivos que dependen de cierto encabezado y cosas análogas, con el fin de que las compilaciones necesarias se realicen en forma automática.

    3. Conceptos Fundamentales en UNIX

    ar

    Construye y mantiene archivos y bibliotecas de varios archivos.

    awk

    Lenguaje para el reconocimiento de patrones

    basename

    Expone los prefijos y sufijos de un nombre d archivo

    bc

    Calculadora programable

    cat

    Concatena archivos y los escribe en la salida estándar

    cc

    Compila un programa en C

    chmod

    Modifica el modo de protección de los archivos

    cmp

    Compara dos archivos para ver si son idénticos

    comm

    Imprime líneas comunes a dos archivos ordenados

    cp

    Hace una copia de un archivo

    cut

    Hace que cada columna de un documento sea un archivo aparte

    date

    Imprime la fecha y hora

    dd

    Copia todo o parte de un archivo mediante varias conversiones

    diff

    Imprime todas las diferencias de dos archivos

    echo

    Imprime los argumentos (se utiliza principalmente en los guiones en shell)

    ed

    Editor de texto original, orientado a líneas

    find

    Encuentra todos los archivos que cumplen determinada condición

    grep

    Busca en un archivo las líneas que contienen cierto patrón

    head

    Imprime las primeras líneas de uno o más archivos

    kill

    Envía una señal a un proceso

    in

    Crea un enlace con un archivo

    ip

    Imprime una línea en la impresora de líneas

    ls

    Enlista los archivos y directorios

    make

    Vuelve a compilar aquellas partes modificadas de un programa grande

    mkdir

    Crea un directorio

    mv

    Mueve o cambia de nombre a un archivo

    od

    Realiza un vaciado de un archivo en octal

    paste

    Combina varios archivos como columnas de un solo archivo

    pr

    Da forma a un archivo para su impresión

    pwd

    Imprime el directorio de trabajo

    rm

    Elimina un archivo

    rmdir

    Elimina un directorio

    sed

    Editor del flujo (es decir, no interactivo)

    sh

    Llama al shell

    sleep

    Suspende la ejecución durante cierto número de segundos

    stty

    Establece las opciones de la terminal, tales como los caracteres para la edición de líneas

    sort

    Ordena un archivo que consta de líneas en ASCII

    tail

    Imprime las últimas líneas de un archivo

    tee

    Combina varios archivos como columnas de un solo archivo

    tr

    Traduce los códigos de caracteres

    uniq

    Elimina las líneas consecutivas idénticas de un archivo

    wc

    Cuenta los caracteres, palabras y líneas de un archivo

    1. Procesos en UNIX

    Las únicas entidades activas en un sistema UNIX son los procesos, cada proceso ejecuta un solo programa y tiene un único hilo de control.

    UNIX es un sistema de multiprogramación, por lo que se pueden ejecutar varios procesos independientes al mismo tiempo. cada usuario puede tener varios procesos activos a la vez.

    En la mayoría de las estaciones de trabajo con un solo usuario, se ejecutan ocenas de procesos en segundo plano o asíncrona (llamados demonios), aun cuando el usuario esté ausente.

    Un demonio típico es el demonio cron. Despierta una vez cada minuto para verificar si existe un trabajo para él.

    Este demonio es necesario, puesto que en UNIX es posible planificar actividades con minutos, horas, días e incluso meses de anticipación. Otros demonios controlan la llegada y salida de correo electrónico, la cola de impresión, verifican si existe el numero suficiente de paginas libres en memoria, etc.. Los demonios tienen una implantación directa en UNIX. Los procesos se crean en UNIX de una manera sencilla en lo particular. La llamada al sistema FORK crea una copia exacta del proceso original. El proceso original recibe entonces el nombre de proceso padre. El nuevo proceso se llama proceso hijo.

    Los archivos abiertos se comparten entre el padre y el hijo, los cambios hechos en el archivo por cualquiera de ellos será visible para el otro.

    pid=fork( ) /* si fork tiene éxito, pid > 0 en el padre */

    if ( pid < 0 ) {

    /* fork falla, lo cual se debe, por lo general, a que la memoria o alguna tabla esta totalmente ocupada. */

    } else if ( pid > 0 ) {

    /* aquí va el código del padre.*/

    } else {

    /* aquí va el código del hijo. */

    }

    Esta habilidad para crear un árbol de procesos es la clave del funcionamiento del tiempo compartido en UNIX. Al arrancar el sistema, el núcleo moldea un proceso llamado init. Este proceso lee un archivo /etc/ttys para indicar el numero de terminales de que dispone el sistema y proporciona cierta información que describe a cada uno, init inicia entonces un proceso hijo para cada terminal y se duerme hasta que uno de los hijos termina.

    Cada hijo ejecuta el programa login, el cual exhibe:

    Login:

    Cuando alguien se siente frente a la terminal y proporciona un nombre de entrada, login pregunta entonces una contraseña, la verifica con la contraseña cifrada almacenada en el archivo de contraseñas /etc/password. Si es correcta, login se cubre a sí mismo con el shell del usuario, el cual espera entonces el primer comando. Si es incorrecto, login solo pide otro nombre de usuario.

    Los procesos en unix se pueden comunicar entre sí mediante una forma de transferencia de mensajes. Es posible crear un canal entre dos procesos en el que un proceso pueda escribir un flujo de bytes para que el otro lo lea, donde es posible la sincronización.

    Los entubamientos del shell se implantan mediante tubos. Cuando el shell ve un comando como:

    sort < f | head

    crea dos procesos, sort y head y establece un tubo entre los dos, de forma que la salida estándar de sort se conecte a la entrada estándar de head. Todos los datos escritos por sort pasan en forma directa a head, en vez de irse a un archivo. Si el tubo se llena, el sistema detiene la ejecución de sort hasta que head ha retirado algunos datos del tubo.

    Un proceso puede enviar lo que se conoce como una señal a otro proceso. Los procesos pueden indicar al sistema lo que desean que ocurra al llegar una señal. Las opciones son ignorarla, atraparla, o dejar que la señal aniquile el proceso.

    Cuando el manejador termina, regresa el control de donde vino, de forma análoga a laas interrupciones de e/s del harware, un proceso sólo puede enviar señales a miembros de su propio grupo de procesos, el cual esta formado por su padre, hermanos e hijos.

    Cada usuario se identifica mediante un entero llamado UID ( identificación del usuario ) contenido en el archivo de contraseñas. Estas son asignadas por el administrador del sistema. Cada proceso adquiere en forma automática la uid de la persona que lo creó.

    El usuario con uid 0 es especial y se llama el superusuario ( o raíz ). El superusuario tiene el poder de leer y escribir en todos los archivos del sistema, sin importar quien los posea o la forma en que estén protegidos.

    El poder del superusuario se explota en forma inteligente, para permitir a los usuarios que realicen cosas que podrían ser peligrosas de modo controlado. El superusuario puede determinar la información con relativa facilidad, pero al indicar a todos la contraseña del superusuario, todo el sistema de protección quedaría indefenso.

    UNIX tiene un bit asociado con cada programa ejecutable, llamado el bit setuid. Este bit es parte de la palabra del modo de protección. Cuando se ejecuta un programa con el bit setuid activo, el uid efectivo de ese proceso se convierte en el uid del propietario del archivo ejecutable, en vez del uid del usuario que lo llamó.

    El mecanismo uid se utiliza a todo lo largo de unix para evitar una masa de llamadas al sistema de propósito especial, tales como una que permita a los usuarios leer el bloque 0 ( y solo el bloque 0 ).

    2. El modelo de memoria de UNIX

    El modelo de memoria UNIX es algo directo, para que los programas sean portables y poder implantar unix en maquinas con unidades de manejo de memoria con amplias diferencias entre sí, desde casi nada hasta un sofisticado hardware de paginación. Cada proceso en UNIX tiene un espacio de direcciones, con tres segmentos: textos, datos y pilas.

    A) El segmento de texto contiene las instrucciones de maquina que conforman el código ejecutable del programa. Es producido por el compilador y el ensamblador, al traducir el programa en "C", Pascal u otro en código de maquina, exclusivo para la lectura.

    B) El segmento de datos es un espacio para almacenar las variables, cadenas, arreglos y otros datos del programa. Tiene dos partes, los datos inicializados y los datos no inicializados, estos últimos se conocen como bss. La parte inicializada del segmento de datos contiene las variables y constantes del compilador que necesitan un valor al iniciar el programa.

    La existencia de datos no inicializados es en realidad una optimización. Cuando una variable global no se inicializa de forma explícita, la semántica del lenguaje "C" indica que su valor inicial 0. En la práctica, la mayoría de las variables globales no se inicializa y sus valores iniciales son entonces 0.

    El tercer segmento es el segmento de la pila. En la mayoría de las máquinas, éste comienza en la parte superior del espacio de direcciones virtuales y crece hacia abajo en dirección de 0. Si la pila crece debajo de la parte inferior del segmento de la misma, ocurre un fallo de hardware y el sistema operativo reduce el límite inferior del segmento de la pila en unos cuantos miles de bytes. Al iniciar un programa, su pila no está vacía, sino que contiene las variables del entorno (shell), así como la línea de comando escrita en el shell para llamar a dicho programa.

    cp src dest

    el programa cp se inicia con la cadena "cp src dest" en la pila, de forma que pueda determinar los nombres del archivo y destino. Cuando dos usuarios ejecutan el mismo programa, sería posible tener dos copias del texto del programa editor en la memoria al mismo tiempo. Muchos sistemas UNIX soportan los segmentos de texto compartidos. Los segmentos de datos y de la pila nunca se comparten. Si cualquiera de ellos necesita crecer y no existe espacio adyacente hacia el cual hacerlo, se le desplaza a otra parte de la memoria. El segmento de texto comenzaba en 0 y podría ocupar hasta 64 K. El segmento de datos también comenzaba en la dirección 0 y crecía hacia arriba, mientras que el segmento de la pila comenzaba en 64K y crecía hacia abajo. Un salto a 0 pasaba el espacio del texto, mientras que un movimiento a partir de 0 utilizaba el espacio de datos.

    3 El sistema de archivos en UNIX

    Cuando un proceso desea leer o escribir en un archivo, primero debe abrir éste. Se abre mediante la llamada al sistema OPEN, cuyo primer argumento es el nombre de la ruta de acceso del archivo por abrir y cuyo segundo argumento especifica si el archivo se va a leer o escribir o ambos. Si se permite el acceso, el sistema regresa un entero positivo pequeño llamado descriptor de archivo a quien hizo la llamada. Si el acceso está prohibido, las llamadas para la lectura o escritura en el archivo utilizan el descriptor de archivo para identificarlo.

    Al iniciar un proceso, siempre dispone de tres descriptores de archivo: 0 para la entrada estándar, 1 para la salida estándar y 2 para el error estándar

    Existen dos formas para especificar los nombres de archivos en UNIX, tanto para el shell como para la llamada al sistema OPEN. La primera utiliza una ruta absoluta de acceso, que indica la forma de llegar al archivo desde el directorio raíz. Los nombres de las rutas absolutas de acceso son con frecuencia largos e inconvenientes. Por esta razón, UNIX permite a los usuarios que designen el directorio en el que trabajan en un momento dado como el directorio de trabajo. Los nombres de las rutas de acceso se pueden determinar entonces en forma relativa al directorio de trabajo. Tal nombre se llama ruta relativa de acceso. Por ejemplo si /ust/ast/book es el directorio de trabajo, entonces el comando de shell

    cp chl backup

    tiene el mismo efecto que el comando más largo

    cp / usr / at/book/chl /usr/ast/book/backup

    A menudo ocurre que un usuario necesita hacer referencia a un archivo que pertenece a otro usuario,o que al menos se localiza en un lugar distinto en el árbol de archivos.

    Muchas computadoras tienen dos o más discos. Surge la cuestión de la forma de controlarlas. Una solucin es colocar un sistema de archivos autocontenido en cada uno de ellos y mantenerlos independientes. Con esta solución, el usuario tiene que especificar tanto el dispositivo como el archivo cuando se necesite algo no predefinido. Por ejemplo, para copiar x al directorio d ( siH: es el predefinido), se debe escritir este es el punto de vista que toman los sistemas como MS-DOS y VMS:

    cp D:/x / a/d/x

    La solucino de UNIX es permitir que un disco se monte en el árbol de directorios de otro disco. Podríamos montar el disco flexible en el directorio /b, lo que produce el sistema de archvios. El usuari ve entonces un único árbol de archivos y no tiene que preocuparse por el lugar donde reside un archivo en un dispositivo.

    Otra interesante propiedad del sistema de archivos UNIX es la cerradura (locking). Dos o más procesos podrían utilziar el mismo archivo al mismo tiempo, lo que produciría condiciones de competencia. Una solución es programar la aplicación con regiones críticas. Sin embargo, el proceso pertenece a usuarios independientes que ni siquiera se conozcan entre sí, por lo general, este tipo de coordinación es conveniente.

    POSIX proporciona un mecanismo fino pero flexible para que los procesos se cierren desde un solo byte y hasta todo un archivo en una operación indivisible. El mecanismo de cerradura (locking) requiere que quien haga la llamada determine el archivo por cerrar, el byte de inicio y el número de bytes. Si la operación tiene éxito, el sistema crea un dato de una tabla para observar que los bytes en cuestión (por ejemplo, un registro de una base de datos) están cerrados.

    Se proporcionan dos tipos de cerraduras, compartida y exclusiva. Una cerradura compartida se permite un segundo intento por colocar una cerradura en él, pero fracasará un intento por colocar una cerradura exclusiva en él. Si una parte del archivo, tiene una cerradura exclusiva, todos los intentos por cerrar cualquier parte de ella fracasarán, hasta que se libere la cerradura.

    Al colocar una cerradura, un proceso debe especificar si desea quedar o no bloqueado en caso de que no pueda colocar la cerradura. Si se opta por el bloqueo al eliminar la cerradura existente, el proceso se desbloquea y se coloca la cerradura.

    4 Entrada/Salida en UNIX

    Las computadoras que ejecutan UNIX, como todas, tienen dispositivos de E/S, tales como las terminales, los discos, y redes conectadas a ellas. Se necesita que los programan tengan acceso a estos dispositivos de alguna forma. Aunque existen varias solucines, la de UNIX es integrar al sistema de archivos lo que se conoce como archivos especiales. Cada dispositivo de E/S tiene asignado el nombre de su ruta de acceso, que se encuentra en /dev.

    Estos archivos especiales pueden tener un acceso igual al de otros archivos. No se necesitan comandos o llamadas especiales al sistema: las llamadas usuales al sistema, READ y WRITE se ajustan a esto. Por ejemplo, el comando:

    cp file /dev / lp

    copia fiel a la impresora, lo que provoca la impresión del archivo. Los programas pueden abrir, leer y escribir los archivos especiales, de la misma forma que los archivos regulares.

    Una ventaja adicional es que las reglas usuales de protección de archivos se aplican de manera automática a los dispositivos de E/S. Si los bits de protección de /dev se configuran en forma que sólo el superusuario tenga acceso directo a sus archivos. Entonces los usuarios no podrán realizar la E/S por sí mismos. El acceso restringido a los dispositivos seleccinados de E/S se puede otorgar mediante la instalación de programas setuid con permiso para leer y escribir en los archivos de /dev, pero que hagan esto de manera limitada.

    Los archivos especiales se dividen en dos categorías, de bloque y de carácter. Un archivo especial de bloque es uno que consta de una serie de bloques numerados. La propiedad fundamental de un archivo especial de bloque es que cada bloque se puede direccionar y accesar de manera individual.

    Los archivos especiales de caracter se utilizan, para los dispositivos de entrada o salida de un flujo de caracteres. Las terminales, impresoras, redes, ratones, plotters y la mayoría de los demás dispositivos de E/S aceptan o producen datos para las personas utilizan archivos especiales de carácter.

    Aunue los archivos especiales de caracter no pueden tener un acceso aleatorio, a menudo deben ser controlados de forma distinta a un archivo especial de bloque, para eliminar la última línea escrita, existen muchas convenciones. Alguno prefieren utilizar el signo "arroba", otros CTRL-U, CTRL-C o algún otro carácter.

    En vez de hacer una elección y forzar a las personas a utilizarla, UNIX permite que todas estas funciones especiales y muchas otras sean adaptadas por el usuario Se dispone de una llamada al sistema especial para configurar estas opciones. Esta llamada al sistema también controla el desarrollo de los tabuladores, permite o inhibe el eco de los caracteres.

    Otro ejemplo de E/S lo constituyen las redes, iniciadas por el UNIX de Berkeley. El concepto central del diseño de Berkeley fue el enchufe (socket).

    Figura 7-12

    1. Orientado a conexiones por flujo confiable de bytes

    2. Orientado a conexiones por flujo confiable de paquetes

    3. Transmisión no confiable de paquetes

    a. El primer tipo de enchufe permite que dos procesos en distintas maqunas establezcan de manera efectiva el equivalente de un tubo entre ellos. Los bytes se envían en un extremo y llegan en el mismo orden al extremo contrario.

    b. Es similar al primero, excepto que preserva las fronteras de los paquetes.

    c. Se utiliza para que el usuario tenga acceso directo a la red. Este tipo es particularmente útil para las aplicaciones de tiempo real y en aquellas situaciones en que el usuario desea implantar un esquema especializado de manejo de errores.

    Durante la creación de un enchufe, uno de los parámetros determina el protocolo por utilizar. Por los flujos de paquetes y butes, el producto más popular es TCP/IP. Para una transmisión no confiable orientada a paquetes, UDP es la opción general. Ambos protocolos surgieron de ARPANET, del Depto. de Defensa de los EUA y ahora se utilizan con amplitud en todo el mundo.

    Antes de poder utilizar un enchufe en una red, éste debe tener una dirección asociada a él que puede estar en uno de varios dominios de nomenclatura. Una vez creados los enchufes en las computadoras fuente y destino, se puede establecer una conexión entre ellas. Una de las partes hace una llamada al sistema LISTEN en un enchufe local, lo cual crea un bugger y un bloqueo hasta la recepción de datos.

    Una vez establecida la conexión, esta funciona de manera similar a un tubo. Un proceso puede leer y escribir de él mediante el descriptor de archivo para su enchufe local. Cuando ya no es necesaria la conexión, se puede cerrar de la manera usual.

    Llamadas al sistema de UNIX

    Llamadas al sistema para la administracino de procesos en UNIX

    El primer grupo de llamadas se relaciona con la administración de los procesos. FORK es un buen ejemplo para iniciar el análisis. Es la única forma de crear un nuvo proceso. Crea un duplicado exacto del proceso original e incluye todos los descriptores de archivo, registros y todo lo demás. Después del FORK, el proceso original y la copia (padre e hijo) siguen su propio camino.

    En la mayoría de los casos, después de un FORK, el hijo necesitará ejecutar un código distinto del padre. Consideremos el caso de Shell. Lee un comando de la terminal, produce un proceso hijo, espera a que el hijo ejecute el comando y después lee el siguiente comando al terminar el hijo. Para esperar a que termine el hijo, el padre ejecuta una llamada al sistema WAITPID, que simplemente espera a que termine el hijo. WAITPID tiene tres parámetros. El primero permite a quien hizo la llamada esperar por un hijo específico. Si el =1 bastará con que termine cualquiera de los hijos. El segundo parámetro es la dirección de una variable con el estado de salida del hijo. El tercero determina si el proceso que hizo la llamada se bloquea o regresa si ningún hijo ha terminado.

    En el caso más general, EXEC tiene tres parámetros: el nombre del archivo por ejecutar, un apuntador al arreglo de argumentos y un apuntador al arreglo del entorno.

    EXEC es la llmada al sistema más compleja. El resto son mucho más simples. Como ejemplo de una llamada más sencilla, consideremos EXIT, la cual deben utilizar los procesos cuando terminen su ejecución. Tiene un parámetro, el estado de salida (0 a 255), que se regresa al padre en la variable status de lallamada al sistema WAITPID

    Por ejemplo, si un proceso padre ejecuta el enunciado

    n = waitpid(-i, &status. 0):

    se suspenderá hasta que uno de sus procesos hijo termine. Si el hijo sale con, digamos, 4 como parámetro de exit, el padre despertará con n igual al pid del hijo y status igual a 0 x 0400 (0x es un prefijo que indica nexadecimal).

    Para anunciar su disposición por recibir ésta (o cualquier otra) seña, el proceso puede utilizar la llamada al sistema SIGACTION. El primer parámetro es la señal por recibir. El segundo es un apuntador a una estructura que proporciona un apuntador al proced. para el manejo de las señales, así como otros bits o banderas. El tercero apunta a una estructura en la que el sistema reresa informacino en caso de que deba restaurarse más adelante.

    La llamada al sistema SIGACTION también se puede utilizar para lograr que se ignore una señal o bien para restaurar una acción predefinida, lo que equivale a eliminar el proceso.

    La acción de oprimir la tecla DEL, no es la única forma de enviar una señal a otro proceso. La llamada al sistema KILL, permite que un proceso envíe una señal a otro proceso relacinado con él. La elección del nombre "kill" no e sparticularmente buena.

    La llamada al sistema ALARM. El parámetro especifica un intervalo, en segundos, después del cual se envía una señal SIGALRM al proceso. Un proceso sólo puede tener una alarma principal en cualquier instante. Si se hace una llamada ALARM con un parámetro de 10 segundos y después de 3 segundos se hace otra llamada ALARM con un parámetro de 20 segundos, sólo se genera una señal, 20 segundos después de la segunda llamada. La primera señal se cancela con la segunda llamada de ALARM.

    2 Llamadas al sistema para la administración de la memoria en UNIX

    POSIX no especifica llamadas al sistema para la administracino de la memoria. Este tema se consideró como demasiado dependiente de las máquinas como para lograr una estandarización. El problema se escondió debajo del tapete, al indicar que los programas que necesiten una administración dinámica de la memoria podrían utilizar el proced. de biblioteca malloc (definido en el estándar ANSI C)

    La forma de implantar malloc, se sale entonces de los objetivos del estándar POSIX. En ciertos círculos, esto se consideró como una forma de pasarse el bulto.

    3 Llamadas al sistema relacionadas con archivos y directorios en UNIX

    Muchas llamadas al sistema se relacionan con los archivos y el sistema de archivos. Para crear un nuevo archivo se utiliza la llamada CREAT. Los parámetros proporcionan el nombre del archivo y el modo de protección. Así

    fd = creat ("abc". mode):

    crea un archivo a b c con los bits de protección tomados de mode.

    CREAT no sólo crea un nuev archivo, sino que también lo abre para la escritura, sin importar el modo del archivo. Regresa el descriptor del archivo, fd, el cual se puede utilizar para escribir el archivo.

    Para leer o escribir en un archivo ya existente, primero hay que abrir el archivo con OPEN. Esta llamada determina el nombre del archivo por abrir, y si se puede abrir para lectura, escritura o ambas.

    Aunque la mayoría de los programas leen y escriben en los archivos de manera secuencial, en cietos programas de aplicación es necesario disponer de un acceso aleatorio a cualquier parte del archivo. Al leer (escribir) de manera secuencial, esta apunta por apuntador, de forma que las llamadas READ o WRITE pueden iniciar en cualquier parte del archivi o incluso más allá del final de éste.

    LSEEK tiene 3 parámetros: el primero es el descriptor del archivo; el segundo es una posición en el archivo. El tercero indica si la posición del archivo es con respecto al inicio del archivo, a la posición activa o al final del archivo. El valor que regresa LSEEK es la posición absoluta en el archivo después de modificar el apuntador al archivo.

    Para cada archivo, UNIX mantine un registro del modo del archivo (regular, directorio, archivo especial) tamaño, hora de la última modificación y otra información.

    El directorio de trabajo se cambia por medio de la llamada al istema CHDIR. Esto tiene el efecto de cambiar la interpretación de los nombres relativos de las rutas de acceso.

    La llamada al sistema CHMOD permite cambiar el modo de un archivo; es decir, los bits de protección.

    4 Llamadas al sistema relacionadas con Entrada/Salida en UNIX

    Las últimas dos llamadas de la lista establecen y recuperan todos los caracteres especiales que se utilizan para eliminar caracteres y renglones, interrumpir procesos, etc. Además activan y desactivan el eco, manejan el control del flujo y realizan otras funciones. También existen otras llamadas al sistema relacionadas con E/S, pero son un poco particulares para analizarlas aquí

    Implantación de UNIX

    El núcleo de UNIX no está bien estructurado itnernamente, pero se pueden distinguri más o menos dos partes. En la inferior está el núcleo dependiente de la máquina. Este código consta de los controladores de interrupciones, los manejadores de dispositivos del sistema de E/S de bajo nivel y una parte del software para la administración de la memoria. La mayoría de este código está escrito en C

    Por el contrario, el núcleo independiente de la máquina es el mismo en todas las máquinas, puesto que no depende en forma cercana del hardware particular en el que se ejecute. El código independiente de la máquina, incluye el manejo de las llamadas al sistema, la administración de procesos, planificación, entubamientos, señales, paginación e intercambio, el sistema de archivos y la parte del sistema de E/S de alto nivel.

    Implantación de procesos en UNIX

    Un proceso en UNIX es como un iceerg: uno ve la parte de arriba del agua, pero también existe una parte importante por debajo. Cada proceso tiene una parte del usuario y una parte del núcleo. La parte del núcelo tiene su propia pila y su propio contador del programa. Esto es importante debido a que una llamada al sistema se puede bloquear a la mitad de su camino.

    El núcleo mantiene dos estructuras de datos fundamentales relacionadas con los procesos, la tabla de procesos y la estructura del usuario. La primera es residente todo el tiempo y contiene la info necesaria para todos los procesos, incluso para aquellos que no se encuentren por el momento en la memoria.

    La información en la tabla de procesos cae en alguna de las sgtes. categorías:

    1. Parámetros de planificación

    Esto se utiliza para determinar el sgte. proceso por ejecutarse.

    2. Imagen de la memoria

    Si el proceso no se encuentra en la memoria, aquí está la info necesaria para localizar sus partes en el disco.

    3. Señales

    Las máscaras que muestran cuáles señales se ignoran, cuáles señales se deben analizar, cuáles están bloqueadas en forma temporal y cuáles están en proceso de entregarse.

    4. Varios

    Estado actual del proceso, el evento que se espera, hora en la que debe sonar la alarma del reloj.

    La estructura del usuario contiene la info que no es necesaria cuando el proceso no se encuentra físicamente en la memoria o no es ejecutable. La info relativa a las señales debe encontrarse en la tabla de procesos, por lo que están en la memoria todo el tiempo, mientras que la info acerca de los descriptores de archivo puede conservarse en la estructura del usuario y recuperarse sólo cuando el proceso sea ejecutable.

    La estructura del usuario incluye los siguientes elementos:

    1. Registro de máquina

    2. Estado de la llamada al sistema

    3. Tabla de descriptores de archivos

    4. Contabilidad

    5. Pila del núcleo

    Al ejecutar una llamada al sistema FORK, el proceso que hace la llamada realiza un señalamiento hacia el núcelo y busca una entrada libre en la tabla de procesos para que la utilice el proceso hijo. Si encuentra un especio, copia toda la info de la entrada del padre en la tabla de procesos hacia la entrada del hijo. La estructura del usuario se mantiene adyacente al segmento de la pila y se copia junto con éste. En este momento el hijo está listo para su ejecución.

    Si un proceso intenta leer un archivo en disco y se le obliga a esperar un segundo entre cada llamada READ se le retrasará mucho. Es mucho mejor dejarlo que se ejecute de inmediato después de concluir cada solicitud, de forma que el siguiente se pueda realizar rápidamente.

    2 Implantación del control de la memoria en UNIX

    Antes de 3BSD la mayoría de los sistemas UNIX se basaban en el intercambio de la siguiente manera. Si existían más procesos de los que se podían mantener dentro de la memoria, algunos de ellos se intercambiaban al disco. Un proceso intercambiado de esta manera se intercambiaba en su totalidad. Así un proceso se encontraba dentro de la memoria o dentro del disco..

    2.a Intercambio

    El movimiento entre la memoria y el disco se administraba mediante el nivel superior del planificador de dos niveles, conocido como el intercambiador (swapper). El intercambio de la memoria hacia el disco se iniciaba cuando el núcleo ocupaa toda la memoria libre debido a alguno de los siguientes eventos:

    1. Una lamada FORK que necesitaba memoria para un proceso hijo.

    2. Una llamada BRK que necesitaba ampliar un segmento de datos.

    3. Una pila que se agrandaba y ocupaba un espacio mayor al asignado a ella.

    2.b Paginación

    La paginación se implanta en parte mediante el núcleo principal y en parte mediante un nuevo proceso llamado demonio para paginación. El demonio para paginacino es el proceso número 2. El proceso 0 sigue siendo el intercambiador y el proceso sigue siendo init. Como todos los demonios, el demonio para paginación se inicializa de manera períódica de forma que pueda verificar si existe trabajo para él.

    El mapa cnetral contiene info relativa al contenido de los marcos para página. Con 1K de marcos para página y entradas de 16 bytes en el mapa central, el mapa central ocupa menos del 2 por ciento de la memoria. Entonces se emplean para una lista doblemente ligada que une en una cadena todos los marcos librs. Las siguientes tres entradas se utilizan cuando el marco contiene info. Cada página de la memoria también tiene una posición en algún disco, donde se le colcoa al ser paginada fuera de la memoria. Estas entradas sirven para determinar la posición en el disco donde se almacena la página Las sgtes. tres entradas proporcionan la entrada de la tabla de procesos correspondiente al proceso de la página, el segmento en que se encuentra y su posición en ese segmento. La última muestra algunas de las banderas necesarias para el algoritmo de paginación.

    3 Implantación del sistema de archivos en UNIX

    Todos los discos que contienen sistemas de archivos en UNIX tienen la organización de la fig. 7.18. El bloque 0 no es utilizado por UNIX y contiene a menudo código para el arranque de la computadora El bloque 1 es el superbloque. Contiene info crítica relativa a la organización del sistema de archivos: el número de nodos-i, el número de bloques en disco. La destrucción del superbloque provocaría que el sistema de archivos quede ilegible.

    Después del superbloque están los nodos-i. Se enumeran de 1 hasta cierto máximo. Cada nodo-i tiene una longitud de 64 bytes y describe a un archivo. Un nodo-i contiene la info contable así como la info suficiente para localizar todos los bloques del disco que contengan los datos del archivo.

    Después están los bloques de datos. Todos los archivos y directorios se almacenan aquí. Es probable que los bloques de un archivo grande estén diseminados por todo el disco. Las mejoras de Berkeley se diseñaron para reducir esta dispersión.

    Fig. 7.18

    Un directorio en el sistema tradicional de archivos consta de una colección no ordenada de entradas de 16 bytes. Cada entrada contiene un nombre de archivo y el número de nodo-i del archivo. Para abrir un archivo en el directorio de trabajo, el sistema sólo lee el directorio, compara el nombre por buscar con cada entrada, hasta que encuentra el nombre o concluye que no está presente.

    El nodo-i se colocar en la tabla de nodos-i, una estructura de datos en el núcleo que conserva todos los nodos-i de los archivos y directorios abiertos en cada momento.

    La búsqueda de un nombre absoluto de ruta de acceso como /usr/ast/file es un poco más compleja. El sistema localiza el directorio raíz, que siempre utiliza el nodo-i2. Entonces busca la cadena "usr" en el directorio raíz, para obtener el número de nodo-i del directorio /usr: Se busca entonces este nodo-i y se extraen los bloques del disco de entrada, se puede tomar de ella el número de nodo-i para el directorio /usar/ast. Con el número de nodo-i, del directorio /usr/ast, se puede leer este nodo-i y localizar los bloques del directorio. Por último, se busca "file" y e encuentra su número de nodo-i

    4 Implantación de la Entrada/Salida en UNIX

    La E/S en UNIX se implanta mediante una colección de manejadores de dispositivos, donde por lo general, hay un manejador por cada dispositivo.

    Su función es la de aislar el resto del sistema de las pecualiaridades del hardware. Con interfaces estándar entre los manejadores y el resto del sistema operativo. El sistema de E/S se divide en dos componentes principales: el manejo de los archivos especiales de bloque y el manejo de los archivos especiales de carácter.

    El objetivo de la parte del sistema que realiza la E/S en los archivos especiales de bloque es minimizar el número de transferencias reales por realizar.

    Los sistemas UNIX cuentan con un buffer, caché entre los manejadores del disco y el sistema de archivos. El bugger caché es una table en el núcleo, la cual contiene docenas o tal vez centenas de los bloques de uso reciente. Cuando se necesita un bloque de disco con cierto propósito (nodo-i. directorio o datos) primero se verifica si se encuentra en el buffer caché: en tal caso, se toma de ahí y se evita un acceso al disco.

    Si el bloque no está ne el buffer caché, se lee del disco al buffer y se le copia de ahí cuando sea necesario.

    El buffer caché funciona para la escritura y la lectura. Para evitar que los bloques permanezcan por mucho tiempo en el caché antes de ser escritos al disco, todos los bloques sucios se escriben al disco cada 30 segundos.

    La salida funciona de manera análoga: desarrolla los tabuladores como espacios, convierte los alimentadores de línea en retornos de carro + alimentadores de línea, añade caracteres de relleno después de los retornos de carro en las terminales mecánicas lentas, etc. La disciplina puede pasar a través de la disciplina de línea o evitarla. El modo crudo es particularmente útil al enviar datos en binario a otras computadoras en una línea en serie.


    Votar

    Ingresar una calificación para del 1 al 10, siendo 10 el máximo puntaje.

    Para que la votación no tenga fraude, solo se podrá votar una vez este recurso.

    Comentarios de los usuarios


    Agregar un comentario:


    Nombre y apellido:

    E-Mail:

    Asunto:

    Opinión:



    Aún no hay comentarios para este recurso.
     
    Sobre ALIPSO.COM

    Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.

    Contacto »
    Contacto

    Teléfono: +54 (011) 3535-7242
    Email:

    Formulario de Contacto Online »