Diferencias Entre Linux Unix

45

Click here to load reader

Transcript of Diferencias Entre Linux Unix

Page 1: Diferencias Entre Linux Unix

FFaaccuullttaadd ddee IInnggeenniieerrííaa eenn SSiisstteemmaass

Sistemas Operativos Proyecto final

- Diferencias entre Unix y Linux- Profesor: Randall Vargas Estudiante: Diana Alfaro

Tatiana Macchiavello Duarte Grupo: Martes - noche

Agosto 2005

Page 2: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página I

Tabla de Contenido 1. FUNCIONES DEL SISTEMA OPERATIVO...................................................................................1 2. INTRODUCCIÓN HISTÓRICA A UNIX Y LINUX. ......................................................................2 3. VISIÓN GENERAL DE UNIX.................................................................................................................4

3.1. ESTRUCTURA DEL SISTEMA. .................................................................................................................4 3.1.1 Sistema Operativo interactúa con el hardware. ............................................................6 3.1.2 El Entorno de Procesamiento...............................................................................................7 3.1.3 Primitivas de Construcción de Bloques.............................................................................7 3.1.4 Servicios del Sistema Operativo. ........................................................................................8 3.1.5 Aspectos del Hardware. ........................................................................................................9 3.1.6. Interrupciones y Excepciones. ............................................................................................9 3.1.7 Niveles de Ejecución del Procesador. ..............................................................................10 3.1.8 Manejo de Memoria. ............................................................................................................11

4. DESCRIPCIÓN DE LINUX Y DE SUS FUNCIONALIDADES. .......................................................11 4.1 ESTRUCTURA GENERAL DEL SISTEMA OPERATIVO LINUX...................................................................12

5. GESTIÓN DE PROCESOS....................................................................................................................15 5.1 ESTADOS Y TRANSICIONES DE UN PROCESO. .........................................................................15

5.1.1. Ciclo Vida de un Proceso en UNIX. Conjunto Estados ...............................................15 5.1.2 Ciclo de Vida de un Proceso en Linux. Conjunto de Estados (Figura 2.2.). ...........20

5.2 ESTRUCTURAS DE DATOS DEL SISTEMA PARA LA GESTIÓN DE PROCESOS....................22 5.2.1 TABLA DE PROCESOS. .......................................................................................................................22 5.2.2 TABLA DE PROCESOS EN LINUX........................................................................................................22

Estructura del descriptor de procesos en Linux (PCB = Process Control Block). ............22 5.3 ORGANIZACIÓN DE LA MEMORIA DEL SISTEMA. ..................................................................23

5.3.1 Asignación de memoria......................................................................................................24 5.3.2. Regiones. ................................................................................................................................25 5.3.3. Páginas y Tablas de Páginas............................................................................................25

5.4 SINCRONIZACIÓN DE PROCESOS EN LINUX. ...........................................................................27 6. GESTIÓN DE LA MEMORIA ..............................................................................................................28

6.1 GESTIÓN DE MEMORIA EN UNIX ................................................................................................28 6.1.1. Paginación por Demanda .................................................................................................29 6.1.2 Estructuras de Datos para Paginación por Demanda (UNIX) ..................................29

6.2 GESTIÓN DE MEMORIA EN LINUX ..............................................................................................31 6.2.1 Direccionamiento de Memoria en Linux ........................................................................32 6.2.2. Segmentación en Linux......................................................................................................33 6.2.3 Paginación en Linux ............................................................................................................35

7. SEGURIDAD EN UNIX .........................................................................................................................36 7.1 PERMISOS DE UN ARCHIVO...................................................................................................................36 7.2 ATRIBUTOS DE LOS ARCHIVOS EN EXT2FS............................................................................................37 7.3 CRIPTOGRAFÍA.....................................................................................................................................37 7.4 ALMACENAMIENTO SEGURO................................................................................................................38 7.5 COPIAS DE SEGURIDAD ........................................................................................................................38 7.6 AUTENTICACIÓN DE USUARIOS ............................................................................................................39

Page 3: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página II

7.7 SEGURIDAD DEL NÚCLEO.....................................................................................................................39 8. SEGURIDAD EN LINUX.......................................................................................................................40

8.1 Seguridad local.........................................................................................................................40 9. BIBLIOGRAFÍA .....................................................................................................................................41

Page 4: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 1 de 42

11.. FFuunncciioonneess ddeell ssiisstteemmaa ooppeerraattiivvoo El sistema operativo UNIX se ha desarrollado en un lenguaje de alto

nivel. La utilización de un lenguaje de alto nivel ha permitido la portabilidad del sistema a muchas máquinas diferentes. Lo mismo le ocurre a LINUX, por ello es importante que el código de las aplicaciones pudiera compilarse de manera transparente sea cual sea la máquina y los dispositivos utilizados.

Máquina virtual. El SO ofrece una máquina virtual al usuario y a los programas que ejecuta. Este se ejecuta en una máquina física que posee una interfaz de programación bajo nivel, y proporciona abstracciones de alto nivel y una nueva interfaz de programación y uso más evolucionada. El SO posee una interfaz entre las aplicaciones y la máquina. Por ello, es por lo que todas las tareas físicas (acceso a dispositivos externos o internos, a la memoria, etc.) se delegan en el sistema operativo. Esta encapsulación del hardware libera a los desarrolladores de la complejidad de gestionar todos los dispositivos existentes, ya que el sistema operativo es quien se encarga de ello.

Gestión del CPU. En LINUX, a cada proceso se le atribuye un quantum de tiempo y elige un proceso a ejecutar durante ese quantum. Cuando ha transcurrido ese quantum, el sistema hace pasar al proceso al estado “listo para ejecutarse”, y elige a otro proceso que se ejecuta durante otro quantum. El quantum es muy corto y el usuario tiene la impresión de que varios procesos se ejecutan simultáneamente, aunque sólo un proceso se ejecuta en un instante dado.

Gestión de memoria. El sistema se encarga de gestionar la memoria física de la computadora. En un entorno multiusuario y multitarea, el sistema debe efectuar una gestión muy rigurosa de la memoria. Como la memoria física de la máquina es a menudo insuficiente, el sistema utiliza entonces una parte del disco duro como memoria virtual.

Gestión de recursos. El SO se encarga de gestionar los recursos disponibles. El sistema ofrece a los procesos una interfaz que permite compartir los recursos del hardware. Implementa un sistema de protección que permite a los usuarios y a los administradores proteger el acceso a sus datos. El sistema mantiene listas de recursos disponibles y en curso de utilización, lo que permite atribuirlos a los procesos que utilizan los recursos de la máquina, y puede detectar así los conflictos de acceso.

Page 5: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 2 de 42

22.. IINNTTRROODDUUCCCCIIÓÓNN HHIISSTTÓÓRRIICCAA AA UUNNIIXX YY LLIINNUUXX.. 1965: Laboratorios Bell, General Electric y MIT intentan desarrollar un

nuevo Sistema Operativo: MULTICS (sistema operativo multiusuario interactivo). Objetivos del nuevo Sistema Operativo:

(1) Dar servicio simultáneo a gran cantidad de usuarios.

(2) Proporcionar gran capacidad de cálculo y almacenamiento.

(3) Permitir a los usuarios compartir datos fácilmente.

1969: Primera Versión de MULTICS en Bell. No cumplió las expectativas y Laboratorios Bell abandona el proyecto Þ El proyecto muere.

Fin proyecto MULTICS: Algunos participantes intentan mejorar el entorno de programación desarrollado.

Ken Thompson, Dennis Ritchie y otros diseñan un sistema de archivos versión primitiva del sistema de archivos de UNIX.

Thompson y Ritchie Primera implementación de su diseño.

(1) Versión primitiva del sistema de archivos UNIX. Lenguaje ensamblador.

(2) Subsistema de procesos.

(3) Conjunto de programas de utilidad.

(4) Ha nacido UNIX.

Thompson, Ritchie y el lenguaje C Þ 1973: UNIX se rescribe en C casi en su totalidad (90% aproximadamente), dejando sólo un 10% dependiente del lenguaje máquina de una computadora en concreto ya que C se caracteriza por su portabilidad, es decir, su independencia de la máquina, UNIX hereda esta característica convirtiéndose en uno de los sistemas operativos más portables.

UNIX es un potente sistema operativo que en su mayor parte es independiente de la máquina. Permite ejecutar programas, aporta un interfaz con un gran número de periféricos (impresoras, discos, cintas magnéticas, terminales) para trabajar con ellos de forma cómoda, controlando el flujo de información entre la computadora central y dichos periféricos. Además posee un eficaz sistema de archivos, administrando el sistema de información a largo plazo. UNIX es un sistema multitarea, multiusuario e interactivo de propósito general.

La popularidad del S.O. UNIX es debida a:

(1) Escrito en un lenguaje de alto nivel por lo que es fácil de leer, entender, modificar y mover a otras máquinas.

(2) Interfaz de usuario simple pero completo.

Page 6: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 3 de 42

(3) Primitivas de construcción de programas complejos a partir de otros más simples.

(4) Sistema de archivos jerárquico.

(5)Fácil mantenimiento.

(6) Implementación eficiente.

(7) Formato consistente para los archivos permitiendo escribir programas con facilidad.

(8) Interfaz consistente y simple con los dispositivos periféricos.

(9) Hoy existen numerosas variantes comerciales (SCO, IBM, Digital, HP, SGI, Sun, etc.) que actúan en entornos cliente servidor, intranet, Internet, etc.

Por lo que respecta a Linux:·

(1) Linux aparece en 1991 como evolución de MINIX para el 80386.

(2) En menos de un año, más de 100 programadores colaboran.

