Sistema Operativo UNIX

1. Historia

Diaz, Gisela; Sors, Marina; Tabia, Patricia

UNIX nació en 1969 en una mainframe 635 de Genaral Electric. A la vez, los Laboratorios Bell de AT&T había completado el desarrollo de Multics, un sistema multiusuario que falló por su gran demanda de disco y memoria. En respuesta a Multics, los ingenieros de sistemas Kenneth Thompson y Dennis Ritchie inventaron el UNIX. Inicialmente, lo cargaron en una PDP-7, una computadora con solo 18 kilobytes de memoria. Este suministraba una larga serie de puertos. En 1970, UNIX pasa a una máquina PDP-11. Mientras que Ritchie diseña y escribe un compilador para lenguaje C. En 1971, UNIX recibió reconocimiento oficial de AT&T cuando la firma lo usó para escribir manuales. La segunda edición de UNIX fue realizada en 1971, y dio forma al UNIX moderno con la introducción del lenguaje de programación C, rompiendo la tradición de sistemas operativos escritos en lenguaje maquina y sobre los 18 meses siguientes, incorporaron el concepto de los pipes que representaron una nueva forma de tratamiento de datos. Las aplicaciones escritas en C pudieron ser fáciles de transportar entre diferentes variantes de UNIX. En esta situación nació el primer criterio de sistema abierto: portabilidad, la posibilidad de mover software desde una plataforma hardware a otra de una forma estándar. La portabilidad de UNIX se convirtió en el modelo de transportar aplicaciones en C desde un sistema UNIX a otro. En 1974, la quinta edición de UNIX fue adoptada en las universidades, por tratarse de un "sistema abierto" que proporciona todo el código fuente. En 1975, la sexta edición de UNIX fue desarrollada e iniciada para ser ampliamente usada. Durante este tiempo, los usuarios se hicieron activos, los grupos de usuarios fueron formados, y en 1977, Interactive System Corp. inició la venta de UNIX en el mercado comercial. Durante este tiempo, UNIX adquirió más poder, incluyendo soporte para procesadores punto flotante, microcódigo y administración de memoria. En el período entre 1977 y 1982, los Laboratorios Bell combinaron algunas variantes de AT&T dentro de un sistema simple, conocido comercialmente como UNIX System III. Los Laboratorios Bell más tarde añadieron muchas características nuevas al UNIX System III, llamando al nuevo producto UNIX System V. A comienzos de 1984, había sobre 100.000 instalaciones del sistema UNIX en el mundo. A pesar de que el sistema operativo y muchos de los comandos están escritos en C, UNIX soporta otros lenguajes, incluyendo Fortran, Basic, Pascal, Ada, Cobol, Lisp y Prolog. El sistema UNIX puede soportar cualquier lenguaje que tenga un compilador o intérprete y una interface de sistema que defina las peticiones del usuario de los servicios del sistema operativo de la forma estándar de las peticiones usadas en los sistemas UNIX. 1.1 UNIX Actuales El Sistema V Revisión 4 o SVR4 es la versión más actualizada del sistema UNIX de AT&T. La mejora más importante es la adición de soporte completo para redes de área local. La reorganización extensa del sistema de ficheros posibilita una mejor comparación de ficheros entre las máquinas de una red, permitiendo máquinas sin disco por primera vez en el sistema V y la administración remota es ahora posible a través de la red. El entorno de desarrollo en lenguaje C ha sido ampliamente mejorado en SVR4. Existe un nuevo compilador C que cumple la norma ANSI y que funciona mejor que las versiones anteriores. El enlace dinámico y las bibliotecas compartidas permiten a los programadores diferir muchos aspectos de sus programas. SVR4 incluye una interfaz gráfica de usuario completa y potente, el sistema de Ventanas X; y soporta una nueva organización de sistema de ficheros que permite muchas operaciones de ficheros mejoradas. Los ficheros mapeados en memoria mejoran la capacidad del buffer y paginamiento en las operaciones de E / S del sistema y la gestión de memoria se ha mejorado. También se ha añadido muchas ordenes nuevas y características del sistema. Se ha añadido capacidades de control de tareas y generalmente se pueden configurar múltiples consolas virtuales. Un nuevo sistema de planificación permite procesos en tiempo real y micro temporizadores. El sistema UNIX puede ampliar el rango completo de aplicaciones desde sistemas de tiempo compartido multiusuario hasta controladores dedicados de alto rendimiento. También la seguridad del sistema ha sido extensamente mejorada. 1.2 Características Muchas han sido las razones que han hecho posible la popularidad y el éxito del sistema UNIX: ♦ reutiliza el software, a través de la combinación de comandos simples en aplicaciones complejas. ♦ flexible: se adapta a muchas aplicaciones diferentes.

-1-

Sistema Operativo UNIX
♦ ♦ ♦ ♦ ♦ ♦ ♦

Diaz, Gisela; Sors, Marina; Tabia, Patricia

♦ ♦ ♦ ♦

