SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
Republica bolivariana de Venezuela

Ministerio del Poder Popular para la Educación Universitaria

      Universidad Centroccidental Lisandro Alvarado

                 Barquisimeto - Edo Lara




                                   Daimerlis Escalona C.I.:20.045.544

                                      Derlys Alvarado C.I.:20.189.960

                                       Héctor Linares C.I.: 19.198.516

                                      Ismarilex Perez C.I.: 19.591.262

                                            Jesús Rea C.I.: 19.265.883

                                       Rawin Olivera C.I.: 19.149.818

                                    Wuilker Escalona C.I.: 19.726.462
Introducción

   Los Laboratorios Bell fueron los responsables del desarrollo de Unix como un
proyecto de investigación privado dirigido por un pequeño grupo de personas que
empezó en 1969. El objetivo del grupo fue diseñar un sistema operativo que
cumpliera los siguientes requisitos:

          Que fuera simple y elegante.
          Que estuviera escrito en un lenguaje de alto nivel.
          Que permitiera reutilizar el código.

   UNIX tenía una relativamente pequeña parte de su código escrita en
ensamblador (la que se encargaba de gestionar el hardware, más conocida como
kernel) y el resto del código escrito en C principalmente por Ken Thompson,
Dennis Ritchie, Douglas McIlroy

   A medida que el desarrollo avanzaba se realizaban pequeñas modificaciones al
código del kernel (dependiendo de la plataforma) y se desarrollaron muchas
utilidades en C.      A través de esta evolución el kernel y el software asociado se
extendieron hasta que un sistema operativo completo se desarrolló "sobre" el
kernel.

   El sistema Unix es un sistema operativo que admite múltiples usuarios, así
como también múltiples tareas, lo que significa que permite que en un único
equipo o multiprocesador se ejecuten simultáneamente varios programas a cargo
de uno o varios usuarios. Este sistema cuenta con uno o varios intérpretes de
comando (shell) así como también con un gran número de comandos y muchas
utilidades (ensambladores, compiladores para varios idiomas, procesador de
textos, correo electrónico, etc.). Además, es altamente transportable, lo que
significa que es posible implementar un sistema Unix en casi todas las
plataformas de hardware.

   El sistema se basa en un Núcleo llamado Kernel, que reside permanentemente
en la memoria, y que atiende a todas las llamadas del sistema, administra el
acceso a los archivos y el inicio o la suspensión de las tareas de los usuarios. La
comunicación con el sistema UNIX se da mediante un programa de control
llamado SHELL. Este es un lenguaje de control, un intérprete, y un lenguaje de
programación, cuyas características lo hacen sumamente flexible para las tareas de
un centro de cómputo.

   Actualmente, los sistemas Unix se afianzaron en entornos profesionales y
universitarios gracias a su estabilidad, su gran nivel de seguridad y el
cumplimiento de estándares, especialmente en lo que se refiere a redes.
1. Características Generales:

   Es un sistema operativo de tiempo compartido, controla los recursos de una
computadora y los asigna entre los usuarios, adicionalmente permite a los usuarios
correr sus programas. Controla los dispositivos de periféricos conectados a la
máquina.

   2. Características básicas:
       2.1 Sistema Multiusuario.
       2.2 Sistema Multitarea.
       2.3 Sistema interactivo.
       2.4 Estandarizado.
       2.5 Potente.
       2.6 Versátil.
       2.7 Software y sistema operativo portable.
       2.8 Permite ejecutar procesos en Background y Foreground.
       2.9 Presenta niveles altos de seguridad.
       2.10   Presenta una estructura jerárquica de archivos.
       2.11   Posee un gran número de utilidades: Editores de línea, de pantalla,
           formateadores, depuradores de programas…
       2.12   Posibilidad de comunicación UNIX – UNIX (UUCP)
       2.13   Fácil integración en sistemas de red.
       2.14   Posibilidad de usar distintos lenguajes de programación: C,
       2.15   Fortran, Cobol, Pascal,…
       2.16   Gran cantidad de software disponible en el mercado.
   3. A continuación se exponen las familias UNIX más significativas
       3.1 AT&T: la familia que tuvo su origen en el UNIX de AT&T.
           Considerada la familia UNIX "pura" y original. Sus sistemas
           operativos más significativos son UNIX System III y UNIX System V.
       3.2 BSD: familia originada por el licenciamiento de UNIX a Berkely.
           BSD se reescribió para no incorporar propiedad intelectual originaria
           de AT&T en la versión 4. La primera implementación de los
protocolos TCP/IP que dieron origen a Internet son la pila TCP/IP
      BSD.
   3.3 AIX: Esta familia surge por el licenciamiento de UNIX System III a
      IBM.
   3.4 Xenix: familia derivada de la adquisición de los derechos originales de
      AT&T primero por parte de Microsoft y de esta los vendió a SCO.
   3.5 GNU: En 1983, Richard Stallman anunció el Proyecto GNU, un
      ambicioso esfuerzo para crear un sistema similar a Unix, que pudiese
      ser distribuido libremente. El software desarrollado por este proyecto -
      por ejemplo, GNU Emacs y GCC - también han sido parte
      fundamental de otros sistemas UNIX.
   3.6 Linux: En 1991, cuando Linus Torvalds empezó a proponer el núcleo
      Linux y a reunir colaboradores, las herramientas GNU eran la elección
      perfecta. Al combinarse ambos elementos, conformaron la base del
      sistema operativo (basado en POSIX) que hoy se conoce como
      GNU/Linux. Las distribuciones basadas en el núcleo, el software GNU
      y otros agregados entre las que se pueden mencionar a Red Hat Linux
      y Debian GNU/Linux se han hecho populares tanto entre los
      aficionados a la computación como en el mundo empresarial.
      Obsérvese que Linux tiene un origen independiente, por lo que se
      considera un 'clónico' de UNIX y no un UNIX en el sentido histórico.
4. Estructura del sistema operativo UNIX (Figura1)

   El sistema operativo UNIX está estructurado por 4 niveles o capas:

   4.1 En el nivel más interno o primer nivel, se encuentra el hardware de la
      computadora cuyos recursos se desean gestionar.
   4.2 En el segundo nivel, directamente en contacto con el hardware, se
      encuentra      el núcleo     del     sistema,     también         llamado
      únicamente núcleo (kernel). El kernel constituye el núcleo del sistema
      operativo. Actúa como interfaz con el hardware del sistema, este
      núcleo está escrito en lenguaje C en su mayor parte, aunque
coexistiendo con lenguaje ensamblador.. Se encarga de realizar las
funciones de más bajo nivel, como son:
4.2.1   Manejo y control de los dispositivos físicos.
4.2.2   Control de interrupciones.
4.2.3   Control de procesos y tiempos.
4.2.4   Control de archivos.
4.2.5   Control de memoria.
4.2.6   Está escrito fundamentalmente en lenguaje “C” (90%) y el
        resto en lenguaje ensamblador.
4.2.7   Control de la ejecución de los procesos posibilitando su
        creación, terminación o suspensión, y comunicación.
4.2.8   Planificación de los procesos para su ejecución en la CPU. En
        UNIX los procesos comparten el uso de la CPU por ello el
        núcleo debe velar porque la utilización de la CPU por parte de
        todos los procesos se realice de una forma justa.
4.2.9   Asignación de la memoria principal. La memoria principal de
        una computadora es un recurso finito y muy valioso. Si el
        sistema posee en un cierto momento poca memoria principal
        libre, el núcleo liberará memoria escribiendo uno o varios
        procesos temporalmente en memoria secundaria (en un espacio
        predefinido denominado dispositivo de intercambio). Si el
        núcleo escribe un proceso entero en el dispositivo de
        intercambio, se dice que el sistema de gestión de memoria
        sigue una política de intercambio. Mientras que si escribe
        páginas de memoria asociadas al proceso en al dispositivo de
        intercambio, se dice que el sistema de gestión de memoria
        sigue una política de demanda de páginas.
4.2.10 Protección del espacio de direcciones de un proceso en
        ejecución. El núcleo protege el espacio de direcciones de un
        proceso de intromisiones externas por parte de otros procesos.
        No obstante, bajo ciertas condiciones un proceso puede
compartir porciones de su espacio de direcciones con otros
          procesos.
   4.2.11 Asignación de memoria secundaria para almacenamiento y
          recuperación eficiente de los datos de usuario. El núcleo asigna
          memoria secundaria para los ficheros de usuario, reclama el
          espacio no utilizado, estructura el sistema de ficheros de una
          forma entendible, y protege a los ficheros de usuario de accesos
          ilegales.
   4.2.12 Regulación del acceso de los procesos a los dispositivos
          periféricos tales   como    terminales,   unidades   de   disco,
          dispositivos en red, entre otros.
   4.2.13 Administración de archivos y dispositivos
   4.2.14 Tratamiento de las interrupciones y excepciones
4.3 En el tercer nivel, en contacto con el núcleo, se encuentran los
   programas estándar de cualquier sistema UNIX (intérpretes de
   comandos, editores, etc.) y programas ejecutables generados por el
   usuario. Un programa ubicado en este nivel puede interactuar con el
   núcleo mediante el uso de las llamadas al sistema, las cuales dan
   instrucciones al núcleo para que realice (en el nombre del programa
   que las invoca) diferentes operaciones con el hardware. Además, las
   llamadas al sistema permiten un intercambio de datos entre el núcleo y
   el programa. En definitiva, las llamadas al sistema son el mecanismo
   que los programas utilizan para solicitar el núcleo el uso de los
   recursos del computador (hardware). Habitualmente las llamadas al
   sistema se identifican como un conjunto perfectamente definido de
   funciones.
4.4 En el cuarto nivel, se sitúan las aplicaciones que se sirven de otros
   programas ya creados ubicados en el nivel inferior para llevar a cabo
   su función. Estas aplicaciones no se comunican directamente con el
   núcleo. Por ejemplo una aplicación situada en este cuarto nivel será el
   compilador de C cc que invoca de forma secuencial a los programas
   cpp, comp, as y ld. situados en el tercer nivel. La jerarquía de
programas no tiene porqué verse limitada a cuatro niveles. El usuario
   puede crear tantos niveles como necesite. Además, puede haber
   también programas que se apoyen en diferentes niveles y que se
   comuniquen con el núcleo por un lado, y con otros programas ya
   existentes, por otro. La existencia del núcleo posibilita que los
   programas de los niveles superiores puedan ser escritos sin realizar
   ninguna suposición sobre el hardware de la computadora. A su vez
   esto facilita su portabilidad entre diferentes tipos de computadoras
   (siempre que tengan instalado UNIX)




                               (Figura1)

De manera adicional posee un intérprete llamado Shell, actúa como la
interfaz del sistema operativo con los usuarios del mismo       y como
intérprete de comandos.

          Características semejantes a un lenguaje de programación de
          alto nivel.
          Shellscripts.
          Permite configurar diferentes entornos de trabajo. Es un
          comando: /sbin/sh.
5. Gestión de los procesos

            Se le llama proceso en Unix a un programa en ejecución y al objeto
abstracto que crea el sistema operativo para manejar el acceso de ese
programa a los recursos del sistema (memoria, CPU, dispositivos de E/S).
Pueden coexistir varias instancias de un mismo programa ejecutando en forma
simultánea. Cada una de ellas es un proceso diferente. Unix es un sistema
multiproceso por tiempo compartido. A los ojos de un usuario en un momento
dado hay múltiples programas en ejecución, cada uno de ellos avanzando en
su tarea. Sin embargo en una máquina con un solo procesador hay en cada
instante solamente un proceso ejecutando. Es el sistema operativo el que va
rotando el uso del procesador a intervalos breves (alguna decena de
milisegundos) entre los procesos definidos en el sistema de forma que se crea
la ilusión que todos avanzan simultáneamente.

            El administrador del sistema dispone de herramientas para
supervisar el estado de los procesos y eventualmente tomar acciones para
suspender o detener la ejecución de un proceso o simplemente modificar su
comportamiento.

6. Tipos de procesos: Los procesos en el sistema UNIX pueden ser de tres
   tipos:
   6.1 Los procesos de usuario son aquellos procesos asociados a un
       determinado usuario. Se ejecutan en modo usuario excepto cuando
       realizan llamadas al sistema para acceder a los recursos del sistema,
       que pasan a ser ejecutados en modo núcleo.
   6.2 Los procesos demonio no están asociados a ningún usuario. Al igual
       que los proceso de usuario, son ejecutados en modo usuario excepto
       cuando realizan llamadas al sistema que pasan a ser ejecutados en
       modo núcleo. Los procesos demonio realizan tareas periódicas
       relacionadas con la administración del sistema, como por ejemplo: la
       administración y control de redes, la ejecución de actividades
       dependientes del tiempo, la administración de trabajos en las
       impresoras en línea, etc.