(3) Forma de trabajo: Los fuentes (versiones) se difunden con la máxima frecuencia y cualquiera que quiera modificar o criticar algo, lo hace. Los más conocedores de esa área (los que la han programado) deciden si es útil y si lo es, lo incorporan.

(4) Se portan las herramientas GNU de la FSF (gcc, gdb, bash, emacs, etc.)

(5) En marzo de 1994 aparece Linux 1.0 en forma de “distribución”.

(6) En junio de 1996 se distribuye Linux 2.0, ya competitivo con otros UNIX.

(7) Aparecen varias distribuciones (RedHat, Caldera, S.U.S.E, Slackware, Debian, etc., algunas con soporte oficial para empresas).

(8) La FSF adopta Linux como Sistema Operativo Oficial: GNU/Linux.

(9) Interés por parte de las empresas (Intel, Sun, Netscape, Lotus, Adobe, Corel, Oracle, Informix, Sysbase, etc.).

(10) En enero de 1999 aparece Linux 2.2 con muchas mejoras y soporte para nuevos tipos de hardware. El primer número cambia cuando se da una evolución importante, el segundo es la versión y el tercero la revisión. Las versiones pares son estables y las impares inestables. (11) En enero de 2001 aparece Linux 2.4 con mejoras en el

Page 7: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 4 de 42

soporte a multiprocesadores, dispositivos como el USB, y acceso directo al HW gráfico (2D, 3D).

Sistema interactivo. El usuario interactúa con el sistema en tiempo real sin necesidad de esperar colas de ejecución como ocurría en los sistemas batch.

Sistema multiusuario. En un momento dado varios usuarios distintos pueden actuar en el mismo sistema, accediendo desde terminales distintas.

Es un sistema multiprogramado (multitarea). Varios programas pueden estar simultáneamente en el sistema en diferentes áreas de memoria. Mientras que un trabajo está esperando operaciones de E/S otro puede estar usando la CPU. Si se pueden tener a la vez varios trabajos en memoria principal, la CPU puede mantenerse ocupada casi todo el tiempo.

Es un sistema de tiempo compartido. El sistema UNIX divide el tiempo de la computadora en un número de partes, repartiéndolas entre los diferentes procesos. La computadora puede proporcionar servicio rápido e interactivo a varios usuarios e incluso procesar trabajos batch grandes en segundo plano cuando la CPU está ociosa.

Es un sistema multiplataforma. UNIX es un sistema que proporciona compatibilidad para arquitecturas distintas.

Oculta la arquitectura de la máquina, del usuario Þ Fácil escribir programas que van a correr en hardware diversos.

33.. VVIISSIIÓÓNN GGEENNEERRAALL DDEE UUNNIIXX.. 33..11.. EEssttrruuccttuurraa ddeell SSiisstteemmaa..

UNIX es un sistema operativo de tiempo compartido (el sistema UNIX divide el tiempo de la computadora en un número de partes, repartiéndolas entre los diferentes procesos). El kernel del sistema es un programa que siempre está residente en memoria y, entre otros, brinda los siguientes servicios:

Controla los recursos básicos.

Controla los dispositivos periféricos (discos, terminales, impresoras, etc.).

Permite a distintos usuarios compartir recursos y ejecutar sus programas.

Page 8: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 5 de 42

Proporciona un sistema de archivos que administra el almacenamiento de información (programas, datos, documentos, etc.).

Es un sistema interactivo, permite el redireccionamiento de la E/S, tuberías y ejecución de procesos en background.

En un sentido más amplio, UNIX abarca también un conjunto de programas estándar, como pueden ser:

Compilador de lenguaje C (cc).

Editor de texto (vi).

Intérprete de órdenes (sh, ksh, csh)

Programas de gestión de archivos y directorios (cp, rm, mv, mkdir, rmdir).

Organización de un sistema UNIX cualquiera: Figura 1.1. El hardware suministra al sistema operativo servicios básicos.

En la Figura 1.1, se pueden ver distintos niveles dentro de la arquitectura UNIX. El nivel más externo (Otros programas de aplicación) no pertenece al sistema operativo, y si la máquina que esta implementada sobre el hardware, cuyos recursos se desea gestionar.

Directamente en contacto con el hardware está el segundo nivel, el kernel del sistema, este está escrito en C en su mayor parte aunque coexiste con código ensamblador. El kernel del sistema operativo es un programa que esta siempre residente en memoria y brinda servicios para controlar los recursos del sistema.

Page 9: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 6 de 42

Algunas funciones del sistema operativo se usan casi continuamente. Por ejemplo, la parte del sistema UNIX que se encarga de cambiar un programa por otro (tiempo compartido) se necesita muchas veces cada fracción de segundo. Todas aquellas funciones que se necesitan inmediatamente, se mantienen permanentemente en memoria. A la parte residente en memoria de un sistema operativo se llama kernel. El sistema UNIX ha dotado al kernel con relativamente pocas prestaciones, de forma que la mayoría de las funciones del sistema operativo las deben de proporcionar los programas de utilidad.

En el tercer nivel de la estructura que muestra la Figura 1.1 se encuentran los programas estándar de cualquier sistema UNIX (vi, grep, sh, who, ...) y programas generados por el usuario. Se debe destacar, que estos programas nunca van a actuar sobre el hardware de forma directa. Por ello, debe de existir algún mecanismo que permita indicarle al kernel que necesitamos operar sobre algún recurso hardware. Este mecanismo es lo que se conoce como llamadas al sistema (system calls). Así pues, cualquier programa que se esté ejecutando bajo el control de UNIX, cuando necesite hacer uso de alguno de los recursos que le brinda el sistema, deberá efectuar una llamada a alguna de las llamadas al sistema (system calls).

En un cuarto nivel tenemos aplicaciones que se sirven de otros programas ya creados para llevar a cabo su función. Estas aplicaciones, tampoco se comunican directamente con el kernel.

También hay que destacar que la jerarquía de programas no tiene por qué verse limitada a cuatro niveles. El usuario puede crear tantos niveles como necesite. Puede haber también programas que se apoyen en diferentes niveles y que se comuniquen con el kernel por un lado y con otros programas ya existentes por otro.

333...111...111 SSSiiisssttteeemmmaaa OOOpppeeerrraaatttiiivvvooo iiinnnttteeerrraaaccctttúúúaaa cccooonnn eeelll hhhaaarrrdddwwwaaarrreee...

Da servicio a los programas.

Aísla a los programas del hardware.

Programas independientes del hardware son sencillo moverlos entre sistemas UNIX sobre distintos hardware.

Page 10: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 7 de 42

333...111...222 EEElll EEEnnntttooorrrnnnooo dddeee PPPrrroooccceeesssaaammmiiieeennntttooo...

UNIX

Ejecuta simultáneamente varios procesos (multitarea o multiprocesamiento) sin un límite lógico.

o Límites físicos: tamaño de la memoria, etc.

o Degradación del sistema si el nivel de multiprocesamiento crece.

Varias instancias de un mismo programa de código reentrante.

o Llamadas al sistema para crear, terminar, sincronizar y especificar el comportamiento de procesos.

o Permite ejecución sincrónica y asincrónica.

o Comentario: Hilos, Duplicación del código.

333...111...333 PPPrrriiimmmiiitttiiivvvaaasss dddeee CCCooonnnssstttrrruuucccccciiióóónnn dddeee BBBllloooqqquuueeesss...

Filosofía UNIX: Proporcionar al usuario primitivas de construcción de programas.

o Le permiten construir programas sencillos.

o Utilización posterior como “bloques de construcción” para construir programas más complejos.

Primitiva 1: Redireccionar la E/S.

o Procesos son acceso por defecto: archivo de entrada estándar, archivo de salida estándar y archivo de error estándar.

o UNIX proporciona mecanismos para redireccionar cualquiera de ellos por medio de la organización cuidadosa del sistema de archivos.

Primitiva 2: Pipes o tuberías.

o Mecanismo que permite el paso de datos entre un proceso escritor y un proceso lector sin necesidad de crear archivos temporales.

Escritor redirecciona la salida estándar hacia pipe.

Lector redirecciona su entrada estándar hacia el pipe.

Page 11: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 8 de 42

333...111...444 SSSeeerrrvvviiiccciiiooosss dddeeelll SSSiiisssttteeemmmaaa OOOpppeeerrraaatttiiivvvooo...

El kernel está entre el hardware y los programas de usuario.

o Sirve a programas de usuario por medio de llamadas al sistema (system calls).Ver Figura 1.1.

Servicios que ofrece el kernel.

o Control de ejecución de procesos.

o Planificación equitativa de procesos ® Tiempo compartido.

o Administración de la memoria principal ® Procesos en ejecución.

Permite a procesos compartir parte del espacio de direcciones.

Protege el espacio de direccionamiento privado de procesos.

Gestiona la memoria libre en tiempos de escasez.

• Dispositivo swap (intercambio1).

• Sistema de intercambio o sistema paginado.

Administra la memoria secundaria eficientemente: SF.

Asigna la memoria secundaria para archivos de usuario.

• Recupera el espacio de almacenamiento no utilizado.

• Estructura el sistema de archivos de manera comprensible.

• Protege los archivos de usuario ante accesos ilegales.

Permite a procesos el acceso controlado a dispositivos periféricos.

El kernel proporciona estos servicios de una manera transparente.

El intercambio consiste en llevar los procesos cuyo tiempo de ocupación de memoria expira, a un área de memoria secundaria y traer de esa área de memoria secundaria los procesos a los que se les asigna tiempo de ocupación en memoria principal.

Page 12: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 9 de 42

333...111...555 AAAssspppeeeccctttooosss dddeeelll HHHaaarrrdddwwwaaarrreee...