potente: dispone de muchos comandos y servicios ya incorporados. Dispone de un lenguaje de control programable llamado SHELL. Emplea manejo dinámico de memoria por intercambio o paginación. Tiene capacidad de interconexión de procesos. Permite comunicación entre procesos. Tiene facilidades de redireccionamiento de entradas y salidas. Portabilidad: el sistema UNIX ha sido transvasado a casi cualquier computadora construida a tamaño grande o moderno. Se reconoce que el sistema proporciona el entorno adecuado para permitir el fácil traslado de aplicaciones desde microcomputadoras hasta maxicomputadoras, entre arquitecturas de máquinas más antiguas y más nuevas y especialmente entre diferentes versiones del sistema UNIX. Orientación a redes: Las versiones modernas del sistema UNIX están organizadas para el uso de red fácil y funcional. El sistema está escrito en un lenguaje de alto nivel, haciéndolo fácil de leer, comprender, y cambiar. Posee una simple interface de usuario con el poder de dar los servicios que los usuarios quieren. Provee de primitivas que permiten construir programas complejos a través de programas simples. eficiente, con facilidades de protección de archivos, cuentas y procesos. Usa un formato consistente para los archivos, haciendo a los programas de aplicación más fáciles de escribir. Provee una simple y consistente interface a los dispositivos periféricos. Es un sistema multiusuario y multitarea; cada usuario puede ejecutar varios procesos simultáneamente. Oculta la arquitectura de la máquina al usuario, haciendo fácil de escribir programas que se ejecutan en diferentes implementaciones hardware.

♦ Usa un sistema de archivos jerárquico que permite un mantenimiento fácil y una implementación
♦ ♦ ♦ ♦

Sin embargo tiene algunos inconvenientes: ♦ Comandos poco claros y con demasiadas opciones. ♦ Escasa protección entre usuarios. ♦ Sistema de archivo lento. 1.3 Requisitos de Hardware La versión SVR4 es un sistema operativo grande y complejo que requiere significativos recursos de la máquina con tamaño de palabra de 32 bits para ejecutarlo; si se puede elegir seleccione un 80386/DX con memoria caché y una velocidad de 20 MHZ o superiores. Las instalaciones mayores que soportan muchos usuarios o actúan como servidores pueden necesitar sistemas mas rápidos. La mayoría de las versiones del sistema SVR4 detectarán automáticamente las diferencias entre bus ISA y la arquitectura EISA, pero las configuraciones MCA u otras configuraciones de bus pueden requerir una versión especial del sistema SVR4. La mayoría de los sistemas RISC requerirán sus propias versiones. El sistema requiere cantidades significativas de memoria real (RAM) instaladas en la maquina. La versión SVR4 requiere al menos 4MB de RAM real, el verdadero potencial sería instalando de 6 a 8MB de memoria real. 2. Estructura del sistema La figura 1 describe la arquitectura de alto nivel de UNIX. El sistema operativo interactúa directamente con el hardware, suministrando servicios comunes a los programas y aislándolos de la particularización del hardware. Viendo el sistema como un conjunto de capas, el sistema operativo es comúnmente llamado como núcleo del sistema o kernel. Como los programas son independientes del hardware que hay por debajo, es fácil moverlos desde sistemas UNIX que corren en diferentes máquinas si los programas no hacen referencia al hardware subyacente. Los programas como el shell y los editores (ed y vi) mostrados en la capa siguiente interactúa con el kernel invocando un conjunto bien definido de llamadas al sistema. Las llamadas al sistema ordenan al kernel realizar varias operaciones para el programa que llama e intercambiar datos entre el kernel y el programa. Varios programas mostrados en la figura 1 son conocidos como comandos, pero los programas de usuario deben estar también en esta capa. Otros programas de aplicaciones pueden construirse por encima del nivel bajo de programas, por eso la existencia de la capa más exterior en la figura 1. Por

-2-

Sistema Operativo UNIX

Diaz, Gisela; Sors, Marina; Tabia, Patricia

ejemplo, el compilador de C estándar, cc, está en el nivel más exterior de la figura: invoca al preprocesador de C, compilador, ensamblador y cargador, siendo todos ellos programas del nivel inferior. Aunque la figura muestra una jerarquía a dos niveles de programas de aplicación, los usuarios pueden extender la jerarquía a tantos niveles como sea apropiado. Hay alrededor de 64 llamadas al sistema en System V, de las cuales unas 32 son usadas frecuentemente. Tienen opciones simples que las hacen fáciles de usar pero proveen al usuario de gran poder. El conjunto de llamadas al sistema y los algoritmos internos en los que se implementan forman el cuerpo del kernel. En resumen, el kernel suministra y define los servicios con los que cuentan todas las aplicaciones del UNIX. La estructura básica está formada por un núcleo, uno o más shells y diversos programas de aplicación.

2.1 Núcleo o Kernel: Es la parte central de UNIX, encapsula al equipo y ofrece sus servicios a los programas de aplicación. Reside permanentemente en la memoria principal. Así como el shell proporciona servicios a los usuarios, el núcleo proporciona servicios a los programas de aplicación, incluido el shell. Tiene las siguientes funciones: ♦ Creación de procesos, asignación de tiempos de atención y sincronización. ♦ Asignación de la atención del procesador a los procesos que lo requieren. Administración de espacio en el sistema de archivos, que incluye: acceso, protección y administración de usuarios; comunicación entre usuarios y entre procesos, y manipulación de E/S y administración de periféricos. Supervisión de la transmisión de datos entre la memoria principal y los dispositivos periféricos. 2.2 Shell: ♦ El shell permite modificar en forma dinámica las características con que se ejecutan los programas en Unís. ♦ Las entradas y salidas pueden ser redireccionadas o dirigidas hacia archivos, procesos y dispositivos. ♦ Es posible interconectar procesos entre sí. Cuando un usuario entra al sistema, debe indicar un nombre de entrada y una contraseña que sirve para que el sistema tenga en cuenta sus privilegios. El usuario más privilegiado es el administrador del sistema o súper usuario. Existen a la vez otros tipos de shell con diferentes características: BORNE SHELL: es él interprete de comandos básicos.

