Está en la página 1de 308

Sistemass Op

peraativo
os
V129
9
 
CARLOS A. RUIZ GUTIÉRREZ  
 
 
 
 

SISTEMAS 
OPERATIVOS 
 
 
 
 
 

2012 
 
 
 
 
Ruiz Gutiérrez, Carlos Alberto 
 
Sistemas  operativos  [Archivo  de  Internet]  /  Carlos  A.  Ruiz  Gutiérrez.  –  Ávila:  Universidad  Católica  de 
Ávila, 2012. – 1 archivo de Internet (PDF).  – (Manuales) 
 
ISBN 978‐84‐9040‐088‐3       D.L. AV 181‐2012 
 
1. Sistemas operativos (Ordenadores)  
 
QA76.76.O63 
004.45 
 
 
 
 
 
© Servicio de Publicaciones 
Universidad Católica de Ávila 
C/ Canteros s/n. 05005 Ávila 
Tlf. 920 25 10 20  
publicaciones@ucavila.es 
www.ucavila.es 
 
 
 
© Primera edición (en papel): septiembre 2010 
     Reimpresión (en formato electrónico): septiembre 2012 
 
 
 
 
 
 
 
 
 
 
 
“Cualquier  forma  de  reproducción,  distribución,  comunicación  pública  o  transformación  de  esta  obra 
sólo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase 
a  CEDRO  (Centro  Español  de  Derechos  Reprográficos  http://www.cedro.org)  si  necesita  imprimir  o 
descargar algún fragmento de esta obra.” 
 
 
 
 
 
ISBN: 978‐84‐9040‐088‐3 
 
Depósito Legal: AV 181‐2012 
 
 
Índice general

UNIDAD 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS

1.1.  Definición de sistema operativo (SO) 


1.2.  Funciones del sistema operativo 
1.3.  Componentes del sistema operativo 
1.4.  Estructura del sistema operativo 
1.4.1.  Sistemas operativos monolíticos 
1.4.2.  Sistemas operativos estructurados 
1.5.  Gestión de procesos 
1.5.1.  Servicios de procesos 
1.6.  Gestión de memoria 
1.6.1.  Servicios de memoria 
1.7.  Comunicación y sincronización de procesos 
1.7.1.  Servicios de comunicación y sincronización 
1.8.  Gestión de la E/S 
1.8.1.  Servicios de la E/S 
1.9.  Gestión de archivos y directorios 
1.9.1.  Servicios de archivos 
1.9.2.  Servicios de directorios 
1.10.  Historia de los sistemas operativos 

Sistemas Operativos
1
UNIDAD 2. PROCESOS

2.1.  Concepto de proceso 


2.1.1.  Multitarea 
2.2.  Estados de un proceso 
2.2.1.  Cambio de contexto 
2.3.  Procesos ligeros 
2.3.1.  Información de los procesos ligeros 
2.3.2.  Estados de un proceso ligero 
2.3.3.  Paralelismo 
2.4.  Planificación de procesos 
2.4.1.  Planificación expulsiva/no expulsiva 
2.4.2.  Colas de procesos 
2.4.3.  Objetivos de la planificación 
2.5.  Algoritmos de planificación 
2.5.1.  FCFS (First Come First Served) 
2.5.2.  SJF (Sort Job First) 
2.5.3.  SRTF (Sort Remaining Time First) 
2.5.4.  RR (Round Robin) 
2.5.5.  Planificación basada en prioridades 
2.5.6.  Planificación basada en múltiples colas 

UNIDAD 3. COMUNICACIÓN Y SINCRONIZACIÓN DE PROCESOS

3.1.  Concurrencia 
3.1.1.  Ventajas de la ejecución concurrente 
3.1.2.  Tipos de procesos concurrentes 
3.2.  Problemas clásicos de comunicación y sincronización 
3.2.1.  Problema de la sección crítica 
3.2.2.  Problema del productor-consumidor 
3.2.3.  Problema de los lectores-escritores 
3.2.4.  Problema de los filósofos comensales 
3.3.  Mecanismos de comunicación y sincronización 
3.3.1.  Comunicación mediante archivos 
3.3.2.  Comunicación y sincronización mediante tuberías 
3.3.3.  Semáforos 
3.3.4.  Mutex y variables condicionales 
3.3.5.  Memoria compartida 
3.3.6.  Sincronización mediante señales 
3.3.7.  Paso de mensajes 

Sistemas Operativos
2
UNIDAD 4. INTERBLOQUEOS

4.1.  Definición 
4.2.  Interbloqueo en un sistema informático 
4.2.1.  Tipos de recursos 
4.3.  Modelado del sistema 
4.3.1.  Grafo de asignación de recursos 
4.3.2.  Matrices de asignación de recursos 
4.4.  Identificación del interbloqueo 
4.5.  Tratamiento del interbloqueo 
4.6.  Detección y recuperación del interbloqueo 
4.6.1.  Detección del interbloqueo 
4.6.2.  Recuperación del interbloqueo 
4.7.  Prevención del interbloqueo 
4.7.1.  Exclusión mutua 
4.7.2.  Retención y espera 
4.7.3.  No expropiación 
4.7.4.  Espera circular 
4.8.  Predicción del interbloqueo 
4.8.1.  Estado seguro 
4.8.2.  Algoritmos de predicción

Sistemas Operativos
3
UNIDAD 5. ENTRADA/SALIDA

5.1.  Definición 
5.2.  Clasificación de dispositivos de E/S 
5.2.1.  Conexión de un dispositivo de E/S 
5.2.2.  Dispositivos según dirección de E/S 
5.2.3.  Dispositivos de bloques o de caracteres 
5.2.4.  Dispositivos de E/S programada o por interrupciones 
5.3.  Mecanismos de optimización 
5.3.1.  Acceso directo a memoria (Dma) 
5.3.2.  Canales de E/S con Dma 
5.3.3.  Memoria caché 
5.3.4.  Solapamiento de operaciones 
5.4.  Estructura del sistema de E/S 
5.4.1.  Componentes del sistema de E/S 
5.5.  Software de entrada/salida 
5.5.1.  Manejadores de interrupción 
5.5.2.  Manejadores de dispositivos 
5.5.3.  Software independiente del dispositivo 
5.6.  Almacenamiento secundario 
5.6.1.  Discos 
5.6.2.  Políticas de planificación de disco 
5.6.3.  Fiabilidad y tolerancia a fallos

Sistemas Operativos
4
UNIDAD 6. ARCHIVOS Y DIRECTORIOS

6.1.  El sistema de archivos 


6.2.  Archivos 
6.2.1.  Nombres de archivos 
6.2.2.  Estructura de archivos 
6.2.3.  Métodos de acceso 
6.3.  Directorios 
6.3.1.  Estructura de directorios 
6.3.2.  Nombres de directorios 
6.4.  Servicios del sistema de archivos 
6.4.1.  Servicios para archivos 
6.4.2.  Servicios para directorios 
6.5.  Gestión de almacenamiento secundario 
6.5.1.  Asignación contigua 
6.5.2.  Asignación enlazada 
6.5.3.  Asignación FAT 
6.5.4.  Asignación indexada 
6.6.  Seguridad del sistema de archivos 
6.6.1.  Integridad del sistema de archivos 
6.6.2.  Fiabilidad y recuperación 
6.6.3.  Accesos al sistema de archivos 
6.6.4.  Identificación de usuarios 

Sistemas Operativos
5
UNIDAD 7. GESTIÓN DE MEMORIA

7.1.  El sistema de gestión de memoria 


7.1.1.  Funciones del sistema de gestión de memoria 
7.2.  Ciclo de vida de un programa 
7.3.  Intercambio 
7.4.  Memoria virtual 
7.4.1.  Fundamentos de la memoria virtual 
7.4.2.  Ventajas de la memoria virtual 
7.5.  Paginación 
7.5.1.  Mecanismos de optimización 
7.6.  Segmentación 
7.6.1.  Segmentación paginada 
7.7.  Paginación por demanda 
7.8.  Políticas de reemplazo 

UNIDAD 8. SEGURIDAD Y PROTECCIÓN

8.1.  Concepto de seguridad 


8.2.  Problemas de seguridad 
8.2.1.  Caballo de Troya 
8.2.2.  Puerta trasera 
8.2.3.  Bomba lógica 
8.2.4.  Desbordamiento de pila y de búfer 
8.2.5.  Virus 
8.2.6.  Gusanos 
8.2.7.  Escaneo de puertos 
8.2.8.  Denegación de servicio 
8.3.  Políticas de seguridad 
8.4.  Criptografía 
8.4.1.  Cifrado 
8.5.  Concepto de protección 
8.6.  Mecanismos de protección 
8.6.1.  Autenticación de usuarios 
8.6.2.  Utilización de claves 
8.6.3.  Dominios 
8.6.4.  Matrices

Sistemas Operativos
6
SISTEMAS
OPERATIVOS

1
INTRODUCCIÓN
A LOS SISTEMAS
OPERATIVOS

V129 (01)
Sistemas Operativos

ÍNDICE
♦  OBJETIVOS................................................................................................3 

♦  INTRODUCCIÓN ........................................................................................4 
1.1.  Definición de sistema operativo (SO)..................................................5 
1.2.  Funciones del sistema operativo ........................................................6 
1.3.  Componentes del sistema operativo ...................................................9 
1.4.  Estructura del sistema operativo ......................................................11 
1.4.1.  Sistemas operativos monolíticos ....................................................11 
1.4.2.  Sistemas operativos estructurados ................................................12 
1.5.  Gestión de procesos ..........................................................................14 
1.5.1.  Servicios de procesos ....................................................................15 
1.6.  Gestión de memoria ...........................................................................16 
1.6.1.  Servicios de memoria ....................................................................16 
1.7.  Comunicación y sincronización de procesos...................................17 
1.7.1.  Servicios de comunicación y sincronización...................................17 
1.8.  Gestión de la E/S ................................................................................18 
1.8.1.  Servicios de la E/S ........................................................................18 
1.9.  Gestión de archivos y directorios .....................................................19 
1.9.1.  Servicios de archivos .....................................................................21 
1.9.2.  Servicios de directorios ..................................................................21 
1.10.  Historia de los sistemas operativos ..................................................22 

♦  RESUMEN ................................................................................................29 

Unidad 1. Introducción a los sistemas operativos. 1


Sistemas Operativos

♦ OBJETIVOS

• Conocer la definición de sistema operativo (SO) y obtener una visión


amplia y sencilla de lo que es y para que se utiliza.

• Saber cuáles son las funciones y componentes principales de un SO.

• Diferenciar los distintos tipos de SO según su estructura.

• Entender el concepto de proceso, así como la forma de gestionarlos por el


SO.

• Familiarizarse con los componentes básicos de un SO, en los que se


profundizará más adelante, como son: la gestión de memoria, la gestión
de Entrada/Salida (E/S) y el tratamiento de archivos y directorios.

Unidad 1. Introducción a los sistemas operativos. 3


Formación Abierta

♦ INTRODUCCIÓN

Los sistemas operativos (SO) son una parte fundamental de cualquier


ordenador, ya que son los programas encargados de proporcionar al usuario
la capacidad de manejo y utilización de la máquina.

Un ordenador que solo disponga de su hardware, es una máquina totalmente


inútil, ya que por sí mismo es incapaz de hacer nada. Por ello necesita de
este “alma” al que llamamos sistema operativo, que le permitirá al usuario
manejar todos los recursos de la máquina de una forma sencilla y cómoda.

La visión que se debe tener de un SO es similar a la de un director de


orquesta. Es el encargado de coordinar a todos los componentes de dicho
grupo, formado principalmente por los elementos hardware de la máquina
(memoria, dispositivos E/S, procesador,…) y los programas o software que
para ejecutarse necesitan estos recursos.

Como director, establecerá los tiempos, la entrada de cada “instrumento”, el


volumen adecuado de cada sector, etc., consiguiendo de esta manera que el
conjunto (usuario, recursos y programas) trabaje en una perfecta armonía.

4 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

1.1. DEFINICIÓN DE SISTEMA OPERATIVO (SO)

El hardware de un ordenador no es capaz de trabajar por sí solo, al igual, que


ningún usuario podría trabajar directamente con él. Es por tanto necesario,
que entre el usuario y la máquina (hardware) existan una serie de programas,
que le permitan su manejo de una forma lo más sencilla y eficaz posible. A
este software es lo que denominamos sistema operativo.

Sistema operativo

Un sistema operativo es un programa que actúa como


intermediario entre el usuario y el hardware. Cuyo objetivo es
simplificar el manejo de la máquina, ofreciendo al usuario un
entorno cómodo, seguro y eficiente, donde pueda llevar a cabo
sus tareas.

Aunque ésta es la definición correcta de lo que es un SO, es quizás


demasiado genérica. Un SO desde un punto de vista más detallado, es
mucho más que eso:

• “…es un conjunto de programas que gestionan los recursos de la máquina


y optimizan su uso…”

• “…es un software encargado de resolver conflictos entre las necesidades


de los programas y los recursos disponibles…”

• “…es un programa capaz de manejar procesos, coordinarlos y


proporcionar las condiciones necesarias para su correcta ejecución...”

Todos estos detalles y funcionalidades que complementan la definición


general, se irán viendo detalladamente en los capítulos siguientes.

Unidad 1. Introducción a los sistemas operativos. 5


Formación Abierta

1.2. FUNCIONES DEL SISTEMA OPERATIVO

Un SO está formado esencialmente por tres capas:

Figura 1.1. Capas del sistema operativo

• Capa del Núcleo (Kernel): es la capa más cercana al hardware. Es la


que gestiona los recursos hardware de la máquina y suministra la
funcionalidad básica del SO.

• Capa de servicios o llamadas al sistema: ofrece a los programas y


programadores unos servicios en forma de interfaz denominada API
(application programming interface). Se puede decir que el SO ofrece una
máquina virtual extendida a los programas, ya que éstos se apoyan en
funciones que suministra directamente el SO.

• Capa de Shell o intérprete de comandos: ofrece al usuario una interfaz,


a través de la cual puede dialogar de forma interactiva con la máquina. El
Shell recibe los mandatos u órdenes del usuario, los interpreta y ejecuta.

Cada una de estas capas, nos desvela una de las tres funciones básicas de
un SO, que se detallaran a continuación:

• Gestión de recursos (capa del núcleo).

• Máquina extendida (capa de servicios): ejecución de servicios para los


programas.

• Interfaz de usuario (capa de Shell): ejecución de las órdenes de los


usuarios.

6 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

El sistema operativo como gestor de recursos


En una computadora suelen ejecutarse de manera simultánea varios
programas de uno o varios usuarios. Estos programas se ven obligados a
competir por los recursos, ya que éstos son limitados.

El SO es el encargado de gestionar estos recursos, su uso y asignación. Los


recursos que maneja el SO son tanto físicos como lógicos. Entre los físicos se
encuentran el procesador, la memoria principal y los periféricos. Y como
lógicos están los archivos, directorios y puertos de comunicación.

Debe también, garantizar la integridad de cada uno de los programas que se


ejecutan simultáneamente. Manteniendo la confidencialidad de la información.

Por último debe analizar o contabilizar el uso que hacen los programas de los
recursos que tienen asignados. Cuando la contabilidad se emplea meramente
para conocer la carga del sistema se denomina monitorización.

El sistema operativo como máquina extendida


El SO ofrece a los programas una serie de servicios que pueden solicitar
cuando lo necesiten, proporcionándoles una visión de máquina extendida.
Con estos servicios, un programa puede ejecutar de forma cómoda y
protegida ciertas operaciones. Estos servicios se pueden dividir en cuatro
grupos:

• Ejecución de programas: servicios que permiten lanzar, parar o abortar


la ejecución de un programa. La ejecución de programas da lugar al
concepto de proceso. Un proceso se podría definir como un programa en
ejecución.

• Operaciones de entrada/salida: la programación de operaciones E/S es


muy compleja y dependiente del hardware de cada periférico. Por ello
estos servicios de E/S ofrecen un alto nivel de abstracción al
programador, que no debe tener en cuenta los detalles.

• Operaciones sobre archivos: estos servicios son muy similares a los de


E/S, pero trabajando con archivos en lugar de periféricos. Permite
operaciones como creación, borrado, apertura, escritura y lectura de
archivos.

• Detección y tratamiento de errores: permiten analizar las órdenes


recibidas, así como tratar los errores que detecte el hardware (errores de
E/S, errores en acceso a memoria, desbordamientos, violación de
memoria, instrucciones prohibidas, etc.).

Unidad 1. Introducción a los sistemas operativos. 7


Formación Abierta

El sistema operativo como interfaz de usuario


Esta interfaz es lo que permite al usuario comunicarse con la máquina. Puede
ser una interfaz textual (el usuario se comunica mediante órdenes escritas) o
gráfica (el usuario utiliza medios gráficos como iconos, cursores, etc., para
comunicarse con la máquina).

El Shell se comporta como un bucle infinito en el que repite constantemente la


siguiente secuencia:

• Espera una orden del usuario. En el caso de una interfaz textual, espera lo
que escribe el usuario en la línea de comandos. Y en el caso de interfaz
gráfica está a la espera de un evento o acción (del ratón, del teclado, etc.).

• Analiza la orden y si es correcta la ejecuta utilizando los servicios del


sistema operativo.

• Concluye la orden y vuelve a la espera.

8 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

1.3. COMPONENTES DEL SISTEMA OPERATIVO

Los componentes de un sistema operativo, están especializados en realizar


determinadas funciones. Como se vio en el punto anterior se suele considerar
que un SO está formado por tres capas: núcleo, servicios y Shell.

USUARIOS

SHELL TEXTUAL SHELL GRÁFICO


Gestión de Comunicación
Gestión de Gestión de Gestión de Seguridad y
archivos y y
procesos memoria E/S protección
directorios sincronización
NÚCLEO

HARDWARE

Figura 1.2. Componentes del sistema operativo

• El núcleo, es la parte del sistema operativo encargada de interactuar


directamente con el hardware de la máquina. Las funciones que debe
llevar a cabo el núcleo son la gestión de los recursos, gestión del
procesador, tratamiento de interrupciones y funciones básicas de
tratamiento de la memoria.

• El Shell, es la parte del sistema operativo que interpreta y trata las


órdenes de los usuarios. En la figura 1.2 se puede observar que este
ejemplo se dispone de dos intérpretes de comandos, un intérprete grafico
y otro textual. Lógicamente, en caso de existir en un mismo sistema
operativo varios intérpretes de comandos, no se podrán mezclar los
mandatos de cada uno de ellos.

• Por último, la capa de servicios. En ella se agrupan los distintos


servicios, según su funcionalidad, en varios componentes:

ƒ Gestión de procesos: este componente se encarga de crear,


planificar y destruir los procesos.

ƒ Gestión de memoria: este componente se encarga de la asignación


y liberación de la memoria solicitada por los procesos. Debe conocer
en cada momento qué partes de la memoria están libres y cuáles
ocupadas.

Unidad 1. Introducción a los sistemas operativos. 9


Formación Abierta

ƒ Gestión de la E/S: se ocupa del manejo de los dispositivos


periféricos.

ƒ Gestión de archivos y directorios: su cometido es el manejo de


archivos, directorios y almacenamiento secundario.

ƒ Comunicación y sincronización de procesos: ofrece los


mecanismos necesarios para la correcta ejecución y comunicación
de los procesos.

ƒ Seguridad y protección: este componente garantiza la privacidad


de los usuarios y define las condiciones con las que pueden acceder
a los recursos.

10 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

1.4. ESTRUCTURA DEL SISTEMA OPERATIVO

Un sistema operativo es un programa de grandes dimensiones y complejidad.


Como se ha visto en el punto anterior, se forma de diferentes componentes,
cada uno de los cuales, tiene una función muy concreta dentro del conjunto.
Cada SO estructura u organiza de una forma diferente estos componentes. Y
en función de esta estructuración se pueden dividir en dos grandes grupos,
los SO monolíticos y los estructurados.

1.4.1. SISTEMAS OPERATIVOS MONOLÍTICOS

Este grupo de SO, se caracterizan porque no tienen una estructura clara y


bien definida. Todos sus componentes están integrados en único programa y
sus funciones se ejecutan directamente en modo núcleo.

Los ordenadores actuales tiene al menos dos niveles de


ejecución:

Nivel de usuario: el ordenador restringe la ejecución de


ciertas instrucciones máquina, el acceso a determinados
registros, zonas de memoria y dispositivos de E/S.

Nivel de núcleo: es totalmente permisivo en cuanto a accesos


y ejecución de instrucciones máquina.

Estos sistemas operativos en su origen eran programas sencillos y de


pequeñas dimensiones. A los cuales se les han ido añadiendo
funcionalidades, convirtiéndolos con el paso del tiempo en programas muy
grandes y complejos.

El problema que plantean estos SO, es que todas sus funciones y servicios
están situadas al mismo nivel, lo que complica el hecho de modificar o añadir
nuevos componentes. Ya que para ello, se debe modificar un programa
compuesto por miles de líneas de código y funciones, que se invocan entre
ellas.

Como ejemplo de este tipo de sistemas están el MS-DOS y UNIX.

Unidad 1. Introducción a los sistemas operativos. 11


Formación Abierta

1.4.2. SISTEMAS OPERATIVOS ESTRUCTURADOS

Existen dos tipos de estructuras, que son las que normalmente se aplican a
los SO: la estructura de capas y la estructura cliente-servidor.

Estructura de capas

En este tipo de estructura, el sistema operativo se organiza en una serie de


capas con un orden jerárquico concreto. Mediante el cual, cada capa ofrece
una interfaz, clara y bien definida, a la capa superior y solo utiliza los servicios
que le ofrece la capa inferior.

Las ventajas de este tipo de estructura son la modularidad y la ocultación de


información. Una capa no necesita saber cómo se ha implementado la capa
inferior a ella, únicamente necesita conocer la interfaz que le ofrece. Esto
permite que las capas se puedan ir construyendo y depurando por separado.

Algunos ejemplos de SO estructurados en capas son el THE y el OS/2.

CAPA 5: Programas de usuario


CAPA 4: Gestión de la E/S
CAPA 3: Comunicación operador - proceso
CAPA 2: Gestión de memoria
CAPA 1: Planificador y multiprogramación
CAPA 0: Hardware

Figura 1.3. Estructura del sistema operativo “THE”

Estructura cliente-servidor
El fundamento de esta estructura consiste en implementar la mayor parte de
los servicios y funciones del SO para que sean ejecutadas en modo usuario,
dejando solo una pequeña parte ejecutándose en modo núcleo. A esta
pequeña parte se denomina micronúcleo y a los procesos que ejecutan el
resto de funciones se les denomina servidores.

Las funciones que suele llevar a cabo el micronúcleo son: la gestión de


interrupciones, la gestión de procesos y la gestión de la memoria.

12 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

Procesos Procesos
cliente servidores
Programa de Servidor
usuario Servidor de Servidor de Servidor de Servidor de
de
procesos E/S archivos seguridad
API memoria

MICRONÚCLEO
HARDWARE

Figura 1.4. Estructura de un sistema operativo cliente-servidor

Para solicitar un servicio, como por ejemplo crear un proceso, el programa de


usuario (proceso denominado cliente) solicita el servicio al servidor
correspondiente, en este caso al servidor de procesos. A su vez este, puede
requerir servicios de otros servidores, como por ejemplo al de memoria,
convirtiéndose en cliente de otro servicio.

La ventaja de esta estructura, es que es muy flexible, ya que cada proceso


servidor solo se encarga de una funcionalidad concreta, lo que le convierte en
una parte pequeña y manejable.

La desventaja que presenta es que estos sistemas se sobrecargan más que


los de estructura monolítica. Esto es debido a que cada componente ejecuta
sus funciones en espacios de direcciones distintos, lo que requiere mayor
tiempo y recursos.

Algunos ejemplos de sistemas operativos estructurados como cliente-servidor


son: Minix, Mach y Amoeba.

Unidad 1. Introducción a los sistemas operativos. 13


Formación Abierta

1.5. GESTIÓN DE PROCESOS

En un sistema operativo, el componente principal es el encargado de la


gestión de procesos. Sus funciones son las de generar, gestionar y atender
las peticiones de los procesos. Como se indicó anteriormente, un proceso se
puede definir como un programa en ejecución, pero una definición más
precisa es:

Proceso

Se define proceso como la unidad mínima de procesamiento


gestionada por el sistema operativo.

No se debe confundir el concepto de programa, con el de proceso. Un


programa no es más que una serie de instrucciones máquina, mientras que el
proceso surge cuando este programa comienza su ejecución. Esto permite
que varios procesos puedan ejecutar el mismo programa (por ejemplo: varios
usuarios ejecutando el mismo editor de textos).

Dependiendo del número de procesos y usuarios que puedan ejecutarse


simultáneamente, los SO se dividen en:

• Monotarea: solo permite un proceso en cada momento.

• Multitarea: permite que existan varios procesos activos al mismo tiempo.


El SO se encarga de repartir los tiempos de procesador entre ellos.

• Monousuario: solo soporta un usuario.

• Multiusuario: permite que varios usuarios trabajen simultáneamente


desde distintos terminales. A su vez cada usuario podrá tener varios
procesos activos, por lo que también será multitarea. Este tipo de
sistemas también se denominan de tiempo compartido, ya que el SO ha
de distribuir el tiempo de computadora entre los usuarios.

14 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

1.5.1. SERVICIOS DE PROCESOS

El SO a través de este componente de gestor de procesos, ofrece una serie


de servicios que permiten controlar el ciclo de vida de un proceso: creación,
ejecución y expiración del proceso.

• Crear un proceso: el proceso es creado por el SO cuando así lo solicita


otro proceso, que se convierte en el padre del nuevo.

• Ejecutar un proceso: los procesos se pueden ejecutar de dos modos


distintos: modo batch y modo interactivo. En el batch, el proceso no está
asociado a ningún terminal, toma los datos de entrada de un archivo y
devuelve los resultados a otro archivo. En el modo interactivo, el proceso
sí que está asociado a un terminal. A través del cual tomará los datos de
entrada que le proporciona el usuario y al que devolverá los datos
resultantes.

• Terminar la ejecución de un proceso: las causas por las que un


proceso finaliza su ejecución son: el programa ha finalizado, se ha
producido un error en tiempo de ejecución o porque el usuario u otro
proceso deciden que tiene que terminar.

Unidad 1. Introducción a los sistemas operativos. 15


Formación Abierta

1.6. GESTIÓN DE MEMORIA

Como su propio nombre indica, este componente tiene como objetivo la


gestión del recurso de la memoria. Sus funciones son:

• Asignar memoria a los procesos.

• Proporcionar y liberar memoria según las necesidades de los procesos.

• Gestionar los posibles errores de acceso a memoria.

• Garantizar la privacidad de los espacios de memoria asignados a cada


proceso.

• Permitir que los procesos compartan sus espacios de memoria, con el fin
de que se comuniquen entre ellos.

• Gestionar la jerarquía de memoria y tratar los fallos de página en sistemas


con memoria virtual.

1.6.1. SERVICIOS DE MEMORIA

Los servicios que ofrece el gestor de memoria son:

• Solicitar memoria: el SO satisface las peticiones de memoria, siempre


que existan recursos disponibles suficientes.

• Liberar memoria: según se van liberando partes de la memoria asignada


a un proceso, se añade a la lista de recursos libres.

• Compartir memoria: permite a los procesos crear y liberar segmentos de


memoria compartida, para poder comunicarse entre ellos.

16 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

1.7. COMUNICACIÓN Y SINCRONIZACIÓN DE


PROCESOS

Los procesos, por razones de seguridad, son entes independientes y


aislados, ya que se debe garantizar que unos procesos no interfieran en
otros. Pero hay ciertas ocasiones, sobre todo en trabajos complejos, que los
procesos necesitan comunicarse entre sí. Esta comunicación tiene como
objetivos fundamentales la transmisión de datos, la transmisión de órdenes y
la sincronización en la ejecución de sus acciones.

El sistema operativo ofrece los servicios y mecanismos necesarios para que


los procesos lleven a cabo sus necesidades de comunicación, permitiendo
entre ellos el envío de cadenas de bytes, las cuales deben ser interpretadas
por estos procesos, que a priori conocen la longitud y tipo de datos que se
transmiten. También ofrece los mecanismos de sincronización que permiten
bloquear y despertar procesos, consiguiendo pausar o reanudar su ejecución
según determinados eventos.

1.7.1. SERVICIOS DE COMUNICACIÓN Y SINCRONIZACIÓN

Los servicios de comunicación se pueden ejecutar de forma síncrona o


asíncrona:

• Síncrona: los procesos ejecutan los servicios de comunicación al mismo


tiempo, es decir, el emisor tiene que encontrarse en el servicio de enviar y
el receptor en el servicio de recibir. Normalmente para que esto suceda,
uno de ellos ha de esperar por el otro.

• Asíncrona: el emisor realiza el envío y continúa con su ejecución,


independientemente del estado en que se encuentre el receptor. Para ello
el SO debe proporcionar un almacenamiento intermedio para guardar la
información enviada, hasta que el receptor la solicite.

En cuanto a los servicios de sincronización, consisten básicamente en:

• Bloquear proceso: permite pausar la ejecución de un proceso hasta que


ocurra un evento concreto.

• Despertar proceso: permite cambiar el estado de un proceso bloqueado


y que continúe con su ejecución.

Unidad 1. Introducción a los sistemas operativos. 17


Formación Abierta

1.8. GESTIÓN DE LA E/S

El gestor de la entrada/salida de un SO tiene como objetivo controlar el


funcionamiento de los periféricos de E/S. Debe facilitar su manejo ofreciendo
una interfaz sencilla, así como ofrecer mecanismos de protección que
controlen al acceso a estos periféricos. Entre estos dispositivos de E/S están;
relojes, terminales, dispositivos de almacenamiento, teclado, impresoras, etc.

1.8.1. SERVICIOS DE LA E/S

El SO ofrece una serie de servicios que son independientes de los


dispositivos, es decir, se emplean los mismos servicios para leer, por ejemplo,
datos de un disco duro, de un CD-ROM o del teclado.

Los servicios están orientados básicamente a dos acciones, la lectura y la


escritura. Estas acciones a su vez pueden estar orientadas a caracteres
(como ocurre con las impresoras) u orientadas a bloques (como ocurren con
las unidades de disco). La diferencia es que en la orientada a bloques, la
operación elemental de E/S se realiza sobre un bloque de información de un
número fijo de caracteres (por ejemplo.: un bloque de 1 Kb).

18 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

1.9. GESTIÓN DE ARCHIVOS Y DIRECTORIOS

El gestor de archivos, es la parte del SO encargada de facilitar el tratamiento


de la información. Para ello se sirve de los archivos y directorios.

Archivos

Los ordenadores son capaces de almacenar información en multitud de


medios físicos: cintas, discos magnéticos, discos ópticos, etc. Cada uno de
ellos con sus propias características (velocidad de acceso, capacidad,
velocidad de transferencia, métodos de acceso) y organización física. Por ello
el SO proporciona una visión lógica uniforme de almacenamiento. Realiza una
abstracción de las propiedades físicas de los dispositivos para definir una
unidad lógica de almacenamiento: el archivo.

Un archivo es una unidad de almacenamiento lógico, no volátil,


que agrupa un conjunto de información relacionada entre sí
bajo un mismo nombre.

Todos los archivos llevan asociada una información básica, que es de gran
utilidad tanto al usuario como al sistema:

• Tipo de archivo.

• Propietario del archivo.

• Tamaño del archivo.

• Instantes importantes en la vida de un archivo, como son el momento en


que se creó, el último acceso, la última modificación, etc.

• Derechos o permisos de acceso: lectura, escritura, lectura-escritura,


ejecución, etc.

Directorios

Un directorio es un objeto que relaciona de forma unívoca un nombre con un


archivo. El sistema de directorios al igual que el de archivos, presenta una
visión lógica y otra física.

Unidad 1. Introducción a los sistemas operativos. 19


Formación Abierta

La visión lógica consiste en un esquema jerárquico en el que partiendo del


directorio raíz, cuelgan el resto de subdirectorios y los archivos.

Figura 1.5. Esquema jerárquico de directorios y archivos

En esta estructura jerárquica hay que diferenciar entre nombre relativo, que
es el nombre del archivo dentro del directorio actual y el nombre absoluto,
que incluye los nombres de todos los subdirectorios que se han de recorrer
desde la raíz.

Nombre relativo: “arch.a”

Nombre absoluto “/USR/ADM/arch.a”

La visión física del sistema de directorios consiste en unas estructuras de


información que relacionan cada nombre lógico con la descripción física del
correspondiente archivo. Es una tabla nombre/identificador por cada
directorio, en la que el nombre es la denominación del archivo y el
identificador es la información que permite localizar la descripción física del
archivo.

20 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

1.9.1. SERVICIOS DE ARCHIVOS

Los servicios que ofrece son:

• Crear un archivo: este servicio crea un archivo vacío. El servidor de


archivos realiza una comprobación previa del nombre del archivo y de los
permisos del usuario para realizar esta operación.

• Abrir un archivo: un archivo debe ser abierto antes de empezar a ser


utilizado. El servidor comprueba que el archivo exista, que el usuario
tenga permiso de acceso y finalmente trae a memoria información del
archivo para optimizar el acceso al mismo.

• Escritura y lectura: estos servicios se realizan utilizando el identificador


del fichero, obtenido en la operación de creación y apertura, en vez de su
nombre lógico.

• Cerrar un archivo: terminada su utilización se cierra el archivo, lo que


implica que se elimina el identificador temporal y se liberan los recursos
de memoria que ocupaba.

• Borrar un archivo: el borrado de un archivo supone, eliminar su nombre


del correspondiente directorio en el que se encontraba y recuperar los
bloques de datos y de información adicional que tenía asignado.

1.9.2. SERVICIOS DE DIRECTORIOS

Los servicios referentes a la gestión de directorios son similares a los de


archivos:

• Crear directorio: crea un objeto directorio vacío y lo sitúa en el árbol.


• Borrar directorio: elimina el objeto directorio y borra su entrada del árbol
de directorios, de manera que ya no será accesible. Normalmente solo se
pueden borrar directorios vacíos.

• Abrir un directorio: al igual que con los archivos, un directorio debe ser
abierto antes de acceder a su contenido. Devuelve al usuario un
identificador, que permite realizar las operaciones sobre ese directorio.

• Leer un directorio: extrae la siguiente entrada de un directorio, abierto


previamente.

• Cerrar un directorio: cierra el directorio, liberando el identificador


temporal asignado en la apertura y los recursos de memoria utilizados.

Unidad 1. Introducción a los sistemas operativos. 21


Formación Abierta

1.10. HISTORIA DE LOS SISTEMAS OPERATIVOS

Los sistemas operativos actuales son el resultado de una evolución, que


durante décadas, se ha ido produciendo para adaptarse a las nuevas
tecnologías y a los requisitos de los usuarios, cada vez más exigentes.

A continuación haremos un breve viaje a la historia, para conocer las etapas


en el desarrollo de los SO, que coinciden con las cuatro generaciones de las
computadoras.

Antes de los SO

Durante los años 40, se construyen las primeras computadoras. Algunas de


las más significativas son el ENIAC (Electronic Numerical Integrator Analycer
and Computer) que fue construida en la Universidad de Pennsylvania por
John Presper Eckert y John William Mauchly. Ocupaba una superficie de
167 m² y operaba con un total de 17468 válvulas electrónicas o tubos de
vacío, que permitían realizar cerca de 5000 sumas y 300 multiplicaciones por
segundo. Otra computadora fue EDVAC (Electronic Discrete Variable
Automatic Computer) que a diferencia de la anterior no era decimal, sino
binaria. Este diseño se convirtió en el estándar de arquitectura para la
mayoría de las computadoras modernas. Poseía casi 6.000 tubos de vacío y
12000 diodos. Consumía 56 kilovatios de potencia, cubría 45,5 m² de
superficie y pesaba 7850 kg. El personal necesario para su utilización era de
treinta personas para cada turno de ocho horas. Ambas residían en
laboratorios militares de Estados Unidos.

En esta etapa no existían los SO, los programas se codificaban directamente


en lenguaje máquina y se introducían en los computadores utilizando
conmutadores o tarjetas perforadas. Los errores durante la ejecución,
requerían por parte del usuario, de una tediosa tarea de análisis de la
memoria y los registros de la máquina. Los resultados se imprimían
directamente en cintas de papel.

En esta generación, los trabajos se realizaban en serie. Se codificaba el


programa, se ejecutaba y se obtenían los resultados, repitiendo el proceso
con el resto de programas.

22 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

Primera generación (década de los 50)


Con la primera generación de computadoras y el aumento de los usuarios, se
hace necesario simplificar su explotación.

Los trabajos se siguen ejecutando en serie y cada uno de ellos pasa por las
siguientes fases:

• Instalación de las cintas o fichas en los periféricos de lectura.


• Lectura del programa y sus datos utilizando un programa cargador.

• Ejecución del programa.


• Obtención de resultados (impresión o grabación).
• Retirada de las cintas o fichas.

El problema principal que planteaban estos SO era el de optimizar el tiempo


de montaje de cada trabajo (tiempo utilizado en retirar un trabajo y montar el
siguiente). Para ello, se empezaron a agrupar los trabajos en lotes (batch)
según su tipo (Cobol, Fortran…). Lo que evitaba tener que cambiar las cintas
con los compiladores de cada tipo, con el consiguiente ahorro de tiempo.

En grandes instalaciones, se opta por añadir computadoras auxiliares que


realizaban las funciones de montar y retirar trabajos de la máquina principal.
Ésta recibía los trabajos ya montados en cintas magnéticas, los ejecutaba y
grababa los resultados también en cinta magnética. A este modo de trabajo
se le denominó procesamiento fuera de línea (off-line), ya que la E/S se hacía
en máquinas no controladas por la principal.

Algunos SO de esta etapa son el FMS (Fortran Monitor System) o el IBYSS,


sistema operativo de la IBM 7094.

Segunda generación (década de los 60)

Durante esta década, se incrementa la competencia entre fabricantes por


mejorar la explotación de sus máquinas. Este afán de perfeccionamiento
desemboca en la aparición de la multiprogramación en los sistemas de
procesamiento de lotes.

El fundamento de este modo de trabajo, es el de dar una solución a la


diferencia de tiempos entre los periféricos de E/S y la Unidad Central de
Proceso (UCP). Durante la ejecución de trabajos, la UCP pasa mucho tiempo
esperando a que los periféricos de E/S realicen sus funciones.

Unidad 1. Introducción a los sistemas operativos. 23


Formación Abierta

Figura 1.6. Tiempos de utilización de los periféricos de E/S y de la UCP durante la


ejecución de un trabajo

Una forma de aprovechar este tiempo de espera, consiste en mantener varios


trabajos simultáneamente en la memoria principal. A esta técnica se le
denomina multiprogramación y básicamente consiste en que cuando un
trabajo necesita una operación de E/S, la solicita al sistema operativo que se
encarga de:

• Congelar el trabajo solicitante.


• Iniciar la operación de E/S.
• Pasar a realizar otro trabajo residente en memoria.

La multiprogramación permite aprovechar los tiempos de espera, de manera


que durante las operaciones de E/S de un programa (A), se puede ejecutar en
la UCP las instrucciones de un programa (B), optimizando los tiempos y
recursos de los que dispone la máquina.

Figura 1.7. Tiempos de utilización de los periféricos de E/S y de la UCP, utilizando


multiprogramación (programas A y B en memoria)

24 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

Cabe destacar, que durante esta época aparecen otros modos de


funcionamiento como:

• Máquinas multiprocesador. Varios procesadores forman parte de la misma


máquina multiplicando así sus prestaciones.

• Independencia de los dispositivos. Pasan de tener que ser referenciados


en los programas de los usuarios a ser gestionados directamente por el
SO (por ejemplo: el usuario solicita imprimir unos resultados y es el SO el
encargado de asignarle un dispositivo libre).

• Sistemas de tiempo compartido. Estos sistemas, permiten trabajar a


varios usuarios de forma simultánea en una misma máquina. El SO se
encarga de repartir el tiempo de la UDP de forma rotativa entre los
usuarios. A cada uno de estos intervalos se les denomina rodajas (time
slice).

• Aparecen los sistemas de tiempo real. Son sistemas en los que es


primordial el tiempo de respuesta, el cual está previamente especificado y
habitualmente es pequeño. Solían tratarse de sistemas militares tales
como la detección de ataques aéreos.

Algunos SO desarrollados en esta etapa son el CTSS, primer sistema de


tiempo compartido, se implantó en un IBM 7090 y permitía hasta 32 usuarios
simultáneos; el sistema MULTIX que evolucionó para convertirse en el
sistema operativo UNIX; y por último, el OS/360 de IBM.

Tercera generación (década de los 70)


Ésta es la época de los sistemas de propósito general, es decir, sistemas
capaces de operar en lotes, en multiprogramación, en tiempo real, en tiempo
compartido o en modo multiprocesador.

Estos sistemas fueron muy costosos de realizar y complejos de utilizar. Ya


que el usuario debía aprender un complejo lenguaje de control, con multitud
de opciones y detalles para poder ejecutar sus trabajos. Estos sistemas
también tenían, inicialmente, el problema de consumir demasiados recursos.

En esta década aparecen sistemas operativos como UNIX y MVS de IBM.


UNIX se convierte en el primer SO escrito en lenguaje de alto nivel (se
programa utilizando el lenguaje C), lo que lo convierte en un sistema
fácilmente transportable a una amplia gama de computadoras. Así, durante
los siguientes años surgen nuevas versiones de UNIX, las cuales introducen
mejoras muy importantes como la memoria virtual y los sockets para la
programación de aplicaciones sobre TCP/IP.

Unidad 1. Introducción a los sistemas operativos. 25


Formación Abierta

Desde entonces han sido muchos los fabricantes que han adoptado a UNIX
como SO de sus máquinas (SUN, HP y AIX de IBM).

Cuarta generación (década de los 80 en adelante)

Ésta es la época en la que los sistemas de propósito general, de la década


anterior, comienzan a especializarse y simplificarse. Prevalece la
productividad del usuario sobre el rendimiento de la máquina; y adquiere un
papel muy importante el tema de las redes de computadores.

Se tiende a estructuras distribuidas, esto es, cada puesto de trabajo dispone


de su propia computadora y todas ellas se comunican a través de una red, en
lugar de trabajar con una única máquina central. Esto es debido a la
disminución en el coste de los elementos hardware.

Se propaga el concepto de máquina virtual, que consiste en que una


computadora A, es capaz de simular a otra computadora B (incluido su SO).
La ventaja es que la computadora A, es capaz de emplear programas
diseñados para la computadora B, sin la necesidad de disponer de dicha
máquina.

La expansión del uso de los PC u ordenadores personales, obliga a la


aparición de los sistemas operativos “amistosos”. En los que se sustituyen los
complejos lenguajes de control, por menús u otros sistemas tabulares, que
proporcionen una mayor facilidad de manejo al usuario.

Los sistemas operativos que han dominado los PC desde sus inicios son
UNIX, MS-DOS, Windows 95, 98, NT, 2000, XP, Vista y Windows 7. También
cabe destacar el desarrollo de Linux, sistema operativo similar a UNIX
desarrollado de forma desinteresada por voluntarios. Es uno de los ejemplos
más destacados de software libre; todo su código fuente puede ser utilizado,
modificado y redistribuido libremente por cualquiera bajo los términos de la
GPL (Licencia Pública General de GNU) y otra serie de licencias libres.

Se desarrollan, también, sistemas operativos en tiempo real como QNX,


RTEMS y VRTX.

Aparecen los llamados sistemas operativos distribuidos. Son sistemas cuyos


componentes hardware y software, que están en ordenadores conectados en
red, se comunican y coordinan sus acciones.

26 Unidad 1. Introducción a los sistemas operativos.


Sistemas Operativos

Figura 1.8. Estructura de un sistema distribuido

Algunos ejemplos de este tipo de sistemas operativos distribuidos son Mach,


Chorus y Amoeba.

Unidad 1. Introducción a los sistemas operativos. 27


Sistemas Operativos

♦ RESUMEN

• Un sistema operativo es un programa que actúa como intermediario entre


el usuario y el hardware. Cuyo objetivo es simplificar el manejo de la
máquina, ofreciendo al usuario un entorno cómodo, seguro y eficiente,
donde pueda llevar a cabo sus tareas.

• Un SO está formado esencialmente por tres capas: capa del núcleo


(Kernel), capa de servicios (o llamadas al sistema) y capa de Shell
(intérprete de comandos).

• Las tres funciones básicas de un SO son: gestión de recursos (capa del


núcleo), máquina extendida (capa de servicios) e interfaz de usuario (capa
de Shell).

• Los servicios que proporciona el SO, se agrupan por funcionalidades en


componentes. Los componentes básicos de un SO son los que agrupan
las funcionalidades encargadas de: gestión de procesos, gestión de
memoria, gestión de la E/S, gestión de archivos y directorios,
comunicación/sincronización de procesos y seguridad y protección.

• Según la estructura organizativa que tenga un SO, se puede dividir en


sistemas monolíticos y sistemas estructurados (estructura de capas o
estructura cliente-servidor).

• Un proceso se define como la unidad mínima de procesamiento


gestionada por el sistema operativo. Según el numero usuarios y procesos
que el SO pueda ejecutar de forma simultánea, se le denomina:
monousurio, multiusuario, monotarea o multitarea.

• Los ordenadores actuales tiene al menos dos niveles de ejecución de


procesos: nivel de usuario (el ordenador restringe ciertos accesos y
ejecuciones de sentencias máquina) y nivel de núcleo (es totalmente
permisivo en cuanto a accesos y ejecución de instrucciones máquina).

Unidad 1. Introducción a los sistemas operativos. 29


Formación Abierta

• Un archivo es una unidad de almacenamiento lógico, no volátil, que


agrupa un conjunto de información relacionada entre sí bajo un mismo
nombre. Un directorio es un objeto que relaciona de forma unívoca un
nombre con un archivo.

• Históricamente, los sistemas operativos son el resultado de una evolución,


que se ha ido produciendo con el fin de adaptarse a las nuevas
tecnologías y a los requisitos de los usuarios. La evolución de los
sistemas operativos, va ligada a las cuatro generaciones en que se divide
el desarrollo de las computadoras.

30 Unidad 1. Introducción a los sistemas operativos.


SISTEMAS
OPERATIVOS

PROCESOS
Sistemas Operativos

ÍNDICE
♦  OBJETIVOS................................................................................................3 

♦  INTRODUCCIÓN ........................................................................................4 
2.1.  Concepto de proceso ...........................................................................5 
2.1.1.  Multitarea .........................................................................................5 
2.2.  Estados de un proceso ........................................................................7 
2.2.1.  Cambio de contexto .........................................................................8 
2.3.  Procesos ligeros .................................................................................11 
2.3.1.  Información de los procesos ligeros ...............................................11 
2.3.2.  Estados de un proceso ligero.........................................................12 
2.3.3.  Paralelismo ....................................................................................13 
2.4.  Planificación de procesos ..................................................................14 
2.4.1.  Planificación expulsiva/no expulsiva ..............................................15 
2.4.2.  Colas de procesos .........................................................................16 
2.4.3.  Objetivos de la planificación...........................................................17 
2.5.  Algoritmos de planificación ...............................................................18 
2.5.1.  FCFS (First Come First Served).....................................................19 
2.5.2.  SJF (Sort Job First) ........................................................................22 
2.5.3.  SRTF (Sort Remaining Time First) .................................................23 
2.5.4.  RR (Round Robin) .........................................................................25 
2.5.5.  Planificación basada en prioridades...............................................28 
2.5.6.  Planificación basada en múltiples colas .........................................29 
♦  RESUMEN ................................................................................................31 

Unidad 2. Procesos. 1
Sistemas Operativos

♦ OBJETIVOS

• Entender el concepto de proceso.

• Conocer el ciclo de vida de un proceso. Los posibles estados y


transiciones en los que un proceso se puede encontrar, así como las
características de estos estados.

• Entender qué es y en qué consiste la operación de cambio de contexto.

• Conocer cómo se almacena la información de un proceso en memoria.

• Conocer los diferentes niveles de planificación que puede tener un


sistema operativo.

• Conocer los diferentes criterios de rendimiento que se pueden utilizar al


comparar las distintas políticas de planificación.

• Conocer diferentes algoritmos de planificación como FCFS, SJF o SRTF.

• Entender conceptos básicos de las políticas de planificación como las


políticas expulsivas/no expulsivas o los métodos basados en prioridades.

Unidad 2. Procesos. 3
Formación Abierta

♦ INTRODUCCIÓN

La gestión de procesos es una tarea básica, pero quizás la más importante


llevada a cabo por el sistema operativo.

Se comenzará definiendo el concepto de proceso e identificando los distintos


estados por los que un proceso puede pasar, desde su creación hasta su
finalización. Este conjunto de estados es diferente para cada SO, pero existe
un grupo de estados básicos comunes a todos ellos.

A continuación, se explicará la forma en que el sistema operativo guarda un


proceso en memoria y qué información se almacena de él; cómo realiza los
cambios de estado (cambios de contexto) y recupera la información para
continuar con la ejecución como si nada hubiese ocurrido.

Por último, se profundizará en el conocimiento de la planificación de


procesos, que es la parte del SO encargada del reparto del tiempo de CPU
entre los procesos que están preparados para ejecutarse. El planificador es el
encargado de seleccionar un proceso de la cola de preparados y pasarlo a
ejecución.

La planificación se puede llevar a cabo utilizando distintas políticas o


algoritmos. Se abordarán las más importantes, explicando mediante ejemplos
y casos prácticos sus características, ventajas e inconvenientes.

4 Unidad 2. Procesos.
Sistemas Operativos

2.1. CONCEPTO DE PROCESO

Básicamente, los procesos son todos los programas o tareas que están
ejecutándose en el sistema operativo. Aunque una definición más correcta
seria:

Proceso

Un proceso es un programa en ejecución.

Un proceso es la unidad de procesamiento gestionada por el


sistema operativo.

Un programa, no es más que un conjunto de instrucciones, es decir, una


entidad estática. Sin embargo, un proceso es una entidad activa y dinámica,
formada por el valor del contador del programa, el contenido de los registros
del procesador, una pila (empleada para el paso de parámetros y variables
locales), el propio código y una sección destinada a almacenar datos. A
medida que un proceso se ejecuta, cambia el contador de programa, el
contenido de los registros, el estado del mismo proceso, etc., por ello se le
considera un ente dinámico.

2.1.1. MULTITAREA

Cuando un sistema operativo permite que coexistan varios procesos activos


al mismo tiempo, se le denomina sistema multitarea. En ellos, el sistema
operativo se encarga de gestionar los procesos, organizándolos en distintos
estados, de manera que se optimice al máximo el uso de la CPU.

En los sistemas monotarea, durante el tiempo en el cual el proceso necesita


realizar operaciones de E/S, el procesador está parado. En los multitarea esto
no sucede, ya que esos tiempos de espera se aprovechan para ejecutar otros
procesos que estén preparados.

Unidad 2. Procesos. 5
Formación Abierta

Características
La multitarea se caracteriza por:

• Existe un paralelismo real entre E/S y procesador: las operaciones de


E/S y la ejecución de procesos se realizan de forma simultánea. Es decir,
mientras un proceso realiza una operación de E/S, otro puede estar
ejecutándose en el procesador.

• Alternancia de los procesos en fases de E/S y de procesamiento:


todos los procesos que se encuentran a la espera de operaciones de E/S
o de ejecución, se van alternando. Con ello se consigue que cada uno
disponga de su tiempo y ninguno acapare el recurso que se le asigne.

• Memoria principal capaz de almacenar varios procesos: de todos los


procesos se almacena el estado en que se encuentran y toda su
información asociada.

Proceso nulo

En los sistemas multitarea, el procesador no para nunca de ejecutar


procesos. Pero en realidad existen momentos en los que el procesador, no
tiene ningún proceso preparado para ejecutarse. Por ello los SO disponen de
un proceso nulo, que ejecuta un bucle infinito que no realiza ninguna
operación útil, pero que permite que el procesador este trabajando durante
esos tiempos muertos.

Planificador y activador

Los sistemas multitarea, constan de dos elementos indispensables en la


gestión de los procesos. Estos elementos se denominan planificador y
activador.

• El planificador (scheduler) forma parte del núcleo del sistema operativo,


su cometido es seleccionar el siguiente proceso a ejecutar del conjunto de
procesos preparados.

• El activador (dispatcher) también es un módulo del sistema operativo, el


cual se encarga de poner en ejecución el proceso seleccionado por el
planificador.

6 Unidad 2. Procesos.
Sistemas Operativos

2.2. ESTADOS DE UN PROCESO

Un proceso puede pasar por distintos estados a lo largo de su vida, es decir


desde su creación como un proceso nuevo hasta su terminación. Los posibles
estados son los siguientes:

NUEVO TERMINADO

Planificado
Admitido Terminación
o excepción

PREPARADO EJECUCIÓN

Tiempo consumido
Fin Operación E/S Operación E/S o
u ocurre el evento espera por un evento
BLOQUEADO

Figura 2.1. Ciclo de vida de un proceso

• Nuevo: es el estado en el que nace un proceso, pero en el cual, aun no


dispone de los recursos mínimos necesarios para ejecutarse.

• Preparado: se puede decir que el proceso tiene todo lo necesario para


poder pasar a la ejecución.

• Ejecución: el planificador de procesos es el encargado de escoger uno


de los procesos que se encuentren en estado preparado y cederle el uso
de la CPU para que pueda ejecutarse. Un proceso en ejecución, podría:
ƒ Terminar: normalmente o por alguna situación de error.
ƒ Pasar de nuevo al estado de preparado: porque cede la CPU o el
planificador se le quita.
ƒ Pasar al estado de bloqueado.

• Bloqueado: en este estado, el proceso está esperando a que suceda


algún evento (terminación de operación de E/S, terminación de alguna
operación de otro proceso…).

• Terminado: el proceso no va a ejecutar más instrucciones. El SO le retira


los recursos que tenía asignados.

Unidad 2. Procesos. 7
Formación Abierta

2.2.1. CAMBIO DE CONTEXTO

Si se pretende lograr una ejecución de forma concurrente de varios procesos,


es necesario que el sistema operativo disponga de los mecanismos que le
permitan desalojar un proceso de la CPU y asignársela a otro. A esta
operación se le denomina cambio de contexto.

El tiempo invertido en la operación de cambio de contexto, es un tiempo


perdido, debido a que no se están ejecutando tareas productivas. Por ello es
muy importante reducir este tiempo, con el fin de mejorar el rendimiento.

Proceso P1 Sistema operativo Proceso P2

Interrupción
En ejecución

Guardar estado P1

Ocioso

Recuperar estado P2

Ocioso
Interrupción En ejecución

Guardar estado P2
Ocioso

Recuperar estado P1

En ejecución

Figura 2.2. Ejemplo de cambio de contexto entre proceso P1 y proceso P2

8 Unidad 2. Procesos.
Sistemas Operativos

Bloque de control de procesos (BCP)


El cambio de contexto requiere almacenar toda la información
correspondiente al proceso desalojado, para que se pueda volver a reanudar
su ejecución más tarde, como si en ningún momento se hubiera detenido.
Normalmente se almacena el contador del programa, los registros del
procesador, los ficheros en uso, etc.

A toda esta información se le denomina bloque de control de proceso


(BCP) y principalmente está formado por:

• Información de identificación: es la información que permite identificar


al proceso. Algunos de los datos almacenados son: el identificador del
proceso, el identificador del proceso padre si existe, información del
usuario (identificador, grupo, etc.).

• Estado del procesador: contiene los valores iniciales del estado del
procesador y los valores en el momento de la interrupción.

• Información de control: contiene información que permite gestionar el


proceso como:

ƒ Información del proceso (estado del proceso, evento por el que


espera, prioridad del proceso, información del planificador).

ƒ Descripción de los segmentos de memoria asignados al proceso.

ƒ Recursos asignados (ficheros, puertos, etc.).

ƒ Punteros para estructurar los procesos en colas.

ƒ Comunicación entre procesos (espacio para almacenar mensajes o


señales enviadas al proceso).

Los sistemas operativos, normalmente organizan los BCP en estructuras


dinámicas como son las listas/colas o en estructuras estáticas como las tablas
de procesos. A la cola de procesos que están esperando la asignación de
CPU, se le denomina cola de preparados.

Unidad 2. Procesos. 9
Formación Abierta

NUEVO TERMINADO

COLA DE PREPARADOS

EJECUCIÓN

FIN DE PLAZO DE EJECUCIÓN

COLA DE ESPERA POR E/S

E/S

Figura 2.3. Esquema de colas de planificación

10 Unidad 2. Procesos.
Sistemas Operativos

2.3. PROCESOS LIGEROS

Un hilo (thread) o proceso ligero se define como una unidad básica de


ejecución. Un proceso puede contener un solo flujo de ejecución, como ocurre
con los procesos clásicos, o más de un flujo de ejecución. Estos flujos son lo
que se denominan procesos ligeros.

Proceso A Proceso B

Hilos o
procesos
ligeros
Figura 2.4. Procesos ligeros

Desde el punto de vista de programación, un proceso ligero se define como


una función que permite ser ejecutada de forma concurrente con otras.

2.3.1. INFORMACIÓN DE LOS PROCESOS LIGEROS

Cada proceso ligero tiene información propia y que no comparte con otros
procesos ligeros. Esta información, corresponde básicamente a su propio
contexto de ejecución, pudiéndose destacar las siguientes:

• Contador de programa.

• Pila.

• Registros.

• Estado del proceso ligero.

Unidad 2. Procesos. 11
Formación Abierta

Por otro lado, todos los procesos ligeros de un mismo proceso comparten la
información de éste. En concreto:

• Espacio de memoria.

• Variables globales.

• Archivos en uso.

• Procesos hijos.

• Temporizadores.

• Señales.

• Contabilidad.

Todos los procesos ligeros pertenecientes a un mismo proceso, comparten el


mismo espacio de direcciones de memoria que incluye el código, los datos y
las pilas de los distintos procesos ligeros. Esto implica que no existe
protección de memoria entre los procesos ligeros, algo que si que ocurre
entre los procesos clásicos.

2.3.2. ESTADOS DE UN PROCESO LIGERO

Un hilo o proceso ligero puede encontrarse en uno de estos tres estados:


preparado, en ejecución o bloqueado. Cada uno de los hilos de un proceso
tiene su propio estado, por tanto en un mismo proceso, algunos de sus hilos
podrán estar bloqueados, otros en ejecución y otros preparados para
ejecutarse.

El estado del proceso será la combinación del estado de sus hilos. Si tiene
algún hilo en ejecución, su estado será en ejecución. Si no tiene hilos en
ejecución pero tiene alguno preparado, el estado del proceso será preparado.
Y por último, si todos sus hilos están bloqueados, el estado del proceso será
bloqueado.

12 Unidad 2. Procesos.
Sistemas Operativos

Proceso

Hilos Hilo en
Preparados Ejecución
Hilo
Bloqueado

Figura 2.5. Estados de un proceso ligero

2.3.3. PARALELISMO

La principal ventaja de los procesos ligeros, es que permiten ejecutar de


forma paralela partes de un programa. Al dividir un programa en
procedimientos, que se puedan ejecutar de forma independiente y
concurrente, se obtendrá un mayor avance en la ejecución, en menos tiempo.

Proceso ligero 1 Proceso ligero 2


P CPU E/S CPU F P CPU E/S CPU F

Ejecución en serie

P CPU E/S CPU F


Ejecución en paralelo
P CPU E/S CPU F

P = Preparado
CPU = En ejecución
E/S = En operación de E/S
F = Finalizado

Figura 2.6. Ejemplo de ejecución de 2 procesos ligeros en serie o en paralelo

Unidad 2. Procesos. 13
Formación Abierta

2.4. PLANIFICACIÓN DE PROCESOS

El objetivo de la planificación de procesos consiste en el reparto del tiempo de


CPU entre los procesos que están preparados para ejecutarse.

El planificador es la parte del sistema operativo encargada de seleccionar un


proceso de la cola de preparados y pasarlo a ejecución.

La planificación se suele llevar a cabo en tres niveles: planificación a corto,


medio y largo plazo.

Planificador a largo plazo (PLP)

Es el encargado de incluir nuevos procesos en la cola de preparados, es


decir, gestiona la transición de los procesos del estado nuevo a preparado.

Estos procesos son de tipo batch, no interactivos, en los que no importa el


momento preciso de ejecución (siempre dentro de unos límites). Ya que
pasará un cierto tiempo hasta que el proceso pase a ser ejecutado.

El PLP observa periódicamente la carga de trabajo, e ingresa nuevos


procesos si detecta que el rendimiento puede aumentar. Algunos factores que
evalúa para agregar más procesos son: la carga del procesador, el espacio
de memoria ocupado, la actividad de los dispositivos E/S, etc.

Planificador a medio plazo (PMP)

Es el responsable de gestionar las situaciones en las que el sistema se queda


escaso de recursos, normalmente porque los procesos consumen toda la
memoria disponible.

En esta situación de escasez de recursos, podrían existir procesos en estado


bloqueado, que no van a ejecutarse en un largo periodo de tiempo, y sin
embargo están ocupando memoria.

El PMP se encarga de copiar la imagen de estos procesos a la memoria


secundaria (disco duro) y liberar la memoria principal que tenían asignada.
Esta operación de traslado de memoria a disco se denomina intercambio
(swapping).

14 Unidad 2. Procesos.
Sistemas Operativos

Los procesos que son retirados de memoria, pasan a un estado de bloqueado


suspendido y posteriormente a preparado suspendido antes de volver a estar
preparado.

Planificador a corto plazo (PCP)

Es el componente encargado de seleccionar los procesos que se encuentran


en estado preparado y pasarlos a ejecución, permitiéndoles el uso de la CPU.

TERMINADO

PLANIFICADOR A
PLANIFICADOR A
LARGO PLAZO
EJECUCIÓN CORTO PLAZO

NUEVO PREPARADO BLOQUEADO

…..

…..
PREPARADO BLOQUEADO
SUSPENDIDO SUSPENDIDO
…..
PLANIFICADOR A
MEDIO PLAZO

Figura 2.7. Tipos de planificación

2.4.1. PLANIFICACIÓN EXPULSIVA/NO EXPULSIVA

La planificación puede ser expulsiva o no expulsiva. En un sistema operativo


sin expulsión, un proceso se apropia del procesador (CPU) mientras lo desee,
es decir, mientras no solicite del sistema operativo un servicio que lo bloquee.

Esta política de planificación no expulsiva tiene como ventaja principal, que


el SO minimiza de forma considerable el tiempo que dedica a la planificación
y activación de procesos.

Unidad 2. Procesos. 15
Formación Abierta

Pero tiene un gran inconveniente, ya que un proceso podría acaparar por


tiempo indefinido el procesador (por ejemplo, un proceso que entra en un
bucle infinito).

En los sistemas con política de planificación expulsiva, los procesos en


ejecución pueden ser desalojados del procesador, aunque no lo hayan
solicitado. De esta forma se puede controlar el tiempo que un proceso está en
estado de ejecución, lo que requiere que el SO compruebe periódicamente si
el proceso ha superado el tiempo límite de CPU.

2.4.2. COLAS DE PROCESOS

El sistema operativo suele implementar estructuras de datos dinámicas, como


las colas, para organizar los procesos en estado preparado y bloqueados por
operaciones de E/S. Esta estructura, le facilita la tarea de buscar el siguiente
proceso a planificar.

Bit Colas Información de los procesos

1 Cabecera subcola prioridad 0 BCP 1


0 Cabecera subcola prioridad 1

1 Cabecera subcola prioridad 9 BCP 2 BCP 5 BCP 6


0 Cabecera subcola batch 0
1 Cabecera subcola batch 1 BCP 3 BCP 4

Figura 2.8. Colas de planificación

En la figura anterior se puede observar un ejemplo con 10 colas para


procesos interactivos y 2 para procesos batch. En ellas, se van organizando
los procesos preparados para ejecutarse en varios niveles de prioridad,
siendo el nivel 0 el más prioritario. También se puede observar un bit, que
indica con el valor 1 que esa cola tiene procesos en espera. Lo que le facilita
al planificador la tarea de buscar los procesos preparados para ejecutarse,
optimizándose así el tiempo de búsqueda.

16 Unidad 2. Procesos.
Sistemas Operativos

2.4.3. OBJETIVOS DE LA PLANIFICACIÓN

El objetivo general del planificador es optimizar el rendimiento del sistema


operativo, pero como objetivos particulares tiene los siguientes:

• Reparto equitativo del procesador.

• Eficiencia en el uso del procesador.

• Conseguir el menor tiempo de respuesta posible en procesos interactivos.

• Conseguir el menor tiempo de espera posible en procesos batch.

• Conseguir ejecutar el mayor número de trabajos por unidad de tiempo.

• Cumplir estrictamente los plazos de tiempo en un sistema de tiempo real.

Todos estos objetivos son incompatibles entre sí. Por ello cada sistema
operativo, en función de para que esté diseñado, se centrará en el que más
interese para su óptimo funcionamiento.

Unidad 2. Procesos. 17
Formación Abierta

2.5. ALGORITMOS DE PLANIFICACIÓN

Antes de conocer en detalle los principales algoritmos de planificación, se


debe recordar que existen dos grandes tipos de planificación: expulsivas
(preemptive) y no expulsivas.

A la hora de seleccionar el algoritmo de planificación, que mejor se adapte a


un sistema concreto, se debe observar que cumple una serie de criterios
básicos y evaluar ciertos parámetros:

• Todos los algoritmos deben garantizar la equidad: el algoritmo debe


ser justo y equilibrado a la hora de asignar recursos y tiempo a los
procesos.

• Debe ser eficaz: uno de sus objetivo principales es el de mantener


ocupado el mayor tiempo posible al procesador. No se puede permitir que
el procesador esté parado, por la causa que sea, teniendo en cola
procesos preparados para la ejecución.

• No inanición: se debe garantizar que todo proceso se ejecutará en un


espacio de tiempo finito.

• Parámetros evaluables: estos parámetros ayudan a valorar los defectos


y virtudes que tiene cada uno de los algoritmos. De todos ellos se suele
trabajar con sus medias, varianzas o valores extremos.

ƒ Rendimiento. Es la cantidad de trabajos completados por unidad de


tiempo.

ƒ Tiempo de retorno. Es el tiempo que transcurre desde que un trabajo


es enviado al sistema hasta que finaliza.

ƒ Tiempo de espera. Es el tiempo que un proceso espera a la


asignación de recursos, debido a la competencia con otros procesos
en sistemas multitarea.

ƒ Tiempo de respuesta. Es el tiempo que un proceso bloqueado tarda


en entrar en ejecución, desde que ocurre el evento que lo bloquea.

Por naturaleza, no hay un algoritmo que sea mejor o peor que otro, esto
dependerá de cada caso, del tipo de procesos que se estén gestionando y de
los criterios de planificación establecidos.

18 Unidad 2. Procesos.
Sistemas Operativos

Un algoritmo o política de planificación, puede ser óptima si se desea


minimizar el tiempo medio de espera, pero que sea inadecuada si se quiere
garantizar un tiempo mínimo de respuesta.

2.5.1. FCFS (FIRST COME FIRST SERVED)

También denominado FIFO (First In First Out), se trata de un algoritmo no


expulsivo, en el que el planificador gestiona la cola de entrada de procesos
como una cola FIFO. Esto quiere decir, que los procesos entran en ejecución
por estricto orden de llegada al sistema, y una vez en ejecución, no
abandonan el procesador hasta que hayan terminado.

Para facilitar la comprensión de los distintos algoritmos, se plantearan


ejemplos de cada uno de ellos. Se partirá de una tabla de carga de trabajo, en
la que se observan los nombres de los procesos, el instante de llegada al
sistema de cada uno de ellos y la cantidad de tiempo necesaria de CPU para
completar su ejecución. Las unidades de tiempo son arbitrarias e iguales para
el tiempo de llegada y el de ejecución.

Tiempo de Tiempo de
Proceso
llegada ejecución

A 0 9

B 1 2

C 2 3

D 3 1

E 4 5

Por ejemplo, en esta tabla se puede observar que el proceso llamado “C”, ha
llegado al sistema en el instante de tiempo 2 y que necesita 4 unidades de
tiempo para llevar a cabo su ejecución.

Para estudiar el comportamiento de este algoritmo FCFS, con este grupo de


procesos, se realizará un diagrama que representará el uso de CPU por cada
uno de ellos, así como el tiempo que hace uso de dicho recurso.

Unidad 2. Procesos. 19
Formación Abierta

Tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

CPU A A A A A A A A A B B C C C D E E E E E

Obsérvese lo siguiente:

• El proceso A llega en el instante 0, por tanto es el primero que pasa a


ejecutarse.

• Según la tabla, en el instante 1 llega el proceso B, pero al tratarse de un


algoritmo no expulsivo y encontrarse el proceso A en plena ejecución, el
proceso B debe esperar a que termine A sus 9 unidades de tiempo de
ejecución.

• A continuación, en el instante 10 cuando ya ha terminado A, comienza a


ejecutarse B y así sucesivamente con todos los procesos.

A continuación, se calcularán los tiempos medios de retorno y de espera y se


evaluarán los resultados.

Tiempo de Tiempo de
Proceso
retorno espera

A 9 0

B 10 8
C 12 9

D 12 11

E 16 11
Tiempos medios 59/5 39/5

Obsérvese por ejemplo el proceso C:

Tº de retorno = Tº de finalización – Tº de llegada = 14 – 2 = 12.

Tº de espera = Tº anterior a primera ejecución – Tº de llegada = 11 – 2 = 9.

20 Unidad 2. Procesos.
Sistemas Operativos

Observando el diagrama y los parámetros obtenidos, se pueden deducir las


siguientes ventajas e inconvenientes:

• Esta política es simple de implementar.

• Es muy sensible al orden de llegada, si los trabajos largos entran


primero, hacen esperar mucho a los trabajos cortos que vienen después.
Esto se observa mejor si con el mismo ejemplo anterior, se modifica el
orden de llegada, de manera que los procesos cortos entren antes que los
largos.

Tiempo de Tiempo de
Proceso
llegada ejecución

D 0 1

B 1 2

C 2 3

E 3 5

A 4 9

Tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

CPU D B B C C C E E E E E A A A A A A A A A

Tiempo de Tiempo de
Proceso
retorno espera

A 20 8

B 2 0

C 4 1

D 1 0

E 8 3

Tiempos medios 35/5 12/5

Se observa como los tiempos medios han disminuido, debido a que en


este contexto de trabajo, los procesos largos no han penalizado en tiempo
a los más cortos.

Unidad 2. Procesos. 21
Formación Abierta

• No es una política válida para procesos interactivos, puesto que


perjudica a los procesos que requieren de operaciones de E/S. Esto se
debe a que si un proceso que requiera de mucho tiempo de CPU acapara
el procesador, llegaría a conseguir que se acumulen en cola procesos que
requieren de operaciones de E/S y que esperan a ser ejecutados.

2.5.2. SJF (SORT JOB FIRST)

Es un algoritmo no expulsivo en el que el proceso en espera más corto, es


decir, con menor tiempo de ejecución, será el que pase a ser ejecutado y por
tant, se le asigne el procesador hasta su finalización.

Utilizando los mismos datos que en algoritmo visto anteriormente (FCFS), se


obtiene lo siguiente:

Tiempo de Tiempo de
Proceso
llegada ejecución

A 0 9
B 1 2
C 2 3
D 3 1
E 4 5

Tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
CPU A A A A A A A A A D B B C C C E E E E E

Tiempo de Tiempo de
Proceso
retorno espera

A 9 0

B 11 9

C 13 10

D 7 6

E 16 11

Tiempos medios 56/5 36/5

22 Unidad 2. Procesos.
Sistemas Operativos

Obsérvese lo siguiente:

• El proceso A llega en el instante 0 y como no hay ninguno en espera, es


el que pasa a ejecutarse.

• Cuando A termina, ya están en espera los procesos B, C, D y E que han


llegado mientras se ejecutaba A.

• Al existir varios procesos a la espera, el planificador debe decidir cuál es


el más corto, y por tanto, el que pasa a ser ejecutado. En este caso será
el proceso D, que solo tiene 1 unidad de tiempo de ejecución. Y así
sucesivamente con el resto de procesos.

En base a los resultados obtenidos, se pueden deducir las siguientes ventajas


e inconvenientes de este algoritmo:

• Minimiza el tiempo de espera medio, ya que al tener preferencia los


trabajos cortos, los tiempos de espera se reducen.

• Existe riesgo de inanición de los procesos largos. Si se diera la


circunstancia de que en el momento en el que el planificador selecciona el
siguiente proceso, siempre existiese uno más corto en la cola de
preparados.

• Es un algoritmo difícil de implementar, ya que en la realidad es


imposible conocer a priori cuánto va a durar la ejecución de un proceso.
Se podría estimar la duración en base a comportamientos pasados del
mismo proceso, pero es obvio que no sería una valoración completamente
fiable.

• Es un algoritmo aplicable a procesos batch repetitivos, cuyo


comportamiento se conozca y ya haya sido analizado. Esto se debe a lo
comentado en el punto anterior, de la necesidad de conocer o estimar a
priori el tiempo de ejecución de un proceso.

2.5.3. SRTF (SORT REMAINING TIME FIRST)

Es la variante expulsiva del algoritmo anterior (SJF), en el cual los procesos


son desalojados de la CPU, si llega a la cola de preparados un proceso con
menor tiempo de ejecución que lo que le queda al que se está ejecutando.

Unidad 2. Procesos. 23
Formación Abierta

Utilizando los mismos datos que en los algoritmos vistos anteriormente, se


obtiene lo siguiente:

Tiempo de Tiempo de
Proceso
llegada ejecución

A 0 9

B 1 2
C 2 3

D 3 1

E 4 5

Tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

CPU A B B D C C C E E E E E A A A A A A A A

Tiempo de Tiempo de
Proceso
retorno espera

A 20 11

B 2 0

C 5 2

D 1 0

E 8 3

Tiempos medios 36/5 16/5

A diferencia del algoritmo SJF se puede observar lo siguiente:

• En el instante 0 llega el proceso A que comienza a ejecutarse.

• En el instante 1 llega el proceso B con una duración de ejecución de 2


unidades de tiempo y puesto que al proceso A todavía le quedan 8
unidades de tiempo, el planificador desaloja (expulsa) al proceso A y pasa
a ejecutar el proceso B.

• En el instante 2 llega el proceso C, pero en este caso sigue la ejecución


de B, ya que le queda solo una unidad de tiempo de ejecución, mientras
que C ha llegado con 3 unidades.

24 Unidad 2. Procesos.
Sistemas Operativos

• Cuando el proceso B concluye, están a la espera en la cola de preparados


los procesos: A (con 8 unidades, ya que ejecuto una de las 9 iniciales), C
(con 3 unidades) y D (con 1 unidad). Por tanto el siguiente proceso que
selecciona el planificador es el D. Y así sucesivamente con todos los
procesos.

Las ventajas e inconvenientes de este algoritmo son similares a las de la


versión no expulsiva (SJF):

• Minimiza el tiempo de espera medio, aun más que el SJF.

• Existe riesgo de inanición de los procesos largos.

• Es un algoritmo difícil de implementar, ya que en la realidad es


imposible conocer a priori cuánto va a durar la ejecución de un proceso.

• Es un algoritmo aplicable a procesos batch repetitivos, cuyo


comportamiento se conozca y ya haya sido analizado.

2.5.4. RR (ROUND ROBIN)

También denominado cíclico o rotatorio. Es un algoritmo expulsivo diseñado


para hacer un reparto equitativo de tiempo del uso del procesador, por ello
está especialmente destinado a los sistemas de tiempo compartido.

El algoritmo se basa en el concepto de rodaja o slot de tiempo, que es el


tiempo máximo que un proceso puede estar haciendo uso de la CPU sin que
el planificador lo expulse. Un proceso que consuma su rodaja de tiempo,
pasará a la última posición de la cola de preparados.

Los procesos están organizados en forma de cola circular, eligiéndose para


su ejecución el que encabeza la cola en ese momento. Por tanto se utiliza
una política de selección FIFO, pero asignando un tiempo máximo de CPU en
cada ejecución.

Utilizando el algoritmo Roun Robin con una rodaja de tiempo de 2 unidades,


lo cual se escribe como RR(2), y los mismos datos que en los algoritmos
vistos anteriormente, se obtiene lo siguiente:

Unidad 2. Procesos. 25
Formación Abierta

Tiempo de Tiempo de
Proceso
llegada ejecución

A 0 9

B 1 2

C 2 3

D 3 1

E 4 5

Tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

CPU A A B B C C A A D E E C A A E E A A E A

Tiempo de Tiempo de
Proceso
retorno espera

A 20 11

B 3 1

C 10 7

D 6 5

E 15 10

Tiempos medios 54/5 34/5

Obsérvese lo siguiente:

• En el instante 0 llega el proceso A el cual pasa a ejecutarse.

• Consume su rodaja de tiempo de ejecución permitida por tanto debe pasar


a la cola de preparados en el instante 2. Pero en ese mismo momento
entra en cola el proceso C, por tanto es necesario tomar la decisión, de si
tienen prioridad los procesos desalojados de la CPU sobre los de nuevo
ingreso en la cola o viceversa. Cualquiera de las dos opciones es válida,
ya que se trata de la simulación de un algoritmo. En la realidad alguno de
los 2 eventos se generará y atenderá primero que el otro. Sin embargo, es
importante resaltar que la elección tomada afecta al diagrama y a los
tiempos obtenidos. En el ejemplo anterior se ha utilizado la primera
opción, es decir, prevalece el proceso nuevo sobre el expulsado de la
CPU.

26 Unidad 2. Procesos.
Sistemas Operativos

Situación de llegada de 2 procesos

Cola de preparados

C B CPU

Prioridad de los procesos de nuevo ingreso sobre los desalojados de la


CPU:

Cola de preparados

ACB CPU

Prioridad de los procesos desalojados de la CPU sobre los de nuevo ingreso:

Cola de preparados

CAB CPU

Obsérvese la diferencia al escoger la segunda opción, prioridad de los


procesos desalojados de la CPU sobre los de nuevo ingreso.

Tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

CPU A A B B A A C C D E E A A C E E A A E A

Tiempo de Tiempo de
Proceso
retorno espera

A 20 11

B 3 1

C 12 9

D 6 5

E 15 10

Tiempos medios 56/5 36/5

Unidad 2. Procesos. 27
Formación Abierta

En base a los resultados obtenidos con cualquiera de las 2 opciones, se


pueden deducir las siguientes ventajas e inconvenientes de este algoritmo:

• Es un algoritmo de fácil implementación.

• Garantiza un reparto de tiempo justo.

• Es muy efectivo en sistemas operativos de tiempo compartido. Ya


que en este tipo de sistemas, se debe garantizar unos tiempos de
respuesta razonables para trabajos interactivos.

• Garantiza que no se produce inanición de ningún proceso,


independientemente del momento de llegada o de la duración de dicho
proceso.

• Es difícil decidir de manera óptima el tiempo que se le asignará a


cada slot o rodaja de tiempo. Si es muy grande, los procesos terminarán
antes de agotar su slot de tiempo y el algoritmo pierde su efectividad. Y si
es muy pequeña, muchos procesos serán expulsados de la CPU, lo que
implica muchos cambios de contexto, con el consiguiente coste de tiempo
y recursos.

2.5.5. PLANIFICACIÓN BASADA EN PRIORIDADES

En los métodos de planificación basados en prioridades, el planificador decide


a qué proceso permite el acceso a la CPU, en función de la prioridad que
cada uno de ellos lleva asociada. Lógicamente seleccionará primero los
procesos con mayor prioridad.

Un problema intrínseco a este tipo de planificaciones, es el método empleado


para asignar la prioridad a un proceso. Las prioridades pueden estar definidas
internamente (por ejemplo, el sistema operativo da más prioridad a los
procesos que consumen menos recursos) o externamente (por ejemplo, el
usuario asigna la prioridad que desea para cada proceso). Incluso puede
existir una combinación de ambas, es decir, que dependa de algún factor
proporcionado por el usuario y otra parte por criterio del sistema operativo.

Pueden implementarse, además, prioridades dinámicas o estáticas. Un


proceso puede mantener la prioridad que le sea asignada hasta su
finalización, o bien tener diferentes prioridades a lo largo de su vida, en
función de diferentes factores (por ejemplo: recursos que haya consumido,
tiempo de ejecución restante, carga del procesador, etc.).

28 Unidad 2. Procesos.
Sistemas Operativos

Por último, las políticas basadas en prioridades pueden ser expulsivas o no


expulsivas. Según se implemente, un proceso puede acaparar la CPU hasta
que finalice (no expulsiva), o ser desalojado de la CPU y volver a la cola de
preparados si llega un proceso con más prioridad (expulsiva).

Un inconveniente importante de este tipo de planificación, es que existe


posibilidad de inanición de los procesos con poca prioridad. Los sistemas
operativos que utilizan este tipo de planificación, aplican una técnica de
envejecimiento. Esta técnica consiste en ir aumentando progresivamente la
prioridad de los procesos, que están en espera de la CPU, lo que garantiza
que en algún instante serán atendidos.

2.5.6. PLANIFICACIÓN BASADA EN MÚLTIPLES COLAS

Hasta ahora, se ha supuesto que el sistema únicamente disponía de una cola


de procesos preparados. Pero es posible tener un planificador que gestione
varias colas, incluso con políticas distintas en cada una de ellas.

Los dos factores clave en este tipo de planificación, son el método de


asignación de los procesos a las diferentes colas y la política seguida para
repartir el tiempo de CPU entre las distintas colas (por ejemplo: prioridad
absoluta entre colas, es decir, solo se selecciona un proceso de una cola
inferior si las superiores están vacías; un porcentaje de tiempo en cada cola,
etc.).

Las políticas de planificación basadas en múltiples colas, pueden incluir


retroalimentación. Consiste en la técnica, por la cual un proceso puede
cambiar a una cola distinta según su comportamiento durante la ejecución
(por ejemplo: un proceso que agota el slot tiempo asignado de CPU en una
cola de prioridad 0 con una política RR, será expulsado de la CPU y pasara a
una cola de menor prioridad; la cola de prioridad 1).

Este tipo de políticas, también admiten ser expulsivas o no expulsivas. Por


ejemplo, en colas con prioridad absoluta entre ellas, se puede excluir un
proceso si llega alguno a las colas superiores.

Unidad 2. Procesos. 29
Sistemas Operativos

♦ RESUMEN

• ¿Qué es un proceso? Un proceso es un programa en ejecución. De una


forma más precisa se puede definir como: la unidad de procesamiento
gestionada por el sistema operativo.

• Cuando un sistema operativo permite que coexistan varios procesos


activos al mismo tiempo, se le denomina sistema multitarea. En ellos, el
sistema operativo se encarga de gestionar los procesos, organizándolos
en distintos estados, de manera que se optimice al máximo el uso de la
CPU.

• Un proceso puede pasar por distintos estados a lo largo de su vida, es


decir, desde su creación como un proceso nuevo hasta su terminación.
Los posibles estados son los siguientes: nuevo, preparado, ejecución,
bloqueado y terminado. Los cambios de estado se denominan cambios de
contexto y toda la información necesaria para su posterior reanudación se
almacena en lo que se denomina Bloque de Control de Procesos (BCP).

• La planificación de procesos consiste en el reparto del tiempo de CPU


entre los procesos que están preparados para ejecutarse. La planificación
se lleva a cabo en tres niveles: planificación a corto, medio y largo plazo.

• A la hora de seleccionar el algoritmo de planificación que mejor se adapte


a un sistema concreto, se debe observar que cumple una serie de criterios
básicos y evaluar ciertos parámetros: todo algoritmo debe garantizar la
equidad, debe ser eficaz y debe garantizar la no inanición de procesos.

• Los algoritmos más importantes son: FCFS (First Come First Served), SJF
(Sort Job First), SRTF (Sort Remaining Time First), RR (Round Robin),
Planificación basada en prioridades y Planificación basada en
múltiples colas.

Unidad 2. Procesos. 31
SISTEMAS
OPERATIVOS

3
COMUNICACIÓN Y
SINCRONIZACIÓN DE
PROCESOS
Sistemas Operativos

ÍNDICE
♦  OBJETIVOS................................................................................................3 

♦  INTRODUCCIÓN ........................................................................................4 
3.1.  Concurrencia ........................................................................................5 
3.1.1.  Ventajas de la ejecución concurrente ..............................................6 
3.1.2.  Tipos de procesos concurrentes ......................................................7 
3.2.  Problemas clásicos de comunicación y sincronización ....................9 
3.2.1.  Problema de la sección crítica .........................................................9 
3.2.2.  Problema del productor-consumidor ..............................................11 
3.2.3.  Problema de los lectores-escritores ...............................................12 
3.2.4.  Problema de los filósofos comensales ...........................................13 
3.3.  Mecanismos de comunicación y sincronización..............................15 
3.3.1.  Comunicación mediante archivos ..................................................16 
3.3.2.  Comunicación y sincronización mediante tuberías .........................16 
3.3.3.  Semáforos .....................................................................................20 
3.3.4.  Mutex y variables condicionales.....................................................24 
3.3.5.  Memoria compartida ......................................................................30 
3.3.6.  Sincronización mediante señales ...................................................30 
3.3.7.  Paso de mensajes .........................................................................30 
♦  RESUMEN ................................................................................................35 

Unidad 3. Comunicación y sincronización de procesos. 1


Sistemas Operativos

♦ OBJETIVOS

• Entender el concepto de concurrencia y multiprogramación y asimilar las


ventajas de la ejecución concurrente de procesos.

• Comprender los mecanismos de comunicación y sincronización utilizados


por procesos concurrentes.

• Planteamiento y comprensión de los problemas clásicos de comunicación


y sincronización. Concepto de interbloqueo.

• Conocer el problema de la sección crítica y otros problemas clásicos de


concurrencia de procesos. En qué consisten y las diferentes soluciones.

• Conocer y saber manejar herramientas para la gestión de los procesos


concurrentes como son: instrucciones atómicas, semáforos, tuberías,
señales, mutex, variables condicionales, etc. Sus ventajas e
inconvenientes.

Unidad 3. Comunicación y sincronización de procesos. 3


Formación Abierta

♦ INTRODUCCIÓN

Los distintos procesos dentro de un ordenador no actúan de forma aislada.


Por un lado, algunos procesos cooperan para lograr un objetivo común. Por
otro lado, los procesos compiten por el uso de unos recursos limitados, como
el procesador, la memoria o los ficheros. Estas dos actividades de
cooperación y competición llevan asociada la necesidad de algún tipo de
comunicación entre los procesos. Parte de este tema se dedicará estudiar
estos mecanismos de comunicación entre los procesos.

Cuando estos procesos, que se ejecutan de forma concurrente, compiten por


recursos o necesitan comunicarse entre ellos, aparecen los problemas como
el acceso a variables comunes, los interbloqueos, etc.

En esta unidad se dará solución a estos y otros problemas clásicos de


concurrencia de procesos. Para ello se estudiarán en qué consisten estos
problemas y se propondrán distintas soluciones, utilizando para ello los
distintos mecanismos de comunicación y sincronización que ofrecen los
sistemas operativos.

4 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

3.1. CONCURRENCIA

En la unidad anterior se definió proceso como un programa en ejecución, que


posee su propio espacio de direcciones y un BCP con información asociada a
dicho proceso. Se habla de concurrencia o multiprogramación cuando existen
de forma simultánea varios de estos procesos en ejecución. En un sistema
multiprogramado o concurrente, se tienen varios procesos cargados en
memoria y el procesador va entrelazando la ejecución de las instrucciones de
los distintos procesos.

Cabe destacar que no es lo mismo existencia simultánea, que ejecución


simultánea. Para la ejecución simultánea, es evidentemente necesario que
exista redundancia de hardware, es decir, varias CPU. Ya que esta es la
única forma de conseguir el verdadero paralelismo en la ejecución. En
general, la concurrencia será aparente siempre que el número de procesos
sea mayor que el de procesadores disponibles.

Existen tres tipos de arquitecturas de computadores, que permiten la


ejecución concurrente de procesos: multiprogramación, multiprocesador,
multicomputadora.

Multiprogramación (un único procesador)

Todos los procesos se ejecutan en el mismo procesador. Es el SO el


encargado de repartir el tiempo de acceso a la CPU entre los distintos
procesos. Se va intercalando la ejecución de los distintos procesos, dando al
usuario o usuarios la sensación de ejecución simultánea de todos los
procesos, aunque realmente solamente se ejecutan instrucciones de un
proceso en cada momento.

Proceso 1

Proceso 2

Proceso 3

Tiempo

Figura 3.1. Ejemplo ejecución 3 procesos en sistema multiprogramado con


una única CPU

Unidad 3. Comunicación y sincronización de procesos. 5


Formación Abierta

Multiprocesador
Cuando una computadora está equipada con varias CPU que comparten la
memoria principal, se le denomina sistema multiprocesador. En esta
arquitectura, los procesos concurrentes no solo pueden intercalar su
ejecución (multiprogramación), sino que pueden superponerla. En un
momento dado, se pueden estar ejecutando tantos procesos distintos como
procesadores existan, por lo que aquí sí que se produce realmente una
ejecución simultánea de procesos.

CPU 1
CPU 2

Proceso 1

Proceso 2

Proceso 3

Tiempo

Figura 3.2. Ejemplo ejecución 3 procesos en sistema multiprocesador

Multicomputadora

Es una arquitectura que corresponde a una máquina con memoria distribuida,


al contrario que la anterior que era de memoria compartida. Está formada por
varias computadoras completas, cada una con su CPU, su memoria principal
y periféricos. Cada una de estas computadoras se denomina nodo y están
interconectados entre sí, a través de una red. Se comunican entre ellas
mediante el paso de mensajes, lo que permite la ejecución de procesos en las
distintas máquinas, como si de una única máquina con varios procesadores
se tratara.

3.1.1. VENTAJAS DE LA EJECUCIÓN CONCURRENTE

El desarrollo de un sistema que permita la ejecución concurrente de procesos,


lógicamente, es mucho más complejo que la de un sistema operativo
monoprogramado. Pero por el contrario, los sistemas multiprogramados
ofrecen muchas más ventajas que los anteriores.

6 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

Algunas de ellas son:

• Facilita la programación: permite estructurar la programación de


aplicaciones como un conjunto de procesos que cooperan para conseguir
un objetivo común. Cada proceso realizara una tarea sencilla y se
comunicara con el resto de procesos para obtener el complejo resultado
final.

• Agiliza la ejecución y los cálculos: si se desea que una tarea compleja


se ejecute más rápidamente, esta se debe dividir en varios procesos. Los
cuales se ejecutarán en paralelo, con lo que el tiempo de ejecución se
reducirá. Obsérvese que esta división puede resultar muy compleja e
incluso en ocasiones será imposible realizarla. También se debe tener en
cuenta que la mejora del tiempo de ejecución solo ocurrirá si se trata de
un sistema multiprocesador o multicomputadora. Ya que como se ha visto,
en los sistemas multiprogramados la ejecución en paralelo es algo
simulado.

• Posibilita el uso interactivo: permite que varios usuarios trabajen de


forma simultánea en distintos terminales.

• Mejor aprovechamiento de recursos: en especial se optimiza el uso de


la CPU, ya que se aprovechan los tiempos de espera de unos procesos
para la ejecución de otros.

• Mayor modularidad: las tareas complejas pueden ser disgregadas en


varios procesos más sencillos, por los que su programación y
mantenimiento se hace mucho más sencillo.

• Resolución de problemas inherentemente concurrentes: existen


aplicaciones cuya resolución sería prácticamente imposible, sino se
utilizasen múltiples procesos concurrentes cooperantes. Un ejemplo seria
una aplicación web, encargada de atender de forma simultánea a
múltiples conexiones de los usuarios.

3.1.2. TIPOS DE PROCESOS CONCURRENTES

Los procesos que se ejecutan de forma concurrente, pueden ser procesos


independientes o cooperantes.

Unidad 3. Comunicación y sincronización de procesos. 7


Formación Abierta

Procesos Independientes
Son procesos que se ejecutan sin requerir la cooperación de otros procesos.
Estos procesos compiten por los recursos que la máquina les proporciona
para la ejecución y son independientes, puesto que entre ellos no existe
ninguna necesidad de comunicación.

Procesos Cooperantes
Estos procesos están diseñados para trabajar conjuntamente, por lo que
deben ser capaces de interactuar y comunicarse entre ellos, para llegar a
conseguir el objetivo común.

Tanto si los procesos son independientes, como si son cooperantes, pueden


producirse entre ellos dos tipos de interacciones:

• Interacciones motivadas porque los procesos compiten por recursos


físicos o lógicos. En el caso en que dos procesos compitan, por ejemplo,
por el acceso a disco, es el sistema operativo el encargado de que los dos
procesos realicen la operación necesaria, de forma ordenada y sin crear
ningún conflicto.

• Interacciónes motivadas porque los procesos se sincronizan para


alcanzar el objetivo por el que trabajan. En ocasiones el trabajo
realizado entre varios procesos, requiere un orden estricto de ejecución.
Por ejemplo, la ejecución de dos procesos, el proceso A captura imágenes
y el proceso B almacena las imágenes capturadas. En este ejemplo el
proceso B estará esperando a que el proceso A capture la imagen y le
informe que ya puede almacenarla. La manera de comunicarse entre ellos
puede ser, entre otras, por paso de mensajes o por memoria compartida.

8 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

3.2. PROBLEMAS CLÁSICOS DE


COMUNICACIÓN Y SINCRONIZACIÓN

El hecho de que varios procesos necesiten sincronizarse y comunicarse entre


ellos, implica la aparición de problemas. A continuación, se detallarán y se
buscarán soluciones a los problemas clásicos de comunicación y
sincronización de procesos.

3.2.1. PROBLEMA DE LA SECCIÓN CRÍTICA

Este es el problema más común que se puede plantear, en un sistema en el


que se ejecutan procesos de forma concurrente, ya sean procesos
independientes o cooperantes.

Considérese un sistema formado por varios procesos, en el que cada proceso


posee un fragmento de código denominado sección crítica. En esta parte del
código, los procesos pueden acceder y modificar variables comunes, registros
de la base de datos, un archivo o en general cualquier recurso compartido
con el resto de procesos. El sistema debe controlar que solo pueda haber un
proceso, en cada instante de tiempo, ejecutando su sección crítica. Ya que de
no ser así, se pueden producir errores por el acceso simultáneo a recursos
compartidos.

Sección crítica de un proceso

Conjunto de instrucciones que acceden a algún recurso


compartido por al menos otro proceso del sistema, siendo
posible la modificación del mismo por alguno de ellos.

Para que varios procesos que comparten recursos se ejecuten correctamente,


sus secciones críticas deben cumplir las siguientes condiciones:

• Condición de exclusión mutua: si un proceso está ejecutando las


instrucciones de su sección crítica, ningún otro proceso podrá ejecutar su
propia sección crítica.

Unidad 3. Comunicación y sincronización de procesos. 9


Formación Abierta

• Condición de progreso: si varios procesos quieren acceder a sus


secciones críticas, solo entrará uno de ellos y la decisión de cuál de ellos
será, se debe tomar en un tiempo finito.

• Condición de espera limitada: cualquier proceso que desee entrar en su


sección crítica, debe poder hacerlo después de un número limitado de
intentos.

Toda solución al problema de la sección crítica, se basa en un protocolo en el


que cualquier proceso que quiera entrar en su sección crítica, lo debe notificar
al resto. De igual manera, al terminar se debe comunicar también, que el
acceso queda libre.

Como ejemplo, se suponen dos procesos que se ejecutan concurrentemente


y que actualizan una misma cuenta, el proceso P0 añade al saldo el valor de
la nómina y el proceso P1 descuenta del saldo una factura domiciliada. El
código de los procesos es el siguiente:

En esta solución, existe una variable “i” y otra “j” que indica el proceso que se
está ejecutando. Si se está ejecutando el proceso “i”, entonces “i” valdrá 0 y
“j” 1.

10 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

//variables globales
Bool indicador [2];
Bool turno;

//Código del proceso i {



Sección no crítica

//Código de entrada a la sección crítica
Indicador[i]= true;
Turno = j;
While (indicador[j] && turno == j ) null;
//Fin código entrada

SECCIÓN CRÍTICA

//Código de salida de la sección crítica


Indicador[i]= j;
//Fin código salida

Sección no crítica

}

Esta solución se considera correcta, porque cumple las tres condiciones


necesarias:

• La condición de exclusión mutua: si los dos procesos quieren entrar a


su sección crítica, solo uno podrá entrar, ya que la variable turno solo
puede valer 0 o 1 en un instante concreto de tiempo.

• Las condiciones de espera limitada y progreso: se cumplen ya que el


único punto donde se puede detener el proceso es en el bucle while, y si
esto ocurre es porque el otro proceso está ejecutando su sección crítica, o
porque quiere entrar y la variable turno se lo permite.

3.2.2. PROBLEMA DEL PRODUCTOR-CONSUMIDOR

Este problema surge cuando se dispone de uno o más procesos,


denominados productores, que generan algún tipo de dato que es utilizado
por otro u otros procesos denominados consumidores.

Un ejemplo de este tipo de sistemas, sería un proceso que captura imágenes,


las almacena en un buffer e indica a otro proceso, que es el encargado de
sacarla del buffer y almacenarla en disco, que tiene una imagen disponible.

Unidad 3. Comunicación y sincronización de procesos. 11


Formación Abierta

Figura 3.3. Estructura procesos productor-consumidor

En este tipo de estructura, es necesario disponer de un mecanismo de


comunicación, en este caso un buffer, que permita a los procesos
intercambiar la información. Además debe existir una sincronización entre
ellos, para evitar problemas en el acceso al mecanismo de comunicación. Así
cuando el buffer este lleno, el proceso productor debe quedar bloqueado
hasta que quede espacio suficiente para seguir insertando datos. Y de igual
forma, cuando el buffer esté vacío el proceso consumidor debe bloquearse
hasta que vuelva a tener datos disponibles.

3.2.3. PROBLEMA DE LOS LECTORES-ESCRITORES

En este problema existe un recurso, que puede ser un archivo, registro, etc.,
el cual es utilizado por un grupo de procesos concurrentes. Existen dos tipos
de procesos, los lectores que únicamente acceden al recurso para leer datos,
sin realizar ninguna modificación sobre ellos, y los escritores, los cuales
modifican el contenido del recurso que comparten, esta actualización implica
leerlo, modificarlo y escribir el nuevo contenido.

Figura 3.4. Estructura procesos lectores-escritores

Las restricciones que presenta este problema son las siguientes:

12 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

• Solo se permite que acceda al recurso un escritor al mismo tiempo. Si un


escritor está modificando el recurso, ningún otro podrá acceder a
modificarlo o a leerlo.

• Se permite que varios lectores accedan al recurso de forma simultánea,


ya que ellos no modifican su contenido y los datos que van a leer serán
siempre los mismos.

3.2.4. PROBLEMA DE LOS FILÓSOFOS COMENSALES

En este problema el enunciado formal es el siguiente: cinco filósofos se


sientan en una mesa redonda con un plato de comida, un cubierto a su
izquierda y otro a su derecha y una fuente de comida (inagotable) en el
centro. Van pensando en sus cosas (filosofando) y aleatoriamente les entra
hambre y quieren comer. El problema es que para ello deben disponer de
ambos cubiertos (derecha e izquierda, nótese que están compartidos), si
cualquier filósofo coge un tenedor y el otro está ocupado, se quedará
esperando, con el tenedor en la mano, hasta que pueda coger el otro tenedor,
para luego empezar a comer. Se debe permitir que los filósofos puedan
desempeñar su labor intelectual y no morirse de hambre (por ejemplo, si
todos cogen el cubierto de su izquierda a la vez, esperarán infinitamente a
que el de su derecha quede libre para poder comer).

Figura 3.5. Problema filósofos comensales

Unidad 3. Comunicación y sincronización de procesos. 13


Formación Abierta

Como en todos los problemas, la solución debe cumplir las tres condiciones
necesarias que son: exclusión mutua, progreso y espera limitada.
Especialmente en este caso, ya que puede llegarse fácilmente a una situación
de bloqueo total (abrazo mortal o deadlock).

El deadlock es un estado que ningún sistema o conjunto de procesos debe


llegar a alcanzar. Consiste en un bloqueo indefinido de varios procesos que
están esperando por el mismo recurso. Se presentan al mismo tiempo cuatro
condiciones necesarias: la condición de no apropiación, la condición de
espera circular, la condición de exclusión mutua y la condición de ocupar y
esperar un recurso. Ante esto, si el deadlock involucra a todos los procesos
del sistema, el sistema ya no podrá hacer algo productivo. Si el deadlock
involucra algunos procesos, éstos quedarán congelados para siempre.

14 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

3.3. MECANISMOS DE COMUNICACIÓN Y


SINCRONIZACIÓN

Una vez planteados los problemas más comunes de comunicación y


sincronización de procesos, se deben diseñar las soluciones. Para ello el
sistema operativo ofrece una serie de servicios, que permiten llevar a cabo
esta comunicación y sincronización entre procesos.

• Los mecanismos de comunicación permiten que los procesos


intercambien información entre ellos. Los más importantes son:

ƒ Archivos.

ƒ Tuberías.

ƒ Variables en memoria compartida.

ƒ Paso de mensajes.

• Los mecanismos de sincronización permiten bloquear o suspender la


ejecución de un proceso hasta que ocurra cierto evento. Por ejemplo, en
el problema de productores-consumidores, el proceso consumidor debe
bloquearse hasta que el productor ponga a su disposición la información.
Los principales mecanismos de sincronización son:

ƒ Señales.

ƒ Tuberías.

ƒ Semáforos.

ƒ Mutex y variables condicionales.

ƒ Paso de mensajes.

Como se puede observar, hay mecanismos que sirven para dar solución tanto
a la tarea de comunicación, como a la de sincronización.

Unidad 3. Comunicación y sincronización de procesos. 15


Formación Abierta

3.3.1. COMUNICACIÓN MEDIANTE ARCHIVOS

La comunicación de procesos a través de archivos, consiste básicamente en


trasladarse información entre ellos, escribiendo y leyendo datos en dichos
archivos.

Ventajas

Las ventajas que presenta este tipo de comunicación son:

• Permite comunicar a un número, en principio, ilimitado de procesos. Basta


con que los procesos tengan permisos de acceso al archivo.

• La utilización de archivos y de los servicios que los manejan es


sumamente sencilla.

Inconvenientes

Los inconvenientes que presenta este tipo de comunicación, hacen que no


sea una técnica demasiado utilizada:

• Es poco eficiente, ya que el acceso a disco para la lectura/escritura es


lento.

• Necesita complementarse con algún otro mecanismo, que sincronice a los


procesos en el acceso al archivo. Este mecanismo se encargará de que
un solo proceso pueda escribir en el fichero, e indicara cuando hay datos
disponibles para poder leerlos (situación descrita en el problema de
productores-consumidores).

3.3.2. COMUNICACIÓN Y SINCRONIZACIÓN MEDIANTE TUBERÍAS

Las tuberías son un mecanismo que permite tanto la sincronización como la


comunicación de procesos. Desde el punto de vista de su utilización, es una
estructura similar a un archivo, pero gestionado por el sistema operativo.

De manera conceptual, cada proceso ve la tubería como un conducto en el


que escribe por uno de los extremos y lee por el otro extremo. Es decir, se
trata de una estructura unidireccional y con una filosofía de lectura/escritura
FIFO (los datos se leen en el mismo orden en el que fueron escritos). Tanto
en la escritura como en la lectura, se utilizan los servicios de manejo de
archivos.

16 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

Figura 3.6. Comunicación de procesos utilizando una tubería


unidireccional

Si se desea, se puede realizar una comunicación bidireccional entre


procesos. Para ello será necesaria la creación de 2 tuberías unidireccionales.

Figura 3.7. Comunicación bidireccional de procesos utilizando dos


tuberías unidireccionales

Se describen a continuación las operaciones de lectura y escritura en una


tubería:

Escritura en una tubería


Como ya se ha comentado antes, la lectura y escritura se realizan en orden
FIFO. Para la escritura se deben tener en cuenta los siguientes criterios:

• La tubería tiene un espacio de almacenamiento finito. Por tanto, si la


tubería está llena al intentar escribir, o bien, se llena durante la escritura,
el proceso escritor queda bloqueado hasta que disponga de espacio libre.

• Si no hay ningún proceso que tenga la tubería en modo lectura, se


devolverá un error.

Unidad 3. Comunicación y sincronización de procesos. 17


Formación Abierta

• La operación de escritura se realiza de forma atómica, es decir, solo la


puede realizar un proceso al mismo tiempo, y la operación se debe
completar íntegramente. Si dos procesos intentan escribir al mismo
tiempo, uno de ellos se bloqueará hasta que termine de escribir el otro.

Lectura de una tubería

Con la operación de lectura se obtienen los datos que primero se escribieran.


Además de leerlos, los elimina de la tubería. Criterios de lectura:

ƒ Si al realizar la lectura, la tubería está vacía, el proceso se bloquea


hasta que haya datos disponibles en ella.

ƒ Todos los datos que se lean, serán eliminados. Si se desean leer más
datos de los que están disponibles, se obtendrán los que hubiera y se
éel proceso hasta obtener el volumen de datos requeridos.
Normalmente las lecturas son de un volumen inferior, al tamaño total
de la tubería.

ƒ Si no hay procesos con la tubería abierta en modo de escritura, y ésta


se encuentra vacía, se devolverá un error de fin de archivo. Este error
no bloquea al proceso.

ƒ Las operaciones de lectura, también se realizan de forma atómica.

A continuación, se describe cómo solucionar ciertos problemas clásicos de


concurrencia, vistos anteriormente, mediante el uso de tuberías.

Sección crítica con tuberías

Como se ha definido anteriormente, las operaciones de lectura y escritura en


tubería se realizan de forma atómica y en caso de estar la tubería vacía, el
sistema bloquea a los procesos que intentan leer de ella. Por ello las tuberías
son una opción válida para controlar el acceso a la sección crítica, la cual se
resuelve de la siguiente manera:

• Se crea una tubería, en la que se inserta mediante una operación de


escritura un dato que servirá de testigo.

• Una vez creada la tubería e insertado el testigo, el código que deben


ejecutar los procesos será algo como:

1. Leer dato de la tubería.


2. Código sección crítica.
3. Escribir dato en la tubería.

18 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

• Cuando varios procesos intenten ejecutar este código, solo uno de ellos
conseguirá leer el testigo de la tubería. El resto quedarán bloqueados,
hasta que el proceso que lo ha leído ejecute su sección crítica y escriba
de nuevo el testigo en la tubería, para que así, otro proceso pueda leerlo y
ejecutar su sección crítica.

• De esta manera se garantiza que solo un proceso (el que lea el testigo)
podrá estar ejecutando su sección crítica. También se garantiza el
progreso, ya que todos los procesos en algún momento tomarán el testigo
y ejecutarán su SC. Y por último, la espera será limitada, podrá ser mayor
o menor, pero un proceso siempre terminará obteniendo el testigo.

Productor-consumidor con tuberías


La comunicación entre estos dos tipos de procesos consumidores y
productores, se puede realizar a través de una tubería. Así, cuando el
proceso productor haya creado el dato, lo insertará en la tubería mediante
una operación de escritura. De igual forma, el lector realizará operaciones de
lectura de la tubería para obtener dichos datos.

El mecanismo de la tubería garantiza que si se llegara a llenar, los procesos


productores pasarían a estar bloqueados hasta que se liberase espacio
suficiente para seguir produciendo. Y de igual forma, si la tubería se quedará
sin datos, los procesos consumidores se bloquearían hasta disponer de
información que leer.

Es posible que los procesos productores y consumidores, realicen


operaciones de escritura y lectura de diferentes tamaños.

El código de estos procesos seria así:

PRODUCTOR {
For( ; ; ;){
Producir dato
Escribir dato en tubería
}
}

CONSUMIDOR {
For( ; ; ;){
Leer dato de tubería
Consumir dato
}
}

Unidad 3. Comunicación y sincronización de procesos. 19


Formación Abierta

3.3.3. SEMÁFOROS

Los semáforos son una herramienta de sincronización propuesta por Dijkstra


(1965). Se utiliza normalmente en sistemas de memoria compartida,
independientemente del número de procesadores de los que disponga.

Un semáforo (S) es una variable entera, a la que se asigna un valor inicial no


negativo y a la que solo se puede acceder a través de dos operaciones wait()
y signal(). Ambas operaciones son atómicas y su código es el siguiente:

Wait(s){
s=s–1
if (s < 0)
Bloquear el proceso;
}

Signal(s){
s=s+1
if (s <= 0)
Desbloquear proceso;
}

Cuando el valor del semáforo (o de la variable “s”) es menor o igual a cero,


cualquier operación “wait” que se realice, bloqueará el proceso. Al contrario
ocurre si el valor es mayor que cero, la operación “wait” no bloqueará el
proceso.

El número de procesos que en un instante de tiempo están bloqueados, es


igual al valor absoluto de la variable semáforo. Si hay varios procesos
bloqueados, y se ejecuta una operación “signal”, solo uno de ellos se
desbloquea y continúa su ejecución.

El valor inicial asignado a la variable semáforo, indica el número máximo de


procesos que el semáforo permite ejecutarse de forma concurrente.

A continuación, se describe cómo solucionar ciertos problemas clásicos de


concurrencia, vistos anteriormente, mediante el uso de semáforos.

20 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

Sección crítica con semáforos


El código que permite proteger el acceso a una sección crítica, mediante el
uso de semáforos, tiene la siguiente estructura:

Wait (s)
Código SECCIÓN CRÍTICA
Signal (s)

El valor inicial asignado a la variable semáforo será 1. Ya que de esta forma


solo se permitirá el acceso a la sección crítica, a un proceso en cada instante
de tiempo. El resto de procesos que intenten acceder de forma simultánea
quedarían bloqueados.

P3 WAIT ESPERA EJECUCIÓN SIGNAL

P2 WAIT ESPERA EJECUCIÓN SIGNAL DESBLOQUEA

P1 WAIT EJECUCIÓN SIGNAL DESBLOQUEA

Valor
Semáforo 0 -1 -2 -1 0 1
(inicial = 1)
Figura 3.8. Ejemplo sección crítica con semáforos.

Productor-consumidor con semáforos

Como se vio anteriormente, en el problema del productor-consumidor, es


necesaria una estructura de almacenamiento o buffer, en la que el productor
va almacenando los datos y el consumidor los extrae. Para el ejemplo de
implementación de la solución a este problema mediante semáforos, se
utilizará un buffer circular. Lógicamente el buffer tiene un tamaño limitado, y
por tanto, se deben evitar las siguientes situaciones:

• El consumidor intente sacar elementos del buffer cuando está vacío.

• El productor intente almacenar elementos en el buffer cuando está lleno.

• El productor sobrescriba un elemento que todavía no ha sido extraído del


buffer.

Unidad 3. Comunicación y sincronización de procesos. 21


Formación Abierta

• El consumidor saque elementos que ya han sido extraídos con


anterioridad.

• El consumidor saque un elemento que está siendo insertado por el


productor.

Por tanto existen dos tipos de recursos, los elementos almacenados en el


buffer y los huecos libres del buffer. La gestión de cada uno de estos dos
recursos se realiza mediante un semáforo.

Cuando un proceso necesita uno de estos recursos (el productor necesita


huecos y el consumidor elementos), decrementa el semáforo mediante la
operación wait. Y cuando libera el recurso, incrementa el semáforo con la
operación signal. Los semáforos utilizados se denominarán huecos y
elementos, y su valor inicial coincidirá con el número de recursos disponibles
de cada tipo en el buffer.

El código correspondiente a los procesos sería el siguiente:

#define MAXIMO_BUFFER 100 /* tamaño del buffer*/

Productor() {
Int posicion = 0;

for ( ; ; ) {
producir dato;
wait (huecos); /* decrementa los huecos */
buffer [posicion] = dato; /* inserta elemento en buffer */
posicion = (posicion + 1) % MAXIMO_BUFFER;
signal (elementos); /* incrementa los elementos */
}
}

Consumidor() {
Int posicion = 0;

for ( ; ; ) {
wait (elementos); /* decrementa los elementos */
dato = buffer [posicion]; /* extrae elemento del buffer */
posicion = (posicion + 1) % MAXIMO_BUFFER;
signal (huecos); /* incrementa los huecos */
consumir dato;
}
}

22 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

En este ejemplo, inicialmente el valor de huecos será cien y el de elementos


será cero.

Cuando el productor quiere introducir un nuevo elemento en el buffer,


decrementan el valor de los huecos con una operación wait (huecos). Si el
valor se hace negativo, los procesos productores se bloquean ya que no hay
más huecos disponibles. Al insertar un elemento, incrementa el valor de
elementos con la operación signal (elementos).

Por otro lado, los procesos consumidores, antes de extraer un elemento del
buffer decrementa el valor con la operación wait (elementos). Si el valor se
convierte en negativo, los procesos se bloquean a la espera de que se
inserten más datos. Al final, incrementa el valor de los huecos con una
operación signal (huecos).

De esta manera quedan perfectamente sincronizados tanto consumidores


como productores, y adaptados al tamaño máximo del buffer.

Lectores-escritores con semáforos

En la solución a este problema, se utilizan los siguientes elementos:

El semáforo recurso, para asegurar la exclusión mutua en el acceso para la


modificación del recurso. Su valor inicial será 1, así cuando un escritor
decrementa su valor, el resto no podrá acceder a leer o modificar ningún dato.

La variable num_lectores, se utiliza para conocer el número de procesos


lectores que están accediendo en cada momento. A esta variable, acceden
los procesos lectores en exclusión mutua utilizando el semáforo lectores. Su
valor inicial será también 1, así solo un proceso puede modificar dicha
variable.

El código correspondiente a los procesos sería el siguiente:

Unidad 3. Comunicación y sincronización de procesos. 23


Formación Abierta

Lector() {
wait (lectores);
num_lectores = num_lectores + 1;
if (num_lectores == 1)
wait (recurso);
signal(lectores);

LEER EL RECURSO COMPARTIDO;

wait (lectores);
num_lectores = num_lectores - 1;
if (num_lectores == 0)
signal (recurso);
signal(lectores);
}

Escritor() {
wait (recurso);
MODIFICAR RECURSO;
signal(recurso);
}

Obsérvese, que aun siendo una solución válida, se concede prioridad a los
lectores sobre los escritores. Siempre que haya un proceso lector accediendo
al recurso compartido, el resto de procesos lectores también podrán acceder
sin solicitar permiso. Sin embargo, los procesos escritores deberán esperar a
que hayan abandonado el recurso todos los lectores para que les sea
permitido el acceso.

3.3.4. MUTEX Y VARIABLES CONDICIONALES

Mutex es la abreviatura de “mutual exclusion”, es decir, exclusión mutua. Las


variables Mutex son la forma más común de implementar la sincronización de
threads (hilos o procesos ligeros) y de proteger datos compartidos cuando
acontecen multitud de escrituras sobre ellos.

Una variable Mutex actúa como un cerrojo protegiendo los datos o recursos.
El concepto básico de Mutex es similar a todos los vistos anteriormente, es
decir, que solo un proceso puede cerrar el cerrojo en un determinado instante,
o lo que es lo mismo, acceder al recurso de manera exclusiva. Incluso si
varios procesos intentan hacerlo al mismo tiempo.

En general, hay un número de restricciones sobre los cerrojos, aunque no son


las mismas en todos los sistemas. Éstas son:

24 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

• Sólo el dueño de un cerrojo puede desbloquearlo

• La readquisición de un cerrojo no está permitida

Algo muy importante es que todos los procesos/hilos deben utilizar el mismo
protocolo para bloquear y desbloquear los cerrojos en el acceso a los
recursos, ya que si mientras dos procesos/hilos utilizan el cerrojo de forma
correcta, existe otro que simplemente accede a los datos protegidos, no se
garantiza la exclusión mutua y pueden darse condiciones de carrera y errores
en los resultados.

Las operaciones que se pueden realizar sobre una variable mutex o cerrojo
en general son tres: init(), lock() y unlock().

• Init(): el cerrojo se inicializa.

• Lock(): intenta bloquear el mutex. Si ya estuviera bloqueado por otro


proceso , el que está intentando realizar la operación quedaría a la espera
en un estado bloqueado.

• Unlock(): desbloquea el mutex. Si existen procesos bloqueados, se


desbloqueará a uno de ellos, que será el que adquiera el mutex. Esta
operación la debe ejecutar el proceso que adquirió con anterioridad el
mutex. Ésta es la principal diferencia con los semáforos y las operaciones
wait y signal.

Sección crítica con mutex

El código que protege la sección crítica sería este:

init(m); /* inicializa el mutex m*/


lock(m);
código SECCIÓN CRÍTICA
unlock(m)

Dado que las operaciones sobre un mutex son atómicas, solo un proceso
conseguirá bloquear el mutex y podrá acceder a su sección crítica.

Unidad 3. Comunicación y sincronización de procesos. 25


Formación Abierta

Figura 3.9. Ejemplo sección crítica con Mutex

Sección crítica con mutex y variables condicionales

Una variable condicionada es una variable de sincronización asociada a un


mutex, que se utiliza para mantener a un proceso bloqueado hasta que ocurra
algún evento que permita desbloquearlo. Se utilizan para que cuando un
proceso que ya ha obtenido el mutex y está ejecutando, por ejemplo, su
sección crítica, no pueda continuar y tenga que ser bloqueado y el mutex
liberado.

Las operaciones básicas que se pueden realizar sobre estas variables son:

• c_wait: bloquea al proceso que ejecuta la operación y lo expulsa del


mutex dentro del cual se ejecuta y al que va asociada la variable
condicional. De esta manera otro proceso podrá adquirir el mutex. Tanto
la operación de bloqueo del proceso como la de liberación del mutex, se
realizan de forma atómica.

• c_signal: desbloquea a uno o varios procesos suspendidos en la variable


condicional. El proceso que sea desbloqueado, vuelve a competir por la
adquisición del mutex.

A continuación, se describe un ejemplo típico en el que se utilizan tanto los


mutex, como las variables condicionadas. Consiste igualmente en un acceso
a la sección crítica, con el añadido de que dentro de esta sección el proceso
debe insertar datos en un buffer. Este buffer, en un momento dado puede
estar lleno y en esta situación, el proceso debe bloquearse y liberar el mutex.
Esto se hace para que otro proceso pueda ejecutar su sección crítica y así,
modificar la situación que bloqueó al anterior proceso, en este caso extraer
algún dato del buffer. El código del proceso encargado de escribir en el buffer
sería el siguiente:

26 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

lock(m);
código SECCIÓN CRÍTICA
while (condición == FALSE) /* condición indica si el buffer esta libre */
c_wait (c , m)
resto código SECCIÓN CRÍTICA /* en esta parte escribe en el buffer */
unlock(m)

En este código “m” corresponde al mutex que controla el acceso a la sección


crítica, y “c” es la variable condicional que permite bloquear el proceso y
liberar el mutex.

El código correspondiente a los procesos que utilizan su sección crítica para


extraen datos del buffer sería el siguiente:

lock(m);
código SECCIÓN CRÍTICA /* en esta parte se extraen datos del buffer */
condición == TRUE /* condición indica que el buffer esta libre */
c_signal (c )
unlock(m)

En este caso el proceso extrae datos del buffer, por lo que hace cierta la
condición de que existe espacio libre. Ejecuta la operación c_signal sobre la
variable condicional, con la que despierta a un proceso bloqueado por dicha
variable, el cual vuelve a competir por adquirir el mutex.

El empleo de mutex junto con variables condicionales, es similar al concepto


de monitor, que son junto con semáforos, tuberías, etc., otra herramienta
proporcionada por los SO para la comunicación y sincronización de procesos.

Productor-consumidor con mutex y variables condicionales

Como ya es conocido, el problema del productor-consumidor, reside en el


acceso al buffer compartido por ambos tipos de procesos.

En esta solución se va a utilizar un mutex para el acceso exclusivo al buffer y


una variable condicionada que indicará el estado del buffer (lleno o vacío).

Existen dos situaciones en las que un proceso productor o consumidor, no


puede continuar con su ejecución, una vez que se encuentra dentro de su
sección crítica. Estas situaciones son:

Unidad 3. Comunicación y sincronización de procesos. 27


Formación Abierta

• Si el buffer está lleno, el productor no puede continuar. Por ello en el


código de ejemplo, ejecutará la operación c_wait sobre una variable
condicionada denominada lleno.

• Si el buffer esta vacío, el consumidor debe bloquearse. Igualmente


ejecutara la operación c_wait pero sobre la variable vacio.

Ambos tipos de procesos deben conocer el número de elementos que hay en


el buffer. Para ello se utilizará la variable num_elem.

El código de los procesos sería el siguiente:

Productor() {
Int posicion = 0;

for ( ; ; ) {
producir dato;
lock(mutex);
while (num_elem == MAXIMO_BUFFER) /* si buffer lleno */
c_wite(lleno, mutex); /*se bloquea el proceso */
buffer [posicion] = dato; /* inserta elemento en buffer */
posicion = (posicion + 1) % MAXIMO_BUFFER;
num_elem = num_elem + 1; /* incrementa los elementos */
if (num_elem == 1)
c_signal(vacio); /*buffer no vacio*/
unlock(mutex);
}
}

Consumidor() {
Int posicion = 0;

for ( ; ; ) {
lock(mutex);
while (num_elem == 0) /* si buffer vacio */
c_wite(vacio, mutex); /*se bloquea el proceso */
dato = buffer [posicion]; /* extrae elemento del buffer */
posicion = (posicion + 1) % MAXIMO_BUFFER;
num_elem = num_elem - 1; /* decrementa los elementos */
if (num_elem == (MAXIMO_BUFFER - 1)
c_signal(lleno); /*buffer no lleno*/
unlock(mutex);
consumir dato;
}
}

28 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

El proceso productor, evalúa la condición num_elem == MAXIMO_BUFFER


para ver si el buffer está lleno. En caso de que sea así, se bloquea y libera el
mutex, al ejecutar la operación c_wait(lleno, mutex).

De forma análoga, el proceso consumidor evalúa la condición num_elem ==


0, para comprobar si el buffer esta vacío. Si es así, también se bloquea y
libera el mutex con la operación c_wite(vacio, mutex).

Lector-escritor con mutex


De manera similar al ejemplo anterior, en la solución al problema del lector-
escritor, se utiliza una variable mutex para proteger el acceso al recurso
compartido. También se utiliza una variable num_lectores para conocer el
número de lectores que están accediendo al recurso de forma simultánea. A
su vez esta variable se protege con un mutex denominado mutex_lectores.
El código de los procesos es el siguiente:

Lector() {
lock(mutex_lectores);
num_lectores = num_lectores + 1;
if (num_lectores == 1)
lock(mutex);
unlock(mutex_lectores);

LEER EL RECURSO COMPARTIDO;

lock(mutex_lectores);
num_lectores = num_lectores - 1;
if (num_lectores == 0)
unlock(mutex);
unlock(mutex_lectores);
}

Escritor() {
lock(mutex);
MODIFICAR RECURSO;
unlock(mutex);
}

Unidad 3. Comunicación y sincronización de procesos. 29


Formación Abierta

3.3.5. MEMORIA COMPARTIDA

La utilización de la memoria compartida como método de comunicación,


permite compartir información entre procesos que se ejecutan en la misma
máquina. El método es sencillo, un proceso almacena información en una
variable, a la cual puede acceder otro proceso con el simple hecho de leerla.
De esta manera se consigue trasmitir información de uno a otro.
Es importante recordar que los procesos ligeros creados a partir de un
proceso padre, comparten memoria de forma natural y la utilizan como
mecanismo de comunicación. Para el resto de procesos, se debe recurrir a
los servicios de gestión de memoria del sistema operativo, para poder crear
un espacio de memoria compartida entre ellos.

Un ejemplo, sería la utilización de la variable del buffer circular en el problema


de productor–consumidor con semáforos. Esta variable tiene que estar en una
zona de memoria compartida, para ser accesible por todos los procesos.

3.3.6. SINCRONIZACIÓN MEDIANTE SEÑALES

Los sistemas operativos, disponen de servicios de gestión de señales, las


cuales son capaces de bloquear y reanudar procesos. Con estos servicios, se
consigue que unos procesos queden a la espera de que se cumpla una
determinada condición, y que otros los despierten cuando esta condición se
haya cumplido.

De cualquier forma, el uso de señales como mecanismo de sincronización, no


es muy recomendable por las siguientes razones:

• Las señales se transmiten de forma asíncrona, por lo que un proceso


puede recibir una señal en cualquier punto de su ejecución, cuando quizá
no la está esperando.

• Las señales no se almacenan en una cola. Si hay varias señales


pendientes de entregar a un proceso, solo se entregará la última, el resto
se perderán, lo que puede implicar la pérdida de eventos significativos.

3.3.7. PASO DE MENSAJES

A diferencia de los mecanismos vistos hasta el momento, en los que los


procesos debían estar ejecutados en la misma máquina, el paso de mensajes
permite comunicar y sincronizar procesos ejecutados en máquinas diferentes.

30 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

Para el uso de este mecanismo, no es necesario el acceso a variables


compartidas, basta con un canal de comunicación común a los procesos.

Los procesos se comunican utilizando dos operaciones básicas:

• Send (destino, mensaje): envía un mensaje al proceso destino.


• Receive (origen, mensaje): recibe un mensaje del proceso origen.

A continuación, se describen algunas características de los sistemas basados


en paso de mensajes:

Tamaño del mensaje

El tamaño puede ser fijo o variable. Si se trabaja con un tamaño fijo de


mensaje, la implementación es más sencilla. Aunque obliga a descomponer
mensajes grandes en trozos que se adapten al tamaño fijo.

Flujo de datos

El flujo de datos puede ser unidireccional o bidireccional. En el primer caso un


proceso solo podrá enviar o recibir mensajes. En el caso de ser bidireccional
podrá realizar ambas operaciones.

Nombre
Los procesos que desean recibir o enviar mensajes, deben tener alguna
manera para referirse los unos a los otros. Así pues la comunicación puede
ser de dos tipos: directa o indirecta.

Se denomina comunicación directa, cuando cada proceso que quiere enviar o


recibir un mensaje especifica de forma explícita quien es el emisor o receptor
de dicho mensaje.

• Send(P1, mensaje): envía un mensaje al proceso P1.


• Receive(P3, mensaje): espera la recepción de un mensaje procedente
del proceso P3.

• Receive(ANY, mensaje): existe la posibilidad de recibir un mensaje de


cualquier proceso.

Se denomina comunicación indirecta, cuando cada proceso que quiere enviar


o recibir un mensaje lo hace a una cola de mensajes o puertos. En esta cola
los procesos pueden insertar mensajes o extraerlos.

Unidad 3. Comunicación y sincronización de procesos. 31


Formación Abierta

Cualquiera que sea la forma de envío o recepción, siempre se realizará en


exclusión mutua.

Sincronización
La comunicación entre procesos puede ser síncrona o asíncrona. Se
denomina comunicación síncrona, cuando para comunicarse dos procesos,
uno ejecuta la operación de envío y el otro la de recepción al mismo tiempo.
Si las operaciones no se realizan al mismo tiempo, se denomina
comunicación asíncrona.
Existen tres combinaciones habituales de sincronismo:

• Envío y recepción bloqueante: el emisor y receptor se bloquean hasta


que tenga lugar la entrega del mensaje. Es una comunicación síncrona.

• Envío no bloqueante y recepción bloqueante: el emisor no se bloquea


hasta que tenga lugar la recepción, y por tanto, puede continuar con su
ejecución. Por otro lado, el receptor sí que se bloquea hasta que recibe el
mensaje.

• Envío y recepción no bloqueante: es una comunicación asíncrona. En


esta combinación, es necesario algún mecanismo que indique a un
proceso que ha recibido un mensaje.

Almacenamiento
Hace referencia a la capacidad del canal de comunicación para almacenar o
no mensajes.

• Sin capacidad: el canal no permite el almacenamiento de mensajes, por


tanto la comunicación debe ser síncrona.

• Con capacidad: existe una cola en la que se almacenan los mensajes, lo


que permite una comunicación asíncrona y que los procesos emisores no
queden bloqueados, a la espera de confirmar el envío.
A continuación, se describe un ejemplo con el código correspondiente al
problema clásico de productor-consumidor, solucionado utilizando la técnica
de paso de mensajes:

32 Unidad 3. Comunicación y sincronización de procesos.


Sistemas Operativos

Productor() {
for ( ; ; ) {
producir dato;
send( consumidor, dato);
}
}

Consumidor() {
for ( ; ; ) {
receive( productor, dato);
consumir dato;
}
}

Como se puede observar, la implementación es muy sencilla, e igual de


eficiente que con el uso de cualquier otro mecanismo de comunicación y
sincronización.

Unidad 3. Comunicación y sincronización de procesos. 33


Sistemas Operativos

♦ RESUMEN

• Se habla de concurrencia o multiprogramación cuando existen de forma


simultánea varios procesos en ejecución. Existen tres tipos de
arquitecturas de computadores, que permiten la ejecución concurrente de
procesos: multiprogramación (un único procesador), multiprocesador y
multicomputadora.

• Las ventajas de la ejecución concurrente de procesos son las siguientes:


facilita la programación, agiliza la ejecución y los cálculos, posibilita el uso
interactivo, mejora el aprovechamiento de recursos, mayor modularidad y
posibilita la resolución de problemas inherentemente concurrentes.

• Se define sección crítica de un proceso como un conjunto de instrucciones


que acceden a algún recurso compartido por al menos otro proceso del
sistema, siendo posible la modificación del mismo por alguno de ellos.

• Para que varios procesos que comparten recursos se ejecuten


correctamente, sus secciones críticas deben cumplir las siguientes
condiciones: condición de exclusión mutua, condición de progreso y
condición de espera limitada.

• Los problemas clásicos tratados en esta unidad han sido el de sección


crítica, productor-consumidor, lectores-escritores y filósofos-comensales.

• Los mecanismos de comunicación permiten que los procesos


intercambien información entre ellos. Los más importantes son: archivos,
tuberías, variables en memoria compartida y paso de mensajes.

• Los mecanismos de sincronización permiten bloquear o suspender la


ejecución de un proceso hasta que ocurra cierto evento. Los principales
mecanismos de sincronización son: señales, tuberías, semáforos, mutex y
variables condicionales y el paso de mensajes.

Unidad 3. Comunicación y sincronización de procesos. 35


SISTEMAS
OPERATIVOS

INTERBLOQUEOS
Sistemas Operativos

ÍNDICE
♦  OBJETIVOS................................................................................................3 

♦  INTRODUCCIÓN ........................................................................................4 
4.1.  Definición ..............................................................................................5 
4.2.  Interbloqueo en un sistema informático .............................................8 
4.2.1.  Tipos de recursos ............................................................................8 
4.3.  Modelado del sistema.........................................................................14 
4.3.1.  Grafo de asignación de recursos ...................................................14 
4.3.2.  Matrices de asignación de recursos ...............................................17 
4.4.  Identificación del interbloqueo ..........................................................20 
4.5.  Tratamiento del interbloqueo.............................................................22 
4.6.  Detección y recuperación del interbloqueo ......................................24 
4.6.1.  Detección del interbloqueo.............................................................24 
4.6.2.  Recuperación del interbloqueo ......................................................27 
4.7.  Prevención del interbloqueo ..............................................................29 
4.7.1.  Exclusión mutua ............................................................................29 
4.7.2.  Retención y espera ........................................................................29 
4.7.3.  No expropiación .............................................................................30 
4.7.4.  Espera circular ...............................................................................30 
4.8.  Predicción del interbloqueo ...............................................................31 
4.8.1.  Estado seguro................................................................................31 
4.8.2.  Algoritmos de predicción ................................................................32 
♦  RESUMEN ................................................................................................35 

Unidad 4. Interbloqueos. 1
Sistemas Operativos

♦ OBJETIVOS

• Asimilar el concepto de interbloqueo.

• Identificar los elementos que intervienen en una situación de interbloqueo,


las causas que lo originan y los problemas que conlleva esta situación.

• Describir mediante las técnicas de representación de grafos y matricial,


los estados de procesos y recursos ante un bloqueo.

• Conocer formalmente en qué consiste un interbloqueo.

• Conocer las condiciones que se deben dar, para llegar a la situación de


interbloqueo.

• Conocer la estrategia de detección y recuperación de interbloqueos, así


como los algoritmos que se utilizan para ello.

• Conocer, también, las técnicas para la prevención del interbloqueo.

• Conocer, por último, las técnicas de predicción del interbloqueo, así como
los algoritmos más importantes.

Unidad 4. Interbloqueos. 3
Formación Abierta

♦ INTRODUCCIÓN

Como ya se ha visto, existen sistemas informáticos en los que se ejecutan de


forma concurrente una serie de procesos. Normalmente estos procesos
compiten por el uso de los recursos, los cuales son limitados y habitualmente
insuficientes para satisfacer la demanda.

El sistema operativo es el encargado de garantizar, que las necesidades de


los procesos no entren en conflictos, en los que estos se bloqueen de forma
indefinida y entren en una situación que se denomina interbloqueo o
deathlock.

En este capítulo, se intentarán compaginar los aspectos teóricos del tema con
su aplicación informática, y por tanto, se darán las pautas a seguir para la
detección y recuperación, la prevención y la predicción de los interbloqueos
en un sistema informático.

Así pues, la unidad comienza con una definición y un ejemplo informal, pero
muy descriptivo del concepto de interbloqueo. Posteriormente se formalizará y
ampliará este concepto, detallando las explicaciones con dos técnicas: la
representación mediante grafos y la representación matricial, ambas de gran
utilidad en este tema.

Por último, se mostrarán las estrategias y algoritmos existentes para su


tratamiento. Lo que implica, como ya se ha comentado, el estudio de
estrategias y algoritmos de detección y recuperación, de prevención y de
predicción.

4 Unidad 4. Interbloqueos.
Sistemas Operativos

4.1. DEFINICIÓN

Como ya se vio en la unidad anterior, en un contexto de multiprogramación,


los procesos pueden ser cooperantes entre sí para obtener un objetivo
común, o bien, competir entre ellos por el uso de los recursos que brinda el
sistema informático. Es en este entorno de competencia donde surge el
problema del interbloqueo. Esta situación, evidentemente, solo se puede
producir en sistemas multiprogramados, ya que son los únicos sistemas
donde los procesos compiten por los recursos.

Interbloqueo

Estado no deseable que puede alcanzar un sistema


informático, en el cual, existen un conjunto de unidades de
ejecución bloqueadas a la espera de algún recurso, que nunca
les será concedido, ya que está asignado a otras unidades que
se encuentran en ese mismo estado de bloqueo.

Si una vez alcanzada esta situación, el sistema operativo no aplica alguna


técnica para recuperarse del interbloqueo, se producirá una espera infinita por
parte de los procesos bloqueados.

Un ejemplo clásico y muy descriptivo para la comprensión del concepto de


interbloqueo, es el siguiente:

Supóngase una carretera con dos sentidos de circulación, que en un


momento dado discurre sobre un puente estrecho en el que solo cabe un
vehículo.

El interbloqueo se produciría, si dos vehículos atravesaran el puente al mismo


tiempo y se encontrasen, en algún punto, el uno frente al otro sin la
posibilidad de continuar.

Unidad 4. Interbloqueos. 5
Formación Abierta

Figura 4.1. Representación de interbloqueo con el ejemplo del puente

Cada uno de los vehículos posee un recurso, que es la parte de puente que
ya ha recorrido. Y a su vez necesita otro recurso, que es la parte de puente
que le queda por recorrer y que está bloqueada por el vehículo contrario. Por
tanto, se encuentran en una situación en la que el recurso que necesita cada
uno de ellos, lo posee el otro vehículo. Están en una situación de
interbloqueo. A su vez todos los vehículos que sigan intentando acceder al
puente se bloquearán, pudiendo llegar a un colapso total de la circulación.

Sobre este ejemplo se podrían plantear una serie de soluciones del


interbloqueo, como idea inicial, ya que posteriormente se desarrollarán de
manera formal y detallada:

• Detección y recuperación.

Una vez detectada la situación de interbloqueo, uno de los dos vehículos


debe liberar el recurso que posee para recuperar la normalidad. Así pues,
una posible solución sería que uno de los vehículos diese marcha atrás y
volviese al principio del puente, permitiendo así que el otro vehículo
continúe su camino. Se podría tener en cuenta una serie de criterios para
seleccionar el vehículo que debe retroceder, tales como la distancia
recorrida, la prioridad, la cantidad de vehículos esperando en cada
sentido, etc. La decisión es importante, ya que implica que uno de los dos
va a perder parte del trabajo que ya ha realizado y que tendrá que volver a
repetir. Es una solución destructiva, puesto que se pierde trabajo que ya
ha sido realizado. Por supuesto, ésta no sería la única solución posible,
existen otras menos conservadoras como podría ser la de tirar y
deshacerse de uno de los vehículos tirándolo del puente. Solución que
sería perfectamente válida, por ejemplo, en caso de que los vehículos no
pudiesen dar marcha atrás (deshacer lo que llevaban hecho).

6 Unidad 4. Interbloqueos.
Sistemas Operativos

• Prevención y predicción.

En la tarea de prevención de los interbloqueos, hay que tener en cuenta


que antes de materializarse el interbloqueo existe un punto de no retorno
en el que, aunque todavía no ha ocurrido, el interbloqueo ya es inevitable.
En el ejemplo anterior, si hubiera uno o más vehículos atravesando el
puente en un sentido, el punto de no retorno, sería el momento en que
entrase en el puente un vehículo en sentido contrario. En ese momento ya
es inevitable que antes o después ocurra el interbloqueo. Las tareas de
prevención y predicción, deben evitar el interbloqueo antes de llegar a
este punto de no retorno. Una solución para este ejemplo que permita
prevenir los interbloqueos, sería una estrategia de semáforos en cada
extremo del puente, que gestionen la entrada y salida de vehículos, de
manera que nunca se crucen dos vehículos en diferentes sentidos. Estas
estrategias, normalmente no son destructivas, pero sí suelen derivar en
una infrautilización de los recursos

Unidad 4. Interbloqueos. 7
Formación Abierta

4.2. INTERBLOQUEO EN UN SISTEMA


INFORMÁTICO

En los escenarios donde es posible que se produzca un interbloqueo, siempre


deben existir un conjunto de entidades activas (en el ejemplo anterior los
vehículos) y un conjunto de recursos (el puente) que estas entidades utilizan
para llevar a cabo su tarea. De la misma forma en un sistema informático
existen también estos dos elementos:

• Las entidades activas, que obviamente son los procesos o en su caso los
hilos.

• Los recursos, tanto físicos como lógicos de los que dispone un sistema
informático.

Estos recursos, desde el punto de vista de los interbloqueos, pueden ser de


diferentes tipos, los cuales se definirán a continuación.

4.2.1. TIPOS DE RECURSOS

Un recurso es un servicio necesario para realizar un trabajo. En un sistema


informático, se entiende por recurso, cualquier elemento ya sea físico o
lógico, que necesitan los procesos para llevar a cabo su ejecución.

Existen ciertos criterios, mediante los cuales se clasifican los recursos de un


sistema informático. Los principales criterios son:

• La existencia del recurso una vez utilizado por un proceso, permite


clasificarlos como reutilizable si se mantiene, o como consumible si
desaparece tras ser utilizado.

• Si es posible que varios procesos compartan un recurso, o lo deben usar


de modo exclusivo o dedicado.

• Si existen una o varias unidades de ese recurso.

• Si se puede expropiar el recurso al proceso que lo está utilizando.

8 Unidad 4. Interbloqueos.
Sistemas Operativos

A continuación, se explicarán con detalle cada uno de los tipos de recursos:

• Recursos reutilizables o consumibles.

• Recursos compartidos o exclusivos.

• Recursos con un único ejemplar o con múltiples ejemplares.

• Recursos expropiables o no expropiables.

Recursos reutilizables o consumibles

Un recurso reutilizables es aquel que persiste después de ser utilizado por


un proceso, es decir, la vida útil del recurso no depende de su utilización. El
recurso puede existir desde el principio, como es el caso de los recursos
físicos, o puede ser creado y seguir existiendo por siempre o hasta su
eliminación, como sería en el caso de un archivo.

Como ejemplo de interbloqueo con recursos reutilizables, se podría suponer


dos procesos P1 y P2 que necesitan utilizar durante su ejecución dos
recursos que son un disco (D) y una impresora (I). El código de los procesos
es el siguiente:

PROCESO P1 PROCESO P2

Solicita (D) Solicita (I)


Solicita (I) Solicita (D)
Usa los recursos Usa los recursos
Libera (I) Libera (D)
Libera (D) Libera (I)

Durante la ejecución de estos dos procesos en un sistema multiprogramado,


puede llegar a producirse un interbloqueo. Sería el caso en el que el proceso
P1 solicita y se le asigna D (el disco) y el proceso P2, de forma simultánea,
solicita y se le asigna I (la impresora). En ese punto se ha producido el
interbloqueo, ya que la siguiente instrucción de ambos procesos, es solicitar
el recurso que tiene asignado el proceso contrario, por lo que ambos
quedarán bloqueados a la espera de que se liberen esos recursos. Cosa que
nunca va a suceder.

Unidad 4. Interbloqueos. 9
Formación Abierta

El orden de ejecución sería este:

1 - P1 solicita (D) El recurso (D) está disponible y se le asigna a P1.


2 - P2 solicita (I) El recurso (I) está disponible y se le asigna a P2.
3 - P2 solicita (D) P2 se bloquea esperando por el recurso (D) que no está
disponible.
4 - P1 solicita (I) P1 se bloquea esperando por el recurso (I) que no está
disponible. Por tanto entran en una situación de
interbloqueo.

No todos los posibles órdenes de ejecución llegarían a producir un


interbloqueo, de hecho, como se puede ver en el ejemplo siguiente ambos
procesos consiguen finalizar su ejecución.

1 - P1 solicita (D) El recurso (D) está disponible y se le asigna a P1.


2 - P1 solicita (I) El recurso (I) está disponible y se le asigna a P1.
3 - P2 solicita (I) P2 se bloquea esperando por el recurso (I) que no está
disponible.
4 - P1 usa los recursos
5 - P1 libera (I) El recurso (I) se le asigna a P2 y se desbloquea
6 - P2 solicita (D) P2 se bloquea esperando por el recurso (D) que no está
disponible.
7 - P1 libera (D) El recurso (D) se le asigna a P2 y se desbloquea.
8 - P2 usa los recursos
9 - P2 libera (D)
10 - P2 libera (I)

Obsérvese la diferencia entre el bloqueo de un proceso por la espera de un


recurso, como sucede a P2 en los pasos 3 y 6, que terminará cuando el
recurso se libere. Y el interbloqueo que implica una espera indefinida de los
procesos, como ocurría en el primer ejemplo.

Un recurso consumible es aquel que deja de existir después de ser utilizado


por un proceso. Normalmente este tipo de recursos son lógicos, como por
ejemplo mensajes, señales, cierto tipo de semáforos, etc. Su ciclo de vida
suele ser siempre el mismo, un proceso crea el recurso para que otro lo
consuma y con ello deja de existir.

Un ejemplo de interbloqueo con recursos consumibles, sería en una situación


en la que tres procesos intentan comunicarse por medio de mensajes y cuyo
código sería el siguiente:

10 Unidad 4. Interbloqueos.
Sistemas Operativos

PROCESO P1 PROCESO P2 PROCESO P3

Enviar (P3, 1) Recibir (P1, 4) Recibir (P2, 6)


Recibir (P3, 2) Enviar (P3, 5) Enviar (P1, 7)
Enviar (P2, 3) Recibir (P1, 8)

En la ejecución de estos tres procesos de forma concurrente, siempre se


llegará a producir un interbloqueo, independientemente del orden en que se
lleve a cabo la ejecución. Siempre llegará un momento en el que el proceso
P3 esté a la espera de recibir un mensaje de P2, a su vez P2 estará a la
espera de recibir un mensaje de P1 y por último P1 estará a la espera de
recibirlo de P3. Por tanto, se encuentran en una situación de espera infinita,
ya que los eventos por los que esperan nunca van a ocurrir.

Recursos compartidos o exclusivos

Hasta ahora se ha estado suponiendo que los procesos utilizaban los


recursos de manera exclusiva, ya que cuando uno lo hacia el resto debía
esperar a que lo liberase. Pero esto no tiene por qué ser siempre así, véase
por ejemplo el uso de un archivo en modo de lectura, al que acceden un
conjunto de procesos al mismo tiempo. Éste, se estaría utilizando como
recurso compartido.

Evidentemente los interbloqueos solo se producen cuando se están utilizando


recursos exclusivos, ya que si los recursos son compartidos, los procesos
podrán acceder a ellos en cualquier momento sin la posibilidad de quedarse
bloqueados.

Es importante saber, que también existen recursos a los que se puede


acceder tanto en modo compartido como exclusivo. Cuando un proceso
solicita el recurso, indicará si lo desea hacer en un modo u otro.

El sistema por su parte, debe controlar quién está utilizando este recurso y en
qué modo. Así pues, si un proceso solicita el recurso en modo exclusivo, solo
podrá asignárselo si el recurso está libre, es decir, no lo está utilizando ningún
otro proceso. Si la solicitud de uso se hace en modo compartido, el recurso se
podrá asignar siempre que no esté siendo utilizado por otro proceso en modo
exclusivo, es decir, se asignará si el recurso está libre o está siendo utilizado
en modo compartido.

Puesto que en todos los ejemplos expuestos, han sido utilizados recursos
exclusivos y compartidos, no se desarrollará ningún ejemplo en este punto
con el fin de simplificarlo.

Unidad 4. Interbloqueos. 11
Formación Abierta

Recursos con un único ejemplar o con múltiples ejemplares


En todo sistema informático, los recursos pueden ser únicos o pueden existir
múltiples ejemplares de un recurso. En el caso de existir múltiples ejemplares,
cuando un proceso solicite ese recurso, se le asignará cualquiera de ellos.
Incluso cabe la posibilidad de que un proceso solicite varias unidades de un
mismo recurso múltiple.

Desde el punto de vista de los interbloqueos, los recursos o son únicos o son
múltiples, no cabe la posibilidad de asignar un perfil distinto a cada uno de los
recursos múltiples. Supóngase un sistema que dispone de dos impresoras,
las dos son idénticas en todo excepto que una permite imprimir en color y la
otra únicamente en blanco y negro. El recurso múltiple “impresora” no
permite la diferenciación de impresora en color y en b/n. Por tanto, si un
recurso necesita imprimir, lo hará por la que se le asigne, sin saber a priori si
será en color o en b/n. Si los procesos necesitaran diferenciar una impresora
de otra, se pasaría de tener un recurso múltiple (dos impresoras) a tener dos
recursos únicos (una impresora en color y una impresora en b/n).

Como ejemplo, supóngase dos procesos que solicitan bloques de memoria


contigua para almacenar un dato. En este caso la memoria total es de
500 Kb, por tanto se trata de un recurso múltiple formado por 500 ejemplares
de un recurso que es el Kb. El código sería el siguiente

PROCESO P1 PROCESO P2

Solicita (150 Kb) Solicita (200 Kb)


Solicita (100 Kb) Solicita (100 Kb)
Solicita (100 Kb) Usa los recursos
Usa los recursos Libera (300 Kb)
Libera (350 Kb)

Si el orden de ejecución fuese el siguiente, se llegaría a una situación de


interbloqueo, con el uso de recursos múltiples:

1 - P1 solicita (150 Kb) Se asignan 150 Kb a P1. Quedan 350 Kb libres.


2 - P2 solicita (200 Kb) Se asignan 200 Kb a P2. Quedan 150 Kb libres.
3 - P1 solicita (100 Kb) Se asignan 100 Kb a P2. Quedan 50 Kb libres.
4 - P2 solicita (100 Kb) Queda bloqueado a la espera de que se libere
memoria, ya que no hay suficiente.
5 - P1 solicita (100 Kb) Queda bloqueado a la espera de que se libere
memoria, ya que no hay suficiente. Como
ninguno de los dos va a liberar memoria, se ha
llegado a un interbloqueo.

12 Unidad 4. Interbloqueos.
Sistemas Operativos

En este ejemplo, no todos los órdenes de ejecución suponen llegar al


interbloqueo, lógicamente se ha utilizado el que interesa para la explicación.

Recursos expropiables o no expropiables

Los recursos expropiables son aquellos que, en caso de que el proceso que
los está utilizando se bloquee, pueden ser liberados y asignados a otro
proceso. Esto implica que se debe almacenar el trabajo que el proceso
llevaba hecho con el recurso expropiado, para posteriormente retomarlo en
ese punto.

Los recursos no expropiables son los que no permiten esta operación, bien
porque no es factible o porque resultaría demasiado ineficiente.

Como se ha visto en la unidad 2, el procesador es un recurso de uso


exclusivo y expropiable, ya que está permitido quitar el procesador asignado a
un proceso y dárselo a otro. Cada vez que se produce un cambio de este tipo,
se almacena el estado del proceso en el BCP, para posteriormente iniciar la
ejecución del proceso desde el punto en que se quedó. El procesador es otro
recurso cualquiera, el cual podría en teoría verse involucrado en
interbloqueos. Aunque en la realidad esto no sucede, ya que cualquier
proceso en ejecución que quede bloqueado, será inmediatamente desalojado
del procesador, evitando así la posibilidad de interbloqueo. Esto sucede
gracias al carácter expropiable del procesador.

En sistemas que utilizan un dispositivo de almacenamiento secundario como


una unidad de disco, el recurso de la memoria también es expropiable.
Cuando se quiere liberar la memoria asignada a un proceso, basta con
copiarla en el dispositivo de almacenamiento secundario, para en su posterior
reanudación poder recuperar el trabajo que ya había realizado. En el ejemplo
que se utilizó para explicar los recursos múltiples, esta sería una solución
válida para evitar el interbloqueo.

Unidad 4. Interbloqueos. 13
Formación Abierta

4.3. MODELADO DEL SISTEMA

Desde el punto de vista del estudio de los interbloqueos, un sistema


informático lo conforman los siguientes elementos:

• Los procesos.
• Un conjunto de recursos reutilizables y exclusivos. Cada uno de ellos
compuestos por una o varias unidades.

• Un conjunto de relaciones entre los procesos y los recursos, las cuales


indican los recursos que tiene asignado un proceso en un momento dado
y en su caso, el número de unidades asignadas.

• Otro conjunto de relaciones entre los procesos y los recursos, las cuales
indican los recursos que tiene solicitados y no concedidos un proceso, y
en su caso, el número de unidades solicitadas.

Una vez descritos los elementos, se definirán los dos métodos más utilizados
de representación del estado de asignación de recursos en un sistema.

4.3.1. GRAFO DE ASIGNACIÓN DE RECURSOS

Los grafos permiten representar de forma visual el estado de un sistema, en


cuanto a la situación de procesos y recursos se refiere. Cada uno de los
elementos mencionados en el punto anterior, tiene su representación propia.
Así pues, los grafos están formados por los siguientes elementos:

• Un conjunto de nodos (N), que lo forman los procesos y los recursos.


Los procesos se representan mediante un círculo. En cambio, los recursos
se representarán mediante un cuadrado, en cuyo interior se dibujarán
tantos círculos como unidades de ese recurso existan.

R2

Recurso R2 (dispone de 3 unidades)

P1
Proceso P1

Figura 4.2. Grafos. Representación de procesos y recursos

14 Unidad 4. Interbloqueos.
Sistemas Operativos

• Un conjunto de vectores (V), formado por una parte por los vectores de
asignación, que salen de un recurso hacia un proceso y representan los
recursos asignados a ese proceso. Y por otra parte, los vectores de
solicitud, que salen de un proceso hacia un recurso e indican que un
proceso tiene solicitado cierto recurso.

Existen ciertas restricciones de coherencia:

1. Restricción de asignación: el número de vectores que salen de un


recurso debe ser menor o igual que el número de unidades existentes
de ese recurso.

2. Restricción de solicitud: se debe cumplir que por cada pareja proceso


p y recurso r, el número de vectores de asignación más el número de
vectores de solicitud que existen entre p y r, debe ser menor o igual que
el número de unidades existentes de ese recurso r.

P1 P2
Proceso P1: tiene asignada una
unidad del recurso R1 y tiene
solicitada una unidad del recurso
R2.

Proceso P2: tiene asignada una


unidad del recurso R2.

R1 R2

Figura 4.3. Grafos. Representación de vectores entre procesos y recursos

Ejemplo de representación mediante un grafo

Supóngase un sistema con 3 recursos diferentes R1 con 2 unidades, R2 con


tres unidades y R3 con dos unidades. Y con 3 procesos que ejecutan esta
secuencia de código:

1 - P1 solicita R1 [2] P1 solicita 2 unidades del recurso R1


2 - P2 solicita R2 [1]
3 - P2 solicita R1 [1] P2 se bloquea porque no hay unidades de R1
4 - P3 solicita R2 [1]

Unidad 4. Interbloqueos. 15
Formación Abierta

La notación para definir los conjuntos de nodos(N) y vectores (V) que se va a


utilizar es la siguiente:

N = {P1, P2, P3, R1 [2], R2 [3], R3 [2]}


V = {R1Æ P1, R1Æ P1, R2Æ P2, P2Æ R1, R2Æ P3}

El grupo de nodos N, indica que el grafo está formado por los procesos P1,
P2 y P3 y por los recursos R1 del que se disponen de 2 unidades, R2 con 3
unidades y R3 con 2 unidades.

Por su parte, el grupo de vectores V, indica que existen dos vectores desde
R1 a P1, otro desde R2 a P2 y así sucesivamente. Recuérdese que los
vectores que van desde un recurso a un proceso son de asignación y si es al
contrario se trata de vectores de solicitud.

Con esta información el grafo solicitado sería el siguiente:

P1 P2 P3

R1 R2 R3

Si a la secuencia de código anterior se añadieran estas dos solicitudes mas,


el ejemplo quedaría así:

5 - P3 solicita R2 [1]
6 - P1 solicita (R2 [1], R3 [2]) P1 se bloquea porque no hay unidades de
R2

N = {P1, P2, P3, R1 [2], R2 [3], R3 [2]}


V = {R1Æ P1, R1Æ P1, R2Æ P2, P2Æ R1, R2Æ P3, R2Æ P3, P1Æ R2,
P1Æ R3, P1Æ R3}

16 Unidad 4. Interbloqueos.
Sistemas Operativos

Y el grafo resultante sería este:

P1 P2 P3

R1 R2 R3

Obsérvese como en el paso 6, el proceso P1 solicita en una misma


operación, tanto 1 unidad de del recurso R2, como 2 unidades de R3. Puesto
que no es posible asignarle 1 unidad de R2, porque están todas asignadas, el
proceso queda bloqueado, y por tanto, tampoco se le asignan las unidades
solicitadas de R3, aunque estas sí que están disponibles.

4.3.2. MATRICES DE ASIGNACIÓN DE RECURSOS

Otra forma de representar el estado de un sistema, desde el punto de vista de


la asignación de recursos a procesos, es mediante el uso de matrices.

Para ello es necesario utilizar dos matrices, una matriz de solicitudes (S) y
una matriz de asignaciones (A), además de un vector con las unidades
existentes de cada recurso (E) y otro con las unidades disponibles (D):

• Matriz de asignaciones (A): se trata de una matriz de dimensión p X r,


siendo p el número de procesos y r el número de recursos. Cada
componente de la matriz A [ i , j ] indica cuántas unidades del recurso j
están asignadas al proceso i.

• Matriz de solicitudes (S): se trata igualmente de una matriz de dimensión


p X r, en la que cada componente S [ i , j ] indica cuántas unidades del
recurso j ha solicitado y está esperando el proceso i, para que le sean
asignadas.

• Vector de recursos existentes (E): vector de dimensión r, en la que cada


componente E [ j ] indica cuántas unidades existen del recurso j.

Unidad 4. Interbloqueos. 17
Formación Abierta

• Vector de recursos disponibles (D): vector de dimensión r, en la que


cada componente D [ j ] indica cuántas unidades hay disponibles del
recurso j. No es un vector necesario, pero sí que se suele utilizar, ya que
facilita la comprensión.

Las restricciones de coherencia, son similares a las especificadas en la


representación mediante grafos, pero adaptadas a matrices:

1. Restricción de asignación: para cada recurso j, la suma de la columna


de la matriz A expresado como ∑ A [ i , j ] para i = 1,…,p, debe ser menor o
igual que el número de unidades existentes de ese recurso E [ j ].
2. Restricción de solicitud: se debe cumplir que para cada proceso i y
recurso j, A [ i , j ] + S [ i , j ] ≤ E [ j ]. O lo que es lo mismo, que para cada
proceso y recurso, la suma de las unidades de ese recurso asignadas a
ese proceso, más las unidades solicitadas de ese recurso por ese proceso,
debe ser menor o igual que el número de unidades existentes de dicho
recurso.

La estructura general de la matriz de asignación en concreto, y en general de


cualquiera de ellas será:

⎡ A [1,1] A [1,2] ...⎤


⎢ ⎥
A = ⎢ A [ 2,1] ... ...⎥
⎢ A [i, j] ... ...⎥⎦

Así, por ejemplo la componente A [2 ,1] indicará las unidades que el proceso
P2 tiene asignadas del recurso R1.

Ejemplo de representación mediante matrices

Partiendo del ejemplo utilizado en la representación con grafos, cuya primera


parte tenía este aspecto:

P1 P2 P3

R1 R2 R3

18 Unidad 4. Interbloqueos.
Sistemas Operativos

Al representarlo mediante matrices, se obtienen estas estructuras:

⎡2 0 0⎤ ⎡0 0 0 ⎤
A = ⎢⎢0 1 0 ⎥⎥ S = ⎢⎢ 1 0 0 ⎥⎥ E = [ 2 3 2] D = [ 0 1 2]
⎢⎣0 1 0 ⎥⎦ ⎢⎣0 0 0 ⎥⎦

Así pues, por ejemplo el componente A [ 1 , 1 ] = 2, indica que el proceso P1,


tiene asignadas 2 unidades del recurso R1. Así como el componente
A [ 3 , 2 ] = 1 indica que el proceso P3 tiene asignada 1 unidad del recurso
R2.

De igual forma, la componente S [2,1] = 1 indica que el proceso P2 tiene


solicitada 1 unidad del recurso R1.

En cuanto al vector E, la componente E[1] = 2 indica que existen 2 unidades


del recurso R1.

Del mismo modo, la componente D[3] = 2, del vector D, indica que existen 2
unidades disponibles del recurso R3.

Siguiendo con el ejemplo original, al añadir las instrucciones 5 y 6 el grafo


quedaba así:

P1 P2 P3

R1 R2 R3

Se obtendrían las siguientes matrices:

⎡2 0 0⎤ ⎡0 1 2 ⎤
A = ⎢⎢0 1 0 ⎥⎥ S = ⎢⎢ 1 0 0 ⎥⎥ E = [ 2 3 2] D = [0 0 2]
⎢⎣0 2 0 ⎥⎦ ⎢⎣0 0 0 ⎥⎦

Unidad 4. Interbloqueos. 19
Formación Abierta

4.4. IDENTIFICACIÓN DEL INTERBLOQUEO

Una vez conocido el modelado de un sistema, es el momento de definir


formalmente qué es un interbloqueo para su posterior identificación.

Definición formal de interbloqueo

Un conjunto de procesos está en interbloqueo si cada proceso


está esperando por un recurso que solo puede liberar (o
generar, en caso de recursos consumibles) otro proceso del
conjunto.

A la hora de identificar un interbloqueo es importante conocer las condiciones


que deben darse para que se produzca. A lo largo del tiempo, diferentes
autores, han coincidido en que las condiciones necesarias para que se
produzca un interbloqueo son las siguientes:

• Exclusión mutua.
Los recursos implicados deben usarse en modo exclusivo por los
procesos. Una vez que se le ha asignado un recurso a un proceso, ningún
otro proceso podrá utilizarlo. Como ya se comentó, los recursos
compartidos nunca están involucrados en un interbloqueo.

• Retención y espera.
Cuando no se puede satisfacer la petición de un recurso por parte de un
proceso, éste se bloquea manteniendo los recursos que ya tenía
asignados previamente.

• No expropiación.
Los recursos solo pueden ser liberados por la acción explícita del proceso
que los posee y nunca por decisión de un agente externo.

• Espera circular.
Debe existir una lista circular de procesos tal que cada proceso en la lista
este esperando por uno o más recursos qué tiene asignado el siguiente
proceso de la lista. Un ejemplo sería que un proceso P1 posee el recurso
R1 y solicita el recurso R2 y otro proceso P2 que posee el recurso R2,
solicita el recurso R1.

20 Unidad 4. Interbloqueos.
Sistemas Operativos

Las tres primeras condiciones están relacionadas con las políticas de gestión
de recursos que se utilicen. Sin embargo la cuarta, la espera circular, indica
cómo debe ser el comportamiento dinámico de los procesos para que se
produzca el interbloqueo.

Es importante resaltar, que estas cuatro condiciones, son condiciones


necesarias pero no suficientes. Es decir, que la presencia de las cuatro
condiciones no implica que vaya a suceder un interbloqueo, aunque si
aseguran que para que ocurra un interbloqueo, las cuatro condiciones han de
cumplirse.

Unidad 4. Interbloqueos. 21
Formación Abierta

4.5. TRATAMIENTO DEL INTERBLOQUEO

Existen tres tipos de técnicas para el tratamiento del interbloqueo, las cuales
se irán explicando detalladamente en los puntos siguientes. Son:

• Estrategia de detección y recuperación del interbloqueo.


Se considera que estas estrategias implican un visón optimista del
sistema. Ya que los procesos tienen total libertad en sus solicitudes, y se
supone que los interbloqueos que puedan surgir no serán algo muy
repetitivo. Se debe analizar continuamente el estado del sistema,
mediante un algoritmo que evalúe las condiciones vistas en el punto
anterior. Este análisis conlleva un coste que puede afectar al rendimiento
del sistema. Una vez detectado, se debe eliminar mediante algún
procedimiento de recuperación, que normalmente implica la pérdida de
cierto trabajo ya realizado.

• Estrategia de prevención del interbloqueo.


Estas técnicas atajan el problema de raíz, fijando una serie de
restricciones para evitar que se cumpla específicamente alguna de las
cuatro condiciones necesarias. Esto implica una infrautilización de los
recursos, ya que normalmente los procesos los reservarán mucho antes
de su utilización, debido a las restricciones fijadas.

• Estrategia de predicción del interbloqueo.


Estas técnicas se basan en el conocimiento previo de los recursos que va
utilizar un proceso. Y mediante el uso de algoritmos de predicción, se
asegura que no va a existir interbloqueo. Al igual que en las estrategias de
detección, el uso de estos algoritmos puede afectar al rendimiento del
sistema y normalmente también se infrautilizan los recursos.

Existe, aunque parezca sorprendente, una cuarta técnica o estrategia que


consiste en ignorar los interbloqueos. A esta técnica se le suele llamar
técnica del avestruz e implicaría por una parte, la ventaja de evitarse los
problemas de las otras tres estrategias (infrautilización de recursos,
algoritmos que afectan al rendimiento, etc.). Pero por otra parte, tendría el
inconveniente de que los procesos y recursos asignados, quedarían
bloqueados indefinidamente.

22 Unidad 4. Interbloqueos.
Sistemas Operativos

El SO Unix, por ejemplo, puede sufrir interbloqueos que ni siquiera se


detectan, y que, por supuesto, no se eliminan automáticamente. El número
total de procesos en el sistema viene determinado por el número de
posiciones de la tabla de procesos, que en definitiva, constituye un recurso
limitado. Supongamos ahora que un sistema Unix con 100 posiciones en la
tabla de procesos tiene ejecutándose 10 procesos, cada uno de los cuales ha
de crear 12 subprocesos. Después de que cada proceso haya creado otros 9,
los 10 procesos originales y los 90 nuevos llenarán por completo la tabla. Los
10 procesos originales se encontrarán ahora en un bucle infinito intentando
crear un nuevo proceso sin poder: se ha producido un interbloqueo. Otros
ejemplos de recursos que suelen ser limitados son el número máximo de
ficheros que pueden estar abiertos y el área en el disco para intercambio con
memoria principal. En realidad, casi todas las tablas del sistema operativo
representan recursos limitados.

La estrategia UNIX es simplemente desentenderse del problema, suponiendo


que la mayoría de los usuarios preferirán un interbloqueo ocasional antes que
la imposición de que cada usuario pueda crear un solo proceso o abrir un solo
fichero.

Unidad 4. Interbloqueos. 23
Formación Abierta

4.6. DETECCIÓN Y RECUPERACIÓN DEL


INTERBLOQUEO

Como su propio nombre indica, esta técnica, consta de dos fases:

• Fase de detección.
Debe ejecutarse un algoritmo que analice en cada momento si en el
sistema se está produciendo algún interbloqueo, y de ser así identificar
qué procesos y recursos están implicados. Este tipo de algoritmos suelen
tener un coste de ejecución alto, lo que puede afectar al rendimiento del
sistema. Por ello se debe tener cuidado al establecer la frecuencia de
ejecución de dicho algoritmo. En el momento en que el algoritmo detecte
un interbloqueo, se activará la fase de recuperación.

• Fase de recuperación.
En esta fase, se debe aplicar alguna acción que elimine el interbloqueo.
Esta acción normalmente consiste en abortar la ejecución de alguno o
algunos de los procesos implicados, liberando de esta forma los recursos
que tuvieran asignados. Para ello, se utiliza también un algoritmo, que es
el encargado de dictaminar qué proceso o procesos deben ser abortados.

4.6.1. DETECCIÓN DEL INTERBLOQUEO

Los algoritmos de detección, se basan en lo que se denomina técnica de


reducción. Esta técnica se puede aplicar tanto a grafos como a matrices y sin
entrar en detalles que complicarían su entendimiento, consiste en lo siguiente:

Algoritmo de detección para una representación mediante un grafo

Dado un grafo de asignación de recursos, éste se puede reducir por un


proceso P, si los recursos disponibles satisfacen sus necesidades (el proceso,
por tanto no está bloqueado).

La reducción consiste en eliminar los vectores o flechas de solicitud que


parten del nodo, puesto que hay recursos disponibles y, de igual manera,
eliminar los vectores de asignación que llegan a dicho nodo, ya que se
supone que el proceso devolverá todos los recursos.

24 Unidad 4. Interbloqueos.
Sistemas Operativos

El resultado de dicha reducción, es un nuevo grafo, donde podrá haber


nuevos procesos desbloqueados gracias a los recursos liberados a los que se
les podrá aplicar una nueva reducción.

Como ejemplo gráfico, se parte de un grafo ya utilizado anteriormente:

P1 P2 P3

R1 R2 R3

Puesto que el único proceso que tiene todos los recursos que necesita es P3,
se aplica una reducción por P3. El resultado es el siguiente grafo:

P1 P2 P3

R1 R2 R3

Se han liberado los recursos que tenía asignados P3, y por tanto, ahora P1 ya
puede disponer de todos los recursos que tiene solicitados. Por tanto, el
siguiente paso es una reducción por P1. El resultado es el siguiente:

P1 P2 P3

R1 R2 R3

Unidad 4. Interbloqueos. 25
Formación Abierta

Por último, al aplicar la reducción por P2 que ya tiene todos los recursos
disponibles, se puede observar que todos los procesos han satisfecho sus
peticiones de recursos, y por tanto, sus ejecuciones. Por lo tanto, se puede
asegurar que no existe interbloqueo.

Si hubiesen quedado uno o más procesos, en los cuales ya no se pudiese


aplicar la técnica de reducción, estaríamos ante un caso de interbloqueo. Los
procesos que no han podido ser reducidos y los recursos que tienen
asignados o solicitados, serían los elementos involucrados o causantes de
dicho interbloqueo.

Por supuesto, ésta es la forma gráfica de explicar en qué consiste el algoritmo


de detección a través de grafos. Lo complejo es la programación o
codificación de dicho algoritmo, para que realice sistemáticamente esta tarea.

Algoritmo de detección para una representación matricial

El planteamiento es el mismo que el expuesto para el caso de los grafos, por


tanto en una representación matricial, igualmente, se puede reducir por un
proceso P si los recursos disponibles satisfacen sus necesidades. En esta
caso, se debe cumplir que S [P] ≤ D.

Utilizando también un ejemplo conocido se tendría originalmente este sistema


de matrices:

⎡2 0 0⎤ ⎡0 1 2 ⎤
A = ⎢⎢0 1 0 ⎥⎥ S = ⎢⎢ 1 0 0 ⎥⎥ E = [ 2 3 2] D = [0 0 2]
⎢⎣0 2 0 ⎥⎦ ⎢⎣0 0 0 ⎥⎦

En esta caso únicamente S[3] = [0 0 0 ] es menor o igual que D = [0 0 2]. Ya


que 0 ≤ 0 , 0 ≤ 0 y 0 ≤ 2. Por tanto se reduce por P3 y el sistema de matrices
que se obtiene, es el resultado de sumar los recursos asignados a P3, es
decir A[3] a la matriz de recursos disponibles D.

⎡2 0 0⎤ ⎡0 1 2 ⎤
A = ⎢⎢0 1 0 ⎥⎥ S = ⎢⎢ 1 0 0 ⎥⎥ E = [ 2 3 2] D = [0 2 2]
⎢⎣0 0 0 ⎥⎦ ⎢⎣0 0 0 ⎥⎦

26 Unidad 4. Interbloqueos.
Sistemas Operativos

A continuación se puede seguir reduciendo por P1 ya que S[1] ≤ D, siendo el


resultado:

⎡0 0 0 ⎤ ⎡0 1 2 ⎤
A = ⎢⎢0 1 0 ⎥⎥ S = ⎢⎢ 1 0 0 ⎥⎥ E = [ 2 3 2] D = [ 2 2 2]
⎢⎣0 0 0 ⎥⎦ ⎢⎣0 0 0 ⎥⎦

Por último, se reduce por P2 obteniendo:

⎡0 0 0 ⎤ ⎡0 1 2 ⎤
A = ⎢⎢0 0 0 ⎥⎥ S = ⎢⎢ 1 0 0 ⎥⎥ E = [ 2 3 2] D = [ 2 3 2]
⎢⎣0 0 0 ⎥⎦ ⎢⎣0 0 0 ⎥⎦

Puesto que se han reducido todos los procesos y se han conseguido


satisfacer todas las solicitudes de recursos, no se trata de un caso de
interbloqueo.

Al igual que sucedía con los grafos, si hubiera llegado un momento en el que
no hubiera sido posible la reducción de ningún otro proceso, se trataría de un
caso de interbloqueo.

Es importante tener en cuenta, que tanto en la aplicación de los algoritmos


basados en grafos, como para los matriciales. Se está evolucionando el
estado actual de un sistema, modificando sus estructuras de datos tales como
tablas de asignación, para ver reflejados los sucesivos estados en los que
puede encontrarse después de cada reducción. Por tanto, el trabajo del
algoritmo no puede ser sobre las estructuras reales del sistema, sino que se
realizará un volcado o copia de dichas estructuras, y éstas serán sobre las
que trabaje el algoritmo.

4.6.2. RECUPERACIÓN DEL INTERBLOQUEO

Una vez detectado el interbloqueo, es necesario tomar alguna decisión que


permita deshacer el problema. Para ello, el sistema operativo debe ir
seleccionando alguno de los procesos implicados en el interbloqueo e ir
quitándole los recursos que tuviera asignados.

Unidad 4. Interbloqueos. 27
Formación Abierta

La solución óptima es hacer que los procesos restaurasen su estado, justo


antes de solicitar los recursos que ahora les van a ser expropiados. Pero esta
solución no es sencilla de implementar, ya que se debe tratar de sistemas que
posean algún mecanismo de puntos de recuperación de procesos. En los
sistemas operativos de propósito general, normalmente no existe esta opción,
por tanto se opta por una solución mucho más agresiva. Esta solución
consiste en ir abortando los procesos implicados, según la información
proporcionada por el algoritmo de detección, hasta que el interbloqueo
desaparezca. Esto implica que después de abortar cada proceso, se debe
volver a ejecutar el algoritmo de detección, para que compruebe si el
interbloqueo sigue existiendo.

A la hora de decidir qué proceso se va a abortar, se deberían tener en cuenta


cuál de ellos supone menos coste para el sistema. Para ello se deben
analizar criterios tales como la prioridad, el número de recursos que tiene
asignados, el tiempo de ejecución que lleva, etc.

28 Unidad 4. Interbloqueos.
Sistemas Operativos

4.7. PREVENCIÓN DEL INTERBLOQUEO

Con la técnica de prevención, se intenta resolver de raíz el problema de los


interbloqueos. Como ya se explicó en el punto 4.4, se deben dar las cuatro
condiciones necesarias, para la existencia del interbloqueo. Así pues, la base
de las técnicas de prevención es asegurar que una de esas cuatro
condiciones, no se llegue a producir nunca y de esa manera evitar el
problema.

Por tanto, existen cuatro tipos de técnicas de prevención distintas,


dependiendo de la condición que garanticen que no se llegará a cumplir.

4.7.1. EXCLUSIÓN MUTUA

Esta condición nunca llegaría a darse en un sistema en el que todos sus


recursos sean compartidos. Algo realmente imposible, dado que existen
recursos, como el procesador, de carácter intrínsecamente exclusivo. Por
tanto, se manifiesta que este tipo de técnicas no podrían llegar a
implementarse por completo, siempre quedaría algún recurso de uso
exclusivo, candidato para producir un interbloqueo.

4.7.2. RETENCIÓN Y ESPERA

Esta condición indica que para que suceda un interbloqueo, deben existir
procesos que tengan asignados algunos recursos, pero estén bloqueados a la
espera de otros.

Una primera estrategia sería obligar a todos los procesos a solicitar, al inicio
de su ejecución, todos los recursos que vayan a necesitar hasta su
finalización. Esta solución tiene el gran inconveniente de la infrautilización de
los recursos. Ya que habrá procesos con los recursos asignados desde el
principio, que no los utilizarán hasta pasado un tiempo. Con lo que el recurso
estará parado, e inaccesible a que el resto de procesos lo utilice.

Otra estrategia más depurada, consiste en permitir que un proceso solicite un


recurso, solo si no tiene ningún otro recurso asignado. Aun así, con esta
solución se siguen infrautilizando los recursos.

Unidad 4. Interbloqueos. 29
Formación Abierta

4.7.3. NO EXPROPIACIÓN

La tercera condición necesaria implica que a un proceso nunca se le puede


privar de los recursos que tiene asignados, sino que él es el único que puede
liberarlos voluntariamente. En la realidad existen ciertos recursos que no son
expropiables, por tanto, sería el mismo caso que en la exclusión mutua.

En el hipotético caso de disponer únicamente de recursos expropiables, la


estrategia a seguir consistiría en que cuando un proceso realice una solicitud
y no se pueda satisfacer, se le expropien todos los recursos que tuviera
asignados hasta el momento. Con el consiguiente almacenamiento, de la
situación en la que se encontraba el trabajo del proceso con dichos recursos.

4.7.4. ESPERA CIRCULAR

Por último, se puede garantizar que no se produce esperar circular. Como se


habrá podido observar, la espera circular ocurre debido a que los procesos
solicitan los recursos en diferente orden. Para evitar esto, se utiliza la técnica
de asignación de recursos denominada ordenación lineal de recursos. Esta
técnica, consiste en establecer un orden entre todos los recursos del sistema,
y obligar a los procesos a ir solicitando los recursos según el orden
establecido.

Esta técnica, conlleva asociados dos inconvenientes. El primero, es que de


nuevo los recursos se pueden asignar mucho antes de su uso por parte del
proceso, lo que conlleva su infrautilización. El segundo, se refiere al orden de
los recursos, ya que se debe corresponder con el uso más probable por parte
de la mayoría de los procesos. Obviamente, el uso de los recursos es
diferente en cada proceso, lo que dificulta encontrar un orden óptimo para
todos ellos.

30 Unidad 4. Interbloqueos.
Sistemas Operativos

4.8. PREDICCIÓN DEL INTERBLOQUEO

Como ya se ha explicado, existe un punto previo que se denomina punto de


no retorno, en el cual el interbloqueo no ha ocurrido, pero es inevitable. Las
técnicas de predicción del interbloqueo, se basan en conocer, antes incluso
de sobrepasar ese punto, la existencia de un interbloqueo en el futuro. Para
ello es necesario conocer, a priori, los recursos que van a solicitar los
procesos durante toda su ejecución. De esta forma, se podría controlar la
asignación de los recursos para evitar el interbloqueo.

Cabe destacar que con el uso de esta técnica, se podría dar el caso de que
un proceso solicite un recurso, y aunque dicho recurso esté disponible, el
sistema no se lo asigne porque eso implicaría un interbloqueo en el futuro. Así
pues en este ejemplo utilizado con anterioridad:

PROCESO P1 PROCESO P2
Solicita (D) Solicita (I)
Solicita (I) Solicita (D)
Usa los recursos Usa los recursos
Libera (I) Libera (D)
Libera (D) Libera (I)

Si el proceso P1 solicita el disco (D) y se le asigna, y a continuación el


proceso P2 solicita la impresora (I). Aunque el recurso está disponible, el
sistema bloquea al proceso P2 y no le asigna el recurso (I). Porque de ser así,
se rebasaría el punto de no retorno y finalmente se produciría el interbloqueo.

4.8.1. ESTADO SEGURO

El estado en que se encuentra un sistema, desde el punto de vista de


asignación de procesos y recursos, se dice que es un estado seguro, si
conociendo las necesidades máximas de recursos que tiene cada proceso,
existe al menos un orden de asignación en el que todos los procesos
consiguen satisfacer sus necesidades de recursos. En caso contrario será un
estado inseguro.

Unidad 4. Interbloqueos. 31
Formación Abierta

El funcionamiento de un algoritmo que detecte si un estado es seguro,


básicamente sería el siguiente: en primer lugar, se deben satisfacer las
necesidades de alguno de los procesos con los recursos disponibles. A
continuación, se supone que ese proceso ha terminado y libera todos los
recursos que poseía. Con los recursos disponibles ahora, se vuelve a intentar
satisfacer las necesidades de otro proceso y así sucesivamente con todos. Si
en algún momento hubiese varios procesos que pueden satisfacer sus
peticiones, se debe tener en cuenta que existen varias opciones, para que en
caso de no poder continuar en un orden concreto, retroceder y elegir otra
posibilidad.

La condición por la cual un estado es inseguro, es una condición necesaria,


pero no suficiente para que suceda un interbloqueo. Ya que el algoritmo se
basa en el conocimiento de las necesidades máximas de recursos que tiene
un proceso, pero no conoce la secuencia de utilización de los mismos por
parte del proceso. Así pues, se puede llegar a calificar como inseguros
algunos estados que nunca derivarían en un interbloqueo.

En el ejemplo de la página anterior, si se permite que cada proceso obtenga


el primer recurso que solicita, estaríamos ante un estado inseguro que
produciría un interbloqueo. Sin embargo en el ejemplo siguiente, que tiene las
mismas necesidades máximas de recursos, el estado se consideraría
inseguro, pero nunca se podría producir un interbloqueo.

PROCESO P1 PROCESO P2

Solicita (D) Solicita (I)


Usa el recurso (D) Solicita (D)
Libera (D) Usa los recursos
Solicita (I) Libera (D)
Usa el recurso (I) Libera(I)
Libera (I)

4.8.2. ALGORITMOS DE PREDICCIÓN

Los algoritmos empleados para la detección de interbloqueos, ya sea


mediante grafos o mediante matrices, son perfectamente válidos para la
verificación de un estado seguro, y por tanto, para la predicción de
interbloqueos. Puesto que se trata de una condición necesaria, la obtención
de un estado seguro, garantiza que no existirá interbloqueo.

32 Unidad 4. Interbloqueos.
Sistemas Operativos

Existen otros algoritmos, aunque solo se detallará uno de ellos por ser el más
relevante.

Algoritmo del banquero

El algoritmo del banquero, en sistemas operativos es una forma de evitar el


interbloqueo, propuesta por primera vez por Edsger Dijkstra. Requiere
conocer con anticipación los recursos que serán utilizados por todos los
procesos.

Este algoritmo usualmente es explicado usando la analogía con el


funcionamiento de un banco. Los clientes representan a los procesos, que
tienen un crédito límite, y el dinero representa a los recursos. El banquero es
el sistema operativo.

El banco confía en que no tendrá que permitir a todos sus clientes la


utilización de todo su crédito a la vez. El banco también asume que si un
cliente maximiza su crédito, será capaz de terminar sus negocios y devolver
el dinero a la entidad, permitiendo servir a otros clientes.

El algoritmo mantiene al sistema en un estado seguro. Los procesos piden


recursos, y son complacidos siempre y cuando el sistema se mantenga en un
estado seguro después de la concesión. De lo contrario, el proceso es
bloqueado hasta que otro proceso libere recursos suficientes.

Así, el uso de este algoritmo permite impedir el interbloqueo, pero supone


una serie de restricciones:

• Se debe conocer la máxima demanda de recursos por anticipado.

• Los procesos deben ser independientes, es decir, que puedan ser


ejecutados en cualquier orden. Por lo tanto, su ejecución no debe estar
forzada por condiciones de sincronización.

• Debe haber un número fijo de recursos a utilizar y un número fijo de


procesos.

• Los procesos no pueden finalizar mientras retengan recursos.

Unidad 4. Interbloqueos. 33
Sistemas Operativos

♦ RESUMEN

• Un interbloqueo es un estado no deseable que puede alcanzar un sistema


informático, en el cual, existen un conjunto de unidades de ejecución
bloqueadas a la espera de algún recurso, que nunca les será concedido,
ya que está asignado a otras unidades que se encuentran en ese mismo
estado de bloqueo.

• Para el tratamiento del interbloqueo existen diferentes técnicas como son


la detección y recuperación, la prevención y la predicción. En la tarea de
prevención de los interbloqueos, hay que tener en cuenta que antes de
materializarse el interbloqueo existe un punto de no retorno en el que,
aunque todavía no ha ocurrido, el interbloqueo ya es inevitable.

• En todo sistema informático existen dos elementos: las entidades activas,


que obviamente son los procesos o en su caso los hilos; y los recursos,
tanto físicos como lógicos de los que dispone un sistema informático. A su
vez, los recursos pueden ser reutilizables o consumibles, compartidos o
exclusivos, compuestos por un ejemplar o varios ejemplares y
expropiables o no expropiables.

• Las formas clásicas de modelado de un sistema son mediante grafos de


asignación de recursos o matrices de asignación de recursos.

• A la hora de identificar un interbloqueo, es importante conocer las cuatro


condiciones necesarias para que se produzca, que son: exclusión mutua,
retención y espera, no expropiación y espera circular.

• Existen tres tipos de técnicas para el tratamiento del interbloqueo.

ƒ Detección y recuperación: se debe analizar continuamente el


estado del sistema, mediante un algoritmo que evalúe las cuatro
condiciones necesarias.

ƒ Prevención del interbloqueo: estas técnicas atajan el problema de


raíz, fijando una serie de restricciones para evitar que se cumpla
específicamente alguna de las cuatro condiciones necesarias.

Unidad 4. Interbloqueos. 35
Formación Abierta

ƒ Predicción del interbloqueo: estas técnicas se basan en el


conocimiento previo de los recursos que va utilizar un proceso. Y
mediante el uso de algoritmos de predicción, se asegura que no va a
existir interbloqueo.

ƒ Existe una cuarta técnica o estrategia que consiste en ignorar los


interbloqueos. A esta técnica se la suele llamar técnica del
avestruz.

• La predicción de interbloqueos, se basa en el concepto de estados


seguros. El estado en que se encuentra un sistema, desde el punto de
vista de asignación de procesos y recursos, se dice que es un estado
seguro, si conociendo las necesidades máximas de recursos que tiene
cada proceso, existe al menos un orden de asignación en el que todos los
procesos consiguen satisfacer sus necesidades de recursos. En caso
contrario será un estado inseguro. La condición de estado inseguro es
necesaria, pero no suficiente para que exista un interbloqueo.

36 Unidad 4. Interbloqueos.
SISTEMAS
OPERATIVOS

ENTRADA/SALIDA
Sistemas Operativos

ÍNDICE
♦  OBJETIVOS ................................................................................................. 3 

♦  INTRODUCCIÓN .......................................................................................... 4 
5.1.  Definición ................................................................................................ 7 
5.2.  Clasificación de dispositivos de E/S ................................................... 9 
5.2.1.  Conexión de un dispositivo de E/S .................................................. 9 
5.2.2.  Dispositivos según dirección de E/S ............................................... 11 
5.2.3.  Dispositivos de bloques o de caracteres ......................................... 12 
5.2.4.  Dispositivos de E/S programada o por interrupciones .................... 12 
5.3.  Mecanismos de optimización ............................................................. 15 
5.3.1.  Acceso directo a memoria (Dma) .................................................... 15 
5.3.2.  Canales de E/S con Dma ................................................................ 16 
5.3.3.  Memoria caché ................................................................................ 17 
5.3.4.  Solapamiento de operaciones ......................................................... 17 
5.4.  Estructura del sistema de E/S ............................................................. 18 
5.4.1.  Componentes del sistema de E/S ................................................... 18 
5.5.  Software de entrada/salida .................................................................. 21 
5.5.1.  Manejadores de interrupción ........................................................... 22 
5.5.2.  Manejadores de dispositivos ........................................................... 22 
5.5.3.  Software independiente del dispositivo ........................................... 24 
5.6.  Almacenamiento secundario .............................................................. 27 
5.6.1.  Discos ............................................................................................. 28 
5.6.2.  Políticas de planificación de disco .................................................. 34 
5.6.3.  Fiabilidad y tolerancia a fallos ......................................................... 37 
♦  RESUMEN .................................................................................................. 41 

Unidad 5. Entrada/salida. 1
Sistemas Operativos

♦ OBJETIVOS

• Conocer qué es el sistema de entrada/salida y los objetivos que persigue


dentro de un sistema operativo.

• Diferenciar los distintos tipos de dispositivos de entrada/salida según sus


métodos de acceso, tamaños de la información que tratan y forma de
programación.

• Conocer los distintos mecanismos creados para optimizar la gestión de las


peticiones de entrada/salida.

• Conocer los elementos hardware y software que intervienen en las


operaciones de entrada/salida.

• Saber cómo se realiza una operación de entrada/salida. Los flujos de


datos existentes y las operaciones de sincronización entre los elementos
que intervienen.

• Familiarizarse con lo que se denomina almacenamiento secundario, los


distintos tipos de dispositivos y soportes. En el caso concreto de los
discos duros, conocer su estructura física y lógica y los cálculos básicos
de los parámetros de capacidad y tiempo de acceso.

• Conocer en qué consiste la planificación de discos y la importancia que


supone para el sistema una elección correcta de la política a aplicar.

• Conocer los aspectos y parámetros relevantes en la planificación de disco.

• Conocer las políticas más utilizadas de acceso a disco, como son FCFS,
SSF, SCAN, LOOK, etc. Así como los cálculos que permiten definir la
política más adecuada, en función de los movimientos necesarios para
satisfacer todas las peticiones.

• Conocer los dispositivos con alta fiabilidad y tolerancia a fallos, en


concreto los dispositivos RAID (como sus distintos niveles).

Unidad 5. Entrada/salida. 3
Formación Abierta

♦ INTRODUCCIÓN

El control de los dispositivos conectados a la computadora es una de las


principales preocupaciones de los diseñadores de sistemas operativos.
Debido a que existe una variedad tan amplia de dispositivos de E/S tanto en
lo que respecta a sus funciones como en cuanto a su velocidad de operación,
se necesitan diversos métodos para controlar esos dispositivos. Dichos
métodos forman el subsistema de E/S.

En el campo de la tecnología de dispositivos de E/S, se experimentan dos


tendencias que están en conflicto mutuo. De un lado, se encuentra una
creciente estandarización de las interfaces software y hardware; esta
tendencia ayuda a incorporar generaciones mejoradas de dispositivos dentro
de las computadoras de sistemas operativos existentes.

Por otro lado, existe una variedad cada vez más amplia de dispositivos de
E/S. Algunos nuevos dispositivos son tan distintos de los dispositivos
anteriores que constituye todo un desafío incorporarlos en las computadoras y
los sistemas operativos.

Se detallarán, en esta unidad, los elementos básicos del hardware de E/S,


como los puertos, buses y controladores de dispositivo. Los cuales, permiten
integrar una amplia variedad de dispositivos de E/S. Para encapsular los
detalles y las peculiaridades de diferentes tipos de dispositivos, se hace uso
de los controladores de dispositivos. Los controladores de dispositivos
presentan al subsistema de E/S una interfaz uniforme de acceso a los
dispositivos, de forma parecida a como las llamadas al sistema proporcionan
una interfaz estándar entre la aplicación y el sistema operativo.

Tanto los elementos hardware como software del sistema de entrada/salida,


han de adaptarse y evolucionar junto a la tecnología de los dispositivos. Por
ello en este capítulo, también se dedicará una parte, a exponer los distintos
métodos de optimización. Los cuales permiten mejorar la gestión de las
peticiones de operaciones de E/S, de forma que se atiendan de una manera
más optimizada, rápida y eficaz.

4 Unidad 5. Entrada/salida.
Sistemas Operativos

En este capítulo, también se tratará el tema del almacenamiento secundario;


los distintos tipos de dispositivos, cuya función principal es la de almacenar
gran cantidad de información de forma duradera. Dentro de estos dispositivos,
se prestará especial atención a los discos duros, por ser el dispositivo de
almacenamiento secundario principal. Se detallará su estructura tanto física
como lógica, así como su funcionamiento. Para que este tipo de dispositivos
realice sus tareas de la manera más optimizada posible, debe seguir una
política de acceso, acorde con sus necesidades. Por ello también se
explicaran las técnicas o políticas de acceso a disco más utilizadas, sus
restricciones, ventajas e inconvenientes.

Se dedicará, por último, en este apartado dedicado al almacenamiento


secundario, una pequeña parte a los discos denominados RAID, los cuales se
caracterizan por ser muy fiables y con alta tolerancia a los fallos, debido a la
forma en la que organizan de la información, con datos duplicados o datos de
control de integridad.

Unidad 5. Entrada/salida. 5
Sistemas Operativos

5.1. DEFINICIÓN

Como ya se sabe, una computadora, está formada por una serie de


componentes hardware, siendo la CPU el más importante de todos ellos. Ya
que es la encargada de procesar las instrucciones y los datos, para que las
aplicaciones consigan realizar sus tareas.

Ahora bien, la CPU por sí sola no serviría de nada, está obligada a trabajar
conjuntamente con el resto de elementos hardware y periféricos. Los cuales
le permiten almacenar información, interactuar con el usuario, comunicarse
con otros equipos, etc.

Figura 5.1. Ejemplos típicos de periféricos y unidad principal

Los dispositivos de E/S se pueden dividir en tres grandes grupos:

• Dispositivos de interfaz de usuario.

Son los que permiten la comunicación entre los usuarios y la


computadora. En este grupo se incluyen dispositivos tanto de entrada
(teclado, ratón, escáner, etc.), como de salida (monitor, impresora, etc.).

• Dispositivos de almacenamiento.

Se usan para el almacenamiento no volátil de datos, los cuales se utilizan


para abastecer a los programas que se ejecutan en la CPU. Según su
capacidad e inmediatez se clasifican en almacenamiento secundario
(discos, DVD, disquetes, memorias USB, etc.) y terciario (cintas, etc.).

Unidad 5. Entrada/salida. 7
Formación Abierta

• Dispositivos de comunicaciones.

Permiten la conexión de la computadora con otras a través de una red.


Los dispositivos más importantes son modem, router, tarjeta de red, etc.

El gran problema de los dispositivos de E/S es su velocidad, son demasiado


lentos en comparación con otros elementos del sistema. Obsérvese, que los
accesos a la memoria RAM se realizan en cuestión de nanosegundos, sin
embargo, los tiempos de acceso a un elemento de almacenamiento
secundario, son del orden de entre 20 y 70 milisegundos. Estas diferencias de
velocidad y el hecho de que las aplicaciones cada vez son más interactivas,
por lo que necesitan más operaciones de E/S, hacen que el sistema de E/S
sea un auténtico cuello de botella. Por eso los sistemas operativos actuales,
cada vez dedican más esfuerzos y recursos para optimizar los mecanismos
de E/S.

Sistema de E/S

Es la parte del SO, encargada de facilitar el manejo de los


dispositivos, ofreciendo una visión lógica simplificada de los
mismos. Permitiendo que puedan ser utilizados de forma
sencilla por otros componentes o por el usuario.

El SO por tanto controla el funcionamiento de los dispositivos de E/S, con el


fin de lograr los siguientes objetivos:

• Facilitar el manejo de los dispositivos de E/S. Para ello ofrece una


interfaz entre éstos y el sistema, sencilla y fácil de utilizar.

• Optimizar la E/S del sistema. Para ello proporciona ciertos mecanismos


de incremento de prestaciones, que se estudiarán más adelante.

• Proporciona dispositivos virtuales. De esta manera se permite conectar


cualquier dispositivo físico, sin necesidad de modificar el sistema de E/S.

• Facilitar la conexión de dispositivos nuevos. Solucionando de forma


automática su instalación. Estos mecanismos de conocen como
plug&play.

8 Unidad 5. Entrada/salida.
Sistemas Operativos

5.2. CLASIFICACIÓN DE DISPOSITIVOS DE E/S

A continuación se mostrará de forma breve, el modo en que un dispositivo de


E/S se conecta a una computadora. También se verá la clasificación de estos
dispositivos, según sus métodos de acceso, tamaños, forma de
programación, etc.

5.2.1. CONEXIÓN DE UN DISPOSITIVO DE E/S

Obsérvese el esquema general conexión de periféricos a una computadora.


En él, se pueden observar los siguientes elementos:

CPU MEMORIA CONTROLADOR


GRÁFICO

BUS DEL SISTEMA

CONTROLADOR DE DISCO BUS DE EXPANSIÓN

REG. DE REG. DE REG. DE


ESTADO CONTROL DATOS

Figura 5.2. Esquema general de conexión de dispositivos E/S a una computadora

Periféricos o dispositivos de E/S

Son el componente mecánico que se conecta a la computadora (monitor,


discos, impresora, ratón, teclado, etc.).

Unidad 5. Entrada/salida. 9
Formación Abierta

Controladores de dispositivo

Se encargan de la comunicación y la transferencia de datos entre la memoria


principal y los periféricos.

Los controladores son muy variados, casi tanto como los dispositivos. Una de
las tareas que se ha intentado llevar a cabo en los últimos años, es la de
estandarizar dichos controladores. De manera que un único controlador, sea
capaz de controlar dispositivos de distintos fabricantes. Algunos ejemplos de
ello, son los dispositivos SCSI, dispositivos IDE o SATA.

El controlador, es el componente más importante desde el punto de vista del


SO. Ya que constituye la interfaz entre el dispositivo y el bus del sistema,
además de ser el único componente visible por la CPU.

Su programación se realiza a bajo nivel, proporcionando acceso directo a


registros del controlador. Los registros que casi todos los controladores
suelen tener son: registro de datos, de estado y de control.

• El registro de datos, facilita el intercambio de datos entre el periférico y


el sistema.

• El registro de estado, está compuesto por varios bits. Uno de ellos sirve
para indicar que el controlador puede transmitir un dato. En las
operaciones de lectura, indica que se ha cargado en el registro de datos
un nuevo valor, mientras que en las de escritura indica que necesita un
nuevo dato. Otros bits de este registro le sirven al controlador, para
informar de posibles errores que han ocurrido durante la última operación
de E/S.

• El registro de control, también está compuesto por varios bits, los cuales
le indican al controlador las operaciones que debe realizar el periférico.

Los controladores, también poseen una serie de características que el


sistema operativo utiliza para saber qué tipo de dispositivo se encuentra al
otro lado del controlador. Así pues, atendiendo a las características hardware
de los dispositivos, existen las siguientes categorías:

• Dirección de E/S: según el direccionamiento, los dispositivos pueden


utilizar puertos o proyectar los registros en memoria.

• Unidad de transferencia: los dispositivos suelen utilizar unidades de


transferencia de tamaño fijo, que pueden ser por caracteres o por
bloques.

10 Unidad 5. Entrada/salida.
Sistemas Operativos

• Interacción computadora-controlador: la comunicación entre


computadora y controlador se puede llevar a cabo como una operación de
E/S programada o mediante interrupciones.

5.2.2. DISPOSITIVOS SEGÚN DIRECCIÓN DE E/S

Como ya se ha comentado, según el direccionamiento, los dispositivos


pueden utilizar puertos o pueden proyectar sus registros en memoria.

Para los dispositivos que se direccionan a través de puertos, cada vez que
se instala uno de ellos, se le asigna un puerto de E/S a su controlador, una
interrupción hardware y un vector de interrupción. Para realizar operaciones
de E/S, la CPU ejecuta las instrucciones pertinentes, con la dirección del
puerto del dispositivo y una serie de parámetros que indican el registro que se
quiere manipular. Independientemente del dispositivo (teclado, ratón, monitor,
impresora, disco…) la instrucción ejecutada por la CPU es siempre la misma,
obviamente modificando el puerto y los parámetros. El problema que conlleva
este tipo de direccionamiento es que obliga a conocer las direcciones de E/S
de todos los dispositivos y a la programación de instrucciones específicas
para su manejo.

Controlador de E/S Dirección de E/S Vector de interrupción


Reloj 040 - 043 8
Teclado 060 - 063 9
Disco duro 320 - 32f 13
Impresora 378 - 37f 14
Disco externo 3f0 - 3f7 16

Figura 5.3. Ejemplo tabla de direccionamiento

El direccionamiento proyectado en memoria, asigna a cada dispositivo de


E/S un rango de direcciones de memoria, a través de las cuales escribe en
los registros del controlador. En este tipo de direccionamiento, a diferencia del
anterior, no hay instrucciones específicas de E/S, sino que se utilizan las
propias del manejo de memoria. Para optimizar las operaciones y evitar
conflictos, se reserva una zona de memoria física, exclusiva para las
direcciones de E/S.

Unidad 5. Entrada/salida. 11
Formación Abierta

5.2.3. DISPOSITIVOS DE BLOQUES O DE CARACTERES

Los dispositivos de almacenamiento secundario o terciario, como los discos,


manejan la información en unidades de tamaño fijo denominadas bloques.
Por ello este tipo de dispositivos son dispositivos de bloque. Este tipo de
acceso, se debe a restricciones hardware, ya que por ejemplo un disco está
dividido en sectores de 512 bytes, y el sector es la unidad mínima de
transferencia que el controlador puede manejar.

Por otra parte, los dispositivos de caracteres gestionan flujos de caracteres


de forma lineal, que no siguen ninguna estructura de bloque. Como ejemplo,
supóngase un controlador, teclado, el cual debe leer la tecla cada vez que se
pulsa y no por bloques. Otros dispositivos de este tipo son el modem, las
tarjetas de red, el ratón, etc.

5.2.4. DISPOSITIVOS DE E/S PROGRAMADA O POR


INTERRUPCIONES

Un controlador tiene múltiples tareas, pero las principales son:

• Ser capaz de controlar uno o varios dispositivos del mismo tipo.

• Gestionar la comunicación y el intercambio de datos entre los dispositivos


y la memoria principal o CPU.

• Puesto que la velocidad de la CPU es muy diferente a la de los


dispositivos, el controlador debe encargarse de sincronizarlos.

• Gestionar los errores que se produzcan en el acceso a los periféricos.

Existen dos formas de gestionar y sincronizar la comunicación entre los


dispositivos y la CPU, son la E/S programada y la gestionada con
interrupciones.

E/S programada

La información entre estos dos elementos (dispositivo y CPU) se transfiere


mediante un programa que ejecuta continuamente y lee o escribe los datos en
el controlador, utilizando para ello instrucciones de E/S.

12 Unidad 5. Entrada/salida.
Sistemas Operativos

Toda la responsabilidad la tiene el procesador, ya que le corresponde en su


totalidad, la tarea de comunicación de información entre él y el controlador.
En un primer paso, el procesador envía la información al controlador y a
continuación, es el controlador el que se comunica con el dispositivo. Durante
el tiempo de comunicación entre el controlador y el dispositivo, el procesador
está parado. Como ya se ha comentado, las velocidades de los periféricos
son bastante menores que las del procesador, lo que implica que éste,
deberá esperar durante periodos relativamente largos, hasta que se complete
la operación de E/S.

Como se habrá deducido, en este caso no es posible la gestión de forma


concurrente de las operaciones de E/S y otras operaciones.

El objetivo principal de esta técnica, es la de evitar que lleguen a la CPU


demasiadas interrupciones generadas por los dispositivos de E/S.

Técnicamente, el funcionamiento es el siguiente, un programa muestrea


continuamente los registros de estado de los controladores hasta que se
encuentren disponibles y cuando esto suceda, realizar las operaciones de
lectura o escritura en sus registros de datos. A continuación, debe esperar
hasta que el registro de estado indique que vuelve a estar disponible. Estas
esperas son las que normalmente implican pérdidas de ciclos de CPU.

E/S por interrupciones

El problema que planteaba la técnica de E/S programada, eran las esperas


improductivas del procesador. Con la técnica del uso de interrupciones, se
intenta evitar este inconveniente. Para ello el procesador envía la orden de
E/S al controlador de dispositivo y no espera a que éste se encuentre listo
para enviar o transmitir los datos, sino que se dedica a otras tareas hasta que
le llega una interrupción del dispositivo, la cual le indica que se ha realizado la
operación solicitada.

Casi todos los procesadores actuales tienen diseñada su arquitectura para


trabajar con interrupciones. Disponen para ello de un rango de interrupciones
(por ejemplo de 0 a 255), siendo cada una de ellas asignada a un dispositivo
o un grupo de ellos (como ocurre con un controlador USB). Algunas de estas
interrupciones se pueden inhibir de manera temporal para evitar recibir
peticiones de un dispositivo o controlador concreto. Para la gestión de estas
interrupciones, el sistema operativo, utiliza la tabla de interrupciones y una
rutina de gestión de las mismas. Ambos elementos se encuentran integrados
dentro del propio sistema operativo.

Unidad 5. Entrada/salida. 13
Formación Abierta

Con el uso de esta técnica, sí que existe la concurrencia entre la E/S y el


resto de procesos. El procesador puede estar ejecutando otro proceso,
mientras se está realizando alguna operación de E/S, lo que implica una
optimización del uso del procesador.

Técnicamente el funcionamiento es similar al de la técnica anterior, pero de


una forma asíncrona. La operación se inicia al ejecutar una operación de E/S
sobre un dispositivo, éste responde con una interrupción que indica que ha
recibido la operación. El dispositivo lleva a cabo la operación solicitada,
mientras que el procesador puede estar ejecutando otras tareas. Cuando ha
finalizado, el dispositivo devuelve otra interrupción indicando que ya ha
terminado, y en su caso, que la información solicitada ya está disponible para
el procesador.

Dentro del grupo de interrupciones no todas se tratan de igual manera, cada


una de ellas tiene una determinada prioridad. Obviamente, en caso de recibir
varias interrupciones al mismo tiempo, se tratarán primero las de mayor
prioridad, quedando el resto a la espera. Si se inhibe alguna de las
interrupciones, sus peticiones no quedan a la espera, sino que directamente
se descartan y quedan desatendidas.

14 Unidad 5. Entrada/salida.
Sistemas Operativos

5.3. MECANISMOS DE OPTIMIZACIÓN

Partiendo del hándicap que poseen los dispositivos, en cuanto a la diferencia


de velocidad con el procesador y la limitación de la funcionalidad de sus
controladores, la tecnología ha ido evolucionándolos, dotándolos de cierta
capacidad de procesamiento, memoria propia y hasta cierta posibilidad de
concurrencia en la ejecución de sus operaciones. A continuación se detallan
algunas de las mejoras o mecanismos de optimización, aplicados en la
gestión de estos dispositivos.

5.3.1. ACCESO DIRECTO A MEMORIA (DMA)

La técnica de acceso directo a memoria (DMA, Direct Memory Access), se


utiliza con el fin de incrementar la concurrencia entre la CPU y la E/S.

Normalmente, la CPU es la encargada de realizar la transferencia de datos


entre el controlador y la memoria principal, cuando sabe que hay datos
disponibles. Con la técnica de DMA, se libera a la CPU de esta tarea, siendo
el propio controlador del dispositivo el encargado de realizar la transferencia
de los datos desde el periférico a la memoria principal. Una vez que los datos
están en memoria, genera una interrupción para comunicar a la CPU que ya
tiene los datos disponibles.

Cuando el procesador necesita realizar una operación de E/S con un bloque


de datos, envía una orden al controlador con la siguiente información:

• Tipo de operación: lectura o escritura.

• El periférico al que se requiere.

• La dirección de memoria que se va a utilizar para almacenar la


información.

• El tamaño de la información a transferir.

El trabajo del procesador termina una vez emitida la orden. A continuación,


puede seguir ejecutando otras tareas, ya que es el mismo controlador el que
traslada el bloque de información desde la memoria principal al dispositivo.
Cuando el controlador termina la transferencia de los datos, genera una
interrupción, la cual indica al procesador que la operación ha terminado con
éxito.

Unidad 5. Entrada/salida. 15
Formación Abierta

Es importante destacar, que la técnica de DMA requiere algún tipo de


almacenamiento intermedio, a modo de buffer, en el controlador del
dispositivo. Esto es debido a que una vez comenzada la transferencia de
datos desde el dispositivo a la memoria principal, se debe hacer de forma
continua y a velocidad constante. Y como ya se ha expuesto, existe una gran
diferencia entre las velocidades de ambos, lo que implicaría que la
transferencia directa generase muchos problemas.

Las dos ventajas principales que proporciona la utilización de DMA son las
siguientes:

• El procesador solo interviene al inicio y al final de la operación, el resto del


tiempo puede dedicarse a otras tareas.

• El proceso que solicitó la operación de E/S se encuentra, directamente


almacenado en la memoria principal, el bloque de datos Sino sería
necesario que el sistema operativo lo copiase en dicha ubicación.

5.3.2. CANALES DE E/S CON DMA

El canal de E/S es una extensión del concepto de DMA. Un canal de E/S es


un sistema hardware de propósito especial, dedicado al manejo de la E/S con
independencia del procesador principal. Lo que significa, que tiene la
capacidad de ejecutar instrucciones de E/S, y por tanto, posee un control total
sobre estas operaciones. En un sistema informático que conste de tales
dispositivos, las instrucciones de E/S se almacenan en la memoria principal y
serán ejecutadas por un procesador de propósito específico en el mismo
canal de E/S. Así, la CPU inicia una transferencia de E/S ordenando al canal
que ejecute un programa en la memoria. Los canales de E/S pueden realizar
las transferencias de datos en serie o en paralelo.

Hay dos tipos comunes de canales de E/S:

• Canal selector: controla varios dispositivos y transfiere datos de estos


dispositivos, uno cada vez.

• Canal multiplexor: puede manejar la E/S con varios dispositivos al


mismo tiempo.

16 Unidad 5. Entrada/salida.
Sistemas Operativos

5.3.3. MEMORIA CACHÉ

La utilización de la memoria caché aplicada, principalmente, en los


controladores de dispositivos de disco, permite optimizar las operaciones de
lectura de datos. Esto se debe a que se puede disponer de los datos por
adelantado, almacenados en la memoria, evitando muchas operaciones de
búsqueda en el disco. Y sobre todo, prescindiendo los tiempos de latencia
necesarios, para que los elementos mecánicos de lectura se sitúen en la
posición donde se almacena el dato.

La manera de optimizar estas operaciones de E/S consiste en que, en lugar


de leer un sector, o un grupo de ellos, se leen pistas enteras en cada vuelta
de disco. Lo que permite almacenar en la memoria caché múltiples bloques
de datos en una única operación. Puesto que en muchos casos los datos se
almacenan de forma contigua, es probable que las próximas solicitudes de
datos, sean de los que ya están cargados en la caché, y por tanto, no es
necesario leerlos del disco. Esto implica un importante ahorro de trabajo y
tiempo. En los canales de E/S, donde suele haber mucha memoria interna, se
guardan en memoria varias pistas por cada dispositivo de E/S.

5.3.4. SOLAPAMIENTO DE OPERACIONES

Mediante el uso de los canales de E/S, los sistemas disponen de la


posibilidad de conectar varios dispositivos a un controlador. Puesto que estos
canales disponen de gran ancho de banda, los controladores pueden
programarse de manera que solapen las operaciones de búsqueda con las
operaciones de transferencia.

Puesto que las operaciones de búsqueda son lentas y que el controlador


debe esperar la respuesta, muchas veces el bus de comunicaciones
permanece vacío porque no está siendo usado por ningún dispositivo. Esto es
lo que se intenta evitar con el solapamiento de operaciones.

Por tanto, los controladores realizan ambas tareas al mismo tiempo, es decir,
programan las operaciones de búsqueda en los dispositivos y mientras
reciben la respuesta transfieren datos de otros dispositivos. Así se consigue
un paralelismo real entre las operaciones de los distintos dispositivos.

Unidad 5. Entrada/salida. 17
Formación Abierta

5.4. ESTRUCTURA DEL SISTEMA DE E/S

La estructura del sistema de entrada/salida, está formada por una serie de


capas apiladas, cada una de las cuales implementa un controlador de algún
tipo de dispositivo de entrada/salida (archivos, red, discos, etc.). Su función
principal es la de ofrecer los servicios necesarios para gestionar las
operaciones de entrada/salida del sistema.

Figura 5.4. Estructura del sistema de E/S

5.4.1. COMPONENTES DEL SISTEMA DE E/S

Cada una de las capas del sistema de entrada/salida tiene una funcionalidad
muy concreta que se detallará a continuación.

• Interfaz del sistema operativo.

Proporciona los servicios de E/S síncrona y asíncrona a las aplicaciones.


También provee una interfaz homogénea que facilita la tarea de
comunicación con los controladores.

18 Unidad 5. Entrada/salida.
Sistemas Operativos

• Sistemas de archivos.

La función de esta capa es la de proporcionar una interfaz que simplifique


el tratamiento de todos los sistemas de archivos que proporciona el
sistema operativo (FFS, SV, NTFS, FAT, etc.). Permite el acceso a los
controladores de los dispositivos de almacenamiento con un alto nivel de
abstracción, independiente del tipo de sistema de archivo tratado,
inclusive haciendo uso de accesos remotos a través de la red.

• Gestor de redes.

Al igual que el resto de capas, su función también es la de suministrar una


interfaz, que en este caso, facilite los accesos a todos los sistemas de red
que proporciona el sistema operativo (TCP/IP, Novell, etc.).
Independientemente del tipo de red que se trate, el acceso al controlador
específico ha de ser transparente.

• Gestor de bloques.

Su función, es la de trabajar con los dispositivos y sistemas de archivos,


que por su diseño funcionan a nivel de bloques. El gestor de bloques
admite únicamente operaciones a nivel de bloque e interacciona con la
caché de bloques para optimizar la E/S.

• Gestor de caché.

Su función es la gestionar el almacenamiento intermedio denominado,


memoria caché, con el fin de mejorar y/o agilizar las operaciones de
entrada/salida realizadas por los distintos dispositivos de E/S de tipo
bloque.

• Manejadores de dispositivo.

Su función consiste en proporcionar operaciones de alto nivel sobre los


dispositivos, las cuales traducen internamente a operaciones de control de
más bajo nivel específicas de cada dispositivo. Como ya se ha comentado
existen dos formas de comunicación entre los manejadores y los
dispositivos, a través de puerto o mediante la utilización de zonas de
memoria especiales.

Unidad 5. Entrada/salida. 19
Formación Abierta

Cada una de las capas o componentes anteriores, se contempla como una


parte de la estructura del sistema operativo. Habitualmente los sistemas
operativos permiten realizar modificaciones de forma dinámica, mediante las
cuales se puede reemplazar, añadir o quitar manejadores de dispositivos. Por
otra parte, lo que normalmente no se permite a las aplicaciones de usuario, es
el acceso de forma directa a los dispositivos. Esto implicaría una falta total de
control y de integridad de las operaciones, por lo que es obligatorio acceder a
través de la interfaz de llamadas al sistema operativo.

20 Unidad 5. Entrada/salida.
Sistemas Operativos

5.5. SOFTWARE DE ENTRADA/SALIDA

Siguiendo con el estudio del sistema de E/S y habiendo examinado la


arquitectura hardware del mismo, el siguiente paso es conocer su parte
software.

Al igual que su arquitectura, el software de E/S también se organiza en capas,


las cuales suelen estar emparejadas con sus homologas en la parte hardware
del sistema.

APLICACIÓN

SERVICIOS

GEST. ARCHIVOS
Software de E/S
GEST. BLOQUES
independiente
del dispositivo GEST. CACHÉ

MANEJADOR
DISPOSITIVO

Software de E/S
dependiente del
dispositivo MANEJADOR
INTERRUPCIÓN

CONTROLADOR

Hardware

Figura 5.5. Estructura de capas del software de E/S

En el momento en que una aplicación de usuario solicita alguna operación de


entrada/salida al sistema operativo, comienza el trabajo de este conjunto de
capas software para conseguir ejecutar la tarea solicitada. El sistema
operativo comienza por preparar dicha operación y bloquear al proceso
solicitante, hasta que al final reciba la interrupción del controlador del
dispositivo, indicando que se ha completado la operación.

Unidad 5. Entrada/salida. 21
Formación Abierta

Una operación de E/S de este tipo, requiere que entren en acción las
siguientes capas:

• Manejador de interrupciones.

• Manejador de dispositivos.

• Software de E/S independiente de dispositivos.

• Interfaz del sistema operativo.

A continuación, se detallarán cada uno de estos componentes.

5.5.1. MANEJADORES DE INTERRUPCIÓN

Obviamente su función es la gestionar las interrupciones, pero en concreto se


encarga de las interrupciones que generan los controladores de dispositivos.
Éstos originan la interrupción, una vez que tienen los datos disponibles ya sea
para transmitirlos o para escribirlos en memoria en el caso de DMA.

El tratamiento de la interrupción implica ejecutar el manejador de


interrupciones correspondiente, el cual almacena el estado de los registros,
comunica el evento al manejador del dispositivo y reanuda la ejecución del
proceso.

Otra función importante del manejador, en el caso de interrupciones muy


repetitivas o con poco volumen de información, consiste en ir registrando los
eventos de alguna manera, que puede ser aumentando alguna variable
(como en el caso del reloj) o almacenando la información en un buffer (sería
el caso del teclado). De esta forma, la información queda almacenada y
únicamente se realiza la notificación al manejador, cada cierto número de
ocurrencias del evento o después de cierto tiempo. Así se evita un continuo
tratamiento de interrupciones, las cuales pueden ser gestionadas en bloques
de varias ocurrencias.

5.5.2. MANEJADORES DE DISPOSITIVOS

Los manejadores de dispositivos son propios de cada dispositivo de E/S, o


clase de dispositivos, es decir, cada dispositivo lleva asociado su propio
manejador.

22 Unidad 5. Entrada/salida.
Sistemas Operativos

Los manejadores están formados por:

• El código independiente del dispositivo: es la parte general del


tratamiento E/S, que se utiliza para poder proveer al nivel superior del
sistema operativo una interfaz de alto nivel, con una abstracción total del
dispositivo.

• El código dependiente del dispositivo: es la parte de código específica


de dicho dispositivo, necesaria para utilizar el controlador del dispositivo a
través de sus registros y órdenes.

Los manejadores reciben las peticiones formuladas en alto nivel, las cuales
son tratadas por la parte independiente del dispositivo. Esta parte se
encarga de la traducción a un nivel funcional comprensible por el
controlador del dispositivo. Una vez traducidas, se envían al controlador y
se espera a la comunicación de que la operación ha concluido
satisfactoriamente.

Figura 5.6. Diagrama de flujo del funcionamiento del manejador.


(J.Carretero, 2001])

Unidad 5. Entrada/salida. 23
Formación Abierta

Las operaciones de entrada/salida que van dirigidas a un manejador, se van


almacenando en su cola de operaciones. El manejador inspecciona cada
cierto tiempo esta cola, extrayendo de ella las peticiones existentes según la
política elegida (FIFO, con prioridades, etc.). A continuación, “traduce” y envía
la orden al controlador, pudiendo quedar el manejador bloqueado a la espera
de una interrupción, o no, en función de la velocidad de respuesta del
dispositivo. Una vez recibida la respuesta de fin de operación, controla la
posible existencia de errores, e indica de igual modo al nivel superior el fin de
la operación.

5.5.3. SOFTWARE INDEPENDIENTE DEL DISPOSITIVO

Dentro de los componentes del sistema de E/S, la parte correspondiente al


software independiente del dispositivo, es la más extensa. La principal función
de esta capa de software es ejecutar las funciones de E/S que son comunes a
todos los dispositivos a través de una interfaz uniforme. Otras funciones que
proporciona son el acceso a nivel de bloques o caracteres,
almacenamiento intermedio, gestión de los dispositivos, planificación de
la E/S y control de errores. Para llevar a cabo estas funciones, esta capa
está compuesta por el sistema de archivos y el de gestión de red, el gestor de
bloques, la caché de bloques y una parte de los manejadores de dispositivo.

Acceso

A nivel del acceso, el tamaño de los bloques también debe ser homogéneo y
transparente, por ello se hace uso de tamaños de bloque comunes, lo que
permite ocultar el tamaño real de información con la que trabaja cada
dispositivo. Así pues, en el caso de dispositivos que trabajen por bloques,
queda oculto el tamaño real del bloque que gestiona cada uno de los
dispositivos. Y en el caso de dispositivos que trabajen a nivel de carácter, se
ocultaría si realmente trabajan con un carácter cada vez, como el teclado, o
trabajan con flujos de caracteres, como el modem o las redes.

Almacenamiento intermedio

Como ya se ha comentado anteriormente, con el fin de optimizar la E/S y para


gestionar de una forma más eficiente las peticiones de usuario, el software de
E/S proporciona almacenamiento intermedio en la memoria del sistema
operativo. Así se optimizan la E/S, evitando accesos a los dispositivos y se
ocultan las diferencias de velocidad con que cada dispositivo y usuario
manejan los datos.

24 Unidad 5. Entrada/salida.
Sistemas Operativos

Gestión de dispositivos

En cuanto a la gestión de los dispositivos se refiere, realiza tres servicios


clave, que son:

• Nombrado.
Permite traducir los nombres de usuario a identificadores del sistema. Por
ejemplo, en UNIX, cada dispositivo tiene un nombre (por ejemplo:
/dev/cdrom) que se traduce en un único identificador interno (o nodo-i),
que a su vez se traduce en un único número de dispositivo principal (clase
de dispositivo) y secundario (elemento de la clase).

• Protección.
Cada dispositivo tiene asociada una información de protección (en UNIX
mediante 3 bits para dueño, grupo y mundo) y este nivel de software
asegura que los requisitos de protección se cumplen.

• Control de acceso.
Para que un dispositivo dedicado, como una impresora, sea accedido por
un único usuario cada vez.

Planificación de entrada/salida

Planificación de E/S, es el término utilizado para describir el método mediante


el cual los sistemas operativos deciden el orden por el cual se van tratar las
operaciones de E/S. Es una de las principales funciones llevadas a cabo por
el sistema de E/S. Para llevar a cabo esta planificación, se hace uso de una
serie de colas, en concreto una cola para cada clase de dispositivo. La cual
se gestiona según la política de planificación estipulada, que puede ser
distinta en cada una de ellas, e incluso si es una cola con niveles de prioridad,
puede serlo para cada nivel.

Normalmente las operaciones se gestionan a través de colas con distintos


niveles de prioridad, debido a que dentro de las operaciones de E/S, existen
algunas operaciones particularmente urgentes o prioritarias.

Control de errores

Por último, este nivel proporciona gestión de errores para aquellos casos que
el manejador de dispositivo no puede solucionar. Un error transitorio de
lectura de un bloque se resuelve en el manejador reintentando su lectura. Un
error permanente de lectura no puede ser resuelto y debe ser comunicado al
usuario para que tome las medidas adecuadas.

Unidad 5. Entrada/salida. 25
Formación Abierta

En general, todos los sistemas operativos incluyen alguna forma de control de


errores internos y de notificación al exterior en caso de que esos errores no
se puedan resolver. Sin embargo, es importante resaltar que los sistemas
operativos son cada vez más robustos y cada vez incluyen más control y
reparación de errores, para lo cual usan métodos de paridad, checksums,
códigos correctores de error, etc. Además, la información que proporcionan
cuando hay un error es cada vez mayor.

26 Unidad 5. Entrada/salida.
Sistemas Operativos

5.6. ALMACENAMIENTO SECUNDARIO

El almacenamiento secundario, es el conjunto de dispositivos y medios de


almacenamiento, que conforman el subsistema de memoria de una
computadora, junto a la memoria principal. El almacenamiento secundario se
caracteriza por ser masivo y permanente (no volátil), a diferencia de la
memoria RAM que es volátil, y poseer mayor capacidad de memoria que la
memoria principal, con la desventaja de ser más lenta que ésta. El objetivo
de este tipo de almacenamiento, es el de guardar los programas y datos en
dispositivos rápidos, de forma que sean fácilmente accesibles a las
aplicaciones a través del sistema de archivos.

En la actualidad, se usan principalmente tres tecnologías en los dispositivos


de almacenamiento secundario:

• Magnética: disco duro, disquete y cintas magnéticas.

• Óptica: CD, DVD, etc. (Algunos dispositivos combinan ambas


tecnologías, es decir, son dispositivos de almacenamiento híbridos, por
ejemplo, discos Zip.).

• Tecnología Flash: Tarjetas de Memorias Flash.

Las principales características del almacenamiento secundario son:

• Gran capacidad de almacenamiento.

• No se pierde información a falta de alimentación.

• Altas velocidades de transferencia.

• Mismo formato de almacenamiento que en memoria principal.

• Es independiente de la CPU y de la memoria principal. Debido a esto, los


dispositivos de almacenamiento secundario, también son conocidos como
dispositivos de almacenamiento externo.

Unidad 5. Entrada/salida. 27
Formación Abierta

El sistema de almacenamiento secundario, está compuesto principalmente


por dos elementos:

• Discos.

El almacenamiento secundario se lleva a cabo casi exclusivamente sobre


discos, por lo que en los puntos siguientes se detallará su estructura y sus
métodos de gestión.

• Manejadores de disco.

Controlan todas las operaciones que se hacen sobre los discos, entre las
que son especialmente importantes las cuestiones de planificación de
peticiones a disco.

5.6.1. DISCOS

Son el dispositivo básico de almacenamiento secundario. Como ya se ha


comentado, se caracterizan por ser masivos en cuanto a la capacidad de
almacenamiento de información y no volátiles en cuanto al tiempo que
mantienen dichos datos almacenados.

Atendiendo a la tecnología de fabricación se pueden diferencia tres tipos de


discos:

• Discos duros.

También denominado disco rígido (en inglés Hard Disk Drive HDD) es un
dispositivo electromecánico, no volátil, que conserva la información aun
con la pérdida de energía, que emplea un sistema de grabación
magnética digital.

• Discos ópticos (CD, DVD, etc.).

Son un formato de almacenamiento de información digital, que consiste en


un disco circular en el cual la información se codifica, se guarda y
almacena, haciendo unos surcos microscópicos con un láser sobre las
caras planas que lo componen que suele ser de aluminio. El acceso a los
datos, se realiza cuando esta superficie es iluminada con un haz de láser
generado por un diodo láser dentro de la unidad de disco óptico la cual
hace girar el disco a velocidades en torno a 200 RPM a 4000 RPM o más,
dependiendo de las características del mismo.

28 Unidad 5. Entrada/salida.
Sistemas Operativos

• Discos extraíbles y flash.

Los discos extraíbles (disquetes, discos ZIP, etc.), aunque se encuentran


en desuso, se comportan de forma similar a los discos duros, pero con
menor capacidad. La única ventaja es la portabilidad de los mismos.
También se pueden incluir dentro de este grupo, las memorias flash, por
su concepto de almacenamiento secundario, portátil y, según avanza la
tecnología, cada vez más masivo. Aunque en realidad, su funcionamiento
tiene poco que ver con el de los otros discos vistos anteriormente; se
asemeja más al de la memoria principal.

Atendiendo a la interfaz de su controlador, los discos también se pueden


clasificar en diferentes tipos:

• Dispositivos SCSI.

Acrónimo inglés Small Computers System Interface (Sistema de Interfaz


para Pequeñas Computadoras), es una interfaz estándar para la
transferencia de datos entre distintos dispositivos del bus de la
computadora. En el pasado, era muy popular entre todas las clases de
ordenadores. Actualmente sigue siendo popular en lugares de trabajo de
alto rendimiento, servidores y periféricos de gama alta.

• Dispositivos IDE (también denominados ATA).


Acrónimo de Integrated Device Electronics, controla los dispositivos de
almacenamiento masivo de datos como los discos duros y además añade
dispositivos como las unidades CD-ROM. Es una interfaz muy extendida
debido a su bajo coste y alta efectividad, aunque está siendo sustituida
progresivamente por los de tecnología SATA.

• Dispositivos SATA.
Acrónimo de Serial Advanced Technology Attachment, es otro tipo de
interfaz de transferencia de datos entre la placa base y algunos
dispositivos de almacenamiento, como puede ser el disco duro, u otros
dispositivos de altas prestaciones que están siendo todavía desarrollados.
Las ventajas sobre los dispositivos IDE, es que proporciona mayores
velocidades, mejor aprovechamiento cuando hay varios discos, mayor
longitud del cable de transmisión de datos y capacidad para conectar
discos en caliente (con la computadora encendida).

Unidad 5. Entrada/salida. 29
Formación Abierta

• Dispositivos USB.
El Universal Serial Bus (bus universal en serie) es un puerto que sirve
para conectar periféricos a un ordenador. En el caso de la conexión a
través de este puerto de discos duros, es poco probable que el USB
reemplace completamente a los buses (el ATA (IDE) y el SCSI), pues el
USB tiene un rendimiento más lento que esos otros estándares. Sin
embargo, el USB tiene una importante ventaja en su habilidad de poder
instalar y desinstalar dispositivos sin tener que abrir el sistema, lo cual es
útil para dispositivos de almacenamiento externo. Hoy en día, una gran
parte de los fabricantes ofrece dispositivos USB portátiles que ofrecen un
rendimiento casi indistinguible en comparación con los ATA (IDE). Por el
contrario, el nuevo estándar Serial ATA permite tasas de transferencia de
hasta aproximadamente 150/300 MB por segundo, y existe también la
posibilidad de extracción en caliente e incluso una especificación para
discos externos llamada eSATA.

A continuación, se detallará la estructura, tanto física como lógica de un disco.


En concreto estará centrada en los discos duros, ya que son, desde el punto
de vista de los sistemas operativos, el dispositivo de almacenamiento
secundario principal.

Estructura física
Dentro de un disco duro hay uno o varios platos (entre 2 y 4 normalmente,
aunque hay hasta de 6 ó 7 platos), que son discos de aluminio o cristal
concéntricos y que giran todos a la vez. El cabezal (dispositivo
electromagnético de lectura y escritura) es un conjunto de brazos alineados
verticalmente que se mueven hacia dentro o fuera según convenga, todos a la
vez. En la punta de dichos brazos están las cabezas de lectura/escritura, que
gracias al movimiento del cabezal pueden leer tanto zonas interiores como
exteriores del disco.

Cada plato tiene dos caras, y es necesaria una cabeza de lectura/escritura


para cada cara (no es una cabeza por plato, sino una por cara). Si se mira la
imagen de la parte baja de la figura 5.7, a primera vista se ven cuatro brazos,
uno para cada plato. En realidad, cada uno de los brazos es doble, y contiene
dos cabezas: una para leer la cara superior del plato, y otra para leer la cara
inferior. Las cabezas de lectura/escritura nunca tocan el disco, sino que pasan
muy cerca (hasta a 3 nanómetros) ó 3 millonésimas de milímetro, debido a
una finísima película de aire que se forma entre éstas y los platos. Si alguna
de las cabezas llega a tocar una superficie de un plato, causaría muchos
daños en él, rayándolo gravemente, debido a lo rápido que giran los platos
(uno de 7200 revoluciones por minuto se mueve a 129 km/h en el borde de un
disco de 3,5 pulgadas).

30 Unidad 5. Entrada/salida.
Sistemas Operativos

Figura 5.7. Estructura física de un disco duro

El disco, por tanto, está organizado en platos, y en la superficie de cada una


de sus dos caras existen pistas (TRACKS) concéntricas, como surcos de un
disco de vinilo, y las pistas se dividen en sectores (SECTORS). Las cabezas
junto con el motor de precisión que las maneja, permiten leer o escribir los
datos almacenados en una pista y un sector concreto.

El concepto cilindro (CYLINDER) es un parámetro de organización. Cada


cilindro de un disco, está formado por las pistas concéntricas de cada cara de
cada plato que están situadas unas justo encima de las otras, de modo que
las cabezas no tienen que moverse para acceder a las diferentes pistas de un
mismo cilindro.

También existe la figura de cluster, que es un conjunto de sectores


consecutivos dentro de una misma pista.

Unidad 5. Entrada/salida. 31
Formación Abierta

Figura 5.8. Estructura de un disco

Conocidas estas características de un disco, su capacidad total se calcula


como:

Capacidad = cilindros x pistas x sectores x tamaño sector

Existen cierto parámetros, asociados a la estructura física del disco, que son
de vital importancia para el manejador, ya que los utiliza para optimizar las
operaciones de E/S. Estos parámetros son:

• Tiempo de búsqueda: lo que se tarda en ir de una pista a otra.

• Tiempo de latencia: el tiempo medio que tardan en llegar los datos


debajo de las cabezas, una vez posicionadas en la pista.

De una forma aproximada, se puede calcular el tiempo de acceso con un


desplazamiento de n cilindros como:

Tº acceso = n x Tº búsqueda + Tº latencia + Tº transferencia

Donde:

ƒ Tiempo medio de acceso: tiempo medio que tarda la aguja en


obtener los datos de la pista y el sector deseado; es la suma del
Tiempo medio de búsqueda (situarse en la pista), Tiempo de
lectura/escritura y la Latencia media (situarse en el sector).

32 Unidad 5. Entrada/salida.
Sistemas Operativos

ƒ Tiempo medio de búsqueda: tiempo medio que tarda la aguja en


situarse en la pista deseada; es la mitad del tiempo empleado por la
aguja en ir desde la pista más periférica hasta la más central del
disco.

ƒ Tiempo de lectura/escritura: tiempo medio que tarda el disco en


leer o escribir nueva información: Depende de la cantidad de
información que se quiere leer o escribir, el tamaño de bloque, el
número de cabezales, el tiempo por vuelta y la cantidad de sectores
por pista.

ƒ Tiempo de latencia media: tiempo medio que tarda la aguja en


situarse en el sector deseado; es la mitad del tiempo empleado en
una rotación completa del disco.

Estructura lógica

Durante la operación de formateo físico del disco duro, una de las tareas que
se realiza, es la de crear un sector especial, denominado sector 0, que se
reserva para incluir en él la información de distribución lógica del disco en
subconjuntos denominados volúmenes o particiones. Esta información se
guarda en una estructura denominada tabla de particiones. Una partición es
una porción contigua de disco delimitada por un sector inicial y final.

Existen tres tipos de particiones:

• Partición primaria.

Son las divisiones crudas o primarias del disco. Un disco físico


completamente formateado consiste, en realidad, en una partición
primaria que ocupa todo el espacio del disco y posee un sistema de
archivos. A este tipo de particiones, prácticamente cualquier sistema
operativo puede detectarlas y asignarles una unidad, siempre y cuando el
sistema operativo reconozca su formato (sistema de archivos).

• Partición extendida.

Es otro tipo de partición que actúa como una partición primaria; sirve para
contener infinidad de unidades lógicas en su interior. Solo puede existir
una partición de este tipo por disco, y solo sirve para contener particiones
lógicas. Por lo tanto, es el único tipo de partición que no soporta un
sistema de archivos directamente.

Unidad 5. Entrada/salida. 33
Formación Abierta

• Partición lógica.

Ocupa una porción de la partición extendida o la totalidad de la misma, la


cual se ha formateado con un tipo específico de sistema de archivos
(FAT32, NTFS, ext2...) y se le ha asignado una unidad, así el sistema
operativo reconoce las particiones lógicas o su sistema de archivos.

Cada partición puede tener su propio sistema de archivos, pero el tema de los
sistemas de archivos se tratará en detalle en la próxima unidad.

5.6.2. POLÍTICAS DE PLANIFICACIÓN DE DISCO

Las políticas de planificación de los discos duros, se basan en minimizar u


optimizar el movimiento de las cabezas para llegar hasta los datos
solicitados. La elección de una política u otra implicará unas grandes
diferencias en el rendimiento del disco y todo se reduce a elegir
correctamente el orden, en que se van a atender las peticiones de
operaciones de E/S.

El manejador de disco es el responsable de llevar a cabo la política de


planificación adecuada dependiendo del tipo de petición, de la posición de las
cabezas del disco y de la posición de la petición a realizar, teniendo en cuenta
fundamentalmente el tiempo de búsqueda del disco. Sin embargo, es
responsabilidad del diseñador elegir la política, o políticas, de planificación
existentes en el sistema, para lo cual debe conocer las ventajas e
inconvenientes de las más populares, algunas de las cuales se describen a
continuación.

Política FCFS (First Come First Served) o FIFO

Como ya conoce, la política FIFO implica que las peticiones se atienden en el


mismo orden en el que llegaron. Esto significa que no hay posibilidad de
optimización en el uso de esta política, ya que se basa íntegramente en el
orden de llegada.

Un ejemplo para esta política seria el siguiente:

Las cabezas del disco se encuentran inicialmente en el cilindro


6 y hay peticiones para acceder a los cilindros 20, 2, 56 y 7.

Desplazamientos = (20 - 6) + (20 - 2) + (56 - 2) + (56 - 7) = 135

34 Unidad 5. Entrada/salida.
Sistemas Operativos

Política SSF (Shortest Seek First)

Esta política ya realiza cierta optimización de los desplazamientos, ya que


atiende primero a las peticiones más cercanas desde la posición actual. Esto
implica una ordenación constante de las peticiones que se encuentran en
espera.

Con el mismo ejemplo anterior, ahora la secuencia de accesos


sería 7, 2, 20 y 56. Y el resultado sería:

Desplazamientos = (7 - 6) + (7 - 2) + (20 - 2) + (56 - 20) = 60

Como se puede observar, en este caso se han reducido a más de la mitad, el


número de desplazamientos necesarios. Aunque por otra parte, esta política
posee un gran inconveniente, que es la posibilidad de inanición de peticiones
que se encuentren muy alejadas, en un momento en el que estén a la espera
muchos accesos a posiciones próximas. Por lo que esta petición lejana,
quedaría sin atender por mucho tiempo.

Política SCAN

Junto con otra serie de políticas y sus variantes se denominan políticas del
ascensor, ya que es la política que sigue normalmente este tipo de
mecanismos en edificios altos.

En concreto la política SCAN, consiste en ir moviendo las cabezas del disco


de fuera a dentro y de dentro a fuera, e ir atendiendo a todas las peticiones en
cada una de las direcciones.

Con el mismo ejemplo anterior, ahora la secuencia de accesos


sería 20, 2, 56 y 7. Y asumiendo que el disco tiene 70 cilindros
el resultado sería:

Desplazamientos = (7 - 6) + (20 - 7) + (56 - 20) + (70 - 56) +


(56 - 2) = 118

El número de desplazamientos no mejora el conseguido por la política SSF.


Esto es debido a que esta política SCAN, es muy eficaz si las peticiones se
distribuyesen uniformemente por todo el disco, cosa que normalmente no
ocurre.

Unidad 5. Entrada/salida. 35
Formación Abierta

Por ello se mejoró esta política, pensando que como en los ascensores, es
mucho más costoso ir de arriba abajo o viceversa, parando que sin parar. En
un disco cuesta casi lo mismo ir del principio al final, que de una pista a otra.
Por ello se creó la política CSCAN.

Política CSCAN (Cyclic Scan)

El funcionamiento de esta política consiste en ir moviendo las cabezas del


principio al final del disco, atendiendo las peticiones. Cuando llega al final
vuelve, pero sin atender ninguna petición, hasta que llega al inicio y vuelve a
empezar.

En dispositivos con muchas peticiones, tiene mejor rendimiento que


cualquiera de las anteriores.

Con el ejemplo anterior:

Desplazamientos = (7 - 6) + (20 - 7) + (56 - 20) + (70 - 56) + 70


+ (2 - 0) = 136

El resultado es engañoso, ya que como se ha dicho, es eficaz en sistemas


con muchas peticiones. En este caso obsérvese que el aumento proviene de
la última petición y por el poco volumen de las mismas.

Política LOOK

Es la política obtenida de mejorar la anterior CSCAN. Se mejora en el


aspecto, de que no es necesario llegar hasta el final del disco, basta con
llegar a la última petición en ese sentido y regresar sin atender peticiones.

Así, con el ejemplo anterior se obtiene el siguiente resultado:

Desplazamientos = (7 - 6) + (20 - 7) + (56 - 20) + (56 - 2) = 104

Existen otros tipos de políticas, pero son mucho más específicas de sistemas
en los que la respuesta tiene un tiempo límite (deadline) o sistemas de tiempo
real. Algunas de estas políticas son EDF (Earliest Dead Line), SCAN_EDF y
SCAN-RT.

36 Unidad 5. Entrada/salida.
Sistemas Operativos

5.6.3. FIABILIDAD Y TOLERANCIA A FALLOS

El sistema de E/S es quizás al que más se debe exigir en cuanto a fiabilidad


se refiere, ya que trabaja continuamente con información, realizando
operaciones de tratamiento y almacenamiento, que requieren minimizar la
existencia de fallos de ningún tipo.

Las principales técnicas utilizadas para obtener la máxima fiabilidad son:

• Códigos correctores de error: existen en las cabeceras y colas de los


sectores.

• Operaciones fiables: su corrección se puede verificar antes de dar el


resultado.

• Redundancia: tanto en datos replicados, como en código para detectar


errores. Esta técnica se realiza mediante el uso de dispositivos RAID.

• Redundancia hardware: en algunos sistemas se permite conectar un


disco a través de dos controladores.

Dispositivos RAID

Los dispositivos RAID (Redundant Array of Independent Disks), utilizan un


conjunto de discos para almacenar información y otro conjunto para
almacenar información de paridad del conjunto anterior. Físicamente se ve
como un único dispositivo con un controlador para todos los discos. Es el
controlador, el encargado de distribuir los discos de forma transparente para
el sistema de E/S.

Existen hasta siete niveles RAID, pero únicamente los cinco primeros son
operativos.

• RAID 1.
Crea una copia exacta (o espejo) de un conjunto de datos en dos o más
discos. Esto resulta útil cuando el rendimiento en lectura es más
importante que la capacidad. Un conjunto RAID 1 solo puede ser tan
grande como el más pequeño de sus discos. Un RAID 1 clásico consiste
en dos discos en espejo, lo que incrementa exponencialmente la fiabilidad
respecto a un solo disco; es decir, la probabilidad de fallo del conjunto es
igual al producto de las probabilidades de fallo de cada uno de los discos
(pues para que el conjunto falle es necesario que lo hagan todos sus
discos).

Unidad 5. Entrada/salida. 37
Formación Abierta

• RAID 2.

Divide los datos a nivel de bits en lugar de a nivel de bloques y usa un


código de Hamming para la corrección de errores. Los discos son
sincronizados por la controladora para funcionar al unísono. Éste es el
único nivel RAID original que actualmente no se usa. Permite tasas de
trasferencias extremadamente altas.

• RAID 3.

Usa una división a nivel de bytes con un disco de paridad dedicado. El


RAID 3 se usa rara vez en la práctica. Uno de sus efectos secundarios es
que normalmente no puede atender varias peticiones simultáneas, debido
a que por definición cualquier simple bloque de datos se dividirá por todos
los miembros del conjunto, residiendo la misma dirección dentro de cada
uno de ellos. Así, cualquier operación de lectura o escritura exige activar
todos los discos del conjunto. En el ejemplo del gráfico, una petición del
bloque «A» formado por los bytes A1 a A6 requeriría que los tres discos
de datos buscaran el comienzo (A1) y devolvieran su contenido. Una
petición simultánea del bloque «B» tendría que esperar a que la anterior
concluyese.

38 Unidad 5. Entrada/salida.
Sistemas Operativos

• RAID 4.

Un RAID 4 usa una división a nivel de bloques con un disco de paridad


dedicado. Necesita un mínimo de 3 discos físicos. El RAID 4 es parecido
al RAID 3, excepto porque divide a nivel de bloques en lugar de a nivel de
bytes. Esto permite que cada miembro del conjunto funcione
independientemente cuando se solicita un único bloque. Si la controladora
de disco lo permite, un conjunto RAID 4 puede servir varias peticiones de
lectura simultáneamente. En principio también sería posible servir varias
peticiones de escritura simultáneamente, pero al estar toda la información
de paridad en un solo disco, éste se convertiría en el cuello de botella del
conjunto. En el gráfico del ejemplo anterior, una petición del bloque «A1»
sería servida por el disco 0. Una petición simultánea del bloque «B1»
tendría que esperar, pero una petición de «B2» podría atenderse
concurrentemente.

• RAID 5.

Un RAID 5 usa una división de datos a nivel de bloques distribuyendo la


información de paridad entre todos los discos miembros del conjunto. El
RAID 5 ha logrado popularidad gracias a su bajo coste de redundancia.

Unidad 5. Entrada/salida. 39
Formación Abierta

Generalmente, el RAID 5 se implementa con soporte hardware para el


cálculo de la paridad. En el gráfico del ejemplo anterior, una petición de
lectura del bloque «A1» sería servida por el disco 0. Una petición de
lectura simultánea del bloque «B1» tendría que esperar, pero una petición
de lectura de «B2» podría atenderse concurrentemente, ya que sería
servida por el disco 1.

40 Unidad 5. Entrada/salida.
Sistemas Operativos

♦ RESUMEN

• Los dispositivos de E/S se pueden dividir en tres grandes grupos:


dispositivos de interfaz de usuario, dispositivos de almacenamiento y
dispositivos de comunicaciones.

• El sistema de E/S se define como la parte del SO, encargada de facilitar el


manejo de los dispositivos, ofreciendo una visión lógica simplificada de los
mismos. Permitiendo que puedan ser utilizados de forma sencilla por otros
componentes o por el usuario.

• Existen distintos tipos de dispositivos, clasificados según sus métodos de


acceso, tamaños, forma de programación,etc. Según el método de
direccionamiento los dispositivos pueden utilizar puertos o pueden
proyectar sus registros en memoria. También pueden transmitir
información a nivel de bloques o caracteres. Y por último, pueden
programar las operaciones de E/S o tratarlas a través de interrupciones.

• Los principales mecanismos de optimización aplicados a los sistemas de


entrada/salida son: el acceso directo a memoria (DMA), el uso de canales
de E/S, el uso de memoria caché o el solapamiento de operaciones.

• Los componentes principales del sistema de E/S son: el interfaz del


sistema operativo, el sistema de archivos, el gestor de redes, el gestor de
bloques, el gestor de caché y los manejadores de dispositivo.

• Los distintos tipos de almacenamiento secundario se pueden clasificar en


función de su tecnología en magnéticos, ópticos o dispositivos flash. Y
según la interfaz de su controlador algunos tipos son: SCSI, IDE, SATA o
USB.

• De un disco duro, se debe conocer, su estructura física, su estructura


lógica y los cálculos de parámetros como capacidad o tiempo de acceso.

• Las políticas de planificación de los discos duros, se basan en minimizar u


optimizar el movimiento de las cabezas para llegar hasta los datos
solicitados. La elección de una política u otra implicará unas grandes
diferencias en el rendimiento del disco y todo se reduce a elegir
correctamente el orden, en que se van a atender las peticiones de
operaciones de E/S.

Unidad 5. Entrada/salida. 41
Formación Abierta

• Entre las políticas de planificación de acceso a disco más importantes


están:

ƒ FCFS: las peticiones se atienden en el mismo orden en el que


llegaron.

ƒ SSF: atiende primero a las peticiones más cercanas desde la posición


actual.

ƒ SCAN: consiste en ir moviendo las cabezas del disco de fuera a


dentro y de dentro a fuera, e ir atendiendo a todas las peticiones en
cada una de las direcciones.

ƒ CSCAN: el funcionamiento de esta política consiste en ir moviendo las


cabezas del principio al final del disco, atendiendo las peticiones.
Cuando llega al final vuelve pero sin atender ninguna petición, hasta
que llega al inicio y vuelve a empezar.

ƒ LOOK: es la política obtenida de mejorar la anterior CSCAN, Se


mejora en el aspecto, de que no es necesario llegar hasta el final del
disco, basta con llegar a la última petición en ese sentido y regresar si
atender peticiones.

• Los dispositivos RAID (Redundant Array of Independent Disks), utilizan un


conjunto de discos para almacenar información y otro conjunto para
almacenar información de paridad del conjunto anterior. Por ello se
consideran dispositivos de alta fiabilidad y tolerancia a fallos.

42 Unidad 5. Entrada/salida.
SISTEMAS
OPERATIVOS

ARCHIVOS Y
DIRECTORIOS
Sistemas Operativos

ÍNDICE
♦  OBJETIVOS................................................................................................3 

♦  INTRODUCCIÓN ........................................................................................5 
6.1.  El sistema de archivos .........................................................................7 
6.2.  Archivos ................................................................................................8 
6.2.1.  Nombres de archivos .....................................................................10 
6.2.2.  Estructura de archivos ...................................................................11 
6.2.3.  Métodos de acceso ........................................................................12 
6.3.  Directorios...........................................................................................14 
6.3.1.  Estructura de directorios ................................................................15 
6.3.2.  Nombres de directorios ..................................................................18 
6.4.  Servicios del sistema de archivos .....................................................22 
6.4.1.  Servicios para archivos ..................................................................22 
6.4.2.  Servicios para directorios ...............................................................23 
6.5.  Gestión de almacenamiento secundario...........................................25 
6.5.1.  Asignación contigua .......................................................................25 
6.5.2.  Asignación enlazada ......................................................................27 
6.5.3.  Asignación FAT .............................................................................28 
6.5.4.  Asignación indexada ......................................................................28 
6.6.  Seguridad del sistema de archivos ...................................................30 
6.6.1.  Integridad del sistema de archivos .................................................30 
6.6.2.  Fiabilidad y recuperación ...............................................................31 
6.6.3.  Accesos al sistema de archivos .....................................................32 
6.6.4.  Identificación de usuarios...............................................................34 
RESUMEN.....................................................................................................37 

Unidad 6. Archivos y directorios. 1


Sistemas Operativos

♦ OBJETIVOS

• Conocer qué es y para qué se utiliza el sistema de archivos dentro de un


sistema operativo.

• Saber qué elementos componen el sistema de archivos.

• Conocer la definición de archivo, así como los atributos asociados a los


mismos.

• Saber cómo es la estructura de los archivos en algunos sistemas


operativos.

• Saber cómo gestiona el sistema la asignación de nombres a los archivos.

• Conocer los distintos métodos de acceso a archivos.

• Conocer la definición de directorio, así como las diferencias y semejanzas


con los archivos.

• Conocer y diferenciar los distintos tipos de estructuras que puede adoptar


un conjunto de directorios y archivos.

• Saber cómo gestiona el sistema la asignación de nombres a los


directorios, así como su interpretación.

• Conocer los distintos servicios básicos que proporciona el sistema, tanto


para archivos, como para directorios.

• Conocer cómo se gestiona el almacenamiento secundario, en concreto,


los diferentes métodos de asignación de espacio en disco, para el
almacenaje de archivos.

Unidad 6. Archivos y directorios. 3


Formación Abierta

• Saber cuáles son los problemas de seguridad e integridad a los que se


debe enfrentar el sistema de archivos.

• Conocer qué son los métodos de recuperación.

• Conocer algunos de los mecanismos que el sistema de archivos utiliza


para controlar el acceso a los datos.

• Conocer los mecanismos que utiliza el sistema para identificar a los


usuarios y de este modo controlar el acceso a los archivos y directorios
sobre los que tengan permiso.

4 Unidad 6. Archivos y directorios.


Sistemas Operativos

♦ INTRODUCCIÓN

Los usuarios de un equipo informático, continuamente están generando


información por medio de las aplicaciones y programas. Esta información
normalmente debe ser almacenada de forma no volátil y segura. También es
primordial que la información se almacene de forma estructurada, tanto desde
el punto de vista del usuario, como del sistema operativo. Para ello el sistema
operativo pone a disposición de los usuarios y aplicaciones el sistema de
archivos, que es el encargado de gestionar el almacenamiento de la
información, utilizando los archivos y directorios, que son los elementos
básicos de almacenamiento.

En esta unidad se analizará detalladamente el sistema de archivos desde


varios puntos de vista, ya que la visión que tienen los usuarios (archivos y
directorios) es muy diferente a la que internamente tiene el sistema operativo.
Los usuarios ven los archivos como un conjunto de información estructurada
según sus necesidades o las de la aplicación que los utiliza. Mientras que el
sistema operativo los percibe como un conjunto de datos organizados según
sus necesidades de almacenamiento y utilización.

Normalmente los sistemas poseen gran cantidad de archivos, por tanto, se


debe dotar al usuario de algún mecanismo para su estructuración. Es lo que
se denominan directorios. Un directorio es una agrupación lógica de archivos
según los criterios de su creador.

Otro detalle, que verifica la distinta visión que tienen los usuarios y el sistema,
es que los sistemas también permiten a los usuarios asignar un nombre lógico
a los archivos y directorios. El cual es muy diferente de los descriptores
físicos internos que el SO utiliza. Esto facilita, considerablemente, el manejo
de los mismos por parte de los usuarios.

Una característica importante de los archivos, es que no están ligados a


ninguna aplicación específica. Es decir, los archivos poseen un ciclo de vida
totalmente desvinculado de las aplicaciones que los crearon o utilizan. Así
pues, aunque una aplicación desaparezca del sistema, los archivos y
directorios que manejaba perduran en el sistema.

Unidad 6. Archivos y directorios. 5


Formación Abierta

En esta unidad, también se dedicará una parte al estudio de cómo el sistema


operativo ofrece una serie de servicios para facilitar la gestión y tratamiento
de ficheros y directorios, que junto a las aplicaciones que los utilizan,
entregan al usuario las herramientas necesarias para el manejo de estos
elementos. Y al mismo tiempo proporcionan una total abstracción de la
operatoria real al usuario y a las aplicaciones.

Por último, el sistema de archivos se dedica a la protección, seguridad y


acceso a los ficheros. Para ello gestiona una sería de atributos asociados a
cada fichero, los cuales indican, entre otras cosas, el propietario, los
permisos, etc.

6 Unidad 6. Archivos y directorios.


Sistemas Operativos

6.1. EL SISTEMA DE ARCHIVOS

Cuando se desea almacenar información para su posterior tratamiento, el


usuario se encuentra con dos problemas básicos:

En primer lugar, la memoria principal es volátil, es decir, la información


almacenada en ella se pierde cuando el proceso termina o se apaga el
sistema. Además, en muchas aplicaciones se necesita un almacenamiento
mayor que el proporcionado por la memoria principal.

En segundo lugar, está el tema de la compartición de información. A la


información que está en el espacio de direcciones de un proceso solo puede
acceder ese proceso. Para que varios procesos puedan acceder al mismo
tiempo, la información debe ser independiente de los procesos.

En resumen, se necesitan tres condiciones para el almacenamiento de la


información a largo plazo:

• La información no debe ser volátil.

• Se debe poder almacenar una cantidad grande de información.

• Los procesos deben tener posibilidad de acceso concurrente a la


información.

La solución es el almacenamiento en un sistema auxiliar (principalmente en


discos), en una estructura de archivos. Los archivos son persistentes, o lo que
es lo mismo, no desaparecen cuando el proceso termina. Sólo se borran
cuando el propietario explícitamente los elimina emitiendo una orden. Además
son independientes de las aplicaciones, por lo que la desaparición de una
aplicación no implica la destrucción de los archivos gestionados por ella.

El sistema de archivos es probablemente la parte más visible de un sistema


operativo y se puede definir desde diferentes puntos de vista. Así, la
preocupación de los usuarios es la forma de nombrar a los archivos, las
operaciones permitidas en ellos, la apariencia del árbol de directorios y otros
aspectos de la interfaz. Por otra parte, está la visión del sistema operativo, al
que le interesa la forma de almacenamiento de los archivos y directorios, la
administración del espacio en el disco, que todo funcione de una forma
eficiente y que la utilización de los servicios sea sencilla para el usuario.

Unidad 6. Archivos y directorios. 7


Formación Abierta

6.2. ARCHIVOS

Los sistemas operativos, deben proporcionar una unidad de almacenamiento


lógico, que se abstraiga de los detalles del sistema físico. Es lo que se
denomina archivo o fichero.

Archivo

Es una unidad de almacenamiento lógico, no volátil, que


agrupa un conjunto de información relacionada entre sí bajo un
mismo nombre.

Como ya se ha comentado, hay que tener en cuenta que existen dos puntos
de vista diferentes, el de los usuarios y el del sistema operativo. Desde el
punto de vista de los usuarios, el archivo es el mecanismo que les permite
gestionar el almacenamiento secundario. Para ellos también es importante
que el sistema operativo especifique claramente, la forma de nombrar los
archivos, las operaciones disponibles sobre archivos, etc.

Para esto, todos los SO disponen de un subsistema, que como se ha visto en


el punto 6.1, se denomina sistema de archivos. Este sistema es el encargado
de gestionar la estructura de archivos, su identificación, los accesos a los
mismos, las cuestiones relativas a seguridad y protección de la información,
etc.

Los archivos poseen una serie de atributos, los cuales pueden variar de un
sistema operativo a otro, pero en general todos contienen los siguientes:

• Nombre.

Es el identificador definido por el creador del archivo, en un formato


comprensible para los usuarios.

• Identificador único.

El sistema operativo no utiliza el nombre para hacer referencia a un


archivo, sino un identificador único. Este identificador lo genera el sistema
siguiendo un criterio, que puede ser distinto en cada SO, pero que
normalmente es asignarle un número. El cual, habitualmente, es
desconocido por el usuario.

8 Unidad 6. Archivos y directorios.


Sistemas Operativos

• Tipo de archivo.

Identifica el formato o la naturaleza del archivo. Entre otros, puede


expresarse a través de la extensión (Windows) o través del número
mágico (Unix).

• Mapa del archivo.

Son punteros a los lugares (dispositivo y bloques) donde se almacena la


información contenida en el archivo.

• Protección.

Información de control de acceso. Indica las operaciones que se permiten


realizar sobre el archivo y quién las puede realizar, las palabras clave de
acceso, el propietario del archivo, el creador del archivo, etc.

• Tamaño del archivo.

Número de bytes que hay en el archivo.

• Información temporal.

Fecha de creación, fecha del último acceso, fecha de la última


modificación, etc.

• Información de control.

Indica si es un archivo oculto, de sistema, un archivo normal o un


directorio, etc.

Todo sistema operativo, debe proporcionar al menos una estructura genérica,


que permita gestionar todos los tipos de archivo, incluyendo todos los
atributos que puedan ir asociados al archivo.

Esta estructura es distinta para cada sistema operativo. A continuación, se


detallará las estructuras en Unix, Windows NT y MS-DOS:

• En Unix se denomina inodo o nodo-i. Cada nodo-i contiene los atributos


básicos del archivo (propietario, grupo, tamaño, etc.) y un mapa de
archivo mediante apuntadores a bloques almacenados en los dispositivos.
A través del mapa, se puede acceder a cualquier bloque con un número
pequeño de accesos a disco. Cuando se abre un archivo, su nodo-i se
trae a memoria.

Unidad 6. Archivos y directorios. 9


Formación Abierta

• En Windows NT se denomina registro de MFT (Master File Table) o


Tabla Principal de Archivos. En este registro almacena una cabecera,
información estándar, nombre del archivo, etc. Además, a diferencia de
los nodos-i, dispone de un espacio de 1,5 Kb para almacenar datos del
archivo dentro del propio registro. Por tanto, los archivos menores de este
tamaño pueden tener almacenada toda la información dentro del propio
registro.

• El caso de MS-DOS, resulta interesante mencionarlo, por la poca


información que almacena de los archivos. Esto se debe a que es un
sistema monoproceso y monousuario, por lo que solo se almacena el
nombre, unos atributos básicos, el tamaño y la posición de inicio del
archivo en la tabla FAT(File Allocation Table), donde se encuentra el
mapa del archivo.

Tipo de archivo y protección


Número de nombres
Propietario Cabecera
Grupo del propietario Atributos
Tamaño Tamaño
Instante de creación Nombre
Instante del último acceso Nombre Seguridad
Instante de la última modificación Atrib.
Puntero a bloque de datos 0 Size KB
Datos
Puntero a bloque de datos 1 Agrup. FAT

Puntero a bloque de datos 9 Vclusters


Puntero indirecto simple Registro MFT
Puntero indirecto doble de WINDOWS NT
Puntero indirecto triple
Nodo-i de UNIX

Figura 6.1. Estructuras de información de archivos. (Carretero, 2001)

6.2.1. NOMBRES DE ARCHIVOS

Todos los sistemas operativos deben proporcionar al usuario algún


mecanismo que permita nombrar los archivos. Estos archivos, necesitan ser
nombrados para poder proceder a su acceso de forma inequívoca. El nombre
irá asociado al archivo mientras exista.

10 Unidad 6. Archivos y directorios.


Sistemas Operativos

Cada sistema operativo tiene su manera de nombrar a los archivos.


Generalmente y con la finalidad de que el nombre sea representativo y fácil
de identificar por el usuario, suelen estar formados por caracteres
alfanuméricos y algunos caracteres especiales.

Los sistemas operativos tienen algunas restricciones en el nombrado de


archivos:

• Restricciones en cuanto a la longitud máxima del nombre. (MS-DOS


permite 8 caracteres como máximo, UNIX permite hasta 4096).

• Distinción entre mayúsculas y minúsculas. (“BACKUP” y “backup”


harían referencia a dos ficheros distintos en UNIX y al mismo fichero en
MS-DOS).

• Añadir una extensión o extensiones al nombre: suelen ir después del


nombre, separadas de él por un punto (por ejemplo: backup.log). Permiten
indicar al sistema operativo, usuarios y aplicaciones las características y
contenido del archivo.

En el caso de Windows, las extensiones de los archivos le permiten


asignar el icono correspondiente a la aplicación, que trata dicho tipo de
archivos. Así como ejecutar dicha aplicación, en el momento en que se
solicita la apertura de un archivo de ese tipo.

En el caso de UNIX, las extensiones no le aportan ninguna información,


solo son útiles para las aplicaciones. UNIX distingue los tipos de archivos
a través de una secuencia de bytes, que contiene la cabecera del archivo
y que se denomina número mágico.

6.2.2. ESTRUCTURA DE ARCHIVOS

Todo sistema operativo debe tener una estructura de archivos concreta, al


menos para sus archivos ejecutables, ya que son los que obligatoriamente
debe reconocer e interpretar.

Aunque normalmente los sistemas operativos, proporcionan los mecanismos


necesarios para poder tratar cualquier estructura de archivo, que necesiten
las aplicaciones.

Unidad 6. Archivos y directorios. 11


Formación Abierta

Número mágico
Cabecera primaria Número de secciones
Tipo de sección,
tamaño de la sección Tamaño segmento texto
Cabecera de sección 1 dirección virtual

Tamaño segmento datos



Cabecera de sección n Tipo de sección,
Tamaño datos sin valor
tamaño de la sección
inicial
dirección virtual
Sección 1 Código Tamaño tabla de símbolos
Sección 2 Datos con valor inicial Valor inicial de registros

Dirección inicial

Sección n Datos con valor inicial


Información con carga Opciones
Tabla de símbolos
Otra información

Figura 6.2. Estructura archivo ejecutable en UNIX (Carretero, 2001)

6.2.3. MÉTODOS DE ACCESO

Hay distintas formas de acceder a los datos almacenados en un archivo. Los


sistemas operativos no tienen por qué ofrecerlas todas.

Durante la etapa de diseño de las aplicaciones, se debe elegir la forma de


acceso a archivos más óptima, ya que influirá en gran medida en su
rendimiento final.

Principalmente se distinguen dos métodos distintos de acceso:

• Acceso secuencial.

Con este tipo de acceso solo se pueden leer los datos del archivo en
orden, comenzando desde el principio. No se permite la lectura
desordenada o posicionarse en una parte concreta del archivo. Si se
quiere volver a atrás, se debe iniciar la lectura desde el inicio del fichero
hasta llegar a los datos deseados.

El principal problema de este método es su falta de flexibilidad cuando es


necesario el acceso a los datos de un modo no secuencial. Algunos
sistemas como MVS, solucionan este problema con archivos secuenciales
indexados.

12 Unidad 6. Archivos y directorios.


Sistemas Operativos

Se trata de archivos secuenciales, a partir de los cuales se crea un índice


que indica la posición concreta de ciertos elementos, lo que permite
acceder directamente a ellos sin pasar por todos los datos anteriores.
Cada archivo secuencial de este tipo lleva asociado un archivo de índices.

• Acceso directo.
En este modo de acceso, el archivo se considera como un conjunto de
bloques. Esta idea surgió, a partir del modelo de almacenamiento de los
dispositivos de almacenamiento secundario como los discos duros. En los
que la información se ordena en bloques, los cuales son accesibles
aleatoriamente según las necesidades.

Los sistemas operativos proporcionan servicios desde el sistema de


archivos, que permiten a las aplicaciones modificar la posición dentro del
archivo (seek) o especificar un bloque concreto mediante posiciones
relativas al inicio del archivo. El sistema operativo relaciona estas
direcciones relativas, con direcciones absolutas dentro de la estructura
física del dispositivo.

Unidad 6. Archivos y directorios. 13


Formación Abierta

6.3. DIRECTORIOS

La cantidad de archivos que forman parte de un sistema de archivos puede


ser muy grande. Por ello los sistemas operativos ofrecen los mecanismos
necesarios, para organizar y agrupar los archivos en directorios. Normalmente
los directorios se crean como archivos, pero se tratan de manera especial, ya
que existen servicios específicos para su manejo.

Directorio

Es un objeto que relaciona de forma unívoca, el nombre de


usuario de un archivo y el identificador interno del mismo
utilizado por el sistema operativo.

El objetivo principal del uso de directorios, no es otro que organizar o


estructurar el sistema de archivos. Un directorio, además, puede almacenar
información útil como, ubicación, propietario, permisos de acceso, etc.

Un directorio posee una entrada por cada archivo que contiene o es accesible
a través de él. Para evitar ambigüedades, un mismo nombre no puede
identificar a dos archivos distintos, dentro del mismo directorio. Pero sí que es
posible que un archivo sea identificado por varios nombres diferentes.

Los directorios deben proporcionar a los usuarios una visión lógica


simplificada, excluyendo cualquier detalle referente a la forma en que está
implementado el sistema de archivos.

Cuando se desea acceder al contenido de un archivo, el sistema operativo


busca en el sistema de directorios la entrada correspondiente al nombre del
archivo. A continuación, una vez obtenida dicha entrada, el sistema operativo
obtiene el identificador interno del archivo e incluso, algunos de los atributos
del mismo. Esta información permite convertir el nombre de usuario, en el
identificador que maneja el sistema operativo. Todas las referencias
posteriores al archivo se resuelven a través de su descriptor (nodo-i, registro
MFT, etc.).

14 Unidad 6. Archivos y directorios.


Sistemas Operativos

6.3.1. ESTRUCTURA DE DIRECTORIOS

El número de entradas que puede llegar a tener un directorio, obliga a


estructurarlas y organizarlas de modo que se puedan tratar de una manera
sencilla y eficiente. Existen diferentes formas de estructurar esta información,
que varían de un sistema operativo a otro y que a continuación se detallan:

Estructura de nivel único y de dos niveles

Este tipo de estructuras se utilizaban en sistemas operativos antiguos. La


estructura de nivel único se caracteriza por tener un único directorio, en el que
se agrupan todas las entradas de archivos. Por una parte, es una estructura
fácil de implementar, pero por otra, implica un gran problema a la hora de
asignar nombres de archivos, ya que deben ser únicos en el sistema y es
difícil recordar todos los nombres, e incluso imposible ver los de otros
usuarios.

Figura 6.3. Estructura de directorio en un nivel

Cuando aumenta la capacidad del almacenamiento secundario, resulta


complicado mantener una estructura a un solo nivel con tanto volumen de
archivos. Por ello se implanta la estructura en dos niveles, que facilita a cada
usuario su propio directorio y dentro de él sus entradas a los archivos.

Figura 6.4. Estructura de directorio en dos niveles

Unidad 6. Archivos y directorios. 15


Formación Abierta

Esta nueva versión, mejoraba la seguridad entre usuarios, ya que cada uno
trabajaba sobre su propio directorio. Sin embargo, impedía agrupar archivos
en nuevos directorios o compartir archivos entre usuarios.

Estructura de árbol

El exponencial aumento de los archivos almacenados en los sistemas,


dificulta de nuevo la tarea de asignarles nombres diferentes, aun disponiendo
de las estructuras de dos niveles. Fue por tanto, necesario generalizar la idea
de directorios multinivel, de forma que los usuarios pudiesen crear su propia
estructura jerárquica de directoritos y de esta manera agrupar archivos según
los criterios lógicos que considerasen.

Figura 6.5. Estructura de directorio en árbol

La estructura de árbol representa los directorios y subdirectorios, partiendo de


un directorio raíz. Para cada archivo existe un camino único o path que se
inicia en el directorio raíz y termina en dicho archivo. Las “hojas” del árbol son
siempre archivos.

16 Unidad 6. Archivos y directorios.


Sistemas Operativos

Cada usuario normalmente tiene su propio directorio (home), en el que le


sitúa el sistema operativo al entrar. De él cuelgan todos sus subdirectorios y
archivos.

El sistema operativo pone a disposición del usuario servicios que le permiten


moverse y explorar el árbol, tanto para bajar a las “hojas” como subir hasta la
“raíz”. Para saber en qué directorio se encuentra el usuario en cada instante,
se utiliza el concepto de directorio de trabajo. Por tanto para crear, borrar o
editar un archivo, se puede hacer referencia a su nombre de forma relativa al
directorio de trabajo o utilizando su dirección completa o path desde la raíz.

Es importante destacar, que en este tipo de estructuras, a la hora de borrar un


directorio no vacío, los sistemas operativos pueden ofrecer distintas
soluciones:

• No permitir borrar directorios que no se encuentren vacios (que contengan


subdirectorios o archivos). Por tanto el usuario debe comenzar por borrar
primero el contenido de dicho directorio.

• Borrar tanto el directorio, como todo el árbol que cuelga de él


(subdirectorios y archivos). Normalmente los sistemas que utilizan esta
solución, avisan al usuario de esta operación y requieren su confirmación.

Grafo acíclico
La estructura de árbol, no daba solución al problema de compartir archivos ya
que para ello se debería poder llegar a un mismo archivo a través de caminos
distintos (uno por cada usuario que puede acceder al archivo), y por definición
esto no es posible en esta estructura.

Por ello se establece una nueva organización denominada grafo acíclico, que
permite romper la relación uno a uno entre nombre y archivo. Así por ejemplo,
un subdirectorio o archivo puede estar en dos directorios distintos,
conectando a través de enlaces con el elemento compartido. Existen dos
tipos de enlaces:

• Físico.

Es un puntero a otro archivo o directorio, cuya entrada de directorio tiene


el mismo identificador de archivo que el archivo enlazado. Es decir, ambos
nombres apuntan al mismo archivo, por tanto el identificador de archivo
obtenido al resolver cualquiera de los dos nombres, será el mismo.

Unidad 6. Archivos y directorios. 17


Formación Abierta

• Simbólico.

Es un nuevo archivo, cuyo contenido es el nombre del archivo enlazado.


Por tanto, el proceso consiste en resolver el nombre del archivo simbólico,
del cual se obtiene el nombre del archivo enlazado y al resolver el
nombre, se obtiene el identificador del archivo enlazado.

Figura 6.6. Estructura de directorio como grafo acíclico

6.3.2. NOMBRES DE DIRECTORIOS

Las estructuras jerárquicas de directorios, bien sea en forma de árbol, o de


grafo acíclico, siempre tienen como referencia y origen el directorio raíz. En
las búsquedas de archivos, siempre se parte de este directorio y se va
navegando a través de los subdirectorios sucesivos, hasta encontrar el
archivo. Para ello el sistema operativo debe conocer el nombre, ruta o path
completo desde el directorio raíz hasta el archivo. Existen dos formas de
hacer referencia a los archivos, utilizando el nombre absoluto o el nombre
relativo:

18 Unidad 6. Archivos y directorios.


Sistemas Operativos

Nombre absoluto
El nombre absoluto de un archivo proporciona todo el camino a través de la
estructura de árbol de directorios, partiendo del directorio raíz y finalizando en
el propio archivo.

USER TMP USR

USER USER USER BIN DLL MAIL

DOC CLAV SYST.C LISTA.C REG.C

Figura 6.7. Estructura de árbol de directorios

Utilizando como ejemplo la estructura de árbol de directorios de la figura


anterior, el nombre absoluto para referenciar al archivo “LISTA.C” en un
sistema UNIX sería: / USR / BIN / LISTA.C

Esta ruta, le indica al sistema de archivos que para llegar hasta el archivo
LISTA.C, comenzando desde el directorio raíz, debe atravesar el directorio
USR, después el subdirectorio BIN y allí encontrará el archivo buscado.

Los nombres absolutos proporcionan al sistema de archivos toda la


información necesaria. Por eso muchas aplicaciones utilizan este tipo de
nombres, ya que se garantiza que la aplicación va a funcionar
independientemente del directorio en el que se encuentre situada.

El sistema de archivos, debe dar una serie de pasos para interpretar los
nombres absolutos. Para poder comprender mejor el ejemplo y en base a la
estructura de la figura 6.6, se van a detallar cómo serían algunas tablas con la
información de los directorios en un sistema UNIX (figura 6.7). En estas
tablas las entradas “ . ” y “ .. “ se refieren al directorio actual y al padre.

Unidad 6. Archivos y directorios. 19


Formación Abierta

Nombre Nodo-i Nombre Nodo-i


. 2 . 257
.. 2 .. 326
LISTA.
USER 48 Nombre Nodo-i 501
C
TMP 124 . 326 REG.C 522
USR 326 .. 2
BIN 257
DLL 453
MAIL 109

Figura 6.8. Tablas de nodos-i en UNIX

A continuación, se detallarán los pasos que debe dar el sistema para resolver
el nombre absoluto: / USR / BIN / LISTA.C

1. En UNIX el número 2 de nodo-i está asignado de forma predefinida al


directorio raíz. Por tanto, lo primero es traer a memoria las entradas
existentes en el archivo con nodo-i 2.

2. Se busca dentro, el archivo con nombre USR y se obtiene su nodo-i, en


este caso el 326.

3. Se traen a memoria las entradas existentes en el archivo con nodo-i 326.

4. Se busca dentro, el archivo con nombre BIN y se obtiene su nodo-i, en


este caso el 257.

5. Se traen a memoria las entradas existentes en el archivo con nodo-i 257.

6. Se busca dentro el archivo con nombre LISTA.C y se obtiene su nodo-i, en


este caso el 501, donde se encuentra el contenido del archivo deseado.

Nombre relativo

Puesto que la profundidad de un árbol de directorios puede ser muy grande, y


sería muy costoso e incómodo especificar continuamente nombres absolutos
tan largos, la mayoría de los sistemas operativos optan por una segunda
opción, que es el uso de nombres relativos. Es decir, nombres que
especifican solo una parte del nombre absoluto, relativa a un determinado
subdirectorio del árbol.

20 Unidad 6. Archivos y directorios.


Sistemas Operativos

Para poder interpretar un nombre relativo, se debe conocer el directorio a


partir del cual se parte. Este directorio se denomina directorio de trabajo o
directorio actual.

Si en el ejemplo anterior el directorio de trabajo en el que se encuentra el


usuario fuese: /USR, bastaría con referirse al archivo con el nombre relativo:
/BIN/LISTA.C. Es obligación del usuario situarse en el directorio de trabajo
correcto antes de usar nombres relativos al mismo.

Unidad 6. Archivos y directorios. 21


Formación Abierta

6.4. SERVICIOS DEL SISTEMA DE ARCHIVOS

Los archivos, al igual que cualquier elemento que gestiona el sistema


operativo, necesitan de una serie de servicios, que permitan a usuarios y
aplicaciones realizar operaciones sobre ellos.

En la mayoría de sistemas operativos, los directorios se implementan como


archivos que almacenan una estructura concreta de datos: entradas de
directorio. Por ello, aun siendo archivos, existen servicios específicos para el
tratamiento de directorios, ya que la funcionalidad sobre estos, debe ser
mucho más restringida.

6.4.1. SERVICIOS PARA ARCHIVOS

A continuación, se detallan los servicios básicos para trabajar con archivos:

• Crear.

Este servicio permite crear un archivo vacío. Para ello se comprueba


antes que hay espacio disponible para almacenarlo, que se puede crear
una entrada de directorio y por último, que el nombre es único.

• Borrar.

Busca el nombre del archivo en las entradas de directorio. Una vez


localizado, elimina la entrada de directorio y libera los recursos del
sistema de archivos que tuviera asignados.

• Abrir.

Antes de utilizar una archivo, este debe ser abierto. Lo primero que
comprueba este servicio es que el fichero existe y que el usuario tiene
derecho de acceso. A continuación, se trae a memoria la información del
archivo y devuelve un identificador temporal del archivo para su
utilización. El número de archivos que el sistema operativo permite tener
abiertos al mismo tiempo suele ser limitado.

• Cerrar.

Al invocar este servicio, se elimina el identificador temporal y se liberan los


recursos de memoria utilizados.

22 Unidad 6. Archivos y directorios.


Sistemas Operativos

• Leer.

Mediante el uso de este servicio, se obtiene la información del archivo y


se lleva a memoria. Para invocar el servicio de apertura, se especificará el
identificador temporal obtenido en la apertura, la posición en memoria y la
cantidad de información a recuperar. Se puede realizar la lectura de dos
formas diferentes, a partir de la posición que indica el apuntador del
archivo o especificando la posición concreta de lectura.

• Escribir.

Mediante el uso de este servicio, se puede transferir información desde la


memoria principal al archivo. Al igual que en la lectura, se especificará el
identificador temporal obtenido en la apertura, la posición en memoria y la
cantidad de información que se va a escribir. Los datos se escriben
normalmente, a partir de la posición que indica el puntero de posición del
archivo. Si el puntero se encuentra en el final, se extenderá el tamaño del
archivo. Si el puntero está en una posición intermedia, se sobrescriben los
datos.

• Cambiar puntero de posición.

Con este servicio se sitúa el puntero en otra posición dentro del archivo.
Este servicio es necesario para llevar a cabo los accesos aleatorios al
archivo.

• Modificación de atributos.

Estos servicios permiten modificar los atributos de un archivo, así como la


información de control de acceso al mismo.

A parte de estos servicios básicos, los sistemas operativos implementan otros


como renombrar archivos, bloquear archivos, copiar o mover archivos, etc.

6.4.2. SERVICIOS PARA DIRECTORIOS

Los servicios básicos que permiten trabajar con directorios, son los
siguientes:

• Crear.

Este servicio se encarga de crear el directorio y ubicarlo dentro del árbol


de directorios, en la posición exigida al invocar el servicio.

Unidad 6. Archivos y directorios. 23


Formación Abierta

• Borrar.

Elimina su entrada del árbol de directorios. Como ya se ha comentado


anteriormente, un sistema operativo puede optar por permitir borrar un
directorio solo si está vacío, o permitirlo en cualquier caso, borrando el
directorio y todo lo que cuelga de él.

• Abrir.

Este servicio abre el archivo que contiene las entradas de directorio. Al


igual que los archivos, un directorio debe estar abierto para poder operar
con él.

• Cerrar.

Al invocar este servicio, se cierra el archivo que contiene el directorio y se


liberan los recursos que tuviera asignados.

• Leer.

Extrae la siguiente entrada del directorio abierto.

• Cambiar directorio.

Permite al usuario modificar el directorio de trabajo actual.

• Enlazar.

Permite acceder a algún fichero existente, pero con un nombre nuevo.

Al igual que ocurría con los archivos, estos son únicamente los servicios
básicos, pero los sistemas operativos implementan otros más específicos.

24 Unidad 6. Archivos y directorios.


Sistemas Operativos

6.5. GESTIÓN DE ALMACENAMIENTO


SECUNDARIO

Como se observó en la unidad dedicada a los dispositivos de E/S, los discos,


por sus características, son el medio más eficiente para el almacenaje no
volátil de archivos. Esa eficiencia se debe, en gran parte, a que en las
operaciones de lectura y modificación, los accesos son directos al bloque que
se desea tratar.

Con respecto a la organización del sistema de archivos, existen, lo que se


denominan, métodos de asignación. Un método de asignación de espacio en
disco, determina la manera en que un sistema operativo asigna el espacio
libre a los archivos, que se desean almacenar en dicho disco. De forma que
se aproveche eficazmente el espacio disponible y que el acceso sea lo más
rápido posible.

La información que deben controlar estos métodos, básicamente es la


identificación del archivo, sector de inicio y sector final. Los principales
métodos, los cuales se detallarán a continuación, son la asignación
contigua, la asignación enlazada (con su variante FAT) y la asignación
indexada.

6.5.1. ASIGNACIÓN CONTIGUA

Este método consiste en asignar el espacio en disco de tal manera que las
direcciones de todos los bloques correspondientes a un archivo se
almacenarán de forma consecutiva en el disco. La entrada de directorio para
cada uno de los ficheros se compone de:

• La dirección del bloque inicial.

• La longitud del área asignada (número de bloques).

A continuación, se muestra un ejemplo de la forma en que quedarían


asignados los bloques pertenecientes a los archivos que figuran en las
entradas del directorio.

Unidad 6. Archivos y directorios. 25


Formación Abierta

Directorio
Archivo Inicio Longitud
AA 1 5
BB 12 4
CC 19 8
DD 113 4
EE 7 2

0 1 2 3 4 5 6 7 8 9
AA AA AA AA AA EE EE

10 11 12 13 14 15 16 17 18 19
BB BB BB BB CC

20 21 22 23 24 25 26 27 28 29
CC CC CC CC CC CC CC

… … 112 113 114 115 116 117 118 119


DD DD DD DD

Con este método, se consigue que todos los bloques de un mismo fichero
estén almacenados en posiciones consecutivas. Lo que reduce al mínimo el
movimiento de las cabezas del disco si al fichero se accede de forma
secuencial, aunque cabe destacar, que también se permite el acceso de
forma directa.

Una de las dificultades que presenta este método, reside en el problema de


encontrar espacio libre suficiente, para almacenar un fichero en posiciones
consecutivas. Para gestionar los huecos libres se utilizan unos algoritmos
(que también se utilizan en la gestión de memoria principal), que se encargan
de la elección del hueco libre donde ubicar al archivo. Estos algoritmos son:

• El algoritmo más simple es el primer ajuste (first fit). Se revisa la lista de


huecos hasta encontrar un espacio lo suficientemente grande, el cual es el
que se le asigna al archivo. Este algoritmo es rápido, ya que busca lo
menos posible.

• Otro algoritmo es el mejor ajuste (best fit), el cual busca y elige el


mínimo hueco suficientemente grande como para ubicar al proceso. Este
algoritmo intenta adaptar los huecos a los archivos con el tamaño más
parecido. Se ha demostrado que el algoritmo del mejor ajuste desperdicia
más los espacios, pues al crear huecos demasiado pequeños, éstos no
pueden ser utilizados.

• Un algoritmo que enfrenta el problema de la manera contraria es el del


peor ajuste (worst fit). En este algoritmo se elige el hueco más grande
disponible. De esta forma aumenta la probabilidad de que el nuevo hueco
creado sea lo suficientemente grande como para albergar un proceso.

26 Unidad 6. Archivos y directorios.


Sistemas Operativos

Otro problema que plantea este método de asignación, es que en ocasiones


es difícil determinar el espacio que necesita un archivo. Este problema, lo
solucionan algunos sistemas realizando extensiones del espacio inicial
asignado, en caso de que se haya calculado menos de lo necesario.

6.5.2. ASIGNACIÓN ENLAZADA

En este tipo de asignación, los archivos se tratan como una lista enlazada de
bloques. La entrada de estos archivos en el directorio, contiene un puntero al
bloque inicial y otro al final.

Cada uno de los siguientes bloques, contiene tanto una parte de los datos
como el puntero al siguiente bloque de datos.

Directorio
Archivo Inicio Final
AA 4 9

0 1 2 3 4 5 6 7 8 9
12 -1

10 11 12 13 14 15 16 17 18 19
25

20 21 22 23 24 25 26 27 28 29
118

… … 112 113 114 115 116 117 118 119


9

La asignación enlazada soluciona el problema de la fragmentación, ya que se


puede escoger cualquier bloque libre para el fichero. Además, no es
necesario conocer de antemano el tamaño total del fichero, ya que se puede
ir extendiendo añadiendo nuevos bloques.

Por otro lado supone ciertas desventajas:

• Requiere un espacio adicional para almacenar los punteros, por lo que


pierde espacio para datos.

• Solo es realmente eficiente para archivos de acceso secuencial.

• Tiene un problema de fiabilidad, ya que la pérdida de un puntero implica


perder el contenido del archivo.

Unidad 6. Archivos y directorios. 27


Formación Abierta

6.5.3. ASIGNACIÓN FAT

Es una variante de la asignación enlazada, con la diferencia de que los


enlaces se almacenan en una estructura separada, en lugar de hacerlo en los
mismos bloques del archivo. Esta estructura se denomina FAT (File Allocation
Table - Tabla de Asignación de Archivos). Cuando se da formato al sistema
de archivos del disco, se reserva una sección al principio de cada partición
para almacenar la correspondiente FAT.

Directorio
Archivo Inicio
AA 4

FAT
0 1 2 3 4 5 6 7 8 9
3 7 1 9 -1

El inconveniente de este método, es que el recorrido secuencial de un


archivo, implica un gran número de movimientos de las cabezas del disco.
Inicialmente debe desplazarse al inicio de la partición a leer la FAT, encontrar
el bloque en cuestión y moverse a dicha posición. Esto para cada bloque del
archivo. Una optimización de este método, es precisamente cargar la FAT en
memoria, con lo que el número de movimientos y accesos se reduce
considerablemente.

6.5.4. ASIGNACIÓN INDEXADA

Partiendo de la idea de la asignación enlazada, la asignación indexada


mejora a la anterior, agrupando todos los punteros en una estructura
denominada bloque de índices. Se trata de una tabla en la que la n-esima
entrada apunta al n-esimo bloque de archivo.

Directorio
Archivo Bloque índice
AA 10
BB 117
EE 24

0 1 2 3 4 5 6 7 8 9
AA EE AA AA EE
10 11 12 13 14 15 16 17 18 19
1,7,3 BB BB
20 21 22 23 24 25 26 27 28 29
2,8
… … 112 113 114 115 116 117 118 119
19,14

28 Unidad 6. Archivos y directorios.


Sistemas Operativos

En este tipo de asignación, es importante la definición del tamaño del bloque


de índices. Cada archivo tendrá un bloque de índices y conviene que sea lo
más pequeño posible, pero teniendo en cuenta también que debe permitir
indexar archivos grandes.

Este problema se solucionó con UNIX BSD, y actualmente en LINUX,


aplicando la posibilidad de crear un sistema de índices multinivel. Así cada
descriptor de archivo (i-nodo), tiene varios apuntadores directos a bloques de
datos y tres apuntadores a bloques de índice de primer, segundo y tercer
nivel. Esta estructura permite almacenar archivos pequeños sin necesidad de
bloques de índices; así como garantizar el acceso a archivos grandes en un
máximo de tres accesos a bloques de índices.

Nodo-i
Información
DISCO
del archivo 820

Direcciones
de los diez 342
primeros
1623
bloques

8204 1134
Indirecto

simple Bloque 10211


indirecto

Indirecto
doble
2046
Indirecto 20464
ti l

675

Figura 6.9. Mapa de bloques de un i-nodo [Carretero, 2001].

Unidad 6. Archivos y directorios. 29


Formación Abierta

6.6. SEGURIDAD DEL SISTEMA DE ARCHIVOS

Aunque el tema de la seguridad en los sistemas operativos se detalla en la


unidad 8, en este punto se expondrán unas ideas sobre seguridad, centradas
específicamente en el sistema de archivos.

Uno de los mayores problemas que se presentan al almacenar información en


un computador es la seguridad de la misma, teniéndose que idear
mecanismos que protejan esta información tanto de daños físicos como de
accesos inadecuados o malintencionados.

6.6.1. INTEGRIDAD DEL SISTEMA DE ARCHIVOS

Uno de los mayores desastres que se pueden presentar en un computador es


la destrucción del sistema de archivos. Ello puede representar la pérdida de
meses de trabajo y de datos imprescindibles.

Los problemas o inconsistencias en el sistema de archivos suelen ser


causados por dos motivos: por el uso de bloques del disco que están en mal
estado o por un fallo durante una operación de lectura, modificación y
escritura de un bloque.

En el primer caso, la solución del problema es relativamente sencilla, basta


con conocer cuáles son los bloques defectuosos. Los fabricantes de discos
duros dan una lista de los bloques defectuosos de cada unidad.
Conociéndolos se puede dedicar un sector del disco para contener la lista de
los bloques defectuosos. El controlador del disco lee esta lista y al
inicializarse elige una pista de reserva para sustituir a los que están
inservibles, de forma que cuando se solicita un bloque de los defectuosos el
sistema utilizará uno de los de repuesto.

En el segundo caso, si se interrumpe bruscamente una operación de lectura o


escritura sobre un bloque, existen múltiples problemas que pueden surgir.
Incluso, si el bloque que se ha modificado, y que no ha dado tiempo a
escribirlo, es un bloque con nodos-i, directorios o la lista de bloques libres el
problema puede ser crítico. Los problemas usuales de inconsistencia que se
pueden presentar son:

• Que un bloque aparezca en la lista de bloques usados y bloques libres. En


este caso la solución es eliminarlo de la lista de bloques libres.

30 Unidad 6. Archivos y directorios.


Sistemas Operativos

• Que un bloque no aparezca en ninguna lista. La solución es añadirlo a la


lista de bloques libres.

• Que un bloque esté repetido en la lista de bloques libres. La solución


también es sencilla, vale con reconstruir la lista de bloques libres, con una
entrada para cada bloque libre.

• La peor situación es que un bloque esté asignado a dos o más archivos.


La solución es que se copie el contenido del bloque que estaba asignado
a los dos; de esta forma no se tendrán bloques repetidos en las listas de
cada archivo, aunque seguramente la información de los archivos no será
consistente.

6.6.2. FIABILIDAD Y RECUPERACIÓN

Los sistemas operativos, disponen de una serie de herramientas que permiten


eliminar las inconsistencias mencionadas en el punto anterior. Estas
herramientas son capaces de detectar los problemas de integridad del
sistema de archivos y, si no son extremadamente graves, las pueden corregir.

En el caso concreto del SO Unix, existe una utilidad (fsck) que detecta las
inconsistencias que pudieran ocurrir por algún error o incluso un mal apagado
del sistema y las corrige. Cuando el deterioro del sistema de archivos es
irreparable es necesario disponer de copias de seguridad a partir de las
cuales poder restaurarlo.

Las copias de seguridad consisten en realizar y almacenar, volcados


periódicos de todo el sistema de archivos. Antes estos volcados se hacían en
cintas magnéticas, pero también se pueden hacer en discos de diferentes
capacidades. Por ejemplo, hay sistemas que al disponer de dos discos
iguales, tienen repetidos los datos, aunque esto supone aprovechar la mitad
de la capacidad de almacenamiento del sistema. También se pueden usar
unidades de discos extraíbles.

Otra forma de hacer copias de seguridad es mediante los volcados


incrementales. Con esta técnica solo se transfieren aquellos archivos que han
sido modificados desde la última vez que se hizo un volcado de seguridad.
Esta técnica suele ir acompañada de volcados completos periódicos.

Unidad 6. Archivos y directorios. 31


Formación Abierta

6.6.3. ACCESOS AL SISTEMA DE ARCHIVOS

Los fallos y deterioros del sistema de archivos, causados por actos fortuitos o
errores de la máquina o humano (se puede haber borrado un archivo sin
querer), se solucionan con las adecuadas copias de seguridad, tal como se
ha visto.

Pero un problema más grave es el de los intrusos que intentan acceder, de


forma no autorizada, al sistema de archivos. Para evitar estas amenazas, el
sistema operativo dispone de unos mecanismos, de los cuales no se darán
excesivas explicaciones, ya que se detallarán en la unidad 8 dedicada por
completo a la seguridad. Algunos de ellos son:

• Los dominios de protección.

Cada dominio define un conjunto de objetos y las operaciones que se les


pueden aplicar. La capacidad para ejecutar una operación sobre un objeto
es un derecho de acceso. Un dominio es un conjunto de derechos de
acceso, cada uno de los cuales está formado por un par de la forma:

<nombre del objeto, conjunto de sus derechos>

• Matriz de acceso.

Las relaciones entre dominios y objetos se pueden representar de forma


abstracta mediante una matriz denominada matriz de acceso. Las filas de
la matriz de acceso representan dominios y las columnas objetos. Cada
elemento de la matriz consiste en un conjunto de derechos de acceso.
Con esta matriz y el número del dominio, el sistema puede determinar qué
tipo de acceso se permite a un objeto específico.

• Lista de accesos.

A cada objeto se le asocia una lista ordenada con todos los dominios que
pueden tener acceso al objeto y la forma de dicho acceso. Esta lista se
denomina lista de accesos para el objeto especificado. El principal
inconveniente de las listas de accesos es el retardo que se provoca con la
búsqueda para verificar la autoridad de un sujeto para acceder al objeto
solicitado. Para evitar búsquedas de listas potencialmente muy largas de
usuarios autorizados y ahorrar espacio de almacenamiento, algunos
sistemas dividen a los usuarios en grupos y solo almacenan los derechos
de acceso de los grupos.

32 Unidad 6. Archivos y directorios.


Sistemas Operativos

• Lista de capacidades.

En este caso a cada dominio se le asocia una lista de objetos a los cuales
puede tener acceso, junto con una indicación de las operaciones
permitidas sobre cada objeto. Esta lista se denomina lista de capacidades.

Para llegar a obtener un sistema lo más seguro posible, existen también unos
principios de seguridad en el diseño del sistema de archivos [Saltzer y
Schroeder (1975)], que son:

• El diseño del sistema debe ser público.

Los diseñadores se engañan si confían la seguridad del sistema en la


ignorancia de los atacantes. Los algoritmos pueden ser conocidos, pero
las claves deben ser secretas.

• El estado predefinido es el de no acceso.

Los derechos de acceso deben ser adquiridos solo con permiso explícito.

• Verificar la autorización actual.

Cada petición de acceso a un objeto debe conllevar la comprobación de la


autorización. Esta verificación de autorización no debe ser abandonada
por el sistema, ya que se pueden producir situaciones como la de que un
usuario abra un archivo y lo mantenga abierto durante días, aunque
cambien las autorizaciones de uso de este archivo.

• Mínimos privilegios.

Cada proceso debe utilizar el mínimo grupo de privilegios para completar


su tarea. Esto delimita los posibles daños causados por caballos de Troya.
Por ejemplo, si un editor solo puede tener acceso al archivo que edita, un
editor con un caballo de Troya solo puede ocasionar un daño limitado.

• Mecanismos simples e integrados.

Mantener el diseño tan sencillo como sea posible facilita la verificación y


corrección de las implementaciones. Además, para que el sistema sea
verdaderamente seguro, el mecanismo debe estar integrado hasta las
capas más bajas del sistema.

Unidad 6. Archivos y directorios. 33


Formación Abierta

• Psicológicamente aceptable.

El mecanismo debe ser fácil de usar de forma que sea aplicado


correctamente y no sea rechazado por los usuarios.

6.6.4. IDENTIFICACIÓN DE USUARIOS

Existen múltiples formas de controlar el acceso de los usuarios al sistema,


cada día más avanzado y menos vulnerable. Son válidos para el acceso
general al sistema y en concreto también al sistema de archivos.

Muchos esquemas de seguridad se basan en la suposición de que el sistema


conoce al usuario. El problema en este caso es la identificación del mismo.
Este problema se suele llamar de validación y se basa en tres puntos (o en
una combinación de ellos):

• Posesión de una contraseña que le da acceso al sistema.

• Posesión de un artefacto, algo que al poseerlo el usuario le permite


acceder al sistema; por ejemplo, tarjetas magnéticas o llaves físicas.

• Uso de alguna característica fisiológica o de comportamiento del usuario.

Contraseñas

La contraseña es uno de los mecanismos de validación más comunes en los


computadores. En este caso el computador le pide al usuario una contraseña
que se comprueba en una tabla (generalmente almacenada en un archivo). Si
la contraseña es correcta, el computador permite el acceso. Por lo general las
contraseñas están cifradas.

Identificación mediante artefactos

Los artefactos suelen ser bandas magnéticas o tarjetas electrónicas. En este


caso, junto a los terminales suele haber un lector de tarjetas o de distintivos.
Éste debe disponer del distintivo o tarjeta para poder hacer uso del terminal.
Es normal que este tipo de identificación esté asociado a una contraseña.

34 Unidad 6. Archivos y directorios.


Sistemas Operativos

Identificación física
Otro método consiste en utilizar características propias del usuario para la
identificación. Las características se pueden catalogar en dos grupos:

• Fisiológicas. En este grupo se utilizan características físicas difíciles de


reproducir, como huellas dactilares o vocales, características faciales o
geometría de la mano.

• De comportamiento. En este grupo entran técnicas como el análisis de


firmas o patrones de voz.

Sea cual sea la técnica de identificación que se utilice, su objetivo es permitir


el acceso a los usuarios legítimos y denegarlo a los intrusos. La efectividad de
las técnicas de identificación se hace en función de la tasa de falsas
aceptaciones y de falsos rechazos, es decir, el porcentaje de intrusos
admitidos erróneamente y el porcentaje de usuarios legítimos a los que se
deniega acceso debido a un fallo en el mecanismo de identificación.

Unidad 6. Archivos y directorios. 35


Sistemas Operativos

RESUMEN

• Cuando se desea almacenar información para su posterior tratamiento, el


almacenamiento debe cumplir que: la información no debe ser volátil, que
se debe poder almacenar una cantidad grande de información y que los
procesos deben tener posibilidad de acceso concurrente a la información.
Esto se cumple utilizando el almacenamiento en un sistema auxiliar
(principalmente en discos), con una estructura de archivos.

• Los sistemas de archivos están formados por archivos y directorios.

• Un archivo, es una unidad de almacenamiento lógico, no volátil, que


agrupa un conjunto de información relacionada entre sí bajo un mismo
nombre.

• Los archivos poseen una serie de atributos, los cuales pueden variar de
un sistema operativo a otro, pero en general todos contienen los
siguientes: nombre, identificador único, tipo de archivo, mapa del archivo,
protección, tamaño del archivo, información temporal e información de
control.

• Todos los sistemas operativos deben proporcionar al usuario algún


mecanismo que permita nombrar los archivos. Estos archivos, necesitan
ser nombrados para poder proceder a su acceso de forma inequívoca. El
nombre irá asociado al archivo mientras exista.

• Existen dos métodos de acceso a archivos principales: acceso secuencial


y acceso directo.

• Un directorio, es un objeto que relaciona de forma unívoca, el nombre de


usuario de un archivo y el identificador interno del mismo utilizado por el
sistema operativo.

Unidad 6. Archivos y directorios. 37


Formación Abierta

• Un directorio posee una entrada por cada archivo que contiene o es


accesible a través de él. Para evitar ambigüedades, un mismo nombre no
puede identificar a dos archivos distintos, dentro del mismo directorio.
Pero sí que es posible que un archivo sea identificado por varios nombres
diferentes.

• Existen diferentes formas de estructurar un conjunto de directorios, las


principales son: estructura en un nivel, en dos niveles, en árbol o como
grafo acíclico.

• Dentro de la jerarquía de directorios, los nombres de archivos pueden ser


referenciados mediante su nombre absoluto (partiendo del directorio raíz)
o con su nombre relativo (partiendo desde el directorio de trabajo).

• Existen una serie de servicios básicos para archivos y otros para


directorios, ya que aunque la naturaleza de ambos es similar, el
tratamiento es muy diferente.

• A la hora de gestionar el almacenamiento secundario, es importante con


vistas a la eficiencia, elegir un método de asignación correcto. Un método
de asignación de espacio en disco, determina la manera en que un
sistema operativo asigna el espacio libre a los archivos, que se desean
almacenar en dicho disco. Los principales métodos de asignación son: la
asignación contigua, la asignación enlazada (con su variante FAT) y la
asignación indexada.

• Uno de los mayores desastres que se pueden presentar en un


computador es la destrucción del sistema de archivos. Ello puede
representar la pérdida de meses de trabajo y de datos imprescindibles.
Los problemas o inconsistencias en el sistema de archivos suelen ser
causados por dos motivos: por el uso de bloques del disco que están en
mal estado o por un fallo durante una operación de lectura, modificación y
escritura de un bloque. Para ello el sistema dispone de métodos de
reparación y recuperación.

38 Unidad 6. Archivos y directorios.


Sistemas Operativos

• Existen múltiples formas de controlar el acceso de los usuarios al sistema,


cada día más avanzado y menos vulnerable. Son válidos para el acceso
general al sistema y en concreto también al sistema de archivos. Los
principales métodos de validación son: el uso de contraseñas, el uso de
artefactos físicos como tarjetas magnéticas o llaves físicas y el de alguna
característica fisiológica o de comportamiento del usuario como las
huellas dactilares o el reconocimiento de voz.

Unidad 6. Archivos y directorios. 39


SISTEMAS
OPERATIVOS

GESTIÓN
DE MEMORIA
Sistemas Operativos

ÍNDICE
♦  OBJETIVOS................................................................................................3 

♦  INTRODUCCIÓN ........................................................................................5 
7.1.  El sistema de gestión de memoria ......................................................7 
7.1.1.  Funciones del sistema de gestión de memoria ................................7 
7.2.  Ciclo de vida de un programa ............................................................12 
7.3.  Intercambio .........................................................................................15 
7.4.  Memoria virtual ...................................................................................16 
7.4.1.  Fundamentos de la memoria virtual ...............................................16 
7.4.2.  Ventajas de la memoria virtual .......................................................18 
7.5.  Paginación ..........................................................................................19 
7.5.1.  Mecanismos de optimización .........................................................20 
7.6.  Segmentación .....................................................................................23 
7.6.1.  Segmentación paginada ................................................................24 
7.7.  Paginación por demanda ...................................................................25 
7.8.  Políticas de reemplazo .......................................................................26 

♦  RESUMEN ................................................................................................29 

Unidad 7. Gestión de memoria. 1


Sistemas Operativos

♦ OBJETIVOS

En esta séptima unidad didáctica, se pretenden alcanzar los objetivos que se


detallan a continuación:

• Conocer cómo se gestiona la memoria en el sistema operativo.

• Distinguir las direcciones físicas y lógicas y cómo se realiza la traducción.

• Conocer los elementos hardware implicados en la gestión de memoria


como la MMU.

• Conocer los pasos del ciclo de vida de un programa

• Conocer el concepto de intercambio.

• Conocer qué es el concepto de memoria virtual y cómo se gestionan sus


accesos.

• Conocer los fundamentos de la memoria virtual y los conceptos que en


ellos se detallan.

• Saber cuáles son las principales ventajas del uso de la memoria virtual.

• Saber qué es la paginación, qué elementos intervienen y el esquema de


direcciones en memoria Paginada.

• Conocer los mecanismos utilizados para optimizar la técnica de la


paginación.

• Saber qué es la segmentación, qué elementos intervienen y el esquema


de direcciones en memoria segmentada.

Unidad 7. Gestión de memoria. 3


Formación Abierta

• Conocer la existencia de métodos combinados como la segmentación


Paginada.

• Comprender el concepto de paginación bajo demanda. Qué implican los


fallos de página y cómo se gestionan por el sistema operativo.

• Conocer qué son las políticas de reemplazo. Comprender los algoritmos


de reemplazo más importantes.

4 Unidad 7. Gestión de memoria.


Sistemas Operativos

♦ INTRODUCCIÓN

La utilización de los recursos del sistema y, en general, el rendimiento del


sistema va a estar condicionado por la eficacia en la gestión de la memoria.
Por ello, uno de los factores más importantes que influyen en el diseño de los
sistemas operativos es la organización y gestión de la memoria principal.

El gestor de memoria del sistema operativo debe hacer de puente entre los
requisitos de las aplicaciones y los mecanismos que proporciona el hardware
de gestión de memoria. Se trata de una de las partes del sistema operativo
que está más ligada al hardware. Esta estrecha colaboración ha hecho que
tanto el hardware como el software de gestión de memoria hayan ido
evolucionando juntos. De hecho, la frontera entre la labor que realiza el
hardware y la que hace el software de gestión de memoria es difusa.

El sistema de gestión de la memoria que se elija depende de la arquitectura


del sistema y del tipo de aplicaciones. Si el sistema es monoproceso se
pueden considerar técnicas sencillas de gestión de la memoria, puesto que
solo se tiene un proceso cargado en la memoria. Para sistemas multiproceso
la gestión se complica, ya que se necesitan tener varios procesos cargados
en la memoria simultáneamente, con sus propias pilas y estructuras de datos.

Como ya se sabe, el propósito principal de un sistema informático es ejecutar


programas. Estos programas, junto con los datos a los que acceden, deben
encontrarse en memoria principal durante la ejecución (al menos
parcialmente). Por ello, para aumentar tanto el grado de utilización del
procesador como su velocidad de respuesta a los usuarios, el sistema gestor
de memoria debe ser capaz de mantener, cuantos más procesos en memoria,
mejor.

En esta unidad se comienza hablando sobre conceptos generales del sistema


gestor de memoria, así como las funciones del mismo. También se
comentarán cuestiones como elementos hardware básicos y los mecanismos
de traducción de las direcciones lógicas de memoria a las direcciones físicas.
A continuación, se trata el ciclo de vida de un programa, así como los
mecanismos para lograr montar código dinámicamente a través de las
bibliotecas.

Unidad 7. Gestión de memoria. 5


Formación Abierta

El resto de la unidad se centra en la técnica de memoria virtual, que es un


mecanismo que permite la ejecución de procesos que no se encuentren
completamente en la memoria. Una de las principales ventajas de este
esquema es que los programas pueden tener un tamaño mayor que la propia
memoria física. La memoria virtual también permite que los procesos
compartan los archivos e implementen mecanismos de memoria compartida.
Además, proporciona un mecanismo eficiente para la creación de procesos.
Sin embargo, la memoria virtual no resulta fácil de implementar y puede
reducir sustancialmente el rendimiento del sistema. En este capítulo, también
se van a analizar los mecanismos de memoria virtual basados en paginación,
segmentación y paginación bajo demanda.

La última parte del tema se dedica al estudio de las diferentes políticas de


sustitución de páginas.

6 Unidad 7. Gestión de memoria.


Sistemas Operativos

7.1. EL SISTEMA DE GESTIÓN DE MEMORIA

Dentro de un sistema informático, la memoria es sin duda uno de los


elementos más importantes. Ligado a ella está el gestor de memoria, que es
el subsistema, o parte del sistema operativo, encargado del tratamiento de
este recurso.

En general, la misión del gestor de la memoria es la asignación de memoria


principal a los procesos que la soliciten. El espacio vacante se puede utilizar
para cargar procesos que están ya preparados para su ejecución, de forma
que el planificador esté en mejores condiciones de preparar las tareas que se
van a ejecutar.

7.1.1. FUNCIONES DEL SISTEMA DE GESTIÓN DE MEMORIA

A continuación, se detallarán los objetivos o funciones básicas que debe


llevar a cabo un sistema gestor de memoria.

Espacios lógicos independientes

El sistema de gestión de memoria, debe proporcionar a cada proceso un


espacio lógico propio.

Normalmente el código de un programa hace referencia a posiciones de


memoria para realizar operaciones. Como a priori no se puede conocer que
posiciones de memoria ocupará un programa, cuando se cargue en la
memoria principal, se debe realizar un proceso de traducción de dichas
direcciones de memoria. Se observará mejor en un ejemplo:

  Archivo ejecutable 
0 CABECERA 
100 LOAD R1, #1000 
104 LOAD R2, #2000 
108 LOAD R3, /1500 
112 LOAD R4, [R1] 
116 STORE R4, [R2] 
120 INC R1 
124 INC R2 
128 DEC R3 
132 JNZ /12 
136 …………………… 

Unidad 7. Gestión de memoria. 7


Formación Abierta

La función de este fragmento de código es copiar el contenido de un vector


almacenado a partir de la dirección 1000 en otro almacenado a partir de la
2000. Estando el tamaño del vector almacenado en la posición 1500.

Si se ejecutase en un sistema monoprogramado, sería suficiente con cargarlo


en la posición 0 de la memoria y pasarle el control al mismo. Ya que las
direcciones lógicas y físicas coinciden.

Sin embargo, si se trata de un sistema con multiprogramación, será necesario


realizar una tarea de traducción o reubicación de las direcciones de
memoria a las que hacen referencia las instrucciones del programa
(direcciones lógicas), para que se correspondan con las direcciones de
memoria principal asignadas (direcciones físicas). Si en el ejemplo, al
programa se le asigna una zona de memoria a partir de la dirección 10000
habría que traducir todas las direcciones que utiliza el programa añadiéndoles
esa cantidad.

Este proceso de traducción, crea por tanto, un espacio lógico o mapa


independiente para cada proceso, proyectándolo sobre la parte de la memoria
principal de acuerdo a la función de traducción.

Puesto que esta tarea de traducción se debe realizar con todas las
direcciones utilizadas, debe ser el procesador el encargado de realizar dicha
conversión. Esta tarea la realiza un módulo concreto del procesador
denominado MMU (Memory Management Unit). El SO es el encargado de
indicar a la MMU qué función de traducción debe aplicar a cada proceso que
se ejecuta.

11.500

Figura 7.1. Ejemplo traducción de dirección por la MMU

En el caso de esta instrucción, se convierte la dirección lógica 1.500 en la


dirección física 11500.

8 Unidad 7. Gestión de memoria.


Sistemas Operativos

Protección
Otro de los objetivos que debe alcanzar el sistema gestor de memoria, es el
de proteger el correcto funcionamiento del sistema operativo e incluso de
otros procesos.

En el caso de sistemas monoprogramados, se debe proteger al SO de los


accesos que realice un programa en ejecución. Para evitar que pueda
interferir en el funcionamiento del mismo, bien por alterar de forma imprevista
el código o las estructuras de datos del SO.

Si se trata de sistemas multiprogramados, además de la protección al SO, se


debe proteger también al resto de procesos, para que no interfieran entre
ellos. Puesto que es una tarea compleja, normalmente se suele contar con
elementos hardware, integrados dentro del mecanismo de traducción, que
validan cada una de las direcciones a las que se accede. Asegurando la
integridad del espacio lógico de cada uno de los procesos en ejecución e
incluso del sistema operativo.

Compartir memoria

Como se acaba de ver, el sistema gestor de memoria debe crear espacios


lógicos independientes para cada proceso. Pero en ocasiones es necesario,
que bajo la supervisión del sistema operativo se compartan espacios de
memoria entre distintos procesos.

Esto implica que varias direcciones lógicas distintas entre sí, se correspondan
con la misma dirección física en memoria. Y también que el sistema gestor de
memoria, permita que la memoria asignada a un proceso no sea contigua.

Figura 7.2. Ejemplo dos procesos compartiendo memoria

Unidad 7. Gestión de memoria. 9


Formación Abierta

El hecho de compartir memoria, implica un mejor aprovechamiento de ésta,


ya que para varias instancias de un mismo programa, bastaría con una sola
copia en memoria compartida para los distintos procesos. Además, otra
ventaja que presenta, es la rapidez con la que los procesos pueden
comunicarse entre sí, utilizando estas zonas de memoria compartida como
áreas de intercambio.

Dar soporte a las regiones de los procesos

Los mapas de los procesos están formados por distintas regiones, cada una
de ellas con sus características y propiedades. Ya que el SO conoce qué
regiones componen el mapa de un proceso, el sistema gestor de memoria
junto con él, debería dar soporte a estas regiones, conservando y cumpliendo
sus características y propiedades. Un ejemplo claro sería que la región
correspondiente al código del programa, puesto que posee la propiedad de no
ser modificable, debería ser protegida por el gestor de memoria, para ser
inaccesible, notificando un error, en caso de detectar intentos de escritura
sobre direcciones de dicha región.

También es importante destacar que el mapa de un proceso no es estático,


sino que puede variar de tamaño, crear nuevas regiones o eliminar las
existentes, durante el desarrollo de la ejecución. Por ello el sistema gestor,
debe llevar un control continuo para cada proceso de las regiones existentes
en el mismo, sus tamaños y propiedades. Todo ello se almacena en la tabla
de regiones del sistema operativo.

El sistema operativo, como programa que es, también tiene sus propias
regiones, a las cuales también debe dar soporte el gestor de memoria.

Maximizar el rendimiento

En sistemas multiprogramados, el número de usuarios que están trabajando


sobre el influye directamente en el porcentaje de utilización de la CPU, y por
tanto, en el rendimiento del sistema.

Es importante que el gestor de memoria, realice una asignación optimizada


de la memoria, para que quepa el mayor número de procesos al mismo
tiempo, minimizando los espacios desperdiciados. Para ello debe aplicar una
política de asignación de espacio adecuada. Estas políticas determinan las
direcciones asignadas, para satisfacer las peticiones de espacio de los
distintos procesos.

10 Unidad 7. Gestión de memoria.


Sistemas Operativos

Como se verá más adelante, también se utilizan técnicas como la paginación


o el uso de la memoria virtual, para optimizar el rendimiento.

Proporcionar grandes mapas de memoria

Cuando los sistemas contaban con una cantidad pequeña de memoria, a


menudo los programas se veían limitados por ésta. Por ello se utilizaban los
overlays a nivel de programación. Que era una técnica mediante la cual un
programa se dividía en fases, que se ejecutaban de una en una, evitando así
cargar el programa completo en memoria. Únicamente se cargaba la fase que
se estaba ejecutando y cuando concluía se cargaba la siguiente.

Posteriormente, puesto que los overlays no eran una solución óptima, se


desarrolló el concepto de memoria virtual. Que permitía proporcionar mapas
de memoria mucho más extensos, independientemente de la memoria real
disponible.

Unidad 7. Gestión de memoria. 11


Formación Abierta

7.2. CICLO DE VIDA DE UN PROGRAMA

Desde el punto de vista de la memoria, un programa atraviesa una serie de


fases, desde que el programador lo escribe en un lenguaje de alto nivel, hasta
que se ejecuta en forma de código máquina. Durante estas fases el sistema
operativo es el encargado de gestionar el mapa de memoria del programa e
irlo evolucionando según las fases, que se detallarán a continuación:

• Compilación.

En esta fase se genera el código máquina a partir del código fuente.


Durante esta fase se asignan direcciones a los símbolos (nombres de
variables, objetos, métodos, etc.) y se resuelven las referencias a los
mismos. De esta forma, si se traduce el nombre de una variable,
asignándola una dirección de memoria, todas las instrucciones que hagan
referencia a esa variable, se resuelven haciendo ahora referencia a la
dirección de dicha variable. Al final, se obtiene un módulo objeto por cada
archivo de código fuente.

• Enlace.

Una vez obtenidos todos los ficheros objeto en la fase de compilación, es


el momento de agruparlos y resolver las referencias entre elementos de
los distintos ficheros, si existieran. A parte de estas referencias entre
ficheros, pueden existir otras referencias a símbolos de otros archivos,
como las bibliotecas o librerías del lenguaje de programación utilizado.
Las cuales también se deben traducir y resolver. Una vez completada esta
fase, se obtiene el archivo ejecutable.

• Carga.

Para que el programa se pueda ejecutar, el archivo ejecutable obtenido en


la fase anterior, debe estar cargado en memoria (total o parcialmente). El
sistema operativo debe reservar el espacio correspondiente en memoria,
copiar el código, los datos iniciales, así como configurar y lanzar el
proceso.

• Ejecución.

Una vez que el programa está en ejecución, se realizan accesos


continuos a memoria. Al menos un acceso por cada una de las
instrucciones que se deben leer y ejecutar.

12 Unidad 7. Gestión de memoria.


Sistemas Operativos

Programa fuente

Compilador

Modulo objeto

Otros objetos y
bibliotecas Enlazador

Programa ejecutable

Bibliotecas del
sistema Cargador

Bibliotecas Programa y datos


dinámicas en memoria

Hardware

Figura 7.3. Ciclo de vida de un programa

Bibliotecas de objetos y del sistema

Una biblioteca es una colección de objetos, que normalmente están


relacionados entre sí. La biblioteca del sistema contiene los servicios que
proporciona a las aplicaciones, se denominan API (Application Programming
Interface) o interfaz de programación de aplicaciones.

Cualquier programador o usuario, puede crear sus propias bibliotecas para


organizar mejor los módulos de una aplicación y permitir que varias
aplicaciones compartan el mismo módulo.

Bibliotecas dinámicas

Con el ciclo de vida visto anteriormente, el resultado obtenido es un


ejecutable autocontenido, es decir, contiene todo el código necesario para
ejecutarse. Tanto el que proviene del código fuente como el importado de las
diferentes librerías.

Unidad 7. Gestión de memoria. 13


Formación Abierta

Esto implica una serie de inconvenientes:

• El archivo ejecutable pueda ser bastante grande, debido a todo el


código que contiene.

• Todo programa que utilice una determinada función de una biblioteca,


tendrá una copia del código de dicha función. En el caso de las
funciones más comunes, implica que esté incluida en casi todos los
ejecutables.

• Si se ejecutan programas de forma simultánea que utilizan la misma


función, existirán varias copias en memoria de dicha función, con el
consiguiente desperdicio de espacio.

• La actualización en algún elemento de una biblioteca, implica tener que


volver a generar los ejecutables.

Para solucionar estos inconvenientes, se utilizan bibliotecas dinámicas o DLL


(Dinamic-Link Library). Estas bibliotecas no se montan en la fase de montaje,
sino en la de ejecución cuando se hace referencia, por primera vez, a algún
objeto incluido en ella. Como parte de este montaje, también se resolverán las
referencias y se modificarán las instrucciones del ejecutable, aplicando las
nuevas direcciones. Las ventajas de este tipo de librerías son:

• Reducen el tamaño de los archivos ejecutables: gran parte del código


puede estar almacenado en bibliotecas y no en el propio ejecutable lo que
redunda en una mejor modularización.

• Pueden estar compartidas entre varias aplicaciones: si el código es


suficientemente genérico, puede resultar de utilidad para múltiples
aplicaciones (por ejemplo, la API gráfica de Windows que usan gran parte
de las aplicaciones).

• Facilitan la gestión y aprovechamiento de la memoria del sistema: la


carga dinámica permite al sistema operativo aplicar algoritmos que
mejoren el rendimiento del sistema cuando se carguen estas bibliotecas.
Además, al estar compartidas, basta con mantener una copia en memoria
para todos los programas que la utilicen.

• Brindan mayor flexibilidad frente a cambios: es posible mejorar el


rendimiento o solucionar pequeños errores distribuyendo únicamente una
nueva versión de la biblioteca dinámica, sin necesidad de generara de
nuevo los ejecutables. Está corrección o mejora será aprovechada por
todas las aplicaciones que compartan la biblioteca.

14 Unidad 7. Gestión de memoria.


Sistemas Operativos

7.3. INTERCAMBIO

Los primeros sistemas, tenían muy poca capacidad de memoria, por lo que
normalmente no se podía cargar más de un proceso en memoria al mismo
tiempo. Para solucionar este problema y optimizar el uso tanto del procesador
como de la memoria, se desarrolla la técnica de intercambio o swapping.

Esta técnica consiste en utilizar un disco o parte del mismo como


complemento de la memoria principal. Así pues, cuando no hay espacio
suficiente en memoria para cargar todos los procesos activos, se van
almacenando en el área de swap del disco. De esta forma cuando un proceso
en ejecución queda bloqueado, se expulsa de la memoria principal (swap
out). Lo que implica copiar toda su imagen en el área de swap (no se copian
ni los huecos, ni el código, ya que se puede volver a recuperar del
ejecutable).

Tarde o temprano, estos procesos expulsados volverán a activarse y a entrar


en ejecución, por lo que serán copiados de nuevo desde el área de swap a la
memoria principal (swap in).

Desde el punto de vista de la asignación del espacio en el área de swap, hay


dos alternativas:

• Preasignación.
Al crear el proceso, ya se reserva el espacio de swap suficiente para
alojar su imagen.

• Sin preasignación.
Se reserva espacio en el área de swap, en el momento en el que el
proceso es desalojado de la memoria principal.

El problema de la técnica de intercambio, es que hay muchas transferencias


de datos entre el disco y la memoria. Lo que ralentiza considerablemente la
ejecución de los procesos. Existen ciertas mejoras, como utilizar un doble
buffer, que permita cargar y descargar procesos, mientras otros se ejecutan.

Por último, es importante destacar que en sistemas que utilicen la técnica de


intercambio, no se permite expulsar procesos que estén realizando
operaciones de E/S por DMA vinculadas a su imagen en memoria. Ya que
esto podría suponer, que el dispositivo de E/S accediese al mapa de memoria
de otro proceso que hubiese sustituido al que comenzó la operación.

Unidad 7. Gestión de memoria. 15


Formación Abierta

7.4. MEMORIA VIRTUAL

En general, la memoria virtual engloba a todas aquellas técnicas de gestión


de memoria, que permiten que un proceso se pueda ejecutar sin estar
cargado completamente en memoria. El concepto básico es utilizar un
dispositivo de almacenamiento secundario, normalmente el disco, para
almacenar el programa, y únicamente trasladar a memoria las partes
necesarias, en cada momento, para la ejecución.

Así pues, la memoria virtual utiliza una jerarquía de dos niveles, formada por
la memoria principal y la memoria secundaria (el disco). Sobre la memoria
secundaria se crea un mapa completo de la memoria virtual. Por tanto, las
direcciones utilizadas por el procesador durante la ejecución, se refieren a
este mapa virtual, pero sin embargo, los accesos reales se realizan sobre la
memoria principal. Esta gestión de memoria, se realiza de forma automática
por el sistema operativo y el hardware como la MMU.

Memoria virtual
Memoria
principal

Dirección
Física
Dirección
Memoria
Fallo de secundaria
Procesador Virtual página
(Disco)
MMU

Figura 7.4. Esquema de la memoria virtual

7.4.1. FUNDAMENTOS DE LA MEMORIA VIRTUAL

Las bases sobre las que se sustenta el funcionamiento de la memoria


principal son las siguientes:

• Las direcciones a las que se refieren las instrucciones de los programas,


corresponden al mapa de la memoria virtual.

16 Unidad 7. Gestión de memoria.


Sistemas Operativos

• El mapa de la memoria virtual está almacenado, una parte en una zona


del disco, denominada zona de intercambio, y la otra en una zona de la
memoria principal.

• Aunque el programa hace referencia a direcciones virtuales, para


ejecutarse, los datos e instrucciones referenciados en esas direcciones
deben residir en la memoria principal. Si no se encuentran en la memoria
principal, se debe realizar una transferencia de esta información, del disco
a la memoria principal antes de que el programa pueda seguir
ejecutándose.

• Los espacios de memoria, ya sea el virtual o el físico, están divididos en


páginas. Se denominan páginas virtuales a las correspondientes al
espacio virtual, y páginas de intercambio a las del disco. En cuanto a los
espacios en los que se divide la memoria principal, se denominan marcos
de página. Cada marco de página puede almacenar una página virtual.

• El hardware encargado de traducir las direcciones virtuales, a direcciones


reales de la memoria principal, es la MMU (Memory Management Unit).
Aplicando los conceptos anteriores, se podría decir que la traducción
consiste, en convertir el número de página virtual en el correspondiente
número de marco de página.

• Puesto que en un momento dado, no todas las páginas del programa


estarán en disponibles en la memoria principal, puede ocurrir que la
traducción no sea posible. En ese caso la MMU produciría un fallo de
página, que indica que la página solicitada no se encuentra en la memoria
principal. Estos fallos de página son recogidos y gestionados por el
sistema operativo, el cual transfiere las páginas requeridas a un marco de
página. Se denomina paginación, al proceso de transferencia de páginas
necesario para atender los fallos de página.

Los procesos presentan una propiedad común que se denomina proximidad


de referencias. Esta propiedad indica, que un proceso solo necesita un
pequeño conjunto de todo su código, para poder ejecutarse en cada
momento. Esto permite que durante la ejecución, existan pocos fallos de
página, ya que normalmente el conjunto de marcos de página disponibles en
memoria, es el necesario para la ejecución en cada momento.

Unidad 7. Gestión de memoria. 17


Formación Abierta

7.4.2. VENTAJAS DE LA MEMORIA VIRTUAL

Algunas de las ventajas que proporciona el uso de la memoria virtual son:

• Aumento del grado de multiprogramación, puesto que no se necesita que


el mapa completo de un proceso esté cargado en memoria. Es decir, que
se pueden cargar varias partes de distintos procesos, lo que mejora
notablemente el rendimiento del sistema. Sin embargo, si el grado de
multiprogramación es excesivamente alto, se producirán muchos fallos de
página y el rendimiento del sistema sería pésimo. A esta situación se la
denomina hiperpaginación.

• El tamaño de los programas puede ser mayor que la memoria principal


disponible.

Se debe tener en cuenta, que el uso de memoria virtual no significa que los
programas se vayan a ejecutar más rápidamente. En realidad puede ser todo
lo contrario, debido a la necesidad de transferencia de información entre el
disco y la memoria. Por ello no es una técnica apropiada para sistemas de
tiempo real.

18 Unidad 7. Gestión de memoria.


Sistemas Operativos

7.5. PAGINACIÓN

En sistemas operativos de computadoras, los sistemas de paginación de


memoria dividen los programas en pequeñas partes o páginas. Del mismo
modo, la memoria es dividida en trozos del mismo tamaño que las páginas
llamados marcos de página. De esta forma, la cantidad de memoria
desperdiciada por un proceso es, únicamente, el final de su última página, lo
que minimiza la fragmentación interna y evita la externa.

• Fragmentación interna.

La fragmentación interna es la pérdida de espacio en memoria debido al


hecho de que el tamaño de un proceso sea inferior al tamaño del marco
de página. Es decir, que no se aproveche el espacio completo asignado a
cada marco de página.

• Fragmentación externa.

Según se van ejecutando procesos, asignando espacios de memoria y


liberándolos con su finalización, se van quedando pequeños fragmentos
de memoria que no pueden volver a ser asignados. A esta situación se la
denomina fragmentación externa.

Como ya se ha visto, el mapa de memoria de cada proceso está dividido en


páginas. Del mismo modo, la memoria también está dividida en bloques,
denominados marcos de página, del mismo tamaño que las páginas. Un
marco de página, contendrá en un instante concreto, una página de memoria
de un proceso.

Para relacionar cada página con el marco de página que la almacena se


utiliza la tabla de páginas. El hardware que gestiona la traducción de
direcciones virtuales a direcciones reales, utiliza esta tabla.

El funcionamiento de la traducción de direcciones consiste básicamente en


detectar a qué página del mapa corresponde una dirección lógica y acceder a
la tabla de páginas, para obtener el número de marco donde se almacena
dicha página. La dirección física tendrá un desplazamiento con respecto al
principio del marco, igual que el que tiene la dirección lógica con respecto al
inicio de la página.

Unidad 7. Gestión de memoria. 19


Formación Abierta

Dirección lógica

Memoria
Página Desplazamiento

Marco de página

Tabla de páginas

Figura 7.5. Esquema traducción de la paginación

Cada entrada de la tabla de páginas, además del número de marco donde


está almacenada la página, contiene la siguiente información:

• Información de protección: un conjunto de bits especifican los tipos de


acceso que están permitidos (lectura, escritura y ejecución).

• Indicador de página válida: un bit indica si la página tiene una traducción


asociada. En los esquemas de memoria virtual, este bit también se utiliza
para determinar si una página está cargada en memoria o no.

Es importante destacar, que el sistema operativo también gestiona una tabla


de marcos de página, en la que administra el estado de ocupación de la
memoria principal, recopilando información sobre los marcos que están libres
y cuáles ocupados.

7.5.1. MECANISMOS DE OPTIMIZACIÓN

El método clásico de paginación que se ha definido hasta ahora, presenta una


serie de problemas, debido a la ubicación de las tablas en la memoria
principal.

20 Unidad 7. Gestión de memoria.


Sistemas Operativos

Estos problemas son:

• Eficiencia.

Dado que para acceder a cada dirección se deben realizar dos accesos a
memoria (uno para obtener el marco de página y otro para acceder a la
propia página), el rendimiento se reduce considerablemente. Para
solucionar este problema se utiliza una caché de traducciones
denominada TLB, que se detallaran a continuación.

• Consumo de espacio.

Las tablas de página son muy grandes y se debe almacenar una por cada
proceso, con tantas entradas como páginas, incluyendo las que estén
vacías. La solución a este problema es la utilización de las tablas
multinivel.

TLB (Translation Lookaside Buffer)

La TLB se trata de una memoria tipo caché, incluida en la MMU, que


mantiene información sobre las últimas páginas accedidas. Esta tabla es
similar a la tabla de páginas, ya que contiene los mismos datos, pero además
almacena el número de página para poder realizar una búsqueda directa.
Existen dos opciones de diseño de una TLB:

• TLB sin identificadores de proceso.

La MMU accede a la TLB solo por el número de página. Así pues cada
vez que se produce un cambio en el proceso en ejecución, se debe
invalidar la TLB, ya que para cada proceso será diferente.

• TLB con identificadores de proceso.

La MMU accede a la TLB con el número de página y el identificador del


proceso. Por tanto cada entrada de la TLB almacena también este
identificador. De esta forma la TLB es válida para almacenar información
de varios procesos.

Tabla de páginas multinivel

Con este esquema, en vez de existir una sola tabla de páginas por proceso,
hay una jerarquía de ellas. Partiendo de una única tabla de primer nivel, cada
una de sus entradas apunta a una tabla de página de segundo nivel y así
sucesivamente.

Unidad 7. Gestión de memoria. 21


Formación Abierta

Ahora al traducir una dirección lógica, el número de página contenido en ella,


irá dividido en tantas partes como niveles existan. Las tablas de último nivel
son las que contienen las direcciones de las páginas, las superiores solo
contienen punteros a otras tablas.

Dirección lógica

Página nivel 1 Página nivel 2 Desplazamiento

Memoria

Marco de página

Tabla de páginas
de primer nivel

Tabla de páginas
de segundo nivel

Figura 7.6. Esquema traducción utilizando paginación

Es importante destacar que en el caso de la paginación multinivel, se hace


más imprescindible el uso de TBL, ya que ahora el número de accesos se
multiplica.

22 Unidad 7. Gestión de memoria.


Sistemas Operativos

7.6. SEGMENTACIÓN

Haciendo uso de la paginación, la MMU no es consciente de las distintas


regiones de los procesos, únicamente gestiona páginas. El sistema operativo
debe guardar una tabla de regiones en las que almacena información de que
páginas corresponden a cada región del proceso.

Con la segmentación la MMU conoce las distintas regiones y trata cada


región como una unidad. Para ello el mapa de memoria está dividido en
segmentos de tamaño variable, almacenando en cada uno de ellos una región
del proceso.

En la tabla de segmentos que gestiona la MMU, cada entrada contiene la


información de protección, el registro base y el registro límite, que delimitan
dicha región. Una dirección lógica, está formada por un número de segmento
y el desplazamiento dentro de éste. La traducción de esta dirección, consiste
en acceder al segmento correspondiente, validar el desplazamiento, en
función de los registros base y límite.

Dirección lógica

Segmento Desplazamiento

Memoria

Límite Base

No
>

Excepción: dirección ilegal

Figura 7.7. Esquema traducción utilizando segmentación

Unidad 7. Gestión de memoria. 23


Formación Abierta

El proceso de traducción es el siguiente:

• Buscar en la tabla de segmentos, el incluido en la dirección lógica.

• Tomar la dirección base y la límite.

• Comprobar que el desplazamiento es menor que la dirección límite o


viceversa.

• Sumar la dirección base al desplazamiento, obteniendo la dirección física.

• Acceder a la dirección física.

La segmentación proporciona un mecanismo de protección de memoria, ya


que un proceso solo puede trabajar con los segmentos que tiene declarados
en su tabla de segmentos, por lo que no podrá acceder a segmentos ajenos.
Asimismo, los límites imposibilitan el acceso fuera de los segmentos. Y por
último, se permite incorporar privilegios de acceso para cada uno de los
segmentos.

Cabe destacar, que con este método, al almacenar los segmentos de forma
contigua, existe fragmentación externa.

7.6.1. SEGMENTACIÓN PAGINADA

Con esta técnica, se intentan unir las ventajas que poseen la técnica de
segmentación y la de paginación por separado.

En la segmentación paginada, cada segmento está compuesto por una serie


de páginas, lo que implica que no tengan que almacenarse de forma contigua
en memoria. La MMU utiliza una tabla de segmentos, en la que cada entrada
de la tabla apunta a una tabla de páginas.

Esta técnica requiere un hardware mucho más complejo que la paginación,


por lo que normalmente no se implementa.

24 Unidad 7. Gestión de memoria.


Sistemas Operativos

7.7. PAGINACIÓN POR DEMANDA

La paginación por demanda, se basa en la idea de que inicialmente ninguna


de las páginas del proceso está cargada en memoria. El sistema operativo, es
el encargado de realizar las transferencias de páginas desde disco a
memoria, cuando un proceso las demande, es decir, cuando necesita acceder
a una página que no está en memoria.

Cuando se intenta acceder a una página que no está en memoria, se produce


un fallo de página, que indica al sistema operativo que debe realizar una
transferencia de la página correspondiente, a la memoria principal. Si al
intentar traer la página memoria, se detecta que no hay espacio suficiente (no
hay marcos libres), será necesario expulsar una página de memoria y ubicarla
en disco. El algoritmo para elegir cuál será la página expulsada, se denomina
algoritmo de reemplazo, que se detallarán en el punto siguiente.

En la paginación por demanda, se utiliza el bit que indica si la página es


válida. Se consideran inválidas todas las páginas que no están cargadas en
memoria en un momento dado. En estas páginas no se almacena la dirección
del marco, sino la dirección del bloque de disco que contiene la página. Así
que al producirse un fallo de página, el sistema operativo ya conoce el bloque
del disco al que debe acceder, para recuperar la página y almacenarla en la
memoria principal.

Unidad 7. Gestión de memoria. 25


Formación Abierta

7.8. POLÍTICAS DE REEMPLAZO

Dentro de las políticas o estrategias de reemplazo existen dos grandes


grupos:

• Estrategias de reemplazo global: en este tipo de estrategias, se permite


expulsar de memoria un marco de página perteneciente a otro proceso.

• Estrategias de reemplazo local: a la inversa que el anterior, en este tipo


de estrategia, el marco de página a expulsar debe ser del mismo proceso
que produce el fallo de página.

Los algoritmos de reemplazo que se utilizan para decidir qué marco de página
debe ser expulsado, se pueden utilizar tanto como reemplazo global como
reemplazo local. El objetivo principal de estos algoritmos es minimizar la tasa
de fallos de página, procurando que la ejecución del propio algoritmo no
influya en el rendimiento del sistema. A continuación se detallan los
algoritmos más importantes.

Algoritmo de reemplazo óptimo

Basándose en que el objetivo es generar el mínimo número de fallos de


página, este algoritmo escoge como página a expulsar, aquella que más va a
tardar en ser accedida, o lo que es lo mismo, la que más tiempo va a tardar
en volverse a usar.

Por supuesto, este algoritmo no se puede implementar, ya que no es posible


conocer cuál va a ser la secuencia de accesos a páginas, para poder
determinar cuál será la que más va a tardar en volver a ser accedida.

Algoritmo FIFO (First Input First Output)

Es un algoritmo sencillo y de fácil implementación. Como su nombre indica,


se van expulsando las páginas según su orden de llegada. Por ello se
mantiene una lista con las páginas residentes en memoria y el tiempo que
llevan cargadas. En el momento en que se necesite reemplazar una página,
se expulsará a la página que más tiempo lleve cargada en memoria.

Este algoritmo, no siempre tiene un rendimiento bueno. Ya que es posible,


que la página que lleve más tiempo, contenga datos o instrucciones a las que
se accede con mucha frecuencia.

26 Unidad 7. Gestión de memoria.


Sistemas Operativos

Este algoritmo también sufre un comportamiento conocido como anomalía de


Belady. Se podría pensar que cuantos más marcos de página haya en
memoria, menos fallos de página se deberían producir. Pues al contrario de lo
expuesto, ciertos patrones de referencias causan que el algoritmo tenga el
comportamiento opuesto.

Algoritmo de la segunda oportunidad o del reloj

Es una mejora del algoritmo FIFO, para evitar expulsar páginas que sean muy
utilizadas. En el momento en que se necesita expulsar una página, se
comprueba el bit de referencia, que indica si la página ha sido accedida (la
primera vez siempre estará a 1, ya que habrá sido accedida). Si el bit posee
el valor 1 (indicando que ha sido accedida), se pone a cero y se coloca la
página al principio de la lista como si acabase de llegar. Así, se le proporciona
una segunda oportunidad y en caso de que siga siendo accedida, nunca será
expulsada de memoria.

Puesto que para su implementación se utiliza un lista circular, también recibe


el nombre de algoritmo del reloj.

Algoritmo de LRU (Last Recently Used)

Este algoritmo se basa en la teoría de, que probablemente, se vuelva a


acceder a las páginas que hace menos tiempo que han sido utilizadas. Por
tanto en caso de necesidad, se expulsará de memoria la página que haga
más tiempo que no ha sido accedida.

Aunque el algoritmo es realizable y su rendimiento es bueno, resulta muy


difícil de implementar, ya que requiere mantener ordenada continuamente la
lista de páginas, en función de la última vez que fueron accedidas.

Una variante, consiste en mantener un contador de accesos por cada una de


las páginas. Así a la hora de expulsar a una de ellas, bastaría con obtener la
página con el menor valor en este contador. A esta variante, teóricamente se
la conoce como LFU (Least Frequently Used) o utilizada menos
frecuentemente.

Unidad 7. Gestión de memoria. 27


Sistemas Operativos

♦ RESUMEN

• Dentro de un sistema informático, la memoria es sin duda uno de los


elementos más importantes. Ligado a ella está el gestor de memoria, que
es el subsistema, o parte del sistema operativo, encargado del tratamiento
de este recurso. La misión principal del gestor de la memoria es la
asignación de memoria principal a los procesos que la soliciten.

• Los objetivos o funciones básicas que debe llevar a cabo un sistema


gestor de memoria son: proporcionar a cada proceso un espacio lógico
propio, proteger el correcto funcionamiento del sistema operativo e incluso
de otros procesos, gestionar la manera de compartir espacios de memoria
entre distintos procesos, dar soporte a las regiones de los procesos,
conservando y cumpliendo sus características y propiedades, maximizar
el rendimiento del sistema y proporcionar grandes mapas de memoria.

• Desde el punto de vista de la memoria, un programa atraviesa una serie


de fases, desde que el programador lo escribe en un lenguaje de alto
nivel, hasta que se ejecuta en forma de código máquina. Durante estas
fases el sistema operativo es el encargado de gestionar el mapa de
memoria del programa e irlo evolucionando según las fases siguientes:
compilación, enlace, carga y ejecución.

• Una biblioteca es una colección de objetos, que normalmente están


relacionados entre sí. Cualquier programador o usuario, puede crear sus
propias bibliotecas para organizar mejor los módulos de una aplicación y
permitir que varias aplicaciones compartan el mismo módulo.

• Las biblioteca dinámicas, no se montan en la fase de montaje, sino en la


de ejecución cuando se hace referencia, por primera vez, a algún objeto
incluido en ella. Las ventajas de este tipo de librerías son que: reducen el
tamaño de los archivos ejecutables, pueden estar compartidas entre
varias aplicaciones, facilitan la gestión y aprovechamiento de la memoria
del sistema y brindan mayor flexibilidad frente a cambios.

Unidad 7. Gestión de memoria. 29


Formación Abierta

• La técnica de intercambio consiste en utilizar un disco o parte del mismo


como complemento de la memoria principal. Así pues, cuando no hay
espacio suficiente en memoria para cargar todos los procesos activos, se
van almacenando en el área de swap del disco. Cuando los procesos
expulsados vuelvan a activarse y a entrar en ejecución, serán copiados de
nuevo desde el área de swap a la memoria principal.

• La memoria virtual engloba a todas aquellas técnicas de gestión de


memoria, que permiten que un proceso se pueda ejecutar sin estar
cargado completamente en memoria.

• Algunas de las ventajas que proporciona el uso de la memoria virtual son:


el aumento del grado de multiprogramación y que el tamaño de los
programas puede ser mayor que la memoria principal disponible.

• En sistemas operativos de computadoras, los sistemas de paginación de


memoria dividen los programas en pequeñas partes o páginas. Del mismo
modo, la memoria es dividida en trozos del mismo tamaño que las páginas
llamados marcos de página. De esta forma, la cantidad de memoria
desperdiciada por un proceso es, únicamente, el final de su última página,
lo que minimiza la fragmentación interna y evita la externa.

• La TLB se trata de una memoria tipo caché, incluida en la MMU, que


mantiene información sobre las últimas páginas accedidas.

• Con la segmentación la MMU conoce las distintas regiones y trata cada


región como una unidad. Para ello el mapa de memoria está dividido en
segmentos de tamaño variable, almacenando en cada uno de ellos una
región del proceso.

• En la tabla de segmentos que gestiona la MMU, cada entrada contiene la


información de protección, el registro base y el registro límite, que
delimitan dicha región. Una dirección lógica, está formada por un número
de segmento y el desplazamiento dentro de éste. La traducción de esta
dirección, consiste en acceder al segmento correspondiente, validar el
desplazamiento, en función de los registros base y límite.

30 Unidad 7. Gestión de memoria.


Sistemas Operativos

• La paginación por demanda, se basa en la idea de que inicialmente


ninguna de las páginas del proceso está cargada en memoria. El sistema
operativo, es el encargado de realizar las transferencias de páginas desde
disco a memoria, cuando un proceso las demande, es decir, cuando
necesita acceder a una página que no está en memoria.

• Los algoritmos de reemplazo se utilizan para decidir qué marco de página


debe ser expulsado.

Unidad 7. Gestión de memoria. 31


SISTEMAS
OPERATIVOS

SEGURIDAD Y
PROTECCIÓN
Sistemas Operativos

ÍNDICE
♦  OBJETIVOS................................................................................................3 

♦  INTRODUCCIÓN ........................................................................................4 
8.1.  Concepto de seguridad ........................................................................7 
8.2.  Problemas de seguridad ....................................................................10 
8.2.1.  Caballo de Troya ...........................................................................10 
8.2.2.  Puerta trasera ................................................................................11 
8.2.3.  Bomba lógica .................................................................................11 
8.2.4.  Desbordamiento de pila y de búfer ................................................12 
8.2.5.  Virus ..............................................................................................13 
8.2.6.  Gusanos ........................................................................................15 
8.2.7.  Escaneo de puertos .......................................................................15 
8.2.8.  Denegación de servicio ..................................................................16 
8.3.  Políticas de seguridad ........................................................................17 
8.4.  Criptografía .........................................................................................18 
8.4.1.  Cifrado ...........................................................................................19 
8.5.  Concepto de protección .....................................................................22 
8.6.  Mecanismos de protección ................................................................23 
8.6.1.  Autenticación de usuarios ..............................................................23 
8.6.2.  Utilización de claves ......................................................................24 
8.6.3.  Dominios........................................................................................27 
8.6.4.  Matrices .........................................................................................30 
RESUMEN.....................................................................................................33 

Unidad 8. Seguridad y protección. 1


Sistemas Operativos

♦ OBJETIVOS

• Conocer qué es la seguridad de un sistema.

• Saber cuáles son los tipos de violaciones de seguridad, tanto


intencionadas como accidentales.

• Saber cuáles son los distintos niveles en los que se deben adoptar las
medidas de seguridad en un sistema.

• Conocer detalladamente los diferentes problemas de seguridad a los que


se enfrenta un sistema (caballos de Troya, puertas traseras, bombas
lógicas, virus, etc.).

• Conocer el concepto de política de seguridad, en qué consiste y los


requisitos que debe cumplir.

• Conocer qué es la criptografía, para qué se utiliza y los distintos métodos


de cifrado utilizados.

• Conocer el concepto de protección.

• Conocer y diferenciar los distintos mecanismos de protección


(autenticación, claves, dominios y matrices).

Unidad 8. Seguridad y protección. 3


Formación Abierta

♦ INTRODUCCIÓN

Como se ha ido desarrollando a lo largo de las unidades anteriores, el


sistema operativo, es el responsable de multitud de tareas dentro de un
sistema informático: la gestión de procesos, la gestión de memoria, la gestión
de datos a través de su almacenamiento en archivos y directorios, etc.

En esta última unidad, se tratará una tarea que también corresponde, en gran
parte, al sistema operativo y que de alguna manera afecta a todas las demás
funciones de dicho sistema. Se trata de la tarea de seguridad y de protección
de todos los elementos del sistema.

Como se ha comentado, es una tarea que afecta al conjunto de todo el


sistema. Ya que todos los servicios, datos, funcionalidades, arquitecturas,
administración de usuarios, etc., carecen de rigor o fiabilidad, si no se
encuentran bajo el paraguas de una política estricta de seguridad y
protección.

Cabe destacar, que aunque parezcan términos similares, la seguridad y la


protección, desde el punto de vista de los sistemas operativos, son dos
conceptos muy distintos. Por ello en esta unidad, se detallará cada uno de
ellos por separado, pudiéndose observar que realmente son conceptos
complementarios.

Como idea introductoria de estos dos conceptos, se parte de que los


procesos en un sistema operativo, deben protegerse de las actividades
realizadas por otros procesos. Para proporcionar dicha protección, podemos
utilizar diversos mecanismos para garantizar que solo los procesos que hayan
obtenido la adecuada autorización del sistema operativo puedan operar sobre
los archivos, los segmentos de memoria, la CPU y otros recursos del sistema.

El concepto de protección hace referencia a un mecanismo para controlar el


acceso de los programas, de los procesos o de los usuarios a los recursos
definidos por el sistema informático. Este mecanismo debe proporcionar un
medio de especificar los controles que hay que imponer, junto con un modo
de imponerlos.

4 Unidad 8. Seguridad y protección.


Sistemas Operativos

Por otra parte, la garantía de seguridad es un concepto mucho más amplio


que la protección (que es estrictamente un problema interno). La seguridad,
requiere no solo un adecuado sistema de protección, sino también tener en
cuenta el entorno externo dentro del que opera el sistema. Un sistema de
protección no será efectivo si la autenticación de los usuarios se ve
comprometida o si un programa es ejecutado por un usuario no autorizado.

Los recursos informáticos deben protegerse frente a los accesos no


autorizados, frente a la modificación o destrucción maliciosas y frente a la
introducción accidental de incoherencias. Entre esos recursos podemos incluir
la información almacenada en el sistema (tanto datos como código), así como
la CPU, la memoria, los discos, las cintas y los sistemas de interconexión por
red que forman la computadora.

En este capítulo, también se examinarán las formas en que los recursos


pueden ser mal utilizados de forma accidental o premeditada. A continuación,
se detallará en qué consiste una de las técnicas en las que se basa la
seguridad: la criptografía. Y por último, lo que es la protección y los métodos
existentes para alcanzarla.

Unidad 8. Seguridad y protección. 5


Sistemas Operativos

8.1. CONCEPTO DE SEGURIDAD

La seguridad de un sistema, es una tarea a la que merece la pena dedicar un


esfuerzo considerable. Los sistemas, desde los de un usuario común, hasta
los grandes sistemas comerciales y financieros, contienen gran cantidad
datos sensibles, que deben ser protegidos. El concepto de seguridad tiene
múltiples facetas, abarcando desde aspectos tales como la protección frente a
daños físicos de los datos (fuegos, terremotos, desastres naturales, etc.),
hasta el acceso indebido de los mismos (intrusos, fallos de confidencialidad,
fallos de integridad, etc.). En los puntos siguientes, se tratarán únicamente
aspectos de seguridad relacionados con el acceso indebido.

Se considera que un sistema es seguro si sus recursos se utilizan de la forma


prevista y si se accede a ellos tal como se pretendía, en todas las
circunstancias. La idea de diseñar o utilizar un sistema totalmente seguro es
algo utópico, ya que ningún sistema es seguro al cien por cien. Pero aún así,
se deben proporcionar los mecanismos necesarios para hacer que los fallos
de seguridad constituyan la excepción, en lugar de la norma.

Las violaciones de seguridad o la mala utilización de un sistema pueden


clasificarse en dos categorías: intencionadas (maliciosas) o accidentales.
Resulta más fácil la protección frente a una mala utilización accidental que
frente a otra maliciosa. A continuación, se detallan algunas de las posibles
violaciones de seguridad intencionadas y accidentales:

• Ruptura de la confidencialidad. Este tipo de violación implica la lectura


no autorizada de determinados datos (o el robo de información).

• Ruptura de la integridad. Este tipo de ataque implica la modificación no


autorizada de los datos.

• Ruptura de la disponibilidad. Esta violación de seguridad implica la


destrucción no autorizada de datos.

• Robo de servicio. Este tipo de violación de seguridad implica el uso no


autorizado de recursos.

• Denegación de servicio. Esta violación de seguridad implica impedir el


uso legítimo del sistema.

Unidad 8. Seguridad y protección. 7


Formación Abierta

Para proteger un sistema, se deben adoptar las necesarias medidas de


seguridad en cuatro niveles distintos:

• Físico.

Los sistemas informáticos deben dotarse de medidas de seguridad físicas


frente a posibles intrusiones, incidentes o catástrofes. Hay que dotar de
seguridad tanto a las ubicaciones físicas de las máquinas, como a los
terminales que tengan acceso a dichas máquinas. En este nivel son
importantes los mecanismos de detección como: los detectores de humo,
sensores de calor, detectores de movimiento, etc., así como los sistemas
de identificación física: tarjetas de identificación, huellas digitales,
reconocimiento de la voz, etc.

• Humano.

La autorización de los usuarios es una tarea muy delicada, ya que debe


garantizar que solo los usuarios adecuados tengan acceso al sistema. Sin
embargo, incluso los usuarios autorizados pueden verse motivados o
engañados, permitiendo que otros usen su acceso. Lo que complica
notablemente la seguridad en este nivel.

• Sistema operativo.

El sistema debe autoprotegerse frente a los posibles fallos de seguridad


accidentales o premeditados. Un proceso que esté fuera de control podría
llegar a constituir un ataque accidental de denegación de servicio.
Asimismo, una cierta consulta a un servicio podría conducir a la revelación
de contraseñas o un desbordamiento de la pila podría permitir que se
iniciara un proceso no autorizado. La lista de posibles fallos de seguridad
es casi infinita.

• Red.

Son muchos los datos, en los sistemas informáticos actuales, que viajan a
través de líneas privadas, de líneas compartidas como Internet, de
conexiones inalámbricas, etc. La interceptación de estos datos podría ser
tan dañina como el acceso a una computadora, y la interrupción de la
comunicación podría constituir un ataque remoto de denegación de
servicio, disminuyendo la capacidad de uso del sistema y la confianza en
el mismo por parte de los usuarios.

8 Unidad 8. Seguridad y protección.


Sistemas Operativos

Si se desea garantizar la seguridad del sistema operativo, es necesario


garantizar la seguridad en los primeros dos niveles. Cualquier debilidad en
uno de los niveles altos de seguridad (físico o humano) permitirá puentear las
medidas de seguridad que son estrictamente de bajo nivel (del nivel del
sistema operativo). Así, la frase que afirma que una cadena es tan fuerte
como el más débil de sus eslabones es especialmente cierta cuando
hablamos de la seguridad de los sistemas.

Unidad 8. Seguridad y protección. 9


Formación Abierta

8.2. PROBLEMAS DE SEGURIDAD

Ningún sistema operativo comercial, está libre de los temidos problemas de


seguridad. De hecho a lo largo de la historia ha habido innumerables casos,
que han salido a la luz pública debido a su magnitud o su alcance. En este
punto, se van a detallar algunos de esos problemas de seguridad. Algunos de
ellos están relacionados con el uso de programas maliciosos y otros con los
usuarios.

8.2.1. CABALLO DE TROYA

Se denomina troyano o caballo de Troya a un programa malicioso que se


presenta al usuario como un programa aparentemente legítimo e inofensivo,
pero al ejecutarlo ocasiona ciertos daños en el sistema. El término troyano
proviene de la historia del caballo de Troya mencionado en la Odisea de
Homero. Un troyano no es un virus informático, la principal diferencia es que
los troyanos no propagan la infección a otros sistemas por sí mismos.

Los troyanos pueden realizar diferentes tareas, pero, en la mayoría de los


casos crean una puerta trasera (concepto que se verá a continuación), que
permite la administración remota a un usuario no autorizado.

Como se ha comentado, los troyanos normalmente están diseñados para


permitir a un individuo el acceso remoto a un sistema. Una vez ejecutado el
troyano, el individuo puede acceder al sistema de forma remota y realizar
diferentes acciones sin necesitar permiso. Las acciones que el individuo
puede realizar en el equipo remoto dependen de los privilegios que tenga el
usuario en el ordenador remoto y de las características del troyano.

Algunas de las operaciones que se pueden llevar a cabo en el ordenador


remoto son:

• Utilizar la máquina como parte de una red de envío de spam.

• Instalación de otros programas (incluyendo otros programas maliciosos).

• Robo de información personal: información bancaria, contraseñas,


códigos de seguridad…

• Borrado, modificación o transferencia de archivos (descarga o subida).

10 Unidad 8. Seguridad y protección.


Sistemas Operativos

• Ejecutar o terminar procesos.

• Apagar o reiniciar el equipo.

• Monitorizar las pulsaciones del teclado.

• Realizar capturas de pantalla.

• Ocupar el espacio libre del disco duro con archivos inútiles.

8.2.2. PUERTA TRASERA

El diseñador de un programa o un sistema puede dejar detrás suyo un


agujero en el software que solo él sea capaz de utilizar, una puerta trasera.
En ocasiones estos accesos rápidos, no se crean con malas intenciones, sino
que se crean con el fin de realizar pruebas en el sistema, para realizar tareas
de mantenimiento, etc. Aun con esta finalidad, son una brecha en la
seguridad del sistema, que cualquiera podría aprovechar para fines poco
lícitos.

Este tipo de brechas de seguridad no se consideran propiamente como un


virus, aunque sí que representan un riesgo de seguridad importante, y
usualmente se desconoce el gran número de problemas que estas puedan
llegar a producir. En general, se puede decir que se tratan de un método "no
oficial" de acceso a un sistema.

Normalmente forman parte de programas, los cuales no se reproducen solos


como los virus, sino que usualmente son enviados de forma oculta (en
caballos de Troya), por lo que no son fáciles de detectar. Por si solos no
siempre causan daños ni efectos inmediatos, por lo que pueden llegar a
permanecer activos mucho tiempo sin que se tenga noticia de su existencia.

8.2.3. BOMBA LÓGICA

Una bomba lógica, se trata de un programa capaz de iniciar un incidente de


seguridad solo cuando se dan determinadas circunstancias. Sería difícil de
detectar porque, en condiciones normales de operación, no existiría ningún
agujero de seguridad. Sin embargo, cuando se satisficiera un conjunto
predefinido de parámetros, se crearía el agujero de seguridad.

Unidad 8. Seguridad y protección. 11


Formación Abierta

Un programador, por ejemplo, podría escribir código para detectar si todavía


continúa contratado por la empresa. En caso de que dicha comprobación
fallara, podría crearse una puerta trasera para permitir el acceso remoto, o
podría iniciarse un determinado fragmento de código que provocara algún tipo
de daño en la instalación.

8.2.4. DESBORDAMIENTO DE PILA Y DE BÚFER

El ataque por desbordamiento de pila o de búfer es la forma más común para


que un atacante externo al sistema, a través de una conexión de red o de
acceso telefónico, obtenga acceso no autorizado al sistema objetivo. Los
usuarios autorizados del sistema también pueden utilizar este tipo de ataque
para escalar sus privilegios.

Esencialmente, lo que el ataque hace es aprovechar un error de un programa.


El error puede deberse a un simple caso de mala práctica de programación,
en el que el programador se olvidó de incluir en el código comprobaciones del
límite para un determinado caso de entrada. En este caso, el atacante envía
más datos de los que el programa está esperando. Utilizando un método de
prueba y error, o examinando el código fuente del programa atacado, si es
que está disponible, el atacante determina la vulnerabilidad y escribe un
programa para hacer lo siguiente:

1. Desbordar un campo de entrada, un argumento de línea de comandos o un


búfer de entrada hasta escribir en la zona correspondiente a la pila.

2. Sobrescribir la dirección actual de retorno de la pila, sustituyéndola por la


dirección de los códigos de ataque cargados en el paso 3.

3. Escribir un fragmento simple de código en el siguiente espacio de la pila,


que incluye los comandos que el atacante quiera ejecutar, como por
ejemplo arrancar un programa Shell (con lo que podrá ejecutar mandatos
de sistema).

El resultado de la ejecución de este programa de ataque será proporcionarle


una Shell de acceso al sistema o la ejecución de otro comando privilegiado.

12 Unidad 8. Seguridad y protección.


Sistemas Operativos

8.2.5. VIRUS

Otro tipo de amenaza en forma de programa son los virus. Los virus pueden
ser autoreplicantes y suelen estar diseñados para infectar otros programas.
Un virus es el fragmento de código malintencionado, integrado dentro de un
programa legítimo.

Pueden causar estragos en un sistema modificando o destruyendo archivos y


provocando funcionamientos inadecuados de los programas y fallos
catastróficos del sistema. Al igual que la mayoría de los ataques de
penetración, los virus son muy específicos de las distintas arquitecturas,
sistemas operativos y aplicaciones. Los virus constituyen, un problema
especialmente grave para los usuarios de máquina de tipo PC. UNIX y otros
sistemas operativos multiusuario no son, generalmente, susceptibles a los
virus, porque los programas ejecutables están protegidos contra escritura por
el propio sistema operativo. Incluso si un virus llega a infectar a uno de esos
programas, sus poderes están usualmente limitados, porque otros aspectos
del sistema están también protegidos.

Una vez que un virus alcance una máquina objetivo, un programa conocido
como lanzador de virus inserta el virus en el sistema. El lanzador de virus es
usualmente un caballo de Troya, que se ejecuta por otras razones pero cuya
principal actividad consiste en instalar el virus. Una vez instalado, el virus
puede hacer lo que desee. Existen literalmente miles de virus distintos, pero
se los puede clasificar en varias categorías generales. Observe que muchos
virus pertenecen a más de una categoría a la vez:

• Archivo.

Un virus de archivo estándar infecta un sistema insertándose a un archivo


y modificando el inicio del programa para que la ejecución salte al código
del virus. Después de ejecutarse, el virus devuelve el control al programa
para que no pueda detectarse que el virus se ha ejecutado. Los virus de
archivo se conocen, en ocasiones, con el nombre de virus parásitos, ya
que no dejan ningún archivo completo detrás suyo y permiten que el
programa huésped siga funcionando.

• Arranque.

Un virus de arranque infecta el sector de arranque del sistema,


ejecutándose cada vez que el sistema se arranca y antes de que se
cargue el sistema operativo.

Unidad 8. Seguridad y protección. 13


Formación Abierta

• Macro.

La mayoría de los virus están escritos en un lenguaje de bajo nivel, como


por ejemplo ensamblador o C. Los virus de macro están escritos en un
lenguaje de alto nivel, como Visual Basic. Estos virus se activan cuando
se inicia un programa capaz de ejecutar la macro: por ejemplo, un virus de
macro podría estar contenido en un archivo de hoja de cálculo.

• Código fuente.

Un virus de código fuente busca código fuente y lo modifica para incluir el


virus y ayudar a su distribución.

• Polimórfico.

Este tipo de virus cambia cada vez que se instala, para evitar su detección
por parte del software antivirus. Los cambios no afectan a la funcionalidad
del virus, sino que solo modifican la signatura del virus. Una signatura de
virus es un patrón que puede usarse para identificar un virus,
normalmente una serie de bytes que forman parte del código de virus.

• Cifrado.

Un virus cifrado incluye código de descripción junto con el virus cifrado, de


nuevo para evitar la detección. El virus se descifra primero y luego se
ejecuta.

• Encubierto.

Este insidioso virus trata de evitar la detección modificando partes del


sistema que podrían ser usadas para detectarlo. Por ejemplo, podría
modificar la llamada al sistema “read” para que, si se lee el archivo que el
virus ha modificado, se devuelva el código original en lugar del código
infectado.

• Túnel.

Este tipo de virus trata de evitar la detección por los programas antivirus
instalándose a sí mismo en la cadena de rutinas de tratamiento de
interrupciones. Otros virus similares se instalan en los controladores de
dispositivo.

14 Unidad 8. Seguridad y protección.


Sistemas Operativos

• Multiparte.

Los virus de este tipo son capaces de infectar múltiples partes de un


sistema, incluyendo los sectores de arranque, la memoria y los archivos.
Esto hace que sea difícil detectarlos y evitar su propagación.

• Acorazado.

Los virus acorazados están codificados de tal manera que resultan


difíciles de desentrañar y de comprender por parte de los investigadores
que desarrollan programas antivirus. Además, los lanzadores de virus y
otros archivos complejos que forman parte de un determinado virus de
este tipo, suelen frecuentemente ocultarse utilizando los atributos de
archivos o empleando nombres de archivo no visualizables.

Generalmente, los virus son el tipo de ataque de seguridad más dañino; y


como son bastante efectivos, continuarán desarrollándose y distribuyéndose.

8.2.6. GUSANOS

Un gusano es un proceso que utiliza un mecanismo de reproducción para


afectar al rendimiento del sistema. El gusano crea copias de sí mismo,
utilizando recursos del sistema y en ocasiones impidiendo operar a todos los
demás procesos. En las redes informáticas, los gusanos son particularmente
potentes, ya que pueden reproducirse de un sistema a otro y colapsar una red
completa.

8.2.7. ESCANEO DE PUERTOS

El escaneo de puertos no es un ataque, sino más bien un método para


detectar las vulnerabilidades del sistema que puedan ser atacadas. El
escaneo de puertos se realiza normalmente de forma automatizada, lo que
implica utilizar una herramienta que trate de crear una conexión TCP/IP a un
puerto o rango de puertos específicos.

Puesto que los escaneos de puertos son detectables, se suelen realizar


desde sistemas zombi. Dichos sistemas son máquinas independientes y
previamente comprometidas que están prestando un servicio normal a sus
propietarios al mismo tiempo que son utilizadas inadvertidamente para
propósitos ilícitos, incluyendo la realización de ataques por denegación de
servicio y la retransmisión de correo basura.

Unidad 8. Seguridad y protección. 15


Formación Abierta

8.2.8. DENEGACIÓN DE SERVICIO

Como hemos mencionado anteriormente, los ataques de denegación de


servicio, están dirigidos no a obtener información o a robar recursos, sino a
impedir el uso legítimo de un sistema o funcionalidad. La mayoría de los
ataques de denegación de servicio afectan a sistemas en los que el atacante
no ha penetrado. De hecho, lanzar un ataque que impida el uso legítimo de
un sistema resulta, frecuentemente, más sencillo que irrumpir en una máquina
o instalación.

Los ataques de denegación de servicio se realizan generalmente a través de


la red. Se los puede clasificar en dos categorías. El primer caso es el de los
ataques que consumen tantos recursos de la máquina atacada que
prácticamente no puede realizarse con ella ningún trabajo útil. Y el segundo
caso de ataque implica hacer caer la red o la instalación.

Generalmente, es imposible prevenir los ataques de denegación de servicio.


Los ataques utilizan los mismos mecanismos que la operación normal.
Todavía más difíciles de prevenir y de solucionar son los ataques distribuidos
de denegación de servicio (DDOS, Distributed Denial-of-Service Attacks).
Estos ataques se inician desde múltiples sitios a la vez, dirigidos hacia un
objetivo común, normalmente por parte de programas zombis.

En ocasiones, un determinado sitio puede no ser ni siquiera consciente de


que está siendo atacado. Puede resultar difícil determinar si la ralentización
de un sistema se debe simplemente a un pico de utilización del mismo o a un
ataque.

16 Unidad 8. Seguridad y protección.


Sistemas Operativos

8.3. POLÍTICAS DE SEGURIDAD

Los requisitos de seguridad son siempre una cuestión importante en las


organizaciones. La existencia de un sistema seguro pasa porque exista una
política de seguridad (PSI). Ésta debe definir claramente la seguridad que
proporciona el sistema, independientemente de los mecanismos usados para
implementarla. Una política de seguridad es un conjunto de requisitos
definidos por los responsables de un sistema, que indica en términos
generales qué está y qué no está permitido en el área de seguridad durante la
operación general del sistema.

Es interesante resaltar que los requisitos de seguridad varían de unos


sistemas a otros, e incluso entre usuarios distintos dentro del sistema. El
sistema operativo necesita una política de control de acceso a los recursos
según el usuario que solicite dichos accesos. Por eso, cuando se instala un
sistema operativo en una computadora con restricciones de seguridad, es
necesario saber primero si la política de seguridad que ofrece dicho sistema
operativo satisface los requisitos de seguridad de la instalación. Es decir, si es
confiable.

La política se refleja en una serie de normas, reglamentos y protocolos a


seguir, donde se definen las medidas a tomar para proteger la seguridad del
sistema. Toda política debe cumplir una serie de requisitos:

• Debe cubrir todos los aspectos relacionados con la misma. No tiene


sentido proteger el acceso con una puerta blindada si a ésta no se la ha
cerrado con llave.

• Adecuarse a las necesidades y recursos. No tiene sentido adquirir una


caja fuerte para proteger un lápiz.

• Ser atemporal. El tiempo en el que se aplica no debe influir en su eficacia


y eficiencia.

• Definir estrategias y criterios generales a adoptar en distintas funciones y


actividades, donde se conocen las alternativas ante circunstancias
repetidas.

Cualquier política de seguridad ha de contemplar los elementos claves de


seguridad: la integridad, disponibilidad, privacidad y, adicionalmente, control,
autenticidad y utilidad.

Unidad 8. Seguridad y protección. 17


Formación Abierta

8.4. CRIPTOGRAFÍA
Existen muchas defensas frente a los ataques informáticos, que abarcan
desde simples metodologías hasta el uso de la última tecnología. Entre estas
defensas y herramientas, la más utilizada por los usuarios y los diseñadores
de sistemas es la criptografía.

Criptografía

La palabra criptografía proviene del griego "kryptos" que


significa oculto, y "graphia", que significa escritura, y su
definición es "Arte de escribir con clave secreta o de un modo
enigmático". La Criptografía es una técnica, o más bien un
conjunto de técnicas, que tratan sobre la protección o el
ocultamiento de la información frente a observadores no
autorizados.

En una computadora aislada, el sistema operativo puede determinar de


manera fiable quiénes son el emisor y el receptor de todas las
comunicaciones, ya que el sistema operativo controla todos los canales de
comunicaciones de la computadora. En una red de computadoras, la situación
es bastante distinta. Una computadora conectada a la red recibe datos desde
el exterior, y no tiene ninguna forma inmediata y fiable de determinar qué
máquina o aplicación ha enviado esos datos. De forma similar, la propia
computadora envía datos hacia la red sin tener ninguna forma de determinar
quién puede llegar a recibirlos.

La criptografía permite al receptor de un mensaje verificar que el mensaje ha


sido creado por alguna computadora que posee una cierta clave, esa clave es
el origen del mensaje. De forma similar, un emisor puede codificar su mensaje
de modo que solo una computadora que disponga de una cierta clave pueda
decodificar el mensaje, de manera que esa clave se convierte en el destino.
Sin embargo, las claves están diseñadas de modo que no sea posible
calcularlas a partir de los mensajes que se hayan generado con ellas, ni a
partir de ninguna otra información pública. Por tanto, las claves proporcionan
un medio mucho más fiable de restringir los emisores y receptores de los
mensajes. Observe que la criptografía es un campo de estudio con una gran
complejidad. Aquí únicamente se detallarán los aspectos más importantes de
aquellas partes de la criptografía que se relacionan con los sistemas
operativos.

18 Unidad 8. Seguridad y protección.


Sistemas Operativos

8.4.1. CIFRADO

El cifrado es un medio de restringir los posibles receptores de un mensaje. Un


algoritmo de cifrado permite al emisor de un mensaje garantizar que solo
pueda leer el mensaje una computadora que posea una cierta clave. El
cifrado de mensajes es una práctica muy antigua, y han existido muchos
algoritmos de cifrado, anteriores incluso a la época del César. Un algoritmo de
cifrado consta de los siguientes componentes:

• Un conjunto K de claves.
• Un conjunto M de mensajes.
• Un conjunto C de mensajes de texto cifrado.
• Una función E: E es una función para generar mensajes de texto cifrado a
partir de los mensajes de texto en claro.

• Una función D: D es una función para generar mensajes de texto en claro


a partir de los mensajes de texto cifrado.

Así, una computadora que posea la clave puede descifrar los mensajes de
texto cifrado, para obtener los mensajes de texto en claro que se usaron para
producirlos. Pero una computadora que no posea la clave no puede descifrar
esos mensajes cifrados. Puesto que los mensajes cifrados están
generalmente expuestos (por ejemplo, enviándolos a través de la red), es
importante que no se pueda deducir la clave a partir de los mensajes cifrados.

Existen dos tipos principales de algoritmos de cifrado: simétricos y


asimétricos.

Cifrado simétrico

En un algoritmo de cifrado simétrico, se utiliza la misma clave para cifrar y


para descifrar. El algoritmo de cifrado simétrico más comúnmente utilizado ha
sido el estándar DES (Data-Encryption Standard).

DES funciona tomando un valor de 64 bits y una clave de 56 bits y realizando


una serie de transformaciones. Estas transformaciones están basadas en
operaciones de sustitución y permutación, como suele ser generalmente el
caso para las transformaciones de cifrado simétricas. Algunas de las
transformaciones son de las denominadas transformaciones de caja negra, en
el sentido de que sus algoritmos están ocultos. Los mensajes de más de
64 bits se descomponen en fragmentos de 64 bits y los bloques que tengan
una menor longitud se rellenan con el fin de completar el tamaño de bloque
requerido.

Unidad 8. Seguridad y protección. 19


Formación Abierta

Puesto que DES opera sobre un conjunto de bits simultáneamente, se


denomina algoritmo de cifrado de bloque. Si se utiliza la misma clave para
cifrar una gran cantidad de datos, esa clave comienza a ser vulnerable a los
ataques. Considere, por ejemplo, que un mismo bloque fuente generaría el
mismo texto cifrado si se utilizaran la misma clave y el mismo algoritmo de
cifrado; en consecuencia, esos fragmentos no solo se cifran, sino que también
se hace una operación XOR con el bloque de texto cifrado anterior antes de
proceder al cifrado. Este mecanismo se conoce con el nombre de
encadenamiento de bloques cifrados.

DES se considera ahora inseguro para muchas aplicaciones, porque se


puede realizar una exploración exhaustiva de las claves utilizando unos
recursos informáticos no excesivamente grandes. Por ello surgió el
denominado AES (Advanced Encryption Standard), para sustituir a DES. El
algoritmo AES es otro algoritmo de cifrado de bloques simétricos. Puede
utilizar longitudes de clave de 128,192 y 256 bits y funciona sobre bloques de
128 bits. Opera realizando entre 10 y 14 rondas de transformaciones sobre
una matriz formada a partir de un cierto bloque de datos. Generalmente, el
algoritmo es bastante compacto y eficiente.

Hay otros algoritmos de cifrado de bloque simétricos que se utilizan hoy en


día y que conviene mencionar:

• El algoritmo TWOFISH es rápido, compacto y fácil de implementar. Puede


utilizar una longitud variable de clave de hasta 256 bits y opera sobre
bloques de 128 bits.

• El algoritmo RC5 permite variar la longitud de clave, el número de


transformaciones y el tamaño de bloque; puesto que solo usa operaciones
de cálculo básicas, puede ejecutarse sobre una amplia variedad de
procesadores.

• El algoritmo RC4 es, quizás, el algoritmo de cifrado de flujo más común.


RC4 se utiliza para cifrar flujos de datos, como por ejemplo en WEP, el
protocolo de LAN inalámbrica. Desafortunadamente, se ha demostrado
que RC4, tal como se lo utiliza en WEP (estándar IEEE 802.11) puede
romperse utilizando una cantidad razonable de tiempo de procesamiento.

20 Unidad 8. Seguridad y protección.


Sistemas Operativos

Cifrado asimétrico
En un algoritmo de cifrado asimétrico, las claves de cifrado y descifrado son
distintas. Uno de los algoritmos asimétricos más conocidos, es el denominado
RSA debido a las iniciales de los nombres de sus inventores (Rivest, Shamir y
Adleman). El algoritmo RSA de cifrado es un algoritmo de cifrado de bloque
de clave pública y es el algoritmo asimétrico más ampliamente utilizado.

Como en todo sistema de clave pública, cada usuario posee dos claves de
cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el
emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y
una vez que el mensaje cifrado llega al receptor, éste se ocupa de descifrarlo
usando su clave privada.

La seguridad de este algoritmo radica en el problema de la factorización de


números enteros. Los mensajes enviados se representan mediante números,
y el funcionamiento se basa en el producto, conocido, de dos números primos
grandes elegidos al azar y mantenidos en secreto.

Actualmente estos primos son del orden de 10200, y se prevé que su tamaño
aumente con el aumento de la capacidad de cálculo de los ordenadores.

El uso de un mecanismo de cifrado asimétrico comienza con la publicación de


la clave pública del destino. Para la comunicación bidireccional, el origen
debe también publicar su clave pública. Esa publicación puede ser tan simple
como entregar una copia electrónica de la clave, o puede tratarse de un
mecanismo más complejo. La clave privada (o clave secreta) debe ser
guardada celosamente, ya que cualquiera que disponga de esa clave podrá
descifrar cualquier mensaje creado a partir de la correspondiente clave
pública.

Hay que resaltar que esa diferencia aparentemente pequeña en la utilización


de claves entre la criptografía simétrica y asimétrica tiene, en la práctica, una
gran importancia. La criptografía asimétrica se basa en funciones
matemáticas en lugar de en transformaciones, lo que hace que sea mucho
más cara de implementar, en términos de los recursos informáticos
requeridos. Para una computadora, resulta mucho más rápido codificar y
decodificar un texto cifrado empleando los algoritmos simétricos usuales que
utilizando algoritmos asimétricos. Por ello los algoritmos asimétricos, no se
emplean para el cifrado de propósito general de grandes cantidades de datos,
sino que se suelen emplear para proporcionar autenticación, confidencialidad
y mecanismos de distribución de claves.

Unidad 8. Seguridad y protección. 21


Formación Abierta

8.5. CONCEPTO DE PROTECCIÓN

A medida que los sistemas informáticos se han hecho más sofisticados y a


medida que su rango de aplicaciones se ha ido incrementando, también ha
crecido la necesidad de proteger su integridad. La protección se concebía
originalmente como algo asociado a los sistemas operativos
multiprogramados, de modo que los usuarios que no fueran de confianza
pudieran compartir de manera segura un espacio lógico de nombres común,
como por ejemplo un directorio de archivos, o compartir un espacio físico de
nombres común, como por ejemplo la memoria. Los conceptos modernos de
protección han evolucionado para incrementar la fiabilidad de cualquier
sistema complejo que haga uso de recursos compartidos.

Se necesita proporcionar protección por diversas razones, la más obvia es la


necesidad de impedir una violación maliciosa e intencionada de una
restricción de acceso por parte de un usuario. Sin embargo, tiene una mayor
importancia garantizar que cada componente en un sistema utilice los
recursos del sistema solo en ciertas formas que sean coherentes con las
políticas establecidas. Este requerimiento tiene un carácter primordial si se
quiere disponer de un sistema fiable.

El papel de la protección en un sistema informático es proporcionar un


mecanismo para la imposición de las políticas que gobiernen el uso de
recursos. Estas políticas pueden establecerse de diversas formas. Algunas
están fijas en el diseño de un sistema, mientras que otras se formulan al
administrar ese sistema. Existen también otras que son definidas por los
usuarios individuales para proteger sus propios archivos y programas. Un
sistema de protección deberá tener la flexibilidad suficiente para poder
imponer una diversidad de políticas.

Las políticas de uso de recursos pueden variar según la aplicación y también


pueden variar a lo largo del tiempo. Por estas razones, la protección no es
solo cuestión del diseñador de un sistema operativo. El programador de
aplicaciones necesita utilizar también los mecanismos de protección, para
defender de un uso incorrecto los recursos creados y soportados por una
aplicación. En este capítulo, se describirán los mecanismos de protección que
el sistema operativo debe proporcionar para que los diseñadores de
aplicaciones puedan usarlos a la hora de diseñar su propio software de
protección. Observe que los mecanismos son distintos de las políticas. Los
mecanismos determinan cómo se llevará algo a cabo, las políticas deciden
qué es lo que hay que hacer.

22 Unidad 8. Seguridad y protección.


Sistemas Operativos

8.6. MECANISMOS DE PROTECCIÓN

Los sistemas operativos ofrecen distintos mecanismos de protección, para


implementar la política de seguridad deseada por los usuarios. Algunos de los
más utilizados son detallados a continuación.

8.6.1. AUTENTICACIÓN DE USUARIOS

El paso previo a la aplicación de cualquier esquema de protección o


confidencialidad de datos es conocer la identidad del usuario que está
accediendo a dichos datos. El objetivo de la identificación del usuario,
también denominada autenticación, es determinar si un usuario (persona,
servicio o computadora) es quien dice ser. Para ello, la mayoría de los
sistemas solicitan del usuario que, previamente al acceso a los recursos del
sistema, proporcione algún tipo de información que se supone que
únicamente es conocida por él y que debe ser suficiente para su
identificación.

Existen diversas formas de establecer la identidad de un usuario:

• Pedir información que solo conoce él a través de contraseñas, juegos de


preguntas o algoritmos de identificación.

• Determinar características físicas del usuario tales como la pupila, la


huella dactilar, el DNA, la firma, la voz, etc. Es más costoso que el método
anterior pero más fiable.

• Pedir un objeto que posee el usuario, como puede ser una firma
electrónica, una tarjeta con banda magnética o con un chip.

Cualquiera que sea el método de identificación de usuario utilizado, en los


sistemas donde la seguridad es un aspecto importante se pueden tomar
medidas suplementarias. Estas medidas, se ofrecen en algunos sistemas
operativos:

• En el sistema operativo VMS de DEC, se puede limitar el acceso a los


recursos a determinadas horas del día o a determinados terminales de
usuario.

Unidad 8. Seguridad y protección. 23


Formación Abierta

• En sistemas con conexión telefónica, los usuarios solicitan conexión y,


posteriormente, el sistema les llama a un número de teléfono previamente
definido.

• En sistemas interactivos, si un usuario accede al sistema desde un


terminal y dicho terminal sobrepasa un tiempo de inactividad, se expulsa
al usuario del sistema después de uno o varios avisos de desconexión.

• Otros sistemas más modernos, especialmente los que permiten


conexiones a través de redes, intercambian claves de forma dinámica
cada cierto tiempo. Este método es equivalente a pedirle al usuario que
reintroduzca su contraseña, tarjeta o característica física cada cierto
tiempo. Además, como criterio general de seguridad, los sistemas
operativos modernos dan la posibilidad de registrar todos los accesos al
sistema, lo que permite hacer controles interactivos y a posteriori de
dichos accesos.

8.6.2. UTILIZACIÓN DE CLAVES

El método más usado actualmente para identificar a un usuario es el de las


contraseñas o palabras clave.

Una contraseña es un conjunto de caracteres alfanuméricos y especiales


conocido únicamente por el usuario y por el sistema operativo sobre el que se
ha llegado a un acuerdo para que sea usado como clave de acceso al
sistema. Normalmente, cuando se habilita un nuevo usuario en el sistema,
éste introduce su contraseña, que puede cambiar posteriormente tantas
veces como quiera. Dicha contraseña se guarda cifrada en unos archivos
especiales.

Cuando intenta acceder a su cuenta, el proceso que controla los accesos


(login) pide al usuario que teclee su contraseña. Inmediatamente, dicha
contrasella es cifrada y comparada con la existente en el archivo de
contraseñas para ese usuario. Si las dos contraseñas, ambas cifradas,
coinciden, se permiten acceder al usuario. En otro caso se deniega el acceso.
Por seguridad no deben existir copias sin cifrar de las contraseñas y que
mientras el usuario teclea su contraseña hay que inhibir el eco en la pantalla
para que otras personas no puedan ver dicha palabra clave.

24 Unidad 8. Seguridad y protección.


Sistemas Operativos

Este sistema es sencillo de implementar y de usar, funcionando de forma


similar en todos los sistemas operativos. Sin embargo, asumiendo que la
autenticación se basa en tuplas «usuario, clave», es necesario tomar cuatro
decisiones de diseño básicas para un sistema como éste:

• ¿Quién asigna las palabras clave?


• Longitud y formato de las palabras clave.

• ¿Dónde se almacenan las claves?


• Duración de las claves.

Asignación de claves

Normalmente, la palabra clave es fijada por el usuario cuando entra en su


cuenta y la puede cambiar tantas veces como quiera. Sin embargo, hay
situaciones en que el sistema operativo elige la clave, o parte de la clave, de
un usuario:

• El sistema o el administrador fijan una clave de acceso cuando se crea la


cuenta.

• Si dos usuarios eligen la misma clave, el sistema debe resolver la


ambigüedad. Denegar la clave por repetida daría pistas a posibles
intrusos. Por ello, algunos sistemas operativos, como UNIX, añaden una
extensión (un número aleatorio de 12 bits y el identificador del proceso) a
la clave de cada usuario.

• Si el usuario no usa caracteres especiales, usa claves cortas, palabras de


diccionario o fáciles de adivinar, el sistema debe añadir algo que haga su
identificación más difícil o rechazar dichas claves.

• Cuando se usan sistemas con claves seguras, el usuario introduce una


clave y, basándose en ella, el sistema operativo le devuelve un conjunto
de claves complejas identificadas por un número. Así, cuando el usuario
intenta acceder al sistema se le pide una clave determinada. Estas claves
se usan una única vez.

Es habitual que los usuarios tengan contraseñas fáciles de adivinar, como su


nombre, fecha de nacimiento, dirección, nombre de familiares, claves que se
puedan buscar fácilmente con un diccionario o no tiene clave. Estos usuarios
son presa fácil de cualquier programa rompedor de claves, que tardará muy
poco en encontrar su clave.

Unidad 8. Seguridad y protección. 25


Formación Abierta

Longitud y formato de las claves


La longitud y el formato de las claves han ido cambiando a través del tiempo,
principalmente debido a la sencilla detección de las mismas. Evidentemente
cuanto más larga y más heterogénea sea, en cuanto a caracteres usados,
más robusta será la contraseña.

Observe que, teóricamente, un sistema que use palabras clave con un


mínimo de 6 caracteres, siendo éstos los 26 alfabéticos, 10 numéricos y 10
caracteres especiales, tiene un número de 466 palabras clave posibles. Si la
longitud de la clave puede variar entre 6 y 10 caracteres, el número posible
sería 466 + 467 + 468 + 469 + 4610. Costaría cientos de años romper una clave
de este estilo, siempre que el usuario fuera cuidadoso y no cometiera fallos
como los mencionados anteriormente. Para aumentar la complejidad de la
clave se puede hacer que el mandato que permite cambiar la contraseña
(passwd en UNIX) obligue al usuario a meter caracteres no alfanuméricos y
que fuerce la existencia de contraseñas de una longitud mínima añadiendo
números aleatorios a la palabra clave antes de cifrarla.

Almacenamiento de claves

Es muy importante dónde se almacenan las claves para la seguridad del


sistema. En el sistema operativo UNIX, por ejemplo, las claves se
almacenaban tradicionalmente en un archivo de texto denominado
/etc/passwd. En cada entrada del archivo se encontraba la identidad de un
usuario y su palabra clave cifrada. Este archivo era accesible para lectura por
todo el mundo, lo que permitía que cualquier usuario pudiera ejecutar
programas que leían este archivo y comparaban las palabras clave con
contraseñas de uso probable o, simplemente, con listados exhaustivos de
contraseñas.

Para paliar este problema, actualmente las contraseñas cifradas se guardan


en archivos especiales que únicamente son accesibles para el administrador.
Son los denominados archivos sombra (/etc/shadow). El sistema operativo
tiene operaciones internas para acceder a estos archivos y manipular las
contraseñas.

Se puede incrementar la seguridad del sistema cifrando todos los directorios y


archivos de palabras claves. De esta forma, aunque alguien pudiera acceder
a ellos, no podría usar la información. La forma más habitual de cifrar la
palabra clave es usar funciones de sentido único. Con este enfoque se cifra la
palabra clave, se guarda en el archivo de claves y no se descifra jamás.
Cuando un usuario desea entrar al sistema se pide su clave, se cifra y se
compara con la almacenada en el archivo.

26 Unidad 8. Seguridad y protección.


Sistemas Operativos

Duración de las claves


Para dificultar la detección de contraseñas válidas por parte de posibles
intrusos se puede configurar el sistema operativo: los sistemas operativos
permiten que las contraseñas de usuarios sean válidas únicamente durante
un cierto tiempo. Evidentemente, cuanto más corta sea la duración de la
palabra clave, más difícil será romper la seguridad del sistema

Para evitar que el usuario utilice unas pocas claves, de forma cíclica, empieza
a ser frecuente el uso de contraseñas válidas para un único acceso (claves de
una sola vez). Hay tres formas básicas de implementar esta política:

• Obligar al usuario a cambiar su contraseña cada vez que entra en el


sistema. Esta solución no limita posibles accesos futuros de intrusos, sino
que permite que el usuario afectado lo detecte tan pronto como quiera
entrar a su cuenta.

• Asignar una función matemática a cada usuario, de forma que cuando el


usuario entre al sistema se le proporcione un argumento para la función y
se le pida que introduzca el resultado de la función para dicho argumento.
Las funciones matemáticas a usar pueden ser muy variadas, pero en
sistemas conectados a la red suelen ser de una gran complejidad. Es muy
frecuente usar polinomios.

• Usar libros de contraseñas ordenadas según un cierto orden numérico.


Cada vez que el usuario quiere acceder al sistema se le pide que
introduzca la contraseña con un cierto número de identificación. El libro de
claves es generado por el usuario y debe estar en su posesión, sin que
existan copias del mismo que no estén cifradas.

La conexión de sistemas mediante redes supone un problema añadido para la


seguridad. En este caso, la máxima a cumplir es que las contraseñas nunca
deben viajar por la red sin estar cifradas.

8.6.3. DOMINIOS

Para poder implementar mecanismos de protección sobre los objetos del


sistema, que pueden ser hardware (CPU, memoria, etc.) o software
(procesos, archivos, semáforos, etc.), es necesario en primer lugar disponer
de identificadores únicos de usuarios y de objetos. Asumiendo que dichos
identificadores son proporcionados por el sistema de autenticación y el de
nombrado, hay que definir:

Unidad 8. Seguridad y protección. 27


Formación Abierta

• Los posibles conjuntos de objetos a los que se aplican los mecanismos de


protección.

• La relación de operaciones que cada usuario puede hacer sobre cada


conjunto de objetos.

• La forma en que se define dicha relación: por objetos, por usuarios, etc.

La relación entre objetos y derechos de acceso se define usando dominios


de protección. Un dominio de protección es un conjunto de pares (objeto,
derechos), donde cada par especifica un objeto y las operaciones que se
pueden ejecutar sobre el mismo.

Por ejemplo:

Dominio_1= [ ( datos , RW), ( / dev / lpd , W ) ]

Un objeto puede pertenecer a varios dominios de protección


simultáneamente. En cada momento, un proceso ejecuta en un dominio de
protección, pudiendo cambiar de un dominio a otro, si el sistema operativo lo
permite.

Para evitar una explosión de dominios de protección, algunos sistemas


operativos, como UNIX, restringen significativamente el número de dominios
de protección y el tipo de derechos de acceso sobre un objeto. Por ejemplo,
en UNIX solo existen tres dominios de protección:

• Owner.

Dueño del objeto. Suele ser su creador. El alumno Miguel, por ejemplo.
Cada usuario tiene un identificador (uíd) único en todo el sistema. Este
identificador está asociado a todos los objetos creados por el usuario,
para indicar que es su dueño.

• Group.

Usuarios distintos del dueño que forman parte de su grupo. Los


componentes del grupo suelen estar relacionados de alguna forma, por lo
que se les permite gestionar los derechos de sus objetos con criterios
comunes al grupo.

28 Unidad 8. Seguridad y protección.


Sistemas Operativos

Cada grupo tiene un identificador (gid) único en todo el sistema. Un grupo


se define especificando los uid de los usuarios que forman parte del
mismo. El gid está asociado a todos los objetos creados por cualquier
usuario que pertenezca a dicho grupo.

• Others.

El resto de los usuarios conocidos que no son el creador ni su grupo


(también llamados mundo). Suelen tener más restricciones en los
derechos.

Para cada dominio se permiten únicamente tres tipos de operaciones sobre


un objeto:

• Leer (r).

• Escribir (w).

• Ejecutar (x).

Además, cada objeto tiene asociados 2 bits extra para conceder permisos
especiales del dueño y del grupo al que pertenece el dueño.

El primero de ellos se denomina bit setuid y el segundo bit setgid. Estos bits
permiten realizar cambios de dominio cuando se ejecutan objetos que tienen
alguno de ellos activado. Cuando un usuario A ejecuta un programa del
usuario B, almacenado en un archivo cuyos bits de setuid y setgid están
inactivos, su identificación sigue siendo la de A y ése es el setuid del proceso.
Sin embargo, si el archivo tiene el bit setuid activado, la identidad del proceso
será la de B, aun cuando sea el usuario A el que está ejecutando el proceso.
Asimismo, si tiene activado el setgid, la identidad del grupo del proceso será
la del grupo de B. Estos bits se pueden modificar usando llamadas al sistema.

Existen otras formas de cambiar de dominio de protección en los distintos


sistemas operativos existentes. Alternativas a los bits de protección de UNIX
son:

• Colocar los programas privilegiados en un directorio especial. En este


caso, el sistema operativo es responsable de cambiar el setuid del
proceso que ejecuta en ese directorio.

Unidad 8. Seguridad y protección. 29


Formación Abierta

• Usar programas especiales, denominados demonios, para dar servicios


en dispositivos con acceso restringido. Un ejemplo claro es el de la
impresora. Ningún proceso de usuario puede acceder a ella directamente,
sino a través del spooler, un demonio que recibe las peticiones de
impresión y las envía al dispositivo.

• No permitir nunca el cambio de identidad de un proceso y ejecutar todas


las operaciones privilegiadas a través de servicios del sistema operativo.

Para evitar la total desprotección del sistema, en UNIX cada proceso que se
ejecuta tiene cuatro identificadores asociados:

• uid: identidad real del usuario que ejecuta el proceso.

• euid: identidad efectiva del usuario que ejecuta el proceso. Puede no


coincidir con la real, si ha cambiado de dominio porque el archivo del
proceso tiene el bit setuid activado.

• gid: identidad real del grupo al que pertenece el usuario que ejecuta el
proceso.

• egid: identidad efectiva del grupo al que pertenece el usuario que ejecuta
el proceso. Puede no coincidir con la real si ha cambiado de dominio
porque el archivo del proceso tiene el bit setgid activado.

Para ejecutar los procesos que tienen fuertes restricciones de seguridad se


exige siempre que la identidad efectiva y la real coincidan.

8.6.4. MATRICES

La relación entre dominios y objetos se puede definir de forma completa


mediante una matriz de protección, también denominada de acceso. Los
dominios de protección son las filas de la matriz y los objetos son las
columnas de la misma. El elemento (i, j) expresa las operaciones que el
dominio i puede ejecutar sobre el objeto j. Si la matriz de protección está
completamente definida, los mecanismos de protección pueden saber
siempre qué hacer cuando un proceso de un dominio solicita determinada
operación sobre un objeto.

El modelo de matriz de protección es muy claro, pero tiene inconvenientes


para su implementación:

30 Unidad 8. Seguridad y protección.


Sistemas Operativos

• La matriz de un sistema complejo puede ser muy grande y muy dispersa.

• Una matriz tiene un número fijo de filas (dominios) y columnas (objetos), lo


que es muy poco flexible para sistemas cuyo número de dominios u
objetos puede cambiar.

Para resolver estos problemas, la mayoría de los sistemas operativos


implementan la matriz mediante estructuras dinámicas de datos (listas) a las
que se puede añadir o quitar elementos sin tener que redefinir ninguna
estructura de datos del sistema operativo. Además, con esta técnica se evita
la dispersión de la matriz al representar únicamente los elementos no nulos
de la misma. Para la implementación de la matriz mediante elementos
dinámicos, los sistemas operativos usan dos enfoques:

• Almacenar la matriz por columnas, con una lista por objeto que especifica
qué operaciones puede hacer cada dominio sobre ese objeto. La lista
resultante se denomina lista de control de accesos (ACL, Access
Control List).

• Almacenar la matriz por filas, con una lista por dominio que especifica qué
operaciones se pueden hacer sobre un objeto cuando se pertenece a ese
dominio. La lista resultante se denomina lista de capacidades
(capabilities).

Unidad 8. Seguridad y protección. 31


Sistemas Operativos

RESUMEN

• El concepto de seguridad tiene múltiples facetas, abarcando desde


aspectos tales como la protección frente a daños físicos de los datos
(fuegos, terremotos, desastres naturales, etc.), hasta el acceso indebido
de los mismos (intrusos, fallos de confidencialidad, fallos de integridad,
etc.).

• Las violaciones de seguridad o la mala utilización de un sistema pueden


clasificarse en dos categorías: intencionadas (maliciosas) o accidentales.

• Para proteger un sistema, se deben adoptar las necesarias medidas de


seguridad en cuatro niveles distintos: físico, humano, sistema operativo y
red.

• Los problemas de seguridad más comunes son: caballos de Troya,


puertas traseras, bombas lógicas, desbordamiento de pila y buffer, virus,
gusanos, escaneo de puertos y denegación de servicio.

• La existencia de un sistema seguro pasa porque exista una política de


seguridad. Ésta debe definir claramente la seguridad que proporciona el
sistema, independientemente de los mecanismos usados para
implementarla. Una política de seguridad es un conjunto de requisitos
definidos por los responsables de un sistema, que indica en términos
generales qué está y qué no está permitido en el área de seguridad
durante la operación general del sistema.

• Toda política debe cumplir una serie de requisitos: debe cubrir todos los
aspectos relacionados con la misma, adecuarse a las necesidades y
recursos, ser atemporal y definir estrategias y criterios generales a
adoptar en distintas funciones y actividades.

Unidad 8. Seguridad y protección. 33


Formación Abierta

• La criptografía permite al receptor de un mensaje verificar que el mensaje


ha sido creado por alguna computadora que posee una cierta clave, esa
clave es el origen del mensaje. De forma similar, un emisor puede
codificar su mensaje de modo que solo una computadora que disponga de
una cierta clave pueda decodificar el mensaje, de manera que esa clave
se convierte en el destino.

• Existen dos tipos principales de algoritmos de cifrado: simétricos y


asimétricos.

• El papel de la protección en un sistema informático es proporcionar un


mecanismo para la imposición de las políticas que gobiernen el uso de
recursos.

• Los sistemas operativos ofrecen distintos mecanismos de protección, para


implementar la política de seguridad deseada por los usuarios. Algunos de
los más utilizados son: autenticación de usuarios, uso de claves, dominios
y matrices.

34 Unidad 8. Seguridad y protección.

También podría gustarte