Ejecución de un proceso en UNIX: dos niveles: usuario y kernel.

o Proceso realiza llamada al sistema Þ modo de ejecución pasa de modo usuario a modo kernel.

Sistema operativo intenta servir una petición del usuario.

Modo kernel: Las llamadas al sistema (system calls) se ejecutan en modo kernel y para entrar en ese modo hay que ejecutar una sentencia de código máquina conocida como “trap”. Es por esto, que las llamadas al sistema pueden ser invocadas directamente desde ensamblador y no desde C. En este modo están permitidas todas las instrucciones para el sistema operativo.

Modo usuario: en este modo no están permitidas instrucciones de E/S y de otros tipos para programas de usuario.

o Kernel realiza tareas de gestión para procesos de usuario.

o Diferencias entre los dos niveles son:

Acceso a instrucciones y datos.

Ejecución de instrucciones máquina privilegiadas.

El kernel se ejecuta a petición de los procesos de usuario.

o Kernel no son procesos ejecutándose en paralelo para servir a procesos de usuario.

o Código ejecutado por el propio proceso en modo kernel o protegido.

Permite ejecución sincrónica y asincrónica.

Organización alrededor de servidores.

333...111...666... IIInnnttteeerrrrrruuupppccciiiooonnneeesss yyy EEExxxccceeepppccciiiooonnneeesss...

Las interrupciones son señales eléctricas manejadas directamente por un controlador de interrupciones (hardware) o codificando a nivel de software el índice para acceder a la tabla de descriptores de interrupciones (software).

UNIX permite a dispositivos interrumpir la CPU asincrónicamente.

o Llegada de una interrupción.

Page 13: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 10 de 42

o El kernel salva contexto actual (imagen de lo que estaba haciendo el proceso).

o Determina la causa de la interrupción.

Sirve la interrupción por medio de bloqueos interrupciones menos prioritarias, sirve interrupciones de mayor prioridad.

Fin servicio de interrupción.

o Restaura el contexto salvado.

o Continúa como si no hubiera pasado nada.

Distinción excepciones – interrupciones. Además de las interrupciones hardware y software, diversas condiciones de error de la CPU pueden causar la iniciación de una excepción. Las excepciones pueden servir: para estimular al sistema operativo para que suministre un servicio, para suministrar más memoria a un proceso.

333...111...777 NNNiiivvveeellleeesss dddeee EEEjjjeeecccuuuccciiióóónnn dddeeelll PPPrrroooccceeesssaaadddooorrr...

El kernel debe prevenir la ocurrencia de interrupciones cuando se encuentra realizando operaciones críticas.

o Peligro de corrupción de los datos.

o Fija el nivel de ejecución del procesador mediante el enmascaramiento de las interrupciones de ese y niveles inferiores, permitiendo interrupciones de más alto nivel.

Page 14: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 11 de 42

333...111...888 MMMaaannneeejjjooo dddeee MMMeeemmmooorrriiiaaa...

Compilación de un programa, el compilador genera direcciones para variables, funciones, etc. para una máquina virtual.

El kernel reside permanentemente en memoria.

Programa va a ejecutarse, el kernel le asigna memoria principal.

o Problema: Direcciones virtuales y físicas no coinciden.

o Kernel debe coordinarse con el hardware realizar una traducción de direcciones virtuales a físicas.

Forma de realizar traducción depende del hardware.

Partes del sistema UNIX que tratan con ella serán dependientes de la máquina.

Micronúcleo.

44.. DDeessccrriippcciióónn ddee LLiinnuuxx yy ddee ssuuss FFuunncciioonnaalliiddaaddeess.. Linux se diseñó inicialmente como un clónico de UNIX distribuido

libremente que funciona en máquinas PC con procesador 386, 486 o superior. Aunque se diseñó inicialmente para la arquitectura I386, en la actualidad funciona sobre otras plataformas como los procesadores Compac Alpha AXM, Sun Sparc, DEC VAX, ciertas plataformas basadas en los Motorola 68000 como Amiga y Atari, las máquinas de tipo MIPS, PowerPC64, ARM, Intel IA-64, AMD x86-64, Cris, etc.

Linux es una implementación de UNIX que respeta la especificación POSIX pero que posee también ciertas extensiones propias de las versiones System V y BSD de UNIX. Esto implica la adaptación del código de aplicaciones desarrolladas inicialmente para otros sistemas UNIX. El término POSIX significa Portable Operating System Interface. Se trata de documentos producidos por IEEE y estandarizados por ANSI y el ISO. El objetivo de POSIX es permitir tener un código fuente transportable.

El código de Linux es un código original, que no es propietario en absoluto y cuyos programas en código fuente se distribuyen libremente bajo cobertura de licencia GPL, que es la licencia pública general de GNU.

Las funcionales de este sistema operativo son múltiples y corresponden a la idea que puede hacerse de un sistema UNIX moderno:

Sistema operativo de estilo UNIX. Compatible POSIX.

Multitarea, multiprocesador. Puede ejecutar programas al mismo tiempo, ya sea con uno o varios procesadores.

Page 15: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 12 de 42

Multiplataforma. Puede funcionar en múltiples arquitecturas hardware.

Multiusuario. Como en todo sistema UNIX, Linux permite trabajar a varios usuarios simultáneamente en la misma máquina.

Protección de memoria entre procesos.

Soporte de comunicaciones interprocesos (pipes, IPC, sockets).

Gestión de diferentes señales.

Gestión de terminales según la norma POSIX. Linux, proporciona también los pseudos terminales y los controles de procesos.

Soporte de un gran número de dispositivos ampliamente extendidos (tarjetas de sonido, gráficas, de red, SCSI, etc.).

Buffer caché. Zona de memoria intermedia para las entradas/salidas de los diferentes procesos.

Gestión de memoria (memoria virtual). Una página sólo se carga si es necesaria en memoria.

Librerías compartidas y dinámicas. Las librerías dinámicas sólo se cargan cuando son necesarias y su código se comparte si varias aplicaciones las utilizan.

Soporte de múltiples sistemas de archivos. Sistemas de archivos que permiten gestionar tanto particiones Linux con el sistema de archivos Ext2, por ejemplo, como particiones en otros formatos (MS-DOS, iso9660, etc.)

Soporte de la familia de protocolos TCP/IP y de otros protocolos de red.

Capacidad de multiprocesamiento simétrico, de funcionamiento en “cluster”.

Escrito en “C”.

Posibilidad de depuración en tiempo de ejecución.

Carga de módulos en tiempo de ejecución.

44..11 EEssttrruuccttuurraa GGeenneerraall ddeell SSiisstteemmaa OOppeerraattiivvoo LLiinnuuxx.. Tal y se ha visto, el sistema operativo se compone de varios elementos

importantes. UNIX y Linux se han desarrollado de manera modular de modo que se pueden distinguir fácilmente las diferentes partes que lo componen. La ventaje de esta estructuración es que permite su modificación y mejora

Page 16: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 13 de 42

sin excesiva dificultad. La incorporación de ciertos elementos, como llamadas al sistema, controladores de dispositivos u otros, es sencilla y no obliga a rediseñar la estructura del sistema.

De forma general los distintos elementos que nos encontramos en el kernel de Linux son los siguientes:

Llamadas al sistema. Implementación de operaciones que deben ejecutarse en modo kernel.

Sistema de archivo. Entradas/salidas de los dispositivos.

Buffer caché. Memoria intermedia sofisticada para entradas/salidas.

Controladores de dispositivos. Gestión a bajo nivel de discos, tarjetas, impresoras, etc.

Gestión de la red. Protocolos de comunicaciones en red.

Interfaz con la máquina. Código (generalmente en ensamblador) de acceso a bajo nivel al hardware.

Page 17: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 14 de 42

Núcleo del kernel. Gestión de procesos (creación, duplicación, destrucción, etc.), gestor de órdenes, señale s, módulos cargables (carga de ciertas partes del kernel cuando se requieren), gestión de memoria (gestión de la memoria física y la memoria virtual), etc.

En la figura anterior, representa la estructura del sistema operativo Linux, que es muy parecida a la del sistema operativo UNIX.

Page 18: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 15 de 42

55.. GGEESSTTIIÓÓNN DDEE PPRROOCCEESSOOSS 55..11 EESSTTAADDOOSS YY TTRRAANNSSIICCIIOONNEESS DDEE UUNN PPRROOCCEESSOO..

555...111...111... CCCiiiccclllooo VVViiidddaaa dddeee uuunnn PPPrrroooccceeesssooo eeennn UUUNNNIIIXXX... CCCooonnnjjjuuunnntttooo EEEssstttaaadddooosss

El tiempo de vida de un proceso se puede dividir en un conjunto de estados, cada uno con de las características determinadas. Es decir, que un proceso no permanece siempre en un mismo estado, sino que está continuamente cambiando de acuerdo con unas reglas bien definidas. Estos cambios de estados vienen impuestos por la competencia que existe entre los procesos para compartir un recurso tan escaso como es la CPU (scheduler). La transición entre los diferentes estados (Figura 2.1) da lugar a un Diagrama de Transición de Estados. Un diagrama de transición de estados es un grafo dirigido, cuyos nodos representan los estados que pueden alcanzar los procesos y cuyos arcos representan los eventos que hacen que un proceso cambie de un estado a otro.

En la Figura 2.1, se observa el diagrama completo y los estados que en él se reflejan son:

Entrada del proceso en el modelo, creación de un proceso: estado Creado (8).

o Este estado es el estado inicial para todos los procesos excepto el proceso 0 (swapper).

o Llamada al sistema fork del padre.