-3-

Sistema Operativo UNIX

Diaz, Gisela; Sors, Marina; Tabia, Patricia

C-SHELL: es él interprete de comandos creados en Berkeley( Universidad de California) para el sistema operativo BSD y para XENIX, un poco más completo que el anterior. Su programación es prácticamente lenguaje C. KORN SHELL: Se basa en los dos anteriores, añade posibilidades de programación avanzada, facilidades aritméticas y mayor rapidez de ejecución. 3. Sistema de Archivos (File System) 3.1 Organización de la información: La manera estándar de organizar la información es en archivos, estos son localizados dentro del disco porque son apuntados desde un lugar determinado, a este lugar se le denomina directorio. Sin embargo en UNIX no se utiliza un único directorio para apuntar a todos los archivos del sistema, sino que se crea una estructura jerárquica de directorios conocida como estructura en árbol. Se muestra un ejemplo de esta estructura jerárquica en la figura 2.

Esta organización permite agrupar los archivos de los diferentes usuarios e incluso de las diferentes aplicaciones en directorios separados, con lo que se evita el que se interfieran entre sí. Por otro lado, un mismo usuario puede organizar su propia información separando los archivos en diferentes directorios de acuerdo a su contenido. 3.2 Sistema de archivos: El conjunto formado por la estructura de archivos y directorios y las tablas de inodos, se denomina Sistema de Archivos o File System. En el caso de que el disco duro esté particionado, cada una de las particiones sería un sistema de archivos independiente. En el caso de que el sistema disponga más de un disco físico, cada uno será forzosamente un file system. Cada sistema de archivos dispondrá de su propia tabla de i-nodos que apuntarán a los bloques de datos de los archivos y directorios contenidos en él. El sistema de archivos está organizado como un árbol con un único nodo raíz llamado root (se escribe "/", y normalmente está en la primera partición del primer disco en su caso); todos los nodos que no son hojas de la estructura del sistema de archivo son directorios de archivos, y los archivos que están en las hojas del árbol son directorios, archivos regulares o archivos de dispositivos. El nombre de un archivo se obtiene por su camino que describe como localizarlo dentro de la jerarquía del sistema de archivos. El camino, o path name, es una secuencia de nombres de componentes separados por el carácter barra "/"; un componente es una secuencia de caracteres que identifican a un nombre de archivo único contenido en el componente (directorio) anterior. Para poder acceder a la información contenida en los restantes sistemas de operación es necesario realizar una operación denominada "montaje”. El sistema de archivos principal (root) está disponible automáticamente por el mero hecho de cargar el sistema. El resto de sistemas de archivos figuran como "montables". Montar un sistema de archivos significa enlazarlo a otro que esté disponible (normalmente el root). El punto de enlace de los dos sistemas de archivos se denomina "punto de montaje" y debe ser un directorio. Los archivos y subdirectorios de un sistema de archivos que no ha sido montado, no son accesibles. Una vez montado se podrán acceder como dependientes del directorio de montaje.

-4-

Sistema Operativo UNIX

Diaz, Gisela; Sors, Marina; Tabia, Patricia

A partir de ese momento, los archivos y directorios de los sistemas de archivos secundarios figurarán dentro de la estructura, colgando del directorio de montaje. Una vez montado todos los sistemas de archivos, la estructura es única, por lo que el disco o la partición en que esté físicamente un determinado archivo, es transparente para el usuario. La función de montaje y desmontaje de los sistemas de archivo es, normalmente, realizada por el administrador del sistema. El sistema de archivos, o file system, de UNIX está caracterizado por: • una estructura jerárquica, • tratamiento consistente de los datos, • la habilidad de crear y borrar archivos, • crecimiento dinámico de archivos, • la protección de los datos, • el tratamiento de los dispositivos periféricos como archivos. Cada sistema de archivos consta fundamentalmente de las siguientes partes: • Bloque de carga: Es el primero de cada sistema (bloque cero), está reservado para un programa de carga, y no tiene ningún significado en el sistema de archivos. Sólo se utiliza en el sistema de archivos principal. • Súper bloque: Es el bloque uno del dispositivo. Este bloque contiene información sobre el sistema de archivos, tales como su tamaño en bloques, el nombre del sistema de archivos, número de bloques reservados para i-nodos, la lista de i-nodos libres y el comienzo de la cadena de bloques libres. También contiene el nombre del volumen, momento de la última actualización y tiempo del último backup. Siempre reside en un bloque de 512 bytes. • I-nodos: A continuación del súper bloque están situados los bloques que contienen los i-nodos. El número de bloques de i-nodos varía dependiendo del número de bloques del sistema de archivos. El número de i-nodos está especificado en el súper bloque. Es una tabla que contiene información sobre las características de los archivos. Esencialmente es el bloque de control de los archivos. Hay un i-nodo por cada directorio y archivo del sistema de archivos. El i-nodo contiene una descripción del directorio o archivo, así como el lugar físico que ocupan sus bloques de datos. Los i-nodos sólo apuntan a los archivos o directorios de su mismo sistema de archivos. El UNIX mantiene la siguiente información para cada archivo; en la tabla de i-nodos: • Localización. • Tamaño. • Cuántos enlaces tiene el archivo. • Propietario. • Permisos de acceso. • Identificación de si es o no archivo. • Fecha de creación. • Fecha de modificación. • Fecha de último acceso. • Bloques de datos: El resto del espacio del dispositivo lógico consta de bloques de datos que contienen los datos actualmente almacenados en los archivos. El sistema de archivos está organizado en una estructura jerárquica. Este sistema jerárquico permite agrupar la información de los usuarios de una forma lógica. Permite manipular eficientemente un grupo de archivos como una sola unidad. No tiene ninguna limitación en su desarrollo, permitiendo un crecimiento dinámico tanto en su número como en su tamaño. El UNIX trata a los archivos de entrada o

