Monotarea: El sistema operativo permite ejecutar solo una tarea a la vez.
Características del Sistema Operativo UNIX:
MODIFICABLE: Los laboratorios Bell diseñaron el sistema para que pudiese ser modificado fácilmente. El hecho de estar escrito en su mayoría en lenguaje C posibilita leer, entender, cambiar y mover el sistema a distintas plataformas. Además provee primitivas que permiten la construcción de programas complejos a partir de programas simples.
PORTABLE: Es un sistema operativo independiente de la máquina, y que puede ser ejecutado en distintas arquitecturas (mainframes, minis y micro-computadores). Oculta la arquitectura del equipo y permite escribir programas que corran en varias plataformas.
ROBUSTO y ESCALABLE: Es un sistema operativo que se ha caracterizado por su gran robustez y estabilidad, y por ser de gran escalabilidad.
POTENTE: Es un sistema operativo relativamente pequeño, construido a partir de unas pocas ideas básicas que pueden ser combinadas para formar un entorno de usuario de considerable potencia.
DISEÑO: El diseño elegante del sistema y su versatilidad lo han convertido en un sistema muy popular. Posee un File System jerárquico que permite fácil mantenimiento e implementación eficiente. Tiene además una interfase simple y consistente con dispositivos periféricos.
Arquitectura del Sistema
La arquitectura del sistema se organiza en una serie de capas como lo muestra el siguiente diagrama.
- Capa 1
Se encuentra el hardware, que provee al sistema de los servicios básicos (interrupciones, excepciones, niveles de ejecución del procesador, manejo de memoria)
- Capa 2
En la capa 2 se encuentra el kernel (núcleo del sistema operativo) que interactúa directamente con el hardware, brinda servicios a los programas y encapsulando detalles del hardware
- Capa 3
En la capa 3 se encuentran los programas, como el Shell o los editores, q interactúan con el kernel accediendo a los servicios provistos por el mismo atraves de los system calls.
- Capa 4
En la capa 4 se encuentran programas de aplicación como lo es el compilador de C (cc)
Servicios provistos por el Kernel
- Gestión de los procesos: control de la gestión de los procesos, permitiendo su creación, terminación, suspensión y comunicación, así como la selección de procesos para su ejecución en el CPU (Scheduling).
- Gestión de la memoria: asignación de memoria para 1 proceso en ejecución. Permite a los procesos compartir ciertas porciones de su espacio de memoria bajo ciertas condiciones y protege el espacio de memoria privado de un proceso.
- Gestión del File System: se encarga de la estructuración del File System, la asignación del espacio en disco para los archivos del usuario y la protección de los archivos del usuario contra accesos no permitidos.
- Gestión del hardware: permite a los procesos tener y controlar los dispositivos periféricos como terminales, impresoras, disketeras y dispositivos de red.
- Libraries: la apariencia de las system calls es la de una llamada a una función en C y las bibliotecas mapean estas llamadas a las primitivas del sistema.
- File subsystem: el subsistema de manejo de archivos gestiona el almacenamiento de datos, manejando los archivos, asignando espacio para los mismos, administrando el espacio libre, controlando el acceso a archivos y permitiendo el acceso a los datos de los mismos.
- Buffer Cache: el subsistema de manejo de archivos accede a los datos de un archivo usando un mecanismo de buffering que regula el flujo de datos entre el kernel y los dispositivos de almacenamiento.
- Block I/O device drivers: el mecanismo de buffering interactúa con los manejadores de dispositivos de los bloques de entrada/salida para iniciar la transferencia desde/hacia el kernel. Los manejadores de dispositivos son módulos del kernel que controlan la operación de los dispositivos.
- Block I/O device drivers process control subsystem: el subsistema de control de procesos es el responsable de:
- Sincronizacion de procesos
- Comunicación entre procesos ,
- Manejo de memoria
- Selección de procesos
- Memory management: este modulo controla la asignación de memoria. Si en cualquier momento el sistema no tiene suficiente memoria física para todos los procesos, el kernel mueve los procesos entre la memora principal y la memoria secundaria (swapping).
- Hardware Control: este modulo es el responsable del manejo de las interrupciones y la comunicación del equipo.
System Calls
Los servicios que provee el kernel a los programas pueden ser accedidos atraves de las system calls.
La ejecución de los procesos en UNIX se divide en dos niveles: modo usuario y modo kernel.
Cuando un proceso ejecuta una SC pasa de modo usuario a modo kernel, y el kernel intenta satisfacer el requerimiento del proceso.
El System Calls para el subsistema de manejo de archivos provee:
- Acceso a archivos existentes: open, read, lseek, close.
- Creación de nuevos archivos: create, mknod.
- Manejo atraves del file system: chdir, chown, chmod.
- Creación y borrado de links: link y unlink.
El System Calls para el subsitema de control de procesos prove:
- Fork
- Exec
- Kill
- signal
El Proyecto GNU y la Free Software Foundation
El proyecto GNU se inició en 1984 con el objeto de liberar a los administradores de sistemas de las restricciones que imponían las arquitecturas propietarias, a través de la construcción de un sistema operativo al estilo UNIX que pasara a formar parte del conjunto de programas conocidos como free software.
El término free software a menudo conduce a malas interpretaciones al asociarse a una cuestión de precio, cuando de hecho no tiene que ver con este último elemento. La definición de lo que se entiende por free software puede esgrimirse como sigue:
Un programa es free software para nosotros sí:
- Somos libres de ejecutar el programa, de utilizarlo para nuestros propósitos, cualesquiera que estos sean.
- Somos libres de modificar el programa para adaptarlo a nuestras necesidades (para que esta "libertad" sea de aplicación práctica es necesario que contemos con el código fuente del programa).
- Tenemos la libertad de distribuir copias, bien en forma gratuita o bien cobrándolas.
- Tenemos la libertad de distribuir versiones modificadas de esos programas, beneficiándose de esta forma la comunidad de la cual obtuvimos el programa original.
Todo el software producido por el proyecto GNU es free software, a los efectos de evitar que ese software – o variaciones del mismo – se conviertan en productos propietarios de alguna compañía, las distribuciones del mismo contienen cláusulas de copyleft (por oposición a Copyright) que establecen que podemos usar, copiar, modificar y distribuir nuevas versiones, lo único que no nos está permitido es agregar restricciones por cuenta nuestra. De esta forma se intenta garantizar que aquello que nace como free software, siga siéndolo y re-alimente a la comunidad de la que salió.
La implementación del copyleft que se utiliza con la mayoría del software de GNU está plasmada en lo que se conoce como la GNU General Public License, que se distribuye con los programas y establece -de por sí- que toda copia o nueva distribución basada en el código que se está obteniendo, también debe contenerla.
En 1985 se fundó la Free Software Foundation, como un organismo de promoción del desarrollo del software free. Uno de los roles fundamentales de esta fundación es la recaudación de fondos, mediante la venta de distribuciones con código fuente o binarios, manuales y distribuciones completas de software para variadas plataformas.
Otro de los trabajos importantes obtenidos de la FSF ha sido la producción de software en sí; ejemplos notables son la GNU C compiler (gcc), GNU C Library y el shell: BASH (Bourne-Again Shell).
El sistema cuyo desarrollo tenía originalmente por objeto el proyecto GNU estuvo casi listo alrededor de 1990, luego de varias demoras ocasionadas básicamente por el propio carácter "voluntario" del desarrollo. El elemento faltante era el kernel.
En 1991, Linus Torvalds desarrolló Linux, un kernel de un sistema operativo estilo UNIX. Este fue el kernel adoptado por el proyecto GNU y dió lugar al sistema definitivo, denominado GNU/Linux, para dejar nota de la importancia relativa que tuvo el desarrollo de Linux en el logro de objetivos en el proyecto.
En la actualidad, existen algunas cuantas distribuciones de Linux, cada una soportada por organizaciones que extienden sus ofertas de productos y servicios a todo el globo.
A continuación se detallan algunas: Caldera Systems , Lineo, RedHat, SuSE Linux, Debian, Corel Linux,
Mandrake, Slackware Linux, Storm Linux, Turbo Linux.
SHELL
Concepto:
El shell, también denominado intérprete del sistema, es un comando que lee e interpreta líneas tanto de un archivo de texto como de la entrada estándar (la terminal). Generalmente éstas líneas contienen comandos, el intérprete es responsable de ejecutarlos. Digamos que interpreta comandos entre nosotros y la computadora, hace que la computadora entienda lo que le estamos pidiendo.
Lo técnico:
Es el programa que está corriendo cuando un usuario se loguea en el sistema.
Implementa un lenguaje que tiene constructores de control de flujo, una facilidad de macros que provee variedad de características, además del almacenamiento de datos. Tiene capacidades de historia interna, y edición de línea.
Los comandos se pueden ejecutar directamente en el shell corriendo, o pueden ser creados a un archivo y el archivo puede ser ejecutado directamente por el shell. O sea que el lenguaje interpretativo es común a los usos interactivos y no interactivos.
BASH (GNU Bourne-Again Shell):
Del man de bash:
Bash es un intérprete de lenguaje de comandos compatible con sh que ejecuta comandos desde la entrada estándard o de un archivo. Bash también incorpora características útiles de los shells Korn y C (ksh y csh).
Scripts:
Generalmente, los archivos de texto con comandos son denominados scripts. Son archivos comunes de texto con permisos de ejecución. En Bash, identificamos a los scripts con la extensión ".sh".
Directorios más importantes
/bin Aquí están los programas esenciales del sistema. (cp , echo, awk, etc)
/boot es donde están los archivos de arranque del sistema.
/dev Aquí están los controladores de dispositivos (device drivers) son usados para acceder a los dispositivos del sistema y recursos, como discos duros, módem, memoria, etc.
/home Contiene los directorios "home" de los usuarios.
/lib Contiene las imágenes de las librerías compartidas. Estos archivos contienen código que compartirán muchos programas.
/proc Es un "sistema de archivos virtual". Los archivos que contiene realmente residen en memoria, no en un disco. Hacen referencia a varios procesos que corren en el sistema, y le permiten obtener información (colocada por el kernel) acerca de que programas y procesos están corriendo en un momento dado.
/root En Linux es el Home Directory del usuario "root".-
/tmp Archivos temporales
/usr Contienen una serie de subdirectorios que contienen a su vez algunos de los más importantes y útiles programas y archivos de configuración del sistema operativo.
El más importante es /usr/src/Linux, (aquí están los fuentes del kernel).
/var Contiene directorios que a menudo cambian su tamaño o tienden a crecer.
Sistema de archivos UNIX
Definición: Dispositivo (hdd, floppy, CD-ROM) formateado para almacenar archivos.
ext2fs: Second Extended Filesystem. Utilizado para almacenar archivos en Linux
FAT: Acceso a archivos en particiones o diskettes formateados con MS-DOS (Win).
ISO 9660 FS: Acceso a archivos en CD.
- Se caracteriza por:
- Estructura jerárquica.
- Tratamiento consistente de los datos de los archivos.
- Habilidad de crear y borrar archivos.
- Crecimiento dinámico de archivos.
- Protección de los archivos.
- Tratamiento de dispositivos perifericos como archivos.
- El fie system está organizado en forma de árbol con un nodo raíz llamado root ("/")
- Las ramas del árbol pueden ser: directorios, archivos regulares o archivos de dispositivos.
- El nombre de un archivo esta dado por un path name que describe como localizar el archivo en la estructura jerárquica de archivos y directorios del file system.
- Un path name absoluto comienza con /
- Cada uno de los nombres del archivo es un link al mismo.
- El acceso a un archivo está controlado por los permisos de acceso asociados al mismo.
- 1- el dueño del archivo
- 2- los usuarios miembros del grupo primario del archivo
- 3-todos los demas usuarios del sistema
- Los permisos son de lectura, escritura y ejecución
- UNIX trata los dispositivos como si fueran archivos .
- Los programas acceden a los dispositivos con la misma sintaxis que cuando acceden a archivos regulares.
- La representación interna de un archivo está dada por un inode(nodo i (index node)) que contiene información como :
- 1 el dueño del archivo
- 2 los permisos de acceso
- 3 los tiempos de acceso, etc
- Todo archivo tiene un inode, pero podría tener muchos nombres, siendo cada nombre un link al archivo.
- Cuando un proceso crea un archivo, le asigna un inode que no esté en uso.
- Los inodos son almacenados en el sistema de archivos, pero el kernel los lee dentro de una tabla de indodes cuando manipula archivos.
- El kernel contiene otras dos estructuras de datos, la file table (tabla de archivos), y la user file descriptor table (tabla de descriptor de archivos de usuarios).
- La file table es una estructura global del kernel, mientras que la user file descriptor table es asignado por proceso
- Una instalación puede tener muchos discos cada uno de los cuales puede tener uno o más filesystems.
- El kernel trata en un nivel lógico con los filesystems en lugar de los discos físicos, tratando a cada filesystem como un logica ldevice identificado con un número.
- La conversión entre las direcciones del logical device y las del physical device es realizada por el disk driver
- Un file system consiste de una secuencia de bloques lógicos cada uno de los cuales contiene 512, 1024, 2048 o cualquier multiplo de 512 bytes, dependiendo de la implementación del sistema.
Montaje: Operación que hace que los archivos contenidos en un filesystem queden disponibles.
Comando: mount -t (tipo) device mount-point Ejemplo: mount -t ext2fs /dev/hd0a /mnt
mount -t msdos /dev/fd0 /mnt
Desmontaje: Desconecta un dispositivo con el sistema de archivos del sistema. Necesaria antes de retirar un dispositivo. Se sincronizan los buffers de escritura, se desliga al dispositivo del punto de montaje.
unmount /dev/fd0 No debería retirarse un diskette sin desmontarlo, ya que podrían existir operaciones de escritura pendientes no sincronizada aún. sync: Comando disponible para sincronizar las escrituras pendientes en disco.
El comando "mount" sin modificadores muestra una lista de los filesystems disponibles.
Logs del sistema
Los logs del sistema son archivos y directorios donde normalmente el administrador del sistema recurre en busca de información y registros de actividad, bien con el objeto de determinar la causa de un problema, o bien como una actividad de control periódica.
Lo más usual es que estos archivos se encuentren bajo /var/log: el administrador debería chequear como parte de sus controles de rutina los archivos que aparecen bajo este directorio en busca del tipo de información mencionada en el primer párrafo, especialmente el contenido de un archivo.
Usuarios
En un sistema UNIX, LINUX en particular, cada persona que necesite de los servicios del sistema debe contar con un usuario para poder identificarse ante él. Cada usuario es identificado unívocamente para el sistema con un número conocido como UID = User ID.
El primer usuario creado por la instalación del sistema operativo es aquel que tiene como nombre root. Este tiene por UID el número 0. Los sistemas de este tipo reconocen al usuario cuyo UID es el 0 como aquel con permisos y privilegios totales, vale decir que el usuario que tenga este UID puede realizar todas las funciones y modificar cualquier elemento del sistema.
La base de usuarios del sistema es mantenida en el archivo /etc/passwd, el cual contiene la definición de todos los usuarios del sistema. Este archivo contiene una línea para cada usuario donde está la información relativa al mismo en campos separados por un carácter ":".
El formato de este archivo es como sigue: username:password:uid:gid:gecos:shell
El primer campo es el nombre de usuario: la secuencia de caracteres con la que ingresamos al sistema.
El segundo corresponde a la contraseña: la misma no aparece encriptada, el sistema sólo contiene el algoritmo de encriptación con el cual se procesan las contraseñas, pero no el algoritmo inverso. Cuando la ingresamos, el sistema corre ese algoritmo contra la secuencia de caracteres ingresada y compara el resultado contra la secuencia almacenada en el /etc/passwd: si coinciden el usuario es autorizado a ingresar al sistema, si no el permiso le es denegado.
El tercer campo corresponde al UID: el número que identifica al usuario. Este valor es utilizado por el sistema para gerenciar todo lo que tiene que ver con el control de permisos, tanto para el acceso a archivos como para la ejecución de procesos.
El cuarto campo es el GID: el identificador del grupo primario al que pertenece el usuario. Un usuario puede pertenecer a varios grupos: aquel al que es incorporado primero es el grupo primario.
El quinto campo es el gecos: este contiene – normalmente – algún comentario librado al administrador sobre el usuario.
El último campo corresponde al shell de login que utilizará el usuario cada vez que se loguee al sistema. También cumple el rol de shell por defecto, vale decir aquel que se iniciará cada vez que el usuario ejecute un sub-shell o un shellscript.
Grupos de usuarios
Los grupos son estructuras que nos permiten asignar propiedades comunes a conjuntos de usuarios, fundamentalmente en lo que tiene que ver con permisos de acceso a archivos.
Cada grupo se distingue unívocamente en el sistema por un número, asignado al momento de su creación y conocido como gid. Este atributo es utilizado por el sistema para manejar todo lo que tiene que ver con el acceso a archivos y ejecución de procesos.
Los mismos están definidos en la base de grupos del sistema: /etc/groups. Este archivo – normalmente de acceso público – contiene una línea para cada grupo definido en el sistema donde se mantienen sus atributos, separados por un carácter ":".
La sintaxis de cada línea se presenta a continuación:
groupname:password:gid:username-list
El primer campo es el nombre del grupo – aquel con el que lo reconocemos en el sistema.
El segundo campo es una password del grupo. Normalmente el campo no está en uso y puede aparecer ocupado con un carácter "!".
El tercer campo es el identificador del grupo: gid.
El cuarto campo de la línea es una lista de usernames separados por "," de todos los usuarios que componen el grupo.
Procesos
Un proceso es la ejecución de un programa y consiste en un conjunto de bytes que la CPU interpreta como instrucciones de máquina y datos.
Un proceso puede ser la ejecución de un programa (ejecutable de c, cobol, etc), un script o un comando.
El kernel del sistema operativo realiza un scheduling de los procesos para su ejecución por lo que muchos procesos aparentan ejecutar simultaneamente.
Los procesos se comunican entre sí a través de system calls que realizan al kernel.
Los procesos se indentifican con un PID único.
Hay 2 procesos especiales
- PID = 0 swapper – proceso especial que es disparado por el kernel cuando se inicia el equipo
- PID = 1 init – proceso especial disparado por el swapper es el "padre" de todos los demas.
Todos los procesos pueden disparar otros procesos con el system call fork, los cuales seran "hijos" delproceso que los disparo.
Todos los procesos tienen un padre (excepto PID = 0) y pueden tener o no uno o varios hijos.
Atributos de un proceso
Como hemos dicho, el PID de un proceso lo identifica en forma única y se relaciona con información especial de los atributos del mismo:
1 – Nombre del programa
2 – Archivos abiertos
3 – Directorio corriente del trabajo
4 – Usuario "dueño" del proceso (UID)
5 – Variables de ambiente
6 – PID del padre (PPID)
Estados de un proceso
El tiempo de vida de un proceso puede ser dividido en un conjunto de estados:
1- Proceso ejecutándose en el modo usuario (Running modo usuario).
2- Proceso ejecutándose en el modo kernel (Running modo kernel).
3- Proceso no está ejecutándose pero está pronto para correr ni bien el scheduler lo seleccione (Waiting).
4- Proceso durmiendo. El proceso se pone a sí mismo en este estado cuando no puede continuar la ejecución.
Ej: está esperando por una operación I/O o la asignación de un recurso. (sleeping).
Autor:
César Affonso
Página anterior | Volver al principio del trabajo | Página siguiente |