Está en la página 1de 45

Facultad de Ingeniería en Sistemas

Sistemas Operativos
Proyecto final
- Diferencias entre Unix y Linux-

Profesor:
Randall Vargas

Estudiante:
Diana Alfaro
Tatiana Macchiavello Duarte

Grupo:
Martes - noche

Agosto 2005
Sistema Operativo
Diferencias entre Linux y Unix

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

Página I
Sistema Operativo
Diferencias entre Linux y Unix

7.7 SEGURIDAD DEL NÚCLEO .....................................................................................................................39


8. SEGURIDAD EN LINUX.......................................................................................................................40
8.1 Seguridad local.........................................................................................................................40
9. BIBLIOGRAFÍA .....................................................................................................................................41

Página II
Sistema Operativo
Diferencias entre Linux y Unix

1. Funciones del sistema operativo


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.

Página 1 de 42
Sistema Operativo
Diferencias entre Linux y Unix

2. INTRODUCCIÓN HISTÓRICA A UNIX Y LINUX.


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.

Página 2 de 42
Sistema Operativo
Diferencias entre Linux y Unix

(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

Página 3 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

3. VISIÓN GENERAL DE UNIX.


3.1. Estructura del Sistema.
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.

Página 4 de 42
Sistema Operativo
Diferencias entre Linux y Unix

¾ 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.

Página 5 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

33..11..11 SSiisstteem
maa O
Oppeerraattiiv
voo iin úaa ccoon
ntteerraaccttú n eell h
haarrd
dwwaarree..
¾ 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.

Página 6 de 42
Sistema Operativo
Diferencias entre Linux y Unix

33..11..22 EEll EEn


nttoorrn
noo d
dee PPrroocceessaam
miieen
nttoo..
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.

33..11..33 PPrriim
miittiiv
vaass d
dee C
Coon
nssttrru
ucccciióón
nddee BBllooqqu
ueess..
¾ 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.

Página 7 de 42
Sistema Operativo
Diferencias entre Linux y Unix

33..11..44 SSeerrv
viicciiooss d
deell SSiisstteem
maa O
Oppeerraattiiv
voo..
¾ 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.

Página 8 de 42
Sistema Operativo
Diferencias entre Linux y Unix

33..11..55 A
Assp
peeccttooss d
deell H
Haarrd
dwwaarree..
¾ 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.

33..11..66.. IIn
ntteerrrru
uppcciioon
neess y
y EExxcceep neess..
pcciioon
¾ 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.

Página 9 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

33..11..77 N
Niiv
veelleess d
dee EEjjeeccu
ucciióón
nddeell PPrroocceessaad
doorr..
¾ 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.

Página 10 de 42
Sistema Operativo
Diferencias entre Linux y Unix

33..11..88 M
Maan
neejjoo d
dee M
Meem
moorriiaa..
¾ 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.

4. Descripción de Linux y de sus Funcionalidades.


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.

Página 11 de 42
Sistema Operativo
Diferencias entre Linux y Unix

¾ 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.

4.1 Estructura General del Sistema Operativo Linux.


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

Página 12 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

Página 13 de 42
Sistema Operativo
Diferencias entre Linux y Unix

¾ 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.

Página 14 de 42
Sistema Operativo
Diferencias entre Linux y Unix

5. GESTIÓN DE PROCESOS
5.1 ESTADOS Y TRANSICIONES DE UN PROCESO.
55..11..11.. C
Ciicclloo V
Viid
daa d
dee u
un nU
n PPrroocceessoo een UN
NIIX
X.. C
Coon
njju
unnttoo EEssttaad
dooss
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.

Página 15 de 42
Sistema Operativo
Diferencias entre Linux y Unix

ƒ 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

Página 16 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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

Página 17 de 42
Sistema Operativo
Diferencias entre Linux y Unix

[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.

Página 18 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

Página 19 de 42
Sistema Operativo
Diferencias entre Linux y Unix

55..11..22 C
Ciicclloo ddee VViid
daa d dee u n PPrroocceessoo een
un n LLiin
nuuxx.. C
Coon
njju
unnttoo d
dee
EEssttaaddooss ((FFiiggu
urraa 22..22..))..
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).

Página 20 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

Página 21 de 42
Sistema Operativo
Diferencias entre Linux y Unix

5.2 ESTRUCTURAS DE DATOS DEL SISTEMA PARA LA


GESTIÓN DE PROCESOS.
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.

5.2.1 Tabla de Procesos.


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.

5.2.2 Tabla de Procesos en Linux.


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.

EEssttrru
uccttu
urraa d
deell ddeessccrriip
pttoorr d prroocceessooss een
dee p n LLiin
nuuxx ((PPC
CBB ==
PPrroocceessss C
Coonnttrrooll BBlloocck
k))..
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.

Página 22 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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

5.3 ORGANIZACIÓN DE LA MEMORIA DEL SISTEMA.


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.

Página 23 de 42
Sistema Operativo
Diferencias entre Linux y Unix

55..33..11 A
Assiiggn
naacciióón
nddee m
meem
moorriiaa..
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.

Página 24 de 42
Sistema Operativo
Diferencias entre Linux y Unix

55..33..22.. R
Reeggiioon
neess..
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.

55..33..33.. PPáággiin
naass y
yTTaabbllaass d naass..
dee PPáággiin
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

Página 25 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

Página 26 de 42
Sistema Operativo
Diferencias entre Linux y Unix

55..33..44 T
Taabbllaa d
dee p
páággiin
naass ggeessttiioon daass p
naad poorr LLiin
nuuxx ⇒ 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).