-5-

Sistema Operativo UNIX

Diaz, Gisela; Sors, Marina; Tabia, Patricia

de salida del mismo modo que cualquier otro archivo. Los usuarios deberán "caminar" a través del árbol hasta encontrar el archivo deseado. Dentro del UNIX el usuario puede acceder a cuatro clases de archivos: • Directorios. • Ordinarios. • Especiales. • Fifo (Pipes). • Enlace (enlace duro; suave o enlace simbólico)

Canales de comunicación (tubería o pipe; socket)

3.3 Concepto de archivo (ordinarios): La estructura fundamental que utiliza UNIX para almacenar información es el archivo. UNIX mantiene la pista de cada uno de los archivos asignándole a cada uno, un número de identificación (i-number) que apunta a la tabla de i-nodos. El usuario, no obstante, indicará cada archivo por medio de su nombre asignado por el propio usuario. UNIX mantiene toda la información propia del archivo, excepto su nombre, en su inodo correspondiente. El nombre se encuentra en la entrada correspondiente del directorio al que pertenece. Todos los archivos UNIX son tratados como una simple secuencia de bytes (caracteres), comenzando en el primer byte del archivo y terminando con el último. La organización de los archivos en registros o bloques de una longitud fija, corresponde a la forma tradicional de organización de los datos en el disco. UNIX protege específicamente al usuario del concepto de registros o bloques. En su lugar, UNIX puede permitir que el usuario divida al archivo en registros, de acuerdo a un byte o conjunto de bytes especiales. Los programas son libres para organizar sus archivos, con independencia de la forma en que los datos estén almacenados en el disco. Un archivo puede estar representado por mas de un nombren uno o más directorios, a estos nombres múltiples se los conoce como enlaces. Existen dos tipos de enlaces, enlaces duros y enlaces suaves (simbólicos). Estos últimos, a diferencia de los duros, pueden apuntar a directorios y cruzar los límites de un sistema de archivos. El nombre de archivo ”.” en un directorio es un enlace duro al mismo directorio; y “..” es un enlace duro con el directorio padre. 3.4 Directorios: Prácticamente para todos los efectos, un directorio se comporta como un archivo, con la característica de que sus registros son de longitud fija. A pesar de lo comentado anteriormente, el contenido de los directorios no apunta directamente a los bloques de datos de los archivos o subdirectorios que dependen de él, sino a unas tablas (i-nodos) separadas de la estructura. Es desde estas tablas desde las que se apunta a los bloques físicos de los archivos dentro del disco. Cada registro en el directorio tiene una longitud de 16 bytes de los que: ♦ Los dos primeros contienen un apuntador (en binario) a la tabla de los i-nodos (i-number). ♦ Los catorce restantes contienen el nombre del archivo o subdirectorio (el número bytes por registro depende de la versión del UNIX, ya que hay versiones en que la longitud del nombre de un archivo puede llegar a 255 bytes). Cualquier directorio contiene un mínimo de dos entradas: • Una referencia a sí mismo (.). • Una referencia al directorio de que dependo o directorio padre (..), salvo en el directorio raíz que, al ser el comienzo de la estructura, esta referencia es también sobre sí mismo. 3.5 Archivos especiales: Los nombres de estos archivos identifican los dispositivos físicos hardware del equipo: • Discos magnéticos • Cintas magnéticas • Terminales • Líneas de comunicaciones • Etc. Todos los dispositivos son tratados como archivos. Existen archivos especiales para cada línea de comunicaciones, disco, unidad de cinta magnética, memoria principal, etc. Estos archivos en realidad están vacíos. Tienen por misión asociar entre sí los dispositivos y sus respectivos drivers. El sistema

-6-

Sistema Operativo UNIX

Diaz, Gisela; Sors, Marina; Tabia, Patricia

emplea dos números enteros, denominados número principal (14 bits) y número secundario (18 bits) y almacenados en el i-nodo del archivo, para acceder al dispositivo asociado. El número principal identifica una clase de dispositivo (en realidad identifica al driver de dicha clase como pueden ser terminales, impresoras, discos, etc.) y el número secundario identifica a un elemento de dicha clase (un terminal específico, un disco concreto, ...). 3.6 Ficheros de interés: /dev/fd[0-9] /dev/hd[a-z] /dev/sd[a-z] /dev/[hs]d[a-z][1-9] /etc/fstab /etc/mtab quota.user, quota.group 3.7 Principales directorios: /bin Contiene muchos de los archivos ejecutables correspondientes a los comandos. /usr/bin Contiene también ejecutables del mismo tipo. /usr/inclu Contiene librerías de lenguaje C. Muy útil para los programadores. de /dev Contiene archivos especiales asociados con dispositivos de entrada/salida. /etc Contiene entre otros, archivos ejecutables usados por el administrador. /tmp Utilizado para crear archivos temporales y de pruebas. Es borrado periódicamente por el sistema de forma automática. 3.8 Permisos de acceso de archivos y directorios: Cada archivo y directorio creado en UNIX tiene un propietario, normalmente la persona que lo ha creado. Ese propietario pertenece además a un grupo de usuarios. El propietario del archivo o directorio puede asignar varios tipos de permisos, para permitir o denegar el acceso al archivo o directorio. Los tipos de permisos de acceso son: Archivos: Lectura (r) Permitiría su acceso para lectura. Escritura (w) Permitiría su actualización. Ejecución (x) Permite que el archivo pueda ser usado como comando shell. Directorios: Lectura (r) Escritura (w) Ejecución (x) Permite ver su contenido. Permite crear o borrar archivos bajo él. Permite accederse a él. Interfaces con los dispositivos tipo disquetera Interfaces con los dispositivos tipo disco IDE Interfaces con los dispositivos tipo disco SCSI Interfaces con las particiones en los discos duros Archivo con la lista de sistemas de ficheros que se montan en el arranque Archivo con los s. f. que están montados actualmente en el sistema Archivos con la información de cuotas, almacenados en el directorio raíz del s. f.