6.3 Los procesos del núcleo no están asociados a ningún usuario. Se
           ejecutan exclusivamente en modo núcleo. Son similares a los procesos
           demonio en el sentido de que realizan tareas de administración del
           sistema, como por ejemplo, el intercambio de procesos (proceso
           intercambiador) o de páginas (proceso ladrón de páginas) a memoria
           secundaria. Su principal ventaja respecto a los procesos demonio es
           que poseen un mayor control sobre sus prioridades de planificación
           puesto que su código es parte del núcleo. Por ello pueden acceder
           directamente a los algoritmos y estructuras de datos del núcleo sin
           hacer uso de las llamadas al sistema, en consecuencia son
           extremadamente potentes. Sin embargo no son tan flexibles como los
           procesos demonio, ya que para modificarlos se debe de recompilar el
           núcleo.
   7. Creación de Procesos (Figura2)

              Al crearse un nuevo proceso se le asigna un identificador de
proceso único. Este número debe utilizarse por el administrador para referirse a un
proceso dado al ejecutar un comando. Los PID son asignados por el sistema a
cada nuevo proceso en orden creciente comenzando desde cero. Si antes de un
reboot del sistema se llega al nro. máximo, se vuelve a comenzar desde cero,
salteando los procesos que aún estén activos.

              El mecanismo de creación de un proceso en Unix es un poco
peculiar. Un proceso se crea invocando a una función del sistema operativo
llamada fork(). La función fork () crea una copia idéntica del proceso que la
invoca con excepción de:

       7.1 El nuevo proceso tiene un PID diferente
       7.2 El PPID del nuevo proceso es el PID del proceso original.
       7.3 Se reinicia la información de tarificación del proceso (uso de CPU)

              Al retorno de fork() se siguen ejecutando las siguientes sentencias
del programa en forma concurrente. Para distinguir entre los dos procesos la
función fork() devuelve un cero al proceso hijo y el PID del nuevo proceso al
proceso padre. Normalmente el proceso hijo lanza luego un nuevo programa
ejecutando alguna variante de comando exec(). En el recuadro puede verse un
ejemplo del uso de fork.




                                     (Figura2)

       Si este es el mecanismo para crear un proceso, entonces ¿quién lanza a
correr el primer proceso? Luego del boot del sistema el kernel instala y deja
corriendo un proceso llamado init con PID=1. Una de las funciones principales de
init es lanzar mediante fork() intérpretes de comandos que a su vez lanzarán los
scripts de inicialización del sistema y los procesos de los usuarios. Además de init
el kernel lanza algunos procesos más cuyo nombre y función varía en los
diferentes sabores de Unix. A excepción de estos procesos lanzados por el kernel
al inicio, todos los demás son descendientes de init. Normalmente un proceso
termina invocando a la función exit() pasando como parámetro un código de
salida o exit code. El destinatario de ese código de salida es el proceso padre. El
proceso padre puede esperar la terminación de su proceso hijo invocando la
función wait(). Esta función manda al padre a dormir hasta que el hijo ejecute su
exit() y devuelve el exit code del proceso hijo.

       Cuando el proceso hijo termina antes que el padre, el kernel debe
conservar el valor del exit code para pasarlo al padre cuando ejecute wait(). En
esta situación se dice que el proceso hijo está en el estado zombie. El kernel
devuelve todas las áreas de memoria solicitadas por el proceso pero debe
mantener alguna información sobre el proceso (al menos su PID y el exit code).
Cuando el proceso padre termina primero el kernel encarga a init la tarea de
ejecutar el wait() necesario para terminar todo en forma ordenada. A menudo init
falla en esta función y suelen quedar procesos en estado zombie hasta un nuevo
reboot. Dado que un proceso zombie no consume recursos fuera de su PID, esto
por lo general no provoca problemas.

   8. Bloque de Control de Procesos (BCP)

       La estructura de datos más básica asociada a los procesos es la estructura
de procesos. Dicha estructura contiene todo lo que el sistema necesita saber acerca
de un proceso cuando este se intercambia a disco, como su identificador único,
información de planificación y punteros a otros bloques de control. Existe un
arreglo de estructuras de procesos cuyas longitudes define en el momento de
enlazar el sistema. El planificador mantiene vinculadas las estructuras de procesos
de los procesos listos en una lista doblemente enlazada, y hay punteros de cada
estructura de procesos al padre del proceso, a su hijo vivo más joven y a varios
otros parientes de interés, como una lista de procesos que comparten el mismo
código de programa (texto).

               El espacio de direcciones virtual de un Proceso de usuario se divide
en segmento de texto, datos y pilas. Los segmentos de datos y de pilas siempre
están en el mismo espacio de direcciones, pero podrían crecer de manera
independiente, y por lo regular en direcciones opuestas. Lo más común es que la
pila crezca hacia abajo mientras los datos crecen hacia ella, el segmento de texto
está en u espacio de direcciones diferente del de los datos y de la pila, y suele ser
solo de lectura.

               Las Tablas de páginas registran información acerca de la
correspondencia acerca de la memoria virtual de los procesos y la memoria física.
La estructura de procesos contiene punteros a la tabla de página, para usarse
cuando el proceso reside en la memoria principal, ó la dirección del proceso en el
dispositivo de intercambio, cuando el proceso se intercambia. No hay una tabla de
página especial a parte para un segmento de texto compartido; todos los procesos
que comparten el segmento de texto tienen entradas para sus páginas en la tabla de
páginas del proceso. La información acerca del proceso que solo se necesita
cuando el proceso esta residente se mantiene en la estructura de usuario en lugar
de la estructura de proceso. Se establece uhna correspondencia de solo lectura
entre la esructura de usuario y el espacio de direcciones virtual del usuario, para
que los procesos de usuarios puedan leer su contenido. El nucleo puede escribir
dicha estructura

   9. Estados y Transiciones de Procesos (Figura3)
       9.1 Durmiendo (asleep): En general a la espera de algún recurso
           compartido.
       9.2 Listo para ejecutar (runnable). A la espera que le toque el turno en el
           uso de la CPU.
       9.3 Ejecutando (running). Puede estar ejecutando en modo kernel o en
           modo usuario.

A su vez el proceso (o partes del espacio de memoria virtual del proceso) puede
estar cargado en memoria o "swapped" a disco.




                                    (Figura3)

       Además de estos estados básicos un proceso puede estar detenido
(stopped). En este caso se le prohíbe ejecutar al proceso. Hay mecanismos para
detener y rearrancar un proceso a través de las señales STOP y CONT que
veremos más adelante.
       El estado stopped es el estado en que queda un proceso lanzado a correr
desde un intérprete de comandos (shell) cuando se presiona <Control-Z> o la tecla
configurada como "suspend" en el terminal que estemos utilizando.
Finalmente el otro estado en que a menudo un administrador encuentra a un
proceso es el estado zombie o exiting. Un proceso en este estado está en proceso
de terminación. Este caso se discute más en detalle en el apartado "Ciclo de vida
de un proceso".

   10. Planificación de Procesos

        Las señales de Unix son un mecanismo para anunciar a un proceso que ha
sucedido cierto evento que debe ser atendido. La lista de posibles señales a
comunicar a los procesos está fija, con algunas variaciones de un sabor a otro de
Unix.
        La recepción de una señal en particular por parte de un proceso provoca
que se ejecute una subrutina encargada de atenderla. A esa rutina se le llama el
"manejador" de la señal (signal handler). Un proceso puede definir un manejador
diferente para sus señales o dejar que el kernel tome las acciones predeterminadas
para cada señal.
Cuando un proceso define un manejador para cierta señal se dice que "captura"
(catch) esa señal.

   11. Tratamiento de interbloqueos

        Si se desea evitar que determinada señal sea recibida por un proceso se
puede solicitar que dicha señal sea ignorada o bloqueada. Una señal ignorada
simplemente se descarta sin ningún efecto posterior. Cuando alguien envía a
cierto proceso una señal que está bloqueada la solicitud se mantiene encolada
hasta que esa señal es explícitamente desbloqueada para ese proceso. Cuando la
señal es desbloqueada la rutina de manejo de la señal es invocada una sola vez
aunque la señal haya sido recibida más de una vez mientras estaba bloqueada.
Si bien un proceso tiene ciertas libertades para configurar como reacciona frente a
una señal (capturando, bloqueando o ignorando la señal), el kernel se reserva
ciertos derechos sobre algunas señales. Así, las señales llamadas KILL y STOP no
pueden ser capturadas, ni bloqueadas, ni ignoradas y la señal CONT no puede ser
bloqueada.
La señal KILL provoca la terminación de un proceso. La señal STOP
provoca la detención del proceso que queda en el estado "stopped" hasta que
alguien le envíe la señal CONT. Una señal puede enviarse desde un programa
utilizando llamadas al sistema operativo, o desde la línea de comandos de un shell
utilizando el comando kill. Al comando kill se le pasa como parámetro el número
o nombre de la señal y el PID del proceso. El uso más habitual del comando es
para enviar una señal TERM o KILL para terminar un proceso, de ahí su nombre.
Para muchas de las señales la acción predeterminada consiste en terminar el
proceso.

       En algunos casos se genera además un core dump. Un core dump es un
archivo con una imagen del estado del sistema que permite al desarrollador de un
programa diagnosticar problemas con la ayuda de un debugger. Al usuario final
de un programa esta imagen rara vez le sirve de ayuda. La lista de posibles señales
puede obtenerse para cada sistema a través del man del comando kill o de la
función kill() del sistema operativo. En la tabla se listan las utilizadas más a
menudo por un administrador.

   12. Sincronización de procesos

       La sincronización de procesos se logra por un mecanismo evento. Los
procesos esperan a que ocurran los eventos. Las tablas de procesos están
asociadas a los eventos. Los eventos son representados como las direcciones de
las tablas correspondientes. Un proceso padre en espera de que termine uno de sus
procesos hijos, espera por un evento que es la dirección de su propia entrada de la
tabla del proceso. Un proceso que termina señala el evento representado por la
entrada del padre en la tabla del proceso. Señalar un evento por el cual no hay
ningún proceso en espera no tiene efecto.

       En cualquier momento, todos los procesos, excepto uno, han llamado a
evento espera en el núcleo. El restante es el proceso ejecutante. Cuando llama a
evento espera, se despacha otro proceso cuyo evento ha sido señalado.
13. Comunicación entre procesos

       Muchos recursos separados son provistos para permitir a procesos
concurrentes    comunicarse         con   otros.   Los conductores son     caminos
unidireccionales sobre los cuales los procesos pueden enviar corrientes de datos a
otros procesos. Los Conductores Etiquetados (del UNIX System V) son caminos
permanentes. Los Mensajes (también de UNIX System V) transfieren elementos
de datos pequeños. SunOs incluye el mecanismo de socket a partir de BSD 4.2.
Los sokets son puntos finales de caminos de comunicación de dos vías. Ellos son
especialmente usados para implementar protocolos de red. Un proceso cliente en
una maquina en la red comienza la comunicación desde u socket; un proceso
servidor en otra máquina escucha al socket para recibir la comunicación.

       SunOs provee capacidad de memoria compartida del Sistema V. Los
procesos comparten una porción de memoria; cuando un proceso completa la
escritura a esta área de memoria, otro proceso puede leer los datos. SunOs provee
también semáforos del UNIX System V para controlar el acceso a recursos
compartidos. Un semáforo se usa para bloquear una prioridad de recurso
compartido para su uso; el proceso usa el recurso y luego usa una operación de
semáforo para liberar el recurso.

   14. Mecanismos de comunicación:
       14.1    Tubería: Mecanismo de intercomunicación entre procesos que
           permite que 2 o más procesos envíen información a cualquier otro.
           14.1.1 Tubería sin nombre: Enlace de comunicación unidireccional,
                   capaz de almacenar su entrada (hasta 4 KB en BSD o hasta 40
                   KB en System V).
           14.1.2 Tuberías nombradas (FIFO): Permiten una comunicación
                   menos restringida, ya que las colas FIFO existen en el sistema
                   de archivos hasta que son borradas.
               14.1.2.1       Características:
                   14.1.2.1.1 Permite comunicar procesos no emparentados.
14.1.2.1.2 Tiene una entrada en el sistema de archivos.
                  14.1.2.1.3 Usa una política de colas "primero en llegar,
                             primero en servirse".
                  14.1.2.1.4 Sólo disponible en UNIX System V.
   15. Gestión de Memoria

              Gran parte del desarrollo inicial de UNIX se efectuó en un PDP-11.
Esta máquina solo tiene 8 segmentos en su espacio de direcciones virtuales, y
cada uno de ellos tiene cuando más 8192 bytes. Las maquinas mas grandes como
el PDP-11/70, permiten tener espacios de instrucciones y direcciones separados,
pero dicho espacio de direcciones sigue siendo relativamente pequeño. Además, el
núcleo esta todavía más restringido porque un segmento de datos se dedica a
vectores de interrupciones, otro para apuntar el segmento de datos del sistema por
procesos, y uno más para los registros UNIBUS (Bus del estrada y salida del
sistema). Por añadidura por los PDP-11 más pequeños, la memoria física total
estaba limitada a 256k. los recursos de memoria totales eran insuficientes para
justificar o apoyar algoritmos de gestión de memoria complejos. Por ello, UNIX
intercambiaba imágenes enteras de memorias de procesos.

              La memoria es uno de los recursos más valiosos que gestiona el
