32
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

Trabajo os unix

Embed Size (px)

Citation preview

Page 1: Trabajo os unix

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

Page 2: Trabajo os unix

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

Page 3: Trabajo os unix

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.

Page 4: Trabajo os unix

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

Page 5: Trabajo os unix

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

Page 6: Trabajo os unix

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

Page 7: Trabajo os unix

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

Page 8: Trabajo os unix

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.

Page 9: Trabajo os unix

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.

Page 10: Trabajo os unix

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

Page 11: Trabajo os unix

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

Page 12: Trabajo os unix

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

Page 13: Trabajo os unix

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.

Page 14: Trabajo os unix

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.

Page 15: Trabajo os unix

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.

Page 16: Trabajo os unix

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.

Page 17: Trabajo os unix

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

Page 18: Trabajo os unix

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.

Page 19: Trabajo os unix

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.

Page 20: Trabajo os unix

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;

Page 21: Trabajo os unix

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;

Page 22: Trabajo os unix

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.

Page 23: Trabajo os unix

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

Page 24: Trabajo os unix

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

Page 25: Trabajo os unix

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

Page 26: Trabajo os unix

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

Page 27: Trabajo os unix

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

Page 28: Trabajo os unix

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.

Page 29: Trabajo os unix

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.

Page 30: Trabajo os unix

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

Page 31: Trabajo os unix

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.

Page 32: Trabajo os unix

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