Cada usuario puede especificar el permiso de acceso a sus archivos, seleccionando la adecuada combinación de tipos de permisos, con el fin de permitir o denegar el acceso a tres niveles de usuarios (propietario, usuarios de su grupo, y el resto de usuarios). 3.9 Operaciones fundamentales de administración: • Configurar particiones (fdisk) • Construir sistemas de archivos (mkfs) • Montar/desmontar sistemas de archivos (mount,umount) • Establecer cuotas de usuarios (quotaon, edquota, etc.)

-7-

Sistema Operativo UNIX
4. Control de procesos

Diaz, Gisela; Sors, Marina; Tabia, Patricia

Un programa es un archivo ejecutable, y un proceso es una instancia del programa en ejecución. En UNIX pueden ejecutarse varios procesos simultáneamente (esta característica es denominada algunas veces como multiprogramación o multitarea) sin un límite lógico en el número de ellos, y varias instancias del mismo programa pueden existir simultáneamente en el sistema. Algunas llamadas al sistema permiten a los procesos crear nuevos procesos, acabar procesos, sincronizar niveles de ejecución de procesos y controlar la reacción de algunos sucesos. Sujeto a sus propias llamadas al sistema, los procesos son independientes de los demás. El kernel del sistema UNIX no contiene muchas funciones que son parte del "kernel" en otros sistemas. Estos programas, incluyendo compiladores y editores, son programas a nivel de usuario en el sistema UNIX. El principal ejemplo de estos programas es el shell, el intérprete de comandos que los usuarios ejecutan normalmente al entrar en el sistema. El núcleo del sistema operativo UNIX conoce la existencia de un proceso a través de su bloque de control del proceso, donde se describe el proceso y su entorno (Variables que utiliza el proceso, Contenido de los registros hardware, Contenido de las estructuras del núcleo relacionadas con el proceso: Tabla de proceso, áreas, regiones, etc.). Cada proceso se reconoce dentro del sistema por un número que lo identifica unívocamente y que se conoce como Identificador del Proceso o PID. Estos comienzan en 0 cuando se arranca el sistema, y cada nuevo proceso obtiene el siguiente número hasta que se alcanza el máximo ( generalmente 32767), cuando esto ocurre la cuenta comienza de nuevo desde 0, sin embargo, un pid asignado a un proceso que sigue vivo no será reasignado a un nuevo proceso. Todos los procesos, excepto el proceso 0, son creados por otro proceso; es decir, el sistema de creación y gestión de procesos en UNIX es jerárquico. El proceso que se genera con el PID 0 es un proceso especial creado en el momento de arrancar el sistema, llamado Sched (planificador). Esta es la clave para la característica del sistema compartido en Unix y es el responsable de la determinación de que procesos entre los que están listos para ejecutarse obtendrán realmente acceso a los recursos del sistema. A continuación se genera un proceso Init (inicialización), el cual mantiene en ejecución los procesos permanentes del sistema. Este proceso tiene asignado el PID 1. A continuación viene Pageout, que gestiona la memoria virtual de la máquina e intercambia parte de los procesos activos entre el disco y la memoria real cuando son ejecutados o apartados temporalmente, su PID asignado es el PID 2. El proceso Kmdeamon (demonio de memoria del núcleo) maneja las mismas tareas las partes del propio sistema operativo, con número de PID 4. Los procesos Sched, Kmdeamon y Pageout, trabajan en conjunto y componen la parte medular del núcleo. A continuación está Fsflush (vaciado del sistema de fichero) que gestiona la E/S de disco en el sistema. Para evitar que los datos del los buffers no coincidan con los datos del disco provocando una falla en el sistema, Fsflush escribe periódicamente todos los buffers al disco. Este proceso tiene un PID 3. No hay fichero de disco que contenga los procesos ejecutables Sched, Pageout, Fsflush, o Kmdeamon, ya que son creados cuando el sistema es arrancado y permanecen vivos hasta que el sistema es desconectado. 4.1 Clases de prioridades: Generalmente la mayoría de los procesos tienen la misma prioridad , es decir, la misma cuota de tiempo de la CPU. La prioridad de tiempo compartido es la clase normal para las aplicaciones del usuario. Pero también se permite una nueva prioridad de tiempo real, esta permite al sistema Unix ser utilizado en aplicaciones que demandan respuesta rígida y rápida ya que siempre obtienen tiempo de CPU con preferencia a los procesos de tiempo compartido. El superusuario tiene permitido incrementar la prioridad de los procesos. Para esto se especific un argumento de prioridad negativo con la orden Nice (agradable- amistoso), por ejemplo: $ nice - -14 cat/etc/passwd Incrementará la prioridad de la orden cat en 14 unidades. $ nice cat/etc/passwd Reducirá la prioridad de la orden cat en 10 unidades (valor por omisión). $ nice –14 cat/etc/passwd Reducirá la prioridad de la orden cat en 14 unidades. El número es un valor de planificación arbitraria que puede ir desde 0 a 19. 4.2 Procesos subordinados: Generalmente la orden nice se utilizará en asociación con órdenes que se ejecutan desde el Shell, pero que corren en modo subordinado (background). El Shell dispone del operador & (ampersand) para permitir la ejecución de ordenes de modo subordinado, añadiéndose, al final de la linea.