sistema operativo. Uno de los elementos principales que caracterizan un proceso
es la memoria que utiliza. Ésta está lógicamente separada de la de cualquier otro
proceso del sistema (excepto los threads de un mismo proceso que comparten
normalmente la mayor parte de la memoria que tienen asignada). Un proceso no
puede acceder, al espacio de memoria asignado a otro proceso, lo cual es
imprescindible para la seguridad y estabilidad del sistema. El direccionamiento es
una parte importante de la gestión de memoria, puesto que influye mucho en la
visión del mismo por parte de un proceso, como en el aprovechamiento del
hardware y el rendimiento del sistema.

              Puesto que UNIX se ideó para ser independiente de la máquina, su
esquema de gestión de memoria varía de un sistema a otro. Las primeras versiones
de UNIX simplemente empleaban particiones variables sin ningún esquema de
memoria virtual. Las implementaciones actuales, incluida SVR4, utilizan
memoria virtual paginada. En SVR4 existen actualmente dos esquemas de gestión
de memoria separados. El sistema de paginación ofrece una memoria virtual que
asigna marcos de página en la memoria principal a los procesos y también asigna
marcos de página a los buffers (memorias intermedias) de los bloques de disco.
Aunque esto es un esquema de gestión de memoria efectiva para procesos de
usuario y de E/S de disco, un esquema de memoria virtual paginado se adapta
peor a la gestión de asignación de memoria para el kernel, y para este último
propósito se utiliza un gestor de memoria del kernel.

   16. Almacenamiento Virtual (swap)

              Cuando no caben todos los programas en memoria principal
hacemos uso de intercambio (swapping)

       16.1   Swap: partición de disco que almacena imágenes de procesos
       16.2   Swap out: cuando no caben en memoria procesos activos, se
           “expulsa” un proceso de memoria principal, copiando su imagen a
           swap (área de intercambio), aunque no es necesario copiar todo el
           mapa (ni código ni huecos). Existen diversos criterios de selección del
           proceso a intercambiar:
           16.2.1 Dependiendo de la prioridad del proceso;
           16.2.2 Preferencia a los procesos bloqueados;
           16.2.3 No intercambiar si está activo DMA sobre mapa del proceso.
       16.3   Swap in: Cuando haya espacio en memoria principal, se
           intercambia el proceso a memoria copiando imagen desde swap.

Asignación de espacio en el dispositivo de swap:

              Con preasignación: se asigna espacio al crear el proceso;

              Sin preasignación: se asigna espacio al intercambiarlo (cuando se
crea una región, no se hace ninguna reserva en el swap). La tendencia actual es
utilizar la segunda estrategia, dado que la primera conlleva un peor
aprovechamiento de la memoria secundaria, puesto que toda página debe tener
reservado espacia en ella.
17. Asignación del Espacio para Intercambio por parte del Kernel
   17.1     Dirección map que indica qué map usar + número unidades
      pedidas:
      17.1.2 Éxito ⇒la dirección
      17.1.3 Fracaso ⇒0
 17.2 Asignar espacio para intercambio:
          El kernel busca en mapa 1ª entrada con suficiente espacio para la
          petición.
          Si petición consume todos los recursos de la entrada del mapa:
            El kernel quita la entrada del array.
            Mapa ⇒ Una entrada menos.
      En caso contrario
            Ajusta dirección y unidades acorde a cantidad recursos asignados
            Liberar espacio de intercambio:
 17.3 El kernel busca posición adecuada en el mapa por la dirección. Casos
          posibles:
          17.3.1 Recursos liberados llenan un hueco en el mapa ⇒Combinar
                 todos los recursos en una entrada en el mapa.
          17.3.2 Recursos liberados llenan parcialmente un hueco en el mapa y
                 son contiguos a alguna entrada adyacente ⇒ Elkernel ajusta la
                 dirección y unidades de la entrada apropiada de acuerdo a
                 recursos liberados.
          17.3.3 Recursos liberados llenan parcialmente un hueco en el mapa y
                 no son contiguos a ninguna entrada ⇒ El kernel crea nueva
                 entrada en el mapa para los recursos liberados y la inserta en la
                 posición apropiada.
18. Intercambiar Procesos fuera de Memoria
   El kernel intercambia procesos al swap (memoria virtual) si necesita
   espacio en memoria:
   18.1      Fork: Asignar espacio para el proceso hijo (crea un nuevo
      proceso).
   18.2     Brk: Incremento tamaño del segmento de datos de un proceso.
18.3   Crecimiento pila proceso.
          18.4   Para intercambiar procesos que había intercambiado al dispositivo
              de swap
Todos los casos son iguales:

          Se decrementa contador de referencia de cada región del proceso;

          Lleva la región al swap si el contador de referencia el igual a 0;

          Salva dirección de swap de la región en la tabla de regiones.

Swap de Expansión: Proceso requiere más memoria de la que tiene asignada en
el momento (crecimiento pila o Brk) y no hay suficiente memoria disponible para
satisfacer la petición. El kernel hace un swap de expansión del proceso en el que
realiza los siguientes pasos:
          Reserva suficiente espacio en swap para el proceso, incluyendo petición
actual.
          Ajusta el mapa de traducción de direcciones del proceso para la nueva
configuración de la memoria virtual ⇒no asigna memoria física porque no está
disponible.
          Intercambia el proceso fuera de memoria con nueva memoria igual a cero
en el swap.
          Al volver a memoria, el kernel le asignará suficiente memoria según el
nuevo mapa de traducción de direcciones.
   19. Intercambiar Procesos entre Memoria Principal y swap
          Proceso 0, swapper (proceso del kernel) único capaz de mover procesos
          entre memoria y swap. Comportamiento:
          19.1   Fin inicialización del sistema ⇒ swapper empieza un bucle infinito
          19.2   Única tarea que tiene que hacer el swapper es intercambiar
              procesos desde swap:
              19.2.1 Examina procesos “listos para ejecutarse en área de swap” y
                     selecciona el que haya estado más tiempo intercambiado;
19.2.2 Si tiene suficiente memoria libre disponible asigna memoria
              física, lee el proceso desde el dispositivo de swap y libera la
              memoria en el mismo.
      19.2.3 Si no tiene suficiente espacio en memoria principal, intenta
              intercambiar procesos al dispositivo de swap
   19.3   Si no hay procesos para intercambiar a memoria, o ninguno de los
      procesos que hay en memoria pueden ser intercambiados al dispositivo
      de swap ⇒swapper se duerme, y se despierta:
      19.3.1 El reloj, lo despertará una vez cada segundo en este estado
              (dormido).
      19.3.2 El kernel si otro proceso va a dormir.
      19.3.3 Vuelve a empezar desde el principio buscando más procesos.
20. Criterios del swapper para elegir un proceso para echarlo
   (intercambiarlo) de memoria:
   20.1   Examina cada uno de los procesos que estén en memoria;
   20.2   No examina ni Zombies, ni procesos bloqueados en memoria;
   20.3   Prefiere “Dormidos” a “listos para ejecutarse”; (4) Elegir de los
      “Dormidos” los que menos f(prioridad, tiempo que proceso lleva en
      memoria) tengan; (5) Elegir de los “listos para ejecutarse” los que
      menos f(nice, tiempo que el proceso haya estado en memoria) tengan.
21. Paginación por Demanda
   Estructuras de datos para la gestión de memoria a bajo nivel y demanda de
   páginas (sistema de paginación):
   21.1   Tabla de páginas (Figura4)
      21.1.1 Entrada de la tabla de páginas:
          21.1.1.1         Número de marco de página, es la dirección física de
                 la página (Marco en la memoria real)
          21.1.1.2         Protección, que indican si procesos pueden leer,
                 escribir o ejecutar página (indica si está permitida la
                 operación de escritura);
          21.1.1.3         Válido, que indica si la página está en la memoria
                 principal;
21.1.1.4        Referencia, que indica si un proceso referenció
          recientemente la página (se pone a cero cuando la página se
          carga     por    primera    vez   y    puede   ser     restaurado
          periódicamente por el algoritmo de reemplazo de página);
   21.1.1.5        Modificado,   que    indica    si   proceso    modificó
          recientemente contenido de la página;
   21.1.1.6        Copia en escritura, usado en fork, indica que el
          kernel debe crear nueva copia de la página cuando un
          proceso modifique su contenido (activo cuando más de un
          proceso comparte la página).
   21.1.1.7        Edad, indica cuánto hace que la página pertenece al
          Working Set del proceso (indica cuánto tiempo ha estado la
          página en memoria sin ser referenciada).
21.1.2 El kernel manipula: válido, copia en escritura y edad. El
       hardware activa: referencia y modificado de cada entrada de la
       tabla de páginas.
21.1.3 Entrada del descriptor de bloques de disco (describe copia de
       disco de la página virtual):
   21.1.3.1        Número de dispositivo de swap, indica el número de
          dispositivo lógico del dispositivo secundario que contiene
          la página correspondiente (se puede utilizar más de un
          dispositivo para el intercambio);
   21.1.3.2        Número de bloque del dispositivo, indica la posición
          del bloque que contiene la página en el dispositivo swap;
   21.1.3.3        Tipo de almacenamiento, el almacenamiento puede
          ser la unidad de swap o un archivo ejecutable, en este
          último caso, existe un indicador de si debe borrarse primero
          la memoria virtual a asignar.
21.1.4 Los procesos que comparten una misma región ⇒ Entradas
       comunes para la tabla de páginas y los descriptores de bloques
       de disco.
21.2   Descriptores de bloques de disco ⇒ Asociado a cada página de un
           proceso hay una entrada en la tabla que describe la copia en el disco de
           la página virtual.
       21.3   Tabla de marcos de página (pfdata) ⇒ Describe cada marca de la
           memoria real y está indexada por el número de marco.
       21.4   Tabla de uso de swap ⇒ Existe una tabla de uso de swap por cada
           dispositivo de intercambio, con una entrada para cada página en dicho
           dispositivo. El kernel asigna espacio para pfdata una vez durante la
           vida del sistema, aunque para las otras estructuras le asigna y
           desasigna espacio dinámicamente. Cada región contiene tablas de
           páginas para acceder a memoria física.




                                    (Figura4)

   22. Sistema de Archivos

              En Unix todo se trata como ficheros. Los ficheros son una
secuencia de bytes y los directorios son una colección de ficheros que a su vez
contienen ficheros.

              Cada archivo tiene un nombre que le da el usuario para poder
utilizarlo. Un nombre de archivo puede ser casi cualquier cadena de caracteres,
donde el único carácter ASCII que no se puede usar es el slash (/), que en Unix se
usa como separador de directorios y archivos. Existen otros caracteres que se
recomienda no usarlos pues tienen significado especial para el intérprete de
comandos de Unix, como son! # & ( ) * ' " ` ; | < > @ $ ^ { } ? :  espacio
backspace tab + - y los caracteres de control. Las mayúsculas y minúsculas son
consideradas distintas en Unix y, por ejemplo, los nombres CARTA, carta y Carta
corresponden a tres archivos distintos.

              Se recomienda que los nombres de archivo no tengan más de 14
caracteres porque, salvo casos especiales, Unix considera iguales a dos archivos si
coinciden en los primeros 14 caracteres (esto no es el caso para versiones
modernas de Unix, las que pueden aceptar nombres de archivo de más de 80
caracteres). dd es un comando de la familia de los Sistemas Operativos Unix que
permite copiar y convertir datos de archivos1 a nivel bajo.

              Es generalmente usado para realizar operaciones avanzadas sobre
dispositivos o archivos, como pueden ser:

       22.1   Transferencias de datos específicos.
       22.2   Copias de seguridad de la información en crudo (raw data).
       22.3   Conversión de algunas codificaciones soportadas y/o caracteres
           predefinidos

Es de mucha importancia aclarar que en sistemas operativos Unix, cualquier
dispositivo es manejado como un archivo. Por lo tanto el comando dd, puede ser
utilizado en diversos dispositivos y volúmenes (particiones), más allá de los
archivos propiamente dichos.

   23. Directorios

       Los directorios son la base del sistema jerárquico de archivos de Unix. Son
grupos de archivos que sirven para clasificarlos y organizarlos de acuerdo a las
necesidades de los usuarios. Un directorio puede contener otros directorios y
archivos, y así sucesivamente. En teoría, no existe limitación del número de
archivos y directorios que se puedan crear en un directorio, con excepción del
tamaño del dispositivo donde se almacena. El sistema de directorios y archivos se
puede graficar en lo que se conoce como estructura de árbol.


                                       /
                  .---.---.---.---.---.---+---.---.---.---.---.---.---.
                  | | | | | | | | | | | | | |
                  | boot | etc | lib | opt | root | tmp | var
                 bin     dev       home            mnt      proc sbin         usr |
                               |                                  |
                         .------^--.----.-----.                .----.-----|
                       httpd               lgm memo rmg                  log run
                 spool
                   .------+-----. |          |     |
                 cgi-bin html logs | pubwww |
                                   | .-----^--+------.------.
                                   |       GNUstep          monos       pubwww
                 recetas
                    .------.--------^-.                |
                  disk escritos software                   .---^---.
                         |             |    dibujos fotos
                       .--^--.         .--^----.
                       tbr sds ch-city utils


       Este diagrama representa parte de un sistema de directorios y archivos