5.4 SINCRONIZACIÓN DE PROCESOS EN LINUX.


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

Página 27 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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).

6. Gestión de la memoria
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.

6.1 GESTIÓN DE MEMORIA EN UNIX


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.

Página 28 de 42
Sistema Operativo
Diferencias entre Linux y Unix

66..11..11.. PPaaggiin
naacciióón
nppoorr D
Deem
maan
nddaa
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.

66..11..22 EEssttrru
uccttu
urraass d
dee D paarraa PPaaggiin
Daattooss p naacciióón
nppoorr D
Deem
maan
nddaa
((U
UN NIIX X))
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

Página 29 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

Página 30 de 42
Sistema Operativo
Diferencias entre Linux y Unix

6.2 GESTIÓN DE MEMORIA EN LINUX


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

Página 31 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

66..22..11 D
Diirreecccciioon
naam
miieen
nttoo d
dee M moorriiaa een
Meem n LLiin
nuuxx
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

Página 32 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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).

66..22..22.. SSeeggm
meen
nttaacciióón
n een
n LLiin
nuuxx
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),

Página 33 de 42
Sistema Operativo
Diferencias entre Linux y Unix

¾ 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.

Página 34 de 42
Sistema Operativo
Diferencias entre Linux y Unix

¾ 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.

66..22..33 PPaaggiin
naacciióón
n een
n LLiin
nuuxx
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

Página 35 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

7. Seguridad en Unix
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.

7.1 Permisos de un archivo


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

Página 36 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

7.2 Atributos de los archivos en ext2fs.


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

7.3 Criptografía
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

Página 37 de 42
Sistema Operativo
Diferencias entre Linux y Unix

algoritmo, sino contra las personas (chantaje, amenazas, presiones


judiciales, etc...).

7.4 Almacenamiento seguro


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.

7.5 Copias de seguridad


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

Página 38 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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.

7.6 Autenticación de usuarios


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.

7.7 Seguridad del núcleo


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

Página 39 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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

8. Seguridad en Linux
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.

88..11 SSeeggu
urriid
daad
d llooccaall
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.

Página 40 de 42
Sistema Operativo
Diferencias entre Linux y Unix

9. Bibliografía
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

Página 41 de 42
Sistema Operativo
Diferencias entre Linux y Unix

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

Página 42 de 42

También podría gustarte