o El proceso acaba de ser creado y está en un estado de transición; el proceso existe, pero ni está preparado para ejecutarse (estado 3), ni durmiendo (estado 4)

Proceso ejecutándose en modo usuario (1). Los eventos que desencadenan una transición pueden ser los siguientes:

o [Evento = fin quantum] = transición al estado de “ejecutándose en modo kernel” (2).

Gestión de la interrupción. Esta función la lle va a cargo el módulo de control del hardware, que es la parte del kernel encargada del manejo de interrupciones y de la comunicación con la máquina.

Planificación a cargo del scheduler.

Elegir otro proceso si es el siguiente para ser ejecutado según el scheduler.

Page 19: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 16 de 42

Proceso actual pasa a ser requisado (7) [Evento = requisar (o apropiar), en el que el kernel se apodera del proceso y hace un cambio de contexto, pasando otro proceso a ejecutarse en modo usuario] = posiblemente a listo para ejecutar en modo usuario.

o [Evento = llamada al sistema] = transición al estado de “ejecutándose en modo kernel” (2).

Operación de Entrada/Salida.

El proceso pasa al estado “durmiendo en memoria” (4) [Evento = dormir].

Fin de la operación de Entrada/Salida.

El hardware interrumpe la CPU. Como sabemos los dispositivos pueden interrumpir la CPU mientras está ejecutando un proceso. Si esto ocurre, el kernel debe reanudar la ejecución del proceso después de atender a la interrupción. Las interrupciones no son atendidas por procesos, sino por funciones especiales, codificadas en el kernel, que son llamadas durante la ejecución de cualquier proceso.

Estado listo para ejecutarse en memoria (3) [Evento = despertar].

Ejecución en modo kernel (2).

o Gestión interrupciones y llamadas al sistema, planificación, etc. Esta transición se debe a eventos que sólo el kernel puede controlar y no pueden pasar a otro estado de tránsito [Evento = interrupción / volver de interrupción]

o Si viene de recién creado (8) ® completa su parte del fork ante un evento de “hay suficiente memoria”.

o Cuando el proceso termine de ejecutarse en modo kernel = pasa a ejecutarse en modo usuario (1) [Evento = volver].

Listo para ejecutarse en memoria (3) o en el área de swap en memoria secundaria (5).

o Listo para ejecutarse en memoria (3).

El proceso no se está ejecutando, pero está listo para ejecutarse tan pronto como el scheduler lo ordene [Evento = orden de ejecución por parte del

Page 20: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 17 de 42

scheduler]. Puede haber varios procesos simultáneamente en este estado.

Si viene de recién “Creado” (8), completa su parte del fork [Evento = hay memoria suficiente].

o Listo para ejecutarse en el área de swap, en memoria secundaria (5).

No hay memoria principal suficiente para todos los procesos [Evento = memoria principal insuficiente].

El proceso está listo para ejecutarse pero el swapper (proceso 0) debe cargar el proceso en memoria secundaria (swap out) antes de que el kernel pueda ordenar que pase a ejecutarse.

Durmiendo cargando en memoria (4) o en el área de swap en memoria secundaria (6).

o El proceso está durmiendo cargado en memoria principal (4). Un proceso entra en este estado cuando no puede proseguir su ejecución porque está esperando a que se complete una operación de entrada/salida [Evento = dormir].

o El proceso está durmiendo y el swapper ha descargado el proceso hacia memoria secundaria (6) (en el área de swap) para poder crear espacio en memoria principal para poder cargar otros procesos [Evento = sacar de memoria principal para enviar a disco (swap out)]. Una vez, que el proceso ha estado durmiendo en memoria secundaria, según un evento despertar [Evento = despertar] puede pasar al estado “listo para ejecutarse en memoria secundaria (área de swap)”.

Requisado o expulsado o apropiado (7).

o El proceso está volviendo del modo kernel al modo usuario, pero el kernel se apropia del proceso y hace un cambio de contexto, pasando otro proceso a ejecutarse en modo usuario [Evento = requisar (cambio de contexto)].

o Desde este estado puede pasar el proceso al estado de “ejecutándose en modo usuario” gracias a un evento de volver al modo usuario [Evento = volver al modo usuario].

Estado Zombie (9).

o Fin de ejecución de un proceso pero sigue siendo referenciado en el sistema Þ Llamada al sistema exit

Page 21: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 18 de 42

[Evento = exit] y pasa a estado Zombie. El proceso ya no existe, pero deja para su proceso padre un registro que contiene el código de salida y algunos datos estadísticos tales como los tiempos de ejecución. El estado Zombie es el estado final de un proceso

Estado de proceso ejecutándose en modo kernel [Evento = exit] Þ Estado Zombie.

o Recurso: tabla de procesos.

Page 22: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 19 de 42

Recordemos que existen dos niveles de ejecución para un proceso: modo kernel (2) y modo usuario (1).

Modo kernel (modo privilegiado). En este modo no se impone ninguna restricción al kernel del sistema. El kernel podrá:

o Utilizar todas las instrucciones del procesador.

o Manipular toda la memoria.

o Dialogar directamente con todos los controladores (drivers) de dispositivos, ...

Modo usuario. Modo de ejecución normal de un proceso. En este modo el proceso no posee ningún privilegio.

o Ciertas instrucciones están prohibidas.

o Sólo tiene acceso a las zonas que se le han asignado al proceso.

o No puede interactuar con la máquina físicas (hardware).

o Sólo efectúa operaciones en su entorno, sin interferir con los demás procesos.

o Puede ser interrumpido en cualquier momento, pero esto no obstaculiza su funcionamiento.

Recordemos también que un proceso que se ejecute en modo usuario no puede acceder directamente a los recursos de la máquina, para ello debe efectuar “llamadas al sistema”. Una llamada al sistema es una petición transmitida por un proceso al kernel. El kernel trata la petición en modo kernel, con todos los privilegios, y envía el resultado al proceso, que prosigue su ejecución en modo usuario. Una llamada al sistema provoca un cambio: (1) el proceso ejecuta una instrucción del procesador que le hace pasar a modo kernel (interfaz de llamadas al sistema), (2) el kernel ejecuta una función de tratamiento vinculada a la llamada al sistema que ha efectuado, y (3) el proceso vuelve a modo usuario para proseguir con su ejecución. De este modo, el propio proceso trata su llamada al sistema, ejecutando una llamada al kernel. Esta función que ejecuta el kernel, se supone que es fiable y puede ejecutarse en modo kernel.

Page 23: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 20 de 42

555...111...222 CCCiiiccclllooo dddeee VVViiidddaaa dddeee uuunnn PPPrrroooccceeesssooo eeennn LLLiiinnnuuuxxx... CCCooonnnjjjuuunnntttooo dddeee EEEssstttaaadddooosss (((FFFiiiggguuurrraaa 222...222...)))...

En Linux, un proceso o tarea, está representado por una estructura de datos task_struct. Linux mantiene una task, que es un vector lineal de punteros a cada estructura task_struct definida en un instante dado. La estructura task_struct contiene información de varios tipos:

Estado. Representa el estado de ejecución de un proceso (en ejecución, interrumpible, no interrumpible, parado y zombi).

Información de planificación. Representa a la información necesaria para la planificación de procesos en Linux. Un proceso puede ser normal o en tiempo real y tiene una prioridad. Los procesos en tiempo real se planifican antes que los procesos normales y se utilizan prioridades relativas dentro de cada categoría. El tiempo en el que un proceso puede ejecutarse se controla mediante un contador.

Identificadores. Cada proceso tiene un único identificador de proceso, y tiene también identificadores de usuario y de grupo. Un identificador de grupo se utiliza para asignar privilegios de acceso a recursos de un grupo de usuarios.

Comunicación entre procesos. Linux soporta los mecanismo de IPC de UNIX

Vínculos. Cada proceso incluye un vínculo con su proceso padre, vínculos con sus hermanos (procesos con el mismo padre) y vínculos con todos sus hijos.

Tiempos y temporizadores. Incluye el instante de creación del proceso y la cantidad de tiempo del procesador consumido hasta el instante. Un proceso puede tener también asociados uno o más temporizadores de intervalo. Un proceso define un temporizador de intervalo mediante una llamada al sistema; cuando el tiempo termina se envía una señal al proceso. Un temporizador puede ser de un solo uso o periódico.

Sistema de archivos. Incluye punteros a cualquier archivo abierto por el proceso.

Memoria virtual. Define la memoria virtual asignada al proceso.

Contexto específico del procesador. La información de registros y pila que forma el contexto del proceso (espacio de direccionamiento del proceso).

Page 24: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 21 de 42

Los estados de ejecución de un proceso Linux son los siguientes:

n Ejecución (TASK_RUNNING). El proceso es ejecutado por el procesador.

Listo (TASK_RUNNING). El proceso podría ser ejecutado, pero otro proceso se está ejecutando en ese momento.

Interumpible (TASK_INTERRUPTIBLE). Es un estado de bloqueo, en el cual el proceso espera un suceso, como la terminación de una operación de entrada/salida, liberación de un recurso o una señal de otro proceso.

No interumpible (TASK_UNINTERRUPTIBLE). Es otro estado de bloqueo. La diferencia entre éste y el estado Interumpible es que en un estado No Interumpible, un proceso espera directamente en una condición de hardware y, por tanto, no acepta señales.

Parado (TASK_STOPPED). El proceso ha sido detenido por una intervención externa y sólo puede reanudarse por una acción positiva de otro proceso. Por ejemplo, un proceso puede estar en estado Parado durante la ejecución de un programa de depuración.

Zombi (TASK_ZOMBIE). El proceso ha terminado pero, por alguna razón, su estructura task debe permanecer aún en la tabla de procesos.