típico, donde la raíz del árbol se encuentra en la parte superior. Se le llama
directorio raíz o simplemente raíz y se denomina con el símbolo / (slash). De ella
se ramifican todos los demás directorios del sistema. Por ejemplo, dentro del
directorio home, que es un subdirectorio de la raíz, hay cuatro subdirectorios,
httpd, lgm, memo y rmg, los que a su vez contienen otros subdirectorios. El
directorio donde cada usuario se encuentra al iniciar la sesión se llama HOME o
directorio de trabajo. Cada usuario tiene un único directorio de trabajo, desde el
cual se puede mover hacia arriba y abajo en el árbol de directorios. Generalmente
el directorio de trabajo es un subdirectorio del directorio /home, y tiene como
nombre el nombre de presentación del usuario.

       Nótese que puede haber varios archivos con nombres iguales en distintos
directorios, pero no dentro de un mismo directorio. Recuérdese que se considera
la diferencia entre mayúsculas y minúsculas en la distinción de nombres de
archivo.

       ¿Cómo se distinguen los archivos uno de otro? En Unix se pueden
especificar nombres de archivo incluyendo los directorios en que están ubicados.
Este tipo de nombre se llama nombre de camino o nombre de ruta, pues describe
el camino a seguir para llegar al archivo. Son de dos tipos:

       23.1    Nombres de camino relativos: Se llama así pues se especifica el
           camino en forma relativa al directorio actual. Por ejemplo, si estoy en
           el directorio de trabajo de rmg y quiero ver una foto que rmg tiene
           entre sus monos, se puede especificar de estas dos formas:
                               /home/rmg/monos/fotos/lr1.jpg
                                                  O
                                     monos/fotos/lr1.jpg
               Un punto único (.) se utiliza para referirse al directorio actual. Por
       ejemplo, el nombre de camino
                                      ./prog/cuentas
               Es el nombre de camino del archivo cuentas del directorio prog del
       directorio actual. Los dos puntos (..) especifican el directorio padre del
       directorio actual, que es el siguiente de más alto nivel en el árbol de
       directorios. Si estamos en el directorio
                      /home/lgm/software/ch-city/
               El directorio padre sería software, quien tiene como padre a lgm,
       quien a su vez tiene como padre a home, el que es hijo del directorio raíz
       ([/]). Este último es el único directorio sin padre, y [/../] es un sinónimo de
       [/]. El doble punto se utiliza para especificar cosas más abajo en el sistema
       de directorios. Por ejemplo, si estamos en /home/lgm/disk/, el nombre de
camino relativo .../.../rmg/recetas/curanto.txt apunta al archivo cuya ruta
       completa        (o    nombre        de      camino       completo)      es
       /home/rmg/recetas/curanto.txt.
       23.2   Nombres de caminos completos o absolutos: Los nombres de
           camino completos son los que van desde la raíz hasta un archivo. Por
           ejemplo:

                                            /

                                         /bin/sh

                        /home/lgm/software/ch-city/COPYING

       /home/rmg/GNUstep/Library/WindowMaker/Backgrounds/termopila
                                         s.png

                               /etc/httpd/conf/httpd.conf

                                 /usr/local/bin/0verkill

                                   /var/log/messages

       Los nombres de archivos y directorios se separan con slashes. En los
nombres de camino completos, el primer / corresponde al directorio raíz.

       Especificar un nombre de camino completo elimina toda ambigüedad, ya
que no pueden existir dos archivos con el mismo nombre de camino completo,
pero puede ser molesto para el usuario. En la mayoría de los sistemas, es común
mantener cinco, diez, más incluso, niveles de directorio y, especificar un nombre
de camino como este:

/mnt/cdrom/19971125/webs/xingzangwushuxuexiao.cn/html/zhongwen/xingz
hang/lishi.html
24. Búsqueda de archivos (Figura5)

       El Shell es un programa interpretador de comandos que lee cada comando
que ingresa el usuario y dispone lo necesario para que se ejecuten. En este
capítulo daré a conocer ciertos aspectos del Shell estándar del sistema, como el
inicio, las órdenes de entrada, los canales de entrada y salida, etc. La búsqueda se
realiza mediante un árbol de directorios




                                    (Figura5)

       El comando find de Unix, nos permite buscar archivos dentro del árbol de
directorios de nuestro sistema. Este comando acepta una gran cantidad de
opciones. Vamos a ver algunas de ellas, pero para más información, siempre
podremos acudir al comando man, para saber más sobre find, o sobre cualquier
otro comando.
25. Sub-sistema de entradas y salidas

              El sistema de entrada/salida permite al CPU relacionarse con el
mundo exterior, teclados, pantalla, impresoras, discos, etc. La comunicación de
los CPU con un elemento externo es similar a la comunicación con la memoria, se
leen y escriben datos. El comportamiento es distinto, los datos no siempre están
disponibles y el dispositivo puede no estar preparado para recibirlo se divide en
dos sistemas complementarios: el estructurado por bloques y el estructurado por
caracteres. El primero se usa para manejar cintas y discos magnéticos, y emplea
bloques de tamaño fijo (512 o 1024 bytes) para leer o escribir. El segundo se
utiliza para atender a las terminales, líneas de comunicación e impresoras, y
funciona byte por byte.

              En general, el sistema Unix emplea programas especiales (escritos
en C) conocidos como manejadores (drivers) para atender a cada familia de
dispositivos de E/S. Los procesos se comunican con los dispositivos mediante
llamadas a su manejador. Además, desde el punto de vista de los procesos, los
manejadores aparecen como si fueran archivos en los que se lee o escribe; con
esto se logra gran homogeneidad y elegancia en el diseño.

              Cada dispositivo se estructura internamente mediante descriptores
llamados número mayor, número menor y clase (de bloque o de caracteres). Para
cada clase hay un conjunto de entradas, en una tabla, que aporta a los manejadores
de los dispositivos. El número mayor se usa para asignar manejador,
correspondiente a una familia de dispositivos; el menor pasa al manejador como
un argumento, y éste lo emplea para tener acceso a uno de varios dispositivos
físicos semejantes.

              Las rutinas que el sistema emplea para ejecutar operaciones de E/S
están diseñadas para eliminar las diferencias entre los dispositivos y los tipos de
acceso. No existe distinción entre acceso aleatorio y secuencial, ni hay un tamaño
de registro lógico impuesto por el sistema. El tamaño de un archivo ordinario está
determinado por el número de bytes escritos en él; no es necesario predeterminar
el tamaño de un archivo.
El sistema mantiene una lista de áreas de almacenamiento temporal
(buffers), asignadas a los dispositivos de bloques. El Kernel usa estos buffers con
el objeto de reducir el tráfico de E/S. Cuando un programa solicita una
transferencia, se busca primero en los buffers internos para ver si el bloque que se
requiere ya se encuentra en la memoria principal (como resultado de una
operación de lectura anterior). Si es así, entonces no será necesario realizar la
operación física de entrada o salida.

               Existe todo un mecanismo de manipulación interna de buffers (y
otro de manejo de listas de bytes), necesario para controlar el flujo de datos entre
los dispositivos de bloques (y de caracteres) y los programas que los requieren.

   26. Manejo de los Dispositivos

               En teoría los dispositivos de entrada y salida se comunicarían con
la CPU por los buses del sistema. Dado que son muy heterogéneos sería muy
costoso que la CPU los manejase directamente.

               En UNIX los dispositivos aparecen como un fichero (típicamente
en el directorio /dev). En algunos sistemas (p.e. solaris) este fichero es un enlace
simbólico a donde está realmente el fichero del dispositivo.

               Tienen asignado un i-nodo, en donde además de indicar si es un
dispositivo de bloque o de carácter, figuran dos números (major number y minor
number) que indican que manejador de dispositivo se utiliza para acceder a él y
que unidad dentro de las manejadas por dicho manejador

                 # ls -li /dev/sda /dev/sda1 /dev/sda2 /dev/audio

          4232 crw-rw---T+ 1 root audio 14, 4 Jan 7 18:51 /dev/audio

             3106 brw-rw---T 1 root disk 8, 0 Jan 7 18:51 /dev/sda

            3110 brw-rw---T 1 root disk 8, 1 Jan 7 18:51 /dev/sda1

            3111 brw-rw---T 1 root disk 8, 2 Jan 7 18:51 /dev/sda2
Para acceder a los dispositivos se pueden utilizar las mismas
llamadas que para el acceso a los ficheros (open, read, write) siempre que el
proceso que lo haga tenga los privilegios adecuados.

               También se puede acceder a las características (y demás
funcionalidades) de los dispositivos mediante la llamada ioctl

              IOCTL(2) Linux Programmer’s Manual IOCTL(2)

                                      NAME

                              ioctl - control device

                                   SYNOPSIS

                             #include <sys/ioctl.h>

                         int ioctl(int d, int request, ...);

                                DESCRIPTION

    The ioctl() function manipulates the underlying device parameters of

      special files. In particular, many operating characteristics of char

       acter special files (e.g., terminals) may be controlled with ioctl()

               Por último, y debido a que los manejadores de los dispositivos son
programas escritos en lenguaje C, es relativamente fácil reconfigurar el sistema
para ampliar o eliminar dispositivos de E/S en la computadora, así como para
incluir tipos nuevos.
Referencias Electrónicas

•   http://wikis.uca.es/wikiunix/index.php/Clasificaci%C3%B3n
•   http://www.levenez.com/unix/
•   Dennis M. Ritchie (September 1979) The Evolution of the Unix Time-
    sharing System Bell Labs. 1996. Lucent Technologies Inc
•   Bell Labs. It still remains a phenomenon The Creation of the UNIX*
    Operating System.
•   http://www.monografias.com/trabajos/unix/unix.shtml
•   http://www.monografias.com/trabajos75/sistema-operativo-unix/sistema-
    operativo-unix.shtml
•   http://iie.fing.edu.uy/ense/asign/admunix/procesos.htm
•   http://www.ual.es/~acorral/DSO/Tema_3.pdf

Más contenido relacionado

Destacado

NetConsulting presenta Vamos a Contar Verdades (PPT)
NetConsulting presenta Vamos a Contar Verdades (PPT)NetConsulting presenta Vamos a Contar Verdades (PPT)
NetConsulting presenta Vamos a Contar Verdades (PPT)NetConsulting Marketing
 
Practica 4.1. que es la web herrera indise
Practica 4.1. que es la web herrera indisePractica 4.1. que es la web herrera indise
Practica 4.1. que es la web herrera indiseJavier Herrera
 
Parodi et al 2002 atp y adenosina
Parodi et al 2002 atp y adenosinaParodi et al 2002 atp y adenosina
Parodi et al 2002 atp y adenosinaJorge Parodi
 
Žurnalas mama ir vaikas 2014 m. ruduo
Žurnalas mama ir vaikas 2014 m. ruduoŽurnalas mama ir vaikas 2014 m. ruduo
Žurnalas mama ir vaikas 2014 m. ruduoMB "Mama ir vaikas"
 
San francisco de nuevo ecuador completo final pq
San francisco de nuevo ecuador completo final pq San francisco de nuevo ecuador completo final pq
San francisco de nuevo ecuador completo final pq Carlos Márquez
 
How Cybercriminals Cheat Email Authentication
How Cybercriminals Cheat Email AuthenticationHow Cybercriminals Cheat Email Authentication
How Cybercriminals Cheat Email AuthenticationReturn Path
 
Webinar | Cómo emprender con éxito
Webinar | Cómo emprender con éxitoWebinar | Cómo emprender con éxito
Webinar | Cómo emprender con éxitoInfoJobs
 
Acupuntura deber de enfer (1)
Acupuntura  deber de enfer (1)Acupuntura  deber de enfer (1)
Acupuntura deber de enfer (1)Karol Sarmiento
 
Idiomas Modernos Administración Acuerdo de Aprendizaje martes julio 2015
Idiomas Modernos Administración Acuerdo de Aprendizaje  martes  julio  2015Idiomas Modernos Administración Acuerdo de Aprendizaje  martes  julio  2015
Idiomas Modernos Administración Acuerdo de Aprendizaje martes julio 2015Johana Guerrero
 
Smarte Bildschirme von pilot screentime GmbH (DEUTSCH)
Smarte Bildschirme von pilot screentime GmbH (DEUTSCH)Smarte Bildschirme von pilot screentime GmbH (DEUTSCH)
Smarte Bildschirme von pilot screentime GmbH (DEUTSCH)pilot Screentime GmbH
 
Your digital footprint: what does the internet know about (professional) you?
Your digital footprint: what does the internet know about (professional) you? Your digital footprint: what does the internet know about (professional) you?
Your digital footprint: what does the internet know about (professional) you? Shawna Reibling
 
Lípidos santillana
Lípidos santillanaLípidos santillana
Lípidos santillanaSil Caser
 
Fokus Interne Kommunikation | CHANGE
Fokus Interne Kommunikation | CHANGEFokus Interne Kommunikation | CHANGE
Fokus Interne Kommunikation | CHANGEUlrich Hinsen
 
7 trabajo de lengua las aventuras de tom sawyer
7 trabajo de lengua las aventuras de tom sawyer7 trabajo de lengua las aventuras de tom sawyer
7 trabajo de lengua las aventuras de tom sawyerAsunmoreno
 
Visión 2030: conceptos de prospectiva aplicados al futuro de biblioteca
Visión 2030: conceptos de prospectiva aplicados al futuro de bibliotecaVisión 2030: conceptos de prospectiva aplicados al futuro de biblioteca
Visión 2030: conceptos de prospectiva aplicados al futuro de bibliotecaSocialBiblio
 