-8-

Sistema Operativo UNIX

Diaz, Gisela; Sors, Marina; Tabia, Patricia

Cuando se ejecuta una orden utilizando &, el Shell vuelve inmediatamente para solicitar la instrucción de otra orden, aún cuando el proceso que acaba de ser creado sigue ejecutándose en el sistema. El Shell devuelve un pid de modo que el usuario puede referirse al trabajo subordinado, y luego vuelve al inductor para pedir otra orden. Ejemplo: $ cat/etc/passwd & 1536 $ En general la salida de este tipo de instrucción son redirigidas para que la sesión del terminal no se vea interrumpida por su salida: $ cat/etc/passwd > ficha.copia & 1540 $ El sistema Unix permite crear tantos trabajos subordinados como se quiera, aunque el rendimiento de sistema sufre notablemente. 4.3 La orden Ps: Esta orden muestra información de los procesos que están vivos en ese momento. Si se ejecuta la orden Ps sin argumento, esta muestra la información acerca de los procesos asociados con la sesión de presentación, por ejemplo: $ Ps pid tty time command 6756 tty00 0:01 –sh 6760 tty00 0:02 ps $ Cada proceso listado tiene un tiempo de ejecución asociado a él que es la cantidad total de tiempo del CPU que el proceso ha utilizado desde que comenzó, y su PID correspondiente. Si se acompaña la orden ps con la opcion –f (completa) se muestra mas información asociada a cada proceso. 4.4 Eliminación de procesos: Unix permite eliminar cualquier proceso del sistema excepto los PID 0, 1, 2, 3, y 4; sin embargo los usuarios tienen prohibido eliminar proceso que no sean de su propiedad. Se utiliza la orden KILL con un pid como argumento: $ kill 4356. Si la eliminación tiene éxito, el proceso desaparece de la salida de Ps. 4.5 Procesos padres y procesos hijos: El único modo de que un proceso nazca es que otro lo inicie. El proceso mas antiguo se llama proceso padre, y el nuevo, proceso hijo. Un proceso padre puede generar varios hijos, pero un proceso solo puede tener un padre. Cuando un proceso inicia otro (hijo), espera generalmente a que el hijo termine para reanudar sus actividades. Cuando el hijo se completa, el núcleo envía la señal 18 (muerte de un proceso hijo) al padre. El padre reconoce su muerte y el sistema continua. Si el padre del proceso hijo que termina está ocupado puede no reconocer la muerte del hijo y el sistema rehusa permitir que el hijo tenga una muerte normal y coloca al proceso en un estado defunct (difunto), en el cual el proceso no está realmente muerto, pero tampoco está en ejecución o utilizando tiempo de CPU. Tan pronto como el padre reconoce la muerte del hijo el proceso difunto desaparece del sistema. 5. Tipos de usuario A todo el que usa el sistema se le da un "nombre de usuario" (cuenta, login o identificativo de usuario) para utilizarlo cuando acceda al sistema. UNIX proporciona un entorno particularmente bueno para grupos de personas (usuarios) que trabajen conjuntamente en el mismo proyecto o proyectos relacionados. Todo usuario en UNIX pertenece a un grupo. El grupo tendrá asignado un nombre de grupo e identificador de grupo. Básicamente, hay dos tipos de cuentas de usuarios: • Cuentas de usuarios ordinarios. • Cuenta del superusuario. 5.1 Usuarios comunes:

-9-

Sistema Operativo UNIX

Diaz, Gisela; Sors, Marina; Tabia, Patricia

Son los más comunes. Tienen la siguiente información en su cuenta: • Un nombre de usuario. • Una clave de acceso o palabra de paso (password). • Un identificador de grupo (group identification). Cada usuario es conocido en el sistema de forma individual o como miembro de un grupo. Como miembro de un grupo, puede llegar a tener permiso para acceder a archivos y directorios que no tendría de forma individual. • Un directorio personal (home directory o $HOME).

Un shell de conexión (login shell). En pantalla se indica mediante un prompt que su forma dependerá del tipo de shell.