Page 25: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 22 de 42

55..22 EESSTTRRUUCCTTUURRAASS DDEE DDAATTOOSS DDEELL SSIISSTTEEMMAA PPAARRAA LLAA GGEESSTTIIÓÓNN DDEE PPRROOCCEESSOOSS..

Todo proceso tiene asociada una entrada en la Tabla de Procesos y un Área de Usuario (u-Area). Estas dos estructuras van a describir el estado del proceso y le van a permitir al kernel su control. La Tabla de Procesos tiene campos que van a ser accesibles desde el kernel, pero los campos del Área de Usuario sólo necesitan ser visibles por el proceso. Una posición (entrada) por proceso.

Las Áreas de Usuario se reservan cuando se crea un proceso y no es necesario que una entrada de la Tabla de Procesos que no aloja a ningún proceso tenga reservada un área de usuario.

55..22..11 TTaabbllaa ddee PPrroocceessooss.. Cada proceso se referencia por un descriptor (descriptor del proceso).

Este descriptor contiene los atributos del proceso, así como la información que permite gestionarlo.

55..22..22 TTaabbllaa ddee PPrroocceessooss eenn LLiinnuuxx.. En Linux, inicialmente, la Tabla de Procesos era un vector de tamaño

fijo de task_strcut <linux/sched.h>, con lo que el número máximo de procesos estaba limitado. Actualmente, la Tabla de Procesos es realmente una lista doblemente enlazada mediante los punteros next_task y prev_task.

EEEssstttrrruuuccctttuuurrraaa dddeeelll dddeeessscccrrriiippptttooorrr dddeee ppprrroooccceeesssooosss eeennn LLLiiinnnuuuxxx (((PPPCCCBBB === PPPrrroooccceeessssss CCCooonnntttrrrooolll BBBllloooccckkk)))...

En Linux el PCB (Process Control Block) es una estructura denominada task_strcut en el archivo include/linux/sched.h. En ella aparece tipo de información sobre cada uno de los procesos. Muchas partes del sistema operativo hacen uso de esta estructura de datos, por lo que es necesario conocer los campos más importantes de task_struct.

Para gestionar los procesos, el kernel, en general, divide (conceptualmente y en la implementación) la información del proceso en dos apartados: la necesaria para localizarlo y planificarlo (Tabla de Procesos) y el resto de informaciones referentes la proceso (u-Area).

Tabla de Procesos localizar el proceso y su u-Area;

u-Area caracterización detallada del proceso.

Page 26: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 23 de 42

Tabla de Procesos u-Area Global del Kernel (todos los procesos) Local, asociada al proceso (sólo

visible al proceso en ejecución) Estática (n entradas) Dinámica (solo para procesos

en el sistema) Estado Puntero a la tabla de procesos Localización de la u-Area Identificadores (permisos),

máscaras de permisos (create) Tamaño del proceso Detalle de tiempos Identificadores (grupos, señales) Acción ante señales Evento en el que duerme Terminal asociada, cuotas de

proceso y archivos Parámetros de planificación Campo de error en llamadas al

sistema Señales recibidas no atendidas Valor de retorno en llamadas al

sistema Tiempos y recursos consumidos Parámetros para E/S, Curr_dir y

Root_dir, Tabla de archivos

55..33 OORRGGAANNIIZZAACCIIÓÓNN DDEE LLAA MMEEMMOORRIIAA DDEELL SSIISSTTEEMMAA.. La memoria física de una máquina es direccionable desde el byte 0

hasta el byte que se corresponde con la memoria total de la máquina.

En UNIX, el kernel genera direcciones para un proceso en un espacio de direcciones virtual dentro de un rango dado.

– No hay otros procesos en dicho rango de direcciones virtual Þ no hay conflictos para el uso de la memoria entre procesos.

– La memoria es infinita.

Unidad de gestión de memoria de la máquina.

– Direcciones virtuales Þ Direcciones físicas.

Los subsistemas del kernel y del hardware (control del hardware) cooperan para realizar la traducción de direcciones virtuales a físicas Þ subsistema de gestión de memoria.

Page 27: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 24 de 42

555...333...111 AAAsssiiigggnnnaaaccciiióóónnn dddeee mmmeeemmmooorrriiiaaa...

Cuando un proceso empieza su ejecución, sus segmentos (código, datos y pila) poseen un tamaño fijo. Sin embargo, existen funciones de asignación y liberación de memoria, que permiten a un proceso manipular variables cuyo número o tamaño no es conocido en el momento de su compilación Þ asignación y liberación de memoria de forma dinámica (funciones malloc, calloc, realloc, free).

Las asignaciones y liberaciones se efectúan modificando el tamaño del segmento de datos del proceso.

Cuando debe asignarse un dato, el segmento de datos aumenta en el número de bytes necesario y el dato puede almacenarse en el espacio de memoria así asignado. Cuando un dato situado al final del segmento de datos deja de utilizarse, su liberación consiste simplemente en reducir el tamaño del segmento.

Page 28: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 25 de 42

555...333...222... RRReeegggiiiooonnneeesss...

UNIX divide el espacio de direcciones virtual del proceso en zonas lógicas. Como se ha expuesto anteriormente el espacio de direccionamiento de un proceso se compone de varias regiones de memoria. Cada región de memoria se caracteriza por varios atributos:

-Sus direcciones de inicio y fin.

-Los derechos de acceso que tiene asociados.

-El objeto asociado (por ejemplo, un archivo ejecutable que contiene el código ejecutable para el proceso).

Región: Área contigua del espacio de direcciones virtuales de un proceso que puede ser tratada como un objeto a ser protegido o compartido.

– Como entidad, se puede tratar como un objeto cuyas operaciones principales son:

+ Creación y eliminación de regiones de memoria.

+ Proteger regiones de memoria.

+ Modificaciones para las protecciones de las regiones de memoria.

+ Reasignar regiones de memoria.

+ Compartir regiones de memoria.

– Concepto de Región: Independiente de la política de gestión de memoria implementada en el sistema operativo.

Las regiones de memoria contenidas en el espacio de direccionamiento de un proceso pueden determinarse mostrando el contenido del archivo maps, situado en el directorio de cada proceso en el sistema de archivos /proc.

555...333...333... PPPááágggiiinnnaaasss yyy TTTaaabbblllaaasss dddeee PPPááágggiiinnnaaasss...