Destacado (20)

NetConsulting presenta Vamos a Contar Verdades (PPT)
NetConsulting presenta Vamos a Contar Verdades (PPT)NetConsulting presenta Vamos a Contar Verdades (PPT)
NetConsulting presenta Vamos a Contar Verdades (PPT)
 
Practica 4.1. que es la web herrera indise
Practica 4.1. que es la web herrera indisePractica 4.1. que es la web herrera indise
Practica 4.1. que es la web herrera indise
 
3 STAR CONSULTING SERVICES
3 STAR CONSULTING SERVICES3 STAR CONSULTING SERVICES
3 STAR CONSULTING SERVICES
 
Matemáticas iii vol. i
Matemáticas iii vol. iMatemáticas iii vol. i
Matemáticas iii vol. i
 
Parodi et al 2002 atp y adenosina
Parodi et al 2002 atp y adenosinaParodi et al 2002 atp y adenosina
Parodi et al 2002 atp y adenosina
 
Žurnalas mama ir vaikas 2014 m. ruduo
Žurnalas mama ir vaikas 2014 m. ruduoŽurnalas mama ir vaikas 2014 m. ruduo
Žurnalas mama ir vaikas 2014 m. ruduo
 
SOCIMI
SOCIMISOCIMI
SOCIMI
 
San francisco de nuevo ecuador completo final pq
San francisco de nuevo ecuador completo final pq San francisco de nuevo ecuador completo final pq
San francisco de nuevo ecuador completo final pq
 
How Cybercriminals Cheat Email Authentication
How Cybercriminals Cheat Email AuthenticationHow Cybercriminals Cheat Email Authentication
How Cybercriminals Cheat Email Authentication
 
Mobil Delvac
Mobil Delvac Mobil Delvac
Mobil Delvac
 
Webinar | Cómo emprender con éxito
Webinar | Cómo emprender con éxitoWebinar | Cómo emprender con éxito
Webinar | Cómo emprender con éxito
 
Acupuntura deber de enfer (1)
Acupuntura  deber de enfer (1)Acupuntura  deber de enfer (1)
Acupuntura deber de enfer (1)
 
Idiomas Modernos Administración Acuerdo de Aprendizaje martes julio 2015
Idiomas Modernos Administración Acuerdo de Aprendizaje  martes  julio  2015Idiomas Modernos Administración Acuerdo de Aprendizaje  martes  julio  2015
Idiomas Modernos Administración Acuerdo de Aprendizaje martes julio 2015
 
Smarte Bildschirme von pilot screentime GmbH (DEUTSCH)
Smarte Bildschirme von pilot screentime GmbH (DEUTSCH)Smarte Bildschirme von pilot screentime GmbH (DEUTSCH)
Smarte Bildschirme von pilot screentime GmbH (DEUTSCH)
 
Nueva escuela
Nueva escuelaNueva escuela
Nueva escuela
 
Your digital footprint: what does the internet know about (professional) you?
Your digital footprint: what does the internet know about (professional) you? Your digital footprint: what does the internet know about (professional) you?
Your digital footprint: what does the internet know about (professional) you?
 
Lípidos santillana
Lípidos santillanaLípidos santillana
Lípidos santillana
 
Fokus Interne Kommunikation | CHANGE
Fokus Interne Kommunikation | CHANGEFokus Interne Kommunikation | CHANGE
Fokus Interne Kommunikation | CHANGE
 
7 trabajo de lengua las aventuras de tom sawyer
7 trabajo de lengua las aventuras de tom sawyer7 trabajo de lengua las aventuras de tom sawyer
7 trabajo de lengua las aventuras de tom sawyer
 
Visión 2030: conceptos de prospectiva aplicados al futuro de biblioteca
Visión 2030: conceptos de prospectiva aplicados al futuro de bibliotecaVisión 2030: conceptos de prospectiva aplicados al futuro de biblioteca
Visión 2030: conceptos de prospectiva aplicados al futuro de biblioteca
 

Similar a Introducción a la historia y características de Unix

Similar a Introducción a la historia y características de Unix (20)

Unix
UnixUnix
Unix
 
PROYECTO UNIX
PROYECTO UNIXPROYECTO UNIX
PROYECTO UNIX
 
Sistemas presentacion
Sistemas presentacionSistemas presentacion
Sistemas presentacion
 
PráCtica Numero 4
PráCtica Numero 4PráCtica Numero 4
PráCtica Numero 4
 
preinf2.docx
preinf2.docxpreinf2.docx
preinf2.docx
 
Unix nueva diapositiva
Unix nueva diapositivaUnix nueva diapositiva
Unix nueva diapositiva
 
Historia de linux
Historia de linuxHistoria de linux
Historia de linux
 
Unix
UnixUnix
Unix
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Sistemas operativos unix y linux
Sistemas operativos unix y linuxSistemas operativos unix y linux
Sistemas operativos unix y linux
 
Presentacion De Unix
Presentacion De UnixPresentacion De Unix
Presentacion De Unix
 
Curso: Unixware
Curso: UnixwareCurso: Unixware
Curso: Unixware
 
Sistema operativo unix completo
Sistema operativo unix completoSistema operativo unix completo
Sistema operativo unix completo
 
Sistema operativo unix completo
Sistema operativo unix completoSistema operativo unix completo
Sistema operativo unix completo
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
SISTEMAS OPERATIVOS (UNIX & LINUX)
SISTEMAS OPERATIVOS (UNIX & LINUX)SISTEMAS OPERATIVOS (UNIX & LINUX)
SISTEMAS OPERATIVOS (UNIX & LINUX)
 
Unix y linux
Unix y linuxUnix y linux
Unix y linux
 
Sistemas operativos5 6b
Sistemas operativos5 6bSistemas operativos5 6b
Sistemas operativos5 6b
 
Bii t03 - sistemas operarivos. windows, linux y unix
Bii t03 - sistemas operarivos. windows, linux y unixBii t03 - sistemas operarivos. windows, linux y unix
Bii t03 - sistemas operarivos. windows, linux y unix
 
sistema de un operador
sistema de un operadorsistema de un operador
sistema de un operador
 