5.2 Superusuario: Cualquier sistema UNIX debe tener un superusuario. Su nombre de usuario (login) es "root". El superusuario es el que tiene poderes olímpicos sobre la ejecución (y la posible destrucción) del sistema. El superusuario no está restringido por ninguna de las protecciones de que dispone el sistema: puede obtener cualquier fichero, puede cancelar cualquier proceso. Hay algunas operaciones del sistema que sólo el superusuario puede realizar. Fijar la fecha del sistema, montar un sistema de ficheros, crear nuevos usuarios y declarar ficheros especiales son algunos ejemplos de ellas. Hay varias maneras de llegar a ser superusuario. La primera de ellas es llevar el sistema al estado monousuario. Esta situación ocurre cuando se arranca el sistema. En el momento de la carga inicial, el shell inicial se ejecuta con todos los privilegios del superusuario. En un sistema multiusuario se puede salir de sesión para entrar de nuevo como superusuario, o se puede obtener la categoría de superusuario por medio de un comando. Se identifica porque aparece en pantalla un prompt especial (el carácter #). 6. Administración de usuarios. 6.1 Introducción: La administración de la cuenta de los usuarios y sus grupos de trabajo implica una gran responsabilidad, pues el primer paso para mantener la seguridad del sistema consiste en evitar el acceso al mismo de personas no autorizadas. Esta tarea se realiza asignando y manteniendo identificativos y contraseñas de acceso al sistema. Para que un usuario pueda acceder al sistema, debe estar previamente registrado ante el mismo. Esta tarea, realizada por el administrador del sistema, afecta a tres archivos: /etc/passwd, /etc/shadow y /etc/group. Sin embargo, estos archivos no deben ser editados directamente, para evitar errores que los corrompan, pues son críticos para el acceso al sistema. Por tanto, el registro de usuarios se realiza por medio de un conjunto de utilidades suministradas con el sistema. 6.2 Archivo /etc/passwd: Este archivo es consultado por el proceso login cuando un usuario se identifica, para ver si figura el identificativo en el mismo, y si es así localizar la información pertinente para dejarle correctamente conectado al sistema. En este archivo existe una línea por cada usuario registrado ante el sistema. Cada registro consta de siete campos, separados por el carácter ":" de la siguiente forma: usuario:contraseña:user-id:group-id:comentario:directorio:shell con el significado siguiente: usuario contraseña user-id Nombre con el que puede identificarse un usuario cuando el sistema el login a un terminal. En versiones anteriores, en este campo se almacenaba la contraseña de acceso del usuario, en forma encriptada. Actualmente contiene un carácter "x" y la contraseña y sus características están en el archivo /etc/shadow. Número asignado al usuario para identificarlo internamente. Este número es utilizado por el sistema para efectuar los controles de propiedad de archivos y subdirectorios. Los números más bajos quedan reservados para los usuarios con privilegios de administrador. Número que identifica el grupo al que se asocia ese usuario. Debe tener una correspondencia con el archivo /etc/group. Afectará a los permisos de acceso a archivos a nivel de grupo.

group-id

- 10 -

Sistema Operativo UNIX
comentario directorio shell

Diaz, Gisela; Sors, Marina; Tabia, Patricia

Normalmente contiene información sobre el propietario del login, como puede ser su nombre completo, su dirección, etc. Ruta completa del directorio HOME, en el que sitúa al usuario cuando tanto el identificativo como la contraseña son correctos. Nombre completo del proceso que se arrancará automáticamente para el usuario cuando se identifica. Aunque puede ser cualquier programa ejecutable, normalmente será un intérprete de comandos (shell).

6.3 Archivo /etc/shadow: Este archivo, totalmente crítico para la seguridad del sistema, contiene toda la información relativa a las contraseñas de acceso de los usuarios. En el archivo /etc/shadow existe una línea por cada uno de los usuarios registrados en el sistema. En cada una existen ocho campos separados por el carácter ":", siguiendo la siguiente estructura: usuario:contraseña:cambio:mínimo:máximo:aviso:inactividad:expiración:flag donde cada campo adquiere el siguiente significado: usuario contraseña Nombre del usuario al que corresponde la información que va a continuación. Debe coincidir con un usuario registrado en el /etc/passwd. Este campo contiene la contraseña puesta por el usuario después de ser encriptada por un algoritmo. Ocupa un total de trece caracteres. Sin embargo, si se acaba de crear el usuario puede aparecer vacío para indica que no tiene contraseña. Cantidad de días que han pasado desde el 1 de Enero de 1970 hasta la fecha del último cambio de la contraseña. Se utiliza como base de cálculos para los campos siguientes. Cantidad de días, a partir desde el último cambio de contraseña en que el usuario no puede volver a cambiarla. Cantidad máxima de días, desde el último cambio de contraseña, en que ésta es válida. Pasado este tiempo el usuario se verá obligado a volver a cambiarla. Cantidad de días antes de llegar a máximo, en que el sistema avisa de que hay que cambiar la contraseña. Máximo de días de inactividad permitidos al usuario. En caso de que se exceda ese número de días el sistema dé de baja al mismo. Fecha, en absoluto, a partir de la cual no puede utilizarse ese identificativo de usuario. Está reservado para uso futuro. Actualmente aparece siempre en blanco.

cambio mínimo máximo aviso inactividad expiración flag

6.4 Archivo /etc/group: En este archivo se almacenan los grupos existentes en el sistema y los usuarios asignados a cada grupo. Cada entrada en este archivo tiene la sintaxis siguiente: grupo:contraseña:group-id:usuarios donde cada campo tiene el siguiente significado: grupo Nombre asignado a ese grupo. contraseña Contiene la contraseña encriptada de grupo. En versiones modernas de UNIX este campo no se utiliza pero se mantiene en blanco por compatibilidad con versiones antiguas. group-id Número que identifica al grupo internamente para el sistema. Se utiliza para comprobar los permisos al nivel de grupo. usuarios Lista con los nombres de los usuarios (que aparecen en /etc/passwd) que están asignados a cada grupo. Aparecen separados por comas. Un mismo usuario puede estar asignado simultáneamente a varios grupos, pero el principal será aquel que figura en el campo correspondiente de /etc/passwd. No es necesario incluirse en el grupo en el que se creó un usuario. 6.5 Establecimiento del entorno de usuario: El administrador tiene la posibilidad de establecer un entorno general de trabajo para todos los usuarios, pero a su vez el usuario en sí dispone de una forma para establecer su propio entorno individual, de tal manera que por el mero hecho de identificarse este entorno quede creado.

- 11 -

Sistema Operativo UNIX

Diaz, Gisela; Sors, Marina; Tabia, Patricia

Con este objetivo existen el archivo /etc/profile y un archivo. Profile en el directorio Home de cada usuario. 6.5.1 Archivo /etc/profile: Una vez que el usuario se identifica correctamente, se ejecuta de forma automática el shellscript contenido en este archivo. Dado de que este contenido es el mismo para todos los usuarios, permite crear el entorno general. Durante la ejecución de este shellscript se pueden efectuar una serie de operaciones de interés general para los usuarios, tales como: • Se ejecuta un comando umask para modificar los permisos por defecto a la hora de crear nuevos archivos. • Se analiza la existencia del archivo /etc/motd. Si este archivo existe, se lista su contenido. • Se establecen los parámetros por defecto para el terminal. • Se analiza si el usuario que se acaba de identificar tiene correo en su buzón. Si es así se visualiza un mensaje de aviso. • Se analiza la existencia de algún "boletín de noticias" (news) que aún no haya sido leído por el usuario, visualizando su nombre en caso de que lo haya. El archivo /etc/profile, es de propiedad del administrador y, por lo tanto, puede ser modificado cuando lo desee para eliminar aquello que no le guste o para añadir todo lo que quiera que se ejecute cada vez que se identifica un usuario. 6.5.2 Archivo $HOME/.profile: Este archivo se crea en el directorio Home del usuario cuando es añadido al sistema. Normalmente se copia desde el existente en /etc/skel. El archivo .profile, salvo que así lo disponga el administrador, es de propiedad del usuario y por lo tanto cada uno puede modificarlo a su gusto para crearse su entorno individual. 6.6 Comunicación con los usuarios: El administrador del sistema dispone de diferentes métodos para ponerse en comunicación con los usuarios a través del sistema. Dependiendo del motivo que provoque esta necesidad unos serán más convenientes que otros. Algunos de estos métodos son los siguientes: Archivo /etc/issue: El contenido de este archivo aparece en la pantalla precediendo al mensaje que solicita el login. Por lo tanto antes incluso de la identificación del usuario. Archivo /etc/motd: Cuando un usuario se identifica ante el sistema, se ejecuta el shellscript contenido en el archivo /etc/profile y una de sus misiones es visualizar el contenido de este archivo. Por lo tanto aparecerá en pantalla antes de que el usuario reciba el mensaje prompt. Se suele utilizar Para informar a todos los usuarios que se identifiquen, de algún evento a producirse en ese día de ahí su nombre "Mensaje del día". Comando wall: Envía un mensaje a todos los usuarios activos del sistema. Se utiliza para enviar mensajes urgentes, como avisar de que se va a apagar el equipo, etc. Boletín de noticias: Las noticias son creadas por el administrador creando archivos en el directorio /var/news. Los usuarios son avisados de la existencia de estas noticias, desde /etc/profile, cuando se identifican, pero una vez leídas (con el comando news) no vuelven a ser mostradas. Permite enviar documentos largos. 7. Comunicación entre usuarios

- 12 -

Sistema Operativo UNIX

Diaz, Gisela; Sors, Marina; Tabia, Patricia

En el sistema UNIX se dispone de una serie de medios para establecer distintos sistemas de comunicaciones entre los usuarios. A continuación se describen los diferentes comandos que permiten comunicarse entre sí a los usuarios.

7.1 Correo (mail): Este comando permite a los usuarios enviarse mensajes entre sí, por medio de sus correspondientes buzones. Si el usuario receptor estuviera identificado ante el sistema, se le enviará un mensaje a su pantalla indicándole la recepción, en su buzón, del nuevo mensaje. El mensaje recibido será: You have mail Si el receptor no estuviese conectado al sistema, el mensaje se almacenará en su buzón, y al usuario se le enviaría este mismo mensaje en el momento de la conexión ante el sistema. El receptor no está obligado a leer el correo inmediatamente. Si no lo hace, el mensaje se repetirá periódicamente para recordarle que tiene correo en su buzón. Este comando permite tanto el envío como la lectura de los mensajes recibidos. 7.2 Write: Este comando permite la comunicación interactiva y directa con otros usuarios conectados actualmente al UNIX. Cuando el receptor de un comando write lo recibe en pantalla, aparecerá en ésta el siguiente mensaje: Message from Si desea conectarse con ese usuario deberá enviarle un comando write. Una vez enviado, se establece comunicación directa entre ambos, por lo que se deberá establecer un protocolo que regule el envío mutuo de mensajes. El estandarizado es: • Cuando escriba la primera vez a un usuario, espere a que el usuario le responda antes de empezar a enviar su mensaje. • Cada parte terminará cada mensaje con una señal distintiva; por ejemplo: -o-- Cada parte usará una señal distintiva cuando desee termina la conversación; por ejemplo -oo-. 7.3 Wall (write all): Este comando permite escribir a todos los usuarios que en ese momento estén trabajando con el sistema. Los mensajes van siempre precedidos por la siguiente cabecera: Broadcast Message from ... Suele ser frecuente su empleo como un sistema busca personas, o bien, para avisar a los usuarios de una inminente desconexión del sistema. Este comando es más una herramienta del administrador del sistema que de usuario. 7.4 News: El comando news es utilizado para poder acceder a los mensajes tipo news que pueda haber enviado el administrador. El comando lee la información localizada en el directorio /usr/news. Una vez leídos los items enviados por el administrador no aparecerán de nuevo y no podrán ser accedidos.

- 13 -