UNIX utiliza los mecanismos de memoria virtual proporcionados por el procesador sobre el que se ejecuta (paginación y segmentación). Las direcciones manipuladas por el kernel y los procesos son direcciones lógicas y el procesador junto con el sistema operativo efectúa una conversión para transformar una dirección lógica en dirección física en memoria principal. Ahora, vamos a presentar como modelo de trabajo un esquema de gestión de memoria por Páginas (bloques de memoria de igual tamaño [512B...4KB], cuyo formato de dirección es del tipo (página, desplazamiento). El kernel asigna páginas a las regiones (sin continuidad ni orden) lo que le proporciona gran flexibilidad, con un nivel controlado de fragmentación (en la última

Page 29: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 26 de 42

página de cada región) y un coste razonable de gestión (memoria para las tablas).

La idea en que se basa la memoria virtual es que el tamaño combinado del código, datos y pila puede exceder la cantidad de memoria física disponible. El sistema operativo mantiene en memoria principal las partes del programa que actualmente se están utilizando y el resto en disco. La memoria virtual también puede funcionar en un sistema de tiempo compartido, manteniendo segmentos de muchos programas en memoria a la vez. Mientras que un programa está esperando que se traiga a la memoria principal una de sus partes, está esperando una operación de E/S y no puede ejecutarse, así que puede otorgarse la CPU a otro proceso, lo mismo que cualquier otro sistema de tiempo compartido.

Page 30: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 27 de 42

555...333...444 TTTaaabbblllaaa dddeee pppááágggiiinnnaaasss gggeeessstttiiiooonnnaaadddaaasss pppooorrr LLLiiinnnuuuxxx ⇒ 3 niveles. Linux gestiona la memoria central y las tablas de páginas utilizadas para convertir las direcciones virtuales en direcciones físicas.

Implementa una gestión de la memoria que es ampliamente independiente del procesador sobre el que se ejecuta. En realidad, la gestión de la memoria implementada por Linux considera que dispone de una tabla de páginas a tres niveles:

+ El directorio global de tablas páginas (page global directory) cuyas entradas contienen las direcciones de páginas que contienen tablas intermedias.

+ El directorio intermedio de tablas páginas (page middle directory) cuyas entradas contienen las direcciones de las páginas que contienen las tablas de páginas.

+ Las tablas de páginas (page table) cuyas entradas contienen las direcciones de páginas de memoria que contienen el código o los datos utilizados por el kernel o los procesos de usuario.

Este modelo no siempre se corresponde al procesador sobre el cual Linux se ejecuta (los procesadores x86, utilizan una tabla de páginas que sólo posee dos niveles). El kernel efectúa una correspondencia entre el modelo implementado por el procesador y el modelo de Linux (en los procesadores x86, el kernel considera que la tabla intermedia sólo tiene una entrada).

55..44 SSIINNCCRROONNIIZZAACCIIÓÓNN DDEE PPRROOCCEESSOOSS EENN LLIINNUUXX.. En un instante dado, sólo un proceso puede ejecutarse en modo

kernel. Aunque es posible que se apliquen interrupciones hardware y software a este proceso, Linux no provoca la planificación (scheduler) si el proceso actual está activo en modo kernel. Un proceso que se ejecuta en modo kernel puede provocar, sin embargo, un cambio del proceso actual suspendiendo su ejecución (dormir). Esta suspensión voluntaria se debe

Page 31: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 28 de 42

generalmente a la espera de un evento, tal como el fin de una entrada/salida o la terminación de un proceso hijo. Linux proporciona varios mecanismos que permiten a los procesos sincronizarse en modo kernel (implementadas en el código del kernel = servicios internos): las “bottom-halves”, los temporizadores (timers), las colas de tareas, las colas de espera y los semáforos (control de acceso a un recurso).

66.. GGeessttiióónn ddee llaa mmeemmoorriiaa 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. En Linux, además, un proceso tiene dos espacios de memoria: el espacio de memoria del usuario, único para ese proceso, y el espacio de memoria del kernel, idéntico en todos los procesos.

66..11 GGEESSTTIIÓÓNN DDEE MMEEMMOORRIIAA EENN UUNNIIXX

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

Page 32: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 29 de 42

666...111...111... PPPaaagggiiinnnaaaccciiióóónnn pppooorrr DDDeeemmmaaannndddaaa

Hardware: arquitectura basada en páginas y CPU instrucciones rearrancables Þ Soporta que el kernel implemente un algoritmo de demanda de páginas. Un proceso no tiene que caber entero en memoria física para ejecutarse. La carga en memoria principal de una parte de un proceso relevante se hace de forma dinámica.

Transparente a programas de usuario excepto por el tamaño virtual permisible a proceso (controlado por el kernel).

Working Set (conjunto de trabajo) Þ El conjunto de trabajo de un proceso en un instante virtual t y con un parámetro D, denominado W(t, D), es el conjunto de páginas a las que el proceso ha hecho referencia en las últimas D unidades de tiempo virtual, siendo el tiempo virtual el tiempo que transcurre mientras el proceso está realmente en ejecución.

Si un proceso direcciona una página que no pertenece al Working Set Þ provoca una falta de página, entonces el kernel actualiza el Working Set, leyendo páginas desde memoria secundaria si es necesario.

666...111...222 EEEssstttrrruuuccctttuuurrraaasss dddeee DDDaaatttooosss pppaaarrraaa PPPaaagggiiinnnaaaccciiióóónnn pppooorrr DDDeeemmmaaannndddaaa (((UUUNNNIIIXXX)))

Estructuras de datos para la gestión de memoria a bajo nivel y demanda de páginas (sistema de paginación):

Tabla de páginas Normalmente, hay una tabla por proceso, con una entrada para cada página de la memoria virtual del proceso.

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.

Tabla de marcos de página (pfdata) Describe cada marca de la memoria real y está indexada por el número de marco.

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.

Sistema de paginación de UNIX System V. El kernel evita copiar la página, incrementa el contador de referencia regiones compartidas y para las regiones privadas asigna una nueva entrada en la tabla de regiones y tabla de páginas. Además, el kernel examina cada entrada en la tabla de regiones del proceso padre: Si la página es válida: (1) Incrementa el contador de

Page 33: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 30 de 42

referencia en la entrada de la tabla de marcos de páginas (pfdata), (2) Si la página existe en un dispositivo de swap, entonces contador de referencias de la tabla de uso del swap para página se incrementa en (Figura 3.8, fork en demanda de páginas), referencias a página a través de ambas regiones; (3) Si un proceso escribe en ella (página) Þ kernel crea versión privada el kernel pone bit Copia en escritura = 1 para cada entrada de la tabla de páginas en regiones privadas del proceso padre y del proceso hijo durante el fork.

Page 34: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 31 de 42

66..22 GGEESSTTIIÓÓNN DDEE MMEEMMOORRIIAA EENN LLIINNUUXX

Linux comparte muchas de las características de los esquemas de gestión de memoria de otras implementaciones UNIX, pero tiene sus características propias y únicas, aunque hay que destacar que el esquema de gestión de memoria de Linux es bastante complejo.

En lo que respecta a memoria virtual, el direccionamiento de memoria virtual de Linux, hace uso de una estructura de tabla de páginas con tres niveles, formada por los siguientes tipos de tablas (cada tabla individual es del tamaño de una página): (1) Directorio de páginas Þ un proceso activo tiene un solo directorio de páginas que es del tamaño de una página. Cada entrada en el directorio de páginas apunta a una página del directorio intermedio de páginas. Para un proceso activo, el directorio de páginas tiene que estar en la memoria principal; (2) Directorio intermedio de páginas Þ este directorio puede ocupar varias páginas y cada entrada de este directorio apunta a una página de la tabla de páginas; (3) Tabla de páginas Þ esta tabla de páginas también puede ocupar varias páginas, y cada entrada de la tabla de página hace referencia a una tabla virtual del proceso.

Para utilizar esta estructura de la tabla de páginas a tres niveles, una dirección virtual en Linux se ve como un conjunto de cuatro campos. El campo más a la izquierda (más significativo) se utiliza como índice en el directorio de páginas. El siguiente campo sirve como índice en el directorio intermedio de páginas. El tercer campo sirve como índice en la tabla de páginas. Y el cuarto y último campo, indica el desplazamiento dentro de la página seleccionada de la memoria. La estructura de tabla de página en Linux es independiente de la plataforma y fue diseñada para ajustarse al procesador Alpha de 64 bits, el cual proporciona soporte de hardware para los tres niveles de paginación. Con direcciones de 64 bits, el uso de sólo dos niveles de páginas en el procesador Alpha generaría tablas de páginas y directorios muy grandes. Los 32 bits de la arquitectura i386 tienen un mecanismo de paginación a dos niveles en su hardware. El software de Linux se ajusta al esquema de dos niveles definiendo el tamaño del directorio intermedio como uno.

Para la asignación de páginas y aumentar la eficiencia de cargar y descargar páginas a y desde la memoria principal, Linux define un mecanismo para tratar bloques de páginas contiguos correspondientes a bloques de marcos de páginas contiguos. Pare este propósito, se utiliza el Buddy System. El kernel mantiene una lista de grupos de marcos de página contiguos de tamaño fijo; un grupo puede estar formado por 1, 2, 3, 8, 16 o 32 marcos de páginas. Como las páginas se asignan y liberan en la memoria principal, los grupos se dividen y se intercalan utilizando el algoritmo de los colegas (buddy algorithm).

El algoritmo de reemplazo de páginas de Linux se basa en el algoritmo del reloj (clock). En el algoritmo de reloj estándar, se asocia un bit de uso y un bit de modificación a cada página de la memoria principal. En el esquema

Page 35: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 32 de 42

de Linux, una variable de edad de 8 bits sustituye al bit de uso. Cada vez que se accede a una página, se incrementa la variable edad, Linux recorre periódicamente la reserva de páginas globales y disminuye la variable de edad de cada página cuando rota por todas las páginas de la memoria principal. Una página con un envejecimiento 0 es una página “vieja” que no se ha referenciado en bastante tiempo y es la mejor candidata para el reemplazo. Cuando mayor valor de edad, más frecuentemente se ha usado la página recientemente y menos elegible es para el reemplazo. De esta forma, el algoritmo de reemplazo de páginas de Linux es una aproximación de la política LRU.

Los fundamentos de asignación de memoria al kernel de Linux es el mecanismo de asignación de páginas utilizado para la gestión de memoria virtual de usuario. Como en el esquema de memoria virtual se utiliza un algoritmo de colegas (buddy algorithm) par asignar y liberar la memoria del kernel en unidades de uno o más páginas. Puesto que la mínima cantidad de memoria que se puede asignar de esta forma es una página, el gestor de páginas solamente podría ser ineficiente si el kernel requiere pequeños trozos de memoria a corto plazo y en tamaños irregulares. Para gestionar a estas pequeñas asignaciones, Linux utiliza un esquema conocido como asignación por fragmentos (slab allocation) dentro de una página asignada. En un procesador i386, el tamaño de página es de 4Kbytes y los fragmentos que se pueden asignar dentro de una página pueden ser de 32, 64, 128, 252, 508, 2040 y 4080 bytes. La asignación de fragmentos es relativamente compleja, en general, Linux mantiene un conjunto de listas enlazadas, una por cada tamaño de fragmento. Los fragmentos pueden dividirse y agregarse de forma similar al algoritmo de los colegas (buddy algorithm) y se mueve entre las listas en función de ello.

666...222...111 DDDiiirrreeecccccciiiooonnnaaammmiiieeennntttooo dddeee MMMeeemmmooorrriiiaaa eeennn LLLiiinnnuuuxxx

La memoria es uno de los recursos fundamentales para un proceso. El sistema operativo debe ofrecer la memoria a todos los procesos por igual de una forma sencilla y uniforme. Al mismo tiempo, el sistema operativo debe tratar con el hardware real para realizar dicha función, aprovechándolo al máximo. El direccionamiento es una parte importante de la gestión de memoria, puesto que influye mucho tanto en la visión de la misma por parte de un proceso, como en el aprovechamiento del hardware y el rendimiento del sistema.

Desde el punto de vista de la arquitectura, el sistema operativo suele tener asistencia del hardware para realizar la gestión memoria: (1) Memory Management Unit (MMU), unidad que realiza, en el i386, segmentación y paginación; (2) Bits reservados en selectores de segmento; (3) Bits reservados en descriptores de página; (4) Bits de protección. Sin embargo, el sistema operativo es libre de usar o no dichos recursos. Por ejemplo, la segmentación de los i386 no se emplea con toda su potencia en Linux. Por

Page 36: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 33 de 42

otro lado, el sistema operativo debe suplir carencias del hardware si es posible. Por ejemplo, usando bits disponibles o con técnicas más sofisticadas.

Desde el punto de vista del proceso, son deseables ciertas características relacionadas con el direccionamiento: (1) Protección. La memoria de un proceso debe estar separada de la memoria de los demás procesos. Salvo para threads del mismo proceso. En Linux un proceso realmente tiene un espacio de direcciones de usuario, que es propio, y un espacio de direcciones del kernel, que comparte con todos los procesos. (2) Memoria virtual. El proceso debe tener la ilusión de estar solo en el sistema. Espacio de direcciones contiguo y que comienza en 0. Esto facilita el trabajo de los compiladores.

Otras características de la gestión de memoria también son deseables, si bien están menos relacionadas con el direccionamiento: (1) Ofrecer al proceso más memoria de la que hay físicamente disponible. Se emplean técnicas de swapping y paginación por demanda. (2) Aprovechar la memoria mediante técnicas Copy-onwrite . (3) Mapeado de ficheros sobre memoria. (4) En general, mejorar el rendimiento del sistema mediante diversas técnicas a la hora de asignar o liberar memoria (Buddy system, Slab allocator, caches, etc).

666...222...222... SSSeeegggmmmeeennntttaaaccciiióóónnn eeennn LLLiiinnnuuuxxx

Linux no aprovecha la segmentación del i386. Sin embargo, no puede desactivarla, la utiliza de una forma muy limitada. Se ha preferido la paginación sobre la segmentación porque: (1) La gestión de memoria es más simple cuando todos los procesos usan los mismos valores de segmentos, es decir, tienen las mismas direcciones lineales. (2) Un objetivo de Linux es la portabilidad, y muchos procesadores soportan la segmentación de forma muy limitada.

Para hacer uso de la segmentación, se programa adecuadamente la GDT = Tabla de Descriptores Global.

Esta tabla es implementada por el array gdt_table referenciada por la variable gdt, que se encuentra definido en el archivo arch/i386/kernel/head.S. Los segmentos que se definen se superponen en el espacio de direcciones lineal. Como se emplean muy pocos segmentos, solo es necesaria la GDT. La LDT no se usa por el kernel salvo que lo requiera un proceso, aunque existe una llamada al sistema que permite crear sus propias LDTs.

Los segmentos empleados en Linux son los siguientes:

Segmento de código del kernel.

Base: 0x00000000, Límite (limit): 0xfffff,

G = 1 (granularidad en páginas),

Page 37: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 34 de 42

S = 1 (Segmento normal de código o datos),

Type = 0xa (Código, puede ser leído y ejecutado),

DPL = 0 (Modo kernel para el nivel de privilegio del descriptor),

D/B = 1 (Offset de 32 bits),

Abarca desde 0 a 232 – 1, y el selector de segmentose define por la macro __KERNEL_CS. Para direccionar el segmento, el kernel se tiene que cargar el valor asociado a esta macro en el registro CS.

Segmento de datos del kernel:

Base: 0x00000000, Límite (limit): 0xfffff,

G = 1 (granularidad en páginas),

S = 1 (Segmento normal de código o datos),

Type = 0x2 (Datos, puede ser leído y escrito),

DPL = 0 (Modo kernel),

D/B = 1 (Offset de 32 bits),

déntico al descriptor de segmento anterior salvo por el tipo, y se define por la macro __KERNEL_DS.

Segmento de código de usuario:

Base: 0x00000000, Límite: 0xfffff

G = 1 (granularidad en páginas)

S = 1 (Segmento normal de código o datos)

Type = 0xa (Código, puede ser leído y ejecutado)

DPL = 3 (Modo usuario)

D/B = 1 (Offset de 32 bits)

El descriptor de segmento se define por la macro __USER_CS.

Segmento de datos de usuario:

Base: 0x00000000, Límite: 0xfffff,

G = 1 (granularidad en páginas),

S = 1 (Segmento normal de código o datos),

Type = 0x2 (Datos, puede ser leído y escrito),

DPL = 3 (Modo usuario),

D/B = 1 (Offset de 32 bits),

El descriptor de segmento se define por la macro __USER_DS.

Page 38: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 35 de 42

Un Segmento de Estado de Tarea (TSS) para cada proceso. El campo base del descriptor de TSS contiene la dirección del campo tss del descriptor de proceso correspondiente.

666...222...333 PPPaaagggiiinnnaaaccciiióóónnn eeennn LLLiiinnnuuuxxx

Para tener en cuenta arquitecturas de 64 bits, la paginación en Linux tiene 3 niveles de tablas de páginas en lugar de 2. En los i386, la tabla de directorio intermedio de tablas de páginas se obvia.

Linux gestiona la memoria central y las tablas de páginas utilizadas para convertir las direcciones lineales (virtuales) en direcciones físicas. Implementa una gestión de la memoria que es ampliamente independiente del procesador sobre el que se ejecuta. En realidad, la gestión de la memoria implementada por Linux considera que dispone de una tabla de páginas a tres niveles: (1) directorio global de tablas de páginas (page global dirertory) cuyas entradas contienen las direcciones de páginas que contienen tablas intermedias; (2) directorio intermedio de tablas de páginas (page middle directory) cuyas entradas contienen las direcciones de páginas que contienen tablas de páginas; (3) las tablas de páginas (page table) cuyas entradas contienen las direcciones de páginas de memoria que contienen el código o los datos utilizados por el kernel o los procesos de usuario. Evidentemente, este modelo no siempre corresponde al procesador sobre el cual Linux se ejecuta (los procesadores i386, por ejemplo, utilizan una tabla de páginas que sólo posee dos niveles). El kernel efectúa una correspondencia entre el modelo implementado por el procesador y el modelo de Linux.

En los procesadores i386, por ejemplo, el kernel considera que el directorio intermedio de tablas de páginas sólo contiene una entrada.

La MMU de reinicializa con un nuevo directorio de tablas de páginas para cada proceso. Así se consiguen aislar espacios de direcciones. Se emplean los bits User/Supervisor y Read/Write para la protección. Se emplean los anteriores bits junto con los bits Dirty y Accessed para manejar las diferentes posibilidades de falta de página. Linux depende fuertemente de la paginación para la gestión de procesos. De hecho, la traducción automática de dirección lineal a dirección física hace posible los siguientes objetivos: (1) Asignar un espacio de direcciones físicas diferentes a cada proceso, asegurando una protección eficiente ante errores de direccionamiento. (2) Distinguir páginas (grupos de datos) de marcos de páginas (direcciones físicas en memoria principal). Esto permite a la misma página que se almacene en un marco de página, entonces guardar en disco y después recargarla en un marco de página diferente. Esto es muy importante para el mecanismo de memoria virtual.

En Linux el espacio de direcciones lineales se divide en dos partes: (1) Direcciones lineales desde 0x0000000 a PAGE_OFFSET – l, accesibles en

Page 39: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 36 de 42

cualquier modo (usuario o kernel). (2) Direcciones lineales desde PAGE_OFFSET hasta 0xffffffff, sólo en modo kernel. Generalmente PAGE_OFFSET se inicializa a 0xc0000000 (3Gb). Las primeras 768 entradas del directorio de tablas de páginas (que mapean los primeros 3Gb) dependen de cada proceso. El resto de entradas son las mismas para todos los procesos. El mapeado final proyecta las direcciones lineales empezando en PAGE_OFFSET en direcciones físicas empezando en 0.

Toda la memoria física debe ser accesible por el kernel. Éste mantiene un conjunto de tablas de páginas para su propio uso, cuya raíz es el master kernel Page Global Directory. Después de la inicialización del sistema este conjunto de tablas de páginas no son utilizadas nunca por ningún proceso o thread del kernel.

77.. SSeegguurriiddaadd eenn UUnniixx Dentro de la familia Unix existen una serie de sistemas denominados

'Unix seguros' o 'Unix fiables' (Trusted Unix); se trata de sistemas con excelentes sistemas de control, evaluados por la National Security Agency (NSA) estadounidense y clasificados en niveles seguros (B o A). Entre estos Unix seguros podemos encontrar AT&T System V/MLS y OSF/1 (B1), Trusted Xenix (B2) y XTS-300 STOP 4.1 (B3), considerados los sistemas operativos más seguros del mundo (siempre según la NSA). La gran mayoría de Unices (Solaris, AIX...) están clasificados como C2, y algunos otros, como Linux, se consideran sistemas C2 de facto: al no tener una empresa que pague el proceso de evaluación de la NSA no están catalogados, aunque puedan implementar todos los mecanismos de los sistemas C2.

77..11 PPeerrmmiissooss ddee uunn aarrcchhiivvoo Los permisos de cada archivo son la protección más básica de estos

objetos del sistema operativo; definen quién puede acceder a cada uno de ellos, y de qué forma puede hacerlo. Una r indica un permiso de lectura, una w de escritura, una x de ejecución y un '-' indica que el permiso

Page 40: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 37 de 42

correspondiente no está activado. Así, si en una de las ternas tenemos los caracteres rwx, el usuario o usuarios afectados por esa terna tiene o tienen permisos para realizar cualquier operación sobre el archivo. ¿De qué usuarios se trata en cada caso? La primera terna afecta al propietario del archivo, la segunda al grupo del propietario cuando lo creó (recordemos un mismo usuario puede pertenecer a varios grupos) y la tercera al resto de usuarios.

77..22 AAttrriibbuuttooss ddee llooss aarrcchhiivvooss eenn eexxtt22ffss.. En el sistema de archivos ext2 ( Second Extended File System) de

Linux existen ciertos atributos para los archivos que pueden ayudar a incrementar la seguridad de un sistema. Estos atributos son los mostrados en la siguiente tabla.

A Don´t update Atime S Synchronous updates a Append only c Compressed file i Immutable file d No Dump s Secure deletion u Undeletable file

El atributo 'a' sobre un archivo indica que este sólo se puede abrir en modo escritura para añadir datos.

El atributo 'i' (archivo inmutable); un archivo con este flag activado no se puede modificar de ninguna forma, ni añadiendo datos ni borrándolos, ni eliminar el archivo.

Los atributos ‘s' y 'S'. Si borramos un archivo con el atributo 's' activo, el sistema va a rellenar sus bloques con ceros en lugar de efectuar un simple unlink().

Por su parte, el atributo 'S' sobre un archivo hace que los cambios sobre el archivo se escriban inmediatamente en el disco

77..33 CCrriippttooggrraaffííaa La criptografía es la herramienta principal utilizada en la mayoría de

los sistemas de almacenamiento seguro; sin embargo, todos ellos plantean un grave problema: toda su seguridad reside en la clave de cifrado, de forma que el usuario se encuentra indefenso ante métodos legales - o ilegales - que le puedan obligar a desvelar esta clave una vez que se ha determinado la presencia de información cifrada en un dispositivo de almacenamiento. Todos los expertos en criptografía coinciden en afirmar que los métodos de ataque más efectivos contra un criptosistema no son los efectuados contra el

Page 41: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 38 de 42

algoritmo, sino contra las personas (chantaje, amenazas, presiones judiciales, etc...).

77..44 AAllmmaacceennaammiieennttoo sseegguurroo La orden crypt permite cifrar y descifrar archivos en diferentes

sistemas Unix; si no recibe parámetros lee los datos de la entrada estándar y los escribe en la salida estándar, por lo que seguramente habremos de redirigir ambas a los nombres de archivo adecuados. Un ejemplo simple de su uso puede ser el siguiente:

$ crypt <archivo.txt >archivo.crypt

Enter key:

$

Para descifrar un archivo cifrado mediante crypt (por ejemplo, el anterior) utilizamos la misma orden y la misma clave:

$ crypt <archivo.crypt>salida.txt

Enter key:

$

PGP: Pretty Good Privacy

El software PGP, desarrollado por el criptólogo estadounidense Phil Zimmermann, es mundialmente conocido como sistema de firma digital para correo electrónico. Aparte de esta función, PGP permite también el cifrado de archivos de forma convencional mediante criptografía simétrica; esta faceta de PGP convierte a este programa en una excelente herramienta para cifrar archivos que almacenamos en nuestro sistema; el modo de uso es el siguiente:

anita:~$ pgp -c archivo.txt

No configuration file found.

77..55 CCooppiiaass ddee sseegguurriiddaadd Las copias de seguridad del sistema son con frecuencia el único

mecanismo de recuperación que poseen los administradores para restaurar una máquina que por cualquier motivo - no siempre se ha de tratar de un pirata que borra los discos - ha perdido datos. Por tanto, una correcta política para realizar, almacenar y, en caso de ser necesario, restaurar los backups es vital en la planificación de seguridad de todo sistema.

La herramienta clásica para realizar backups en entornos Unix es desde hace años dump, que vuelca sistemas de archivos completos (una partición o una partición virtual en los sistemas que las soportan, como Solaris); restore se utiliza para recuperar archivos de esas copias. Se trata

Page 42: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 39 de 42

de una utilidad disponible en la mayoría de clones del sistema operativo, potente (no diremos 'sencilla') y lo más importante: las copias son completamente compatibles entre Unices, de forma que por ejemplo podemos restaurar un backup realizado en IRIX en un sistema HP-UX. Además, la mayor parte de las versiones de dump permiten realizar copias de seguridad sobre máquinas remotas directamente desde línea de órdenes.

77..66 AAuutteennttiiccaacciióónn ddee uussuuaarriiooss Los métodos de autenticación se suelen dividir en tres grandes

categorías:

• Algo que el usuario sabe

• Algo que éste posee.

• Una característica física del usuario o un acto involuntario del mismo. Esta última categoría se conoce con el nombre de autenticación biométrica.

77..77 SSeegguurriiddaadd ddeell nnúúcclleeoo El núcleo o kernel de un sistema Unix es la parte más importante del

mismo, hasta tal punto que en términos puristas se considera al núcleo como el sistema operativo en sí. Pero incluso si no lo consideramos así, y contemplamos al sistema operativo como el conjunto formado por el núcleo y una serie de herramientas (editor, compilador, enlazador, shell...), es innegable que el kernel es la parte del sistema más importante, y con diferencia: mientras que las aplicaciones operan en el espacio de usuario, el núcleo siempre trabaja en el modo privilegiado del procesador (RING 0). Esto implica que no se le impone ninguna restricción a la hora de ejecutarse: utiliza todas las instrucciones del procesador, direcciona toda la memoria, accede directamente al hardware (más concretamente, a los manejadores de dispositivos), etc. De esta forma, un error en la programación, o incluso en la configuración del núcleo puede ser fatal para nuestro sistema.

El archivo /etc/system

En este archivo el administrador puede definir variables para el núcleo del sistema operativo, como el número máximo de archivos abiertos por un proceso o el uso de memoria compartida, semáforos y mensajes para intercomunicación entre procesos.

Una negación de servicio muy típica en Unix es el consumo excesivo de recursos por parte de usuarios que lanzan - voluntaria o involuntariamente - demasiados procesos; y un pequeño error en el código puede hacer que el sistema se vea parado por un exceso de procesos activos en la tabla, por lo que si deseamos asignar un valor máximo hemos de editar el archivo /etc/system e incluir una línea como la siguiente:

set maxuprc=60

Page 43: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 40 de 42

De esta forma limitamos el número de procesos por usuario a 60, consiguiendo así que un error en un programa no sea capaz de detener la máquina.

Un parámetro del sistema operativo especialmente importante, y que quizás nos interese modificar (sobre todo en máquinas con pocos recursos) es maxusers. Maxusers no hace referencia al número máximo de usuarios que pueden conectar simultáneamente al sistema, sino que es un valor que escala a otros parámetros del núcleo (como max_nproc, número máximo de procesos en la tabla) o maxuprc. Para modificarlo, podemos incluir en /etc/system una línea con el valor deseado, generalmente el tamaño en MB de la memoria física de nuestra máquina:

set maxusers=128

88.. SSeegguurriiddaadd eenn LLiinnuuxx Linux es un sistema muy robusto e incorpora las características de

seguridad comunes a todos los sistemas tipo Unix, a pesar de todo resulta fundamental dedicar cierto tiempo y recursos para conocer cuáles son sus debilidades y vías frecuentes de ataque y adoptar posteriorermente las medidas más eficaces para contrarrestarlas. A menudo un sistema operativo es tan seguro como la astucia y habilidad de su administrador.

888...111 SSSeeeggguuurrriiidddaaaddd lllooocccaaalll

En este aspecto de la seguridad, Linux dispone de todas las características de los sistemas Unix: un control de acceso a los usuarios verificando una pareja de usuario y clave; cada fichero y directorio tienen sus propietario y permisos.

Por otro lado, la meta de la mayoría de los ataques es conseguir acceso como root, lo que garantiza un control total sobre el sistema. Primero se intentará conseguir acceso como usuario "normal" para posteriormente ir incrementando sus niveles de privilegio utilizando las posibles debilidades del sistema: programas con errores, configuraciones deficientes de los servicios o el descifrado de claves cifradas. Incluso se utilizan técnicas denominadas "ingeniería social", consistentes en convencer a ciertos usuarios para que suministren una información que debiera ser mantenida en secreto, como sus nombres de usuario y contraseñas.

Page 44: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 41 de 42

99.. BBiibblliiooggrraaffííaa Unix - Wikipedia en español UNIX - la marca: desde el punto de vista legal, Unix es una marca de mercado.

... Resumiendo, la marca Unix no es propiedad de ninguna compañía. ... es.wikipedia.org/wiki/Unix

Sistema Operativo UNIX - Monografias.com El sistema de archivos de Unix; esta basado en un modelo arborescente y recursivo,

... En el sistema operativo Unix los procesos pueden comunicarse ... www.monografias.com/trabajos/unix/unix.shtml - 78k

Unix y Seguridad Información sobre seguridad informática en general y bajo entornos Unix en particular.

Programación bajo Unix. andercheran.aiind.upv.es/toni/

Documentación sobre Unix Libro de libre distribución "Seguridad en Unix y redes", curso de introducción

a este sistema, curso de administración, enlaces y scripts útiles. andercheran.aiind.upv.es/toni/personal/ - 8k

CASO DE ESTUDIO: UNIX Unix es uno de los sistemas operativos más ampliamente usados en computadoras

... Debido a las múltiples versiones en el mercado de UNIX, se comenzaron a ... www.tau.org.ar/base/lara. pue.udlap.mx/sistoper/capitulo8.html - 17k

Page 45: Diferencias Entre Linux Unix

Sistema Operativo DDiiffeerreenncciiaass eennttrree LLiinnuuxx yy UUnniixx

Página 42 de 42

El rincón de Linux

El rincon de LINUX es un servidor con informacion en castellano sobre Linux. www.linux-es.org/ - 14k -

Linux - Wikipedia en español

Este artículo se refiere al sistema operativo Linux, para otros usos ver ... Linux es la denominación de un sistema operativo y el nombre de un núcleo. ... es.wikipedia.org/wiki/Linux - 46k

:: Todo-Linux.com ::

Noticias propias y enlazadas a Barrapunto y Slashdot, foros, chat, descarga de programas y documentación. www.todo-linux.com/

Linux Para Todos - Un buen sitio donde empezar...

Noticias, manuales y recursos Linux. ... Linux Para Todos invita a toda la comunidad del software libre, al evento XpoLinux 2005, que se llevará a cabo los ... www.linuxparatodos.net/ - 76k