Introducción a la historia y características de Unix

  • 1. Republica bolivariana de Venezuela Ministerio del Poder Popular para la Educación Universitaria Universidad Centroccidental Lisandro Alvarado Barquisimeto - Edo Lara Daimerlis Escalona C.I.:20.045.544 Derlys Alvarado C.I.:20.189.960 Héctor Linares C.I.: 19.198.516 Ismarilex Perez C.I.: 19.591.262 Jesús Rea C.I.: 19.265.883 Rawin Olivera C.I.: 19.149.818 Wuilker Escalona C.I.: 19.726.462
  • 2. Introducción Los Laboratorios Bell fueron los responsables del desarrollo de Unix como un proyecto de investigación privado dirigido por un pequeño grupo de personas que empezó en 1969. El objetivo del grupo fue diseñar un sistema operativo que cumpliera los siguientes requisitos: Que fuera simple y elegante. Que estuviera escrito en un lenguaje de alto nivel. Que permitiera reutilizar el código. UNIX tenía una relativamente pequeña parte de su código escrita en ensamblador (la que se encargaba de gestionar el hardware, más conocida como kernel) y el resto del código escrito en C principalmente por Ken Thompson, Dennis Ritchie, Douglas McIlroy A medida que el desarrollo avanzaba se realizaban pequeñas modificaciones al código del kernel (dependiendo de la plataforma) y se desarrollaron muchas utilidades en C. A través de esta evolución el kernel y el software asociado se extendieron hasta que un sistema operativo completo se desarrolló "sobre" el kernel. El sistema Unix es un sistema operativo que admite múltiples usuarios, así como también múltiples tareas, lo que significa que permite que en un único equipo o multiprocesador se ejecuten simultáneamente varios programas a cargo de uno o varios usuarios. Este sistema cuenta con uno o varios intérpretes de comando (shell) así como también con un gran número de comandos y muchas utilidades (ensambladores, compiladores para varios idiomas, procesador de textos, correo electrónico, etc.). Además, es altamente transportable, lo que significa que es posible implementar un sistema Unix en casi todas las plataformas de hardware. El sistema se basa en un Núcleo llamado Kernel, que reside permanentemente en la memoria, y que atiende a todas las llamadas del sistema, administra el
  • 3. acceso a los archivos y el inicio o la suspensión de las tareas de los usuarios. La comunicación con el sistema UNIX se da mediante un programa de control llamado SHELL. Este es un lenguaje de control, un intérprete, y un lenguaje de programación, cuyas características lo hacen sumamente flexible para las tareas de un centro de cómputo. Actualmente, los sistemas Unix se afianzaron en entornos profesionales y universitarios gracias a su estabilidad, su gran nivel de seguridad y el cumplimiento de estándares, especialmente en lo que se refiere a redes.
  • 4. 1. Características Generales: Es un sistema operativo de tiempo compartido, controla los recursos de una computadora y los asigna entre los usuarios, adicionalmente permite a los usuarios correr sus programas. Controla los dispositivos de periféricos conectados a la máquina. 2. Características básicas: 2.1 Sistema Multiusuario. 2.2 Sistema Multitarea. 2.3 Sistema interactivo. 2.4 Estandarizado. 2.5 Potente. 2.6 Versátil. 2.7 Software y sistema operativo portable. 2.8 Permite ejecutar procesos en Background y Foreground. 2.9 Presenta niveles altos de seguridad. 2.10 Presenta una estructura jerárquica de archivos. 2.11 Posee un gran número de utilidades: Editores de línea, de pantalla, formateadores, depuradores de programas… 2.12 Posibilidad de comunicación UNIX – UNIX (UUCP) 2.13 Fácil integración en sistemas de red. 2.14 Posibilidad de usar distintos lenguajes de programación: C, 2.15 Fortran, Cobol, Pascal,… 2.16 Gran cantidad de software disponible en el mercado. 3. A continuación se exponen las familias UNIX más significativas 3.1 AT&T: la familia que tuvo su origen en el UNIX de AT&T. Considerada la familia UNIX "pura" y original. Sus sistemas operativos más significativos son UNIX System III y UNIX System V. 3.2 BSD: familia originada por el licenciamiento de UNIX a Berkely. BSD se reescribió para no incorporar propiedad intelectual originaria de AT&T en la versión 4. La primera implementación de los
  • 5. protocolos TCP/IP que dieron origen a Internet son la pila TCP/IP BSD. 3.3 AIX: Esta familia surge por el licenciamiento de UNIX System III a IBM. 3.4 Xenix: familia derivada de la adquisición de los derechos originales de AT&T primero por parte de Microsoft y de esta los vendió a SCO. 3.5 GNU: En 1983, Richard Stallman anunció el Proyecto GNU, un ambicioso esfuerzo para crear un sistema similar a Unix, que pudiese ser distribuido libremente. El software desarrollado por este proyecto - por ejemplo, GNU Emacs y GCC - también han sido parte fundamental de otros sistemas UNIX. 3.6 Linux: En 1991, cuando Linus Torvalds empezó a proponer el núcleo Linux y a reunir colaboradores, las herramientas GNU eran la elección perfecta. Al combinarse ambos elementos, conformaron la base del sistema operativo (basado en POSIX) que hoy se conoce como GNU/Linux. Las distribuciones basadas en el núcleo, el software GNU y otros agregados entre las que se pueden mencionar a Red Hat Linux y Debian GNU/Linux se han hecho populares tanto entre los aficionados a la computación como en el mundo empresarial. Obsérvese que Linux tiene un origen independiente, por lo que se considera un 'clónico' de UNIX y no un UNIX en el sentido histórico. 4. Estructura del sistema operativo UNIX (Figura1) El sistema operativo UNIX está estructurado por 4 niveles o capas: 4.1 En el nivel más interno o primer nivel, se encuentra el hardware de la computadora cuyos recursos se desean gestionar. 4.2 En el segundo nivel, directamente en contacto con el hardware, se encuentra el núcleo del sistema, también llamado únicamente núcleo (kernel). El kernel constituye el núcleo del sistema operativo. Actúa como interfaz con el hardware del sistema, este núcleo está escrito en lenguaje C en su mayor parte, aunque
  • 6. coexistiendo con lenguaje ensamblador.. Se encarga de realizar las funciones de más bajo nivel, como son: 4.2.1 Manejo y control de los dispositivos físicos. 4.2.2 Control de interrupciones. 4.2.3 Control de procesos y tiempos. 4.2.4 Control de archivos. 4.2.5 Control de memoria. 4.2.6 Está escrito fundamentalmente en lenguaje “C” (90%) y el resto en lenguaje ensamblador. 4.2.7 Control de la ejecución de los procesos posibilitando su creación, terminación o suspensión, y comunicación. 4.2.8 Planificación de los procesos para su ejecución en la CPU. En UNIX los procesos comparten el uso de la CPU por ello el núcleo debe velar porque la utilización de la CPU por parte de todos los procesos se realice de una forma justa. 4.2.9 Asignación de la memoria principal. La memoria principal de una computadora es un recurso finito y muy valioso. Si el sistema posee en un cierto momento poca memoria principal libre, el núcleo liberará memoria escribiendo uno o varios procesos temporalmente en memoria secundaria (en un espacio predefinido denominado dispositivo de intercambio). Si el núcleo escribe un proceso entero en el dispositivo de intercambio, se dice que el sistema de gestión de memoria sigue una política de intercambio. Mientras que si escribe páginas de memoria asociadas al proceso en al dispositivo de intercambio, se dice que el sistema de gestión de memoria sigue una política de demanda de páginas. 4.2.10 Protección del espacio de direcciones de un proceso en ejecución. El núcleo protege el espacio de direcciones de un proceso de intromisiones externas por parte de otros procesos. No obstante, bajo ciertas condiciones un proceso puede
  • 7. compartir porciones de su espacio de direcciones con otros procesos. 4.2.11 Asignación de memoria secundaria para almacenamiento y recuperación eficiente de los datos de usuario. El núcleo asigna memoria secundaria para los ficheros de usuario, reclama el espacio no utilizado, estructura el sistema de ficheros de una forma entendible, y protege a los ficheros de usuario de accesos ilegales. 4.2.12 Regulación del acceso de los procesos a los dispositivos periféricos tales como terminales, unidades de disco, dispositivos en red, entre otros. 4.2.13 Administración de archivos y dispositivos 4.2.14 Tratamiento de las interrupciones y excepciones 4.3 En el tercer nivel, en contacto con el núcleo, se encuentran los programas estándar de cualquier sistema UNIX (intérpretes de comandos, editores, etc.) y programas ejecutables generados por el usuario. Un programa ubicado en este nivel puede interactuar con el núcleo mediante el uso de las llamadas al sistema, las cuales dan instrucciones al núcleo para que realice (en el nombre del programa que las invoca) diferentes operaciones con el hardware. Además, las llamadas al sistema permiten un intercambio de datos entre el núcleo y el programa. En definitiva, las llamadas al sistema son el mecanismo que los programas utilizan para solicitar el núcleo el uso de los recursos del computador (hardware). Habitualmente las llamadas al sistema se identifican como un conjunto perfectamente definido de funciones. 4.4 En el cuarto nivel, se sitúan las aplicaciones que se sirven de otros programas ya creados ubicados en el nivel inferior para llevar a cabo su función. Estas aplicaciones no se comunican directamente con el núcleo. Por ejemplo una aplicación situada en este cuarto nivel será el compilador de C cc que invoca de forma secuencial a los programas cpp, comp, as y ld. situados en el tercer nivel. La jerarquía de
  • 8. programas no tiene porqué verse limitada a cuatro niveles. El usuario puede crear tantos niveles como necesite. Además, puede haber también programas que se apoyen en diferentes niveles y que se comuniquen con el núcleo por un lado, y con otros programas ya existentes, por otro. La existencia del núcleo posibilita que los programas de los niveles superiores puedan ser escritos sin realizar ninguna suposición sobre el hardware de la computadora. A su vez esto facilita su portabilidad entre diferentes tipos de computadoras (siempre que tengan instalado UNIX) (Figura1) De manera adicional posee un intérprete llamado Shell, actúa como la interfaz del sistema operativo con los usuarios del mismo y como intérprete de comandos. Características semejantes a un lenguaje de programación de alto nivel. Shellscripts. Permite configurar diferentes entornos de trabajo. Es un comando: /sbin/sh.
  • 9. 5. Gestión de los procesos Se le llama proceso en Unix a un programa en ejecución y al objeto abstracto que crea el sistema operativo para manejar el acceso de ese programa a los recursos del sistema (memoria, CPU, dispositivos de E/S). Pueden coexistir varias instancias de un mismo programa ejecutando en forma simultánea. Cada una de ellas es un proceso diferente. Unix es un sistema multiproceso por tiempo compartido. A los ojos de un usuario en un momento dado hay múltiples programas en ejecución, cada uno de ellos avanzando en su tarea. Sin embargo en una máquina con un solo procesador hay en cada instante solamente un proceso ejecutando. Es el sistema operativo el que va rotando el uso del procesador a intervalos breves (alguna decena de milisegundos) entre los procesos definidos en el sistema de forma que se crea la ilusión que todos avanzan simultáneamente. El administrador del sistema dispone de herramientas para supervisar el estado de los procesos y eventualmente tomar acciones para suspender o detener la ejecución de un proceso o simplemente modificar su comportamiento. 6. Tipos de procesos: Los procesos en el sistema UNIX pueden ser de tres tipos: 6.1 Los procesos de usuario son aquellos procesos asociados a un determinado usuario. Se ejecutan en modo usuario excepto cuando realizan llamadas al sistema para acceder a los recursos del sistema, que pasan a ser ejecutados en modo núcleo. 6.2 Los procesos demonio no están asociados a ningún usuario. Al igual que los proceso de usuario, son ejecutados en modo usuario excepto cuando realizan llamadas al sistema que pasan a ser ejecutados en modo núcleo. Los procesos demonio realizan tareas periódicas relacionadas con la administración del sistema, como por ejemplo: la administración y control de redes, la ejecución de actividades dependientes del tiempo, la administración de trabajos en las impresoras en línea, etc.
  • 10. 6.3 Los procesos del núcleo no están asociados a ningún usuario. Se ejecutan exclusivamente en modo núcleo. Son similares a los procesos demonio en el sentido de que realizan tareas de administración del sistema, como por ejemplo, el intercambio de procesos (proceso intercambiador) o de páginas (proceso ladrón de páginas) a memoria secundaria. Su principal ventaja respecto a los procesos demonio es que poseen un mayor control sobre sus prioridades de planificación puesto que su código es parte del núcleo. Por ello pueden acceder directamente a los algoritmos y estructuras de datos del núcleo sin hacer uso de las llamadas al sistema, en consecuencia son extremadamente potentes. Sin embargo no son tan flexibles como los procesos demonio, ya que para modificarlos se debe de recompilar el núcleo. 7. Creación de Procesos (Figura2) Al crearse un nuevo proceso se le asigna un identificador de proceso único. Este número debe utilizarse por el administrador para referirse a un proceso dado al ejecutar un comando. Los PID son asignados por el sistema a cada nuevo proceso en orden creciente comenzando desde cero. Si antes de un reboot del sistema se llega al nro. máximo, se vuelve a comenzar desde cero, salteando los procesos que aún estén activos. El mecanismo de creación de un proceso en Unix es un poco peculiar. Un proceso se crea invocando a una función del sistema operativo llamada fork(). La función fork () crea una copia idéntica del proceso que la invoca con excepción de: 7.1 El nuevo proceso tiene un PID diferente 7.2 El PPID del nuevo proceso es el PID del proceso original. 7.3 Se reinicia la información de tarificación del proceso (uso de CPU) Al retorno de fork() se siguen ejecutando las siguientes sentencias del programa en forma concurrente. Para distinguir entre los dos procesos la función fork() devuelve un cero al proceso hijo y el PID del nuevo proceso al
  • 11. proceso padre. Normalmente el proceso hijo lanza luego un nuevo programa ejecutando alguna variante de comando exec(). En el recuadro puede verse un ejemplo del uso de fork. (Figura2) Si este es el mecanismo para crear un proceso, entonces ¿quién lanza a correr el primer proceso? Luego del boot del sistema el kernel instala y deja corriendo un proceso llamado init con PID=1. Una de las funciones principales de init es lanzar mediante fork() intérpretes de comandos que a su vez lanzarán los scripts de inicialización del sistema y los procesos de los usuarios. Además de init el kernel lanza algunos procesos más cuyo nombre y función varía en los diferentes sabores de Unix. A excepción de estos procesos lanzados por el kernel al inicio, todos los demás son descendientes de init. Normalmente un proceso termina invocando a la función exit() pasando como parámetro un código de salida o exit code. El destinatario de ese código de salida es el proceso padre. El proceso padre puede esperar la terminación de su proceso hijo invocando la función wait(). Esta función manda al padre a dormir hasta que el hijo ejecute su exit() y devuelve el exit code del proceso hijo. Cuando el proceso hijo termina antes que el padre, el kernel debe conservar el valor del exit code para pasarlo al padre cuando ejecute wait(). En esta situación se dice que el proceso hijo está en el estado zombie. El kernel devuelve todas las áreas de memoria solicitadas por el proceso pero debe mantener alguna información sobre el proceso (al menos su PID y el exit code). Cuando el proceso padre termina primero el kernel encarga a init la tarea de
  • 12. ejecutar el wait() necesario para terminar todo en forma ordenada. A menudo init falla en esta función y suelen quedar procesos en estado zombie hasta un nuevo reboot. Dado que un proceso zombie no consume recursos fuera de su PID, esto por lo general no provoca problemas. 8. Bloque de Control de Procesos (BCP) La estructura de datos más básica asociada a los procesos es la estructura de procesos. Dicha estructura contiene todo lo que el sistema necesita saber acerca de un proceso cuando este se intercambia a disco, como su identificador único, información de planificación y punteros a otros bloques de control. Existe un arreglo de estructuras de procesos cuyas longitudes define en el momento de enlazar el sistema. El planificador mantiene vinculadas las estructuras de procesos de los procesos listos en una lista doblemente enlazada, y hay punteros de cada estructura de procesos al padre del proceso, a su hijo vivo más joven y a varios otros parientes de interés, como una lista de procesos que comparten el mismo código de programa (texto). El espacio de direcciones virtual de un Proceso de usuario se divide en segmento de texto, datos y pilas. Los segmentos de datos y de pilas siempre están en el mismo espacio de direcciones, pero podrían crecer de manera independiente, y por lo regular en direcciones opuestas. Lo más común es que la pila crezca hacia abajo mientras los datos crecen hacia ella, el segmento de texto está en u espacio de direcciones diferente del de los datos y de la pila, y suele ser solo de lectura. Las Tablas de páginas registran información acerca de la correspondencia acerca de la memoria virtual de los procesos y la memoria física. La estructura de procesos contiene punteros a la tabla de página, para usarse cuando el proceso reside en la memoria principal, ó la dirección del proceso en el dispositivo de intercambio, cuando el proceso se intercambia. No hay una tabla de página especial a parte para un segmento de texto compartido; todos los procesos que comparten el segmento de texto tienen entradas para sus páginas en la tabla de páginas del proceso. La información acerca del proceso que solo se necesita
  • 13. cuando el proceso esta residente se mantiene en la estructura de usuario en lugar de la estructura de proceso. Se establece uhna correspondencia de solo lectura entre la esructura de usuario y el espacio de direcciones virtual del usuario, para que los procesos de usuarios puedan leer su contenido. El nucleo puede escribir dicha estructura 9. Estados y Transiciones de Procesos (Figura3) 9.1 Durmiendo (asleep): En general a la espera de algún recurso compartido. 9.2 Listo para ejecutar (runnable). A la espera que le toque el turno en el uso de la CPU. 9.3 Ejecutando (running). Puede estar ejecutando en modo kernel o en modo usuario. A su vez el proceso (o partes del espacio de memoria virtual del proceso) puede estar cargado en memoria o "swapped" a disco. (Figura3) Además de estos estados básicos un proceso puede estar detenido (stopped). En este caso se le prohíbe ejecutar al proceso. Hay mecanismos para detener y rearrancar un proceso a través de las señales STOP y CONT que veremos más adelante. El estado stopped es el estado en que queda un proceso lanzado a correr desde un intérprete de comandos (shell) cuando se presiona <Control-Z> o la tecla configurada como "suspend" en el terminal que estemos utilizando.
  • 14. Finalmente el otro estado en que a menudo un administrador encuentra a un proceso es el estado zombie o exiting. Un proceso en este estado está en proceso de terminación. Este caso se discute más en detalle en el apartado "Ciclo de vida de un proceso". 10. Planificación de Procesos Las señales de Unix son un mecanismo para anunciar a un proceso que ha sucedido cierto evento que debe ser atendido. La lista de posibles señales a comunicar a los procesos está fija, con algunas variaciones de un sabor a otro de Unix. La recepción de una señal en particular por parte de un proceso provoca que se ejecute una subrutina encargada de atenderla. A esa rutina se le llama el "manejador" de la señal (signal handler). Un proceso puede definir un manejador diferente para sus señales o dejar que el kernel tome las acciones predeterminadas para cada señal. Cuando un proceso define un manejador para cierta señal se dice que "captura" (catch) esa señal. 11. Tratamiento de interbloqueos Si se desea evitar que determinada señal sea recibida por un proceso se puede solicitar que dicha señal sea ignorada o bloqueada. Una señal ignorada simplemente se descarta sin ningún efecto posterior. Cuando alguien envía a cierto proceso una señal que está bloqueada la solicitud se mantiene encolada hasta que esa señal es explícitamente desbloqueada para ese proceso. Cuando la señal es desbloqueada la rutina de manejo de la señal es invocada una sola vez aunque la señal haya sido recibida más de una vez mientras estaba bloqueada. Si bien un proceso tiene ciertas libertades para configurar como reacciona frente a una señal (capturando, bloqueando o ignorando la señal), el kernel se reserva ciertos derechos sobre algunas señales. Así, las señales llamadas KILL y STOP no pueden ser capturadas, ni bloqueadas, ni ignoradas y la señal CONT no puede ser bloqueada.
  • 15. La señal KILL provoca la terminación de un proceso. La señal STOP provoca la detención del proceso que queda en el estado "stopped" hasta que alguien le envíe la señal CONT. Una señal puede enviarse desde un programa utilizando llamadas al sistema operativo, o desde la línea de comandos de un shell utilizando el comando kill. Al comando kill se le pasa como parámetro el número o nombre de la señal y el PID del proceso. El uso más habitual del comando es para enviar una señal TERM o KILL para terminar un proceso, de ahí su nombre. Para muchas de las señales la acción predeterminada consiste en terminar el proceso. En algunos casos se genera además un core dump. Un core dump es un archivo con una imagen del estado del sistema que permite al desarrollador de un programa diagnosticar problemas con la ayuda de un debugger. Al usuario final de un programa esta imagen rara vez le sirve de ayuda. La lista de posibles señales puede obtenerse para cada sistema a través del man del comando kill o de la función kill() del sistema operativo. En la tabla se listan las utilizadas más a menudo por un administrador. 12. Sincronización de procesos La sincronización de procesos se logra por un mecanismo evento. Los procesos esperan a que ocurran los eventos. Las tablas de procesos están asociadas a los eventos. Los eventos son representados como las direcciones de las tablas correspondientes. Un proceso padre en espera de que termine uno de sus procesos hijos, espera por un evento que es la dirección de su propia entrada de la tabla del proceso. Un proceso que termina señala el evento representado por la entrada del padre en la tabla del proceso. Señalar un evento por el cual no hay ningún proceso en espera no tiene efecto. En cualquier momento, todos los procesos, excepto uno, han llamado a evento espera en el núcleo. El restante es el proceso ejecutante. Cuando llama a evento espera, se despacha otro proceso cuyo evento ha sido señalado.
  • 16. 13. Comunicación entre procesos Muchos recursos separados son provistos para permitir a procesos concurrentes comunicarse con otros. Los conductores son caminos unidireccionales sobre los cuales los procesos pueden enviar corrientes de datos a otros procesos. Los Conductores Etiquetados (del UNIX System V) son caminos permanentes. Los Mensajes (también de UNIX System V) transfieren elementos de datos pequeños. SunOs incluye el mecanismo de socket a partir de BSD 4.2. Los sokets son puntos finales de caminos de comunicación de dos vías. Ellos son especialmente usados para implementar protocolos de red. Un proceso cliente en una maquina en la red comienza la comunicación desde u socket; un proceso servidor en otra máquina escucha al socket para recibir la comunicación. SunOs provee capacidad de memoria compartida del Sistema V. Los procesos comparten una porción de memoria; cuando un proceso completa la escritura a esta área de memoria, otro proceso puede leer los datos. SunOs provee también semáforos del UNIX System V para controlar el acceso a recursos compartidos. Un semáforo se usa para bloquear una prioridad de recurso compartido para su uso; el proceso usa el recurso y luego usa una operación de semáforo para liberar el recurso. 14. Mecanismos de comunicación: 14.1 Tubería: Mecanismo de intercomunicación entre procesos que permite que 2 o más procesos envíen información a cualquier otro. 14.1.1 Tubería sin nombre: Enlace de comunicación unidireccional, capaz de almacenar su entrada (hasta 4 KB en BSD o hasta 40 KB en System V). 14.1.2 Tuberías nombradas (FIFO): Permiten una comunicación menos restringida, ya que las colas FIFO existen en el sistema de archivos hasta que son borradas. 14.1.2.1 Características: 14.1.2.1.1 Permite comunicar procesos no emparentados.
  • 17. 14.1.2.1.2 Tiene una entrada en el sistema de archivos. 14.1.2.1.3 Usa una política de colas "primero en llegar, primero en servirse". 14.1.2.1.4 Sólo disponible en UNIX System V. 15. Gestión de Memoria Gran parte del desarrollo inicial de UNIX se efectuó en un PDP-11. Esta máquina solo tiene 8 segmentos en su espacio de direcciones virtuales, y cada uno de ellos tiene cuando más 8192 bytes. Las maquinas mas grandes como el PDP-11/70, permiten tener espacios de instrucciones y direcciones separados, pero dicho espacio de direcciones sigue siendo relativamente pequeño. Además, el núcleo esta todavía más restringido porque un segmento de datos se dedica a vectores de interrupciones, otro para apuntar el segmento de datos del sistema por procesos, y uno más para los registros UNIBUS (Bus del estrada y salida del sistema). Por añadidura por los PDP-11 más pequeños, la memoria física total estaba limitada a 256k. los recursos de memoria totales eran insuficientes para justificar o apoyar algoritmos de gestión de memoria complejos. Por ello, UNIX intercambiaba imágenes enteras de memorias de procesos. La memoria es uno de los recursos más valiosos que gestiona el sistema operativo. Uno de los elementos principales que caracterizan un proceso es la memoria que utiliza. Ésta está lógicamente separada de la de cualquier otro proceso del sistema (excepto los threads de un mismo proceso que comparten normalmente la mayor parte de la memoria que tienen asignada). Un proceso no puede acceder, al espacio de memoria asignado a otro proceso, lo cual es imprescindible para la seguridad y estabilidad del sistema. El direccionamiento es una parte importante de la gestión de memoria, puesto que influye mucho en la visión del mismo por parte de un proceso, como en el aprovechamiento del hardware y el rendimiento del sistema. Puesto que UNIX se ideó para ser independiente de la máquina, su esquema de gestión de memoria varía de un sistema a otro. Las primeras versiones de UNIX simplemente empleaban particiones variables sin ningún esquema de memoria virtual. Las implementaciones actuales, incluida SVR4, utilizan
  • 18. memoria virtual paginada. En SVR4 existen actualmente dos esquemas de gestión de memoria separados. El sistema de paginación ofrece una memoria virtual que asigna marcos de página en la memoria principal a los procesos y también asigna marcos de página a los buffers (memorias intermedias) de los bloques de disco. Aunque esto es un esquema de gestión de memoria efectiva para procesos de usuario y de E/S de disco, un esquema de memoria virtual paginado se adapta peor a la gestión de asignación de memoria para el kernel, y para este último propósito se utiliza un gestor de memoria del kernel. 16. Almacenamiento Virtual (swap) Cuando no caben todos los programas en memoria principal hacemos uso de intercambio (swapping) 16.1 Swap: partición de disco que almacena imágenes de procesos 16.2 Swap out: cuando no caben en memoria procesos activos, se “expulsa” un proceso de memoria principal, copiando su imagen a swap (área de intercambio), aunque no es necesario copiar todo el mapa (ni código ni huecos). Existen diversos criterios de selección del proceso a intercambiar: 16.2.1 Dependiendo de la prioridad del proceso; 16.2.2 Preferencia a los procesos bloqueados; 16.2.3 No intercambiar si está activo DMA sobre mapa del proceso. 16.3 Swap in: Cuando haya espacio en memoria principal, se intercambia el proceso a memoria copiando imagen desde swap. Asignación de espacio en el dispositivo de swap: Con preasignación: se asigna espacio al crear el proceso; Sin preasignación: se asigna espacio al intercambiarlo (cuando se crea una región, no se hace ninguna reserva en el swap). La tendencia actual es utilizar la segunda estrategia, dado que la primera conlleva un peor aprovechamiento de la memoria secundaria, puesto que toda página debe tener reservado espacia en ella.
  • 19. 17. Asignación del Espacio para Intercambio por parte del Kernel 17.1 Dirección map que indica qué map usar + número unidades pedidas: 17.1.2 Éxito ⇒la dirección 17.1.3 Fracaso ⇒0 17.2 Asignar espacio para intercambio: El kernel busca en mapa 1ª entrada con suficiente espacio para la petición. Si petición consume todos los recursos de la entrada del mapa: El kernel quita la entrada del array. Mapa ⇒ Una entrada menos. En caso contrario Ajusta dirección y unidades acorde a cantidad recursos asignados Liberar espacio de intercambio: 17.3 El kernel busca posición adecuada en el mapa por la dirección. Casos posibles: 17.3.1 Recursos liberados llenan un hueco en el mapa ⇒Combinar todos los recursos en una entrada en el mapa. 17.3.2 Recursos liberados llenan parcialmente un hueco en el mapa y son contiguos a alguna entrada adyacente ⇒ Elkernel ajusta la dirección y unidades de la entrada apropiada de acuerdo a recursos liberados. 17.3.3 Recursos liberados llenan parcialmente un hueco en el mapa y no son contiguos a ninguna entrada ⇒ El kernel crea nueva entrada en el mapa para los recursos liberados y la inserta en la posición apropiada. 18. Intercambiar Procesos fuera de Memoria El kernel intercambia procesos al swap (memoria virtual) si necesita espacio en memoria: 18.1 Fork: Asignar espacio para el proceso hijo (crea un nuevo proceso). 18.2 Brk: Incremento tamaño del segmento de datos de un proceso.
  • 20. 18.3 Crecimiento pila proceso. 18.4 Para intercambiar procesos que había intercambiado al dispositivo de swap Todos los casos son iguales: Se decrementa contador de referencia de cada región del proceso; Lleva la región al swap si el contador de referencia el igual a 0; Salva dirección de swap de la región en la tabla de regiones. Swap de Expansión: Proceso requiere más memoria de la que tiene asignada en el momento (crecimiento pila o Brk) y no hay suficiente memoria disponible para satisfacer la petición. El kernel hace un swap de expansión del proceso en el que realiza los siguientes pasos: Reserva suficiente espacio en swap para el proceso, incluyendo petición actual. Ajusta el mapa de traducción de direcciones del proceso para la nueva configuración de la memoria virtual ⇒no asigna memoria física porque no está disponible. Intercambia el proceso fuera de memoria con nueva memoria igual a cero en el swap. Al volver a memoria, el kernel le asignará suficiente memoria según el nuevo mapa de traducción de direcciones. 19. Intercambiar Procesos entre Memoria Principal y swap Proceso 0, swapper (proceso del kernel) único capaz de mover procesos entre memoria y swap. Comportamiento: 19.1 Fin inicialización del sistema ⇒ swapper empieza un bucle infinito 19.2 Única tarea que tiene que hacer el swapper es intercambiar procesos desde swap: 19.2.1 Examina procesos “listos para ejecutarse en área de swap” y selecciona el que haya estado más tiempo intercambiado;
  • 21. 19.2.2 Si tiene suficiente memoria libre disponible asigna memoria física, lee el proceso desde el dispositivo de swap y libera la memoria en el mismo. 19.2.3 Si no tiene suficiente espacio en memoria principal, intenta intercambiar procesos al dispositivo de swap 19.3 Si no hay procesos para intercambiar a memoria, o ninguno de los procesos que hay en memoria pueden ser intercambiados al dispositivo de swap ⇒swapper se duerme, y se despierta: 19.3.1 El reloj, lo despertará una vez cada segundo en este estado (dormido). 19.3.2 El kernel si otro proceso va a dormir. 19.3.3 Vuelve a empezar desde el principio buscando más procesos. 20. Criterios del swapper para elegir un proceso para echarlo (intercambiarlo) de memoria: 20.1 Examina cada uno de los procesos que estén en memoria; 20.2 No examina ni Zombies, ni procesos bloqueados en memoria; 20.3 Prefiere “Dormidos” a “listos para ejecutarse”; (4) Elegir de los “Dormidos” los que menos f(prioridad, tiempo que proceso lleva en memoria) tengan; (5) Elegir de los “listos para ejecutarse” los que menos f(nice, tiempo que el proceso haya estado en memoria) tengan. 21. Paginación por Demanda Estructuras de datos para la gestión de memoria a bajo nivel y demanda de páginas (sistema de paginación): 21.1 Tabla de páginas (Figura4) 21.1.1 Entrada de la tabla de páginas: 21.1.1.1 Número de marco de página, es la dirección física de la página (Marco en la memoria real) 21.1.1.2 Protección, que indican si procesos pueden leer, escribir o ejecutar página (indica si está permitida la operación de escritura); 21.1.1.3 Válido, que indica si la página está en la memoria principal;
  • 22. 21.1.1.4 Referencia, que indica si un proceso referenció recientemente la página (se pone a cero cuando la página se carga por primera vez y puede ser restaurado periódicamente por el algoritmo de reemplazo de página); 21.1.1.5 Modificado, que indica si proceso modificó recientemente contenido de la página; 21.1.1.6 Copia en escritura, usado en fork, indica que el kernel debe crear nueva copia de la página cuando un proceso modifique su contenido (activo cuando más de un proceso comparte la página). 21.1.1.7 Edad, indica cuánto hace que la página pertenece al Working Set del proceso (indica cuánto tiempo ha estado la página en memoria sin ser referenciada). 21.1.2 El kernel manipula: válido, copia en escritura y edad. El hardware activa: referencia y modificado de cada entrada de la tabla de páginas. 21.1.3 Entrada del descriptor de bloques de disco (describe copia de disco de la página virtual): 21.1.3.1 Número de dispositivo de swap, indica el número de dispositivo lógico del dispositivo secundario que contiene la página correspondiente (se puede utilizar más de un dispositivo para el intercambio); 21.1.3.2 Número de bloque del dispositivo, indica la posición del bloque que contiene la página en el dispositivo swap; 21.1.3.3 Tipo de almacenamiento, el almacenamiento puede ser la unidad de swap o un archivo ejecutable, en este último caso, existe un indicador de si debe borrarse primero la memoria virtual a asignar. 21.1.4 Los procesos que comparten una misma región ⇒ Entradas comunes para la tabla de páginas y los descriptores de bloques de disco.
  • 23. 21.2 Descriptores de bloques de disco ⇒ Asociado a cada página de un proceso hay una entrada en la tabla que describe la copia en el disco de la página virtual. 21.3 Tabla de marcos de página (pfdata) ⇒ Describe cada marca de la memoria real y está indexada por el número de marco. 21.4 Tabla de uso de swap ⇒ Existe una tabla de uso de swap por cada dispositivo de intercambio, con una entrada para cada página en dicho dispositivo. El kernel asigna espacio para pfdata una vez durante la vida del sistema, aunque para las otras estructuras le asigna y desasigna espacio dinámicamente. Cada región contiene tablas de páginas para acceder a memoria física. (Figura4) 22. Sistema de Archivos En Unix todo se trata como ficheros. Los ficheros son una secuencia de bytes y los directorios son una colección de ficheros que a su vez contienen ficheros. Cada archivo tiene un nombre que le da el usuario para poder utilizarlo. Un nombre de archivo puede ser casi cualquier cadena de caracteres, donde el único carácter ASCII que no se puede usar es el slash (/), que en Unix se
  • 24. usa como separador de directorios y archivos. Existen otros caracteres que se recomienda no usarlos pues tienen significado especial para el intérprete de comandos de Unix, como son! # & ( ) * ' " ` ; | < > @ $ ^ { } ? : espacio backspace tab + - y los caracteres de control. Las mayúsculas y minúsculas son consideradas distintas en Unix y, por ejemplo, los nombres CARTA, carta y Carta corresponden a tres archivos distintos. Se recomienda que los nombres de archivo no tengan más de 14 caracteres porque, salvo casos especiales, Unix considera iguales a dos archivos si coinciden en los primeros 14 caracteres (esto no es el caso para versiones modernas de Unix, las que pueden aceptar nombres de archivo de más de 80 caracteres). dd es un comando de la familia de los Sistemas Operativos Unix que permite copiar y convertir datos de archivos1 a nivel bajo. Es generalmente usado para realizar operaciones avanzadas sobre dispositivos o archivos, como pueden ser: 22.1 Transferencias de datos específicos. 22.2 Copias de seguridad de la información en crudo (raw data). 22.3 Conversión de algunas codificaciones soportadas y/o caracteres predefinidos Es de mucha importancia aclarar que en sistemas operativos Unix, cualquier dispositivo es manejado como un archivo. Por lo tanto el comando dd, puede ser utilizado en diversos dispositivos y volúmenes (particiones), más allá de los archivos propiamente dichos. 23. Directorios Los directorios son la base del sistema jerárquico de archivos de Unix. Son grupos de archivos que sirven para clasificarlos y organizarlos de acuerdo a las necesidades de los usuarios. Un directorio puede contener otros directorios y archivos, y así sucesivamente. En teoría, no existe limitación del número de archivos y directorios que se puedan crear en un directorio, con excepción del
  • 25. tamaño del dispositivo donde se almacena. El sistema de directorios y archivos se puede graficar en lo que se conoce como estructura de árbol. / .---.---.---.---.---.---+---.---.---.---.---.---.---. | | | | | | | | | | | | | | | boot | etc | lib | opt | root | tmp | var bin dev home mnt proc sbin usr | | | .------^--.----.-----. .----.-----| httpd lgm memo rmg log run spool .------+-----. | | | cgi-bin html logs | pubwww | | .-----^--+------.------. | GNUstep monos pubwww recetas .------.--------^-. | disk escritos software .---^---. | | dibujos fotos .--^--. .--^----. tbr sds ch-city utils Este diagrama representa parte de un sistema de directorios y archivos típico, donde la raíz del árbol se encuentra en la parte superior. Se le llama directorio raíz o simplemente raíz y se denomina con el símbolo / (slash). De ella se ramifican todos los demás directorios del sistema. Por ejemplo, dentro del directorio home, que es un subdirectorio de la raíz, hay cuatro subdirectorios, httpd, lgm, memo y rmg, los que a su vez contienen otros subdirectorios. El directorio donde cada usuario se encuentra al iniciar la sesión se llama HOME o directorio de trabajo. Cada usuario tiene un único directorio de trabajo, desde el cual se puede mover hacia arriba y abajo en el árbol de directorios. Generalmente
  • 26. el directorio de trabajo es un subdirectorio del directorio /home, y tiene como nombre el nombre de presentación del usuario. Nótese que puede haber varios archivos con nombres iguales en distintos directorios, pero no dentro de un mismo directorio. Recuérdese que se considera la diferencia entre mayúsculas y minúsculas en la distinción de nombres de archivo. ¿Cómo se distinguen los archivos uno de otro? En Unix se pueden especificar nombres de archivo incluyendo los directorios en que están ubicados. Este tipo de nombre se llama nombre de camino o nombre de ruta, pues describe el camino a seguir para llegar al archivo. Son de dos tipos: 23.1 Nombres de camino relativos: Se llama así pues se especifica el camino en forma relativa al directorio actual. Por ejemplo, si estoy en el directorio de trabajo de rmg y quiero ver una foto que rmg tiene entre sus monos, se puede especificar de estas dos formas: /home/rmg/monos/fotos/lr1.jpg O monos/fotos/lr1.jpg Un punto único (.) se utiliza para referirse al directorio actual. Por ejemplo, el nombre de camino ./prog/cuentas Es el nombre de camino del archivo cuentas del directorio prog del directorio actual. Los dos puntos (..) especifican el directorio padre del directorio actual, que es el siguiente de más alto nivel en el árbol de directorios. Si estamos en el directorio /home/lgm/software/ch-city/ El directorio padre sería software, quien tiene como padre a lgm, quien a su vez tiene como padre a home, el que es hijo del directorio raíz ([/]). Este último es el único directorio sin padre, y [/../] es un sinónimo de [/]. El doble punto se utiliza para especificar cosas más abajo en el sistema de directorios. Por ejemplo, si estamos en /home/lgm/disk/, el nombre de
  • 27. camino relativo .../.../rmg/recetas/curanto.txt apunta al archivo cuya ruta completa (o nombre de camino completo) es /home/rmg/recetas/curanto.txt. 23.2 Nombres de caminos completos o absolutos: Los nombres de camino completos son los que van desde la raíz hasta un archivo. Por ejemplo: / /bin/sh /home/lgm/software/ch-city/COPYING /home/rmg/GNUstep/Library/WindowMaker/Backgrounds/termopila s.png /etc/httpd/conf/httpd.conf /usr/local/bin/0verkill /var/log/messages Los nombres de archivos y directorios se separan con slashes. En los nombres de camino completos, el primer / corresponde al directorio raíz. Especificar un nombre de camino completo elimina toda ambigüedad, ya que no pueden existir dos archivos con el mismo nombre de camino completo, pero puede ser molesto para el usuario. En la mayoría de los sistemas, es común mantener cinco, diez, más incluso, niveles de directorio y, especificar un nombre de camino como este: /mnt/cdrom/19971125/webs/xingzangwushuxuexiao.cn/html/zhongwen/xingz hang/lishi.html
  • 28. 24. Búsqueda de archivos (Figura5) El Shell es un programa interpretador de comandos que lee cada comando que ingresa el usuario y dispone lo necesario para que se ejecuten. En este capítulo daré a conocer ciertos aspectos del Shell estándar del sistema, como el inicio, las órdenes de entrada, los canales de entrada y salida, etc. La búsqueda se realiza mediante un árbol de directorios (Figura5) El comando find de Unix, nos permite buscar archivos dentro del árbol de directorios de nuestro sistema. Este comando acepta una gran cantidad de opciones. Vamos a ver algunas de ellas, pero para más información, siempre podremos acudir al comando man, para saber más sobre find, o sobre cualquier otro comando.
  • 29. 25. Sub-sistema de entradas y salidas El sistema de entrada/salida permite al CPU relacionarse con el mundo exterior, teclados, pantalla, impresoras, discos, etc. La comunicación de los CPU con un elemento externo es similar a la comunicación con la memoria, se leen y escriben datos. El comportamiento es distinto, los datos no siempre están disponibles y el dispositivo puede no estar preparado para recibirlo se divide en dos sistemas complementarios: el estructurado por bloques y el estructurado por caracteres. El primero se usa para manejar cintas y discos magnéticos, y emplea bloques de tamaño fijo (512 o 1024 bytes) para leer o escribir. El segundo se utiliza para atender a las terminales, líneas de comunicación e impresoras, y funciona byte por byte. En general, el sistema Unix emplea programas especiales (escritos en C) conocidos como manejadores (drivers) para atender a cada familia de dispositivos de E/S. Los procesos se comunican con los dispositivos mediante llamadas a su manejador. Además, desde el punto de vista de los procesos, los manejadores aparecen como si fueran archivos en los que se lee o escribe; con esto se logra gran homogeneidad y elegancia en el diseño. Cada dispositivo se estructura internamente mediante descriptores llamados número mayor, número menor y clase (de bloque o de caracteres). Para cada clase hay un conjunto de entradas, en una tabla, que aporta a los manejadores de los dispositivos. El número mayor se usa para asignar manejador, correspondiente a una familia de dispositivos; el menor pasa al manejador como un argumento, y éste lo emplea para tener acceso a uno de varios dispositivos físicos semejantes. Las rutinas que el sistema emplea para ejecutar operaciones de E/S están diseñadas para eliminar las diferencias entre los dispositivos y los tipos de acceso. No existe distinción entre acceso aleatorio y secuencial, ni hay un tamaño de registro lógico impuesto por el sistema. El tamaño de un archivo ordinario está determinado por el número de bytes escritos en él; no es necesario predeterminar el tamaño de un archivo.
  • 30. El sistema mantiene una lista de áreas de almacenamiento temporal (buffers), asignadas a los dispositivos de bloques. El Kernel usa estos buffers con el objeto de reducir el tráfico de E/S. Cuando un programa solicita una transferencia, se busca primero en los buffers internos para ver si el bloque que se requiere ya se encuentra en la memoria principal (como resultado de una operación de lectura anterior). Si es así, entonces no será necesario realizar la operación física de entrada o salida. Existe todo un mecanismo de manipulación interna de buffers (y otro de manejo de listas de bytes), necesario para controlar el flujo de datos entre los dispositivos de bloques (y de caracteres) y los programas que los requieren. 26. Manejo de los Dispositivos En teoría los dispositivos de entrada y salida se comunicarían con la CPU por los buses del sistema. Dado que son muy heterogéneos sería muy costoso que la CPU los manejase directamente. En UNIX los dispositivos aparecen como un fichero (típicamente en el directorio /dev). En algunos sistemas (p.e. solaris) este fichero es un enlace simbólico a donde está realmente el fichero del dispositivo. Tienen asignado un i-nodo, en donde además de indicar si es un dispositivo de bloque o de carácter, figuran dos números (major number y minor number) que indican que manejador de dispositivo se utiliza para acceder a él y que unidad dentro de las manejadas por dicho manejador # ls -li /dev/sda /dev/sda1 /dev/sda2 /dev/audio 4232 crw-rw---T+ 1 root audio 14, 4 Jan 7 18:51 /dev/audio 3106 brw-rw---T 1 root disk 8, 0 Jan 7 18:51 /dev/sda 3110 brw-rw---T 1 root disk 8, 1 Jan 7 18:51 /dev/sda1 3111 brw-rw---T 1 root disk 8, 2 Jan 7 18:51 /dev/sda2
  • 31. Para acceder a los dispositivos se pueden utilizar las mismas llamadas que para el acceso a los ficheros (open, read, write) siempre que el proceso que lo haga tenga los privilegios adecuados. También se puede acceder a las características (y demás funcionalidades) de los dispositivos mediante la llamada ioctl IOCTL(2) Linux Programmer’s Manual IOCTL(2) NAME ioctl - control device SYNOPSIS #include <sys/ioctl.h> int ioctl(int d, int request, ...); DESCRIPTION The ioctl() function manipulates the underlying device parameters of special files. In particular, many operating characteristics of char acter special files (e.g., terminals) may be controlled with ioctl() Por último, y debido a que los manejadores de los dispositivos son programas escritos en lenguaje C, es relativamente fácil reconfigurar el sistema para ampliar o eliminar dispositivos de E/S en la computadora, así como para incluir tipos nuevos.
  • 32. Referencias Electrónicas • http://wikis.uca.es/wikiunix/index.php/Clasificaci%C3%B3n • http://www.levenez.com/unix/ • Dennis M. Ritchie (September 1979) The Evolution of the Unix Time- sharing System Bell Labs. 1996. Lucent Technologies Inc • Bell Labs. It still remains a phenomenon The Creation of the UNIX* Operating System. • http://www.monografias.com/trabajos/unix/unix.shtml • http://www.monografias.com/trabajos75/sistema-operativo-unix/sistema- operativo-unix.shtml • http://iie.fing.edu.uy/ense/asign/admunix/procesos.htm • http://www.ual.es/~acorral/DSO/Tema_3.pdf