sistemas operativos, redes y bases de datos

403
ADMINISTRACION DE S.O., REDES Y BASES DE DATOS

Upload: jalvar

Post on 04-Aug-2015

806 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: sistemas operativos, redes y bases de datos

ADMINISTRACION DE S.O., REDES Y BASES DE DATOS

Page 2: sistemas operativos, redes y bases de datos

ADMINISTRACION DE S.O., REDES Y BASES DE DATOS

Fundamentos de computadores............................................3Arquitectura de computadores.............................................52Arquitectura de sistemas distribuidos...................................66Administración de sistemas operativos (Windows y Linux)..82Sistemas operativos............................................................161Diseño de redes de computadores......................................208Redes...................................................................................230Administración de redes y sistemas operativos...................256Bases de datos 1.................................................................284Bases de datos 2.................................................................312Sistemas de gestión de bases de datos..............................353Preguntas.............................................................................384Comunicaciones inalámbricas.............................................388

Page 3: sistemas operativos, redes y bases de datos

Fundamentos de computadores

TEMA 1 JUEGOS DE INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO

1. INSTRUCCIONES GENERALES

Ya conocemos la secuencia de ejecución de instrucciones estudiada en la asignatura Fundamentos de Computadores 1: Fetch, decodificación, lectura de datos, realización de la operación, almacenamiento del resultado

y actualización del contador de programas. Debido a que las instrucciones se realizan una detrás de la otra, se habla de flujo de ejecución lineal, excepción hecha de las instrucciones de bifurcación que modifican el

contador de programa.

El juego de instrucciones de un computador está formado por el conjunto de instrucciones de máquina

que es capaz de ejecutar. Éste suele ser reducido, de unas 60 instrucciones para procesadores RISC a unas 250 para procesadores CISC y constituye una característica muy importante de su arquitectura.

Se denomina lenguaje nativo de máquina aquel que ésta puede entender de forma directa. Los términos de dicho lenguaje se encuentran determinados por el juego de instrucciones y se deben expresar en

forma de cadenas de unos y ceros. Las instrucciones de máquina cumplen las siguientes propiedades:

Realizan una función sencilla única: suma, resta, AND….

Operan sobre uno o dos operandos simples e un formato determinado.

Trabaja en un formato sistemático y lo más compacto posible a fin de minimizar las necesidades de

memoria. Son autocontenidas, es decir, incluyen toda la información necesaria para ser ejecutadas.

Son independientes del contexto, su efecto no depende de ningún elemento externo a la instrucción en sí

(a excepción de las bifurcaciones condicionales).

La ejecución de las instrucciones es atómica, es decir, o se lleva a cabo toda ella de forma indivisible o

completa; o bien, no se ejecuta.

El modelo de programación del computador Von Neumann se compone de varios elementos:

Mapa de memoria: El espacio de todas las posiciones de memoria que la máquina es capaz de

direccional. El espacio viene limitado por la longitud de las direcciones con las que el PC trabaja. Suponiendo que estas tengan m bits, sus posibles valores van de 0 a 2m-1, y, por tanto, el mapa de

memoria es de 2m posiciones. Mapa de E/S: Permite la comunicación entre los periféricos y la Unidad Central de Proceso.

Registro de usuario: Es el banco de registros que el programador puede manipular de forma directa con

las instrucciones de máquina. Se seleccionan con una dirección de pocos bits, puesto que suelen tener de

8 a 32 registros de usuario. Registro de estado: Depende en gran medida, de la arquitectura específica de que se trate, y podemos

tener: Bits de resultado (transporte, positivo, negativo, cero, desbordamiento…); nivel de ejecución (en

núcleo o kernel donde se ejecutan todo el juego de instrucciones o de usuario donde solo se llevan a cabo

un subconjunto de los primeros); máscara de interrupción….

En cuanto al formato de las instrucciones como hemos dicho que estas son autocontenidas, deben prever toda la información necesaria para su ejecución; por ello y, en principio, deben especificar los siguientes

elementos:

Operación a efectuar

Operandos sobre los que actúa la operación anterior Formato de representación de los datos

Ubicación del resultado, o sea, registro o dirección de memoria donde se debe almacenar

Identidad de la siguiente instrucción

Esto es así en teoría, en realidad se utiliza el concepto de información implícita con la que determinados

valores se dan por defecto y solo se especifican si son diferentes a ellos. Por ejemplo la identidad de la instrucción siguiente se sobreentiende que es la siguiente, no se especifica (solo en caso de instrucciones de bifurcación).

Page 4: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 2

Modelos de ejecución encontramos varios, dependiendo de los dispositivos que encontremos, estos son: la pila, los registros de usuario y la memoria principal.

2. MODOS DE DIRECCIONAMIENTO

Un modo de direccionamiento constituye un procedimiento que permite acceder a un operando de una

instrucción, tanto si es un dato, como un resultado, como la dirección de la instrucción hacia donde se bifurca.

A primera vista quizá sorprenda la tremenda variedad de modos de direccionamiento, pero esto se debe a varias causas:

Ahorro de espacio: Hay que reducir al máximo el número de bits utilizados en la instrucción.

Si se pretende que el código sea reubicable (se puede cargar a partir de cualquier posición de memoria y

se ejecuta de forma correcta) se precisan modos de direccionamiento relativos. El manejo de tablas, vectores o matrices se simplifica con los modos de direccionamiento relativos.

1. Direccionamiento inmediato: Únicamente puede utilizarse para datos y consiste en incluir el valor del

dato en la instrucción, es un método muy poco flexible, puesto que el valor es fijo y constante. 2. Direccionamiento directo absoluto: Se utiliza para expresar que la dirección obtenida es realmente la

del operando de la instrucción; la instrucción contiene la dirección del operando, tanto a registro como a memoria (a registro suele utilizar menos bits pues hay menos registro de usuario, 16 ó 32, a memoria

ocupa más bits por la razón opuesta).

3. Direccionamiento directo relativo: La instrucción no contiene la dirección real del operando, sino una dirección D (desplazamiento) relativa a un puntero RB (registro base). La dirección real del operando se

calcula realizando la operación de suma D+RB. Este modo se caracteriza por ser mucho más compacto (ya

Page 5: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 3

que el número d de bits requerido es menor que el número m de bits utilizado en el modo absoluto a

memoria), permite la reubicación (solo hay que cambiar el registro base para que se modifiquen las direcciones de todos los datos e instrucciones), se utiliza para recorrer muchas estructuras de datos de

manera eficiente; además como requiere una operación de suma, muchos computadores incluyen una

unidad sumadora específica para el cálculo de dirección, así se ahorra utilizar la que se encuentra en la UAL.

4. Direccionamiento relativo a registro base: Se utiliza como registro base RB uno de los registros de usuario o uno especial de direcciones; dicho registro no se modifica en la operación de direccionamiento.

5. Direccionamiento relativo al contador de programa: Se toma como registro base el PC, por esta

razón se obtiene la dirección sumando el desplazamiento al PC. Este direccionamiento permite acceder a posiciones de memoria que se encuentren próximas a la instrucción actual, lo que provoca que sea muy

adecuado para bifurcaciones de programa y para construir bucles. 6. Direccionamiento relativo al registro índice: Es un registro cuyo contenido se modifica al establecer

el direccionamiento, sumándole o restándole un incremento. Así se pueden recorrer estructuras de datos,

puesto que sólo es necesario que el incremento sea igual al tamaño de los datos de la estructura. 7. Direccionamiento en pila: Es un caso particular del caso anterior que utiliza el puntero de pila como

registro índice, éste apunta hacia el encabezamiento de la pila y se debe incrementar o decrementar adecuándose a los accesos de la pila.

8. Direccionamiento indirecto: Parte de otro tipo, absoluto o relativo, al que añade un paso más que consiste en que la dirección calculada no apunta al elemento X deseado, sino a una posición de memoria

que contiene la dirección del elemento.

9. Direccionamiento implícito: El formato de instrucción no incluye ningún campo para especificar el operando, ya que es un lugar predeterminado, constituyendo un registro usuario preferente denominado

acumulador. La ventaja es que no ocupa espacio en la instrucción, pero el inconveniente es que reduce la flexibilidad de la misma, que solo puede tener el operando en un lugar fijo.

Direccionamiento inmediato

DL DL + Inmediato 1000000011000 / 010 / 00110101 Suma Reg Inmediato

Direcciona a la posición Suma

Direccionamiento directo absoluto

Reg4 Reg4 OR M(Absoluto) 1000 100 001111001 0010011001000111111100000111110 OR Reg tipo datos (Absoluto)

Se hace OR del Reg4 y la M(Absoluta) y se guarda en Reg4

M(Pg Báse) Reg2 AND M(Pg base) 1100 010 110111000 0010001100100011 AND Reg Tipo datos Página base

Se hace AND del Reg2 y la M(Pg base) y se guarda en esta última

Direccionamiento relativo al contador del programa

M M(PC+D) PC=0E25h IR=0004h; dirección= PC+IR=37FCh El valor del PC no es el de la instrucción actual en curso, sino el de la siguiente (+ bits que ocupe)

Direccionamiento relativo a registro base

M M(D+RB) 11110111 00100110 0100011110101101 Multipl. Mod R/m Desplazamiento

Direccionamiento relativo al registro índice

PostAutoincremento RI=7436 , Inc: 4 y despl.: -65 Dirección RI + D 7436 – 65 = 7371 RI RI + Inc 7436 + 4 = 7440

El Fe factor de escala, se aplicará en los casos necesarios

PostAutodecremento RI=7436 , Inc: 4 y despl.: -65 Dirección RI + D 7436 – 65 = 7371 RI RI - Inc 7371 - 4 = 7375

Preautoincremento RI=7436 , Inc: 4 y despl.: -65 RI RI + Inc 7436 + 4 = 7440 Dirección RI + D 7440 -65 = 7375

Preautodecremento RI=7436 , Inc: 4 y despl.: -65 RI RI - Inc 7436 - 4 = 7432 Dirección RI + D 7432 – 65 = 7367

Direccionamiento indirecto

D (Dirección en la operación) D Dir(X) X Absoluto

D y puntero B en la instrucción D + Puntero B Dir (X) X Relativo

Page 6: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 4

3. INSTRUCCIONES DE MÁQUINA

Podemos clasificar las instrucciones de máquina según su función en:

Instrucciones de transferencia o movimiento de datos

Instrucciones de interrupción de la secuencia del programa

Instrucciones aritméticas y lógicas

Instrucciones de entrada/salida y misceláneas

Existe una correspondencia muy estrecha entre las instrucciones en código máquina y en ensamblador,

además como este último es mucho más cómodo para las personas que la binaria, es el que vendremos utilizando. Una instrucción o sentencia ensamblador se compone del mnemónico que expresa la función de la operación

y la segunda parte que especifica los operandos que no nos implícitos en la operación.

Instrucciones de transferencia o movimiento de datos

Permiten copiar la información contenida en un registro o posición de memoria a otro registro oposición de memoria, constan de dos operandos: el origen y el destino. Pueden parecer instrucciones poco útiles, pero en

realidad son las más utilizadas, ya que suponen del 30 al 40% de las instrucciones que ejecuta un computador. Los mnemónicos más importantes son:

MOVE Es una transferencia general entre registros y posiciones de memoria

ST Store Transmite el contenido de un registro a una posición de memoria

LD Load Transmite el contenido de una posición de memoria a un registro

PUSH Introduce el dato de origen en la pila y lo convierte en el encabezamiento

POP Extrae el dato de encabezamiento de la pila

MOVEM Move Block Transfiere bloques de datos de una zona de memoria a otra

XCH Exchange Intercambia el contenido de los dos operandos especificados

CLR Clear Pone el destino en ceros

SET Pone el destino en unos

Instrucciones de interrupción de la secuencia del programa

Rompen la cadena normal de ejecución, basada en el incremento del programa PC, cargando un nuevo valor en éste. Suelen suponer de un 24 a un 33% del total de las instrucciones de uso ejecutadas. Y encontramos

3 tipos principales: Bifurcaciones incondicionales: Se carga un nuevo valor en el contador del programa, Se suelen utilizar

los mnemotécnicos Jump y Branco

Bifurcaciones condicionales: Constituyen las únicas cuya ejecución depende del contexto. Se debe

especificar una condición de bifurcación que si se cumple se ejecutará la bifurcación y si no, no. Los

nemotécnicos más usuales son:

B[-] Branch Con [-] se indica la condición de bifurcación; por ejemplo BZ de Branco if Zero bifurcará si el Bit 0 de la palabra de estado se encuentra activo.

SKIP [-] Si se cumple la condición de bifurcación [-] se saltará la instrucción siguiente.

Y las condiciones de bifurcación más usuales son:

Z Zero Cero

E Equal Igual

C Carry Transporte

P Positive Positivo

V Overflow Desbordamiento

PE Parity even Paridad de pareja: Paridad impar si el numero de ceros o unos es par.

Bifurcaciones con retorno: Una de las estructuras de programación más utilizadas es la subrutina. Es

un programa autocontenido que se incorpora a otro programa en una o varias posiciones. Al llegar a la

posición de incorporación, el control pasa a la subrutina, hasta que cabe su ejecución; luego el control retorna al programa. Las dos grandes ventajas son la economía (pues puede llamarse varias veces al

mismo programa y economizar líneas de código) y la modularidad (se permite dividir el programa en varios trozos más pequeños y manejables. Tenemos dos instrucciones:

CALL Instrucción que cede el control a la subrutina

RET Return Devuelve el control al programa que realiza la llamada

Page 7: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 5

Cuando una subrutina llama a otra, se considera una nidificación de subrutinas. La instrucción Call solo tiene un operando que especifica la dirección a partir de la cual se encuentra almacenada la subrutina; además

esta instrucción debe guardar la dirección de la instrucción que la sigue (dirección de retorno) para poder volver a

este punto cuando acabe de ejecutarse la subrutina; y eso es lo que hace la instrucción Ret, que no necesita ningún operador más, pues la dirección de retorno ya hemos dicho que se encuentra implícito.

Instrucciones aritméticas y lógicas y misceláneas

Son instrucciones muy variadas, según sea monádicas o diádicas necesitaran uno o dos registros sobre los

que operar. Las instrucciones aritméticas que solemos encontrar son:

ADD Addition Suma

ADDC Addition with carry Suña añadiendo el bit de transporte de la palabra de estado

SUB Subtract Resta

SUBC Subtract with borrow Resta teniendo en cuenta el transporte de la palabra de estado

MUL Multiply Multiplica

DIV Divide Divide

INC Increment Incrementa una unidad

DEC Decrement Decrementa una unidad

NEG Negative Cambia de signo o niega

ABS Absolute Obtiene el valor absoluto

Entre las instrucciones lógicas encontramos:

SHR Shift rifht Desplazamiento lógico a la derecha

SHL Shift Left Desplazamiento lógico a la izquierda

SHRA Shift right Arithmethic Desplazamiento aritmético a la derecha

ROR Rotate Right Desplazamiento circular a la derecha

ROLC Rotate left through carry Desplazamiento circular a la izquierda con transporte

Entre estos dos grupos de instrucciones, venimos a tener el 26 a 35% de las instrucciones generadas para

un programa. Otros tipos de instrucciones son las de comparación, que no modifican el resultado, solo actualizan el registro de estado (probablemente para efectuar un cálculo o un salto posterior)

CMP Compare Realiza una operación SUB entre los dos operandos sin guardar el resultado

TEST Compara el operando con cero

Las instrucciones de entrada/salida suelen ser privilegiadas, es decir, solo se reservan al nivel de

ejecución del núcleo, no de usuario. Su función consiste en realizar una transferencia entre una posición del mapa de e/s y un registro o posición de memoria: con este tipo de funciones se controlan los periféricos. Tenemos las

instrucciones:

IN Input Transmite información de un puerto de entrada a un registro o pos. de memoria

OUT Output Transfiere información de un registro o memoria a un puerto de salida

Luego encontramos otras instrucciones difíciles de clasificar, entre las que podemos estudiar:

NOP No operation Instrucción que no hace nada, se puede utilizar en bucles de espera

SETC Set carry Activa el bit de trnasporte de la palabra de estado

CLRC Clear carry Desactiva el bit de transporte de la palabra de estado

SETV Set overflow Activa el bit de desbordamiento de la palabra de estado

CLRV Clear overflow Desactiva el bit de desbordamiento de la palabra de estado

EI Enable interrupt Activa el bit de interrupción y permite que se acepten interrupciones

DI Disable interrupt Desactiva el bit de interrupción e inhibe las interrupciones

HALT Es muy raro su uso pues para volver a arrancar hay que volver a encender la máquina

WAIT Intrucción privilegiada que para el procesador, pero con cualquier interrupción se vuelve a poner en marcha, se utiliza mucho para reducir el consumo

Page 8: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 6

4. MÁQUINAS CISC Y RISC

El diseño de los computadores hasta mediados de los 80 propugnaba un rico y variado juego de

instrucciones complementando la arquitectura del PC. Cada fabricante se esforzaba por sacar a la luz un juego de instrucciones amplio, aunque de estructura irregular y que presentaban muchas excepciones.

Pero a mediado de los 80 esto cambió, se propugna la arquitectura RISC (Reduced instrucción set computer) con un juego de instrucciones sencillo, ante la clásica CISC (Complex) como podían ser los IBM370,

Motorota 680xx e Intel xx86.

Hoy día se acepta una buena arquitectura (y por tanto un buen juego de instrucciones) que sea regular y no presente casos excepcionales, es decir que sea regular y ortogonal. Ello permite:

Diseñar compiladores más sencillos y eficaces.

Programar más fácilmente en ensamblador, pues el usuario no debe recordar casos especiales ni saber

utilizarlos. El hecho de que un juego de instrucciones sea regular, viene determinado por la ortogonalidad, esto quiere

decir que cada operación se debe poder efectuar con cualquier tipo de operando y de direccionamiento; es necesario por tanto que disponga de todas las posibilidades que tengan sentido, aunque existan combinaciones de

poca frecuencia de uso. Pero en cambio, se gana en que las funciones que realiza el computador son simples y por

tanto rápidas, y un juego de instrucciones sencillo simplifica el diseño (y posiblemente abarate costes). El caso es que, aunque desde mediados de los 80 se conoce la mejora de los formatos RISC hasta casi hoy día no ha

evolucionado, porque claro, el coste de cambiar, equipos, nuevos diseños, nuevo software y paquetes de programa que lo soporten, es muy elevado.

Page 9: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 7

TEMA 2 LOS SISTEMAS DE ENTRADA/SALIDA

1. ASPECTOS BÁSICOS DE LA ENTRADA/SALIDA

El objetivo del sistema entrada/salida del computador consiste en intercambiar información entre los periféricos y la memoria principal o los registros del procesador. Evidentemente, todos los periféricos no son

iguales y nos interesa clasificarlos por un parámetro fundamental para el proceso de entrada/salida como es el

ancho de banda, es decir, la capacidad máxima que tiene de intercambiar información el periférico con el resto del sistema por unidad de tiempo.

Características básicas de los periféricos

Dispositivo Sentido transferencias Desencadenante transferencias Ancho de banda

Teclado Entrada Usuario 10 bytes/s

Ratón Entrada Usuario 20 bytes/s

Monitor gráfico Salida Computador 30 Mb/s

Disco magnético Entrada/salida Computador 2 Mb/s

Cd-Rom (12x) Entrada Computador 1,8 Mb/s

Impresora láser Salida Computador 100 Kb/s

Al observar la tabla anterior es preciso comprender que existen multitud de periféricos con características

distintas y el hecho de intercambiar datos con ellos implica amoldarse a su sentido, desencadenante y, sobre todo, ancho de banda para realizar la transferencia.

En principio se podría crear un software específico para cada dispositivo, no obstante debido al gran número de ellos que existen la opción es impracticable, por ello se definen módulos normalizados de interconexión

que se denominan módulos o controladores de entrada/salida. La función básica de estos módulos es ocultar

al computador las particularidades de cada periférico y facilitar una visión y un control genéricos de éstos

El módulo de entrada/salida constituye un controlador específico de uno o varios periféricos del mismo tipo y tiene dos elementos básicos: una interfaz específica con el periférico que controlan y una conexión

normalizada con el resto del sistema. Es decir, existen unas especificaciones de todas sus características básicas

como: El conjunto de líneas de conexión que lo componen

Los circuitos equivalentes de todos los elementos conectados al bus normalizado

El tamaño y otras características físicas de los conectores

Cronogramas de funcionamiento

Hablando en plata: la conexión entre el computador y el módulo de entrada/salida es una conexión normalizada a la que se deben adaptar tanto el PC como el módulo de

entrada/salida una vez que se haya definido un estándar de conexión. Con frecuencia, un computador tiene conexiones normalizadas de varios tipos, así admite periféricos

desarrollados según diferentes normas.

Esta conexión se establece mediante un conjunto de registros (ver gráfico) que se agrupan según el tipo de información que almacenan.

La transferencia de información a través de los módulos de entrada/salida tienen dos partes primordiales: la

sincronización y el intercambio o transferencia de la información en sí.

¿Porqué hace falta una sincronización? Pues muy sencillo, el computador y el periférico tienen temporizaciones diferentes, como la velocidad de ambos es distinta, se hace necesario establecer un protocolo

mediante el cual ambos subsistemas puedan determinar cual es el momento apropiado para intercambiar cada elemento de información. La sincronización es necesaria para evitar las pérdidas de información. Por ejemplo para

enviar datos a una impresora de matriz de puntos, es preciso saber en qué momento está dispuesta a recibir el carácter siguiente y esto dependerá generalmente de cual ha sido el carácter anterior recibido; así el tiempo de

espera será mayor en los retornos de carro, cambios de línea o tabulaciones.

Una vez hecho lo anterior, se consigue que el periférico y el PC estén disponibles para establecer el intercambio o transferencia de información, que es cuando uno se envía al otro (dependiendo del sentido de

la transferencia) el dato que constituye el objeto de la transacción. En cualquier computador convencional (un único procesador) es éste el que gobierna cada transacción de entrada/salida, o sea, decide leer o escribir

información de/sobre un controlador de periférico; pero no es el procesador el que decide en qué momento o de

Page 10: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 8

qué forma se va a realizar la transferencia; es el periférico el que debe poder indicarle al procesador en qué

momento se encuentra dispuesto para transmitir o aceptar información hacia o del procesador. En función del método utilizado para establecer la sincronización y llevar a cabo el intercambio de información

entre procesador y controlador de periférico, encontrados tres técnicas básicas de entrada/salida que ahora vamos

a enumerar y posteriormente desarrollar: 1. Entrada/salida programada: La sincronización y el intercambio de información son responsabilidad

del procesador. 2. Entrada/salida por interrupciones: El controlador de periférico se responsabiliza de la

sincronización y notifica al procesador cuando está dispuesto para realizar el intercambio de

información. Esto último lo lleva a cabo el procesador. 3. Entrada/salida por DMA: El procesador se encarga de preparar la transferencia entre periférico y

memoria y luego es el controlador del periférico el que asegura la sincronización y lleva a cabo sin la intervención del procesador, el intercambio de información.

2. ENTRADA/SALIDA PROGRAMADA

También se denomina directa y se caracteriza porque toda la responsabilidad de la transferencia de información recae sobre el procesador. Éste, por medio de la ejecución del programa adecuado se encarga de

establecer la sincronización con el periférico y la posterior transferencia de información.

En el caso de un periférico de entrada, cada vez que el procesador comprueba que el controlador de periférico dispone de un nuevo dato, lo toma y queda disponible para recibir otro posterior; si el periférico es de

salida, cuando el procesador dispone de un dato para enviar al periférico y detecta que éste está disponible, efectúa el envío.

A continuación, estudiaremos algunos aspectos relacionados con la entrada/salida programada, que

influyen también en el funcionamiento de otras técnicas de entrada/salida.

Mapa de entrada/salida

La comunicación con los periféricos se efectúa mediante sus módulos de entrada/salida correspondientes y, por tanto, es preciso que el procesador tenga acceso a los registros de datos, control y estado de estos

módulos. Para poder identificar cada uno de los registros existen dos posibilidades:

Mapa de memoria: los registros se encuentran en determinadas posiciones del mapa de memoria. En este

caso se utilizan decodificadores que se activan a partir de las líneas de bus de direcciones y utilizan las mismas señales de control que sirven para seleccionar la memoria

Que los registros se ubiquen en un espacio de direcciones independientes de la memoria, el espacio

ENTRADA/SALIDA o mapa independiente de entrada/salida. Aquí se suelen compartir las líneas de direcciones y para distinguirlas se dan conjuntos de señales de control:

o READ, WRITE e IO/MEM: marcan la temporización de la transferencia. o MEMR, MEMW, IOR e IOW: Hacen la transferencia según el tipo a que se refieran.

Page 11: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 9

Cronograma

Los accesos al registro de datos, control o estado de un módulo de entrada/salida son similares a los de acceso a memoria que ya hemos estudiado en el semestre anterior, la única diferencia es que se utilizan otras

señales de control en el caso de los sistemas con entrada/salida independiente de la memoria. Los accesos pueden

ser: Síncronos: De duración predeterminada. En el ejemplo del gráfico (página anterior) se efectúa la carga del

dato en el extremo de bajada del reloj.

Asíncronos: De duración arbitraria, establecida por el periférico. En el ejemplo, la carga en el registro de

datos se produce en el momento en que la señal WAIT deja de estar activa. Semisíncronos: De duración establecida por el periférico pero siempre múltiplo del período de reloj. En el

ejemplo, la carga del dato se produce al detectarse el flanco de bajada de la señal de reloj, pero sólo si la

señal WAIT está desactivada.

Instrucciones de entrada/salida

No todos los computadores disponen de instrucciones específicas de entrada/salida, solo aquellos en los que se establece una distinción entre el mapa de memoria y el de entrada/salida. Cada vez que estos

computadores ejecuten una instrucción de lectura o escritura en memoria, además de activar el resto de las líneas de conexión con el exterior, ponen en marcha la línea o líneas que distinguen entre entrada/salida y memoria y las

pasan al estado que corresponde a una operación con memoria (por ejemplo IO/MEM pasaría al estado lógico L).

Las ventajas de disponer de instrucciones específicas de entrada/salida son cuestionables; de hecho muchos diseñadores han optado por no distinguir entre entrada/salida y memoria al hablar de arquitectura básica

de la máquina; no obstante con instrucciones específicas de entrada/salida se consigue establecer con más facilidad un mecanismo de protección adecuado, ya que se tratan de instrucciones privilegiadas que solo pueden

ejecutarse en la modalidad de supervisor y así, un usuario cualquiera no puede acceder a estos controladores de

entrada/salida.

Identificación del periférico Esta función que realiza el procesador es importantísima pues cuando éste debe intercambiar información

con más de un periférico, debe identificar en cada instante qué periférico está disponible para llevar a cabo el

intercambio y, en ese caso, ejecutarlo. Es más típico del caso siguiente la entrada/salida por interrupciones; no obstante en entrada/salida

programada también se puede plantear esta situación, es decir, que en el mismo instante haya varios periféricos con información disponible para el procesador. Aquí debe decidirse si todos ellos se deben tratar de manera

equitativa o si conviene establecer algún esquema de prioridades entre periféricos. En este último caso hay que

tener en cuenta que este esquema de prioridades se

implementará en forma de programa, sin disponer de ayuda hardware de ningún tipo.

El procedimiento consiste en realizar una consulta o polling sobre todos aquellos periféricos que en un

momento determinado puedan disponer de información para

intercambiar. Existen dos tipos de prioridad que se puede establecer en estos casos:

Prioridad fija: El programa de consulta comienza

siempre comunicándose con el mismo controlador de periférico y los recorre todos siguiendo la misma

secuencia fija. Prioridad rotativa: Se asigna un número de orden

a cada periférico. Tras atender a la petición de uno

de ellos, se pasa a consultar el estado del siguiente

de acuerdo con el número de orden, en lugar de volver a empezar por el primero.

Page 12: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 10

3. ENTRADA/SALIDA POR INTERRUPCIONES

El sistema de entrada/salida por interrupciones, como ya apuntábamos anteriormente, se caracteriza

porque la responsabilidad de la sincronización entre procesador y periférico se encuentra en el módulo de entrada/salida. Para hacer esto posible es preciso que el procesador disponga de una línea de entrada,

denominada línea de petición de interrupción (INT), mediante la cual el módulo de entrada/salida puede reclamar la atención del procesador cada vez que esté dispuesto a transferir un dato desde o hacia el periférico.

La ventaja de este sistema frente al de entrada/salida programada es que aquí no es preciso que el procesador

consulte de forma reiterada el estado del periférico, sino que puede estar ejecutando otro programa. El periférico se encarga de activar la INT en el momento en que está dispuesto a intercambiar información con el procesador; y

esto sucede en las siguientes etapas: 1. Antes de iniciar cada instrucción, el procesador comprueba el estado de la INT.

2. Si la línea INT no está activada, realiza la lectura y ejecución de la instrucción y pasa a la siguiente. 3. Si la línea INT está activada, por el contrario, se altera la ejecución del flujo normal del programa:

a. Se pasa a la rutina de servicio de interrupción

b. Para ello es necesario pasar de la clase que se encuentra (usuario o supervisor) a la de supervisor.

c. Una vez ejecutada y finalizada la interrupción el procesador debe continuar ejecutando el programa tal como se venía realizando, como si nada hubiese pasado, y en este sentido será

fundamental la salvaguarda del estado del procesador.

Un aspecto importante es la inhibición de las interrupciones; pues existen situaciones excepcionales

que requerirán el ignorarlas. Esta situación se almacena normalmente como un bit de registro de estado; si el procesador tiene permitida la interrupción al comprobar este bit de registro, entonces valora el estado de la línea

INT antes de cada instrucción. Además la línea INT se considera activa por nivel y no por flanco, lo cual quiere decir que cuanto se vuelvan a permitir las interrupciones tras un tiempo de inhibición, solo se atenderán las de

aquel periférico que la esté solicitando todavía.

Dado que las interrupciones pueden llegar (y llegan) al procesador en cualquier momento, es fundamental

la salvaguarda del estado del procesador, como ya apuntábamos anteriormente para que, una vez terminada la ejecución de la interrupción, el programa continúe como si nada hubiese pasado. La salvaguarda del sistema

consiste en guardar el valor de los flags de estado y de ciertos o todos los registros para poder seguir utilizándolos

después de la interrupción. Esto se puede hacer de dos formas: De manera automática: El procesador está obligado a almacenar todo el estado, es decir, los flags de

estado y el conjunto de registros de toda la arquitectura. Es un método más lento, pues se guardan

más cantidades de información, pero más seguro. De manera manual: Se guardan los valores de los flags de estado y las instrucciones adecuadas para

almacenar el estado actual. Lo más habitual y eficiente consiste en que el procesador guarda de forma

automática los flags de estado y el contador de programa (PC) y el programador de la rutina de servicio de interrupción guarda el resto de los registros que la rutina modifica.

Explicado todo lo anterior, deducimos 3 formas diferentes de conectar los controladores de periféricos, es decir, cual es la conexión física entre el procesador y los controladores de periféricos que interrumpen, y esto debe

resolvernos 3 dudas importantes: Poder determinar de entre todos los periféricos conectados al sistema, cual es el que está reclamando

la atención del procesador.

Cual es el periférico prioritario o prioritarios que debemos atender cuando varios reclamen la atención

del procesador

Decidir si durante una interrupción, puede activarse otra del mismo o de otros periféricos.

Como decía antes tres posibilidades importantísimas se nos abren y son las que vamos a estudiar: la línea

única de petición de interrupción, la conexión en Daisy Caín y las líneas independientes de petición y reconocimiento de interrupción.

Page 13: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 11

LA LÍNEA ÚNICA DE PETICIÓN DE INTERRUPCIÓN Es el método más sencillo de conexión entre un procesador y varios periféricos (página siguiente) y

consiste en compartir la línea de petición de interrupción entre todos los controladores de periférico conectados al

sistema. De esta forma el procesador es capaz de determinar si algún procesador está activado, pero para saber cual es en concreto, necesita establecer la lectura del registro de estado de cada uno de ellos y decidir por

programa cual es (software).

La ventaja evidente de este método es la sencillez y flexibilidad a la hora de determinar a cual de los

periféricos que solicitan una interrupción es preciso atender en primer lugar. No obstante el inconveniente es el retraso que introduce (que no es despreciable ni mucho menos, pues es comparable en tiempo a la ejecución de

varias líneas de código de programa), pues cada vez que un periférico activa la interrupción es preciso ejecutar

una única rutina de atención a interruptores: salvaguardar los registros, identificar que periférico es el que interrumpe (realizando un muestreo de todos ellos por si es solo uno o hay más de uno). Otra gran ventaja es la

de permitir con el programa de atención a periféricos si establecemos una prioridad a uno o más de un periférico sobre el resto a la hora de activar su interrupción.

Otro inconveniente es la nidificación de interrupciones al compartir la misma línea. Esta nidificación

consiste en permitir que un periférico más prioritario sea capaz de interrumpir a su vez la rutina de servicio de interrupción correspondiente a otro menos prioritario, pero no en el caso contrario o cuando los dos tengan el

mismo grado de prioridad. Al compartir una única línea y estar ejecutándose ya una interrupción y producirse otra, es imposible saber a priori si la nueva interrupción es prioritaria sobre la que ya se está ejecutando: es necesario

activar de nuevo la rutina de interrupciones y ver cual es el periférico que interrumpe y qué grado de prioridad tiene. Así que si activamos la atención a interruptores puede ocurrir la degradación del sistema por agotamiento de

la memoria (y ni que decir que cuando se ha empezado a atender una interrupción ésta debe desactivarse, pues

de lo contrario y teniendo activada la posibilidad de interrumpir entraríamos en un bucle infinito)

Línea única de petición de interrupción

Ventajas Sencillez en las conexiones

Flexibilidad por software para atender por prioridades a los periféricos

Inconvenientes

Velocidad lenta en cualquier interrupción por poco prioritaria que sea

Imposibilidad de nidificación de interrupciones al no saber, a priori, si la nueva interrupción es más prioritaria que la anterior.

CONEXIÓN DE INTERRUPCIONES EN DAISY CHAIN Una forma de evitar el retraso que supone el tener que ejecutar un programa cada vez que hay una

interrupción se basa en la utilización de una nueva línea de control: la línea de reconocimiento de interrupción, conocida como INTA o INTACK.

Si están habilitadas las interrupciones, el procesador comprueba al principio de cada instrucción si la línea

de petición está activada (hasta aquí, como antes). En caso de estar activada, activa la INTA para que el periférico reconozca que el procesador está atendiendo su petición y deja de hacer la solicitud de interrupción. Para poder

conectar más de un periférico se establece una cadena daisy Caín. El primer controlador de periférico si no es el

Page 14: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 12

activo, activa una prolongación de línea hacia el segundo, y así hasta que se encuentre cual esta solicitando

interrupción. Como esta circuitería es muy sencilla, la identificación del periférico que interrumpe es muy rápida y así no se ejecuta un programa específico para esta función (lo hemos resuelto por hardware). No obstante, solo

hemos hecho saber al periférico que conocemos de su solicitud de interrupción, pero todavía no sabemos cual es,

ni que grado de prioridad tiene. Para ello se utiliza la técnica de vectorización, que consiste en que el periférico cuando recibe la señal por el INTA, deposita en el bus de datos un determinado valor, denominado valor de

interrupción. Al procesador le llega este valor y lo utiliza para saber, a través de este índice recibido en una tabla de vectores de interrupción (con un valor único, obviamente para cada periférico), y así se activa la rutina de

servicio de interrupción para ese controlador.

La ventaja de una línea de petición compartida y líneas de reconocimiento encadenadas (Daisy Chain) radica que en un único ciclo de bus, sabemos que periférico está interrumpiendo y activamos la rutina asociada a este

periférico; y aunque sean varios los que interrumpen, de manera rápida y automática determinamos el grado de prioridad (se comienza siempre por los más próximos al procesador).

Pero la desventaja principal es la rigidez del esquema basado en esta prioridad por cercanía (que es además

fija e inalterable, debido a que es una solución hardware) y además seguimos sin resolver el problema de nidificación de interrupciones, pues seguimos sin conocer si la nueva interrupción es más prioritaria que la que ya

pudiésemos estar llevando a cabo.

Daisy Chain: Línea de petición compartida y líneas de reconocimiento encadenadas

Ventajas

Sencillez en las conexiones

Velocidad en la detección del periférico/s que interrumpe/n (un ciclo de bus)

Rápida determinación de la prioridad de los periféricos que interrumpen.

Inconvenientes

Rigidez y poca flexibilidad para variar la prioridad de los periféricos, dado que se trata de una solución hardware fija e inmutable.

Seguimos sin resolver la nidificación de interrupciones pues desconocemos si la nueva interrupción es más prioritaria que la que ya estamos llevando a cabo.

LÍNEAS INDEPENDIENTES DE PETICIÓN Y RECONOCIMIENTO DE INTERRUPCIÓN

La única posibilidad para distinguir de forma inmediata (sin la obligación de ejecutar un programa) si una

interrupción que acaba de llegar al procesador es más prioritaria que la que ya estamos ejecutando, consiste en disponer de líneas de petición independientes para los diferentes controladores de entrada/salida (ver figura en la

página siguiente). La identificación del periférico que interrumpe es directa pues cada línea de petición se encuentra conectada

con un solo periférico; pero además se flexibiliza la gestión de prioridades al poder decidir que línea consideramos

ordenadamente más prioritaria que otras. Así resolvemos el problema que antes ya nos habíamos planteado es decir, la nidificación de interrupciones. El proceso que se sigue es el siguiente para cada código de instrucción:

Page 15: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 13

Se valora si existe una interrupción activada, de no ser así, se ejecuta la siguiente instrucción.

Si existe una activación de interrupción, se valora si es de mayor nivel que la que se tiene almacenada

(de no ser de mayor nivel, se continúa como si nada hubiese ocurrido).

En caso de ser de mayor nivel, el proceso consiste en salvaguardar PC y los registros de estado; en

activar la modalidad de supervisor, en actualizar el nivel de interrupción almacenado, en leer el vector de interrupción y posteriomrnete en finalizar esta rutina de interrupción.

Esquema de un ciclo fetch en un procesador con líneas independientes de petición y reconocimiento de interrupción

¿Hay una línea de interrupción activa?

NO Ir al final del fetch

SI ¿Es nivel de la interrupción > Nivel_alamacenado?

NO Ir al final del fetch

SI Salvaguardar PC y registros de estado Actualizar modalidad supervisor Actualizar el nivel almacenado=Nivel de interrupción Leer vector de interrupción Encontrar dirección Ir a final fecth

Final Fetch: Leer instrucción señalada por el PC Actualizar PC Descodificar y ejecutar

Page 16: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 14

El problema es que no todos los procesadores disponen de un número suficiente de líneas de petición y reconocimiento de interrupción para implementar el esquema descrito anteriormente. Como muchos de ellos solo

disponen de una línea de petición y de reconocimiento, lo que se hace es añadir un controlador de interrupciones,

o sea, circuitos especializados en la gestión de interrupciones de sistema. Así conseguimos prácticamente la misma funcionalidad pero con dos diferencias apreciables:

1. La salvaguarda y recuperación del nivel de ejecución no se lleva a cabo de forma automática, dado que el controlador de interrupciones es externo al procesador, y este, sin ejecutar un programa, no es capaz

de decidir el nivel de interrupción que está atendiendo.

2. Como el procesador solo dispone de una línea de petición de interrupción, se debe identificar el periférico que interrumpe igual que si se tratase de un encadenamiento, estableciendo un esquema de

vectorización o bien a partir de la lectura de los registros internos del controlador de periférico.

Ahora bien, en el esquema inicial de líneas independientes de petición y reconocimiento de interrupción no

todo son ventajas, ya que el número de periféricos conectables al sistema se encuentra limitado por las líneas disponibles. Esto se solventa con los dos sistemas representados a continuación: un esquema híbrido de líneas de

petición y reconocimiento de interrupción y conexión de controladores de interrupciones en cascada.

Page 17: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 15

Las famosas interrupciones de software, excepciones o traps, se tratan de igual forma que si se tratasen de una interrupción de entrada/salida ; con la salvedad de que las interrupciones de software se señalan por medio

de la activación de una señal externa, mientras que las de entrada/salida se generan dentro del procesador. Entre

estas excepciones se encuentran las correspondientes a los intentos de accesos a recursos restringidos, operaciones aritméticas como la división por cero o la raiz cuadrada de un número negativo, etc.

Repasemos ahora el conjunto de operaciones que debe llevar a cabo un sistema genérico con entrada/salida

por interrupciones. Éstas corresponden a un procesador con un número suficiente de líneas de petición y con

capacidad para tratar interrupciones sectorizadas y autovectorizadas:

Fase Inicial

Se activa el sistema y se programan los dispositivos que se deben utilizar y se define el valor inicial de la variables utilizadas

Programación de los controladores de entrada/salida, definición del vector de interrupción, etc. Se especifica el nivel de ejecución menos prioritario (programa principal). Se habilitan las interrupciones. Se pasa a ejecutar el programa principal

Fase de funcionamiento normal

Se ejecuta en esta fase el programa principal, constituido por norma general, por un bucle de espera donde se comprueba el estado del sistema. En la fase de fetch se realiza:

Comprobación de las líneas de petición de interrupción con nivel superior al actual de ejecución, por si existe alguna activada.

Si no es así, se continúa la lectura del código de la operación de la instrucción actual. Si alguna línea de petición con suficiente prioridad está activada se ejecuta el ciclo de reconocimiento de

interrupción que consiste en: o Si la entrada al procesador indica que es una interrupción autovectorizada, utiliza como vector

de ésta el número de línea de interrupción que está activo. Como tabla de vectores de interrupción utiliza la de autovectores (pasa al punto 4)

o Si no es autovectorizada, activa la línea de reconocimiento de interrupción correspondiente al nivel detectado.

o Lee el vector de interrupción proporcionado por el controlador de entrada/salida. o Accede a la entrada de la tabla de vectores o autovectores de interrupción señalada por el

vector que se acaba de almacenar. o Obtiene de la tabla correspondiente, la dirección de la rutina de servicio de interrupción o Almacena el contador de programa, registro de estado actual en la pila de modalidad supervisor

del sistema. o Actualiza el registro de estado y almacena el nuevo nivel de ejecución y se activa el bit que

indica la modalidad de ejecución correspondiente al supervisor o Actualiza el contador del programa con el valor obtenido de la tabla correspondiente (vectores o

autovectores). o Reinicia la ejecución de instrucciones (empieza un nuevo ciclo de fetch).

Fase de retorno de interrupción

Se desarrolla al ejecutar la instrucción RETI, que debe ser la última de cada rutina de servicio de interrupción: solo debe recuperar el estado (que incluye información sobre el nivel de ejecución) que se había guardado en la pila del sistema en el momento de responder a la interrupción.

Se recupera el contador de programa almacenado en la pila del supervisor. Se recupera el registro de estado almacenado en la pila del sistema (con esto además se recuperan el

nivel de ejecución y el bit de modalidad usuario/supervisor). Se ejecuta un nuevo ciclo de fetch utilizando los nuevos valores de los registros contador de programa y

registro de estado

4. ENTRADA/SALIDA POR DMA

En las entrada/salida que hemos visto antes, para cada interrupción que se genera es preciso desviar el

flujo normal del programa, por lo que es necesario realizar una salvaguarda del estado actual, para luego volver al mismo estado que había antes de la interrupción. Esto se traduce en un consumo de tiempo de ejecución para

cada interrupción, suponiendo asimismo una importante limitación del ancho de banda máximo que queda libre para la comunicación con el periférico.

Esto hace que la entrada/salida por interrupciones sea adecuada para dispositivos de ancho de banda no muy grande, pero para los más rápidos, el procesador estaría prácticamente dedicado a ejecutar las instrucciones

de los servicios de interrupción.

El objetivo de la entrada/salida por DMA es que el procesador pueda desentenderse de la sincronización y de la transferencia de información con el periférico, pero para ello es imprescindible que el módulo de

entrada/salida sea capaz de acceder de manera automática a la memoria del sistema. No obstante aunque el procesador se desentienda de este proceso si necesita programar la operación con antelación y además necesita

Page 18: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 16

ser avisado por el periférico cuando el intercambio de información haya finalizado y esto suele hacerse generando

una interrupción. Así que resumiendo, la transferencia por DMA está compuesta de:

Programación de la operación llevada a cabo por el procesador.

Transferencia de información entre periférico y memoria principal, gestionado por el controlador de

entrada/salida.

Culminación de la operación, donde el controlador de entrada/salida avisa al procesador del

desenlace de la transferencia.

Claro, observando este proceso

que ha de desarrollarse se comprende de

la ineficacia de utilizar DMA para transferir datos individuales; por este

motivo se utiliza para transferir bloques de datos relativamente grandes, por

ejemplo sectores entre el disco y la memoria, pero no para enviar datos del

teclado al procesador.

Pero este tipo de entrada/salida

añade un nuevo problema que no se había presentado hasta ahora, es preciso

establecer un mecanismo mediante el

cual ambos elementos utilicen la memoria sin que por ello se genere ningún tipo de

conflicto. Hay dos posibilidades: Utilizar una conexión a memoria

independiente para cada elemento,

memoria con doble puerta (no se

usa demasiado pues es un tipo de memoria más cara).

Aplicar una única conexión a

memoria, compartida por el procesador y el módulo de

entrada/salida proporcionando asimismo un mecanismo para evitar

conflictos en el acceso mutuo a

memoria. Esto se denomina robo de ciclo.

Este robo de ciclo es el sistema

que suele utilizarse y que vamos a

describir. Para llevarlo a cabo se necesitan líneas triestado para la

conexión del procesador y los módulos de entrada/salida en el bus (direcciones,

datos y señales de control) y además dos nuevas líneas de control: BUSREQ y

BUSACK.

El funcionamiento se basa en que el procesador es más prioritario a la hora

de cualquier transacción, pero comprueba con frecuencia el estado de la señal de

petición del bus BUSREQ, de manera que

cuando el procesador la encuentre activada responda a tal demanda. Esto

consiste en activar BUSACK; lo que hace que el bus quede ahora gobernado por el

Page 19: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 17

controlador de entrada/salida, y así se asegura que solo uno de los dos dispositivos gobierna la

memoria. Ahora bien, nos encontramos con diferentes maneras de conectar los módulos: la forma más sencilla es la

primera gráfica de la figura de la página anterior. Tenemos un único módulo entrada/salida que interactúa con el

procesador para la petición de los buses; pero claro, si necesitamos más de un módulo (que es lo lógico) se puede actuar creando un daisy Caín de los módulos de entrada/salida por DMA (figura siguiente) o finalmente

introduciendo un nuevo dispositivo: el controlador DMA: que es un dispositivo capaz de gestionar las transferencias de varios periféricos.

El funcionamiento del sistema por DMA tiene las 3 partes ya anunciadas anteriormente: Programación de la operación, transferencia de los bloques de datos y finalización de la operación.

PROGRAMACIÓN DE LA OPERACIÓN El procesador debe informar al controlador de Entrada/salida por DMA al menos de los siguientes datos:

Número de datos que se deben transferir.

Dirección de memoria a partir de la cual se deben almacenar o depositar los datos que se intercambian.

Sentido de la transferencia.

Si el módulo entrada/salida se utiliza para controlar varios periféricos, también es preciso identificar el

periférico involucrado en la transferencia.

Evidentemente, para que el controlador DMA sea capaz de guardar estos datos, hay que dotarlo de nuevos

registros, estos son: RCOMPT: contador que guarda el número de datos a transferir; y RADRM: se almacena la

dirección inicial de la memoria involucrada en la transferencia.

TRANSFERENCIA DE LA INFORMACIÓN Una vez programada la transferencia, el módulo entrada/salida debe esperar hasta que el periférico que

controla se encuentre disponible para transmitir o recibir y entonces solicita el bus y tras serle concedido por el procesador efectúa la transferencia.

En el proceso de entrada/salida por interrupciones podíamos inhibir la transferencia si ésta era de un nivel

prioritario inferior a la que ya estábamos ejecutando; esta opción por DMA no se contempla (el bus se cede de

forma automática ante la petición de BUSREQ). Esto se debe a que la cesión del bus constituye una operación muy rápida y que además no afecta al estado del procesador, no tiene que iniciar sistemas de salvaguarda de datos,

solamente congela la ejecución de las instrucciones que está ejecutando (salvo que exista una transferencia a la memoria en ese momento, con lo cual el procesador termina la transferencia y luego cede el bus o, en otros casos,

corta inmediatamente la transferencia para iniciarla posteriormente a la transferencia DMA).

Además, como la cesión siempre se encuentra habilitada, el tiempo de respuesta es muy breve. En caso de

una lectura del periférico cada vez que éste indica a su controlador que dispone de un dato para transferir y siempre que el contenido de RCOMPT sea distinto de 0 (esto indica que existen datos pendientes de transmitir), el

controlador lo almacena en RDATO, activa BUSREQ para solicitar el bus al procesador, éste lo cede activando BUSACK, el módulo entrada/salida lanza un ciclo de escritura en memoria por el bus y deposita sobre el bus de

direcciones el contenido del registro RADRM y sobre el bus de datos el de RDATO; tras finalizar el ciclo de escritura

en memoria, el controlador desactiva BUSREQ y actualiza los registros RADRM (incrementa para aumentar a la posición de memoria siguiente) y RCOMPT (Decrementa, para contener el número de datos pendiente de

transmitir). Si después de esta actualización RCOMPT es distinto de cero, el controlador vuelve a esperar la llegada de un nuevo dato; si es cero se pasa a la fase de finalización de la operación.

En el caso de que se utilice un controlador de acceso directo a memoria para gestionar varios periféricos, varía ligeramente el funcionamiento, puesto que el registro de datos se encuentra por norma general en el módulo

entrada/salida mientras que el de direcciones forma parte del controlador DMA; estas son las únicas diferencias importantes.

Page 20: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 18

Funcionamiento del controlador de periférico por DMA

Programación de la operación

If OP=WRITE

While RCOMPT>0 Activar BUSREQ Esperar BUSACK Leer [ADRM] y llevar el dato leído a RDATO Desactivar BUSREQ Esperar a periférico preparado y enviarle el contenido de RDATO Incrementar ADRM y decrementar RCOMPT

End-while

If OP=READ

While RCOMPT>0 Esperar DATO del periférico y llevarlo a RDATO Activar BUSREQ Esperar BUSACK Escribir sobre [ADRM] el valor contenido en RDATO Desactivar BUSREQ Incrementar ADRM y decrementar RCOMPT

End-while

Finalización de la operación

Una forma de optimizar el rendimiento de esta actividad consiste en minimizar el tiempo que se pierde mientras se obtiene el control del bus y se retorna al procesador; esto se realiza con lo que se denomina

modalidad de ráfagas, consistente en acumular en el módulo de entrada/salida o el controlador de DMA una

cantidad importante de datos antes de solicitar el bus (eso sí, este dispositivo debe tener capacidad para acumular todos estos datos que luego queremos enviar). Así una vez acumulado el número requerido de datos, o pasado el

número de ciclos necesario para poder realizar otra transferencia; pedimos el bus, realizamos la transferencia de todos los datos cumulados y evitamos liberar y retomar el bus cada vez que tenemos un dato que enviar.

De una u otra forma, una vez que RCOMPT es cero, pasamos a la siguiente fase.

CULMINACIÓN DE LA OPERACIÓN

Una vez transferido el bloque o bloques de información programado por el procesador, el módulo entrada/salida o controlador DMA genera una interrupción INT con la que se notifica al procesador que ya se ha

transferido el bloque solicitado y con la ejecución de la correspondiente rutina de servicio de la interrupción, se

considera acabada la operación de transferencia del bloque.

5. COMPARACIÓN DE LAS TÉCNICAS BÁSICAS DE ENTRADA/SALIDA

Vamos a estudiar el rendimiento del sistema, para ello vamos a poner el ejemplo de que se quiere analizar

el tiempo de transferencia de información de un disco magnético utilizando estas 3 técnicas de entrada/salida. Los datos del problema son los siguientes:

Ejecución de cada instrucción por el procesador: 150 ns.

Ciclo de lectura o escritura: 100 ns.

Cesión / recuperación de los buses: 50 ns.

Tiempo de latencia del sico: 15 ms.

Velocidad de transferencia: 2Mb/s

Conexión de 32 bits entre el módulo de entrada/salida y el procesador

Con estos datos, e independientemente de la técnica de entrada/salida que se trate, se invertirá el tiempo

siguiente (dado que es necesario programar la operación, esperar el tiempo de latencia adecuado y transferir la

información: Total: Latencia + Transferencia = 15 ms + )/(2*2

)1(220

10

sBytes

kbytebytes=15,49 ms

Page 21: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 19

En este tiempo, el procesador es capaz de realizar (como máximo y sin interrupciones) 150

10·49,15 6

=

103267 instrucciones.

A través de la entrada/salida programada el controlador dice que proporciona un dato cada:

palabraBytes

sbytes

/4

/2·2

120

=1,91 s; el número de instrucciones, por tanto que se puede ejecutar entre dato y dato es de

1910/150 = 12 instrucciones; normalmente con 12 instrucciones hay de sobra para realizar el bucle de sincronización con el controlador y toda la rutina de ejecución: Hay que tener en cuenta que si la conexión no

fuera de 32 bits, sino de 8, la cosa se complicaría, pues se dispondría de un dato cada 0,4775 milisegundos y ahí si que no daría tiempo a ejecutarse.

En fin, en resumen, tardamos 15,49 ms en transferir la información, pero el procesador queda ocupado durante

todo este tiempo.

A través de entrada/salida por interrupciones, el tiempo en que se dispone de un dato sigue siendo 1,91 s, igual que antes, y ello permite ejecutar 12 instrucciones; en este caso hay que preparar una rutina un

pelín ajustada; la rutina de servicio de interrupción puede constar como máximo de 11 instrucciones, pues se debe

prever el tiempo empleado en el reconocimiento de la instrucciones, que suponemos es similar al de la ejecución.

Conseguimos hacer una rutina de ejemplo de 11 instrucciones (ajustado como digo), no obstante seguimos adelante; y suponiendo que la programación de la operación como su culminación se efectúan con 30

instrucciones, el tiempo que el procesador utiliza para llevar a cabo la transferencia es de:

Tiempo ocupado = 30·150ns + palabraBytes

Bytes

/4

210

·11·150 ns + 30 ·150 ns = 0,43ms;

Por tanto, disponemos de tiempo libre del procesador: 15,49 - 0,43 = 15,06 ms; en los que puede efectuar

150

10·06,15 6

=100.400 instrucciones de las 103.267 posibles; lo cual no está nada mal.

A través de la entrada/salida por DMA suponiendo que la programación de la transferencia y la rutina de interrupción duren unas 40 instrucciones, el tiempo de ocupación del procesador es:

Tiempo ocupado = 40·150 ns +Tiempo transferencia + 40·150 ns.

El tiempo de trasnferencia es igual al tiempo que tarda en ceder el bit, efectuar una lectura, recuperar el bit y todo ello multiplicado por buses de 1024/4 datos; en total:

Tiempo transferencia = (1024/4) · (50 ns + 100 ns + 50 ns) = 51.200 ns.

Por tanto, el tiempo ocupado es: 6000 + 51200 + 6000 = 63200 ns.

Con lo que el tiempo disponible es 15,49 – 0,0632 = 15,43; y se pueden efectuar 150

10·43,15 6

= 102.867

instrucciones de trabajo, de las 100400 disponibles. Todavía podemos mejorar más si suponemos que trabamos en modalidad de ráfaga y por tanto cedemos y recuperamos el bus cada, digamos 8 palabras, por lo que el tiempo de

transferencia pasa a ser:

Tiempo transferencia = (256/8)·(50ns + 8·100 ns + 50 ns) = 28800 ns; y ello nos hace reducir el tiempo de ocupación a 40,800 ns y por tanto poder ejecutar muchas más instrucciones.

6. ASPECTOS COMPLEMENTARIOS DE LA ENTRADA/SALIDA

Dos apartados vamos a ver de forma escueta como aspectos complementarios de la entrada/salida que no hemos tratado con anterioridad. Estos aspectos son la relación de la entrada/salida con el sistema de memoria y

mejoras que añade el controlador DMA en las transferencias de este tipo.

Page 22: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 20

Hasta ahora hemos hecho un estudio conciso de la relación entre el sistema de entrada/salida y la

memoria del ordenador; pero en realidad la memoria de un ordenador suele estar compuesta por una memoria caché, una principal y un mecanismo de memoria virtual; esta jerarquía la estudiaremos en el capítulo siguiente

pero se diseña con la finalidad de incrementar la velocidad de los accesos que realiza el procesador.

La relación de la entrada/salida con la memoria caché es un poco caótica. Existen dos opciones: o conectar el módulo entrada/salida con la memoria caché o hacerlo con la principal (en realidad con el bus que va a la

principal. En el caso de que se conecte a la memoria caché tenemos dos grandes desventajas: Disminución del ancho de banda en la comunicación entre el procesador y la memoria caché.

Aumento de la tasa de errores de caché pues se almacena información que no se corresponde a lo

que el procesador espera utilizar.

Debido a ello, éste no es el método de conexión más utilizado; pero la conexión con la memoria principal del controlador DMA tampoco está exenta de desventajas: la principal dificultad es asegurar la coherencia de la

información entre estos dos niveles de memoria; se suele resolver haciendo las operaciones sobre una zona de memoria no cacheable.

Otro problema lo establece la memoria virtual. Si el dispositivo que establece el acceso al DMA lo hace a través de direcciones virtuales; en cada acceso a memoria lanzado por el dispositivo DMA es preciso realizar la

traducción a la dirección completa correspondiente, con la consecuente pérdida de prestaciones. Esto suele

resolverse añadiendo un dispositivo para acelerar la traducción: el TLB (solución eficaz pero compleja) Si, por el contrario, el programador DMA utiliza direcciones físicas, se hace preciso limitar el número de

datos para transferir en una sola operación al tamaño de una página, pues no se puede asegurar que las páginas virtuales consecutivas se encuentren localizadas en un determinado momento sobre marcos de página contiguos.

Por otro lado, una mejora importante del funcionamiento de la entrada/salida por DMA lo constituyen los

canales de entrada/salida: su función consiste en facilitar la programación aprovechando la capacidad que poseen de acceder de forma autónoma a la memoria.; así se consiguen varias ventajas:

Programación de las operaciones de entrada/salida más rápida.

Si el controlador DMA está ocupado en una transferencia cuando el procesador está programando una

nueva operación; éste la puede generar, llevarla a memoria y arrancarse en cuanto el controlador DMA esté disponible (de nuevo eficiencia temporal).

El lenguaje de programación propio del canal de Entrada/salida, aún siendo básico, puede tener una

instrucción que indique el final de la operación de transferencia, con lo que solo se ejecuta una única

instrucción de finalización y no al finalizar la transferencia de cada bloque. Elimina el conflicto con la memoria virtual en los marcos de páginas contiguos.

Page 23: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 21

7. EL BUS DE ENTRADA/SALIDA

Tal como hemos estudiado la estructura básica del computador , parece que únicamente

exista un bus de propósito general para conectar el procesador con la memoria y con

los adaptadores de entrada/salida (figura a).

Esto realmente no es así ya ni el los ordenadores más sencillos, está todo basado en

una jerarquía de buses que, aunque no está tan definida como la jerarquía de memorias,

empieza a estar cada vez más delimitado. Actualmente, los ordenadores poseen

un adaptador conmutador de memoria bus PCI

(figura b), cuya función consiste en conectar en cada instante los dos elementos involucrados

en una transferencia, por ejemplo, la memoria caché de segundo nivel con la memoria

principal o con un controlador de

entrada/salida. Se pueden establecer así flujos simultáneos de información que aumenta la

velocidad y eficiencia de la máquina. Características del Bus entrada/sal:

Tipo de funcionamiento y temporización

(síncrono, asíncrono, semisíncrono). Multiplexación de direcciones/datos

Admisión de varios maestros del bus.

Número de líneas dedicadas a transferir

datos (incide directamente en el ancho de

banda que puede alcanzar).

Número de líneas dedicadas a propagar

direcciones de memoria o entrada/salida (espacio de direccionamiento)

Normalización del bus que, a la larga,

redundará en una mayor difusión de éste.

Aunque no hay una clara definición del bus

de entrada/salida diremos que se trata de un bus normalizado, encargado de conectar los

diferentes módulos de entrada/salida o bien los periféricos de un tipo determinado con el

computador. Así, observamos en la figura lateral, que los

buses local y de memoria no interconexionan ni

periféricos ni controladores; por el contrario los buses EISA y SCSI (incluso el PCI) sí.

Es hoy día característica primordial de los buses de entrada/salida que se deben

normalizar, de namera que varios fabricantes

de controladores de E7s o de dispositivos periféricos, pueden adoptar sus diseños en la

especificación de cada bus normalizado. Otras características más particulares del Bus

dependen del propósito que se le quiera dar, de manera que se pueden observar diferencias

importantes entre:

Page 24: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 22

Bus de almacenamiento: Se trata de conseguir un ancho de banda elevado a un coste de interconexión

bajo y sin que la latencia sea importante

Bus de soporte: Para la interconexión de módulos de entrada/salida, que proporciona un ancho de banda

elevado, con baja latencia y debe admitir varios maestros de bus. Bus serie: Para la conexión de periféricos, cuyo objetivo principal es la reducción de costes, pero no de

rendimiento.

Es fundamental el direccionamiento del bus, que se lleva a cabo en una sola etapa y que puede ser:

Direccionamiento lógico: Los diferentes módulos tanto de memoria como de entrada/salida se deben

encargar de decodificar las señales del bus de direcciones y determinar si se trata de una transacción dirigida a ellos. Para llevarlo a cabo a cada módulo del sistema se asigna un rango de direcciones único (a

través de microinterruptores que se deben configurar en el momento de colocar la placa correspondiente dentro del computador) y tiene el inconveniente de constituir una importante fuente de errores de

configuración.

Direccionamiento geográfico: Es el más seguro dado que se obvian los posibles errores de

configuración por parte del usuario (lo realiza automáticamente el sistema operativo) y el que más se utilizada en la actualidad. Consiste en separar la selección de un módulo de memoria o entrada/salida del

direccionamiento de éste en sus diferentes celdas de memoria o posiciones de entrada/salida. Se establece un mecanismo para seleccionar el módulo conectado a una determinara ranura o slot para facilitar la

configuración automática de los sistemas y para proporcionar la selección de una posición concreta del módulo. Así no hay que configurar los adaptadores de entrada/salida manualmente, puesto que la

dirección que ocupan en el espacio de direcciones se encuentra determinada por la ranura donde se ha

situado. Otra característica es la gestión del bus: el problema se establece a la hora de utilizar buses que admiten

más de un maestro potencias que pretende emplear el bus para realizar una transacción, y es entonces cuando hace falta un maestro que determine cual tiene la autorización para poder utilizarlo. Para ello existe el gestor del

bus único, con varios pares de líneas de petición y concesión del bus, similar al gestor de interrupciones visto

anteriormente. Como ejemplos de buses de entrada salida tenemos el ISA: utilizado anteriormente como base de los

ordenadores iBM-PC, ha quedado relegado como soporte de módulos entrada/salida y simplemente por un problema de compatibilidad con los periféricos; el bus PCI: es el sucesor del anterior iSA y es el más generalizado,

inicialmente solo iba a ser soporte del microprocesador Pentium, pero se cedieron sus especificaciones al dominio

público y de ahí su generalización, el bus SCSI tiene un elevado ancho de banda y es típico en unidades de disco o cinta magnética; y por último el bus USB que contrario al resto, solo utiliza dos hilos (señal y referencia) para

transmitir información entre los periféricos.

1. Conector de alimentación 2. Conector de teclado 3. Pila 4. BIOS 5. Ranuras expansión con buses ISA de 8 ó 16

bits. 6. Ranuras expansión con buses locales, PCI,

EISA, de 32 bits. 7. Chips controladores DMA 8. Zócalo ZIF para el procesador. 9. Buses 10. 10. Memoria caché 11. Zócalos de memoria RAM

Page 25: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 23

TEMA 3 INTRODUCCIÓN A LA JERARQUÍA DE MEMORIAS

Desde los orígenes de la informática, los programadores han pretendido disponer de computadores con mucha capacidad de memoria; actualmente esta cantidad de memoria solo constituye un problema de coste. La rapidez de los procesadores se ha multiplicado en los últimos 20 años por 3000 mientras que la de los dispositivos de memoria solo por 10. Esta gran diferencia que además tiende a aumentar constituye uno e los factores críticos en el rendimiento de un computador. La solución ofrecida por los diseñadores para este problema consiste en el uso de una jerarquía de memorias: memorias estructuradas en distintos niveles con distintas velocidades y capacidades. El objetivo de la jerarquía de memorias consiste en que la información que el procesador requiera en cada momento se encuentra almacenada en el nivel más próximo y rápido posible y, por otro, en que la transferencia de información entre los distintos niveles se lleve a cabo por medio de mecanismos automáticos (sin la intervención explícita del programador o usuario).

1. TIPOS DE MEMORIAS

Según su perdurabilidad: Memoria volátil (pierde la información almacenada cuando deja de tener alimentación

eléctrica o memoria no volátil. Escritura por parte del usuario o no escribibles por parte del usuario Según estos antecedentes tenemos lo siguientes tipos de memoria “comerciales”:

o ROM: (Read only memory): Memoria de solo lectura de semiconductor (como la BIOS). o RAM: (Randon Access Memoru): Memoria de acceso aleatorio o directo, memoria de semiconductor. A su vez

encontramos los tipos SRAM (estáticas) o DRAM (dinámicas que pierden el contenido de la memoria a los pocos nanosegundos, son muy utilizadas porque son baratas y rápidas, aunque haya que “refrescar” constantemente sus contenidos).

o Disco: Dispositivos magnéticos de acceso directo. o Cinta: Su acceso es secuencial y lento, por ello solo se utilizan como copia de seguridad. o CD.

2. ACCESO A LOS DATOS Y A LA JERARQUIA DE LAS MEMORIAS

La memoria se puede considerar un vector unidimensional en el que es preciso especificar un número que indique su posición dentro de ella para acceder a los elementos individuales. Esta cifra se denomina dirección de memoria. El objetivo que se busca en el diseño del sistema de memoria de un computador es que tenga gran capacidad y un tiempo de acceso reducido al menor precio posible. Como no existe ninguna tecnología que cumpla de forma simultánea ambos requisitos, la memoria del computador se estructura en varios niveles, formando la jerarquía de memorias.

El objetivo final de esta jerarquía es conseguir que cuando el procesador acceda a un dato, éste se encuentre en el nivel más rápido de la jerarquía (y por ello el de menor capacidad). Se suelen dividir por ello en:

Primer nivel: constituido por los registros visibles del lenguaje máquina. Es de poca capacidad.

Segundo nivel de memoria caché: constituye una memoria RAM auxiliar de alta velocidad. Puede existir más de un nivel de esta modalidad (como en el ejemplo de la imagen)

Memoria principal Niveles posteriores o memorias secundarias: cds, discos

duros, etc. Como además se puede ver en la imagen, cada nivel se relaciona solo

con los siguientes, y el procesador solo puede acceder al nivel más bajo. Si el dato que necesita el procesador no se encuentra en él, debe transferirse del siguiente o de los siguientes niveles hasta este para que el procesador pueda leerlo. Por otro lado si se modifica algún dato, el procesador lo hará en el nivel más bajo y es necesario que tal modificación se efectúe en el resto de niveles donde se encuentra almacenada una copia del dato original (de lo contrario podríamos incurrir en un problema de coherencia). Pero claro, nosotros podríamos pensar ¿Tanto flujo de información de un nivel a otro tiene que perjudicar al rendimiento del procesador en lugar de ayudarle y además como vamos a tener todos los datos que necesitamos en un área de memoria muy pequeña, como es la memoria más próxima al ordenador? Esto tiene fácil respuesta:

El flujo de datos que se mueve entre niveles está controlado por el sistema de entrada/salida, que, como ya sabemos, apenas interrumpe el número de instrucciones que es capaz de desarrollar el procesador.

Por otro lado, el conjunto de datos que se necesitan para ejecutar un programa y el de instrucciones, a pesar de ser

inicialmente grande, en realidad es pequeño: se sabe que el 1% de código de un programa corresponde al 96% de las

Page 26: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 24

instrucciones realizadas; y el 6% de todas las posiciones de memoria suele abarcar el 90% de los accesos a la misma. Esto se debe a una proximidad referencial: en un intervalo de tiempo, un proceso determinado solo utiliza una pequeña parte de toda la información almacenada, debida sobre todo a:

o Proximidad temporal: En un intervalo de tiempo determinado, la probabilidad de que un proceso acceda varias veces a las mismas posiciones de memoria es muy alta; los bucles en los programas producen proximidad temporal y las llamadas repetidas a subrutinas que emplean las mismas variables locales y los mismos parámetros.

o Proximidad espacial: la distancia entre referencias próximas es muy pequeña en intervalos de tiempo determinados: es decir a excepción de las bifurcaciones el flujo de ejecución es lineal; además los accesos a estructuras de datos recorridas de manera secuencial es muy frecuente.

3. LA MEMORIA CACHÉ

La memoria caché se caracteriza por tener una alta velocidad y un tamaño reducido. Es en esta memoria donde vamos a ejemplificar todo lo visto anteriormente. Una cuestión importante es la tasa de acierto/fallo, es decir, la tasa de fallos en es número de veces que se accede a la memoria caché y no se encuentra allí el dato, dividido por el número de accesos a memoria; es justo lo contrario a la tasa de aciertos, que es lo que nos interesa tener. Cuando se lanza un acceso a la memoria, el algoritmo de emplazamiento es el encargado de buscar este dato:

Se busca este dato en cualquier posición de la memoria caché (asociativa por completo) Este dato solo puede encontrarse en una sola posición de la memoria caché (emplazamiento directo). Se puede ubicar en un conjunto limitado de posiciones de la memoria caché (n-asociativa). La memoria caché completamente asociativa es la que produce porcentaje de fallos más bajos, pero debido a su elevado

precio y lentitud no suele utilizarse; la directa es la que produce más fallos, pero al ser más barata y sobre todo rápida, compensa este elevado número de fallos con el rápido tratamiento que hace de los mismos.

Cuando se encuentra un fallo (o sea el dato buscado por el procesador no está en la memoria caché), el hardware de la memoria caché se encarga de las siguientes tareas:

Solicitar el dato que ha producido el fallo en el siguiente nivel de jerarquía (si este no lo encuentra ira al siguiente). Esperar a que llegue el dato Buscar un lugar en la memoria caché para el dato leído y almacenarlo en esta. Servir el dato al procesador como si se hubiera producido un acierto en la memoria caché.

Este proceso es entre 5 y 10 veces más costoso en tiempo que si hubiese sido un acierto, es por ello muy importante

intentar obtener una tasa de fallos baja. Hemos evidenciado que cuando se produce un fallo, los datos se trasladan secundariamente de la memoria principal a la caché, pero se traslada una línea entera pues es muy posible por la proximidad referencial, que necesitemos esos datos que rodean al que buscamos, por ello se traslada una línea o bloque completa a la memoria caché, pues es muy probable que la necesitemos. El tamaño de esta línea cuenta con unos cuantos bytes de información ( que no debe ser ni muy grande –pues borra otras líneas de la limitada caché que quizá sigamos necesitando- ni muy pequeña –pues corremos el riesgo de dejarnos atrás datos que posiblemente necesitemos).

Eso sí, cuando una línea puede almacenarse en varios lugares de la memoria caché (asociativa o n-asociativa) es necesario

determinar el algoritmo de reemplazo que se encargará de esta tarea, puede ser: Aleatorio: Es un algoritmo simple y funciona razonablemente bien. FIFO: Se elimina la línea que lleva más tiempo almacenada en la memoria; puede producir resultados indeseables

puesto que esta línea no tiene porque ser la que menos se utilice. LRU: se elige la línea que lleva más tiempo sin utilizarse. Teóricamente es el más eficiente, pero es muy difícil

implementarlo en forma hardware, se suelen utilizar algoritmos pseudo-LRU.

La política de escritura se refiera al momento en que se actualiza la memoria principal; es decir cuando en lugar de

tener un acceso a memoria de lectura es de escritura, el dato que se pasa al procesador es variado en la memoria más próxima del procesador, pero es necesario variar este dato también en el resto de copias, se puede hacer mediante dos sistemas:

Escritura inmediata: Como su nombre indica se hace el cambio a la vez en todas las copias, es un sistema fácil de implementar pero que provoca un elevado intercambio de información entre ambas memorias (write no allocate).

Escritura aplazada: Se efectúa siempre las escrituras sobre la memoria caché, y solo cuando se borra la línea afectada en la memoria caché, se trasladan los cambios a la memoria principal (write allocate).

El rendimiento de la memoria caché por tanto, se medirá como el tiempo medio de acceso a memoria, que consistirá en: la tasa de aciertos por el tiempo en caso de acierto más la tasa de fallos por el tiempo que tarda en efectuar el acceso en caso de fallo. Lo ideal, evidentemente, es reducir la tasa de fallos todo lo posible.

Page 27: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 25

TEMA 4 ENSAMBLADOR

1. HERRAMIENTAS DE PROGRAMACIÓN

Para poder escribir un programa, sea en alto nivel, sea en ensamblador, precisaremos de un editor. Éste tiene que ser un editor de texto sin formato, ya que el fichero debe contener exclusivamente las instrucciones del

programa, sin códigos de control sobre el estilo de la letra, tamaño, colores, márgenes del documento, etc.

El fichero que contendrá el programa de origen (source), es decir, en formato texto, recibe el nombre de

fichero de origen o fichero de font. Si el fichero de origen contiene un programa escrito con un lenguaje de alto nivel, el proceso de traducción será realizado mediante un compilador. El programa compilador, por su parte,

analiza el significado del programa en alto nivel y genera instrucciones de lenguaje de máquina que llevan a cabo la tarea especificada en el alto nivel. De otro lado, si el fichero de origen contiene un programa escrito con

lenguaje de ensamblador, el proceso de traducción se genera mediante un programa ensamblador.

El ensamblaje es un proceso más sencillo porque la traducción de lenguaje de ensamblador a lenguaje de

máquina es directa: cada instrucción de ensamblador representa una instrucción en lenguaje de máquina. Como resultado de la compilación o del ensamblaje, se genera un fichero objeto que ya contiene instrucciones de

lenguaje de máquina, pero que todavía no se puede ejecutar.

Para finalizar, un fichero objeto o varios de ellos se pueden combinar y generar un fichero ejecutable. Este

proceso se desarrolla mediante un montador o linker. Aunque se puede realizar el montaje con varios ficheros objeto, también es un paso necesario en caso de tener un solo fichero objeto. El fichero ejecutable ya es el fichero

binario con el lenguaje de máquina y el formato adecuado para poder llevar a cabo su ejecución.

2. ESTRUCTURA DE UN PROGRAMA EN ENSAMBLADOR

En este primer ejemplo tenemos el código de un programa en ensamblador que escribe por pantalla el mensaje "¡Buenos días!".

El bloque identificado por la directiva .data que contiene los datos del programa (segmento de datos), que

contiene una única variable llamada mensaje, que inicialmente contiene el texto que nos interesa escribir por pantalla.

El bloque identificado por la directiva .code que contiene las instrucciones del programa (segmento de código),

además de unas macros que indican el inicio y el final del programa, contiene tres instrucciones. Sin entrar en

detalles sobre la función de estas instrucciones, podéis observar que cada una de ellas siempre ocupa una línea.

Page 28: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 26

En función del modelo de programa que vamos a seguir durante el módulo, siempre empezaremos el segmento de código con una etiqueta (en este caso inicio) seguida de la macro STARTUPCODE, que inicializa

algunos registros del procesador.

Para finalizar el programa, utilizaremos la macro EXITCODE 0, y para indicar la finalización del segmento de código tendremos que poner end seguido del nombre de la etiqueta de comienzo de código: inicio. Las tres

instrucciones restantes, por tanto, son las que consiguen que se escriba un mensaje por pantalla. Los comentarios son otro aspecto importante de cualquier programa en ensamblador, son especialmente útiles

en ensamblador debido a que el bajo nivel de este lenguaje provoca que los programas presenten algunas

dificultades de comprensión. Así pues, en ensamblador, los comentarios son el texto que hay detrás de un punto y coma y llega hasta el final de línea.

Una vez tenemos el fichero con el código ensamblador, hay que traducir el código escrito en lenguaje de

ensamblador a lenguaje de máquina y generar, así, un programa ejecutable. El proceso de traducción consta de

dos pasos:

Ensamblaje (assembling). El ensamblaje traduce cada línea de código ensamblador a la correspondiente

instrucción en lenguaje de máquina. Si el código ensamblador no contiene ningún error, se genera, entonces, un fichero objeto cuyo contenido consta de instrucciones en lenguaje de máquina. Nosotros utilizaremos el

programa Turbo Assembler para ensamblar, un programa que genera un fichero objeto con extensión .obj.

Montaje (linking). El montaje toma un fichero objeto (o más de uno) y, si no hay ningún error, genera el

fichero ejecutable. Para montar, utilizaremos el programa Turbo Linker, que genera un fichero ejecutable con

extensión .exe. En concreto, para ensamblar y montar el programa del ejemplo, ejecutaremos los siguientes comandos:

tasm /zi buenosdias.asm y tlink /v buenosdias.obj

3. LECTURAS Y ESCRITURAS

En este apartado estudiaremos como hacer lecturas de teclado y escrituras por pantalla de los elementos que nos interesen:

Para poder escribir un texto por pantalla, éste tiene que estar inicialmente almacenado en la memoria en

forma de cadena de texto. Podemos especificar el código ASCII de los caracteres poniendo directamente los caracteres entre comillas, o bien, en caso de encontrarnos con caracteres de control, poniendo el código ASCII

separado por comas. Existen diferentes maneras de escribir texto por pantalla y de leer caracteres del teclado. De todas las posibilidades existentes, en un primer momento vamos a utilizar la interrupción 21h, mecanismo basado

en interrupciones de software que permite utilizar rutinas del sistema operativo para acceder a los recursos del sistema. Para especificar qué función de sistema se quiere utilizar, se pone el valor correspondiente al registro ah.

El ejemplo de la página siguiente nos muestra el código de un programa que escribe un mensaje inicial por

pantalla, lee una tecla y escribe un segundo mensaje antes de finalizar. Para poder escribir un texto, éste tiene que estar inicialmente almacenado en la memoria. En nuestro caso

tenemos las variables de memoria mensaje1, mensaje2 y saltolinea, cada una de las cuales contiene una cadena de texto y la variable de memoria tecla, que no está inicializada. Las dos primeras cadenas de texto contienen un

mensaje y acaban con los caracteres 10 y 13, que codifican el salto de línea en código ASCII. La variable

saltolinea, por su parte, sólo contiene un salto de línea. Y, por último, la variable tecla, que está sin inicializar (especificado con el carácter ?), servirá para guardar la tecla leída por el teclado.

Para escribir un texto por pantalla, el registro dx debe contener la dirección de memoria a partir de la cual, y hasta encontrar el carácter "$", se halla el texto que estamos interesados en escribir. A continuación, tenemos

que activar la interrupción 21h, poniendo antes 09h en el registro ah, que indica que se quiere escribir una cadena

de caracteres por pantalla. De manera similar, para leer un carácter del teclado activaremos la interrupción 21h, pero, en este caso,

poniendo previamente un 01h en el registro ah (de esta manera, el programa se esperará hasta que el usuario pulse una tecla).

Page 29: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 27

Veremos por pantalla la tecla pulsada, y ésta es almacenada en el registro al. Por lo general, es importante

guardar el valor de la tecla pulsada en alguna variable de memoria (en el ejemplo, la variable tecla), ya que el registro al puede sufrir modificaciones en las interrupciones que se produzcan a continuación.

Escritura de un texto por pantalla

La forma de escribir un texto por pantalla es la que se ha descrito en el ejemplo 2; es decir: lea dx, [text] mov ah, 09 h int 21 h,

donde text es la variable que contiene el texto (acabado con el carácter '$') que deseamos escribir.

Escritura de un carácter por pantalla

Si nuestra intención es escribir un solo carácter, no es necesario crear una cadena de dos caracteres acabada con la letra '$', puesto que hay otra interrupción que permite escribir un carácter con más facilidad, que

es la siguiente: mov dl, car mov ah, 02 h int 21 h,

donde car es el código ASCII del carácter que queremos escribir, o una variable o registro que contiene este

código.

Escritura de un número por pantalla No existe ninguna rutina de sistema que escriba directamente números por pantalla. Dado que la escritura

por pantalla siempre se realiza con el código ASCII del carácter que nos interesa escribir, la escritura de números

es una tarea más complicada. Si el número que hay que escribir es de un solo dígito, y teniendo en cuenta que sabemos que el código

ASCII de los dígitos 0, ..., 9 son valores consecutivos, podemos utilizar la interrupción descrita en el caso anterior de este modo:

mov dl,'0' add dl, núm mov ah, 02h int 21h,

Page 30: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 28

donde núm es el valor del número entre 0 y 9 que estamos interesados en escribir. Fijaos en que el valor del

código ASCII del dígito '0' se suma al valor del número que se quiere escribir. El resultado de esta suma es el valor del código ASCII del dígito que queremos escribir.

Si el número que queremos escribir contiene varios dígitos, hay que hacer la escritura dígito a dígito. Por

esta razón, se deben realizar sucesivas divisiones por 10 y hay que escribir cada uno de los dígitos; pero la operación de división no la veremos hasta un poco más adelante.

Lectura de un carácter por el teclado

La lectura del teclado mediante la interrupción 21h es de tipo carácter a carácter. Existen dos variantes

para realizar la lectura del teclado: con echo o sin echo. Pues bien, con echo significa que el carácter que se introduce por el teclado es escrito al mismo tiempo por la pantalla. Sin echo, significa que el carácter introducido

por el teclado no se escribe por pantalla. En ambos casos, y de manera similar a la que vimos en el ejemplo 2, el carácter introducido queda almacenado en el registro al.

La lectura con echo se hace de la siguiente manera:

mov ah, 01 h int 21 h mov [car], al, donde car es una variable de memoria en la que guardamos el valor introducido por el teclado. De manera

análoga, la lectura sin echo se realiza como veremos acto seguido: mov ah, 08 h int 21 h mov [car], al.

4. ESTRUCTURAS CONDICIONALES En los ejemplos introducidos hasta ahora, las instrucciones han sido ejecutadas secuencialmente. Por lo

general, sin embargo, podemos encontrar diferentes partes de un programa que se ejecutan en función de una serie de valores introducidos o calculados durante la ejecución del programa. Para poder identificar la instrucción a

la que nos interesa saltar, es necesario poner una etiqueta.

A continuación vamos a ver el código de un programa (página siguiente) que escribe un mensaje por

pantalla en función del valor de la tecla introducida.

Si se pulsa una "D", escribe "Buenos días".

Si se pulsa una "T", escribe "Buenas tardes".

Y, de lo contrario, no escribe nada.

En concreto, se compara la tecla introducida con la letra "D". Si la comparación es igual, no se salta y el código continúa ejecutándose de forma secuencial, de manera que se escribe el mensaje2. De lo contrario, se salta a la

instrucción identificada por la etiqueta tardes. De manera análoga, si la tecla introducida no es una "D" y se salta a la instrucción etiquetada con tardes, se realiza, entonces, una nueva comparación. En este caso, se compara la

tecla introducida con la letra "T": si es igual, no se salta y se sigue ejecutando el código de forma secuencial y escribiendo el mensaje3; de lo contrario, se salta a la instrucción identificada por la etiqueta final.

Así pues, el mensaje2 sólo se escribirá si la tecla introducida es la "D", y el mensaje3, sólo si la tecla pulsada es la "T". Fijaos en que cuando nos encontramos con dos condiciones excluyentes (es decir, que se ejecuta un

bloque de instrucciones u otro bloque diferente) es necesario poner una instrucción de salto incondicional jmp al final del primer bloque de instrucciones para, de este modo, evitar que el segundo bloque sea ejecutado a

continuación del primero.

Además, prestad atención al hecho de que la etiqueta días carece de uso alguno. En general, sin embargo, las

etiquetas (de la misma manera que los comentarios) también sirven para aportar más claridad al programa. En este caso, podéis observar que, en el programa del ejemplo, las etiquetas nos identifican cuatro bloques: inicio,

días, tardes y final.

Debemos hacer hincapié en el hecho de que las comparaciones se realizan con los caracteres "D" y "T",

caracteres que corresponden a letras en mayúscula. En realidad, lo que se está comparando es el código ASCII de estos caracteres con el código ASCII introducido por el teclado.

Page 31: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 29

Instrucciones de salto

Formato: Cmp al, “D” Jne tardes La primera instrucción compara el valor guardado en al, con la letra D (además mayúscula). La segunda instrucción provocará un salto hasta la etiqueta tardes, siempre y cuando el valor en Al y D sean distintos.

Comparación de valores con signo

jg Salta si el primer valor es mayor que

el segundo valor

jge Salta si el primer valor es mayor o

igual que el segundo valor

jl Salta si el primer valor es menor que el segundo

jle Salta si el primer valor es menor o

igual que el segundo

Comparación de valores sin signo

ja Salta si el primer valor es mayor que

el segundo

jae Salta si el primer valor es mayor o igual que el segundo

jb Salta si el primer valor es menor que

el segundo

jbe Salta si el primer valor es menor o

igual que el segundo

Otras instrucciones de salto

je

jz

Salta si los dos valores comparados

son iguales

jne jnz

Salta si los dos valores comparados son diferentes

jmp Salta incondicionalmente

5. ESTRUCTURAS ITERATIVAS

Otra técnica importante de la programación (tanto en alto nivel como en ensamblador) son las estructuras

iterativas, es decir, la ejecución de un conjunto de instrucciones un número repetido de veces. En general, el conjunto de instrucciones que se encuentran dentro de una estructura iterativa se puede ejecutar en un número

fijo de iteraciones, o bien hasta que se cumpla una determinada condición. El programa que tenemos a continuación escribe un mensaje por pantalla un número repetido de veces. En una

primera versión de este código, el mensaje es escrito diez veces; en la segunda versión, el mensaje es escrito cada

vez que se pulsa una tecla, hasta que la tecla pulsada es la "X". Como podéis ver en el ejemplo, esta estructura iterativa está formada por una estructura condicional y un salto hacia atrás.

La estructura condicional evalúa el número de veces que se ha ejecutado el código sabiendo que cx cuenta el

número de iteraciones. Cuando cx es mayor o igual que 10, se produce un salto hacia final; de lo contrario, se

ejecutan las instrucciones que se encuentran en el interior de la estructura iterativa y se salta hacia atrás, es decir, hacia las instrucciones que vuelven a evaluar la condición.

Page 32: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 30

Por lo general, para que el tipo de estructura iterativa que aparece en el siguiente ejemplo funcione de forma

correcta es necesario:

Inicializar el contador (en este caso el registro cx).

Incrementar el contador al final de cada iteración.

Fijaos en que si no hubiésemos inicializado cx, este registro podría corresponderse con cualquier valor, por ejemplo 10. En este caso, el código que se encuentra en el interior de la estructura iterativa no se ejecutaría

nunca.

Ejemplo 1

Ejemplo 2

De la misma forma, si cx no se hubiera incrementado al final de cada iteración, el contador valdría siempre 0 y, por lo tanto, la estructura iterativa nunca acabaría y el programa se iteraría de manera indefinida.

En esta segunda versión del mismo programa, cada vez que se pulsa una tecla se escribe el mensaje,

hasta que la tecla pulsada es "X". Fijaos en esta segunda versión del programa, en la que la estructura de evaluación de la condición es muy similar a la del ejemplo de la versión anterior. En este caso, sin embargo, se

compara la tecla pulsada con el carácter "X".

Pues bien, si éstas son iguales, se salta hacia el final del programa; de lo contrario, se escribe el mensaje y

se vuelve a saltar hacia atrás (hacia la introducción de la tecla). En este caso, la condición de evaluación es el valor de la tecla introducida por el teclado. Tened en cuenta que antes de comparar por primera vez, siempre se lee una

tecla, y antes de cada nueva iteración, se lee una nueva tecla.

Las estructuras iterativas mostradas en los ejemplos 4.1 y 4.2 sirven tanto para contar un número determinado de iteraciones como para iterar hasta que se cumpla una condición. En el primer caso, sin embargo,

en el que se pretende contar un número determinado de iteraciones, el lenguaje de ensamblador nos ofrece otra

manera más eficiente de hacer lo mismo: la instrucción loop.

La instrucción loop sirve para contar iteraciones utilizando de forma implícita el registro cx para el recuento. Al ejecutarse la instrucción loop, el registro

Page 33: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 31

cx decrece en una unidad y, si su valor es diferente de 0, se salta a la etiqueta especificada en la misma

instrucción.

6. TIPOS DE OPERANDO

Una instrucción en ensamblador ejecuta una determinada acción, utilizando uno o varios operandos de origen, sobre (por lo general) un operando de destino. Además, tanto el operando de origen como el de destino

deben tener el mismo tamaño. Cada uno de los operandos de origen, es decir, los operandos que son consultados

para ejecutar la instrucción, puede ser de tres tipos: una constante,

un registro,

una variable de memoria.

Del mismo modo, el operando de destino, es decir, el operando que se actualiza como consecuencia de la ejecución de una instrucción, puede ser de dos tipos:

un registro,

una variable de memoria.

No tiene ningún sentido hablar de operando de destino constante, porque el operando de destino es, por

definición, el operando que se actualiza al ejecutar una instrucción, y una constante no varía.

A pesar de que tanto el operando de origen como el de destino pueden ser de tipo variable de memoria, el ensamblador del i8086 posee una restricción: los dos operandos no pueden ser de tipo variable de memoria en la

misma instrucción; por lo que, o bien lo es uno, o bien lo es el otro. En el ejemplo, aparece en negrita la

instrucción mov, que ya conocéis. Esta instrucción tiene dos operandos y se comporta de la siguiente

manera:

mov destino, origen Es decir, copia el valor del operando de origen

(lo lee) sobre el operando de destino (lo escribe). En este caso concreto, podéis ver que la

instrucción utiliza como operando de origen un valor

constante (aquí el número 65). La constante especificada puede estar expresada en los diferentes

formatos que mostramos a continuación: en decimal: mov dl, 65;

en hexadecimal: mov dl, 41h;

en ASCII: mov dl, 'A'

A continuación, en el caso2 podéis observar que

el operando de origen de la instrucción mov es un registro; de hecho, en esta instrucción el operando de

destino también es un registro. El acceso a un registro es muy rápido, pero, a pesar de todo, existen pocos

registros disponibles. Así pues, se acostumbra a utilizar operandos de tipo registro siempre que esto

sea posible. Además, hay operaciones que fuerzan el

uso de algún registro concreto.

Prestad atención, ahora, al hecho de que en el caso3, la instrucción mov utiliza un operando de

origen de tipo variable de memoria. En este caso, aparece especificada entre corchetes una variable de memoria

declarada en el segmento de datos. Como en el caso anterior, para utilizar un operando de origen de tipo variable de memoria, ésta tiene que haber sido declarada e inicializada con anterioridad. Tened en cuenta el hecho de que

la variable carácter1 ha sido declarada en el segmento de datos e inicializada en el valor 65 durante su definición. Utilizaremos un operando de tipo variable de memoria para guardar los datos de nuestro programa

temporalmente (debido a que como no suele ser suficiente con los registros de que disponemos, éste es el lugar habitual en el que se guardan los datos).

Page 34: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 32

Y ya por último, a continuación pasamos a ver (en negrita) un caso algo diferente. Fijaos en que la

variable de memoria carácter2 ha sido declarada en el segmento de datos con dw, en lugar de con db. db significa que la variable de memoria ocupa 8 bits (los necesarios para codificar un carácter en código ASCII); dw, por su

parte, significa que la variable de memoria ocupa 16 bits. En consecuencia, en este segundo caso, la constante 65

se codifica con 16 bits (los 8 bits de mayor peso serán cero). En el caso4, el operando de origen es, del mismo modo, una variable de memoria; no obstante, en este caso es una variable de 16 bits. Como ya hemos comentado,

tanto el operando de origen como el de destino tienen que ser del mismo tamaño, motivo por el que ahora se utilizará un registro de 16 bits (dx).

7. VARIABLES DE MEMORIA: DECLARACIÓN Y USO

Las variables de memoria sirven para almacenar información en memoria de forma temporal. Esta información puede ir cambiando durante la ejecución del programa, o bien puede mantenerse constante (según

nos interese). Con el fin de especificar a qué parte de la información nos interesa acceder, identificaremos cada

variable de memoria con un nombre. Una variable de memoria se representa mediante un nombre declarado dentro del segmento de datos,

para el que se define un tamaño y, de forma opcional, un valor inicial. Cuando se ejecuta el programa ensamblador, el sistema reserva en la memoria el espacio correspondiente

al tamaño de las variables. Estas posiciones de memoria estarán inicializadas o no en función de la manera en que

hayamos declarado la variable. Desde el programa ensamblador podremos acceder al valor de la variable especificando su nombre entre corchetes.

Las variables de memoria aparecen declaradas en el segmento de datos. Al declarar una variable de memoria, hay

que indicar su tamaño y, de forma opcional, el valor inicial de la misma. En el ejemplo, en negrita, podéis ver las tres

posibilidades que nos ofrece el ensamblador para indicar el

tamaño: db indica que el tamaño es un byte.

dw indica que el tamaño es un word (dos bytes).

dd indica que el tamaño es un double (cuatro bytes).

Por lo tanto, tened en cuenta que var1 es una variable de 8 bits, var2, una de 16 bits y var3, una de 32 bits.

Después del tamaño, aparecerá especificado el valor inicial.

Dicho valor puede aparecer especificado en cualquier formato: decimal, hexadecimal o bien en código ASCII. En el ejemplo,

hemos inicializado todas las variables en 1. No obstante, fijaos en que la primera variable ocupa 8 bits, la segunda, 16 bits y la

tercera, 32 bits. Si nos es indiferente el valor en el que queremos inicializar

una variable, lo podemos especificar de la siguiente manera:

var dw ? Se puede declarar una lista de variables del mismo tipo

(un vector) tras haber indicado el tamaño que queremos que tenga cada elemento (db, dw o dd), poniendo los valores

iniciales de forma consecutiva.

En el siguiente ejemplo podéis observar que var4 es una lista de diez elementos de tamaño byte inicializados con

códigos ASCII. Podemos especificar los códigos ASCII escribiendo los caracteres entre comillas, o bien escribiendo los códigos separados por comas.

De forma similar, var5 es una lista de cinco elementos de tamaño word inicializados en los valores 1, 3, 5,

7, y 9, respectivamente. En caso de que tengamos números naturales o enteros, éstos se ponen directamente separados por comas.

Por último, disponemos de una alternativa para declarar listas de una gran cantidad de elementos. Ésta es la forma en la que se ha declarado la variable var6, es decir, se ha indicado que consta de diez elementos de

tamaño word, inicializado cada uno de ellos en el valor cero.

Page 35: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 33

Se puede declarar una lista de variables del mismo tipo (un vector) tras haber indicado el tamaño que queremos

que tenga cada elemento (db, dw o dd), poniendo los valores iniciales de forma consecutiva. En el siguiente ejemplo podéis observar que var4 es una lista de diez elementos de tamaño byte

inicializados con códigos ASCII. Podemos especificar los códigos ASCII escribiendo los caracteres entre comillas, o

bien escribiendo los códigos separados por comas. De forma similar, var5 es una lista de cinco elementos de tamaño word inicializados en los valores 1, 3, 5,

7, y 9, respectivamente. En caso de que tengamos números naturales o enteros, éstos se ponen directamente separados por comas.

Por último, disponemos de una alternativa para declarar listas de una gran cantidad de elementos. Ésta es

la forma en la que se ha declarado la variable var6, es decir, se ha indicado que consta de diez elementos de tamaño word, inicializado cada uno de ellos en el valor cero. Se accede al resto de los elementos de la lista

sumando un desplazamiento con respecto al elemento inicial. Así pues, para acceder al quinto elemento de la lista de caracteres, se suma un desplazamiento de 4 con respecto al elemento inicial.

Tened en cuenta que se han creado los dos accesos mencionados de diferente manera: en el primer caso,

se ha movido una constante, y, en el segundo, un registro. En cualquier caso, es importante que veamos que el tamaño de ambos operandos en cada instrucción es el mismo: 8 bits.

Al acceder a los elementos de una lista de words debemos tener en cuenta que cada elemento ocupa dos bytes. En consecuencia, para llevar a cabo el acceso, hay que sumar un desplazamiento de dos por cada elemento.

Las siguientes instrucciones no tienen ningún efecto sobre lo que se escribe por pantalla, pero podéis apreciar el acceso a la lista de words por el desplazamiento de 8 con respecto al inicio de la variable de memoria var5. Es

decir, que se accede al quinto elemento de esta lista (el último elemento, que contiene el valor 9). Además, dado

que se accede a un elemento de 16 bits, tendremos que utilizar un registro de 16 bits (en este caso, el registro ax). Como habréis podido observar, estas instrucciones copian el último elemento de la lista sobre el elemento

inicial. En teoría, podríamos hacer esta acción de la siguiente manera: mov [var5], [var5 + 8]

Sin embargo, recordad que los dos operandos de una misma instrucción no pueden ser variables de memoria, motivo por el que el movimiento se ha tenido que efectuar en dos instrucciones. Tras la ejecución de

estas dos instrucciones, el contenido del vector será: 9, 3, 5, 7 y 9.

8. VARIABLES DE MEMORIA: MODALIDADES DE ACCESO

Las variables de memoria están declaradas en el segmento de datos y se identifican mediante un nombre; utilizaremos este nombre para acceder a la variable. Para acceder a una variable en concreto, sólo tenemos que

poner el nombre entre corchetes. De forma parecida, si nos interesa acceder a una posición concreta de una variable de tipo lista, sólo tenemos que que poner entre corchetes el nombre de la variable y el desplazamiento

apropiado.

En algunos casos, puede ser interesante acceder a una variable a priori indeterminada, o bien a una posición indeterminada (o variable) de una variable de tipo lista. Pues bien, en estos casos, para especificar el dato

de memoria al que queremos acceder, es necesario utilizar registros entre corchetes.Para el acceso de variables de memoria con registros, podemos utilizar dos tipos de registros: los registros base y los registros índice.

Los registros base sirven para especificar la dirección inicial (dirección base) de una variable de

memoria. En ensamblador, podemos encontrar un registro base para referenciar datos llamado bx. Existe un segundo registro base que se utiliza para referenciar información de la pila llamado bp, aunque, de momento, sólo

utilizaremos el bx. Los registros índice sirven para especificar un desplazamiento (índice) a partir de una dirección base. En

ensamblador, podemos encontrar dos registros índice, los cuales reciben el nombre de si y di.

El programa que encontraréis a continuación escribe una lista de números pares o impares, según la tecla que el usuario haya introducido. En pricipio, hay dos vectores con números pares, y a uno de éstos se le suma +1 para

hacerlos impares. La utilidad de este programa sólo es ilustrar las diferentes modalidades de acceso a las variables de memoria. Fijaos en el segmento de datos, en el que a parte del mensaje hay dos listas de números: par e

impar. En un principio, la lista impar contiene números pares, así que el primer bucle del programa recorre esta lista e incrementa cada uno de sus elementos. Para hacer esto, la instrucción marcada en negrita utiliza el nombre

de la variable en cuestión y suma el valor del registro índice si.

Como podéis observar, el registro si vale inicialmente cero, y en cada iteración del bucle se incrementa en dos unidades. Así, se va generando el desplazamiento adecuado para acceder a cada elemento del vector. En tal

Page 36: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 34

caso, diremos que esta instrucción accede a unas posiciones indeterminadas (de hecho, unas posiciones variables)

de una variable determinada (concreta) de tipo lista.

Observad que, como siempre, el registro índice se ha inicializado con anterioridad, en este caso en cero,

puesto que, de lo contrario, se accedería a posiciones indeterminadas de memoria (dependiendo del valor del registro si). Después del primer bucle que incrementa los elementos del vector impar, se escribe el mensaje por

pantalla y se pide al usuario que pulse una tecla. A continuación tenemos el condicional que comprueba si la tecla pulsada es una "P" o una "S". En caso de

que no sea ni una "P" ni una "S", el programa salta al final y no hace nada. Dependiendo de la tecla pulsada, se

ejecuta la instrucción lea utilizando como operando de origen el vector par o el vector impar. La instrucción lea pone la dirección de memoria que tiene el operando de origen en el operando de

destino. Por lo tanto, el operando de origen tiene que ser por fuerza de tipo variable de memoria. En este caso, en el registro bx ponemos la dirección de memoria del vector par o del vector impar, según la tecla introducida. Fijaos

en la diferencia existente entre la instrucción

mov y la instrucción lea. En el primer caso, accedemos al valor de la variable de memoria,

y, en el segundo, a la dirección de la variable de memoria.

El objetivo de poner la dirección de una variable de memoria en el registro bx es

poder utilizar el registro entre corchetes para

efectuar el acceso a la variable de memoria a la que apunta.

Una vez tenemos una dirección de memoria en el registro bx, podemos acceder a

ella poniendo el registro bx entre corchetes de

la siguiente manera (de hecho, podemos utilizar ax o cualquier otro registro):

mov ax, [bx] En el ejemplo podéis observar que se

accede a una dirección de memoria formada por la suma de bx y si. Es decir, a una

variable no fija (la que apunta al registro bx)

con un desplazamiento variable (el que indica el registro si). Es necesario tener en cuenta

que para realizar este tipo de acceso no podemos utilizar ningún registro diferente del

registro base o del índice.

De momento, utilizaremos bx como registro base, y si o di, como registros índice.

Más adelante, cuando estemos en la pila, también utilizaremos el registro base bp.

En general, este hito podemos

resumirlo determinando que se puede acceder a una posición de memoria mediante la

siguiente modalidad de direccionamiento: mov ax, [base + indice + despl],

donde base puede ser el nombre de una

variable o un registro base (o nada), indice

hace referencia en un registro índice (o nada), y despl puede ser cualquier constante (o

nada). La expresión que especifica la dirección de memoria a la que se quiere acceder sólo puede contener el

operando "+", la suma, o para constantes, también el operando "-", la resta. Por lo tanto, los siguientes accesos

serían incorrectos: mov ax, [var * 2]

mov ax, [bx – si] mov ax, [var + 2 * si]

Page 37: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 35

9. INSTRUCCIONES ARITMÉTICAS

Consideremos las instrucciones aritméticas que podemos implementar de forma directa con el lenguaje de ensamblador. Las instrucciones aritméticas del lenguaje de ensamblador permiten realizar una operación aritmética

con uno o dos operandos de origen y guardar el resultado sobre un operando de destino. Las instrucciones de ensamblador del i8086 no permiten especificar más de dos operandos. Así pues, uno de los operandos de origen

siempre es, además, el operando de destino.

Por ejemplo, para sumar dos números, la sintaxis es: add num1, num2

En este caso, se desarrolla la operación: num1 = num1 + num2.

De forma similar, otras operaciones que requieren un solo operando de origen, como el incremento (sumar + 1), se especifican con un solo operando. Es decir:

inc num

En este caso, la operación que se realiza es: núm = núm + 1.

Existen otras instrucciones en las que, para ejecutar la operación, se toma siempre un operando (por lo general un registro) de manera implícita. Es decir, uno de los operandos no se especifica y se toma siempre un

determinado registro. Ejemplos de estas instrucciones son la multiplicación y la división, que veremos más

adelante.

El primer bloque de instrucciones hace una suma. Cuando queremos sumar dos números y guardar el resultado obtenido, tenemos

que hacer, forzosamente, el cálculo por medio de un registro auxiliar (en el ejemplo utilizamos el registro ax) y después guardar el resultado en la

variable de memoria correspondiente.

Otra posibilidad la encontramos cuando queremos sumar dos números y guardar el resultado obtenido sobre uno de estos dos números.

En este caso, en teoría podríamos hacer: add [resultado], [numero]

Sin embargo, recordad que existe la limitación de que los dos operandos no pueden ser variables de memoria. En consecuencia, en este

caso también tendremos que efectuar el cálculo por medio del registro ax, pero de una manera algo más eficiente que en el ejemplo:

mov ax, [numero]

add [resultado], ax

Para la resta sólo debemos tener cuidado con el orden en que se

especifican los operandos, ya que la operación resta el operando de origen del operando de destino (sobre el que guarda el resultado). Es decir, la

operación op1 = op1 - op2 se hace de la siguiente manera:

sub op1, op1

Ahora bien, la operación op1 = op2 - op1, siendo op1 y op2

variables de memoria, tendría que llevarse a cabo de una forma más sutil:

mov ax, [op1]

mov bx, [op2] sub bx, ax

mov [op1], bx

Las operaciones de suma y resta se ejecutan igual si se realizan sobre números naturales o enteros, ya

que el algoritmo de suma (o resta) para números naturales y enteros (codificados en complemento a 2) es el mismo.

Page 38: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 36

La operación de multiplicación es más delicada que la suma y la resta; su funcionamiento depende del

tamaño del operando que se especifique: Si el operando es de 8 bits, se ejecuta: ax = operando × al.

Si el operando es de 16 bits, se ejecuta: dx _ ax = operando × ax.

Cuando la multiplicación es de 8 bits, se multiplica el operando por al y se guarda el resultado obtenido en

el registro ax. Es decir, se utiliza el registro ax de manera implícita. Además, fijaos en que el resultado de haber multiplicado dos números de 8 bits podría ocupar hasta 16 bits; por consiguiente, esta operación guarda el

resultado en ax. De forma parecida, cuando la multiplicación es de 16 bits, ésta utiliza de manera implícita el registro ax

como segundo operando y guarda el resultado en los registros dx (los 16 bits de más peso) y ax (los 16 bits de

menos peso), ya que, en este caso, el resultado ocupará hasta 32 bits. Aquí, sí debemos diferenciar si la multiplicación se realiza con números naturales o enteros. De hecho, la

instrucción imul multiplica números enteros, mientras que la instrucción mul, hace lo propio con números naturales. Tanto en la instrucción mul como en la instrucción imul, el operando que se especifica tiene que ser, por

fuerza, de tipo registro o variable de memoria.

Por último, veamos la operación de división, que también depende del tamaño del operando especificado:

Si el operando es de 8 bits, se ejecuta: al = ax / operando ah = ax % operando.

Si el operando es de 16 bits, se ejecuta: ax = dx_ax / operando dx = dx_ax % operando.

Donde / representa el cociente, y %, el resto de la división. Es decir, el operando especificado en la

instrucción representa el divisor, y el dividendo se toma de forma implícita del registro ax (y del dx para divisores de 16 bits). En este segundo caso, el dividendo será un número de 32 bits formado por dx (los 16 bits de más

peso) y ax (los 16 bits de menos peso).

De manera similar, hallamos las instrucciones div y idiv para hacer divisiones: la primera la realiza asumiendo que los números son naturales, y la segunda, asumiendo que los números son enteros. Fijaos en que si

queremos dividir dos números de 16 bits, la operación de división utiliza igualmente el registro dx de manera implícita. Por lo tanto, en dx tiene que estar la extensión de signo, si los números son enteros, o simplemente

cero, si los números son naturales. De manera análoga, si estamos interesados en dividir dos números de 8 bits,

en la parte alta del registro al (ah) tendrá que estar la correspondiente extensión de signo. La instrucción cbw representa una extensión de signo del valor de al sobre ah. Asimismo, la instrucción

cwd forma una extensión de signo del valor de ax sobre dx. Prestad atención al hecho de que en el ejemplo hay que utilizar la instrucción cwd para realizar la extensión de signo correspondiente sobre el registro dx.

Las operaciones aritméticas mostradas en el ejemplo son las operaciones básicas, suficientes para realizar

cualquier cálculo. A continuación, pasamos a describir otras operaciones aritméticas que también pueden ser

interesantes:

Incremento y decremento Existen unas instrucciones más eficientes que las instrucciones básicas de suma y resta para sumar o

restar +1 a un operando, y son éstas:

inc operando dec operando

Fijaos en que el operando debe ser un registro o una variable de memoria, ya que carece de sentido

incrementar o decrementar una constante.

Complemento a 2

Para cambiar un número entero de signo disponemos de la siguiente instrucción: neg operando

Puesto que el i8086 representa los números enteros con complemento a 2, de hecho, esta instrucción hace

el complemento a 2 del operando especificado. Como siempre, este operando tiene que ser un registro o una

variable de memoria.

Page 39: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 37

Multiplicación por números potencia de 2 En binario, una multiplicación por un número potencia de 2 (por ejemplo, 2N) equivale a desplazar este

número N posiciones hacia la izquierda; es decir, a poner N ceros por la derecha (pensad en decimal: una

multiplicación por 1.000 equivale a poner tres ceros a la derecha del número en cuestión). Es evidente que desplazar un número a la izquierda es más fácil que hacer una multiplicación. Por lo tanto,

en ensamblador se acostumbran a utilizar las instrucciones de desplazamiento para efectuar una multiplicación por un número potencia de 2. Estas instrucciones son:

shl operando, 1

shl operando, cl sal operando, 1

sal operando, cl

shl se utiliza para números naturales y sal, para números enteros. Cuando deseamos desplazar una sola

posición hacia la izquierda (multiplicación por 2), podemos utilizar la constante 1 como segundo operando; de lo contrario, hay que poner en el registro cl el número de posiciones que queréis desplazar hacia la izquierda.

División por números potencia de 2

Parecido al caso de la multiplicación, es el de la división en binario por un número potencia de 2, que equivale a desplazar este número las posiciones correspondientes hacia la derecha. Las instrucciones en

ensamblador para realizar desplazamientos hacia la derecha son las siguientes:

shr operando, 1

shr operando, cl sar operando, 1

sar operando, cl

10. INSTRUCCIONES LÓGICAS

Las instrucciones aritméticas realizan cálculos sobre valores de 8, 16 ó 32 bits, interpretando todos los bits

de manera unificada según una codificación. De forma complementaria, también hay otro tipo de operaciones que trabajan bit a bit, que son las instrucciones lógicas.

Las instrucciones lógicas tienen mucha importancia en áreas específicas como, por ejemplo, la programación lógica. Sin embargo,

para nosotros serán útiles de un modo especial cuando manipulemos los registros de los controladores de los periféricos.

Las instrucciones lógicas del lenguaje de ensamblador

permiten desarrollar una operación lógica bit a bit utilizando uno o dos operandos de origen y guardar el resultado obtenido sobre un

operando de destino. Las operaciones lógicas básicas son and, or y not, aunque el

lenguaje de ensamblador también nos ofrece la operación xor.

Además, de manera similar a las instrucciones aritméticas, uno de los operandos de origen es siempre el operando de destino.

En el ejemplo hallamos declaradas dos variables de memoria de 8 bits: el valor original (una con valor inicial igual a 75 especificado en

decimal) y la copia (con un valor inicial cualquiera especificado, en

este caso, en hexadecimal). Nuestra intención es observar bit a bit el valor original y, según este bit, poner un 1 o un 0 sobre la copia.

En concreto, el valor original vale 75 y el valor inicial de la copia es f0h. Para aislar el valor de un solo bit utilizaremos lo que se conoce

como una máscara de bits. Una máscara de bits es una lista de bits en la que sólo los bits que nos interesa tratar valen 1; los demás

valen 0. En nuestro caso, dado que queremos tratar los bits uno a

uno, inicializamos el registro al con una máscara de bits en la que todos los bits valen 0 excepto uno. En el ejemplo, hemos inicializado

Page 40: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 38

el registro al en la constante 1, pero hemos expresado esta constante en binario. Éste es un recurso común

cuando se manipulan bits, ya que queda mucho más claro lo que pretendemos hacer si el valor 00000001 b está especificado. Utilizaremos esta máscara para aislar el bit que nos interese tratar. Teniendo en cuenta que

querremos tratar todos los bits, al final del bucle hacemos un desplazamiento hacia la izquierda del registro al; es

decir, desplazamos este 1 a la siguiente posición de la izquierda. Haremos este desplazamiento ocho veces para, de este modo, tratar todos los bits del valor original.

Con la máscara que tenemos en el registro al podemos aislar un bit del valor original haciendo una operación and lógica del valor original con la máscara.

Fijaos en que la operación and de cualquier valor con 0 es siempre 0. Por lo tanto, el resultado de la

operación and de cualquier valor con la máscara dejará todos los bits en 0, excepto el bit que se encuentra en la misma posición que el 1 que hay en la máscara. Este bit se mantendrá en 1, si el valor original era 1, o bien se

quedará en 0, si el valor original era 0. Prestad atención al hecho de que antes de desarrollar la operación and hemos copiado el valor original en

el registro bl, ya que and modifica el operando de destino, y en este programa nos interesa mantener el valor

original. Así pues, tras haber ejecutado la operación and, el registro bl valdrá 0, si el bit correspondiente era un 0, ó 1, en caso contrario.

Continuamos con el ejemplo. Se ejecutará el código de la etiqueta bit1, si el bit analizado es un 1, o bien se ejecutará el código que hay en la etiqueta bit0, si el bit analizado es un 0.

Cuando el bit es un 1, queremos forzar la escritura de un 1 en el valor copia, respetando el valor de los otros bits. Para forzar la escritura de un bit en 1 (el bit correspondiente a la máscara), se ejecuta una operación or de la

máscara sobre el operando de destino. Fijaos en que la operación or con ceros mantiene los valores originales, y

con un 1, fuerza que el bit correspondiente valga 1.De manera análoga, cuando el bit es un 0, queremos forzar la escritura de un 0 en el valor copia, respetando el valor que tienen los otros bits.

Para forzar la escritura de un bit en 0 (el bit correspondiente a la máscara), se ejecuta una operación and del inverso de la máscara sobre el operando de destino. Así pues, para forzar la escritura de un 0 necesitamos el

inverso de la máscara, es decir, nos hace falta otra máscara con los bits en 0, si los bits de la máscara original eran

1, y los bits en 1, en caso de que los bits de la máscara original fuesen 0. Y, esto se consigue mediante la instrucción not. Tened en cuenta que al hacer la operación and con 1 se mantienen los valores de los bits

originales; y al hacerla con 0, se fuerza la escritura de un 0. En el ejemplo habéis podido ver el mecanismo para la consulta de un bit a partir de la operación lógica

and, que modifica el operando de destino. El inconveniente de este mecanismo es que si sólo nos interesa consultar el valor (sin modificarlo), primero hay que hacer una copia para que la modificación se realice sobre la

copia.

Existe otra instrucción que permite realizar la misma consulta, pero sin modificar ningún operando: ésta es la instrucción test. Su funcionamiento es el mismo que el de la instrucción and, excepto en el hecho de que no

modifica el operando de destino. Por lo tanto, el mismo ejemplo se habría podido hacer de forma más eficiente si se hubiera utilizado la instrucción test.

Por otra parte, la instrucción xor hace la O exclusiva bit a bit entre los dos operandos especificados. Esta

instrucción, además de utilizarse para realizar la operación lógica correspondiente, a menudo se utiliza para inicializar un registro en cero de la siguiente manera:

xor reg, reg Apreciad que la O exclusiva de cualquier valor consigo mismo es siempre cero.

Este mecanismo es más eficiente que mover directamente un cero al registro, ya que el acceso a un

operando registro es más eficiente que el acceso a un operando constante.

11. LA PILA

Nos podemos imaginar la pila como una estructura vertical:

en la cual se puede insertar un dato encima, o bien

de la cual podemos recuperar el dato que se había insertado encima.

La pila es una zona auxiliar de memoria que sirve para guardar

información de manera temporal. Por lo general se accede a la pila utilizando unas instrucciones específicas. El funcionamiento de la pila es parecido al de

un conjunto de elementos colocados uno encima del otro en forma de pila (de aquí viene su nombre). En esta pila, se puede insertar un elemento encima, o

se puede sacar su elemento de encima, tal y como podemos ver a

Page 41: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 39

continuación:

Es importante que al representar una pila marquemos siempre la cima, puesto que de esta manera

siempre sabremos dónde es "encima". Para insertar un dato en la cima de la pila, utilizaremos una instrucción

llamada push. Asimismo, para extraer el dato que se encuentra en la cima de la pila, utilizaremos una instrucción llamada pop.

De momento, vamos a ver que la finalidad de una pila es guardar de forma temporal el contenido de un registro que necesitamos para desarrollar otra tarea y así poder recuperar, más adelante, el valor de este registro,

o bien servirá para guardar temporalmente cualquiera otro dato en un orden determinado.

Una pila debe estar declarada en el segmento correspondiente para que se pueda llevar a cabo su utilización.

De forma parecida a los segmentos de datos y código, utilizamos la directiva .stack para hacer la declaración.

La declaración de la pila se realiza mediante la directiva

.stack seguida del tamaño, en bytes, deseado para la pila. Es difícil saber con exactitud qué tamaño debe tener la pila, así que

se acostumbra a declarar un tamaño lo bastante grande como para que no tengamos problemas. Por lo general, en nuestros

programas, suele ser suficiente con un tamaño de pila de 1.024 bytes. Prestad atención al código. Está formado por dos bucles,

el primero sirve para recorrer los elementos del vector, en el

que se utiliza el registro como registro índice. Para inicializar el registro si en cero hemos utilizado la operación lógica xor tal

como hemos explicado. En general, siempre es mejor utilizar operandos registros que operandos constantes.

Como siempre, recordad que si tenemos que recurrir a un vector de elementos de tamaño word, el índice debe verse

incrementado en dos unidades. En el primer bucle del ejemplo hallamos colocados en la pila los elementos del vector mediante

la instrucción push. Recordad que esta instrucción inserta el operando especificado en la cima de la pila. La instrucción push

inserta un dato de 16 bits en la cima de la pila. El operando de

esta instrucción tiene que ser, obligatoriamente, de tipo registro o variable de memoria. Dado que se han insertado los

elementos del vector de forma ordenada, desde el primer elemento hasta el último.

En el segundo bucle se extraen de la pila los elementos del vector mediante la instrucción pop. Recordad

que esta instrucción extrae el elemento de la cima de la pila y lo guarda sobre el operando especificado. La instrucción pop extrae un dato de 16 bits de la cima de la pila. Así como en la instrucción push, el operando de

esta instrucción tiene que ser obligatoriamente de tipo registro o variable de memoria. Dado que los elementos se han extraído igualmente de manera ordenada desde el primer elemento hasta

el último, al acabar el segundo bucle tendremos la pila vacía. No obstante, además, el vector se habrá invertido, ya

que el primer elemento que se extrae fue el último elemento insertado; el segundo elemento que se extrae fue el penúltimo elemento insertado, y así sucesivamente para todos los elementos.

De hecho, la pila es una zona de memoria que se gestiona de forma implícita con dos registros: ss y sp. Podemos considerar que el registro ss apunta estáticamente al inicio de la zona de memoria que representa la pila,

algo que en este curso vamos a pasar por alto. El registro sp apunta constantemente a la cima de la pila; por norma general, tampoco lo tocaremos directamente, aunque las instrucciones push y pop sí lo modifican de forma

implícita. Por último, existe un tercer registro, el bp, relacionado con la pila, un registro que utilizaremos más

adelante para tareas de soporte a la pila.

12. SUBRUTINAS: LLAMADAS Y RETORNO

Por lo general, en un programa existen tareas comunes (por ejemplo, escribir un mensaje por pantalla)

que tienen que ejecutarse desde diferentes partes del programa, para lo cual contamos, básicamente, con dos posibilidades:

Page 42: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 40

Replicar el código correspondiente (escribir el mensaje por pantalla) a cada parte del programa en

el que queremos ejecutar la tarea.

Definir una subrutina que escribe el mensaje y llamarla desde cada parte del programa en que nos

interesa ejecutar la tarea.

El objetivo de este hito es conocer los mecanismos para declarar una subrutina en ensamblador, así como

las instrucciones de llamada y retorno a la subrutina. En primer lugar definiremos qué es una subrutina. Una subrutina es un bloque de código que desempeña una tarea determinada. Este bloque de código puede ser

llamado desde diferentes partes del programa y, al finalizar, vuelve al lugar desde donde ha sido llamado. Las subrutinas, por diferentes motivos, son preferibles a la replicación de código. Por una parte, replicar

código implica hacer mayor el programa (diferentes copias del mismo código); por otra, si se pretende modificar el

comportamiento de este bloque de código (porque existe un error o porque queremos mejorarlo) y el código está replicado, entonces hay que modificar cada una de las copias del mencionado código. De hecho, sin embargo, la

principal ventaja de las subrutinas es que permiten un diseño modular del programa, hecho que facilita su diseño y comprensión.

Veamos en el siguiente ejemplo un programa que llama tres veces a una subrutina. Esta subrutina escribe

un mensaje por pantalla, así que, este programa escribe el mensaje tres veces por pantalla. Para poder llamar una subrutina, en primer lugar

es necesario tener una pila declarada. El motivo de esto es que las subrutinas utilizan la pila de manera implícita, tal y

como veremos más adelante. Como siempre, el tamaño de la pila tiene que ser lo suficientemente grande.

Para llamar una subrutina se utiliza la instrucción

call. Un llamamiento a una subrutina es parecido a una instrucción de salto con la diferencia de que, después de

ejecutar el código correspondiente, se vuelve al punto en el que se ha llamado la subrutina.

Fijaos en que el código del ejemplo llama tres

veces consecutivas a una subrutina con el nombre escribir. Para escribir una subrutina, ésta tiene que encontrarse

fuera de los límites marcados por las macros STARTUPCODE y EXITCODE, tal y como vemos en el

ejemplo. Apreciad el hecho de que la subrutina se identifica con una etiqueta que marca el punto de entrada a la

subrutina. Cualquier subrutina acaba con la instrucción ret,

que provoca un salto de retorno a la instrucción posterior a la que ha llamado la subrutina.

La instrucción call se comporta, en apariencia, como una instrucción de salto hacia una etiqueta. La

instrucción ret, sin embargo, se comporta como una

instrucción de salto hacia la instrucción posterior a la que ha ejecutado el call, algo que conseguimos gracias a que la

instrucción call, a diferencia de una instrucción de salto, guarda la dirección a la que tiene que volver: la dirección de retorno.

Una tarea importantísima que conviene realizar al programar una subrutina es salvar los registros que utiliza la subrutina. Tal y como podéis ver en el ejemplo, sólo se salvan los registros que se modifican dentro de la

subrutina; los registros se salvan en la pila. Así pues, para salvar los registros utilizaremos la instrucción push y

para restaurarlos, la instrucción pop. La subrutina del ejemplo escribe un mensaje determinado por la pantalla. Fijaos en cómo se salvan los

registros ax y dx, que son los que se utilizan para ejecutar el código correspondiente. Por lo tanto, el siguiente programa escribe tres veces el mensaje por la pantalla.

13. SUBRUTINAS: NO PARÁMETROS Y RETORNO DE RESULTADO

En algunas ocasiones, puede sernos de interés el hecho de que el código de la subrutina sea ejecutado sobre unos determinados valores de entrada; por ejemplo, una subrutina que escriba por pantalla un número

Page 43: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 41

determinado. En este caso, hay que definir un mecanismo para poder pasar a la subrutina uno o varios

parámetros. Asimismo, puede interesarnos que la subrutina devuelva un resultado tras su ejecución; por ejemplo, una

subrutina que sume dos números determinados y que devuelva el resultado. En este caso, sería conveniente

definir un mecanismo para el retorno del resultado. Una de las ventajas del diseño modular es que permite descomponer un programa en tareas independientes (las subrutinas), de manera que diferentes programadores se

puedan repartir la implementación de dichas tareas. En este caso, es corriente que un programador escriba un código que llame a subrutinas escritas por otro programador.

A una subrutina se le puede pasar cualquier número de parámetros. El mecanismo de paso de parámetros más utilizado es el paso

de parámetros por la pila, ya que permite pasar un número de parámetros en principio ilimitado. Pues bien, éste va a ser el mecanismo que

utilizaremos en nuestros programas.

Por otra parte, también existen muchas formas diferentes de devolver un resultado. A diferencia del paso de parámetros, por norma

general las subrutinas devuelven un solo resultado. El mecanismo para el retorno del resultado que utilizaremos nosotros es el retorno de resultado

por medio de un registro. En este ejemplo tenemos un programa que llama a una subrutina que devuelve como resultado la suma de dos números que

se han pasado como parámetros.

El paso de parámetros a una subrutina se hace mediante la pila, lo cual significa que antes de llamar a una subrutina, hay que dejar los

parámetros correspondientes en la pila. De esta manera, al ejecutarse la subrutina, los valores determinados

de entrada sobre los que se ejecuta el código de la subrutina se encuentran

en la pila. En el ejemplo han aparecido destacadas en negrita las instrucciones de paso de parámetros y llamamiento de la subrutina. En este

caso, se pasan como parámetro los valores de las variables de memoria núm1 y núm2. Recordad que, al llamar a una subrutina, la dirección de

retorno queda guardada en la pila. Así pues, el estado de la pila tras haber saltado a la subrutina es el que podemos ver en la figura.

Fijaos en que los parámetros se deben pasar antes de llamar a la

subrutina, puesto que, de lo contrario, se llamaría a la subrutina sin haber puesto

ningún valor en la pila y, al ejecutarse la subrutina, no encontraría los parámetros de

entrada.

Por último, es importante tener en cuenta el orden en el que se ponen los

parámetros en la pila, ya que la subrutina tiene que saber en qué posición se hallan

los parámetros. En este ejemplo, sin

embargo, no es importante el orden, dado que la suma es conmutativa.

Una vez se han pasado los parámetros y se ha llamado a la subrutina, ésta tiene que poder acceder al valor de los parámetros para, de este modo, ejecutar el

código correspondiente; algo que se consigue mediante el registro bp.

El registro bp es un registro base que se utiliza como registro auxiliar para

la manipulación de la pila. Y, puesto que es un registro base, se puede utilizar para acceder a una variable de memoria; en nuestro caso, servirá para acceder a los

parámetros de la pila. Así pues, en una subrutina, en primer lugar se hace el enlace dinámico,

que consiste en salvar el registro bp (que es un registro que se utiliza en la

subrutina), y después se apunta el bp en una posición fija de la pila (por ejemplo, la posición de la cima). Y esto podéis verlo con las dos primeras instrucciones de la

subrutina. Para deshacer el enlace dinámico, sólo hay que restaurar el registro bp que se ha salvado al inicio de la subrutina.

Page 44: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 42

Cuando ya tenemos el registro bp apuntando a una posición fija de la subrutina, entonces podemos salvar

los registros (tantos como sean necesarios, ya que este hecho no va a afectar a la posición a la que el bp apunta). El estado de la pila es el que aparece reflejado en la figura. Tened en cuenta, por

lo tanto, que los parámetros se ubican a partir de la posición [bp + 4] en adelante.

Conociendo la posición inicial a partir de la que se encuentran los parámetros, el acceso se realizará mediante el uso del registro bp, tal y como muestran las

instrucciones del ejemplo resaltadas en negrita: [bp + 4], corresponde al segundo parámetro (el valor 4), y [bp + 6], al primer parámetro (el valor 3).Así pues, la

subrutina accede a los dos operandos, los guarda en bx y cx, los suma y un

registro devuelve el resultado obtenido. En general, es indiferente qué registro se utiliza para devolver el resultado;

lo más importante es que tanto al devolver el resultado (dentro de la subrutina), como al tratarlo (fuera de la subrutina) se utilice el mismo registro. El registro ax

es el que se utiliza convencionalmente, de manera que nosotros también lo

utilizaremos. Fijaos en que si hay que devolver el resultado por el registro ax, no es

necesario salvar este registro dentro de la subrutina (y, por lo tanto, tampoco hay que restaurarlo ). Este hecho implicará que, cuando el programador llame a una

subrutina que devuelve un resultado, en el registro ax ya no habrá ningún valor importante. Por último, al volver de la subrutina (una vez se ha ejecutado la

instrucción ret que extrae la dirección de retorno de la pila) sería conveniente

tratar el resultado y sacar los parámetros de la pila: Para tratar el resultado basta con saber que éste se halla en el registro ax,

así que si nos interesa asignar el resultado a la variable de memoria nada, sólo tenemos que ejecutar la instrucción mov que muestra el ejemplo.

En cuanto a extraer los parámetros de la pila, es responsabilidad de quien

pone los parámetros sacarlos más adelante, algo que se puede hacer rápidamente si se suma la medida adecuada al registro sp.

La mayor parte de los lenguajes de programación en alto nivel permiten tener variables locales dentro de una subrutina, es decir, variables que se crean al activarse la subrutina y que se destruyen cuando ésta acaba.

Las variables locales son variables de memoria que ocupan de forma temporal un espacio en la pila, tal y

como muestra la siguiente figura:

Por lo tanto, la declaración de la subrutina será un código parecido al siguiente:

push bp

mov bp, sp120

sub sp, N push ...

push ...

donde N es una constante igual al tamaño que necesitan las variables locales. Así pues, el acceso a las variables locales se realizará mediante el uso de [bp - x],

mientras que el acceso a los parámetros se realizará utilizando [bp + x], donde x es, en ambos casos, el desplazamiento necesario para acceder a la variable deseada.

Al acabar la subrutina, hay que liberar el espacio reservado para las variables locales, algo que podemos hacer rápidamente de la siguiente manera:

pop ...

pop ...

mov sp, bp pop bp

ret

Page 45: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 43

14. SUBRUTINAS: PARAMETROS POR VALOR O POR REFERENCIA

Otro recurso común utilizado por los lenguajes de programación en alto nivel al programar una subrutina es el paso de parámetros por referencia. El paso de parámetros por referencia consiste en pasar como parámetro

una referencia (la dirección de memoria) a una variable que contiene el valor en lugar de pasar una copia de un valor. La diferencia entre pasar un parámetro por valor o por referencia consiste en que, en el segundo caso, el

valor original de la variable se puede modificar.

Los parámetros se pueden pasar por valor o por referencia. Se pasa un parámetro por valor cuando se pone en la pila una copia del valor de este parámetro. En tal caso, si el

parámetro se modifica, también se modifica la copia, de manera que el valor original no se ve alterado. Se pasa un parámetro por referencia

cuando la dirección de memoria de la variable que contiene el valor está colocada en la pila. En tal caso, si se modifica el contenido de la

dirección de memoria que se ha pasado como parámetro, se modifica,

también, la variable original. En general, se pasa un parámetro por valor cuando no interesa

que el valor original cambie por la ejecución de la subrutina; y se pasa un parámetro por referencia, cuando nos interesa que el valor original

quede modificado por la ejecución de la subrutina.

Este ejemplo, igual que el ejemplo 12, realiza la suma de dos números pasados como parámetros. Sin embargo, en este caso, en lugar

de devolver el resultado por el registro ax, se devuelve mediante un tercer parámetro que se pasa por referencia.

Como ya habéis visto, el paso de parámetros por valor se realiza sólo poniendo en la pila una copia del valor correspondiente mediante la

instrucción push, tal y como muestran las dos primeras instrucciones

marcadas en negrita. No obstante, para pasar un parámetro por referencia es necesario poner en la pila la dirección de la variable de

memoria correspondiente. Para poner en la pila la dirección de una variable de memoria es

necesario acceder primero a la dirección con la instrucción lea. Entonces

ya se puede poner la dirección de la variable de memoria utilizando de la misma forma la instrucción push. Tras haber pasado los tres parámetros,

el estado de la pila será el que muestra la figura. Fijaos en que

tendremos debajo la copia de los dos números núm1 y núm2, a

continuación, la dirección de la

variable de memoria nada y, por último, hallaremos la dirección de

retorno después de ejecutar el call. Para acceder a los parámetros

pasados por valor se utiliza

igualmente el registro bp. Es necesario que tengamos cuidado a la

hora de calcular el desplazamiento de los parámetros, ya que, a diferencia

del ejemplo 12, existe un tercer

parámetro (la dirección de la variable nada) entre núm2 y la dirección de

retorno). Una vez calculada la suma, la

subrutina del ejemplo guarda el resultado en el tercer parámetro pasado por referencia. Es decir, en la pila se encuentra la dirección de memoria en la que

queremos escribir. Para acceder a la misma, utilizamos el registro base bx, que

permite escribir en una variable de memoria inicialmente desconocida (la que haya en la pila). Así pues, ponemos la dirección correspondiente en el registro

Page 46: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 44

bx y escribimos en la posición de memoria a la que apunta bx, es decir, a la

variable nada. Aquí la subrutina no devuelve ningún resultado por el registro ax. En

consecuencia, si se utiliza este registro dentro de la subrutina, primero será

necesario salvarlo y restaurarlo al final de la subrutina. El hecho de que la subrutina devuelva o no resultado no depende de si existe algún parámetro

pasado por referencia, puesto que en este caso ha sido casualidad. Fijaos, por ejemplo, en el código del ejemplo 11 en el que no hay parámetro alguno (ni por

valor ni por referencia), y tampoco devuelve ningún resultado.

Y ya para acabar, recordad que, al volver de la subrutina, tenemos que sacar los parámetros que han sido colocados de antemano en la pila. Esta

operación podemos hacerla fácilmente sumando a sp el tamaño que ocupan los parámetros (en este caso, 6 bytes). Fijaos en que no es necesario recuperar el

resultado, ya que al volver de la subrutina el resultado ya está en la variable de

memoria nada. Un parámetro pasado por referencia sirve, por lo general, para pasar la

dirección de una variable de memoria que nos interesa poder modificar dentro de la subrutina; aunque, también sirve para pasar un vector como parámetro.

Así pues, cuando estemos interesados en pasar un vector como parámetro, éste será pasado por referencia; esto es, se pondrá en la pila la

dirección del primer elemento del vector. Para acceder a los elementos del

vector, se puede hacer de dos formas: con el registro bx, apuntando al inicio del vector, y con el registro si, especificando el desplazamiento correspondiente.

Por último, recordad que tanto el operando de origen como el operando de destino siempre deben tener el mismo tamaño. Cuando se utilizan registros o

variables de memoria declaradas en el segmento de datos, se puede saber el

tamaño del operando según el nombre del registro o la declaración de la variable en el segmento de datos.

Cuando se accede a la dirección de una variable que no conocemos a priori, sin embargo, puede suceder

que no esté claro el tamaño de los operandos. Por ejemplo, si se especifica la siguiente instrucción:

mov [bx + si], al

está claro que el tamaño de los operandos es 8 bits, dado que el registro al es un registro de 8 bits. Sin embargo,

si se especifica la siguiente instrucción:

mov [bx + si], 0

entonces, no está claro si la dirección [bx + si] hace referencia a una variable de 8 bits o a una de 16 bits. En este

caso, al ensamblar el código, el mismo ensamblador detecta la posible confusión y da el mensaje que encontramos a continuación:

*Warning* fitxer.asm(...) Argument needs type override

Es decir, es preciso que esté especificado el tipo del argumento (el operando). En este caso, se pueden utilizar los siguientes modificadores:

mov byte ptr [bx + si], 0

mov word ptr [bx + si], 0

para informar de que la variable de memoria es una variable de 8 bits o 16 bits.

Page 47: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 45

15. INSTRUCCIONES DE SOPORTE AL SISTEMA DE E/S

Los dispositivos periféricos son manipulados mediante lecturas y/o escrituras en los registros del

correspondiente controlador. Estos registros pueden estar guardados en memoria, como es el caso de la pantalla, o bien en el espacio de direcciones de entrada/salida. Para acceder a registros guardados en memoria, se utilizan

las instrucciones normales de acceso a memoria que hemos visto hasta ahora; pero, para acceder a registros guardados en el espacio de direcciones de entrada/salida, el lenguaje de ensamblador del i8086 proporciona unas

instrucciones específicas. Veamos ahora un programa en el que se capturan 10 movimientos de las teclas: make o

break. En cada caso, se escribe por pantalla un mensaje que indica el suceso acaecido. Después de escribir el mensaje en el que se pide que se pulsen las teclas, hallamos un bucle principal con

un contador de 10 iteraciones. Para la construcción de este programa, dado que no existe ninguna subrutina, no se declara la pila.

Al pulsar o soltar una tecla, se pone en 1 el bit cero del registro de estado del controlador de teclado y la encuesta finaliza. En este momento, la siguiente acción que tenemos que realizar será comprobar el motivo de esta acción:

se ha pulsado la tecla (make) o se ha dejado la tecla (break).

El registro que contiene información acerca de este hecho es el registro de datos del controlador de teclado. El bit

7 de este registro indica que la tecla ha sido pulsada (bit7 = 0) o bien que la tecla ha sido soltada (bit7 = 1). Los restantes 7 bits (del 0 al 6) codifican la tecla que se ha pulsado (o soltado).

Para comprobar si es un make o un break, leemos el registro de datos (dirección 60h) mediante la instrucción

in y utilizamos la máscara 80h que permite aislar el valor del bit 7. Si este bit vale 0, es un make; de lo contrario,

es un break. Antes de continuar con el análisis del código, es

importante que conozcamos el funcionamiento de los

registros del controlador del teclado. En concreto, nos interesa gestionar dos registros: el registro de estado y

el registro de datos, ambos de 8 bits, que se encuentran en las direcciones 64h y 60h, respectivamente, del

espacio de direccionamiento de entrada/salida.

Los bits que nos interesan de estos registros son

los siguientes: Cuando el bit 0 del registro de estado

vale 1, esto indica que se ha tocado alguna tecla. Al leer del registro de datos, este bit se pone de forma

automática en cero. Cuando se ha tocado una tecla, el bit 7 del registro de datos vale 0, si ésta ha sido pulsada

(make), o 1, si ha sido liberada (break).

Una vez tenemos claro el funcionamiento de los registros del controlador del teclado, podemos

implementar el acceso al teclado mediante encuesta. El acceso mediante encuesta consiste en leer de

forma constante el registro de estado del controlador del dispositivo hasta que detectamos que ha ocurrido un acontecimiento determinado. Por último, podéis observar en el ejemplo que, dependiendo de si se pulsa una tecla

o se suelta, el registro dx será inicializado con la dirección del mensaje que nos interesa escribir: <make> o

<break>. A continuación, y antes de acabar el bucle, se escribe el mensaje correspondiente. Este ejemplo detecta los 10 primeros acontecimientos. Así pues, si queréis que detecte cinco veces que se

pulsa y se suelta una tecla, es necesario pulsarla rápidamente para que, de este modo, no se generen repeticiones de la tecla.

Page 48: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 46

Las instrucciones in y out El acceso en ensamblador a los registros guardados en el espacio de entrada/salida se realiza mediante las

instrucciones in y out. Estas instrucciones se pueden utilizar de la siguiente manera:

in al, [xxh], para leer un valor de 8 bits.

in ax, [xxh], para leer un valor de 16 bits. Podemos utilizar esta modalidad para direcciones entre la 000h y la 0 ffh del espacio de entrada/salida. Si

la dirección es superior, entonces hay que utilizar el registro dx para especificarla:

in al, dx, para leer un valor de 8 bits.

in ax, dx, para leer un valor de 16 bits.

De manera similar, para escribir un registro del espacio de direccionamiento de entrada/salida:

out [xxh], al, para escribir un valor de 8 bits.

out [xxh], ax, para escribir un valor de 16 bits. out dx, al, para escribir un valor de 8 bits en direcciones > 255.

out dx, ax, para escribir un valor de 16 bits a direcciones > 255.

El registro de datos del controlador de teclado Tal y como hemos visto, el registro de datos del controlador de teclado codifica la tecla pulsada en los

siete bits de menor peso. La codificación de este registro no se corresponde con el código ASCII de la tecla, ya que el teclado tiene que codificar teclas especiales que no aparecen en el código ASCII (por ejemplo, las teclas F1, F2,

..., Shift, Intro, Ctrl, Alt, etc.).

El controlador de teclado define el código de rastreo, y este código codifica la posición que ocupa la tecla

en el teclado. Por consiguiente, para las siguientes teclas tenemos los códigos:

código 1: tecla <ESC> código 2: tecla <1>

código 3: tecla <2>

... código 16: tecla <q>

código 17: tecla <w> código 18: tecla <e>

código 19: tecla <r>

código 20: tecla <t> ...

Para pasar del código de rastreo al código ASCII, se acostumbra a definir un vector que contenga en cada posición correspondiente al código de rastreo el código ASCII de la tecla asociada. Es decir, el vector:

traduccion db - 1,-1,'1234567890',-1,-1,-1,-1,'qwertyuiop'...

De manera que, dado un código de rastreo C, el valor traducción[C] corresponde al código ASCII de la tecla asociada al código de rastreo C, o bien -1, si la tecla en cuestión no tiene código ASCII asociado.

En el caso del controlador del teclado, el acontecimiento que nos interesa detectar es que se pulsa una tecla. En el ejemplo podéis ver cómo se lee del registro de la dirección 64h del espacio de direccionamiento de

entrada/salida mediante la instrucción in. A continuación, se compara el bit cero del valor leído con la máscara de

bits 01h para, de este modo, aislar el bit cero. Mientras este bit sea 0, el código salta de nuevo a la instrucción que lee el registro de estado. Fijaos, también, en que la etiqueta encuesta es utilizada tanto por el bucle que cuenta 10

iteraciones, como por el bucle que implementa la encuesta. Este hecho no va a suponer ningún problema desde el punto de vista del lenguaje de ensamblador.

Page 49: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 47

16. RUTINAS DE ATENCIÓN A LOS PERIFÉRICOS

Los dispositivos periféricos leen o escriben información en el mundo exterior de manera asíncrona con

respecto a la ejecución de las instrucciones por parte del procesador. Es decir, un usuario pulsa las teclas sin tener que sincronizarse para ello con el reloj del procesador. Con el fin de acceder a esta información, el procesador se

tiene que sincronizar con el controlador de los dispositivos periféricos. En este tema 16 se repasarán las técnicas de sincronización con los controladores de los dispositivos

periféricos. El objetivo es que aprendáis a implementar en ensamblador las rutinas de atención a la interrupción de

los dispositivos periféricos. Existen dos técnicas básicas que permiten la sincronización entre el procesador y los controladores de los

dispositivos de entrada/salida, la sincronización por encuesta y la sincronización por interrupción. La sincronización por encuesta es una técnica que consulta de forma activa el registro de estado del

controlador (por lo general registrado en el espacio de direccionamiento de entrada/salida) hasta que detecta que se ha producido un acontecimiento (por ejemplo, se

pulsa una tecla).

La sincronización por interrupción es un mecanismo del procesador que permite que éste pueda

ejecutar cualquier código y que, al producirse un acontecimiento (por ejemplo, se pulse una tecla), se

ejecute una rutina de atención a la interrupción que

alcance este acontecimiento. Para asociar una rutina a la interrupción de un

dispositivo periférico disponemos del vector de interrupciones. Este vector está situado al principio de la

memoria (a partir de la dirección 0) que contiene la dirección de una rutina asociada, a su vez, a cada

dispositivo. Cuando se produce una interrupción, se

ejecuta la rutina asociada al correspondiente dispositivo. Por lo tanto, si queremos que se ejecute una rutina

determinada al producirse la interrupción de un dispositivo, sólo es necesario que pongamos la dirección

de la rutina en cuestión en la posición correspondiente

del vector de interrupciones. Una rutina de atención a la interrupción es una

rutina cualquiera, como las que hemos visto hasta ahora, pero con dos particularidades:

Al acabar, el controlador de interrupciones debe

informar de que ya ha finalizado, algo que hay que hacer escribiendo el código EOI (End Of Interruption,

'final de interrupción') en el registro de control del

controlador de interrupciones. En vez de utilizar la instrucción habitual de retorno,

hay que utilizar IRET (retorno de una interrupción).

Fijaos en que una rutina de atención a la interrupción

se puede ejecutar en cualquier momento, de forma

independiente de la ejecución de nuestro programa. Por lo tanto, es difícil que podamos pasar parámetros desde

nuestro programa, ya que no sabemos en qué momento se llevará a cabo la ejecución de la rutina. Antes de

programar la rutina de atención a la interrupción de un

dispositivo periférico, tenemos que saber qué posición del vector de interrupciones ocupa este dispositivo. El

teclado ocupa la posición 9. El vector de interrupciones está situado en memoria

a partir de la dirección física cero, y cada dirección de una rutina de atención a la interrupción ocupa 4 bytes.

Page 50: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 48

Por lo tanto, la rutina de atención a la interrupción del teclado estará situada a partir de la dirección 36.

Para que se ejecute una determinada rutina cuando haya interrupción del teclado, sólo es necesario que se ponga la dirección de esta rutina a partir de la dirección 36 de la memoria; aunque, de forma previa, será

necesario guardar la dirección de la rutina que haya en aquella posición y restaurarla antes de acabar nuestro

programa. Para acceder a las direcciones de nuestro programa, ponemos la dirección entre corchetes, tal y como

hemos visto hasta ahora; y, para acceder a direcciones fuera del espacio de direccionamiento de nuestro programa, sin embargo, utilizaremos de forma adicional unos registros de propósito específico llamados registros

de segmento.

Existen cuatro registros de segmento, llamados cs, ds, es y ss, de los cuales utilizaremos sólo el registro es para acceder a direcciones fuera de los límites de nuestro programa. Los otros registros tienen un uso muy

determinado, y no los tenemos que manipular explícitamente. En el ejemplo podéis ver que se utiliza el registro es para generar la dirección cero y salvar la dirección de

la rutina que hay a partir de la dirección 36 de memoria:

xor ax, ax mov es, ax ; ponemos cero en el registro es

push es:[36] ; salvamos los dos primeros bytes push es:[38] ; salvamos los dos bytes restantes

Asimismo, se utiliza este registro para poner la dirección de nuestra rutina a partir de la dirección 36 de

memoria:

lea ax, [RAIteclado] ; tomamos la dirección de la rutina mov es:[36], ax ; ponemos la dirección

mov es:[38], cs ; ponemos el segmento

Fijaos en que primero ponemos la dirección de la rutina en el registro ax y después la ponemos en la

posición 36 de memoria. A continuación completamos la dirección (de 4 bytes) para que la rutina pueda ser ejecutada desde fuera de nuestro programa. Para ello, utilizaremos el registro cs.

En este curso no entraremos en detalles sobre el uso de los registros de segmento. Pero lo que sí debemos

tener claro es que hay que modificar el vector de interrupciones y la manera de llevar a cabo dicha modificación.

Por último, fijaos en las instrucciones cli y sti, que sirven para inhibir interrupciones y desinhibir

interrupciones, respectivamente, y es conveniente ponerlas antes y después de modificar el vector de interrupciones, puesto que, de lo contrario, si por casualidad se recibe una interrupción de teclado cuando sólo se

ha modificado la mitad de la dirección (los 2 primers bytes), se saltaría a una posición aleatoria de memoria y seguramente el programa se quedaría colgado

Una vez modificado el vector de interrupciones (después de haber salvado el valor original), ya podemos

escribir el programa. En este ejemplo, tras escribir un mensaje, tenemos una espera activa: mientras la variable numTeclas sea menor que 10, nos esperamos.

Atended al hecho de que si el programa contuviera sólo este código, se quedaría permanentemente bloqueado. Sin embargo, en realidad existe otro fragmento de código que se ejecuta de forma concurrente con

éste: la rutina de atención a la interrupción del teclado Raiteclado. Cada vez que se pulse una tecla, la ejecución

del bucle de espera activa se detendrá y se ejecutará la rutina de atención a la interrupción. En esta rutina, podemos hacer lo que queramos: por ejemplo, incrementar el número de acontecimientos de teclado númTeclas.

La rutina de atención a la interrupción es una subrutina normal y corriente que puede desarrollar cualquier tarea (por lo general relacionada con la gestión del dispositivo que ocasiona la interrupción). En nuestro ejemplo, la

subrutina salva y restaura los registros, escribe un mensaje según la tecla pulsada, e incrementa el número de acontecimientos detectados relacionados con el teclado.

Ahora bien, tal y como podemos ver en el código, existen dos particularidades en las rutinas de atención a

la interrupción: Por una parte, hay que poner el valor 20 h en el registro del espacio de entrada/salida 20 h para generar

la señal de final de interrupción (End Of Interruption): mov al, 20 h out [20 h], al

Por otra, al volver de la subrutina se debe utilizar la instrucción iret (interruption return), en lugar de la

instrucción ret.

Por último, tenemos que comentar que antes de acabar el programa, si queremos que el teclado funcione tal y

como funcionaba antes de ejecutar el programa, se tienen que restaurar los valores originales de la rutina de atención a la interrupción en el teclado (que habíamos salvado con anterioridad) en el vector de interrupciones.

Page 51: sistemas operativos, redes y bases de datos

Fundamentos de Computadores · Pg. 49

Si el registro es no se ha modificado y todavía mantiene el valor 0, restauramos directamente los valores

salvados en la pila y los ponemos en el vector de interrupciones en las posiciones correspondientes: pop es:[38]

pop es:[36]

Igual que al modificar el vector de interrupciones al inicio del programa, es necesario restaurarlo inhibiendo

con anterioridad las interrupciones y desinhibiéndolas más adelante, mediante el uso de las instrucciones cli y sti.

En este curso gestionaremos sólo dos dispositivos: el teclado y el reloj. La gestión del teclado ya la hemos

visto en los dos últimos hitos, por lo tanto, nos falta conocer el dispositivo reloj. El reloj es un dispositivo muy sencillo que permite medir el tiempo. Genera de manera fija unas 18

interrupciones por segundo y, por lo tanto, para medir el tiempo tiene que ir contabilizándose el número de interrupciones que lleva generadas. Cada 18 interrupciones contabilizadas implica que ha pasado un segundo.

El reloj trabaja siempre por interrupción, y la rutina de atención a la interrupción del reloj está en la posición 8

del vector de interrupciones. No dispone de ningún registro de datos ni de control, así que su gestión se limita a poner en el vector de interrupciones la rutina de atención en la interrupción adecuada.

Registros en el i8086

Los registros del i8086 son todos de 16 bits, aunque en algunos se puede acceder por separado a la parte

baja (8 bits) y a la alta (8 bits). Existen cuatro registros de uso general, que son los que tenemos ocasión de ver en la siguiente figura:

Como podéis comprobar, los registros ax, bx, cx y dx son de 16 bits, pero se puede acceder sólo a los 8 bits de más o menos peso (por ejemplo, el

registro ah contiene los 8 bits de más peso del registro ax, y el registro al, los 8

bits de menos peso del registro ax). A pesar de que estos registros son de propósito general, veremos que el registro ax y el dx se suelen utilizar para

algunas tareas predeterminadas, que bx es utilizado para guardar en él direcciones de memoria, y que cx se utiliza como contador.

Asimismo, son registros muy utilizados el registro si y el di. Estos registros, siempre de 16 bits, se pueden utilizar como registros de propósito

general, aunque, por norma general, serán usados como registros índice. Otros registros que vamos a utilizar son los registros con un uso más

dependiente; esto es, el registro bp y el registro sp. Los mencionados registros sirven para gestionar un bloque de memoria llamado pila, aunque no los

utilizaremos ahora, sino más adelante.

Por último, hay otros cuatro registros de segmento (cs, ds, es, ss) que sirven para gestionar las direcciones

de memoria. En esta asignatura, no veremos el uso de estos registros, excepto el registro es, que utilizaremos al finalizar el módulo para una tarea muy concreta.

Texto elaborado a partir de: Fundamentos de computadores I

Montse Peiron Guàrdia, Antonio José Velasco González, Jordi Carrabina Bordoll, Fermín Sánchez Carracedo, Anna M. del Corral González, Enric Pastor Llorens, Pedro de Miguel Anasagasti

Febrero 2002

Page 52: sistemas operativos, redes y bases de datos

Arquitectura de computadores

TEMA 1 RENDIMIENTO DE LOS COMPUTADORES

1. NECESIDAD DE EVALUAR EL RENDIMIENTO

Hay distintos tipos de personas que ven necesario evaluar el rendimiento de un

computador:

Ingenieros: Se necesita alguna herramienta o medida que permita decidirnos

por múltiples alternativos de diseña, eligiendo la más adecuada en cada

momento. Fabricantes y vendedores: Deben poder comparar y diferenciar su producto

del de la competencia.

Compradores: Necesitan algún mecanismo que ayude a decidirse entre los

distintos computadores en el mercado.

Hay, no obstante, que hacer dos reflexiones:

Cuando compramos un ordenador, nos llevamos el sistema completo así que

debemos evaluar no solo el procesador, sino también la memoria, sistema

operativo, compiladores… Los resultados de una evaluación tienen que ser reproducibles y presentar

claramente los datos obtenidos para poder volver a llevar a cabo esa evaluación

en ese u otro ordenador y así poder compararlos entre sí.

2. FIGURAS DE MÉRITO

Las medidas que nos ayudan a evaluar el rendimiento de manera cuantitativa

son las llamadas figuras de mérito, y son tres principalmente: el tiempo, los MIPS y

los MFLOPS.

El tiempo es la mejor medida que se puede utilizar, dado que es consistente y real para comparar el rendimiento de dos ordenadores, tanto si medimos el tiempo

de respuesta (el tiempo que tarda una aplicación desde que empieza hasta que

acaba) como si es la productividad (la cantidad de tareas ejecutadas en un espacio de tiempo determinado).

Habitualmente trabajaremos con el tiempo de UCP (TUCP) que incluye el tiempo que tarda la máquina en ejecutar código de usuario más el tiempo en ejecutar

código del sistema operativo, ya que la frontera entre ambos es muy diluida. Por otro lado este tiempo debe poder relacionarse con algún parámetro físico del

computador, y este parámetro es la frecuencia. Así que un ordenador tenga una

frecuencia de 200 MHz, significa que tiene un reloj interno de 200 millones de ciclos por segundo, como el tiempo de ciclo es inverso a la frecuencia, el tiempo de ciclo

es de 5 ns (es decir 5·10-9 segundos). Es habitual presentar el tiempo de UCP en función de los ciclos de reloj, y si

además fuéramos capaces de calcular el número de instrucciones ejecutadas (N),

podriamos obtener el número medio de ciclos por instrucción (CPI); también se puede utilizar justamente el inverso del CPI, es decir el IPC que es el número de

instrucciones ejecutadas por ciclo; al final podemos reescribir la fórmula inicial como sigue a continuación:

TUCP = ciclosUCP · TCICLO = N · N

ciclosUCP· TCICLO =N · CPI · TCICLO

Donde N es el número de instrucciones a ejecutar, CPI es el número medio

de ciclos por instrucción y TCICLO es la inversa de la frecuencia del ordenador.

Tema 1 Rendimiento de los

computadores

1. Necesidad de evaluar el rendimiento

2. Figuras de mérito

3. Programas para evaluar el rendimiento

4. La ley de Amdahl

Formulaciones

Tciclo= 1/frecuencia TUCP=ciclosUCP · Tciclo

TUCP=

frecuencia

ciclosUCP

CPI=

N

ciclosUCP

IPC =

UCPciclos

N

CPI

1

Page 53: sistemas operativos, redes y bases de datos

2 · Arquitectura de computadores

De esta ecuación se desprendes 3 posibles opciones para optimizar un procesador:

Reducir (N) el número de instrucciones del programa, lo que se relaciona con la

arquitectura del nivel de lenguaje máquina y la compilación. Reducir (CPI) el número medio de ciclos por instrucción, que depende de la

arquitectura del nivel de lenguaje máquina y de la organización del procesador.

Reducir (TCICLO) el tiempo del ciclo del procesador, asociado este cambio a la

tecnología de hardware y la organización del procesador.

Otra medida son los MIPS, o millones de instrucciones de lenguaje máquina ejecutados por segundo. Como observamos en las fórmulas laterales, equivale al

número de instrucciones ejecutadas dividido por el tiempo empleado en realizarlas

y dividido por 1 millón. También equivale a la frecuencia dividido por el número medio de ciclos por instrucción.

La ventaja de esta medida es que es sencilla de asimilar, pero depende del juego de instrucciones, lo que dificulta comparar máquinas diferentes; varía en

función de los programas que se ejecutan.

Hace tiempo los fabricantes y vendedores cuando utilizaban esta figura de mérito realmente utilizaban los MIPS de pico, es decir, una velocidad que seguro

nunca alcanzarán los procesadores en una aplicación real pues consideraban los recursos ideales: memoria ideal (siempre disponible), instrucciones distribuidas

homogéneamente en todas las unidades funcionales trabajando siempre al máximo

de rendimiento, etc.

Los MFLOPS son los millones de operaciones de coma flotante ejecutadas por segundo; la definición es prácticamente igual que los MIPS pero utilizando

únicamente las operaciones en coma flotante; esto hace que un programa que no tenga ninguna operación en coma flotante tenga un MFLOPS de 0, que dependa

mucho del programa y del juego de instrucciones. En cambio los MFLOPS permiten

comparar máquinas diferentes porque el número de operaciones de coma flotante es constante y viene determinado por el programa que quiera resolverse, no varía

según la máquina en la que se ejecute el programa. También se ha utilizado los MFLOPS de pico que corresponde a la suma de los

MFLOPS de pico que puede obtener cada una de las unidades funcionales del

procesador trabajando al máximo rendimiento posible, circunstancia que es imposible que se de nunca en el trabajo habitual del procesador.

3. PROGRAMAS PARA EVALUAR EL RENDIMIENTO

Para evaluar el rendimiento de un computador se utilizan una serie de programas estándar (benchmarks) que pretenden simular situaciones de uso

cotidiano.

Los programas sintéticos son programas de tamaño moderado que intentan simular un entorno de trabajo con una carga de trabajo también

determinada. El problema es que al tratarse de pequeños programas son fáciles de

manipular, así un fabricante dedicará esfuerzo y dinero a hacer que sus máquinas ejecuten estos programas sintéticos de manera muy efectiva utilizando diferentes

estrategias de optimización que, en cualquier caso, no se podrán aplicar después a los programas reales que son los que en realidad nos interesan.

Los programas de juguete son programas pequeños de entre 10 y 100 líneas de código y de los cuales se conoce el resultado a priori. Hoy día son muy

poco utilizados.

Los núcleos son pequeños fragmentos de código extraídos de aplicaciones

reales que sólo se ejecutan para evaluar el rendimiento de un computador.

Las aplicaciones reales son la solución más utilizada hoy en día, y son aplicaciones que pueden ejecutarse en cualquier plataforma y sistema operativo sin

MIPS

MIPS = 610·UCPT

N

MIPS = 610·CPI

frecuencia

MFLOPS

MFLOPS = 6

tan

10·UCP

teCOMAflo

T

N

Page 54: sistemas operativos, redes y bases de datos

Arquitectura de computadores · 3

TEMA

hacer modificaciones y siendo por tanto, más objetivo su resultado. El problema se

centra en decidir qué aplicaciones se utilizan y para ello se creó en el año º988 un el SPEC (Standar Performance Evaluation Corporation) que define un conjunto de

programas de test realista y estandarizado. Actualmente se utiliza el SPEC95 que, debido a la velocidad de los microprocesadores actuales, debe ser pronto

cambiada. Lo interesante del SPEC95 es que evalúa no solo el procesador, sino el

computador completo y obliga a incluir en los resultados las características siguientes con respecto al hardware y software: tipo de procesador y frecuencia,

tipo de coprocesador, características de las memorias caché, tamaño de la memoria principal, tipos de dispositivos de entrada/salida utilizados, tipo y versión del

sistema operativo, tipo de compilador y versión, tipo de sistema de ficheros y las opciones de compilación utilizadas.

Page 55: sistemas operativos, redes y bases de datos

4 · Arquitectura de computadores

TEMA 2 INTRODUCCIÓN A LA SEGMENTACIÓN

1. MEJORAS EN EL RENDIMIENTO DE LOS MICROPROCESADORES

Ya hemos visto en el tema anterior, que el tiempo de ejecución de una

aplicación depende de la siguiente expresión: TUCP =N · CPI · TCICLO, por tanto, depende del número de instrucciones a ejecutar (N), el número medio de ciclos por

instrucción (CPI) y del tiempo de ciclo del reloj (TCICLO). Si conseguimos reducir cualquier término o combinación de términos de la

anterior ecuación, el tiempo de ejecución se reducirá, y se puede llevar a cabo

mediante:

El algoritmo: Hay que resolver el problema de forma más rápida, por tanto

mejorando el compilador para generar un código más eficiente, reduciremos el número de instrucciones (N) y/o el CPI, de forma general reduciremos el

producto N·CPI. La arquitectura: Se pueden hacer cambios en el juego de instrucciones del

procesador (arquitectura) que genera mejoras en N, o cambios en cómo se

ejecutan las instrucciones de lenguaje máquina (microarquitectura) que genera

mejoras en CPI y TCICLO. La tecnología: Las nuevas técnicas de fabricación de semiconductores se

traduce directamente en reducciones del TCICLO e indirectamente del CPI.

Diseño de máquinas específicas: Es una mejora no contemplada hoy en día

y consiste en fabricar ordenadores para cumplir trabajos específicos. El coste de investigación más desarrollo se tiene que repartir entre pocas máquinas por

lo que se eleva excesivamente.

Obviamente, la mayor mejora sucede cuando interaccionan la tecnología y la

arquitectura, especialmente la disminución en la escala de integración, que implica que los dispositivos sean más rápidos al tener que recorrer los electrones

menor distancia, y que puedan integrarse más dispositivos en una misma superficie.

2. PARALELISMO A NIVEL DE INSTRUCCIÓN

Cuando varias instrucciones de un mismo código, pueden ejecutarse en cualquier orden sin que se modifique el resultado final, varias de ellas podrían

hacerse al mismo tiempo, y existe lo que llamamos paralelismo a nivel de

instrucción. Para aprovechar este paralelismo existen dos métodos: La segmentación y la multiplicación.

La segmentación es la misma idea que encierra una cadena de montaje

en una fábrica. Para montar un coche se descompone su montaje en etapas

independientes, hasta pasar por la última en la que se obtiene el vehículo montado. Realmente un coche debe pasar por todas las etapas lo que supone el mismo

tiempo en montarlo, pero cuando el coche ya está montado hay varios más ya con estas etapas iniciadas, vamos, tantos como etapas hayamos dividido, por lo que

finalmente el proceso es más rápido; claro, más rápido siempre y cuando queremos

montar más de un vehículo. Así es posible aplicar la segmentación de dos formas distintas:

Segmentación en la función de un microprocesador: Se descompone una

función en otras más sencillas llamadas etapas; se separan estas etapas en

registros para evitar que el resultado de una etapa afecte a las demás; se determina el orden en que deben recorrerse estas etapas; se conecta la salida

de una etapa con la entrada de la siguiente, y se añade una señal de reloj que

Tema 2

Introducción a la segmentación

1. Mejoras en el rendimiento de los microprocesadores

2. Paralelismo a nivel de instrucción

3. Evolución conjunta de la

tecnología y la arquitectura

Page 56: sistemas operativos, redes y bases de datos

Arquitectura de computadores · 5

TEMA

indica en qué momento el resultado de todas las etapas se copia a las

siguientes. Para que esta función de segmentación sea realmente útil, la función a

segmentar tiene que ser muy utilizada, ya que la segmentación tiene un coste que se suma al resultado final; y además la función tiene que tener

evaluaciones independientes, como la segmentación inicia la ejecución de

instrucciones antes de que otras hayan terminado, el resultado de las anteriores no debe afectar a las siguientes. El tiempo que se tarda en realizar

una operación con segmentación lo podemos ver en la figura lateral. Segmentación del proceso de ejecución de las instrucciones: Las

instrucciones segmentadas se van realizando en línea paralelamente, para

ejecutar más instrucciones por unidad de tiempo; así aunque el resultado final de procesar una instrucción tiene el mismo coste, al haber efectuado

finalmente más instrucciones, el coste por instrucción disminuye.

Así, en esta ocasión, el tiempo de ciclo del procesador, es igual al tiempo de cálculo de la etapa más lenta, más el tiempo de retardo introducido por un

registro. Y por ello el tiempo para hacer n operacione segmentadas será el número de operaciones (n) más el número de etapas (K) por el tiempo de ciclo.

La multiplicación consiste en aprovechar que hay paralelismo a nivel de instrucción para iniciar la ejecución de más de una instrucción en un mismo ciclo. El

objetivo es conseguir un CPI<1 sin aumentar el tiempo de ciclo del procesador. Para aplicar esta técnica solo hay que multiplicar los recursos (unidades

funcionales, procesador, etc). Así para optimizar por ejemplo la suma de naturales, si queremos ir 4 veces más rápido, sumaremos así 4 procesadores. Aunque cada

una de las sumas tarda el mismo tiempo en hacerse que sin la multiplicación,

puede haber 4 sumas haciéndose al mismo tiempo. Para que esta técnica sea efectiva debe llevarse a cabo en operaciones que se hagan con mucha frecuencia

(de lo contrario no tiene sentido) y además deben ser independientes entre ellas.

Por tanto, las condiciones son iguales que en la segmentación, pero la

multiplicación es mucho más cara de aplicar. Así para segmentar el sumador en cuatro etapas, solo hace falta añadir 4 registros de segmentación, mientras que

para hacer lo mismo con la multiplicación, hay que añadir 4 sumadores completos. Las dos técnicas pueden combinarse, así que el máximo rendimiento se obtiene

aplicando al mismo tiempo la segmentación y la multiplicación.

3. EVOLUCIÓN CONJUNTA DE LA TECNOLOGÍA Y LA ARQUITECTURA

Cronológicamente a lo largo del tiempo, la tecnología y la arquitectura de

los procesadores han ido evolucionando paralelamente en la siguiente forma de

ejecutar las instrucciones:

Secuencial: Una instrucción, un ciclo de procesador; y para garantizar que

todas las instrucciones se ejecutan de manera correcta, el tiempo de ciclo tiene que ser mayor o igual al tiempo necesario para ejecutar la más lenta de todas

las instrucciones. Secuencial multiciclo: Cada instrucción solo para por las fases que necesita,

y el tiempo de ciclo es el de la fase de instrucciones que tarda más en

ejecutarse. Aun así, cada instrucción tarda más de un ciclo en ejecutarse.

Segmentada: Se aplica la técnica de segmentación al proceso de ejecución de

instrucciones; cada una de las fases de ejecución está aislada de las vecinas mediante registros pasa a ser una etapa del procesador. En el cado ideal, se

desarrollará una instrucción por ciclo. Segmentada limitada por la búsqueda de instrucciones y datos: Como

la tecnología en la fabricación de procesadores avanza, el cuello de botella se

encuentra en el tiempo que tarda la memoria en la búsqueda de datos. Como

el tiempo de ciclo es muy grande, se desarrollaron arquitecturas CISC, así como ir a la memoria a buscar datos es muy lento, se procura que cada instrucción

Segmentación de una

función

Ts= (n+B) · (R + Ts)

n = número de operaciones B = Bits

R = Retardo en unidades de t. Ts = Retraso introducido

Segmentación del proceso

de ejecución de las instrucc.

TCICLO= Max( Tr) + Tr TS= (n + K) · TCICLO

Page 57: sistemas operativos, redes y bases de datos

6 · Arquitectura de computadores

haga mucho trabajo para mantener ocupado el procesador durante la fase de

ejecución. Como las instrucciones tienen mucha semántica, se necesitan menos para hacer el mismo trabajo.

Segmentada RISC: La mejora de la tecnología permitió añadir una memoria

caché en el microprocesador y la búsqueda de instrucciones pasa a ser muy rápida en comparación con el coste de ejecutar una instrucción muy

complicada, por lo que se vuelve al modelo de procesador segmentado con instrucciones sencillas y de rápida ejecución. Se puede continuar aumentando

el rendimiento de la máquina aumentando el número de etapas de la

segmentación para reducir el tiempo de ciclo. Aumentar las etapas para reducir el tiempo de ciclo, trae consigo aumentar la CPI, pero aún así, el producto CPI

por Tiempo de ciclo disminuye, así que ganaremos rendimiento. Superescalar: Ya solo podemos aumentar el rendimiento, aumentando el

hardware, ejecutando más de una instrucción por ciclo y así conseguir que

CPI<1.

Page 58: sistemas operativos, redes y bases de datos

Arquitectura de computadores · 7

TEMA

TEMA 3 PROCESADORES SEGMENTADOS

1. PROCESADORES SEGMENTADOS LINEALES

Los procesadores segmentados lineales son el tipo de procesador

segmentado más sencillo posible, Para que se considere lineal tiene que cumplirse que todas las instrucciones pasen por las mismas etapas en el mismo orden y sin

reutilizar ninguna etapa. Esto garantiza que la búsqueda de las instrucciones, el inicio de la ejecución y la finalización de las instrucciones se lleva a cabo en el

mismo orden que se encuentran en el código secuencial.

2. ARQUITECTURA DE EJEMPLO

En los lenguajes máquina con operaciones con registros hay tres tipos

básicos de instrucciones:

Operaciones de cálculo: Incluyen las operaciones aritméticas y lógicas y

tanto pueden ser valores enteros como en coma flotante. La sintaxis es: OP Rd, Rf1, Rf2; Rd = Rf1 OP Rf2

Donde OP puede ser cualquier operación (suma, resta y multiplicación).

Operaciones de acceso a la memoria: Hay dos instrucciones básicas: LOAD

para ir a buscar un valor a la memoria y STORE para dejarlo: LOAD Rd, Rf1, Rf2; Rd = Memoria[Rf1 + Rf2]

LOAD Rd, Rf1, #X; Rd = Memoria[Rf1 + X ]

STORE #X, Rf1, Rf2; Memoria[Rf1 + x] = Rf2

Operaciones de control de secuencia: Se trata de operaciones como saltos

incondicionales, condicionales, saltos calculados, llamadas a subrutinas… BEQZ Rd, #X, Si (Rf==0) entonces PC = PC + X

A partir de esta semántica definida, los

componentes básicos del procesador serán los siguientes:

Un banco de registros con dos puertos de lectura y uno

de escritura. Una Unidad Aritmético Lógica UAL para las operaciones

de cálculo.

Un sumador para calcular el contador de la instrucción

siguiente del programa.

Varios registros: Un para mantener las direcciones en la

memoria para los datos (MAR), uno para las direcciones de la memoria con el fin de ir a buscar las instrucciones

(PC), uno para los datos que van a la memoria o vuelven (MDR) y uno para las instrucciones (IR).

3. ARQUITECTURA SEGMENTADA LINEAL

En un primer lugar vamos a identificar las distintas etapas de la segmentación que podemos encontrar para cada uno de los tipos de instrucción y,

hecho esto, aplicaremos el mismo número de etapas a todos los tipos de instrucción para asegurarnos que se trata de una arquitectura segmentada lineal.

Instrucciones de cálculo: Encontramos que primero hay que ir a buscar la

instrucción a la memoria (B), luego descodificar y leer (DL) dichas

Tema 3

Procesadores segmentados

1. Procesadores segmentados lineales

2. Arquitectura de ejemplo 3. Arquitectura segmentada lineal

4. Limitaciones de la

segmentación 5. Reducción de los ciclos

perdidos por conflictos de datos 6. Reducción de los ciclos perdidos por conflictos de

secuenciación 7. Arquitectura segmentada con

operaciones multiciclo 8. Temas avanzados

Componentes básicos del procesador

Page 59: sistemas operativos, redes y bases de datos

8 · Arquitectura de computadores

instrucciones, aplicar la operación sobre los operandos (UAL) y por último

escribir el resultado en el banco de registros (ESC). Por tanto, 4 etapas. Instrucciones de acceso a la memoria: Las dos primeras etapas, buscar

instrucción a la memoria y descodificar y leer es igual que la anterior; después

calculamos la dirección de la memoria donde tiene que accederse (ADR), accedemos a la memoria (MEM) y escribimos en el banco de registros si se

trata de una instrucción LOAD (ESC) o no hacemos esta última etapa si es una instrucción STORE. Por tanto 4 ó 5 etapas dependiendo del tipo de instrucción.

Por lo tanto, necesitamos, 5 etapas en el camino de datos segmentado, que procedemos a explicar a continuación en la siguiente tabla para cada una de las

instrucciones:

INSTR. CÁLCULO ACCESO LOAD ACCESO STORE

ETAPA B

Búsqueda de la instrucción a la

memoria

Tenemos una memoria que contiene las instrucciones, un registro con la dirección de

memoria y un incrementador para calcular el nuevo valor del contador

del programa. El resultado de esta etapa es la

instrucción que tiene que ejecutarse, la cual deja un registro

(IR)

Igual que en las instrucciones de cálculo.

Igual que las anteriores.

ETAPA DL

Descodificación y lectura

Se utilizan dos registros como fuentes de operando, por lo que

necesitamos un banco de registros con dos puertos de lectura y queda

almacenado el resultado de la lectura en dos registros de

segmentación R1 y R2.

Hay que leer los operandos necesarios para calcular la dirección de la memoria. Se pueden utilizar dos registros (ya que disponemos

de dos caminos de lectura al banco de registros de las instrucciones de

cálculo) o un registro y un desplazamiento.

Hay que leer un registro y un desplazamiento para la dirección de la memoria. Además hay que leer un registro que contiene el valor

que queremos llevar a la memoria MDRout, por lo que hay que añadir una nueva conexión desde uno de los caminos del banco de registros

a un nuevo registro de segmentación MDRout2

ETAPA UAL

Cálculo de la operación

La UAL aplica la operación en los dos operandos, y queda guardado el resultado en un nuevo registro

R3.

Tiene que calcularse la dirección de la memoria. Puede aprovecharse

que la UAL que hemos puesto para hacer las operaciones de

instrucciones de cálculo. El resultado de la UAL se guarda en

un registro que servirá de índice en la memoria de datos (MAR).

Hay que calcular la dirección a la memoria, al igual que en las instrucciones LOAD. Hay que recoger el dato que tiene que

llevarse a la memoria y trasladarla hacia la etapa siguiente con un

nuevo registro de segmentación.

ETAPA MEM

Memoria

Las instrucciones no hacen nada, de manera que el resultado de la

etapa de UAL se copia en un nuevo registro R4.

Hay que acceder a la memoria de datos en la dirección indicada por el registro anterior MAR. Tenemos que añadir una memoria para los datos o un nuevo camino que contenga las instrucciones y los datos para

poder acceder a la memoria y buscar una nueva instrucción en un mismo ciclo. El resultado de esta

etapa es el dato que quiere llevarse de la memoria al banco de

registros, y se guardará en MDRin

Se accede a la dirección de la memoria de datos indicada en el

registro de segmentación MAR y se lleva a la memoria el valor que

queremos guardar por un nuevo camino.

ETAPA ESC

Escritura

Se escribe en el banco de registros el resultado que se obtiene de la operación que se ha hecho en la UAL y que se encontraba en R4.

Se escribe el dato que hemos traído de la memoria al banco de registros

aprovechando el camino de escritura que ya tenemos para las

instrucciones de cálculo.

No se utiliza ningún recurso.

El camino de datos tiene estas cinco etapas diferentes, el hardware que

configura cada una de las etapas tiene que estar separado de la etapa anterior y de

la siguiente mediante registros para poder aislarlas. Así, cada etapa puede operar sobre una instrucción diferente sin afectar a las otras etapas.

En la página siguiente, podemos observar en otra tabla, el camino de datos

segmentado para cada uno de estos tipos de instrucciones, con los recursos que se consumen en cada una de las etapas.

Page 60: sistemas operativos, redes y bases de datos

Arquitectura de computadores · 9

TEMA

4. LIMITACIONES DE LA SEGMENTACIÓN

Esta técnica de la segmentación tiene unos límites, y es cuando se

producen conflictos. Los conflictos de datos se producen cuando el resultado de

la ejecución segmentada es diferente del resultado de la ejecución secuencial como resultado del orden en el que se han accedido a los datos.

Así queda claro que si una operación posterior quiere acceder a la lectura de un dato antes de que se haya escrito ese dato en una operación anterior que ha

sido segmentada, cambiará obviamente el resultado que se obtiene. Hay tres tipos

de dependencia de datos:

Dependencias de lectura: Se producen cuando dos instrucciones diferentes

leen algunas variables comunes. Si: ADD R1, R2, R3; R1 = R2 + R3

Sj: SUB R4, R3, R5; R4 = R3 – R5

En este ejemplo queda claro que si Si y Sj están demasiado juntas se produciría una dependencia de lectura, ahora bien, las dependencias de

lectura nunca pueden provocar un conflicto de datos, ya que las instrucciones que tienen la dependencia solo comparten variables de

lectura, independientemente del orden en que se hagan las lecturas, el

resultado será el mismo.

Antidependencias: Aparecen cuando una instrucción utiliza una variable que

se vuelve a definir más tarde. Si: ADD R1, R2, R3; R1 = R2 + R3

Sj: SUB R3, R4, R5; R3 = R4 – R5

Tampoco en este caso se pueden producir conflicto de datos, ya que todas las instrucciones pasan por las mismas etapas y en el mismo orden, y todas

INSTR. CÁLCULO ACCESO LOAD ACCESO STORE

Page 61: sistemas operativos, redes y bases de datos

10 · Arquitectura de computadores

las instrucciones con registros escriben el resultado cuando pasan por la

última etapa, así pues cuando la instrucción Sj escribe, todas las anteriores ya han leído correctamente sus operandos.

Dependencias de escritura: Se producen cuando dos instrucciones escriben

en alguna variable común.

Si: ADD R1, R2, R3; R1 = R2 + R3

Sj: SUB R1, R4, R5; R1 = R4 – R5

Tampoco en este caso se pueden producir conflicto de datos, ya que todas

las instrucciones escriben en la misma etapa y cuando la instrucción Sj escribe, todas las anteriores ya han escrito.

Dependencias reales: Tienen lugar cuando la instrucción Si genera

una variable que es utilizada por la instrucción Sj. Si: ADD R1, R2, R3; R1 = R2 + R3

Sj: SUB R4, R3, R1; R4 = R3 – R1

Éstas son las únicas dependencias de verdad que pueden acontecer en el procesador segmentado lineal. Hay diferencia si la variable que

provoca la dependencia (en este caso R1) está en memoria o en un registro. Si está en un registro, la instrucción Sj debe encontrarse, al

menos a una distancia de 4 instrucciones para que no provoque

dependencia (ver figura adjunta). Si la variable problemática está en la memoria no puede haber conflicto de datos ya que la lectura y

escritura siempre se produce en la misma etapa (la cuarta) del procesador segmentado lineal.

Hasta ahora hemos considerado que las instrucciones se ejecutaban una

detrás de otra, sin producirse saltos, pero como sabemos eso no siempre es así y

esto nos introduce en un nuevo tipo de errores, los conflictos de secuenciación. Para añadir la secuenciación debemos hacer una serie de cambios en nuestro

procesador segmentado lineal, así se podrá comparar el valor de un registro y en función del resultado saltar a una cierta distancia de la instrucción de salto:

La etapa de búsqueda de instrucciones y la de descodificación y lectura

son las mismas que para las otras instrucciones. En la etapa UAL puede utilizarse la UAL del camino de datos para

calcular el contador de programa de la instrucción siguiente en caso de

que tenga que saltarse (PC = PC + X), también hay que comparar el registro leído con cero, y añadir un comparador en esta etapa del

procesador. En el ciclo siguiente, en la etapa de memoria ya puede evaluarse la

condición de salto y al final del ciclo todo está preparado (condición de

salto y dirección de destino) para poder saltar.

Pero eso sí, si no se hace nada por evitarlo, durante 3 ciclos se habrá

ido a buscar y se habrán ejecutado las tres instrucciones que siguen a la instrucción de salto; si finalmente se tiene que saltar porque se cumple la

condición, habremos ejecutado erróneamente 3 instrucciones que con el

método secuencial del código no se hubieran ejecutado y por tanto se habrá modificado el resultado del código original

Tanto para evitar este problema en los conflictos de secuenciación como en

los conflictos de datos, se utiliza el bloqueo del procesador. Es una técnica que detiene la búsqueda de nuevas instrucciones y deja que las que están en las etapas

Dependencias reales Variable en registro

Variable en memoria

Secuenciación

Page 62: sistemas operativos, redes y bases de datos

Arquitectura de computadores · 11

TEMA

de UAL, memoria y escritura se continúen ejecutando. Los dos tipos de bloqueos de

procesador que existen son:

Para resolver los conflictos estructurales y de datos, además de detener la

búsqueda de nuevas instrucciones, se detiene la etapa de descodificación y lectura de operandos; así la distancia entre las instrucciones que tienen

dependencia o quieren usar un mismo recurso, aumenta hasta que desaparece el riesgo.

Para resolver los conflictos de secuenciación no puede detenerse la

descodificación y lectura de operandos, ya que tenemos que dejar que la

instrucción de salto se ejecute para saber cuál es la instrucción siguiente que hay que buscar.

Durante estos ciclos que se bloquea el procesador, se generan instrucciones

nulas, instrucciones NOP (no operación) que no modifican el estado del procesador.

5. REDUCCIÓN DE LOS CICLOS PERDIDOS POR CONFLICTOS DE DATOS

La solución del capítulo anterior es buena pero, por desgracia, nos hace

perder 3 ciclos de proceso datos que es, en definitiva, para lo que segmentábamos

el procesador, para poder ejecutar paralelamente más instrucciones por ciclo. Pero, como casi siempre, existen técnicas para reutilizar estos ciclos y que se sigan

generando instrucciones, son dos principalmente, la planificación de instrucciones y los cortocirtuitos.

La planificación de instrucciones es una técnica de software que se encarga de aplicar el compilador o el programador. Consiste en generar código

teniendo en cuenta las dependencias de datos entre las instrucciones. Se basa en que cualquier par de instrucciones puede intercambiar el orden de ejecución si no

tiene ningún tipo de dependencia entre ellas ni con las instrucciones que hay en medio. Pues bien, en los ciclos que se pierden por dependencia, en lugar de

ejecutar instrucciones NOP, se ejecutan estas otras que realmente pertenecen al

código y así no se pierden ciclos de procesador. En la figura lateral se observa un conjunto de instrucciones en las cuales, entre la primera y la segunda se perderían

3 ciclos de procesador, con una reorganización del mismo código, se obtiene el mismo resultado final y no se pierde ningún ciclo.

En el ejemplo resuelto anteriormente, todavía se pierde un ciclo de

procesador por culpa de la dependencia real entre las instrucciones 1 y 2. Todavía puede aplicarse otra técnica de software para intentar solucionarlo, el

renombramiento de registros. Sólo con cambiar en nuestro ejemplo en la instrucción 5 y 6 el registro R2 por R20, podemos continuar reordenando

instrucciones y separar aún más las que tienen dependencias reales.

Los cortocircuitos son una técnica de hardware que consiste en introducir

cambios en el camino de datos y en el control del procesador segmentado que reducirán el número de ciclos perdidos a causa del conflicto de datos. Son

conexiones especiales para los datos en el camino de datos que toman los mismos del punto donde se encuentran y las llevan donde se necesitan. Para ello debemos

distinguir quienes son los productores de valores y quienes son los consumidores.

Los productores de valores se dan en la UAL (al ejecutar una instrucción de cálculo) y en la memoria de datos (al ejecutar una instrucción LOAD); estos valores

pueden tomarse en cualquier punto entre el lugar que se calcula (UAL o memoria) y el lugar donde se escribirá (banco de registros), con lo que hay 3 lugares posibles

donde pueden ir a buscarse valores: en la salida de la UAL (etapa UAL), en la salida

de la memoria (etapa de memoria) o en la salida del registro de segmentación (etapa de escritura).

Los consumidores de valores son los que necesitan dichos valores para hacer un cálculo (UAL) o para almacenarlo (la memoria en la etapa STORE) y se

pueden necesitar en los dos registros de entrada a la UAL y en el de salida de

Planificación de instrucciones

1: ADD R1, R2, R3 2: SUB R4, R2, R1 3: ADD R5, R6, R2

4: MUL R7, R3, R6 5: ADD R2, R3, R2

6: SUB R3, R2, R4 1: ADD R1, R2, R3 3: ADD R5, R6, R2

4: MUL R7, R3, R6 2: SUB R4, R2, R1

5: ADD R2, R3, R2 6: SUB R3, R2, R4

Renombramiento de registros

1: ADD R1, R2, R3 3: ADD R5, R6, R2

4: MUL R7, R3, R6 2: SUB R4, R2, R1 5: ADD R2, R3, R2

6: SUB R3, R2, R4 1: ADD R1, R2, R3

3: ADD R5, R6, R2 4: MUL R7, R3, R6

5: ADD R20, R3, R2 2: SUB R4, R2, R1 6: SUB R3, R20, R4

Page 63: sistemas operativos, redes y bases de datos

12 · Arquitectura de computadores

valores hacia la memoria en la etapa de descodificación y

lectura de operandos, o en el registro que propaga los valores que van a la memoria durante la etapa UAL.

Así, con todos estos aspectos, rediseñamos el procesador segmentado, añadiéndole nuevos caminos

que son los cortocircuitos.

Aún así, en nuestro procesador segmentado

sigue existiendo un caso de conflicto de datos que no puede resolverse con cortocircuitos y que nos hará

bloquear el procesador y perder un ciclo de ejecución de instrucciones útiles; se trata de una instrucción LOAD

seguida de cualquier instrucción a distancia 1 que utilice

el registro que cargará la instrucción LOAD, que debe ser bloqueado para que dé un resultado correcto. Por

ejemplo:

LOAD R1, R2, #13; R1 = Memoria [R1 + R13]

ADD R4, R1, R5; R4 = R1 + R5

SUB R7, R2, R1; R7 = R2 – R1

Esto sucede porque el valor que llega a la

memoria está disponible al final de la cuarta etapa (MEM) de la ejecución de la instrucción LOAD, y la

instrucción siguiente ADD necesita este valor al principio de la tercera etapa (UAL); se necesita pues antes de que

el valor esté calculado y no hay ningún cortocircuito que

pueda adelantar el valor del registro, perdemos por ello un ciclo de procesador.

6. REDUCCIÓN DE LOS CICLOS PERDIDOS POR CONFLICTOS DE SECUENCIACIÓN

Ya hemos visto la necesidad de bloquear el

procesador con cada instrucción de salto para que el código se ejecute correctamente. Como por

término medio una de cada 5 instrucciones son de salto y, en ese caso, perdemos 3 ciclos de

procesador, los conflictos de secuenciación son realmente graves para el rendimiento del

procesador.

El programador puede evitar esto introduciendo el menor número de instrucciones

de salto posibles, pero por otro lado, existen otras 3 formas en el ámbito del hardware de mejorar

este resultado.

Adelanto del cálculo de la condición y de

la dirección de destino: Se desplaza el

hardware de la UAL necesario para que este cálculo tenga lugar en la etapa más temprana

posible. Lo máximo que podemos hacer es

efectuar el cálculo de la dirección de destino y evaluar la condición de salto en la etapa de

descodificación y lectura. No podemos hacerlo antes porque entonces tendríamos que estar

haciendo los cálculos sin saber todavía si se trata de una operación de salto o no.

Destacamos en esta solución que hay que

añadir un sumador extra al camino de datos del procesador segmentado para poder

calcular la dirección de destino del salto y, que

Cortocircuitos en el procesador segmentado

Adelanto del cálculo de la condición y dirección de destino

Page 64: sistemas operativos, redes y bases de datos

Arquitectura de computadores · 13

TEMA

en un ciclo es necesario tener tiempo para leer el banco de registros, comparar

el registro y evaluar la condición; esto implica un tiempo de ciclo muy malo. Predicción de saltos: Consiste en empezar a ejecutar instrucciones (ya sea

de las que siguen en secuencia a la instrucción de salto o de las instrucciones a

partir de la dirección del salto) antes de acabar la ejecución de la instrucción de salto. Una vez que se ejecuta el salto, conviene saber si hemos tomado la

decisión correcta respecto a las instrucciones a ejecutar (50% de probabilidades); para obtener la dirección de salto se utiliza una memoria caché

de instrucciones de salto conocida como BTB, ahora bien, existen dos formas

de predecir el salto: o Estática: La predicción para una instrucción de salto concreta es

siempre la misma, bien porque todas las instrucciones de salto tienen la misma predicción (por ejemplo saltar siempre) o bien

porque cada una de las instrucciones de salto tienen una predicción

diferente. o Dinámica: La predicción puede variar a lo largo del tiempo en

función de su comportamiento; así el Pentium III de Intel tiene u predictor de saltos dinámico que predice correctamente en torno al

90% de los saltos condicionales.

Una vez producido o no el salto, si la predicción es correcta no se perderá ningún ciclo de procesador al ejecutar el salto, mientras que si es errónea se

perderán tantos ciclos como en un procesador sin predicción. También hay que añadir que en el caso de un predictor estático en el que nunca se salte, no es

necesaria siquiera memoria BTB, solo el fluir normal, sin bloquear, del procesador.

Saltos retardados: Otra técnica consiste en hacer visible para el programador

los ciclos que tarda en calcularse la dirección de destino y la condición de salto;

así siempre se ejecutarán las n primeras instrucciones que hay después de una instrucción de salto, independientemente de si éste definitivamente se produce

o no. Lo habitual es que tengan dos posiciones de retardo, por tanto se realizarán los dos ciclos siguientes del código.

7. ARQUITECTURA SEGMENTADA CON OPERACIONES MULTICICLO

El diseño del procesador que hasta ahora nos traíamos entre manos, complentaba una ejecución lineal con tiempo de ciclo constante que, para más

INRI, tenía que ser el tiempo que tardase más. Si el objetivo es mejorar el

rendimiento todo lo posible, interesa dividir la ejecución de las operaciones en las etapas que requiera cada tipo de operación. La segmentación ahora no será lineal y

el diseño del procesador será más complejo. Un ejemplo de esta necesidad son las operaciones en coma flotante, que

son mucho más complejas que las operaciones con enteros. Así crearemos una máquina con dos procesadores, una será equivalente al procesador segmentado

lineal que venimos conociendo en todo el tema, y la otra máquina ejecutará las

nuevas instrucciones en coma flotante. En este nuevo esquema tendremos en cuenta que:

Las operaciones con números enteros se efectúan de la misma forma que antes

en el procesador segmentado lineal.

Las operaciones en coma flotante se ejecutan en la nueva máquina con un

banco de registros propios.

Las operaciones de acceso a la memoria serán las únicas que relacionan ambas

máquinas y se ejecutarán siempre en la parte de los enteros. El cálculo de las direcciones de la memoria siempre tiene lugar en la parte de

los enteros y se requiere leer un registro del banco de registros enteros.

Obviamente estos cambios también influyen en las operaciones de cálculo

apareciendo nuevas operaciones como FSUM para la suma en coma flotante. Las

instrucciones además tienen un número de etapas que dependen de su dificultad,

Page 65: sistemas operativos, redes y bases de datos

14 · Arquitectura de computadores

así las operaciones de suma y resta se ejecutan en 3

ciclos, las de multiplicación en 5 y la de división en coma flotante, la más compleja, en 8 ciclos.

En este procesador segmentado con operaciones multiciclo ahora la nueva máquina puede tener también

dependencias que estudiamos a continuación:

Antidependencias: Todas las operaciones son idénticas hasta la etapa de lectura, como siempre se escribe

después de leer (igual al procesador segmentado

lineal) estas dependencias no pueden crear nunca un conflicto de datos.

Dependencias reales: Una instrucción puede intentar

leer un registro que ha calculado una instrucción anterior pero que todavía no se ha escrito, en este

caso con bloqueos y pérdida de ciclos superamos el

problema; reordenando las instrucciones y utilizando cortocircuitos evitamos este problema.

Dependencias de salida: Como las operaciones pueden

terminar en un orden diferente a aquél en el que se empezaron a ejecutar, es necesario en algunas ocasiones bloquear el

procesador o anular la escritura más antigua.

8. TEMAS AVANZADOS

Dos técnicas que actualmente suelen aplicar todos los procesadores para

mejorar su rendimiento:

Ordenación dinámica de las instrucciones: Ya hemos comprobado

anteriormente que cuando se produce un conflicto de datos que no puede resolverse, el procesador se bloquea y perdemos ciclos de trabajo. Pero si

sabemos que las instrucciones que siguen al bloqueo se pueden ejecutar y son independientes y no dan lugar a ningún conflicto, entonces podremos

ejecutarlas durante el tiempo de bloqueo. Lo que hacen los procesadores actuales es guardar dentro del procesador la instrucción bloqueante y se

continúan buscando instrucciones, así que el procesador sólo se bloqueará

cuando ya no pueda guardar más instrucciones en su interior. Lógicamente con esta nueva técnica pueden surgir nuevos conflictos, que se solucionan con un

renombramiento de registros, así el procesador puede funcionar como si el compilador hubiera generado código para un procesador con infinitos registros.

Lo negativo de esta técnica de ordenación dinámica de instrucciones con

renombramiento de registros es que complica el diseño del control y empeora el tiempo de ciclo del procesador.

Ejecución superescalar de las instrucciones: Se ejecutan más de una

instrucción por ciclo de procesador, aprovechándonos de la técnica de multiplicación para explotar el paralelismo a nivel de instrucción. El grado de un

procesador segmentado superescalar es el número de instrucciones que puede ejecutar por ciclo y que actualmente es de 2 a 4.

Ambos métodos anteriores pueden dar problemas en el tratamiento de las

excepciones, dado que al no ejecutar el código línea a línea, cuando se presenta una excepción no puede detenerse para tratarla y luego continuar por el mismo

punto en que se detuvo sin que ya se hayan ejecutado varias instrucciones intermedias.

Texto elaborado a partir de:

Arquitectura de computadores Agustín Fernández Jiménez, Toni Juan Hormigo

Junio 2005

Camino de datos segmentado multiciclo

Page 66: sistemas operativos, redes y bases de datos

Arquitectura de sistemas distribuidos

TEMA 1 ARQUITECTURAS DISTRIBUIDAS A ESCALA INTERNET

1. CONCEPTOS PREVIOS

Existen muchas definiciones de sistemas distribuidos, aunque la más

completa dice así: Un sistema distribuido es una colección de ordenadores

autónomos, enlazados por una red de ordenadores y soportados por un software que hace que la colección actúe como un servicio integrado.

La escala Internet confiere dificultad a estos sistemas distribuidos, por la

gran cantidad de ordenadores y usuarios conectados, por la dispersión geográfica

de éstos, por la calidad del servicio, la seguridad, autonomía, porqué algunos ordenadores se conectan y desconectan sin control, etc.

A la hora de diseñar un sistema distribuido, deberemos tener en cuenta

las siguientes características:

Heterogeneidad: Pueden coexistir distintos tipos de dispositivos

(ordenadores, PDA, etc) con distintos sistemas operativos, hardware y distinto

lenguaje de programación. Seguridad: Puede existir información valiosa para los usuarios que se está

compartiendo, se pueden usar técnicas de cifrado para que siga siendo lo más

confidencial posible. Escalabilidad: Debemos poder añadir nuevos recursos, usuarios, etc, evitando

que se pierda el rendimiento y el control; es especialmente perjudicial la

existencia de cuellos de botella que, a la larga, disminuirán el rendimiento del

sistema. Fallos: El sistema debe ser capaz de detectar la existencia de fallos, funcionar

con el error derivando recursos (tolerar los fallos) y ser capaz de recuperarse

completamente cuando el fallo se haya solventado. Concurrencia: Debe permitirse acceder a varios usuarios a un recurso

simultáneo (datos) y ser capaz de cambiarlo sin que afecte y de resultados

erróneos. Transparencia: Ciertos aspectos del sistema están ocultos a las aplicaciones,

como por ejemplo la transparencia de ubicación acceso a un recurso sin

saber su ubicación.

2. CLIENTE-SERVIDOR

En el modelo cliente-servidor hay dos tipos de procesos, los clientes son procesos que hacen peticiones de servicio y los servidores proveen esos servicios.

Hay ejemplos híbridos, como por ejemplo un buscador de Internet, que es servidor

de la petición que nosotros podemos hacerle a través de su página web, pero a su vez es cliente de otros servidores de Internet buscando la información para

nosotros.

Arquitectura multiestrato

La funcionalidad está distribuida entre distintas plataformas u ordenadores, y hay tres niveles: interfaz de usuario del sistema, capacidad de procesamiento y

gestión de los datos. Dependiendo a qué nivel se sitúen estos tres niveles podemos tener distintos tipos de arquitecturas:

Tema 1 Arquitectura distribuida a escala

Internet

1. Conceptos previos 2. Cliente-servidor

3. Publlicación-suscripción

4. De igual a igual 5. Sistemas distribuidos basados

en eventos 6. Código móvil

7. Topologías de los sistemas

distribuidos

Page 67: sistemas operativos, redes y bases de datos

2 · Arquitectura de Sistemas Distribuidos

Arquitectura de dos estratos: La interfaz de usuario está ubicada en el

cliente, y la gestión de base de datos en el servidor; la capacidad de

procesamiento está repartida tanto entre el cliente como en el servidor. Así se mejora la usabilidad, escalabilidad y

flexibilidad de las aplicaciones. Arquitectura de tres estratos: Se sitúa un tercer estrato

entre el cliente y el servidor, encargado de la capacidad de

procesamiento.

Aplicaciones basadas en web

Este tipo de aplicaciones son un caso especial de arquitectura cliente-servidor. Cuando un usuario hace clic en un

enlace se genera una petición al servidor que pone en marcha el código CGI, Java, etc y que acaba generando como

respuesta una página en formato web con todos los datos

procesados en el script y que visualizamos directamente en nuestro navegador en formato HTML.

La gran ventaja de este tipo de aplicaciones es que son accesibles desde cualquier ordenador que disponga de un navegador web, sin

necesidad de incluir más código o instalar más programas en el cliente, y esta

facilidad y universalidad ha sido uno de los elementos responsables del boom de empresas en Internet.

3. PUBLICACIÓN-SUSCRIPCIÓN

En el modelo cliente-servidor, cada vez que el cliente necesita cierta información, la pide o la busca en el servidor;

pero hay servicios en los que esta forma de actuar no es útil. Por ejemplo, si somos un inversos en bolsa y nos interesan las

cotizaciones del IBEX 35, no podemos estar constantemente buscando la última cotización y monitorizando si hay cambios o

no.

En este caso, es mucho más útil la publicación-suscripción: un productor de información anuncia la

disponibilidad de cierto tipo de información y un consumidor interesado se suscribe para recibir esta información de la que el

productor periódicamente le va a proveer.

El modo de funcionamiento se detalla en la tabla adjunta y se caracteriza por:

Localización: La información no hay que buscarla, ya está

localizada. Personalización: Recibimos justo la información que queremos y a la que nos

hemos suscrito.

Actualización permanente de los datos.

Reducción del tráfico: El tráfico en la red se reduce ya que no buscamos ni

actualizamos periódicamente los datos como clientes, sino que ya está localizada y se nos envíe (síncrona o asíncronamente) cuando hay algún

cambio.

4. DE IGUAL A IGUAL

Un sistema de igual a igual (peer-to-peer) se caracteriza por ser un sistema

distribuido en el que todos los nodos tienen las mismas capacidades y

responsabilidades, y en el que toda la comunicación es simétrica. Ejemplo de estos sistemas son napster, emule, etc, usados frecuentemente para la compartición de

ficheros, pero existen otras aplicaciones como la computación distribuida, comunicación, colaboración…

Las características de estos sistemas son las siguientes:

Arquitecturas multiestrato

Publicación-suscripción

Page 68: sistemas operativos, redes y bases de datos

Arquitectura de Sistemas Distribuidos · 3

TEMA

Descentralización: Los distintos iguales (miembros) del sistema son los

propietarios y tienen el control de los datos y recursos de su ordenador, no hay ningún nodo que tenga una idea completa del sistema.

Escalabilidad: Una consecuencia directa de la descentralización es la mejora

de la escalabilidad, ya que se pueden soportar muchas más operaciones que si se tiene que recurrir a un nodo que centralizara las operaciones.

Anonimato: Puede haber anonimato de autor (de documentos), de publicador

(no se puede identificar quién publicó o introdujo un determinado documento en el sistema), de lector, de servidor (no se puede saber en qué servidores se

encuentra un documento), de documento (no se sabe qué documentos tienen

almacenados los servidores), de petición. Autoorganización: el sistema crece o cambia su organización sin que esta

evolución esté supervisada.

Coste de la propiedad: La propiedad compartida reduce el coste de poseer el

sistema y los contenidos. Conectividad puntual: Los iguales pueden conectarse y desconectarse del

sistema a voluntad.

Rendimiento: Suele ser una preopcupación en este tipo de sistemas, se

mejora con la reproducción (acerca copias de objetos o ficheros a iguales), uso

de memorias caché (reduce la distancia necesaria para obtener un objeto) y encaminamiento inteligente (los iguales que se comunican más frecuentemente

que tienen intereses comunes). Seguridad: A través de cifrados multicalave, derechos digitales, cortafuegos…

Transparencia y usabilidad: Deben funcionar los sistemas de igual a igual

independientemente de la red utilizada, del dispositivo que se conecte, del

sistema operativo instalado… Resiliencia a fallos: si falla uno o varios componentes del sistema, éste debe

seguir funcionando. Algunos sistemas tienen almacenes temporales que

registran las modificaciones o comunicación y cuando el igual vuelve a estar

activo, recibe las actualizaciones. En otras ocasiones se encolan los mensajes hasta que los iguales estén disponibles.

Interoperabilidad: Hay muchos sistemas de igual a igual, pero actualmente

ninguno puede interoperar con otro existente, aunque se dan tímidos avances en este sentido como la red emule y eKad.

5. SISTEMAS DISTRIBUIDOS BASADOS EN EVENTOS

El uso de eventos permite que un objeto pueda reaccionar a cambios que han ocurrido en otro objeto. Un componente puede anunciar o difundir uno o más

eventos y otros componentes del sistema pueden registrar que están interesados

en este tipo de eventos y, cuando un evento se anuncia, el sistema invoca a todos los componentes interesados que estén registrados.

Los sistemas basados en eventos tienen dos características principales: son heterogéneos y son asíncronos. Por ello aunque inicialmente se parezcan a los

sistemas de publicación-suscripción, no tienen nada que ver, dado que los roles son

muy diferentes (en publicación-suscripción están diferenciados, aquí no), la frecuencia de la información es muy variable (mucho mayor en los sistemas

basados en eventos) y la cantidad también (más elevada la información por publicación-suscripción que en eventos, que tiende a ser mínima, frecuente, pero

mínima).

6. CÓDIGO MÓVIL

Los sistemas de código móvil pretender usar la movilidad para cambiar

dinámicamente la distancia entre el procesamiento y la fuente de datos o destino de los resultados, así cambiando de ubicación, un componente puede mejorar la

Page 69: sistemas operativos, redes y bases de datos

4 · Arquitectura de Sistemas Distribuidos

proximidad y la calidad de las interacciones, reducir el coste de las mismas y así,

mejorar la eficacia y la percepción del usuario sobre el rendimiento. Básicamente se trata de ejecutar partes de código en máquinas distintas,

tanto enviando el código, los datos o una mezcla de ellos:

Evaluación remota: El cliente envía el conocimiento al servidor ubicado en un

ordenador remoto, allí se ejecuta el código recibido con los recursos que tiene y se devuelve el resultado al cliente. Un ejemplo práctico sucede entre un

procesador de textos y una impresora PostScript.

Código bajo demanda: El cliente envía una petición a un servidor remoto

para que le envíe el código necesario y el cliente con los datos con los que ya contaba, ejecuta totalmente y obtiene los resultados esperados. En este caso el

cliente tiene los recursos, pero no el conocimiento necesario. Un ejemplo son las miniaplicaciones web que bajamos y ejecutamos constantemente desde

nuestros navegadores web, pues las bajamos y ejecutamos en nuestro

ordenador. Agentes móviles: Una unidad de computación se nueve a un ordenador

remoto, y se lleva su estado, la parte de código que necesita y los datos

necesarios (si los requiere) para llevar a cabo la tarea. Es una combinación de las dos anteriores.

En todos los casos la seguridad es importante, la confidencialidad de los datos,

y sobre todo por el hecho de ejecutar código ajeno en nuestro ordenador o enviarlo a otro para que lo ejecute, es por ello que el cliente y el servidor deben ser de

mutua confianza.

7. TOPOLOGÍAS DE LOS SISTEMAS DISTRIBUIDOS

Centralizada: Es la que estamos más habituados a ver (primera figura de la

imagen lateral), un nodo servidor contiene la información y los nodos clientes

obtienen la información de este servidor. Es un sistema simple en administración y consistencia de datos, pero es muy vulnerable a fallos.

En anillo: Se utiliza cuando un servidor se satura porque tiene muchas

peticiones, y consiste en tener un conjunto de servidores conectados entre sí de manera que se coordinen para tener un estado común, balanceando la

carga y obteniendo un buen resultado frente a fallos (segunda figura de la

imagen lateral). Jerárquica: (tercera figura) Un conjunto de nodos tiene un nodo superior que

les ofrece la información que éstos necesitan, si un nodo no tiene la

información, la reclama a su inmediato superior. Son sistemas muy escalables y bastante resistentes a fallos, pero con un punto débil: el nodo raíz.

Descentralizada: Cualquier nodo se conecta a cualquier otro, como podemos

ver en la cuarta figura de la imagen lateral. Son sistemas muy extensibles y

muy tolerantes a fallos, pero son difíciles de administrar y suelen ser bastante inseguros.

Centralizada y en anillo: Es una topología híbrida, y se comporta como un

sistema centralizado, pero el nodo servidor no es un único ordenador, sino que está formado por un conjunto de ellos, así el usuario ve un único punto de

conexión pero con las ventajas que ofrece tener un conjunto de ordenadores que responden a las peticiones de los clientes. Es una combinación simple pero

potente.

Centralizada y descentralizada: Este tipo de topología intenta que cualquier

nodo puede relacionarse con cualquier otro, que es la principal desventaja de las topologías descentralizadas. Así con cierta centralización se aporta sencillez

a la hora de conseguir coherencia dentro del sistema, aunque sigue siendo difícil de administrar y bastante inseguro.

Topologías de los sistemas

distribuidos: Centralizada, en anillo, jerárquica, descentralizada,

centralizada y en anillo, y centralizada y

descentralizada.

Page 70: sistemas operativos, redes y bases de datos

Arquitectura de Sistemas Distribuidos · 5

TEMA

TEMA 2 CONCEPTOS DE SISTEMAS DISTRIBUIDOS

1. LA OBSERVACIÓN DE UN SISTEMA DISTRIBUIDO

Un sistema distribuido está formado por personas, máquinas, procesos,

agentes situados en lugares distintos. Puede entenderse de manera abstracta como un conjunto de procesos que cooperan para solucionar un problema

intercambiando mensajes. Y éste último punto es el que hace imposible la observación fotográfica de

un sistema distribuido, es decir, no es posible poder construir una imagen del

sistema en un momento dado, ya que varios procesos nunca se pueden observar a la vez y, por tanto, no se pueden hacer afirmaciones sobre el estado global del

sistema. El efecto relativista ocurre en Internet todos los días: velocidad de

propagación menor, datos que circulan formando colas y sufriendo retrasos para atravesar routers, datos que se pierden porque una cola rebosa o un bit cambia de

valor por error, datos desordenados que tardan en ser procesados por la carga del

servidor, etc.

2. TIEMPOS Y RELOJES

Es necesario en todo sistema distribuido medir el tiempo y saber con la

mayor exactitud el momento en el que ocurrió un evento determinado: es necesario sincronizar el reloj del computador con una fuente de referencia externa.

Cada computador tiene su reloj propio, con valor temporal que varía de manera distinta y que requiere un ajuste continuo para que todos los computadores de un

sistema tengan un valor de tiempo aproximadamente igual. Por medio de

intercambiar mensajes, los relojes de varias máquinas se pueden coordinar entre éstas, teniendo en cuenta el tiempo de ida y vuelta del mensaje, se puede ajustar

el reloj local sin dar saltos, es decir, acelerándolo o ralentizándolo durante un período de tiempo hasta que incorpore el ajuste.

Así si sabemos el Treal y el Tdespl, los valores para ajustar el reloj de un computador en N ciclo, según el método Christian, serían:

A = (Treal – Tdespl) / N B = Tdespl – (1+a) h

Además, si en una red local solo hay un servidor al que consultar el tiempo, puede ser problemático en caso de fallos y por eso se suelen usar mecanismos de

sincronización con varias referencias de tiempo: el algoritmo de Berkeley permite

que una máquina pregunte el tiempo a otra e incorpore los ajustes necesarios con tolerancia a fallos y envía a cada máquina del conjunto el ajuste de reloj que

necesite; el protocolo de tiempo en red permite que una máquina puede ajustar su hora por Internet.

Otra forma de actuar son los relojes lógicos que en lugar de usar la hora, determinan el orden relativo de ocurrencia de dos eventos; es decir, se trata de

contadores de eventos que siempre aumentan y que no tienen relación con el reloj físico. Así cada proceso P tiene un reloj lógico L que se usa para marcar el tiempo

virtual en el que se ha producido un evento. Las relaciones importantes entre eventos y relojes lógicos son las siguientes:

Procedencia: si dos eventos e1 y e2 se dan ene el mismo proceso P, el orden es claro para todo el sistema e1 e2. El envío de un mensaje ocurre antes de

la recepción envio(e1) recepción(e1); y si e1, e2 y e3 son eventos que e1

e2 y e2e3 entonces por transitividad e1e3.

Concurrencia: (||) entre eventos, cuando dos no están relacionados por no

hay una relación causal

Tema 2

Conceptos de sistemas distribuidos

1. La observación de un sistema

distribuido 2. Tiempos y relojes 3. Tolerancia a fallos

4. Comunicación en grupo

Page 71: sistemas operativos, redes y bases de datos

6 · Arquitectura de Sistemas Distribuidos

La ordenación causal de eventos captura en muchos casos la información

esencial para describir una ejecución, pero como hay un reloj Lamport para cada proceso, y comparando su valor en dos mensajes que nos llegan, no podemos

concluir si uno precede al otro o son concurrentes, para esto se inventaron los relojes vectoriales.

3. TOLERANCIA A FALLOS

Podría esperarse que la fiabilidad de un sistema distribuido dependiera de la fiabilidad de sus componentes, pero no es así, ya que un sistema distribuido está

formado por componentes que interactúan y nuestro objetivo de funcionamiento es

no fallar cuando falla un componente, sino funcionar con componentes averiados o en mantenimiento.

Una forma tradicional y sencilla, aunque cara de obtener este objetivo es tener el sistema replicado, aunque es posible obtener tolerancia a fallos a partir de

hardware sin replicar y una capa de programas que ofrezcan un modelo de programación y algunos servicios esenciales para programar aplicaciones

distribuidas tolerantes a fallos. Varios de estos servicios son los siguientes.

La gestión de replicación tiene lugar cuando se replican los datos en

varios servidores y es necesario saber quién gestiona qué y como se gestionan estas réplicas. Hay dos tipos de operaciones, las de servidor a servidor (sirven para

ajustar el rendimiento, prevenir y reaccionar ante fallos) y las de cliente a servidor

que se pueden encontrar varios casos:

Copia disponible: (leer uno, escribir todos). Las actualizaciones se aplican a

todas las copias, y las lecturas se hacen de cualquier réplica. Votación: Cada réplica tiene uno o más votos, cada operación recolecta votos

de las replicas hasta conseguir quórum y, entonces, se aplicará la operación.

La detección de fallos puede asumir varios tipos de fallos:

Fallo y parada: un proceso funciona bien, y de pronto se para, es el modelo de

fallo más fácil de detectar. Funcionamiento erróneo: todo parece ir bien hasta que se empiezan a percibir

resultados erróneos; es un fallo peligrado pues es difícil detectar la situación y

desde cuando se llevan cometiendo errores. Sistema más lento: todo parece funcionar, pero la velocidad general del

sistema va decreciendo paulatinamente.

Una manera de simplificar todos estos fallos es disponer una capa de software que vista todos los fallos como si fueran paradas. Así que se trata de preguntar a

los procesos para verificar que no están funcionando erróneamente, y si se ralentizan o dan errores, se les considera parados y se les ignora.

La gestión de grupos de procesos se hace enviando mensajes a todos los

miembros del grupo para comprobar que todo funciona bien, pero existen según el

número de miembros varias técnicas:

Enviar el mensaje a un proceso que gestiona y grupo y éste se encarga de

reenviarlo a todos los miembros; este proceso se convierte en un punto débil, que si falla, falla la comunicación con todo el grupo.

El proceso que quiere enviar pide primero la lista de miembros al proceso que

gestiona el grupo, y el emisor manda el mensaje a cada destinatario; el

problema es que si el número de miembros aumenta o disminuye desde que se pide la lista hasta que se envía el mensaje, la entrega a todos los miembros

puede no ser correcta.

Page 72: sistemas operativos, redes y bases de datos

Arquitectura de Sistemas Distribuidos · 7

TEMA

Una lista compartida entre emisores y algoritmo de cardinalidad; los mensajes

se entregan cuando el número de miembros no varía y nos aseguramos que

todos reciben el mensaje.

La entrega de mensajes es esencial para garantizar ciertas propiedades del sistema. Así nos aseguramos de determinar la fiabilidad, orden y latencia.

Fiabilidad: Determina qué procesos pueden recibir una copia del mensaje, y

cada participante tendrá que guardar información de estado y una copia de los

mensajes, para ofrecer atomicidad (a todos los miembros del grupo o a

ninguno), fiabilidad (a todos los miembros en funcionamiento), quórum (a una fracción del grupo), intent (a cada miembro del grupo, pero ninguno garantiza

haber recibido el mensaje). Orden: Cada receptor tendrá una cola de entregas que reordenará según

restricciones: total causal (en el mismo orden a cada uno respetando el orden

de causalidad), total no causal (a todos los miembros sin tener en cuenta el

orden causal), causal (respetando las relaciones causales), FIFO (en orden desde cada uno, pero los mensajes provenientes de otros pueden llegar en

cualquier orden) y desordenado. Latencia: los procesos que se comunican deberán tener en cuenta la latencia

elegida para determinar si un mensaje se ha entregado correctamente o no:

síncrona (comienza y se completa en tiempo limitado inmediatamente),

interactiva (comienza inmediatamente, pero no tiene tiempo limitado), limitada (los mensajes pueden encolarse o retrasarse, pero hay un tiempo límite para

recibirlos) o eventual (los mensajes se pueden encolar o retrasar pero no hay tiempo límite para la entrega).

Las transacciones en presencia de fallos para saber que se ha ejecutado

correctamente y se ha entregado de forma atómica a todos los miembros del grupo

puede requerir varias rondas de comunicación: una primera en la que el emisor propone la operación y recoge el acuerdo de los

receptores. Si todos están de acuerdo, el emisor confirma de nuevo a todos que la operación se puede

llevar a cabo (o notifica que se cancela) y por último

puede haber una tercera ronda en que los receptores pueden confirmar que han podido llevar a cabo la

operación y el emisor comunica a todos los receptores que la operación ha ido bien.

Con todo ello observamos que la entrega de un solo mensaje a tres destinatarios con ciertas

garantías, como en la figura lateral, puede generar

mucho más que los tres mensajes que inicialmente podríamos imaginar que se requerirían.

4. COMUNICACIÓN EN GRUPO

Una forma segura que evite todos los inconvenientes mencionados

anteriormente sería un modelo de cuasisincronía en la que los eventos duran internos, envios, recepciones y cambios de cardinalidad, donde los mensajes fueran

de difusión selectiva a grupos de procesos, donde cualquier pareja de procesos

recibe los eventos en orden total y causal y donde una difusión selectiva se entrega a todos los miembros: el vento de entrega y recepción concurren al mismo tiempo.

Es una imagen bonita pero irrealizable, la cuasisincronía es imposible en presencia de fallos, pues los fallos no se puede programar para que no ocurran

durante las entregas; además el sistema avanza paso a paso, tan lento como el

más lento de los procesos y una operación que bloquease el sistema, cuando lo desbloquease, seguramente se seguiría de otra que lo volvería a bloquear, por ello

es mucho más realizable y realista hablar de sincronía virtual.

Transacciones en presencia de fallos

Page 73: sistemas operativos, redes y bases de datos

8 · Arquitectura de Sistemas Distribuidos

En este orden de cosas se sitúa ISIS, es un entorno de programación de

sistemas tolerante a fallos que ofrece este modelo de sincronía virtual, se consigue con ello cierto equilibrio entre velocidad del sistema y tolerancia a fallos.

Page 74: sistemas operativos, redes y bases de datos

Arquitectura de Sistemas Distribuidos · 9

TEMA

TEMA 3 REPRESENTACIÓN DE DATOS

1. ANTECEDENTES: EL HIPERTEXTO

La publicación de páginas mediante HTML ha sido muy útil durante muchos

años, pero su principal virtud, que es su publicación por Internet, se convierte tiempo después en su principal defecto, pues quizá nos interesaría optimizar

páginas para pantallas de ordenador, pero también para teléfonos móviles, mediante archivos de voz, para dispositivos sin teclado o con pantalla táctil, etc. La

familia de aplicaciones XML ofrece varias ventajas en su lugar:

EN XML se puede escribir información estructurada independiente de la

presentación.

Los documentos XML se pueden asociar a información de presentación que

puede particularizarse para cada medio de presentación (hojas de estilo). Los documentos XML se pueden transformar en otros documentos XML o de

otro tipo.

Se pueden expresar operaciones y secuencias de interacción complejas,

específicas para comunidades de personas, denominadas vocabularios.

2. HOJAS DE ESTILO HTML

Dos de los problemas más importantes que tiene el lenguaje HTML son que

la información de formato y estructura está mezclada y que la variedad de maneras aceptables de expresar una marca es elevada, ya que los pequeños errores siguen

siendo bien interpretados por la mayoría de los navegadores de Internet.

El primer problema se soluciona con las hojas de estilo en cascada (CSS) que podemos aplicar sin problemas en el lenguaje HTML actual; el segundo, en

cambio, requiere un nuevo lenguaje más estricto basado en XML: el XHTML. Suele ser recomendable dejar toda la información de estilo de un sitio web

completo en u documento aparte, compartido por todos los documentos HTML; así

un cambio en el documento de estilo afectará inmediatamente a todos los documentos que usen ese estilo. Se les llama hojas de estilo en cascada o

superpuestas porque a un mismo documento se le pueden aplicar varios estilos antes de ser presentado, siendo el orden de aplicación el siguiente:

Declaraciones importantes del autor.

Declaraciones importantes del lector.

Declaraciones normales del autor.

Declaraciones implícitas (atributos HTML) del autor.

Declaraciones normales del lector.

Valores por defecto del agente de usuario (navegador).

Estas hojas en cascada crecen y evolucionan con la web, pero a pesar de ello, el

lenguaje HTML está limitado desde el comienzo para la representación de páginas web; en éstas y otras muchas situaciones es necesario un lenguaje para

representar datos estructurados: el XML.

3. XML

El lenguaje XML (extensible markup language) es el formato universal para

documentos estructurados y datos en la web. Un documento XML puede ser perfectamente presentado en la web con formato tanto de forma como de

contenido, y además una persona o un programa podrán automáticamente obtener

datos del mismo que pueden ser de nuevo procesados.

Tema 3

Representación de datos

1. Antecedentes: el hipertexto 2. Hojas de estilo HTML

3. XML 4. XHTML 5. XSLT

Page 75: sistemas operativos, redes y bases de datos

10 · Arquitectura de Sistemas Distribuidos

Por tanto XML puede servir para representar y transportar

información estructurada como la que se puede guardar en una base de datos, también sirve para representar información.

El XML es más restrictivo que el HTML, pero se permite que diferentes

comunidades pueden intercambiar documentos siempre que se pongan de acuerdo

en el nombre de los elementos a incluir y la forma de organizarlos; varias organizaciones han definido su propio vocabulario (nombres de elementos y

atributos particulares) y conjuntos de restricciones para construir documentos aceptables dentro de su comunidad.

También XML puede combinar elementos o atributos definidos por

varias comunidades, así el mecanismo de declaración de espacios de nombres

permite asociar un prefijo a cada espacio de nombres o incluso definir el espacio de nombres por defecto para no tener que escribir constantemente el prefijo.

La función de los esquemas XML es definir y restringir el contenido y

estructura de documentos XML expresado en XML y, por tanto, sustituir los DTD

(herencia de SGML) por esquemas XML. Un esquema XML resulta bastante más largo que un DTD, pero a cambio, la verificación de los datos es más rigurosa y la

exportación e importación de datos es más sencilla para cualquiera que use un procesador de documentos XML que previamente valide el documento contra un

esquema.

4. XHTML

XHTML es la formulación de HTML 4.01 en lenguaje XML 1.0; el objetivo es

reducir la complejidad que supone procesar documentos HTML y que hace difícil incorporar un navegador a un dispositivo de capacidad reducida. Se trata de

“limpiar” HTML, de crear una nueva base para modularizar y extender el lenguaje,

de facilitar que nuevos dispositivos puedan “navegar” por la web, pero sin romper con HTML.

5. XSLT

Es un lenguaje para expresar hojas de estilo; un documento que describe

cómo mostrar un documento XML de cierto tipo. Tiene 3 partes:

Transformaciones XSL: un lenguaje para transformar documentos XML

(representados como una estructura de datos arborescente).

El lenguaje de caminos (XPath): un lenguaje de expresiones que usa XSLT para

acceder a partes de un documento XML o referenciarlas. Objetos de formato XSL: Un vocabulario XML para expresar el formato de

presentación de un documento, que define objetos y propiedades del formato

de un documento y sus componentes.

El lenguaje XSL es muy extenso y sigue evolucionando.

Page 76: sistemas operativos, redes y bases de datos

Arquitectura de Sistemas Distribuidos · 11

TEMA

TEMA 4 MECANISMOS DE INVOCACIÓN

1. EL MECANISMO DE INVOCACIÓN REMOTA

El mecanismo fundamental de construcción de programas se basa en la

invocación de trozos de programa entre la memoria y el procesador con la mediación del bus PCI. Resulta tentador extender este modelo para la invocación

entre máquinas diferentes y sustituyendo el bus PCI por la red. Sería además ideal que la separación no se notara, que fuese transparente, pero es difícil dado que la

red tiene un comportamiento más complejo que el bus interno de un PC: se

pierden, desordenan, duplican paquetes y, a veces, la red falla. La separación entre la máquina y el proceso que solicita un servicio y quien

realmente lo lleva a cabo da pie a introducir nuevas variantes o parámetros como la arquitectura (tamaño y organización de los datos), lenguaje de programación,

sistema operativo de ejecución (puede ser diferente entre las dos máquinas), etc. En general se tratará de pasar toda la información, lo más encapsulada y

comprimida posible, pero siendo entendida por las dos máquinas que actúan como

cliente y servidor respectivamente.

2. CODIFICACIÓN DE DATOS PARA EL INTERCAMBIO

Cualquier mecanismo de invocación remota necesita pasar datos por la red

en forma de secuencia de octetos. Obviamente hay que acordar un mecanismo de codificación (el emisor) y una interpretación de los datos recibidos (receptor).

El problema es más complejo de lo que parece a priori: hay que definir qué tipos de datos se van a utilizar (enteros, caracteres, reales), el orden en que se van

a enviar estos datos, repertorio o juego de caracteres a utilizar. Es decir, hay que

representar “en serie” un conjunto de datos que inicialmente no estaban pensados para este tipo de representación y además si es posible, debemos intentar

compactarlo tanto como sea posible para disminuir el tráfico en la red y mejorar la velocidad de ejecución. Hay varios formatos para reducir la complejidad y el coste

de los datos:

Enviar en el formato interno del emisor o transformar los datos en el formato

interno del receptor. En cualquiera de los dos casos el problema es complejo

pues uno de los extremos no debe hacer nada y el otro debería conocer como representar los datos para cualquier arquitectura, no parece una solución

viable. Enviar en forma canónica intermedia que debe ser conocida por cada

computador.

No conversión si los dos computadores son similares. Es decir en el caso

anterior si los dos computadores son iguales, estamos haciendo dos

conversiones innecesarias. En el formato del emisor incluyendo una indicación del formato, para que el

receptor a la llegada de los mismos, pueda convertirlos.

Otro aspecto interesante es el endian, el orden de representación de datos de

varios bytes de longitud. Puede ser de dos tipos:

Little-endian: el byte menos representativo se guarda en la dirección de

memoria menor, son little-endian los Pentium, el sistema operativo Windows y

distintos tipos de archivos; su ventaja es que las operaciones matemáticas son más fáciles de hacer porque el primer byte que se encuentran es el más

pequeño y a partir de ahí en orden creciente, se van encontrando los siguientes bytes para operar.

Big-endian: El byte más significativo se guarda en la dirección de memoria

menor. Son de este tipo los procesadores motorola, el superSparc de Sun, el

Tema 4

Mecanismos de invocación

1. El mecanismo de invocación remota

2. Codificación de datos para el intercambio

3. Formatos de codificación de

datos 4. Invocación de operaciones

remotas (RPC) 5. Tipos de protocolos RPC

Page 77: sistemas operativos, redes y bases de datos

12 · Arquitectura de Sistemas Distribuidos

sistema operativo Macintosh y sirve para saber rápidamente si un número es

positivo o negativo, se guarda tal como se escribe.

Cada valor de datos necesita una etiqueta que aporta información para delimitar e identificar el valor, suele indicar el tipo de valor, la longitud o la

arquitectura (endian).

Otra duda es la codificación textual o binaria; con la primera todo se

convierte a texto, es una opción muy legible y se prefiere por su facilidad para analizar por si algo falla, pero tiene el inconveniente que se usan muchos bits de

información para expresar algo corto y por tanto la velocidad de ejecución y la transmisión por la red se resienten.

Por el contrario, con la codificación binaria no se busca legibilidad, sino

eficiencia, minimizando el número de bits que ocupa la información y así minimizando el tiempo de conversión de datos.

Para delimitar los elementos a codificar hay varios opciones habituales:

Longitud fija: es compacta e inflexible, precisamente el efecto 2000

se debió a este tipo de codificación. Solo es recomendable para datos que tengan siempre la misma longitud, pues en otro caso o

desperdiciamos mucho espacio o corremos el riesgo de no poder expresar algún dato.

Por longitud: Se debe conocer la longitud con antelación y así al

receptor lo primero que le llega es la medida exacta del dato, lo malo es que el emisor debe recorrer todo el dato para poder enviar esta información lo

primero de todo.

Delimitada: En lugar de calcular la longitud, se reserva un símbolo para separar

datos (en el ejemplo lateral es “;”. Por longitud a fragmentos: Cuando se desconoce la longitud total del dato se

utiliza para ser menos lesivo para el emisor; esto posibilita que los datos

comiencen a emitirse antes y que el productor pueda ahorrar memoria dedicada a mantener datos preparados para el envío.

Como ya hemos dicho anteriormente, para expresar los datos solemos necesitar una etiqueta que distingue su presencia del resto de datos, la longitud del

mismo (si no se usan delimitadores) y el valor que tiene. En general, para minimizar la información que se envía por la red podemos usar varios mecanismos:

Si todos los datos de un conjunto aparecen siempre y en el mismo orden, la

etiqueta se puede omitir.

Si la longitud la conocen de antemano los participantes en la comunicación,

también se puede omitir.

Si los participantes conocen de antemano el valor por defecto que suele tomar

el dato, también se puede omitir.

3. FORMATOS DE CODIFICACIÓN DE DATOS

Tenemos varios formatos para codificar los datos que

estudiaremos a continuación: XML (el único textual, el resto son binarios), XDR, ASN.1, Network data representation, Common data

representation y serialización de objetos java.

XML

Es el único sistema que representa datos en forma textual, no siendo una representación nada compacta (como se ve en la tabla lateral), pero

sí que muy informativa y fácil de entender.

Formas de delimitar datos

XML

<?xml version=“1.0”?> <methodCall>

<methodName>buscar</methodName> <params>

<param> <value> <struct>

<member><name>nombre</name><value>Juan </value></member>

<member><name>edad</name><value><i4> 42 </i4></value></member>

</struct></value></param> </params></methodCall>

Page 78: sistemas operativos, redes y bases de datos

Arquitectura de Sistemas Distribuidos · 13

TEMA

External data representation (XDR)

Soporta todos los tipos del lenguaje C, define la forma canónica intermedia, no usa etiquetas y utiliza big-endian.

Abstract suntax notation 1 (ASN.1)

Su formato es [etiqueta, longitud, valor], si ocupa menos de 127 bits,

ocupa 1 byte, utiliza big-endian.

Network data representation Adoptado por Microsoft para invocación remota binaria; el emisor envía en

su orden endian preferido y el receptor se encargará de arreglarlo, las etiquetas se indican en cada mensaje, pero los datos no las llevan.

Common data representation (CDR) Definido en Corba 2.0 permite representar tanto big como little-endian.

Los valores se transmiten en el orden del emisor: se envía etiqueta de arquitectura, pero no se envían etiquetas de tipo pues es implícito: el

emisor y el receptor ya lo han acordado previamente.

Serialización de objetos Java

Es específico para el lenguaje Java.

En general la ventaja principal de XDR es su simplicidad, pues usa enteros de longitud fija y todos los datos ocupan múltiplos de 4 bytes, los más pequeños se

redondean con bits a 0.

CDR es más complejo que XDR y permite seleccionar entre big y little endian, lo que permite ahorrar conversiones entre máquinas.

ASN.1 es más ineficiente en espacio y codificación; el mecanismo de empaquetado de tipos y longitudes hace que requiera más instrucciones para

procesar los datos.

Por último, XML ocupa mucho más espacio, el código para (des)codificar es más complejo y lento, pero su forma textual hace que sea muy fácil de depurar.

4. INVOCACIÓN DE OPERACIONES REMOTAS (RPC)

La invocación de operaciones remotas exige un protocolo mucho más ordenado que a nivel local, y suele tener 4 fases:

Recogida del proceso.

Envío de los datos por la red.

Selección del proceso.

Invocación de la petición

Y todo esto x2 para devolver los resultados, claro. Esta comunicación podría realizarse por TCP pero como tiene bajo rendimiento para transferencias breves no

sabemos si es lo más adecuado.

Los principales problemas que surgen al convertir una llamada local en remota son:

Gestión de la memoria y referencias: Todo esto es muy problemático, en

especial los apuntadores. Estas referencias a espacios de memoria local que a

veces no tienen longitud definida son poco propensos a ser eficientes en

invocaciones remotas. Tratamiento de errores: Puede fallar además del cliente, la red o el servidor,

y el cliente debe poder reaccionar, reenviando la información si el fallo es

temporal o informando del error cuando no se pueda solucionar. El tratamiento de estas situaciones se hace con construcción de excepciones, como en Java o

C++.

XDR

Common Data Representation

Page 79: sistemas operativos, redes y bases de datos

14 · Arquitectura de Sistemas Distribuidos

Garantías de ejecución: No es lo mismo que la invocación falle a la ida, que

falle a la vuelta. Para diferenciarlas se pueden ofrecer garantías de entrega.

5. TIPOS DE PROTOCOLOS RPC

Veamos algunas características muy someras de los distintos protocolos

RPC:

ONC-RPC: Basado en los tipos de datos del lenguaje C, se ha popularizado por

su uso en NFS.

Corba, DCOM: Desarrollado por la Open Software Foundation y adoptado por

Microsoft. RMI (Remote method invocation): Es el mecanismo de invocación remota de

Java, y sirve para indicar métodos de otros objetos dentro de la misma o en

otra máquina virtual; en este último caso los objetos deben declarar que implementan la interfaz remote y también la excepción

java.rmi.remoteException para el tratamiento de excepciones. Es el método

más sencillo porque originariamente ya estaba pensado para la invocación remota y es un método muy homogéneo

HTTP (Invocación sobre web): Fue concebido como un mecanismo de

petición/respuesta en el que se intercambian mensajes y se invocan métodos predefinidos (get, put…). Con la aparición del servidor HTTPD se definió un

mecanismo simple CGI (interfaz común de pasarela) para invocar distintos

comandos al estilo Unix. SOAP (Simple object access protocol): Es un protocolo para intercambiar en la

web datos estructurados y con tipo asociado; puede combinarse con protocolos

y formatos como MIME, SMTP y HTTP, para aplicaciones como RPC y mensajería.

Page 80: sistemas operativos, redes y bases de datos

Arquitectura de Sistemas Distribuidos · 15

TEMA

TEMA 5 ARQUITECTURA DE APLICACIONES WEB

1. CARACTERÍSTICAS DE LA DEMANDA DE PÁGINAS WEB

El tráfico web es el responsable de un buen porcentaje del tráfico en

Internet (73%) y no parece que vaya a tender a disminuir; pero lejos de ser un flujo de tráfico constante es muy voluble y cambiante. Un mismo sitio puede recibir

muy pocas visitas durante mucho tiempo y, de repente, recibir más peticiones de las que puede servir (tráfico a ráfagas); además dentro de un mismo sitio web, la

frecuencia de acceso a documentos sigue la distribución de Zipf, que fija

logarítmicamente esta distribución, pero que a grandes rasgos indica que unos pocos documentos copan casi todos los accesos, mientras que la mayoría apenas

son visitados; podemos observar en la figura lateral esta distribución de popularidad de Zipf en su formato logarítmico y lineal.

Como resumen podemos decir que los distintos estudios del tráfico en web

han arrojado las siguientes caracteríticas

El tamaño medio de un objeto es de 10-15 Kbytes, aunque también existen

documentos de varios Megabytes pero comparativamente son los menos.

La mayoría de los accesos a la web son por objetos gráficos.

Una página html incluye una media de 10 imágenes y múltiples enlaces a otras

páginas. El tráfico web es a ráfagas, por lo que valores medidos con medias durante

decenas de segundo son poco fiables.

Se cancelan un 5-10% de los accesos web antes de finalizar.

Es importante probar el rendimiento de un servidor para comprobar que todo funciona correctamente; así evitaremos la degradación del servicio (responde

muy lentamente por exceso de peticiones o tráfico) o situaciones críticas (sobrecargas que hacen que no responda). Para esto la mayoría de los servidores

web disponen de herramientas de visualización y archivos log que almacenan todos los sucesos y peticiones que reciben.

2. ORGANIZACIÓN DE LAS APLICACIONES EN SERVIDORES WEB

La organización de un servidor web requiere conocer algunos términos:

Proceso: La unidad más pesada de la planificación de tareas que ofrece el

sistema operativo. No comparte espacios de direcciones ni recursos

relacionados con ficheros. Flujo: La unidad más ligera de planificación de tareas que ofrece el sistema

operativo. Como mínimo hay un flujo por proceso, y si hay más de uno,

comparten la misma memoria y recursos de archivo. Fibra: Flujos gestionados por el usuario con cambios de contexto en

operaciones de entrada/salida.

Ahora bien, se pueden combinar procesos, flujos y fibras de forma única o múltiple, dependiendo del tipo de servidor web que queramos construir. En

general, los modelos con muchos procesos son costosos de memoria y de carga; en servidores de alto rendimiento, los modelos con flujos parecen mejores porque son

muy rápidos atendiendo peticiones, aunque son poco portables. En máquinas con un único procesador los modelos con un solo flujo funcionan bien, en máquinas

multiprocesador, es necesario usar múltiples flujos o procesos para aprovechar el

hardware. En definitiva, como todo depende del hardware que tengamos y del tipo de

servidor web que queramos montar, lo mejor es decantarse por un software

Tema 5

Arquitectura de aplicaciones web

1. Características de la demanda

de páginas web 2. Organización de las

aplicaciones en servidores web

3. Servidores Proxy-caché web 4. Contenidos distribuidos

Distribución de Zipf Logarítmica y lineal

Page 81: sistemas operativos, redes y bases de datos

16 · Arquitectura de Sistemas Distribuidos

modular, como Apache 2.0 que permite con su módulo de gestión de procesos

seleccionar en la instalación el tipo de modelo que queramos ejecutar.

Como modelos de organización encontramos:

CGI: Common gateway interface, es la interfaz común de

pasarela, un estándar para proporcionar una interfaz web a programas que se ejecutan en cada petición. Cada petición recibe

los datos de entrada por la entrada estándar y genera una

respuesta por la salida estándar. Es un procedimiento que consume muchos recursos y es lento.

FastCGI: Pretendía resolver problemas de velocidad y recursos,

principalmente permitiendo que un solo proceso cargado vaya sirviendo peticiones sin descargarse. Los CGI y FastCGI no

pueden interactuar con el corazón del servidor (por ejemplo

generando logs), para lo que existen alternativas como las APIs de extensión de cada servidor, que son muy prácticas, pero son

extensiones no portables (únicas para cada servidor), con complejas de desarrollar y mantener, e introducen riesgo de

seguridad en el servidor.

Servlet Java: Es una extensión gráfica del servidor que se puede

cargar dinámicamente en éste para extender la funcionalidad del servidor web. Son portables, potentes, eficientes, seguras y se

integran perfectamente con el ervidor.

3. SERVIDORES PROXY-CACHE WEB

Un Proxy es un servidor intermediario que acepta peticiones http de

clientes u otros intermediarios y genera a su vez peticiones hacia otros intermediarios o hacia el servidor web destino. Actúa como servidor del cliente y

como cliente del servidor. Aprovechando que tanto la petición del cliente como el resultado del

servidor pasan por este intermediario, se puede aprovechar para ofrecer algunas

funciones:

Control de acceso a contenidos: El Proxy consulta que la página solicitada esté

permitida por la organización. Control de seguridad: El intermediario genera peticiones que salen a Internet,

lo que oculta información y evita ataques directos sobre las máquinas internas

de la organización.

Adaptar el contenido: Puede también adaptar los objetos que vienen del

servidor a las características del cliente: teléfonos móviles, PDA, ajustando el tamaño y peso de los objetos.

Aprovechar peticiones reiteradas: y ser usado como Proxy-caché, que es lo que

más frecuentemente se hace. El intermediario guarda una copia de los objetos pedidos al servidor, así se puede ahorrar tráfico y peticiones al servidor,

sirviéndolas directamente cuando se le vuelvan a pedir.

Como esta última función se ha extendido mucho, se define una nueva

cabecera en el entorno http para controlar este tipo de peticiones, por ejemplo que un determinado objeto no sea almacenable, definir el tiempo de almacenamiento

del objeto (expiración), petición obligatoria del objeto al servidor, etc. Su uso puede producir una reducción del tráfico de la red y en el tiempo de

espera del usuario para recibir los contenidos; actualmente los Proxy-caché son

objetos pasivos, pero se han propuesto mejorar para hacerlos más activos: acumular documentos de interés en horas de bajo tráfico para tener el contenido

preparado en las horas de tráfico pico; traer páginas de Internet que con gran probabilidad un usuario va a consultar a continuación, etc, pero estos futuros

Organización de aplicaciones web

CGI – FastCGI - APIs - Servlet Java

Page 82: sistemas operativos, redes y bases de datos

Arquitectura de Sistemas Distribuidos · 17

TEMA

cambios quizá solo supongan un malgasto de los recursos de comunicación sin

llegar a ser realmente efectivos y prácticos. Cuando varios Proxy-caché cooperan se forma una jerarquía, y si están al

mismo nivel hablamos de hermanamiento; quizá un Proxy-caché no contenga un documento que se le ha pedido y en lugar de pedirlo al servidor, lo pida a un

hermano. El problema es que si un Proxy-caché tiene muchos hermanos, genera

tantas peticiones como hermanos tiene y puede suponer una mayor saturación de la red en un intento por ahorrar; un intento de solucionarlo es utilizar los llamados

caché-digest, es una tabla hash con la información de qué objetos hay en la memoria de trabajo de cada Proxy y que los hermanos piden periódicamente entre

sí para estar actualizados, así cuando tienen una determinada petición, se la hacen al hermano que ya saben que tiene la respuesta.

El problema que aparece ahora es que es muy posible que muchos hermanos

guarden la misma información, porque ya sabemos que las peticiones siguen la distribución de Zipf. Para solucionarlo a su vez apareció el CARP (Caché array

routing protocol), que mediante una función de hash se calcula a qué servidor pedir determinada información, con lo que el contenido no se repite en todos los Proxy-

caché. CARP tiene problemas cuando aparece o desaparece un servidor Proxy-

caché ya que debería cambiar el algoritmo de elección y los contenidos que antes se pedían a un servidor determinado, ahora se repartirá entre otros.

4. CONTENIDOS DISTRIBUIDOS

Las aplicaciones que ofrecen contenidos en Internet se enfrentan al reto de la escala: un solo servidor ante eventualmente millones de personas que pueden

pedirle sus servicios todos a la vez: el proveedor de información debe poner tantos recursos como audiencia pueda tener. Para poder abarcar toda la audiencia, existen

diferentes métodos para repartir peticiones entre distintas máquinas:

Espejos o mirrors con un programa que redirige la petición http a la mejor

réplica.

Hacer que el servicio de nombres DNS devuelva diferentes direcciones IP.

Redirección en el nivel de transporte: un encaminador mira los paquetes IP de

conexiones TCP hacia un servidor web y las redirige a la máquina interna menos cargada.

Redirección en el nivel de aplicación: un encaminador mira las conexiones http

y puede decidir a qué réplica contactar en función del URL solicitado. Mandar todas las peticiones a un Proxy interno que responda o con contenido

previamente guardado en la memoria o que pase la petición a uno o varios

servidores internos.

Las redes de distribución de contenidos (CDN) son empresas que han

instalado máquinas en muchos lugares del mundo y algoritmos para decidir qué máquina es la más adecuada para atender peticiones según la ubicación del cliente

y la congestión de la red.

Texto elaborado a partir de:

Arquitectura de sistemas distribuidos Leandro Navarro Moldes, Joan Manuel Marquès i Puig

Junio 2006

Page 83: sistemas operativos, redes y bases de datos

ADMINISTRACIÓNDE

SISTEMASOPERATIVOS

Page 84: sistemas operativos, redes y bases de datos

Licencia del documento:

Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España

Usted es libre de: -copiar, distribuir y comunicar públicamente la obra -hacer obras derivadas

Bajo las condiciones siguientes: -Reconocimiento: Debe reconocer los créditos de la obra de la manera

especificada por el autor o el licenciador (pero no de una manera que sugiera quetiene su apoyo o apoyan el uso que hace de su obra).

-No comercial: No puede utilizar esta obra para fines comerciales. -Compartir bajo la misma licencia: Si altera o transforma esta obra, o

genera una obra derivada, sólo puede distribuir la obra generada bajo una licenciaidéntica a ésta.

http://creativecommons.org/licenses/by-nc-sa/3.0/es/

Realizado por Jorge Lópezpara la web www.sagraramirez.es

Para cualquier corrección, aclaración o si quieres el documentoen formato editable (Open Office), ponte en contacto por correo

con la dirección [email protected]

Versión del Documento 1.0.0 24 de diciembre de 2010

Page 85: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

1-Particiones de disco duro y sistemas de archivos

Particiones de discoUna partición de un disco es cada una de las divisiones que se pueden realizar en un disco durofísico (o cualquier otro dispositivo de almacenamiento), de modo que el sistema operativo lasidentifica como unidades independientes. De este modo podemos hacer creer al ordenador quetenemos varios discos cuando en realidad sólo tenemos uno.

Tipos de particiones

Existen tres tipos de particiones: primarias, lógicas y extendidas.

Particiones primarias:Originariamente en los sistemas Windows cada disco duro sólo podía tener 4 particiones,denominadas particiones primarias. Se podrían definir como las particiones principales de la unidad.Contienen un único sistema de archivos, es decir, equivaldrían a una unidad para el ordenador. Enlos sistemas basados en windows la partición de arranque, que contendrá el sistema operativo, debeser una partición primaria. Cuando se formatea todo un disco duro con una sola partición, debe serprimaria.

Particiones extendidas:Para poder crear más de las 4 particiones en un disco se crearon las particiones extendidas.Sustituirían a una de las primarias de un disco. Estas particiones no contienen un sistema dearchivos (como las primarias) ya que sirven para crear otras particiones dentro de ellas y no paraalmacenar datos.

Particiones lógicas:Son cada una de las divisiones de una partición extendida. Como las primarias, tendrá un sistema dearchivos propio, pero no podrá arrancarse el sistema operativo en ordenadores con windows.

Representación gráfica de un disco particionado (fuente: wikipedia.org)

En esta imagen cada recuadro blanco representa algún sistema de archivos. Los espacios en grisrepresentan los espacios sin particionar del disco, que no serían accesibles (huecos en el disco). Lasparticiones rodeadas por líneas moradas o violetas representan las particiones primarias. Lasparticiones rodeadas por bordes rojos representan la partición extendida (que es un tipo de particiónprimaria); y en su interior, se encuentran las particiones lógicas, rodeadas por los bordes de color

Page 86: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

verde. Como vemos, estamos en el límite de 4 particiones entre primarias y extendidas, y éstaúltima contiene a todas las particiones lógicas.

Sistemas de archivos:Los sistemas de archivos o ficheros son la estructura con la que se guardan los archivos en el disco.Nos indican cómo se almacenan los documentos, carpetas... en la unidad de almacenamiento (o enuna de sus particiones). Existen distintos sistemas de archivos, algunos propios de Windows y otrosde Linux. Los sistemas más utilizados son:FAT y FAT32: Usado por los primeros sistemas de Microsoft (DOS yWindows). También estásoportado por Linux. Hoy en día sólo se suele utilizar en unidades extraibles (como pendrives). Suprincipal limitación es el tamaño de las unidades (en FAT32 hasta 2TB) y que no soporta archivosmuy grandes (como máximo 4 GB).NTFS: Sistema utilizado en la actualidad por windows. Elimina la mayor parte de sus desventajaspero no es recomendable para unidades pequeñas ya que necesita mucho espacio para datos decontrol. Microsoft permite convertir una partición FAT en NTFS sin perder los datos, pero no alrevés.Ext2, ext3 y ext4 (extended filesystem 2, 3 y 4): son distintas versiones de uno de los sistemas dearchivos utilizados por linux. Soportan cada vez mayor tamaño de archivos y de disco, siendosuperiores los límites a los de los sistemas de windows. Para poder ver particiones con este formatoen windows es necesario instalar unos drivers especiales, ya que por defecto Microsoft no losoporta.XFS: es otro de los sistemas de archivos más utilizados en Linux. Soporta journaling: mantiene unregistro de todos los ficheros que se van a modificar antes de hacer los cambios, de modo que si hayun problema y el ordenador se reinicia, podría acabar las modificaciones que se hubieran quedado amitad.Swap o área de intercambio: no es un sistema de archivos propiamente dicho. Simplificando mucho,las particiones con este formato se usan en linux como ampliación de la memoria RAM. Cuando lamemoria se llena en este espacio del disco duro se almacena la información de los procesos menosutilizados. Su función es similar a la memoria virtual de los sistemas windows, pero con unapartición independiente en vez de un fichero en la partición del sistema.

Las principales razones para utilizar particiones en un disco son:-Utilizar discos más grandes de los soportados por el sistema operativo: aunque esto ya no suele sernecesario, hace unos años se podían comprar discos duros de tamaño mayor que el tamaño másgrande que podía soportar el sistema operativo. Por esta razón, si no se creaban particiones, habíauna parte del disco duro que no podía ser utilizado.-Poder separar información de sistema de los datos de usuario: podríamos instalar el sistemaoperativo en una partición y guardar nuestros datos en otra. De este modo si necesitáramosreinstalar el sistema operativo porque hubiera quedado dañado podríamos formatear esa partición(borrando todos los datos que incluya) sin perder nuestros ficheros, que se encontrarían en otrapartición.-Instalar varios sistemas operativos en el mismo ordenador: cuando queremos tener más de unsistema operativo distinto en un ordenador (por ejemplo Linux y Windows) es necesario tener unapartición distinta para cada uno de ellos. Después podríamos elegir con qué sistema arrancar elordenador usando un gestor de arranque (tal y como veremos más tarde).-Necesidad del sistema operativo: en algunos sistemas linux se recomienda tener particionesespecíficas para distintas funciones, como la partición de intercambio (swap) o una partición paraarranque o para backup de datos.

Page 87: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

2-Creación de particiones

Para crear particiones en un disco duro nuevo o modificar las existentes es necesario un programade particionado. Existen programas propietarios (como Partition Magic) o libres (como gparted),pero el funcionamiento de todos ellos es similar.-Sobre un disco vacío habría que elegir cuántas particiones queremos hacer, indicando el tamaño yel sistema de archivos de cada una de ellas. También deberíamos definir si se trata de una particiónprimaria o lógica (el sistema suele crear la partición extendida cuando hay varias lógicas contiguas).-Sobre un disco en el que ya tenemos datos, podríamos modificar el tamaño de las particiones ocrear nuevas siempre que dispongamos de espacio libre. En este caso el proceso puede ser lento yaque a veces es necesario mover datos que estaban físicamente en un lugar del disco a otro que no seestuviera usando. Los cambios en las particiones de discos que ya tienen información deben hacersesin que se estén utilizando los datos, es decir, después de arrancar el ordenador y antes de iniciar elsistema operativo. Los programas de particionado que funcionan sobre el sistema operativo teobligan a reiniciar para realizar todos los cambios que necesarios. Modificar las particionesexistentes es un proceso crítico, por lo que un problema en el ordenador en ese momento (porejemplo si se va la luz) puede provocar una pérdida de todos los datos del disco. Por esta razón serecomienda hacer una copia de seguridad antes de realizar este tipo de modificaciones.

Como ejemplo, vamos a ver cuáles serían los pasos a realizar para crear las particiones necesariasen un disco duro antes de instalar linux si ya tenemos instalado Windows.

1.- Arrancar el programa de particionado, por ejemplo con un live-CD (un CD que puede arrancar elordenador por sí mismo) que nos permite no utilizar el sistema operativo instalado en el ordenador.El programa nos dirá qué particiones tenemos en el disco duro, su formato, su tamaño y el espacioutilizado.

2.- Tenemos que redimensionar la partición existente, donde tenemos instalado windows, para dejarespacio para las nuevas particiones. El programa nos permitirá hacerla tan pequeña como queramoshasta el límite del espacio utilizado en ella.

Page 88: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

3.- Creamos una primera partición para los datos de linux en el espacio que hayamos dejado libre.Podemos usar por ejemplo el formato ext4. Elegimos su tamaño, la posición (al final o al principiodel hueco). También podemos decidir si queremos que sea una partición lógica o primaria, así comoelegir el “punto de montaje” (lugar del sistema de archivos donde accederemos a los datos de esapartición. Este punto lo explicaremos más adelante).

4.- Creamos otra partición como área de intercambio (swap) para linux. Históricamente se ha dichoque esta partición debe ser del doble de tamaño de la RAM, pero hoy en día con el aumento de lamemoria RAM en los equipos es suficiente con elegir el mismo tamaño que la RAM que tengamosinstalada.

Notar que el tamaño posible para la partición es el que dejamos libre al crear la partición ext4

5.- Podemos crear más particiones. Por ejemplo una partición FAT para datos que podría serutilizada por los dos sistemas operativos, o una segunda partición de linux para los datos de usuario(que montaríamos en /home).

Page 89: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

6.- Por último, aplicamos los cambios. Hasta este momento no se ha realizado ningunamodificación en el disco, por lo que podríamos haber cancelado la operación y dejarlo como estaba.Es ahora cuando el programa realizará las modificaciones necesarias, una a una:

-primero moverá los datos de la partición de windows que estén en la parte final del disco,donde deben ponerse las nuevas particiones, a huecos no utilizados en la parte delantera.

-después cambiará el tamaño de la partición de windows-luego creará todas las particiones nuevas que hayamos indicado.

Después de realizar todos estos pasos podremos seguir con la instalación de linux o reiniciar paraarrancar windows. En este último caso, si hubiéramos creado alguna partición con formatoaccesible en windows (FAT o NTFS) nos informaría que ha encontrado un nuevo disco y leasignaría una letra a esa unidad vacía.

Imagen final de las particiones y pasos a realizar.

Page 90: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

3-Gestores de arranqueUn gestor de arranque es un programa que nos permite elegir entre todos los Sistemas Operativosque tenemos instalados en el ordenador cuál arrancar. No hay que confundirlo con el Sector deArranque o Master Boot Record.

El Master Boot Record es el primer sector del disco duro. Almacena un pequeño gestor de arranquey la tabla de particiones del disco, en la que indica las características de las cuatro particionesprimarias (o extendidas) que puede haber en el disco. Para cada partición indicaría su tamaño, eltipo de sistema de archivos, el tamaño del cluster (mínima unidad utilizable en el disco), sulocalización dentro del disco y si es la partición de arranque (la primera a la que se accederá paraarrancar el disco duro).

En el arranque del ordenador se siguen los siguientes pasos:-En la BIOS del ordenador se indicará el orden en el que deben buscarse los dispositivos para elarranque. Es lo que se denomina secuencia de buteo. Intentará arrancar desde cada uno de losdispositivos indicados. Si no puede, pasará al siguiente (el caso típico es intentar arrancar desde CDo un pendirve, y si no hay ninguno, pasa a arrancar de disco duro).-Si no hubiera ningún dispositivo previo, se arrancaría desde el disco duro. En ese caso el ordenadorleería el pequeño gestor de arranque del Master Boot Record. Ahí se indica por qué partición deberáseguir arrancando: podría ser la única con un sistema operativo instalado o aquella en la quetenemos el gestor de arranque que nos permitiría elegir qué sistema vamos a utilizar.

El gestor de arranque, como hemos dicho, permitiría elegir el sistema operativo que queremos quearranque entre todos los que tenemos instalado. Algunos de los gestores de arranque más utilizadosson LILO o GRUB. Éste último es el que utiliza lliurex y es el que vamos a estudiar.

La instalación de GRUB se hace de forma automática al instalar lliurex. Por si mismo detecta todoslos sistemas operativos que se pueden arrancar en el ordenador (por ejemplo si tuviéramos windowspreviamente instalado o algún otro linux) y genera un menú que nos permite elegir uno de ellos.También permitiría elegir distintas opciones dentro de esos sistemas operativos instalados (comoarrancar a prueba de fallos).

Para modificar posteriormente GRUB tendríamos que arrancar lliurex e ir a la opciónSistema>Administración>Administración de Arranque

Page 91: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Opciones de arranque

En esa pequeña aplicación podríamos modificar el funcionamiento de GRUB. Por ejemplo podemoselegir qué sistema operativo queremos que arranque por defecto (si no modificamos nada,arrancaría lliurex) o el tiempo de espera para que ocurra este arranque automático. También podríamos modificar manualmente el fichero de configuración de grub(/boot/grub/grub.cfg), pero no es recomendable si no tenemos amplios conocimientos de sufuncionamiento.

Hay que tener en cuenta que la instalación de windows sobreescribe el Master Boot Record y haceque arranque directamente su partición. Por esa razón, si queremos instalar en un ordenadorwindows y linux debemos instalar primero windows. Del mismo modo, si tenemos que reinstalarwindows (por algún fallo en el sistema) GRUB quedará inutilizado. Si ocurre esto, deberíamosreinstalar el gestor de arranque.Para reinstalarlo deberíamos arrancar de nuevo con un liveDVD (como hicimos al instalar lliurex),montar la unidad de disco donde tenemos lliurex instalado y ejecutar el comando adecuado(sobrepasa el contenido de este manual). Al reiniciar el ordenador arrancaría lliurex directamente.Tendríamos que modificar GRUB, como se ha explicado antes, para añadir el sistema windowsnuevo que borró el gestor.

Page 92: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

4-Sistema de archivos en windows: unidades, directorios,archivosWindows estructura la información de forma jerárquica. Dentro de esta estructura podemosdiferenciar archivos, directorios y unidades.

ArchivosLos archivos son conjuntos de bits almacenados en un dispositivo. La organización de los bitsdentro del fichero dependerá del tipo de archivo con el que estemos trabajando. Se puedendiferenciar 2 tipos de archivos: los ejecutables, que pueden funcionar y realizar instrucciones en elordenador por si mismos; y los no ejecutables, que necesitarían un ejecutable para poder ver sucontenido (por ejemplo un documento de texto o una imagen).Los archivos se identifican en windows con un nombre y una extensión separadas por un punto. Enlos primeros sistemas DOS (origen de windows) los nombres sólo podían tener 8 caracteres y lasextensiones 3. Las últimas versiones de windows permiten nombres y extensiones de mayortamaño, aunque por compatibilidad las extensiones suelen usarse todavía con 3 caracteres. Laextensión se utiliza para identificar el tipo de archivo, es decir, la información que está guardada enél, la estructura interna, el programa con el que se abrirá...Los sistemas windows no diferencian mayúsculas y minúsculas en los nombres de archivo odirectorio, por lo que se pueden usar unas y otras indistintamente para referirnos a un archivo.

DirectoriosLos directorios se utilizan para organizar la información. Es una agrupación de archivos de datos ode otros directorios. En los directorios se almacena un listado de los archivos y directorios quecontiene así como la información de localización de los mismos en el discoDesde la aparición de los sistemas gráficos los directorios se denominan también carpetas ya que esel icono que se ha elegido para representarlos.

UnidadesLas unidades son cada uno de los dispositivos de almacenamiento de que dispone el ordenador.Windows identifica cada unidad con una letra mayúscula seguida de 2 puntos (:). Aunque lasúltimas versiones de windows permiten cambiar la letra de una unidad, las letras más habituales yque se configuran por defecto son:A: Para la disquetera (La letra B: se reserva para una segunda disquetera, aunque ahora es pocohabitual)C: Para el disco duro principal, donde está instalado el sistema operativoD: Para el CD o el segundo disco duro.A partir de aquí, el sistema operativo va asignando las letras por orden: otros discos duros,grabadora de DVD/CD, lectores de tarjeta... Al introducir un pendrive le asigna la letra posterior ala última utilizada.Por último, para las unidades de red (acceso a carpetas/unidades compartidas en otro ordenador) sesuelen elegir las últimas letras del abecedario: Z, Y, X...

Page 93: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

RutaLa ruta es la forma de referenciar un archivo o directorio. Es una cadena de texto que no da toda lainformación necesaria para poder encontrar ese recurso en el ordenador. En los sistemas windows,la estructura de la ruta de un archivo o directorio es la siguiente:-Primero el identificador de la unidad seguido de \, que hace de carácter separador.-Después toda la lista de carpetas dentro de esa unidad a las que habría que entrar para llegar alrecurso. Después de cada directorio se vuelve a añadir el carácter separador \ (en la barra dedirecciones del explorador de windows se puede ver la ruta hasta este punto).-Al final el nombre del archivo (con la extensión) o el nombre del directorio seguido de \ (parasaber que se trata de un directorio y no un archivo.Por ejemplo, el programa de la calculadora tiene normalmente la siguiente ruta en windows:C:\WINDOWS\system32\calc.exeDe donde podemos deducir que el programa está en la unidad C: (que suele indicar el disco duro);dentro de ese disco en el directorio Windows y dentro en el directorio System32; y el programa sellama calc.exe. Recordad que podemos poner WINDOWS o Windows para referirnos al mismodirectorio ya que windows no diferencia mayúsculas y minúsculasY el directorio “mis Documentos” de un usuario podría tener la siguiente ruta (acabada en \ porquese refiere a un directorio y no a un fichero:C:\Documents and settings\1bach\Mis Documentos\

Captura del explorador de windows en la que podemos ver la ruta hasta el directorio. A ella habríaque añadir la última barra y el nombre del archivo.

Principales directorios en los sistemas windows:Los principales directorios de un sistema windows son (normalmente en la unidad C:)-Windows: guarda el sistema operativo y todos los programas que se instalan con él, como lacalculadora o paint.-Documents and settings: guarda los ficheros y la configuración de los usuarios. Dentro de estedirectorio hay un directorio por usuario, otro para todos los usuarios denominado “All Users” (loque se añada/cambie ahí afectará a todos, como los programas del menú inicio) y otro para elusuario por defecto llamado “Default User” (que es la configuración inicial que se copia a losnuevos usuarios en el primer arranque de sesión)

Page 94: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Directorios de Documents and Settings

Dentro del directorio de cada usuario encontraríamos, entre otros, carpetas con sus datos (porejemplo Mis documentos o Escritorio) o configuración personal de algunos programas (comoConfiguración Local o Datos de Programa)

Ejemplo de directorio personal

-El ultimo directorio importante es Archivos de programa, donde se instalan todos los programasque no vienen con el Sistema Operativo, como puede ser el Office o el Openoffice, Firefox, Gimp,juegos...

Page 95: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Programas instalados en Archivos de Programa

Page 96: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

5-Sistema de archivos en linux: /, volúmenes, directorios,archivosLinux también estructura la información de forma jerárquica, aunque tiene algunas diferencias conrespecto a Windows. También encontramos archivos y directorios. A las unidades les denominavolúmenes y las trata como un directorio más.

ArchivosLos archivos son conjuntos de bits almacenados en un dispositivo. La organización de los bitsdentro del fichero dependerá del tipo de archivo con el que estemos trabajando. Se puedendiferenciar 2 tipos de archivos: los ejecutables, que pueden funcionar y realizar instrucciones en elordenador por si mismos; y los no ejecutables, que necesitarían un ejecutable para poder ver sucontenido (por ejemplo un documento de texto o una imagen).En linux también son archivos todos los recursos hardware, como puede ser una impresora o undisco duro o cdrom. En este caso, para acceder al dispositivo se accedería al fichero asociado. Porejemplo, para imprimir se podría mandar directamente un fichero de texto al fichero de laimpresora.

Los archivos se identifican en linux con un nombre. A diferencia de windows, pueden llevar unaextensión para ayudar a reconocer su contenido, pero en este caso no es obligatoria. La informaciónsobre el tipo de archivo va incluida dentro del mismo, en la parte inicial del archivo. La extensión,si la hay, sólo sirve para que el usuario sepa el tipo de archivo que se trata pero no para el sistemaoperativo.Otra diferencia con windows, muy importante, es que linux diferencia en los nombres lasmayúsculas de las minúsculas (en inglés se utiliza el término “case sensitive”). Así pues, eldocumento Teoria.odt no sería el mismo que el documento teoria.odt simplemente por el cambio dela T mayúscula a minúscula. Lo mismo ocurriría si el cambio mayúsculas/minúsculas se diera en laextensión.

DirectoriosLos directorios se utilizan para organizar la información. Es una agrupación de archivos de datos ode otros directorios. En los directorios se almacena un listado de los archivos y directorios quecontiene así como la información de localización de los mismos en el discoDesde la aparición de los sistemas gráficos los directorios se denominan también carpetas ya que esel icono que se ha elegido para representarlos.

VolúmenesLas volúmenes en linux equivalen a las unidades de windows: son cada uno de los dispositivos dealmacenamiento de que dispone el ordenador. En linux no se identifican con una letra sino que setratan de un directorio más del sistema. Para acceder a un dispositivo de almacenamiento, linuxdebe “montarlo”: asignarle un directorio dentro de la estructura jerárquica del sistema. Al entrar enese directorio estaríamos entrando en la unidad.En el caso de los dispositivos extraibles (pendrives, disquetes, Cds...) linux suele montarlos en lacarpeta /media/. Por ejemplo, la carpeta /media/disk/ podría referirse a un pendrive. Para extraer eldispositivo habría que “desmontarlo”, proceso por el que desaparecería la carpeta y dejaría de seraccesible.

Page 97: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

RutaLa ruta es la forma de referenciar un archivo o directorio. Es una cadena de texto que no da toda lainformación necesaria para poder encontrar ese recurso en el ordenador. La principal diferencia conwindows es que el carácter separador de los directorios es la barra (/) y no la contrabarra (\), y queno se usan letras para las unidades, que hemos visto que se identificaban como un directorio. En lossistemas linux, la estructura de la ruta de un archivo o directorio es la siguiente:-Primero el carácter /. Al no utilizar letras para las unidades, todos los recursos del sistema parten dela carpeta raíz denominada /.-Después toda la lista de carpetas a las que habría que entrar para llegar al recurso. Después de cadadirectorio se añade el carácter separador /.-Al final el nombre del archivo o el nombre del directorio seguido de / (para saber que se trata de undirectorio y no un archivo).Por ejemplo, el programa de la calculadora en lliurex tiene la siguiente ruta /usr/bin/gcalctoolDe donde podemos deducir que el programa está en el directorio /usr/bin la y el programa se llamagcalctool (sin extensión). Recordad que en linux sí que se diferencian las mayúsculas en losnombres de archivos y directorios, por lo que no sería lo mismo el directorio bin que el directorioBin, o el programa gcalctool y el programa gCalcTool.Y el directorio personal de un usuario podría tener la siguiente ruta (acabada en / porque se refiere aun directorio y no a un fichero:/home/1bach/

inodoUn inodo es una estructura de datos que usan todos los sistemas linux. En esta estructura se guardainformación sobre un fichero o directorio como puede ser el propietario, los permisos, el tipo defichero o la fecha de creación, pero no el nombre. Cada archivo tiene asociado un inodo, aunque elmismo inodo podría ser enlazado por varios archivos (se usa para poder llegar a la mismainformación desde distintos sitios, enlazando con distintos nombres el mismo archivo).Los inodos se crean al formatear la partición. Inicialmente estarán vacíos, y se van llenando amedida que introducimos datos en el sistema de archivos.

Directorios principales en lliurexAl instalar lliurex se crean muchos directorios en el directorio /. En cada uno se suele guardar unainformación específica. Los principales directorios son:/bin y /sbin: programas esenciales del Sistema Operativo/usr/bin: aquí se guardan la mayor parte de los programas que se instalan con lliurex que no sonespecíficos del Sistema Operativo, como las aplicaciones, juegos... Equivaldría a Archivos dePrograma en Windows/etc: se guardan los ficheros de configuración del sistema/home: habrá un directorio por cada usuario. En este directorio se guarda toda la información delmismo (ficheros, escritorio, configuración de programas...). Equivaldría a Documents and settingsen Windows.

Page 98: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Carpeta home

Carpeta de un usuario. Las carpetas cuyo nombre empiezan por punto son carpetas deconfiguración ocultas.

Page 99: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Volúmenes extraibles: disk es la carpeta donde se montan los pendrives. Desaparece aldesmontarla.

/tmp: ficheros temporales. Se suelen borrar al apagar el ordenador.

Page 100: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

6-Tipo de archivos: extensiones principales. Visor binario dearchivosLos archivos son conjuntos de bits almacenados en un dispositivo. La organización de los bitsdentro del fichero dependerá del tipo de archivo con el que estemos trabajando. Se puedendiferenciar 2 tipos de archivos: los ejecutables, que pueden funcionar y realizar instrucciones en elordenador por si mismos; y los no ejecutables, que necesitarían un ejecutable para poder ver sucontenido (por ejemplo un documento de texto o una imagen).Los archivos se identifican de distinto modo en windows y en linux. En windows tienen un nombrey una extensión separadas por un punto. La extensión se utiliza para identificar el tipo de archivo, esdecir, la información que está guardada en él, la estructura interna, el programa con el que seabrirá... En los primeros sistemas DOS (origen de windows) los nombres sólo podían tener 8caracteres y las extensiones 3. Las últimas versiones de windows permiten nombres y extensionesde mayor tamaño, aunque por compatibilidad las extensiones suelen usarse todavía con 3 caracteres.En linux, sin embargo, no es necesario usar una extensión para identificar el tipo de archivo, ya queesa información se guarda dentro del fichero en la parte inicial. De todos modos, suele ponerseextensión para que el usuario sepa el tipo de archivo que se trata.Otra diferencia entre windows y linux es que en linux sí que se tienen en cuenta las mayúsculas yminúsculas en los nombre de fichero (texto.doc, Texto.doc y TEXTO.doc serían 3 ficherosdistintos) mientras que en windows no.

Las extensiones, así pues, son la forma que tiene windows y los usuarios de identificar el tipo dearchivo. Las principales extensiones se pueden ver en estas tablas:

Documentos de suite ofimática:

Tipo de programa Extensión Office Extensión OpenofficeProcesador de texto Word: doc.

Word 2007: docxWriter: odt

Hoja de cálculo Excel: xlsExcel 3007: xlsx

Calc: ods

Presentaciones digitales Power Point: ppt y ppsPower Pont 2007: pptx y ppsx

Impress: odp

Bases de datos Access: mdb Base: odfDibujo vectorial Draw: odg

Otros documentos ofimáticos:

Tipo de archivo ExtensiónFichero de texto txtFichero de acrobat (adobe) pdf

Page 101: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Imágenes:

Tipo de archivo y características ExtensiónImagen de mapa de bits (paint) bmpImagen comprimida jpg (cámaras de fotos) jpgImagen comprimida gif (permite animación) gifImagen formato libre pngImagen de photoshop psdImagen de GIMP xcfImagen vectorial de Inkscape svgImagen vectorial de Corel Draw cdrImagen de escáner tiff

Documentos de audio:

Tipo de archivo y características ExtensiónArchivo de audio comprimido mp3Archivo de ondas (sin comprimir) wavArchivo comprimido de windows wmaÓrdenes para un sintetizador (politono) mid o midi Archivo de audio Real Player (Real Audio) rm/rma/raArchivo libre de audio oggProyecto de audacity aup

Documentos de video:

Tipo de archivo y características ExtensiónVídeo comprimido divx o xvid (MPEG4) aviVideo mpeg2 mpgVídeo de Real Player (Real Video) rm/rmv/rvVideo Quick Time movVídeo de Windows Media wmvMatroska video mkvFlash Vídeo (youtube) flvArchivo libre de vídeo ogg

Page 102: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Programas y documentos de sistema:

Tipo de archivo y características ExtensiónProgramas ejecutables exeArchivo por lotes MS-DOS batAplicación MS-DOS comArchivo de sistema sysLibrería, extensión de aplicación dllDrivers de periféricos ini, drvFuente ttf, fonAcceso Directo (windows) lnk

Documentos comprimidos:

Tipo de archivo y características ExtensiónDocumento comprimido con winzip zipDocumento comprimido con winrar rarOtros documentos comprimidos arj, ace ...

Documentos de Internet:

Tipo de archivo y características ExtensiónPágina web estática html o htmPágina web dinámica phpPágina web dinámica (microsoft) aspHoja de estilos css

Es posible ver la información interna de cualquier fichero. Para ello hay que utilizar unos programasespeciales denominado visores de archivos. Estos programas nos permiten ver todos los bytes quetiene un archivo, tanto en formato hexadecimal como en ASCII (nos muestra los caracteres a losque se corresponden esos bytes).Uno de los programas que nos dan esa información es HxD (http://mh-nexus.de/en/hxd/). Se tratade un programa gratuito que dispone de una versión “portable” que se puede llevar en un pendrive yejecutarlo sin instalarlo en el ordenador.

La parte más importante de un documento suele ser el principio y el final del archivo. En esta partese encuentra la información sobre el tipo de fichero, el programa con el que se ha creado, la versión,el autor, configuraciones del programa con el que se abrirá...

Page 103: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Vista interna de un fichero de openoffice. Se puede ver información de configuración del programa

Vista interna de una imagen de formato BMP (Paint)

Page 104: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

7-Personalización del SO windows: escritorio, ratón,modificación de los accesos directos del menú Inicio para unusuario/todos los usuarios

Personalización del escritorioEn los Sistemas Operativos actuales los usuarios trabajan con una interfaz gráfica. Cada programase abre en una ventana y se utiliza el ratón para trabajar (a diferencia de las consolas que sólopermiten introducir comandos de texto con el teclado). La mayor parte de Sistemas Operativospermiten personalizar el escritorio.Para realizar esa personalización en windows, pulsamos con el botón derecho sobre el escritorio yelegimos la opción Propiedades. Nos saldrá una ventana de propiedades de Pantalla con lassiguientes pestañas:-Temas: modifica el fondo, sonidos, iconos... de forma conjunta. Utiliza unas configuracionespregrabadas por el sistema.

-Escritorio: permite elegir la imagen de fondo de pantalla (o un color plano). Si la imagen es máspequeña que el tamaño de la pantalla se puede poner en el centro, expandir para que ocupe toda lapantalla o poner como mosaico de modo que se repite hasta que se rellena el monitor. Para evitarque al expandir la imagen quede pixelada es recomendable bajar una imagen de tamaño grande (loideal es que la cojamos de la resolución que tengamos puesta en el monitor).Con el botón “personalizar escritorio” podemos elegir si queremos que los iconos de MiPC, MisDocumentos y Mis sitios de red aparezcan en el escritorio. También nos deja modificar esos iconos.

Page 105: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

-Protector de pantalla: permite elegir un protector de pantalla que se activará cuando no usemos elordenador. Podemos poner una contraseña para volver a la sesión (y evitar el acceso de personasajenas al ordenador). Con el botón “Energía” podemos hacer que el monitor se apague para ahorrarenergía, y en el caso de los portátiles evitar que nos consuma más batería de la necesaria.

-Apariencia: permite ajustar la forma (redondeada o cuadrada), los colores de las ventanas y eltamaño del texto. Podemos modificar más opciones con el botón “Efectos...” como hacer los iconosmás grandes (función útil si tenemos una resolución de pantalla grande) o con opciones avanzadasen las que podemos cambiar el color de todas las opciones de las ventanas.

-Propiedades de pantalla: permite elegir la resolución (número de puntos que se representan en lapantalla). A más resolución, más pequeños se verán los iconos ya que cada punto será más pequeño.En el caso de los monitores LCD hay una resolución óptima que se corresponde con los puntosreales que tiene el monitor. Cualquier otra resolución hará que las imágenes se vean deformadas yaque tienen que ajustar los puntos elegidos con los puntos del monitor.Otra opción es la calidad del color, que nos dice cuántos colores distintos podrá representar elmonitor. Hay que intentar dejarlo al máximo soportado.Si el ordenador tiene más de una salida de vídeo (por ejemplo 2 tarjetas gráficas, o una salidaexterna y la pantalla del portátil) nos permite modificar la configuración de ambas salidas. Siestamos trabajando con los dos o más monitores a la vez, pulsando “identificar” nos muestra en lapantalla su número.Las opciones avanzadas permiten modificar configuración propia de la tarjeta gráfica. Nos abrirá elsoftware de configuración del propio fabricante que deberemos haber instalado con los drivers de latarjeta.

Personalización del ratónWindows también soporta personalizar algunas opciones del ratón desde el panel de control. Laprincipal modificación que se puede hacer es cambiar la función de los botones izquierdo y derecho,

Page 106: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

de modo que los zurdos utilicen la mano izquierda y tengan como botón principal el que se activacon el dedo índice.

Otras opciones que permite son la personalización de los punteros (distintos símbolos que puedepresentar el puntero del ratón en función de su uso -selección, ocupado, ajuste, no disponible...), lavelocidad del puntero en función del movimiento del ratón, opciones sobre la rueda del ratón...

Creación de accesos directosLos accesos directos son enlaces a programas o ficheros desde una ubicación o directorio distinto adonde se encuentran en realidad. Nos permiten, por ejemplo, acceder a la mayor parte de programasdel ordenador desde el menú Inicio, o a los que usemos más habitualmente desde el escritorio o labarra de inicio rápido. El acceso directo guarda la ruta absoluta del archivo al que permite acceder,por lo que si cambiamos los nombres de las unidades podría dejar de funcionar correctamente. Losaccesos directos se identifican porque aparece una flecha en la parte inferior izquierda del icono. Suextensión de archivo es lnk (del inglés link->enlace).

Para crear un acceso directo tenemos varias opciones:-Pulsar con el botón secundario del ratón y luego elegir la opción: Enviar a>Escritorio (crear accesodirecto). Una vez en el escritorio podríamos llevarlo a cualquier otra ubicación.-Pulsar el botón secundario del ratón en cualquier ubicación y elegir la opción Nuevo>Accesodirecto... Saldrá una ventana nueva en la que tendremos que escribir la ruta del archivo, o buscarlodándole al botón “Examinar”

Page 107: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

-Arrastrando el archivo y pulsando la tecla “Alt” simultáneamente. Veremos que cambia el icono ynos aparece la flecha indicándonos que se va a crear un acceso directo.

Modificación y personalización de los programas del menú InicioDesde el menú de Inicio podemos acceder a la mayor parte de programas instalados en elordenador. Cada vez que instalamos un nuevo programa se suele introducir un acceso directo eneste menú. Sin embargo es posible crear otros accesos directos o crear carpetas para organizar losque ya tengamos.Todo lo que vemos en la opción Programas del menú Inicio no son más que carpetas y accesosdirectos que se encuentran en un directorio de configuración del ordenador. Para modificarloúnicamente tenemos que ir al directorio y crear las carpetas o accesos directos que queremos. Hayuna carpeta para los programas que aparecerán a todos los usuarios que se encuentra enC:\Documents and Settings\All Users\Menú Inicio\Programas. Lo cambios realizados en esaubicación afectarían a todos los usuarios del ordenador.Si quisiéramos personalizarlo sólo para nuestro usuario, iríamos a la carpeta del mismo nombreubicada en la configuración de nuestro usuario que se encontraría en: C:\Documents and Settings\[NOMBRE DE NUESTRO USUARIO]\Menú Inicio\Programas.

Page 108: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

8-Cuentas de usuario en windows; creación, permisos, gruposTodos los sistemas operativos actuales soportan la creación de usuarios. Cada usuario del sistemarepresentaría a un usuario real que utiliza el ordenador. Las ventajas de utilizar usuarios son, entreotras:-Podría personalizar a su modo su sesión: escritorio, accesos directos, idioma que quiere utilizar,opciones de los principales programas...-Cada usuario dispone de un directorio personal en el que dejar sus ficheros, que podría protegerpara que ningún otro usuario pudiera acceder a ellos.-El administrador del sistema puede asignar distintos permisos a cada usuario, de modo que notodos pudieran instalar programas, cambiar configuraciones importantes del ordenador o usar algúnperiférico (como la impresora o una grabadora).

Windows diferencia 3 tipos de usuario:-Usuarios administradores: son capaces de crear otros usuarios, instalar programas y realizarcualquier cambio en el sistema.-Usuarios limitados: pueden utilizar el ordenador pero no pueden realizar modificaciones comoinstalar programas o cambiar configuración de los programas.-Usuario invitado: es un usuario sin contraseña que utilizarían las personas que no acceden alordenador de forma habitual. No podría realizar ninguna modificación.

Creación, modificación y eliminación de usuarios en windows coninterfaz gráfica

Windows permite crear usuarios con una interfaz gráfica, a través de distintas ventanas en las quevamos eligiendo las opciones que deseemos. Tendríamos que ir al Panel de Control y elegir laopción Cuentas de Usuario. Se abriría una ventana como esta:

Page 109: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Desde esta ventana podemos crear una cuenta nueva o modificar una cuenta existente. Al crear unacuenta nueva nos pedirá el nombre, el tipo de cuenta (administrador o limitada) y por últimopodríamos asignarle una contraseña.Los usuarios limitados sólo pueden cambiar su cuenta, por ejemplo modificando la imagen, lacontraseña y el nombre (es importante recordar que internamente se mantendrá el primer nombreasignado a la cuenta, por ejemplo para la carpeta del usuario en “documents and settings”). En lascuentas administradoras podría además cambiar también el tipo de cuenta (cambiar a limitada) yrealizar los cambios anteriores para cualquier otro usuario. También podría eliminar una cuenta (ytodos los documentos y configuración de la misma).

Usuarios en windows con interfaz de comandosEn windows también es posible trabajar con usuarios (modificar, crear...) a través de una interfaz decomandos. Se usa el comando net user, con modificadores en función de la acción quequeremos realizar. Aquí vamos a ver las opciones más importantes, aunque existen más que sepodrían consultar en el manual del comando. En todos los casos tendríamos que ser usuariosadministradores para poder añadir/modificar/eliminar usuarios.Para crear un usuario se usa el comandonet user nombreusuario [contraseña] /addLa contraseña sería opcional: si no se escribe el usuario sería creado sin contraseña.

Ejemplo de creación de usuario

Para cambiar o crear contraseña se usa el mismo comando, pero si el modificador /addnet user nombreusuario contraseña

Cambio de contraseña de usuario

Por último, para eliminar un usuario se usa el mismo comando sin contraseña y con el modificadorfinal /deletenet user nombreusuario /delete

Page 110: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Eliminación de usuario

Grupos en windowsAdemás de usuarios, en la mayor parte de sistemas operativos es posible crear grupos de usuarios.De este modo, cuando tengamos que asignar permisos para un recurso (quién puede acceder a unacarpeta, o imprimir, o usar un hardware determinado) es más rápido y cómodo asignarlo a un grupoque a varios usuarios. Además, si creamos posteriormente otro usuario lo podemos añadir a ungrupo existente y ya tendrá asignados todos los pemisos del grupo. Un usuario podría pertenecer auno o más grupos, y podrá realizar todas las tareas que se permitan a cualquiera de ellos.

Para crear grupos o asignar usuarios a los mismos hay que ir a la herramienta que proporciona elSistema Operativo. En el caso de Windows XP hay que abrir el Panel de Control, después lasHerramientas Administrativas, y por último acceder a Administración de Equipos. Dentro veremosuna opción que nos permite gestionar los usuarios locales y grupos. [NOTA: No todas las versionesde Windows soportan la creación de grupos. Las más básicas, como la Home Edition, no disponende esta herramienta]

Entrando en grupos podríamos crear un nuevo grupo y asignar después usuarios al mismo.

Page 111: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Ejemplo de grupo con usuarios

Ventana de búsqueda de usuarios para añadir a un grupo

Grupos a través de la interfaz de comandosTambién sería posible añadir un usuario a un grupo a través de la interfaz de comandos. Se usaría elcomando net, el mismo que el usado para crear usuarios, pero con el modificador localgroup. Sinningún parámetro más nos muestra todos los grupos del sistema:

Page 112: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Comando para ver los grupos del ordenador

Para crear o eliminar un grupo se añadiría en la parte final del comando anterior el nombre delgrupo y el modificador /add o /delete.

Creación del grupo Alumnos

Para añadir o eliminar usuarios de un grupo se pondrían el nombre del grupo y después el nombredel usuario, seguido de /add o /delete según corresponda.net localgroup nombregrupo nombreusuario /add para añadir un usuario a ungruponet localgroup nombregrupo nombreusuario /delete para quitar un usuario deun grupo

Ejemplo de cómo añadir y eliminar un usuario de un grupo. En este caso es el grupoadministradores, por lo que el usuario Usuario1 pasaría a ser administrador en vez de usuario

limitado

Page 113: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

PermisosA los usuarios y grupos se le pueden asignar permisos. Estos permisos les permitirían acceder arecursos del sistema. El ejemplo más fácil es permitir el acceso a una carpeta. Habría que pulsar elbotón derecho sobre la carpeta y pulsar propiedades. De la ventana que se abre podríamos elegirqué usuarios locales pueden acceder a la misma desde la pestaña “Seguridad”, y qué tipo depermisos tendrán esos usuarios. [NOTA: no confundir con la pestaña Compartir que se utiliza parapermitir el acceso desde otros ordenadores de la red.]

Desde la pestaña seguridad podríamos permitir el acceso a esta carpeta a otros usuarios delordenador.

Page 114: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

9-Cuentas de usuario en linux: creación, permisos, gruposTodos los sistemas operativos actuales soportan la creación de usuarios. Cada usuario del sistemarepresentaría a un usuario real que utiliza el ordenador. Las ventajas de utilizar usuarios son, entreotras:-Podría personalizar a su modo su sesión: escritorio, accesos directos, idioma que quiere utilizar,opciones de los principales programas...-Cada usuario dispone de un directorio personal en el que dejar sus ficheros, que podría protegerpara que ningún otro usuario pudiera acceder a ellos.-El administrador del sistema puede asignar distintos permisos a cada usuario, de modo que notodos pudieran instalar programas, cambiar configuraciones importantes del ordenador o usar algúnperiférico (como la impresora o una grabadora).

Los sistemas basados en Linux diferencia 2 tipos de usuario:-Usuario administrador o root: es capaz de realizar cualquier cambio en el sistema. Se recomiendausar este usuario cuando sea imprescindible, por ejemplo, para crear un usuario o instalar algúnprograma. Una vez realizada la acción deberíamos volver a nuestro usuario habitual.-Resto de usuarios: podrán realizar más o menos funciones según los permisos asignados, pero, enprincipio, no podrán realizar cambios importantes en el sistema.

Creación, modificación y eliminación de usuarios en linux con interfazgráfica

Linux, igual que windows permite crear usuarios con una interfaz gráfica, a través de distintasventanas en las que vamos eligiendo las opciones que deseemos. Las ventanas y cómo accceder aellas cambiarán según la distribución que utilicemos. En el caso de lliurex deberíamos ir a

Ventana usuarios y grupos

Desde esta ventana podemos crear una cuenta nueva o modificar una cuenta existente. Al crear unacuenta nueva nos pedirá el nombre y la contraseña (a diferencia de windows, lliurex no soportausuarios sin contraseña). También podríamos decir qué permisos le permitimos a ese usuario.

Page 115: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Ventana de creación de usuarios y elección de los privilegios

Los usuarios normales solo podrán modificar la contraseña de su cuenta. El usuario root podríarealizar cualquier cambio en todas las cuentas, incluso eliminarlas.

Usuarios en linux con interfaz de comandosEn linux también es posible trabajar con usuarios (modificar, crear...) a través de una interfaz decomandos. En todos los casos hay que ser superusuario (salvo para cambiar nuestra propiacontraseña).Para crear un usuario se puede usar el comando adduser. Este comando crea un grupo con elmismo nombre que el usuario y pregunta la contraseña y otros datos personales del usuario.

Creación de un usuario con adduser

Page 116: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Para modificar la cotraseña se usa el comando passwd. Si el comando se pone sin ningúnparámetro cambiará la contraseña del usuario actual.

Por último, se podría eliminar un usuario con el comando userdel seguido del nombre delusuario. Con el modificador -r eliminaría también sus datos personalesuserdel -r nombreusuario

Grupos en linuxAdemás de usuarios, en la mayor parte de sistemas operativos es posible crear grupos de usuarios.De este modo, cuando tengamos que asignar permisos para un recurso (quién puede acceder a unacarpeta, o imprimir, o usar un hardware determinado) es más rápido y cómodo asignarlo a un grupoque a varios usuarios. Además, si creamos posteriormente otro usuario lo podemos añadir a ungrupo existente y ya tendrá asignados todos los pemisos del grupo. Un usuario podría pertenecer auno o más grupos, y podrá realizar todas las tareas que se permitan a cualquiera de ellos.La misma herramienta que permite crear usuarios en linux también permite crear y modificargrupos. En lliurex se accede desde la opción Sistemas>Usuarios y grupos. Desde la ventana de

En la ventana que aparece podemos crear grupos nuevos, cambiar sus propiedades y asignarusuarios a los grupos. Cada usuario tiene un grupo principal, pero después puede pertenecer todoslos grupos que sea necesario.

Page 117: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Ventana del grupo alumnos con los usuarios que pertenecen al mismo marcados

También se pueden crear grupos a través de una interfaz de comandos con el comando addgroup.Se podría añadir un grupo a un usuario con el comando adduser seguido del nombre del usuario ydel nombre del grupo.

Ejemplo de creación de un grupo y de cómo se añade un usuario al mismo

Permisos en linuxPara linux todos los recursos son archivos. Linux soporta tres tipos de permisos y para tres tipos deusuarios.Los tres tipos de permisos son:-lectura (r): permitiría leer el documento, pero sin modificarlo

Page 118: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

-escritura (w): permite modificar el documento o carpeta que lo tiene activado-ejecución (x): este permiso permite ejecutar el programa o documento. En el caso de los directorioses necesario tener este permiso para poder listar los contenidos del mismo.Estos permisos se suelen representar como 3 bits de valor 1 ó 0, según si se tiene el permiso (1) ono se tiene (0). El orden de los bits es el mismo que aparece arriba: lectura, escritura y ejecución.Por ejemplo un permiso 111 indicaría que podemos leer, escribir y ejecutar el fichero. Un permiso101 permitiría leerlo y ejecutarlo pero no modificarlo. Normalmente en vez de 1 ó 0 se representacon la letra del tipo de permiso si se tiene (r w x), o un guión si no se tiene. El permiso 101 vistoantes se podría representar también como r-x.Otra forma de representarlo es con el valor numérico de esos 3 bits: el permiso 101 valdría 5, o el111 valdría 7.

Los tres tipos de usuarios sobre los que se aplican estos permisos son:-El usuario que ha creado el fichero/directorio-El grupo del fichero, que será el grupo primario del usuario que lo ha creado (recordamos que unusuario puede pertenecer a varios grupos, pero sólo uno de ellos será el primario).-El resto de usuarios

Agrupando los dos puntos anteriores, sobre un fichero tendremos 9 permisos (los 3 tipos sobre los 3tipos de usuario) que se representarían como 9 bits: los 3 primeros serían los permisos (rwx) delusuario, los 3 siguientes los del grupo y los 3 últimos sobre todos los usuarios. Uno ejemplos depermisos sobre un documento podría serrwxr-xr-- → el usuario podría leer, escribir y ejecutar el fichero; los usuarios del grupo podríanleerlo y ejecutarlo; y el resto de usuarios sólo podrían leerlo. Otra forma de representar ese mismopermiso sería con los números 754 (estos números son la conversión a decimal del binario111101100)rwxr----- → el usuario podría leer, escribir y ejecutar el fichero; los usuarios del grupo podríansólo leerlo; y el resto de usuarios no podría acceder al mismo. Otra forma de representar ese mismopermiso sería con los números 740.

Usuarios en servidorCuando se dispone de un servidor de usuarios, como pasa en el aula, es posible crear los usuarois yasignar permisos en el servidor en vez de hacerlo en todos los ordenadores de la red. De este modo,cualquier usuario validado en el servidor podrá utilizar los recursos del ordenador en el que seencuentre y del resto de la red independientemente de dónde haya inciado la sesión. Además, podríaacceder a sus ficheros personales desde cualquier ordenador ya que éstos se encontrarán en elservidor.Si la red tiene muchos ordenadores, usar un servidor para validar a los usuarios facilita elmantenimiento de los mismos, y simplifica la modificación de la red (por ejemplo al añadir unordenador o una impresora de red).

Page 119: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

10-Compartir recuros en windows y linuxLos Sistemas Operativos permiten compartir recursos entre usuarios del mismo ordenador o entredistintos ordenadores. Para que distintos usuarios del mismo ordenador accedan, por ejemplo, aalguna carpeta, se seguiría los pasos explicados anteriormente. Ahora vamos a centrarnos en cómocompartiríamos recursos entre distintos ordenadores de una red local.En cualquier caso, además de la configuración por parte del Sistema Operativo, si existiera unfirewall instalado en el ordenador (programa que controla el acceso del ordenador a la red y de lared al ordenador) habría que realizar los cambios oportunos en el mismo.

Compartir recursos en de windowsWindows XP soporta compartir carpetas o dispositivos hardware de forma sencilla, utilizando unasistente, o realizando la configuración a mano. Vamos a ver el ejemplo de cómo se compartiría unacarpeta.

En primer lugar pulsaríamos con el botón derecho sobre la carpeta y elegiríamos la opciónPropiedades. En la ventana que se abre hay una pestaña de nombre Compartir en el que serealizaría la configuración.

Al elegir la opción de compartir sin usar el asistente cambia la vista de este ventana en el apartadode “Uso compartido y seguridad de red”.

Page 120: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Para compartir deberíamos marcar la opción “Compartir esta carpeta en red” y elegir el nombre quequeremos mostrar al compartir. Podríamos elegir si sólo se pueden leer los documentos o tambiénse pueden modificar. Como se ve, en la parte inferior de la ventana, si tenemos únicamente elFirewall de Windows automáticamente se configurará para que se pueda acceder a esta carpetadesde el exterior. Una vez compartida, el icono de la carpeta se modifica añadiendo una mano, demodo que podemos ver rápidamente que tenemos una carpeta compartida.

Para que después otros ordenadores accedieran a esta carpeta deberían ir en el Explorador deWindows a “Mis sitios de red”>”Toda la Red”>”Red de Microsoft”>”Nombre de nuestro grupo detrabajo” y luego accederían al nombre de nuestra ordenador y aparecerían todas las carpetas orecursos que hubiéramos compartido.

Page 121: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Acceso a una carpeta compartida por red

Compartir recursos en linuxLinux puede acceder a carpetas compartidas en sistemas Windows, y también permite compartir unacarpeta de modo que sea accesible desde ordenadores con Windows. Para poder hacerlo esnecesario instalar samba, una versión libre del protocolo de compartición de archivos de windows.

Una vez instalado podríamos compartir una de nuestras carpetas pulsando el botón derecho sobreella y eligiendo la opción “Opciones de compartición”.

Ventana en la que se configura la carpeta como compartida

Page 122: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

También podríamos acceder a las carpetas compartidas en otros ordenadores a través del exploradorNautilus. Una vez abierto seleccionaríamos la opción Red, y luego iríamos navegando del mismomodo que se haría en Windows ( “Toda la Red” > “Red de Microsoft” > “Nombre de nuestro grupode trabajo”).

Ordenadores con windows a los que se accede desde Lliurex

Archivos de usuarios en el servidorEn el modelo de aula de lliurex, independientemente de en qué ordenador estén los alumnos,pueden acceder a sus ficheros cómo si el usuario estuviera en su ordenador. Para conseguirlo seutiliza el protocolo NFS (Network File System o Sistema de Archivos en Red). Este protocolopermite acceder a carpetas en otro ordenador (en nuestro caso el servidor) como si estuvieran ennuestro disco duro de forma transparente al usuario, que puede no ser consciente de ello.

Page 123: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

11-Redes de ordenadores. Topologías.

¿Qué es una red informática?Una red está formada por un conjunto de ordenadores u otros dispositivos informáticos conectadosentre sí con el fin de compartir recursos (ficheros, sistemas de almacenamiento, impresoras,programas…). Las conexiones se pueden realizar con cables o de forma inalámbrica, y en funcióndel medio físico elegido, la red tendrá distintas prestaciones (velocidad, retardo…).

Clasificación de las redes informáticasExisten distintas formas para clasificar las redes: según su tamaño, el tipo de máquinas que conecta,la topología… Vamos a ver ahora alguna de estas clasificaciones

Según su tamaño:• Redes LAN (Local Area Network-Red de Área Local): son redes de tamaño reducido, por

ejemplo en una casa, un instituto, una empresa, o un edificio. Generalmente permite que todoslos ordenadores conectados en ella se comuniquen directamente entre sí. Las LAN estánmantenidas por la empresa, la familia… que la instala.

• Redes WAN (Wide Area Network-Red de Área Amplia): son redes más grandes, por ejemplodel tamaño de una ciudad o un país. Normalmente se utiliza para conectar varias redes LANentre sí. Las WAN las crean normalmente operadores de telecomunicaciones (Telefónica,ONO, Orange…) y luego permiten que las usen sus clientes. Generalmente las redes WANofrecen menor velocidad que las LAN.

Por ejemplo, dentro del instituto los ordenadores forman una LAN. Lo mismo ocurre con otrosinstitutos y colegios de la Comunidad. Por otro lado, la Conselleria d’Educació conecta todos losinstitutos y colegios entre sí utilizando una red WAN que contrata a un operador (actualmenteTelefónica).

Según la relación entre los ordenadores:• Redes cliente-servidor: en estas redes unos ordenadores, denominados servidores y

normalmente muy potentes, ofrecen servicios (permiten que otros ordenadores se conecten aellos). Los clientes por su parte utilizan los servicios que ofrecen los servidores (se conectan alos servidores). Por ejemplo en un aula de informática el ordenador del profesor puedecompartir la impresora permitiendo que los ordenadores de los alumnos impriman en ella: elprimero sería un servidor, y los otros clientes. Al acceder a una página web, tu ordenador es uncliente y el ordenador donde está almacenada la página sería el servidor.

• Redes igualitarias o de pares (peer to peer): en estas redes todos los ordenadores tienen lamisma consideración y todos ofrecen recursos y pueden utilizar los de los demás. Un ejemplosería la red del e-mule, en la que todos los ordenadores pueden descargarse ficheroscompartidos en cualquiera de las máquinas de la red.

Según la topología (la forma física como se conectan los ordenadores entresí):

• Redes en estrella: en estas redes hay un dispositivo central al que se conectan físicamente el

Page 124: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

resto. La comunicación entre 2 ordenadores siempre pasa a través de este equipo. Por ejemploen el aula de informática hay un switch al que se conecta un cable que va a cada ordenador.

Topologías en estrella. Nótese en la segunda imagen que tener un nodo central no implica que

físicamente esté en el centro

• Redes en árbol: estas redes estarían formadas por varias redes en estrella conectadas entre sí.De este modo, para enviar datos de un ordenador a otro, éstos van “bajando” por lasconexiones (el árbol), y luego “subiría” por otra rama hasta llegar al destino. Esta es la formaque tiene la red del instituto: en cada aula hay una red en estrella, otra para los ordenadores decada planta, pero luego hay una conexión desde cada aula a un equipo central.

Ejemplo de red en árbol, en la que se conectan distintas redes en estrella• Redes en anillo: en estas redes los equipos se conectan formando un anillo, de modo que la

información va circulando por el anillo hasta que llega a su destino. Esta configuración ya nose utiliza en redes locales, aunque sí en algunas redes WAN.

Page 125: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Topología en anillo

Direccionamiento en redes: IP, MAC

Protocolos de redUn protocolo es un conjunto de normas que regula una comunicación. En el caso de las redesinformáticas, son una serie de reglas que nos dicen cómo se tiene que intercambiar la informaciónentre los ordenadores de la red. De este modo, como todos los ordenadores usan el mismo protocoloson capaces de comunicarse entre si. El protocolo más utilizado en las redes de comunicación sedenomina TCP/IP.

El protocolo TCP/IP está formado realmente por dos protocolos TCP (Transmision control protocol)e IP (Internet protocol). IP se encarga de la transmisión de información. Los datos se envían enfragmentos denominados paquetes. Cada uno de los paquetes es independiente y puede ir porcaminos diferentes.

Dirección IPEl protocolo IP identifica a los equipos de la red con un número denominado dirección IP. Estenúmero está formado por 4 bytes (32 bits), y es único para cada dispositivo dentro de la red.Aunque la dirección IP está formada por 32 bits (32 números con valor 1 ó 0), para facilitar surepresentación suele escribirse como 4 números entre 0 y 255 separados por puntos. Por ejemplouna dirección IP podría ser 10.0.2.168, o 1.2.3.4.

Máscara de subredDentro de una red local todos los equipos tienen una parte de la dirección común y otra que losdiferencia, de modo que es sencillo saber si un paquete va a un equipo de la propia red o a unequipo de fuera de la misma. Para diferenciar qué parte de la dirección es común se utiliza la“máscara de subred”, también formada por 32 bits que valen 1 en los bits comunes de la direcciónIP en a red, y 0 en los bits que varían entre ordenadores (los 1s siempre están juntos y a laizquierda). Normalmente las máscaras se representan igual que las direcciones IP, como 4 númerosseparados por 3 puntos.

Las máscaras más habituales tiene 8, 16 ó 24 unos, y el resto ceros. Cada bloque de 8 unos setraduce a 255, y cada 255 en la máscara de subred indica que ese número de la IP es fijo en toda la

Page 126: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

red. Cuantos más números de la IP puedan variar, más ordenadores podríamos tener en esa red.Por ejemplo, en el aula tenemos una máscara de subred con valor 255.255.255.0. Eso significa quelos tres primeros números de la dirección IP son iguales en todos los ordenadores del aula (las IPsdel aula son todas del tipo 10.0.2.X, variando sólo el último número en cada ordenador) y quepodríamos tener hasta 254 ordenadores.

Nº de bits a 1 en lamáscara

Máscara Nº de dígitos comunesen la IP

Nº de ordenadores quepodríamos tener en la

red8 255.0.0.0 1 1677721416 255.255.0.0 2 6553424 255.255.255.0 3 254

Los ordenadores podrían tener cualquier dirección IP de la red excepto la primera y la última,llamadas dirección de red y de broadcast. En las redes como la de clase (con máscara255.255.255.0) la dirección de red acaba en 0 y la dirección de broadcast en 255.

Dirección MACCada tarjeta de red tiene un identificador único (denominado dirección MAC o dirección física) de48 bits (6 bytes) que permiten identificarla (suele escribirse en “hexadecimal”, con números del 0 al9 y letras de la A a la F. Por ejemplo 02-3A-DE-34-11-0F). De ese modo los datos se envían sólo ala dirección de la tarjeta que debe recibirlos, y el resto no los ve. La dirección es asignada por elfabricante y está grabada en un chip de la tarjeta. La primera parte de la dirección (los primeros 24bits o 6 dígitos hexadecimales) se denominan OUI y son iguales en todas las tarjetas del fabricante.

Page 127: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

12-Configuración de la conexión de red. Configuración IP (IPfija o por DHCP)

Configuración IPDespués de tener la red disponible, hay que configurarla, asignarle una IP para que se puedacomunicar con otros ordenadores.Si utilizamos el sistema operativo Windows, hay que seguir los siguientes pasos. Primero hay que iral panel de control, conexiones de red, y pulsar el botón derecho sobre la conexión que acabamos deinstalar (generlamente “conexión de área local”) pulsar propiedades.

En la ventana que se abre, seleccionar protocolo TCP/IP y volver a pulsar “Propiedades”. En lasiguiente ventana ya se puede dar la configuración IP al ordenador. Existen 2 métodos: asignaciónautomática o asignación manual.• La asignación automática utiliza un protocolo denominado DHCP. Para poder usarla debe

haber un equipo en la red que hará de servidor, normalmente el router, al que el ordenador pidesu configuración cada vez que arranca. El servidor asignará una IP, una máscara de subred, y ladirección del router (indicado como “puerta de enlace”) que nos permite conmunicarnos conequipos fuera de nuestra red. También se puede asignar la configuración DNS.

• En la asignación manual podemos poner los datos que queramos. Sin embargo, para que laconexión de red funcione correctamente debemos asignar una máscara de red igual a la delresto de equipos y una dirección IP que esté dentro de la propia red y no la esté utilizandoningún otro equipo, ya que no puede repetirse. El resto de parámetros (servidor DNS y puertade enlace predeterminada) deberíamos conocerlos para poder asignarlos a mano.

Page 128: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Instalación de una red de sólo 2 ordenadoresPodemos crear una red sólo con dos ordenadores conectados directamente. Para ello usaremos uncable especial, denominado cruzado, en la que los pines de los dos extremos no se conectan almismo cable.Después deberíamos configurar de forma manual los dos equipos, asignándoles IP de la misma red,y ya se podrán pasar información entre ellos.

Page 129: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

13-Configuración de red inalámbrica: métodos de seguridad

Del mismo modo que hemos visto cómo crear una red cableada, también es posible crear una redinalámbrica para conectar distintos ordenadores. Las redes inalámbricas tienen ventajas einconvenientes sobre las cableadas. Aquí podemos ver algunas de ellas:

Ventajas de las redes inalámbricas Inconvenientes de las redes inalámbricasNo necesitan instalar cableado (menorcoste de instalación)

Ofrecen peores velocidades, sobre todocuando hay muchos equipos (ya que secomparte el ancho de banda)

Los ordenadores se puede mover por elárea de cobertura de la red

Pueden sufrir interferenciaselectromagnéticas (por ejemplo de otra redinalámbrica cercana)

Es más fácil añadir un nuevo PC a la red Pueden suponer un riesgo si no se utilizanmedidas de seguridad de acceso (cifrado,contraseñas...)

Las redes inalámbricas utilizan señales electromagnéticas para enviar la información entre lasmáquinas. En España utilizan la frecuencia de 2,4 Mhz.Para que todos los fabricantes sean compatibles entre sí, la organización IEEE ha aprobado unaserie de estándares (normas que se deben seguir) para las redes inalámbricas, que se han numeradocomo 802.11. Estos estándares definen cómo se pasan los datos entre ordenadores: la velocidad, lafrecuencia, el tipo de cifrado... Existen distintos estándares para conexión inalámbrica. Se puedenagrupar en dos categorías según la frecuencia que utilizan:• 802.11b, 802.11g y 802.11n: Utilizan la frecuencia de 2,4 Ghz y son compatibles entre si. El

primero es el más antiguo y el que menos velocidad máxima permite (11 Mbps). El 11gsoporta hasta 54 Mbps mientras que el más nuevo, el 802.11n soporta en teoría hasta 600Mbps, aunque todavía no hay equipos que lleguen a tanta velocidad. La principal desventaja deeste grupo es que la frecuencia en la que transmiten se usa para otro tipo de comunicacionescomo Bluetooth o WUSB.

• 802.11a: Utiliza la frecuencia de 5GHz y soporta hasta 54 Mbps de velocidad máxima. Tienemenos alcance que las anteriores (a mayor frecuencia, menor alcance) aunque no tiene otrastecnologías que le provoquen interferencias. No se puede usar en España ya que no estápermitido usar esa frecuencia de forma libre.

Dispositivos de redes inalámbricasPara crear una red inalámbrica, hacen falta los mismos dispositivos que para las redes cableadas:

Tarjeta de red inalámbricaCumple las mismas funciones que la tarjeta cableada, y se instala del mismo modo. La principaldiferencia es que además de tarjetas que se conectan dentro de la caja del ordenador, existen tarjetasUSB que permiten usarse sin necesidad de abrir el ordenador. La instalación sequiría los mismospasos que vimos en las tarjetas cableadas: se conecta el dispositivo, se instalan los drivers y paraacabar se configura.

Page 130: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Punto de acceso inalámbricoCumple la misma función que un switch en redes cableadas: permite conectar todos los dispositivosinalámbricos entre sí. Además, tiene un puerto RJ-45 para unir nuesta red wireless con una redcableada. Normalmente el punto de acceso está incluido dentro del propio router, por lo que no esnecesario tener 2 equipos distintos.Un punto de acceso puede tener un alcance de hasta 150 metros en el exterior, aunque esa distanciase reduce mucho cuando estamos dentro de un edificio y tiene que atravesar paredes.

Repetidor inalámbrico o punto de extensiónEs un equipo que amplifica la señal inalámbrica para ampliar la cobertura, y no tiene conexión a lared cableada. Se colocaría al final de la zona de cobertura del punto de acceso y permitiría, en elmejor caso, duplicar el alcance.Su función es almacenar todos las paquetes que le llegan a través de la red inalámbrica y volver atransmitirlos después con mayor señal.

Modos de funcionamiento WifiEl estándar 802.11 define dos modos operativos: de infraestructura y ad-hoc.

Modo de infraestructuraEl modo de infraestructura es aquel en el que los clientes de tecnología inalámbrica se conectan aun punto de acceso. Éste es por lo general el modo predeterminado.En este modo se utiliza un identificador de red deonminado SSID. Se trata de un identificador de 32caracteres en formato ASCII que actúa como su nombre en la red.

Modo ad-hocEl modo ad-hoc en el que los clientes se conectan entre sí sin ningún punto de acceso. En el modoad hoc los equipos cliente inalámbricos se conectan entre sí para formar una red punto a punto, esdecir, una red en la que cada equipo actúa como cliente y como punto de acceso simultáneamente.Sería equivalente a conectar dos ordenadores con un cable cruzado, tal y como se ha explicado másarriba.

Configuración de la red inalámbricaEn primer lugar hay que configurar el punto de acceso. Generalmente se hace a través de un interfazweb del propio dispositivo, poniendo la dirección IP en un navegador (como Mozilla Firefox oInternet Explorer). Si usamos un router que nos da nuestro proveedor de Internet, suele venirconfigurados de fábrica, con una pegatina debajo del router con los datos necesarios para realizar laconexión.

SSIDEl primer dato (y único imprescindible) que necesitamos saber es el nombre de la red o SSID. Nospermitirá diferenciar nuestro punto de acceso de otros con cobertura en la zona. También es posiblecambiar otras configuracione secundarias como son el canal por el que enviamos los datos, elestándar que vamos a seguir, o si queremos ocultar el SSID.

Page 131: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Si queremos poner seguridad en nuestra red inalámbrica, tendríamos que configurarla también en elpunto de acceso. Existen distintas formas de seguridad como son el cifrado (WEP o WPA) o elcontrol de acceso por MAC.

Para conectar posteriormente el ordenador al punto de acceso, usaremos el icono de red inalámbricaque aparece junto al reloj en la mayor parte de Sistemas Operativos (Windows y Linux). Si losconocemos, podemos escribir a mano el nombre de la red a la que queremos conectarnos, pero esmás sencillo ver todas las diponibles y hacer doble clic en la elegida. En caso de que hayamospuesto seguridad, nos pedirá la contraseña para poder conectarnos.

Asistente de windows donde podemos ver las redes disponibles y si tienen seguridad habilitada

Seguridad en redes inalámbricasUn muy elevado porcentaje de redes son instalados sin tener en consideración la seguridadconvirtiendo así sus redes en redes abiertas (o completamente vulnerables a los crackers), sinproteger la información que por ellas circulan. Hay que pensar que, si nosotros podemosconectarnos a nuestra red simplemente encendiendo el ordenador sin realizar ningún tipo deconfiguración, nuestros vecinos, o cualquiera que pase por la calle, podrá hacerlo también.

Existen varias alternativas para garantizar la seguridad de estas redes. Las más comunes son:

SSID ocultoSe puede ocultar el punto de acceso (Router) de manera que sea invisible a otros usuarios. Esto noes realmente una medida de seguridad sino un primer freno a vecinos cotillas o ataques deprincipiantes.De este modo, al detectar redes inalámbricas disponibles no aparecería nuestra red. Para poderconectarnos nosotros deberíamos introducir a mano el nombre de nuestra red en la herramienta paraconexión a red inalámbrica.

Filtardo de MACLa dirección MAC era el identificador de la tarjeta de red. En la mayor parte de puntos de acceso esposible indicar a mano qué direcciones MAC permitimos que se conecten a la red. De este modo,

Page 132: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

sólo permite acceso a la red a aquellos dispositivos autorizados. Su principal inconveniente es quecada vez que queremos que se conecte un nuevo equipo habría que añadirlo a mano.La desventaja de este sistema es que, aunque la dirección MAC venga configurada de fábrica, lamayor parte de sistemas operativos permiten asignar a mano otra dirección MAC, por lo que unvecino listillo podría suplantar a nuestro ordenador y conectarse a nuestra red (aunque no eshabitual).

Cifrado WEPWEP, cifra los datos en su red de forma que sólo el destinatario deseado pueda acceder a ellos. Loscifrados de 64 y 128 bits son dos niveles de seguridad WEP. WEP codifica los datos mediante una“clave” de cifrado antes de enviarlo al aire. Cuanto más larga sea la clave, más fuerte será elcifrado. Cualquier dispositivo de recepción deberá conocer dicha clave para descifrar los datos. Estetipo de cifrado no está muy recomendado, debido a las grandes vulnerabilidades que presenta, yaque cualquier cracker puede conseguir sacar la clave de forma relativamente sencilla.

WPA y WPA2WPA emplea el cifrado de clave dinámico, lo que significa que la clave está cambiandoconstantemente y hacen que las incursiones en la red inalámbrica sean más difíciles que con WEP.WPA, y sobre todo su variante WPA2, están considerado como uno de los más altos niveles deseguridad inalámbrica, y es el método recomendado si los dispositivos son compatibles con estetipo de cifrado. Las claves se insertan como de dígitos alfanuméricos, sin restricción de longitud, enla que se recomienda utilizar caracteres especiales, números, mayúsculas y minúsculas, y palabrasdifíciles de asociar entre ellas o con información personal.Además de una contraseña WPA es capaz de soportar la autenticación de usuarios. Cada usuariodispone de un nombre y una contraseña que deberá introducir para conectarse a la red. Este métodoes el utilizado, por ejemplo, en las universidades para que sus estudiantes se conecten a la redinalámbrica.

Page 133: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

14-Conexión a Internet: ISP, principales tecnologías de acceso

¿Qué es Internet?

Internet no es una única red, como la que podemos tener en casa o en el instituto. Internet estáformada por muchas redes conectadas entre sí. Cada una de esas redes es autónoma, gestionada porla propia empresa u organización. Por ejemplo tendríamos redes de universidades, de grandesempresas, de las administraciones públicas (ministerios, consellerias, ayuntamientos…) o de losoperadores de telecomunicaciones (también llamados ISP).

Para crear Internet, estas redes se conectan entre sí mediante routers. Cuando conectamos dosordenadores, la información va saltando entre las redes, para llegar desde el ordenador que la envíaa su destino. El camino que siguen los datos se decide a través de unos protocolos de enrutamiento,que deciden el mejor camino de forma automática en función de muchos parámetros (la velocidadde las líneas, su carga o porcentaje de uso, las conexiones directas entre operadores…). La ventajade usar estos protocolos consiste es que pueden adaptarse por si mismos a los cambios de la red. Porejemplo, si una excavadora corta un cable de comunicaciones, rápidamente buscarían un caminoalternativo para los datos, de modo que seguirán llegando a su destino pero “dando un rodeo”.

Para simplificar las conexiones entre las redes, normalmente en cada país existe un centro deconexión donde llegan líneas de datos de los principales operadores de telecomunicaciones. Allí esdonde se realiza el salto entre las redes. También tiene conexiones con líneas que van a otros países,para poder enviar y recibir información de todo el mundo. En España ese centro se llama espanix.

Proveedores de Servicios de Internet

Los proveedores de Servicios de Internet o ISP son las empresas que nos permiten conectarnos aInternet a cambio de una cuota. Utilizando un módem (para un único ordenador) o un router (sitenemos varios ordenadores en casa) nos conectamos a su red, y desde ella podemos acceder alresto de Internet. Hoy en día existen muchas modalidades de conexión según la tecnología utilizaday la forma de pago, y tendríamos que elegir cuál nos conviene según nuestras necesidades.

Según la forma de pago:• Tarifas planas 24 horas sin límites: permiten usar la conexión en cualquier momento y

descargar cualquier cantidad de datos a cambio de una cuota mensual. Son las que máslibertad dan, aunque por eso son las más caras.

• Tarifas planas 24 horas con límites: permiten conectarnos en cualquier momento, pero noslimitan la cantidad de datos que podemos descargar. A partir de esa cantidad nos puedenreducir la velocidad o hacernos pagar una cantidad extra.

• Pago por utilización: únicamente se paga cuando se utiliza la conexión o por la cantidad dedatos descargados. Es útil cuando sólo vamos a conectarnos algunas veces a Internet.

Según la tecnología utilizada:• Módem telefónico: utiliza la línea de teléfono para conectarse a Internet, por eso cuando la

Page 134: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

estamos utilizando no podemos usar el teléfono. Es el tipo de conexión más antigua, yofrece velocidades muy bajas (56Kbps).

• ADSL: también utiliza el cable del teléfono, pero usa frecuencias distintas a las de la vozpor lo que es compatible con el mismo. Permite conexiones permanentes sin tener ocupadoel teléfono. Las siglas ADSL significan Asymmetric Digital Subscriber Line o Línea deSuscriptor Digital Asimétrica. Actualmente ya se utililizan distintas evoluciones de estatecnología que soportan mayor velocidad (ADSL2, ADSL2+, VDSL). El término Asimétricaindica que las velocidades de subida y de bajada de información a Internet son distintas(siendo mucho menor la de subida). Las velocidades habituales que ofrece van desde 1Mbps a 20 Mbps de bajada, y desde 300 Kbps a 1 Mbps de subida.

• Cable-Modem: esta tecnología utiliza un cable coaxial, como el de la antena de la televisión,para la conexión a Internet. Es el tipo de conexión que ofrece ONO en Valencia. Soportanmás velocidad de conexión que el ADSL, aunque las ofertas habituales dan la mismavelocidad que ADSL por el mismo precio. Una ventaja de esta tecnología es que suele darmenor retardo de conexión (útil para juegos on-line).

• Móvil: utiliza la red de telefonía móvil para realizar la conexión a Internet. Como ventaja,permite conectarse en cualquier lugar con cobertura de teléfono. Como desventajas, ofrecevelocidades más bajas (como máximo 7 Mbps) y es la más cara. Ademas la velocidad podríavariar según la zona en la que nos encontremos.

• Fibra óptica: permite velocidades mucho más altas (100 Mbps simétricos y superiores). EnEspaña por su precio sólo la contratan empresas, aunque está empezando a ofrecerse aparticulares en pequeñas zonas piloto. En otros países, como Corea, es más barata y lautilizan también usuarios residenciales.

Direccionamiento en Internet

El servicio DNSEn Internet, como en todas las redes TCP/IP, los ordenadores se identifican con su dirección IP. Sinembargo, recordar esos número cuando queremos utilizar algún servicio, por ejemplo navegar porpáginas web, es complicado. Para evitar este problema se permitió asignar un nombre más sencillode recordar a los ordenadores, en forma de texto (por ejemplo www.tuenti.com).El protocolo DNS es el que se encarga de realizar la conversión de nombre de dominio a direcciónIP. Por ejemplo, si nosotros escribimos en el navegador www.marca.com lo primero que hará esutilizar DNS para conocer su dirección IP (193.110.128.199) y luego se comunicará con elordenador que tiene esa dirección. Así pues, el protocolo DNS hace algo parecido a cómo funcionala agenda de un teléfono móvil: nosotros buscamos un nombre y el teléfono llama al númeroasociado de forma automática.

URLEl URL (Localizador Universal de Recursos) es un identificador que nos permite encontrarcualquier recurso (documento, fichero de texto, imagen, vídeo, animación flash...) en Internet. Alver una página web en el navegador es la dirección que aparece en la barra de direcciones. Cadauno de los objetos de la página web (imágenes, vídeos...) tiene su propio URL.

Page 135: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Ejemplo de una URL en la barra de direcciones del ordenador

Dentro del URL podemos diferenciar 4 partes, que vamos a definir con el ejemplo de la imagenanterior: http://www.upv.es/estudios/futuro-alumno/index-es.html

1. El protocolo: es la parte que va hasta la doble barra (incluida), en este caso http://. Nosindica cómo se va a pasar la información entre el servidor y nuestro ordenador.

2. El ordenador: se puede indicar a través de un nombre de dominio (en este caso www.upv.es)o con la dirección IP. Se utiliza para encontrar en Internet el ordenador donde está lainformación. Iría hasta la primera barra.

3. La ruta: es un parámetro opcional. Indica la lista de directorios, dentro del ordenador, dondese encuentra el recurso que estamos buscando. Iría del nombre de dominio hasta la últimabarra (en el ejemplo estudios/futuro-alumno).

4. El nombre del recurso: es la última parte, a partir de la última barra, y nos indica el nombrey la extensión del fichero que estamos buscando. En el ejemplo index-es.html.

Page 136: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

15-Consola de comandos: órdenes sobre ficheros y directoriosen windowsAunque en la mayor parte de Sistemas Operativos actuales se trabaja con una interfaz gráfica, conventanas y utilizando el ratón, antiguamente sólo se podía trabajar con interfaces textuales, en losque había que escribir con el teclado las órdenes que queremos que realice el ordenador. Hoy en díatodavía se puede acceder a un terminal de texto, denominado consola o interfaz de comandos.

Para abrir una consola en Windows XP podemos seguir 2 caminos:-Ir al menú Inicio>Programas>Accesorios>Símbolo del sistema-Ir al menú Inicio>Ejecutar y escribir “cmd”. Luego habría que pulsar aceptar.

Con ambos métodos se abriría una ventana negra similar a esta, en la que escribir los comandos.

En la ventana nos aparece la ruta del directorio en el que nos encontremos (por defectoC:\Documents and Settings\Usuario).

Ahora veremos los principales comandos para trabajar con ficheros y directorios (realizando lasacciones que podríamos hacer en el Explorador). Sobre la mayor parte de comandos se puedenelegir opciones. Generalmente hay que dejar un espacio y luego escribir un guión y la letra de laopción elegida (Por ejemplo dir -p)

DirectoriosLa primera opción es listar el contenido de un directorio. Se usa el comando dir, que nos muestrael nombre de los ficheros, su tamaño y la hora de modificación de los mismos, así como el tamañototal que ocupan.

Page 137: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Para movernos por los directorios se usa el comando cd seguido del nombre del directorio al quequeremos cambiarnos. Para subir al directorio anterior (como pulsar a la flecha en el explorador) seusa un nombre de directorio especial llamado .. (punto punto). En el siguiente ejemplocambiaríamos al directorio listas y luego volvemos al escritorio:

Por último se pueden crear directorios con el comando mkdir seguido del nombre del directorio.Se borrarían con rmdir también seguido del nombre del directorio, aunque sólo funciona si eldirectorio está vacío.

FicherosPara ver los atributos de los ficheros se usa el comando attrib. Nos diría si hay algún fichero desistema (marcado con una S), oculto (marcado con una H) y de sólo lectura (marcado con una R) sino se puede modificar. Se podrían modificar los atributos con la opción -S, -R o -H seguida delnombre del fichero (por ejemplo attrib -r fichero.txt)

Page 138: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Para copiar un fichero se usa el comando copy. Habría que poner el nombre del fichero original yel nombre nuevo del fichero copiado.

Para mover un fichero a otra carpeta se usa el comando move seguido del nombre del fichero y sunueva ubicación. Si además de una carpeta se pone el nombre del fichero en la nueva ubicación sepodría cambiar el nombre.

Page 139: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Para borrar un fichero se usa el comando del seguido del nombre del fichero.

Cambio de unidadWindows identifica las unidades con una letra. Para cambiar de unidad se escribe la letra de launidad seguida de 2 puntos (:).

Page 140: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Configuración de hora y fechaPara ver o cambiar la hora y la fecha se usan los comandos time y date respectivamente. Enambos casos nos mostrará el valor actual y nos permitirá modificarlo.

Page 141: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

16-Consola de comandos: órdenes sobre ficheros y directoriosen linux

Aunque en la mayor parte de Sistemas Operativos actuales se trabaja con una interfaz gráfica, conventanas y utilizando el ratón, antiguamente sólo se podía trabajar con interfaces textuales, en losque había que escribir con el teclado las órdenes que queremos que realice el ordenador. Hoy en díatodavía se puede acceder a un terminal de texto, denominado consola o interfaz de comandos.

Para abrir una consola en Lliurex debemos ir al menú Aplicaciones>Accesorios>Terminal. Seabriría una ventana en la que escribir los comandos. (Lliurex también permite abrir un terminal deforma más rápida pulsando el botón derecho sobre el escritorio y eligiendo después la opción “Abrirterminal”.)En la ventana nos aparece el nombre del usuario seguido del símbolo @ y el nombre del ordenador.Después muestra la ruta del directorio en el que nos encontremos seguido del símbolo $ si estamoscon un usuario normal o # si somos el usuario root. Cuando estamos en nuestro directorio personal(/home/usuario) no mostraría la ruta sino el símbolo ~.

Terminal en linux. Se puede comprobar que el usuario utilizado se llama lliurex, así como elordenador, y no es administrador (aparece $ al final del prompt). Estamos dentro de la carpeta

“UserFiles” del directorio personal.

Ahora veremos los principales comandos para trabajar con ficheros y directorios (realizando lasacciones que podríamos hacer en el Explorador). Sobre la mayor parte de comandos se puedenelegir opciones. Generalmente hay que dejar un espacio y luego escribir un guión y la letra de laopción elegida (Por ejemplo ls -a)

DirectoriosLa primera opción es saber en qué directorio estamos. Como hemos dicho antes normalmente lomuestra a no ser que estemos en nuesrto directorio. Para saber exactamente dónde estamos usamosel comando pwd, que mostraría la ruta actual.

Page 142: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

La primera opción es listar el contenido de un directorio. Se usa el comando ls, que nos muestra elnombre de los ficheros. Algunas opciones son -l para mostrar los detalles de los documentos(incluidos los permisos) o -a para ver también archivos ocultos.

El comando ls -la muestra toda la información de los ficheros incluidos los ocultos

Para movernos por los directorios se usa el comando cd seguido del nombre del directorio al quequeremos cambiarnos. Para subir al directorio anterior (como pulsar a la flecha en el explorador) seusa un nombre de directorio especial llamado .. (punto punto). En el siguiente ejemplocambiaríamos al directorio listas y luego volvemos al escritorio:

Cambio al directorio UserFiles y vuelta al directorio del usuario

Por último se pueden crear directorios con el comando mkdir seguido del nombre del directorio.

Page 143: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Se borrarían con rm también seguido del nombre del directorio, aunque sólo funciona si eldirectorio está vacío. Para borrar un directorio y la información que haya dentro se usa la opción-r.

Ejemplo de creación y eliminación de directorios. Al usar -r permite eliminar eldirectorio dir1 aunque tenga contenido.

FicherosPara copiar un fichero se usa el comando cp. Habría que poner el nombre del fichero original y elnombre nuevo del fichero copiado. Se podría añadir la ruta si el fichero estuviera en otro directorio:cp nombreoriginal nuevonombrecp /dir1/dir2/dir3/archivo /dir1/dir2/achivo

Para mover un fichero a otra carpeta se usa el comando mv seguido del nombre del fichero y sunueva ubicación. Si además de una carpeta se pone el nombre del fichero en la nueva ubicación sepodría cambiar el nombre.mv nombreoriginal nuevonombremv /dir1/dir2/dir3 /dir1/dir2(el segundo caso movería el fichero sin cambiar el nombre)

NOTA: la diferencia entre copiar y mover es que en el primer caso se mantiene el fichero original(al final habrá 2 ficheros) y en el segundo no.

Para borrar un fichero se usa el comando rm seguido del nombre del fichero, igual que para undirectorio.rm nombrefichero

Page 144: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Ejemplo: primero se copia un fichero con el comando cp, luego se le cambia el nombre con elcomando mv, y por último se elimina con el comando rm

Configuración de hora y fechaPara ver o cambiar la hora y la fecha se usa el comando date respectivamente. Para modificarlasdebemos ser el usuario root

Fecha y hora del sistema

AyudaLinux dispone de un comando que nos muestra la ayuda de cualquier otro comando. Es man (demanual). Se usa poniendo detrás el comando del que queremos ver la ayuda. Para salir de la ayudapulsaremos q (del inglés quit).Por ejemplo man cp mostraría la ayuda del comando cp, o man gedit mostraría la ayuda delprograma de edición de texto gedit.

Page 145: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

17-Consola de comandos: instrucciones de redes (ping,tracert/traceroute, ipconfig/ifconfig, netstat, route, hostname)La consola de comandos es un terminal de texto en el que hay que escribir con el teclado lasórdenes que queremos que realice el ordenador. Este tipo de terminal es muy útil cuando laconexión de red no funciona bien ya que permite realizar comprobaciones de forma rápida.

Para abrir una consola en Windows XP podemos seguir 2 caminos:-Ir al menú Inicio>Programas>Accesorios>Símbolo del sistema-Ir al menú Inicio>Ejecutar y escribir “cmd”. Luego habría que pulsar aceptar.Para abrir una consola en Lliurex debemos ir al menú Aplicaciones>Accesorios>Terminal, o pulsarel botón derecho sobre el escritorio y elegir después la opción “Abrir terminal”.

Vamos a ver ahora los principales comandos de redes con ejemplos sobre windows, ycomentaremos las diferencias, cuando existan, con los que habría que utilizar para linux

IpconfigEl comando ipconfig se utiliza para comprobar la configuración de red del ordenador. Nosmuestra la dirección IP, máscara de red y puerta de enlace. Una variante es ipconfig /all quenos da mucha más información, entre ella los servidores DNS, las direcciones MAC de las tarjetasde red o el hostname entre otros.

En linux el comando que habría que utilizar es ifconfig.

Page 146: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

PingEl comando ping sirve para enviar un paquete a otro ordenador con lo que podríamos comprobarla conexión entre los mismos. Habría que escribir detrás la dirección IP de la máquina (o nombredel dominio) con la que quisiéramos comprobar la conexión.

Ejemplo de ping. En el primer caso (sobre un dominio, permite comprobar la IP a la que secorresponde) sí que responde el ordenador pero en el segundo caso no.

TracertCuando enviamos información a través de una red, como puede ser Internet, los paquetes vansaltando entre routers hasta que llegan a su destino. El comando tracert nos muestra lasdirecciones IP por las que va pasando el paquete hasta llegar a su destino. Como en el comandoanterior habría que escribir la dirección IP de la máquina a la que queremos conocer su ruta.

Ruta hasta la web de la UPV a través de 14 routers hasta llegar al destino (salto nº 15)

Page 147: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

En linux el comando que habría que utilizar es traceroute.

HostnameEl comando hostname nos muestra el nombre que tiene configurado nuestro ordenador (tanto enWindows como en linux). Es el nombre que tendrán que utilizar otros ordenadores de nuestra redpara conectarse a nosotros.

NetstatEl comando netstat nos muestra las conexiones que tenemos abiertas con otros ordenadores.

También se podría usar con la opción netstat -a que, además de la información anterior, nosdiría qué puertos tenemos abiertos. Estos puertos nos informan de programas que permitirían a otrosordenadores conectarse con nosotros. Son los que aparecen con estado LISTENING, así como losque aparecen con protocolo (primera columna) UDP

Page 148: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Otra opción sería netstat -e, que nos mostrará la cantidad de datos enviados y recibidos en latarjeta.

En linux el comando que habría que utilizar es el mismo aunque cambia la información que muestray las opciones que permite.

RouteEl comando route con el modificador PRINT nos permite ver la tabla de enrutamiento de nuestroordenador (es la que se mira para decidir por cuál, de todas las tarjetas de red del ordenador, seenviará un paquete). Sería útil si tenemos un ordenador con varias tarjetas que sirve para conectarvarias redes (como el servidor de aula).

Route también se puede utilizar para modificar esa tabla de enrutamiento.

Page 149: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

NslookupEl comando nslookup abre una pequeña aplicación que nos permite realizar resoluciones DNS,es decir, conocer qué dirección IP se corresponde con un dominio.

Ejemplo de resolución d enombre. En el caso de tuenti hay varias direcciones que responden almismo dominio.

FtpEl comando ftp abre un cliente ftp en formato texto. Nos permitiría conectarnos a un servidor FTPy subir y descargar ficheros del mismo, utilizando los comandos apropiados. Realizaría la mismafunción que un cliente gráfico, pero deberíamos conocer cuáles son las órdenes necesarias pararealizar cada tarea.

Page 150: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

18-Herramientas del sistema en windows: restaurar sistema,desfragmentar disco, información del sistema, panel decontrolTodos los Sistemas Operativos disponen de distintas herramientas para controlar, gestionar yadministrar el ordenador. En Windows XP, la mayor parte se encuentran en el Panel de Control, ose pueden arrancar a través del menú Programas>Accesorios>Herramientas Administrativas.Aquí vamos a ver algunas de ellas:

Restaurar SistemaEsta herramienta permite dejar el sistema tal y como estaba en un momento anterior sin modificarlos documentos del usuario. Al arrancar esta herramienta nos permite realizar dos funciones: crearun punto de restauración o restaurar el sistema a un punto anterior:

Al crear un punto de restauración guardará una copia del registro y del resto de ficheros deconfiguración. Sería útil realizarlo antes de instalar algún nuevo programa o si vamos a cambiaralguna opción del sistema operativo.Hay que ver que, aunque no creemos nunca un punto de restauración, Windows los crea de formaautomática por ejemplo al actualizar el sistema.

La opción de restaurar mi equipo nos mostraría un calendario en el que están marcadas las distintos

Page 151: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

puntos de restauración a los que podemos volver. Sólo tendríamos que elegir alguno de ellos yesperar a que se deshagan todos los cambios posteriores.

Dentro de las opciones de esta herramienta nos permite elegir cuánto tamaño en disco queremos queocupen los puntos de restauración. Al sobrepasar ese tamaño Windows eliminaría automáticamentelos más antiguos, ya que no es probable que sean necesarios.

Desfragmentador de discoUn disco duro está formado por discos, pistas y sectores. Cada sector es la mínima unidad en la quepodemos almacenar un fichero, como un cajón de un armario. Dentro de cada sector (generalmenteentre 512 Bytes y 4 KB) sólo puede almacenarse un archivo. Cuando el archivo es más grande debeocupar varios sectores (en el símil del armario, ocuparía varios cajones). Los sectores que ocupa unfichero pueden estar juntos o separados. Cuando están separados puede ralentizarse el acceso alarchivo ya que el cabezal del disco duro tiene que ir moviéndose para leer las todos los sectores.La herramienta desfragmentador de disco haría un análisis de la unidad y nos diría si los archivosestán muy fragmentados (separados por el disco) o no. En caso de que sea necesario, y nosotrosqueramos, se encargaría de ir moviendo los archivos, aprovechando los espacios libres del disco,para dejar al final los ficheros juntos.

Page 152: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Es muy recomendable realizar una desfragmentacion del disco a menudo para mejorar la velocidaddel sistema.

Información del SistemaLa herramienta Información del Sistema recopila y muestra información acerca de la configuracióndel sistema. La información se muestra en forma de árbol, desde un repaso más general ainformación más específica de cada dispositivo. Los datos que podemos obtener son:

Page 153: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

-Resumen del Sistema: nos da un resumen del resto de ramas del árbol: versión del SistemaOperatio y BIOS, cantidad de memoria, tipo de procesador...-Recursos de hardware: muestra información acerca de la asignación de los recursos y los posiblesconflictos entre los dispositivo hardware.-Componentes: muestra información sobre cada componente del hardware: discos, tarjetas, monitor,teclado, impresora...-Entorno de software: muestra información sobre la configuración de distintos programas, variablesde entorno, trabajos de impresión...Además, pueden aparecer más ramas en función de los programas instalados, como es el caso de laimagen anterior con la configuración de Internet y de Office 2003

Administrador de tareasEl administrador de tareas se enciende pulsando Ctrl+Alt+Supr en cualquier momento. Se sueleutilizar cuando el sistema se queda bloqueado, ya que permite terminar las aplicaciones que hayanproducido el bloqueo.

Las pestañas que aparecen son:-Aplicaciones: muestra las aplicaciones que tenemos arrancadas. Si alguna está bloqueado en lacoluman Estado mostraría “No responde”. Permiten finalizar alguna de ellas.-Procesos: mostraría todos los procesos abiertos. De cada uno de ellos nos puede dar distintainformación en columnas, que podemos configurar según nos interese. Una de las columnas másútiles es “Uso de CPU”, que nos diría que proceso está usando más cantidad del procesador.

Page 154: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

-Rendimiento: nos saca una gráfica de porcentaje de uso del procesador y de la memoria.-Funciones de red: muestra una gráfica del uso de las tarjetas de red del ordenador.-Usuarios: nos indica cuántos usuarios han iniciado sesión. Permitiría cerrar la sesión de algúnusuario (siempre que seamos administradores)

Panel de Control

El panel de control permite acceder a la casi toda la configuración del ordenador que se haexplicado en los apartados anteriores. En función de los programas y componentes hardwareinstalados en el ordenador podrían aparecer más o menos iconos. Algunos de los más importantesson:-Actualizaciones automáticas: permiten configurar cómo se actualizará windows

Page 155: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

-Agregar o quitar programas: nos muestra todos los programas instalados y permite quitar los queya no queramos de forma sencilla.-Conexiones de red: permite configurar las tarjetas de red.-Cuentas de usuario: se usa para configurar los usuarios.-Opciones de energía: se usa para configurar cuándo queremos que se apague la pantalla o losdiscos duros para ahorrar energía (muy útil en los portátiles)-Sistema: muestra el nombre del equipo y permite arrancar el “administrador de dispositivos” quemuestra un listado de todos los componentes hardware y nos dejaría modificar su configuración.

Page 156: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

19-Actualización del SO en windows y en linux. Atualizacionesautomáticas.Los Sistemas Operativos, como el resto de programas, van sacando distintas versiones a lo largo deltiempo que mejoran sus funciones. En muchas ocasiones, la empresa que ha creado el programa lomodifica y pone a disposición de los usuarios que han adquirido una versión anterior, en forma deactualización (en vez de instalar el programa de cero sólo añade las modificaciones realizadas).Las principales razones por las que se realiza una actualización son:-Corregir problemas de seguridad a raíz de fallos detectados en las versiones anteriores.-Aparición de nuevas funciones.-Publicación de nuevas versiones de drivers de los dispositivos hardware.

Actualizaciones en windowsWindows permite actualizar el sistema de forma automática (realizando el sistema operativo todaslas tareas), semiautomática (avisaría al usuario de la existencia de actualizaciones disponibles ypodría hacer la descarga de forma auotmática) o manual (el usuario tendría que comprobar si hayactualizaciones e instalarlas)

Actualizaciones automáticas en windowsWindows permite actualizar de forma automática o manual el sistema.

Para elegir cómo queremos que se actualice debemos ir a la opción “Actualizaciones automáticas”del Panel de control. Las opciones que permite son:

Page 157: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

-Automáticas: descargaría los ficheros necesarios y los instalaría de forma automática. Al acabar esprobable que nos indique que debemos reiniciar el ordenador. El problema de este método es que, siel ordenador no es muy potente, podría quedar semibloqueado mientras hace la instalación.-Descargar actualizaciones pero no instalarlas: descargaría los ficheros pero luego no losinstalaría sino que nos avisaría de que están descargadas. Suele mostrar un icono en la barrade iconos (junto al reloj) para indicarnos que una actualización está pendiente de instalar. Sino lo hacemos antes, avisaría al apagar el ordenador de que se van a realizar las actualizaciones.-Notificarme pero no instalarlas: únicamente nos mostraría el icono anterior al lado del reloj paraavisarnos que podemos descargar alguna actualización. Tendríamos que hacer la instalación deforma manual.-Desactivar actualizaciones: no actualizará ni nos informará de que hay actualizaciónes disponibles.Deberíamos hacer las actualizaciones de forma manual.

Actualizaciones manuales en windowsPara actualizar Windows de forma manual si hemos desactivado las automáticas deberíamos ir a lapágina web de Windows Update. En esta página buscaría las actualizaciones disponibles, nos lasmostraría, y nos permitiría elegir cuáles queremos instalar. Una vez elegidas las descargaría einstalaría.Este método permite actualizar también otros programas de Microsoft como Office.

Como curiosidad, falta indicar que normalmente Microsoft pone las actualizaciones a disposiciónde sus usuarios los segundos martes de cada mes, a no ser que se trate de un problema de seguridadimportante que suele activarse en cualquier momento.

Page 158: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Actualización de otros programasIgual que el sistema operativo deberíamos actualizar el resto de programas del ordenador, sobretodo para solucionar problemas de seguridad. Algunos de ellos nos informan en la barra de iconosde que hay una actualización disponible (como Adobe Reader o Java) y nos dejan actualizarlo desdeallí de forma sencilla. Otros nos avisan al arrancar el programa (como Firefox). En otros casosdeberíamos ir a la página web del programa, comprobar si hay una nueva versión, descargarla einstalarla sobre la antigua (como Winrar)

Actualizaciones en lliurexLliurex, como muchas distribuciones de linux dispone de una herramienta denominada Synapticpara instalar nuevos programas. Esta herramienta se conecta a los servidores de laempresa/organización que ha realizado la distribución y muestra gran cantidad de programas quepodemos añadir en nuestro ordenador.

Ventana de Synaptic. Para realizar la actualización de todo el sistema pulsaríamos en orden los tresbotones de la barra de herramientas: Recargar, Marcar todas las actualizaciones y Aplicar.

Del mismo modo que permite instalar nuevos programas, también nos avisa si hay versiones nuevasde los programas (denominados en esta herramienta paquetes) instalados. Para realizar laactualización deberíamos realizar 3 pasos1-Recargar la lista de paquetes: se conectaría al servidor para ver cuáles son las versiones que sepueden descargar.

Page 159: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Descarga la información de paquetes para saber si hay nuevas versiones

2-Marcar las actualizaciones que queremos realizar. Lo normal es usar el botón “Marcar todas lasactualizaciones”. Si no podríamos marcar a mano las que nos interesen (o usaríamos esta opciónpara instalar nuevos programas)

Información sobre las actualizaciones y nuevas instalaciones marcadas

3-Pulsar “Aplicar”. A partir de este momento nos diría cuántos paquetes se van a actualizar y quécantidad de datos se van a descargar. Si aceptamos los descargaría e instalaría. En algunasocasiones, pero no todas, nos obligaría a reiniciar el ordenador.

Page 160: sistemas operativos, redes y bases de datos

Administración de Sistemas Operativos Jorge López Jiménez

Información sobre las actualizaciones/instalaciones a realizar

La ventaja de este sistema frente al de Windows es que no sólo se actualiza el Sistema Operativosino también la mayor parte de aplicaciones instaladas.

En el caso de la configuración del aula, el propio servidor tiene una imagen de todos los paquetesdisponibles en lliurex. De este modo solo se tienen que descargar de Internet las actualizaciones unavez y todos los ordenadores del aula podrían usar esos paquetes descargados, liberando la conexióna Internet.

Page 161: sistemas operativos, redes y bases de datos

Sistemas operativos

TEMA 1 INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS

1. DEFINICIÓN DE SISTEMA OPERATIVO

Es muy difícil dar una definición exacta y precisa del término sistema operativo,

por lo que nos será más sencillo formular esta definición a partir de la descripción

de las funciones que éste cumple.

En el esquema superior de un computador, la capa inferior corresponde al

hardware, sobre ésta encontramos justamente el sistema operativo, cuyas funciones son:

Gestión eficiente de los recursos del sistema: El sistema operativo

controla el acceso eficiente a los recursos del computador: memoria, tiempo en la CPU, dispositivos, etc, se encarga de trabajos de protección y de utilización

eficiente del sistema. Es decir, el sistema operativo reparte el tiempo de CPU entre los diferentes programas que concurren en un mismo computador

(incluso de distintos usuarios), consigue una ejecución concurrente, protege el

acceso a memoria y coordina el acceso a dispositivos compartidos e incluso a los no compartidos.

Presentación a los usuarios de una máquina virtual mucho más

sencilla de utilizar: El sistema operativo proporciona un entorno de trabajo al usuario y a los programas de aplicación que permite utilizar el computador de

forma más fácil e intuitiva; es decir, se proporciona una máquina virtual mucho más fácil de entender y utilizar por el hecho de que oculta la complejidad del

hardware.

Como vemos en el dibujo superior, por encima del núcleo del sistema operativo

tenemos el software de sistema (shell, compiladores, editores…) y por encima de éste, el software de aplicación (hojas de cálculo, editores de texto…).

2. VISIÓN HISTÓRICA

Los sistemas operativos y la evolución del hardware corren íntimamente relacionadas en su evolución histórica. Es lógico pensarlo así, esencialmente porque

los sistemas operativos han evolucionado en función de los cambios tecnológicos y

a la vez intentaban sacar el mayor provecho de estas nuevas tecnologías.

Vamos a estudiar someramente la evolución de estos sistemas operativos divididos en 4 generaciones:

Tema 1 Introducción a los sistemas

operativos

1. Definición de sistema operativo

2. Visión histórica

3. Los servicios que ofrece el sistema operativo

Page 162: sistemas operativos, redes y bases de datos

2 · Sistemas operativos

Primera generación: Los primeros ordenadores. Solo se contaba en los

momentos iniciales con el hardware del ordenador. Se trataba de válvulas de

vacío que obligaban a fabricar aparatos mostruosamente grandes que se “alimentaban” de cintas de papel y tarjetas perforadas y cuyo uso estaba

reservado al ámbito militar para efectuar cálculos matemáticos como trayectorias balísticas y tablas de senos y cosenos. En esta época se

consideraba que no existía sistema operativo y que el usuario interaccionaba directamente con el computador.

Segunda generación: Con la aparición del transistor en 1950 ya se podían

fabricar computadores más pequeños, pero muy caros y solo al alcance de

unas pocas empresas grandes. Aparecen nuevos dispositivos de entrada/salida, unidades de almacenamiento (disco y cintas magnéticas),

aparece el primer software (ensambladores, librerías de funciones matemáticas…) Su modo de funcionamiento era simple. Se cargaba todo el

código del “sistema operativo” y después se realizaban cálculos en lote. Se le

pedía un cálculo y cuando terminaba otro y después otros, todos de forma lineal; esto hacía perder mucho tiempo de CPU, dado que aunque las CPUs

eran lentas, más lentos aún eran los dispositivos que introducían la información a evaluar (cintas perforadas). Para intentar reducir el tiempo que estaba parada

la CPU apareció el trabajo off-line, con lo que se intentaban solapar las

operaciones de entrada/salida con la ejecución de programas distintos que se habían cargado en la CPU a través de una unidad de cinta auxiliar. Luego se

idearon técnicas como el almacenamiento en memoria intermedia, que consistía en solapar las operaciones de entrada/salida de un programa con las

de cálculo de ese mismo programa. Luego llegó la gestión de colas que permitían solapar las operaciones de entrada/salida de distintos trabajos

mientras se ejecutaban otras operaciones.

Tercera generación: Surge a mediados de los años 60 y se basa en circuitos

integrados. Son mucho más pequeñas que las anteriores y más rápidas, apareciendo mecanismos de interrupciones, protección, etc, y además se

desarrollan periféricos más rápidos y efectivos, terminales remotos (acceso a bancos de datos) y se estandarizan lenguajes de alto nivel ya existentes como

Fortran, algol, cobol. Aparece una nueva forma de trabajar para la CPU que es

la programación concurrente o multiprogramada, donde se solapan tiempos de mayor entrada/salida con tiempos de cálculo intensivo de la CPU

para distintas operaciones. Cuantos más programas solapemos tendremos un mayor grado de multiprogramación; debido a esto varios usuarios pueden

conectarse a una misma CPU y “compartirla”, pero para evitar que un usuario la colapse demasiado tiempo seguido, el programa de un usuario determinado

deja de ejecutarse cuando su programa ha finalizado, cuando se programa una

operación esencialmente de entrada/salida o cuando ha pasado un quantum de ejecución (tiempo determinado) para que todos tengan acceso a esa CPU, de

esta forma los diferentes usuarios conectados al sistema progresan en sus operaciones concurrentemente y cada uno de ellos tiene la impresión de que es

el único que utiliza el sistema.

Generación Tecnología Programación Vel. operación Dispositivos Ámbito de uso

Primera 1925-1957

Válvulas de vacío Lenguaje binario o

máquina Milisegundos

Cintas de papel Tarjetas perforadas

Militar

Segunda 1958-1964

Transistores Memorias de ferrita

Fortran, Cobol, Pascal,

Ensambladores Microsegundos

Lectores de tarjetas Impresoras

Unidades de disco

Grandes corporaciones

Gobiernos Universidades

Tercera 1964-1974

Circuitos integrados Sistemas con

multiprogramación Nanosegundos

Periféricos más rápidos y efectivos

Empresas medianas

Cuarta 1974 – ¿?

LSI/VLSI Memoria de

semiconductores o burbujas

Interconexión con bases de memoria

Redes Doméstico

Page 163: sistemas operativos, redes y bases de datos

Sistemas operativos · 3

TEMA

Cuarta generación hasta hoy día: En 1974 se inicia la era de los

computadores personales con la integración a gran escala; y seguramente su

aportación más importante es la red de computadores (internet e intranet). Aparecen los sistemas operativos en red y distribuidos que permiten

utilizar recursos de máquinas remotas (discos, impresoras…) y aparece también el sistema operativo en tiempo real (sistemas que deben procesar muchos

datos en un tiempo limitado y lo más rápidamente posible).

3. LOS SERVICIOS QUE OFRECE EL SISTEMA OPERATIVO

El sistema operativo ofrece una gran variedad de servicios, pero que

podemos agrupar en dos bloques:

Llamadas al sistema: Ofrecen soluciones básicas para poder utilizar todos los

recursos de forma correcta y controlada. Encontramos entre estas llamadas al

sistema: gestión de procesos, señalización de procesos, gestión de dispositivos de entrada/salida, gestión del sistema de archivos y funciones de tiempo.

Intérprete de órdenes: Es el encargado de traducir y comunicar al sistema

operativo lo que quiere hacer el usuario del sistema. Este programa reconoce un conjunto limitado de órdenes que, básicamente, permiten al usuario

acceder, modificar, crear y proteger la información.

Page 164: sistemas operativos, redes y bases de datos

4 · Sistemas operativos

TEMA 2 EL SISTEMA OPERATIVO: UNA MÁQUINA VITUAL

1. UNA INTRODUCCIÓN A LA MÁQUINA VIRTUAL

1.1. El concepto de máquina virtual

El sistema operativo define una máquina virtual sobre la cual los usuarios

pueden trabajar con una mayor comodidad de la que lo harían si trabajasen directamente sobre los elementos que componen el sistema; es decir el sistema

operativo esconde el hardware mediante una capa de software que tiene dos

objetivos principales: La abstracción del sistema como un hardware determinado para tener una

visión global y sencilla de la máquina.

Proporcionar un funcionamiento nuevo y seguro, adaptado al usuario que

accede al sistema y además protegido para evitar corromper el funcionamiento correcto de la máquina.

Las capas del sistema que aparecen las podemos observar en la figura

adjunta y se definen en 3 niveles:

Intérprete de órdenes: Aquí se

introducen órdenes directamente que son

interpretadas por el sistema de manera inmediata.

Herramientas del sistema y librerías:

Accesibles mediante el intérprete de

ordenes y también para el programador como herramientas de apoyo a su labor.

Núcleo del sistema operativo:

Contiene rutinas de gestión del sistema más relacionadas con el hardware (del

que se encuentra muy muy cerca). El código que se ejecuta a este nivel lo hace

con privilegios de sistema, es decir como

supervisor.

1.2. El concepto de sesión de trabajo

En los sistemas multiusuario para poder utilizar el sistema se tiene que iniciar una sesión de trabajo. Es un proceso de identificación que tiene 3 fases:

Entrada en el sistema: o fase de login, donde se le pide al

usuario su nombre de usuario (username) y su contraseña

correspondiente (password). Cuando se introduce el hombre el sistema operativo lo busca en la lista de usuarios

autorizados (primer nivel de seguridad), cuando lo encuentra

compara la contraseña con la introducida por el usuario (segundo nivel) y si coinciden le asigna el entorno propio de

ese usuario y se inicia la sesión de trabajo. Uso del sistema: El usuario interacciona con el intérprete

de órdenes, uso normal del sistema.

Salida del sistema: o logout, el usuario declara que ha

terminado la sesión de trabajo y desea abandonarla, de esta

forma se liberan los recursos que se le tiene asignados y, por otro lado al cerrar la sesión ningún otro usuario puede

usar la cuenta abierta (la cuenta es el entorno de trabajo y los privilegios a que tiene acceso por ser ese usuario).

Tema 2

Una introducción a la máquina virtual

1. Una introducción a la

máquina virtual 2. Fases de ejecución de un

programa

3. Los espacios de direcciones de un proceso

4. Los mecanismos de entrada al sistema operativo: traps,

excepciones e interrupciones

Capas del sistema operativo

Entrada en el sistema

Page 165: sistemas operativos, redes y bases de datos

Sistemas operativos · 5

TEMA

1.3. El intérprete de órdenes

El intérprete de órdenes es un programa que se encarga de interpretar y

comunicar al sistema lo que el usuario desea hacer; este programa al iniciar una sesión de trabajo se carga en memoria y no se descarga hasta que no se acaba la

sesión de trabajo. Su esquema de funcionamiento lo vemos en la figura lateral. De

este modo de funcionamiento se desprende que su misión es solicitar de manera cíclica, mediante un bucle una orden para ejecutar hasta que tenga lugar la de

salir. Existen dos tipos de órdenes: las internas (forman parte del núcleo del sistema operativo) y las externas (se suelen encontrar en un directorio concreto

del sistema de ficheros o sigue una ruta concreta –path-).

La forma en la que el sistema indica que ya está preparado para recibir

órdenes es escribir en pantalla una combinación de caracteres o prompt, que por ejemplo en MS-Dos es C:\>. En la actualidad el intérprete de órdenes ha quedado

un poco disimulado por el uso de entornos gráficos basados en ventanas.

Las modalidades de ejecución del intérprete de órdenes son:

Primer plano: o foreground: el intérprete de órdenes pasa el control al

programa que corresponde y no lo recupera hasta que finaliza por completo la ejecución.

Segundo plano: o background: se inicia la ejecución de la orden solicitada

pero concurrentemente se sigue ejecutando el intérprete de órdenes. Diferidas: Se admite la ejecución de órdenes en un momento especificado

previamente. Por ejemplo los cálculos intensivos o largas simulaciones durante

la noche.

El intérprete de órdenes también se puede utilizar como lenguaje de

programación a través de ficheros de texto (por ejemplo los batch en Ms-Dos) en los que se pueden guardar una secuencia de órdenes; y también se puede utilizar

como personalizador del entorno de trabajo, ya que cuando un usuario se identifica (logon) el intérprete de órdenes habilita por defecto las herramientas,

programas, path, etc, que el usuario ha decidido previamente.

1.4. El sistema operativo desde el punto de vista del programador

El usuario se fija en su sistema operativo sobre todo en los programas que

tiene accesibles y en el intérprete de órdenes. En cambio el programador ve los recursos físicos del sistema y no tanto la capa de software colocada encima. El

programador suele utilizar principalmente las librerías del sistema (procedimientos de uso común que se añade a sus aplicaciones y que hace

disminuir el código en toda programación) y las llamadas al sistema.

Esquema de funcionamiento

sacar prompt

leer orden

Mientras la orden no sea

“salir” hacer

ejecutar la orden

sacar prompt

leer nueva orden

fin mientras

Prompt en Ms-Dos y en Windows XP

Page 166: sistemas operativos, redes y bases de datos

6 · Sistemas operativos

2. LAS FASES DE EJECUCIÓN DE UN PROGRAMA

2.1. El concepto de proceso

Existen varias definiciones distintas para el concepto de proceso, pero una de las más aceptadas es la de “un programa

en ejecución”. Un programa es la descripción detallada para la

resolución de un problema de manera general, en abstracto; mientras que un proceso es la aplicación en concreto del

programa a un caso particular y en un momento determinado, con la asignación de unos recursos concretos. Un proceso

determinado es único e irrepetible, mientras que un programa se

puede ejecutar múltiples veces. Por ejemplo, en la figura lateral se pueden observar parte de los procesos abiertos en este

momento por mi sistema; cada proceso en ejecución es irrepetible, porque cerrar un proceso y volverlo a abrir ya supone

una instancia diferente del mismo.

2.2. El lenguaje informático

Los programadores escriben sus programas en ficheros de

texto que siguen unas normas de un lenguaje informático determinado, y que se intenta acercar en la medida de lo posible al lenguaje

natural (más cercano a las personas de habla inglesa que al resto de lenguajes

naturales). Este lenguaje de programación es una convención de sentencias y estructuras de datos que pueden convertirse en lenguaje máquina (lenguaje que

entiende el computador) y que se pueden ejecutar.

Clasificaremos los distintos tipos de lenguajes en: Lenguaje de alto nivel: Escribimos las instrucciones en un formato texto muy

cercano al lenguaje natural, aunque con reglas más estrictas. Este lenguaje

luego será traducido por un compilador para pasarlo a lenguaje máquina.

Lenguaje ensamblador: Para simplificar el uso directo del lenguaje máquina

(lenguaje binario de 1 y 0) se han diseñado lenguajes en los que cada instrucción máquina se corresponde con una instrucción en un lenguaje

mnemotécnico más inteligible. Aun así el lenguaje ensamblador cada día es más sofisticado y casi resulta inviable programarlo a mano, por lo que esta

tarea tan compleja queda reservado a compiladores y optimizadotes de código.

Código máquina: Las únicas instrucciones que reconoce un procesador son

éstas, en código binario.

2.3. El proceso de creación de un programa ejecutable

En la página siguiente puede observarse una gráfica con todo el proceso de creación de un programa ejecutable. Vamos a estudiar los distintos pasos:

Edición En esta fase el programador escribe todas las instrucciones del programa

en un fichero fuente que no es más que un fichero de texto. Para ello puede utilizar cualquier editor de texto más o menos complejo para su edición. Hay

editores específicos para lenguajes determinados que ayudan a programar,

asignando colores distintos a diferentes partes del programa o comandos, etc.

Compilación (Ensamblaje) Es el proceso de traducción de un programa escrito en alto nivel a un

equivalente en lenguaje máquina; es decir, desde un fichero fuente, obtenemos un

fichero objeto. A partir de esta fase, independientemente del lenguaje de alto nivel utilizado C, Java, etc, los ficheros objetos ya estarán escritos en un mismo

“idioma”. Pero el programa no está terminado ya que el fichero objeto no suele ser único sino que está dividido normalmente en varias partes que facilitan su

Procesos: Programas en ejecución

Page 167: sistemas operativos, redes y bases de datos

Sistemas operativos · 7

TEMA

manipulación y edición y porque los programas más pequeños de uso común como

cálculos matemáticos y operaciones de entrada/salida se encuentran generalmente compilados y programados en las librerías.

Montaje (Enlazado)

El montaje es el proceso que se encarga de

agrupar todos los módulos correspondientes a un programa, así como las librerías (si hacen falta)

para construir un único programa ejecutable. También se llaman enlazadores porque su principal

misión es resolver las direcciones externas entre los módulos, así como con la librería; con lo que

obtenemos un programa ejecutable definitivo con

un espacio lógico de direcciones que está completamente construido. El encabezamiento de

este fichero contiene información relativa al procedimiento que hay que seguir para cargarlo en

memoria.

Carga

La principal tarea del cargador es buscar los recursos que solicita el programa ejecutable

(incluida la memoria). Así que el cargador adapta las direcciones lógicas de los programas ejecutables

a direcciones físicas de la memoria real del sistema.

Además transfiere el control a la primera instrucción del programa y marca el proceso como preparado.

Ejecución (Depuración)

Los programas depuradores controlan la ejecución del programa, por lo que

el programador puede fijar los puntos de detención de la ejecución y estudiar si se va desarrollando la ejecución adecuadamente, así pueden limitarse los puntos en

los que aparecen errores e intentar subsanarlos.

2.4. Las librerías de sistema

En el proceso de creación del programa ejecutable hemos hecho varias veces referencia a las librerías del sistema; éstas son un conjunto de módulos

objeto organizadas de manera adecuada y suministradas por el fabricante del sistema operativo. Contienen las denominaciones de procedimientos, parámetros

necesarios y formas en las que pasarlos para poder disponer de muchos más

métodos para ejecutar nuestros programas ejecutables y, de paso, ahorrarnos líneas de código.

Existen tres grandes familias de librerías a nuestra disposición:

Librerías estándar: Son las más genéricas y sus áreas más comunes son la

gestión de ficheros, dispositivos de entrada/salida, funciones matemáticas,

manejo de ficheros, etc. Librerías especializadas: Son opcionales y se añaden al sistema para

resolver problemas específicos, por ejemplo librerías de cálculos matemáticos

complejos, de cálculos estadísticos y se suelen emplear específicamente en entornos industriales.

Librerías de llamadas al sistema operativo: Adaptamos nuestro programa

ejecutable al formato de llamadas, parámetros, etc del sistema operativo que utilizamos. Eso sí, solo podremos hacer esas llamadas que el sistema operativo

que se está ejecutando nos permita.

Proceso de creación de un programa ejecutable

Page 168: sistemas operativos, redes y bases de datos

8 · Sistemas operativos

3. LOS ESPACIOS DE DIRECCIONES EN UN PROCESO

Un programa reubicable es aquel que se puede ejecutar en diferentes direcciones que le son asignadas por el cargador del programa. Así podemos

distinguir dos tipos de direcciones de memoria: Direcciones lógicas: Son las referenciadas por el programador. Son por tanto

referencias locales y no reales.

Direcciones físicas: Son las direcciones asignadas en tiempo de carga, es

decir, el lugar donde realmente residirá el proceso durante su ejecución.

Obviamente la propiedad de la reubicación hace referencia a la capacidad de

cargar y después ejecutar un programa en cualquier posición de la memoria. Ello hace necesario un mecanismo de traducción entre las direcciones lógicas y físicas

en la memoria y se puede llevar a cabo a través de dos sistemas:

Reubicación estática: Se realiza antes o justo durante la carga del programa en la memoria. La línea inicial de carga suele reverenciarse como 0 y a partir de

ella el resto de direcciones del programa serán direcciones lógicas relativas a

esta línea inicial. Tras ser cargado ya no hay diferencia entre direcciones lógicas y físicas; el problema de esto es que si el proceso por alguna razón

tiene que salir del espacio físico asignado, o bien vuelve luego exactamente al mismo sitio o tiene que volverse a cargar desde el principio. A causa de este

problema este formato de reubicación se limita a “ciertos” sistemas operativos.

Reubicación dinámica: La transformación entre las direcciones físicas y

lógicas se efectúa en tiempo de ejecución y no en tiempo de carga. Se puede por tanto cargar en cualquier posición de memoria y una parte del hardware es

el encargado de hacer el trabajo de reubicación. Para ello suele utilizar los registros de base más la dirección lógica y resulta completamente transparente

para el programador.

4. LOS MECANISMOS DE ENTRADA AL SISTEMA OPERATIVO: TRAPS EXCEPCIONES E INTERRUPCIONES

Vamos a estudiar en este punto la llamada a los servicios del sistema

operativo en tiempo de ejecución. Lo que se hace es ceder el control de la ejecución a una parte del código que se ejecuta en el núcleo (kernel o corazón) del

sistema operativo. Es como si hiciéramos una llamada a cualquier subrutina de una aplicación pero ejecutada en modo sistema; porque así tiene una mayor capacidad

para gestionar sus propios recursos del sistema, el código está mucho más depurado y resulta más fiable, ya que es código del propio sistema operativo el que

estamos utilizando.

4.1. Las rutinas de servicio del sistema operativo

Las rutinas de servicio son funcionalidades que puede ejecutar el

procesador y que hace lleva a cabo al hardware operaciones realmente complicadas

pero con la seguridad de que es el propio sistema operativo el que las realiza y gestiona. Los servicios dependen un poco de cada sistema operativo pero en

general podemos dividirlos en 7 grandes grupos: Gestión de procesos: Creación, eliminación, suspensión, reanimación y

asignación de procesos, así como la cuota de CPU asignado a cada uno de

ellos. Señalización entre procesos: En un sistema multitarea el nexo natural de

unión entre las aplicaciones en ejecución, evidentemente es el propio sistema

operativo. Señales, semáforos, regiones críticas…

Gestión de dispositivos de entrada/salida: Crear, abrir y cerrar canales de

entrada/salida, así como leerlos y escribirlos. Gestión directa de los recursos del sistema: Dependen un poco de cada

sistema operativo, pero suele contar entre otros con la gestión de la memoria

del sistema.

Page 169: sistemas operativos, redes y bases de datos

Sistemas operativos · 9

TEMA

Gestión del sistema de archivos: Crear, eliminar, copiar, cambiar de

nombre ficheros y directorios.

Protecciones: Determina si un servicio determinado se puede dar a un

usuario o no (por ejemplo compartir una impresora o leer un determinado fichero o escribir sobre él), es más utilizado por los administradores de sistemas

que por los usuarios. Funciones de tiempo: Referencias temporales de los procesos.

4.2. Los mecanismos de acceso a los servicios

Estudiamos aquí como podemos, voluntariamente desde una aplicación,

acceder a estos servicios del sistema operativo, es decir, como transferir el control de la CPU al sistema operativo (pasamos de modo usuario normalmente, a modo

supervisor con el consecuente cambio de privilegios). Hay dos métodos: Puntos fijos: Se realizan las llamadas de manera idéntica a cualquier

procedimiento de usuario, porque entendemos que en el núcleo del sistema

operativo están así codificadas, como meros procedimientos. El problema es

que como el núcleo del sistema operativo se carga en memoria al arrancar el PC, puede haber problemas para vincular los nombres simbólicos de los

procedimientos con los nombres reales que encontrarán los procesos durante su actividad; podemos intentar solucionarlo de dos formas:

o Se activa el procedimiento a través de su dirección real, lo cual

representa muchos inconvenientes. o Se utilizan nombres simbólicos y se suministran las direcciones para las

librerías del sistema. Ambas soluciones son sensibles a los cambios de ubicación en los

puntos de entrada al sistema operativo, lo que no garantiza la portabilidad de las aplicaciones durante las distintas versiones de un mismo sistema

operativo o a causa de diferentes configuraciones de software.

Llamadas al supervisor o traps: Se transfiere el control indirectamente para

la utilización de una tabla de direcciones de las rutinas de servicio. En el momento de la carga el memoria del núcleo del sistema operativo, las entradas

de la tabla de direcciones de las rutinas de servicio se llenan con las direcciones reales de cada rutina. Si no varían estos números, estaremos garantizando la

portabilidad del código a las diferentes versiones del sistema operativo o a

diferentes configuraciones hardware. Las llamadas al supervisor son instrucciones hardware especializadas en transferir el control de la ejecución al

sistema operativo (es una clase concreta dentro del conjunto general de interrupciones del sistema).

4.3. Los mecanismos básicos de transferencia

El control de la ejecución de un código al sistema operativo puede transferirse por voluntad del proceso en ejecución o por cualquier otro motivo.

Existen tres mecanismos básicos para llevarlo a cabo: Llamadas explícitas al sistema operativo: Son puntos concretos del código

de usuario donde se realiza una transferencia explícita del control al sistema

operativo, son acontecimientos síncronos.

Excepciones: Son roturas de secuencias no previstas pero provocadas

directamente por la ejecución del mismo código del usuario en curso (por ejemplo, la división por cero). La interrupción llama a una rutina de servicio y

se intenta solucionar el problema o se informa al sistema operativo de la situación. No podemos generalizar la situación posterior pero a veces no queda

más remedio que suspender la ejecución del proceso. Interrupciones: Son sucesos asíncronos totalmente ajenos al proceso en

ejecución, pero su resultado es la transferencia del control de la CPU al sistema

operativo.

Page 170: sistemas operativos, redes y bases de datos

10 · Sistemas operativos

4.4. El núcleo del sistema operativo

El núcleo (o kérnel) es la parte del sistema operativo formada por un

conjunto de procesos ubicados siempre en la memoria principal. Se encarga de gestionar el hardware y de implementar las funciones más básicas de la gestión de

procesos, memoria y entrada/salida. Entre ellas destaca la gestión de las

interrupciones, excepciones y llamadas al supervisor. El núcleo en sí es solo una pequeña parte del sistema operativo, pero es el

código más utilizado y por ello se carga en la memoria, no todo el sistema operativo tiene que cargarse en la memoria. En la tabla siguiente se muestra un

diagrama de las posibles formas en las que se puede ejecutar el núcleo.

Es conveniente observar que el núcleo del sistema operativo es la parte del

software que guarda una relación mucho más directa y estrecha con el hardware y por ello este núcleo utiliza todas las herramientas que el hardware puede

ofrecernos. Los mecanismos más significativos que utiliza son los siguientes: Ejecución en modo privilegiado: Le permite acceder a todos los registros

de control de la máquina y ejecutar instrucciones que en modo normal

provocarían una excepción. Podemos pasar de modo usuario a sistema (como

ya sabemos haciendo una llamada a sistema –por un código en ejecución- o por una interrupción de hardware), de sistema a usuario (cuando ha acabado la

rutina de servicio del núcleo que habíamos invocado) o de sistema a sistema (cuando se atiende una interrupción mientras se está ejecutando código del

sistema). Jerarquización de interrupciones mediante prioridades: Para poder

organizar de manera correcta la urgencia de los servicios que se solicitan al

núcleo es imprescindible que se organicen por prioridades. En la tabla lateral

podemos observar un ejemplo típico de organización de interrupciones.

Gestión de interrupciones

Prioridad en interrupciones

Page 171: sistemas operativos, redes y bases de datos

Sistemas operativos · 11

TEMA

TEMA 3 LA GESTIÓN DE LA MEMORIA

La gestión de la memoria se encarga básicamente de asignar la memoria

física del sistema, que es finita, a los procesos que lo soliciten. Ningún programa que se encuentre en el interior del sistema puede ser ejecutado si no se le ha

asignado memoria principal, de ahí su importancia.

Además la gestión de la memoria debe satisfacer dos operaciones que

pueden ser conflictivas: la protección del espacio de direcciones, es decir, que ningún proceso pudiese acceder al espacio de memoria asignado a otro proceso; y

la compartición de memoria, permitiendo espacios comunes de memoria para todos los procesos.

1. LAS FUNCIONES DE TRADUCCIÓN DE DIRECCIONES

Recordemos que en un proceso el espacio lógico del mismo es la estructura que contiene el código, los datos y la pila; mientras que el espacio físico hace

referencia a las direcciones de la memoria donde se carga el espacio lógico

señalado anteriormente, es decir, es el espacio real. También debemos distinguir lo que es el espacio de direcciones del procesador que son las direcciones que

genera el procesador a la hora de acceder al código, datos y pila del proceso; este espacio además limita el tamaño de la memoria, ya que determina el número de

posiciones de memoria a las que puede remitir el procesador.

Podemos encontrar los siguientes esquemas de reubicación en memoria

Reubicación estática en tiempo de compilación/montaje: Si es posible

saber de antemano en qué lugar de la memoria física se cargará el proceso, el

compilador genera un código ejecutable que contiene esas direcciones físicas reales. Así, las direcciones que genera el procesador, coinciden con las

direcciones físicas. En el ejemplo de la figura lateral, podemos observar en el

ejecutable (a) que como sabemos que el proceso se va a cargar a partir de la dirección @64000 de la memoria física, el compilador se encarga ya de asociar

a la variable la dirección @64066 (ya que ocupaba la dirección @66 en el código

fuente). Lo malo es esta reubicación es que si

quisiéramos que el proceso se cargase a partir de otra dirección de memoria distinta habría

que compilar de nuevo todo el programa.

Reubicación estática en tiempo de

carga: Al no ser posible conocer por anticipado el espacio real de memoria donde

se cargará el proceso, el compilador solo

puede contener direcciones lógicas; pero en tiempo de carga sí se conoce la dirección y se

produce la traducción de direcciones lógicas a físicas. Al igual que antes, el proceso lanza

direcciones físicas, con la diferencia de que si

quisiéramos situar el proceso en otro lugar de la memoria, no sería necesario volver a

compilar todo el proceso, aunque sí es necesario volver a cargarlo. Por tanto, es igual

al modelo anterior, con la diferencia d que el

fichero ejecutable contiene direcciones lógicas, en el ejemplo, observamos el

ejecutable (b).

Tema 3

La gestión de la memoria

1. Las funciones de traducción de

direcciones 2. Los modelos de gestión de la

memoria de asignación contigua 3. Los modelos de gestión de la

memoria de asignación no contigua

4. La memoria virtual

Reubicaciones estáticas

Page 172: sistemas operativos, redes y bases de datos

12 · Sistemas operativos

Reubicación dinámica en tiempo de ejecución:

Implica que la correspondencia entre el espacio de

direcciones lógico y el espacio de direcciones físico se lleva a cabo en tiempo de ejecución; ello permite que un

proceso tenga la posibilidad de moverse durante su ejecución de un lugar de la memoria a otro. También es

necesario un hardware añadido para traducir las direcciones, generalmente consiste en registros de base

que indican la dirección de la memoria a partir de la cual se

ha cargado el proceso de memoria (puede observarse en la figura de la tabla lateral). Como notas positivas decir que

permite llevar a cabo una gestión dinámica de los procesos en memoria, permite reubicarla en otro lugar de la misma y

compactarla, permite el intercambio, la partición del

espacio lógico del proceso, etc.

2. LOS MODELOS DE GESTIÓN DE LA MEMORIA DE ASIGNACIÓN CONTIGUA

En un principio no existía gestión alguna de la memoria, es decir, el usuario tenía el control completo de la misma; ello era viable en sistemas que se dedican a

entornos de trabajo muy específicos; pero completamente inviable en sistemas complejos y compartidos por una gran cantidad de usuarios.

La primera estructuración de la memoria consiste en dividirla en dos partes,

una partición destinada al sistema operativo y protegida para evitar accesos no controlados, y otra dedicada al usuario para que pudiese ejecutar los programas.

Debido a que generalmente solo se cargaba un proceso en la memoria, la compartición no tenía demasiado sentido y la reubicación solía ser estática, dado

que el proceso no dejaba la memoria hasta que no finalizaba su ejecución.

2.1. Las particiones fijas

El primer esquema que se propone para la gestión en la memoria en sistemas multiprogramados es la partición de la memoria en varios fragmentos

(generalmente de tamaños diferentes): Estas particiones se crean cuando la

máquina arranca y no se puede modificar su tamaño. Una vez definidas las particiones el sistema necesita guardar la información asociada a cada una de ellas,

como es el inicio, tamaño y estado de ocupación de la misma, y ello lo hace en la tabla de descripción de particiones (véase tabla lateral).

Cuando se quiere ejecutar un proceso que no está en memoria, se busca una partición libre y se carga el proceso allí; existen dos políticas de asignación

de memoria:

Cuando hay particiones de memoria libres, se puede asignar a la partición

que se ajusta mejor al tamaño del proceso (recordemos que las particiones suelen ser de tamaños distintos) o se le asigna la primera partición libre en la

que quepa el proceso. La primera opción optimiza lógicamente el uso del

sistema, pero es más lenta que la segunda. Cuando no hay particiones de memoria libres, se puede dejar el proceso

pendiente de ejecución y esperar que se libere otro proceso que deje una

partición de memoria lo bastante grande o se puede obligar a un proceso que está en memoria a dejar libre su partición para que se puede cargar el nuevo

proceso. Esto último es lo que se denomina intercambio del proceso o

swapping. A la hora de volverlo a cargar si la ubicación es estática se hará en el mismo espacio de memoria que ocupaba anteriormente o se podrá realizar

en una partición cualquiera (en la que quepa, claro está).

Reubicación dinámica

Particiones fijas

Page 173: sistemas operativos, redes y bases de datos

Sistemas operativos · 13

TEMA

Queda claro que en este sistema de particiones fijas, el número de

particiones determina el número máximo de procesos que se pueden tener cargados en memoria simultáneamente y además el tamaño de una partición

determina también el espacio lógico máximo que puede ocupar un proceso; además un proceso solo podrá ejecutarse si queda libre alguna partición de

memoria con el espacio suficiente para poder cargar en ella el código del proceso.

El principal problema en este tipo de sistemas es la fragmentación

interna, sucede cuando un proceso no utiliza todo el espacio de partición de memoria para él asignado y por tanto, está haciendo mal uso de la misma. Por

ejemplo, si un proceso ocupa 10K y se carga en una partición de 15K, se forma una fragmentación interna dentro de la partición de 5K.

Este sistema de particiones fijas es uno de los métodos más sencillos que soportan la multiprogramación dado que los algoritmos de gestión y asignación de

la memoria son sencillos, rápidos y fiables. Es un método adecuado para los sistemas en los que se conoce la carga de trabajo y no se produce desarrollo de

nuevos programas, aunque la mayor parte de sus inconvenientes proviene de la

falta de flexibilidad para adaptarse a las necesidades variables del sistema.

2.2. Las particiones variables

Debido a los problemas que generan las particiones fijas, se implementan

las particiones variables para intentar solucionarlos. En este tipo las particiones

variables se crean y se destruyen en función de las variaciones en la carga del sistema.

Por ejemplo, cuando se intenta ejecutar un proceso y hay que asignarle

espacio en memoria, es necesario primero saber qué parte de la memoria está

ocupada (inicialmente existe una única partición libre con toda la memoria de la que pueden disponer los programas de usuario); hecho esto se intenta encontrar

un espacio contiguo de memoria donde quepa el proceso y una vez encontrado se crea una partición introduciendo la dirección de inicio (base), el tamaño y el estado

en una tabla de descripción de particiones como podemos observar en la figura lateral. Cuando un proceso finaliza o se retira de la memoria, el sistema libera la

partición e invalida la entrada correspondiente

en la tabla de particiones del sistema.

En cuanto a las políticas de asignación de la memoria, existen varias de

ellas como puede ser asignar la primera

partición libre donde el proceso pueda caber, la menor partición de la memoria libre donde

cabe el proceso –ajustando el tamaño lo máximo posible- etc.

Las ventajas que aporta el sistema de particiones variables son:

Queda prácticamente eliminada la

fragmentación interna.

Se puede asignar la totalidad de la

memoria a un único proceso y así ejecutar procesos que requieren mucha memoria.

Podemos soportar y adaptarnos al

crecimiento dinámico de un proceso.

Por el contrario, también existen

desventajas:

Particiones variables

Page 174: sistemas operativos, redes y bases de datos

14 · Sistemas operativos

Aparece lo que se llama fragmentacion externa, dado que a medida que

finaliza la ejecución de diferentes procesos, la memoria queda fraccionada de

modo que el espacio libre no es contiguo. Por ejemplo, han finalizado dos procesos no contiguos de 300 y 100 k respectivamente, pero necesitamos

cargar en memoria un proceso de 350 K. Hay espacio suficiente, pero al no ser contiguo no lo podemos utilizar. Esto se intenta resolver con la compactación

de la memoria, consistente en reorganizar los procesos residentes en memoria, de modo que todo el espacio libre quede en una única partición. Esto

requiere que los programas cargados en memoria sean de reubicación dinámica

(lógicamente, dado que de lo contrario no los podríamos desplazar en tiempo de ejecución), y por otro lado la compactación es un proceso muy costoso en

esfuerzo del procesador y en tiempo. Requiere protocolos de asignación y mantenimiento de las particiones más

complejos que consumen más tiempo y espacio del sistema operativo.

3. LOS MODELOS DE GESTIÓN DE LA MEMORIA DE ASIGNACIÓN NO CONTIGUA

Hasta ahora, los modelos que hemos estudiado eran de asignación contigua, es decir, cada proceso ocupaba un espacio contiguo de memoria, no

había saltos ni particiones entre los procesos. Pero para una mejor gestión de la

memoria y una mejor optimización de la misma caben dos nuevos modelos, la segmentación y la paginación.

3.1. La segmentación

En la segmentación, el espacio lógico del proceso se parte en unidades

lógicas denominados segmentos. En la tabla lateral podemos observar como un mismo proceso ha sido dividido en 4 segmentos: el código, los datos, la pila y el

segmento común, cada uno de ellos con un tamaño distinto. Cada segmento se compila por

separado y cualquier objeto dentro del

segmento se identifica por el número de segmento al que pertenece y el desplazamiento

relativo dentro del segmento. Se crea una tabla de segmentos y también una tabla de

descriptores de segmento asociada a cada

proceso para poder luego acceder a su espacio real en memoria. Así para acceder a la

subturina2 se identifica con el segmento al que pertenece y se busca en la tabla de

descriptores de segmento (segmento común: 3) y la posición relativa que ocupa en ese

segmento (100) nos dará la dirección física real

del mismo. Además observamos un proceso de filtrado o búsqueda de errores. Si el segmento

al que se quiere acceder entra dentro de la longitud permitida o no. Además podemos

añadir en esta tabla otros campos para permitir

el tipo de acceso: permitido, compartido, etc. Podemos compartir código de manera sencilla y

útil. Por ejemplo si varios usuarios utilizan un mismo editor, en lugar de cargar el código del

editor varias veces en memoria se carga una

única vez y se comparte entre todos, eso sí, la parte del editor que sea específica de un

usuario en concreto no se podrá compartir, y se tendrá que duplicar.

Proceso de segmentación

Page 175: sistemas operativos, redes y bases de datos

Sistemas operativos · 15

TEMA

Como desventaja, decir que la tabla de descriptores generalmente no se

implementa en hardware, sino en software,, lo que hace la gestión de segmentos algo más lenta.

3.2. La paginación

La paginación es gestionada por el sistema operativo y lo que hace es

dividir el espacio lógico del proceso en partes de tamaño fijo, que reciben el nombre de páginas. La memoria principal también se dividirá en trozos del tamaño

de una página, denominados frames.

Por ejemplo, partimos de un sistema de

de 10 Kbytes de memoria. El tamaño de una página es de 1 K; de modo que la memoria

posee un total de 10 frames. El espacio lógico del proceso que queremos añadir a la memoria

tiene un máximo de 4 K, por lo tanto cuatro

páginas, y ocupará un máximo de 4 frames. Supongamos que nos encontramos con un

proceso que ocupa 2536 Kbytes, en cuyo caso ocupará completamente las dos primeras

páginas y una porción de la tercera, dejando la cuarta completamente vacía. El sistema busca 3

frames libres de la memoria (que no tienen que

ser contiguos) y establece la correspondencia entre página y frame, en la llamada tabla de

páginas. Cada entrada de la tabla de páginas tiene asociado un bit que se conoce como bit de

validez V, que indica si la página contiene información válida para el proceso o no.

En nuestro ejemplo las tres primeras páginas tendrán bit V a 1, y la última estará a 0.

Igualmente, para saber si un frame de memoria está libre o no, el sistema

dispone de una tabla de frames donde se indica su estado y otra serie de bits para indicar información referente a punteros, protección, compartición, etc.

Esta tabla de páginas se implementa por software y por lo tanto necesita dos accesos a memoria: un primer acceso para examinar la tabla de páginas y

obtener la dirección física del objeto que se quiere consultar y un segundo acceso para llegar al objeto en cuestión.

Este sistema al igual que los anteriores tiene ventajas y desventajas:

Se evita la fragmentación externa, aunque observamos que se genera cierta

fragmentación interna. Normalmente el último frame de un proceso no estará lleno del todo –es muy difícil que coincida el tamaño de un proceso con

múltiplos de 1024 bits-. Eso sí, el problema es mucho menor que en particiones

variables dado que el espacio despreciado siempre será muy pequeño. Cuanto menor sean las páginas/frames en tamaño, menos espacio se

desperdiciará, pero a cambio aumentará en memoria el sistema para las tablas

de páginas de todos los procesos, lo que lo puede hacer algo lento. Con bits de acceso controlado en la tabla de páginas, podemos conseguir un

acceso controlado, compartido, permitido, etc., a cada página, pero como la

división en páginas se hace de manera mecánica –por tamaño- y no por tipo de datos (código, pila, etc) se complica en modo extremo. Habría que conseguir

que los datos, el código, y demás, ocuparan las mismas páginas lógicas y que

no se produjesen mezclas, lo cual complica bastante la protección de la información.

Paginación de un proceso en 4 páginas

Page 176: sistemas operativos, redes y bases de datos

16 · Sistemas operativos

4. LA MEMORIA VIRTUAL

Hasta ahora todos los procesos estudiados se cargaban completamente en la memoria para poder ejecutarse. Con la memoria virtual lo que vamos a

pretender es que un proceso solo se cargue parcialmente en la memoria, mientras que se mantiene una imagen del espacio lógico del proceso en la memoria

secundario, preferentemente el disco duro. El sistema operativo toma la decisión de

qué parte del proceso resulta imprescindible cargar para su ejecución y lo hará en función de la carga y disponibilidad.

La memoria se puede implementar igual que la segmentación o paginación en memoria que hemos visto en los puntos anteriores, la única diferencia es que

hay que añadir algunos campos más en cada entrada de la tabla de páginas o

segmentos para indicar si la página o el segmento se encuentra cargado o no en la memoria principal, estos campos son el bit de presencia P que indica si la página

está cargada en la memoria física (bit 1) o no está cargada (0); lo habitual es que no haya ninguna página cargada y lo vayan haciendo a medida que se van

necesitando. Previamente a esto se estudia el bit de validez V, para saber si la dirección que se ha dado es válida. También es necesaria una tabla de páginas

de la memoria secundaria para poder ser consultada. En fin, el proceso sería

como sigue y como podemos observar en la figura siguiente:

Se observa el bit de validez para ver si la dirección es correcta.

Se observa el bit de presencia P para saber si está o no cargada en memoria.

En caso de que no está cargada debe buscar en el disco y en la tabla de páginas de memoria secundaria para cargarla. La política de carga de

páginas determina si debemos cargar las páginas solo cuando se han solicitado y no se encuentran en la memoria principal (bajo demanda), o

también se puede adelantar trabajo aprovechando la localización espacial de los programas.

Para cargarla es necesario que existan frames libres, de no ser así dependiendo

de la política de sustitución de páginas habrá que desalojar alguna de la

memoria principal para subir la que necesitamos en ese momento.

Carga de páginas en la memoria virtual

Page 177: sistemas operativos, redes y bases de datos

Sistemas operativos · 17

TEMA

TEMA 4 LOS DISPOSITIVOS DE ENTRADA/SALIDA

1. EL CONCEPTO DE DISPOSITIVO DE ENTRADA/SALIDA

El concepto de dispositivo de entrada/salida se asocia al de periférico, como

por ejemplo los teclados, pantallas, discos o módems. Pero un dispositivo de entrada/salida es algo más, es un objeto gestionado por el sistema operativo

sobre el cual los procesos pueden realizar operaciones de lectura/escritura con la finalidad de obtener, almacenar, mostrar o transferir información.

El sistema operativo se encarga de gestionar tales dispositivos a través de: Herramientas: Que desarrollan políticas de acceso en función de las

necesidades de los usuarios.

Interfaz de acceso que es independiente de las particularidades de cada uno de

los dispositivos pero a la vez permite explotar todas las características del mismo.

Entorno portable que permite que las aplicaciones trabajen con los dispositivos

sin tener que modificarlas.

2. LAS CARACTERÍSTICAS DE LOS DISPOSITIVOS Los dispositivos presentan características singulares que el sistema

operativo tiene que gestionar de diferentes modos. Los hemos clasificado ateniéndonos a sus características físicas, de acceso y de control, pero es una

clasificación más de las muchas que podríamos haber hecho, debido a la pluralidad

de los dispositivos.

Debido a ello también hemos de tener en cuenta que accedemos a los dispositivos y los manipulamos con operaciones distintas y con parámetros

distintos; además estos dispositivos según el tipo pueden producir distintos

resultados e incluso dar errores diferentes frente a situaciones análogas.

El sistema operativo es el encargado de independizarnos de todos estos casos diferentes mediante una gestión de la máquina virtual que hace que toda

esta variedad sea transparente para el usuario.

Las características físicas de los dispositivos son las siguientes:

Extraíbles o fijos: Hay dispositivos fijos como los discos duros y otros

extraíbles como los discos compactos. Los dispositivos extraíbles necesitan un tratamiento adicional por parte del sistema y de los usuarios, ya que debe

asignarse el dispositivo a un único usuario al mismo tiempo y hay que informar

al sistema del hecho de que se ha insertado o se procederá a extraer el dispositivo extraíble.

Capacidad de almacenamiento: Se caracteriza por la geometría u

organización del espacio de almacenamiento en sectores, pistas y caras (discos duros), en bloques (cintas), etc.; también reconocer que el tipo de

almacenamiento puede ser permanente o temporal: permanente como un disco duro donde queda la información hasta que explícitamente se borra o

temporal como puede ser un fichero temporal (por ejemplo la cola de impresión

de un documento) que cuando acaba su función deja de existir y se borra. Tipo de unidad de transferencia: Encontramos los dispositivos que

transfieren caracteres como puede ser un terminal o dispositivos que

transfieren bloques de caracteres como es un disco que transfiere como mínimo 512 caracteres.

Tema 4

Los dispositivos de entrada/salida

1. El concepto de dispositivo de

entrada/salida 2. Las características de los

dispositivos

3. Los dispositivos reales 4. La independencia de los

dispositivos 5. La gestión de dispositivos en

UNIX

Dispositivos de

entrada/salida

Page 178: sistemas operativos, redes y bases de datos

18 · Sistemas operativos

Velocidad de transferencia; Suele ser menor que la del procesador, por lo

que éste aplica técnicas que intenten reducir el tiempo de espera:

o Buffering o almacenamiento en memoria intermedia: tiene la función de suavizar la diferencia de velocidades entre el procesador y los

dispositivos, almacenando en una memoria entre el dispositivo y el procesador los datos que se van a procesar (por ejemplo en la

grabación de un CD). o Spoolin o gestión de colas: Permite que la entrada/salida de un

proceso tenga un paso intermedio por dispositivos de gran capacidad

de almacenamiento como pueden ser el disco duro. Por ejemplo a la hora de imprimir un documento relativamente largo se perderá el

control del PC hasta que se haya impreso completamente; como la impresora es más lenta esto supone un tiempo de desfase enorme, por

lo que se gestiona la impresión mediante la cola de impresión.

Tipo de codificación de la información: Tiene que seguir unas normas de

codificación que dependan de cada dispositivo. Por ejemplo un terminal orientado a caracteres debe seguir el código ASCII de 7 u 8 bits.

Estructura de la información: Condiciona esto las operaciones que podemos

llevar a cabo con dicha información. Por ejemplo podemos compilar un fichero fuente, y podemos ejecutar un fichero ejecutable, pero no al revés.

Entre las características de acceso se encuentran:

Acceso a dispositivos de entrada/salida: Los dispositivos pueden ser de

entrada, salida o ambos a la vez, y en función de ello tendrá sentido o no una determinada operación de acceso. Por ejemplo podemos hacer una salida por

impresora, pero es absurdo hacerla sobre un ratón. Acceso compartido o exclusivo: Un ejemplo de dispositivo exclusivo es la

impresora. Es evidente que no se puede imprimir más de un documento al

mismo tiempo; pero el propio sistema se encarga de proporcionar mecanismos

de exclusión como los semáforos o la compartición que solucionan el problema. Acceso secuencial, indexado o directo: Según el dispositivo se tendrá

acceso secuencial (una cinta), directo (disco duro) o indexado.

Acceso síncrono o asíncrono: La mayor parte de los dispositivos tienen un

acceso síncrono, es decir, si la información no se encuentra disponible en ese momento, el proceso que efectúa el acceso esperará hasta que lo esté. Si es

asíncrono, en cambio, el proceso informa que no hay información y continúa

su ejecución (también puede advertir cuando los datos ya estén disponibles). Otras características: Como son el activar o no el modo de echo, por

ejemplo lo habitual es ver que se introducen los caracteres que se introducen

por el teclado (echo activado) excepto en las password donde no se ve (echo desactivado). También es útil el modo de edición cooked en el que

determinados caracteres de entrada se interpretan como órdenes y no como simples caracteres.

Y por último destacan las características de control: Características del controlador: El sistema controla los periféricos mediante

una serie de puertos que pertenecen al hardware denominado controlador.

Pueden ser muy distintos, por DMA, por interrupciones, por encuesta… El sistema operativo esconde a los usuarios todas estas particularidades.

Lenguajes de órdenes: Algunos dispositivos utilizan lenguajes de control

específicos como son el lenguaje PostScript para determinadas impresoras

3. LOS DISPOSITIVOS REALES

Un dispositivo real es un dispositivo que existe realmente y que es la

combinación de diferentes elementos de hardware y software, como se puede observar en la imagen de la página siguiente.

Page 179: sistemas operativos, redes y bases de datos

Sistemas operativos · 19

TEMA

Los dispositivos pueden ser físicos, lógicos o

virtuales. Un dispositivo físico es un dispositivo que existe físicamente y está formado por el periférico + su hardware

de control (parte física) y por el software que lo gestiona (driver). Tipos de estos dispositivos son las impresoras,

teclados, pero también los discos duros, la memoria RAM,

etc. Estos dispositivos son los más evidentes en un sistema y rápidamente los identificamos como tales.

No sucede lo mismo con un dispositivo lógico,

pues no existe físicamente sino como el resultado de un software del sistema que crea este dispositivo, están

formados únicamente por su driver. Un ejemplo puede ser la

unidad virtual de DVD/CD que puede crear el software de grabación Nero para poder montar imágenes de

grabaciones. Otro dispositivo lógico es la ventana, que combina cuatro dispositivos físicos para existir: pantalla,

memoria, teclado y ratón; pero en sí la ventana es un área

gráfica almacenada en la memoria que se representa total o parcialmente sobre una ventana.

4. LA INDEPENDENCIA DE LOS DISPOSITIVOS

Como programadores nos interesa poder realizar programas portables, que se adapten a diferentes situaciones y esta necesidad por supuesto, incluye el

entorno de entrada/salida donde se van a ejecutar. Para ello debemos independizar el código de los programas con respecto a los dispositivos que se van a utilizar.

El primer paso para esta independización es la utilización de los

dispositivos virtuales. Un dispositivo virtual es un dispositivo que, a priori, no se

encuentra asociado a ningún dispositivo real, lo utilizará el programador pero sin saber en principio, sobre qué dispositivo en concreto se van a llevar a cabo las

operaciones que se especifican en él. Más tarde, en la ejecución del programa, tendrá lugar la asociación entre el dispositivo real y el virtual de dos formas:

Asociación implícita: El sistema y el proceso que ha iniciado la ejecución del

programa se encarga de efectuar la asociación. En general, los dispositivos

virtuales asociados implícitamente se denominan dispositivos estándar y contamos con el estándar de entrada, el de salida y el de error.

Asociación explícita: Se efectúa la asociación por el mismo programa durante

la ejecución. A partir del momento en que se ha realizado la asociación, el programa redirigirá todas las entrada/salidas del dispositivo mediante el

dispositivo virtual.

Pero no solo con los dispositivos virtuales conseguimos la independencia de los

programas, ya que si se requieren operaciones específicas de los dispositivos reales con los cuales están asociados, no hemos ganado nada. Necesitamos operaciones

uniformes es decir, conocer cuales son las operaciones más utilizadas por los programas y las más comunes en los dispositivos, para poder redefinirlas como un

conjunto de operaciones independientes de las características de los dispositivos.

Encontramos dos grandes tipos de operaciones: las básicas de acceso y las de control.

Operaciones básicas de acceso: Son dos: leer y escribir y nos tienen que

permitir acceder a la información con independencia del dispositivo. Para que

sean realmente compatibles con todos los dispositivos, debe incluir estas

operaciones el tipo de acceso, el tipo y la estructura de datos que se tiene que transferir. Las operaciones de acceso leer y escribir quedan así definidas:

o Estado = leer (disp, buff, cont).

Dispositivos físicos, lógicos y virtuales

Page 180: sistemas operativos, redes y bases de datos

20 · Sistemas operativos

o Estado = escribir (disp, buff, cont).

Donde disp es el dispositivo virtual sobre el que se quiere trabajar, buff es

la variable desde la cual se extraerán o se introducirán los datos y cont es el número de datos que hay que transferir. Si no añadimos más parámetros

queda claro que accedemos al mismo tipo de datos, generalmente es el más

elemental y es el byte. El motivo de ello es que no se pueden reconocer todos los tipos posibles, por más tipos que el sistema reconociese, siempre surgirían

aplicaciones con tipos nuevos; además el Sistema operativo a través de librerías y herramientas puede hacer que posteriormente esta política se adapte

a situaciones individuales.

Operaciones básicas de control: Hay 3 que son posicionar, abrir y cerrar.

La operación posiciona nos permite efectuar accesos directos dentro de la

información en aquellos dispositivos que lo soporten. En general el orden que seguimos en una sesión de acceso a un dispositivo es:

o Asociar un dispositivo real a uno virtual de manera explícita.

o Inicializar las estructuras de datos internos del sistema operativo que

sean necesarias para realizar los accesos (secuencial y directo). o Verificar los derechos de acceso que tiene el proceso sobre el

dispositivo.

Así las operaciones de control podrían ser: o Estado = posicionar (disp, pos).

o Disp = abrir (nombre, op).

o Estado = cerrar (disp).

Donde op es el tipo de acceso que se quiere efectuar y nombre es el nombre del dispositivo real.

5. LA GESTIÓN DE DISPOSITIVOS EN UNIX

UNIX como todos los sistemas operativos, ofrece una visión de los

dispositivos que hace que las características propias de cada uno sean

transparentes para el usuario. El sistema UNIX reconoce dos tipos de dispositivos: Dispositivos de bloques: Como los discos, cintas y ficheros; permiten el acceso

directo y utiliza una memoria de cachés de bloques con la finalidad de mejorar

el rendimiento en sus accesos. Dispositivos de caracteres: Como terminales, impresoras, ratones… los

accesos se realizan de manera secuencial

Internamente los diferentes tipos de dispositivos se identifican por su tipo

básico (bloques o caracteres), por un número denominado major (tipo de

dispositivo) y un número minor (dispositivo distinto dentro del mismo tipo major).

UNIX gestiona los dispositivos mediante drivers asociados a cada tipo de dispositivo como se muestra en la figura de la página siguiente. El usuario que

quiere dirigirse a un dispositivo real de UNIX debe hacerlo por medio del sistema de

ficheros mediante el cual se nombran ficheros especiales. Por ejemplo en UNIX la impresora es /dev/1p0 y el disco duro /dev/hda. UNIX utiliza los file descriptor

que son números locales en el proceso que forma parte den entorno de ejecución de un dispositivo. Encontramos 3 file descriptors: el 0 o estándar de entrada, el 1 o

estándar de salida y el 2 o estándar de error. En la página siguiente también

podemos apreciar las entrada/salida estándar de los procesos.

Disp. bloques / caracteres

Page 181: sistemas operativos, redes y bases de datos

Sistemas operativos · 21

TEMA

Un caso especial de dispositivo lo constituyen las

pipes. Una pipe es un dispositivo lógico destinado a comunicar procesos. Su funcionamiento es el de una

cola de caracteres con una longitud fija en la que los procesos pueden escribir y leer. Cuando se intentar leer

sobre una pipe vacía, se quedará bloqueado hasta que

otro proceso escriba en ella los caracteres suficientes como para que se pueda efectuar una lectura. Otro caso

es intentar escribir sobre una pipe llena; en este caso hasta que otro proceso no haya leído los suficientes

caracteres no se producirá la escritura.

Existen las named pipe que es un dispositivo normal que forma parte del sistema de ficheros y su

comportamiento es idéntico al de cualquier dispositivo. Y luego la pipe que es un dispositivo que se crea en el

momento en que un proceso lo abre y se destruye

cuando se cierra el último proceso que lo tiene abierto. Una vez creada, los diferentes procesos lo asocian a un

dispositivo virtual de manera implícita, por ello las pipes no tienen asociado ningún nombre que aparezca en el

sistema de ficheros.

El tema más interesante de UNIX desde el punto

de vista de la entrada/salida es la facilidad con que se pueden redireccionar los files descriptors estándares de

los procesos desde el shell. El símbolo < se utiliza para redireccionar el estándar de entrada, y el símbolo > el

de salida; así por ejemplo:

$ps > nombre guarda el estado de los procesos actuales en un fichero nombre. Otro ejemplo más:

$ tail < nombre muestra por la salida estándar actual las diez últimas líneas del fichero nombre.

Otra función muy interesante es el posible encadenamiento de la

ejecución de más de un programa mediante pipes. Esto se consigue

redireccionando la salida estándar de un proceso y la entrada estándar de otro a una pipe; para indicar la conexión de dos procesos se utiliza el símbolo |. Por

ejemplo: $ps –aux | sort +2 -3 | tail > nombra Envía al fichero nombre la información de los nueve procesos que tuilizan durante

más tiempo la CPU.

Esquema de las entradas/salidas en UNIX

Entrada/salida estándar de los procesos

Page 182: sistemas operativos, redes y bases de datos

22 · Sistemas operativos

TEMA 5 EL SISTEMA DE FICHEROS

1. EL CONCEPTO DE FICHERO

El sistema de ficheros es el encargado de gestionar el conjunto de

ficheros contenidos en un mismo dispositivo de almacenamiento. Se encarga de proporcionar un espacio de nombres y un control de acceso a todos los

dispositivos.

Ahora bien, un fichero es un dispositivo lógico formado por una

agrupación lógica de información almacenada en un dispositivo físico, por ejemplo, un disco, una cinta o la memoria, que se puede manipular como un todo. La

información que incluye tiene en común un conjunto de propiedades que la caracterizan, y son:

La información relativa al contenido del fichero y a su modificación: es decir,

tamaño, fecha de creación, última modificación, tipo de información. La ubicación de esta información dentro del dispositivo de almacenamiento,

así el sistema podrá localizar el fichero dentro del dispositivo.

La accesibilidad del fichero: es decir la protección del mismo, quien puede

realizar operaciones, escribirlo, borrarlo, quien es el usuario propietario…

Así pues podemos encontrar ficheros ejecutables, que el sistema operativo es

capaz de ejecutar (dado que tienen una estructura y un encabezado que así se lo indican), otras veces abren un programa gráfico si el fichero es una imagen… y un

caso especial es el del fichero directorio, que es una lista de parejas de nombres

y números cuya finalidad es dar nombre a los ficheros y permitir su localización.

2. EL ESPACIO DE NOMBRES

En este apartado vamos a tratar dos aspectos relacionados con el espacio de nombres: La estructura de los espacios de nombres y las operaciones que

podemos realizar sobre la misma.

¿Por qué necesitamos nombres? Esta bien claro que dentro del sistema se identifica cada objeto (entendiendo por objeto cualquier fichero, directorio,

dispositivo, proceso, etc.) por un nombre interno que consiste en direcciones de

memoria; pero claro a los usuarios nos resulta más fácil recordar que el dispositivo con el nombre impresora es la impresora, que recordar un número que suele tener

varias cifras. Una de las funciones del sistema de ficheros es facilitar una traducción entre unos nombres a los que estamos acostumbrados los usuarios y

los nombres internos del sistema.

El sistema operativo además implementa la

función de traducción de los nombres mediante estructuras de datos llamadas directorios, los cuales

a su vez se implementan mediante ficheros en los que

el sistema almacena la estructura de datos, consistente en una tabla que relaciona los nombres

que contiene el directorio con los nombres internos del sistema operativo (ver figura lateral). Un sistema

operativo puede ofrecer una visión de un único espacio de nombres para todos los objetos y el

sistema de ficheros (así lo hace UNIX que no

diferencia distintas unidades) o un espacio de nombres separado e independiente para cada tipo de

Tema 5

El sistema de ficheros

1. El concepto de fichero 2. El espacio de nombres

3. La protección 4. El sistema de ficheros y la

protección en UNIX

Estructura de un fichero directorio

Page 183: sistemas operativos, redes y bases de datos

Sistemas operativos · 23

TEMA

objeto (Como Ms-Dos que el disquete y su contenido es A:, el disco duro C:, LPT1,

etc).

La estructura de los espacios de nombres puede ser de tres tipos: espacio lineal, espacio jerárquico en árbol y espacio jerárquico en grafo.

La estructura en espacio lineal es la más sencilla, ya que solo tiene una dimensión en la que todos

los nombres se encuentran en el mismo nivel (como vemos en la tabla lateral. Esta estructura es adecuada

para espacios con pocos objetos, en sistema monousario ya que se trata de una estructura que permite tener una

buena visión de conjunto y conseguir una localización

rápida de cualquier objeto; pero resulta inadecuado cuando el número de objetos comienza a ser elevado, ya

que el significado que para el usuario puedan tener los nombres que nos vemos obligados a poner a los

dispositivos para no repetir, puede llegar a quedar

desvirtuado.

Por ello y porque nos gustaría poder agrupar los ficheros por tipos, trabajos o cualquier otra clasificación

que nos resulte útil, tenemos las estructuras jerárquicas. Para conseguir un espacio jerárquico tratamos los

directorios como objetos con un nombre y así pueden

formar parte de los objetos que agrupan otros directorios.

La estructura jerárquica en árbol parte de un directorio raíz del cual cuelgan otros directorios y/o

ficheros que configurarán las hojas del árbol. El nombre

absoluto es el formado por la ruta que va desde la raíz, pasando por los diferentes subdirectorios, hasta llegar al

fichero (separado cada nivel por el carácter delimitador /). Tenemos un directorio inicial y un directorio de trabajo.

Los nombres relativos serán entonces los que forma el recorrido que va desde el directorio de trabajo hasta el

fichero en cuestión. Así varios ficheros pueden tener el

mismo nombre relativo siempre que se obtengan a partir de diferentes directorios de trabajo, pues los nombres

absolutos no son iguales. Con este sistema ya podemos clasificar los ficheros en directorios distintos, pero el

problema de esta estructura es que no permite compartir

de una manera sencilla ficheros entre diferentes usuarios ni permite moverse por el árbol de directorios en sentido

ascendente, cambiando el directorio de trabajo.

Para ello tenemos la estructura jerárquica en

grafo dirigido el cual permite direccional al mismo tiempo con los nombres absolutos y relativos. Así podemos acceder a un objeto

mediante más de un nombre. Por ejemplo, en UNIX y en DOS en cada directorio figuran dos nombres especiales: “.” y “..”. El primero hace referencia al directorio

que lo contiene, así podemos referenciar el directorio en el que nos encontramos sin conocer su nombre absoluto, y el “..” es el nombre del padre del directorio, que

nos permite ascender por la estructura. Así solucionamos todos los problemas que

nos habíamos planteado anteriormente, pero eso sí, el inconveniente que surgirá después (ya lo veremos) es la gestión de estos grafos.

Las operaciones que podemos realizar sobre estas estructuras son

varias:

Distintas estructuras de los espacios de nombres

Page 184: sistemas operativos, redes y bases de datos

24 · Sistemas operativos

Operaciones de manipulación del sistema de ficheros: o Crear_SF: El sistema de ficheros se incluye dentro de un sistema de

almacenamiento. Por ello debemos dotar a cada dispositivo de un conjunto de estructuras de datos que permitan definir los ficheros, los

directorios, etc, y así poder transportarlo sin pérdida de información en el caso que se tratase de un dispositivo extraíble.

o Montar_SF: En algunos sistemas operativo s, se tiene que informar al mismo antes de acceder a una nuevo SF, tanto si se acaba de

introducir un nuevo volumen (CD) como si se ha creado una estructura

nueva, esto se requiere para poder seguir ofreciendo un único espacio de nombres.

o Desmontar_SF: Al contrario de lo anterior, por ejemplo cuando extraemos un CD.

o Verificar_SF: Podemos verificar las estructuras de datos que

configuran un SF; por norma general esto no suele formar parte del núcleo del sistema operativo, sino que son aplicaciones y utilidades.

Operaciones de manipulación de directorios:

o Localizar_objeto: Consiste en que dado un nombre absoluto o

relativo, se localiza el objeto al que hace referencia. No es en sí una

operación única, sino que suele formar parte de multitud de llamadas y procedimientos.

o Modificar_nombre: Se localiza el directorio, se verifica que el nombre es único y se cambia por el nuevo.

o Crear_nombre: Se crea un nombre para un objeto en concreto. Si el objeto ya existía, se establece un enlace nuevo entre el nombre y el

objeto al que hace referencia (enlace físico). Es lo contrario a un enlace

simbólico que es un enlace a otro fichero que contiene el nombre del objeto (vínculo). La existencia de estos dos tipos de enlaces hace que

la operación localizar_objeto se vea obligada a saber de qué tipo de enlace se trata y a actuar en consecuencia.

Si el objeto no existía y se crea a la vez que el nombre, debe

proporcionar además del fichero en sí, su tabla de traducción y los enlaces “.” y “..” pertinentes.

o Destruir_nombre: Se localiza un directorio y se destruye. Si el fichero al que hacía referencia este nombre no contiene ningún otro, el

sistema operativo lo destruirá y liberará los recursos que ocupo. Los enlaces físicos son fácilmente detectables, pero los simbólicos no tanto,

ya que estos enlaces simbólicos pueden no estar en el mismo sistema o

no hallarse activos en ese momento; como resultado de ello puede ser que aparezcan enlaces simbólicos que no señalen a ningún lado o, lo

que es peor aún, que apunten a un fichero que ha reutilizado un nombre antiguo. Para evitar esto, el sistema detecta los enlaces

simbólicos que ya no apuntan a ningún fichero mediante la operación

localizar_objeto. o Ver_nombres: Permite consultar el contenido de un directorio.

Operaciones de manipulación del directorio de trabajo:

o Cambio_de_directorio

o Directorio_actual: estas dos operaciones nos indican en qué

directorio estamos trabajando y cómo podemos cambiar el directorio de trabajo.

3. LA PROTECCIÓN

Un sistema operativo gestiona los recursos y objetos sobre los cuales se

pueden desarrolla acciones. Pero es responsabilidad del sistema operativo:

Page 185: sistemas operativos, redes y bases de datos

Sistemas operativos · 25

TEMA

La protección, es decir, impedir que la dinámica de unos usuarios se vea

afectada por las acciones de otros. Esta protección se consigue autorizando o

denegando los accesos que en un instante concreto soliciten los usuarios. La seguridad del sistema, es decir, impedir que la dinámica de unos usuarios

se vea afectada por las acciones de agentes externos al sistema computador.

Se centra esta responsabilidad en cuestiones como la identificación de los usuarios.

El concepto que vamos a estudiar en este apartado es el primero, el de

protección, y aunque protección y seguridad sean conceptos muy relacionados,

supondremos que los usuarios han sido debidamente identificados y por tanto son en realidad quienes dicen que son.

El concepto de protección se refiere al control que lleva a cabo el sistema

operativo sobre las diferentes formas con que cuentan los usuarios para acceder a

los objetos del sistema. Hay dos casos en los que no se necesita de protección: Cuando solo tenemos un usuario no hace falta control a los archivos, puesto que

todos pertenecen al mismo usuario y cuando el sistema es multiusuario pero todos tienen acceso a todos los ficheros, pues no hay concepto de propiedad de fichero.

Los elementos que intervienen en la protección son:

Los objetos: son aquellos elementos que gestiona el sistema operativo sobre

los cuales se pueden efectuar diferentes acciones: ficheros, dispositivos,

directorios, procesos… Los dominios son los diferentes agentes activos del sistema que pueden

actuar sobre un objeto. Así son dominios los procesos que pertenecen a un

mismo usuario o a un mismo grupo de usuarios. Los derechos son acciones sobre un objeto permitidas por parte de un

dominio: leer, escribir, ejecutar, crear, destruir…

La matriz de accesos está formada por tantas filas como dominios hay y tantas columnas como objetos, como vemos en el ejemplo inferior:

En esta matriz anterior, el dominio Juan tiene derechos de lectura y

escritura sobre el objeto ejercicio1.txt, pero en cambio solo tiene derechos de lectura sobre el objeto ejercicioB.txt. En la tabla observamos que los dominios

aparecen como objetos debido a que un dominio también es un objeto sobre el

Matriz de accesos

Page 186: sistemas operativos, redes y bases de datos

26 · Sistemas operativos

cual se pueden llevar a cabo acciones. Por ejemplo, el dominio Profesores tiene

derecho de cambio sobre el dominio Estudiantes.

La matriz de accesos es una buena forma de contemplar las relaciones que se establecen entre los diferentes elementos, pero no es un buen instrumento de

trabajo, dado que su volumen crece rápidamente a medida que aumenta el número

de usuarios y ficheros del sistema y además el número de objetos sobre los cuales un usuario tiene derechos es pequeño en comparación con el número total de

objetos del sistema, con lo que la matriz se convertirá en una estructura muy grande pero con la mayor parte de las celdas vacías. Para evitar este problema

existen tres tipos de protecciones: las listas de control de acceso, las listas de capabilities y los modelos combinados:

Listas de control de acceso son listas de parejas (derechos, dominio)

asociadas a un objeto y que se obtienen como resultado de dividir la matriz de accesos es columnas y eliminar todas las celdas vacías (se ahorra espacio y la

estructura es más dinámica). Así las listas de control de acceso se encuentran asociadas a los objetos y no a los procesos, de manera que cada vez que un

proceso quiere llevar a cabo un acceso a un objeto hay que verificar si tiene

derecho en la LCA. En una sesión de trabajo con un fichero se verifican los derechos en cada operación de lectura o escritura que se quiere realizar, hecho

que representará un volumen de sobrecarga importante para el sistema; aunque a cambio de ello como todos los derechos de los dominios sobre un

objeto se encuentran en un mismo lugar, la asignación y revocación de los mismos por parte del propietario se efectuará con total sencillez.

Listas de capabilities (capacidades): Es una lista de parejas (objeto,

derechos) asociada a un dominio, cada una de las cuales se denomina

capability. Las listas resultan de dividir la matriz en fijas y eliminar las celdas vacías; así estas listas son estructuras de datos asociadas a procesos (que

pueden estar protegidas en un espacio determinado o cifradas para evitar modificar su contenido). Así cuando un proceso accede a un objeto, tiene que

presentarle al sistema la capability que le da derecho a llevarlo a cabo. El

sistema verifica su validez y efectúa el acceso, es más ágil que el método anterior; en cambio la modificación de los derechos no es trivial, ya que éstos

se encuentran repartidos por todos los procesos del sistema y para revocar un derecho hay que recorrer todos los procesos para eliminar las capabilities

asociadas. Modelos combinados: Para solucionar los problemas que presentan uno y

otro modelo, los sistemas utilizan una combinación de los dos que permite

disfrutar de las ventajas de los dos esquemas. Las LCA se utilizan como

mecanismo básico y se suelen presentar realizando una reducción de todos los dominios posibles a unos cuantos. Por ejemplo en Unix hay tres grupos de

dominio: el propietario, todos los dominios asociados al grupo de trabajo del propietario y el resto de dominios del sistema. El primer acceso a cada objeto

se verifica mediante las LCA. Tras haber verificado el derecho, el sistema

genera una capability que se utilizará durante la sesión de trabajo; esta capability se asocia al dispositivo virtual que se genera durante la operación

abrir y se destruye con la operación cerrar. Así los accesos que se lleven a cabo durante la sesión de trabajo no necesitará acceder a la LCA. Otro sistema es el

llamado llave y cerrojo. Cada capability tiene asociado un número denominado

llave y los objetos tienen asociada una colección de números denominados cerrojos; para que una capability sea correcta, la llave tiene que coincidir con

alguno de los cerrojos que posee el objeto; para revocar el conjunto de derechos el propietario de objeto solo debe eliminar uno o más cerrojos. No es

tan flexible como la LCA, pero soluciona parcialmente el problema de tener que recorrer todos los dominios para eliminar las capabilities asociadas.

Page 187: sistemas operativos, redes y bases de datos

Sistemas operativos · 27

TEMA

5. EL SISTEMA DE FICHEROS Y LA PROTECCIÓN EN UNIX

En Unix encontramos los ficheros ordinarios, los ficheros directorio y los ficheros especiales o dispositivos. El sistema Unix, reconoce un solo tipo de fichero

ordinario y lo trata como una secuencia de bytes; a excepción del fichero ejecutable, que se caracteriza evidentemente por poderse ejecutar y por tener una

marca especial en los primeros bytes del archivo. El no encontrar esta secuencia

especial de bytes asegura que no es un ejecutable, pero el encontrarla no asegura que sea ejecutable, pues puede ser un fichero ordinario que casualmente tiene la

secuencia de bytes ejecutable.

Recordemos que el sistema de ficheros es de grafo dirigido organizado en

directorios y a pesar de que cada dispositivo contiene un sistema de ficheros con su propia estructura de directorios, Unix da una visión del espacio totalmente

conectado porque dispone de un Sistema de ficheros permanentemente accesible sobre el cual se irán añadiendo el resto de sistema de ficheros antes de poder

acceder a ellos (justo en el momento del montaje).

Las protecciones de Unix, se basan en un modelo mixto; un usuario se

identifica dentro del sistema mediante un nombre de usuario y contraseña; una vez dentro, todos los procesos asociados tendrán asociados los dominios de

usuario y de grupo de usuarios al que pertenezca. En cada momento determinado un usuario solo puede pertenecer a un grupo. Para determinar los derechos de un

usuario sobre un fichero, Unix utiliza una LCA con tres dominios: el usuario

propietario, los usuarios que pertenecen al mismo grupo que el propietario y por último, cualquier otro usuario y para cada uno prevé tres derechos diferentes: de

lectura, de escritura y de ejecución. La visualización de las LCA se realiza mediante tres grupos de caracteres, como se puede observar en la figura lateral. El

significado de los derechos r (lectura), w (escritura) y x (ejecución) varía si el fichero es un directorio. En este caso, r permite visualizar los nombres contenidos

en el directorio, w permite añadir nombres nuevos al directorio y x hace posible

que el usuario utilice el directorio como un directorio de trabajo.

LCA de Unix

Page 188: sistemas operativos, redes y bases de datos

28 · Sistemas operativos

TEMA 6 LA GESTIÓN DE PROCESOS

1. EL PROCESO: UNA MIRADA DESDE EL INTERIOR DEL SISTEMA

Un proceso es básicamente un entorno formado por todos los recursos

necesarios para ejecutar programas. Desde el punto de vista del sistema operativo, un proceso es un objeto más que hay que gestionar y al cual hay que dar servicio.

Para gestionar este conjunto de recursos como un todo, el sistema reúne

información de éstos en una estructura denominada bloque de control de

procesos o PCB. Los campos más importantes que configuran el PCB son:

El identificador de proceso: Es el código que identifica de manera biunívoca

cada uno de los diferentes procesos que se encuentran en ejecución. El estado del proceso: Indica el estado del proceso en el momento actual

dentro de unas posibilidades determinadas: run, ready, wait…

El contador del programa: Señala la instrucción que estaba a punto de

ejecutarse justo en el momento en que se produce una interrupción. Cuando el proceso pueda continuar, la hará exactamente en este punto.

Los registros internos de la CPU: Como son registros utilizados por todos los

procesos hay que guardar su valor para retornarlo cuando un proceso continúe

de manera que se encuentre en un entorno idéntico a cuando lo abandonó. El estado de la memoria: Cantidad de memoria asignada, lugar donde se

encuentra, etc.

Contabilidad y estadísticas: Información de valor para los administradores

de sistema pero poco útil para el usuario. El estado de los dispositivos de entrada/salida: Los dispositivos

asignados, las solicitudes pendientes, ficheros abiertos…

El dominio de protección: Dominios a los cuales pertenece el proceso y los

derechos asociados. La planificación de la CPU: Información a la forma como el proceso accede

al procesador en concurrencia con otros procesos.

La ejecución concurrente da al usuario la impresión de que es él solo el que accede a la maquina e

interactúa con el sistema de forma apropiada (figura a). Pero si estudiamos con mayor zoom la ejecución

concurrente de procesos (figura b) apreciamos una

multiplexación del procesador. Para conseguir el efecto de ejecución concurrente se lleva a cabo una

conmutación entre los procesos que se reparten el tiempo del procesador. Estas conmutaciones se

denominan cambios de contexto. En la figura c

observamos un cambio de contexto a mayor escala de tiempo y podemos apreciar que es necesario guardar el

estado del procesador en el proceso 1, localizar el proceso 2 y restaurar todo el estado del procesador a

como lo dejó el estado 2 cuando lo abandonó para poder dar el efecto de ejecución concurrente de procesos.

Los estados de un proceso existen porque en un sistema monoprocesador solo puede haber un

proceso en ejecución y el resto debe esperar su “turno” de entrada en el procesador. Cuando el sistema acaba de crear un proceso, éste se

encuentra en el estado inicial Ready. Desde este estado puede evolucionar hacia la

finalización del proceso (en la figura de la página siguiente, esquema 2) porque otro proceso provoque la finalización del mismo; o puede ejecutarse, pasar al

estado Run porque el gestor le asigna la CPU (3).

Tema 6

La gestión de procesos

1. El proceso: una mirada desde el interior del sistema

2. El ciclo de vida de un proceso 3. Las excepciones y las señales

de software

4. La gestión de procesos en Unix

Ejecución concurrente de procesos

Page 189: sistemas operativos, redes y bases de datos

Sistemas operativos · 29

TEMA

Desde el estado Run puede evolucionar

hacia 3 direcciones: El proceso ejecuta la última línea de código y finaliza (4); el proceso debe

esperar un acontecimiento externo, por ejemplo cuando se solicita una operación de entrada/salida,

como pulsación de una tecla por parte del usuario

(5) y pasa al estado Wait; o el proceso ha superado su cuota máxima de tiempo en la modalidad de

tiempo compartido (6) y debe volver al estado ready. Hay que apreciar que cuando un proceso sale

del estado run para pasar a ready o wait, se produce un cambio de contexto.

Desde el estado wait, el proceso puede evolucionar hacia el estado ready, cuando finaliza la

operación por la cual estaba esperando (7); o puede finalizar (8) debido a un acontecimiento externo al propio proceso.

Para saber qué hace cada uno de los procesos y así poder controlar sus recursos, el sistema operativo mantiene unas colas de procesos en función de su

estado. Hay una cola de procesos preparados (ready), otra cola de procesos en espera (wait), pero o hay cola de procesos en ejecución, pues solo puede haber

uno cada vez.

2. EL CICLO DE VIDA DE UN PROCESO Los procesos son elementos dinámicos y como tales operan durante un

intervalo de tiempo en el que tiene lugar: La creación del proceso

La destrucción del proceso

La herencia entre procesos

La sincronización y el estado de finalización en la destrucción de procesos.

Los cambios en el entorno de ejecución

2.1. La creación del proceso

La creación de un proceso nuevo es el resultado de la ejecución de una llamada al sistema del tipo crear_proceso, que es invocada, como todas las

llamadas, por un proceso ya existente. Debe contener los siguientes elementos:

La memoria donde residirán el programa, el código y los datos.

El punto de entrada desde donde se ejecutará el programa que contenga la

memoria El entorno de entrada/salida con el cual el proceso se comunica con el exterior.

Los atributos relacionados con los dominios de protección.

La especificación de estos elementos puede realizarse de manera explícita con los parámetros de

la llamada al sistema con que se crea el proceso; o de manera implícita haciendo que tome valores por

defecto; el sistema operativo combina las dos

alternativas con unos parámetros específicos de llamada y otros valores se dejan por defecto.

Tras haber creado el proceso, el sistema le otorga un nombre mediante el cual se podrá

referenciar, este nombre es único para cada proceso

durante toda la vida del sistema; ya que si dos procesos están sincronizados A y B; y se destruye B

pero se reutiliza inmediatamente su nombre, A

Diagrama de estados

Elementos de la creación de un entorno de ejecución

Page 190: sistemas operativos, redes y bases de datos

30 · Sistemas operativos

estará sincronizado con un proceso no previsto y lo más probable es que no

funcione correctamente o, lo que es peor, se abra un agujero de seguridad.

2.2. Destrucción de procesos

La destrucción de un proceso comporta la destrucción del entorno que lo

constituye y la liberación de los recursos que tenía asignado. Puede tener lugar por alguna de estas situaciones:

La ejecución de una llamada destruir_proceso, específica para tal finalidad. Una

vez acabada la ejecución del proceso sin incidentes, tiene que ser destruido. El mal funcionamiento del proceso destruido. Si el sistema detecta que le

proceso no funciona correctamente y efectúa operaciones no permitidas (como

la división por cero, raíces cuadradas de números negativos…), entonces lo destruye.

El efecto lateral de la ejecución por parte de otro proceso, de una llamada al

sistema diferente a la de destruir_proceso que provoca una excepción sobre el

proceso que se destruye.

2.3. La herencia entre procesos

Los procesos son creados por el sistema operativo a petición de otros

procesos. Esta situación hace que podamos ver los procesos desde el punto de vista de la descendencia, en la que los procesos mantienen relaciones de

parentesco como la de padre e hijo. Existen tres tipos de herencia: Compartición: El proceso padre y el hijo comparten un mismo elemento y por

ello las manipulaciones de este elemento afectarán a ambos procesos.

Copia: El sistema operativo crea los elementos que configuran el entorno del

proceso hijo a semejanza de los del padre, pero a partir del momento de la creación evolucionarán en dos entornos distintos y no se verán afectados los

cambios de uno en el otro.

Valores nuevos: A través de parámetros en la creación, el sistema operativo

crea los nuevos elementos del proceso hijo.

Ahora estudiaremos como estos tipos de herencia pueden afectar a cada uno de los elementos del entorno del proceso:

La memoria y su contenido: Tenemos tres segmentos: el código, los datos y

la pila. El código y los datos pueden compartirse; esto es muy útil cuando comparten segmentos del programa cuya información debe ser leída y así

evitamos la duplicidad; pero cuando se comparten datos hay que saber que afectarán a ambos procesos, aunque suele usarse para compartir información.

La pila jamás puede compartirse, ya que refleja el estado de llamadas a procedimientos y a variables locales de cada proceso.

Cuando se utiliza la copia, se copia todos los segmentos, incluida la pila; la

pila también se copia cuando se comparte la memoria, por lo que ya hemos avanzado anteriormente.

También, por supuesto, se pueden dar valores nuevos. El punto de inicio de ejecución dentro de la memoria: Solo tiene cabida

cuando se ha copiado o compartido el código. Puede copiarse, con lo que

normalmente el valor de retorno son diferentes de la llamada de creación del

sistema; o pueden darse valores nuevos, o bien por parámetros del sistema operativo, o por el fichero ejecutable que definirá el contenido de la memoria.

El entorno de entrada/salida: Es independiente de la memoria y tiene 3

modalidades. Puede compartirse con lo que las modificaciones que uno de los procesos realice sobre estas sesiones de trabajo afectarán al otro. Eso sí, las

sesiones de acceso a los dispositivos que abran a partir del momento de la creación serán independientes en cada proceso. Pueden copiarse: el hijo

encuentra abierta las mismas sesiones de acceso a dispositivos que el padre,

pero las acciones no afectarán unos a otros. O por supuesto, valores nuevos.

Elementos del entorno del proceso

La memoria y su contenido:

Compartición: solo puede compartirse segmento y datos,

la pila se copia. Copia: de todos los elementos

Valores nuevos

Punto inicio de la memoria: Copia: con distinto valor de

retorno. Valores nuevos.

Entorno de entrada/salida: Compartición: la sesión inicial

entre ambos se ve afectada, las nuevas son independientes.

Copia: Mismos dispositivos pero diferentes sesiones desde el

inicio. Valores nuevos.

Dominio de protección: Compartición: mismo dominio

del mismo usuario, por tanto mismos derechos.

Valores nuevos.

Page 191: sistemas operativos, redes y bases de datos

Sistemas operativos · 31

TEMA

Dominio de protección: La lista de capabilities puede ser perfectamente

copiada, por lo que aquí nos referiremos a los atributos de dominio, que no

pueden ser copiados. Encontramos dos modalidades: Compartición: el proceso hijo pertenece al mismo dominio (mismo usuario) que el padre por lo que tiene

los mismos derechos; o valores nuevos.

2.4. La sincronización y el estado de finalización en la destrucción de procesos

Existe una necesidad a veces imperiosa de sincronización entre procesos padre e hijo. Cuando

hay modalidades de ejecución en primer plano, de fondo y diferidas. Por ejemplo:

En primer plano, el intérprete de órdenes espera

a que finalice la orden antes de solicitar una

nueva. En esta situación el proceso padre tiene que esperar a que el proceso hijo finalice y claro,

para ello el sistema operativo debe congelar la ejecución del proceso padre hasta que el hijo sea

destruido.

En ejecución de fondo el intérprete de órdenes

no espera a que finalice la orden, sino que puede ejecutar más. En esta situación, el proceso padre

solo necesita que el sistema lo retenga mientras crea el nuevo proceso, con el fin de retornarle el

identificador del proceso si la creación ha sido correcta o un error si no ha sido así.

Modalidad mixta: El proceso padre crea un

proceso hijo en modalidad de fondo y a partir de

un determinado instante en su ejecución, decide esperar a que finalice uno de sus procesos hijo.

Con todo ello, el sistema operativo puede ofrecer dos modelos de llamadas al

sistema: introducir un parámetro modo_ejecución que indique si el proceso padre

tiene que esperar la destrucción del hijo o no; y conseguir que para crear no sea necesario esperar nunca la finalización de un proceso.

También es necesario para el proceso padre muchas veces conocer el

punto donde la aplicación ha finalizado o el motivo de esta finalización. Ya que a veces un proceso hijo puede finalizar felizmente pero en otras ocasiones por

ejecuciones incorrectas o por efectos laterales de la ejecución de otras llamadas al

sistema puede finalizar abruptamente.

2.5. Los cambios en el entorno de ejecución

Los sistemas operativos tienen que permitir que los procesos carguen

nuevos programas en la memoria para ser ejecutados. Los pueden hacer de dos maneras: al mismo tiempo que crea un nuevo proceso; a posteriori, una vez creado

el proceso, mediante la invocación de la llamada específica cargar.

Ésta última es la que nos interesa; lo que ocurre en este caso es que el

intérprete de órdenes obtiene la orden cargar a través de la entrada estándar, analiza la existencia de algún ejecutable y crea un nuevo proceso igual que él; este

nuevo proceso al ejecutarse, cargaría la aplicación que da servicio a la orden recibida. La carga del nuevo ejecutable provoca la reconfiguración total del espacio

lógico del proceso, de manera que todos los valores de variables y constantes, los procedimientos y las funciones que se encontraban dentro del espacio lógico antes

de la carga, desaparecen; pero para que el nuevo código pueda utilizar información

anterior a su carga deben existir mecanismos o dispositivos de almacenamiento que sirvan de puente entre ambos. A pesar de poder guardarse en el sistema de

Modalidades de ejecución

Page 192: sistemas operativos, redes y bases de datos

32 · Sistemas operativos

ficheros, también el sistema operativo ofrece la posibilidad de pasar la información

a través de parámetros de llamada, los cuales son recibidos por el nuevo programa como parámetros de entrada de la función principal.

3. LAS EXCEPCIONES Y LAS SEÑALES DE SOFTWARE

Los procesos pueden necesitar ser informados de acontecimientos que suceden de manera imprevista en cualquier instante de la ejecución de un

programa. Por ejemplo, un proceso puede necesitar saber si se ha producido un error en el acceso a la memoria para solicitar que se aumente el área asignada a

una determinada variable; o también puede necesitar saber si un cierto terminal

sobre el que trabaja se ha apagado, para acabar la aplicación correctamente.

Las señales de software son la herramienta que proporciona el sistema operativo para trasladar el mecanismo de las interrupciones al ámbito del proceso.

Igual que sucede en el ámbito del hardware, los procesos tienen que reconocer ciertos eventos y atenderlos con urgencia.

La procedencia de las señales de software nos permite clasificarlas en:

Dispositivos de entrada/salida: Como por ejemplo la desconexión de un

terminal, la pulsación de una tecla de control por parte del usuario… Excepciones: Provocadas por el proceso de manera involuntario durante la

ejecución de una instrucción, porque es errónea, porque el elemento hardware

al que hace referencia está saturado o por violación de un segmento.

Llamadas explícitas al sistema: Son señales entre procesos del mismo dominio

de protección que pueden informar sobre eliminaciones de proceso, sincronizaciones, etc.

El reloj del sistema: Cuando un proceso tiene que realizar acciones a intervalos

regulares de tiempo; por ejemplo un módem que espera cierto lapso de tiempo para detectar si la línea se ha cortado o no.

Efecto lateral de una llamada al sistema: Un proceso padre, por ejemplo, puede

recibir una señal de que uno de sus procesos hijo ha sido destruido.

Ahora bien, una vez recibidas estas señales, puede tener uno de los siguientes

tratamientos:

Tratamiento definido por el mismo usuario.

Ignorar el acontecimiento.

Tratamiento definido por el sistema operativo: Si por ejemplo existe un mal

funcionamiento de un proceso y no se han especificado un tratamiento para ese caso particular, el sistema operativo tiene que proporcionar uno, y por

norma general será la destrucción del proceso. En este caso, el sistema

operativo se encarga de enviar el estado de finalización al proceso padre para indicarle el motivo de la destrucción.

4. LA GESTIÓN DE PROCESOS EN UNIX

En Unix, un proceso es un entorno de ejecución identificado por un número denominado PID que es el identificador del proceso y que es único durante

toda la vida del sistema operativo. Los principales elementos que constituyen un proceso en Unix (y que podemos observar en la imagen de la página siguiente son:

El espacio de memoria, formado por el segmento de código, datos y pila. El

segmento de código puede ser compartido por otros procesos. Y entre el de

datos y pila hay una porción libre que puede aumentar el segmento de datos

con la llamada malloc.

Page 193: sistemas operativos, redes y bases de datos

Sistemas operativos · 33

TEMA

El entorno de entrada/salida formado por los file descriptors locales a cada

proceso. Cada entrada de la tabla apunta a otra tabla, en este caso de carácter

global para el sistema y contienen los punteros, el modo de acceso, etc. El UID y GID que corresponden al número de

identificador de usuario y al de grupo de usuario

para determinar el dominio de protección de los procesos.

El estado de los registros del procesador que

refleja en qué estado se encuentra la ejecución del programa que tiene el proceso.

La información estadística que presenta

informaciones tales como el tiempo consumido de

UCP, el volumen consumido de memoria o el número de procesos hijo generados.

A continuación estudiaremos 3 características inherentes a los procesos, como

son:

Creación y destrucción de procesos

Cambios de entorno

Jerarquía y señales en Unix

4.1. Creación y destrucción de procesos

Ya sabemos que las operación son crear_proceso (fork), Destruir_proceso (exit) y Esperar_finalización (wait).

La llamada fork no tiene ningún

parámetro y crea un nuevo proceso hijo que es un duplicado del padre. El

PCB hijo es una copia del padre, al igual que el espacio de memoria, y las

entradas de la tabla file descriptor.

Pertenecen ambos procesos al mismo usuario y grupo de usuarios; pero a

partir de la orden fork cada proceso continúa su ejecución de manera

independiente. El proceso hijo recibe

un valor 0 y el padre recibe el identificador PID del hijo para poder

ser distinguidos. Además Unix no permite que la última entrada de la

tabla de procesos y el último espacio de memoria libre sean ocupados por

un usuario normal, ya que estos

espacios se destinan para iniciar algún proceso del sistema de manera

urgente, como puede ser el proceso de detención del sistema shutdown.

La llamada exit destruye el proceso,

y es el sistema el que se encarga de

destruir el proceso que se ejecuta. Se pasa un parámetro al sistema operativo que el proceso padre podrá recoger mediante la orden wait para ser notificado

del estado de finalización. La llamada wait bloquea el proceso que lo ha llamadao hasta que alguno de

sus procesos hijo haya sido destruido. Cuando esto ocurre, el sistema le

retorna el PID del proceso destruido y como parámetro de salida, el estado en que ha finalizado. Unix guarda el estado de finalización de los procesos

destruidos en su PCB y espera que el proceso padre lo recoja mediante la

llamada wait. Así que el proceso no es liberado en el momento de su

Proceso en Unix

Creación de un proceso en Unix

Page 194: sistemas operativos, redes y bases de datos

34 · Sistemas operativos

destrucción, están a la espera de la recogida de su PCB, se encuentran

entonces en el llamado estado zombie, hasta que la llamada wait permita destruirlos definitivamente. Para evitar que se acumulen demasiados procesos

en este estado, está limitado el número de procesos zombie que puede tener cada usuario en cada momento y si un proceso es destruido más tarde que su

proceso padre, entonces pasan a ser considerados hijos del primer proceso del

sistema (el proceso INIT que es el único proceso en Unix que no se crea con la llamada fork, tiene PID 0) que será el encargado de recoger su estado de

finalización.

4.2. Cambios de entorno

Cualquier cambio que se quiera llevar a cabo en un proceso de tiene que

realizar después de que éste haya sido creado. El cambio de ejecutable y los cambios en las entrada/salida permiten hacer el programa controlable y flexible.

El cambio de ejecutable realizada

con la llamada exec al sistema de

Unix, permite cambiar la imagen o el

ejecutable que contiene el proceso. Normalmente solo afecta a la

programación de señales y al dominio de protección. Se suele

cambiar al dominio del usuario propietario o al grupo del usuario

propietario del fichero ejecutable, lo

que permite construir aplicaciones que accedan de manera controlada a

bases de datos, etc.

La Manipulación de los file

descriptors a través de la llamada

dup que permite duplicar el valor de una entrada concreta de la tabla de

file descriptors en la primera posición libre que se encuentre dentro de la

tabla. El proceso es como explicamos a continuación:

En primer lugar, el intérprete

crea el proceso hijo que tendrá que ejecutar la orden; cuando se ha

creado hay que redireccionar la entrada estándar para que cuando se

haya cargado el programa orden se

encuentre el redireccionamiento efectuado. Para ello se crea un file

descriptor vinculado a “fichero” con la llamada open (desFichero) con lo

cual se ocupa la primera entrada

libre de la tabla de file descriptors. (primera imagen lateral) Para

redireccionar la entrada estándar desde fichero hay que hacer que el file descriptor 0 se encuentre asociado al fichero, por lo que desasignamos el

dispositivo real asociado al file descriptor 0 y mediante la llamada dup (segunda imagen lateral), lo volvemos a signar, copiando sobre su entrada (STdin) la

entrada asociada a descFichero.

Por último, falta eliminar mediante la llamada close (tercera imagen de la figura lateral) el file descriptor DescFichero para conseguir el entorno de

entrada/salida que debe encontrar la orden que hay que ejecutar. Después, el proceso hijo puede cargar el nuevo ejecutable mediante la llamada exec.

Cambio de entorno en Unix

Page 195: sistemas operativos, redes y bases de datos

Sistemas operativos · 35

TEMA

Las pipes son un dispositivo lógico

destinado a comunicar procesos con una relación de parentesco. Funcionan como

una cola de caracteres con una longitud fija, donde los procesos pueden escribir y

leer. Se crean en el momento en que se abre mediante la llamada pipe y se

destruye cuando el último proceso que lo

tiene abierto lo cierra. El dispositivo que se crea con pipe tiene asociados dos file

descriptors, uno de entrada y otro de salida; pero no se pueden abrir con la

orden open, sino que los procesos que lo

quiera utilizar necesitan heredar los file descriptors de su proceso padre. Funciona

por sincronización: cuando un proceso intenta leer sobre una pipe vacia, se

queda bloqueado hasta que otro proceso

escribe sobre ella y ya hay material suficiente para leer; cuando un proceso

intenta escribir sobre una pipe completa, se queda bloqueado hasta que algún otro

proceso lee la cantidad suficiente de la pipe como para que el proceso bloqueado

pueda efectuar su operación de escritura

En la figura lateral podemos ver un ejemplo de utilización de pipes. El dibujo

superior es la situación tras haber creado la pipe, con lo cual ésta tiene los file descriptors

de lectura y escritura en el mismo proceso. En

cambio la pipe es más útil cuando se lleva a cabo la llamada fork al sistema, y el proceso hijo hereda del padre los file

descriptors, entre los cuales se encuentran los creados con la llamada pipe. Tras la creación del hijo y para mantener la comunicación, ambos cierran el

canal del sentido de la comunicación que no van a utilizar, para permitir la detección del proceso de comunicación (queda unidireccional); como podemos

observar en la parte inferior de la imagen.

4.3. Jeraquia y señales en Unix

Ya sabemos que el proceso INIT lo inicia el propio sistema operativo, no

está creado por la orden fork. Sus principales funciones son las de inicializar todos

los procesos del sistema, como los procesos servidores de red, liberación de los procesos zombies que ya no tienen proceso padre y poner en funcionamiento el

proceso getty. Este proceso se encarga de esperar que se pongan en marcha los terminales. Cuando esto ocurre, el proceso carga el programa login, para

indentificar al usuario, si es correcto posteriormente carga el shell e inicia una

sesión de trabajo con ese usuario. Cuando el usuario finaliza, el proceso shell se destruye e INIT crea un nuevo proceso getty que lo sustituye.

Las señales en Unix pueden ser generados por los dispositivos de entrada/salida, excepciones, llamadas explícitas al sistema o por el reloj del

sistema. En cualquier caso, los tratamientos posibles son los ya conocidos: el que da el sistema operativo por defecto según el tipo de señal; una segunda posibilidad

es ignorar el acontecimiento (excepto la señal SigKill que no puede ser ignorada); y

por último el que haya definido particularmente el usuario.

Funcionalidad de las pipes

Page 196: sistemas operativos, redes y bases de datos

36 · Sistemas operativos

TEMA 7 LA CONCURRENCIA Y LA COMUNICACIÓN

1. INTRODUCCIÓN

En sistemas concurrentes, los procesos cooperan en el cálculo y la

realización de diferentes tareas y comparten recursos (como los dispositivos,

código, variables…); así los procesos deben contar con la posibilidad de intercambiar información entre sí, a través de dos procesos principalmente:

Sincronización: Permite el acceso concurrente de los procesos a objetos del

sistema que son básicamente secuenciales. Todos los procesos que deseen

compartir algún objeto deben ponerse de acuerdo para saber qué acceso se va

a llevar a cabo y éste sea coherente y libre de errores. Veremos en los puntos siguientes diversas soluciones de software y los semáforos.

Comunicación: Muchas veces es necesario intercambiar resultados parciales

entre procesos concurrentes o información en general. Hay varias formas a su vez de hacerlo:

o Paso de mensajes: Integra tareas de comunicación y a la vez de sincronización.

o Memoria compartida.

o Señales: Interrupciones de software que pueden recibir los procesos para indicar que ha tenido lugar un determinado suceso.

o Mecanismos de comunicación remota.

2. LA SINCRONIZACIÓN DE PROCESOS Antes de nada deberíamos preguntarnos porqué es necesaria la

sincronización de procesos. Y esto lo vamos a ver con un ejemplo; para ello utilizaremos el dispositivo cola de impresión. Este dispositivo lo gestionan los

usuarios (cuando quieren imprimir un trabajo, las tares pendientes en la cola de

impresión aumentan en 1) y el gestor de impresora (que decrementa en 1 las tareas cuando ha finalizado la impresión de un documento).

Bien, en principio, tareas pendientes es una variable compartida por todos los usuarios y por el gestor de impresora. Pero cuando el acceso es concurrente, la

simple orden de un usuario al mandar imprimir un trabajo sería: Tarea_pendiente = tarea_pendiente + 1

Aunque parezca así de sencillo, en código máquina quedaría: LOAD R0, tarea_pendiente;

INC R0

STORE tarea-pendiente, R0

Sucede que la utilización de registros, puede hacer que si una tarea es interrumpida en el proceso INC o STORE y estos no se completan (interrumpida por

un cambio de contexto porque ha expirado su quantum, por interrupción de dispositivo, etc.); otro procesos concurrentes pueden hacer cambiar el valor de

tarea_pendiente, siendo el resultado erróneo. Por ejemplo, si un usuario es

interrumpido cuando ha enviado un trabajo a imprimir, ocurrirá que luego la impresora intentará imprimir un trabajo inexistente; mientras que si el gestor de

impresoras es interrumpido en la actualización de la variable, el resultado final es que una tarea se quedará sin imprimir.

Estos problemas han dado lugar a la llamada sección crítica, que es una secuencia bien delimitada (con inicio y fin) de instrucciones que modifican una o

más variables compartidas. Esta sección crítica debe mimarse especialmente, dado que las principales causas de estos problemas de sincronización tienen lugar por:

La aparición de copias temporales

Tema 7 La concurrencia y la

comunicación

1. Introducción 2. La sincronización de procesos

3. Las soluciones de software para la exclusión mutua

4. Los semáforos

5. El soporte de hardware para la exclusión mutua

6. Procesos productores y consumidores

7. La comunicación entre

procesos: el paso de mensajes 8. Problemas de coordinación

entre procesos (deadlock)

Page 197: sistemas operativos, redes y bases de datos

Sistemas operativos · 37

TEMA

La posibilidad de que un proceso acceda al contenido de una variable

compartida en cualquier instante, antes de asegurarse de que todas las

peticiones de modificación previas han finalizado.

Por ello, cuando un proceso entra en una sección crítica, tiene que completar todas las instrucciones del interior de la sección antes de que cualquier otro

proceso pueda acceder a ésta; es por tanto un acceso a la sección crítica en exclusión mutua y tiene que cumplir los siguientes requisitos:

Asegurar la exclusión mutua entre los procesos a la hora de acceder al recurso

compartido. No hacer ningún tipo de suposición de la velocidad de los procesos ni del orden

en que éstos se ejecutarán.

Garantizar que si un proceso finaliza por cualquier razón dentro de la zona de

sección crítica, no afectará al resto de procesos que quieran acceder a la misma.

Permitir que todos los procesos que están esperando acceder a la sección

crítica, puedan hacerlo en un tiempo finito (starvation).

Garantizar que solo uno de los procesos, como mucho, de los que quieran

acceder a la sección crítica, acabará entrando (deadlock). Así, si la sección crítica está ocupada ya por un proceso, el resto de procesos se bloqueará

(durmiéndose o poniéndose en alguna cola de espera) o entrarán en espera activa (consultado constantemente el estado del recurso). Por el contrario, si la

sección está libre, el proceso que pide paso entrará, pero cerrará el acceso a cualquier otro proceso, hasta que haya utilizado el recurso compartido y libere

la exclusión mutua.

3. LAS SOLUCIONES DE SOFTWARE PARA LA EXCLUSIÓN MUTUA

Para que se cumplan los requisitos anteriores se han diseñado (entre otros remedios) soluciones de software. Estudiamos a continuación tres algoritmos.

En un primer algoritmo, sincronizamos los dos

procesos P0 y P1, definiéndose una variable global denominada turno. Si turno es igual a P0, el proceso P0

puede acceder a la sección crítica; si es igual a P1, será este

proceso el que accederá; pero presenta varios problemas:

Hay que conocer los procesos.

Es difícil generalizar el protocolo de sincronización para

un número variable de procesos, ya que añadir o quitar procesos implica modificar el código de otros procesos

que ya existían.

Este protocolo obliga a una alternancia estricta en el

orden de acceso a la sección crítica: P0, P1, P0, P1… si por ejemplo el proceso 1 es más rápido porque tiene

una mayor velocidad, el acceso ya no es equitativo. Si uno de los dos procesos aborta o muere el otro

proceso no podrá acceder al a sección crítica y se

quedará de manera indefinida en un bucle while esperando su turno.

Un segundo algoritmo pretende resolver estos problemas, con el identificador Pxdentro evitamos la

alternancia estracita en el acceso a la zona crítica y además sin un proceso muere, el otro puede acceder a la sección

crítica sin ningún tipo de restricción. Pero aun así tenemos

todavía algunos problemas sin resolver:

Algoritmos

Primer Algoritmo

Código que ejecuta P0

While (cierto) {/*Bucle infinito*/

While (turno ==P1) {intentarlo de nuevo}

Seccion critica

Turno = P1

/*Otras operaciones de P0*/

} /*Fin while {cierto}*/

Código que ejecuta P1

While (cierto) {/*Bucle infinito*/

While (turno ==P0) {intentarlo de nuevo}

Seccion critica

Turno = P0

/*Otras operaciones de P1*/

} /*Fin while {cierto}*/

__________

Segundo algoritmo

While (cierto) {/*Bucle infinito*/

While (P1dentro==cierto) {reintentar}

P0dentro=cierto

Seccion critica

P0dentro=falso

/*Otras operaciones de P0*/

} /*Fin while {cierto}*/

__________

Tercer algoritmo

While (cierto) {/*Bucle infinito*/

P0dentro = cierto

Turno = P1

While (Pdentro==cierto y turno==P1) {reintentar}

Seccion critica

P0dentro=falso

/*Otras operaciones de P0*/

} /*Fin while {cierto}*/

Page 198: sistemas operativos, redes y bases de datos

38 · Sistemas operativos

Es difícil también generalizar para un número variable de procesos.

Podría ocurrir que ambos procesos pudieran estar dentro de la sección crítica al

mismo tiempo. Si no ha llegado a ejecutarse la tercera línea del algoritmo que

todavía indica que la sección crítica está libre y es consultada la variable por el segundo proceso, podrá acceder junto al primer –que ya tenía permiso- a la

zona crítica.

En un tercer algoritmo identificamos las variables Pxdentro a falso y no inicializamos la variable turno; así si ambos procesos quieren entrar en la zona

crítica al mismo tiempo, accederá el que indique la variable turno.

Todos estos algoritmos que hemos visto solo tienen en cuenta dos procesos,

debemos ser conscientes que existen para mayor número de los mismos, pero no se describirán por la complicación que ello supone y porque existe un método

mucho más elegante y sencillo para resolver el problema: los semáforos, solución

que estudiaremos a continuación.

4. LOS SEMÁFOROS

Los algoritmos de software anteriores son complejos y a menudo difíciles

de generalizar para más de dos procesos. Una solución posible a este problema puede ser el uso de semáforos. Un semáforo es una variable entera s que solo se

puede incrementar mediante la operación signal y decrementar con la operación wait. El proceso wait (s) decremente la variable s y hace pasar el proceso a la

sección crítica cuando S es mayor que o, el proceso signal incrementa el valor de la

vairable s=s+1. Evidentemente, para que esto funcione las señales wait y signal deben tener un funcionamiento atómico.

Podemos encontrarnos con semáforos binarios que solo puede tomar los

valores o y 1 y, que por tanto, únicamente permiten tener un proceso dentro de la sección crítica; o podemos encontrarnos semáforos n-arios que permiten tomar

valores entre 0 y n y por tanto dejan incluir hasta n procesos dentro de la sección

crítica.

Igualmente podemos tener semáforos de baja granularidad que comporta tener diferentes semáforos para distintas zonas críticas, lo que aumenta

el grado de concurrencia entre procesos y suele interesarnos; o de alta

granularidad con lo que se utiliza un mismo semáforo para distintas zonas críticas.

La utilización de los semáforos sigue el siguiente proceso:

Se inicializa el semáforo (S>=1). Este valor inicial debe ser mayor o

igual que 1 para indicar que no hay ningún proceso dentro de la sección

crítica y así permitir paso al primer proceso que lo pida.

Se ejecuta la operación wait: un proceso quiere acceder al a zona de

exclusión mutua; entonces se cambia el valor de s a s-1 y no se permite el paso de ningún proceso más.

Se ejecuta la operación signal y se incrementa el valor de la variable con

lo cual queda liberada la zona de exclusión y puede entrar otro proceso distinto.

En la tabla lateral se expone el ejemplo de los algoritmos de inicialización, código de procesos usuario y código de proceso gestor de la

impresora para la compartición del recurso impresora. En la página siguiente se observa la evolución de 3 tareas de

impresión P1, P2 y P3 y el proceso gestor de la impresora G1, y como

consiguen acceder a la sección crítica. Vemos en el tiempo T1 que todos los procesos están esperando pero no existen tareas de impresión pendientes.

Algoritmos de los semáforos

/*Definición de la variable e

inicialización*/

Variable semáforo: exclusión;

exclusión =1; /*Inicialización*/

/*Codigo procesos usuario*/

while(cierto){

/*Generar fichero*/

wait (exclusión);

tarea_pendiente=tarea_pendiente + 1; signal (exclusión);

} /* fin del while /*Código proceso gestor impresora*/

while(cierto){ while (tarea_pendiente==0);

/*Enviar trabajo a la impresora*/ wait(exclusión); tarea_opendiente=tarea_pendiente – 1;

signal(exclusión); } /*Fin while (cierto)*/

Page 199: sistemas operativos, redes y bases de datos

Sistemas operativos · 39

TEMA

En un tiempo T2 el proceso P1 consigue entrar en la zona de exclusión mutua,

aumenta el número de tareas pendientes y luego libera el semáforo mediante signal. Ahora bien, cualquiera de los procesos que están esperando puede entrar en

la zona de exclusión, dado que no hay un criterio para la entrada y observamos que es el proceso P3 el que consigue entrar, aumentando las tareas pendientes del

gestor de impresión a 2.

Como observamos los semáforos son un mecanismo fácil y muy útil para

sincronizar procesos concurrentes, pero podemos observar que existen dos

problemas que pueden llegar a ser muy graves:

Un proceso utiliza ciclos del procesador en un trabajo que no es útil: la consulta

constante de una variable. Estos ciclos se podrían dedicar a otros procesos. Un proceso puede quedar esperando indefinidamente su entrada en la sección

crítica, ya que la implementación anterior no permite ningún tipo de control

sobre los procesos que están esperando. Así en el ejemplo anterior si

constantemente llegan procesos para ser impresos y el proceso gestor G1 tiene la mala suerte de no entrar en la zona de exclusión mutua, podría llegarse a no

imprimir ningún trabajo y colapsarse la memoria del sistema a causa de la cantidad de tareas pendientes por imprimir.

Estos problemas pueden solucionarse mediante la implementación de los semáforos con cola de espera: El nuevo código de las operaciones wait y signal

quedan de la siguiente manera: /* Código de la operación wait*/

If (S<=0) then /* Ponemos el proceso en la cola*/

Else S = S – 1

/* Código de la operación signal*/

If (Cola no vacia) then /* Sacamos un proceso de la cola*/

Else S = S + 1

A cada semáforo se le asigna una cola en la que los procesos pueden colocarse.

Así cuando un proceso solicita paso a una sección crítica ocupada, en lugar de quedarse activamente consultando el valor de la variable, suspende su ejecución y

se pone en la cola del semáforo. Cuando un proceso libera la sección crítica, se da paso al siguiente proceso en la cola según política de asignaciones varias: por

prioridades, por tiempo de espera, FIFO (First in, first out), etc.

Ejemplo de acceso a exclusión mutua

Page 200: sistemas operativos, redes y bases de datos

40 · Sistemas operativos

5. EL SOPORTE HARDWARE PARA LA EXCLUSIÓN MUTUA

Para implementar los semáforos que hemos visto es la sección anterior, es necesario asegurar que estas señales son atómicas, es decir que se ejecutan

indivisiblemente; esto tiene lugar gracias a las tres soluciones de hardware que proponemos a continuación:

La inhibición de interrupciones ofrece la posibilidad de deshabilitar las mismas. De esta manera si un proceso las desactivas, éste proceso siempre tendrá

asignado el procesador hasta que no las vuelva a activar; así con el siguiente algoritmo quedaría solucionado el problema:

Inhibir {desactivar las interrupciones}

Sección crítica

Desinhibir {activar de nuevo las interrupciones}

Estas interrupciones son peligrosas y no podemos hacer un uso indebido o malintencionado de ellas, por lo que lo más habitual es que sean utilizadas no por

los programadores, sino por el sistema operativo.

La operación test and set es una segunda posibilidad hardware para la

exclusión mutua. La idea básica es definir una variable de control asociada a la sección crítica que determine si es posible el acceso a la misma o no. Cada proceso

que quiere acceder al recurso ejecuta la operación test and set (TS) y le pasa por parámetro la variable de control asociada al recurso. Así un semáforo es espera

activa como vemos en el algoritmo lateral hace que TS observe el estado de S, si

está libre lo pone a ocupado e inmediatamente modifica los flags para indicar que S estaba libre. La instrucción BNF (Branco if not free) salta a la etiqueta wait si S

estaba ocupado, pero dado que está libre el proceso retorna de la llamada wait y accede al recurso compartido.

Para liberar el recurso compartido, damos la señal de libre, tal como se ve en el algoritmo lateral.

El intercambio o swap es una instrucción de lenguaje máquina que intercambia atómicamente el valor de dos palabras de memoria, como podemos

observar en el primer algoritmo de la tabla lateral. Lo que hacemos es definir una variable global que denominamos lock, la cual puede tomar valores cierto o falso; la

variable se inicializa a falso. Cada proceso tiene además una variable local que

recibe el nombre de clave y que también puede tomar los valores cierto o falso; todo proceso que quiera acceder a una zona crítica deberá ejecutar el código

inferior de la tabla lateral, que es de por si, bastante explicativo.

6. LA COMUNICACIÓN ENTRE PROCESOS: EL PASO DE MENSAJES

El hecho de que varios procesos llevan a cabo actividades conjuntamente,

puede plantearnos la necesidad de sincronizar y comunicar datos entre ellos, ya sean resultados finales, datos parciales, etc. Esto podemos realizarlo a través del

paso de mensajes, un mecanismo sencillo e intuitivo que permite la sincronización y

la comunicación entre procesos.

El mensaje es un conjunto de información que, aunque puede ser de formato flexible, suele tener dos partes: el encabezamiento que contiene la

información necesaria para que pueda llegar a su destino correctamente, y el cuerpo que es el mensaje propiamente dicho.

Los mensajes son soportados por dos tipos de operaciones básicas: enviar_mensaje (send) y recibir_mensaje (receive). El mecanismo de paso de los

mensajes puede ser: directo/indirecto, síncrono/asíncrono. Pasamos a verlos:

Algoritmos test and set

/*Semáforo espera activa

wait: TS s

BNF wait

Return

/* Señal de libre */

signal: mov S, libre

Algoritmos swap

/*Algoritmo swap */

swap (A, B) {

temp = A;

A = B ;

B = temp ;

} /* Fin swap*/

/* Codigo de procesos */

while (cierto){

clave = cierto ;

Do

Swap (lock, clave);

Until (clave = falso) Seccion critica Lock = falso

} /* fin while (cierto) */

Page 201: sistemas operativos, redes y bases de datos

Sistemas operativos · 41

TEMA

Los mensajes directos, son aquellos en los que el proceso emisor tiene que

identificar al proceso receptor y a la inversa. También se denomina

comunicación simétrica ya que cada emisor tiene que conocer todos los posibles receptores y a la inversa.

Los mensajes indirectos no se envían a un receptor en concreto, sino a un

buzón, y es el proceso receptor el que lo busca no es un emisor en concreto sino en un buzón; así que se definen estos buzones como estructuras

intermedias para el paso de mensajes. Ello permite la comunicación de uno a uno, uno a muchos, y de muchos a muchos. El sistema UNIX ofrece un tipo de

comunicación indirecta, mediante unos buzones llamados pipes, y que hace

posible la comunicación entre procesos con parentesco.

La comunicación síncrona se basa en un intercambio síncrono de mensajes.

Esto implica que el emisor y el receptor acaben la transferencia de la información en el mismo momento. Por tanto, la operación send es

bloqueadora y hasta que el receptor no efectúa la operación complementaria

receive, el emisor queda bloqueado. Esta forma de comunicación permite establecer un punto de sincronismo entre procesos, aunque en algunos

servidores puede suponernos un problema. La comunicación asíncrona no bloque el proceso y el sistema guarda el

mensaje temporalmente en la memoria hasta que se lleva a cabo la operación

receive complementaria. Esto hace aumentar el grado de concurrencia del

sistema, pero también hay que gestionar los vectores de memoria intermedia que almacenan los mensajes.

Un método muy sencillo para implementar la ejecución concurrente en

exclusión mutua es mediante el paso de mensajes indirectos. Para solicitar acceso a la sección crítica, el proceso lee del buzón con la operación receive. Si el

buzón está vacío, el proceso queda bloqueado hasta que alguien escriba un

mensaje; si está lleno, el proceso lee el mensaje. Eso sí nos interesa que le primer proceso que pida acceso pueda pasar, para ello es necesario que el buzón se

inicialice introduciendo un mensaje en su interior; de esta forma, el buzón desarrolla el papel equivalente al de un semáforo binario. También podríamos

implementar semáforos n-arios con buzones en los que se permitiese hasta n

mensajes.

7. LOS PROBLEMAS DE COORDINACIÓN ENTRE PROCESOS (DEADLOCK)

Un bloqueo es una situación en la que un grupo de procesos permanece

bloqueado de manera indefinida sin ninguna posibilidad de que continúe su ejecución. Suele suceder porque unos procesos han adquirido un conjunto de

recursos necesarios que otros procesos necesitan para continuar.

Por ejemplo, si un proceso P1 pidiese acceso a dos dispositivos en exclusión mutua como son disco e impresora por este orden, y otro proceso P2

hiciera lo propio pero en orden contrario; nos podríamos encontrar en un bloqueo si

a P1 se le hubiese concedido el disco y antes de concedérsele la impresora, ésta ya se hubiera concedido a P2; a su vez P2 no puede continuar porque necesita acceso

a disco que tiene P1. Como ninguno de los procesos libera sus recursos, la situación se puede prolongar indefinidamente, es decir, tenemos un bloqueo. Para que esto

suceda deben cumplirse cuatro requisitos:

Exclusión mutua: Hay que acceder a los recursos en exclusión mutua.

Retención y espera: Cada proceso que tiene ya asignados recursos no los

libera, sino que espera a tener los que necesita.

No expropiación: Los recursos que un proceso ya tiene solo se liberan a

petición explícita del proceso, el sistema no se los puede quitar. Espera circular: Los procesos bloqueados forman una cadena circular como

en el ejemplo anterior.

Paso de mensajes

/* Mensajes directos */

Proceso A

…send (B, mensaje)

Proceso B

…receive (A, mensaje)

/* Mensajes indirectos */ Proceso A

…send (Buzon1, mensaje) Proceso B

…receive (buzon1, mensaje)

Semáforo binario con mensajes

While (cierto){

Receive (buzon, mensaje);

Seccion crítica;

Send (buzon, mensaje);

{/* Fin while (cierto)*/

Page 202: sistemas operativos, redes y bases de datos

42 · Sistemas operativos

Podemos encontrar varias soluciones a este tipo de problemas, clasificadas en

función de su objetivo en:

Prevenir el bloqueo: Se ordena de manera lineal los recursos del sistema, así

se obliga a los procesos a solicitar los recursos en un orden creciente. Evitar el bloqueo: Solo se asignan los recursos disponibles que no pueden

generar ningún tipo de bloqueo; esto requiere un control detallado de los

recursos asignados y a qué procesos y qué recursos esperan qué procesos. Detectar y recuperar el bloqueo: Se basa en comprobar si se han producido

bloqueos mediante la observación de algún ciclo en el grafo de recursos

asignados. Si se detectase alguno, el sistema reinicia algunos de los procesos

bloqueados para liberar este ciclo.

Page 203: sistemas operativos, redes y bases de datos

Sistemas operativos · 43

TEMA

TEMA 8 EL ESTADO ACTUAL DE LOS SISTEMAS OPERATIVOS

1. CONCEPTOS GENERALES

La evolución de los sistemas operativos se ha visto muy influenciada por

dos conceptos que procedemos a estudiar a continuación: el modelo cliente/servidor y los sistemas multiflujo.

En el modelo cliente/servidor, las llamadas al sistema, la invocación de

procedimientos y la solicitud de ejecución de órdenes son consideradas como la

petición de un servicio (por ejemplo una llamada al sistema), de un cliente (ente que realiza la petición) hacia un servidor (ente que ofrece el servicio). La figura

lateral muestra las 3 posibles situaciones que pueden darse entre el cliente y el servidor:

El cliente es un proceso y el servidor es su sistema

operativo, como hemos estado viendo hasta ahora. El cliente y el servidor son servicios del sistema

operativo; se utilizan las llamadas al sistema para

poner el contacto al cliente y al servidor.

El cliente y el servidor son procesos de sistemas

operativos diferentes, y se utiliza en red para comunicar máquinas distintas.

Este último caso es el más interesante, pues permite

ofrecer servicios desde cualquier punto de la red, y es la

idea base de los sistemas abiertos. Los mecanismos de comunicación que podemos hallar en estos casos son 3:

Paso de mensajes: Es el caso más elemental;

cliente y servidor tienen que ser conscientes de la

ubicación de cada uno y tienen que presentar toda la información de manera explícita, así como los parámetros la respuesta de su solicitud.

Procedimientos remotos: El cliente considera el servicio como un

procedimiento más de la librería y el sistema operativo se encarga de esconder

al usuario las particularidades de esta comunicación. Objetos distribuidos: Se adopta la semántica de la programación orientada a

objetos. El usuario ve el servicio como la llamada de un método del objeto al

que quiere acceder.

Pero también es cierto que la relación cliente/servidor también aporta una serie

de incertidumbres que necesitan respuesta, por ejemplo: localizar un servidor o un servicio concreto dentro de los servidores, como recuperar errores cuando algo

falla, etc, problemas que no se daban en un entorno de trabajo aislado como teníamos antes. Hay dos posibilidades para dar solución a estos y otros problemas:

o bien tenemos más de un servidor repartido en máquinas diferentes para implementar políticas tolerantes a fallos (y de paso ser más eficientes); o bien nos

centramos en la estructura del propio servidor, tolerando o no más de un cliente a

la vez, dando comunicaciones síncronas o asíncronas, etc.

El segundo concepto a estudiar son los sistemas multiflujo, que consideran un proceso como una máquina virtual completa, con memoria,

dispositivos de entrada/salida, etc. Ahora al tener más de un procesador, se plantea

la necesidad también de tener más de un flujo de ejecución por proceso (antes solo teníamos un flujo por proceso porque análogamente solo contábamos con un

procesador). Además podemos ejecutar aplicaciones paralelas que se comunican y sincronizan a través de la memoria compartida.

Tema 8

El estado actual de los sistemas operativos

1. Conceptos generales

2. Los sistemas operativos de tiempo real

3. Los sisemas operativos

multiprocesador 4. Los sistemas operativos

en red y los sistemas operativos distribuidos.

Modelos cliente/servidor

Page 204: sistemas operativos, redes y bases de datos

44 · Sistemas operativos

2. LOS SISTEMAS OPERATIVOS EN TIEMPO REAL

Los sistemas operativos en tiempo real tienen que ofrecer servicio con unas restricciones temporales muy concretas, en general deben garantizar el inicio de la

ejecución antes de un cierto intervalo de tiempo y debe finalizar antes que la acción que hemos iniciado deje de tener sentido. Por ejemplo, para evitar el

desbordamiento de una presa frente a una riada, debemos iniciar la apertura de las

compuertas, teniendo además en cuenta el tiempo que tardan en abrirse, para que la presa no reviente bajo la presión del agua. Si no podemos abrir las compuertas

asegurando esto, debemos dedicar los recursos a otras cosas como avisar a la población y a los sistemas de emergencias. Por ello, la gestión del sistema debe:

Evitar los mecanismos de gestión que no pueden ofrecer servicio en un

intervalo de tiempo conocido o que lo hacen con un coste de tiempo excesivo. Proporcionar herramientas que permitan ordenar los procesos en función de su

urgencia.

Facilitar mecanismos de comunicación rápidos y flexibles.

En la figura lateral se observa un ejemplo de aplicación de

tiempo real, con unos procesos ordenados por prioridades. Por todo lo anterior, los principales puntos de acción son:

Gestión de procesos: La planificación del procesador es

externa a él y se basa en la determinación de prioridades para los diferentes procesos; y el procesador admite los

procesos en función de esta prioridad. Gestión de memoria: No es deseable la memoria virtual

ya que introduce un grado de variabilidad temporal nada

bueno. Así que en los sistemas de tiempo real algunos

procesos deben estar de forma permanente residentes en memoria.

Gestión de la entrada/salida: El sistema proporciona

herramientas para que los usuarios puedan definir los tratamientos de las interrupciones de determinados

dispositivos de entrada/salida y evitar la ejecución del código genérico del sistema operativo.

Comunicación entre procesos: Los mecanismos de

señales también deben tener asociada una prioridad para

su ejecución. Para mejorar además la comunicación entre procesos se definen regiones de memoria compartidas para que los procesos puedan comunicarse

sin costes de tiempo añadidos. Gestión del sistema de ficheros: Se suele utilizar la memoria compartida y

por ello también se podría usar esta misma memoria como dispositivo de

almacenamiento.

3. LOS SISTEMAS OPERATIVOS MULTIPROCESADOR Como cada vez se desarrollan más aplicaciones software que deben

soportar mayor volumen de trabajo y de cálculo, se hace necesario mejorar el

hardware que utilizamos con él, hay varias soluciones: el simple avance tecnológico que hace evolucionar todo el hardware, soluciones arquitectónicos que permiten las

ejecuciones concurrentes en paralelo, mejorar el diseño del procesador, o combinar varios procesadores en un mismo sistema; esto último suele ser económico y más

viable que el resto.

Podemos encontrar dos sistemas multiprocesador principalmente (en la

tabla de la página siguiente mostramos una imagen aclaratoria):

Aplicación de tiempo real

Page 205: sistemas operativos, redes y bases de datos

Sistemas operativos · 45

TEMA

Multiprocesadores acoplados fuertemente, o conocidos

como sistemas de memoria compartida, en los

que cada procesador ve y puede acceder de forma directa a la totalidad de la memoria del sistema.

Multiprocesadores acoplados débilmente: también

denominados sistemas de memoria distribuida, en los que cada procesador solo puede acceder a una

memoria privada y se comunican entre sí por el paso de mensajes.

Las ventajas del sistema multiprocesador son varias:

Tolerancia a fallos: Se pueden diseñar de forma que

funcionen aunque alguno de los procesadores que lo integran falle; e incluso puede reemplazarse el

componente fallido sin tener que parar el sistema.

Rendimiento y potencia de cálculo: Al disponer de

varios procesadores las aplicaciones se ejecutan en paralelo, e incluso una misma aplicación se divide en

partes más pequeñas que se ejecutan en procesadores distintos.

Crecimiento modular: Un mismo sistema puede trabajar con mayor o menor

cantidad de procesadores, así puede crecer según la cantidad de trabajo que se

requiera realizar, sin tener que renovar todo el sistema. Especialización funcional: Los procesadores que integran un mismo sistema

pueden ser muy heterogéneos en sí mismos.

Flexibilidad: Todo lo anterior hacen que estos sistemas sean muy flexibles y

adaptables.

En general con estos sistemas queremos o bien aumentar la productividad (el usuario tendría una visión idéntica a la de un sistema monoprocesador, pero

obviamente más rápido) o bien a aumentar la velocidad (el usuario trabaja en

manera diferida). Así clasificamos los sistemas operativos multiprocesador en:

Supervisores separados: Cada procesador tiene un sistema operativo

independiente que funciona casi como un sistema aislado; casi, porque cada sistema operativo dispone de algunos servicios como el de comunicación entre

procesos de diferentes procesadores. Además suelen existir herramientas para

repartir la carga de trabajo de manera homogénea entre procesadores. Su objetivo básico es el de aumentar la velocidad de ciertas aplicaciones.

Maestro/esclavo: Un procesador es el maestro que se encarga de ejecutar el

sistema operativo, mientras que el resto (los esclavos), ejecutan los procesos

que el maestro les encarga. Aunque los esclavos pueden ejecutar llamadas elementales al sistema, habitualmente el maestro es el que se encarga de

realizar los servicios directamente. Este modelo permite asignar de mejor forma

los procesos a los distintos procesadores, aunque hay que reconocer que no es válido para sistemas con muchos procesadores, pues el acceso al maestro

puede convertirse en un cuello de botella para todo el sistema; por ello suele gestionar multiprocesadores de memoria compartida con un número pequeño

de procesadores.

Simétrico: Todos los procesadores tienen las mismas competencias y los

recursos del sistema se encuentran a disposición de todos los procesos. Como

el sistema se ejecuta en paralelo, requiere herramientas de sincronización y exclusión mutua para gestionar sus recursos sin conflictos. Este modelo está

especialmente indicado para sistemas de memoria compartida, en los que el objetivo es la productividad.

Modelos cliente/servidor

Page 206: sistemas operativos, redes y bases de datos

46 · Sistemas operativos

4. LOS SISTEMAS OPERATIVOS EN RED Y LOS SISTEMAS OPERATIVOS DISTRIBUIDOS

El entorno distribuido se define como varios sistemas interconectados

con una red con la capacidad de cooperarse y comunicarse, además se caracterizan por no tener memoria compartida, el estado del sistema está repartido entre los

diferentes componentes y tienen retrasos y son frágiles por los propios

condicionamientos de la red de interconexión. Eso sí, aportan innumerables ventajas:

Compartición de recursos caros, como pueden ser periféricos muy

especializados. Comunicación y compartición de información: que a su vez hace posible la

cooperación de personas en un mismo trabajo y la ejecución de aplicaciones en

paralelo.

Fiabilidad, disponibilidad y tolerancia a fallos: Se pueden duplicar cálculos en más de un equipo, duplicación de discos duros y sistemas enteros por si uno de

ellos falla, etc.

Crecimiento progresivo: La flexibilidad de la red hace poder conectar de

manera gradual distintos elementos que actualicen y se adapten a las circunstancias puntuales.

Rendimiento: puede ser elevado el rendimiento global.

Los sistemas operativos distribuidos son sistemas operativos que engloban y gestionan un entorno distribuido de manera transparente para el usuario. Es decir

tenemos toda la potencia del conjunto de elementos que integra la red pero con

una máquina que esconde las particularidades de su gestión. A continuación exponemos la gradación en el nivel de transparencia e integración en varios

apartados del sistema operativo: Ejecución de procesos: En un sistema cerrado no nos preocupa donde se

ejecutará un proceso ni cual será su entorno. Pero esto no es tan obvio en un

sistema en red y las situaciones que nos podemos encontrar (de menos a más

complejas e integradas) son las siguientes: o Para ejecutar una aplicación en una máquina remota desde la

máquina local hacemos un telnet que nos abre la sesión en la máquina remota, y comporta un cambio completo de entorno.

o Podemos ejecutar desde la máquina local una aplicación concreta en una máquina remota. Pero ambos entornos, el de la aplicación y

el del usuario son diferentes y disyuntos.

o El propio sistema local tiene una llamada al sistema crear_proceso con un parámetro para especificar la máquina donde se puede

ejecutar. La principal diferencia con el sistema anterior es que la distribución la realiza directamente el sistema operativo, mientras

que antes se hacía mediante una aplicación externa al sistema

operativo. o El sistema local tiene una llamada crear_proceso que localiza

automáticamente la máquina del sistema más adecuada para realizar la ejecución y el proceso. El entorno de ejecución es el

mismo que si fuese una aplicación local. El sistema de ficheros:

o Si se quiere compartir un fichero remoto del sistema, el usuario

tiene que copiarlo dentro de su sistema local de ficheros y para ello

requiere una aplicación específica como por ejemplo ftp. Por ello, los sistemas de ficheros local y remoto son totalmente disyuntos.

o El sistema operativo tiene un espacio de nombres que incluye el número de la máquina remota. El usuario ya no tiene que ejecutar

una aplicación externa para llevar a cabo la transferencia de

ficheros, sino que lo hace el propio sistema operativo. o El sistema ofrece al usuario un único espacio de nombres que

integra los sistemas de ficheros de las máquinas remotas y no tiene que transferir los ficheros a su propia máquina local. El usuario

Page 207: sistemas operativos, redes y bases de datos

Sistemas operativos · 47

TEMA

desconoce donde se ubican los ficheros y como están repartidos

entre todas las máquinas del sistema. o El usuario finalmente puede tener la misma visión que en un

sistema aislado. El sistema se encarga de distribuir los ficheros entre los discos de la red, replicarlos o moverlos si conviene por

seguridad o eficiencia en el acceso.

La protección: En un sistema aislado cuando hacíamos login y entrábamos en el sistema ya no debíamos preocuparnos por el dominio y nuestros derechos

pues el propio sistema operativo se encargaba de ello. Ahora en un sistema

distribuido el saber en qué dominio estamos dependerá del grado de distribución del sistema:

o Las máquinas tienen dominios de protección totalmente separados. Así cada máquina tiene usuarios con derechos independientes de

las del resto. Así para acceder a otra máquina debemos hacer un

telnet o rlogin (remote login) y tender un nombre de usuario y una contraseña.

o Los sistemas pueden poseer tablas de conversión entre dominios de máquinas diferentes. Así cuando el usuario accede a un sistema

remoto no necesita identificarse de nuevo ya que el sistema local

informa al remoto del usuario de que se trata. o En un sistema distribuido los usuarios tienen un único dominio,

independientemente de la máquina del sistema en la que estén trabajando; así con un único nombre de usuario es lícito entrar en

todas las máquinas del sistema con los mismos derechos. Existen dos tipos de sistemas operativos

distribuidos que son el modelo monolítico y el

micronúcleo. El modelo monolítico es un sistema en el que los servicios son gestionados por servidores que en su

mayoría forman parte del núcleo del propio sistema y por tanto se encuentran dentro de su espacio protegido. En

cada nodo de su red se ejecuta el sistema completo e

internamente los diferentes núcleos se coordinan para llevar a cabo la gestión de los recursos. Es el sistema tradicional y

su principal ventaja es la integración en un único espacio de todos los servicios lo que permite llevarlo a la práctica con

un coste reducido (no son necesarios cambios de espacios de direcciones ni transferencias de información entre

procesos).

Por otro lado, los modelos micronúcleo tienen un sistema operativo que se reduce a un núcleo que

proporciona y gestiona lo más básico: memoria, procesos, comunicación entre procesos; mientras que el resto de los

servicios viene dado por los servidores externos que se

pueden crear y destruir de manera dinámica y se pueden situar en cualquier nodo de la red. Así pues el micronúcleo

es una capa de software que se encuentra en todas las máquinas del sistema y que cubre el hardware

proporcionando un entorno básico. Sus principales ventajas

se centran en que son sistemas muy abiertos que permiten al usuario adaptarse y evolucionar; utilizan servidores

externos que hacen que puedan emular modelos de sistema y tienen una dimensión reducida que hace posible

desarrollarlos y depurarlos con facilidad; ello hace que también puedan transportarse a plataformas diferentes con

mayor facilidad.

Texto elaborado a partir de:

Sistemas operativos Teodor Jové Lagunas, Dolors Royo Vallés, Josep Lluís Marzo i Làzaro

Junio 2004

Tipos de sistemas operativos distribuidos

Page 208: sistemas operativos, redes y bases de datos

Diseño de redes de computadores

TEMA 1 TENDENCIAS EN REDES LAN

1. ETHERNET, FAST ETHERNET Y GIGABIT ETHERNET

El término Ethernet engloba a una familia de implementaciones de área

local que pasamos a estudiar:

Ethernet: Red de área local que funciona a 10 Mbps.

Fast Ethernet: Red de área local que funciona a 100 Mbps.

Gigabit Ethernet: Red de área local que funciona a 1000 Mbps.

Ethernet Existen dos “estándares” de Ethernet, el primero data de 1980 de la unión

de las compalías Digital, Intel y Seros (DIX) que comenzaron a explotar redes de

área local de 10 Mbps e “impusieron” su estándar. Algo más tarde surge el estándar internacional IEE 802.3 y aunque pueden coexistir en un mismo medio,

son distintas, especialmente se diferencian en el formato de la trama. Como se puede observar en la imagen

lateral, la diferencia se observa en el campo Tipo / Longitud de datos. El estándar DIX no

contempla la longitud de datos porque eso se

negociará en el software adecuado, pero sí el tipo de datos para ser reconocido. Dado que DIX

no utiliza tipos inferiores a 1500, y en el estándar IEE éste es la máxima longitud que nos podemos

encontrar, queda claramente definido por este

campo cuando una trama pertenece a un formato u otro. Por otro lado la longitud máxima

es de 1500 bytes para evitar colisiones y pérdida de información. Cuando un dispositivo transmite primero escucha el canal, espera que esté vacío y entonces

trasmite. El tiempo de trama debe ser igual o mayor al doble de tiempo de propagación máximo, con estos valores se requieren 64 bytes mínimos para una

trama, y como ya tenemos 18 ocupados por valores fijos, el campo de datos debe

ser como mínimo de 46.

Fast Ethernet

Las necesidades de velocidad han ido en aumento y por tanto se ha

requerido aumentar en 10 veces la velocidad de transmisión de las tramas, esto no es tan fácil como aumentar dicha velocidad y ya está, sino que supone una serie de

problemas. La diferencia más importante entre 100BaseT y 10BaseT es el diámetro de la red: el diámetro máximo es 100BaseT es

de 200 metros, aproximadamente 10 veces

menor que el de una red Ethernet a 10 Mbps; para evitar colisiones, una estación que

transmite a una velocidad 10 veces mayor que antes, ahora deberá estar colocada a una

distancia 10 veces menor; dependiendo del cableado que se estructure, las distancias

pueden varias según la tabla lateral.

Como existen tarjetas y medios que pueden funcionar indistintamente a 10 o 100 Mbps, estar redes cuentan con una

característica adicional, denominada autonegociación, que permite a dos dispositivos intercambiar información sobre sus capacidades para crear un entorno

Tema 1 Tendencias en redes LAN

1. Ethernet, Fast Ethernet y

Gigabit Ethernet 2. Nuevas prestaciones de las

redes Ethernet

3. LAN virtuales 4. NAT

Formato de trama Ethernet II o DIX

Formato de trama IEE 802.3

Características de los medios físicos 100BaseT

Page 209: sistemas operativos, redes y bases de datos

2 · Diseño de redes de computadores

óptimo, primero negocian sobre la velocidad (10 ó 100), luego sobre si half o full

duplex.

Gigabit Ethernet Como la red Fast Ethernet se extendió rápidamente, resultó que los

servidores se colapsaban con facilidad y se creó la Gigabit Ethernet a 1000 Mbps,

que está orientada a conectar servidores, bridges o conmutadores, es decir, a funcional como nivel físico de la red troncal de una red corporativa y, de forma

ocasional, puede servir para conectar a un usuario final con su servidor. A diferencia de la red Fast Ethernet, ésta nueva red sí requirió cambios

físicos y no únicamente conceptuales. En la conexión half duplex, para evitar colisiones (en una transmisión full duplex no se producen colisiones y por tanto no

es necesario utilizar el protocolo de acceso al canal), al mantenerse la misma

longitud de trama y formato se producen problemas, dado que ahora la distancia de colisión es 10 veces menor que en una red Fast, por tanto, de 200 metros

pasamos tan solo a 20 metros, lo cual obviamente es insostenible. Para evitar este problema se han desarrollado dos soluciones:

Extensión de portadora: Consiste en añadir bits a la trema Ethernet mínima

hasta llegar a los 512 bytes y así tener una trama de duración similar a una trama de 64 bytes a 100 Mbps. Naturalmente esta solución solo aumenta un

12% el rendimiento respecto a una red 100BaseT. Paquet bursting: Consiste en introducir distintas tramas Ethernet clásicas en

una supertrama mayor o igual a 512 bytes.

2. NUEVAS PRESTACIONES DE LAS REDES ETHERNET

Transmisión full duplex: El hecho de que sólo una estación pueda transmitir

en un instante determinado en una red (half duplex) disminuye considerablemente el rendimiento (60%); para que una red Ethernet puede

trabar en modo full duplex se requiere que el medio físico soporte este tipo de trasmisiones, así como los dispositivos conectados y las tarjetas de red. El

hecho de que sólo haya dos estaciones conectadas entre ellas y que el canal de

comunicación sea independiente para cada sentido, implica que el medio de transmisión no es compartido, así se crea un dominio libre de colisiones, sin

necesidad de disponer de un protocolo de acceso al medio, sin necesidad de de tramas de longitud determinada, a la velocidad máxima que permite la red y en

el que la limitación de la distancia sólo vendrá impuesto por la atenuación de la

señal. Control de flujo: Es una técnica para evitar el desbordamiento de las

memorias intermedias (buffers) de almacenamiento del receptor, junto con la

consiguiente eliminación de tramas que este hecho comportaría. Cuando la estación receptora no puede aceptar más tramas entrantes, envía una petición

de pause, con una duración determinada que puede posteriormente ampliar o reducir para continuar después con al transmisión. Puede ser simétrico (los dos

dispositivos pueden enviar señales de pause) o asimétrico.

Autonegociación: Ya visto anteriormente, esta técnica permite sacar el

máximo aprovechamiento de las características de los dos dispositivos que se interconectan, negocian primero sobre el medio físico y la velocidad de

transmisión, después sobre el modo (half o full duplex) y finalmente sobre el control de flujo y el establecimiento simétrico o asimétrico de éste.

Agregación de enlaces: Es una técnica de agrupamiento de enlaces del

mismo tipo de medio físico y velocidad, de manera que se tratan como si

formasen parte de un solo y único enlace lógico, de forma que permite el acceso a capacidades de transmisión mayores cuando no es posible cambiar a

una velocidad superior y permite también un crecimiento gradual a medida que van surgiendo nuevas necesidades de ancho de banda en la infraestructura ya

montada.

Page 210: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 3

TEMA

3. LAN VIRTUALES

Las configuraciones de una red de área local típica depende en gran medida, de la infraestructura de sus conexiones,

perteneces a la red a la que estás físicamente conectado; en cambio, una LAN Virtual o VLAN es una agrupación lógica de

dispositivos o de usuarios que no está restringida por el segmente

físico donde están conectados, sino que los dispositivos o los usuarios se pueden agrupar por la función que lleven a cabo, el

departamento del cual forman parte o la aplicación que utilizan.

Las VLAN no se pueden implementar sobre

concentradores, sino que deben ser sustituidos por conmutadores que sí soporten este protocolo. Cuando un dispositivo de una

VLAN manda información a otro dispositivo de la misma VLAN pero de distinto conmutador, es el encaminador el que proporciona la

comunicación entre los distintos grupos de trabajo y puede filtrar las tramas según los criterios elegidos por el administrador de red

a la hora de crear las VLAN. Las VLAN se pueden clasificar en:

VLAN estáticas: El administrador de red define de manera

permanente la relación entre los puertos del conmutador y la

VLAN a la que pertenece, es fija, fácil de configurar y gestionar, pero siempre dependiente del administrador.

VLAN dinámicas: Los puertos de un conmutador determinan

de manera automática su asignación a una VLAN,

dependiendo de las direcciones del nivel de enlace, de las direcciones lógicas o del tipo de protocolo de los paquetes.

VLAN basadas en el puerto: Es otra forma de dividir las

VLAN, y el conmutador utiliza los números de puerto para hacer la agrupación lógica de usuarios, es igual que una VLAN

estática definida por el administrador. VLAN basadas en el protocolo: El conmutador clasificará el

tráfico recibido.

Un conmutador puede tener dos tipos de puerto, access port y trunk port. Por defecto todos los puertos son de acceso, es decir,

pertenecen a una determinada VLAN, pero los trunk ports se utilizan además para interconectar diferentes conmutadores sin tener en

cuenta a que VLAN pertenecen. Estos puertos deben pertenecer a

todas las VLAN con las que se quiera tener comunicación para así poder reconocer y transmitir las tramas que les lleguen de todas

ellas. Así en la imagen lateral, en el primer conmutador, el puerto 6 es un trunk port que reconoce ambas VLAN (1 y 2) mientras que los

puertos 1, 2, 4 y 5 reconocen la VLAN1 y el puerto 3 la VLAN 2.

El formato de trama de una VLAN que lleva la identificación de

la VLAN y la información de prioridad del usuario se incluye en un nuevo campo de la trama conocido por tag header, que se sitúa

inmediatamente después de los campos de las direcciones destino y origen existentes en la trama original. Tiene dos partes el ETPID

(etherned-code tag protocol identifier cuyo valor es 81-00) y el

campo TCI, que a su vez consta de los campos usuario prioritario (3 bits), canonical format indicador (1 bit) y VID (VLAN identifier, que

con 4 bits indica a que VLAN pertenece la trama).

Implementación típica de una LAN y debajo,

implementación de una VLAN

Uso de los trunk ports

Tag header y debajo, formato del campo TCI

Page 211: sistemas operativos, redes y bases de datos

4 · Diseño de redes de computadores

4. NAT

NAT tiene como objetivo solucionar el problema de la falta de direcciones IP públicas disponibles en Internet, para ello utiliza direccionamiento privado en la

red local y únicamente publica al exterior las direcciones que realmente son necesarias. Hay un conjunto de direcciones reservadas para utilizar en cualquier red

interna:

10.0.0.0 a 10.255.255.255

172.16.0.0 a 172.31.255.255

192.168.0.0. a 192.168.255.255

Y existen a su vez, 4 formas de realizar la traducción de direcciones, unas más efectivas que otras, como veremos a continuación:

NAT estática

Cada dirección privada tiene su dirección pública equivalente para lo que es

imprescindible que el administrador haga esta relación de equivalencia una a una. El proceso es bien sencillo, cuando una máquina de la red interna envía un paquete

a la red externa, el valor de la dirección IP origen será la dirección privada de la estación origen (por ejemplo 10.1.11.11), una vez que el paquete llega al

encaminador, éste aplicará la traducción de direcciones correspondiente y el

paquete IP viaja ahora con la dirección IP pública correspondiente. Ni que decir tiene que esta traducción de direcciones es el más sencillo

existente, pero a su vez, no nos permite ahorrarnos ni una sola dirección IP pública.

NAT dinámica El encaminador de salida conoce el conjunto de direcciones internas que

tiene que traducir y el rango de direcciones públicas de las que dispone; no todas las máquinas de nuestra organización estarán conectadas a Internet al mismo

tiempo y por ello, no habrá que disponer de tantas direcciones públicas como privadas. Cada vez que una máquina envíe un paquete IP hacia Internet, a su

dirección privada se le asignará una dirección pública que se guardará en una tabla

de traducciones. Esta tabla tendrá un tiempo de caducidad, después del cual se borrará de la tabla de manera que pueda ser utilizada por nuevas direcciones

privadas. De esta forma, podemos contar con menos direcciones IP públicas que

ordenadores conectados simultáneamente a la red externa.

PAT (Port Adress Translation)

PAT es un tipo de NAT dinámica que permite reducir al máximo (hasta 1) el número de direcciones IP públicas utilizadas dinámicamente, para conseguir esto

PAT utiliza además de la dirección IP privada para identificar una máquina, el puerto TCP/UDP. Se utilizan así los puertos del 1024 al 5000, que se encuentran

libres en toda máquina.

Cada vez que el encaminador de salida recibe una nueva conexión TCP o UDP contra el exterior, le asigna un puerto libre del rango especificado (a veces

solo hay una dirección IP pública, ahorro máximo); de esta manera, todas las conexiones se publican en el exterior con la misma dirección IP, pero son

distinguidas según el puerto TCP o UDP asignado.

LSNAT (Load Sharing NAT)

Este tipo está pensado para solucionar el problema que presentan los servidores de aplicaciones sobresaturados. Cuando se sobresatura un servidor, por

ejemplo un servidor de un portal web muy visitado, en lugar de comprar un

servidor más potente que supone un desembolso mayor, es más fácil comprar más servidores más modestos y poder balancear y compartir la carga de trabajo entre

todos ellos. Una vez replicados los servidores, aplicaremos un sistema que publique todos los servidores en Internet como si fueran uno único, y repartiremos la carga

Page 212: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 5

TEMA

entre todos. Este aspecto es completamente transparente para el usuario que se

conecta a dicho servidor.

Page 213: sistemas operativos, redes y bases de datos

6 · Diseño de redes de computadores

TEMA 2 RDSI: RED DIGITAL DE SERVICIOS INTEGRADOS

1. ARQUITECTURA DE PROTOCOLOS RDSI

La red digital de servicios integrados es una red evolucionada de la red de

telefonía integrada digital que proporciona conectividad digital extremo a extremos para dar soporte a una amplia gama de servicios, a los cuales los usuarios tienen

acceso mediante un conjunto limitado de interfaces estándar multipropósito. La RDSI surge para mejorar las prestaciones de la red analógica de

telefonía; proporciona un canal digital extremo a extremo pero conservando el par

de cobre ya instalado, con lo cual se proporciona al usuario un bucle de abonado local digital con las ventajas y nuevos servicios que ello supone, pero manteniendo

una red ampliamente extendida de par de cobre que no es necesario cambiar. La RDSI utiliza dos canales de transmisión de datos, el canal B por donde

irán todos los datos y la voz de los usuarios en las llamadas, y el canal D de señalización para asegurar el control correspondiente al otro canal.

2. CANALES Y ESTRUCTURAS DE ACCESO

Los grupos funcionales son conjuntos de funciones que se pueden

necesitar para el acceso de los usuarios a la

RSDI. En el fondo, son los distintos componentes. Los puntos de referencia son

puntos conceptuales que dividen los grupos funcionales; pueden corresponder tanto a una

interfaz física como a una interfaz lógica.

TR1: Terminación re red 1 o NT1 conecta

el circuito de dos hilos del bucle local (punto de referencia U) con el circuito en

cuatro hilos (punto S/T) del abonado. TR2: Dirige el tráfico entre diferentes

dispositivos de usuario y el grupo TR1.

ET1: Es un Terminal diseñado para que se

conecte directamente a la RDSI.

ET2: Terminal no compatible con RDSI y

que por tanto, requiere un adaptador de Terminal.

AT: Adaptador de Terminal para equipos

ET2 no compatibles directamente con RDSI.

R: Punto de referencia entre un dispositivo

no compatible RDSI y su adaptador de

Terminal. S: Punto de referencia entre un equipo

compatible RDSI y su TR2.

T: En la práctica los puntos de referencia S

y T se pueden considerar idénticos, por lo que se suele hablar de puntos S/T.

U: Punto de referencia entre la conexión

TR1 y la RDSI.

El RDSI tiene dos canales, el B y el D. El

canal B de 64 kbps es el canal de usuario básico para la transmisión de datos (datos,

Tema 2

RDSI: red Digital de Servicios Integrados

1. Arquitectura de protocolos

RDSI 2. Canales y estructuras de

acceso

3. Jerarquía digital plesiócrona 4. Protocolos RDSI

5. Protocolos complementarios al RDSI

6. Aplicaciones RDSI

Grupos funcionales y puntos de referencia Estructuras de acceso

Page 214: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 7

TEMA

imágenes, voz), mientras que el canal D se utiliza para transmitir los mensajes de

señalización y funciona a 16 kbps.

Tenemos dos tipos de accesos, el básico y el acceso primario. El acceso básico consta de dos canales B full duplex a 64 kbps más un canal D full duplex a

16 kbps, por lo que su capacidad total es de 144 kbps; al añadir los bites de control

necesarios, sincronismo y mantenimiento (48 kbps), llegamos a un bit rate total de 192 kbps.

El acceso primario en Europa ofrece 30 canales B más un canal D con lo que llegamos a una velocidad de 2048 Mbps, mientras que en EEUU y Japón son 23

canales B con lo que la velocidad máxima es de 1544 Kbps.

3. JERARQUÍA DIGITAL PLESIÓCRONA

El principio básico es aprovechar el tiempo entre muestras de un canal de

voz para transmitir información de otros canales de voz. El período de tiempo entre dos muestras consecutivas de un mismo canal se denomina tiempo de trama y es

de 125 microsegundos, el inverso de la frecuencia de muestreo (8.000 Hz).

La propuesta europea, como ya hemos dicho, es de 30 tramas para el canal B más dos tramas, una e sincronismo y otra para el canal D; y como también

hemos dicho esto nos da 2048 Kpbs de velocidad. Se puede aumentar todavía más multiplexando cuatro tributarios del nivel jerárquico inferior y aumentando en algo

más de 4 veces la velocidad en cada una de estas multiplexaciones; para controlar

las diferencias de velocidad se utiliza un conjunto de bits que se denominan de relleno (R) y de justificación(J). La trama de orden superior tiene estos bits de

relleno para acomodarse a las variaciones de velocidad del tributario correspondiente, si el tributario se acelera, los bits de relleno transmiten

información del tributario, pero si éste último se frena, no transmiten información útil. Para saber si es información útil o no la que se está transmitiendo, contamos

con los bits de justificación.

Este modo de trabajar plesiócrono tiene la ventaja de la sencillez pero tiene un inconveniente grave y es que el hecho de que los bits de un determinado canal

no ocupen siempre la misma posición en los niveles jerárquicos superiores, hace que cuando a un nodo intermedio le interesa solo un determinado canal, no puede

extraer la trama de orden superior e insertar canales individuales directamente,

sino que tiene que demultiplexar y volver a multiplexar todos los niveles jerárquicos y todos los niveles; ello representa una importante pérdida de flexibilidad, por lo

que en el diseño de la RDSI de banda acha se ha elegido una jerarquía digital síncrona que dispone de sincronismo de red y que permite las operación de

extracción e inserción individuales.

4. PROTOCOLOS RDSI

Tres son los protocolos a estudiar: LAP-D, Q.931 y SS7.

El protocolo LAP-D ofrece dos capacidades: el direccionamiento de los dispositivos de usuario y la transmisión de mensajes entre un dispositivo y la red

local. Dado que varios dispositivos de usuario (teléfono, PC, etc) pueden compartir una misma interfaz física, y éstos a su vez pueden generar distintos tipos de tráfico

(señalización, paquetes de usuario…) es necesario identificar correctamente cada dispositivo que se hace mediante el SAPI (identificador de punto de acceso al

servicio) + TEI (Identificador de punto final del Terminal).

El TEI se puede asignar automáticamente en el momento de la conexión del equipo o manualmente; así cada SAPI+TEI define un enlace diferente con el

que pueden establecerse diferentes conexiones simultáneamente con el canal D. Las tramas LAP-D pueden ser de tres tipos: tramas de información

utilizadas para la transmisión de los datos, tramas no numeradas que se utilizan

para iniciar y cerrar los canales lógicos del nivel de enlace y las tramas de

Page 215: sistemas operativos, redes y bases de datos

8 · Diseño de redes de computadores

supervisión que confirman la recepción de tramas fuera de secuencia, para

contestar tramas de información recibidas, para sondear el otro extremo y contestar estos sondeos.

El protocolo Q.931 especifica el protocolo del control de llamada en los

canales B (establecer, mantener y acabar estas conexiones) y proporciona además

señalización de control de usuario a usuario sobre el canal D. Para el establecimiento de una llamada se sigue el siguiente proceso:

Cuando el dispositivo llama, genera un mensaje de configuración (setup) hacia

la central local, especificando el canal B que se quiere utilizar

Cuando la central local recibe este mensaje con el número de teléfono de

destino, genera los mensajes de señalización entre todos los nodos intermedios entre origen y destino (protocolo SS7 del que hablaremos después), genera un

mensaje call proceeding para informar al Terminal de usuario de que la llamada

está en proceso y envía un mensaje de configuración al receptor. Cuando el usuario destino acepta la llamda, envía un mensaje de conexión a su

central local, que se transmite mediante mensajes SS7 hasta la central local del

emisor, que envía un mensaje al emisor de connect que se responde con un connect ACK por parte del emisor y así queda establecida la comunicación entre

los dos terminales por el canal B.

Para finalizar una llamada en RDSI:

Cualquiera de los nodos, emisor o receptor, puede iniciar la finalización de la

llamada, cuando lo hacen, la central local contesta con un realease hacia el teléfono que envió la señal disconnect a su central local.

La central local enviaun mensaje SS7 mediante la red, que a medida que

atraviesa centrales de tráfico, éstas van confirmando a su central predecesora que han hecho la liberación.

Cuando el mensaje de finalización llega a la central local del otro extremo,

genera un mensaje de desconeción, al que contesta el Terminal con un release

y la central confirma con un release complete.

El protocolo SS7 que hemos visto anteriormente es un sistema de señalización que transmite la información necesaria para inicializar y gestionar las

llamadas telefónicas en una red paralela, de manera que la señalización no tenga

que viajar por la misma red por donde lo hace llamada telefónica, tanto si es digital como analógica. Asimismo

este protocolo sólo se establece entre redes locales RDSI y nunca con el abonado; por lo tanto, y como vemos en

la figura lateral, los mensajes entre terminales RDSI y su nodo de acceso son mediante mensajes Q.921 y 931,

mientras que entre los nodos intermedios, se utiliza el

protocolo SS7.

5. PROTOCOLOS COMPLEMENTARIOS AL RDSI

Tres son los protocolos que se utilizan en RDSI aunque no son específicos de este estándar.

SLIP es un protocolo estándar de nivel de enlace para encapsular paquetes

IP de manera simple y transmitirlos por una línea serie. Se utiliza para conectar

ordenadores personales a Internet con un proveedor de servicios de Internet o para unir dos redes mediante líneas dedicadas o RDSI. Al principio y al final del

paquete IP se añade un carácter especial denominado END (0 x db), si este carácter ya existiese en la trama IP se sustituye por (0 x db + 0 x dc).

El protocolo SLIP tiene varias deficiencias que le confieren un uso reducido:

Diagramas de

establecimiento y fin de llamada

Señalización en RDSI

Page 216: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 9

TEMA

Cada extremo debe conocer la dirección IP del otro extremo.

No hay ningún campo que indique qué protocolo se utiliza, por lo que no se

puede utilizar otro al mismo tiempo.

No hay ningún tipo de control de errores ni ningún método de

autenticación.

El protocolo CSLIP se creó para reducir los problemas de rendimiento de SLIP, es decir, muchas aplicaciones como telnet y rlogin envían cada carácter de

comunicación interactiva en un paquete IP, y calro, 40 bytes para enviar un único byte de información es demasiado. Esta nueva versión de CSLIP lo que hace es que

a excepción de las primeras tramas, luego puede reducir la cabecera de 40 a 3 ó 5

bytes dado que la mayoría de los campos no van a cambiar; pero eso sí las deficiencias mostradas anteriormente para SLIP continúan patentes.

El protocolo PPP (Point to point protocol) define un

protocolo de control de enlace para establecer, configurar

y certificar la conexión de datos (podemos negociar distintos parámetros) y también define una familia de

protocolos de control de red para diferentes protocolos de nivel de red, como vemos en la figura lateral.

El formato de las tramas PPP se eligió de manera que

fuera parecido al de las tramas HDLC; así vemos los campos indicador (valor 7e), dirección (FF) y control (03);

el campo protocolo nos indica si es un datagrama IP (21), LCD (c021) o NCD (8021). Las ventajas que soporta PPP

frente a los anteriores son múltiples: Soporta protocolos de nivel 3 sobre la misma línea.

Utiliza el CRC para detectar errores.

Permite la negociación dinámica de direcciones IP.

Permite la compresión de cabeceras IP y TCP.

Permite la autenticación de usuarios.

Esta última autenticación de usuarios permite conocer

si la identidad de cualquier usuario que llama corresponde con un cliente válido o no. Se puede hacer por PAP o por

CHAP. Por PAP es un método más sencillo; cuando un

usuario pide una petición PPP, el usuario remoto envía su

identificación y clave secreta, el servidor comprueba que este usuario tenga permiso de acceso y se lo acepta o

deniega en su caso. EL principal inconveniente es que el nombre de usuario y la contraseña viajan sin cifrar por lo

que pueden ser robadas. El método CHAP es muy parecido, pero el servidor al

responder a la petición PPP envía un reto particular para

esa petición en concreto, entonces el usuario responde al reto con el nombre de usuario y un valor calculado a partir

del reto y su contraseña; así no viaja la contraseña, sino un valor calculado que aunque sea robado sólo es válido para ese reto en concreto.

6. APLICACIONES RDSI

Acceso remoto: o Dial on demand, se puede hacer también por red telefónica

conmutada (muy extendida pro con graves limitaciones de velocidad), línea dedicada (enlace punto a punto con los recursos siempre disponibles pero muy

caro) o frame relay (adecuada para tráfico a ráfagas, pero el administrador

tiene poco control sobre la red). Hacerlo en RDSI permite transmitir volúmenes de datos no muy grandes y periódicos con velocidades más elevadas que la red

telefónica conmutada.

Arquitectura de protocolos PPP

Formato de las tramas PPP

Autenticación PAP Autenticación CHAP

Page 217: sistemas operativos, redes y bases de datos

10 · Diseño de redes de computadores

Multiplexación inversa: agregación de paquetes que permite aumentar el

ancho de banda, y por tanto controlar tráfico a ráfagas para lo que inicialmente

no estaba diseñado el RDSI. Se divide el flujo de bits en fracciones de 64 kbps y se transmite cada una de ellas por un canal B; al otro lado es necesario otro

multiplexor inverso que resincronice los canales a la recepción, dado que los paquetes pueden llegar desordenados.

Llamada de retorno: Cuando un cliente remoto llama a un servidor, éste

cuelga y le devuelve la llamada al cliente, de forma que el pago de la factura siempre lo realiza el servidor (control en grandes empresas) y además hay un

control de usuarios, pues a teléfonos no permitidos (recordemos que el número

de teléfono siempre viaja en la petición de la conexión) el servidor puede no devolverles la llamada de retorno.

Identificación de llamadas: Parecido a lo anterior, pero en este caso en

lugar de devolverle la llamada, basándonos en el número de teléfono en cuestión (y por tanto en el usuario) podemos desviarlo hacia otra centralita o

realizar algún proceso particular.

Page 218: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 11

TEMA

TEMA 3 FRAME RELAY

1. EVOLUCIÓN DE X.25

Tanto X.25 cp,p frame relay son tecnologías basadas en la conmutación de

paquetes orientada a la conexión. X.25 fue la primera en aparecer, proporcionando un nivel muy elevado de fiabilidad a partir de introducir una gran sobrecarga de

información a las transmisiones, posteriormente frame relay las sustituyó porque eliminaba esta sobrecarga y, por ende, mejoraba el rendimiento de la red.

Las características de X.25 son:

Utiliza protocolos de control de errores, control de flujo y fiabilidad en el nivel

de red y de enlace; Frame Relay por el contrario se basa en que las redes actuales son muy fiables y no implementa dichos controles, con lo que aumenta

su rendimiento. Permite circuitos permanentes (PVC) en los que el origen, destino y clase de

servicio están fijados manualmente por el administrador de red y donde no hay

fase de establecimiento ni desconexión; igualmente permite circuitos virtuales

conmutados (SVC) con sus fases de establecimiento, transmisión y desconexión a demanda del usuario.

Los paquetes de control para establecimiento y desconexión se envían por el

mismo canal y circuito virtual, en cambio en Frame Relay se envía por una conexión lógica diferente.

En X.25 la multiplexación de circuitos virtuales tiene lugar a nivel de red,

mientras que en Frame Realy es en el nivel de enlace, lo que ahorra toda una

capa de procesamiento y agiliza la multiplexación.

2. PROTOCOLOS DE FRAME RELAY

Frame Relay lógicamente define una arquitectura de

protocolos determinada para que un usuario pueda interconectarse a un nodo de acceso de red, para los niveles

físico de enlace y de red. Además distingue dos tipos de planes: el plan de control (se encarga del establecimiento y desconexión

y por ello trabaja entre el usuario y la red) y el plan de usuario (aspectos de señalización y transmisión de información). En la

figura lateral podemos observar estos protocolos en los planes

de usuario y de control para cada nivel.

En la figura lateral se detallan el conjunto de protocolos en los niveles físico, de enlace y red para el plan de control, es

decir, en el establecimiento y desconexión en Frame Relay;

mientras que justo debajo hacemos lo mismo para el plan de usuario, por lo tanto, para la transferencia de datos.

El protocolo LAP-F es el protocolo de acceso al enlace

en Frame Relay. Se parece al ya estudiado protocolo LAP-D pero

tiene algunas diferencias:

No tiene campo de control, por lo que sólo se puede enviar

un único tipo de trama. Se utiliza una conexión lógica para la transmisión de la

señalización y otra distinta para la transmisión de datos.

No implementa control de flujo

Los campos que se distinguen en una trama LAP-F core protocol son:

Tema 3

Frame relay

1. Evolución de X.25 2. Protocolos de frame relay

3. Control de congestión

Planes de control y usuario

Protocolos en planes de control y de usuario

Page 219: sistemas operativos, redes y bases de datos

12 · Diseño de redes de computadores

Indicador: Delimita el origen y el final de la trama con el valor 7E y ocupa un

byte. Dirección: Ocupa 2 bytes y a su vez se distinguen:

o DLCI: Es el identificador de conexión del enlace de datos, es un valor

único que se le asigna a cada enlace físico de un circuito virtual en una

red Frame Relay y sólo tiene significado local. A diferencia de X.25 en Frame Relay se acostumbran a utilizar los circuitos virtuales

permanentes y es el proveedor de servicios quien tendrá que crear los PVC que requiera el usuario. El DLCI ocupa hasta 10 bits y por ello

podemos elegir hasta 1024 valores, aunque ciertos de ellos están reservados.

o C/R: bit reservado y que no se utiliza.

o EA: Este campo indica cuando se acaba la dirección LAP-F, así se puede permitir direcciones más largas de 2 bytes.

o FECN: Bit que permite el control de congestión, cuando está a 1 implica una situación de congestión en el mismo sentido de transmisión de la

trama, que recibe el receptor y que puede iniciar las acciones

oportunas para corregirlo. o BECN: También es un bit de congestión pero lo indica para el sentido

contrario al de la trama, así cuando llega al origen éste disminuye la velocidad de transmisión de datos hasta que esta señal se desactive.

o DE: Permite marcar las tramas menos importantes y que se pueden

eliminar en caso de congestión de red. Información: Puede incluir datos de usuario o bien de señalización.

Control de errores: Son 2 bytes utilizados para detectar errores en la trama.

Las tramas LAP-F control protocol son exactamente iguales a la anterior, a excepción de la existencia de un campo control de 1 ó 2 bytes situado entre los

campos de dirección y de información y que permiten funciones de control de flujo y control de errores de extremo a extremo.

Las topologías de Frame Relay son:

En estrella: Es la más utilizada dado que es la más económica. Los puntos

remotos están conectados a un punto central que proporciona conexión multipunto al resto; recordemos que los circuitos más utilizados en Frame Relay

son los PVC y que se paga por cada uno de ellos, como esta opción es la que

menos circuitos implementa para tener conectados todos los nodos, es la más barata.

Completamente mallada: Todos los nodos están conectados directamente con

el resto. Es la topología más cara y realmente a partir de un cierto número de nodos se hace insostenible económicamente pues la progresión es exponencial,

ahora que la conectividad es ideal. Parcialmente mallada: Solución intermedia entre las dos anteriores.

En cualquier caso existen siempre nodos que están conectados a más de un

nodo distinto, y en este caso se puede crear una interfaz para cada conexión (más caro= o recurrir a lo que se hace más habitualmente, crear subinterfaces:

Subinterfaz punto a punto: Una sola subinterfaz para establecer un PVC hacia

otra interfaz física; las interfaces están en la misma subred y cada subinterfaz

tiene un solo DLCI, cada subinterfaz viene a ser como una línea dedicada.

Page 220: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 13

TEMA

Subinterfaz multipunto: Una sola subinterfaz para múltiples PVC, todas las

interfaces están en la misma subred y cada interfaz tiene su DLCI.

Se nombran las subinterfaces del modo s0.0; siendo la s porque es una interfaz

serie, el valor antes del punto es el número de la interfaz física y el valor posterior el de la subinterfaz lógica.

3. CONTROL DE CONGESTIÓN

Aparte de las técnicas explícitas de congestión vistas en el apartado anterior (FECN y BECN) existen el CIR, DE y EIR.

EL CIR es la tasa de información que la red se compromete a transportar; cualquier volumen a velocidad superior es susceptible de

ser descartado. El CIR es el valor que el usuario contrata como parámetro de tráfico y obviamente, cuanto más alto, más coste.

Obviamente el CIR de todos los circuitos contratados por un cliente en un nodo determinado no deben superar la tasa de velocidad máxima

física del enlace.

EL DE es un campo que ya veíamos introducido en la trama LAP-F, pues

bien, cuando superamos el CIR, la red marcarña los paquetes que superen esta velocidad con un 1 en este campo y en condiciones normales incluso podrían llegar

a su destino, pero en caso de congestión serán los primeros eliminados; por lo cual

una trama marcada con un 1 en el campo DE no se puede asegurar que lleguen a su destino en ninguna circunstancia.

El EIR es la velocidad máxima sostenible, que suele coincidir con la

velocidad de acceso local, y obviamente cualquier trama que supere esta velocidad será automáticamente descartada.

Otros 2 parámetros debemos conocer:

Bc define la máxima cantidad de datos en bits que la red aceptará transmitir

bajo condiciones normales durante un intervalo de tiempo Tc; por tanto nos queda la siguiente relación: CIR = Bc / Tc.

Be es el exceso máximo de datos respecto de Bc que la red intentará transmitir

en condiciones normales, durante un intervalo de tiempo Tc. La relación entre

CIR y este nuevo parámetro es: CIR = (Be+Bc) / Tc.

Umbrales de conexión

Page 221: sistemas operativos, redes y bases de datos

14 · Diseño de redes de computadores

TEMA 4 ATM

1. INTRODUCCIÓN

Las redes ATM se crearon como respuesta a la baja velocidad de la banda

estrecha, en 1988 se empezó a crear la RDSI-BA (banda ancha) que se estableció 3 preguntas importantes para su implementación:

¿Qué modo de transferencia debía utilizar?

¿La longitud de los paquetes debe ser fija o variable?

¿Si son de longitud fija, cual debe ser ésta?

El modo de transferencia se discutía entre síncrono y asíncrono. En la banda

estrecha se utiliza el modo síncrono, en el que el ancho de banda se divide en intervalos de tiempo períodicos y a cada usuario se le asigna uno de estos canales,

los canales quedan perfectamente identificados, pero es poco flexible porque si

necesitamos más ancho de banda hay que asignar un canal entero y los canales ocupan espacio aunque no se estén utilizando.

Por ello, la elección fue un modo de transferencia asíncrono, donde se multiplexa el flujo de paquetes a demanda, aunque por el contrario, haya que

añadir una cabecera a cada uno.

La longitud del paquete se decidió que fuese fija porque minimiza el retraso de paquetización de las fuentes de datos y porque simplifica el diseño de los

conmutadores de red. Ahora bien ¿Cuál va a ser esta longitud? Pues los europeos defendíamos un valor de 32 bytes para el paquete ATM y así favorecer el tráfico de

voz; en EEUU se defendía un valor de 64 bytes para darle más eficiencia a los

mismos, al final se quedó justo en la mitad: 48 bytes + 5 bytes de cabecera, en total: 53 bytes.

El modelo de referencia ATM tiene distintas capas:

Plan de gestión: Incluye la gestión de las distintas capas y planes.

Plan de control: Controla las llamadas y las funciones del control de

conexiones. Plan de usuario: Transferencia de la información de usuario.

Capas superiores: Corresponden a arquitecturas de protocolo como TCP/IP, voz

sobre ATM, etc.

Capa AAL: Adapta los distintos flujos de datos que provienen de las capas

superiores al formato de paquete de longitud fija que utiliza ATM.

Capa ATM: Hace llegar las celdas ATM del emisor al receptor mediante la red

ATM. Capa física: Cable UTP, fibra óptica, etc.

2. NIVEL FÍSICO

Como hemos visto anteriormente la tecnología ATM utiliza celdas de

longitud fija, y para delimitar estas celdas a nivel físico hay dos opciones principales: SDH y PDH. También se pueden transmitir directamente sin ninguna

estructura a nivel físico, pero dado su dificultad, en la actualidad no se implementa.

SDH es la tecnología más utilizada actualmente, y se caracteriza porque

es completamente síncrona (ojo, sólo a nivel físico): la red no solo transporta los datos de los usuarios, sino también el reloj de tiempo generado por una unidad

central con lo cual se consigue no tener que añadir bits de justificación para multiplexar n estructuras (ya que todos los tributarios están perfectamente

sincronizados) y podemos recuperar cualquier flujo de datos de usuario sin necesidad de demultiplexar toda la trama.

El inconveniente del SDH es que es más complicada de implementar que la

PDH (su predecesora) y por lo tanto más cara, aunque las prestaciones que

Tema 4

ATM

1. Introducción 2. Nivel físico

3. Nivel ATM 4. Nivel de adaptación AAL

5. Gestión de tráfico

6. Señalización ATM 7. Aplicaciones ATM

Modelo de referencia ATM

Page 222: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 15

TEMA

ofrecen, realmente merecen la pena. La topología preferedida y recomendada para

la implementación de una red PDH es de doble anillo: uno primario que permite redireccionar al secundario si el primario falla. En Europa la estructura utilizada es

el STM y en EEUU el Ocnet, encontramos las 3 principales:

STM1 / OC3 / 155,52 Mbps

STM4 / OC12 / 622,08 Mbps

STM16 / OC48 / 2488,32 Mbps

La estructura básica de SDH es una trama STM1. Como la trama se genera a una

velocidad de 8000 tramas por segundo, encontramos que la velocidad total es de

9x270x8x8000=155,52 Mbps. Eso sí, la carga útil de información no es esa ni mucho menos, debemos descontar:

RSOH: Supervisión y mantenimiento de red SDH.

MSOH: Supervisión y mantenimiento de multiplexación de red.

Carga útil: Dentro de la carga útil la información no viaja suelta, sino que va

empaquetada en estructuras denominadas VC4 de 9 x 261 bytes, y cada VC4

no viaja justo en una trama STM1 sin oque viaja flotando entre una trama

STM1 y la siguiente, por lo que debemos descontar el puntero que nos indica donde empieza el STM4.

Celda ATM: A su vez la celda ATM que viaja en la carga útil, tiene una columna

de 9 bytes dedicado a funciones de gestión y mantenimiento y nos quedan 9x260 libres, pero como no es múltiplo exacto de 53 (lo que ocupa una celda

ATM) encontramos que las celdas ATM pueden cruzar el umbral entre dos VC4, con lo que volvemos a necesitar otro indicador que nos señale donde empieza

la celda ATM (está en la cabecera de 9 bytes). Si además descontamos la

cabecera de 5 bytes de la celda ATM, el resultado final es que tenemos 9x260x8000= 149,76 Mbps, restando los 5 bytes de cabecera por cada 53

enviados, nos queda un total de 135,63; hemos perdido un 13% de la capacidad inicial del SDH.

Los cables y conectores que se utilizan pueden ser:

Puertos ATM de fibra óptica monomodo: Es el medio más utilizada ya que

permite altas velocidades (del orden de Gigabit) a grandes distancias (5 Kms.), por el contrario es el más caro.

Puertos ATM de fibra óptica multimodo: Está más limitada en velocidad (se

suele utilizar a 155,52 Mbps.) y distancia (500 metros), pero su precio es más

ajustado y se suele utilizar en conexiones dentro de edificios. Puertos ATM UTP: Se utiliza en en laces de 155,52 Mbps siendo cables de

categoría UTP 5e.

3. NIVEL ATM

La celda ATM es un paquete de nivel 2 de longitud constante con 53 bytes, 48 de los cuales son de datos y 5 de cabecera. Nos quedamos con esta cabecera

en la figura lateral con dos interfaces diferentes, UNI (la primera) y NNI:

GFC: 4 bits, no se utiliza y siempre vale cero.

VPI: Identificador del camino virtual, de 8 ó 12 bits, según interfaz.

VCI: Identificador de circuito virtual (12 bits). Este campo y el anterior VPI+VCI

determinan para cada flujo de datos el circuito virtual al que pertenecen y, por tanto el camino que seguirán. Estos valores se establecen al inicio de la

comunicación ATM pero no son fijos para todo el trayecto, ya que solo tienen

sentido a nivel local en cada enlace físico cambia de valor, ya que al pasar por cada conmutador que tiene una tabla que guarda las entradas y salidas, cambia

el valor de VPI+VCI según el camino a recorrer. Esta estructura simplifica enormemente las tablas de conmutación de los nodos ATM, ya que éstas han

Trama SDH

Cabecera ATM

Page 223: sistemas operativos, redes y bases de datos

16 · Diseño de redes de computadores

sido pensadas para albergar una gran cantidad de conexiones lógicas. Además

así se ayuda a rebajar los costes del control en la red y a agrupar en una sola unidad gestionable diferentes conexiones que comparten caminos comunes.

PT: Nos informa del tipo de información que transporta la celda; el tercer bit

(de 3 que tiene) nos indica la última celda de una trama AAL-5. CLP: Prioridad de pérdida de celdas. Un valor 0 indica que la celda tiene

prioridad elevada, mientras que un valor 1 indica que en caso de congestión

podemos prescindir de ella. HEC: Controla errores de cabecera (8 bits).

4. NIVEL DE ADAPTACIÓN AAL

Subimos una capa más, y nos encontramos ya en la

capa AAL con a su vez 4 protocolos o capas diferentes según el servicio que se vaya a utilizar:

Capa AAL-1: Está diseñada para transportar fuentes de

tráfico de velocidad constante, con sincronización entre emisor y receptor; además hay que introducir en las celdas

ATM la información necesaria para que el receptor pueda saber si se han perdido tramas y en ese caso, cuales han

sido. AAL-1 coloca flujos constantes y continuos de bytes encapsulados en una

trama de 47 bytes con 1 byte de cabecera; ya así se encapsulan de nuevo en una trama ATM (a nivel de capa ATM) para que pueda ser transmitido. El byte

(8 bits) de cabecera de esta capa AAL-1 incluye campos de control, detección de errores y paridad.

Capa AAL-2: Transportar voz sobre ATM en AAL-1 presenta dificultades como

que solo puede haber un único usuario por conexión, la voz va siempre en

bloques de 64 kbps y no se puede comprimir voz ni eliminar silencios; por ello se configuró el protocolo AAL-2 para transmitir eficientemente tráfico de baja

velocidad (como la voz). Lo que se hace es multiplexar diferentes canales e ir llenando eficientemente cargas útiles de celdas ATM, una vez llena una celda,

se pasa a la siguiente. Capa AAL-3/4: A pesar de que inicialmente eran especificaciones distintas,

resultaron tan similares que acabaron unificándose; pero además el formato de

trama resultante es tan complejo que hizo que se utilizase poco, hasta tal

punto que se sustituyó por la capa AAL-5. Capa AAL-5: Permite esta capa adaptar el tráfico que proviene de aplicaciones

que no requieren ni sincronización en el emisor ni requerimientos de velocidad

ni de retraso (por ejemplo los datos sobre TCP/IP). El formato de este tipo de capa es muy sencillo: se añade a la trama de datos que proviene de los niveles

superiores un conjunto de campos (trailer) al final de la trama de 8 bytes en

total y antes de esto se añade un relleno para conseguir que la trama resultante sea múltiplo entero de 48 bytes. El trailer contiene campos que

indican formato, longitud y detección de errores.

5. GESTIÓN DE TRÁFICO

Cuando el usuario establece una conexión ATM negocia con la red un

contrato de tráfico mediante el procedimiento CAC: se evalúa si es posible garantizar el contrato de tráfico negociado o no, analizando el estado actual de la

red y teniendo en cuenta el resto de conexión ya establecidas y que no pueden quedar afectadas por el hecho de incorporar una nueva.

Los parámetros de calidad del servicio que encontramos son:

CLR: Tasa de celdas perdidas, es la tasa de celdas descartadas por la red por el

incumplimiento del contrato de tráfico o perdidas por desbordamiento de buffer.

Servicios en la capa AAL

Page 224: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 17

TEMA

CTD: Retraso de transferencia de celdas: Retraso máximo requerido que puede

experimentar una celda entre el emisor y el receptor.

CDV: Variación de retraso de celda: define el retraso variable máximo requerido

en recepción entre dos celdas consecutivas; es decir el intervalo máximo entre una celda y la siguiente.

Las categorías de servicio que hayamos y que

podemos encontrar relacionadas en la tabla lateral son: CBR: Proporciona una velocidad de transmisión

constante entre el emisor y el receptor. Corresponde a

la clase de servicio A y utiliza una capa de adaptación

AAL-1 y requiere que la red asegure los parámetros CLR, CTD y CDV.

VBR-rt: Se utiliza en tráficos de velocidad variable

que requieren definir un retraso máximo entre el emisor y el receptor y que son sensibles a la variación

del retraso de celda. Corresponde a la clase de

servicio B (por ejemplo una videoconferencia) y debe asegurar los mismos 3 parámetros de servicio de la categoría anterior.

VBR-nrt: Se utiliza en tráficos de velocidad variable pero que no son sensibles

a la variación del retraso de celdas (servicio B) y requiere que la red asegure el CLR.

UBR: Tráfico de aplicaciones no en tiempo real que no necesitan calidad de

servicio (clase C) utilizando capas de adaptación AAL ¾ y AAL-5. El parámetro que la describe es la PCR.

ABR: Soporta tráfico parecido al de las LAN en el que el usuario no reserva

ancho de banda pero quiere hacer un uso óptimo del ancho residual disponible

en la red. Pertenece a la clase de servicio C y utiliza la capa AAL-5.

Además del mecanismo de control CAC que veíamos anteriormente, también se utiliza el UPC (control de parámetros de usuario para comprobar que se cumple el

tráfico negociado), control de prioridades (los propios conmutadores ATM hacen un

control de prioridades) y control reactivo en tráfico ABR.

6. SEÑALIZACIÓN ATM

El direccionamiento ATM está formado por 20 bytes que se estructuran en

los 3 formatos que podemos ver en la tabla lateral, vienen a tener los mismos campos: AFI (formato de dirección), DSP

(dominio de red), ESI (Dirección MAC del equipo), SEL (servicio). Sólo los conmutadores ATM tienen dirección ATM completa

asignada (prefijo + ESI); los clientes ATM solo disponen de su

dirección MAC (ESI) y mediante el protocolo de señalización ILMI, obtienen el prefijo del conmutador ATM al cual se

conectan. Tenemos 3 tipos de señalización:

UNI: Igual a los mensajes definidos en la Q931 de la RDSI de banda estrecha.

Es decir, pasa por fase de setup, call proceeding, connect y connect ACK. Lo

más característico es que cuando el mensaje de stop llega al receptor, es la red

la que asigna el valor VPI/VCI correspondiente a aquel extremo; en cambio en el lado del que llama, es en el mensaje de call proceeding donde la red le

indica qué valores de VPI/VCI debe utilizar. Los mensajes Q.2931 se encapsulan en tramas equivalentes al protocolo LAPd de la RDSI de banda

estrecha, que en este caso son SSCOP o Q-2110 y a más bajo nivel utiliza la

capa AAL-5. ILMI: Se utiliza para intercambiar información de direccionamiento ATM y del

estado del enlace tanto entre clientes y conmutadores ATM como entre los

mismos conmutadores ATM. ILMI es el protocolo que utilizan los usuarios de

Servicios ATM

Direccionamiento ATM

Encapsulamiento UNI

Page 225: sistemas operativos, redes y bases de datos

18 · Diseño de redes de computadores

ATM para conseguir la dirección ATM completa; recordemos que los usuarios

ATM inicialmente solo disponen de una dirección MAC; al ser conectados a la red ATM obtienen mediante ILMI el prefijo ATM (13 primeros bytes) del

conmutador al cual están conectados. PNNI: Es el protocolo de direccionamiento y señalización entre conmutadores

ATM. Por ello, la PNNI se encarga de la distribución de información topológica

de la red y del estado de los nodos y enlaces.

7. APLICACIONES ATM

Estudiaremos ahora 3 aplicaciones principales sobre ATM en el mundo de

las redes de datos: LANE, MPLA y IPoA.

LANE significa LAN emulation, es decir, emulación de red, permite utilizar la tecnología ATM para implementar LAN

virtuales y simular el comportamiento de entorno compartido de las redes locales, como por ejemplo Ethernet. Los clientes

de LAN emulation se pueden implementar en un ordenador conectado directamente a la red ATM; el software de LANE se

sitúa en el lugar que ocuparía el software de nivel MAC como

en Ethernet, como podemos ver en la figura lateral. Los elementos LANE más sobresalientes (siendo todos

ellos entidades software que pueden estar en una máquina específica dedicada a este fin y conectada a la red ATM, o en

uno de los conmutadores ATM de la red) son:

LEC: Dispositivo cliente de LANE.

LECS: Servidor de configuración LANE.

LES: Servidor de direcciones ATM. Cuando un LEC se conecta con otro LEC del

cual solo conoce la dirección MAC, pregunta al LES qué dirección ATM le corresponde y cuando ya la conoce, crea el circuito virtual para transferirle los

datos. BUS: Servidor de difusión y direcciones desconocidas. Cada LEC crea un VCC

punto a punto contra el BUS y éste crea un VCC multipunto contra todos los

LEC. Cuando un LEC quiere transmitir una trama a una dirección desconocida o a una dirección de difusión la envía al BUS y éste la retransmite a todos con

este VCC multipunto.

MpoA: Multiprotocolo sobre ATM tiene como objetivo conseguir la

comunicación directa entre estaciones de nivel 3 utilizando cualquier protocolo de nivel 3 (IP, Appletalk…) y sin pasar por encaminadotes. Es decir, podemos

conseguir la comunicación directa entre máquinas de diferentes redes sin pasar por

ningún encaminador, haciendo que éste último no se convierte en un cuello de botella si el tráfico es elevado. El proceso es sencillo, en el momento en que una

estación de una ELAN quiere establecer comunicación con una estación de otra ELAN, se crearán dos circuitos virtuales (desde el origen hasta el encaminador y

desde el encaminador hasta el destino). El servidor de MPLA situado en el encaminador detecta un flujo de información entre el origen y el destino que si se

mantiene más de un cierto período de tiempo preestablecido, provocará que se

establezca un circuito virtual directo entre ellos y que se redirija el tráfico que los LEC enviaban hacia el encaminador.

IPoA: IP sobre ATM. Su utilidad principal es tablecer conexiones WAN entre

encaminadotes IP sobre una red troncal ATM, con los encapsulamientos que

podemos observar en la figura lateral.

Arquitectura de protocolos LANE sobre ATM

Tipos de

encapsulamiento IPoA

Page 226: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 19

TEMA

TEMA 5 ADSL

1. TECNOLOGÍAS DE ACCESO RTC, RDSI Y ADSL

La tecnología DSL utiliza el par de cobre de las líneas telefónicas junto con

dos módems (uno en el lado del usuario y otro en el del proveedor del servicio) para proporcionar un servicio de datos de alta velocidad a sus usuarios. Gracias al

uso del par normal de cobre no hay que hacer grandes cambios para que se pueda ofrecer banda ancha a la mayoría de usuarios de telefonía fija; llegando a ofrecer

hasta 2.048 kbps de velocidad en comparación con los 128 que ofrece el RDSI o los

56 que puede llegar a ofertar la red de telefonía básica; además de que en estos dos últimos casos el coste para el usuario es por tiempo de conexión, mientras que

con ADSL hay tarifa plana.

2. TECNOLOGÍA ADSL

La tecnología ADSL consiste en explotar hasta el límite las capacidades de

los pares de cobre doméstico para la transmisión de datos digitales. Dado que actualmente gran parte del tráfico de Internet consiste en la bajada de información

desde los servidores hacia el cliente, la información viaja mayoritariamente en este sentido, y esto está especialmente indicado en el ADSL que por su asimetría puede

ofrecer un mayor ancho de banda a esta labor, en detrimento de la subida de

información. Para conseguirlo sobre el par de cobre se utiliza DMT, una nueva tecnología

de modulación que multiplexa numerosos canales con ancho de banda telefónica. Operan en frecuencias desde los 25 KHz hasta los 1100 KHz (la señal del teléfono

no interfiera porque oscila entre 300 y 3400 Hz). DTM consiste en múltiples

portadoras multiplexadas en frecuencia, ocupando 4 KHz cada una más el margen entre portadoras queda en 4,3125, por lo que en la frecuencia en la que opera el

ADSL tenemos 249 subportadoras disponibles. Como las subportadoras se agrupan para formar el canal de subida y el de

bajada se pueden usar dos técnicas distintas para separar correctamente estos canales:

Multiplexación FDM: Establece la restricción de que los espectros de subida y

de bajada no deben coincidir nunca, lo cual reduce el ancho de banda disponible.

Cancelación de eco: Ambos espectros de bajada y subida coinciden en parte en

el mismo margen de frecuencias, por lo que se necesitan equipos canceladores de eco para separar las dos señales, pero obtenemos mayor ancho de banda.

La única desventaja tecnológica de los pares de cobre en ADSL es la atenuación por distancia, por lo que el ancho de banda disponible depende totalmente de la

longitud del bucle de abonado (aunque la presencia de ruido también puede afectar a la velocidad de transmisión total). Hasta una distancia de 2,6 kms de la central

incluso en presencia de ruido (peor caso) se obtiene un caudal de 2 Mbps en

sentido descendente y 0,9 en ascendente; por lo que los operadores ofrecen un servicio máximo de 2 Mbps, aunque en algunos casos de buena recepción se pueda

llegar hasta los 8.

3. ARQUITECTURA DE RED

ADSL es sólo una solución de acceso a una red de telecomunicaciones, y no

una solución de conectividad extremo a extremo; por lo que deberemos usar tecnologías de red posteriores para conectar a Internet mediante ADSL.

Tema 5

ADSL

1. Tecnologías de acceso RTC, RDSI y ADSL

2. Tecnología ADSL 3. Arquitectura de red

4. Arquitectura de protocolos:

ATM sobre ADSL 5. Configuraciones ADSL

Page 227: sistemas operativos, redes y bases de datos

20 · Diseño de redes de computadores

La conexión a Internet con ADSL se puede dividir en 3 tramos:

Tramo de usuario: Comprendido desde el PC del usuario hasta el punto de

salida de la conexión telefónica del edificio. En este tramo la comunicación se hace de manera asimétrica: se utiliza un ancho de banda distinto para cada

sentido, lo cual comporta emplear módems diferentes en cada lado (ATU-R).

Además debemos contar con un separador (splitter) que separe la señal de telefonía del ADSL y además que evite interferencias por las subportadores de

ADSL más cercanas a la señal telefónica. Tramo del proveedor de acceso: Corresponde a la conexión desde la parte

pública del bucle de abonado hasta la conexión a Internet del proveedor de

acceso. Cabe destacar el módem ATU-C para cada abonado, que hoy día se

sustituye por DSLAM (chasis instalado en la central del operador con slots para múltiples ATU-C).

Tramo del proveedor de servicios: Que corresponde a la red en la que se

ubican los servidores a los cuales tenemos acceso. Los elementos más destacados en este tramo son los encaminadotes y los switches ATM.

4. ARQUITECTURA DE PROTOCOLOS: ATM SOBRE ADSL

Page 228: sistemas operativos, redes y bases de datos

Diseño de redes de computadores · 21

TEMA

Como la tecnología ADSL es de nivel físico, necesita tecnologías de niveles

de enlace y red para conseguir dar servicio de conectividad extremo a extremo. El protocolo de nivel de red por excelencia es IP pero para transportarlo se requiere

un protocolo de nivel de enlace, que se ha decidido que sea ATM, con lo cual el usuario se beneficia del gran control de calidad de servicio (QoS) que el operador

puede ofrecer, también nos ofrece transparencia de protocolo y un ancho de banda

escalable.

La figura de la página anterior muestra la arquitectura de protocolos extremo a extremo utilizada entre el acceso ADSL del usuario y el proveedor de

servicios; hay que remarcar que en el tramo entre el usuario y el proveedor de acceso se utiliza ATM sobre ADSL y en el tramo entre el proveedor de acceso y el

de servicios se utiliza ATM sobre SONET o SDH.

5. CONFIGURACIONES ADSL

El principal parámetro de una conexión ADSL es el ancho

de banda que nos ofrezca el proveedor (de donde se derivará el

precio de la misma); a partir de ahí existen 3 configuraciones para la instalación de nuestro módem o router ADSL:

Configuración monousuario con módem ADSL: Es la

conexión más utilizada en el ámbito doméstico porque es la

que representa menos coste para el usuario. El ordenador

del usuario está conectado directamente al módem ADSL que lo conecta a Internet.

Configuración multiusuario con módem-router ADSL:

Es más flexible y segura que la anterior (que nos deja al descubierto y visibles en Internet). El router incorpora el

módem ADSL y por otra tiene una conexión ethernet que permite conectarlo a un concentrador o conmutador

ethernet.

Configuración multiusuario con módem-router ADSL y

cortafuego: Los cortafuegos forman parte de un proyecto completo de seguridad y son indispensables cuando

hablamos de conexiones permanentes a Internet como el ADSL.

Configuración monousuario con módem ADSL

Configuración multiusuario con módem-router ADSL

Configuración multiusuario con módem-router ADSL y cortafuego

Page 229: sistemas operativos, redes y bases de datos

22 · Diseño de redes de computadores

TEMA 6 MPLS: MULTIPROTOCOL LABEL SWITCHING

1. MPLS: ALTERNATIVA A IP SOBRE ATM

A causa del crecimiento y expansión de las redes que utilizaban el protocolo

IP como protocolo de nivel de red, éstas redes se potenciaron con el despliegue de redes ATM. Así pues se potenció la integración de los niveles 2 y 3 mediante el

modelo de red IPoA. La red troncal ATM se presenta como una nube central rodeado por encaminadotes IP.

2. TECNOLOGÍA MPLS

Los objetivos para MPLS que se plantearon en el momento de su definición es que debería poder aprovechar cualquier tecnología de transporte existente y

funcionar en la misma; debería soportar el envió de paquetes uni y multicast; debía

ser compatible con los procedimientos de operación, administración y mantenimiento de las redes IP actuales.

Así se construyó MPLS, un estándar que integra y relaciona las funcionalidades de control (direccionamiento) y envío (conmutación) que hasta el

momento se han implementado mediante protocolos independientes: los niveles 2 y 3. Tiene MPLS dos bloques funcionales:

El bloque de control: Responsable de crear y mantener la tabla de etiquetas

con el resto del conjunto de conmutadores MPLS. Se crea también la tabla de direccionamiento IP correspondiente, pero reutiliza para hacer eficazmente el

intercambio de etiquetas con otros nodos y no para reenviar la información. El bloque de envío: Utiliza la base de datos de etiquetas de envío para hacer el

reenvío de los paquetes de datos entrantes marcados con las etiquetas

correspondientes, y se puede hacer mediante cualquiera de las tecnologías que

ya existen: ATM, frame relay, líneas punto a punto, LAN, etc.

Para aprovechar las características de los distintos protocolos, si el protocolo de transporte de datos (nivel 2) ya tiene campos para identificar las etiquetas, se

utilizan éstos. En cambio, si la tecnología de nivel 2 no dispone de ellas, habrá que añadirle una cabecera genérica MPLS que contiene un campo específico para la

etiqueta.

Texto elaborado a partir de:

Diseño de redes de computadores Jaume Abella i Fuentes, Guiomar Corral i Torruella, Guiomar Corral i Torruella

Febrero 2006

Tema 6

MPLS: Multiprotocol label switching

1. MPLS: alternativa a IP sobre

ATM 2. Tecnología MPLS

Page 230: sistemas operativos, redes y bases de datos

Redes

TEMA 1 TCP/IP: LOS PROTOCOLOS DE LA RED INTERNET

1. ESTRUCTURA DE PROTOCOLOS EN INTERNET El modelo de red Internet consta sólo de 4 partes o niveles: Todo lo que

hay por debajo del IP, el IP, el TCP y lo que hay por encima del TCP:

Nivel de red: Está formado por una red LAN y constituye todo lo que hay por

debajo del IP es decir, el nivel de red física o simplemente nivel de red.

Nivel IP: O nivel Internet, confiere unidad a todos los miembros de la red e

independientemente de que la conexión sea por ADSL o RDSI, permite que todos los equipos se puedan interconectar.

Nivel TCP: O nivel de transporte, confiere fiabilidad a la red, lleva a cabo un

control de flujo y errores y solo se implementa por los equipos conectados a la

red y no por redireccionadores o routers. Nivel de aplicación: Engloba todo lo que hay por encima del TCP y

corresponde a las aplicaciones que utilizan Internet: correo electrónico, www,

ftp…

En cada uno de los niveles de red expuestos anteriormente encontramos protocolos distintos que podemos observar en la siguiente figura:

El protocolo TCP, va sobre otro protocolo, el IP, y éste último a su vez, va

sobre Ethernet. Todo este encapsulamiento funciona con estructuras

fundamentales que genéricamente se conocen como PDU (protocol data units) pero en cada nivel tienen nombres diferentes para designar una misma función. En el

nivel más bajo, en Ethernet, se denominan tramas, al ascender en IP se denominan paquetes y en TCP se denominan segmentos. La consecuencia de todos estos

niveles es que cuando el nivel superior quiere transmitir cierta información, se provoca una cascada de PDU que va descendiendo hasta el nivel inferior. Así para

transmitir 1 byte de información, éste se encapsula en un segmento TCP con 20

bytes agregados de cabecera. Al bajar al nivel IP se encapsula en un paquete con otros 20 bytes de cabecera, y finalmente, en el nivel de red se encapsula con otros

8 bytes de cabecera. Como resultado para transmitir 1 byte de información, debemos acabar enviando una cadena de 49 bytes.

Tema 1 TCP/IP: Los protocolos de la red

Internet

1. Estructura de protocolos en Internet

2. Redes de acceso a Internet

3. El IP 4. El ARP

5. El ICMP 6. Protocolos de nivel de

transporte

7. El UDP 8. El TCP

Modelo de red

Page 231: sistemas operativos, redes y bases de datos

2 · Redes

2. REDES DE ACCESO A INTERNET

Los tres modelos de acceso que vamos a estudiar son el acceso telefónico (más utilizado en hogares), el acceso ADSL (empresas y hogares) y el acceso

Ethernet.

2.1. El acceso telefónico

El PPP es el protocolo de acceso telefónico, y tiene una trama como la que

se ve en la siguiente figura:

8 bits 8 bits 8 bits 16 bits Max 200-250

bytes 16 bits 8 bits

Flag Dirección Control Tipo Datos CRC Flag

LCP Datos LCP Prto. Red Datagrama IP Paquete NCP Datos NCP

Los campos flag, dirección y control están fijados en valores determinados. El campo Tipo define la multiplexación de diferentes protocolos que pueden ser:

LCP: Test de enlace y gestión del mismo.

Protocolos de red: Encapsulan paquetes de nivel superior, como puede ser IP.

NCP: Permite que uno de los terminales asigne la dirección de Internet al otro

(redireccionador, máscara…).

La pirámide PDU que vimos en el punto anterior provoca muchas ineficacias en

el transporte, ineficacias que se dejan notar especialmente en protocolos como Telnet (en tiempo real) y para evitar este problema se utiliza la compresión de

cabeceras de Van Jacobson que mejora considerablemente este problema eliminando campos inútiles en la mayoría de las conexiones.

La MTU es la longitud máxima de transmisión que, en principio, no tienen ningún límite y las podríamos hacer tan largas como la probabilidad de error nos

permite (es decir, muy larga), pero el confort de conexión sí se resentirá; se ha lelgado al acuerdo que el usuario debe recibir una reacción a sus acciones en una

décima de segundo como máximo, dado que retrasos superiores provocan cansancio y dan la sensación de poca velocidad en la máquina. Si estamos

utilizando un protocolo como Telnet a la par que otro como FTP o web que tienen

paquetes más largos, y los nuestros en tiempo real (telnet) deben esperar en la cola de espera a los demás, ralentizamos exageradamente a transmisión, por ello

se establece un límite máximo del tamaño del paquete que puede ser enviado con cualquier protocolo, y en conexiones PPP la MTU está entre 250 y 500 bytes.

2.2. Acceso ADSL

El ADSL ofrece más ventajas que la línea telefónica convencional, dado que

deja libre la línea para llamadas mientras se está conectado a Internet; para ello se realiza una división del espectro de frecuencias que se puede recibir por el par de

hilos telefónicos, hasta 4 kHz (la voz que puede alcanzar el oído humano) y a partir

de aquí el espectro de codificación del ADSL, y se pueden alcanzar velocidades de hasta 1,92 Mbps de entrada y 15,36 Mbps de salida; aunque es difícil alcanzar este

límite máximo y las operadores solo ofrecen hasta 8 Mbps en la mejor conexión ADSL.

Page 232: sistemas operativos, redes y bases de datos

Redes · 3

TEMA

2.3. Acceso LAN: El protocolo Ethernet

La simplicidad de este protocolo y no sus prestaciones, ha hecho que sea el

más utilizado en redes de área local, desde que DEC, Intel y Xerox establecieron un estándar. Hay que saber que en las redes de área local lo que una estación

transmite es recibido por todas las demás, pero una estación en concreto sabe

cuando una trama va destinada a ella porque lee todas las que le llegan y comprueba la dirección de destino, lógicamente rechaza todas las que no vengan a

ella (aunque se puede configurar toda tarjeta en modo promiscuo, “escuchando” todas las informaciones que pasen por ella, aunque no sea su dirección de destino).

64 bits 48 bits 48 bits 16 bits Entre 46 y 1500 bytes 32 bits

Preámbulo @destino 2origen Tipo Datos CRC

Los campos que forman la trama Ethernet son:

Preámbulo: Formado por 64 bits, alternativamente 0 y 1 y los dos últimos son

11. Obviaremos su presencia en el resto del temario pues solo indica el inicio

de la trama.

Dirección de origen: Lleva la dirección física o dirección MAC del transmisor de

la trama. Sobre papel, las direcciones LAN se escriben en hexadecimal, separando los bytes con dos puntos y escribiendo primero el byte menos

significativo, por ejemplo: 08:00:00:10:97:00. Dirección de destino: Dirección MAC de destino.

Tipo: Indica el tipo de contenido del campo de datos que lleva la trama.

Datos: La longitud debe ser múltiplo de 8 bits, es decir Ethernet transmite la

información en bytes; la longitud máxima, es decir, su MTU es de 1500 bytes; y

además el campo de datos debe tener como mínimo 46 bytes de longitud.

CRC: Es el código de redundancia cíclica para la detección de errores y abarca

toda la trama a excepción del preámbulo.

3. EL IP

IP y TCP son un par de protocolos bien compenetrados. El IP es un

protocolo de interconexión de red orientado a datagrama por lo que no es capaz de recuperar tramas perdidas ni de garantizar que las tramas se entregarán en el

orden correcto ni que el ritmo de recepción sea el adecuado para que el destinatario pueda procesar convenientemente los datos. El IP es del tipo “best

effort” o con la mejor intención; para subsanar estas deficiencias del IP tenemos al TCP.

Las Direcciones IP Estas direcciones son únicas para cada máquina, aunque para ser más

precisos, cada dirección es única para cada una de las interfaces de red IP de cada máquina, así si una máquina dispone de más de una interfaz de red, necesitará una

dirección IP para cada una. Las direcciones IP tienen una longitud de 32 bits, y se

suelen escribir los 4 bytes que lo componen en decimal separados por puntos, por ejemplo 147.83.153.100.

Para conseguir que no haya ninguna dirección repetida, Internetp dispone de una organización denominada InterNIC que se dedica a esta tarea.

La máscara de red se utiliza para poder gestionar un conjunto de

direcciones internamente. La máscara de red nos permite esta flexibilidad, a través

de 32 bits de máscara podemos saber si el destino de un paquete se encuentra dentro de la misma red de área local que el origen o si por el contrario, se

encuentra en una LAN remota y por tanto debe delegar su transmisión a algún equipo de su misma LAN. Todas las estaciones de una misma red de área local

deben utilizar el mismo identificador de red y es preciso que todas las estaciones

posean la misma máscara. Así, si tenemos dos estaciones 147.83.153.100 y

Page 233: sistemas operativos, redes y bases de datos

4 · Redes

147.83.153.200 podemos deducir que están interconectadas directamente, si la

máscara de su red es 255.255.255.0. Una notación alternativa es proporcionar el número de bits 1 de la máscara, así pues 255.255.255.0 es una máscara de 24 bits

y 255.255.255.128 es de 15 bits; y se notaría así: 147.83.153.100/24

Existen direcciones de propósito especial como son:

Direcciones de red: Se expresan con la dirección que tendría cualquier estación suya y con los bits del identificador de estación a 0. Poe ejemplo la red

en que se encuentra la estación 147.83.153.100/24 es la 147.83.153.0/24.

Dirección 127.0.0.1: Loopback es una dirección no válida para los paquetes

IP y lo utiliza el software de red para transmitir paquetes a la misma máquina local.

Dirección 255.255.255.255 (broadcast): Solo es válida como dirección de

destino de un paquete y sirve para enviar paquetes a todas las estaciones localizadas dentro de la misma LAN que la máquina de origen.

El formato del paquete IP

Versión

Longitud

de cabecera

Tipo de

servicio

Longitud

total del paquete

Identificación

del paquete Indicadores

Posición de

este fragmento

Tiempo

de vida TTL

Protocolo Checksum @origen @destino Opciones

4 bits 4 bits 16 bits 16 bits 3 bits 13 bits 8 bits 8 bits 16 bits 32 bits 32 bits <=40 bits

Versión: Para la versión actual IPv4 siempre vale cuatro (0100).

Longitud de la cabecera: El número de bytes de la cabecera siempre debe ser

múltilplo de 4, asimismo la longitud de la cabecera está limitada a 60 bytes puesto que 15 es el máximo que se puede expresar con 4 dígitos binarios.

Tipo de servicio: Contiene a su vez varios subcampos aunque raramente se

implementa. Longitud total del paquete: Como este campo es de 16 bits, un paquete IP no

puede tener más de 65.535 bytes.

Identificación del paquete: Identificador distinto para cada paquete

Indicadores y posición de este fragmento: Permiten gestionar la fragmentación

de paquetes. Se divide en DF, + y un bit añadido. Recordemos que existe la

MTU de la interfaz de red que restringe el tamaño máximo del paquete según el protocolo utilizado que se puede enviar. Si mandamos un paquete a una red

con MTU inferior al tamaño de ese paquete, debemos fragmentarlo y los nuevos fragmentos tienen características comunes: tienen el mismo

identificador de paquete en las cabeceras IP, indican en el campo Posición de

este fragmento (lo veremos después) el primer byte de datos del fragmento dentro del paquete original. El bit + del campo indicadores es 1 en todos los

fragmentos a excepción del último, por lo que se le suele denominar a este campo “hay más?”. El resto de los campos de la cabecera se copia

íntegramente excepto claro está el indicador de longitud del paquete y el checksum que debe calcularse de nuevo. Como el direccionador de Internet

hace el trabajo mínimo, el responsable de recomponer todos los fragmentos es

únicamente la estación de destino. Cuando le llega un paquete fragmentado reserva memoria suficiente (65536 bytes) para tratarlo y pone un temporizador

en marcha dado que no sabe la longitud completa de lo que ha de llegar. Si pasado el tiempo no llegan todos los fragmentos se descarta todo lo recibido y

el nivel TCP (el IP no es capaz) es el responsable de pedir una retransmisión

nueva cuando sea posible. Tiempo de vida o TTL: Indica el número máximo de direccionadores que

pueden cruzar el paquete. Y sirve para evitar que un paquete pueda quedar

dando vueltas indefinidamente dentro de la red en caso de que haya algún problema al entregarlo. Cada direccionador disminuye el campo en 1 y cuando

Page 234: sistemas operativos, redes y bases de datos

Redes · 5

TEMA

llega a 1 el siguiente direccionador lo elimina y envia al originario del mensaje

un error. Protocolo: Identifica el tipo de protocolo que transporta el paquete.

Checksum: Realiza el control de errores en la cabecera para evitar posibles

errores en su contenido. Aunque a decir verdad tampoco es demasiado fiable,

es decir, el algoritmo es fácil y rápido de calcular (suma aritmética de los bytes de la cabecera agrupados de dos en dos), pero por ello mismo poco fiable.

Dirección de origen IP: el que envía el paquete.

Dirección de destino IP: El destinatario del mismo.

Opciones: Hay varios servicios que se pueden implementar aquí, aunque

generalmente no se utilizan

Direccionamiento y direccionadores

Los direccionadores deben interconectar dos o más subredes IP y encargarse de direccional el tráfico destinado a estaciones remotas. Cada

direccionador no decide la ruta entera de un paquete de datos, sino solo el trozo de

ruta en que participa y debemos saber que entre origen y destino de un paquete tenemos un número variable de saltos y por tanto de direccionadores. Esto plantea

varios problemas: Cuando se salta entre varias redes, hay que averiguar la correspondencia entre direcciones IP y MAC, aunque el paquete no tenga la

dirección MAC el mapeado IP-MAC realizado por el protocolo ARP es capaz de

solventar este problema; además también el direccionador debe decidir en cada momento cual es el siguiente direccionador a utilizar.

Para esto se utilizan las tablas de direccionamiento que disponen de

información limitada, pero suficiente en cada salto, para permitir la conexión de todas las subredes que componen Internet. Todo equipo conectado a una red IP

necesita una tabla de direccionamiento. Vamos a distinguir a continuación dos

tablas de direccionamiento, para una estación con una única interfaz o con más de una:

Tabla de direccionamiento de la estación con una única interfaz

Dirección Máscara Direccionador Interfaz

1 147.83.153.103 255.255.255.255 127.0.0.1 Loopback

2 127.0.0.0 255.0.0.0 127.0.0.1 Loopback

3 147.83.153.0 255.255.255.0 147.83.153.103 Ether0

4 255.255.255.255 255.255.255.255 147.83.153.103 Ether0

5 0.0.0.0 0.0.0.0 147.83.153.5 Ether0

En la tabla anterior tenemos la tabla de direccionamiento de una estación

conectada a una lan con dirección 147.83.153.103/24 con una única tarjeta ethernet.

La primera y segunda entradas permiten transmitir paquetes IP a las

direcciones 147.83.153.103 y a todas las direcciones que empiecen por 127. En

ambos casos se envían a la interfaz visual del propio ordenador local, y ninguno

de los paquetes que se direccione con alguna de estas dos reglas saldrá a la red.

La tercera entrada serña adoptada por todos los paquetes destinados a la red

local. La cuarta entrada nos indican que los broadcasts IP se restringirán a la red

local, por tanto tiene una importancia relativa.

La quinta entrada permite a la estación comunicarse con estaciones remotas.

Notemos que la máscara no tiene ningún bit en 1 y será la ruta por defecto. El

direccionador establecido queda identificado en la tabla por 147.83.153.5.

Page 235: sistemas operativos, redes y bases de datos

6 · Redes

Toda la información anterior se calcula a partir de la dirección local (en el

ejemplo anterior 147.83.153.103), la máscara de la LAN (255.255.255.0) y la dirección del direccionador (147.83.153.5).

En un direccionador, las tablas de direccionamiento lógicamente tienen más

entradas que las de una estación, aunque el funcionamiento es el mismo.

4. EL ARP

Es el encargado de llevar a cabo la resolución automática del mapeado entre

direcciones MAC. Es decir, cuando efectuamos la transmisión de un paquete entre dos direcciones LAN, indicamos únicamente la IP, entonces el sistema identifica

esta dirección IP, busca en la caché ARP la dirección MAC a la que corresponde dicha IP y envía el paquete.

Obviamente no todas las direcciones se encuentran en la caché ARP, primero porque no mandamos constantemente paquetes a todas las IP-MAC

posibles, pero además las direcciones que se encuentran en la caché caducan en

un espacio de tiempo breve, entre uno o varios minutos. Cuando se desconoce la MAC de destino y no se encuentra en la caché

ARP, se envía una petición ARP que transporta la dirección IP que se quiere conocer (con una trama broadcast FF: FF: FF: FF: FF: FF; todas las estaciones de la

LAN procesan la trama pero solo la poseedora de la IP pedida contesta; entonces

se produce la respuesta ARP comunicando la dirección MAC directamente a quien la ha pedido. Los formatos de estas peticiones y respuestas son irrelevantes.

5. EL ICMP

El Internet Control Message Protocol se puede definir como un protocolo o

como una herramienta que utiliza el protocolo IP para notificar errores.

Los mensajes ICMP viajan dentro de paquetes IP (no como los ARP) y existen 13 tipos de mensajes ICMP

como petición de eco, respuesta de eco, redireccionamiento,

petición de hora, el tiempo de vida ha expirado, etc…

El programa ping permite descubrir si una estación se encuentra activa o no, simplemente efectuando

ping <dirección IP de destino>. La instrucción

Ping envía un menaje ICMP de tipo 8 (petición de eco) con

el destino indicado; el receptor debe responder con un eco

(ICMP tipo 0) lo cual indica que la estación remota está activa).

El programa traceroute permite encontrar las rutas entre un origen y un

destino, utiliza un mecanismo bastante ingenioso: Recordemos que cuando un

direccionador recibe un paquete aparte de las funciones que deba llevar a cabo, reduce en una unidad el valor del campo TTL (tiempo de vida) y en caso de que el

resultado sea 0 el paquete debe eliminarse, pero además se envía una notificación de la misma al originador del paquete. Pues bien, el programa traceroute

simplemente debe enviar paquetes al destino con TTL secuencialmente ascendentes, es decir, comienza con TTL=1 que será rechazado por el primer

redireccionador, el TTL=2 superará este primero pero será rechazado por el

segundo, etc. hasta llegar a su fin.

Ping

ping 66.194.152.210

Haciendo ping a 66.194.152.210 con 32 bytes de datos:

Respuesta desde 66.194.152.210: bytes=32 tiempo=2800ms TTL=47

Respuesta desde 66.194.152.210: bytes=32 tiempo=3146ms TTL=47 Respuesta desde 66.194.152.210: bytes=32 tiempo=3221ms TTL=47

Respuesta desde 66.194.152.210: bytes=32 tiempo=2564ms TTL=47 Estadísticas de ping para 66.194.152.210:

Paquetes: enviados = 4, recibidos = 4, perdidos = 0 (0% perdidos),

Tiempos aproximados de ida y vuelta en milisegundos: Mínimo = 2564ms, Máximo = 3221ms, Media = 2932ms

Page 236: sistemas operativos, redes y bases de datos

Redes · 7

TEMA

tracert 66.194.152.210

Traza a la dirección 66-194-152-210.gen.twtelecom.net [66.194.152.210]

sobre un máximo de 30 saltos:

1 <1 ms <1 ms <1 ms 129.Red-213-97-197.pooles.rima-tde.net [213.97.197.129] 2 1533 ms 1636 ms 1821 ms 129.Red-213-97-197.pooles.rima-tde.net [213.97.197.129]

3 2036 ms 2231 ms 2154 ms 19.Red-80-58-11.pooles.rima-tde.net [80.58.11.19] 4 2093 ms 2172 ms 1970 ms 37.Red-80-58-76.pooles.rima-tde.net [80.58.76.37] 5 2188 ms 1696 ms 1401 ms 17.Red-80-58-72.pooles.rima-tde.net [80.58.72.17]

6 2186 ms 2215 ms 1988 ms 242.Red-80-58-73.pooles.rima-tde.net [80.58.73.242] 7 2031 ms 1677 ms 1969 ms 114.Red-80-58-72.pooles.rima-tde.net [80.58.72.114]

8 1689 ms 1787 ms 1512 ms GE4-1-0-0-grtmadde1.red.telefonica-wholesale.net [213.140.50.149] 9 1294 ms 1590 ms 1364 ms So5-1-0-0-grtmadpe1.red.telefonica-wholesale.net [213.140.36.113] 10 1797 ms 1851 ms 1701 ms So7-0-0-0-grtparix1.red.telefonica-wholesale.net [213.140.36.146]

11 2309 ms 1844 ms 2446 ms P14-0-grtwaseq1.red.telefonica-wholesale.net [213.140.37.190] 12 2303 ms 2074 ms 2166 ms timewarner-2-1-grtwaseq1.red.telefonica-wholesale.net [213.140.39.246]

13 2020 ms 1507 ms 1655 ms 66.192.255.228 14 1423 ms 1269 ms 1534 ms core-02-so-0-0-0-0.atln.twtelecom.net [66.192.255.23] 15 1506 ms 1229 ms 1335 ms 66.192.243.15

16 * 1492 ms 1588 ms dist-01-ge-2-3-0-0.mtld.twtelecom.net [66.192.243.129] 17 1891 ms 1805 ms 1562 ms hagg-01-ge-0-3-0-0.mtld.twtelecom.net [66.192.243.146]

18 1558 ms 2216 ms 1923 ms 66.162.30.58 19 1260 ms 1195 ms 1422 ms 66-194-152-210.gen.twtelecom.net [66.194.152.210]

Traza completa.

6. PROTOCOLOS DEL NIVEL DE TRANSPORTE

El objetivo principal del nivel de transporte es actuar de interfaz entre los niveles orientados a la aplicación y los niveles orientados a la red de

jerarquía de protocolos. El nivel de transporte oculta a los niveles altos del sistema el tipo de tecnología al que está conectado el Terminal. Por encima

del TCP e IP tenemos el puerto, y por debajo la dirección IP.

Las aplicaciones que podemos encontrar son muy variadas y necesitan un protocolo de nivel de aplicación como puede ser FTP, http, SMTP, SNMP,

etc. Por tanto, cuando se establece la comunicación no sólo es esencial conocer la IP del Terminal o servidor de destino, sino también el puerto que

identifica la aplicación de destino. Así se utilizan puertos como:

7 para el servidor de eco.

20 y 21 para el FTP de datos y control y POP3

80 para http (Internet).

Las comunicaciones se realizan en forma cliente/servidor. El cliente, como

hemos dicho antes, necesita conocer no solo la dirección IP de la máquina servidora para poder comunicar con ella, sino también el puerto de aplicación con

que desea comunicarse con el cliente: ftp, http, correo electrónico…

7. EL UDP

El UDP es un protocolo no orientado a la conexión, de manera que no proporciona

ningún tipo de control de errores, como vemos

en la figura lateral, por debajo utiliza el IP para su transmisión.

Recordemos que hablamos de datagramas, y, en este caso también

recordemos que no garantiza la fiabilidad, pues

el UDP utiliza el protocolo best-effort, es decir, hace lo posible por transferir los datagramas,

pero no garantiza su entrega. Se compone la cabecera del paquete de:

Modelo de red

Jerarquía de protocolos TCP/IP

Page 237: sistemas operativos, redes y bases de datos

8 · Redes

Puertos de origen y destino, cada uno con 16 bits.

Campo Longitud: otros 16 bits.

Checksum: otros 16 bits, aunque el cálculo del checksum al igual que en el

protocolo IP no es demasiado fiable.

El UDP es útil para entregar información en modo multicast o broadcast a un grupo de usuarios o todos los usuarios de la red sin esperar respuesta de ellos. En

principio la ventaja que representa el UDP sobre el IP que en principio también podría hacer todo esto es que el UDP ofrece un servicio de multiplexación a las

aplicaciones que el IP no ofrece.

8. EL TCP

El TCP a diferencia del UDP proporciona fiabilidad a la aplicación, es decir, garantiza la entrega de toda la información en el mismo orden en que ha sido

transmitida por la aplicación de origen, sus principales características son:

Transmisión libre de error: La información se transmite “casi libre” de errores,

puesto que siempre puede haber algún error que se quede oculto.

Garantía de entrega de la información y de la secuencia de la transmisión.

Eliminación de duplicados: Si se reciben copias a causa del mal funcionamiento

de la red, el TCP las eliminará.

El TCP utiliza el concepto buffered transfer es decir, cuando se transfiere la

información el TCP divide el flujo en trozos del tamaño que más le convenga, esperando si hay poca información a llenar un buffer completo para ser enviado o

mandar la información sin que la memoria intermedia esté completamente llena.

El formato del segmento TCP es como sigue:

Puerto de origen

Puerto de

destino

Número de secuencia

Número ACK

Longitud de la

cabecera

Reservado Control Ventana Checksum Urgent Pointer

Opciones TCP

16 bits 16 bits 32 bits 32 bits 4 bits 4 bits 6 bits 16 bits 16 bits 16 bits 32 bits

Los campos puerto de origen y destino identifican la aplicación en el Terminal

de origen y destino respectivamente. Número de secuencia identifica el primer byte del campo de datos, pues en el

TCP no se numeran segmentos, sino bytes.

El número ACK menos uno indica el último byte reconocido.

La longitud de cabecera indica eso mismo, puede ser de 20 bytes, pero si se

utiliza el campo opciones, puede llegar a 60 bytes.

El campo reservado lo está y se suelen utilizar ceros.

El campo control está formado por 6 indicadores independientes: URG

(urgente), ACK (si esta a 1 el campo número ACK tiene sentido), PSH (dice al receptor si está a 1 que envíe todos los datos aunque la memoria intermedia no

esté completamente llena), RST (reset de la conexión), SYN (inicio y resincronización de la conexión) y FIN (fin de la transmisión).

El campo ventana indica cuantos bytes componen la ventana de transmisión,

en los protocolos de enlace el tamaño de la ventana era constante, pero ahora

un extremo TCP advierte al otro extremo de la cantidad de datos que está dispuesto a recibir en cada momento.

El campo checksum, como siempre detecta errores.

Urgent Pointer tiene sentido cuando URG está a 1 e indica que los datos que

envía el origen son urgentes e identifica el último byte del campo de datos que también lo es.

Opciones TCP permite añadir campos a la cabecera para marcar el tiempo en

que se transmitió el segmento, aumentar el tamaño de la ventana, indicar el

Page 238: sistemas operativos, redes y bases de datos

Redes · 9

TEMA

tamaño máximo del segmento MSS. Cuanto mayor sea el tamaño MSS (tamaño

máximo del segmento) más datos enviaremos y más amortizaremos las cabeceras que enviemos, pero claro dependemos de la MTU local. Podemos

antes de empezar la conexión preguntar cuánto vale la MTU local y ajustar ese mismo valor para la MSS o fragmentar el MSS en caso de que la MTU sea

menor.

Establecimiento y cierre de la conexión

Para establecer una conexión se utiliza el protocolo 3way

handshake, en el que hacen falta 3 segmentos TCP para iniciar la conexión. Veamos como se desarrolla la secuencia de

comandos:

Segmento de petición de la conexión: El cliente TCP envía

este segmento para iniciar la conexión, se conoce como segmento SYN porque tiene activado el bit SYN en el ampo

control de la cabecera, el número de secuencia es elegido al azar.

Segmento de confirmación de la conexión: El servidor TCP

responde con un segmento SYN que indica el número de

secuencia inicial que utilizará y el ACK del segmento SYN es igual al ISN del cliente más uno.

Segmento de reconocimiento de la conexión: Se reconoce

la conexión conteniendo el ISN del servidor más 1; y a partir de aquí ya se inicia la conexión.

15:56:54.796091 argos.1023 > helios.login: S 3541904332:

3541904332 (0) win 31744 <mss 1460>

15:56:54.796091 helios.login > argos.1023: S 548133143:

548133143(0) ack 3541904333 win 8760 <mss 1460>

15:56:54.796091 argos.1023 > helios.login: . ack 548133144

<mss 1460>

En este ejemplo vemos como argos intenta conectarsea Helios eligiendo ISn 35..32,

luego responde Helios devolviéndole ese número más 1 como ACK y diciendo que espera recibir mandar segmentos con tamaño 1460 (igual que argos). Finalmente

Argos responde con ack del helios más uno.

Esta conexión abierta se dice que es activa por parte del que envía el

primer segmento, en este caso argos y pasiva del que la recibe. Para el cierre de la conexión normalmente se considera cierre activo el del cliente y pasivo el del

servidor. Cuando se cierra la conexión el cliente envía un segmento TCP del tipo FIN

con el número de secuencia correspondiente; el servidor envía una confirmación de

cierre por medio de un ACK con el número de secuencia recibido más uno. El servidor envía un segmento TCP de tipo FIN con el número de secuencia

correspondiente al cliente y este responde automáticamente con el número más uno.

15:57:01.616091 helios.login > argos.1023: F 1417:1417 (0) ack 41 win 8760

15:57:01.616091 argos.1023> helios.login: .ack 1418 win 31744

15:57:01.616091 argos.1023> helios.login: F 41:41 (0) ack 58031744

15:57:01.616091 helios.login > argos.1023: .ack 42 win 8760

Los estados por los que puede pasar una conexión tanto al abrirse, como al

cerrarse, pueden observarse en la figura adjunta de la página siguiente.

Transferencia de la información

El TCP envía datos manteniendo un temporizador, cuando éste salta, el TCP

empieza a transmitir.

Cuando el TCP recibe un segmento de datos, envía un reconocimiento.

Establecimiento y cierre de la conexión

Page 239: sistemas operativos, redes y bases de datos

10 · Redes

Si un segmento enviado es incorrecto (se sabe por el campo checksum) el TCP

descarta ese segmento y envía un segmento con el mismo numero de ACK que

reconoció correctamente la última vez. El transmisor verá un ACK duplicado e interpretará que no le han reconocido la información.

Si los datos llegan desordenados (reconozcamos que por debajo tenemos el IP

que no reconoce la información, únicamente la transporta), el TCP los reordena y los pasa correctamente a la aplicación, si algunos aparecen repetidos, los

descarta. Como el TCP posee una memoria limitada, se realiza un control de flujo

mediante el campo ventana que estudiaremos posteriormente.

Hay dos tipos de información que se

puede enviar: la transmisión de datos interactivos y la transmisión de un gran

volumen de datos; Ambos, para aprovechar

los recursos de la red, se tratan de forma distinta. En el caso de datos interactivos:

Reconocimientos retrasados: Es habitual

que el TCP no envía en este caso los

reconocimientos ACK inmediatamente

tras recibir los datos, sino que espera un tiempo a que haya datos que

retransmitir en sentido contrario. Por ejemplo en la aplicación Telnet es

habitual que retransmitamos muy pocos datos, por ejemplo para pedir el

contenido de todo un directorio; en este

caso el TCP utiliza un temporizador de hasta 200 ms por si hay datos que

transmitir antes de enviar el ACK. Algoritmo de Nagle: Cuando tenemos

muy pocos datos que enviar, por

ejemplo solo 1 byte, recordemos que le añadimos entre el TCP y el IP 40 bytes

de cabecera, y esto es poco práctico. El algoritmo de Nagle se utiliza para que se puedan enviar segmentos pequeños sin que se haya reconocido; eso sí solo

se puede enviar uno a la red y esperar a que sea recibido para poder mandar el siguiente. Esto es útil cuando el segmento debe atravesar WAN, pero si es una

LAN no es necesario; e incluso se debe desinhibir para determinadas funciones como es el movimiento del ratón que genera segmentos de pocos bytes pero

que deben mandarse inmediatamente.

Para los grandes volúmenes de datos el tratamiento es diferente, se basa

en la ventana deslizante donde la ventana de transmisión no es fija sino variable. La idea es que cada extremo TCP regula la cantidad de datos que el otro

extremo puede transmitir, con esta finalidad cada extremo notifica al extremo

opuesto cada vez que envía un segmento, la ventana que puede aceptar en ese momento y el par TCP se actualiza con esa información. Hemos de recordar que un

reconocimiento reconoce posiciones de bytes en el flujo de datos sin tener en cuenta el segmento al que pertenecen.

En la imagen lateral vemos una ventana de 7 bytes en total; se han reconocido hasta el byte 999 con lo cual se podría transmitir sin esperar

confirmación hasta el 1006; solo se ha transmitido hasta el 1003, si esto es

reconocido la ventana se deslizaría desde el 1004 hasta el 1010. La ventana puede variar: puede deslizarse a la derecha a medida que se van enviando y reconociendo

datos, puede cerrarse si el límite izquierdo alcanza el derecho (se cerraría el envío de datos), puede comprimirse cuando el límite derecho se mueve hacia la izquierda

o puede disminuir si el límite izquierdo se desliza hacia la derecha (esto es menos

Estados por los que puede pasar una conexión

Page 240: sistemas operativos, redes y bases de datos

Redes · 11

TEMA

problemático porque a pesar de que se pueden enviar menos datos en el próximo

envío, todos los enviados han sido correctamente reconocidos).

Temporizadores

Los segmentos de datos, pero también los de

reconocimiento se pueden perder durante la transmisión, por ello se hace necesario utilizar un

temporizador de retransmisiones o RTO. Pero la cuestión estriba en qué tiempo hay que darle a este

temporizador para considerarlo correcto. Si le damos el RTT que es el tiempo de ida y vuelta, es decir,

desde que se envía un segmento hasta que ser recibe

el ACK, puede ocurrir digo en este caso RTO=RTT que el siguiente envío por cualquier causa se retrase un

milisegundo y ya salte el error. Para evitar estos problemas existen varios tipos de algoritmos que lo calculan:

Algoritmo de retransmisión adaptativo: Se calcula el RTT a partir del RTT medio

y del valor del último RTT; el problema de este cálculo es que no considera las

posibles fluctuaciones. Algoritmo de Jacobson: Se sirve tanto de la media estimada del RTT como de la

desviación estándar estimada; mejora, en parte, el cálculo del algoritmo

anterior. Algoritmo de Karn: Hay que tener en cuenta que uno de los parámetros para

calcular los algoritmos anteriores se basa en la medida del tiempo de ida y

vuelta RTT, por tanto si el ACK que llega no es el esperado en la retransmisión se producen cálculos incorrectos. Karn considera hacer cálculos sólo cuando el

segmento no sea reconocido, duplicando entonces el valor del temporizador.

Algoritmo slow start: Cuando el transmisor emite el mayor número de

segmentos que le está permitido, pero en su viaje, estos segmentos tienen que atravesar equipos intermedios que se pueden congestionar por muchas

razones, es normal que estos equipos descarten datagramas IP enteros; estos datagramas le vuelven al origen por la congestión intermedia y la congestión

así aumenta. Este algoritmo permite que el transmisor incremente el número

de segmentos que es preciso transmitir exponencialmente cada vez que recibe un reconocimiento. Comienza enviando un solo segmento y abriéndose una

ventana de congestión que se inicializa con el valor MSS máximo y cada vez que se recibe un ACK de reconocimiento, se incrementa en un segmento.

Algoritmo congestion avoidance: Este algoritmo reduce la ventana de

congestión a la mitad cada vez que se pierde un segmento y reduce la congestión en la red.

Temporizador keepalive: Cuando una conexión TCp no dispone de datos para

emitir, no se envía ningún tipo de información entre el cliente y el servidor pero

la conexión puede estar abierta horas o días enteros si la aplicación no se cierra. Normalmente, si no hay actividad durante dos horas, el servidor envía

uno o varios segmentos de prueba al cliente y si no hay respuesta, cierra la conexión; si hay respuesta se vuelve a poner el temporizador a cero.

Ejemplo de ventana deslizante

Page 241: sistemas operativos, redes y bases de datos

12 · Redes

TEMA 2 PROGRAMACIÓN DE SOCKETS

1. QUÉ SON LOS SOCKETS

Un socket es un punto de acceso a los servicios de comunicación en el

ámbito de transporte. Para ello, cada socket tiene asociada una dirección diferente

que lo identifica y así se puede establecer una comunicación con él, dentro del ámbito de la misma máquina como en ámbito mundial.

Los sockets comenzaron con el inicio de la red Arpanet y, por ello, suelen

estar muy unidos al sistema operativo Unix. Por ello algunas llamadas a sockets van

directas al kérnel del sistema y otras están integradas en el lenguaje C. Actualmente otros lenguajes de programación como Java hacen uso de los sockets.

Como está muy unido al mundo Unix, se sigue su filosofía general de tratar los sockets como dispositivos y los mecanismos de entrada y salida como ficheros.

Direcciones de Sockets

Es fundamental como hemos dicho anteriormente conocer la dirección de un socket para poder establecer comunicación con él. Existen dos tipos de nombres

(direcciones) que se le pueden dar a un socket: El espacio de nombres de ficheros: Se utiliza para sockets que deben

comunicar un proceso con otro del mismo sistema. En este caso el socket

constituye un nombre de fichero y en este sentido, es similar al mecanismo de

comunicación mediante pipes que vimos en sistemas operativos 1, aunque las pipes solo podían leer por un lado y escribir por otro y, en los sockets, la

comunicación es bidireccional. El espacio de nombres de Internet: En este caso el nombre se compone del

protocolo concreto que debe utilizarse, de la dirección del nodo de ned

(dirección Internet de la máquina correspondiente por medio de los números de 32 bits utilizados en el protocolo IP; recordemos que una máquina puede

disponer de múltiples direcciones de Internet, pero cada dirección solo debe

corresponder a una máquina) y también se compone del número de puerto, dicho número puede ser un valor comprendido entre 1 y 65535, aunque

veremos que hay en el punto siguiente algunas restricciones.

Socket servidor y socket cliente

El socket que inicia la comunicación, en realidad hace una petición por lo

que es el socket cliente, mientras que el que sirve la petición es el socket servidor. La dirección de este socket servidor es muy importante y debe estar muy

bien determinada, dado que los socket clientes las necesitarán para poder establkecer la conexión. Hemos dicho que existen 65535 puertos distintos, pero los

1024 primeros suelen estar reservados para servicios estándar como ftp, telnet,

smtp,… con lo que generalmente el socket servidor toma una dirección entre 1024 y 65535.

El número de puerto del socket cliente suele ser irrelevante, tal es así

que se suele dejar al sistema que seleccione uno automáticamente, puesto que

esta dirección solo la tiene que conocer el servidor para saber donde enviar la petición.

Estilos de comunicación

Existen dos estilos de comunicación o tipos de socket que son:

Estilo secuencia de bytes: Los datos son transmitidos de extremo a extremo

como una corriente o flujo ordenado de bytes. Se denomina orientado a

Tema 2

Programación de sockets

1. Qué son los sockets 2. Sockets con lenguaje C

3. Sockets con lenguaje Java

Page 242: sistemas operativos, redes y bases de datos

Redes · 13

TEMA

conexión puesto que cuando se hace utilizando el espacio de

nombres de Internet, se corresponde con el protocolo TCP. Este estilo garantiza la llegada de todos los datos, sin pérdidas,

desordenaciones ni repeticiones.

Estilo datagrama: Cada vez que el emisor escribe datos, se

transmite un paquete individual o datagrama con dichos datos y cada vez que el destinatario quiere leer estos últimos, recibe

como máximo un datagrama. Como todos los datagramas tienen

la dirección del socket al que van dirigidos, son independientes, y se pueden perder por el camino, desordenar, etc. Es un estilo

no orientado a conexión que no garantiza la llegada de todos los datos, ni su orden, ni su unicidad. La ventaja es que requiere

muchos menos recursos que la secuencia de bytes y se utilizan

cuando no es indispensable la fiabilidad total en la recepción de datos.

La comunicación entre sockets se establece como vemos en

la figura lateral dividiendo las operaciones que deben realizar los

sockets clientes y los servidores

2. SOCKETS CON LENGUAJE C

Vamos a estudiar a continuación las operaciones comunes a

servidores y clientes, luego las propias de los servidores y por último las propias de los clientes.

2.1. Operaciones comunes a servidores y clientes

Crear un Socket

El prototipo de la llamada básica para crear un socket está declarado en el fichero

cabecera <sys/socket.h> y es

Int socket (int espacio, int estilo, int protocolo)

El primer parámetro, espacio, especifica el espacio de nombres o familia de protocolos correspondiente al socket y puede ser:

PF_FILE: Espacio de nombres de ficheros.

PF_UNIX: Versiones antiguas de PF_FILE.

PF_INET: Protocolos de Internet

El parámetro estilo indica el estilo de comunicación y puede ser: SOCK_STREAM: Secuencia de bytes.

SOCK_DGRAM: Datagrama.

SOCK_RAW: Acceso directo a un nivel más superior pero parecido al datagrama

SOCK_SEQPACKET: Datagramas transferidos de manera fiable.

Estos dos parámetros, el espacio y el estilo, limitan el valor del tercer parámetro protocolo, tal es así que si se deja a 0 puede ser porque para un estilo y

espacio de nombres determinado solo exista un tipo de protocolo o porque así se deja por defecto el más utilizado establecidos ya los dos primeros.

El valor retornado por el socke es -1 si se ha producido un error y no se ha podido producir el socket o un número que estará asociado a un descriptor de

fichero.

Hay llamadas que permiten crear dos sockets de un plumazo y ya conectados:

Int socketpair (int espacio, int estilo, int protocolo, int vs[2])

Comunicación entre sockets

Page 243: sistemas operativos, redes y bases de datos

14 · Redes

En este caso, los 3 primeros parámetros actúan igual que anteriormente y

el último es la dirección de un vector de enteros que disponga de al menos dos elementos. Si la llamada tiene éxito retorna 0 y llena los dos primeros elementos

del vector con los descriptores de los sockets creados. Estos sockets creados deben pertenecer necesariamente al mismo sistema y al mismo proceso, por lo que quizá

inicialmente no parezca de mucha utilidad, pero si lo es en el caso de

comunicaciones entre un proceso padre y uno hijo.

Asignar dirección a un socket El fichero cabecera <sys/socket.h> proporciona la definición del tipo sockaddr:

Struct sockaddr

{

Short int sa_family;

Char sa_data […];

};

El tipo sockaddr como vemos contiene los campos sa_family y sa_data. El primero de ellos indica el espacio de nombres o familia de protocolos y puede ser el

formato de direcciones del espacio de nombres de ficheros (F_FILE y AF_UNIX) o el formato de direcciones del espacio de nombres de Internet (AF_INET y

AF_UNSPEC). El campo sa_data por su parte, es un contenedor genérico de la

dirección que se quiere representar.

Si utilizamos el espacio de nombres de ficheros debemos especificar los parámetros sun_family (formato de la dirección) y sun_path (nombre del socket); si

utilizamos el espacio de nombres Internet especificaremos sin:family (formato de dirección), sin_addr (dirección internet del servidor) y sin_port (puerto al que

conectarse).

Dicho todo esto la llamada para asignar una dirección a un socket

posee el prototipo siguiente: Int bind (int descr, const struct sockaddr *adr, size_t long_adr)

El parámetro descr es el descriptor del socket, adr es un puntero a la

estructura que representa la dirección que debe asignarse y long_adr cuantos bytes ocupa esta estructura por si su longitud es variable.

El valor retornado por la llamada bind es 0 si se ha podido asignar

correctamente, -1 si se ha producido algún error, de entre los que destacan que el

primer parámetro no es un descriptor o no es un descriptor válido, no se puede asignar la dirección especificada desde este sistema, la dirección especificada ya

está asignada a otro socket, etc.

Enviar datos

Para enviar datos podemos utilizar tres llamadas diferentes:

La llamada write envía datos a un socket que sea orientado a conexión o si es no orientado, que tenga definida una dirección de destino por defecto.

Ssize_t write (int dexcr, const void *datos, size_t longitud);

Descr es un descriptor que puede ser un dispositivo, una pipe, un socket, un fichero… datos es la dirección de la memoria donde se encuentran los datos que

queremos escribir y longitud indica cuantos bytes queremos escribir.

La llamada send es específica de los socket: Int send (int descr, const void *datos, size_t longitud, int flags)

Page 244: sistemas operativos, redes y bases de datos

Redes · 15

TEMA

Se diferencia de write en el último parámetro, flags, que permite especificar

ciertas opciones de transmisión como son envío de datos urgentes (admitido por el protocolo TCP) u otras.

La última llamada que queda es sendto:

Int sendto (int descr, const void *datos, size_t longitud, int flags, const

struct sockaddr *adr, size_t long_adr)

Se diferencia del primer send en que los dos parámetros adicionales

permiten especificar a qué socket deben enviarse los datos por medio de un puntero a su dirección (adr) y el número de bytes que ésta última ocupa

(long_adr). Si el socket correspondiente es no orientado a conexión esta llamada envía el socket indicado por los parámetros adr y long:adr un datagrama con los

datos especificados.

En muchos sistemas estas 3 llamadas anteriores retornan cuando los datos

se han copiado en el buffer de transmisión del socket, si el buffer está lleno, tendrán que esperar hasta que haya suficiente espacio disponible, por lo cual, un

retorno sin error no implica necesariamente una recepción correcta en el socket

remoto.

Recibir datos De forma análoga a enviar datos, al recibir contamos con 3 llamadas

complementarias:

La llamada read:

Ssize_t read (int descr, void *datos, size_t longitud);

Descr es el descriptor del socket, datos es un puntero a la zona de memoria

en que deben dejarse los datos leídos y longitud es el número de bytes máximo

que queremos leer. Se retorna el valor de bytes leídos, que puede ser menor al este último parámetro si de momento no hay más disponibles.

La llamada recv es específica de los socket para leer datos, y análogamente a

send, se conforma de: Int recv (int descr, void *datos, size_t longitud, int flags);

Se diferencia igual que antes en el parámetro adicional flag, que puede servir para

indicar el envío de datos urgentes. Cuando UNIX recibe esta llamada, normalmente la descarta, pero se puede capturar y definir procesos propios para conferir

prioridad a los datos urgentes sobre los que no lo son.

La llamada recvform lee datos e indica de dónde han venido, opera como sendto y

se conforma de: Int recvform (int descr, void *datos, size_t longitud, int flags, struct

sockaddr *adr, size_t *long_adr);

La diferencia entre recv y recvform es que la última llena la estructura apuntada

por el parámetro adr con la dirección del socket del que se han recibido los datos

(salvo que este parámetro constituya un puntero nulo).

Esperar disponibilidad de datos La llamada select en Unix permite esperar hasta que se puedan leer o escribir

datos en algún descriptor de una lsita determinada. Esta llamada también es

aplicable a los sockets y es muy útil cuando un proceso debe recibir datos pro diferentes canales. El prototipo de la llamada select es:

Page 245: sistemas operativos, redes y bases de datos

16 · Redes Int select (int n_descr, fd_set *d_lect, fd_set *d_escr, fd_set *d_excep,

struct timeval *tiempo)

El tipo fd_set sirve para representar conjuntos de descriptors, struct timeval sirve para representar un intervalo de tiempo definido en segundos y/o microsegundos.

La llamada select retorna en una de las 4 siguientes condiciones: Se puede llevar a cabo una lectura sin bloque, o porque hay datos preparados

para ser leidos en alguno de los descriptores especificados en d_lect o porque

hemos llegado al final de los datos.

Se pueden escribir datos inmediatamente en alguno de los descriptores de la

lista especificada en d_escr. Hay una situación excepcional en alguno de los descriptores de la lista que se

halla en d_excep.

Ha transcurrido el tiempo especificado en el parámetro tiempo.

Cerrar un socket

Se utiliza para ello la llamada close: Int close (int descr);

Sirve para cerrar un descriptor cuando ya no se va a trabajar más en el

mismo y así liberar los recursos que el sistema tiene ocupados en él. En general si se cierra un socket que utiliza un protocolo de transmisión fiable y todavía quedan

datos pendientes de enviar, la llamada close no retorna hasta que no se han acabado de enviar todos los datos.

Existe una llamada más específica que es shutdown que permite dar por finalizada la comunicación en cualquiera de los dos canales del intercambio de

datos bidireccional.

2.2. Operaciones propias de los servidores

Preparar un socket para recibir conexiones

Con la cláusula: Int listen (int descr, unsigned int n_petic);

Se crea una cola en la que se iran guardando las peticiones de conexión que lleguen destinadas a la dirección del socket; como es natural primero los clientes

deben saber la dirección del socket servidor, para poder conectar al mismo, y eso se asigna previamente con la llamada bin.

Aceptar una petición de conexión

Un socket servidor al que se le haya aplicado la llamada listen, debe utilizar la llamada accept para establecer las conexiones con los clientes que lo soliciten:

Int accept (int descr, struct sockaddr *adr, size_t *long_adr);

Esta llamada extrae la primera petición de conexión de la cola asociada al socket indicado por el primer parámetro descr, crea un nuevo socket que tendrá la

misma dirección que el original y estará conectado al originador de la petición. El valor int retornado es el descriptor del nuevo socket creado, que deberá utilizarse

en el intercambio de datos con el cliente.

Si en el momento de invocar la llamada accept no hay ninguna petición de

conexión a la cola, dicha llamada actúa de la misma manera que read; se bloquea y se queda esperando hasta que llegue una, salvo que el socket trabaje en modo no

bloqueante.

Page 246: sistemas operativos, redes y bases de datos

Redes · 17

TEMA

El servidor inetd

Muchos servidores UNIX se encargan de dar servicio a distintos tipos de conexiones: FTP, www, pop… En lugar de crear un proceso por cada conexión

pedida, lo que se hace es crear un único proceso llamado inetd (Internet daemon) que se encarga de escuchar simultáneamente todos los puertos por los que pueden

llegar peticiones, y cada vez que llega una, arranca un proceso hijo que

proporciona el servicio correspondiente. Al proceso inetd se le pasan los puertos que debe escuchar por medio de un fichero de configuración denominado

inetd.conf que tiene lo siguientes campos: Servicio estilo protocolo espera usuario programa argumentos.

2.3. Operaciones propias de los clientes

Conectar un socket

La llamada connect sirve para que un cliente inicie de manera activa una conexión

de la manera siguiente:

Int connetc (int descr, const struct sockaddr *adr, size_t long_adr);

2.4. Operaciones auxiliaries

Obtener direcciones de socket

Hay dos llamadas al sistema que permiten conocer la dirección de un socket local y el socket remoto al que está conectado.:

Getsockname: int getsockname (int descr, struct sockaddr *adr, size_t

*long_adr); El parámetro adr contiene la dirección del socket correspondiente

al parámetro descr y el parámetro long_adr es un inicio debe contener el número máximo de bytes de la estructura que deben llenarse.

Getpeername: int getpeername (int descr, struct sockaddr *adr, size_t

*long_adr); éste permite conocer la dirección del socket remoto.

Convertir direcciones de Internet

Permiten trabajar con la representación de las direcciones IP en la notación textual

de los bytes en decimal separados por puntos (tipo 66.193.215.28) y encontramos dos llamadas diferentes:

Int inet_aton (const char *text, struct in_addr *adr);

Char *inet_ntoa (struct in_addr adr);

Consultar bases de datos de nombres

Habitualmente lod dos protocolos de nombres más importantes y con los que más se trabajan son con las direcciones IP y con los números de puerto. Según el

sistema los datos se pueden obtener de un fichero de texto (Unix), por medio de un servicio de información distribuida local (NIS) o global (DNS de Internet).

Para el servicio NIS obtendremos los nombres con la cláusula gethostbyname (recibe como parámetro el nombre del servidor, lo busca en la base de datos

correspondiente y si lo encuentra, llena una variable con información sobre el servidor). También se puede aplicar gethostbyaddr, que realiza una búsqueda

inversa: dada la dirección especificada por los parámetros, retorna la información del servidor que tiene esta dirección o retorna NULL si no la puede encontrar.

La función getservbyname y getservbyport buscan información sobre el servicio por el nombre y por el puerto, respectivamente.

Page 247: sistemas operativos, redes y bases de datos

18 · Redes

3. SOCKETS CON LENGUAJE JAVA

En lenguaje Java se esconden todos los detalles de implementación que hemos visto en C y proporcional al programador esencialmente lo que se necesita.

El mecanismo principal es la clase socket que implementa todas las funcionalidades de los sockets. El constructor de la clase es el equivalente a la función socket de la

librería C, crea el socket, mientras el resto de funciones lo constituyen métodos de

la clase.

Constructor: Socket (InetAddress adr, int port)

Socket (InetAddress adr, int port, InetAddress adr_local, int port_local)

Socket (string maquina, int port)

Según la manera de especificar el servidor al que se quiere conectar condiciona

cual de los constructors se ejecuta:

La primera consiste en pasar por parámetro la Dirección IP y el puerto en que

se quiere realizar la conexión. La segunda consiste en suministrarle además de lo anterior, la dirección y el

puerto locales que van a utilizarse.

La última consiste en especificar la máquina remota con el nombre y no con la

dirección IP.

La clase ServerSocket se utiliza en el extremo del servidor, y se encarga de

crear el socket, vincularlo a una dirección y crear la cola en que se almacenarán las peticiones de conexión no atendidas todavía.

Constructor: ServerSocket (int port)

ServerSocket (int port, int n_petic)

ServerSocket (int port, int n_petic, inetAddress adr)

En el primer caso se sumistra solo el Puerto en que debe vincularse el

socket, en el Segundo el puerto y el tamaño de la cola y en el tercero además de estos dos, la dirección IP de la interfaz a la que se quiere vincular el socket.

Una vez creado el objeto de la clase ServerSocket, el método accept se

encarga de esperar conexiones de clientes po medio del socket, cuando se haya

efectuado la conexión ya podrá empezar el intercambio de información

Para la comunicación con datagramas disponemos de las clases DatagramSocket y DatagramPacket: la primera para los objetos socket UDP y la

segunda para los paquetes que deben enviarse.

Page 248: sistemas operativos, redes y bases de datos

Redes · 19

TEMA

TEMA 3 APLICACIONES INTERNET

1. EL MODELO CLIENTE/SERVIDOR

Las redes de computadores han hecho aparecer un nuevo modelo en el

mundo de la programación: la programación distribuida, con la que se pretende aprovechar la potencia y recursos de varios ordenadores interconectados. La

cooperación de los diferentes ordenadores se realiza mediante un protocolo común, del que existen varios tipos, pero sin duda el que más éxito ha tenido es el modelo

cliente/servidor. En este modelo el servidor ofrece un servicio y el cliente realiza

una petición al servidor y espera un resultado de la misma.

Este sencillo sistema puede “complicarse” mucho más incluyendo múltiples clientes o múltiples servidores, que a su vez entre ellos, se comunican por el

modelo cliente/servidor. Un servidor por tanto, puede ser a su vez cliente de otro servicio simultáneamente.

El diseño de una aplicación distribuida que siga el modelo cliente/servidor incluye dos elementos: la especificación de los servicios que el servidor ofrece y la

especificación del protocolo de acceso a esos servicios.

2. SERVICIO DE NOMBRES INTERNET

La red Internet permite el acceso a una ingente cantidad de ordenadores y

de recursos que se pueden referenciar mediante un nombre. Todos estos nombres están lógicamente ordenados de forma jerárquica, formando un sistema de

dominios.

Para obtener un servicio determinado (por ejemplo una página web) se consultaba el nombre en una base de datos centralizada y se obtenía la respuesta,

pero la rápida expansión de la red hicieron inviable este método y se pasó al sistema de nombres de dominio. El sistema de nombres de dominio (DNS)

proporciona un espacio de nombres para referenciar recursos, el nombre de dominio correspondiente a un nodo se define como la secuencia formada por las

etiquetas existentes en el camino entre este nodo y la raíz, así para llegar a

campus.uoc.edu; el primer nodo es edu (TLD o dominio de nivel superior), de ahí se pasa a uoc y dentro de este al subdominio campus.

Los dominios de nivel superior inicialmente era com, edu, gov, mil y org y agrupaban diferentes tipos de organizaciones (comercial, educativa, gubernativa,

militar y ONG), pero actualmente hay nuevos dominios: net, biz, info, museum,

name, pro… y cada país además tiene el suyo propio constituido por dos caracteres: España (es), Alemania (de), Francia (fr)…

Modelo de DNS

Tenemos dos partes en el modelo bien diferenciadas:

Servidores: Reciben las consultas y envían las respuestas correspondientes;

tanto desde la base de datos local como accediendo a otros servidores cuando no se haya la respuesta prontamente.

Revolvedores: Son clientes del servicio, es un programa o librería que recibe

peticiones de las aplicaciones de usuario, las traduce a consultas DNS y extrae de la respuesta, la información solicitada.

Para que este modelo sea efectivo, se han agrupado por zonas los sistemas de

nombres de dominio, de manera que cada zona es gobernada por un administrador

que además tiene permisos para delegar parte del trabajo o a su vez dividirlo en subzonas. El administrador o sus delegados pueden añadir o quitar nodos en la

zona y toda esta información se debe almacenar en la base de datos local de un servidor, del que se dice que tiene autoridad sobre esa zona. Cuando se envían

Tema 3

Aplicaciones Internet

1. El modelo cliente/servidor 2. Servicio de nombres Internet

3. Servicios básicos de Internet 4. Transferencia de ficheros 5. Correo electrónico Intertet

6. Servicio de noticias: NNTP 7. Servicio de hipermedia: WWW

8. Acceso al servicio de directorio 9. Protocolos Internet

en tiempo real

10. Seguridad en las comunicaciones

Page 249: sistemas operativos, redes y bases de datos

20 · Redes

consultas a este servidor, se dice que responde con autoridad. Si le llega una

consulta de otra zona puede responder de dos formas: Modo no recursivo: La respuesta solo incluye una referencia a otro servidor que

puede proporcionar más información. Este modo es obligatorio en todos los

servidores con autoridad. Modo recursivo: El servidor busca la información que no tiene en otros

servidores y sirve la respuesta, pero no referencias al servidor que le dio la

respuesta correcta. Hecho esto el servidor añade la respuesta a su caché por si recibe la misma consulta de nuevo; pero si sirve la respuesta de nuevo, añade

un comentario que es sin autoridad, pues el dato correcto puede haber

cambiado en ese breve lapso de tiempo. Este método de funcionamiento es opcional en los servidores pero en la práctica es la forma habitual de

funcionamiento.

Bases de datos DNS

La información asociada a un nodo consta de un conjunto de registros de recurso, que en total forman la base de datos DNS. Cada registro consta de los campos

siguientes:

Nombre: Nombre de dominio del nodo al que está asociado el registro.

Tipo: Indica que tipo de información contiene el registro. Los valores que se

pueden encontrar en este campo pueden ser la dirección de un ordenador (A),

el nombre canónico de un alias (CNAME), información sobre el tipo de ordenador (HINFO), nombre de un servidor de correo (MX),

nombre de un servidor DNS con autoridad para esa zona

(NS)… Clase: Indica la familia de protocolos utilizados en el espacio

de nombres.

Tiempo de vida (TTL): El tiempo máximo que un servidor o

revolvedor pueden guardar el registro en su caché. Datos del recurso (RDATA): Depende del tipo de registro,

puede ser una dirección IP, un conjunto de caracteres…

Protocolo

Para acceder al DNS se puede utilizar tanto el protocolo UDP como el TCP. El primero se suele utilizar en las consultas de los

clientes por su simplicidad y los pocos recursos que requiere; el segundo se utiliza cuando conviene asegurar una transmisión

fiable.

La estructura de un mensaje DNS es como sigue: ID: Número de 16 bits que asigna quién realiza la consulta y

Configuración de un servicio DNS en un ordenador

Configuración de un servicio DNS en un ordenador

Page 250: sistemas operativos, redes y bases de datos

Redes · 21

TEMA

que luego se copiará en la respuesta.

QR (Quero/response): es un bit que indica si el mensaje es una consulta (0) o

una respuesta (1). OPCODE: Código de operación de 4 bits que indica si es una consulta directa,

inversa, petición de status…

AA: Indica si el mensaje es una respuesta con autoridad.

TC (Truncation): Avisa si el mensaje ha sido truncado porque no cabe en el

datagrama. RD: Indica si el cliente solicita respuesta en modo recursivo.

RA: Indica si el servidor soporta las respuestas en modo recursivo.

RCODE: Código de posibles errores.

En la sección de la pregunta, se puede disponer de una o más entradas (una

o más preguntas) cada una contará con el nombre del dominio del que el

cliente desea obtener información, el tipo de registro de recurso que se quiere obtener como respuesta y la clase de registros deseados.

En la sección de la respuesta encontramos las respuestas a todo lo

preguntado en el apartado anterior

En autoridad se pueden contener registros que referencien un servidor con

autoridad si la respuesta ha sido en modo no recursivo.

En la mayoría de ordenadores conectados a Internet ya se cuentan con alguna implementación de un cliente DNS para poder acceder a otros ordenadores

conociendo los nombres de los mismos. En UNIX sin ir más lejos se cuenta además

con la utilidad denominada nslookup que sirve para efectuar todo tipo de consultas directamente a un servidor DNS.

3. SERVICIOS BÁSICOS DE INTERNET

Vamos a estudiar dos servicios básicos que ofrece Internet, que son el protocolo telnet y el protocolo rlogin.

El protocolo telnet es un Terminal virtual, un dispositivo imaginario para

el que se definen unas funciones de control canónicas, de manera que se puede establecer una correspondencia entre ellas y las de cada tipo de Terminal real.

Antes era muy utilizado en los famosos teletipos, que era un Terminal

generalmente unido a una impresora o, más directamente, una impresora con teclado.

El protocolo telnet se basa en el protocolo de transporte TCP, y se sigue normalmente el modelo cliente/servidor, así el usuario establece una conexión con

el sistema proveedor, que está esperando peticiones de conexión en un puerto

determinado (aunque puede ser cualquier puerto, si la sesión de trabajo va a ser interactiva, se utiliza el 23). En las sesiones interactivas, además se usa el concepto

de Terminal virtual de red (NVT) con una funcionalidad muy básica pero soportada por todos los ordenadores. Normalmente una vez iniciada la sesión básica, se ve

seguida por un proceso de negociación para soportar funcionalidades más

avanzadas (esto es lo habitual) y consiste en intercambiar códigos que indican las opciones del protocolo que cada parte desea o está dispuesta a utilizar. Cuando se

llega a un acuerdo, en ocasiones se necesita todavía una subnegociación para determinar valores de parámetros.

El protocolo Telnet se utiliza en UNIX a través del comando telnet. El protocolo rlogin se utiliza cuando se desea establecer una sesión de

trabajo interactiva desde un sistema UNIX con otro sistema UNIX. En este tipo de

protocolo cada Terminal conoce y soporta perfectamente al otro con lo que no hay procesos de negociación y también se informan mutuamente de sus respectivas

identidades con lo que se automatiza el proceso de autenticación. EN UNIX se utiliza con el comando rlogin.

Existen otros servicios denominados triviales como echo, discard, chargen, daytime y time, pero que no interesa tampoco conocerlos en profundidad.

Page 251: sistemas operativos, redes y bases de datos

22 · Redes

4. TRANSFERENCIA DE FICHEROS

Una de las primeras aplicaciones desarrolladas entre ordenadores conectados fue el FTP o File transfer protocol, es

decir, el protocolo de transferencia de ficheros, que se basa en el modelo cliente/servidor y permite la transferencia de ficheros

entre el cliente y el servidor de forma bidireccional y entre dos

servidores por mediación del cliente. El protocolo habitual de funcionamiento podemos observarlo en la imagen lateral; además

como hemos dicho antes existe una variación del modelo general para el caso de que el cliente controle una transferencia entre dos

servidores sin que los archivos deban copiarse primariamente al

cliente, sino que pasan del servidor activo, al pasivo directamente.

El FTP está basado en conexiones TCP, y el puerto oficial asignado para su funcionamiento es el 21. Los comandos

FTP constituyen los mensajes que envía el cliente al servidor, que responde con otros comandos. Las respuestas se generan en

orden cronológico estricto, pues en general el servidor

efectúa sus operaciones de forma secuencial, es decir, no empieza una nueva operación hasta que no ha terminado

la anterior. Comandos FTP encontramos muchos: nombre de usuario (USER), directorio actual (PWD), puerto

(PORT), listar (LIST), etc, no pueden tener más de 4

caracteres, y las respuestas FTP son una numeración de 3 dígitos, seguidos de un texto descriptivo a ese error o

respuesta enviados.

Habitualmente cuando se inicia la conexión, lo primero que hace el cliente FTP es enviar el nombre de

usuario (USR), el FTP servidor pide entonces la contraseña

(PASS) a veces se pide un nombre de cuenta, y a continuación se establecen verificaciones de la estructura

de fichero y del modo de transmisión. En la actualidad existen muchísimas

implementaciones de FTP, incluso a través de www; sin

embargo durante mucho tiempo el más utilizado fue la utilidad ftp del sistema operativo UNIX.

El TFTP (Trivial File Transfer Protocol) es una

variación del FTP, mucho más sencilla de utilizar, que

admite muy pocos comandos (solamente leer y escribir ficheros) y que se suele utilizar sobre todo para transferir

ficheros a un ordenador por ejemplo para cargar un sistema operativo a través de red. Esta operación sencilla

no se podría llevar a cabo con el FTP habitual pues requiere la carga del sistema UDP y una serie de

protocolos que requieren la existencia de sistema

operativo. Este sistema funciona enviando un datagrama por parte del cliente, al que responde el servidor, y así

alternativamente el datagrama siguiente responde al anterior y se sabe que la comunicación se va realizando

correctamente.

En Unix este sistema TFTP está implementado a través de la utilidad tftpd, y como no existe ningún tipo de

identificación de usuario, en principio los clientes pueden acceder a cualquier fichero con permiso de acceso público;

por ello se suele restringir el acceso a un directorio (tftpboot) o directamente se inhabilita el servicio.

Modelo funcional del protocolo FTP

Ejemplo de comunicación FTP

STATUS:> Getting listing "public_html"...

STATUS:> Resolving host name ftp.sinpuntocom.com... STATUS:> Host name ftp.sinpuntocom.com resolved: ip =

66.194.152.210. STATUS:> Connecting to ftp server

ftp.sinpuntocom.com:21 (ip = 66.194.152.210)... STATUS:> Socket connected. Waiting for welcome message...

220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------

220-You are user number 1 of 50 allowed. 220-Local time is now 15:34. Server port: 21. 220 You will be disconnected after 5 minutes of

inactivity. STATUS:> Connected. Authenticating...

COMMAND:> USER sinpunto 331 User sinpunto OK. Password required COMMAND:> PASS *****

230-User sinpunto has group access to: sinpunto

230 OK. Current restricted directory is / STATUS:> Login successful.

COMMAND:> PWD 257 "/" is your current location STATUS:> Home directory: /

COMMAND:> FEAT 211-Extensions supported:

EPRT IDLE MDTM

SIZE REST STREAM

MLST type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*; MLSD

ESTP PASV

EPSV SPSV ESTA

PROT 211 End.

STATUS:> This site supports features. STATUS:> This site supports SIZE.

STATUS:> This site can resume broken downloads. COMMAND:> REST 0 350 Restarting at 0

COMMAND:> CWD /public_html 250 OK. Current directory is /public_html

STATUS:> PWD skipped. Current dir: "/public_html". COMMAND:> PASV 227 Entering Passive Mode

(66,194,152,210,195,139) COMMAND:> LIST

STATUS:> Connecting ftp data socket 66.194.152.210:50059...

Page 252: sistemas operativos, redes y bases de datos

Redes · 23

TEMA

5. CORREO ELECTRÓNICO INTERNET

El correo electrónico es la operación distribuida que permite enviar mensajes electrónicos por medio de sistemas informáticos. Para llevar a cabo esta

funcionalidad se definieron 3 protocolos que pasamos a estudiar: el SMTP, el POP3 y el IMAP, aunque antes debemos ver el formato de los mensajes de correo.

Formato de los mensajes de correo Un correo electrónico tiene dos grandes campos: la cabecera y el cuerpo del

mensaje. Éste último no reviste gran interés puesto que contiene el mensaje en sí. La cabecera, a su vez cuenta con varios campos:

Originador: La identidad y la dirección del buzón del remitente.

Destinatario.

Destinatario de copia (CC).

Destinatario de copia oculta (BCC).

Destinatario de respuesta: especialmente útil si se necesita recibir la respuesta

al mensaje en un correo diferente al de origen. Asunto (Subject).

Data: Hora y fecha, que lo genera automáticamente el primer sistema de

correo que recibe el mensaje.

Sistema remitente

Camino de retorno hacia el originador

Información de sistemas intermedios: Información de cada uno de los sistemas

informáticos por los que pasa un mensaje. Hay que saber que un mensaje de

correo electrónico no parte de un ordenador, va a una “oficina postal” y de ahí lo recoge el destinatario. En absoluto: un mensaje viaja por muchas oficinas

postales, si cuando llega a una oficina, ésta no tiene en su lista de usuarios el destinatario, lo envía a otra más cercana, y así hasta que llega a la oficina del

destinatario donde será recogido por éste. Funciona igual que el correo postal y

aunque es un funcionamiento sencillo, asegura que aunque se caigan las líneas no se pierda el correo, puesto que en cada momento alguna oficina es

responsable de ese mensaje. Palabras clave

Comentarios

Identificación del mecanismo de cifrado.

El SMTP O Simple Mail Transfer Protocol, proporciona la funcionalidad necesaria

para conseguir la transferencia fiable y eficiente de mensajes de correo entre

ordenadores que actúan como una oficina de correos. El modelo SMTP (que utiliza el puerto 25) funciona como se observa en la figura inferior. Hay que aclarar que

los sistemas que actúan como oficina, deben tener un receptor SMTP para recibir correos y un emisor para “desprenderse” de los que no son suyos.

Las direcciones de correo utilizan como

“apellido” el nombre de dominio, por ejemplo

uoc, y previo el nombre de usuario seguido de

arroba.

EL POP3

O Post Office Protocol version 3, es una funcionalidad añadida al SMTP. En sistemas

pequeños no es práctico soportar el SMTP, porque ello implicaría tener el sistema constantemente conectado y dispuesto a recibir mensajes en cualquier momento.

Lo que se hace es que las anteriores “oficinas de correo”, almacenan los mensajes de los buzones de usuario y con un servidor POP3 los facilitan al usuario cuando

Modelo SMTP

Page 253: sistemas operativos, redes y bases de datos

24 · Redes

éstos se conectan para conocer los

mensajes nuevos que le han llegado a su buzón. Como vemos,

seguimos manteniendo el modelo cliente/servidor, y la imagen de la

página anterior para SMTP, ahora

la vemos completada con el servidor y el cliente POP3 (éste

último es el usuario) en su acceso al correo. El POP3 utiliza el puerto

110 del ordenador. La utilización del POP3 se inicia con

la identificación del usuario, el

envío de la contraseña y después se puede optar por ver la lista de

mensajes (solo el encabezado), bajarlos todos, bajar los seleccionados, borrar, etc. Una vez que, por ejemplo y es

lo que usualmente suelen hacer los gestores de correo, hemos bajado todo el

correo, automáticamente pasamos al estado de actualización, donde se borran todos los mensajes marcados (aquellos que nos hemos bajado a nuestro ordenador

correctamente) y después se liberan todos los recursos y se cierra la conexión TCP.

El IMAP O Internet Messages Access Protocol permite al cliente acceder a los

mensajes de correo electrónico de un servidor y manipularlos. Como mejora

respecto al POP3 proporciona una estructura jerárquica del buzón en forma de carpetas, así como facilidades de suscripción, lo que da lugar a nuevos comandos

que permiten gestionar todos estos elementos. Por ejemplo, cuando con Outlook nos “bajamos los mensajes”, esto se hace de forma automática: identificación,

contraseña, bajada de mensajes, y liberación de recursos; no podemos pararnos en

cualquiera de esas partes, ni estudiar los buzones de correo. En cambio con IMAP una vez que se ha establecido la conexión somos nosotros los que llevamos la voz

cantante y decidimos qué hacer con nuestros mensajes y cuando hacerlo.

Formato MIME de los mensajes de correo El modelo de mensaje de correo que estudiábamos en la página anterior es

insuficiente para las capacidades de comunicación y multimedia que están

surgiendo hoy día. Por tanto de la norma RFC822 se pasó al formato MIME (Multipurpose Internet Mail Extensions), que recoge, como su nombre indica,

extensiones de multipropósito. Se crearon nuevos campos de cabecera sobre todo para información de texto adjunta, imágenes, audio, vídeo y aplicaciones.

6. SERVICIO DE NOTICIAS: NNTP

El servicio de noticias permite el envío de mensajes, como el servicio de correo, pero sin un destinatario o destinatarios específicos, sino que cualquier

usuario que pueda acceder al servicio puede leerlos; viene a ser como un tablón de

anuncios. En principio este servicio se conocía como Usenet por el nombre de la red que lo originó.

El servicio de noticias es completamente descentralizado. Los artículos no están en un único servidor sino que se alojan en uno o más servidores, los cuales

se encargarán de reenviarlo a los más próximos, que a su vez lo reenviarán al

resto. No se puede asegurar que un determinado artículo llegue a todos los servidores e incluso a uno específico, pero este modelo funciona mucho mejor que

el modelo con un único servidor centralizado. Los artículos así publicados tienen un encabezado como el de correo con un

remitente, fecha y hora, subjetc, mensaje y como destinatario el grupo o grupo de noticias donde se publicará.

Modelo POP3

Page 254: sistemas operativos, redes y bases de datos

Redes · 25

TEMA

7. SERVICIO HIPERMEDIA: WWW

El http es la base del servicio www; sus orígenes fueron los trabajos de un grupo de investigadores del Centro Europeo de Investigación Nuclear, que lo

utilizaban para acceder de manera sencilla y cómoda a la información distribuida en diferentes sedes del centro; cuando el conjunto de sistemas se extendió a otras

organizaciones y países de todo el mundo nacío la World Wide web.

El http sigue el método general de peticiones y respuestas entre un cliente y un servidor. En la versión 1.0 el cliente establece una conexión con el servidor, le

envía un mensaje http con la petición ya continuación el servidor envía la respuesta y cierra la conexión. En la versión 1.1 cambia a conexión persistente con diferentes

peticiones y respuestas en una misma conexión.

Para optimizar el tráfico de la red es habitual que los clientes http guarden una copia de las respuestas que reciben en los servidores, este almacén se conoce

como memoria caché y su dimensión máxima y su política de almacenamiento es controlada por el usuario. También es habitual que un cliente no se conecte

directamente a un servidor, sino a un Proxy, el cual establece la conexión con el servidor o, incluso, con otro proxie. Estos proxies guardan también en caché las

respuestas recibidas a las peticiones para poder dar un servicio más rápido a otros

usuarios. Es decir si una petición de un cliente ya está en la caché de un proxie, no la pedirá de nuevo al servidor de origen. El problema estriba en la actualización de

estas memorias caché, pues la informació que puede recibir el cliente puede ser obsoleta o desfasada. El uso del proxie además sirve como un cortafuegos que aísla

una red local del resto de las redes y como memoria caché compartida en esta red

local.

8. ACCESO AL SERVICIO DE DIRECTORIO

El servicio de directorio X.500 permite el almacenamiento de todo tipo de

información de manera distribuida. El X.500 define la estructura de la información, así como los protocolos necesarios para acceder a la misma.

El servicio de directorios no está ideado como una base de datos de propósito general, sino como un mecanismo de almacenamiento de información

distribuida y se basa en que las peticiones de información son más frecuentes que las actualizaciones y que para acceder a la información se utilizan nombres con

estructura jerárquica y no la dirección en que se encuentra la información. Así un

objeto tiene dos nombres, el nombre relativo de directorio (diferencia un objeto de sus hermanos dentro del directorio, se forma a partir de los atributos de una

entrada que tiene valores distintivos, así que éstos deben ser persistentes y tener pocas probabilidades de quedar obsoletos), y el nombre de directorio (permite

diferenciar un objeto del resto de objetos del directorio). Así exponemos un

ejemplo de ambos casos: Nombre relativo: {CN=Ramón Martí}

Nombre relativo: {O=UOC, L=Barcelona}

Nombre de directorio: {C=ES; O=IRIS; OU=UOC; L=Barcelona; CN=Ramón Martí}

9. PROTOCOLOS INTERNET EN TIEMPO REAL

Hay una serie de aplicaciones como la transmisión de audio y vídeo en

tiempo real en la que es preciso que los datos se vayan presentando al destinatario a medida que van llegando. En este sentido se encuentran varios protocolos

implementados:

RTP: Es un estándar que proporciona servicios de entrega punto a punto para

datos con características de tiempo real como audio y vídeo. Se hacen

necesarios dos puertos entre el cliente y el servidor: uno para el RTP y otro para el RTCP. El RTP es el protocolo de transporte en tiempo real y es capaz de

Page 255: sistemas operativos, redes y bases de datos

26 · Redes

hacer reconstrucciones temporales, detectar pérdidas e identificar el contenido

y la seguridad. El RTCP, por su parte, proporciona soporta para conferencias en tiempo real de grupos de cualquier tamaño.

RSTP: EL protocolo de flujo de tiempo real proporciona el control del flujo de

datos multimedia. Se considera más un entorno de trabajo que un protocolo. Con este protocolo los datos se fragmentan en múltiples paquetes del tamaño

apropiado al ancho de banda disponible entre cliente y servidor. Cuando el cliente ha recibido suficientes paquetes, es capaz de reproducir el primero,

mientras descomprime el segundo y recibe un tercero; así el usuario cliente

puede empezar a reproducir los datos casi inmediatamente, sin necesidad de esperar a recibirlos todos.

RSVP: El protocolo de reserva de recursos está orientado a la calidad del

servicio (retraso, jitter, ancho de banda y pérdida de datos).

10. SEGURIDAD EN LAS COMUNICACIONES

Las principales amenazas que podemos tener en nuestras comunicaciones

informáticas pueden ser por acciones hostiles: Interrupción de mensajes por terceros, intercepción de los mismos, modificación o impostura (hacerse pasar por

otro usuario) o por acciones que no incluyan otro usuario como son el repudio (un

usuario niega haber mandado un mensaje a otro) o la negación de recepción (en este caso el que recibe el mensaje niega haberlo hecho).

Los servicios de seguridad por tanto, intentarán proteger a los usuarios de

las siguientes amenazas, implementando:

Confidencialidad

Integridad

Autenticación

No rechazo.

Las técnicas criptográficas son los sistemas que sirven para codificar y

decodificar mensajes que pueden ayudarnos en aumentar la seguridad del sistema. Hay dos técnicas principales de criptografía: la simétrica y la asimétrica.

La criptografía simétrica consiste en que se utiliza la misma clave para cifrar

y descifrar un mensaje. Es fácil y rápido, pero los dos usuarios A y B deben ponerse

previamente de acuerdo en las claves a usar, dado que no las pueden enviar por el mismo canal de comunicación.

En cambio, la criptografía asimétrica se basa en dos claves, pública y

privada. Dada una de estas claves (la privada) es sencillo obtener la otra (la

pública) pero a la inversa es imposible. Esto nos da dos modalidades de uso de la criptografía asimétrica:

Si se cifra el mensaje con la clave pública y se utiliza la privada para descifrarlo,

el remitente del mensaje puede estar seguro que solo el destinatario con la

clave privada adecuada podrá leerlo. Si se utiliza la clave privada para cifrar el mensaje y la pública para descifrarlo,

prácticamente cualquiera podrá leer el mensaje, pero se tendrá la certeza de

quien ha sido el remitente, esto es la base de la firma digital.

Texto elaborado a partir de:

Redes Jordi Íñigo Griera, Enric Peig Olivé, José M. Barceló Ordinas,

Xavier Perramon Tornil, Ramon Martí Escalé Junio 2004

Page 256: sistemas operativos, redes y bases de datos

Administración de redes y sistemas operativos

TEMA 1 INTRODUCCIÓN A LA ADMINISTRACIÓN DE SISTEMAS

1. EL SISTEMA INFORMÁTICO Y LA ORGANIZACIÓN

La informática dentro de una organización puede estudiarse desde puntos de

vista muy diferentes. Desde el punto de vista de la organización, desde el punto de

vista de los informáticos, de los usuarios, de la dirección, etc, pero en cualquier caso el sistema informático debe ser eficaz (conseguir lo que pretende) y eficiente

(hacerlo con un consumo de tiempo y recursos aceptable). Destaca la figura del jefe de departamento de informática o jefe de las

tecnologías de información cuyos objetivos son la planificación y gestión del

departamento y ofrecer un buen servicio a los usuarios.

2. COMPONENTEL DEL SISTEMA INFORMÁTICO

Destacan dentro del sistema informático las siguientes partes:

Servidores: Es normal contar con diferentes servidores que se especializan en

funciones distintas, lo que aumenta el control por parte de los administradores

de sistemas y disminuye el riesgo de fallos. Terminales de trabajo: Se está llegando a alcanzar un Terminal de trabajo

por cada trabajador de la empresa.

Red: Es el cableado físico que conecta los terminales de trabajo y la electrónica

de control de la red (hubs, routers, switches…). Software: Podemos encontrar como mínimo dos sistemas operativos: el de los

servidores y el de los terminales, lo que complica la administración de los sistemas.

3. PERSONAL RESPONSABLE DEL SISTEMA INFORMÁTICO

Existen diversas funciones que pueden ser cubiertas cada una de ellas por una

persona o un grupo de ellas encabezadas por un jefe; o una persona puede llevar a

cabo más de una función a la vez, todo ello estará en consonancia con la política y tradición de la empresa y también con la envergadura de la organización. Las

distintas funciones y/o departamentos que podemos encontrar son:

Administración de servidores: Se encarga de instalar

y mantener dando servicio a la organización en todo lo referente a los servidores, también se encarga de

recuperarlos en caso de fallo. Administración de usuarios: Necesidades y atención

a los usuarios y al mantenimiento de sus equipos de

sobremesa, ya sean PCs o terminales. Administración de la red: Se debe asegurar que

funcione correctamente la red y también controlar que

se encuentre en buen estado, así como mejorarla y

extenderla haciéndola llegar a todos los rincones de la organización.

Administración de los datos: Esta función se ocupa de mantener la

integridad de la información de la organización, tanto si se encuentra en un lugar físico como dispersa por los servidores (lo más habitual es una

combinación de ambas).

Tema 1 Introducción a la administración

de sistemas

1. El sistema informático y la organización

2. Componentes del sistema

informático 3. Personal responsable del

sistema informático

Sistema informático

Funciones

Page 257: sistemas operativos, redes y bases de datos

2 · Administración de Redes y Sistemas Operativos

Administración de la web: Mantenimiento del servidor web y actualización

del contenido de las páginas.

Administración de la seguridad: Es compleja esta función pues incluye

desde la seguridad de la información existente hasta la protección física de los equipos contra robos, prevención contra ataques por virus, etc.

Desarrollo: Si se requiere nuevo software para cubrir necesidades que van

apareciendo, el departamento de desarrollo es el encargado de llevarlo a cabo. Jefe de informática: Esta función junto con la de administración de

servidores y de usuarios son las más importantes. El jefe de informática es el

enlace entre las necesidades de la empresa y el trabajo que se realiza en el departamento. Qué software comprar o desarrollar, qué servidores son

necesarios, que red instalar, etc, son decisiones a las que el jefe de informática

debe enfrentarse

El solapamiento de funciones puede llegar a darse con mucha facilidad, es decir, si debemos dar de alta un usuario en un servidor, ¿Quién lo hace? El

administrador de usuarios o el de servidores… este solapamiento de funciones se

debe a que cada departamento tiene unas tareas muy definidas pero en absoluto independientes de otros departamentos.

De hecho, una misma persona puede asumir los tres cargos más importantes

dentro del departamento informático, es decir: jefe de informática, administrador

de usuarios y administrador de servidores, siempre y cuando la envergadura de la organización lo permita.

Page 258: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 3

TEMA

TEMA 2 ADMINISTRACIÓN DE SERVIDORES

1. EL SERVIDOR Y SUS FUNCIONES

Un servidor es una máquina que funciona las 24 horas los 7 días de la

semana, lo que implica tener un hardware preparada para no detenerse nunca y soportar reparaciones y ampliaciones en caliente. Cuenta con sistemas para que los

usuarios puedan acceder a la información de una manera selectiva, gestionan colas de impresión, muestran páginas web, registran la actividad de cuanto se realiza,

tramitan el correo de la organización y ya no ocupan, como antaño, habitaciones

enteras.

Las funciones de los servidores son varias: Servidores de ficheros

Servidores de impresión

Servidores de páginas web

Servidores de Noticias

Servidores de Correo

Servidores de FTP…

Hemos de distinguir el servidor físico (o corporativo que es la cantidad de ordenadores que están instalados) de los servidores funcionales (que realizan una

función de servidor al ofrecer información a otro ordenador cliente). El número y la

función o funciones de cada servidor estará en función, como siempre, de la envergadura de la organización.

2. TIPOS DE SERVIDORES EXISTENTES

Existen dos grandes tipos de arquitecturas con sus diferencias:

Arquitecturas UNIX: El ordenador suele ser el propietario del sistema

operativo que se instala: Hewlett-Packard, SUN, Silicon Graphics, IBM, Dec

Alpha…

Arquitecturas PC: El hardware corresponde al de un PC, pero con

componentes de elevadas prestaciones y con sistema operativo Linux, Unix, Microsoft para redes…

Como actualmente la tendencia es la informática distribuida, es decir,

servidores con funciones específicas con un coste variable a las funciones que debe realizar, pero comunicados entre ellos para intercambiar información, contamos así

con servidores heterogéneos: Las organizaciones suelen poseer más de un

servidor físico que se conecta con otro servidor físico que probablemente tenga un sistema operativo diferente y un sistema de ficheros también distinto. Para

solventar el problema de comunicación entre ambos primero debemos contar con una conexión física de cable entre ellos, y después o esperamos contar con una

fórmula común para intercambiar información (TCP/IP para los servidores

modernos) o con algún software de terceros que nos solucione la papeleta. En cualquiera de los dos casos debemos tener cuidado de no ralentizar en exceso la

red global o empeorar el rendimiento del sistema al realizar un uso intensivo de este intercambio de información.

Tema 2

Administración de servidores

1. El servidor y sus funciones 2. Tipos de servidores existentes

3. Requerimientos de los sistemas operativos de red

4. Requerimientos de un servidor

5. Discos duros 6. Dispositivos de copia de

seguridad 7. Copias de seguridad

8. Impresoras

9. La corriente eléctrica 10. Seguridad de los servidores

11. Ejemplo: sistemas operativos actuales

12. Aspectos legales y

Tareas/Responsabilidades

Page 259: sistemas operativos, redes y bases de datos

4 · Administración de Redes y Sistemas Operativos

3. REQUERIMIENTOS DE LOS SISTEMAS OPERATIVOS DE RED

Las funciones que debe proporcionas el sistema operativo de red son:

Servidor de ficheros: definir grupos de usuarios, compartir ficheros entre todos

los usuarios, compartir ficheros entre grupos de usuarios y asignar un espacio personal para cada usuario.

Servidor de aplicaciones: Compartir programas entre usuarios y grupos de

usuarios.

Servidor de impresión: Compartir impresoras.

Servidor de correo: Enviar y recibir mensajes.

Todo esto por supuesto, con las restricciones de seguridad y permisos

correspondientes.

4. REQUERIMIENTOS DE UN SERVIDOR

Un servidor es un ordenador con una configuración de hardware y software

ajustada a la función que debe llevar a cabo. Las características más o menos especiales con que debe contar este ordenador especial son:

RAM: Es fundamental una gran cantidad de RAM ya que se realizan multitud

de peticiones de diferentes usuarios simultáneamente y si se trata del servidor de base de datos, la cuestión es entonces mucho más crítica.

CPU: En contra de lo que pudiera parecer no se requiere una CPU especial, ni

siquiera una CPU multiprocesador. Caja con fuente de alimentación: Es recomendable una caja grande, bien

aireada con una fuente de alimentación si es posible sobredimensionada, para

que o bien el exceso de temperatura no disminuya la frecuencia de trabajo en los servidores que lo soporten o, lo que es peor, no se quemen en los

servidores que no soporten dicha disminución.

Placa base: Debe ser de buena calidad para no disminuir el rendimiento

general del servidor. Placa de comunicaciones: Determina la capacidad de transmitir información

a la red del servidor, por lo cual es fundamental una placa 10/100 de par

trenzado unida a un concentrador o conmutador de 100 Mb y si se cuenta con tecnología superior como la fibra óptica, mejor.

Discos: Pueden ser IDE o SCSI como en los ordenadores de sobremesa. Los

IDE presentan el inconveniente que solo se suelen soportar 4 discos (2 por cada bus IDE) y son muy lentos, como mucho 66 Mb/s. En cambio aunque los

discos SCSI son más caros, se controlan hasta 8 discos por controladora, y su

velocidad es de 320 Mb/s.

5. DISCOS DUROS

Es fundamental realizar una buena gestión de particiones en los discos

duros. Debemos particionar porque esto hace que un mismo disco físico tenga x particiones lógicas que son independientes y aunque una partición falle, el resto

sigue siendo completamente accesible. Las particiones habituales son:

Sistema: Es necesaria para poner en marcha al servidor y cuenta con el

sistema operativo.

Usuarios: Carpetas de usuarios y carpetas de grupos de usuarios.

Datos: Hay directorios con datos de programas que deben ser instalados

localmente en los terminales de trabajo. Aplicaciones básicas: Que todos suelen utilizar, el software base de los

usuarios.

Page 260: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 5

TEMA

Aplicaciones: No son las básicas es decir, no todos los usuarios las utilizan y

por ello determinados usuarios tienen acceso a ellas y, probablemente, no a

todas. Gestión Informática: Aquí se suelen instalar los programas y archivos de

instalación al que solo tienen acceso los informáticos para instalar programas

en cualquier Terminal sin tener que cargar siquiera con un disquete.

Las extensiones de los discos en el servidor se llevan a cabo para mejorar su capacidad y rendimiento:

Multivolumen: Podemos unir dos discos de inferior capacidad para crear

lógicamente un único disco con la suma de las dos capacidades, la principal ventaja es obtener una partición de la medida que se desee a partir de discos

de menor capacidad, pero por desgracia, si un disco físico falla, no se puede acceder a ninguna de las particiones físicas que conforman un mismo volumen.

Debido al actual precio de los discos duros (muy baratos) no se suele utilizar

este sistema. Espejo: Si la información es primordial se coloca un disco extra por cada disco

duro del servidor, de manera que cualquier cosa que se escriba en el disco 1,

se escribe y actualiza también en el disco 2. Tenemos dos discos “fotocopiados”, de forma que si uno falla, el otro sigue dando servicio hasta

que en caliente, cambiamos el estropeado. El espejo puede ser mediante

software (más lento) o hardware. RAID: El espejo es una opción costosa que solo se puede aplicar a un disco, si

necesitamos un espejo para cada disco, el coste se dispara, la técnica RAID

distribuye la información entre distintas unidades y ofrece un sistema de redundancia para aumentar la seguridad. Así podemos disponer de 5 discos

funcionando y solo uno de ellos ofrecer la redundancia para poder recuperar datos. Hay varios niveles de RAID:

o RAID 0: La información se distribuye entre distintos discos pero no

hay redundancia, así que si algo falla no podemos recuperar la información.

o RAID 1: Cada unidad está duplicada con otra de soporte, es similar al espejo pero la información se distribuye entre los discos.

o RAID 2: No se emplea.

o RAID 3: Datos distribuidos con relación al bit en todas las unidades menos en una que ofrece la paridad.

o RAID 4: Igual que RAID 3 pero a nivel de sector, lo que mejora los tiempos de acceso.

o RAID 5: Se escribe en todos los sectores de cada unidad y se añaden códigos correctores en cada sector, con tiempos de acceso

en la lectura muy buenos.

El sistema de ficheros es otro aspecto muy importante a tener en

cuenta. Hay varios sistemas, que de más antiguos a más modernos son:

FAT: Es muy antiguo y solo soporta medidas de 2 GB. sin ofrecer además

ninguna seguridad.

FAT32: Igual al anterior pero soportando mayores dimensiones aunque

también sin ofrecer ninguna medida de seguridad. NTFS: Introducido por Windows NT ofrece un tamaño del sector y clústeres

muy pequeños por lo que se aprovecha mejor el disco, cuenta con seguridad

para el sistema de ficheros. UFS y EXT2: Se utilizan en Unix y Linux con mucha seguridad.

HSFS: High Sierra File SYstem utilizado en el formato de los CD-Rom y

comúnmente aceptado.

Page 261: sistemas operativos, redes y bases de datos

6 · Administración de Redes y Sistemas Operativos

6. DISPOSITIVOS DE COPIA DE SEGURIDAD Cintas: Hay varios tipos: las cintas DAT suelen ser dispositivos SCSI con

capacidades de 20 Gb, por cinta; las cintas DLT suelen llegar hasta 100 Gb. y

las AIT también. Otro tipo son las LTO. Librerías de copia: Con estos tamaños por cinta, en una gran organización

con 20 Gb. de copia de seguridad no hacemos nada. Para evitar este problema

existen “robots” motorizados y controlados por software que pueden controlar

entre 20 y 2000 de estas cintas, con lo que tenemos asegurada una buena cantidad de información, unos 400 Terabytes.

Grabadoras Cd-Rom y DVD: Los Cd con capacidades de hasta 700 Mb,

grabables y/o regrabables al igual que los DVD con capacidades de hasta 8,5 Gb. son adecuados para copias de seguridad de poca cantidad, dado que el

precio tanto del dispositivo como de los fungibles, es mínimo. Unidades ZIP/Jazz: Actualmente en desuso, son unidades de “disquete” con

un tamaño igual a éstos pero con capacidades de hasta 250 Mb. que lo hacen

insuficiente para una mínima copia de seguridad.

Disco duro: Dado el precio actual de estos dispositivos no es descartable

hacer una copia de seguridad sobre ellos mismos, dado que además necesitan muy poco tiempo para efectuarla y así no colapsan el sistema.

7. COPIAS DE SEGURIDAD

Las copias de seguridad son imprescindibles para proteger la información de los usuarios frente a ellos mismos (borrados accidentales), frente a desastres

naturales, frente a ataques de terceros, frente al propio sistema que puede dejar en un momento dado por malfuncionamiento la información inconsistente y además

porque posibilita el traspaso de información cuando se actualiza o reinstala el

sistema.

Tipos de copia de seguridad

La copia de seguridad completa es aquella en la que se hace una

imagen del disco duro completo o una copia completa del sistema de ficheros. En el primer tipo de copia al restaurar ésta no puede ser selectiva, restaura toda la

imagen del disco duro, en el segundo tipo sí podemos seleccionar los archivos y directorios a restaurar.

La copia de seguridad incremental guarda sólo los ficheros que se han

modificado desde la última actualización. Esto hace que el copiado sea mucho más

rápido, consuma menos recursos y tiempos del sistema.

La copia de seguridad selectiva solo copia ficheros y/o directorios determinados, generalmente los de más uso y cuya información cambia con más

frecuencia.

Políticas de copia de seguridad

Es necesario analizar el tipo y cantidad de información y la organización en que nos movemos para llevar a cabo una adecuada política de copias de seguridad.

Si optamos por un tipo de copia de seguridad completa diariamente nos

aseguraremos que tenemos siempre toda la información disponible. Cada día en discos distintos se efectúa dicha copia de seguridad y guardamos la última copia

del mes, el resto de cintas volvemos a utilizarlas en el mes siguiente; pero es un gran gasto en recursos y tiempo del sistema.

Si hacemos una copia de seguridad completa los Lunes y de Martes a

Jueves una incremental consumimos menos recursos y es más rápido pero con la

Librerías de Copia

Page 262: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 7

TEMA

desventaja de que si una copia de un día no funciona (por ejemplo la del

Miércoles), el resto de cintas hasta la siguiente copia completa queda inservible aunque funciona correctamente (por ejemplo las del Jueves y Viernes).

Otro problema importante es saber dónde guardar las copias de seguridad, en muchas ocasiones se almacenan cerca del servidor o en la misma

habitación; esto tiene su lógica dado que así se puede restaurar o solventar un

problema con rapidez, pero si existe un desastre natural o un incendio perderemos toda la información. Tampoco el hecho de que estén bajo llave o en una caja fuerte

nos solventa el problema, en un incendio las altas temperaturas destruyen los datos aunque estén en una caja fuerte; y el pensar que como todos los datos están en

papel se pueden volver a introducir es un error, dado que actualmente muchos formularios y datos no se pasan a papel.

Por tanto hay que guardar una copia de seguridad alejada del servidor y

actualizada frecuentemente para evitar males mayores, incluso se dice que debe estar a varios cientos de kilómetros (en otra placa tectónica diferente) para evitar el

riesgo de destrucción por terremotos.

8. IMPRESORAS

Existen dos tipos de impresoras habitualmente: las impresoras láser que

son caras, con una alta duración del cartucho, rápidas y versátiles; y las impresoras de chorro de tinta habitualmente de uso personal por ser de coste

bajo, con baja duración de los cartuchos, en color habitualmente y de muy baja

velocidad. Aunque informáticamente lo que más nos interesa es la posibilidad de

compartir impresora. En algunos casos las impresoras se comparten mediante una cola de impresión por software y un dispositivo que la conecta a la red de la

empresa; en otros casos, la impresora ya tiene un puerto de red, que le asigna una IP dentro de la red interna de la empresa y hace que se comparta con total

facilidad y transparencia.

9. LA CORRIENTE ELÉCTRICA Si todos nuestros equipos dependen de la corriente eléctrica para

funcionar, ¿porqué le damos tan poca importancia?, es decir, una vez que hemos

conectado un aparato a la red eléctrica, ya pensamos que va a recibir corriente de manera constante, normalizada y fluida durante toda su vida útil, y esto no es

cierto, ya que pueden haber picos de tensión (ruidos) e incluso cortes del fluido eléctrico. Las consecuencias de esto pueden ser pérdida o corrupción de los datos,

daños directos en el equipo o un acortamiento de la vida útil de los mismos.

Sería conveniente tener en cuenta dos aspectos: la toma de tierra y los SAI. La toma de tierra debe realizarse con un supresor de picos situado justo

antes del panel eléctrico de la oficina y unos estabilizadores situados justo antes de la conexión a la red de los servidores y/o los terminales individuales. Por otro lado,

contar con SAI (Sistema de Alimentación Ininterrumpida) también nos protege

frente a cortes de corriente y problemas con la tensión, permitiendo que los equipos se apaguen correctamente cuando hay un corte de fluido. Actualmente

estos SAIs disponen de un puerto USB que informan al equipo del tiempo que les queda con la batería una vez que se ha ido la corriente eléctrica.

10. SEGURIDAD DE LOS SERVIDORES

La seguridad hay que contemplarla a dos niveles: seguridad física y seguridad de software. La seguridad física requiere de algunas precauciones:

Cerrar el recinto donde está el servidor y no trabaja nadie, y bloquear el

sistema mediante salvapantallas con contraseña.

Page 263: sistemas operativos, redes y bases de datos

8 · Administración de Redes y Sistemas Operativos

Fijar físicamente el equipo con cadenas para evitar robos.

Evitar que el ordenador arranque desde disquete o, incluso, retirar este

dispositivo si realmente no lo usamos.

Colocar contraseñas de encendido en la BIOS del sistema.

En la seguridad por software:

Contar con una buena política de cambio periódico de contraseñas,

especialmente en aquellos usuarios que tengan privilegios especiales.

Asimismo, estas cuentas especiales no deben tener nombres esperados, como

administrador o admin. No instalar ni ejecutar software en el servidor por el peligro de virus que

entraña.

Contar con una buena política de usuarios y grupos con privilegios bien

definidos.

11. EJEMPLO: SISTEMAS OPERATIVOS ACTUALES

Dos son los principales sistemas operativos que se utilizan: Windows y

Unis/Linux. Ambos pueden realizar las mismas funciones, como veremos a

continuación, a partir de sí mismos o de software de terceros:

Ficheros: Ambos sistemas sirven ficheros sin ninguna dificultad, y además

comparten recursos también sin problemas Web: Windows tiene el IIS (Internet Information Server) que es un servicio que

se puede arrancar o no, mientras U/L necesita instalar un software como

Apache, que es potente y gratuito.

FTP y Correo: El FTP en un servicio en Windows que debe ser arrancado y

configurado, y en el correo requiere el Microsoft Exchange Server; en U/L en cambio ya está preparado para trabajar.

Ofimática: Windows parece más universal con su paquete Office; U/L cuenta

con OpenOffice que es muy compatible. Seguridad: No hay acuerdo sobre qué sistema operativo es más seguro.

Conexión entre ordenadores: generalmente para aprovechar CPU, Windows no

puede, U/L es intrínseco al sistema operativo por lo que puede.

Entornos gráficos: Windows cuenta con uno, U/L con cientos.

12. ASPECTOS LEGALES y TAREAS/RESPONSABILIDADES

El administrador de sistema operativo y redes puede llegar a hacer cosas, sin saber, que están fuera de la legalidad, como abrir simplemente un archivo o

directorio de la carpeta personal de un trabajador. Actualmente existen colegios profesionales para dar apoyo legal e información a los informáticos en estos

aspectos.

Son tareas del administrador:

Velar por el buen funcionamiento de los servidores: es decir cuidar la

protección física de los mismos, velar por unos tiempos de respuesta y recursos correctos, mantener el sistema operativo actualizado así como el software que

le es asignado.

Garantizar la información que contienen los servidores: hacer copias de

seguridad siguiendo la política que se haya adoptado. Configurar adecuadamente todo el hardware del sistema.

Page 264: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 9

TEMA

TEMA 3 ADMINISTRACIÓN DE USUARIOS

1. DISEÑO DEL ENTORNO DE USUARIOS

Diseñar el entorno de los usuarios significa preparar todo aquello con lo que se

encontrará el usuario cuando utilice el sistema informático de la organización. La idea es que debe resultar fácil e intuitivo para el usuario, proporcionar un entorno

homogéneo (si el usuario cambiar de Terminal, no le debe resultar extraño), el sistema debe ser rápido de respuesta de los servidores y en la red, debe aportar un

buen nivel de seguridad y además debe ser fácil de administrar (fácil de actualizar,

de reinstalar, de reconfigurar, fácil en las copias de seguridad…). Todo esto supone una contradicción informática, dado que la seguridad acostumbra a estar reñida

con la comodidad y la velocidad.

Las necesidades de los usuarios generalmente son:

Un Terminal de trabajo.

Un lugar donde se pueda imprimir.

Espacio para guardar la información.

Software para trabajar: que dividiremos en Software de base (sistema

operativo y aplicaciones básicas de comunicaciones en los servidores), software

de ofimática, software de comunicaciones y aplicaciones específicas como control de producción, nóminas, etc.

A partir de todas estas necesidades, podemos elaborar tres diseños

informáticos distintos, con sus pros y sus contras:

Primer diseño: Todos los usuarios ven todos los programas y todas las

aplicaciones, con permisos de lectura y ejecución para todo. Las aplicaciones

específicas que ya contaban con permisos de acceso propios, quedan controladas por las propias aplicaciones, y en las carpetas de usuario solo

puede entrar el propio usuario. Las ventajas de este sistema es que es muy fácil de administrar, es fácil preparar un Terminal modelo, una vez clonado un

equipo casi no existe ajuste final, el cambio de puesto de trabajo de un usuario

no implica modificar en nada su perfil. Lo negativo, en cambio, es que la idea de grupo de trabajo no existe, por lo que compartir información con un grupo

de personas no es posible; de hecho si un usuario quiere compartir la información de su carpeta personal, estará disponible para toda la organización.

Además el usuario puede perderse ante tanto software disponible no sabiendo

el que tiene que utilizar para trabajar y el que no.

Segundo diseño: Los usuario se agrupan de manera natural en grupos de

trabajo, de manera que un usuario pertenece a un grupo y sólo a uno; una aplicación o programa puede funcionar para todo el mundo o sólo para un

grupo; al igual que antes las aplicaciones específicas siguen controlando sus permisos de acceso; a las carpetas de usuario sólo puede entrar el usuario con

permisos de lectura, escritura y ejecución. Las ventajas de este diseño es que

crear un usuario implica tener en cuenta a qué grupo deberá pertenecer. El usuario puede acceder a la información personal y a la del grupo por lo que la

protección de la información está más asegurada; no se pueden producir manipulaciones incorrectas del software (ni se lía el propio usuario) ya que solo

aparece el software que se debe utilizar por cada grupo. Se puede compartir

información con el grupo de trabajo no siendo accesible para el resto de usuarios. Lo malo de este diseño es que modificar el esquema de trabajo puede

llevar a una reorganización completa de permisos de grupos; el cambio de puesto de una persona implica modificar el perfil (en caso de que cambie de

grupo); compartir información entre grupos sigue siendo complejo.

Tema 3

Administración de Usuarios

1. Diseño del entorno de usuarios 2. Diseño en los servidores

3. Configuración de terminales de trabajo

4. Mantenimiento de los

terminales de trabajo 5. Formación del usuario

6. Centro de atención al usuario 7. Responsabilidades del

administrador de usuarios y

aspectos legales

Page 265: sistemas operativos, redes y bases de datos

10 · Administración de Redes y Sistemas Operativos

Tercer diseño: Los usuarios, como antes, se agrupan pero un usuario puede

pertenecer a un grupo o a más; una aplicación puede funcionar para todos los

usuarios, o para uno o más grupos; las aplicaciones específicas, como siempre, siguen controlando el acceso propio. Las ventajas de poder pertenecer a más

de un grupo son varias: Ahora sí que existe una verdadera idea de grupo de trabajo, se simplifica la administración, se puede compartir información sensible

entre grupos de trabajo distintos, etc. Lo negativo, como en el segundo diseño, al crear un usuario debemos saber a qué grupo o grupos pertenece; el cambio

en el puesto de trabajo de un usuario implica modificar el perfil…

Para poder decidirse por cualquiera de estos diseños

hay que elaborar la tabla de aplicaciones. Es una tabla donde en la primera columna aparecen las aplicaciones

existentes, en segundo lugar si se ejecutan en local (el

propio Terminal) o en remoto (el servidor, lo cual aumenta la carga de trabajo para éste y el flujo de la

red), si la información se almacena en local o en el servidor y los permisos que se les da a los distintos

grupos de trabajo.

En la figura lateral podemos observar esta

primera tabla. La tabla inferior muestra los mismos datos, pero aplicándolos no ya a un Terminal, sino al

servidor; lógicamente el diseño de los terminales va indisolublemente unido al diseño del servidor.

Por último, es fundamental el sistema operativo del Terminal de trabajo, el cual en los últimos tiempos es un sistema operativo de red con interfaz

gráfica que facilite el uso del mismo. Su sencillez y flexibilidad de uso hace que sea inversamente fácil de administrar, es decir es difícil de instalar, configurar, y muy

fácil de desconfigurar por manos inexpertas.

2. DISEÑO EN LOS SERVIDORES

Como indicábamos anteriormente, el diseño de los terminales de trabajo

lleva emparejado el diseño del servidor o servidores. Para hacerlo adecuadamente y

que no tengamos que llevar a cabo cambios de última hora que afecten tanto a los servidores como a todos y cada uno de los terminales, debemos elaborar

escrupulosamente la tabla del servidor, para conocer qué aplicaciones se instalarán en él, saber donde se ubicará la información de los distintos programas y con todo

ello prever las necesidades de disco y las particiones que debemos realizar.

Respecto a las particiones sabemos que son 4: de sistema, de usuarios,

de aplicaciones y de datos; aunque también hay que decir que a poco que la organización sea medianamente grande, en lugar de particiones deberemos hablar

de discos duros para cada una de estas 4 actividades

La saturación de la red es otro aspecto importante a tener en cuenta. Si

las peticiones de los usuarios son tantas que el sistema se vuelve lento e inestable, habrá que repartir la carga de trabajo mediante diversos sistemas: usar tecnología

SCSI (la más rápida), implementar servidores redundantes o servidores RAID, etc.

3. CONFIGURACIÓN DE TERMINALES DE TRABAJO

Finalmente configuramos los terminales de trabajo. Por una lado podemos

decir que cuanto menos software se encuentre en el disco del usuario, menos peligro existe de pérdida de información y de tiempo para recuperar el equipo; pero

claro, si todo se encuentra en el servidor, probablemente lo colapsaremos, también

Tabla del Terminal Tabla del Servidor

Page 266: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 11

TEMA

colapsaremos la red, el sistema funcionará muy lentamente y tendremos muchas

quejas de los usuarios acerca del rendimiento general del sistema. Obviamente, los inconvenientes superan a las ventajas, por lo que colocaremos todo el software de

base, los paquetes de ofimática y el software que utiliza toda la organización en cada uno de los terminales de trabajo.

Bueno, esto tampoco es realmente así, crearemos lo que se llama un Terminal modelo con todo el software y la configuración que debe tener, es

decir, instalamos el sistema operativo, las aplicaciones, los clientes de las aplicaciones remotas, configuramos todas las opciones del sistema operativo para

ajustarlo a las necesidades de la organización y lo probamos durante algún tiempo. Cuando estamos seguros que todo funciona a la perfección y que no debemos

aplicar ningún cambio más, creamos una imagen de disco de este Terminal modelo,

lo situamos en la partición de administración en el disco duro del servidor, y lo utilizamos para clonarlo tantas veces como terminales debamos configurar.

4. MANTENIMIENTO DE LOS TERMINALES DE TRABAJO

Por mantenimiento de los terminales de trabajo entendemos todas las acciones necesarias para que el equipamiento esté en óptimas condiciones de

funcionamiento para el usuario final y distinguimos dos partes: el mantenimiento del equipamiento y las tareas periódicas de mantenimiento.

El mantenimiento del equipamiento puede abarcar la sustitución y/o actualización del hardware o software del Terminal de trabajo por varias causas:

avería grave de hardware a sustituir, añadir un nuevo elemento de hardware por política de empresa, sustitución completa de un ordenador, reinstalación de

software de un equipo por cambio de ubicación y/o funciones del usuario, etc. También puede acontecer la desconfiguración completa del equipo debido a un

virus, al propio usuario o a fallos de corriente eléctrica.

Para proceder correctamente con este mantenimiento, es fundamental tener bien preparado y configurado un Terminal modelo y además tener piezas de

hardware (sobre todo las más comunes) para reparar sencillas averías. Cuando se hace necesario extraer datos de un equipo, aunque siempre

intentamos que los datos sensibles se encuentren en el servidor, muchas veces hay

que recuperar también datos en terminales de trabajo dañados, tenemos dos opciones:

Mover el disco duro e instalándolo como disco secundario en otro ordenador, y

tras extraer los datos, y con el CD de clonación, recuperarlo a su estado habitual, copiando de nuevo los datos en él.

Utilizar unidades Zip/Jazz para este proceso.

Las tareas periódicas de mantenimiento son la segunda parte del

mantenimiento de los terminales de trabajo. Son tareas que se deben realizar

forzosamente cada cierto tiempo y que son transparentes para el usuario final. Estar tareas pueden ser, entre otras:

Control para que no se llenen los buzones de correo de los usuarios, esto se

hace en el servidor.

Control para que no se llenen los directorios de los usuarios en el disco

compartido, también se hace en el servidor.

Actualizar el fichero de firmas del software antivirus, para que se actualicen así

todos los terminales de trabajo y mantener este problema a raya. Si un usuario cree, a pesar de todo, tener o haber tenido un virus, debe contactar con el

administrador de usuarios para explicarle el problema y evitar así una propagación o, lo que es peor, que pueda salir al exterior.

Control remoto: Es un software que permite desde una estación de trabajo,

controlar otra tal como si se encontrase delante de ella y así poder diagnosticar

y tratar los posibles problemas del Terminal.

Page 267: sistemas operativos, redes y bases de datos

12 · Administración de Redes y Sistemas Operativos

Documentación y procedimientos: Un procedimiento es una descripción del

conjunto de acciones necesarias para realizar una tarea determinada; todos

estos procedimientos deben encontrarse documentados en un manual, dado que a menudo intervienen distintos administradores y es conveniente saber qué

procesos cambian según qué software en momentos determinados.

5. FORMACIÓN DEL USUARIO

Un aspecto a menudo olvidado por las grandes organizaciones es la formación

de los usuarios. Las ventajas son muchas: Mejora del uso del software

Mejora en la eficiencia y satisfacción del personal

Disminución de incidencias en el dpto. de informática y, por lo tanto, de los

costes derivados de ellos.

Además, las desventajas de no llevar a cabo un plan de formación, también son

muchas:

Pérdida de tiempo de los usuarios y errores frecuentes

Probabilidad de que estos errores provoquen mal funcionamiento del sistema

Gran parte del volumen de trabajo del dpto. de informática se deberá, sin

duda, a consultas de los usuarios que se podrían haber evitado con un buen plan inicial.

Desconcierto, quejas, sensación de mala instalación o software incorrecto en el

usuario.

Generalmente la formación del usuario tendrá 3 planes de formación distintos:

Planes de actualización: Cuando se actualiza software se puede informar en

una charla, seminario o cursillo del porqué, como y qué ventajas aportarán

estos cambios. Implantación de software nuevo: Es mucho más compleja que la anterior

pues debemos incluir a los usuarios en esta nueva implantación,

preguntándoles sus dudas, cómo creen que debe funcionar el programa, pidiendo opiniones, propuestas o quejas. Bien es cierto que daremos una

imagen de interés por el usuario pero también es importante hacerles ver que

no siempre es posible hacer todo lo que se pide y, por tanto, no se podrán satisfacer todas las peticiones.

Usuarios nuevos: Cursillo con un fuerte componente estándar y una parte

más pequeña dedicada a su específico puesto de trabajo.

6. CENTRO DE ATENCIÓN AL USUARIO

Para el usuario el ordenador debe ser una herramienta para aumentar su

grado de organización y/o eficiencia y, por ello, no deben conocer necesariamente todos los detalles técnicos del equipamiento que utiliza. Cuando un usuario tiene un

problema informático, debe dirigirse a un único lugar para resolverlo, que es el

centro de atención al usuario (CAU); este CAU es una sección del departamento de informática que se dedica a gestionar las incidencias de los usuarios, resolverlas y

documentarlas para que las soluciones puedan servir para el mismo o parecidos problemas futuros de otros usuarios.

Cuando el usuario contacto con el CAU lo hará con el personal de

atención (Primer nivel) que no tiene que ser necesariamente un técnico; éste buscará en la base de datos el diagnóstico de los síntomas que el usuario refiera; si

lo encuentra y le da la solución, perfecto; en otro caso abrirá una incidencia con toda la información que se encauzará a un técnico (segundo nivel) y éste

solucionará el problema, documentándolo en la base de datos de primer nivel para futuras consultas.

Page 268: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 13

TEMA

Además de esto, alguien debe encargarse del control de incidencias

pendientes, y realizar un seguimiento en los casos de mayor duración, avisando al usuario de los cambios que se van generando para que comprenda que el

departamento de informática se preocupa de su problema También el CAU ejerce de filtro de peticiones, pues en algunos casos el

usuario exige procedimientos que no se pueden realizar, como puede ser por

ejemplo la instalación de un software que se encuentra fuera de la organización.

7. RESPONSABILIDADES DEL ADMINISTRADOR DE USUARIOS

Configurar los equipos terminales de trabajo.

Abrir cuentas de usuario, espacio privado y cuentas de correo y mantenerlas

para todos los usuarios.

Facilitar mediante nombre de usuario y contraseña el acceso a aplicaciones corporativas o espacios de trabajo en grupo.

Realizar copias de seguridad de los datos de los usuarios.

Mantener y gestionar el hardware de los terminales de trabajo.,

Gestionar y actualizar el CAU.

8. ASPECTOS LEGALES

Existe actualmente un vacío legal sobre el tratamiento y gestión de la información personal del usuario en los sistemas informáticos. Debemos ser

conscientes del momento en que pueda surgir un problema y es entonces cuando

necesitaremos un adecuado asesoramiento legal para resolverlo.

Page 269: sistemas operativos, redes y bases de datos

14 · Administración de Redes y Sistemas Operativos

TEMA 4 ADMINISTRACIÓN DE LA RED

1. ELEMENTOS Y DISEÑO FÍSICO DE UNA RED

Las redes, por su dispersión se pueden clasificar en:

LAN: Local area network o redes de área local, de 10 metros a 1 km.

MAN: Metropolitan area network o redes de area metropolitana: de 1 a 10 kms.

WAN: Wide are network, más de 10 kms.

Los elementos que encontramos en una red son varios, por un lado tenemos el cableado del que existen varios tipos:

Par trenzado: Son diferentes hilos conductores que pueden alcanzar los 100

metros de distancia sin experimentar amortiguamientos de la señal y una

velocidad entre 10 y 100 Mbps. A su vez encontramos varios tipos: el STP

(shielded twisted pair) son dos pares de hilos conductores recubiertos por una malla. El UTP (unshielded twisted pair) son cables sin apantallas formado por

cuatro pares de hilos, que pueden ser de categoría 3 (velocidades de hasta 30 Mbps) o de categoría 5 (hasta 100 Mbps). Éste último es el típico cable que

conecta el MODEM o router ADSL con el ordenador.

Cable coaxial: Es un único conductor interno con varias capas de protección,

permite velocidades de hasta 20 Mbps en distancias de hasta 2 kms, mientras que en distancia de hasta 100 metros llega los 100 Mpbs. Se reducen con este

cable los problemas de amortiguamiento en distancias cortas, pero es muy sensible al ruido producido por aparatos eléctricos. Para conectar diferentes

ordenadores a un mismo cable coaxial se utilizan los conectores en T.

Fibra óptica: Permite una gran anchura de banda y puede conseguir

velocidades del orden de centenares de Mbps e incluso Gbps. Experimenta una reducción mínima de la señal, es inmune a las interferencias electromagnéticas

y resulta difícil de interceptar y espiar.

Los elementos de interconexión de redes son: Repetidores: Son dispositivos no inteligentes que amplifican la señal y evitan

los problemas de amortiguamiento.

Puente: llamado bridge, conecta entre sí dos segmentos de red.

Router: Gestiona el tráfico de paquetes que proviene del exterior de la red y

se dirige al interior, o al revés. Ofrecen servicios de encaminamiento de los

datos que se transmiten. Pasarela: Actúa en los niveles superiores de la jerarquía de protocolos y

permiten la interconexión de redes que utilizan protocolos incompatibles.

Las tipologías más habituales en el diseño de redes son:

Topología de bus: En una red en bus todos los nodos se conectan a un cable

común, de forma que todos los mensajes llegan a todos los nodos, no hay que encaminar la información, la fiabilidad de la comunicación solo depende del bus

(esto es un punto crítico), la configuración es muy flexible y modular siendo de bajo coste (por lo que todavía se utiliza bastante).

Topología en anillo: El cable va de Terminal en Terminal si ningún punto

final. Cada nodo amplifica y repite la información que recibe, no es necesario dirigir el encaminamiento de la información y la fiabilidad del anillo depende de

cada uno de los nodos, de forma que si un solo Terminal cae, la red entera

puede dejar de funcionar. Topología en estrella: Todos los terminales de trabajo y el servidor se

conectan a un único concentrador o conmutador, lo cual se convierte en un

punto crítico.

Tema 4

Administración de la red

1. Elementos y diseño físico de una red

2. Protocolos de comunicación 3. Configuración de la red en los ordenadores (cliente/servidor)

4. Seguridad de la red 5. Responsabilidades del

administrador

Topologías

Bus En Estrella En Anillo

Page 270: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 15

TEMA

En los últimos años están proliferando las redes sin cable WLAN (Gíreles local

area network) que solventa varios problemas como la dificultad de cablear en determinados lugares y facilita el crecimiento posterior de la red. Por el contrario la

seguridad es su talón de Aquiles, dado que es muy fácil pasar a la red al no existir cortafuegos y el hardware actual no es demasiado seguro.

2. PROTOCOLOS DE COMUNICACIÓN

NetBIOS/NetBEUI: Fue desarrollado por IBM y lo utilizan Windows 98 y NT.

IPX/SPX: Desarrollado por Novell y utilizado por el sistema operativo de red

NetWare. TCP/IP: Son un conjunto de protocolos que permiten compartir recursos de

ordenadores de una red, desarrollado en 1972 por el departamento de defensa

de los Estados Unidos, se caracteriza por enviar datagramas segmentados que son recibidos, recuperados y reorganizados (dado que no se tienen que recibir

en orden cronológico) en el ordenador de destino. Existen interesantes

comandos del protocolo TCP/IP que nos interesa conocer: o ARP: Addres resolution protocol, muestra las tablas de mapeo de

las direcciones IP. o IPCONFIG: Configuración IP.

o NETSTAT: Estadísticas de protocolo y conexiones actuales.

o PING: Envía datagramas a una máquina de destino y mide el tiempo de respuesta, de este modo podemos saber si la máquina

destino funciona o no. o TRACERT: Muestra el camino que conduce a un destino

determinado.

3. CONFIGURACIÓN DE LA RED EN LOS ORDENADORES CLIENTE/SERVIDOR

Para configurar los terminales de trabajo en la red, los pasos que

debemos seguir son los siguientes:

Instalación y configuración de los controladores de la tarjeta de red, es decir,

instalar los drivers de las tarjetas Ethernet.

Selección y configuración del protocolo de comunicación: puede ser Novell,

Apple talk o, lo más frecuente TCP/IP. En este último caso debemos configurar por este orden:

o Dirección IP y máscara de subred: Reconoce la máquina de entre todas las que se hallan conectadas a la misma red. Suele tener las

3 primeras cifras iguales y la última permite tener hasta 254 direcciones o máquinas en la subred.

o Configuración DNS: Permite que la traducción de nombres de

direcciones IP (por ejemplo www.uoc.edu) sea traducida a su dirección real.

o Puerta de enlace: Se introduce la dirección IP de los routers que permiten la salida al exterior, para poder tener Internet por

ejemplo.

Instalación y configuración de los clientes, para establecer un dominio de

trabajo.

Otros aspectos configurables: control de accesos, compartición de ficheros,

carpetas e impresoras.

Page 271: sistemas operativos, redes y bases de datos

16 · Administración de Redes y Sistemas Operativos

4. SEGURIDAD DE LA RED

Una red es un conglomerado de muchos elementos heterogéneos, y debemos cuidar especialmente los siguientes aspectos:

Sistema de ficheros: Sólo deben acceder los usuarios autorizados.

Código malicioso: Vigilar que especialmente virus y troyanos no infecten

programas “autorizados”.

Autenticación de usuarios: Proceso de verificación de la identidad de una

persona en el momento de acceder a un recurso.

Criptografía: Permite la confidencialidad de la información que viaja por la

red. Herramientas de seguridad: Existen herramientas para comprobar distintos

aspectos de la red, y deben ser utilizadas.

Monitorización del sistema: Una vez montada la red hay que vigilar que se

mantienenlos parámetros de velocidad, comodidad y seguridad adecuados.

5. RESPONSABILIDADES DEL ADMINISTRADOR

Es evidente que las responsabilidades del administrador de la red son varias: velar por el funcionamiento correcto, garantizar un tiempo de respuesta que

se encuentre entre los márgenes establecidos, controlar la seguridad, actualizar el sistema operativo de los servidores, gestionar y controlar las impresoras de la red y

los servicios propios de la misma.

También es importante la adquisición de licencias para software de red,

pues el uso de licencias monousuarios en red pueden conllevar sanciones posteriores.

Page 272: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 17

TEMA

TEMA 5 ADMINISTRACIÓN DE LOS DATOS

1. LOS DATOS Y LA ORGANIZACIÓN

La organización crea datos constantemente, pero un “gran depósito” de datos

en bruto no es útil, porque si no existe coherencia no tiene ningún tipo de sentido. Los datos son los registros de los sucesos y lo que realmente nos interesa es la

información: el procesamiento de estos datos para que tengan sentido; aunque en nuestra vida diaria usamos los dos conceptos como si fueran el mismo.

Generalmente, se guardan datos y se presenta al usuario información, es decir, el procesamiento de estos datos para que tenga sentido, en el dispositivo de salida.

El gran problema es que el software puede guardar los datos en formatos diferentes, en sitios distintos y además siendo incompatible con otros programas.

El sistema informático pretende guardar la información de la organización

para que sea fácil recuperarla posteriormente, manipularla y presentarla al usuario.

2. DÓNDE ESTÁ LA INFORMACIÓN

Ya apuntábamos anteriormente los principales problemas con los datos:

están guardados en ficheros, con formatos determinados, no siempre en el sitio

donde se necesitan y probablemente incompatibles entre sí.

Así, en la estructura de la red pueden existir datos dispersos en diferentes particiones y carpetas del servidor y de cualquiera de los terminales de trabajo, por

no comentar los portátiles, que deben aparecer como dispositivos dentro y fuera de

la organización, sacando datos al exterior y a veces conectándose y sincronizando los datos generados.

Varias soluciones podemos poner en marcha para intentar paliar todos

estos problemas:

A partir de la tabla de aplicaciones y del diseño de los usuarios podemos saber

dónde se guarda la información.

A partir de la misma tabla sabemos qué software genera información local que

debe ser guardada en las copias de seguridad diarias. La información no controlable generada con software comercial debe guardarse

por defecto en la unidad de red privada y no en el disco duro del Terminal

individual.

3. LA CONSULTA DE LA INFORMACIÓN

Igual que los usuarios generan datos constantemente, también necesitan

poder consultarlos (para, a su vez, generar más datos).

Ya que la seguridad de toda la información de la organización es

responsabilidad del administrador, éste debe conocer la localización de los datos, disponer de un método de restauración en caso de problemas y tener una idea

general del contenido.

Cuando conseguimos que todos los datos estén en los servidores podemos

hacer que diferentes grupos/usuarios accedan a los mismos modificándolos o actualizándolos, de forma que no se dupliquen los mismos; además, sin duda

alguna la seguridad es mucho más alta.

Tema 5

Administración de los datos

1. Los datos y la organización 2. Dónde está la información

3. La consulta de la información 4. Protección de la información

5. Responsabilidades del

administrador

Page 273: sistemas operativos, redes y bases de datos

18 · Administración de Redes y Sistemas Operativos

Ahora bien, para manipular toda esa información que se encuentra en los

servidores, se “inventaron” los servidores de bases de datos, que intentan integrar en un único punto toda la información, así es más rápido, seguro, fácil de

usar, sencillo de ampliar, accesible para copias de seguridad, toda la información aunque pueda entrar en formatos heterogéneos se encuentra en un formato

homogéneo, facilita las consultas de la dirección, etc. Entre estos sistemas

comerciales encontramos Microsoft Access que se usa solo en sobremesa, SQL Server es su hermano mayor que acepta mayor cantidad de datos y consultas,

Informix y Oracle que también son realmente potentes.

Actualmente todavía se ha llevado mucho más allá la idea de los servidores de bases de datos, mediante los ERP. Un ERP es un conjunto de módulos o

paquetes perfectamente integrados que circulan sobre un servidor de bases de

datos, de manera que todas las aplicaciones que el usuario requiera ya se encuentren instaladas y homogeneizadas. Un ejemplo de ello es SAP/R3, donde

los sistemas de nóminas, facturas, ventas, etc, se encuentran en una plataforma homogénea; en un sistema además que intenta adaptarse a las características de la

empresa, pero que claro, también hace que los usuarios tengan que amoldarse al

nuevo sistema. Además adquirir un SAP implica adquirir un servicio, de manera que cambios de moneda, cambios en el IRPF, etc, se mantiene constantemente

actualizado.

4. PROTECCIÓN DE LA INFORMACIÓN

La información es uno de los bienes más valiosos de la organización. Se

debe invertir una parte importante de los esfuerzos en salvaguardarla. La seguridad ya la hemos tratado en el apartado anterior, pero por otro lado, las copias de

seguridad se realizarán de forma más segura y completa si las aplicaciones guardan la información por defecto en los espacios personales de red o en el servidor, no en

el Terminal de cada usuario; y se le explica a los usuarios el uso que deben hacer

de su espacio personal de red para salvaguardar su información. En cuanto a las copias de seguridad estudiaremos brevemente las que se

pueden realizar con el backup recovery de Oracle. Pueden ser copias lógicas o físicas. Las copias lógicas son breves en el tiempo pero su restauración puede ser

muy laboriosa, incluso de días. Este sistema funciona bien como complemento al

sistema de copias físico, por si se estropea alguna tabla, ya que se puede importar ésta únicamente sin importar el resto. Por otro lado las copias físicas son el sistema

por excelencia en oracle, dado que con un archiveLog activado se puede recuperar el sistema hasta un segundo antes de la caída, eso sí siempre que el log esté

activado.

5. RESPONSABILIDADES DEL ADMINISTRADOR Velar para que los datos se almacenen en los servidores

Mantener en buen funcionamiento las bases de datos

Diseñar y llevar a cabo una adecuada política de copias de seguridad.

Evitar en lo posible la duplicación de información.

Saber donde se encuentran todos los datos sensibles de la organización.

Page 274: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 19

TEMA

TEMA 6 ADMINISTRACIÓN DE LA WEB

1. LOS SERVIDORES WEB Y LA ORGANIZACIÓN

Normalmente, cuando el servidor web se utiliza como parte de una aplicación,

solamente ejerce de interfaz para la aplicación, de forma que es un elemento más. Es un medio, eso sí muy flexible, para hacer funcionar la aplicación.

El servidor web también puede funcionar como servidor de páginas, tanto para la intranet como para Internet; en este último caso hay que ser muy cuidadoso con

los datos y la estética común pues muestra la imagen corporativa de la

organización a la comunidad Internet, es decir, a todo el mundo.

2. EL ADMINISTRADOR Y EL SERVIDOR

El binomio administrador-servidor debe coordinarse perfectamente para

obtener el mejor rendimiento posible. Un servidor web se compone de un núcleo que es el centro del servidor web y de módulos que aumentan la funcionalidad del

mismo. Instalar un servidor web no plantea muchos problemas dado que es un proceso bastante automatizado y que proporciona herramientas de control que nos

pueden servir para monitorizar y analizar el rendimiento. Hay que ser muy estricto en la organización y estructura de directorios y páginas para saber en todo

momento donde se encuentran o pueden encontrar determinadas páginas y así

poder obrar en consecuencia al realizar la copia de seguridad; pero eso sí, el administrador instala y cuida la web, pero no el contenido.

Para el administrador web existen dos tipos de usuarios: el consumidor del material de la web, y el creador el mismo; el administrador debe promover la

utilización de los recursos de la web entre los creadores de páginas, les debe

proporcionar los recursos y conocimientos necesarios para que puedan crear páginas web y colgarlas en el servidor.

3. RECURSOS PARA CREAR PÁGINAS WEB

HTML: Es el lenguaje por excelencia y que interpretan todos los navegadores,

basado en marcas actualmente está algo anticuado por la imposibilidad de

construir páginas dinámicas, pero aun así es fundamental conocerlo para cualquier administrador web.

XML: Intentado poseer un lenguaje de marcas único, es un estándar ajustado

a las necesidades de Internet. Al ser incompatible con el HTML, se creó otro lenguaje intermedio y compatible el XHTML.

CSS: Para que todas las páginas tuvieran un mismo estilo e imagen

corporativa: color de texto, fuentes, etc. se crearon las Cascade Style Sheet u

hojas de estilo en cascada; de esta forma se definen todos estos parámetros de estilo en un único punto y automáticamente se aplican a todas las páginas de

un sitio web, sin necesidad de ir cambiando estos parámetros en todas ellas. JavaScript: Es un código de ejecución insertado dentro de la página HTML

que se ejecuta en el cliente y que dota de cierto dinamismo la página web.

CGI: Common Gateway Interface fue el primer intento de acceder a bases de

datos a través de páginas web, el problema es que consume demasiados

recursos en el servidor. Perl: Practical Extraction and Report Language, permite así mismo ejecutar

código en el servidor.

Java: Son programas que se copian del servidor al cliente y es en éste último

donde se ejecutan con fuertes restricciones de seguridad. La independencia de plataforma y de sistema operativo es uno de los puntos clave de su éxito.

Tema 6

Administración de la web

1. Los servidores web y la organización

2. El administrador y el servidor 3. Recursos para crear páginas

4. Ejemplos de servidores

5. Seguridad 6. Aspectos legales

7. Responsabilidades del administrador

Page 275: sistemas operativos, redes y bases de datos

20 · Administración de Redes y Sistemas Operativos

Servlets (JDBC): Son programas que se ejecutan en un servidor web y

construyen una página web, con la ventaja sobre el CGI de que consumen

menos recursos pues se ejecutan como hilos de ejecución y no como procesos. ESL: Embedded Scripting Language, es una programación como JavaScript

pero se trata de un elenguaje completo que se ejecuta en el servidor.

PHP: Hypertext preporcessor, el servidor interpreta las páginas PHP y las

convierte en HTML antes de enviárselas al cliente. Es el lenguaje por excelencia de las páginas dinámicas.

ASP: Active Server Page, Servidor de páginas activo, es una DLL de Microsoft

que debe correr en servidor Windows y proporciona prácticamente, los mismos elementos que PHP pero con el inconveniente que no es código libre, sino

propiedad de Microsoft.

JSP: Servidor de páginas Java, nos permite mezclar HTML estático con

dinámico.

4. EJEMPLOS DE SERVIDORES

Apache Server: Es gratuito en la página www.apache.org. Corre sobre

plataforma Linux aunque hay versiones Windows, es código libre y es un

servidor francamente potente. Internet Information Server (IIS): Es el servidor web de Microsoft.

Netscape SuiteSpot: Fue gratuito hasta determinada versión.

En general todos estos servidores son sencillos de instalar y llevan herramientas para monitorizar y controlar la seguridad, además de soportar sin

problemas un número elevado de accesos concurrentes.

5. SEGURIDAD

Hay que vigilar distintos aspectos:

Seguridad de publicación: para evitar que se puedan publicar por error, datos

internos de la organización. Seguridad del software: la cantidad de información a la que pueden acceder los

servidores les hace especialmente interesantes para ser atacados.

Protocolos de comunicación cifrados: Los famosos HTTPS son los protocolos

más extendidos para comunicación cifrada por Internet, se basan en el estándar SSL y la escucha se realizar por el puerto 443 y no por el habitual 80.

Registro de las conexiones: Con poco trabajo añadido los servidores web

pueden registrar las direcciones DNS, fecha y hora, páginas y tiempo de conexión que ha tenido un determinado usuario.

Copias de seguridad: El servidor web tiene pocos ficheros de configuración,

pero por su importancia y la imagen que puede dar dentro y fuera de la

organización es indispensable volver a restaurarlo rápidamente en caso de fallo. Virus: Dado que un servidor web está constantemente distribuyendo

documentos a clientes y proporcionando ficheros puede ser una fuente

importante de infección dentro y fuera de la organización. Bases de datos: para acceder a bases de datos, lo usual es situar un

cortafuegos entre la web y el servidor de aplicaciones, además se sitúan en

máquinas separadas para que si se cuelga el servidor de aplicaciones no afecte

al servidor web.

6. ASPECTOS LEGALES

Aunque el administrador web no se encargue de los contenidos, sí debe

vigilarlos, dado que la aparición de imágenes, música, etc que han podido subir los

Page 276: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 21

TEMA

administradores de contenidos pueden tener derechos de copyright. Cualquier

creación o producto de la creatividad humana se intenta proteger mediante la propiedad intelectual, y el caso del ciberespacio no es ninguna excepción.

7. RESPONSABILIDADES DEL ADMINISTRADOR

Hacer que la web se mantenga siempre activa, con un tiempo de respuesta

dentro de los márgenes aceptados, controlando su seguridad y las estadísticas

que genera. Hacer que la web resulte homogénea y prepara la formación de las personas

que deben mantener los contenidos, aunque nos debemos responsabilizar sólo

parcialmente de los mismos.

Page 277: sistemas operativos, redes y bases de datos

22 · Administración de Redes y Sistemas Operativos

TEMA 7 ADMINISTRACIÓN DE LA SEGURIDAD

1. SEGURIDAD INFORMÁTICA

Dado que es completamente imposible garantizar la seguridad e

inviolabilidad absoluta de un sistema informático, en lugar del inalcanzable concepto de seguridad, será preferible utilizar el término fiabilidad. Diremos que un

sistema informático es fiable cuando cumpla las tres propiedades siguientes:

Confidencialidad: Sólo pueden acceder a los recursos los elementos

autorizados a hacerlo.

Integridad: Los recursos del sistema sólo pueden ser modificados o alterados

por los elementos autorizados a hacerlo. Disponibilidad: Los recursos del sistema permanecen accesibles a los

elementos autorizados.

Los tipos de ataque que puede sufrir el hardware y el software pueden ser:

Interrupción: Es un ataque contra la disponibilidad, de forma que se destruye

o queda no disponible un recurso del sistema.

Intercepción: Es un ataque contra la confidencialidad, donde un elemento no

autorizado consigue el acceso a un recurso, como puede ser interceptar un

correo electrónico dirigido a otra persona. Modificación: Es un ataque contra la integridad, pues además de conseguir el

acceso no autorizado al recurso, se modifica, borra o altera de cualquier forma.

Fabricación: Es un ataque contra la integridad, pues se inserta o crea un

objeto falsificado en el sistema, por ejemplo un usuario nuevo con su contraseña de acceso.

La mayor parte de los ataques provienen de personas y pueden ser pasivos o activos. Los ataques pasivos son aquellos en los que el atacante no modifica ni

destruye ningún recurso informático, simplemente lo observa. Los ataques activos pueden ser varios: suplantación de identidad, reactuación (por ejemplo intentar

repetir varias veces un ingreso en una cuenta bancaria), degradación fraudulenta del servicio (por ejemplo interceptar y eliminar todos los mensajes de correo de un

dominio o hacia una cuenta determinada) y modificación de mensajes (se

intercepta y se reenvía modificado el mensaje).

Las personas que pueden provocar estos ataques pueden ser el mismo usuario (por descuido o ignorancia el propio trabajador puede provocar grandes males en el

sistema de una empresa), antiguos trabajadores (por lo que hay que anular todos

los privilegios de los trabajadores en cuanto abandonan la empresa), intrusos informáticos que pueden ser por hobbie, pueden ser remunerados por empresas

contrarias o incluso por la propia empresa para tratar de descubrir sus puntos débiles.

2. SEGURIDAD DEL ENTORNO

Analizamos ahora las medidas de protección física que se pueden utilizar para evitar los accesos no autorizados a los sistemas informáticos. Como medidas

de prevención podemos aplicar las siguientes:

Mantener todos los servidores en una zona de acceso físico restringido y ubicar

los dispositivos de almacenamiento en un lugar diferente del resto del

hardware. Llevar a cabo inventarios o registros de todos los elementos del sistema

informático.

Tema 7

Administración de la seguridad

1. Seguridad informática 2. Seguridad del entorno

3. Seguridad del sistema 4. El delito informático

Page 278: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 23

TEMA

Utilizar cámaras de vigilancia y escoger una topología de red adecuada a

nuestra organización.

Utilizar contraseñas de entrada en la BIOS, en el sistema operativo, en los

ahorros de pantalla, etc.

Y un apartado fundamental son establecer mecanismos de autenticación, denominamos autenticación al proceso de verificación de la identidad de una

persona o de un proceso que quiere acceder a los recursos de un sistema informático. Dividiremos estos mecanismos de autenticación en dos tipos, de

usuarios y de datos.

Los mecanismos de autenticación de usuarios pueden estar basados en

elementos conocidos por el usuario, en elementos que posee el usuario o biométricos.

Como elementos conocidos por el usuario es el conocido sistema de nombre de

usuario y contraseña; es un método muy extendido por la facilidad de uso y lo barato de su aplicación pero en absoluto es seguro, especialmente porque

tendemos a poner contraseñas conocidas (teléfono, DNI), a usar las mismas contraseñas en varios procesos y a no cambiarlas nunca.

Como elementos que posee el usuario destacan las tarjetas inteligentes, que

pueden funcionar por contacto o por proximidad. Por último los sistemas biométricos son los más seguros y también los más

caros; basados en la voz, escritura, huellas dactilares, patrones de retina o geometría de la mano, están basados en características físicas del usuario que no

pueden copiarse fácilmente.

Los mecanismos de protección de datos se basa en dos sistemas

principalmente: la criptografía y la esteganografía. La criptografía es la ciencia y el estudio de la escritura secreta. Varios

sistemas criptográficos de clave secreta, pública y compartida son la base de la firma digital. Destacan la función hash o resumen con algoritmos de 128, 256 e

incluso 512 bits; también tenemos la PGP que es una herramienta criptográfica en

origen gratuita y de dominio público hasta determinada versión. La esteganografía es el conjunto de técnicas que permiten ocultar o esconder

cualquier tipo de datos. No se pretende aquí cifrar datos para intentar ocultarlos sino simplemente esconderlos en los bits menos representativos de archivos que

pasarían completamente desapercibidos, como por ejemplo una imagen JPG. El fichero original y el que oculta información son una casi misma imagen, con el

mismo tamaño de archivo y esa es la principal característica de esta técnica, que al

tratarse de un fichero normal y corriente no despierta sospechas. Es decir, un fichero criptografíado se puede pensar que esconde información importante, y

aunque tardemos mucho tiempo en descifrarlo lo conseguiremos; en cambio un fichero esteganografiado no despierta sospechas y, por eso mismo, no intenta

descifrarse su contenido que, por otro lado, sería fácil de hacer.

3. SEGURIDAD DEL SISTEMA Ataques a contraseña

Las contraseñas en UNIX almacenadas en /etc/passwd son muy sensibles a

los cambios. Cuando un usuario accede al sistema no se descifra su contraseña almacenada en este fichero, sino que se traduce la que ha introducido y se

compara con la que está guardada en el fichero, si son iguales, de acuerdo, el usuario puede acceder al sistema. En ocasiones si la contraseña es demasiado fácil

o guarda relación con datos del usuario o su entorno puede intentar descifrarse por

ingeniería social; si es una palabra que existe en el idioma del país, se puede intentar encontrar con ataques de diccionario repetidos, mientras que si contiene

pocos caracteres puede intentar descubrirse por ataques de fuerza bruta.

Page 279: sistemas operativos, redes y bases de datos

24 · Administración de Redes y Sistemas Operativos

Código malicioso y amenazas lógicas

Se denomina código malicioso al que se inserta dentro de un programa autorizado y realiza una serie de acciones desconocidas por el usuario. Puede

eliminar datos, reenviar información sensible por correo electrónico, etc. Este código malicioso se vale de:

Software incorrecto: agujeros de seguridad que deben ser parcheados constantemente actualizándonos el sistema operativo y los distintos programas.

Bombas lógicas: partes de código malicioso que se mantiene inerte hasta que

se produce una cierta condición: una fecha, una secuencia de teclas, etc.

Virus, como los gusanos (se autoejecuta para propagarse por la red y colapsar

el ancho de banda), troyanos (código oculto que puede capturar contraseñas y otros datos pero que aparentemente no produce daños en el sistema),

bacterias (se reproducen hasta agotar los recursos del sistema) y backdoors (puertas de acceso a sistema operativo y software general que permite saltarse

todas las medidas de seguridad establecidas).

Detectores (sniffers)

Son programas que permiten la captura y el registro de la información que circula por una red y se basan en la activación del modo promiscuo de las

interfaces de red de los terminales de trabajo. Su actividad es difícilmente

detectable pues no dejan huellas, sin embargo existen distintas herramientas software para comprobar la presencia de interfaces en modo promiscuo.

Escáneres

Son herramientas de seguridad que sirven para detectar las vulnerabilidades de un sistema informático, tanto local (escáneres de sistema)

como en la red (escáneres de red).

Ataques de denegación de servicio

Es toda acción iniciada por una persona o por otras causas, que inutiliza el hardware y/o software de manera que los recursos del sistema no sean accesibles

desde la red. Pueden ser ataques contra el hardware de la red (envío de paquetes

erróneos al sistema que el receptor no puede procesar), ataques contra el sistema operativo (por ello hay que actualizarse con los últimos parches disponibles) o

ataques contra aplicaciones que utilizan el sistema operativo (aprovechando al igual que en el propio sistema operativo, errores de programación).

Auditoría y ficheros log

El logging es el proceso mediante el cual se registran en un fichero las

actividades que se producen en un sistema operativo y log es el fichero propiamente dicho. Estos ficheros del sistema operativo son demasiado conocidos

por los intrusos, por lo que conviene utilizar herramientas de logging diferentes y complementarias a ellas para llevar otros registros más personalizados y ocultos. La

información contenida en los ficheros log es fundamental en la investigación de los

delitos que se hayan podido cometer con el concurso de las nuevas tecnologías, y aunque no existe ninguna legislación por el momento que obligue a crear y

mantener estos ficheros, la gran mayoría de proveedores de servicios disponen de ellos y los almacenan durante un período de tiempo razonable.

4. EL DELITO INFORMÁTICO

El delito informático no aparece en el actual Código Penal (1995) por lo que se debe hablar de delitos cometidos con el concurso de la informática o las nuevas

tecnologías. Entre estos delitos destacan:

Delitos contra la intimidad: Como la intercepción del correo electrónico está

asimilada a la violación de la correspondencia, las conductas de apoderamiento

de mensajes de correo electrónico, intercepción de las telecomunicaciones y

Page 280: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 25

TEMA

utilización de artificios de escucha, transmisión o grabación de señales de

telecomunicación, están prohibidas. Ahora bien, también es cierto que un correo electrónico laboral no debe ser utilizado con fines personales y de ahí

que las empresas reivindiquen sus derechos a poder “consultar” el correo electrónico de sus trabajadores.

Usurpación y cesión de datos reservados de carácter personal: El

apoderamiento, utilización, modificación, revelación, difusión o cesión de datos reservados de carácter personal que se encuentren almacenados en ficheros,

soportes informáticos, electrónicos o telemáticos son constitutivas de delito. La

Ley Orgánica de Protección de Datos de Carácter Personal de 1999 establece 3 niveles de seguridad según el tipo de datos que se contengan:

o Nivel básico: Requiere medidas de autenticación y control de acceso a estos ficheros personales.

o Nivel medio: El administrador debe elaborar un catálogo sobre las

medidas de seguridad genéricas y se deben implantar mecanismos seguros de autenticación remota.

o Nivel alto: Es necesario usar métodos criptográficos para evitar que los datos sensibles sean inteligibles, y los datos relativos a

ideología, creencias, origen racial, salud, vida sexual, etc, son

susceptibles de ser protegidos en este nivel. Revelación de secretos de empresa.

Daños: Destrucción, alteración, inutilización o cualquier otra modalidad que

implique el daño de datos, software o documentos electrónicos almacenados en

redes, soportes o sistemas informáticos. Cuando se denuncia una acción delictiva deben valorarse los daños, como por ejemplo restauración de una

página web y compensación por el tiempo durante el que no se ha podido prestar un determinado servicio.

Delitos contra la propiedad intelectual: Reproducción íntegra de software

y venta al margen de los derechos de licencia, utilización de una única licencia

de software para su uso en varios ordenadores, instalación de copias no autorizadas de software en u ordenador en el momento de su compra,

publicación del código fuente de software al margen de los derechos de autor y ruptura de los mecanismos de protección que permiten el funcionamiento

correcto aunque protegido del software.

Page 281: sistemas operativos, redes y bases de datos

26 · Administración de Redes y Sistemas Operativos

TEMA 8 EL SISTEMA INFORMÁTICO DENTRO DE LA ORGANIZACIÓN

1. EL JEFE DE INFORMÁTICA

El jefe de informática gestiona los recursos del departamento de

informática y actúa de enlace entre el departamento y la organización. Esto quiere decir que el jefe de informática posee información relativa a la situación de la

organización que el personal técnico no es necesario que conozca; también se ocupa de velar por una serie de proyectos que desempeñan los administradores

relativos a la informática de la organización.

Por todo ello, el jefe de informática tiene una visión más global de todo, y necesita la figura del administrador que es quien cuida de los servidores.

2. LOS PLANES

Una planificación estratégica es un conjunto de propuestas realistas para fijar los objetivos de la organización en un futuro. La planificación estratégica

para minimizar riesgos y maximizar resultados, debe plantear estrategias y objetivos simples, claros, alcanzables y mensurables.

Para realizar correctamente esta planificación en los últimos años ha aparecido el análisis DAFO (debilidades, amenazas, fortalezas y oportunidades) que

se ha convertido en un instrumento de diagnóstico para la dirección estratégica de

la dirección. Se estudian las debilidades, amenazas, fortalezas y oportunidades y, de esa manera se establece un plan de contingencias, que aplicándolo

exclusivamente al sector informático intenta un doble objetivo: reducir la posibilidad de que pueda ocurrir algún percance y prever las acciones y actuaciones que es

preciso poner en práctica si esto llegara a ocurrir.

El plan de seguridad y análisis de riesgos debe velar por toda la

seguridad del equipamiento informático, para ello se preguntan qué puede ir mal, estimar el coste que comportaría para la organización y calcular la probabilidad de

que se dé cada uno de los posibles problemas. A la par se estudia paralelamente qué se intenta proteger y qué valor tiene dentro de la organización. Según la

probabilidad de riesgos, lo que cueste reponerlo y el valor que tiene dentro de la

organización se tomarán unas u otras medidas conducentes a la protección de ese equipamiento.

3. DETECCIÓN DE LAS NECESIDADES DE SOFTWARE EN LA ORGANIZACIÓN

Cuando la informática está implantada en una organización, siempre existen necesidades nuevas, dado que una organización es una entidad viva, con

necesidades que varían a lo largo del tiempo, entre las que se encuentran, por supuesto, las informáticas.

El cubrir estas necesidades suele tener 3 etapas:

Detección: A menudo una necesidad muy evidente es difícil de detectar,

puede provenir de muchas fuentes: quejas en el CAU, peticiones en el CAU, desde el mismo departamento de informática para mejorar el servicio, el

rendimiento o simplemente ampliarlo, desde cualquier punto de la

organización, etc. por tanto la aparición de una necesidad que deba cubrir el departamento de informática puede llegar por muchas vías.

Concreción: Ya se ha detectado una necesidad, pero a menudo son personas

ajenas al mundo de la informática las que en su lenguaje habitual nos la demandan; es necesario por tanto concretar esa necesidad con sucesivas

Tema 8

El sistema informático dentro de la organización

1. El jefe de informática

2. Los planes 3. Detección de necesidades de

software en la organización

4. Implantación/diseño de aplicaciones

5. Aspectos legales 6. Responsabilidades del jefe de

informática

Page 282: sistemas operativos, redes y bases de datos

Administración de Redes y Sistemas Operativos · 27

TEMA

reuniones. La comunicación con todas las personas y departamentos

relacionados directa o indirectamente con la necesidad puede ser clave para concretar el problema y, especialmente, la solución.

Análisis: Se elabora un primer estudio sobre viabilidad del proyecto para

determinar cómo puede encajar en el sistema informático actual o cual sería la mejor manera de solucionar el problema planteado. Se prepara un informe

técnico preliminar con todos los recursos hardware, software, humanos y económicos con que contamos.

4. IMPLANTACIÓN/DISEÑO DE APLICACIONES

Si para cubrir una necesidad informática necesitamos software nuevo, se

nos plantean varias posibilidades: modificar el software que tenemos (si podemos), comprar software estándar o crear software a medida.

En el primer caso debemos ver si con actualizar el software de que

disponemos es suficiente; esta tarea puede ser tan sencilla como leer las especificaciones vía web o papel de las últimas versiones disponibles, o tan

compleja como pedir un cd-rom de evaluación para comprobar in situ si se adapta

a nuestra necesidades.

Si nos decantamos por comprar software estándar debemos saber que nunca se adaptará del

todo a nuestras necesidades y que se va a introducir

un elemento nuevo que el personal de la organización deberá aceptar y aprender; debemos estar

pendientes de todo el proceso de parametrización del software (adaptación a la empresa), implantación en

servidores, en los terminales y diseñar un plan de formación para todos los usuarios. A pesar de estas

desventajas es una opción más barata que la

siguiente. El desarrollar software a medida implica a

mucha gente, mucho dinero y muchas reuniones. Si la organización es lo suficientemente grande como

para contar con un equipo de desarrollo perfecto, de

no ser así deberemos contratar una empresa externa y, en este caso, habrá que negociar en un contrato la

propiedad de las fuentes y la programación y, por otro lado, escoger una empresa lo suficientemente

fuerte como para que se mantenga en el mercado y

nos permita actualizaciones posteriores.

En cualquier caso, escoger la mejor opción es muy difícil y de ello se encargará el jefe de

informática. El diagrama lateral puede ser una ayuda para la elección de la mejor solución.

5. ASPECTOS LEGALES

Cuando sucede un problema de seguridad son varios los pasos a seguir:

1. Que el administrador de sistemas ponga en marcha el protocolo técnico de

parada, copia, restauración; previamente recogiendo los ficheros de log y todas las pruebas para poder hallar al culpable. En caso de delitos como pornografía

infantil se ha de poner primero en contacto con la policía con el fin de no destruir pruebas que podrían resultar fundamentales.

Decisión de software

Page 283: sistemas operativos, redes y bases de datos

28 · Administración de Redes y Sistemas Operativos

2. Hablar con la dirección de administración sobre el problema de seguridad que

se ha producido. 3. Informar al cuerpo de policía adecuado para denunciar el hecho, elaborando un

informe exhaustivo sobre lo ocurrido con toda la documentación y pruebas que se hayan podido reunir; se elabora paralelamente un informe de desperfectos y

valoración de daños económicos y materiales.

Respecto al software a medida, es fundamental la redacción de un contrato

adecuado para dilucidar la propiedad del código fuente (o alguna parte de éste) antes de empezar el proyecto.

6. RESPONSABILIDADES DEL JEFE DE INFORMÁTICA

Elaboración del plan estratégico del departamento, subordinado al plan

estratégico de la organización y velar por su cumplimiento. Elaboración de los planes de actualización informático y contingencias.

Detección y concreción de necesidades

Actuación y respuesta ante situaciones que comprometan la seguridad del

sistema.

Texto elaborado a partir de:

Administración de redes y sistemas operativos Miquel Colobran Huguet, Unidad de Delitos en Tecnologías de la Información-Mossos d’Esquadra

Junio 2005

Page 284: sistemas operativos, redes y bases de datos

Bases de datos 1

TEMA 1 LOS DATOS: CONCEPTOS INTRODUCTORIOS

1. LOS 3 MUNDOS: EL REAL, EL CONCEPTUAL Y EL DE LAS REPRESENTACIONES Los términos que manejaremos en la asignatura, se distinguen en 3

ámbitos diferentes:

El mundo real: con los objetos cotidianos que nos rodean. Es la realidad que

nos interesa y la que percibimos con nuestros sentidos, compuesta por objetos concretos, ya sean físicos o no.

El mundo de las conceptualizaciones lógicas: estos conceptos se obtienen

tras observar y abstraer determinados conocimientos de la realidad que nos interesan en un momento dado. La información es un conocimiento

transmisible y es en esta asignatura el único conocimiento que nos interesa.

Eso sí, en el paso del mundo real a las conceptualizaciones encontramos pluralismo; así un profesor le interesará del alumno su calificación en la

asignatura; mientras que en secretaría estarán más interesados en datos del tipo si el alumno tiene beca o no, el importe de su matrícula, etc.

El mundo de las representaciones informáticas o datos: aquí

toman forma las abstracciones del mundo anterior; es decir para transmitir esos conocimientos y poder comunicarlos es necesario

representarlos físicamente de alguna manera: los datos. Los datos

son, por tanto, las representaciones físicas de los conocimientos que tenemos de los objetos del mundo real. El paso de los

conocimientos a los datos no es automático, sino que es un proceso humano: un proceso de diseño.

Sin duda, las tareas más importantes del analista/diseñador de aplicaciones informáticas son: analizar los objetos del mundo real para

hacer abstracciones y obtener una concepción lógica de ellos; y posteriormente diseñar una representación informática concreta que se

pueda tratar eficientemente. Hoy día, gracias a la evolución tecnológica se ha simplificado el proceso de diseño con lo cual la principal tarea

suele ser la observación/abstracción.

2. EL MUNDO CONCEPTUAL: ENTIDADES Y ATRIBUTOS Para nuestro mundo conceptual, será imprescindible conocer una serie de

términos:

Entidad: es el objeto que conceptualizamos como distinguible y viene a ser el

término “sujeto” que utilizamos en lingüística; así por ejemplo en la frase “El alumno Pedro nació en el año 1979”; tenemos como entidad al alumno Pedro.

Atributo: Es la propiedad que describimos de la entidad y que en la lingüística

forma parte del predicado; así el atributo de la frase anterior sería “nació en el año”.

Valor: Es la magnitud a la que hace referencia el atributo; en este caso

“1979”. Lógicamente para conocer una información debemos conocer a quién

hace referencia (entidad), sobre qué versa (atributo) y cual es la magnitud de ese atributo (valor).

El tiempo: La información no es independiente del tiempo y este detalle habría

que saber reflejarlo en nuestro sistema de bases de datos. Quizá nos parezca que la fecha de nacimiento de alguien no va a cambiar, o el DNI; quizá nos

equivoquemos, pues el DNI puede tener un error policial y tener que cambiarse por otro, o incluso la fecha de nacimiento que nosotros hemos introducido en la

Tema 1 Los datos: conceptos

introductorios

1. Los tres mundos: el real, el conceptual y el de las

representaciones

2. El mundo conceptual: entidades y atributos

3. El mundo de las representacionesl

4. La memoria externa

Los tres mundos

Page 285: sistemas operativos, redes y bases de datos

2 · Bases de Datos 1

base de datos esté erróneo y haya que cambiarlo. Tanto el cambio posterior

como todo el tiempo en que ese error se ha mantenido y se ha estado difundiendo esa información errónea convendría tenerlo registrado. Así, para

tener bien caracterizada una información, necesitaremos la entidad, el atributo, el valor y el tiempo.

Dominios y valores nulos: El conjunto de valores válidos o legales que

puede tener un atributo recibe el nombre de dominio. Así, en fecha de nacimiento de un alumno, podemos llegar a tomas desde 1900 hasta al

actualidad. Ojo, no confundamos el dominio con el tipo; es cierto que el valor

fecha debe ser de tipo numérico, y esto limita en parte los valores aceptables, pero no todos, dado que 23456 sería un valor aceptable, pero irreal en nuestro

caso. El valor nulo puede definirse como el valor vacío, y debemos hacer saber a nuestro sistema si para un determinado atributo se admite ese valor vacío

(por ejemplo un alumno de menos de 18 años, no tiene porqué tener DNI).

Identificadores y claves: Los atributos que conforman aplicaciones

inyectivas se denominan identificadores. Es decir, si hablamos de personas adultas, el DNI es un identificador único; pero si hablamos de accidentes de

tráfico, el DNI de la persona involucrada no es un identificador, pues puede haberse encontrado envuelto en más de un accidente. Una clave es un

atributo o conjunto de ellos que permite identificar las entidades individuales.

En el ejemplo anterior, el conjunto de atributos DNI, fecha y hora, sí que puede considerarse una clave, aunque cada uno de sus componentes no sean un

identificador en sí mismos.

3. EL MUNDO DE LAS REPRESENTACIONES

Ya dijimos anteriormente que para transmitir y procesar la

información, requerimos representarla mediante datos. Una representación formal muy utilizada es la representación tabular

como la que vemos al margen, en ellas se utiliza una entidad por fula y un atributo de cada una de esas entidades por columna. Al

productor cartesiano entidades x atributos es a lo que se denomina

representación tabular. Ahora bien, se denomina registro a la representación de una entidad (es decir, una fila cualquiera de la

tabla) y campo a la representación del valor de un atributo de una entidad (es decir los campos son columnas).

Una base de datos es un conjunto de ficheros de datos interrelacionados. Por ejemplo en secretaria de una universidad, tenemos 3 ficheros de base de

datos: alumnos (con sus atributos DNI, nombre, fecha nacimiento…), asignaturas (código, nombre y créditos) y profesores (DNI, nombre y despacho). Para obtener

por ejemplo la nota de un alumno en una asignatura, no podemos asignar el campo nota a la asignatura, pues al ser de valor único todos los alumnos obtendrían la

misma nota, ni al alumno, pues obtendría la misma nota en todas las asignaturas

en las que estuviera matriculado. El campo nota, es el resultante de la interrelación alumno/asignatura; interrelación que puede ser múltiple para cada alumno, pues

hay muchas asignaturas en las que puede estar matriculado. Así nacieron los sistemas de gestión de bases de datos, para poder manipular y tratar esta

información que quedaba fuera del concepto de base de datos.

Para poder almacenar esta información existen diversas fórmulas; cintas,

DAT, CDs, el propio disco duro; cada una de ellas con sus particularidades; pero casi lo que más nos interesa es el acceso a la información: tenemos según

diferentes criterios el acceso secuencial y el directo; y por otro lado el acceso por

valor o por posición; implementando ambos obtenemos: Acceso secuencial por posición: Tras haber accedido a un dato, accedemos al

siguiente de la lista por posición.

Representación tabular

Page 286: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 3

TEMA

Acceso directo por posición: Queremos acceder al registro que ocupa la

posición x (por ejemplo, el alumno que es la mediana de todas las notas de una

asignatura). Acceso secuencial por valor: Queremos obtener el siguiente alumno por orden

alfabético a partir del alumno x; realmente nuestra lista está ordenada por

código de alumno, así que este sería un acceso secuencial por valor (apellido) y no por posición.

Acceso directo por valor: El alumno que ha obtenido un 5,6 por ejemplo.

4. LA MEMORIA EXTERNA

La necesidad de almacenar datos nos obliga a utilizar memorias externas con soportes permanentes. La no-volatilidad de esta información (las memorias

internas pierden su contenido en cuanto se apaga el PC), la gran capacidad que tienen y su bajo precio los hacen ideales para ello; solo tienen un pequeño

inconveniente, el tiempo de acceso.

El tiempo de acceso a un disco duro es igual al tiempo de búsqueda (el

brazo portador de los cabezales se coloca en el cilindro seleccionado), más el tiempo de espera (hay que esperar a que en su giro constante el cabezal pase por

la zona de datos a transferir), más el tiempo de transferencia.

Los soportes que más se suelen utilizar son:

Disco duro: no es transportable, es rápido, fiable, barato y de gran capacidad.

CD-ROM: si es solo grabable se utiliza para ficheros históricos o definitivos, y

solo para realizar consultas. Cintas: solo tienen acceso secuencial por lo que se suelen utilizar únicamente

como copia de seguridad (backup).

Page 287: sistemas operativos, redes y bases de datos

4 · Bases de Datos 1

TEMA 2 INTRODUCCIÓN A LAS BASES DE DATOS

1. CONCEPTO Y ORIGEN DE LAS BD Y DE LOS SGBD

Las aplicaciones informáticas de los años 60 acostumbraban a darse

totalmente por lotes (batch). Cada BD solía trabajar con un único fichero maestro que se encontraba sobre una cinta magnética, y con su acceso secuencial. Cuando

se quería añadir una aplicación que requería alguno de los datos de dicha cinta y otros nuevos, se diseñaba un fichero nuevo copiando todos los datos repetidos

(redundancia) y añadiendo los nuevos, para evitar que un mismo programa tuviera

que leer varios ficheros distintos. Cuando aparecieron líneas de comunicación y se podía acceder de forma

on-line y a medida que se integraban las diferentes aplicaciones, fue necesario eliminar toda la redundancia y diseñar un conjunto de ficheros interrelacionados

entre sí. A este conjunto de ficheros, con estructuras complejas y compartidos por varias procesos de forma simultánea se le conoce como bases de datos. A partir

de los 80 fue saliendo al mercado software que permitía gestionar e interrelacionar

todos estos ficheros, y es lo que se denominó sistemas de gestión de bases de datos. Una base de datos, en otras palabras, es un conjunto estructurado de datos

que representa entidades y sus interrelaciones; representación única e integrada que a su vez permite utilizaciones varias y simultáneas.

2. EVOLUCIÓN DE LOS SGBD

Años 60 y 70: Se pueden definir estos años con dos palabras sistemas

centralizados; es decir, un gran ordenador para toda la empresa y una red de

terminales sin inteligencia ni memoria conectados a él; era la visión hardware

de la época que además, se apoyaba en el software de sistema operativo existente en aquel momento. Los programas de aplicación para acceso,

consulta y escritura en la base de datos estaban escritos en alto nivel y eran gran cantidad de órdenes y subrutinas que requerían que el programador

conociera todos los detalles de diseño físico y lógico; todo hacía que la programación fuese muy costosa. Lo que interesaba en esta época era

maximizar el rendimiento: disminuir el tiempo de respuesta y aumentar las

transacciones por segundo. Años 80: Sistemas de gestión de base de datos relacionales. La aparición de

ordenadores micro extendieron la informática a todas las empresas e

instituciones. Aparecen los primeros SGBD relacionales que facilitan la programación de aplicaciones y consiguen que los programas sean

independientes de los aspectos físicos de la base de datos. La estandarización

en el año 1986 del lenguaje SQL produce una auténtica explosión de este tipo de programas.

Años 90: Caracterizados por la distribución, el modelo cliente/servidor y 4GL.

A pesar de que las SGBD ya aparecen en la década anterior, no es hasta este momento en el que las empresas se dan cuenta de que han comprado

ordenadores departamentales y existen multitud de bases de datos diferentes

pululando por la empresa. La necesidad de tener una visión global de la empresa y de interrelacionar las diferentes aplicaciones llevan a buscar un

programa que tratase todas las BD como una sola: base de datos distribuida; esta distribución es mejor cuando hay homogeneidad (misma

marca de SGBD), lo cual es difícil que ocurra en toda la empresa; no obstante aunque existe heterogeneidad, gracias al lenguaje SQL se pueden tratar todas

las bases de datos, aunque no se da la apariencia de que se trata de una sola.

En otras ocasiones también se da una distribución deseada, dado que pueden existir varias copias de BD iguales en distintos puntos (por cercanía, por

acceso, por utilización, etc) o solo con aquellos datos que se vayan a utilizar

Tema 2

Introducción a las bases de datos

1. Concepto y origen de las BD y

de los SGBD 2. Evolución de los SGBD

3. Objetivos y servicios de los

SGBD 4. Arquitectura de los SGBD

5. Modelos de BD 6. Lenguajes y usuarios 7. Administración de BD

Page 288: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 5

TEMA

frecuentemente. Así si una BD queda fuera de servicio, el resto puede seguir

funcionando, además el coste se reduce así también sensiblemente. La tecnología que se suele utilizar para esta distribución es la cliente/servidor.

Cualquier PC puede ser servidor (acepta una consulta de BD y la sirve) o ser cliente (pide una consulta o un dato) o ambas a la vez. Además el éxito de las

BD hasta en los ordenadores personales, ha llevado a la aparición de los

lenguajes de cuarta generación 4GL, fáciles, potentes, y muy visuales a la hora de realizar consultas o cambios en la BD.

Tendencias actuales: Actualmente las bases de datos están en plena

transformación (¿no lo están siempre?) para adaptarse a la multimedia, a la orientación de objetos y a internet. Se pueden establecer consultas desde la

web, se pueden reconocer gran cantidad de objetos multimedia como tipos de bases de datos, etc. También recalcar que actualmente existe lo que se da en

llamar almacén de datos, es decir, en las grandes empresas y sobre todo

fruto de las fusiones, se quiere tener un almacén en el que se reflejen todos los datos (por pequeños que sean) para poder ser analizados desde distintos

prismas y poder hacer consultas con información valiosa para la empresa.

3. OBJETOS Y SERVICIOS DE LOS SGBD Consultas no predefinidas y complejas: Se debe pedir a un sistema de

base de datos que permita a los usuarios hacer consultas de cualquier tipo y

complejidad, sin que estén preestablecidas, sin que se tenga que compilar un programa exclusivamente para ello y que sea sencillo y cómodo para el usuario.

Consultas del tipo; “Quiero un listado ordenado por apellidos de los alumnos

nacidos entre 1965 y 1971, que estén matriculados de 3 o menos asignaturas y que vivan en Barcelona capital”.

Flexibilidad e independencia: Interesa obtener la máxima independencia

posible entre los datos y los procesos usuarios, para que cuando existan cambios tecnológicos se puedan implementar con facilidad. En ese sentido nos

tiene que dar igual el Sistema operativo o el tipo de fichero en el que los datos estén escritos (independencia física de los datos); pero es que además

queremos que diferentes usuarios tengan unas visiones distintas e

independientes de la base de datos (como hablábamos en el tema anterior de la visión de una base de alumnos desde el punto de vista del profesor o de la

secretaría); a esto se le denomina independencia lógica de los datos. Problemas de redundancia: Es necesario eliminar la redundancia de datos,

dado que cuando se quiere consultar alguno de ellos, podemos estar basando

la consulta sobre datos anticuados o erróneos, lo cual revierte claramente en

una pérdida de integridad de los mismos. Además, cuando un dato es calculado (o derivado) producto de dos o más datos; es el SGBD quien debe

servir ese dato calculado en el momento, pues al programador o al usuario puede habérsele olvidado realizar el cálculo tras actualizar los nuevos datos.

Integridad de los datos: Se requiere un mantenimiento de alta calidad de los

datos en cualquier circunstancia. Cuando se define una base de datos, se definen sus tipos y también las reglas de integridad que debe cumplir; reglas

de dos tipos: las reglas de integridad del modelo (por ejemplo, no aceptar

datos duplicados) y reglas de integridad del usuario (por ejemplo no aceptar alumnos de menos de 18 años en la universidad ni de más de 120). Además los

procesos de backup y restauración tras un accidente, deben estar automatizados y ser transparentes al usuario.

Concurrencia de usuarios: Cuando muchos usuarios concurren en la misma

base de datos en modo lectura, el único problema es el rendimiento; pero si un

usuario o más están variando datos, se pueden dar problemas de interferencia; se minimizan estos problemas con la transacción de BD; consiste en un

conjunto de operaciones simples que se ejecutan de manera atómica, es decir o se ejecutan por completo o no se ejecuta ninguna; nunca, en cualquier caso,

se ejecutará parcialmente. Así por ejemplo si realizamos una transferencia de

efectivo de la cuenta A a la B; primero nos quitan el dinero de A y antes de

Page 289: sistemas operativos, redes y bases de datos

6 · Bases de Datos 1

ingresarlo en B sucede una caída de tensión; entonces ¿Dónde irá ese dinero?

Para evitar estos problemas se define una transacción de BD, que utilizará la operación COMMIT para indicar que ya ha terminado; si no puede acabar la

transacción, no llega a esta COMMIT, se deshará todo lo realizado, con la operación denominada ROLLBACK. Además mientras tiene lugar esta

transferencia, para que se ejecute felizmente, se aísla de las demás

operaciones con la técnica de bloqueo, que pone limitaciones a los accesos del resto de las transacciones para que no interfieran; lo malo de esto es que

produce esperas, retenciones y, en consecuencia, el sistema se ralentiza. El esfuerzo actual de los SGBD se centra en minimizar estos efectos negativos.

Seguridad: No hacemos aquí referencia a los backups que ya habíamos

tratado anteriormente, sino a temas relativos a la confidencialidad, autorizaciones, derechos de acceso, etc. Los datos manejados en bases de

datos están en España protegidos por ley; y los diferentes sistemas de gestión

de bases de datos utilizan técnicas de limitar las autorizaciones e incluso de encriptación de datos.

4. ARQUITECTURA DE LOS SGBD

Ya comentamos en puntos anteriores los niveles existentes en una base de datos: el nivel lógico y el nivel físico; el comité conocido como ANSI/SPARC

definió en 1980 otra definición de estos niveles, denominados esquemas:

Esquemas externos: Se sitúan las diferentes

visiones lógicas que los usuarios tendrán de las

partes de las BD que utilizarán. Esquema conceptual: Es único y global y sirve de

referencia para todos los sistemas: se describen aquí

las entidades tipo, atributos, interrelaciones, restricciones, reglas de identidad, etc. Así, los

esquemas externos se nutren en la parte que les interese del esquema conceptual. Si por ejemplo en

el esquema conceptual tenemos los atributos de

alumno: nombre, apellido1, apellido2… quizá en algún esquema externo aparezca el atributo persona,

que sea la refundición de nombre+apellido1+apellido2.

Esquema interno: Se corresponde completamente con el nivel físico del que

hablábamos anteriormente: caminos de acceso,

codificación de datos, gestión del espacio y del tamaño de la página….

Con esta nueva arquitectura de los SGBD la

independencia de los datos está asegurada; así, hablaremos de independencia física, cuando los

cambios en la organización física (esquema interno) no

afectan al mundo exterior (es decir, los esquemas externos). Si cambiamos, como se ve en la figura lateral

unos datos de un soporte a otro, no se verán afectados ni los programas ni los usuarios directos; pero tampoco

se tendrían que ver afectados por ejemplo si cambiamos

el método de acceso a un conjunto de registros determinados; solo deben variar las correspondencias

entre el esquema conceptual y el nivel físico, pero nada más.

La independencia lógica también está asegurada:

cuando existen cambios en el esquema conceptual, dichos cambios no afectarán a los esquemas externos

que no hagan referencia a entidades o atributos

Esquemas y niveles

Independencia física

Page 290: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 7

TEMA

modificados; por otro lado cuando es efectúan cambios en un esquema externo,

solo debe afectar a los usuarios de dicho esquema, pero no a usuarios de otros esquemas externos, ni al esquema conceptual ni, por supuesto al esquema interno.

Por último, destacaremos en este

punto el flujo y control habitual que suelen

hacer los SGBD cuando, por ejemplo, reciben una consulta desde un esquema externo.

Supongamos que desde un programa usuario de secretaría de la universidad se piden los

datos académicos de un alumno. El proceso es el siguiente:

1. Empieza una llamada al programa SGBD

en el que se envía la operación de consulta.

2. El SGBD se basa en el esquema externo en el que está trabajando y por supuesto

en el conceptual. Se da el visto bueno a la

consulta. 3. Entonces el SGBD determina cual es el

mejor mecanismo para responderla. Supongamos que hemos encontrado el

registro del alumno en cuestión y nos devuelve como resultado la página donde

se encuentran estos datos, entre los de

otros muchos alumnos. 4. Cuando se sabe en qué página se

encuentra, se consulta el buffer por si esta página ya se encontrase cargada en memoria, como resultado de una consulta

anterior sobre ese u otro alumno. De ser así, nos saltamos el punto 5.

5. La página no estaba en memoria, así que hay que buscarla en disco y cargarla en buffer.

6. El SGBD aplica datos eventuales a las transformaciones lógicas que implica el esquema externo y las lleva al área de trabajo del programa donde se espera

recibir el resultado de la consulta inicial. 7. A continuación el SGBD retorna el control al programa del usuario y da por

terminada la ejecución de la consulta.

5. MODELOS DE BD

Todo modelo de base de datos debe proveernos de estructuras de datos para construir la

BD (tablas, árboles…), restricciones o reglas de identidad que deben cumplir los datos introducidos y

luego una serie de operaciones para trabajar con los datos: borrado, consulta, inserciones, búsquedas…

Existen 3 modelos principales de BD que vamos a estudiar según su evolución histórica:

Modelo Jerárquico: Sus estructuras son

registros interrelacionados en forma de árboles, son propios de los años sesenta.

Modelo en red: De principios de los 70, hay

registros e interrelaciones, aunque ya no obliga

como en el anterior, que un registro sea hijo de un solo registro.

Modelo relacional: Se basa en el concepto

matemático de relación, entendiéndola como tabla. El modelo relacional se limita al nivel

Flujo y control

Modelos de BD

Page 291: sistemas operativos, redes y bases de datos

8 · Bases de Datos 1

lógico (no hace consideración alguna sobre las representaciones físicas, por lo

que nos da una independencia total), mientras que los dos modelos anteriores prerrelacionales sí.

En los últimos años se está extendiendo el modelo de BD relacional con

objetos, añadiendo tipos abstractos de datos (TAD) a los tipos reconocidos y

manipulados por la BD; esto acerca los sistemas relacionales al paradigma de la orientación a objetos.

6. LENGUAJES Y USUARIOS

Para comunicarse con el SGBD, el usuario, ya sea un programador, o un usuario directo, se vale de un lenguaje. Hay lenguajes especializados en la escritura

de esquemas, es decir en la descripción de las BD, son llamados genericamente DDL (data definition language; otros están especializados en la utilización de la BD

y se denominan DML (Data management language). Aunque es frecuente que un lenguaje disponga de construcciones para las dos funciones. De entre ellos, el más

utilizado es el lenguaje SQL, que tiene verbos (instrucciones) de varios tipos:

Verbos DML: por ejemplo SELECT, para hacer consultas, INSERT, DELETE,

para el mantenimiento de datos… Dentro de este aspecto hay lenguajes muy declarativos (se especifica qué se debe hacer y no cómo) y otros más

procedimentales (nos exigen conocer cuestiones del funcionamiento de las SGBD).

Verbos DDL: como CREATE TABLE para definir las tablas, sus columnas,

restricciones.

Verbos de control del entorno: como COMMIT y ROLLBACK, como ya vimos

anteriormente.

Otros lenguajes son el 4GL de muy alto nivel que pretende facilitar el uso de la BD y también la definición de menús, pantallas, diálogos; las herramientas o

interfaces visuales permiten usar el estilo visual de windows con ventanas que facilitan el trabajo.

7. ADMINISTRACIÓN DE BD

Hay un tipo de usuario en la BD muy especial, el administrador: es el responsable del correcto funcionamiento de la base de datos y velan para que

siempre esté accesible y útil. En algunas empresas multinacionales el administrador

de BD pueden llegar a ser 10 personas distintas las que se encarguen de ello. El administrador debe facilitar los backups, resolución de emergencias, vigilancia de la

integridad y calidad de los datos…

Page 292: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 9

TEMA

TEMA 3 EL MODELO RELACIONAL Y EL ÁLGEBRA RELACIONAL

1. ESTRUCTURA DE DATOS

El modelo relacional es un modelo de datos y tiene muy en cuenta los 3

siguientes aspectos: La estructura que debe permitir representar la información que nos interesa

del mundo real.

La manipulación de esa información mediante la actualización y consulta de

los datos. La integridad que da consistencia a los datos mediante el establecimiento de

reglas que éstos deben cumplir.

Los principios del modelo de base de datos relacional fueron establecidos en el

año 1970; aunque no fue hasta la década de los 80 en que se empezaron a

comercializar los primeros SGBD con rendimientos aceptables. Su principal objetivo es facilitar que la base de datos sea percibida por el usuario con una estructura

lógica consistente en un conjunto de relaciones, olvidándonos de la implementación física (independencia de los datos).

Visión formal de una relación Un dominio es un conjunto de valores atómicos (indivisibles). Estos

dominios pueden ser de dos tipos: Predefinidos: Corresponde a tipos de datos como enteros, cadenas de

caracteres, reales…

Definidos por el usuario: Que pueden ser más específicos y adaptables a

cada base de datos.

Toda relación se compone del esquema y de la extensión. El esquema

consiste en el nombre de una relación y el conjunto de atributos; mientras que la extensión es un conjunto de tuplas. En la tabla lateral, el esquema está consituido

por las dos primeras filas: empleados y el nombre de sus atributos; y la extensión por las 3 filas restantes. Algunos autores denominan tablas, columnas y filas a lo

que en BD se llaman relaciones, atributos y tuplas. Así, en este ejemplo, el nombre

de la relación es EMPLEADOS y el conjunto de atributos es {DNI, nombre, apellido, sueldo}. Si denotamos el esquema de la relación representada en esta tabla como

EMPLEADOS {DNI, nombre, apellido, sueldo}, el conjunto de tuplas de su extensión será el de la figura que tenemos debajo del esquema. Observamos como la primera

representación tabular es más cómoda, pero la representación en forma de

conjunto refleja mejor la realidad de la situación de la extensión.

El grado de una relación es el número de atributos que pertenecen a su esquema; en nuestro ejemplo es 4 (DNI, nombre, apellido y sueldo); mientras que

la cardinalidad de una relación es el número de tuplas que pertenecen a su extensión (en nuestro ejemplo la cardinalidad de empleados es 3).

Cuando un valor de un atributo es deconocido para una tupla, estamos hablando de un valor nulo; es el caso de que un empleado desconozca su sueldo

(cosa rara) o por ejemplo el campo teléfono esté vacío dado que no tenga teléfono ni móvil (cosa también bastante rara).

No debemos confundir relaciones con ficheros de datos; a primera vista resultan similares, dado que los registros y los campos que forman los ficheros se

parecen a las tuplas y a los atributos de las relaciones respectivamente, pero existen diferencias radicales e insalvables:

Atomicidad: Los valores de los atributos de una relación son atómicos, no

deben tener estructura interna; esto da simplicidad y uniformidad al modelo

relacional.

Tema 3

El modelo relacional y el álgebra relacional

1. Estructura de datos

2. Operaciones del modelo relacional

3. Reglas de integridad

4. El álgebra relacional

Esquema de relación

Empleados

DNI Nombre Apellido Sueldo

40444 Juan Garcia 2000

33567 Marta Roca 2500

55898 Luis Bernal 3000

Extensión de la relación

Page 293: sistemas operativos, redes y bases de datos

10 · Bases de Datos 1

No repetición de tuplas: En un fichero clásico se pueden repetir registros

exactamente iguales. En el modelo relacional no es posible que una relación

contenga dos tuplas repetidas (dado que es un conjunto, no puede tener elementos repetidos)

No ordenación de tuplas: Dado que una relación es un conjunto, no existen

elementos ordenados; aunque luego los SGBD relaciones proporcionen una implementación física que almacenará las tuplas de relaciones en un orden

concreto, esta ordenación no es visible en el nivel conceptual en el que nos hayamos.

No ordenación de los atributos: Los atributos tampoco están ordenados; así

la relación EMPLEADOS {DNI, apellido, nombre, sueldo} es la misma que

EMPELADOS {DNI, nombre, sueldo, apellido}

Claves

Una superclave es un subconjunto de los atributos del esquema, tal que no

pueda haber dos tuplas en la extensión de la relación que tengan la misma

combinación de valores para los atributos del subconjunto. En nuestro ejemplo de Empleados, una superclave podría ser {DNI y apellido} o también {DNI} o

también {NumSegSocial}. Una clave candidata es una superclave de C que cumple que ningún

subconjunto propio de C es superclave. En nuestro ejemplo anterior solo hay

dos claves candidatas {DNI} y {NumSegSocial} que son exclusivas cada una de

cada empleado. Clave primaria es aquella clave candidata cuyos valores se utilizan para

identificar las tuplas de la relación. Así el diseñador de la BD debe elegir de

entre todas las claves candidatas, cual será la clave primaria y el resto, se convertirán en claves alternativas. Si en nuestro ejemplo elegimos como

clave primaria {DNI}, entonces {NumSegSocial} se convertirá en la clave alternativa. La clave primaria se designa subrayándola, de forma que nuestra

relación empleados quedaría así: EMPLEADOS {DNI, nombre, apellido, sueldo}.

Claves foráneas son aquellas que permiten establecer relaciones entre las

tuplas de las relaciones. Por ejemplo, si la relación empleados se aumentase con los siguientes atributos EMPLEADOS {DNI, nombre, apellido, sueldo,

DNIjefe, edificiodesp, numerodesp} y tuviésemos otra relación de despachos del tipo DESPACHOS {edificio, numero, superficie} y así a cada empleado le

asignásemos un despacho diferente en cada uno de los edificios de los que

disponemos; nos podemos encontrar como edificiodesp y numerodesp son claves foránes de relación con la tabla despachos. Y si además quisieramos

establecer una relación jerárquica de jefe-empleados, el DNIjefe establecería una clave foránea con DNI dentro de la misma tupla; tal como vemos en la

imagen lateral. Toda clave foránea debe cumplir tener o valor nulo o valores que coinciden con los valores a los que hace referencia la clave primaria. Es

decir, no podemos tener un empleado cuyo edificio sea París y despacho el

108, si no tenemos en la relación Despachos, este edificio y este número de despacho; si se admiten, en cambio, los valores nulos. Obviamente además, el

número de atributos de la clave foránea y de la clave primaria debe ser el mismo (biyección); y además sus dominios deben coincidir.

2. OPERACIONES DEL MODELO RELACIONAL

Las operaciones del modelo relacional deben permitir poder manipular datos almacenados en una base de datos relacional. Hay 3 operaciones básicas de

actualización: La inserción (añadir tuplas), el borrado (suprimr tuplas) y la

modificación (alterar los valores de una o más tuplas).

La consulta de datos consiste en la obtención de datos deducibles a partir de las relaciones que contiene la base de datos. Encontramos varios

lenguajes distintos para poder llevar a cabo estas consultas:

Claves foráneas

Page 294: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 11

TEMA

Lenguajes basados en el álgebra relacional: Se denominan lenguajes

procedimentales, porque al basarse en la teoría de conjuntos, es necesario

seguir uno o más pasos para ir construyendo una nueva relación que contengan los datos que responden a nuestra consulta.

Lenguajes basados en el cálculo relacional: Se denominan lenguajes

declarativos, porque al estar basados en el cálculo de predicados de la lógica matemática, proporcionan una notación ajustada a cada consulta que

queremos realizar.

El lenguaje SQL que estudiaremos posteriormente, es una combinación de los

dos anteriores, aunque con un predominio del cálculo relacional, por lo que se considera un lenguaje declarativo.

3. REGLAS DE IDENTIDAD

Una base de datos debe contener datos que, en cada momento, deben reflejar la realidad. En estas condiciones determinadas configuraciones de valores

para las tuplas de las relaciones pueden no tener sentido. Por ello, denominaremos integridad a la propiedad de los datos de corresponder a representaciones

plausibles del mundo real.

En general, las condiciones que garantizan la integridad de los datos

pueden ser de dos tipos: Restricciones de integridad de usuario: Condiciones específicas de una base

de datos concreta. Por ejemplo, en nuestro ejemplo de EMPLEADOS, no tiene

sentido sueldos negativos.

Restricciones de integridad de modelo: Son condiciones que deben cumplir

todas las bases de datos que sigan dicho modelo. Por ejemplo la regla de identidad que garantiza que los valores de una clave primaria de una relación

no se repitan en tuplas diferentes de la misma relación. Todo modelo de base de datos debe cumplirlo.

Son este último tipo de reglas el que pasamos a desgranar a continuación:

Regla de integridad de unicidad de la clave primaria: Toda clave primaria

que se elija para una relación, no debe tener valores repetidos. Así, en el

ejemplo lateral, no podría ser clave primaria {apellido}, dado que encontramos que está repetido. Aunque no estuviera repetido en este momento, sería

arriesgado ponerla como clave primaria, porque si la empresa aumenta, es posible que en algún momento este valor se repita. Podemos elegir como clave

primaria {DNI} que no puede repetirse.

Regla de integridad de entidad de la clave primaria: Los atributos de la

clave primaria de una relación no pueden tener valores nulos. Así si hemos elegido DNI como clave primaria, todo empleado debe proporcionárnoslo, pues

no podemos tener valor nulo. En el ejemplo lateral, se provocaría un error de integridad en la base de datos.

Regla de integridad referencial: Se relaciona con el concepto de clave

foránea. En concreto determina que todos los valores que toma una clave foránea deben ser valores nulos o valores que existen en la clave primaria que

referencia. O sea, que en el ejemplo lateral, los valores no nulos de edificiodesp

y numerodesp deben hacer referencia a un valor que exista en la relación Despachos. Para asegurarse el SGBD de que esta relación siempre se cumpla,

deberá efectuar comprobaciones cada vez que se produzcan varios tipos de operaciones:

o Inserciones en una relación que tenga clave foránea (Por ejemplo

en edificiodesp en EMPLEADOS) o Modificaciones que afecten a atributos que perteneces a la clave

foránea de la relación o Borrados en relaciones referenciadas por otras relaciones (por

ejemplo, borrado de una tupla en la relación DESPACHOS)

Unicidad de clave primaria

Empleados

DNI Nombre Apellido Sueldo

40444 Juan Roca 2000

33567 Marta Roca 2500

55898 Luis Bernal 3000

Entidad de clave primaria

Empleados

DNI Nombre Apellido Sueldo

40444 Juan Roca 2000

33567 Marta Roca 2500

Nulo Luis Bernal 3000

Integridad referencial

Page 295: sistemas operativos, redes y bases de datos

12 · Bases de Datos 1

o Modificaciones que afecten a los atributos que pertenecen a la

clave primaria de una relación referenciada por otra relación (modificación de edificio o número en la relación DESPACHOS).

En estas comprobaciones pueden aplicarse diferentes políticas: de

restricción, actualización en cascada o anulación, que pasamos a explicar,

es el diseñador de la base de datos el que debe tomar en cuenta el significado de cada clave que asigna para así introducir una u otra política

de integridad en cada una de ellas: o Restricción: La restricción en caso de borrado consiste en no

permitir borrar una tupla si tiene una clave primaria referenciada por alguna clave foránea; restricción en caso de modificación

consiste en no permitir modificar ningún atributo de la clave

primaria de una tupla si tiene una clave primaria referenciada por alguna clave foránea. Así si tenemos una tupla con los nombres de

los clientes, referenciada a otra tupla con los pedidos realizados; no podremos borrar un cliente que tenga pedidos pendientes.

o Actualización en cascada: Consiste en permitir la operación de

actualización de la tupla y en efectuar operaciones compensatorias que propaguen en cascada la actualización a las tuplas que la

referenciaban. Así, en cado de borrado podemos permitir borrar las tuplas referenciadas (en el ejemplo, si borramos el cliente,

borramos también sus pedidos pendientes); en caso de modificación, permite modificar los atributos en las tuplas que

referenciaba (así, si le cambiamos el número de cliente, también

cambiará el número de cliente en el pedido pendiente). o Anulación: Consiste en permitir la operación de actualización y

compensarlo poniendo valores nulos a los atributos de la clave foránea de las tuplas que la reverenciaban. En caso de borrado,

permite el borrado de una tupla y modifica todas las tuplas

referenciadas con ese atributo poniendo valor nulo; en caso de modificación, los atributos de las tuplas referenciadas no tomarán

el nuevo valor como en la actualización en cascada, sino que también tomarán un valor nulo.

Regla de integridad de Dominio: Tiene a su vez dos condiciones. La primera

es que todos los valores no nulos que contiene la base de datos para un

determinado atributo, deben ser del dominio declarado para dicho atributo. Así,

si en una base de datos hemos declarado el dominio DNI como el de los números enteros, no permitirá introducir el dato “Luis”; también si hemos

definido como edad del trabajador el dominio “16 a 65” años, no se admitirán valores que estén por encima o debajo de estos dados.

La segunda condición sirve para establecer qué operadores pueden

aplicarse sobre los valores que tengan los dominios. Así no podrá consultarse el DNI con operaciones del tipo: DNI=”Luis” dado que Luis no es un real. Otro

ejemplo podría ser que si hemos definido edad como de 16 a 65, tampoco debería poder comparar DNI con edad, dado que aunque sean ambos números

reales, el dominio es distinto. No obstante los SGBD actuales no implementan

esta regla de integridad de dominio, todavía queda camino por recorrer.

4. EL ÁLGEBRA RELACIONAL

Las operaciones que se pueden realizar en el álgebra relacional son las

siguientes: Redenominar, unión, intersección, diferencia, producto cartesiano, selección, proyección, combinación y división.

A continuación pasamos a estudiar cada una de ellas; pero para ello, primero estableceremos unas relaciones de ejemplo que usaremos en todas y cada

una de estas operaciones para llegar a su completa comprensión.

Page 296: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 13

TEMA

Operación Redenominar (:=)

La denotaremos con el símbolo := y permite asignar un nombre R cualquiera a la relación que resulta de una operación del álgebra relacional; por

ejemplo, si queremos sumar los nombres de todos los empleados de la empresa, independientemente que trabajen en administración o en producción, podemos

hacer:

EMPLEADOS:= EMPLEADOS_ADM EMPLEADOS_PROD

Operación Unión ( ) La unión es una operación en la que, a partir de dos relaciones, se obtiene

una nueva relación formada por todas las tuplas que están en alguna de las

relaciones de partida. Solo tiene sentido aplicar la unión a relaciones que tengan tuplas similares y que ambas sean compatibles; es decir, que tengan el mismo

grado y que se pueda establecer una biyección entre los atributos. Así, si llevamos a cabo:

R:= EMPLEADOS_ADM EMPLEADOS_PROD Obtendremos:

R

DNI nombre apellido edificiodesp numerodesp 40444255 Juan García Marina 120

33.567.711 Marta Roca Marina 120

55.898.425 Carlos Buendía Diagonal 120

77.232.144 Elena Pla Marina 230

21.335.245 Jorge Soler NULO NULO

88.999.210 Pedro González NULO NULO

Y se deducirá que a DNI de empleados_adm le corresponde DNI de

empleados_prod… y todas las relaciones subsiguientes. Siempre y por convención,

haremos que los atributos de la relación resultante, coincidan con los atributos de la relación que figura en primer lugar.

Operación Intersección ( )

A partir de dos relaciones, se obtiene una nueva relación formada por las

tuplas que pertenecen a las dos relaciones de parida. Al igual que la unión solo se puede aplicar a relaciones que tengan tuplas similares. Como ejemplo:

R:= EMPLEADOS_ADM EMPLEADOS_PROD

R

DNI nombre apellido edificiodesp numerodesp 33.567.711 Marta Roca Marina 120

Relaciones de ejemplo

Page 297: sistemas operativos, redes y bases de datos

14 · Bases de Datos 1

Solo obtenemos, por tanto, los elementos que se encuentran en las dos

relaciones, tanto en empleados_adm como en empleados_prod.

Operación Diferencia (-) En la unión, a partir de dos relaciones, se obtiene una nueva relación

formada por todas las tuplas que están en la primera relación y, en cambio, no

están en la segunda. Solo tiene sentido, obviamente, si se aplica a tuplas similares y es necesario que las relaciones sean compatibles.

R:= EMPLEADOS_ADM - EMPLEADOS_PROD

R

DNI nombre apellido edificiodesp numerodesp 40444255 Juan García Marina 120

Producto Cartesiano (x)

Es una operación que, a partir de dos relaciones, obtiene una nueva relación formada por todas las tuplas que resultan de concatenar tuplas de la

primera relación con tuplas de la segunda. Las tuplas no tienen que ser compatibles y no deben tener ningún nombre de atributo común. En estas condiciones podemos

hacer el producto cartesiano de DESPACHOS y EDIFICIOS_EMP, que requiere una

redenominación para no incurrir en atributos con el mismo nombre: EDIFICIOS (nombreedificio, supmediadesp):= EDIFICIOS_EMP(edificio, supmediadesp)

R:= EDIFICIOS x DESPACHOS

R

nombreedificio supmediadesp edificio numero superficie Marina 15 Marina 120 10

Marina 15 Marina 230 20

Marina 15 Diagonal 120 10

Marina 15 Diagonal 440 10

Diagonal 10 Marina 120 10

Diagonal 10 Marina 230 20

Diagonal 10 Diagonal 120 10

Diagonal 10 Diagonal 440 10

Conviene señalar que el producto cartesiano raramente se utiliza de forma explícita, pues su resultado no suele ser muy útil, en cambio sí se utiliza como

operación primitiva de la combinación.

Selección T(C)

Es una operación que a través de unas condiciones (C) pretende seleccionar algunas tuplas (T) del resto. Por ejemplo:

R:= DESPACHOS (edificio = Marina y superficie > 12)

R

edificio numero superficie Marina 230 20

Seleccionamos así los despachos del edificio Marina, cuya superficie es

mayor de 12.

Proyección T[A1, A2…]

Es una operación unaria (igual que la anterior, solo requiere una relación) que sirve para elegir algunos atributos de una relación y eliminar el resto. Si

necesitamos hacer una consulta por ejemplo de los empleados de administración, pero solo queremos el nombre y apellido, sin ningún dato más, podemos hacer:

R:= EMPLEADOS_ADM[nombre, apellido]

R

nombre apellido Juan García

Marta Roca

Page 298: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 15

TEMA

Combinación T[B]S

La combinación es una operación que, a partir de dos relaciones, obtiene una nueva formada por todas las tuplas que resultan de concatenar tuplas de la

primera relación con tuplas de la segunda y que cumplen una condición de combinación especificada.

Para ello se requieren que las dos tuplas que participan (T y S) no tengan

ningún nombre de atributo común, siendo B la condición de combinación. Así, si queremos obtener una relación que contenga todos los datos de cada uno de los

despachos cuya superficie es mayor o igual a la media del edificio en el que se encuentran, podemos hacer (primero redenominamos atributos):

EDIFICIOS (nombreedificio, supmediadesp):=EDIFICIOS_EMP(edificio, supmediadesp) R:= EDIFICIOS[nombreedificio = edificio, supmediadesp <= superficie] DESPACHOS

R

nombreedificio supmediadesp edificio numero superficie Marina 15 Marina 230 20

Diagonal 10 Diagonal 120 10

Diagonal 10 Diagonal 440 10

Cuando existe una equicombinación (hemos utilizado el operador = en las condiciones que había que cumplir), siempre aparecen una o más parejas de

atributos que tienen valores idénticos en todas las tuplas. En el caso anterior

nombreedificio y edificio son iguales. Puesto que de este par de atributos uno es supérfluo, se utiliza la combinación natural (T*S) comouna equicombinación

seguida de la eliminción de los atributos supérfluos. Así, podemos hacer:

R:= EDIFICIOS_EMP * DESPACHOS

R

nombreedificio supmediadesp numero superficie Marina 15 120 10

Marina 15 230 20

Diagonal 10 120 10

Diagonal 10 440 40

División (:)

Es una combinación de una proyección, del producto cartesiano y de la diferencia. La división de una relación R1 (dividendo) por otra R2 (divisor) es una

relación R (cociente) tal que al realizarse su combinación con el divisor, todas las

tuplas resultantes están en el dividendo.

Secuencias de operaciones del álgebra relacional Como en muchos casos para formular una consulta en álgebra relacional e

spreciso utilizar varias operaciones que se aplican en un cierto orden, es mejor

descomponer la expresión en varios pasos, donde cada paso aplique una sola operación y obtenga una relación intermedia que se pueda utilizar en los pasos

siguientes. Así, por ejemplo, si queremos obtener el nombre del edificio y el número de

los despachos situados en edificios en los que la superficie media de estos

despachos es mayor que 12, podemos utilizar la siguiente secuencia de operaciones:

A:= EDIFICIOS_EMP (supmediadesp > 12)

B:= DESPACHOS * A R:= B[edificio, numero]

Operaciones relacionales

Redenominar (:=) Unión ( )

Intersección ( )

Diferencia (-) Producto Cartesiano (x)

Selección T(C) Proyección T[A1, A2…]

Combinación T[B]S División (:)

Page 299: sistemas operativos, redes y bases de datos

16 · Bases de Datos 1

TEMA 4 EL LENGUAJE SQL

1. SENTENCIAS DE DEFINICIÓN

Para poder trabajar con bases de datos relacionales, lo primero que hay

que hacer es definirlas. En el estándar SQL92 (estándar que vamos a utilizar en toda la asignatura) vamos a llevar a cabo las siguientes operaciones:

Creación y borrado de una base de datos relacional.

Creación de tablas.

Modificación y borrado de tablas.

Creación y borrado de vistas.

Creación y borrado de una base de datos relacional

El estándar SQL92 no dispone de ninguna sentencia para crear ni para borrar una base de datos relacional, ya que como una base de datos no es más que

un conjunto de tablas, este lenguaje se concentra en la creación, modificación y

borrado de estas tablas. De lo que sí disponemos es de una sentencia más potente

que la creación de bases de datos y es la denominada CREATE SCHEMA, con la que se

pueden agrupar un conjunto de elementos de la base de datos que son propiedad de un usuario. La sintaxis es:

CREATE SCHEMA {[nombre_esquema] | [AUTHORIZATION usuario]} [lista-elementos]

Aunque todos los parámetros de la sentencia anterior son opcionales, como mínimo

debemos dar el nombre del esquema o el usuario. Para borrar el esquema:

DROP SCHEMA nombre_esquema {RESTRICT|CASCADE}

Restrict hace que el esquema sólo se pueda borrar si no contienen ningún

elemento, mientras que si elegimos Cascade borraremos el esquema aunque no esté completamente vacío.

Creación de tablas Para crear una tabla es necesario utilizar la sentencia Create table, en la

que definiremos el nombre de tabla y después de definición de cada columna con el tipo de daos o el dominio y sus restricciones:

CREATE TABLE departamentos

(nombre_dep CHAR(20),

ciudad_dep CHAR(20),

telefono INTEGER DEFAULT NULL,

PRIMARY KEY (nombre_dep, ciudad_dep)

);

Creamos así una tabla de departamentos de una empresa, cuya clave

primaria es el nombre del departamento y la ciudad en que se encuentra. Podríamos añadir sentencias de restricciones de dominio, que podría ser:

CREATE DOMAIN dom_ciudades AS CHAR (20)

CONSTRAINT ciudades_validas

CHECK (VALUE IN (`Barcelona´, `Madrid´, `Valencia´))

Donde nos aseguramos con la orden CONSTRAINT (restricción de dominio) que todas las ciudades sean una de las 3 que hemos incluido posteriormente. Para

borrar un dominio utilizamos el formato:

DROP DOMAIN nombre_dominio {RESTRICT|CASCADE}

Donde al igual que antes restrict hace que el dominio solo se pueda borrar

si no se utiliza en ningún sitio,mientras que cascade borra el dominio aunque esté referenciado.

Tema 4

El lenguaje SQL

1. Sentencias de definición 2. Sentencias de manipulación

3. Sentencias de control 4. Sublenguajes especializados

Page 300: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 17

TEMA

Para modificar un dominio utilizamos la sentencia ALTER DOMAIN, así por ejemplo:

ALTER DOMAIN dom_ciudades DROP CONSTRAINT ciudades_validas;

Eliminamos la restricción de dominio antigua y ahora introducimos una

nueva restricción.:

ALTER DOMAIN dom_ciudades ADD CONSTRAINT ciudades_validas

CHECK (VALUE IN (`Barcelona´, `Madrid´, `Valencia´, `Mataro´));

La orden def_defecto nos permite especificar que nomenclatura queremos dar a nuestros valores por omisión. Por ejemplo, para un empelado que todavía no

se ha decidido cuánto ganará, podemos elegir que de momento tenga un suelo de

0 euros (DEFAULT 0.0) o bien que tenga un sueldo con valor nulo (DEFAULT NULL),

eso sí, la columna para la que daremos la definición por defecto de valor nulo debe admitir valores nulos.

Recordemos también que en el tema anterior vimos 3 políticas aplicables a los casos de borrado y modificación de filas que tienen una clave primaria

referenciada por claves foráneas, éstas eran: restricción, cascada y anulación; bien, cuando especificamos una clave foránea, SQL nos permite definir qué política de las

tres anteriores queremos seguir, sería asi:

FOREIGN KEY clave_secundaria REFERENCES tabla[(clave_primaria)]

[ON DELETE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]

[ON UPDATE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]

Así, NO ACTION corresponde a la política de restricción; CASCADE a la

actualización es cascada y SET NULL la anulación; además SET DEFAULT es una variante de SET NULL donde en lugar de valores nulos se puede poner el valor

especificado por defecto.

Modificación y borrado de tablas

Para modificar una tabla es preciso utilizar la sentencia ALTER TABLE, normalmente querremos añadir o borrar una columna, modificar las definiciones

por defecto para una columna, añadir o borrar alguna restricción de tabla.

Creación y borrado de vistas

Las vistas no existen realmente como un conjunto de valores almacenados en la base de datos, sino que son tablas ficticias denominadas derivadas (no

materializadas) construidas a partir de tablas reales. CREATE VIEW proyectos_por_cliente (codigo_cli, numero_proyectos) AS (SELECT

c.codigo_cli, COUNT(*)

FROM proyectos p, clientes c

WHERE p.codigo_cliente = c.codigo_cli

GROUP BY c.codigo_cli)

Todo el código anterior parte de una tabla clientes y una tabla proyectos

referenciada a la primera, y se ha creado una vista en la que obtenemos el código de cliente y el número de proyectos en los que se está trabajando con cada cliente

actualmente.

Para borrar una vista utilizamos la orden DROP VIEW e igualmente

elegiremos entre las opciones RESTRICT o CASCADE. Con la primera la vista no se borrará si está referenciada (por ejemplo en otra vista); en cambio con CASCADE

todo lo que referencia a la vista se borrará con esta.

DROP VIEW clientes RESTRICT;

Page 301: sistemas operativos, redes y bases de datos

18 · Bases de Datos 1

2. SENTENCIAS DE MANIPULACIÓN

Una vez creada la base de datos con sus tablas, debemos poder insertar, modificar y borrar los valores de las filas de la tabla. Esto es lo que vamos a llevar a

cabo en los siguientes apartados: Inserción de filas en una tabla

Borrado de filas en una tabla

Modificación de filas en una tabla

Consultas a una base de datos relacional

Inserción de filas en una tabla

La inserción de filas en una tabla se lleva a cabo con la sentencia INSERT INTO seguida del nombre de la tabla y de los valores a insertar:

INSERT INTO clientes

VALUES (10, `EGIGSA´, `37.248.573-C´, `ARAGON 242´, `Barcelona´, DEFAULT);

O bien si estos datos introducidos para esta fila no estuviesen en orden, le

indicados tras insert into el orden de los datos que introducimos (todo entre paréntesis) y procedemos luego a VALUES.

Borrado de filas en una tabla

Se utiliza la sentencia DELETE y se selecciona con WHERE las condiciones para borrar esos datos, por ejemplo:

DELETE FROM proyectos

WHERE codigo_cliente=2;

Se borrará de la base de datos proyectos todas las filas cuyo código_cliente

sea 2, y se pueden borrar multiples filas con esta sentencia.

Modificación de filas en una tabla

Se lleva a cabo con una combinación de sentencias: UPDATE seguido del nombre de tabla, SET para saber qué columna vamos a cambiar y WHERE donde se

establecen los condicionantes: UPDATE empleados

SET sueldo = sueldo+1000

WHERE num_proyec = 2

Le acabamos de subir en 1000 euros el sueldo a los empleados que están

trabajando en el proyecto número dos.

Consultas a una base de datos relacional Haremos uso de la sentencia SELECT seguido de las columnas que

queremos seleccionar de esa tabla y FROM la tabla de la que extraemos; si después

de SELECT hacemos uso de la sentencia AS renombraremos las tablas (alias). Así:

SELECT *

FROM clientes;

SELECT codigo_cli, nombre_cli, direccion, ciudad

FROM clientes

WHERE num_proyec=4;

En la primera consulta seleccionamos todas las columnas y filas de la base

de datos clientes; en cambio en la segunda solo seleccionamos las columnas

especificadas del proyecto número 4. Si resulta que de nuestros condicionantes se repiten resultados en la consulta, podemos evitar que aparezcan los repetidos con

la clave DISTINCT inmediatamente después de SELECT, por defecto, aparecerá todo (ALL).

Tras el WHERE pueden aparecer también consultas dentro de la consulta, y

predicados como BETWEEN, para establecer entre qué dos límites debe moverse

Page 302: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 19

TEMA

el resultado, IN para indicar que el resultado debe coincidir con alguno de los que

pongamos después entre paréntesis, LIKE implica alguna característica, por

ejemplo WHERE nombre_empl LIKE `J%´ implicará que el empleado empiece por J o

WHERE nombre_emple LIKE `S _ _ _´ buscará aquellos empleados que empiecen por

S y tengan cuatro letras, como Sara. También aparecen otros predicados como IS

NULL para indicar que buscamos los nulos (o IS NOT NULL).

También podemos utilizar funciones de agregación, que son las que vemos en la tabla lateral, como por ejemplo:

SELECT COUNT (*) AS numero_dep

FROM departamentos

WHERE ciudad_dep = `LERIDA´;

Obtenemos así el número de departamentos que tenemos en la ciudad de Lérida. Tras la consulta, podemos pedir que la tabla se ordene con ORDER BY,

como por ejemplo:

SELECT codigo_empl, nombre_empl, apellido_empl, sueldo

FROM empleados

CORDER BY sueldo DESC, nombre_empl

Donde obtenemos las 4 columnas pedidas en SELECT sobre todos los

empleados (no hemos puesto ningún condicionante) y queremos que nos salda ordenado por el sueldo y, a igual sueldo, ordenado posteriormente por el apellido.

Además hemos pedido que nos lo ordene de mayor a menor sueldo (DESC).

A continuación vamos a llevar las mismas consultas que llevábamos a cabo

en la unidad anterior en lenguaje SQL, por tanto:

Combinación SELECT proyectos.codigo_proyecto, proyectos.precio, clientes.nif

FROM clientes, proyectos

WHERE clientes.codigo_cli=proyectos.codigo_cliente AND

clientes.codigo_cli=20;

Combinamos de dos tablas proyectos y clientes, aquellos proyectos que son

del cliente con código 20. Podemos ahorrarnos repetir proyectos y clientes,

utilizando un alias, como se ve en el ejemplo inferior, en el que hemos utillizado p para proyectos y c para clientes y hemos “limpiado” un poco el código:

SELECT p.codigo_proyecto, p.precio, c.nif

FROM clientes c, proyectos p

WHERE c.codigo_cli=p.codigo_cliente AND c.codigo_cli=20;

Haciendo uso de otro SQL más evolucionado, la sentencia anterior sería

SELECT p.codigo_proyecto, p.precio, c.nif

FROM clientes c JOIN proyectos p on c.codigo_cli=p.codigo_cliente

WHERE c.codigo_cli=20;

Combinación natural SELECT p.codigo_proyecto, p.precio, c.nif

FROM clientes c NATURAL JOIN proyectos p

WHERE c.codigo_cli=20;

Queda entendido que en clientes y proyectos debe existir una columna con

el mismo nombre para poder realizarse esta combinación natural. Al igual que en Lenguaje SQL teníamos combinación por la derecha, por la izquierda o completa. La

combinación interna es la que hemos realizado anteriormente, se pierden los valores de las dos tablas que no coinciden INNER JOIN, pero podemos hacer uso

de la combinación por la izquierda (NATURAL LEFT OUTER JOIN), por la derecha (NATURAL RIGHT OUTER JOIN) o combinación externa plena (NATURAL FULL

OUTER JOIN)

Funciones de agregación

COUNT Nº total de filas seleccionadas

SUM Suma valores de una columna

MIN Valor mínimo de la columna

MAX Valor máximo de la columna

AVG Valor medio

Page 303: sistemas operativos, redes y bases de datos

20 · Bases de Datos 1

La Unión

Se lleva a cabo con la cláusula UNION SELECT ciudad

FROM clientes

UNION

SELECT ciudad_dep

FROM departamentos;

Intersección

Se lleva a cabo con la cláusula INTERSECT, pero de la misma forma que la Unión.

Diferencia

Se utiliza la cláusula EXCEPT como en el ejemplo: SELECT codigo_cli

FROM clientes

EXCEPT

SELECT codigo_cliente

FROM proyectos;

De esta consulta extraemos el código de clientes que no tienen ningún proyecto contratado ahora mismo con nosotros.

3. SENTENCIAS DE CONTROL

Además de todo lo anterior, debemos establecer una serie de mecanismos de control para resolver problemas de concurrencia por un lado (transacciones) y

garantizar la seguridad por otro (autorizaciones).

Una transacción es una unidad lógica y atómica de trabajo; es decir, es

un conjunto de sentencias que se ejecutan como si fuesen una sola. Para iniciar una transacción se utiliza la cláusula SET TRANSACTION y para finalizarla COMMIT

(confirma todos los cambios producidos) o ROLLBACK (deshace todos los cambios desde el inicio de la transacción)

SET TRANSACTION READ WRITE;

UPDATE empleados SET sueldo=sueldo-1000 WHERE num_proyec=3;

UPDATE empleados SET sueldo=sueldo+1000 WHERE num_proyec=1;

COMMIT;

Acabamos de aumentar en 1000 el sueldo de los empleados del proyecto 3

y, a la par, disminuir en 1000 el sueldo de los empleados del proyecto 1.

Las autorizaciones se llevan a cabo con la sentencia:

GRANT privilegios ON objeto TO usuarios [WITH GRANT OPTION]

Donde privilegios puede ser sustituido por ALL PRIVILEGES (todos los

privilegios), USAGE (según el objeto), SELECT (Consultas), INSERT [Columnas] (inserción de según qué columna), UPDATE, DELETE, REFERENCES. Los objetos

pueden ser un dominio, una tabla o una vista; y por fin, los usuarios pueden ser

todos (PUBLIC) o una lista de identificadores de usuario. Asimismo, se puede utilizar la opción WITH GRANT OPTION, que permite al usuario autorizado a

autorizar a otros usuarios con los mismos privilegios que él ha sido autorizado.

Para desautorizar la orden utilizada es REVOKE:

REVOKE [GRANT OPTION FOR] privil ON objeto TO usuarios [RESTRICT|CASCADE]

La opción Restrict no nos permite desautorizar a un usuario si éste ha

autorizado a otros y la opción cascada sí, y además hace que queden todos desautorizados a la vez.

Page 304: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 21

TEMA

4. SUBLENGUAJES ESPECIALIZADOS

Para poder utilizar el SQL desde un lenguaje de programación, podemos utilizar el SQL hospedado y

para ello precisamos de un precompilador que separe las sentencias del lenguaje de programación de las del

lenguaje de base de datos. Una alternativa interesante

son las tuinas SQL/CLI. El precompilador separa las sentencias del SQL y las sentencias de programación;

así donde hay una sentencia de acceso a la base de datos, tendremos una llamada a la interfaz del SGBD.

Todas las sentencias que hemos usado hasta

ahora son las mismas que se van a seguir usando pero precedidas de la cláusula EXEC SQL.

Las SQL/Call-Level Interface, denominadas de

forma abreviada CLI permiten que aplicaciones desarrolladas en un cierto lenguaje de programación

puedan incluir sentencias SQL mediante llamadas a

librerías; por ejemplo la interfaz ODBC define una librería de funciones que permite a las aplicaciones

acceder al SGBD utilizando el SQL.

Lenguaje hospedado

Page 305: sistemas operativos, redes y bases de datos

22 · Bases de Datos 1

TEMA 5 INTRODUCCIÓN AL DISEÑO DE BASES DE DATOS

1. INTRODUCCIÓN AL DISEÑO DE BASES DE DATOS

El diseño de una base de datos consiste en definir la estructura de los datos

que debe tener la base de datos en un sistema de información determinado; así que deberemos definir los atributos, dominios de atributos, claves primarias y

foráneas, etc.

Las etapas de diseño que reconocemos en una base de datos son tres:

Diseño conceptual: Obtenemos aquí una estructura de la información de la

futura BD independiente de la tecnología a emplear, el resultado se sitúa en el

mundo de las concepciones; así que nos concentraremos únicamente en la problemática de la estructura de la información sin tener que preocuparnos de

resolver cuestiones tecnológicas. Uno de los modelos de datos de alto nivel más empleados es el modelo entidad-interrelación (entity-relationship), que

abreviaremos con la sigle ER y es el que utilizaremos en el siguiente capítulo.

Diseño lógico: Partimos del diseño conceptual anterior ajustando el modelo

obtenido al SGBD con el que implementaremos la base de datos; aprenderemos a transformar un modelo ER en un modelo relacional.

Diseño físico: Transformaremos la estructura obtenida en el diseño lógico con

el objetivo de conseguir mayor eficiencia.

2. DISEÑO CONCEPTUAL: EL MODELO ER Dentro de este modelo distinguiremos las construcciones básicas y las

extensiones.

CONSTRUCCIONES BÁSICAS

Por entidad entendemos un objeto del mundo real que podemos distinguir

del resto de objetos y del que nos interesan algunas propiedades (que denominaremos atributos). Las entidades, como la entidad EMPLEADO de la

figura lateral se representan con un rectángulo y su nombre en mayúsculas en el interior. Los atributos se representan mediante un nombre en minúsculas unido con

un guión al rectángulo de la entidad. La clave primaria de entre todas las

candidatas se subraya para distinguirla del resto de las claves (dni).

Definimos interrelación como una asociación entre entidades, y en ocasiones estas interrelaciones también tendrán atributos, y al igual que los de las

entidades, tendrán un cierto dominio. Estudiaremos este aspecto profundizando en

el grado de las interrelaciones, este grado es el número de entidades que asocia una interrelación. Las interrelaciones se representan con un rombo que une

las dos entidades relacionadas y, a veces, con un atributo que califica esta relación. Una relación binaria es aquella que se da entre dos entidades. Por ejemplo, en la

relación estudiante-asignatura que tenemos en la figura lateral, es una relación

binaria que relaciona dos entidades y que queda calificada por el atributo nota. Nótese que para cada alumno que cursa una determinada materia, existe una nota,

y por ello obtenemos la interrelación en el nivel de clase y, más abajo, en el nivel de ocurrencias.

La conectividad de una relación expresa el tipo de correspondencia que se establece entre las ocurrencias de las entidades asociadas en esta interrelación.

Así, a nivel binario podemos tener:

Conectividad uno a uno (1:1): Ponemos un 1 al lado de cada entidad. Por

ejemplo si tuviésemos una interrelación binaria de una empresa que asocia delegaciones con capitales de provincia; expresando que en cada capital solo

Tema 5

Introducción al diseño de bases de datos

1. Introducción al diseño de

bases de datos 2. Diseño conceptual: El

modelo ER

3. Diseño lógico: Del modelo ER al modelo relacional

Entidad

Interrelación binaria

Page 306: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 23

TEMA

hay una delegación y que además tenemos delegaciones en todas las capitales

de provincia, la conectividad sería 1:1. Conectividad 1:N: Conectividad despacho, empleado con la relación Asignación.

Resulta que todo despacho debe estar ocupado, con uno o más empleados y

que todo empleado tiene despacho pero solo uno. Por tanto en el lado de despacho pondremos un 1 y en el lado de empleado una N.

Conectividad M:N: Varios a varios. Así las notas que un estudiante puede tener

en una misma asignatura, no tiene porqué ser solo una, sino que puede tener varias hasta que consiga aprobarla; de la misma forma, una misma asignatura

es cursada por varios estudiantes, con lo cual tenemos también muchas notas.

Es muy habitual que las interrelacionas binarias M:N y todas las n-arias (>2)

tengan atributos, en cambio las binarias 1:1 y 1:N no tienen por qué tenerlos; dado que siempre se le pueden asignar atributos a la entidad del lado N en el caso de

1:N y a cualquiera de las dos en el caso 1:1.

En algunos casos además se da una dependencia de la existencia, en la

cual una entidad individual solo9 puede existir si hay como mínimo otra entidad individual asociada con ella mediante una interrelación binaria determinada. Por

ejemplo, en el modelo lateral vemos que la entidad empleado es obligatoria (línea

perpendicular que la cruza) en su relación con dirección es decir, cada departamento tiene un empleado (y sólo uno) que le sirve de director; pero no

todos los empleados tienen porqué ser directores de departamento, (circunferencia).

Muchas veces, el modelo binario no nos sirve para modelas todas las

situaciones de la vida real; así por ejemplo, retomando el ejemplo del alumno que

se matricula en una asignatura, si la suspende, tiene que volver a matricularse y volverá a obtener, como resultado de ello, otra calificación. Nos interesa modelar

esta situación y, en este caso hablaremos de una relación ternaria (además 1:1:1), en la que cada alumno obtiene para cada asignatura, una nota en cada semestre.

Las interrelaciones recursivas son aquellas en las que la misma entidad está asociada más de una vez. Un ejemplo sería persona y boda. Toda persona se

tiene que casar con otra persona, y normalmente en estos casos se refleja el papel o rol diferenta que tiene cada una de ellas en la interrelación; fijémonos además

que se trata de una relación de dependencia, establecida por los círculos que marcan cada rol en su relación.

Las entidades débiles son aquellas cuyos atributos no la identifican completamente, sino solo parcialmente y debe participar en una interrelación que

ayude a identificarle. Se representan con un rectángulo doble y la interrelación que ayuda a identificarla con una línea doble. Así, en el ejemplo lateral, la entidad

despacho no queda perfectamente definida por su número, sino que depende del

edificio en el que esté situada para definirse completamente (dado que un mismo despacho, el 106 puede existir en ambos edificios y ser distinto, lógicamente). Esta

interrelación obligatoriamente debe ser binaria con conectividad 1:N y la entidad débil debe estar del lado de la N. Además la entidad del lado 1 debe ser obligatoria

en la relación.

EXTENSIONES DEL MODELO ER

Estudiaremos dos extensiones: la generalización/especialización y las

entidades asociativas.

La generalización/especialización permite reflejar el hecho de que hay

una entidad general, que denominaremos aquí superclase, que se puede especializar en entidades subclase. Estas últimas tienen, además de las

características de la superclase a la que pertenecen, algunas características propia de su especialización.

Dependencia

Relación ternaria

Interrelación recursiva

Entidad débil

Page 307: sistemas operativos, redes y bases de datos

24 · Bases de Datos 1

Así, por ejemplo, en el modelo lateral,

observamos que tanto los directivos, técnicos como administrativos son subclases (por la flecha que les

une) de la superclase Empleado. Tienen los tributos DNI, nombre, apellido, dirección y teléfono de la

superclase, pero además el directivo tiene una

característica que no tienen los demás y es contar con coche de la empresa, el técnico tiene titulación y del

administrativo nos interesa la antigüedad. Además la generalización puede ser:

Disjunta/Solapada: Una misma ocurrencia no

puede aparecen en dos entidades subclase distintas (disjunta) o sí puede

(Solapada).

Total/Parcial: Toda ocurrencia de la entidad superclase debe pertenecer a

alguna de las entidades subclase (Total) o no (Parcial).

En el ejemplo anterior se trata de una generalización/especialización disjunta, total.

Las entidades asociativas son las que resultan de considerar

una interrelación entre entidades como si fuese una entidad, y tendrá el mismo nombre que la interrelación sobre la que se define. Así nos

permite tener interrelaciones en las que a su vez intervienen interrelaciones. Se denota una entidad asociativa recuadrando el rombo

de la interrelación de la que proviene Hay que considerar que el mecanismo de las entidades

asociativas subsume el de las entidades débiles y resulta todavía más

potente. En el ejemplo lateral hemos sustituido la entidad débil despacho que tiene la interrelación asignación con la entidad empleado;

y vemos en el diagrama inferior la sustitución. Observamos así que siempre que utilicemos una entidad débil podremos sustituirla pro una

entidad asociativa, pero no al revés. Hay ocasiones en las que no nos

interesa el cambio, sobre todo porque en el modelo ER resultan menos complejas y son suficientes para modelizar las situaciones que se

producen en el mundo real.

3. DISEÑO LÓGICO: DEL MODELO ER AL MODELO RELACIONAL

En esta etapa tenemos que transformar el modelo ER obtenido en la fase

anterior en una estructura de datos de modelo relacional. En este sentido las entidades originarán relaciones y las interrelaciones pueden dar lugar a claves

foráneas de alguna relación ya obtenida o pueden dar lugar a una nueva relación. Pasamos a analizar todos los casos posibles.

Transformación de entidades

Cada entidad ER pasa a ser como decíamos anteriormente, una relación del modelo relacional. Los atributos de la entidad serán atributos de la relación y, de

forma análoga, la clave primaria de la entidad, será la clave primaria de la relación.

Así, en el ejemplo lateral ya conocido de la entidad empleado, obtendríamos la relación:

EMPLEADO(DNI, NSS, nombre, apellido, sueldo)

Una vez transformadas todas las entidades, se hace necesario transformar

todas las interrelaciones en las que intervienen estas entidades.

Generalización/Especialización

Entidad asociativa

Entidad

Page 308: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 25

TEMA

Transformación de interrelaciones binarias

Conectividad 1:1: Sólo es necesario añadir a estas dos relaciones ya

convertidas una clave foránea que referencia a la otra relación. En el ejemplo

lateral, donde para cada ciudad hay una y solo una delegación, tenemos dos opciones y ambas referencian correctamente la relación:

DELEGACION(nombre_del,…, nombre-ciudad)

Donde{nombre-ciudad} referencia CIUDAD

CIUDAD (nombre-ciudad…)

DELEGACION (nombre-del,…)

CIUDAD (nombre-ciudad, …nombre-del)

Donde {nombre-del} referencia DELEGACION

Conectividad 1:N: Solo debemos añadir en la relación correspondiente a la

entidad del lado N, una clave foránea que referencie la otra relación. Así en el ejemplo lateral donde un empleado puede tener solo un despacho, pero este

despacho ser a su vez de varios empleados, la interrelación se transforma en:

DESPACHO (desp, ….)

EMPLEADO (emp, …, desp)

Donde {desp} referencia DESPACHO

Conectividad M:N: Una interrelación M:N se transforma en una relación. Su

clave primaria estará formada por los atributos de la clave primaria de las dos

entidades interrelacionadas. Los atributos de la interrelación serán atributos de la nueva relación. Así el ejemplo lateral se convierte en:

ESTUDIANTE (est, …) ASIGNATURA (asign, …)

EVALUACION (est,

asign, nota)

Donde {est} referencia ESTUDIANTE y {asign} referencia

ASIGNATURA

Influencia de la existencia de dependencia: Hay que tener en cuenta que

si una de las entidades es opcional en la interrelación y la transformación ha

consistido en poner una clave foránea que corresponde a la otra entidad, entonces esta clave foránea puede tomar valores nulos. Así en el primer

ejemplo de esta página, si no en todas las ciudades existiesen delegaciones y optamos por la segunda opción, tendremos en cuenta que nombre-del puede

tomar valores nulos; en este caso nos decantaremos por la primera opción.

Transformación de interrelaciones ternarias

La transformación de una relación ternaria siempre da lugar a una

nueva relación, que tendrá como atributos las claves primarias de las tres

entidades interrelacionadas y todos los atributos que tenga la interrelación. Ahora bien, la clave primaria de la nueva relación depende de la

conectividad de la misma; y por tanto estudiaremos los casos posibles:

Conectividad M:N:P: En este caso la clave primaria de la nueva

relación está formada por las claves primarias de las tres entidades interrelacionadas. Por ejemplo, estudiando el caso de la imagen

lateral, la interrelación sería:

ESTUDIANTE (est, …)

ASIGNATURA (asign, …)

SEMESTRE (sem, …)

EVALUACIÓN-SEMESTRAL (est, asign, sem, nota) donde {est} referencia

ESTUDIANTE, {asign} referencia ASIGNATURA y {sem} referencia SEMESTRE

Conectividad 1:1

Conectividad 1:N

Conectividad M:N

Conectividad M:N:P

Page 309: sistemas operativos, redes y bases de datos

26 · Bases de Datos 1

Conectividad M:N:1: La clave primaria de la

nueva relación está formada por todos los atributos que forman las claves primarias de las

dos entidades de los lados de la interrelación etiquetados como M y N. Así para el ejemplo lateral obtenemos como resultado:

MAESTRO (codigo-maestro, …)

CURSO (codigo-curso, …)

ESCUELA (codigo-escuela, …)

DESTINO (codigo-maestro, codigo-curso, codigo-escuela) donde {codigo-

maestro} referencia MAESTRO, {codigo-curso} referencia CURSO y {codigo-

escuela} referencia ESCUELA

Conectividad N:1:1: La clave primaria la forman la clave primaria de la

entidad del lado N y los que forman la clave primaria de cualquiera de los dos

lados con conectividad 1. Así para el ejemplo lateral escogemos el siguiente ejemplo de los dos posibles:

HORA-SEMANAL (codigo-hora, …)

AULA (codigo-aula, …)

ASIGNATURA (asign, …)

CLASE (codigo-hora, codigo-aula, asign, duracion) donde {codigo-hora}

referencia HORA SEMANAL, {codigo-aula} referencia AULA y {asign}

referencia ASIGNATURA

Conectividad 1:1:1: La clave primaria la forman la clave primaria de dos

entidades cualesquiera de las que forman la relación. Por ejemplo en la

interrelación que registra la información de defensas de los proyectos de fin de carrera, intervienen el estudiante, el proyecto y el tribunal. De las 3 opciones

disponibles, hemos elegido la siguiente:

TRIBUNAL (trib, …)

ESTUDIANTE (est, …)

PROYECTO (proy, …)

DEFENSA (trib, est, proy, fecha-defensa) donde {trib} referencia TRIBUNAL

{EST} referencia ESTUDIANTE y {proy} referencia PROYECTO

Transformación de interrelaciones n-arias

Es una generalización de lo explicado para las ternarias; consistirá pues en la obtención de una nueva relación que contiene todos los atributos que forman las

claves primarias de las n entidades interrelacionadas y todos los atributos de la interrelación. Además, si todas las entidades están conectadas con muchos, la clave

primaria de la nueva relación se formará por los atributos de las claves de las n entidades interrelacionadas; si una o más entidades están conectados con 1,

entonces la nueva clave primaria tendrá n-1 claves interrelacionadas, con la única

condición que la clave no incluida pertenecerá a una conexión 1.

Transformación de interrelaciones recursivas

Las interrelaciones recursivas se tratan igual que el resto de las interrelaciones; por ello si tiene conectividad 1:1 ó 1:N da lugar a una clave

foránea, mientras que si la conectividad es M:N o n-aria, originará una nueva relación. Así para el ejemplo de la persona y la boda, el resultado puede ser:

PERSONA (codigo-per, codigo-conyuge …) donde {codigo-conyuge} referencia

PERSONA y codigo-conyuge admite valores nulos.

Conectividad M:N:1

Conectividad N:1:1

Conectividad 1:1:1

Conectividad 1:1:1

Page 310: sistemas operativos, redes y bases de datos

Bases de Datos 1 · 27

TEMA

Transformación de entidades débiles

Se traducen al modelo relacional igual que el

resto de entidades, con una pequeña diferencia; siempre se encuentran en el lado N de una interrelación

1:N que completa su identificación; así pues la clave

foránea debe formar parte de la clave primaria de la relación correspondiente a la entidad débil. El ejemplo

se transforma tal y como se muestra a continuación:

EDIFICIO (nombre, direccion)

DESPACHO (nombre, numero, superficie)donde {nombre} referencia EDIFICIO

Transformación de la generalización/especialización

En este caso, cada una de las entidades

superclase y subclase se transforman en una relación:

La relación de la entidad superclase tiene como

clave primaria la clave de la entidad superclase y contiene todos los atributos comunes.

Las relaciones de las entidades subclase tienen

como clave primaria la clave de la entidad

superclase y contienen los atributos específicos de la subclase.

Si retomamos el ejemplo que vimos anteriormente

para la generalización/especialización, se traduciría así para el modelo relacional:

EMPLEADO (dni, nombre, direccion, telefono)

DIRECTIVO (dni, coche) donde {dni} referencia EMPLEADO

ADMINISTRATIVO (dni, antiguedad) donde {dni} referencia EMPLEADO

TECNICO (dni, titulo) donde {dni} referencia EMPLEADO

PROYECTO {pro, …}

TRABAJA (dni, pro, superficie) donde {dni} referencia TECNICO y {pro}

referencia PROYECTO

Transformación de entidades asociativas

Como una entidad asociativa tiene su origen

en una interrelación, la transformación de la

interrelación originaria es, al mismo tiempo, la transformación de la entidad asociativa.

CIUDAD (nombre-ciudad, …)

VIAJE (id-viaje, …)

RECORRIDO (nombre-ciudad, id-viaje) donde {nombre-

ciudad} referencia CIUDAD e {id-viaje} referencia

VIAJE

CLIENTE (codigo-cliente, …)

REPARTO (nombre-ciudad, id-viaje, codigo-cliente,

paq-car, paq-desc) donde {nombre-ciudad, id-viaje}

referencia RECORRIDO y {codigo-cliente} referencia CLIENTE

Finalmente, se propone una tabla que muestra los aspectos más básicos de todas las transformaciones estudiadas en este apartado:

Elemento modelo ER Transformación al modelo relacional

Entidad Relación

Interrelación 1:1 Clave foránea

Interrelación 1:N Clave foránea

Interrelación M:N Relación

Interrelación n-aria Relación

Interrelación recursiva Clave foránea para binarias 1:1 y 1:N Relación para binarias M:N y n-arias

Entidad débil La clave foránea de la interrelación identificadota forma parte de

Entidades débiles

Generalización/Especialización

Entidades asociativas

Page 311: sistemas operativos, redes y bases de datos

28 · Bases de Datos 1

la clave primaria

Generalización/especialización Relación para la entidad superclase Relación para cada una de las entidades subclase

Entidad asociativa La transformación de la interrelación que la origina es a la vez su transformación.

Texto elaborado a partir de:

Bases de datos I Rafael Camps Paré, Xavier Franch Gutiérrez, Carme Martín Escofet, Dolors Costal Costa

Febrero 2004

Page 312: sistemas operativos, redes y bases de datos

Bases de datos 2

TEMA 1 INTRODUCCIÓN A LOS SISTEMAS DE GESTIÓN DE BASES DE DATOS

1. FUNCIONALIDAD Y OBJETIVOS DE LOS SGBD

Entre la funcionalidad que se espera de una base de datos encontramos:

Consultas no predefinidas y complejas: Se debe pedir a un sistema de

base de datos que permita a los usuarios hacer consultas de cualquier tipo y complejidad, sin que estén preestablecidas, sin que se tenga que compilar un

programa exclusivamente para ello y que sea sencillo y cómodo para el usuario. Consultas del tipo; “Quiero un listado ordenado por apellidos de los alumnos

nacidos entre 1965 y 1971, que estén matriculados de 3 o menos asignaturas y

que vivan en Barcelona capital”. Flexibilidad e independencia: Interesa obtener la máxima independencia

posible entre los datos y los procesos usuarios, para que cuando existan

cambios tecnológicos se puedan implementar con facilidad. En ese sentido nos tiene que dar igual el Sistema operativo o el tipo de fichero en el que los datos

estén escritos (independencia física de los datos); pero es que además queremos que diferentes usuarios tengan unas visiones distintas e

independientes de la base de datos (como hablábamos en el tema anterior de

la visión de una base de alumnos desde el punto de vista del profesor o de la secretaría); a esto se le denomina independencia lógica de los datos.

Problemas de redundancia: Es necesario eliminar la redundancia de datos,

dado que cuando se quiere consultar alguno de ellos, podemos estar basando la consulta sobre datos anticuados o erróneos, lo cual revierte claramente en

una pérdida de integridad de los mismos. Además, cuando un dato es

calculado (o derivado) producto de dos o más datos; es el SGBD quien debe servir ese dato calculado en el momento, pues al programador o al usuario

puede habérsele olvidado realizar el cálculo tras actualizar los nuevos datos. Integridad de los datos: Se requiere un mantenimiento de alta calidad de los

datos en cualquier circunstancia. Cuando se define una base de datos, se

definen sus tipos y también las reglas de integridad que debe cumplir; reglas de dos tipos: las reglas de integridad del modelo (por ejemplo, no aceptar

datos duplicados) y reglas de integridad del usuario (por ejemplo no aceptar

alumnos de menos de 18 años en la universidad ni de más de 120). Además los procesos de backup y restauración tras un accidente, deben estar

automatizados y ser transparentes al usuario. Concurrencia de usuarios: Cuando muchos usuarios concurren en la misma

base de datos en modo lectura, el único problema es el rendimiento; pero si un

usuario o más están variando datos, se pueden dar problemas de interferencia;

se minimizan estos problemas con la transacción de BD; consiste en un conjunto de operaciones simples que se ejecutan de manera atómica, es decir

o se ejecutan por completo o no se ejecuta ninguna; nunca, en cualquier caso, se ejecutará parcialmente. Así por ejemplo si realizamos una transferencia de

efectivo de la cuenta A a la B; primero nos quitan el dinero de A y antes de ingresarlo en B sucede una caída de tensión; entonces ¿Dónde irá ese dinero?

Para evitar estos problemas se define una transacción de BD, que utilizará la

operación COMMIT para indicar que ya ha terminado; si no puede acabar la transacción, no llega a esta COMMIT, se deshará todo lo realizado, con la

operación denominada ROLLBACK. Además mientras tiene lugar esta transferencia, para que se ejecute felizmente, se aísla de las demás

operaciones con la técnica de bloqueo, que pone limitaciones a los accesos del

resto de las transacciones para que no interfieran; lo malo de esto es que produce esperas, retenciones y, en consecuencia, el sistema se ralentiza. El

esfuerzo actual de los SGBD se centra en minimizar estos efectos negativos.

Tema 1 Introducción a los sistemas de

gestión de bases de datos

1. Funcionalidad y objetivos de los SGBD

2. Arquitectura de 3 niveles de

los SGBD 3. Modelos de BD

4. Modalidades de uso del lenguaje

Page 313: sistemas operativos, redes y bases de datos

2 · Bases de Datos 2

Seguridad: No hacemos aquí referencia a los backups que ya habíamos

tratado anteriormente, sino a temas relativos a la confidencialidad,

autorizaciones, derechos de acceso, etc. Los datos manejados en bases de datos están en España protegidos por ley; y los diferentes sistemas de gestión

de bases de datos utilizan técnicas de limitar las autorizaciones e incluso de encriptación de datos.

2. ARQUITECTURA DE 3 NIVELES DE LOS SGBD

Encontramos dos niveles en toda base de datos: el nivel lógico y el nivel físico; el comité conocido como ANSI/SPARC definió en 1980 otra definición de

estos niveles, denominados esquemas:

Esquemas externos: Se sitúan las diferentes

visiones lógicas que los usuarios tendrán de las

partes de las BD que utilizarán. Esquema conceptual: Es único y global y sirve de

referencia para todos los sistemas: se describen aquí

las entidades tipo, atributos, interrelaciones, restricciones, reglas de identidad, etc. Así, los

esquemas externos se nutren en la parte que les

interese del esquema conceptual. Si por ejemplo en el esquema conceptual tenemos los atributos de

alumno: nombre, apellido1, apellido2… quizá en algún esquema externo aparezca el atributo persona,

que sea la refundición de

nombre+apellido1+apellido2. Esquema interno: Se corresponde completamente con el nivel físico del que

hablábamos anteriormente: caminos de acceso,

codificación de datos, gestión del espacio y del tamaño de la página….

Con esta nueva arquitectura de los SGBD la

independencia de los datos está asegurada; así,

hablaremos de independencia física, cuando los cambios en la organización física (esquema interno) no

afectan al mundo exterior (es decir, los esquemas externos). Si cambiamos, como se ve en la figura lateral

unos datos de un soporte a otro, no se verán afectados

ni los programas ni los usuarios directos; pero tampoco se tendrían que ver afectados por ejemplo si cambiamos

el método de acceso a un conjunto de registros determinados; solo deben variar las correspondencias

entre el esquema conceptual y el nivel físico, pero nada más.

La independencia lógica también está asegurada:

cuando existen cambios en el esquema conceptual, dichos cambios no afectarán a los esquemas externos

que no hagan referencia a entidades o atributos modificados; por otro lado cuando es efectúan cambios en un esquema externo,

solo debe afectar a los usuarios de dicho esquema, pero no a usuarios de otros

esquemas externos, ni al esquema conceptual ni, por supuesto al esquema interno.

Esquemas y niveles

Independencia física

Page 314: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 3

TEMA

3. MODELOS DE BD

Todo modelo de base de datos debe proveernos de estructuras de datos para construir la BD (tablas, árboles…), restricciones o reglas de identidad que deben

cumplir los datos introducidos y luego una serie de operaciones para trabajar con los datos: borrado, consulta, inserciones, búsquedas…

Existen 3 modelos principales de BD que vamos a estudiar según su evolución histórica:

Modelo Jerárquico: Sus estructuras son

registros interrelacionados en forma de árboles, son propios de los años sesenta.

Modelo en red: De principios de los 70, hay

registros e interrelaciones, aunque ya no obliga

como en el anterior, que un registro sea hijo de un solo registro.

Modelo relacional: Se basa en el concepto

matemático de relación, entendiéndola como tabla. El modelo relacional se limita al nivel

lógico (no hace consideración alguna sobre las representaciones físicas, por lo que nos da una

independencia total), mientras que los dos

modelos anteriores prerrelacionales sí.

En los últimos años se está extendiendo el modelo de BD relacional con objetos, añadiendo

tipos abstractos de datos (TAD) a los tipos

reconocidos y manipulados por la BD; esto acerca los sistemas relacionales al paradigma de la orientación a objetos.

4. MODALIDADES DE USO DEL LENGUAJE

Para poder utilizar el SQL desde un lenguaje de programación, podemos utilizar el SQL hospedado y

para ello precisamos de un precompilador que separe las sentencias del lenguaje de programación de las del

lenguaje de base de datos. Una alternativa interesante son las tuinas SQL/CLI. El precompilador separa las

sentencias del SQL y las sentencias de programación;

así donde hay una sentencia de acceso a la base de datos, tendremos una llamada a la interfaz del SGBD.

Todas las sentencias que hemos usado hasta ahora son las mismas que se van a seguir usando pero

precedidas de la cláusula EXEC SQL.

Las SQL/Call-Level Interface, denominadas de

forma abreviada CLI permiten que aplicaciones desarrolladas en un cierto lenguaje de programación

puedan incluir sentencias SQL mediante llamadas a

librerías; por ejemplo la interfaz ODBC define una librería de funciones que permite a las aplicaciones

acceder al SGBD utilizando el SQL.

Modelos de BD

Lenguaje hospedado

Page 315: sistemas operativos, redes y bases de datos

4 · Bases de Datos 2

TEMA 2 TRANSACCIONES EN LAS BASES DE DATOS

1. VISIÓN EXTERNA DE LAS TRANSACCIONES

Una transacción es un conjunto de operaciones de lectura y/o

actualización de la BD que acaba confirmando o cancelando los cambios que se han llevado a cabo. Ya conocemos de la asignatura Base de Datos 1 que una

transacción acaba con la instrucción COMMIT o bien con la instrucción ROLLBACK

que anula todos los cambios.

Toda transacción debe cumplir las 4 propiedades de atomicidad,

denominadas propiedades ACID (Atomicidad, Consistencia, Aislamiento –

Isolated- y Definitividad):

Atomicidad: La operación de transacción o se realiza toda ella o no se realiza

ninguno de los cambios, por tanto aplicaremos ROLLBACK o COMMIT según nos

interese.

Consistencia: Toda transacción que parte de un estado consistente de la BD

la debe dejar también consistente tanto desde el punto de vista físico como del lógico.

Aislamiento: La transacción debe comportarse como si no hubiese más

usuarios accediendo a la BD, por tanto no debe verse afectada por otras transacciones simultáneas.

Definitividad: Los resultados de una transacción confirmada, tienen que ser

permanentes, con independencia de que se produzcan fallos o desastres.

Los tipos de interferencias que podemos encontrar si las transacciones no se

aíslan correctamente entre sí son:

Actualización Perdida: Se pierde el cambio que ha efectuado una operación

de escritura. Puede suceder porque o bien una de las transacciones simultáneas aborta la operación cuando la otra transacción ya ha leído el nuevo

valor, o bien a un orden de lectura inadecuado para dos transacciones

simultáneas. Veamos estos dos ejemplos:

T1 W(A) ABORT

T2 W(A) COMMIT

T1 R(A) W(A) COMMIT

T2 R(A) W(A) COMMIT

En la primera tabla al escribir en A (por ejemplo una cuenta bancaria) se puede sumar una cantidad, en T2 le puede añadir una cantidad a la inicial pero al

abortar el proceso T1 esa cantidad de la que parte no es correcta. EN el

segundo ejemplo el orden de lectura inadecuada para dos transacciones que realmente acaban tampoco es el adecuado

Lectura no confirmada: Se produce cuando una transacción lee un dato que

ha sido modificado por otra transacción que después aborta. Realmente como

no hay aislamiento de las transacciones se lee un dato no confirmado que,

finalmente, no es el correcto.

T1 R(A) W(A) ABORT

T2 R(A) W(A) COMMIT

Lectura no repetible: Tiene lugar cuando una transacción lee dos veces el

mismo dato y obtiene valores diferentes a causa de una modificación efectuada por una segunda transacción simultánea.

Tema 2

Transacciones en las bases de datos

1. Visión externa de las transacciones

2. Control de concurrencia mediante reservas

3. Recuperación 4. Consideraciones con respecto

al nivel de paralelismo

5. Otras visiones de las transacciones

6. Un caso de SGBD concreto: Informix

Page 316: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 5

TEMA T1 R(A) R(A) COMMIT

T2 R(A) W(A) COMMIT

Análisis inconsistente (fantasmas): Ahora el error se produce cuando se

producen interferencias respecto a un conjunto de datos (y no frente a un

único dato como hasta ahora). Cuando una transacción T1 lee unos datos, mientras otra T2 actualiza una parte, se puede obtener un estado de los datos

incorrectos que nunca hubiese tenido lugar si T1 y T2 ase hubiesen ejecutado una detrás de otra.

T1 R(A1) W(A1) R(A2) W(A2) COMMIT

T2 R(A2) R(A1) COMMIT

En este ejemplo de transferencia entre dos cuentas A1 y A2, los datos que lee T2 no son correctos, corresponden a un estado intermedio que no

deberían haberse leido fuera de la transacción T1.

Para evitar estos problemas existe lo que se llama nivel de aislamiento.

Podríamos aislar completamente todas las transacciones y todos los problemas

desaparecerían, pero esta protección exigiría una sobrecarga tremenda en términos de gestión de información de control, o de acceso a la base de datos. En SQL la

instrucción SET TRANSACTION permite relajar el nivel de aislamiento a uno de los

4 siguientes niveles:

Actualización

Perdida Lectura no confirmada

Lectura no repetible y análisis de

inconsistencias (excepto

fantasmas)

Fantasmas

READ UNCOMMITED

Sí No No No

READ COMMITEED

Sí Sí No No

REPEATABLE READ

Sí Sí Sí No

SERIALIZABLE Sí Sí Sí Sí

Estos niveles aparecen de menos a más estrictos y, por lo tanto, de menos a más eficientes. La definición del SQL estándar establece que un SGBD tiene la

obligación de garantizar al menos el nivel de aislamiento que se haya solicitado, pero puerde ser mayor, por lo que el único nivel que tienen la obligación de

implementar es el más alto, el serializable.

Se denomina nivel de paralelismo o concurrencia al grado de

aprovechamiento de los recursos de proceso disponibles según la ejecución de transacciones concurrentes en la BD. Es decir, el objetivo del paralelismo es

aumentar el trabajo útil para los usuarios por unidad de tiempo, intentando obviamente minimizar todo lo posible el coste de las tareas de control de la BD.

De momento nos interesa la serializabilidad de conflictos, en la que se parte de una visión simplificada de las transacciones, que se considera formadas

por dos únicos tipos que ya vimos anteriormente, la lectura (R) y la escritura (W); además estos métodos se implementarán sobre lo que denominamos gránulo que

es la unidad de datos controlada individualmente por el SGBD, que puede ser un único dato, una página o un bloque de disco, según el gestor. Llamaremos horario

o historia a un determinado orden de ejecución de las acciones de

lectura/escritura de un conjunto de transacciones.

Page 317: sistemas operativos, redes y bases de datos

6 · Bases de Datos 2

Un horario serial es aquel en el que no se produce ningún solapamiento

entre las acciones de las transacciones implicadas. Por ejemplo:

T1 R(A) R(B) W(C)

T2 R(A) W(A)

Y como no hay solapamiento, los 2 posibles horarios seriales podrían ser:

T1 R(A) R(B) W(C)

T2 R(A) W(A)

T1 R(A) R(B) W(C)

T2 R(A) W(A)

Dos acciones serán conflictivas si pertenecen a transacciones distintas y

el orden en que se ejecutan pueden afectar al valor del gránulo que haya leído una de las transacciones o al valor final del gránulo; por tanto, estas acciones serán no

conmutables. Por el contrario, un horario se considera correcto o serializable si el orden relativo de todos los pares de acciones es el mismo que en algún horario

serial. Un horario serializable siempre produce el mismo resultado que algún

horario serial. Veamos algunos ejemplos:

T1 R(A) W(A)

T2 R(A) W(A)

Horario no serializable, pues se pierde W(A) en T1 (Actualización perdida)

T1 R(A) R(A)

T2 W(A)

No serializable, lectura no repetible en R(A) en T1.

T1 R(A) W(B) R(E) W(E)

T2 R(C) R(D) W(A)

Es un horario serializable, ya que es equivalente a un horario serial en que T1 se

ejecuta antes que T2:

T1 R(A) W(B) R(E) W(E)

T2 R(C) R(D) W(A)

El grafo de precedencias es útil para encontrar interferencias en estos

horarios serializables. Para ello se construye el grafo siguiendo los siguientes

puntos:

Los nodos denotan transacciones

Los arcos se etiquetan con el identificador de gránulo siempre y cuando no

sean conmutables (se comprenderá mejor con el ejemplo). Dos operaciones no son conmutables cuando pertenecen a transacciones diferentes y el orden de

ejecución puede afectar al valor leído o al valor final del gránulo.

Cuando el grafo de precedencia tiene ciclos, existen interferencias y ello implica

que las transacciones no están correctamente aisladas. Para encontrar un horario serial equivalente, el nodo no debe tener ciclos y

entonces basta situarse en un nodo Terminal (al que no llegue ningún arco),

apuntar la transacción representada en el nodo, eliminar el nodo y todas las flechas que salgan del nodo eliminado, y repetir el proceso hasta que el grafo

quede vacío.

Vamos a comentar todo este proceso del grafo de precedencias con un ejemplo

que encontramos al margen de la página siguiente. Al comenzar a procesar el horario, vemos que las acciones 30 y 70 no son conmutables, dado que si se

Page 318: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 7

TEMA

efectúa antes W(C), la R(C) variará, por tanto dibujamos un primer arco en el

grafo, con el valor del gránulo afectado (C) y como nodos las transacciones, parte primero de T1 que es la primera que se realiza y la flecha llega a T2 que es la

segunda.

Si continuamos avanzando por el horario de ejemplo, llegamos a encontrar mas acciones no conmutables, la 40-60, 80-110, 90-120 y 70-130, con lo que el

grafo final nos queda de esta forma:

De lo que se desprende que el horario no es serializable.

Ponemos ahora otro nuevo ejemplo, que vemos en la figura lateral y al desarrollar el grafo de precedencias, obtenemos:

Como el grafo es acíclico, no existe ninguna interferencia, por lo que

ahora sí podemos encontrar los horarios seriales equivalentes. Debemos comenzar con un nodo Terminal, en este caso, solo existe T1; lo

eliminamos, junto con las flechas que de él parten y nos queda:

Procedemos ahora igual con T2, y luego podemos escoger indistintamente T3 ó T4, con lo cual los dos horarios seriales equivalentes serían: T1, T2, T3, T4 y también

T1, T2, T4 y T3.

La recuperabilidad hace referencia a las interferencias que se producen

al cancelar transacciones, referencia de la que se hacía caso omiso en la serializabilidad en la que considerábamos que no existía la posibilidad de cancelar o

abortar una acción ya comenzada. Un horario, incluyendo las acciones COMMIT y

ABORT cumple el criterio de recuperabilidad, si ninguna transacción T1 que lee o

escribe un gránulo escrito por otra transacción T2, confirma sin que antes lo haya

hecho T2.

Horario no serializable

# T1 T2 10 R(A)

20 R(B) 30 R(C)

40 R(B) 50 R(E)

60 R(C) 70 W(C) 80 W(B)

90 W(E) 100 W(A)

110 W(B) 120 R(E) 130 R(C)

140 Commit 150 Commit

Horario de ejemplo serializable

# T1 T2 T3 T4

10 R(A) 20 W(A)

30 R(A) 40 R(B) 50 W(B)

60 R(A) 70 R(B)

80 R(D) 90 W(D)

100 R(E)

110 W(E) 120 R(F)

130 R(D) 140 Commit 150 Commit

160 Commit 170 Commit

Page 319: sistemas operativos, redes y bases de datos

8 · Bases de Datos 2

T1 W(A) ABORT

T2 W(A) COMMIT

Este horario anterior según es serializable, pero no es recuperable, dado que ahora se puede cancelar una acción comenzada, esto se podría arreglar con el

siguiente orden horario:

T1 W(A) ABORT

T2 W(A) COMMIT

2. CONTROL DE CONCURRENCIA MEDIANTE RESERVAS

Hay diversas técnicas de control de concurrencia, pero sin duda la más utilizada con diferencia en los sistemas comerciales es el control mediante reservas.

La idea básica es que una transacción tiene que obtener una reserva de un gránulo

antes de poder operar sobre el mismo. Existen dos tipos de reservas, las compartidas (que permiten llevar a cabo lecturas de un gránulo) y las exclusivas

(permiten realizar lecturas y escrituras). En un momento dado, un mismo gránulo puede estar reservado para n transacciones con modalidad S o para una única

transacción en modalidad X. Una vez pedida la reserva, por ejemplo lock (granulo, modalidad) se

desbloquea con el comando unlock (granulo). Si una reserva no puede concederse,

se suspende la ejecución de la transacción, y cuando se libera esta reserva de gránulo, el SGBD trata de reanudar la ejecución de alguna transacción que haya

quedado suspendida. Si las transacciones reservan los gránulos justo antes de operar y los

liberan inmediatamente después, es evidente que podrían producirse exactamente

las mismas interferencias que si no se hace nada, por ello toda transacción debe cumplir lo que se denomina protocolo de reservas en dos fases (PR2F): Si una

transacción reserva cualquier gránulo en la modalidad adecuada antes de operar, nunca adquiere o refuerza una reserva después de haber liberado cualquier otra

antes. Con este protocolo conseguimos alterar horarios no serializables para

convertirlos en serializables. Por ejemplo:

T1 R(A) W(A)

T2 R(A) W(A)

Ante la posible interferencia de actualización perdida, al aplicar PR2F:

T1 L(A.X) R(A) W(A) UL(A)

T2 L(A,X) --- --- R(A) W(A)

Ahora ponemos otro ejemplo, frente a:

T1 W(A) ABORT

T2 W(A)

T1 L(A,X) W(A) UL(A) ABORT

T2 L(A,X) --- --- W(A) UL(A)

Observamos que ahora no hemos solucionado nada, y es que debemos

recordar que estre protocolo PR2F convertía en serializable los horarios, pero no en recuperables, para ello debemos aplicar el PR2F estricto que no libera ninguna

reserva hasta que acaba con COMMIT o ABORT indistintamente. Ya con este nuevo protocolo obtendremos y habremos solucionado el problema:

T1 L(A,X) W(A) ABORT (UL(A))

T2 L(A,X) --- --- W(A)

Page 320: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 9

TEMA

Con el PRF2 estricto conseguimos simplificar la implementación y el uso del

sistema, eliminamos la posibilidad de cancelaciones en cascada aunque como contrapartida, el nivel de paralelismo que permite alcanzar es más bajo.

Se dice que se produce un abrazo mortal cuando la ejecución de dos o

más transacciones queda suspendida porque todas necesitan que otra de las

transacciones implicadas en el abrazo libere alguna reserva ya obtenida. Por ejemplo:

T1 L(A,S) R(A) L(B,S) --

T2 L(B,X) W(B) L(A,X) --- ---

T2 no puede continuar porque T1 tiene reservada en modalidad lectura el

gránulo A, pero no se puede compartir, mientras que T1 está esperando que T2 libere B que lo tiene reservado para escritura. Para saber cuando se puede producir

un abrazo mortal, podemos dibujar los grafos de espera, que conviene no

confundir con los grafos de precedencia aunque sobre el papel se parezcan bastante. El grafo de espera se caracteriza por:

Evoluciona a lo largo del tiempo, a medida que las transacciones adquieren o

liberan reservas.

Los nodos denotan transacciones

Los arcos se etiquetan con un identificador del gránulo que interviene en la

operación.

Cuando en un grafo de espera existan ciclos, tenemos un abrazo mortal.

En el primer ejemplo de la tabla lateral, si analizamos las operaciones desde la

10 hasta la 70, encontramos que la 30 y la 70 son incompatibles, por lo que hasta ese momento el grafo tendrá la forma (recordemos que evoluciona a lo largo del

tiempo):

Hasta que T2 no consiga la reserva de B no puede continuar su ejecución, por lo tanto solo T1 está activa, y esta liberación se consigue en 120 con el COMMIT

que libera todas las reservas. Por lo que en este horario no hay ningún problema, es serializable y recuperable.

En cambio, en el ejemplo siguiente (de 80 líneas), en le momento de ejecutar la acción de la línea 70 el grafo es igual al anterior, y lo tenemos justo debajo de la

tabla del ejemplo, pero en el momento de llegar a la línea 80 el grafo de espera es el último con el que nos encontramos, tenemos un ciclo y por tanto un abrazo

mortal.

Para resolver estos abrazos, los SGBD pueden optar por una de las tres

posibilidades siguientes:

Prevenirlos antes de que se produzcan.

Definir un tiempo de espera máximo que al ser superado, haga que se cancele

automáticamente toda transacción. Detectarlos y resolverlos una vez que se hayan producido. Es la opción más

común, la búsqueda de estos ciclos de espera a su vez pueden hacerse:

o Siempre que una transacción pida una reserva y no la obtenga

inmediatamente, esto implica que algo sucede; es la mejor forma pero implica una carga de trabajo excesiva a la BD.

o Cada cierto tiempo, que no debería ser demasiado largo. o Cuando existen transacciones sospechosas (al menos dos) porque

están en espera desde hace más de un cierto tiempo.

Horario

# T1 T2

10 LOCK(A,X) 20 R(A)

30 LOCK (B,X) 40 R(B) 50 LOCK (C,S)

60 R(C) 70 LOCK (B,X)

80 W(B) 90 LOCK (E,S)

100 R(E)

110 R(C) 120 COMMIT

# T1 T2 10 LOCK (A,X)

20 R(A) 30 W(A)

40 LOCK (B,X) 50 R(B)

60 W(B) 70 LOCK (B,X) 80 LOCK (A,X)

Línea 70

Línea 80

Page 321: sistemas operativos, redes y bases de datos

10 · Bases de Datos 2

En cualquier caso, una vez detectado lo único que puede hacerse es

romper el ciclo cancelando una o varias de las transacciones implicadas, generalmente se cancela la que se vea implicada en más abrazos mortales o la que

lleve menos tiempo en ejecución para deshacer menos trabajo.

Jerarquía de composición de gránulos

Hay muchas veces que se dispone de múltiples niveles de granularidad y esto afecta obviamente a los protocolos

implementados en el punto anterior. Pueden existir jerarquías de gránulos donde gránulos de dimensiones mayores pueden contener

subgránulos, o gránulos más pequeños. Así una reserva S o X de un

gránulo puede permitir acceder a los más pequeños sin llevar a cabo nuevas reservas.

Así, si una transacción tiene que acceder a todos o a una gran parte de los gránulos elementales que contiene otro gránulo, puede

incrementar el rendimiento haciendo menos peticiones de reserva, si reserva el

gránulo completo. Para leer todos los datos de la tabla T1 lateral, la transacción podría ser:

T1 L(T1,S) R(P1) R(P2) R(P3)

Para que este protocolo funcione perfectamente, cuando se pide una reserva de un gránulo debe comprobarse que no haya ninguna reserva

incompatible por parte de ninguno de sus subgránulos, ni de ninguno de los gránulos que lo contienen. Así para reservar cualquier gránulo en modo S, habrá

que reservar todos los gránulos que lo contienen, partiendo desde la raíz de la

jerarquía en modo IS (intención de lectura), de modo análogo existe la reserva en modo IX; las liberaciones de las reservas se harán en orden inverso al de

adquisición. La tabla de compatibilidad entre estas nuevas modalidades puede observarse en el lateral:

Las reservas IS de un gránulo dan derecho a pedir reservas de tipo S o IS de

los subgránulos, lo cual debe impedirse cuando otra transacción tenga reservado el gránulo para escritura (X).

Las reservas IX dan derecho a pedir reservas de tipo X o IX de los subgránulos,

lo cual debe impedirse si el gránulo ya ha sido reservado para lectura o escritura.

También existen las reservas SIX que no son estrictamente necesarios pero

pueden ser útiles pues permiten leer cualquier subgránulo (sin pedir reservas particulares) o pedir reservas de escritura: vienen a sumar los derechos de las

reservas S e IX.

Niveles de aislamiento

El SGBD siempre gestiona las reservas de escritura con el máximo rigor,

esto implica que todas las reservas con modalidad X se mantienen hasta la

finalización de la transacción. No obstante, las reservas para lectura pueden variar:

Nivel serializable: Igual al concepto anterior, las reservas se mantienen

siempre hasta que las transacciones finalizan. Nivel Repeatable Read: Las reservas S de lectura se mantienen hasta que la

transacción no necesite volver a leer cada gránulo.

Nivel Read Committed: Las reservas de lectura se mantienen hasta justo

después de la lectura del gránulo. Garantiza que lo que se lee se ha confirmado, ya que las reservas para cada actualización siempre se mantienen

hasta el final de la transacción.

Jerarquía de composición de gránulos

Tabla de compatibilidades

IS IX S SIX X IS Sí Sí Sí Sí No

IX Sí Sí No No No S Sí No Sí No No

SIX Sí No No No No X No No No No No

Page 322: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 11

TEMA

Nivel Uncommitted: No se efectúan reservas para la lectura, así que estos

datos pueden haber sido actualizados por una transacción todavía no

confirmada.

3. RECUPERACIÓN

Los mecanismos de recuperación tienen que garantizar la atomicidad y la

definitividad de las transacciones. Su objetivo primordial es que nunca se pierdan los cambios de las transacciones que ya han sido confirmadas y que no se

mantengan los cambios efectuados por transacciones que han sido canceladas.

El SGBD tienen que asegurar la cancelación voluntaria de las transacciones

a petición de la aplicación, la involuntaria a causa de fallos de aplicación, violaciones de restricciones de integridad… integridad frente a una caida del

sistema o por la destrucción total de la BD.

Vamos a distinguir a su vez la restauración de la reconstrucción.

La restauración si es hacia atrás debe ser capaz de deshacer los cambios

de una transacción abortada y si es hacia delante debe rehacer los cambios de una transacción confirmada. Para analizar estos cambios hay que tener en cuenta la

utilización de una memoria intermedia por parte del SGBD. No todas las peticiones de lectura/escritura van directamente a la BD, en un momento determinado puede

haber acciones de escritura que no han llegado a la BD en memoria externa y otras

que sí lo han hecho, y suele ser independiente del hecho de que las transacciones hayan confirmado o no: puede haber escrituras confirmadas que no hayan llegado

al disco. Para deshacer y rehacer cambios, el SGBD utiliza una estructura de datos

con información de cambios el dietario, que guarda un identificador por cada transacción, el estado anterior del gránulo modificado y el posterior; eso sí, para

que el dietario permita deshacer y rehacer transacciones, los registros de cambio

deben escribirse a partir de los datos existentes en las memorias intermedias, antes de que éstos lleguen a la memoria externa en la BD y las transacciones se

confirmen. Así, cuando una transacción aborta, se deshacen los cambios hechos hasta

ese momento. Sus registros de cambio en el dietario se recorren hacia atrás hasta

que se identifica el primer cambio y ahí se terminan de deshacer los cambios. Cuando se produce una caída del servicio, hay que deshacer los cambios de todas

las transacciones activas y rehacer las de todas las confirmadas; el problema es saber hasta qué cambio hay que deshacer y para eso existen los registros de

punto de control que identifican en qué último momento el SGBD llevó a la

memoria externa todos los cambios. Todo este proceso puede simplificarse si:

Antes de confirmar una transacción, el SGBD siempre lleva todos los cambios a

la memoria externa, así ante una caída nunca habrá que rehacer transacciones confirmadas.

El SGBD no lleva cambios de transacciones no confirmadas a la memoria

externa, entonces no será nunca necesario deshacer los cambios de transacciones canceladas.

El inconveniente de todas estas simplificaciones es que pueden empeorar el rendimiento o gastar demasiados recursos del SGBD.

Tras la restauración encontramos la reconstrucción: Para poder reconstruir

una BD después de una pérdida parcial habra que utilizar dos fuentes de información: una copia de seguridad correcta aunque anterior de la BD y el

contenido del dietario a partir del momento en que se hizo la copia de seguridad.

Page 323: sistemas operativos, redes y bases de datos

12 · Bases de Datos 2

4. CONSIDERACIONES CON RESPECTO AL NIVEL DE PARALELISMO

Hemos visto que con la utilización de reservas, unas transacciones pueden quedar bloqueadas hasta que otras terminen lo que estaban haciendo pero ¿y si

esa transacción está esperando que el usuario introduzca algún dato? Entonces la reserva puede alargarse un tiempo que podemos considerar infinito, pues el

usuario puede empezar a realizar otra tarea y olvidarse de la base de datos. En

estos casos se suelen hacer descomposición de transacciones posibilitando que otras transacciones accedan a los datos entre la ejecución de las transacciones

resultantes de la descomposición.

Otro aspecto a tener en cuenta es que la utilización de herramientas

de desarrollo deba permitir al programador ajustar el uso de las transacciones a gusto del programador y no conformarnos con utilizar el sistema por defecto que

utilice la herramienta.

Por último para prevenir abrazos mortales no es imprescindible la utilización de reservas explícitas que disminuyen el nivel de paralelismo; también

podemos reorganizar las transacciones para que accedan a los datos en un mismo

orden y así evitar que se tengan que esperar con reservas unas a otras.

5. OTRAS VISIONES DE LAS TRANSACCIONES

Todo lo estudiado en este módulo se basa en que la mayor parte de las

transacciones tendrán una duración muy corta; en casos especiales esto no es así, por motivos históricos o de rendimiento, grandes compañías implementan los

denominados monitores transaccionales que es un software que les permite hacer convivir distintos tipos de SGBD y otras aplicaciones de manera concurrente,

mientras que el monitor coordina el funcionamiento de cada uno de los gestores

implicados en una transacción. Para transacciones largas y persistentes pueden existir en su interior

transacciones convencionales que sí permitan reservas e incluso transacciones anidadas que pueden ser canceladas de dentro a afuera sin afectarse unas con

otras en su cancelación.

6. UN CASO DE SGBD CONCRETO: INFORMIX

En Informix el control de concurrencia se basa en reservas, existiendo dos

tipos de BD: ANSI, que escribe siempre todos los cambios en memoria externa

antes de confirmarla y NO-ANSI que permite activar o desactivar este comportamiento. Así para crear una BD:

CREATE DATABASE nombre [IN espacio_bd]

[WITH [BUFFERED LOG | LOG MODE ANSI]];

Se puede modificar el comportamiento de una transacción cuando no puede obtener una reserve de la siguiente forma:

SET LOCK MODE TO [WAIT (segundos) | NOT WAIT]

Con No wait, no espera; con WAIT puede esperar los segundos que se indiquen

antes de abortar o, si no se han puesto segundos, intentará continuar

indefinidamente. Al crear una tabla puede especificarse el nivel del gránulo por registros (row) o por páginas (page) con la siguiente sintaxis:

CREATE TABLE nombre_tabla (…) [LOCK MODE [ROW|PAGE]]

Page 324: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 13

TEMA

TEMA 3 PROGRAMACIÓN CON SQL

1. INTRODUCCIÓN A LAS TÉCNICAS DE SQL PROGRAMADO

El SQL es un lenguaje específico para definir y manipular BD pero se dice

que es un sublenguaje especial para la gestión de BD y no un lenguaje de programación completo dado que no permite declarar variables, ni construir bucles

ni comprobar condiciones.

En este sentido, para construir aplicaciones que puedan acceder a una BD,

se suele recurrir dentro del SQL a 3 aplicaciones:

El SQL hospedado donde las sentencias de SQL se encuentran incorporadas

directamente dentro de la aplicación, mezcladas con las sentencias propias del lenguaje.

El SQL/CLI, donde la aplicación se comunica con el SGBD mediante una

interfaz. JDBC que constituye la evolución propuesta por Java al modelo SQL/CLI.

2. PROGRAMACIÓN CON SQL HOSPEDADO

La idea básica del SQL hospedado es permitir la inserción de sentencias SQL dentro

de una aplicación desarrollada con un

determinado lenguaje de programación. Para que esto ocurra felizmente, contamos con los

recursos siguientes:

Un precompilador: Necesitamos una

herramienta capaz de separar las sentencias

SQL de las propias del programa anfitrión en el archivo fuente. Como resultado de

este proceso se obtienen dos archivos: el programa fuente original en el cual las

sentencias de SQL se han sustituido por llamadas a rutinas de la interfaz del SGBD y

un archivo que contiene las sentencias de

SQL. El primer programa fuente sin las sentencias SQL es tratado por el compilador

particular del lenguaje de programación, y a continuación el montador produce el

programa ejecutable. En cambio, el archivo

que contiene las sentencias SQL es analizado por el módulo de procesamiento de consultas del SGBD.

Mecanismos para definir y poder utilizar variables puente con el SQL, tanto

variables definidas y utilizadas por el programa fuente en una sentencia de SQL hospedado, como variables especiales definidas en el programa fuente para

asignar y recuperar los valores nulos de la BD. La incorporación de nuevas sentencias y cláusulas de SQL que no existen en el

SQL directo para poder procesar fila a fila los resultados de las distintas

consultas de SQL y facilitar así el tratamiento de errores.

Las principales características que encontramos en un programa con SQL

hospedado son las siguientes:

Tema 3

Programación con SQL

1. Introducción a las técnicas de SQL programado

2. Programación con SQL hospedado

3. Programación con SQL/CLI

4. SQL y Java

Compilación en SQL hospedado

Page 325: sistemas operativos, redes y bases de datos

14 · Bases de Datos 2

Las sentencias SQL se mezclan con las del programa anfitrión, indistintamente

en mayúsculas o minúsculas.

Las sentencias SQL van precedidas de la clave EXEC SQL.

Hay que marcar el final de las sentencias de SQL hospedado, en lenguaje C por

ejemplo con ;. Se declara el área de comunicaciones SQLCA que sirve para que el SGBD

informe al programa de los diferentes errores que pueden producirse en tiempo

de ejecución. Así se puede evaluar el éxito o fracaso de una sentencia SQL y continuar el programa en consecuencia.

Se declaran variables puente con SQL con BEGIN DECLARATE SECTION y END

DECLARATE SECTION; además se debe prefijar el nombre de la variable con dos puntos :nombre_variable. Podemos declarar estas variables al comienzo del

programa o en estructura de bloques como el lenguaje C, donde entonces la

visibilidad de cada variable queda restringida al bloque en que se declaró. Hay que tener en cuenta además que el tipo de datos reconocido por el

lenguaje SQL y el lenguaje anfitrión puede ser distinto; amén del

reconocimiento de los valores nulos. Para evitar este último problema, cada variable puente SQL tiene que tener una variable indicadora asociada si la

columna con la que está relacionada admite valores nulos. Así un valor

indicador igual a 0 significa que el valor no es nulo y que la variable puente contiene el valor buscado; un valor indicador negativo significa que queremos

asignar un valor nulo para la columna que tratamos, con lo cual el valor real de la variable puente es irrelevante; por último un valor indicador positivo indica

que la variable puente tiene un valor válido pero que puede haber sido redondeado, truncado, etc.

Gestión de errores: En SQL hospedado la gestión de errores es

responsabilidad de la aplicación. Los errores de código SQL son reconocidos por

el precompilador, pero los errores en tiempo de ejecución son tratados por dos variables la SQLCODE y la SQLSTATE. Tenemos dos porque la variable inicial

para los errores era SQLCODE pero al no existir un acuerdo sobre el valor de los distintos códigos en las diferentes SGBD, se optó por mantenerla de forma

histórica e inventar la SQLSTATE.

SQLCODE: Cuando se ha ejecutado la sentencia de SQL hospedado, se fija el

valor de la sentencia SQLCODE para indicar el estado de finalización de la misma, si SQLCODE vale 0, la sentencia se ha ejecutado con éxito; si vale

negativo, significa que se ha producido un error grave que impide la ejecución correcta de la sentencia; mientras que si vale positivo se ha producido una

situación de aviso, típica del redondeo o truncamiento (por ejemplo

SQLCODE=100 significa que no se han encontrado datos que cumplan las condiciones especificadas por la sentencia).

SQLSTATE: Consta de cinco caracteres, los dos primeros de la cadena

identifican la clase de error y los 3 últimos la subclase.

Manipulación de una BD

Inserción de filas en una tabla: Se lleva a cabo con la sentencia siguiente: INSERT INTO nombre_tabla

VALUES ({INDICATOR: var_1_ind] | constante|NULL}…)

Así en el lenguaje C nos quedaría: Void insertar_empleado()

{

Int estado;

Printf(“Introduce el DNI del empleado: “);

Scan f (“%s”, dni_empl);

….

Borrado de filas en una tabla DELETE FROM nombre_tabla [WHERE condiciones]

Page 326: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 15

TEMA

Modificación de filas en una tabla UPDATE nombre_tabla

SET col_k = … [WHERE condiciones]

Consulta de tablas: Este tipo de operación requiere sentencias añadidas que no

existen en el SQL directo, dado que habitualmente una consulta de este tipo

genera distintas filas de datos y los lenguajes de programación solo son

capaces de procesar una de estas filas cada vez. Por ello definimos dos tipos distintos, las consultas que dan como resultado una fila (por ejemplo una

búsqueda de empleado por el DNI) y la que produce o puede producir más de una fila de resultados.

Consultas de una fila

SELECT [ALL|DISTINCT] {exp.|*}

INTO :var_1 [INDICATOR :var_1_ind]…

FROM tabla [{, tabla] [WHERE condiciones]

Hay que especificar con INTO tantas variables puente como columnas o funciones de agregación hayan sido especificadas en la cláusula SELECT y

además en el mismo orden.

Consultas con cursor

Creamos una nueva estructura, el cursor, por el que se podrá desplazar el

programa, y se define con las sentencias DECLARE nombre_cursor CURSOR

FOR consulta 1 [UNION consulta2]

[ORDER BY col_k [, col_m]] [ASC|DESC]

La sentencia declare cursor define la consulta que se debe ejecutar y le asocia

un nombre de cursor; eso sí, la sentencia de declaración de un cursor concreto

debe preceder al resto de sentencias que puedan operar sobre ese mismo cursor. Una vez creado y realizada la búsqueda, para abrir el cursor se utiliza

OPEN nombre_cursor, para desplazarse avanzando una fila se utiliza FETCH nombre_cursor

INTO vr_1 [INDICATOR :var_1_ind]…

Y para cerrar el cursor se utiliza CLOSE nombre_cursor, no pudiéndose

volver a abrir o recuperar los datos de ese cursor de nuevo.

3. PROGRAMACIÓN CON SQL/CLI

El SQL/CLI permite que una aplicación desarrollado con un lenguaje de programación como puede ser C, pueda incorporar sentencias de SQL mediante la

llamada de subrutinas predefinidas disponibles en librerías. Está muy relacionado

con la interfaz ODBC de Microsoft. Con el SQL/CLI no se precisa precompilador, simplemente se monta la aplicación junto con la librería de subrutinas.

Las ventajas que nos aporta este tipo de programación son:

EL código de aplicaciones solo incorpora sentencias de l lenguaje de

programación, ya que las sentencias SQL quedan escondidas.

Permite desarrollar aplicaciones que no necesitan conocer de manera exacta las

sentencias de SQL antes de ser ejecutadas y aplicaciones además que no

dependen de las características propias de un SGBD concreto; así aunque cambiemos de SGBD las aplicaciones continuarán siendo válidas.

La gestión de errores se efectúa con las propias subrutinas de SQL/CLI y no del

SGBD. No se precisan variables puente ni variables indicadoras.

Estas subrutinas SQL/CLI se caracterizan por:

Pueden ser una función o una acción.

Page 327: sistemas operativos, redes y bases de datos

16 · Bases de Datos 2

El nombre consta de un prefijo SQL y el nombre real de la subrutina.

Cada rutina lleva asociados unos parámetros de entrada y salida y cada

parámetro un tipo de datos, existiendo concordancia entre el tipo de

parámetros y el tipo de datos que espera la subrutina. Las subrutinas siempre devuelven un código de error para indicar el estado en

que queda el programa después de ejecutarse.

Toda aplicación que utiliza subrutinas SQL/CLI establece primeramente una

conexión con el servidor, ejecuta las sentencias SQL y finaliza después la conexión. Eso sí el entorno de ejecución que se requiere tiene un conjunto de

sentencias que suelen ser para obtener memoria para almacenar datos relevantes.

Para obtener la conexión las sentencias suelen ser:

SQLAllocEnv: Busca memoria para almacenar datos de control global.

SQLAllocConnect: Datos de control de las conexiones establecidas.

SQLAllocStmt: Memoria para la información de control de las sentencias SQL.

Una vez tenida lugar la conexión generalmente se ejecutan las sentencias

SQLFreeStmt, SQLFreeDisconnect, SQLFreeConnect y SQLFreeEnv, que liberan los

recursos de memoria que habíamos reservado para la conexión.

La gestión de errores se lleva a cabo consultando los códigos de error prefijados que devuelve toda sentencia SQL/CLI. En cuanto a los tipos de datos

no suele haber gran problema pues son derivados directamente del ODBC que derivan directamente de los tipos de datos C. Por el contrario a lo que nos pasaba

en el SQL Hospedado, los valores nulos pueden ser perfectamente tratados por el

programa.

4. SQL Y JAVA

La solución propuesta por Java para el acceso y

manipulación de BD no parte de cero, sino que a partir de SQL/CLI y de su implementación ODBC construye un sistema

fiel a los principios del lenguaje, es decir, simpleza y elegancia. Java ofrece el JDBC que va más allá de lo que se

consigue con SQL/CLI que es ofrecer métodos para controlar el

posicionamiento de los cursores (previous, netxt…), métodos para modificar el contenido de tablas sin utilizar SQL, permite la

realización batch de un conjunto de modificaciones, etc.

Los drivers

Es necesario contar con drivers que son una implementación para poder trabajar con SGBD. Encontramos 4

tipos de drivers distintos (podemos ver los 4 tipos en la imagen lateral):

Tipo 1: Puente JDBC-ODBC más un driver ODBC: Con ese

driver Java llama al driver ODBC y se encarga de ocultar

toda su complejidad; eso sí el rendimiento no es todo lo

bueno que podía esperarse y obliga a que en la máquina cliente estén instalados los drivers ODBC correspondientes.

Tipo 2: API Nativo: Es un driver Java Parcial, convierte las

llamadas al JDBC en llamadas específicas del API del SGBD cliente; se puede entender como una simplificación del tipo

anterior que mejora bastante el rendimiento; requiero que

parte del driver esté cargado en la máquina cliente. Tipo 3: JDBC Red: Es un driver Java puro que convierte las

llamadas al API JDBC en llamadas a un servidor de red

intermedio. Es una implementación muy flexible.

Tabla de compatibilidades

Page 328: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 17

TEMA

Tipo 4: JDBC Nativo, también es un driver Java puro que permite llamadas

directas al protocolo nativo de red del SGBD sin una capa de software

intermedio.

Los tipos 1 y 2 se plantearon e implementaron como modelos transitorios hasta que la industria suministrase drivers Java puros; de hecho el puente JDBC-ODBC no

soporta las especificaciones JDBC 2.0 y el hecho de que la máquina cliente dependa de un sistema propietario le resta portabilidad. Una aplicación Java siempre tendrá

que contar con la existencia de una instalación previa, mientras que con los tipos 3

y 4 el driver es descargable, al igual que la propia aplicación o applet.

Estructura de un programa con JDBC Una aplicación que utilice el JDBC ha de seguir un esquema similar al siguiente:

Localización y carga del driver

Conexión con el SGBD

Operaciones de acceso y gestión de excepciones

Desconexión del SGBD

Para localizar y cargar el driver recordemos que debemos definir un PATH con la ruta del mismo, el driver es ifkjdbc.jar y por supuesto el programa tendrá que

importar explícitamente el API del JDBC, a través de import java.sql.*. Hechas estas dos cosas, ya estamos en condiciones de escribir las primeras líneas del

programa. Normalmente todo el código lo introduciremos en un bloque try-catch

para evitar errores de programa:

Conexión con el SGBD: conn = DriverManager.getConnection (url, Login,

Password). Más sencillo es inmposible. Esta expression peude variar al tratarse de un tipo de driver y otro. Nosotros de aquí en adelante, actuaremos sobre el

tipo 4. Para cerrar simplemente es necesaria la orden conn.close, sin necesidad de liberar recursos, pues ya lo hará Java por nosotros; comparemos este

método con el del SQL/CLI en cuanto a complejidad.

Operaciones de acceso y gestión de excepciones: Las sentencias se

envían precedidas de stmt.executeUpdate y entre paréntesis por ejemplo Insert Into….

Sentencias de modificación: Por ejemplo para actualizar datos en una tabla

podremos usar: stmt.executeUpdate (UPDATE Empleados….) para crear tablas por ejemplo Strip cmd = “CREATE TABLE…”

ExecuteQuery: Es el comando que utilizaremos cuando queramos realizar una

consulta; en este caso al ser una consulta devuelve un valor o un conjunto de

ellos a través del objeto JDBC resultSet (conjunto de filas obtenidas al realizar la consulta). Además JAVA nos permite desplazarnos por cualquiera de estas

filas y no obligatoriamente una a una y en orden; podemos ir al siguiente next, anterior, previous, una fila absoluta absolute(5) la 5ª fila en este caso, una

realtiva relative (-2) iríamos ahora a la 3ª pues estábamos en la 5ª, etc. Control de las transacciones: Las transacciones se realizan

automáticamente en Java, pero quizá nos convenga que tengan lugar en

momentos determinados, o tras realizar todo un conjunto de comandos, en

este caso deberemos comenzar el bloque try con conn.setAutoCommit (False) y luego realizar un conn.commit cuando queramos aceptar todo el conjunto de

sentencias introducidas. Sentencias preparadas: Se pueden preparar sentencias que luego se

ejecuten de manera continuada a travñes de PreparedStatement.

Procedimientos almacenados: Es parecido al ejemplo anterior, si bien las

sentencias preparadas se utilizan más para tareas reiterativas, los

procedimientos almacenados son una agrupación de sentencias que suelen formar una tarea lógica y se pueden crear a traves de CREATE PROCEDURE e

invocar a través de CallableStatement. Modificaciones por lotes: Al igual que en DOS, es posible almacenar en una

matriz interna de un objeto, una serie de sentencias de modificación para que

sean ejecutadas en lote, se consigue a través de stmtaddBatch (para ir uniendo

Page 329: sistemas operativos, redes y bases de datos

18 · Bases de Datos 2

sentencias) y se ejecutan con stmt.executeBatch. Como podemos observar, el

mecanismo no puede ser más sencillo a la par que muy práctico.

Page 330: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 19

TEMA

TEMA 4 COMPONENTES LÓGICOS DE UNA BASE DE DATOS

1. FUNCIONALIDAD Y OBJETIVOS DE LOS SGBD

Los principales componentes lógicos de una base de datos son dos: las

tablas y las vistas. Además de los componentes lógicos anteriores que serían los de datos, tenemos los componentes lógicos de control que pueden ser entre otros, los

procedimientos y los disparadores. Para un SGBD, una base de datos es un conjunto definido y relacionado de

componentes lógicos de datos y de componentes lógicos de control.

Recordemos que para crear una base de datos tenemos la orden CREATE DATABASE <nombreBaseDeDatos> El nombre debe ser único. El inicio del trabajo

lo marcaremos con BEGIN WORK y lo finalizaremos con COMMIT o con ROLLBACK. Para borrar una base de datos contamos con DROP DATABASE y para conectarnos

a ella y comenzar a trabajar con CONNECT TO <nombreBD>.

Tablas

Este es el componente lógico principal de la BD, y para crearla utilizaremos la sentencia CREATE TABLE <nombreTabla> (definicionColumnas,

definicionRestricciones). La definición de columnas incluye la definición del conjunto de columnas

que incorpora la tabla, separada por comas. Definiremos para la columna el

nombre, el tipo de datos, la definición por defecto y la restricción de columnas. El tipo de datos puede ser byte, carácter, date…, la definición por defecto, si

queremos permiten especificar los valores que se asignan a cada columna por omisión; mientras que las restricciones de columna están limitadas a una sola

columna no a todas las que forman una tabla determinada, y pueden ser NOT NULL, DISTINCT, UNIQUE, PRIMARY KEY y CHECK.

Podemos borrar tablas mediante la sentencia DROP TABLE y podemos

modificarla añadiendo, eliminando columnas o restricciones mediante la sentencia ALTER TABLE.

Vistas

Es el segundo componente lógico de datos de las BD. Una vista realmente

es una tabla derivada, su esquema y contenido derivan de otras tablas e incluso de otras vistas, mediante una consulta.

Partiendo de ello podemos pensar que dado que las vistas realmente son tablas, se deberían poder consultar y actualizar mediante sentencias SQL, y puesto

que son derivadas, su existencia no existe físicamente en la BD como las tablas

sino que se genera cada vez que se hace una petición a esa vista. Para crear la vista tenemos la orden CREATE VIEW <nombreDeVista>,

columnas as <sentenciasSelect> [WITH CHECK OPTION], y para borrar la vista DROP VIEW.

Por ejemplo sobre una tabla de departamentos podemos crear la vista: CREATE VIEW DeptRicos AS

SELECT * FROM Departamentos WHERE presupuesto>240000

Esta vista contendrá los departamentos de la tabla departamentos cuyo

presupuesto es mayor de 240.000. Una vez creada la vista podremos consultarla como si fuese una tabla

cualquiera de forma que para el usuario final este hecho es completamente

transparente. Ahora bien, existen problemas con los cambios de contenidos. Los cambios de contenido en una vista pueden suceder por dos razones:

Cambia el contenido de las tablas que intervienen en la definición de la vista.

Se ejecuta una petición de cambio directamente sobre la vista, y que el SGBD

tiene que traducir a un cambio sobre la tabla de la que parte.

Tema 4

Componentes lógicos de una base de datos

1. Componentes lógicos de datos

2. Componentes lógicos de control

3. Catálogo

Page 331: sistemas operativos, redes y bases de datos

20 · Bases de Datos 2

Este segundo aspecto puede ser fuente de problemas porque a veces el SGBD

dispone de diferentes alternativas para propagar un mismo cambio, y por ello no sabe cual elegir y muchas vistas no son actualizables. Solo serán actualizables estos

dos casos: La operación que queremos realizar en una operación de selección del álgebra

relacional sobre una única tabla o vista actualizable.

La operación es una selección + proyección de álgebra relacional siempre que

la proyección incluya todas las columnas clave (primaria o alternativas) y todas las columnas que incorporen la restricción NOT NULL.

Así pues aquellas vistas que, por ejemplo, incluyan operaciones de combinación de dos o más tablas o que incorporen funciones de agregación o la cláusula GROUP

BY no serán actualizables.

2. COMPONENTES LÓGICOS DE CONTROL

Los componentes lógicos de control que vamos a estudiar son los

procedimientos almacenados, los disparadores y los privilegios.

2.1. Procedimientos almacenados

Un procedimiento almacenado es una acción o función definida por un

usuario que proporciona un determinado servicio. Una vez creado el procedimiento se guarda en la BD y se trata como un objeto más de la misma. La utilidad de estos

procedimientos es para simplificar el desarrollo de aplicaciones, mejorar el

rendimiento de la BD y para encapsular un conjunto de operaciones que se efectúan en una BD.

En Informix para escribir procedimientos almacenados podemos utilizar dos tipos de sentencias: las propias del SQL (que no es un lenguaje

computacionalmente completo) y sentencias propias del SPL (Stored Procedure Language que lo complementa).

El conjunto de sentencias que forman el procedimiento se sitúan entre la

sentencia inicial CREATE PROCEDURE nombreProcedimiento (parametrosEntrada) y la sentencia final END PROCEDURE. Luego para ejecutar el procedimiento bastará

con EXECUTE PROCEDURE NombreProcedimiento (parametrosEntrada). En principio, un procedimiento almacenado devuelve un conjunto de

valores único como resultado de su ejecución; es decir, en términos de SQL, una

única fila. Destacan entre estas sentencias los siguientes valores:

Parámetros: Un procedimiento puede recibir un conjunto de parámetros de

entrada y devolver un conjunto de parámetros de salida como resultado de su ejecución. Y también podemos tener parámetros tanto de entrada como de

salida. Para cada parámetro de entrada habrá que darle un nombre y asociarle un tipo de datos y para los parámetros de salida es suficiente con indicar su

tipo de datos en la cláusula RETURNING.

Variables: Se definen con la cláusula DEFINE y debe tener asociado un

nombre y un tipo de datos; eso sí, debe dársele un valor a las variables antes de poderlas utilizar. Tenemos por un lado variables locales (opción por

defecto) cuyo ámbito de visibilidad queda restringido al procedimiento en el que se hayan definido; y variables globales (se utiliza para ello la cláusula

GLOBAL). La diferencia entre ambas es que los valores de las variables locales

quedan descartadas una vez finalizada la ejecución del procedimiento almacenado en el que se han definido, mientras que las globales se guardan y

evolucionan mientras está activa la conexión a la BD; se suelen utilizar éstas últimas para permitir que un conjunto de procedimientos almacenados

intercambien valores, pero hay que evitar su utilización pues no son una buena

práctica de programación.

Page 332: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 21

TEMA

Sentencias condicionales: La sentencia IF sirve para establecer condiciones

en el flujo de un procedimiento almacenado y se pueden establecer distintos

niveles de anidamiento con la sentencia ELIF. Sentencias iterativas: Además del FOR y el WHILE (el primero cuando se

sabe a priori el número de iteraciones que deben ejecutarse) añadimos el

FOREACH que se utiliza en bucles que pueden seleccionar y manipular más de una fila. Ésta es la sentencia más frecuente.

Gestión de errores: Podemos distinguir dos tipos de errores: los errores

predefinidos y los específicos del procedimiento. Podemos a su vez en cada uno de ellos actuar de dos formas: o no capturamos el error dentro del

procedimiento almacenado y dejamos que el mismo procedimiento cancele su

ejecución de manera inmediata (el error se reporta al nivel superior) o capturamos el error y el mismo procedimiento se responsabiliza de gestionarlo.

En este último caso, además el procedimiento puede no cancelar su ejecución o cancelarlo.

ON EXCEPTION: Esta sentencia permite especificar las acciones que hay que

llevar a cabo en cado de que se produzcan errores y debe especificarse dentro

del procedimiento almacenado. RAISE EXCEPTION: Permite generar nuestros propios errores, es decir, los

específicos dentro del procedimiento almacenado.

2.2. Disparadores

Los componentes vistos hasta ahora no son suficientes para modelar todo

lo que puede ocurrir en el mundo real. Si imaginamos una tabla de stocks de productos y queremos aplicar una regla para que cuando un producto quede por

debajo de 50 unidades se produzca una petición de 100 unidades más, podemos hacer dos cosas:

Añadir esta regla a todos los programas que actualizan el stock de los

productos. No es una solución muy convincente pues todo el código se

encontraría desperdigado por todo el programa, replicada y por lo tanto es difícil de localizar y de cambiar.

Realizar un programa adicional que haga un sondeo periódico de la tabla

comprobando la regla. En este caso aunque la regla está concentrada en un único punto, si el sondeo se hace ocasionalmente pierde su razón de ser y si se

hace muy a menudo se pierde eficiencia.

Para evitar esto la solución correcta es poder incorporar a la BD una regla del

tipo: “Cuando se modifique el stock de un producto y pase a ser menor que 50, hay que pedir 100 unidades nuevas” y esto es realmente un disparador.

Un disparador debe utilizarse para:

Implementar una regla de negocio como la que hemos visto antes.

Mantenimiento automático de una tabla de auditoría de la actividad en la BD,

como registro de los cambios que se hacen en la misma.

Mantenimiento automático de columnas derivadas, que se recalculan cuando se

cambian las columnas a las que hacen referencia. Comprobación de restricciones de integridad no expresables mediante CHECK

Eso sí, los disparadores no deben utilizarse cuando se pueden resolver fácilmente mediante otros mecanismos, como restricciones de clave primaria ni de

integridad referencial…

Para crear un disparador se utiliza la siguiente sintaxis:

CREATE TRIGGER <nombreDisparador> <acontecimiento> ON <nombreTabla> [REFERENCING referencia] [BEFORE ListaAcciones] [FOR EACH ROW listaacciones]

[AFTER ListaAcciones]

Page 333: sistemas operativos, redes y bases de datos

22 · Bases de Datos 2

Para cada tabla solo se puede tener un solo disparador para INSERT, uno

para DELETE y otro para UPDATE de cada una de las columnas. Las acciones especificadas como BEFORE se ejecutarán una sola vez antes que la sentencia que

activa el disparador; las de AFTER después de ejecutada la sentencia que la activa. Las acciones FOR EACH ROW se ejecutarán una vez por cada fila afectada por la

sentencia que activa el disparador e inmediatamente después de haberla

modificado, borrado o insertado.

Cuando se ejecuta una sentencia SQL contra una BD puede pasar que se activen disparadores y que se violen restricciones de seguridad a la vez. Frente a

esto, el sistema debe decidir qué hay que hacer en primer lugar e Informix retrasa la comprobación de las restricciones de seguridad hasta después de la activación de

los disparadores asociados, lo que permite añadir disparadores que reparen

restricciones de integridad

2.3. Privilegios

En una base de datos hay muchos usuarios y también muchos componentes y objetos y por supuesto, no todos los usuarios deberán acceder a

todos los objetos, para ello existen las autorizaciones. Una autorización es un privilegio que se otorga a un usuario o grupo de usuarios para realizar una

determinada operación sobre un cierto objeto de la BD. Permite la BD efectuar tres tipos de privilegios: de bases de datos, tablas y de procedimientos almacenados.

Privilegios de BD Cuando un usuario crea una BD tiene todos los privilegios sobre la misma y

será inaccesible a los demás usuarios hasta que lo autorice. Los privilegios que se pueden conceder son:

CONNECT: Permite al usuario conectarse a la base de datos, ejecutar select,

insert, update y delete (siempre que tenga los privilegios necesarios a posteriori), crear vistas, tablas temporales, otorgar privilegios sobre una tabla

(siempre que sea propietario o haya recibido el privilegio adecuado) y ejecutar alter o drop de una tabla (siempre que tenga los privilegios adecuados sobre la

misma). RESOURCE: Puede hacer todo lo que hace el usuario connect y además crear

tablas nuevas, índices nuevos, procedimientos almacenados nuevos y crear

disparadores.

DBA: Permite todo lo anterior y otorgar cualquier privlegio de BD, borrar y

acceder a cualquier objeto de la BD y ejecutar DROP DATABASE

Para la concesión de privilegios se utiliza la expresión:

GRANT <privilegio> TO <ListaUsuarios>, como puede ser GRANT CONNECT TO

“Maria”; y para revocar privilegios tenemos la sentencia REVOKE <privilegio> FROM <ListaUsuarios>

Privilegios de Tabla

Cuando un usuario crea una tabla será inaccesible para los demás hasta que les conceda privilegios sobre ella. Existen 7 privilegios sobre las tablas:

Insert

Delete

Select o bien Select de un conjunto de columnas

Update o bien Update de un conjunto de columnas

Referentes o bien Referentes de un conjunto de columnas, que permite realizar

borrados en cascada. Alter: Da derecho a añadir columnas y eliminarlas, cambiar el tipo de una

columna….

Page 334: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 23

TEMA

Para conceder todos los privilegios se pude utilizar la palabra clave All; además en

la sintaxis de privilegios de una tabla:

GRANT <listadeprivilegios> ON <nombreTabla> TO <usuarios [WITH GRANT OPTION

La última sentencia WITH GRANT OPTION añadida a un privilegio determinado no solo la concede, sino que permite al receptor transferirlo.

Igualmente cuando se revocan privilegios se utiliza la expresión:

REVOKE <privilegios> ON <tabla> FROM <usuarios> [CASCADE|RESTRICT]

Si se especifica CASCADE (por defecto) el SGBD eliminará en cascada todos los privilegios que el usuario revocado haya concedido usando el privilegio revocado.

Privilegios de Procedimientos Almacenados

Cuando se crea un procedimiento hay que especificar de entre los dos siguientes, que tipo de privilegios tendrá:

DBA-privileged: pueden crearse si el usuario tiene privilegio DBA y para

ejecutarlos sólo es necesario disponer del privilegio EXECUTE. Owner-privileged: Pueden ser creados por usuarios RESOURCE y para

ejecutarlos hayq ue tener el privilegio EXECUTE.

La sintaxis para conceder estos privilegios y para revocarlos es igual a la

conocida hasta ahora:

GRANT EXECUTE ON <procedimiento> TO <usuarios [WITH GRANT OPTION]

REVOKE EXECUTE ON <procedimiento> FROM <usuarios>

Para crearlo: CREATE PROCEDURE <nombre>

Si queremos que un usuario no pueda acceder a todas las columnas de una tabla sino solo a algunas de ellas (por ejemplo a los nombres teléfonos y

direcciones de los empleados, pero no al sueldo), lo mejor es crear una vista y darle al usuario sólo privilegios sobre la vista

Con todo lo visto anteriormente es muy complejo darle a todos los usuarios los privilegios adecuados para cada uno de los objetos que componen la BD; para

facilitar este trabajo se crean roles, un rol es una agrupación de privilegios sobre

algunos de los componentes de una BD, de forma que se crea el rol y luego se asignan usuarios a esos roles:

CREATE ROLE “lector”;

GRANT SELECT ON Tabla1 TO “lector”;

GRANT “lector” TO JUAN WITH GRAND OPTION;

Creamos el rol lector para poder leer en la tabla 1 y luego le asignamos ese rol a Juan, además pudiendo él también conceder este privilegio al resto de

usuarios si lo desea.

3. CATÁLOGO

El catálogo de una BD es una metabase de datos; una BD sobre una BD y también se suele

denominar diccionario de datos.

Hemos de tener en cuenta que una BD contiene no solo las tablas, son también los usuarios,

procedimientos, privilegios, roles, etc. todo ello conforman tablas consultables que se pueden ver en

informix con SELECT tabname FROM informix.systables;

Catálogo de una BD

Page 335: sistemas operativos, redes y bases de datos

24 · Bases de Datos 2

pero a pesar de que son consultables desde aquí, no son actualizables

directamente, para ello se requieren mecanismos de más alto nivel para acceder a las tablas del catálogo.

Page 336: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 25

TEMA

TEMA 5 COMPONENTES DE ALMACENAJE DE UNA BASE DE DATOS

1. LA ARQUITECTURA DE LOS COMPONENTES DE ALMACENAJE

Como las BD son un conjunto de datos persistentes y esta persistencia se

manifiesta porque los datos no han de desaparecer entre ejecuciones sucesivas del programa, necesitamos almacenar todos estos datos en algún lugar no volátil, que

es habitualmente un disco magnético. La arquitectura de los componentes de almacenaje se divide en tres niveles

que estudiaremos a continuación:

Nivel lógico: Se corresponde a los

componentes conocidos y manipulados por el

programador, tal como vemos en la figura lateral.

Nivel Físico: Las tablas persistentes que se

almacenan en un soporte no volátil. Nivel Virtual: Se encuentra entre los dos

niveles anteriores.

2. EL NIVEL LÓGICO

Encontramos dos tipos de componentes el lógico y la Bd. Los componentes lógicos a su ve

zpueden ser componentes de datos (tablas y

vistas) y componentes de control (restricciones, disparadores, índices…).

La BD, en cambio, es un concepto un poco más complicado de definir, dado que es una

herramienta específica del SGBD que sirve como

unidad administrativa para agrupar un conjunto de otros componentes: Podemos tener una BD

comercial, otra financiera, otra de datos personales, dentro del mismo conjunto del SGBD.

3. EL NIVEL FÍSICO

Los sistemas operativos gestionan los datos en los discos magnéticos a partir de unas unidades globales denominadas ficheros. Normalmente la cantidad

de espacio de este fichero va creciendo a medida que lo necesita (extensión); pero esta extensión no toma cualquier valor, sino que es un múltiplo de una unidad

mínima que es la página; con ella comenzaremos, de menor a mayor, el estudio del

nivel físico.

Una página es la unidad mínima de acceso y de transporte del sistema de entrada/salida de un

SGBD, lo cual la hace ideal para ser a la vez la

unidad de organización más importante de los datos almacenados. Bien es verdad que cuando se trae una

página de la memoria externa a la principal, no se transporta una única página, pero sí se transporta

siempre un múltiplo del valor de una página. Eso sí,

la página internamente como podemos ver en la figura lateral también tiene su estructura propia.:

Encabezamiento: Con información de control.

Tema 5

Componentes de almacenaje de una base de datos

1. La arquitectura de los

componentes de almacenaje 2. El nivel lógico 3. El nivel físico

4. El nivel virtual 5. Otros componentes de

almacenaje

Niveles de los componentes de almacenaje

Estructura de una página

Page 337: sistemas operativos, redes y bases de datos

26 · Bases de Datos 2

Filas: Corresponde a las filas de las tablas de nivel lógico, puede variar su

número con el paso del tiempo e incluso ser 0 (inicialmente). Tiene un

encabezamiento y luego los campos de los que se compone cada fila. En el encabezamiento se pueden guardar datos de control y cuando una fila es más

larga que una página, se puede partir en trozos. Campos: Son las unidades que conforman las filas, se componen también de

un encabezado que suele contener información sobre si el campo admite el

valor nulo o no y también la longitud del campo, y del contenido que es el valor del campo en sí.

Espacio libre: Siempre en el centro de la página.

Vector de direcciones de fila: que tiene tantos elementos como filas hay en

la página, además se disponen en orden decreciente. El último elemento

apunta a la primera fila y así sucesivamente, de forma que el espacio libre de la página siempre queda en el centro.

Existen otros tipos de páginas como son la página de índice, que aunque

lo hemos incluido en los elementos de control, realmente son componentes de

rendimiento para acelerar la búsqueda de filas determinadas dentro de la BD; eso sí esta página de índice sigue la misma estructura que la estudiada hasta ahora.

Otro tpo de página es la de objeto grande muy en boga últimamente por la irrupción de los elementos multimedia en la informática de consumo y se suelen

almacenar en otro tipo de estructuras diferentes dado su tamaño.

Gestión de páginas

Las principales operaciones que se utilizan son las siguientes:

Formateado de una página: Cuando el SGBD necesita más espacio se

adquiere una nueva extensión y se formatea la página, es decir, se prepara para recibir datos, escribiendo el encabezamiento y dejando el resto del espacio

libre.

Carga inicial de filas: Se coloca la primera fila justo detrás del encabezado y

se crea un elemento del VDF al final justo de la página que apunta al inicio de esta primera fila; a partir de aquí se repite el proceso, quedando el espacio

libre en el centro de la página y reservándose un porcentaje determinado según el SGBD para las operaciones que veremos a continuación.

Alta posterior de una nueva fila: Una vez seleccionada la página candidata

donde hay que añadir la fila, se utiliza el espacio libre existente para

introducirla, si no quedase espacio suficiente, la fila es colocada en otra página. Baja de una fila: Consiste básicamente en liberar el espacio ocupado por la

fila y el elemento del VDF; ya en ese mismo momento o más adelante se

producirá un desplazamiento de filas y elementos VDF para que la estructura de la página continúe siendo la de siempre.

Cambios de longitud de una fila: Puede ser por liberar espacio con lo que el

mecanismo es igual a la operación anterior; puede ser porque la fila aumente, mientras que haya espacio en la misma página no hay problema; o si el

aumento de espacio no se puede servir en la misma página, se hace en otra y

en la original se crea una dirección que apunte a la nueva posición de la fila.

La extensión Es un número entero de páginas, en principio consecutivas, que el sistema

operativo adquiere a petición del SGBD cuando detecta que necesita más espacio

para almacenar datos. Así el fichero aumenta de tamaño porque aumenta el número de extensiones que lo forman. Las páginas de una extensión tienen que ser

físicamente consecutivas, pues así mejora el rendimiento general de la BD.

El fichero El fichero es la unidad que utiliza el sistema operativo para gestionar el

espacio e los dispositivos periféricos (también es un conjunto de extensiones). El

sistema de gestión de los ficheros viene a ser parecido al sistema de entrada/salida tradicional que se realiza por medio de bloques, pero tiene algunas diferencias. Así

Page 338: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 27

TEMA

cuando el SGBD necesita cargar en su memoria principal unos datos que se

encuentran en una página que está en la memoria externa, se lo pide al sistema operativo, que toma esa página, y generalmente las circundantes por si las

necesita, y este número de páginas es pasado a la memoria intermedia.

Además para optimizar el rendimiento como

hemos dicho se lleva a la memoria más de una página a la vez en el mismo proceso de

entrada/salida, e incluso se avanza en el tiempo leyendo una página cuando se prevé que se

necesitará próximamente a la par que se realizan otras operaciones, para que así ya esté la página

cargada en memoria.

4. EL NIVEL VIRTUAL

El nivel virtual requiere su existencia porque cada tabla como la hemos

estudiado no se almacena en un fichero. Por ejemplo: hay tablas grandes que hay

que fragmentar y almacenar cada fragmento en más de un fichero; hay tablas muy pequeñas que pueden compartir un mismo fichero; hay tablas cuyos campos

multimedia son tan grandes que cada uno de ello se almacena en un fichero independiente, etc. Por todo ello el nivel virtual proporciona un grado elevado de

independencia entre los niveles lógico y físico; llamaremos espacio virtual al

componente que implemente esta funcionalidad.

El espacio virtual es una visión diferente de las páginas del nivel físico. Es otra forma de ver los

datos pero sin duplicarlos realmente; así el espacio virtual es una secuencia de páginas virtuales que se

corresponden una a una con las páginas reales del

nivel físico pero ordenadas secuencialmente y sin saltos en medio. Así en las páginas virtuales todos

los datos referentes a un mismo registro se encuentra de forma contigüa pudiendo no ser así

en el nivel físico.

Cuando el SGBD necesita una fila determinada (unidad mínima de información a la

que accede), lo que hace realmente es encontrar las filas en el espacio virtual, el direccionamiento

del SGBD es pues del nivel lógico al virtual.

Posteriormente el sistema operativo hace una relectura de ese espacio virtual al espacio físico

donde se hallan los datos. Es necesario hacer una serie de acotaciones ahora: Una fila dada de alta y mientras permanezca viva, no puede cambiar de

página. Si otra fila se da de baja, puede reorganizar el espacio libre y cambiar el apuntador de dentro de la página, pero sin cambiar de página. Si aumenta de

tamaño y hay que trasladarla a otra página, se mantiene un apuntador en la página

que señala la nueva dirección; de esta forma la BD seguirá teniendo un buen rendimiento.

Los tipos de espacios virtuales que podemos encontrar son:

Espacio de tablas: Las tablas que no son tan grandes que las queramos

controlar por partes, ni tan pequeñas que puedan compartir un espacio común, suelen tener un único espacio virtual de tablas; eso sí puede perfectamente

estar repartido en varios ficheros. Espacio fragmentado: Cuando una tabla es tan grande que debemos partir

su espacio virtual se establecerá un criterio por el cual las diferentes filas de la

Funcionamiento del sistema operativo y del SGBD en la

entrada/salida de una página

Correspondencia entre páginas virtuales y reales

Page 339: sistemas operativos, redes y bases de datos

28 · Bases de Datos 2

tabla irán a parar unívocamente a uno y otro fragmento, lo cual mejorará el

tiempo de acceso a los datos pues se “espera” donde poder encontrarlos. Espacio de agrupación: Cuando una tabla se relaciona tanto con otra u otras

que normalmente el acceso a la primera viene unido del acceso al resto, nos

interesará que se encuentren físicamente tan cerca como sea posible para minimizar el tiempo de acceso global y aumentar el rendimiento de la misma.

Espacio de objetos grandes: Ya hemos hablado de elementos multimedia,

entre otros, que ocupan un excesivo espacio. Estos objetos por ejemplo cuando sus leídos por la entrada/salida del sistema operativo desplazarían todo el resto

de las páginas que se tienen cargadas en memoria y no interesa

evidentemente. Así el espacio que apuntan si por ejemplo es un fichero MP3 se guarda en una página objeto, mientras que en la original solo se guarda un

apuntador a este objeto aparte. Espacio de índices: Los índices son estructuras de datos de longitud muy

pequeña y muy referenciada, por lo que interesa gestionarlo por separado de

las filas de las tablas. Estructuralmente los espacios de índices son muy

similares a los espacios de tablas aunque contienen páginas de índices en vez de páginas de filas de tablas.

5. OTROS COMPONENTES DE ALMACENAJE

Una de las tareas del administrador de BD es calcular las necesidades de espacio del disco de una determinada BD. Los cálculos sencillos no suelen servir; es

decir, si pretendemos calcular el espacio multiplicando el número de registros máximo que esperamos tener por la ocupación de cada uno de esos registros, el

resultado será claramente insuficiente y distante de la realidad.

Debemos tener en cuenta otro tipo de espacios:

El catálogo es el espacio ocupado por los metadatos: definición de los

componentes lógicos como tablas vistas, índices, restricciones…

Tablas temporales: Que se crean generalmente invocadas indirectamente por

cláusulas tipo order by, select o distinct y que “viven” hasta que han servido el dato final, pero que ocupan un espacio real.

El dietario con los cambios efectuados en la base de datos para poder

recuperarlos como consecuencia de un desastre.

Hay que calcular el espacio necesario teniendo en cuenta el espacio ocupado

por los datos y por todos los aspectos vistos en este apartado.

Page 340: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 29

TEMA

TEMA 6 IMPLEMENTACIÓN DE MÉTODOS DE ACCESO

1. LOS MÉTODOS DE ACCESO A UNA BASE DE DATOS

En este módulo cuando hablemos de páginas, nos referiremos a las páginas

virtuales que ya habíamos nombrado en el módulo anterior; cuando se haga referencia a páginas reales se explicitará directamente. Dicho esto, los métodos de

acceso los vamos a dividir en 3 grupos, que estudiaremos detenidamente:

Accesos por posición: Puede ser acceso directo o secuencial por posición. El

acceso directo pro posición consiste en obtener una página que tiene un

número de página determinado dentro de un espacio. Por ejemplo INSERT INTO

empleados VALUES (25, „Juan‟, 150, 2000), en

este caso accedemos directamente a la página

que contiene el valor 25. El acceso secuencial por posición implica obtener las páginas de un

espacio siguiendo el orden definido por el SGBD,

por ejemplo SELECT * FROM empleados. Donde

accedemos desde el primer al último empleado

sin un orden predefinido, sino directamente en el que estén almacenados los datos.

Accesos por valor: También puede ser directo

o secuencial. El acceso directo por valor consiste en obtener todas las filas que cumplen un criterio

determinado (SELECT * FROM empleados WHERE

num_despacho = 150). Los accesos secuenciales

por valor consiste en obtener diversas dilas por el orden de los valores de un

atributo (SELECT * FROM empleados ORDER BY num_despacho o SELECT * FROM

empleados WHERE num_despacho>=100 and num_despacho<300 quizá este segundo

ejemplo sea más difícil de ver pero el SGBD debe devolver los empleados

organizados por el número de despacho). Accesos por diversos valores: Podemos querer acceder poniendo

condiciones a varios atributos y no solo a uno de ellos. En este caso también

tenemos acceso directo (SELECT * FROM empleados WHERE num_despacho=150 and

SUELDO=2000), y acceso secuencial (SELECT * FROM empleados ORDER BY

num_despacho, sueldo); e incluso contamos con accesos mixtos por diversos

valores, es decir, se combina el acceso directo por los valores de algunos

atributos y el acceso secuencial por los valores de otros atributos (SELECT *

FROM empleados WHERE sueldo=2000 ORDER BY num_despacho)

2. IMPLEMENTACIÓN DE LOS ACCESOS POR POSICIÓN

Los SGBD se basan para estos accesos casi completamente en el sistema

operativo, las rutinas de gestión de entrada/salida permiten obtener una página real dada su dirección y por ello podemos decir que el sistema operativo

implementa el acceso por posición a las páginas reales.

3. IMPLEMENTACIÓN DE LOS ACCESOS POR VALOR

Si el SGBD se basara como en el caso anterior en el sistema operativo para

implementar los accesos por valor, no se obtendría un buen rendimiento, por ello el

SGBD dispone de mecanismos especializados que los implementan de manera eficiente y esos mecanismos son los índices.

Si nosotros quisiéramos ejecutar la cláusula SELECT * FROM empleados WHERE

num_despacho = 150, deberíamos leer todas las páginas de la tabla empleado, leer el

Tema 6

Implementación de métodos de acceso

1. Los métodos de acceso a una

Base de Datos 2. Implementación de los

accesos por posición

3. Implementación de los accesos por valor

4. Implementación de los accesos por diversos valores

5. Índices del sistema Informix

Accesos por posición: Directo y secuencial

Page 341: sistemas operativos, redes y bases de datos

30 · Bases de Datos 2

valor del atributo num_despacho y seleccionar los que fuera igual a 150.

Lógicamente esto supondría un esfuerzo brutal si tuviésemos un elevado número de empleados, quizá para luego extraer 2 ó 3 nada más; o más complicado todavía,

ejecutar la cláusula SELECT * FROM empleados ORDER BY num_despacho; es este caso

nos interesaría que la tabla estuviese guardada en el espacio virtual ordenada por

el número de despacho, pero cuando quisiésemos obtener los empleados ordenados por sueldo, lo anterior no nos serviría.

Para evitar toda esta problemática tenemos los índices, que son como el índice de un libro: son estructuras de datos auxiliares que facilitan la búsqueda

debido además por su reducido tamaño. Un índice contienen parejas de datos

llamadas entradas, formadas por un valor y un RID (número de página y número del elemento del VDF). Cuando se busca mediante un índice primero se localizan

los valores en el índice con el fin de conocer su RID, y disponiendo ya de éste, se utiliza un acceso directo por posición para conseguir la página que contiene la fila

de los datos que se busca.

Lógicamente, un índice debe estar organizado de modo que facilite la búsqueda de los valores que contiene. Hay muchas formas de organizar un índice,

pero solo estudiaremos dos: los árboles B+ y la dispersión. La estimación del coste de ejecución de estos métodos los calcularemos

considerando solo el coste de las entrada/salida pues suponen el componente

dominante en el coste de la operación total.

Árboles B+ Los árboles B+ son un tipo particular de árbol de búsqueda cuyo objetivo

primordial es el de intentar conseguir que éstas se efectúen con un número pequeño de entrada/salida.

Todo árbol B+ tiene un número de orden d, que indica la capacidad de

sus nodos, así si un árbol tiene orden d, entonces sus nodos contienen como máximo 2d valores.

Los nodos internos tienen como objetivo dirigir la búsqueda de la hoja que tiene la entrada correspondiente a un valor determinado, por ello el acceso

directo por valor consistirá en trazar un recorrido del árbol que empezará en la raíz

y que irá bajando por los nodos del árbol hasta llegar a la hoja adecuada. Todo nodo interno contiene valores y apuntadores hacia sus nodos hijo.

Los nodos hoja están conectados por apuntadores, sirviendo así para facilitar el acceso secuencial por valor, pero además contienen todas las entradas

del índice, es decir, las parejas de valor y RID. Además todos los valores de un nodo hoja son más pequeños que los valores del nodo hoja siguiente y todos los

valores de algún nodo interno del árbol están repetidos en algunas de sus hojas,

así que las hojas contienen todos los valores del árbol.

Cuando se quiere llevar a cabo un acceso

directo por valor, primero

hay que localizar la hoja que contiene la entrada del valor

buscado y después utilizar el RID de la entrada para

encontrar los datos a los que

se quiere acceder. Para localizar la hoja

en cuestión, se comienza desde el nodo raíz (por ejemplo buscamos el valor 8), como el nodo raíz es 20 nos

desplazamos por la hoja de la izquierda pues contiene los valores menores. En esta hoja como 8>6, seguimos el segundo apuntador y ya hemos localizado el nodo

hoja que contiene el valor de entrada que buscamos.

Si la búsqueda fuese un acceso secuencial por valor, el mecanismo es el mismo, lo único que debemos hallar el valor más bajo, y una vez encontrado nos

desplazamos por los nodos hoja (que recordemos están todos conectados), yendo

Estructura de un árbol B+

Page 342: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 31

TEMA

hacia la derecha buscando los valores más altos, hasta que se acabe la cadena de

hojas. Existen una serie de propiedades destinadas a mejorar el rendimiento

de los árboles B+, que básicamente consisten en que todos los nodos del árbol (excepto la raí) deben estar llenos al menos hasta un 50% de su capacidad (esto es

así para reducir el número de nodos y evitar dar saltos entre nodos que están

vacíos) y además los árboles B+ deben ser equilibrados (todas las hojas están al mismo nivel).

Para el cálculo del coste de localización de una entrada, es importante

haber sabido elegir correctamente el tamaño adecuado para los nodos. Nos interesa que el árbol tenga una altura pequeña, así que los nodos serán grandes

pero sin sobrepasar el tamaño de una página, dado que de lo contrario no se

podrían consultar con una única operación de entrada/salida. En consecuencia, el tamaño habitual de los nodos de un árbol B+ coincide con el de las páginas y así

cada nodo se almacena en una página virtual diferente. Así en un árbol de altura h son necesarias h operaciones de entrada/salida para localizar una entrada del árbol.

Al insertar un nodo debemos reorganizar el árbol B+ para que siga cumpliendo las propiedades destinadas a mejorar el rendimiento. Si al inserta el

nodo hoja, esta hoja tiene espacio libre, no hay problema. Si en cambio no lo tiene, es necesario dividir ese nodo e incluso ayudarse del nodo hermano de la derecha

para distribuir los nodos hoja y seguir cumpliendo los criterios del árbol B+. La división del nodo hoja, puede crear la obligación de crear un nodo padre, si éste no

tiene espacio suficiente para acogerlo.

Al suprimir un nodo hoja puede ocurrir que la hoja quede con menos

valores de los necesarios para cumplir los criterios de eficiencia, en este caso se echará mano del nodo hermano de la derecha, y si no lo hay de la izquierda,

repartiéndose los valores y suprimiendo una entrada en el nodo padre; incluso

puede ocurrir que esto acarreé la necesidad de suprimir un nivel completo en el árbol, lo cual sólo puede ayudar a ser más eficientes en las búsquedas.

Los índices que permiten implementar los accesos secuenciales por valor

(como los árboles B+) pueden ser índices agrupados o no agrupados. Un índice agrupado es aquel en el que los datos que indexa están ordenados físicamente

según el acceso secuencial por valor que proporciona el índice. Para una misma

tabla podemos tener varios índices, pero solo uno de ellos puede ser agrupado. Por ejemplo en la tabla empleados podemos indexar por el apellido. De forma que

cuando hagamos una búsqueda ordenada por apellidos, los RID que se obtendrán apuntarán consecutivamente a filas contiguas, y así se podrán hacer muchos

accesos seguidos a filas de una misma página con una única entrada/salida.

Dispersión

Los índices basados en la dispersión consiguen un rendimiento ligeramente

superior al de los índices basados en árboles B+ siempre que se trate de accesos directos por valor; en cambio no implementan los accesos secuenciales, por ello

muchos SGBD solo implementan árboles B+.

La dispersión básicamente trata de colocar las entradas en las páginas según una función de dispersión h determinada. Así para hallar en qué página se

encuentra el valor x, se aplica la función de dispersión h y directamente devuelve

un valor h(x)=página. Hay muchas funciones de dispersión diferentes y aplicables; además en cada página caben evidentemente más de un valor. Aquellos valores

que una vez aplicada una función de dispersión devuelven el mismo número de página, se denominan sinónimos y sus entradas lógicamente comparten la misma

página. Los valores que caben en una página son N y los sinónimos L. El problema

tendrá lugar cuando L>N, es decir, hay más sinónimos de los que caben en una

Page 343: sistemas operativos, redes y bases de datos

32 · Bases de Datos 2

página. En este caso, se crea una página

excedente donde se van guardando los sinónimos excedentes de esa página y se crea un apuntador

en la página primaria que apunta a la página excedente. Si por cualquier causa o porque la

función de dispersión no es muy buena se llena la

página excedente, se crea una segunda página excedente que es apuntada desde la primera

página excedente.

Así, en el ejemplo lateralr, se ha creado una función de dispersión h(x9=(x mod 5)+1,

quizá no muy bien elegida, dado que N=3 y

tenemos varias páginas excedentes.

Es fácil darse cuenta que el coste de localizar una entrada depende directamente de si la entrada es un excedente o se encuentra en la página

primaria. Si se encuentra en este último caso el coste es una sola entrada/salida,

en cambio si es excedente habrá 2 ó más entrada/salida. Por tanto para conseguir un buen rendimiento, interesa que haya pocas páginas excedentes y esto se

consigue modificando el factor de carga.

Este factor es igual al número de entradas que se espera tener dividido por el número de entradas que caben en las páginas primarias:

C = M / (N*L)

Cuanto más bajo sea el factor de carga (C), menos excedentes habrá y menos entrada/salida serán necesarias; en contrapartida si el factor de carga es

muy bajo, habrá desaprovechamiento de espacio. Si el factor de carga es por

ejemplo C=0,5, se malgastará la mitad del espacio.

4. IMPLEMENTACIÓN DE LOS ACCESOS POR DIVERSOS VALORES

Implementación de los accesos directos

Si por ejemplo quisiésemos ejecutar la cláusula SQL:

SELECT * FROM empleados WHERE num_despacho = 150 AND sueldo=1200;

Podríamos utilizar el índice del atributo num_despacho, para localizar

aquellos empleados cuyo num despacho es igual a 150; después localizar a través del índice de atributo sueldo los que cumplen el criterio de sueldo igual a 1200 y

después hacer una intersección de los dos conjuntos. Con esta estrategia

aprovechamos los índices que ya tenemos, pero tiene un mal rendimiento en el caso de que haya muchos empleados que cumplan el primer y segundo criterios,

pero pocos que cumplan los dos a la vez. Para solventar este problema existen los índices de valores

compuestos, son índices que contienen valores de dos atributos; así por ejemplo

si creamos el índice de valores compuestos [num_despacho, sueldo], se organizarían en nodos de árbol B+ ordenados primero por num_despacho y

después por sueldo, así [150, 1000] < [150, 1500].

Implementación de los accesos secuenciales y mixtos

En este caso se sigue el mismo método visto anteriormente, con la

problemática de que si la búsqueda fuese primero por sueldo y después por número de despacho, no nos serviría el índice creado en el apartado anterior.

Páginas excedentes

Page 344: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 33

TEMA

5. ÍNDICES DEL SISTEMA INFORMIX

El sistema informix pone al alcance del diseñador los índices estudiados en este tema; así para crear un índice con el valor del número de despacho:

CREATE INDEX indice_num_despacho ON empleados (num_despacho);

Para crear un índice agrupado:

CREATE INDEX CLUSTER indice_num_despacho ON empleados (num_despacho);

Para crear un índice por diversos valores:

CREATE INDEX indice_num_despacho ON empleados (num_despacho, sueldo);

Finalmente recordar que estos índices tienen por defecto un orden ascendente, si

por el contrario se prefiere o necesita un orden descendente:

CREATE INDEX indice_num_despacho ON empleados (num_despacho DESC);

Page 345: sistemas operativos, redes y bases de datos

34 · Bases de Datos 2

TEMA 7 BASES DE DATOS DISTRIBUIDAS Y CLIENTE/SERVIDOR

1. VISIÓN GENERAL DEL ACCESO A BASES DE DATOS POR RED

Una aplicación de acceso a bases de datos debe distribuir las funciones que

han de ejecutar los diferentes ordenadores que están conectados:

Almacenamiento de datos: Puede haber uno o más ordenadores con acceso a

los dispositivos físicos de almacenamiento. Ejecución del código: Tanto el código de la aplicación con el de los SGBD, una

parte debe ejecutarse en el ordenador del cliente y otra en los servidores de

datos.

Almacenamiento del código: Normalmente se almacena el código necesario en cada parte donde se ejecuta, sea el cliente o sea el servidor.

El procesamiento se distribuye de la siguiente manera:

Entrada/salida básica: Controla la pantalla, teclado, ratón a nivel muy

elemental. Gestión interfaz usuario: Presenta y captura los datos de la aplicación

Lógica de la aplicación: Efectúa las actualizaciones y consultas necesarias de

acuerdo a las peticiones de los usuarios.

Gestión de acceso a datos: Servicios de alto nivel para hacer consultas y

actualizaciones.

Acceso básico a los datos: Leer y escribir los datos en la memoria externa.

Hablaremos por tanto de aplicaciones de BD cliente/servidor siempre

que una parte de la aplicación se ejecute en un ordenador cliente, y el acceso a los datos almacenados tenga lugar en uno o más ordenadores servidores, con los

cuales se comunica el cliente. Ahora bien, las posibilidades de que el procesamiento anterior se realice en mayor medida en el cliente o en el servidor son las siguientes

(la barra marca la posición de la red):

a/bcde: El cliente solo accede a los dispositivos de interacción básicos con el

usuario, en el servidor se ejecuta todo el resto de la aplicación (un ejemplo son

las aplicaciones basadas en X-windows). ab/cde: Todos los aspectos de interacción con el usuario se realizan en el

cliente mientras que en el servidor toda la lógica de la aplicación y acceso a

datos (monitores transaccionales por ejemplo).

abc/de: La lógica de la aplicación también se hace en el cliente y el servidor

atiende peticiones del cliente para realizar consultas y actualizaciones de alto nivel.

abcd/e: El cliente controla casi todos los aspectos de la aplicación, a excepción

del acceso físico a los datos almacenados (no se puede ir más lejos).

Se denominan bases de datos distribuidas a aquellas en que los datos almacenados se encuentran en más de un ordenador; si todos los datos que

requiere la aplicación se hallan en el mismo ordenador, entonces hablamos de BD

centralizadas. Diferenciar esto de una aplicación cliente/servidor. Una aplicación cliente/servidor puede ser centralizada si los datos se hallan todos en el mismo

Tema 7

Bases de datos distribuidas y cliente/servidor

1. Visión general del acceso a bases de datos por red

2. Bases de datos cliente/servidor 3. Bases de datos distribuidas

4. Ejemplo de aplicación cliente/servidor y distribuida

Descomposición en capas de una aplicación de acceso a una base de datos

Page 346: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 35

TEMA

ordenador o distribuida si se hallan en almacenamientos distintos. Encontramos dos

grandes tipos de bases de datos distribuidas:

Los SGBD puros o fuertemente acoplados: suelen ser el resultado de un

desarrollo descendente, mediante el cual se diseña una aplicación por decisión expresa de los desarrolladores desde cero y según eso se desarrolla el modelo

de datos. Esto mejora el rendimiento, la fiabilidad y la posibilidad de compartir datos, aunque la aplicación se vuelve compleja.

Los SGBD federados o levemente acoplados: No suelen ofrecer un acceso

totalmente integrado de los datos y es que su origen suele estar en un

desarrollo ascendente, mediante el que se desarrolla una aplicación que intenta gestionar un conjunto preexistente de bases de datos.

Los niveles de distribución que podemos encontrar en estas BD son:

Nivel de petición remota: Cada petición efectuada en el servidor es una única

transacción. Nivel de unidad de trabajo remota: Se pueden enviar al servidor varias

sentencias desde un mismo ordenador que son tratadas como una única

transacción. Nivel de unidad distribuida de trabajo: Permite acceder a más de un servidor

distinto en la misma transacción, aunque cada petición se tiene que ejecutar

exclusivamente en un único servidor.

Nivel de petición distribuida: Una misma sentencia puede ser ejecutada al mismo tiempo por varios servidores, que han de colaborar para obtener el

resultado final.

Entre los aspectos críticos que se pueden encontrar en la construcción de

aplicaciones encontramos:

Impacto del tráfico de red en el rendimiento: Tanto en las LAN (Redes de

área local, utilizadas en todo un edifico o en edificios adyacentes) como en las

WAN (Wide Area Network, utilizada en zonas más amplias pero menos rápida y flexible que las LAN) el acceso datos por red puede convertirse en un cuello de

botella para el rendimiento general. Gestión de transacciones: La concurrencia y la recuperación son

imprescindibles por tanto hay que evitar fallos en las comunicaciones que

puedan violar la atomicidad y definitividad de las transacciones.

Acceso integrado a los datos: Debemos poder acceder a tablas, vistas y

procedimientos igual que si de un proceso centralizado se tratase. Seguridad e integridad de los datos: Deben existir herramientas que sin

imponer excesivas limitaciones a los usuarios puedan controlar la integridad de

los datos. Tanto con disparadores, restricciones de integridad y roles podemos conseguirlo.

2. BASES DE DATOS CLIENTE/SERVIDOR

En una aplicación BD cliente servidor, hay una parte cliente que recibe las peticiones de la aplicación y una parte servidor que lleva a cabo el acceso a los

datos; ambas partes se comunican por medio de la red como vemos en la figura lateral.

Hay dos tipos básicos de arquitectura:

Cliente ligero/servidor pesado: La

mayor parte de la funcionalidad del

SGBD está en el servidor. El cliente hace poco más que enviar al sevidor

peticiones de la aplicación y devolver las

respuestas. Se suele utilizar en

Niveles de distribución

Comunicación entre cliente y servidor

Page 347: sistemas operativos, redes y bases de datos

36 · Bases de Datos 2

arquitecturas del tipo ab/cde y abc/de. La utilización de un servidor pesado

permite disminuir el tráfico de la red consiguiendo que solo se envíe información útil al cliente.

Cliente pesado/servidor ligero: Todo el procesamiento se hace en el

cliente. La parte servidor atiende únicamente peticiones de lectura y actualización de páginas de disco. Este enfoque encaja con el esquema abad/e

y lo siguen SGBD pensados para uso personal (Ms. Access) y pocos usuarios. Cuando el acceso a datos es pequeño, hay poco tráfico de red, este tipo de

esquema puede ser interesante.

Los SGBD con servidor pesado, permiten dos tipos de arquitecturas de

aplicación: arquitectura de dos capas: la aplicación del cliente trabaja directamente con las estructuras de almacenamiento de la BD; y la más interesante la

arquitectura de tres capas: El cliente hace peticiones de ejecución de

procedimientos almacenados en el servidor y son sólo estos procedimientos los que acceden a las estructuras de datos. Esto tiene varias ventajas:

Los procedimientos almacenados se pueden optimizar estáticamente y no

durante la ejecución. No todas las consultas y actualizaciones tienen que pasar por la red, con lo que

se reduce el tráfico.

Se mejora la seguridad pues los usuarios solo pueden utilizar los

procedimientos, evitándose así operaciones no previstas.

Los cambios en la aplicación se pueden llevar a cabo cambiando el

comportanmiento de los procedimientos sin tener que modificar los clientes.

3. BASES DE DATOS DISTRIBUIDAS

Hay 12 reglas fundamentales que debe cumplir

todo SGBD que trabaje con datos distribuidos: Máxima autonomía local.

Igualdad entre servidores

Operación continuada

Transparencia de localización

Transparencia de fragmentación

Transparencia de replicación

Procesamiento distribuido de consultas

Gestión distribuida de transacciones

Independencia del hardware

Independencia del sistema operativo

Independencia de los protocolos de red

Independencia del SGBD

En general estas doce reglas se pueden resumir en dos ideas básicas:

El conjunto de BD distribuidas debe verse como

una sola BD centralizada. Únicamente para los diseñadores o administradores del sistema debe

ser visible el modo distribuido.

Hay que evitar limitaciones en el trabajo a causa

de caidas de los servidores o fallos en las comunicaciones.

Arquitecturas

Las arquitecturas que encontramos son de 4 tipos y se

pueden ver en la tabla lateral:

Conexiones independientes: Se establecen

conexiones separadas para cada uno de los

Comunicación entre cliente y servidor

Page 348: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 37

TEMA

servidores que se quieren utilizar. La aplicación es la que debe gestionar todas

las relaciones entre los datos con lo cual el rendimiento y la integridad de los datos es deficiente.

Capa intermedia de gestión de datos: Esta capa proporciona un acceso

más o menos integrado a la gestión de datos. Esta forma de trabajar suele ser viable para aplicaciones de consulta con pocas exigencias de rendimiento e

integridad de los datos. Distribución en el cliente: Es un acceso más integrado que los anteriores y

ofrece un rendimiento aceptable aunque si el cliente es ligero normalmente hay

que acceder a cada uno de los servidores por separado.

Distribución en el servidor: Es la solución más común y así se alcanza el

máximo grado de acoplamiento.

Para acceder a los elementos de una base de datos que se encuentran en

otro servidor, se suelen referenciar con un link: CREATE DATABASE LIND deptpers

USING <Info.Conexion>, si además se crea un sinónomo: CREATE PUBLIC SYNONIM

empleados FOR empleados@deptpers; ya se podrá acceder a la tabla empleados

desde cualquier servidor.

Las transacciones distribuidas una vez iniciadas en un servidor, deben propagarse al resto de los que intervienen y mantener las opciones de seguridad tal

si se tratasen de transacciones centralizadas. Para ello contamos con el protocolo

de confirmación en dos fases y la prevención de abrazos mortales.

El protocolo de confirmación en dos fases es el mecanismo que siguen los servidores implicados en una transacción para garantizar que si una transacción se

confirma en un o de los servidores implicados, suceda lo mismo en todos los demás. Tiene dos fases como su nombre indica:

En la primera fase el servidor coordinador (que puede ser el que inicia la

transacción o se elige el más estable) pregunta a los otros servidores si están

dispuestos a confirmar la transacción. Los servidores que responden afirmativamente son anotados y si todos responden que sí, el coordinador

decidirá confirmar la transacción. En la segunda fase se hace efectiva la decisión anterior y el coordinador envía

un mensaje a todos los participantes para comunicarles si tienen que confirmar

o cancelar la transacción.

Este protocolo es muy sensible a caídas de la red, pues si la red cae y el coordinador no puede comunicarse con los demás, éstos dejarán las transacciones

bloqueadas.

La detección distribuida de abrazos mortales se complica más que en las aplicaciones centralizadas, es posible un abrazo mortal global a causa de un ciclo

de espera entre diversos servidores, sin que exista o se detecte un abrazo mortal

local. Para evitar los abrazos globales, los servidores tienen que enviarse periódicamente información sobre las relaciones de espera entre las transacciones,

lo cual supone un coste alto en red, u otra solución más sencilla que consiste en permitir sólo un tiempo máximo de espera, lo cual puede dar al traste con

transacciones correctas aunque lentas.

Existen mecanismos de distribución de datos cuya finalidad es mejorar el

rendimiento del SGBD distribuida a través de un decremento del uso de la red, para ello cuenta con 3 mecanismos: fragmentación, replicación y cachés persistentes.

Fragmentación horizontal: Consiste en repartir el almacenamiento de filas de una tabla entre diversos servidores. Así si una entidad de una gran empresa

utiliza más los datos relativos a la población a la que da cobertura, es normal

que en la base de datos local de la empresa se encuentren los datos asociados a esos clientes, a los que desde otras sedes se puede acceder pero se hace

menos veces.

Page 349: sistemas operativos, redes y bases de datos

38 · Bases de Datos 2

Fragmentación vertical: Consiste en repartir el almacenamiento de columnas

de una tabla en distintos servidores. Por ejemplo si en el departamento de

contabilidad trabajan mucho con los sueldos de los empleados, se pueden cambiar estas columnas a este departamento. Eso sí, la fragmentación vertical

obliga a pasar también las claves primarias de esa tabla. Replicación: Consiste en el almacenamiento de copias idénticas de tablas o de

fragmentos de tablas en distintos servidores. Como nos podemos imaginar el

problema estriba en la coordinación de los datos. Existe para ello la replicación síncrona en las que las actualizaciones en un servidor se

propagan inmediatamente al resto que tenta réplicas (lo cual requiere un

entorno de red robusto) o replicación asíncrona en la que los datos se actualizan en todos los servidores cada período de tiempo; este último modelo

tiene menos requerimientos pero debemos saber que podemos estar usando durante un lapso de tiempo ciertos datos ya obsoletos.

Cachés persistentes: Consiste en almacenar en un servidor una copia de una

parte de los datos almacenados en otro; la parte que se guarda es la que tiene

más posibilidades de que se vuelva a acceder a ella; así si un cliente consulta uno de estos datos en la caché no será necesario pedirlo de nuevo al servidor

central.

4. EJEMPLO DE APLICACIÓN CLIENTE/SERVIDOR Y DISTRIBUIDA

En la tabla lateral podemos observar un ejemplo de aplicación cliente/servidor y a la vez

distribuida. Se trata de una empresa de distribución de aguas que tiene una sede central y

diversas delegaciones. Cada sede internamente se

comunica por una LAN y entre sedes por una WAN (es más lento). Los datos se hallan todos en el

servidor central y los cambios se propagan asíncro y automáticamente por la noche (las delegaciones

van con retraso pero lo aceptan) Se utiliza un modelo de cliente pesado y servidor ligero, por lo

tanto la mayor parte de las funciones se

desarrollan en el cliente. Se utilizan cachés persistentes en los servidores locales, ello hace

que los datos se actualicen poco pero se consulten bastante.

Dado que los datos se hallan en el servidor central, todas las noches tras propagar los cambios a las delegaciones, se hace

copia de seguridad de los datos.

Esta arquitectura soporta la caída del servidor local de una delegación sin que las demás se afecten (porque no usa replicación síncrona ni protocolo de

confirmación en dos fases), pero no así el servidor central que provocará una

parada general, por lo cual éste es más robusto y fiable que los de las delegaciones.

Aplicación cliente/servidor y distribuida

Page 350: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 39

TEMA

TEMA 8 OTROS TEMAS DE BASES DE DATOS

1. OPTIMIZACIÓN DE CONSULTAS

Dada una consulta en SQL es posible encontrar diversas consultas

equivalentes expresadas en álgebra relacional. Cada una de estas consultas se puede representar gráficamente y además tendrá un coste asociado distinto según

el orden en que se hayan realizado sus cláusulas; la misión por tanto del SGBD es determinar cómo tiene que ejecutarse la consulta para que el coste asociado sea

mínimo. Este coste asociado que busca un gasto de recursos mínimos se va a basar

sobre todo en el número de accesos a disco que debe realizar.

El objetivo de la optimización de consultas es encontrar el plan de acceso a la consulta que tiene asociado un coste mínimo (intervalo de tiempo

necesario para encontrar la respuesta a la consulta formulada por el usuario).

Para verlo con facilidad, pondremos un ejemplo: Tenemos una tabla de

empleados, otra de proyectos y otra de asignaciones de proyectos debidamente cumplimentadas, y queremos llevar a cabo la consulta siguiente, teniendo en

cuenta que la cantidad de empleados (CARD) es 100, proyectos 20 y asignaciones 400 y que un 30% de los empleados dedican más de 200 horas al proyecto:

SELECT empleados.nombre_empl, empleados.num_empl, asignaciones.num_proy

FROM empleados, asignaciones

WHERE empleados.num_empl=asignaciones.num_empl AND asignaciones.dedic > 200

En este caso encontram os las tres estrategias diferentes implementadas en el árbol sintáctico de la consulta:

Tema 8

Otros temas de bases de datos

1. Optimización de consultas 2. Herramientas de

administración

Representación gráfica de

las operaciones de álgebra relacional

Unión Proyección Diferencia Selección

Intersección Combinación Nat. Producto Cartesiano

Representación gráfica de las operaciones de álgebra relacional

Page 351: sistemas operativos, redes y bases de datos

40 · Bases de Datos 2

Podemos observar que cada estrategia tiene un coste diferente, por lo que

el orden de ejecución de las operaciones formuladas dentro de una consulta, repercute directamente en el coste de ejecución de la consulta.

La optimización sintáctica de una consulta es el proceso que determina un

orden de ejecución razonablemente adecuado de las operaciones que incluye

una consulta. Comienza con la traducción de la consulta original en un árbol sintáctico equivalente y finaliza cuando se ha encontrado el árbol óptimo.

Generalmente el SGBD intenta ejecutar las operaciones de álgebra relacional

que decrementen la cardinalidad de los resultados intermedios lo antes posible, a la par que intenta retrasar al máximo las que lo incrementan.

La optimización física de una consulta evalúa el coste total de ejecución del

árbol sintético óptimo asociado a una consulta, para ello el SGBD debe conocer las estadísticas de la BD para considerar el tamaño de los resultados

intermedios y las estructuras de almacenaje del esquema interno que pueden

acelerar las búsquedas como dónde se encuentran los ficheros, si se han definido índices de agrupación, etc.

La optimización semántica de la consulta intenta simplificar las consultas

realizadas por los usuarios teniendo en cuenta las reglas de integridad y la lógica que se han definido sobre la BD. Así por ejemplo si en el ejemplo

anterior intentásemos hacer una búsqueda de los empleados cuyo salario es

mayor que el de su jefe, de existir optimización semántica (que no está implementado en los SGBD actuales) ni se llegaría a realizar la operación, pues

es una regla de integridad que los empleados no pueden ganar más que sus jefes.

2. HERRAMIENTAS DE ADMINISTRACIÓN

Consisten en software que incorporan los SGBD para facilitar las tareas de gestión y administración de la base de datos. Actualmente estas herramientas han

mejorado mucho, permitiendo una interfaz de usuarios y ventanas y paneles desplegables que facilitan mucho la tarea del administrador de bases de datos.

Vamos a encontrar dos grandes tipos de herramientas de administración: las herramientas de administración central y las herramientas de edición y

manipulación de BD.

Las herramientas de administración central son capaces de ejecutar

las siguientes operaciones:

Operaciones relacionadas con el servidor de la BD: Puesta en marcha y

desconexión del servidor. Llamada a otras herramientas de administración: Herramientas de gestión de

espacios de almacenaje, gestión de esquemas, recuperación y copias de

seguridad frente a casi todo tipo de desastres. Supervisión del funcionamiento del servidor: Proporciona información sobre las

sesiones de trabajo activas de los distintos usuarios, el estado de las

actividades destinadas a garantizar la recuperabilidad de los datos, posibilidad

de controlar las situaciones de emergencia y dispositivos para generar informes de incidencias varias.

Las herramientas de edición y manipulación de las BD en el informix

personal edition se encuentran centralizadas en el SQL editor, y desde él es

posible:

Crear, recuperar y modificar documentos de SQL, que en realidad no son más

que ficheros de texto con la extensión SQL. Introducir nuevas sentencias SQL, hacer comprobaciones sintácticas de las

mismas e incluso guardarse en documentos independientes.

Page 352: sistemas operativos, redes y bases de datos

c Bases de Datos 2 · 41

TEMA

Ejecutar pedidos SQL, cuyos resultados salen en ventanas adicionales.

Las herramientas que se encuentran por tanto en Informix y que nos ayudan a realizar todas estas tareas son: Command Center, Schema Knowledge, Informix

Server Administrador, Control Center, SQL Enterprise Manager.

Texto elaborado a partir de: Bases de datos II

Jaume Sistac Planas, Rafael Camps Paré, M. Elena Rodríguez González, Toni Urpí Tubella, Ramón Segret i Sala, Dolors Costal Costa, Pablo Costa Vallés

Febrero 2006

Page 353: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos

TEMA 1 EVOLUCIÓN DE LAS BASES DE DATOS

1. EVOLUCIÓN DE LOS MODELOS DE BASES DE DATOS

Le evolución que han seguido los modelos de bases de datos, y que se

ajusta perfectamente a la figura del margen, es la siguiente:

Los ficheros clásicos

Un fichero es un contenedor que almacena datos estructurados siguiendo unas reglas sencillas: el fichero almacena los datos que corresponden a todas las

instancias de una determinada entidad, además es una colección de registros,

siendo cada registro una colección de campos. Estos ficheros clásicos no proporcionan ningún software especializado de

acceso, sino que toda esta programación necesaria para manipular los datos que residen en un fichero tiene que estar contenida en cada uno de los programas que

acceden a él. Este requisito introduce complejidad al sistema por tener que conocer con exactitud la implementación física concreta de cada fichero para poder ser

entendido y utilizado.

El modelo jerárquico

Siguiendo con los modelos prerrelacionales, cuando la complejidad de los datos iba creciendo,

se requería nuevo software que los ficheros clásicos

no soportaban. Aparecieron productos como el IDS construido para General Electric o el más moderno

IMS de IBM (1966) que se considera el primer SGBD contruido para la aeronáutica. El contenedor

que almacena los datos se llama base de datos que contiene los datos de todas las instancias de un

conjunto de entidades relacionadas. Estas entidades

se estructuran entre sí de manera jerárquica o en árbol, siendo la base de datos total una colección de

árboles, uno por cada instancia de la entidad principal; cada instancia de árbol contiene una

instancia de entidad principal y todas las instancias

de entidades dependientes relacionadas con la principal, y cada nodo del árbol es una colección de

campos, uno por cada atributo de la entidad que este nodo almacena.

Aparece la figura del administrador de

bases de datos, para gestionar la implementación física de las bases de datos jerárquicas y decidir

entre diferentes opciones cuando esto es posible. Este modelo supuso un avance, dado que lo

soportaba un verdadero SGBD, porque hay una separación de niveles (nivel exterior jerárquico para

programadores y nivel interior, el de la

implementación para el administrador).

Los modelos en red Aún así, el modelo anterior no modeliza todas las posibilidades, en especial

cuando existe una relación entre entidades de muchos a muchos (muy frecuente)

solo podía representarse introduciendo redundancia de datos. El modelo de tados BOM (bill of materials pues relacionaba materiales y estructuras ya fabricadas) si

cumplía este requisito de relación.

Tema 1 Evolución de las bases de datos

1. Evolución de los modelos de

bases de datos 2. Arquitectura funcional de un

SGBD

Evolución de los modelos de bases de datos

Page 354: sistemas operativos, redes y bases de datos

2 · Sistemas de gestión de bases de datos

El modelo en red o modelo CODASYL, determina el set como pieza

fundamental para construir un diseño de bases de datos. El set está constituido por dos entidades, el propietario y el miembro, ligadas por una relación de uno a

muchos. El set permite al usuario desplazarse de una instancia de propietario a todas las instancias de sus miembros, así como de una instancia de miembro a la

instancia de su propietario. La entidad propietario de un set puede ser propietaria

de otros sets y/o miembro de otros sets, y la entidad miembro puede ser propietaria de otros sets y/o miembro de otros sets. Así tenemos una verdadera red

de entidades.

El modelo relacional En el modelo relacional los elementos estructurales son las relaciones, las

tuplas y los atributos, popularizados enseguida como tablas, filas y campos. Sobre

dichos elementos se definen un conjunto de operaciones (álgebra relacional) y se define un lenguaje declarativo (SQL) para su manipulación.

Características como la clave primaria, la clave foránea y el hecho de que el orden de las tuplas dentro de una relación y el orden de los atributos son

irrelevantes, caracterizan también a este modelo. Así que los elementos son

identificados por apuntares simbólicos (nombres y variables) sin ningún apuntador físico u orden establecido.

El uso coloquial mediante tablas, filas y campos preveía que los SGBD se encontrarían también al alcance de usuarios no informáticos, que podrían acceder

más fácilmente a los datos almacenados. Aun así, tardaron 10 años en aparecer los primeros SGBD comerciales

(1981) de la mano de Oracle y, posteriormente de IBM.

Modelos semánticos

Los modelos semánticos incorporan el concepto de dominio, bueno de hecho, el modelo relacional también lo hace, pero soporta un número reducido de

ellos (enteros, decimales, caracteres, boléanos…); en el modelo semántico se

potencia más y se definen las operaciones posibles con cada uno de ellos (así un campo número de teléfono no se permitirá que se use como operación matemática

a pesar de ser un entero como puede ser el campo dinero pero que sí tiene sentido que se pueda operar con este último). Ofrece también conceptos de instanciación-

clasificación, de generalización-especialización, de agregación-descomposición, etc.

Bases de datos orientadas a objetos

El concepto objeto es la asunción de la representación de la complejidad en el largo comino de modelizar la realidad de los datos. Así y al igual que en lenguaje

orientado a objetos, aparecen los conceptos de objeto y clase de objeto y existen varias posibilidades de interrelacionar clases de objetos, como la herencia.

Eso sí, existió una dicotomía al principio de la década de los 90. La discusión se

centraba en si dotar a los lenguajes relacionales existentes de soporte a objetos o, por el contrario, iniciar unos nuevos sistemas de bases de datos orientadas a

objetos partiendo de los lenguajes orientado a objetos y olvidando todo el trabajo realizado hasta ahora. Siguiendo esta última tendencia aparecerían las bases de

datos orientadas a objetos denominadas “puras”, pero la tendencia actual es el de

dotar a los sistemas actuales de soporte a objetos, dado que durante muchos años han demostrado su buen hacer y porque desde luego, es más rentable para las

empresas de software que cuentan mucho en la industria informática: es lo que ha dado en llamarse modelo relacional extendido.

Page 355: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 3

TEMA

2. ARQUITECTURA FUNCIONAL DE UN SGBD

El procesamiento de una sentencia SQL es la siguiente:

Seguridad: se verifica en primer lugar que el usuario que

ha pedido la ejecución de una sentencia, esté autorizado para realizar dicho tipo de sentencia.

Procesamiento de vistas: las referencias a vistas son

sustituidas por las referencias equivalentes a tablas, con

lo que la sentencia queda más homogénea. Integridad: Claves primarias y foráneas, así como las

restricciones que pudiera haber solo columnas y tablas

son estudiadas para la sentencia a realizar, en busca de que no rompa la integridad de datos del sistema.

Optimización: Como las operaciones a ejecutar una vez

descompuestas pueden realizarse en distinto orden, el proceso de optimización se encarga de escoger, en cada

una de las transformaciones, la mejor combinación

posible de operaciones procedimentales. Control de concurrencia: Hay que evitar que la operación

que se va a realizar no entre en conflicto con otra

operación que también se esté ejecutando. Recuperación: Hay que tomar nota antes de cualquier

lectura o escritura de un dato, ya que en fallos posteriores

del sistema, tendremos un diario de operaciones y con

éste, la posibilidad de recuperarlas. Memoria intermedia: En ella se guardan los datos a los

cuales se ha accedido recientemente, pues la probabilidad

de volver a acceder inmediatamente es alta y se ahorrar así muchas operaciones físicas de entrada y salida, ya que

el gestor de memoria intermedia va físicamente a los

datos sólo cuando es necesario.

Arquitectura funcional de un SGBD

Page 356: sistemas operativos, redes y bases de datos

4 · Sistemas de gestión de bases de datos

TEMA 2 DISEÑO CONCEPTUAL Y LÓGICO DE BASES DE DATOS

1. DISEÑO DE BASES DE DATOS

Las etapas del diseño de bases de datos son:

1. Captura y abstracción de los requerimientos de los usuarios: Mediante

entrevistas con todos los miembros de la empresa hay que conseguir una instantánea o fotografía de la misma, para concretas las especificaciones y

requerimientos.

2. Esquema conceptual: Con la ayuda de un modelo semántico conveniente elaboramos un esquema conceptual, nosotros elegiremos el modelo UML, pero

hay que reconocer que este esquema puede variar con el estado de la tecnología. Ya existen actualmente modelos más potentes, pero como después

tenemos que elaborar un modelo lógico partiendo de este conceptual y actualmente los modelos lógicos van muy por detrás de los primeros, no es

conveniente realizar el modelo conceptual más potente y detallado que

podamos y luego esperar que los modelos lógicos y físicos implementen lo que puedan. EN el futuro a medida que las implementaciones de SGBD sean más

finas o completas, quizás tendremos que cambiar nuestra elección de UML por otros modelos semánticos más elaborados.

3. Transformación a modelo lógico: Transformamos el modelo conceptual

obtenido en el apartado anterior en UML por el modelo lógico que en nuestro caso consistirá en sentencias estándar AQL.

4. Aplicar la teoría de la normalización: Si procede, normalizaremos (lo veremos en el siguiente capítulo) y en nuestro, por el tipo de modelo elegido, sí

procede. 5. Acomodación al SGBD del que disponemos: Construiremos el modelo

físico adaptándolo al SGBD del que disponemos.

6. Cuantificación de volúmenes de datos y frecuencias de procesos: Aquí finaliza la parte pesada y esencial del diseño de bases de datos, pero queda el

afinamiento, un ajuste que no es en absoluto poco importante. Tenemos que detectar si hay grandes volúmenes de datos a los que aplicar entonces técnicas

de fragmentación; también debemos detectar posibles procesos críticos.

7. Desnormalización, tiempo de respuesta, integridad, seguridad, concurrencia, recuperaciones: Todos estos conceptos debemos tratarlos a

fondo. Los dos primeros están muy relacionados, pero además debemos dar integridad a la base de datos (buenas restricciones), seguridad, concurrencia

(adecuado nivel de aislamiento), etc.

8. Ajuste de las estructuras físicas de almacenamiento y parámetros del sistema: Cada SGBD tiene unos ajustes internos y admite diferentes formas de

almacenamiento de estructuras físicas, por lo que debemos introducir los parámetros más adecuados a cada caso; y esto solo se puede realizar con una

lectura atenta de los manuales del administrador de base de datos, con mucha experiencia y con pruebas repetidas y experimentación.

9. Control de rendimientos: Ya hay muchas herramientas visuales que

monitorizan y nos dan todo tipo de histogramas del rendimiento de la base de datos.

10. Informe final del diseñador: Hay que escribir un informe contando todo lo que se ha hecho: esquemas conceptual y lógico y físico, redundancias

deseadas, agrupaciones, etc.

Hay que tener en cuenta que estas 10 etapas no son lineales; por frecuentes

cambios es fácil tener que volver por ejemplo de la etapa 3 a la 1 para aplicar ciertos cambios, es la retroacción y es una característica muy importante en el

comportamiento de los diseñadores.

Tema 2

Diseño conceptual y lógico de bases de datos

1. Diseño de bases de datos

2. Normalización en bases de datos relacionales

Page 357: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 5

TEMA

Sobre los modelos lógico y físico hay que decir que los modelos de bases de datos,

en abstracto, definirán lo que hemos llamado modelo lógico, representado generalmente por un estándar. Estos modelos más representativos del mercado

son 3: Implementaciones del modelo relacional clásico: que suponen el 80% de cuota

del mercado actual.

Implementaciones de las bases de datos puras orientadas a objetos, que

representan una cuota del 3 al 5% y parece que no aumenta. Implementaciones de las bases de datos relacional con objetos: actualmente un

10 a 15% de cuota pero en constante aumento, como Oracle 8, Informix 9, etc.

Esto implica que en el futuro podemos decantarnos por escoger como modelo lógico el relacional con objetos y, en consecuencia, como modelo físico el

correspondiente a sus implementaciones físicas (Oracle, Informix…).

Por último, decir que las alternativas de diseño que hemos elegido, puesto

que algunas decisiones debemos tomar, son las siguientes:

Hemos elegido como modelo conceptual el UML, y como modelo lógico el

relacional clásico, y por tanto como modelos físico el estándar SQL:1999. No es lo mismo diseñar un sistema de información nuevo partiendo desde cero,

que diseñar un sistema para una empresa que resulta de la absorción o fusión

de varias.

2. NORMALIZACIÓN EN BASES DE DATOS RELACIONALES

Antes de conocer los 6 grados y formas de

normalización, debemos conocer el concepto de

dependencia funcional que si no es bien entendido, provoca anomalías de diseño.

Básicamente una dependencia funcional en una tupla de una base de datos es cuando uno o más campos de la base

de datos, determinan unívocamente otro u otros campos de la tupla, provocándose en este caso redundancias.

Así en la tabla/tupla lateral denominada Suministros, encontramos las siguientes

dependencias funcionales: {CodigoProv, CodigoArticulo} {Cantidad}

{CodigoProv, CodigoArticulo} {CiudadProv}

{CodigoProv} {CiudadProv}

Estas relaciones de dependencias, también podemos anotarlas así:

Las dos primeras relaciones de dependencia se explican porque las claves

que la provocan son las claves primarias de la tabla, por ello es lógico que así sean,

pero no así la última; es obvio que siempre que aparezca 1 en el código de la provincia, ésta va a ser Jerez. Ojo, que hemos llegado a este análisis al ver los

descriptores de la tupla (los nombres de los campos) y analizando los datos que lo contienen, hay que tener cuidado para no tomar tampoco decisiones a la ligera.

Como decíamos, la última dependencia nos provoca anomalías de diseño:

Anomalías de modificación: Cada vez que un proveedor cambie de provincia

(por ejemplo el de Jerez cambia a Ceuta) debo en la tabla hacer tantas modificaciones como veces aparezca, en este caso 2, y tener cuidado de no

dejarme ninguna, pues dejaría la tabla inconsistente. Anomalías de borrado: Si un proveedor que sólo suministra un producto deja

de hacerlo y lo borramos de la tupla, se perderán sus datos (código de

proveedor y ciudad), con lo que perdemos datos elementales sin querer.

Anomalías de inserción: No podemos almacenar los datos básicos de un

proveedor como el código de provincia y su ciudad si no sabemos los artículos

Tabla Suministros

Page 358: sistemas operativos, redes y bases de datos

6 · Sistemas de gestión de bases de datos

que suministra, son datos independientes que como se hayan juntos en la

misma tupla, debemos respetar.

Este problema se debe a que la tupla suministros describe dos hechos elementales del mundo real distintos y además independientes: por un lado los

artículos que suministra cada proveedor y, por otro, los datos del proveedor en sí

mismos. Esto lo pretende resolver la teoría de la normalización: toda relación tiene

que describir un concepto semántico único. Cada forma normal del círculo lateral es más restrictiva que la anterior, es decir la 3FN cumple todas las restricciones de la

2FN más algunas nuevas. Cuando una relación no está ni siquiera en 1FN se dice que está en NF2 (non first normal form).

Primera formal normal (1FN) Todo atributo de la relación es atómico, no descomponible y no

es un grupo repetitivo. Así en la relación suministros lateral, los atributos código articulo y cantidad no son atómicos. Para que

así lo fueran deberían ser como la imagen que teníamos en la

página anterior. Cualquier modelo relacional siempre garantiza que las relaciones estén en 1FN dado que sólo hay una

estructura para representar los dados, y cada uno de ellos se representa uniformemente mediante valores atómicos. Por

tanto, esta relación lateral estaría en NF2.

Segunda forma normal (2FN)

La relación se encuentra en 1FN y todo atributo no clave depende funcionalmente en forma completa de la clave primaria (hay una excepción y es

que un atributo puede depender funcionalmente de parte de la clave primaria si dicho atributo es parte de una clave alternativa). Es obvio que aquellas relaciones

con clave primaria simple siempre estarán en 2FN, sólo se puede violar esta 2FN

cuando la clave primaria es compuesta, como en el ejemplo de suministros:

La idea es clara, si un subconjunto no clave depende funcionalmente de un

subconjunto propio de la clave, es porque representa un hecho de este

subconjunto propio y, por lo tanto, la solución está en separarlos en dos relaciones diferentes de la siguiente forma:

Tercera forma normal (3FN) Similar a la 2FN pero involucrando atributos no claves, es decir, una

relación está en 3FN si se encuentra en 2FN y además ningún atributo no clave depende funcionalmente de ningún otro conjunto de atributos no clave. Por cierto,

la excepción aplicada en la 2FN también se aplica a la 3FN.

Así en esta relación, encontramos que hay una dependencia funcional entre

ciudad y provincia de las que ninguna son clave. De nuevo, la solución es proyectar dos relaciones diferentes:

Forma normal de Boyce-Codd (FNBC)

Grados de las formas

normales

Tabla Suministros en NF2

Page 359: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 7

TEMA

La relación anterior se encuentra en 3FN; a pesar de que parece incumplir

la 2FN por la relación de dependencia entre DNIAlumno y CódigoMatricula, pero al ser ésta última parte de una clave alternativa (CodigoAsignatura, CodigoMatricula)

se aplica la excepción y lo mismo con la excepción a 3FN por la relación de

dependencia entre CodigoMatricula y DNIAlumno pues forma parte de una clave alternativa.

No obstante, si analizamos la tabla notas lateral, vemos que puede estar plagada de errores. Hay

redundancias (por cada asignatura en que se matricule cada

alumno, se repite su código de matricula) y anomalías de modificación (como en el ejemplo al modificar el código de

matrícula de un alumno). El origen del problema es histórico, pues cuando Codd enunció la 2FN y 3FN en 1970,

no consideró la posibilidad de que en una relación pudiera haber varias claves candidatas que fueran compuestas, ni

tampoco que entre estas pudieran haber solapamientos.

Pues bien, una relación está en FNBC si está en 1FN y todos los determinantes son clave candidata de la relación. Un

determinante son los orígenes de la flecha, y en el ejemplo que nos ocupa, si analizamos todas las relaciones posibles:

encontramos como determinantes: DNIAlumno, DNIAlumno-CodigoAsignatura, CodigoMatricula, CodigoAsignatura-CodigoMatricula y

como claves candidatas tenemos: DNIAlumno-CodigoAsignatura y CodigoAsignatura-CodigoMatricula. Como no se cumple que todos los

determinantes son clave candidata debemos solucionar las relaciones DNIAlumnoCodigoMatricula y CodigoMatriculaDNIAlumno.

Cualquiera de las 4 soluciones con 2 relaciones cada una de ellas de la figura lateral serían válidas para este ejemplo. Las más lógicas desde el

punto de vista del centro académico serían la primera o la segunda, y de entre estas dos, nos quedaríamos con la segunda, pues pueden

existir alumnos extranjeros que no dispongan de DNI o, lo que es peor, que se repita con alguno de los que ya tenemos matriculados.

Hemos de pensar que toda relación se puede normalizar hasta este nivel, aunque el proceso de normalización no es único, aunque eso

sí, la solución siempre es satisfactoria. Como consecuencia del proceso de normalización evitamos redundancias y anomalías ya que separamos

hechos semánticamente diferentes.

Cuarta forma normal (4FN)

Hasta ahora las relaciones que hemos visto eran de hechos monovaluados, la 4FN y la 5FN están relacionadas con hechos multivaluados.

En el ejemplo que encontramos en la página siguiente se establece la relación ConoceProgr, cuando un empleado codificado mediante su DNI (clave

primaria) conoce determinados lenguajes de programación y determinados idiomas

hablados y escritos. Si normalizamos la primera tabla que encontramos en la segunda relación nos podemos llegar a preguntar si existen redundancias, a pesar

de que cumplen la FNBC y por supuesto, todas las anteriores. Cualquier inclusión de otro lenguaje de programación nuevo que aprendiera un empleado o lengua

hablada, nos haría tener que repetir varias inclusiones en la relación para que

quedara completamente registrado. El origen de estas anomalías radica en que esta relación recoge dos hechos multivaluados: por un lado los lenguajes de

programación que el usuario conoce, y por otro los idiomas que domina, y como

Tabla Notas

4 soluciones para normalizar en FNBC

Page 360: sistemas operativos, redes y bases de datos

8 · Sistemas de gestión de bases de datos

estos dos hechos son independientes entre sí (un lenguaje de programación

no determina conocer un idioma y viceversa). Así que una relación se encontrará en 4FN si se encuentra en FNBC y además no tiene dependencias

multivaluadas independientes. Así, el estado inicial yla solución propuesta son las siguientes:

Quinta forma normal (5FN) Hay relaciones en las que a pesar de que presentan redundancias en

sus contenidos, no se puede aplicar el proceso de reducción a dos relaciones que hemos visto anteriormente, y esto se debe a que no existen todas las

posibles combinaciones. Un ejemplo, para la siguiente tabla:

Si descomponemos en cualquiera de las tres posibilidades existentes:

(Profesor, Asignatura) – (Asignatura, Centro) (Profesor, Asignatura) – (Profesor, Centro)

(Asignatura, Centro) – (Profesor, Centro) Acabamos perdiendo información, en primer lugar no sabemos que

profesores están asignados a cada centro; en el segundo caso desconocemos qué asignaturas se imparten en cada centro y en el último no podemos saber qué

asignaturas imparte cada profesor. Este problema tiene lugar porque la relación

ProfesorAsignaturaCentro aunque representa hechos multivaluados, estos son dependientes entre sí (y no como el caso anterior, dado un programador, los

idiomas y lenguajes de programación que conocía quedaban perfectamente determinados por sus posibles combinaciones, ahora no). Ahora bien, podemos

encontrar una ley de simetría, que en nuestro caso es la siguiente: Si un profesor imparte una asignatura y

La asignatura se imparte en un centro y

En este centro trabaja el profesor

Entonces

El profesor imparte la asignatura en el centro.

A esta dependencia se le denomina dependencia de proyección-combinación, dado que la relación original se puede reconstruir a partir de la

combinación de las nuevas relaciones en las que la relación se ha descompuesto:

ProfAsigCentro = (ProfAsig * AsigCentro) * ProfCentro

Relación ConoceProg

Page 361: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 9

TEMA

Pero hay que tener mucho cuidado, dado que puede haber dos tipos de

estas dependencias: Dependencias de proyección-combinación sin variación: Es el caso que

hemos tratado hasta ahora porque cumplía la ley de simetría que habíamos

establecido. En estos casos si existe este tipo de dependencia, la relación sólo estará en 5FN si la hemos descompuesto en las relaciones que la componen.

Dependencias de proyección-combinación con variación: En este caso

no es posible la descomposición porque ya no se puede volver a reconstruir y darnos el mismo resultado. Si por ejemplo, a la relación de profesores de

ejemplo le eliminamos el valor <Garcia, Algebra, FIB>, y descomponemos en

sus 3 relaciones y volvemos a componerlas, nos aparecerá ese valor que hemos eliminado. Esto sucede así porque la ley de simetría de la que partíamos no se

cumple para la relación original, es decir, ya no es cierto que cuando un profesor imparte una asignatura (Algebra) y ésta se imparte en un centro (FIB

y FME), y ese profesor pertenece a ese centro (FIB y FME) ese profesor

imparta la asignatura en ese centro (sí en el caso de FME pero no para Algebra en FIB).

Queda claro entonces que el proceso para determinar cuando un hecho

multivaluado está en 4FN o en 5FN no es directo, aunque estas relaciones se

pueden considerar como casos patológicos que raramente aparecen en la práctica. Lo que sí queda claro es que una relación solo puede violar las formas

normales 4FN ó 5FN si su clave primaria está formada como mínimo por 3 atributos (relación ternaria como mínimo) y que una relación que está en forma 5FN puede

presentar repeticiones en su contenido, pero éstas son inevitables y no debemos considerarlas redundantes.

En definitiva, la normalización es útil para comprobar aspectos semánticos difíciles, pero pocas veces es necesaria, dado que habitualmente podemos

distinguir los hechos independientes. Hay veces que conviene aplicar justo lo contrario, la desnormalización, dado que hay que tener en cuenta que la

normalización penaliza la recuperación o consulta de los datos porque exige

operaciones de combinación en distintas tuplas para recuperar datos que originalmente estaban juntos en la misma; cuando los atributos de una relación que

representan otro concepto semántico no se actualizan frecuentemente, quizás resulte conveniente utilizar la desnormalización.

Las bases de datos relacionales con objetos incorporan relaciones que están en

NF2, para la teoría actual, dado que hay que desarrollar otra teoría de la

normalización específica para ellas.

Page 362: sistemas operativos, redes y bases de datos

10 · Sistemas de gestión de bases de datos

TEMA 3 RECONSIDERECIÓN DE LOS MODELOS CONCEPTUAL Y LÓGICO

1. TRAMPAS DE DISEÑO

Cinco trampas de diseño son las que con más facilidad de cometes, con

distintos ejemplos vamos a tratar de desenmarañarlas:

Abanico Para esta primera trampa de diseño (y para la segunda) tendremos el

mismo ejemplo que vemos en la figura lateral: la organización de profesores en una

Universidad, en la que existen divisiones, a éstas pertenecen departamentos y a ella profesores, con asociaciones 1 a N como se pueden ver. El diseño correcto es

el primero de la imagen de 3, pero la segunda imagen es el error en abanico, que se da cuando tenemos dos asociaciones con cardinalidad 1 a N; puesto que se han

seleccionado las asociaciones incorrectas y aunque a priori parece que no perdamos información no es cierto, dado que no sabemos como quedan asociadas.

Así para un profesor determinado podemos desconocer a que departamento

pertenece, pues una consulta a la base de datos para el profesor 1, nos devolverá los departamentos 1 y 2. Este error

se debe a no haber modelado correctamente las asociaciones y habernos alejado de la realidad.

Corte Es una trampa parecida a la anterior pero un poco más

sutil. Podemos verla en la tercera figura de la imagen lateral, aunque a priori no hay pérdida de información y podemos

realizar todas las consultas pertinentes, puede ocurrir que si un departamento se quedase temporalmente sin profesores,

perderíamos la asociación divisiones/departamentos. Es decir,

al borrar instancias de la clase central, las asociaciones entre instancias de las clases que hay en los extremos pueden

quedar cortadas.

Pérdida de afiliación

Se podría definir como una equivocación en doble abanico. Una instancia de la clase central puede estar

relacionada con todo un abanico de instancias en cada una de las otras dos clases, así sólo podemos decir que una instancia

de la clase central puede estar relacionada con algunas de las

instancias en abanico, pero no podemos concretar cuales.

Lo vemos con el ejemplo de la imagen lateral, Al realizar el diseño de la base de datos entre proveedores, piezas y clientes, no podemos decidir de que

proveedor son las piezas que ha comprado determinado cliente, y viceversa. La solución a esta pérdida de afiliación la vemos

desarrollada en la misma figura, en la parte inferior, se trata de

una asociación ternaria denominada suministros.

Aridad de las asociaciones En general, hay que prestar mucha atención a las asociaciones

que involucran más de dos clases, y alguna de ellas tiene

multiplicidad igual a 1. En tales casos, puede que esta clase realmente esté relacionada sólo con una de las otras clases y

no deba participar en la asociación, nos tenemos que fijar muy especialmente en la razón por la cual está el 1.

Tema 3

Reconsideración de los modelos conceptual y lógico

1. Trampas de diseño

2. Consideraciones en el paso a modelo lógico

3. Representación en el modelo

lógico de la generalización/especialización

4. Representación de atributos instanciados en diferentes

valores

5. Abrazos mortales de definición y de carga

6. Sustituos de la clave primaria 7. Frecuencia de procesos y

volúmenes de datos

8. Redundancia de datos: duplicados y derivador

9. Históricos

Organización correcta Error de abanico Error de corte

Error pérdida de afiliación Solución: asociación ternaria

Page 363: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 11

TEMA

Así, por ejemplo tenemos un diseño erróneo en el que para empezar no sabemos que nombre darle, eso ya es un mal síntoma.

Si estudiamos la relación ternaria nos damos cuenta que no está ni en 2FN y es que el diseño es completamente incorrecto, siendo el

adecuado el que vemos justo bajo él; otra solución a otros casos es

tratar la clase con aridad 1 como atributo de la asociación y no como una clase que participa en la asociación.

Semántica de las clases

Es importante modelizar en las asociaciones el significado real de los elementos de nuestro diseño; así hay que prestar especial atención

al significado real que tiene lo que se quiere representar y no

dejarnos llevar por lo que pueda parecer a primera vista. Por ejemplo en una base de datos con departamentos que tienen sedes

distintas, y en las que cada departamento puede tener varias sedes, el tributo superficie no puede situarse en el departamento, sino en

cada una de las sedes

2. CONSIDERACIONES EN EL PASO A MODELO LÓGICO Desaparición de tablas correspondientes a clases: Si una clase aparece

en nuestro modelo conceptual es porque realmente nos interesa que esté y,

por lo tanto, ya esta bien que esté, pero nos tenemos que plantear si tiene

suficiente importancia para dar lugar a una tabla de la base de datos, especialmente si no tiene ningún atributo que forme parte de la clave primaria.

Un ejemplo: En una empresa con 4 almacenes tenemos una tabla almacenes con su AlmacId y otra tabla Piezas con PiezaId; esto nos sirve para relacionar el

stock existente en cada moemnte Stock (almacId, piezaId, stock). Solo es posible suprimir una tabla si no guarda ningún atributo y las posibles

comprobaciones de integridad se hacen de alguna otra manera. Las claves

foráneas por tanto, son muy importantes para la integridad de nuestra base de datos.

Comprobación de instancias: Una vez acabado el diseño debemos

cerciorarnos de que funciona como realmente queremos que lo haga y modeliza correctamente la realidad. Así en los ejemplos laterales observamos

como las instancias que encontramos en la base de datos no se corresponden

al esquema que hemos diseñado. Las instancias, eso sí, pueden ayudarnos a encontrar errores, pero nunca nos han de conducir al diseño, esto lo tiene que

hacer la semántica de los datos. Atributos de asociaciones: En general, las asociaciones binarias N:M suelen

tener atributos, mientras que las de multiplicidad 1:1 ó 1:N no. Si la asociación

es 1:N es posible que el atributo pertenezca a clase del lado N, mientras que si la asociación es 1:1 podría pertenecer a cualquiera de las dos.

Restricciones de integridad: Tener datos erróneos puede ser incluso peor

que no tenerlos, y las restricciones de integridad ayudan a controlar la

existencia de errores. En el diseño, no se tiene que descuidar su importancia, y sobre todo, no las tenemos que olvidar en el momento en que este diseño se

implemente sobre un SGBD. Para implementar estas restricciones los sistemas actuales nos ofrecen distintas sentencias restrictivas en la creación de tablas

(unique, not null, check); el SQL/PSM permite definir disparadores,

procedimientos, funciones y paquetes; SQL Host permite incluir sentencias SQL incluso en Java para hacer llamadas; y SQL/CLI tiene librerías de funciones

para lo mismo. Sustitución: Si las restricciones de integridad ralentizan el sistema, a veces se

hace necesario liberar al SGBD de este trabajo para poder ofrecer un

rendimiento adecuado; en este caso debemos tener algún tipo de control

externo o, mejor aún, un control diferido por ejemplo que pueda hacer todas las comprobaciones en horas de menos actividad (noches, fines de semana…).

Error de aridad en las asociaciones Una de las posibles soluciones

Comprobación de instancias

Page 364: sistemas operativos, redes y bases de datos

12 · Sistemas de gestión de bases de datos

3. REPRESENTACIÓN DE GENERALIZACIÓN/ESPECIALIZACIÓN

Existe una especialización disjunta si ninguna instancia de la superclase (A) está en más de una subclase (B, C ó D); y una especialización completa si toda

instancia de la superclase está, al menos, en una de las subclases. Estos dos parámetros son fundamentales a la hora de decidirnos por cualquiera de las 3

alternativas que encontramos.

La primera alternativa consiste en una tabla para cada una de las clases, donde la superclase contiene los atributos comunes y las tablas de las subclases los

específicos a cada uno. Ésta suele ser normalmente la mejor opción, porque es la más flexible y la que se encuentra más cercana al diseño conceptual.

La segunda alternativa nos propone una tabla con

todos los atributos de todas las clases; interesa si hay pocos atributos y no vamos a tener muchos valores nulos, es decir,

interesa cuando la especialización no es disjunta y es completa. La tercera opción consiste en diferentes tablas para

cada subclase que guarden también las columnas correspondientes a los atributos de la superclase. Sólo interesa

esta alternativa cuando la especialización es disjunta y

completa.

4. REPRESENTACIÓN DE ATRIBUTOS INSTANCIADOS EN DIFERENTES VALORES

Es relativamente habitual encontrar atributos instanciados en varios valores

al mismo tiempo, pero como sabemos la 1FN obliga a que estos atributos sean atómicos. Si por ejemplo queremos guardar en una base de datos distintas medidas

para un aparato distinto aplicado a elementos diferentes, tenemos sólo dos opciones:

Guardar cada valor en una columna distinta de la tabla: Medida (clave,

valor1, valor2, …, valorn), Si escogemos esta opción el número de valores

(n) no debería ser muy grande y corremos el riesgo de tener muchos valores vacios.

Tener una fila diferente para cada valor: Medida (clave, aparato, valor). Así

si el valor no está no es necesario guardar ninguna fila. La clave cambia y es menos natural. Con la primera opción accedemos a los valores de un solo

golpe, con esta última sólo accedemos de manera sencilla a algunos valores seleccionados. El tratamiento de los atributos también es importante, porque

funciones de agregación como SUM, AVG se aplican al agrupar filas, pero no

columnas.

5. ABRAZOS MORTALES DE DEFINICIÓN Y CARGA

Tenemos dos tipos de abrazos mortales, al intentar crear tablas (de

definición) y al insertar datos (de carga). Los abrazos mortales de definición tienen lugar cuando queremos crear dos tablas con claves foráneas la una a la otra,

lógicamente como la primera no está creada, la segunda no puede referenciarla y viceversa. Por ejemplo queremos crear la tabla departamento y la tabla empleados,

y uno de los empleados tiene que ser el jefe del departamento; si creamos primero

la tabla departamento no podemos referenciar al jefe dentro de los empleados porque no está creada, si creamos primero la de empleados no podemos

referenciar a qué departamento pertenecen por la misma razón, la tabla a referenciar todavía no existe. Hay dos soluciones:

O bien creamos una tercera tabla independiente, que nos sirva para

referenciarlas. Por ejemplo, creamos la tabla departamentos con su DeptId,

Generalización/Especialización

Page 365: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 13

TEMA

seguidamente la tabla empleados con clave foránea a esa tabla

departamentos y en tercer lugar la tabla Jefe que hace referencia a las dos primeras.

Esta otra solución la proponen algunos SGBD en sus manuales, y

consiste en crear una de las dos tablas sin clave foránea, luego la segunda, y luego volvemos a la primera y la modificamos incluyendo la

clave foránea que habíamos omitido. Desde luego es una solución, pero nos encontraremos al insertar datos posteriormente con el abrazo

mortal de carga.

El abrazo mortal de carga sucede al intentar cargar datos en el caso de que

optemos por la segunda solución anterior; si insertamos primero en una tabla violamos la restricción de integridad, pero lo mismo ocurre si lo hacemos en la

segunda, al referenciar un objeto que todavía no existe en la otra tabla. También

hay dos soluciones posibles, por un lado desactivar las restricciones de integridad de alguna de las tablas, lo cual engendra un grave peligro pues cualquier proceso

de otro usuario puede modificar la base de datos y dejarla inconsistente. Una solución mucho mejor consiste en aplazar o diferir la comprobación de las

restricciones hasta el final de la transacción, momento en el cual ya tendremos

todas las instancias creadas en las dos tablas y cumpliremos las restricciones de integridad.

No obstante es mejor evitar todas estas desactivaciones o aplazamientos en las restricciones diseñando la solución con la tercera tabla, pero si tenemos una base

de datos ya creada no quedará más remedio que poner en práctica estas soluciones.

6. SUSTITUTOS DE LA CLAVE PRIMARIA

La clave primaria de una tabla siempre es motivo de problemas, hasta claves como el DNI que parecen únicos no lo son o no los posee toda la población,

así que en muchas ocasiones tampoco sirven. Para crear claves consistentes y, por

supuesto, únicas hay dos sistemas:

Clave artificial de sistema: Son claves que se generan automáticamente y

evitan que dos objetos en una misma tabla puedan tener la misma clave, lo cual las hace únicas pero ojo, dentro de una única tabla, no dentro de toda la

base de datos. Con el tiempo han evolucionado a identificadores de objeto que

no se repiten nunca para ningún otro objeto nuevo esté en esta tabla o en otra cualquiera.

Clave artificial de usuario: Es el usuario el que define esta nueva clave.

Ambos tipos de claves suelen ser contadores que se incrementan y no están

concebidos para ser consultados, sino únicamente comparados con el objetivo de determinar la identidad de las instancias; las solemos utilizar cuando no hay una

clave única consistente, o cuando la clave primaria requiere demasiados atributos

para su creación.

7. FRECUENCIA DE PROCESOS Y VOLÚMENES DE DATOS

Frecuencia de procesos

Un punto esencial para un buen diseño de base de datos es considerar para qué se utilizarán y de qué forma, así podemos intentar favorecer los procesos que

se realicen más frecuentemente. Encontramos dos tipos de procesos críticos: los que se ejecutan con gran

frecuencia y los que tienen como requerimientos un tiempo de respuesta máximo

determinado (como podría ser un sistema de tiempo real). Las soluciones para reducir el tiempo de respuesta de los procesos pasan por implementar algoritmos

de búsqueda determinados que favorezcan ese tipo de búsqueda frecuente, y en

Solución creando una tercera tabla

Page 366: sistemas operativos, redes y bases de datos

14 · Sistemas de gestión de bases de datos

general, realizar planes de ejecución de consultas para encontrar qué paso

consume más tiempo y como lo podemos acortar.

Volúmenes de datos Cuando los datos crecen y los volúmenes de las tablas son excesivos podemos

fragmentarlas:

Fragmentación horizontal: Dividirla por filas, las tablas que se crean tienen el

mismo número de columnas pero menos filas. El criterio para esta división

pueden ser por rangos de valores, un algoritmo de distribución aleatoria, una división por uso. Por ejemplo, este tipo de fragmentación se utiliza

geográficamente cuando una gran empresa tiene distintas sedes y los clientes de cada sede se guardan en la tabla fragmentada de cada sede; así para

consultar todos los clientes hay que hacer una join completa de las tablas

fragmentadas que se encuentran incluso en países distintos. En cualquier caso lo que interesa habitualmente es que las tablas fragmentadas tengan

aproximadamente el mismo número de filas. Fragmentación vertical: Ahora las nuevas tablas que se crean tienen menos

columnas pero el mismo número de filas. Eso sí, las columnas que constituyen

la clave primaria deben replicarse en todas las tablas.

8. REDUNDANCIA DE DATOS: DUPLICADOS Y DERIVADOS

La duplicación de datos utiliza más espacio del necesario para almacenar la

información y puede crear problemas de inconsistencias en la BD, al tener datos

repetidos que debemos actualizar tantas veces como se encuentren duplicados. No obstante, puede evitar operaciones de combinación al no tener que buscar en

distintas tablas datos dispersos (recordemos que la normalización obliga a crear nuevas tablas para evitar precisamente la redundancia de datos) y facilita al

usuario la consulta del contenido de la base de datos; dado sus ventajas es un sistema que se utiliza, pero dado sus inconvenientes, de hacerlo, debemos

documentarlo siempre para que todos los usuarios estén informados.

Los datos derivados son otro tipo de datos que se pueden calcular fuera de tiempo, es decir, si un dato que es muy costoso de calcular y nos va a bloquear

el SGBD durante un tiempo, se puede calcular en otros momentos previos y almacenarlos a la espera de la petición del usuario. Eso sí, si el dato cambio muy a

menudo y sólo se consulta de vez en cuando, no es candidato a ser almacenado.

9. HISTÓRICOS

Si queremos reflejar en la base de datos el paso del tiempo, no basta con

guardar un único valor para cada dato, sino que tenemos que almacenar todos los

valores que toma a lo largo del tiempo, junto con el tiempo de validez y transacción de cada valor. EN este caso, una modificación no sobrescribe los datos, sino que

añade otros nuevos. Físicamente no borramos nada y las tablas crecen en cada operación; incluso el hecho de borrar una información añade datos, ya que

realmente no borra, sino que registra el momento en que la información ha dejado

de ser válida. Estos históricos ocupan muchísimo espacio en la base de datos y no queda

más remedio que prever mecanismos de vaciado periódico, como pasar datos a cinta e incluso a papel.

Aparte de problemas de espacio tenemos problemas con las restricciones de integridad. Con el paso del tiempo, el cambio de las leyes o incluso nuestros

mismos criterios, algo que antes no era válido ahora sí lo va a ser y viceversa; lo

cual cambia las reglas según el momento en que nos encontremos.

Page 367: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 15

TEMA

TEMA 4 EL COMPONENTE DE PROCESAMIENTO DE CONSULTAS Y SQL

1. LA SEGURIDAD

El concepto seguridad integra distintos aspectos:

Confidencialidad: Solo puede leerse la información por parte de los usuarios

autorizados a ellos. Integridad: Debe protegerse la información de modificaciones no autorizadas.

Disponibilidad.

Las violaciones de las bases de datos consisten en la liberación incorrecta de la información, modificación impropia de los datos o denegación de servicios. A su vez

las amenazas se pueden clasificar en:

Amenazas no fraudulentas: Son accidentes casuales, como desastres naturales,

errores en el hardware o software o errores humanos.

Amenazas fraudulentas: Son violaciones intencionadas causadas por usuarios

autorizados que abusan de sus privilegios o agentes hostiles.

Los mecanismos básicos que vamos a estudiar de seguridad son la identificación y autenticación, el control de acceso, la integridad y consistencia y la

auditoría.

La identificación implica la mera en que un usuario proporciona su identidad

al sistema, mientras que la autenticación es el proceso de asociar a un individuo con su identidad única.

Los recursos de identificación suelen ser cosas que una persona conoce

(contraseña), cosas que una persona posee (tarjeta o clave) o cosas que caracterizan a una persona (huella dactilar, pupila). Para validar o autenticar a un

usuario podemos hacerlo mediante el propio SGBD, mediante el sistema operativo, por un servicio de red o por una capa intermedia.

Se denomina control de acceso a la parte del SGBD que tiene la función de

asegurar que los accesos al sistema estén de acuerdo con los modelos y las reglas

fijados por la política de protección. Este control está formado por dos componentes: las políticas de acceso (principios según los cuales se autoriza,

deniega o filtra el acceso a un usuario) y los mecanismos de seguridad (procedimientos para cumplir las políticas anteriores). Las distintas políticas se

pueden clasificar en discrecionales o de acceso obligatorio.

Se denominan políticas discrecionales a las basadas en el conocimiento de los derechos de cada usuario sobre cada objeto; así en una tabla usuario/objeto

podemos definir roles a los que pertenece cada usuario y que le dan derecho o no a leer/escribir/borrar determinados objetos o vistas.

Las políticas de acceso obligatorio se basan en la idea de que cada dato tiene un nivel de clasificación determinado y cada usuario un nivel de acreditación,

para que un usuario pueda acceder a un dato debe tener un nivel de acreditación

igual o superior al nivel de clasificación del dato en cuestión. El control de acceso discrecional en SQL se permite con las cláusulas

GRANT<privilegios> TO <autorizados> a las que se añade WHIT GRANT

OPTION (que permite pasarle los mismos privilegios a otros usuarios). Para

revocar estos permisos usamos REVOKE <privilegios> TO <autorizados>

seguido de RESTRICT o CASCADE, si queremos que los usuarios a los que el que

vamos a quitar el permiso mantengan los permisos o no.

La auditoría se utiliza normalmente para la investigación de una actividad sospechosa o para la monitorización y recogida de actividades específicas de la

base de datos. El sistema debe ser capaz de auditar sentencias concretas, objetos

Tema 4 El componente de procesamien-

to de consultas y peticiones SQL

1. La seguridad 2. El procesamiento de vistas

3. El procesamiento de consultas 4. El control de concurrencia

Page 368: sistemas operativos, redes y bases de datos

16 · Sistemas de gestión de bases de datos

concretos, sentencias sobre objetos (mezcla de las dos primeras) y a usuarios o

grupos determinados. Algunos SGBD incorporan sentencias SQL que permiten generar una auditoría de manera declarativa. De no ser así, deberemos crear

disparadores (triggers) para que realicen esta función y vayan llenando las tablas de auditoría conforme se producen acontecimientos registrables.

La Ley Orgánica de Protección de Datos de Carácter Personal de 1999 establece 3 niveles de seguridad según el tipo de datos que se contengan:

Nivel básico: Requiere medidas de autenticación y control de acceso a estos

ficheros personales.

Nivel medio: El administrador debe elaborar un catálogo sobre las medidas de

seguridad genéricas y se deben implantar mecanismos seguros de autenticación remota.

Nivel alto: Es necesario usar métodos criptográficos para evitar que los datos

sensibles sean inteligibles, y los datos relativos a ideología, creencias, origen

racial, salud, vida sexual, etc, son susceptibles de ser protegidos en este nivel.

2. EL PROCESAMIENTO DE VISTAS

Las vistas son relaciones virtuales que sólo están representadas por su

nombre y su definición; no existen físicamente en la base de datos sino que se “crean” en el momento que un usuario la utiliza.

Por ejemplo se pueden crear la siguiente vista sobre una tabla

departamento y una tabla empleado:

CREATE VIEW Vista1 AS

SELECT nombre, FechaAlta, salario, categorio FROM empleado

WHERE categoría NOT IN (´Presidente´, ´Directivo´)

Hay dos estrategias fundamentales para implementar las vistas: reescribir

la consulta o materializarse la vista. La más utilizada es la primera la reescritura, según la cual la consulta se repone de manera que haga referencia a las tablas de

la base de datos. Con la materialización cuando se hace la consulta se crea una

tabla temporal con el contenido físico de la vista. En el primer caso cuando se hacen varias consultas seguidas o una sola pero compleja sobre la vista, la consulta

se vuelve muy ineficiente; con la materialización podemos hacer varias consultas sobre una misma tabla seguidas no teniendo así que crearla cada vez, pero su

desventaja es que la actualización de la tabla temporal puede ser bastante costosa

si cambian muchos datos en las tablas de las que se origina.

Otro detalle importante de las vistas es la actualización. Una vista siempre puede consultarse, pero no siempre puede actualizarse, concretamente

sólo es posible esta última acción si la vista está construida sobre una única tabla y los atributos de la vista contienen una clave candidata de la original; las vistas

definidas sobre más de una tabla no suelen ser actualizables, y las vistas que

incluyen cláusulas GROUP BY o funciones no agregadas nunca son actualizables. Para romper esta dificultad en la actualización de vistas, existen los llamados

disparadores de sustitución, que se activan en lugar del mandato que ha provocado el disparo y siempre tienen que estar definidos a nivel de fila; estos

disparadores permiten efectuar modificaciones sobre vistas que no son

actualizables.

Una ventaja más de las vistas es utilizarlas como elemento de diseño externo. SI tenemos varias aplicaciones que tienen que acceder a determinados

datos de las tablas, en lugar de presentarles directamente las tablas, podemos crearles vistas particulares (si ya incluimos disparadores de sustitución mejor que

mejor) y cada aplicación creerá tener una base de datos diseñada a medida.

Page 369: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 17

TEMA

Las tablas derivadas son tablas que tienen existencia física, ocupan por

tanto lugar en la base de datos, pero se calculan a partir de las tablas básicas. Por ejemplo, en un supermercado podríamos crear la tabla derivada con las ventas por

cada sección, esta tabla se crearía a partir de los códigos de los productos, el precio, las secciones, etc… y no sería necesario crearla cada vez que hiciéramos

una consulta; se supone que creamos esta tabla derivada porque la utilizamos

mucho y no queremos calcularla cada vez que la necesitamos. Ahora bien, debemos decidir cuando se produce la actualización de esta tabla y de que forma:

Tiempo de actualización: Puede ser ON COMMIT, es decir cada vez que se

confirme una transacción que modifique alguna de las tablas maestras que dan

lugar a la tabla derivada, u ON DEMAND, sólo cuando el usuario lo solicite. Forma de actualización: COMPLETE (completa), FAST (rápido, refresco

incremental), FORCE (aplica el refresco rápido si es posible, y si no un refresco

completo) o NEVER (nunca).

Las tablas temporales son aquellas en las que el contenido tiene vigencia

dentro de una sesión (o una transacción) y desaparece en el momento en que ésta finaliza. Son muy útiles para almacenar resultados intermedios de una transacción.

En definitiva, las ventajas y desventajas de la utilización de vistas son las siguientes:

Independencia de datos y de aplicaciones: al utilizar las vistas como interfaz de

la aplicación, se llega a la independencia completa respecto a las tablas

originales. Simplificación de uso para el usuario: Bien combinadas, las vistas nos permiten

realizar consultas complejas de forma sencilla y transparente.

Mejora de la seguridad: El usuario desconoce las tablas originales por lo que no

puede tan siquiera intentar acceder a ellas.

Integridad de los datos: con la cláusula WITH CHECK OPTION el usuario no

puede llevar datos fuera de los límites que tiene marcados y los cambios que realice dejarán siempre la vista y, por tanto, las tablas, en estado consistente.

Rendimiento: Podemos realizar caminos de acceso rápido a las consultas más

frecuentemente realizadas.

Como desventajas tenemos:

Restricciones de actualización: No todas las vistas son actualizables y a menos

que usemos disparadores de sustitución, no podemos hacer un diseño externo

solo con vistas. Restricciones de estructura: Algunos SGBD siguiendo normas ISO no permiten

construir vistas a partir de cualquier consulta.

3. EL PROCESAMIENTO DE CONSULTAS

El procesamiento de consultas está formado por una serie de subprocesos

(ver imagen en la página siguiente) de análisis, traducción y optimización que se ejecutarán de manera secuencial. Primero se comprueba la validez léxica (faltas de

ortografía), después la validez semántica (si los objetos de los que se habla en la

consulta son válidos o no), ya se hace entonces la primera optimización semántica; el resultado se transforma en la expresión relacional correspondiente, llamada plan

de ejecución o árbol de consulta lógico. A partir del primer árbol empieza la optimización sintáctica, que consiste en transformar de modo heurístico la

expresión relacional original en otra equivalente que sea mucho más eficiente;

podemos entonces utilizar optimizadotes físicos basados en costes o heurísticos, y por fin se genera el código para la consulta.

Page 370: sistemas operativos, redes y bases de datos

18 · Sistemas de gestión de bases de datos

Por tanto, los pasos a seguir son los siguientes:

Optimización semántica: Se accede al diccionario de

datos y se comprueba que todas las columnas y tablas que

aparecen en la consulta existen, y que el usuario tiene derecho sobre ellas. Se tienen por tanto en cuenta las leyes

de la lógica y las restricciones de integridad propia de las tablas. Así por ejemplo si pedimos una consulta en la que

los empleados tienen un salario > 400; y por restricciones

de integridad en nuestra tabla todos los empleados tienen un salario por encima de 500, la consulta se convertirá en

buscar todos los empleados; o por ejemplo buscar los empleados con sueldo >500 y a la vez sueldo <300 no

llegaría a ejecutarse.

Optimización sintáctica: Se tiene ahora que traducir la

consulta a algún lenguaje interno lo bastante rico para representar cualquier tipo de consulta y lo bastante neutral

para no predisponer a ninguna estrategia de implementación. Se transforma la consulta en SQL (no

procedimental) a una consulta en álgebra relacional (procedimental).

Normalmente el traductor genera un plan lógico correcto pero sin ningún tipo de mejora, normalmente o tenemos una serie de bloques conectados por

conectores AND o por la disyuntiva OR. Por tanto interviene un nuevo factor: Planes de consulta lógicos equivalentes y métodos heurísticos: Hay

muchas reglas para transformar una consulta relacional en otra equivalente, y en general hay una serie de reglas heurísticos (basado en aquello que suele

pasar, aunque a veces, si nos salimos de la “normalidad”, da resultados

impredecibles): o Primero hacer las operaciones de selección, pues reducen la

cardinalidad del resultado intermedio. Si sobre una relación hay que aplicar más de una selección, se utilizarán propiedades conmutativas

para conseguir llevarlas a cabo todas a la vez. Así estas operaciones de

selección tienen que estar lo más abajo posible en el árbol del plan de consulta lógico.

o Después realizar las operaciones de proyección. o Utilizar la asociatividad de operaciones binarias (combinación, unión,

intersección) para elegir la operación que dé el resultado de cardinalidad más pequeño y realizarlo primero, de manera que la

operación siguiente sea menos costosa de realizar.

o Si hay una expresión común en distintas partes del árbol, realizar la operación una única vez.

Implementación física de los operadores relacionales: Se tiene que

transformar un plan lógico de consultas en un plan de consultas físico; y para estimar el coste de los algoritmos, es necesario que el SGBD guarde una

información estadística de cada tabla (el número de filas, el número de filas

que caben en una página, el número de páginas requeridas para guardar, y la medida en bytes de una fila de la tabla) y de cada atributo (número de valores

distintos de cada atributo, valor más pequeño y valor más grande de cada atributo y cardinalidad de la selección del atributo –es el número medio de filas

que cumplen una condición de igualdad-). A cada operación física se le asigna

un coste, y dado el abaratamiento del hardware hoy día, el coste principal será el tiempo. Así tenemos:

o Operaciones de ordenación: Si toda la tabla cabe en la memoria principal, el coste es mínimo, solo es necesario leerla y la ordenación se

hace por cualquier método clásico. Cuando la tabla no cabe toda en la memoria principal, se acostumbra a utilizar un algoritmo de ordenación

externa utilizando la memoria de forma temporal.

o Operaciones de selección: Se puede realizar una búsqueda lineal o una búsqueda binaria (se examina primero la posición central de la tabla en

ficheros ordenados y a partir de ahí buscamos la posición central de la

Procesamiento de consultas

Page 371: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 19

TEMA

mitad de la tabla en la que estará el dato, y así sucesivamente). Éste

último caso permite aún en el pero de los entornos, una búsqueda 25 veces más rápida que la lineal. Ahora, si el atributo por el que

buscamos es una clave candidata, todo será más rápido, o le podemos poner también un índice secundario si no es una clave candidata.

o Operaciones de proyección: Involucra dos operaciones eliminar los

atributos no deseados y eliminar las filas repetidas que se han generado, en caso de que existan claro.

o Operaciones de combinación: Son las que más tiempo consumen

durante el procesamiento de consultas y por lo tanto, marcarán la eficiencia global del SGBD. Hay varias opciones: combinación de ciclo

anidado (para cada fila de una tabla exterior se obtienen todas las filas de la tabla interior y se comprueba cuáles cumplen la condición; en

este caso es mejor que la tabla exterior se haga sobre la tabla más

pequeña, da mejor resultado; combinación de ciclo anidado indexado (varía de la anterior en que en la tabla interior se va directamente a la

página adecuada mediante un índice de acceso);combinación por ordenación por fusión (si las 2 tablas están ordenadas es la más

eficiente, puesto que solo hay que leer de forma secuencial cada una de las tablas y añadir a los resultados aquellos valores que coincidan) y

combinación por dispersión (se utiliza una función de asociación hash,

para dividir las dilas de las dos tablas en conjuntos que tengan el mismo valor de la función de asociación, con lo que vemos que de la

función depende el buen hacer de este método). Optimización física: Se dedica a hacer que los planes de consulta lógicos se

lleven a cabo de la mejor manera posible. Existen dos grandes tipos de

algoritmos de optimización que se pueden usar: optimización heurística y

basada en costes. o Optimización física heurística: Se aplican una serie de “recetas” que

normalmente dan buenos resultados y que en la mayoría de ellos permiten conseguir resultados satisfactorios. Su principal defecto es

que a veces el plan propuesto difiere bastante del más óptimo. Como

sabemos que hay operaciones más costosas y menos costosas, el SGBD tiene un orden de prioridades para la realización de cada una de

ellas y, como decimos, en los casos más frecuentes, da buen resultado. o Optimización basada en costes: Sólo hay que construir un conjunto con

todos los posibles planes de ejecución físicos, calcular el coste de cada uno de ellos y escoger el de menor coste. Como vemos siempre

tendremos el plan más óptimo, pero hay un problema: para calcular los

costes de los distintos planes, hay que tener suficiente información sobre tablas, atributos, cardinalidades, que varían constantemente en

la base de datos, y el tener esta información actualizada es fundamental.

o El encarrilamiento consiste en aprovechar la salida de una operación

como entrada de otra, de forma que nos ahorramos la creación de resultados intermedios en disco (materialización) y se suele utilizar

para ahorrar un tiempo precioso de escritura/lectura. También con el actual abaratamiento de las memorias, muchos optimizadores

materializan las tablas intermedias directamente en la memoria, con lo que se consigue una eficacia parecida a la del encarrilamiento.

4. EL CONTROL DE CONCURRENCIA

Recordemos los problemas de concurrencia que teníamos en una base de datos:

Actualización perdida: Cuando una operación posterior cambia un dato que

una operación anterior acababa de actualizar, pero ya se ha perdido porque

estaban editando al mismo tiempo.

Page 372: sistemas operativos, redes y bases de datos

20 · Sistemas de gestión de bases de datos

Lectura no confirmada: Antes de que se confirme un dato, otra transacción

ya ha leído esos datos que después han sido cancelados.

Lectura no repetible: En la lectura del mismo dato, en dos ocasiones da

diferentes resultados.

Estos problemas lo solucionábamos con la seriabilidad: las diferentes transacciones se han de poder ejecutar de forma concurrente, pero su efecto final

sobre los datos tendrá que ser el mismo que si se ejecutasen en serie. Los métodos que explicamos a continuación son optimistas, es decir, presuponen que hay

muchos datos para leer y por tanto es difícil (aunque no imposible) que exista

alguna incompatibilidad, en ese caso sólo en el momento de escribir se aseguran de que no hay tal incompatibilidad.

Control de concurrencia basado en marcas temporales

Consiste en asignar una marca temporal (MT(T)) antes de que se empiece

a ejecutar una transacción T. Estas marcas son únicas y se asignan en orden ascendente, de manera que cualquier transacción posterior deberá cumplir que

MT(T´)>MT(T). Así por ejemplo, si una transacción T1 con M=21.623 quiere leer el elemento X pero otra transacción T2 con M=25000 lo ha escrito, debe deshacer su

operación de lectura. En general, para que no se produzcan los problemas descritos

anteriormente, el planificador podrá tomar cualquier petición de lectura o escritura por parte de una transacción y autorizar la petición, abortarla y recomenzarla con

una nueva marca temporal o detenerla y, más tarde, decidir si la aborta o autoriza.

Control de concurrencia por validaciones Es una implementación especial del caso anterior, en la que el planificador

mantiene información sobre las transacciones. Para cada una guarda un conjunto

de transacciones, un conjunto de lectura de transacciones con todos los datos de la BBDD que tendrá que leer y otro conjunto de escritura de transacciones con todos

los que tendrá que escribir. Las transacciones tendrán 3 fases:

Lectura: Se lee de la base de datos toda la información que falta, se hacen

todos los cálculos y se guardan los resultados en la memoria.

Validación: El planificador comprueba si puede escribir en la base de datos los

resultados que tiene en la memoria sin producir problemas de incompatibilidades; compara los conjuntos de lectura y escritura con los de las

transacciones actuales; si no hay problema pasamos a la siguiente fase, sino, reiniciamos la transacción.

Escritura: Los resultados que se guardan en memoria se escriben en la base de

datos.

Control de concurrencia multiversión

Las estrategias se basan en detener o deshacer la ejecución de la transacción iniciada que provoca problemas, ahora vamos a mantener varias

versiones de los datos; cuando se vaya a escribir, el planificador debe saber cual es la versión adecuada. Existen a su vez dos sistemas:

Control por marcas temporales: Este mecanismo es muy eficiente para sistemas

con muchas más lecturas que escrituras. Se asignan además de las marcas temporales habituales, a cada elemento una secuencia de versiones formadas

por el valor de la versión j del gránulo determinado, la marca temporal de la transacción que haya creado la versión y la mayor de las marcas temporales de

todas las transacciones que han leído con éxito la versión j. Dependiendo de si tiene que leerse o escribirse hay un algoritmo:

o Si la marca temporal de la transacción T es menor que la marca

temporal de la transacción que ha creado esa versión, entonces se deshace la transacción T.

o Si la marca de tiempo es igual, entonces se puede escribir el contenido de la versión.

Page 373: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 21

TEMA

o Si la marca de tiempo de la transacción T es mayor que la marca de

tiempo de la transacción que ha creado esa versión, entonces se crea una nueva versión.

Luego obviamente hay que eliminar las versiones innecesarias, solo debe mantenerse la última de las versiones que sea más antigua que la

más antigua de las transacciones del sistema. Todo este

Control por reserva de doble fase: Cada gránulo de información puede tener además de las reservas de lectura y escritura clásicas, una reserva de

certificación que es incompatible con cualquier otro tipo de reservas. Para

aplicar este método además hay que tener dos versiones de cada gránulo. Una única versión puede tener una reserva de lectura sobre un gránulo X; mientras

que muchas otras lo pueden leer. Para que no haya problemas de concurrencia, ha de haber dos versiones de X, una que tendrá que haber sido escrita por una

transacción confirmada, y otra por la transacción que haya hecho la reserva de

escritura; cualquiera de las transacciones que quiera hacer una lectura, con reserva previa, leerá la versión confirmada; la transacción que ha hecho la

reserva de escritura podrá efectuar todos los cambios que desee sobre su versión de la información sin que eso provoque ningún tipo de problema a las

otras transacciones. Cuando la transacción con reserva de escritura quiera

confirmar (COMMIT), antes tendrá que obtener una reserva de certificación, que no es compatible con la de lectura, y por lo tanto, esperará que todas las

transacciones que hacen lecturas liberen el recurso. Con esta reserva varias transacciones pueden leer un dato que ya ha sido reservado para ser

modificado, pero que éste transacción de modificación debe esperarse, es el único pago por este sistema.

Compatibilidad de la reserva de certificación

Lec. Escr. Cert.

Lec. Sí Sí No

Escr. Sí No No

Cert. No No No

Page 374: sistemas operativos, redes y bases de datos

22 · Sistemas de gestión de bases de datos

TEMA 5 EL COMPONENTE DE GESTIÓN DE LOS DATOS

1. PÉRDIDA DE DATOS POR ERRORES O FALLOS

Tanto por un error de hardware (corte de corriente eléctrica) como por

error de software (mal proceso en la ejecución de transacciones), se pueden producir pérdidas de información en una BD. Recordemos que la propiedad de

atomicidad (todos los cambios de la transacción se efectúan, o no se lleva a cabo ninguno) y durabilidad (todos los cambios producidos por una transacción

confirmada son permanentes) obligan a llevar a cabo una serie de acciones para

garantizar que efectivamente la base de datos contiene información correcta. Existen dos técnicas de recuperación de datos:

Técnicas de reconstrucción: debemos ejecutarlas cuando existen errores en los

dispositivos de almacenamiento.

Técnicas de restauración: técnicas de hacer y deshacer que debemos ejecutar

cuando el error se ha derivado por un problema de software.

El componente de gestión de los datos que tienen todos los SGBD, ha de servir

cualquier petición de lectura y/o escritura; además debe encargarse de ejecutar las acciones que aseguran que la BD sea correcta (restauraciones y reconstrucciones)

de la manera más simple, rápida y automática y evitando la intervención humana en la medida de lo posible. Para que estas recuperaciones puedan efectuarse,

debemos contar con elementos como el diario y las copias de seguridad.

2. ARQUITECTURA DEL COMPONENTE DE GESTIÓN DE LOS DATOS

Recordemos que no todos los cambios que se producen en la base de

datos, pasan directamente a los ficheros de la misma, sino que en muchas

ocasiones se utiliza la memoria intermedia por la rápida velocidad de actuación y luego, más adelante, estos cambios se harán “consistentes” escribiéndolos en los

ficheros de la base de datos. La unidad mínima de lectura/escritura en la memoria intermedia es una página de disco de la base de datos. Para saber qué páginas hay

en la memoria intermedia se dispone de un directorio, pero además contamos con 3 bits muy importantes:

Bit de cambiado: indica si la página que hay en la memoria intermedia se ha

cambiado con una operación que todavía no se ha actualizado en los ficheros de la base de datos. Si el bit está a 1 significa que hay cambios.

Bit de clavar/desclavar: permite fijar una página en la memoria intermedia. SI

está a 1 la página permanecerá en la memoria intermedia, si está a 0 implica que puede ser sustituida por otra si la memoria está llena.

Bit de identificador de página: Está a 0 si la página de la memoria intermedia

está vacía. Si contiene una página está a 1 (independientemente de si está

clavada, desclavada, cambiada o no).

El gestor de la memoria intermedia recoge o lleva la página a la memoria intermedia, o la descarga en la base de datos. Cuando se descarga una página de

la memoria a la base de datos, lo primero que se hace es asegurarse que se ha llevado correctamente al fichero de la base de datos; si la página tiene el bit de

cambiado a 0 no se escribe en la base de datos, escribiéndose si el bit de cambiado

está a 1; una vez descargada se cambia este bit a 0, se actualiza la entrada con el bit de identificador de página a 0 para indicar que queda espacio vacío en la

memoria intermedia. En la operación de recoger o llevar una página a la memoria intermedia

primero se tiene que buscar un espacio libre en la memoria, si todos los bits de

identificador de página están a 1, se escoge de entre las que no están clavadas una

Tema 5

El componente de gestión de los datos

1. Pérdida de datos por errores o

fallos 2. Arquitectura del componente

de gestión de los datos

3. Restauración 4. Reconstrucción

Page 375: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 23

TEMA

unidad que se pueda descargar (mediante la técnica del menos usado

recientemente o FIFO –first in, first out); con un espacio libre en la memoria, se lee físicamente la página correspondiente actualizándose el directorio y se escribe el

contenido en la memoria. También hay que tener en cuenta que cuando se descarga una página se

puede descargar una única versión por cada página o tener distintas versiones en

la memoria intermedia de la misma página. Si guardamos una única versión tenemos lo que se llama actualización en el lugar; en cambio si tenemos varias,

contamos con una técnica de sombreado.

El diario de operaciones almacena la información de los cambios de manera conveniente para que el gestor de recuperación pueda recuperar un estado

consistente de la base de datos. Conceptualmente se trata de una representación

de la historia de ejecución de las transacciones. Es imprescindible que se almacene, como mínimo, una anotación en el diario siempre que una transacción confirme,

aborte o modifique algún dato. Cada anotación debe contener el identificador de la transacción a que

pertenece la operación, el tipo de operación, un puntero a la anotación guardada

correspondiente a la operación anterior de la misma transacción e información adicional para la operación de modificación.

Se pueden llevar dos tipos de diarios: el físico y el lógico. Éste último guarda la descripción de las operaciones de alto nivel que se han llevado a cabo sobre los

datos, requiere menos anotaciones que el diario físico pero es más complejo llevar a cabo una recuperación con él; por ello la mayoría de SGBD utilizan el diario físico.

Éste tipo de diario hace constar el valor que se ha escrito en la base de datos en

cada anotación correspondiente a una modificación. Este diario físico dispone de la información necesaria para deshacer cambios provocados por transacciones que no

se han confirmado (el valor que tenía el dato antes del cambio) y la información necesaria pare rehacer cambios de transacciones confirmadas que no han llegado a

guardarse en la base de datos.

Por supuesto, para que el diario resulte funcional, antes de escribir un cambio en la base de datos, se anota primeramente en el diario, de no ser así, no se deja

escribir en la base de datos. Un diario no tiene un espacio ilimitado de escritura; es un fichero con principio y fin, pero con un apuntador en el fin que señala al inicio

de manera que se sobrescribe. Entonces podemos pensar ¿qué pasa con las operaciones sobrescritas? ¿si se escriben los cambios desde el inicio de la base de

datos, cuantos cambios hay que hacer si se produce algún error para volverla a

dejar consistente?

Para resolver las dudas anteriores, existen los puntos de control, que hacen lo siguiente:

Suspenden temporalmente la ejecución de las transacciones aunque dejan

terminar las que estén iniciadas. Vuelcan todas las unidades de memoria intermedia con bit de cambiado a 1

a la base de datos.

Escriben una anotación en el diario de que se ha realizado un guardado

consistente de la base de datos. Se vuelve a permitir la ejecución de transacciones.

Estos puntos de control vienen realizándose cada 15 minutos y es a partir de

ellos, desde los que podemos sobrescribir de nuevo los datos del control del diario, pues ya no son necesarios.

Otros SGBD realizan puntos de control no con transacciones acabadas, sino con

operaciones acabadas (dentro de transacciones mayores), en este caso hay que guardar en la anotación de diario las operaciones que conforman toda la

transacción y desestimar ya todo el resto que no será necesario si hay que llevar a

cabo una recuperación de datos.

Page 376: sistemas operativos, redes y bases de datos

24 · Sistemas de gestión de bases de datos

3. RESTAURACIÓN

El gestor de restauración ofrece 5 operaciones: leer, escribir, confirmar, abortar y reiniciar (esta última se ejecuta de manera automática siempre que se

reinicia el sistema). Según la manera en que las unidades de la memoria intermedia se asignan

a las transacciones y del momento en que las páginas almacenadas se descargan

en las unidades de la memoria intermedia, hay 4 modalidades de trabajo en el gestor de restauración, que debemos tomar dos a dos:

Tomar: Cualquier transacción se deja tomar prestada cualquiera de las

unidades de la memoria intermedia que tiene asignadas cuando otra

transacción las necesita, aunque la transacción esté todavía activa. Obviamente

antes de que se tome una nueva página, la que se está usando debe ser descargada, aunque los cambios no se hayan confirmado por lo que hay que

tener prevista que sea necesario deshacer los cambios provocados por este efecto (si fuese necesario).

No tomar: Ninguna transacción puede disponer de las unidades de memoria

intermedia ocupadas por otra transacción activa, lo cual asegura que nunca será necesario deshacer cambios. Eso sí, requiere un número de unidades de

memoria intermedia superior que en la modalidad tomar.

Obligar: Obligamos a que se descarguen las unidades de memoria intermedia

cuando una transacción se ha confirmado, quedando más espacio libre en la memoria intermedia y asegurándonos que nunca será necesario rehacer ningún

cambio. No obligar: No obligamos a que se descarguen las unidades de memoria

intermedia cuando ha finalizado una transacción, únicamente marcamos a 0 el

bit de cambio. Hace falta por tanto prever la necesidad de tener que rehacer

cambios que se hayan perdido. Eso sí, se eliminan las descargas innecesarias de páginas dado que sólo se eliminan cuando hay necesidades de páginas

nuevas, minimizando así el número de entradas/salidas.

Modalidad tomar/no obligar Aunque esta modalidad requiere tanto de los mecanismos de deshacer

como los de rehacer, son los que se utilizan con más frecuencia en los SGBD,

porque aunque son más complejos de restaurar, es la modalidad que mejor minimiza los recursos, tanto con respecto a la cantidad de memoria destinada a

memoria intermedia, como al número de entradas/salidas que general al recoger y descargar las páginas físicas.

Contamos con que la memoria intermedia descarga las páginas con la

estrategia de actualizar en el lugar, utilizamos un diario físico y los cambios se realizan con acciones acabadas (no transacciones).

Para leer solo hay que obtener el contenido de la página después de asegurarnos de que está recogida en una unidad de memoria intermedia.

Para escribir después de asegurarnos de que la página esté recogida en la unidad de memoria intermedia y antes de que se modifique, en el diario se escribe

la anotación correspondiente; y tras modificar el contenido en la memoria

intermedia, se actualiza el bit de cambiado a 1, para conseguir almacenar físicamente la página en el momento en que ésta se descargue.

Al abortar se tienen que deshacer los cambios que hubiera generado, dado que la modalidad tomar podría reflejar algunos cambios físicos sin haber

confirmado la transacción; así se tiene que recorrer el diario en sentido contrario

hasta la última anotación de la transacción (que es lo primero que se anotó), de manera que se puedan restaurar todos los estados de antes del cambio de las

páginas modificadas por la transacción abortada. Como antes, es indispensable actualizar el bit de cambiado a 1 para que en el momento que se descargue la

página su valor se almacene físicamente.

La operación de reiniciar se encarga de restaurar un estado consistente (correcto). Es preciso que deshaga los cambios producidos por transacciones que

no han confirmado y se habían almacenado ya en la BD (tomar) y que rehaga (no

Page 377: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 25

TEMA

obligar) los cambios producidos por transacciones que se han perdido a pesar de

haberse confirmado. Esta reiniciación tiene 5 acciones: Inicializar MI y listas de transacciones: Se inicializa la memoria intermedia para

que de información de antes del fallo, se inician a vacío las listas de

transacciones que han confirmado y las que han abortado, dado que son esenciales para el procedimiento reiniciar.

Deshacer hasta el último punto de control: Hay que deshacer todos los cambios

producidos por transacciones que todavía no habían confirmado en el momento en que se ha producido el fallo, o bien por transacciones que se han abortado

voluntariamente. Se tratan las anotaciones desde el final del diario hasta el

último punto de control. Deshacer complementaria: Al leer la anotación correspondiente al punto de

control, se obtiene la lista de transacciones que estaban activas en el momento

de la aplicación de dicho punto de control. Con esta lista y la lista de transacciones abortadas que se han ido construyendo, se deduce el conjunto

de transacciones que no se habían acabado de ejecutar.

Rehacer: Se rehace desde el último punto de control, todos los cambios

producidos por las transacciones que habían confirmado antes de que se produjera el fallo.

Anotar Punto de control: Se registra una anotación de punto de control en el

diario, de manera que quede constancia de que la BD es consistente en aquel punto.

Modalidad no tomar/no obligar

Sólo se tiene que prever la necesidad de rehacer los cambios de transacciones confirmadas que se hayan perdido, dado que utiliza el modelo no

tomar en ninguna circunstancia habrá que hacer modificaciones. Para leer es igual que el modelo anterior, pero después de recoger la

página hay que clavarla (se pone el bit a 1) dado que trabajamos ahora con la

modalidad no tomar. Para escribir en caso de que la página se tenga que recoger, se clavará

igual que en la operación leer; en la anotación del diario no habrá falta registrar el estado de antes del cambio de la página modificada, pues no será necesario

modificarla.

Para confirmar tampoco hay que descargar las unidades de memoria intermedia, pero sí que hay que desclavarlas, anotando el registro en el diario.

Para abortar no hay que deshacer nada, como ya dijimos. Para reiniciar como solo hay que rehacer, pero no deshacer, de las 5

operaciones de la modalidad anterior, la acción inicializar memoria intermedia y listas de transacciones será igual, de la acción deshacer hasta el último punto de

control sólo se leerá el diario hacia atrás para localizar el último punto de control y

a partir de ahí identificar las transacciones que habían confirmado antes del fallo. La acción deshacer complementaria es innecesaria y las otras dos últimas serán

iguales que en la modalidad anterior.

Modalidad tomar/obligar

Sólo deben prever la necesidad de deshacer cambios, pero no rehacer, dado que utilizan la modalidad obligar. Por tanto la operación de leer coincide con

el mismo procedimiento que en tomar/no obligar; la operación escribir coincide con la modalidad tomar/no obligar; la operación confirmar obliga a descargar las

unidades de la memoria interna asignadas a la operación que confirma. Para abortar es lo mismo que en tomar/no obligar. Para reiniciar como sólo hay que

deshacer, todo será idéntico a la modalidad tomar/no obligar, excepto la fase

rehacer que no resulta necesaria.

Modalidad no tomar/obligar No tienen que deshacer ni rehacer ninguna modificación. Para leer es lo mismo que

en no tomar/no obligar; para escribir hace falta clavar la página igual que en leer, y

en la anotación del diario no habrá que registrar el cambio de estado, pues no

Page 378: sistemas operativos, redes y bases de datos

26 · Sistemas de gestión de bases de datos

habrá que deshacer ni que rehacer. Para confirmar hay que descargar las unidades

de memoria intermedia asignadas a la transacción que confirma y después registrar la anotación correspondiente al diario, igual que en tomar/obligar. Debemos aplicar

la técnica de sombreado para garantizar que la descarga sea atómica, por lo que esta modalidad de gestión es inviable si la descarga de memoria intermedia se hace

según la técnica de actualizar en el lugar. Como esta técnica de sombreado

proporciona un espacio físico diferente para cada cambio (directorios de páginas) y el valor que la página tenía antes de modificarla se mantiene, utilizaremos diversos

directorios para cada una de las versiones que mantengamos; desestimar los cambios producidos por una transacción que no ha podido confirmar, consiste

simplemente en desestimar el directorio nuevo y volver al anterior directorio y páginas sombra.

4. RECONSTRUCCIÓN

El gestor de reconstrucción incluido en el gestor de recuperación es el encargado de aplicar las técnicas de reconstrucción siempre que se produzca una

pérdida parcial o total de la base de datos por errores en alguno de los

componentes de hardware. En el momento que esto ocurre se debe:

Reparar o sustituir el componente hardware que ha fallado.

Localizar la copia de seguridad justo anterior a la fecha en que se ha

producido el error.

Copiar el contenido de la copia de seguridad para reconstruir la BD.

Rehacer desde el diario todos los cambios que se han producido desde la

fecha de la pérdida hasta la actualidad.

Page 379: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 27

TEMA

TEMA 6 DISEÑO FÍSICO DE BASES DE DATOS

1. ADAPTACIÓN A UN SGBD CONCRETO

A partir del diseño lógico de una BD tendremos que pasar a su diseño

físico; esto dependerá de las características propias de cada base de datos, de las características del hardware, sistema operativo y software básico y, por supuesto

del diseño del SGBD. El estándar SQL incorpora la definición de todos los componentes del

diseño lógico de la BBDD. En cambio, no incorpora ningún elemento del diseño

físico. Para adaptar el diseño de la base de datos a un SGBD concreto, partimos

de los elementos siguientes:

Definiciones de tablas.

Relación de cada tabla con un espacio para tablas y cada índice con un espacio

para índices. Relacionamos cada espacio virtual con un fichero físico y definimos sus

características.

Tabla Es un componente del diseño lógico de bases de datos y está

perfectamente definido en el estándar SQL, podemos ver en la imagen lateral como crear una tabla con Oracle.

El espacio para tablas es un componente del nivel virtual, no pertenece al diseño lógico de la base de datos y por lo tanto no se incluye en el estándar SQL; la

sentencia de creación de un espacio para tablas es diferente para cada SGBD, pero podemos ver el ejemplo que nos ofrece Oracle.

Name es el nombre del espacio para tablas, cada espacio se asocia a uno o

más ficheros físicos (filespec). La definición del fichero físico viene determinada por

su nombre externo file_name, la ubicación en disco y su medida (size). La cláusula storage_clause define las características de almacenamiento, medida inicial, medida

incremental, extensiones mínimas y máximas, etc.

Base de datos

La base de datos en sí no pertenece al diseño lógico de la base de datos, y por lo tanto, no se incluye en el estándar SQL. La sentencia CREATE DATABASE es

diferente en cada SGBD e incorpora cláusulas de definición de elementos físicos propios de cada uno de éstos: diario, catálogo, ficheros… pasemos a ver un

ejemplo con Oracle.

Database_name es el nombre de la base de datos que se asocia a un

conjunto de ficheros físicos que contienen los espacios para tablas, que se relacionan en la cláusula DATAFILE <filespec>. La cláusula LOGFILE especifica el

nombre de los diarios que se definen para que el gestor registre todas las actualizaciones de las tablas de esta base de datos y poder hacer recuperaciones

en caso necesario.

Índice

Son elementos del diseño físico de la base de datos que tienen como finalidad mejorar el rendimiento de las aplicaciones cuando acceden a las tablas; no

forman parte del diseño lógico de la base de datos y, por lo tanto, tampoco se

incluyen en el estándar SQL. La definición de la clave primaria y claves foráneas forman parte del diseño lógico y así constan en el estándar SQL, pero los índices

que se definen para mejorar el acceso a las tablas, responden a requerimientos de las aplicaciones. La sentencia CREATE INDEX es la que crea estos índices.

Tema 6

Diseño físico de bases de datos

1. Adaptación a un SGBD concreto

2. Ajuste y mejora 3. Gestión del rendimiento

4. Informe del diseñador de la

base de datos

Tablas con Oracle

CREATE TABLE Table_name

(column definition)

<unique_constraint>

<referential_constraint>

<extent_space>

TABLESPACE tablespace_name

Espacios de tablas con Oracle

CREATE TABLESPACE name

DATAFILE <filespec>

DEFAULT STORAGE <storage>

<filespec>;:=

‘file_name’

[SIZE nn]

<storage_clause>

INITIAL nn

[NEXT nn]

[MINEXTENTS nn]

[MAXEXTENTS nn]

[PCTINCREASE nn]

[OPTIMAL nn]

[…]

Bases de datos con Oracle

CREATE DATABASE database_name

[CONTROLFILE REUSE]

[LOGFILE <filexpec>]

[MAXLOGFILES nn]

[MAXLOGMEMBERS nn]

[MAXLOGHISTORY nn]

[DATAFILE <filespec>]

[MAXDATAFILES nn]

[MAXINSTANCES nn]

[CHARACTER SET nn]

[…]

Page 380: sistemas operativos, redes y bases de datos

28 · Sistemas de gestión de bases de datos

2. AJUSTE Y MEJORA

Un sistema de bases de datos se ha diseñado para ser explotado y sacarle un buen rendimiento; por tanto, debemos ajustar el hardware, sistema operativo,

aplicaciones y la base de datos para obtener un mínimo consumo de recursos, favorecer la concurrencia (diferentes procesos actúan sobre los mismos datos),

mejorar la contención (evitar que se llegue a situaciones de bloqueo de timeout

entre distintos procesos por intentar obtener los mismos datos) y dar una buen tiempo de respuesta (detrás de cada petición en línea hay un usuario esperando

una respuesta por parte del ordenador). Para que todo esto ocurra, debemos tener en cuenta el diseño físico de la

base de datos y el diseño de las aplicaciones que deben acceder a ellos. Así

distinguiremos 3 tipos de aplicaciones:

Aplicaciones en línea: Son accesos de alta prioridad que no se pueden hacer

en otro momento, tienen gran concurrencia de datos (muchas transacciones compiten entre sí para acceder a los mismos datos), los tiempos de respuesta

deben ser relativamente cortos, el tiempo de entrada/salida determina en gran medida este tiempo de respuesta, la complejidad de las instrucciones SQL a

resolver no es muy grande, cada transacción accede a un número reducido de

datos y generalmente mediante índices. Aplicaciones por lotes: Son procesos de baja prioridad que se acostumbran

a planificar en horas de poca actividad (tarde-noche) sin un usuario delante

esperando una salida de datos; no suele haber concurrencia de acceso, pero sí la hay si a la vez existen accesos en línea; se trata de procesos de larga

duración que afectan a un gran número de datos; es muy importante solapar

los tiempos de entrada/salida con los de uso de CPU. Consultas de usuario: Son procesos en línea, mayoritariamente de lectura, a

veces tienen consultas en SQL complejas (lo que determina el tiempo de

respuesta), el acceso es tanto secuencial como por medio de índices, y cada transacción accede a un número relativamente grande de datos.

Con todas estas aplicaciones accediendo a la base de datos, debemos ajustar 3

tipos de componentes de manera muy fiable; los índices, los componentes fícios y

los parámetros del sistema.

Índices

En cada uno de los accesos a las tablas que una aplicación tiene programada, el optimizador del SGBD analiza cuál es el mejor camino de acceso a

la base de datos, si existe un índice lo utilizará. La razón casi fundamental para crear un índice en una tabla es la de reducir el número de acceso que el SGBD

tendrá que hacer para localizar los datos; y ello nos determina un entorno en el que es necesario crear índices y otro en el que no es recomendable. Debemos utilizar

índices cuando:

Queramos garantizar la unicidad de los atributos, definiendo un índice único, el

SGBD garantiza que no habrá duplicados.

Queramos garantizar la ordenación de las filas dentro de una tabla,

implantaremos un índice agrupado. Tengamos relaciones de integridad referencial entre 2 o más tablas.

No es conveniente definir índices cuando:

La tabla tiene pocas filas, en ese caso será más rápida una lectura secuencial

directamente de la tabla, que una lectura del índice, para después hacer una

lectura en la tabla. El índice discrimina muy poco. Establecer un índice por el campo “sexo” tendrá

poca utilidad porque su nivel de discriminación como mucho es del 50%.

Page 381: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 29

TEMA

La aplicación pretende utilizar el atributo con predicados no indizables, por

ejemplo, buscar en una tabla con índice en la ciudad los clientes que no son de

una ciudad determinada, no tiene ninguna utilidad. Las aplicaciones hacen tratamientos masivos de la tabla: por ejemplo si el

índice es muy frecuentemente actualizable será poco útil porque cada vez que

se modifique ese atributo hay que modificar el índice con el consecuente trabajo para el SGBD (por ejemplo, definir como índice el saldo de las cuentas

corrientes). Tampoco es práctico para índices descendentes, pues la mayoría de los índices son ascendentes.

Componentes físicos

Ficheros de datos: Son los ficheros físicos que contienen los datos, es decir,

las filas de las tablas y las claves de los índices. La ubicación física de los

distintos ficheros depende de lo críticos que sean. Los más utilizados en

unidades de disco más rápidas y que sólo se utilizan para el SGBD; procurar colocar los ficheros de índice en unidades de disco distintas a los datos para

que los cabezales de los discos no estén ocupados en las dos operaciones a la vez en distintas transacciones. El porcentaje de espacio libre por página

también es un parámetro a vigilar. Un porcentaje alto facilita la inserción de

filas de datos en una página, pero genera enlentecimiento en los procesos secuenciales al tener que leer más páginas. Los bloqueos son fundamentales:

¿bloqueamos por página –lo más habitual- o por fila? La compresión de datos es fundamental: al comprimir ocupan menos espacio, se hacen menos

entrada/salida lo que genera aumento de velocidad, la pega es el trabajo extra del procesador para compactar/descompactar las filas según se van pidiendo.

Ficheros de control: tenemos dos: el catálogo y los ficheros de trabajo. El

catálogo consiste en un conjunto de tablas que gestiona el propio SGBD para

registrar todas las descripciones de los componentes de nuestro sistema. Como suele ser un diseño propio de cada SGBD y no se puede tocar, no podemos

hacer ninguna apreciación para su parametrización. En cambio los ficheros de trabajo son conjuntos de ficheros que el SGBD gestiona y utiliza en diferentes

operaciones en las que necesita un área de trabajo para resolver determinadas

peticiones, como pueden ser combinaciones de dos o más tablas, contener la tabla resultante de una clasificación o de una definición de una vista, etc. Si

tenemos varias unidades de disco debemos repartir las unidades de trabajo entre ellos.

Ficheros de auditoria: verifican el funcionamiento correcto del plan de

seguridad y registran quien accede a determinados datos o bien quién intenta accesos no autorizados. Seleccionar los datos y acciones que se auditarán es

complejo. Por un lado si auditamos muchas tablas y muchas acciones

provocaremos una disminución palpable de la velocidad del SGBD porque para cada acción, además de realizar la consulta adecuada, debemos escribir en el

fichero de auditoría la operación que se realiza, cuando y quién. Si auditamos pocas tablas, quizá cuando nos exijan determinada información no podamos

ofrecerla. En resumidas cuentas, el control de auditoria implica incrementar el

coste de los procesos, por ejemplo en los procesos en línea, el coste es considerable en relación con el coste total de la transacción.

Diarios: En el diario se registra una imagen de la página de la base de datos,

antes y después de cada actualización. Por tanto, el diario es un fichero muy crítico y si disponemos de varias unidades de disco es conveniente definir un

diario dual (dos diarios diferentes). Cuando el diario se llena, suele archivarse en el archivo diario, copiando todos los datos y abriéndose un nuevo archivo.

Esta operación tiene cierto coste y además debe realizarse aunque el SGBD

esté a pleno rendimiento, por lo que es conveniente definir un tamaño de archivo diario lo suficiente para intentar que coincida este cambio con horas de

menos trabajo.

Page 382: sistemas operativos, redes y bases de datos

30 · Sistemas de gestión de bases de datos

Parámetros del sistema

La parametrización del sistema consiste en asignar valor a cada una de las

variables o parámetros de definición de los componentes físicos anteriores. Contamos con:

Medida de las páginas que contienen las filas de la tabla. Número de páginas asignadas a la base de datos.

Reserva de espacio libre en cada página.

Medida de las extensiones de los archivos físicos.

Número máximo de extensiones del fichero.

Memoria intermedia asignada para las operaciones de lectura, escritura.

Número máximo de procesos concurrentes.

Número máximo de bloqueos concurrentes.

Ubicación en disco de los ficheros de datos, de control, de auditoria y diarios.

Número de diarios, medidas y características.

La lista de los parámetros es muy extensa, propia de cada SGBD por eso se

recomienda consultar los manuales del fabricante, extraer de la base de datos los valores por defecto y posteriormente ajustarlos con el fin de mejorar el rendimiento

de nuestra base de datos propia teniendo en cuenta la experiencia anterior y el análisis de los resultados del rendimiento.

3. GESTIÓN DEL RENDIMIENTO

Hay distintos elementos que hay que tener en cuenta para una buena gestión del rendimiento:

Plan de consultas: es el conjunto de operaciones elementales que ha

escogido el SGBD para resolver la consulta (instrucción SQL). La mayoría de los SGBD modernos disponen de sentencias o herramientas gráficas que permiten

visualizar cuál es el plan de acceso de la consulta; esto permite al diseñador de la base de datos comprobar que el optimizados ha escogido el camino más

adecuado para la consulta. En general hay que separar la consulta en condiciones simples, intentar que las selecciones se hagan lo antes posible y

también bajar después las proyecciones para que también se realicen lo antes

posible. Monitores: Son los componentes del SGBD que tienen como misión informar

del funcionamiento del gestor, desde el punto de vista de consumo de recursos,

trabajo realizado por las aplicaciones, tiempo de respuesta, acceso a disco. Los monitores suelen suministrar información en línea (en el mismo momento en

que se está produciendo la información) y por lotes (recogida durante un

período de tiempo y que se explota en procesos por lotes para obtener estadísticos). Así podemos explorar qué procesos, usuarios y consultas

consumen más tiempo de la base de datos, que operaciones de entrada/salida son las más lentas, cuantos accesos a memoria intermedia y en qué cantidad

vienen realizándose, etc. Benchmarks: Son un conjunto de pruebas que se establecen para ver el

comportamiento de diferentes sistemas, su funcionalidad, tomar medidas de

rendimiento y poder comparar los resultados obtenidos. En BBDD el problema

es complejo ya que el SGBD depende también del sistema operativo y además, cada instrucción SQL no tiene porque llevarse a cabo exactamente igual en

cada SGBD. Para que el conjunto de pruebas sea adecuado tiene que ser lo más homogéneo posible, seleccionar programas que sean representativos de la

actividad que realizará la base de datos, cargar los mismos datos en todos los

SGBD y probar con los mismos programas y consultas…

Page 383: sistemas operativos, redes y bases de datos

Sistemas de gestión de bases de datos · 31

TEMA

4. INFORME DEL DISEÑADOR DE LA BASE DE DATOS

No se puede considerar acabado el diseño de una base de datos si no se ha documentado convenientemente todas y cada una de sus etapas: el diseño

conceptual, el lógico y el diseño físico.

Diseño de las tablas: definición de columnas, clave primaria y alternativas,

claves foráneas, restricciones de integridad.

Índices para mejorar los accesos a las tablas.

Espacio para índice: crecimiento previsible, número de claves, grado de

volatilidad de las claves… Espacios para tablas: igualmente crecimiento previsible, tipo de espacio para

tablas, necesidad de reorganización del espacio para tablas.

Texto elaborado a partir de:

Sistemas de gestión de bases de datos Jaume Sistac i Planas, Ramon Segret i Sala, Santiago Ortego Carazo, Marta Oliva Solé,

M. Elena Rodríguez González, Alberto Abelló Gamazo, Blai Cabré i Segarra Junio 2006

Page 384: sistemas operativos, redes y bases de datos

Preguntas

1. ¿Qué es una partición?2. ¿Qué tres tipos de particiones existen?3. ¿Cuántas particiones de cada tipo puede haber en un disco duro?4. ¿Para qué se usan las particiones extendidas?5. ¿Cuáles son los 2 formatos de partición usados por Windows? ¿Qué limitación tiene el

primero de ellos?6. ¿Qué formatos de particiones en linux conoces? ¿Es posible ver esas particiones en

windows?7. ¿Para qué sirve una partición de tipo swap?8. ¿Qué ventajas tiene hacer particiones a un disco?9. ¿Cómo podemos hacer particiones en un disco duro?10. ¿Qué limitación podríamos encontrar al modificar las particiones en un disco duro que ya

estamos usando?11. ¿Qué pasos sigue el programa al modificar las parciciones de un disco con datos?12. ¿Qué pasará al reiniciar el sistema si hemos creado una nueva partición accesible desde

windows?13. ¿Qué es un gestor de arranque?14. ¿Qué es la secuencia de buteo? ¿Dónde se configura?15. ¿Qué es el Master Boot Record? ¿Qué información se almacena en él?16. ¿Cómo se llama el gestor de arranque que utiliza lliurex?17. ¿Qué opciones podemos modificar en un gestor de arranque?18. ¿Qué problema podemos encontrar en un ordenador dual (windows/linux) si tenemos que

reinstalar windows? ¿Cómo lo solucionaríamos?19. ¿Qué es un archivo?20. ¿Qué dos partes tiene un identificador de archivo? ¿Para qué se usa la segunda en

windows?21. ¿Qué es un directorio?22. ¿Qué es una unidad? ¿Cómo se identifica en windows?23. ¿Qué dispositivo tendremos probablemente en unidades con las siguientes letras: A, C, D,

G, Y?24. ¿Qué es la ruta de un fichero o directorio? ¿Qué separador se usa en windows? Pon un

ejemplo de ruta de una imagen en “Mis imágenes”25. ¿Qué información se guarda en el directorio Windows?26. ¿Qué información se guarda en el directorio Documents and settings?27. ¿Qué información se guarda en el directorio Archivos de programa?28. Entre los directorios Windows, Documents and Settings y Archivos de programa, indica en

cuál encontraríamos los siguientes ficheros: programa paint, programa GIMP, fichero de configuración personal de firefox, solitario spider, documento guardado en el escritorio.

29. ¿Qué diferencia hay entre los identificadores de archivo de windows y de linux?30. ¿Qué significa si decimos que los nombres de archivo en linux son “case sensitive”?31. ¿Cómo se identifican las unidades en linux? ¿En qué directorio suelen estar los dispositivos

extraibles?32. ¿Qué separador usa linux en los directorios de una ruta?33. ¿Cuál es la raiz u origen de todos los sistemas de archivos en linux?34. ¿Qué es un inodo? ¿Qué información se guarda en ellos?35. ¿En qué directorio se guarda la información de los usuarios en linux?36. ¿En qué directorio se guardan la mayor parte de programas en linux?37. ¿En qué directorio se guarda la configuración del sistema en linux?38. Indica lo que almacena un archivo con las siguientes extensiones: odt, xls, pdf, xcf, bmp,

wma, aup, avi, flv, mkv, exe, ini, lnk, zip, asp, css.

Page 385: sistemas operativos, redes y bases de datos

39. ¿Para qué sirve un visor de archivos?40. ¿Dónde se almacena la información más importante de un fichero?41. ¿Cómo podemos cambiar la resolución de un monitor en windows?42. ¿Dónde cambiamos la velocidad de un ratón en windows?43. ¿Qué es un acceso directo? ¿cómo puedo crear uno?44. ¿Cómo puedo ordenar las carpetas que aparecen un el apartado “programas” del menú de

inicio para mi usuario? ¿Y para todos los usuarios?45. ¿Para qué sirve una cuenta de usuario?46. ¿Qué tres tipos de cuenta hay en windows?47. Escribe el comando que usaríamos para crear el usuario “Manolo” con contraseña “pepe”

en windows.48. Escribe el comando que usaríamos para cambiar la contraseña del usuario “Manolo” a

“nueva” en windows.49. Escribe el comando que usaríamos para borrar el usuario “Manolo” en windows.50. ¿Para qué sirven los grupos de usuario?51. ¿Como crearíamos un grupo de usuarios en windows?52. Escribe el comando que usaríamos para crear el grupo “Gente” y para añadir el usuario

“Pepe” a ese grupo en windows.53. ¿Qué dos tipos de cuenta hay en linux?54. Escribe el comando que usaríamos para crear el usuario “Manolo” con contraseña “pepe”

en lliurex.55. Escribe el comando que usaríamos para cambiar la contraseña del usuario “Manolo” a

“nueva” en lliurex.56. Escribe el comando que usaríamos para borrar el usuario “Manolo” en lliurex.57. Escribe el comando que usaríamos para crear el grupo “Gente” y para añadir el usuario

“Pepe” a ese grupo en lliurex.58. ¿Qué 3 tipos de permisos soporta lliurex?59. ¿A qué 3 bloques de usuarios se asignan los permisos de un archivo en lliurex?60. Explica qué significa que un fichero tiene los siguientes permisos: 764 o r-xrw-r--.61. ¿Cómo podemos compartir una carpeta en windows?62. ¿Cómo podemos identificar una carpeta compartida en windwos?63. ¿Qué tenemos que instalar para poder acceder desde linux a carpetas compartidas en

windows?64. ¿Para qué se usa NFS?65. ¿Qué es una red de ordenadores?66. ¿Qué es una LAN? Pon un ejemplo67. Clasifica las redes LAN y WAN según su tamaño y su velocidad.68. ¿Qué diferencia hay entre un cliente y un servidor?69. ¿Cuál es la característica principal de una red de pares?70. Dibuja una red en estrella, en árbol y en anillo71. ¿Qué es una dirección IP? ¿Qué forma tiene?72. ¿Para qué se utiliza la máscara de subred? ¿Qué indicaría una máscara de subred formada

por 16 unos y 16 ceros?73. ¿Qué es la dirección MAC? ¿Qué forma tiene?74. Utiliza el comando “ipconfig /all” e indica cuál es tu dirección IP, máscara de subred y

dirección MAC o física. Busca en la siguiente dirección http://standards.ieee.org/develop/regauth/oui/oui.txt cuál es el fabricante de tu tarjeta de red.

75. ¿Qué diferencia un hub de un switch? ¿Cuál es mejor?76. ¿Para qué se usa un router?77. ¿Cuántos hilos tiene un cable de pares trenzados usado en redes locales? Busca en Internet

los colores usados y cómo se emparejan.78. ¿Qué ventajas tiene la fibra óptica frente al cable de pares? ¿Y qué desventajas?

Page 386: sistemas operativos, redes y bases de datos

79. ¿Para qué se usa el protocolo DHCP?80. ¿Qué datos debemos configurar en una tarjeta de red si hacemos una configuración

manual?81. ¿Cómo se llama el cable que usamos para conectar 2 ordenadores directamente entre si?

Busca en internet cómo se conectan los extremos de ese cable.82. ¿Qué 3 estándares 802.11 son compatibles entre sí? ¿Qué velocidad máxima soporta cada

uno de ellos?83. ¿Qué protocolo inalámbrico no se puede utilizar en España? ¿Qué frecuencia utiliza?84. ¿Qué diferencia hay entre un punto de acceso y un repetidor inalámbrico?85. ¿Qué es el SSID?86. ¿Qué 2 modos existen en las conexiones inalámbricas y cuándo usaremos cada uno de

ellos?87. ¿Para qué sirve ocultar el SSID?88. ¿Para qué sirve el filtrado MAC? ¿Qué inconvenientes tiene su uso?89. ¿Qué 2 métodos se pueden usar para cifrar una conexión inalámbrica? ¿Cuál es mejor?90. ¿Qué es internet?91. ¿Para qué se utilizan los protocolos de enrutamiento?92. ¿Qué es un ISP?93. Indica el medio físico (tipo de cable) utilizado y las velocidades de las siguientes

tecnologías de conexión a internet: módem telefónico, ADSL, cable-modem, fibra óptica e internet móvil.

94. ¿Para qué sirve el DNS?95. ¿Qué es un URL y para qué sirve? ¿Qué partes tiene? (pon un ejemplo para explicarlo)96. ¿Cómo se abre una ventana de interfaz de comandos en Windows?97. Escribe el comando que usaríamos para crear y para eliminar un directorio llamado “fotos”

en windows.98. Escribe el comando que usaríamos para copiar el fichero “fich1” a otro con nombre “fich2”

en windows.99. Escribe el comando que usaríamos para cambiar el nombre al fichero “fich1” a “fich2” en

windows.100. Escribe el comando que usaríamos para eliminar el fichero “archivo.txt” en windows.101. Escribe el comando que usaríamos para acceder al CD (unidad D) en windows.102. ¿Para qué sirve el comando “attrib”?103. ¿Cómo se abre una ventana de interfaz de comandos en lliurex?104. Escribe el comando que usaríamos para crear y para eliminar un directorio llamado “fotos”

en lliurex.105. Escribe el comando que usaríamos para copiar el fichero “fich1” a otro con nombre “fich2”

en lliurex.106. Escribe el comando que usaríamos para cambiar el nombre al fichero “fich1” a “fich2” en

lliurex.107. Escribe el comando que usaríamos para eliminar el fichero “archivo.txt” en lliurex.108. Escribe el comando que usaríamos para ver la ayuda del programa “gcalc” en lliurex.109. ¿Con qué comando podemos saber nuestra dirección IP? ¿Qué dirección IP y máscara de

subred tiene tu ordenador?110. ¿Cuántos saltos hay de tu ordenador a www.tuenti.com? ¿Qué comando usas para saberlo?111. ¿Qué comando usamos para saber qué puertos tenemos abiertos en nuestro ordenador?

¿Cuántos puertos tienes tú? ¿Cómo lo has sabido?112. Escribe la dirección IP que se corresponde con los siguientes dominios: www.upv.es,

www.edu.gva.es, pop.mail.yahoo.es113. ¿Para qué se usa la herramienta Restaurar Sistema?114. ¿Para qué se usa el desfragmentador de disco?115. Usa “Información del Sistema” y escribe qué versión de windows y qué procesador tienes

Page 387: sistemas operativos, redes y bases de datos

en tu ordenador.116. ¿Para qué sirve el panel de control?117. Entra al panel del control de tu ordenador e indica qué iconos de la captura del documento

de teoría no aparecen en el tuyo, y cuáles tienes que no aparezcan en esa captura.118. ¿Por qué es recomendable actualizar el sistema operativo?119. Explica las 4 opciones que permite windows en “Actualizaciones automáticas”120. ¿Cómo actualizaríamos el sistema operativo windows de forma manual?121. ¿Qué aplicación se usa para actualizar lliurex?122. ¿Qué ventaja tiene la actualización de lliurex frente a la de windows?123. ¿Qué ventaja tiene utilizar un servidor en el aula de cara a las actualizaciones de lliurex?

Page 388: sistemas operativos, redes y bases de datos

Comunicaciones inalámbricas

TEMA 1 INTRODUCCIÓN A LOS SISTEMAS DE COMUNICACIÓN INALÁMBRICOS

1. REDES DE ORDENADORES

En la definición de una red de ordenadores podemos distinguir cuatro

elementos:

El protocolo de comunicación, define el lenguaje y el conjunto de reglas

que facilitan la comunicación entre emisor y receptor. La topología define la manera en que los nodos de comunicación están

conectados entre sí.

La seguridad es lo que permite garantizar la confidencialidad, autenticación e

integridad de los datos.

El medio de transmisión es el aire, por donde viaja la señal que lleva los

datos.

El espectro electromagnético es el rango de frecuencia de todas las ondas electromagnéticas que se pueden propagar a través del espacio libre, ordenadas

según su longitud de onda y su frecuencia. Los rangos de frecuencia más utilizados son:

Infrarrojos (IR): Se utilizan en comunicaciones punto a punto de ámbito local,

son muy direccionables y no pueden atravesar obstáculos. Microondas: Es adecuado para las transmisiones de largo recorrido.

Radiofrecuencia: Se emplea en las transmisiones de radio y televisión.

2. COMUNICACIONES INALÁMBRICAS

Clasificaremos las distintas comunicaciones inalámbricas atendiendo a su alcance en:

Redes de área personal inalámbricas (WPAN): Presentan una

importante limitación de alcance y por ello los dispositivos tienen que estar

poco separados, hay varias tecnologías: DECT, Bluetooth, HomeRF e IrDA.

Redes de área local inalámbricas (WLAN): Es una red de cobertura

geográfica limitada, velocidad de transmisión alta, bajo nivel de errores y administrada de manera privada. Contamos con dos: IEEE802.11 e

Hiperlan. Redes de gran alcance inalámbricas (WWAN): Permiten la conexión

de zonas geográficas distantes.

Las comunicaciones inalámbricas tienen ventajas y desventajas. En el aspecto

positivo destacan:

Accesibilidad y flexibilidad.

Coste.

Movilidad.

Comodidad

Escalabilidad: Se adaptan fácilmente a los cambios de topología de red.

Tema 1

Introducción a los sistemas de comunicación inalámbricos

1. Redes de ordenadores 2. Comunicaciones inalámbricas

Page 389: sistemas operativos, redes y bases de datos

2 · Comunicaciones inalámbricas

Como limitaciones tenemos:

Consumo: Las baterías de los terminales móviles limitan la potencia de

transmisión de datos.

Capacidad de transferencia limitada: el espectro electromagnético es un

recurso limitado. Calidad: Interferencias y ruidos.

Seguridad: Cualquiera puede acceder a la información transmitida por el

espectro electromagnético sin ningún tipo de limitación.

Page 390: sistemas operativos, redes y bases de datos

Comunicaciones inalámbricas · 3

TEMA

TEMA 2 ARQUITECTURAS Y PROTOCOLOS DE LAS COMUNICACIONES

INALÁMBRICAS

1. TECNOLOGÍAS DE LA INTERFAZ DE RADIO

En la interfaz de radio tenemos dos clasificaciones generales: las

comunicaciones que utilizan banda estrecha y las que emplean difusión de espectro. En la banda estrecha a medida que aumenta el número de usuarios

que transmiten información, hay que asignar una frecuencia de comunicación para cada uno de ellos, por lo que sus limitaciones son evidentes en sistemas con

muchos accesos simultáneos (figura superior de la imagen lateral). Para solucionar

este problema se utilizan dos técnicas:

Acceso múltiple por división de frecuencia: Consiste en dividir el

ancho de banda en portadores (canales) de banda estrecha: cuanto más dividimos el ancho de banda en canales, más accesos simultáneos

podemos obtener (figura central de la imagen lateral). Acceso múltiple por división de tiempo: Se comparte una misma

frecuencia que asigna intervalos de tiempo a los usuarios, así se permite

combinar una elevada cantidad de señales en una misma portadora, pero

hay que ajustar constantemente los intervalos de tiempo para sincronizar las señales en los receptores y los emisores (figura inferior de la imagen

lateral).

En las comunicaciones que se utiliza difusión de espectro, se utiliza un

ancho de banda mayor de lo que se necesita para transmitir la información, y se puede utilizar:

Salto de frecuencia: Utiliza una portadora de banda estrecha que

cambia de frecuencia con un patrón conocido por el transmisor y el

receptor, para quién no conozca este patrón la señal aparece como un impulso de ruido de corta duración.

Secuenciación directa: Se envía un bit de información como una

secuencia de bits codificados, el código que se utiliza para codificar la

señal es una secuencia de bits denominada chips.

2. REDES PERSONALES INALÁMBRICAS

DECT (Digital enhanced cordless telecommunications) es una transmisión

digital inalámbrica que ofrece varias ventajas frente a la tradicional analógica: menos interferencias, más capacidad de dispositivos en una misma zona, más

seguridad (cifrado de la información) y más movilidad (se pueden establecer mecanismos para saltar de una red a otra –roaming-). El sistema DECT está

formado por dos elementos básicos: la estación fija y el terminal móvil.

Bluetooth es un estándar para conectar sin cables diferentes dispositivos

electrónicos, como PDAs, móviles, ordenadores portátiles. Bluetooth define un alcance corto de aproximadamente 10 metros y opcionalmente un alcance medio

en torno a los 100 metros. Admite la transferencia de datos y voz y puede soportar

diferentes combinaciones de conexiones síncronas (voz) y asíncronas (datos) en función de las necesidades del servicio. En una red Bluetooth cualquier dispositivo

puede actuar como máster o como esclavo: el máster se encarga de definir cómo se establece la comunicación físicamente mientras que el esclavo coordina sus

transmisiones según las especificaciones del máster. Normalmente el primero que pide el servicio actúa como máster, excepto cuando la red ya ha sido establecida.

HomeRF permite la transferencia inalámbrica de datos y voz y facilita la integración de dispositivos, como el ordenador y la telefonía, la implementación de

Tema 2

Arquitecturas y protocolos de las comunicaciones inalámbricas

1. Tecnologías de la interfaz de

radio 2. Redes personales inalámbricas

3. Redes locales inalámbricas

4. Redes de gran alcance inalámbricas

5. WAP

Page 391: sistemas operativos, redes y bases de datos

4 · Comunicaciones inalámbricas

sistemas de control del hogar (domótica) activados por voz y la conexión

inalámbrica del ordenador con sus periféricos. Para transmitir la voz, se utiliza un sistema de comunicación muy similar al que emplea el DECT y para los datos una

tecnología basada en el estándar 802.11.

IrDA ha sido una tecnología que por su bajo coste tanto de

implementación como de consumo de potencia se ha ido extendiendo ampliamente. A estas ventajas se añaden que es muy flexible y se adapta fácilmente a una gran

cantidad de aplicaciones y dispositivos como PDAs, teléfonos, impresoras… Los dispositivos que utilizan la IrDA se comunican a través del uso del diodo LED que

deben estar alineados unos con otros con una desviación máxima permitida de 30º.

3. REDES LOCALES INALÁMBRICAS

Las WLAN son una extensión y/o una alternativa a las LAN con cables. Los

usuarios de una WLAN pueden acceder a los recursos que les ofrece la LAN sin tener que depender de infraestructuras de red (cableado, conectores, etc.). Como

ventajas tiene la movilidad, instalación simple, flexibilidad, bajo coste y

escalabilidad. Pero sus desventajas de centran en la baja velocidad respecto a una red cableada, retrasos, accesos difíciles (hay edificios que atenúan las señales),

consumo de los dispositivos, seguridad e interferencias.

Hay dos estándares principales, el IEEE 802.11 y la HiperLAN. El primero de

ellos garantiza la funcionalidad de las aplicaciones sin tener que pensar si la comunicación se hace con o sin cables. Hay dos estándares, el IEEE 802.11a que

soporta velocidades de hasta 54 Mbps, y el IEEE 802.11b que soporta velocidades de hasta 11 Mbps, también denominado Wi-Fi.

Por otro lado, el hiperLAN es un estándar de redes locales inalámbricas

desarrollado por el ETSI. Ofrece una capa PHY capaz de trabajar a velocidad

comparables o superiores incluso a las LAN fijas, tiene un esquema de acceso múltiple con calidad de servicio y además ofrece mecanismos para diferenciar redes

que se solapen y que utilizan la misma frecuencia sin perder tráfico. La flexibilidad de la arquitectura de la tecnología HiperLAN2 hace que se pueda emplear en

muchas de las redes existentes: ATM, UMTS, etc.

4. REDES DE GRAN ALCANCE INALÁMBRICAS Podemos distinguir dos tipos de WWAN:

FWWAN (fijas): puede funcionar por radioenlaces o por satélite. La mayor parte

de redes de satélites se utilizan para la difusión de la televisión. El uso de estas redes para la transmisión inalámbrica de datos empieza a ser una realidad,

pero hay que tener en cuenta los grandes gastos que comportan en equipamiento, los problemas de retraso que se producen la propagarse la señal

y el elevado coste por minuto de transmisión.

MWWAN (móvil): El terminal que envía y recibe la información está en

movimiento. Normalmente hay muchos usuarios conectaos simultáneamente que utilizan los servicios en este tipo de redes; por tanto hay que optimizar el

uso del espectro radioeléctrico y minimizar la potencia transmitida (para minimizar las interferencias entre canales). En estas redes se tiene un conjunto

de estaciones base desplegadas por territorio a las que se quiere dar cobertura conectándolas entre sí o con un centro de conmutación. La estación base de

asigna al terminal móvil que recibe con un nivel de potencia mayor, si por la

movilidad del terminal otra estación base detecta que recibe una señal de mayor potencia, se produce un cambio de canal y de estación base (handover

de potencia). Existe también un handover de calidad.

Page 392: sistemas operativos, redes y bases de datos

Comunicaciones inalámbricas · 5

TEMA

Encontramos dentro de las redes móviles tres principalmente:

El GSM arranca en 1982, cuando se creó un equipo con el nombre groupe

special mobile para desarrollar un conjunto de estándares para una red de comunicaciones móviles y se promovió la reserva para este sistema de dos bandas

de frecuencias próximas a 900 MHz. GSM ofrece servicios de telefonía, transmisión

de datos, fax y envío de SMS. Cuenta con canales de tráfico (voz y datos) a 9,6 Kbps reales, y con canales de control (para sincronización). Normalmente la voz se

codifica para reducir los bits que ocupa.

GPRS: Es una tecnología de comunicaciones inalámbrica estandarizada por el ETSI, que corresponde a la generación 2,5G. Es una evolución de la tecnología

GSM que utiliza la misma infraestructura que la anterior (bajo coste de

implantación) y se basa en la conmutación de paquetes: los usuarios siempre están conectados y los modelos de tarificación se basan en la cantidad de información

transmitida y no en el tiempo de conexión.

UMTS: Define una tecnología de comunicaciones inalámbrica optimizada

para permitir servicios multimedia de alta velocidad como vídeo, audio y acceso a internet. Cuenta con el apoyo de la mayoría de los operadores de

telecomunicaciones y fabricantes, ya que representa una oportunidad única de crear una masa de mercado para servicios multimedia, personalizados y de fácil uso

que permitan el acceso móvil a la sociedad de la información. Lo malo es que para hacer la transición de GPRS a UMTS sí es necesario invertir en una nueva

infraestructura. Puede operar en modo conmutación de circuitos con conexiones

permanentes a la red para servicios de audio y vídeo, y en modo conmutación de paquetes para transferencias de datos y acceso a Internet.

5. WAP

El protocolo WAP fue creado para proporcionar contenidos de Internet y aplicaciones de telefonía avanzadas a los terminales y teléfonos móviles, un

mercado que se encuentra en continua expansión. Los terminales WAP presentan una serie de características que condicionan la especificación del protocolo WAP:

pantalla reducida, ancho de banda de conexión bajo, conexiones no demasiado

estables, dispositivos de entrada reducidos al igual que su memoria, baterías de no muy larga duración… Con todos estos condicionantes se ha tenido que crear un

nuevo lenguaje (WML wireless markup language), se ha tenido que implementar un nivel de seguridad y definir un modelo de programación en WAP.

El protocolo WAP tiene una estructura en niveles donde encontramos las siguientes capas:

Capa de aplicación: Debe establecer las reglas

que permitan a los proveedores de servicios la

creación de aplicaciones, el funcionamiento de los agentes que hay en los terminales móviles y la

interacción con estos servicios o aplicaciones.

Capa de sesión: Es la interfaz que establece las funciones necesarias para el

control de la sesión: establecimiento de la transmisión, control del proceso y

finalización de la sesión. Para ello cuenta con capacidad de negociación.

Capa de transacción: Contiene las especificaciones que aseguran la transmisión

de los datagramas del servicio WAP. Funciona de manera similar al tradicional

TCP, pero con las modificaciones necesarias para adaptarse a una red inalámbrica: ancho de banda limitado y disponibilidad de recepción no

permanente.

Page 393: sistemas operativos, redes y bases de datos

6 · Comunicaciones inalámbricas

Capa de seguridad: Es opcional y cuando está presente establece las funciones

de seguridad en la transmisión, por ejemplo en aplicaciones de comercio

electrónico, acceso a datos bancarios, etc.

Capa de transporte: Conecta la capa de red con las capas superiores y permite

que el modelo WAP sea independiente del tipo de operador o tecnología de red empleada para acceder al servicio a aplicación.

Page 394: sistemas operativos, redes y bases de datos

Comunicaciones inalámbricas · 7

TEMA

TEMA 3 SERVICIOS Y APLICACIONES

1. DISEÑO DE APLICACIONES Y SERVICIOS INALÁMBRICOS

Para conseguir una buena comunicación, el emisor tendría que poder

adaptar la información que pretende transmitir a la capacidad de comprensión del

receptor. Si pensamos en términos de dispositivos que acceden a una información (móviles accediendo al proveedor de contenidos, por ejemplo), este proveedor ha

de diseñar los contenidos teniendo en cuenta el dispositivo mediante el cual el cliente accede a él. Un primer problema a resolver es conseguir que una misma

aplicación sea accesible para distintos dispositivos, aprovechando las ventajas y a la

vez salvando las limitaciones de cada uno. La solución a este problema es XML. XML permite separar la información de su presentación, de manera que un

mismo contenido se puede presentar con distintos formatos. Un documento XML está bien definido o es válido, cuando cumple una DTD determinada, es decir

cuando la información se ha etiquetado siguiendo los tipos definidos en este estándar.

XSL es un lenguaje de hojas de estilo que, en combinación con XML,

permite representar la información sin reescribir código y con diferentes formatos de salida.

Todos los terminales de comunicación inalámbricos presentan la mayor

parte de las restricciones siguientes:

Mecanismos de entrada de datos poco cómodos y especialmente lentos para la

escritura de texto libre.

Capacidad de procesamiento limitada, lo que implica eliminar gráficos y otros

recursos multimedia complejos. Las aplicaciones deben diseñarse de manera que el procesamiento más pesado se realice en el servidor y no en el terminal

cliente. Capacidad de almacenamiento limitada. Hay que procurar guardar los datos

estrictamente necesarios.

Dificultad para gestionar la memoria, un bien muy escaso. La capacidad de

memoria es tan diminuta en comparación con la de un ordenador de

sobremesa, que hay que utilizarla eficazmente sin acumular demasiados datos. Volatilidad de la información porque las baterías se han descargado, con

posible pérdida de datos. Hay que diseñar políticas muy firmes de copias de

seguridad o asegurarse de que el usuario no descargue la batería.

Respecto a la pérdida de conectividad, hay que decir que las aplicaciones

deberían ser lo suficientemente robustas como para recuperarse de un corte de la conexión debido a la pérdida de cobertura. Una primera solución es la creación de

aplicaciones clientes muy completas que incorporen la lógica del servidor necesaria para seguir trabajando fuera de línea mientras dure la pérdida de cobertura y que

una vez recuperada, automáticamente se conecten y envíen los datos locales al servidor remoto, sin tener que empezar de nuevo y sin tener que reenviar la

información.

Otra solución consiste en la implementación de colas de mensajes que se instalan en el servidor y recogen peticiones cuando el dispositivo inalámbrico no

está conectado.

2. SERVICIOS CARACTERÍSTICOS DE LOS ENTORNOS MÓVILES

El middleware o software intermediario de comunicaciones inalámbricas es

una denominación ambigua que abarca todo tipo de entornos, herramientas y servicios inalámbricos. Concretamente, comprende toda la tecnología situada por

encima del sistema operativo y por debajo de las aplicaciones.

Tema 3 Servicios y aplicaciones

1. Diseño de aplicaciones y

servicios inalámbricos 2. Servicios característicos de los

entornos móviles

Page 395: sistemas operativos, redes y bases de datos

8 · Comunicaciones inalámbricas

La arquitectura de una aplicación de un

entorno de comunicación inalámbrica se puede describir según un modelo de cuatro capas, aunque

la cantidad y el tipo de capas empleadas dependerán de la complejidad del problema.

La capa 1 o capa de acceso, describe el

dispositivo inalámbrico desde el que el usuario accede a la aplicación. Las capas 2 y 3 engloban el

middleware y los servicios que permiten que los datos y las aplicaciones de la capa 4 sean accesibles

por medio de dispositivos inalámbricos. Finalmente la capa 4 o capa de aplicación, recoge todos los datos y

aplicaciones corporativas accesibles desde la capa de acceso, como por ejemplo la

mensajería electrónica, los datos de los clientes o las aplicaciones para el procesamiento de datos.

Las funcionalidades más críticas del middleware se reparten entre las

capas 2 y 3 del modelo; en concreto la capa 2 o de seguridad, es la responsable de

ofrecer una conectividad inalámbrica segura, optimizada y fiable. Los componentes principales de esta capa son las pasarelas inalámbricas. Estas pasarelas

proporcionan las funcionalidades de conectividad por medio de las redes de comunicación inalámbrica, con independencia del modelo del terminal empleado o

del operador contratado. En concreto, una pasarela de comunicaciones inalámbricas es la responsable de gestionar la conexión y la sesión de usuario por

medio de dispositivos y de redes móviles. Otra responsabilidad fundamental de las

pasarelas es la gestión de la seguridad en las comunicaciones mediante tecnologías de cifrado y autenticación.

Los servidores de aplicaciones de comunicaciones inalámbricas son una extensión natural de los servidores de aplicaciones para dar apoyo a los dispositivos

inalámbricos. Deben ser independientes de los dispositivos y de las redes de

acceso. Los transcoders son una pieza de la capa 3 que procesa contenidos y los presenta con un nuevo formato más adecuado a las características del dispositivo y

la red desde los que accederá. Esta transformación suele ser dinámica y parte tanto de contenidos estáticos como de contenidos generados dinámicamente.

El portal multimedia inalámbrico se orienta al usuario final con el objetivo de reflejar sus necesidades de acceso seguro y robusto en ubicaciones y

circunstancias cambiantes. Un portal de estas características ha de garantizar una

serie de servicios mínimos:

Agregación e integración de información relevante teniendo en cuenta el perfil

del usuario. Formateo dinámico de la información según las características de los terminales

y redes soportados.

Presentación de la información teniendo en cuenta posibles cambios en el

terminal o en la red.

Actualización dinámica: con información como bolsa de valores, noticias, etc.

Los servicios móviles de localización proporcionan un servicio

personalizado y contextualizado según quién, cuándo y desde dónde se soliciten. La diferencia entre localización y posición consiste en el nivel de detalle empleado:

localización es un término genérico que puede tener en cuenta grandes extensiones

geográficas, mientras que posición es la información exacta sobre la localización de alguien. Esta información sobre localización/posición de un individuo no tiene valor

por sí misma. Requiere aplicaciones y servicios que la exploten en un momento determinado en función del perfil del usuario.

Los servicios y las aplicaciones basados en la localización son visibles para el usuario, pudiendo obtener o deducir, interpretar y utilizar la información sobre su

posición: páginas amarillas, predicción del tiempo, información del tráfico…

Los servicios y aplicaciones sensibles a la localización, los activa directamente el usuario cuando entra en un área determinada, previo consentimiento o

Page 396: sistemas operativos, redes y bases de datos

Comunicaciones inalámbricas · 9

TEMA

subscripción. Aquí se incluyen los servicios de marketing directo, como los cupones

instantáneos definidos como ofertas emitidas por establecimientos cercanos a la localización del usuario en un momento dado.

Se pueden distinguir cuatro tipos de técnicas básicas para la determinación de la posición:

Técnicas basadas en el terminal, por ejemplo el GPS, en el que el terminal de manera autónoma calcula su posición. SU exactitud es de 5-10 metros para

objetos estáticos y de 10-100 metros para objetos en movimiento.

Técnicas basadas en la red, en las que la red de comunicaciones calcula la

posición de manera también autónoma. Por ejemplo la identificación de celda (Cell-ID) funciona sobre redes GSM, GPRS y WCDMA; es el mecanismo más

sencillo para describir la localización de un individuo: simplemente proporciona la localización de la antena o estación base que en un momento dado provee el

teléfono móvil en cuestión del servicio de conectividad. El área geográfica

cubierta por una determinada estación se denomina celda; así pues la exactitud de la técnica depende del tamaño de las celdas, cuyo diámetro puede varias

desde los 500 metros hasta los 20 kms. La estrategia típica para mejorar la exactitud consiste en reducir el tamaño de las celdas. En las ciudades, las redes

de estaciones son más densas y tienen celdas más pequeñas. En cambio, en

las zonas rurales hay menos antenas, por tanto la exactitud de este servicio será poco precisa.

Técnicas asistidas por el terminal (por ejemplo E-OTD) en las que éste da

asistencia a la red de comunicaciones que finalmente calcula la posición. Se basa en la detección, por parte del terminal móvil de la diferencia de tiempo de

llegada de las señales procedentes de las diversas estaciones base que le dan servicio (GSM y GPRS). La posición del terminal móvil se determina a partir de

los componentes geométricos correspondientes a los retrasos temporales entre

el terminal móvil y las estaciones base. Su exactitud oscila entre 100 y 500 metros.

Técnicas asistidas por la red: (A-GPS) en las que la red de comunicaciones da

asistencia al terminal, que finalmente calcula la posición.

Avisos y tecnología push

En un modelo cliente-servidor clásico, los clientes solicitan un servicio o una

información al servidor que responde a la petición. Esto se denomina tecnología pull: el cliente extrae información del servidor. La tecnología push también se basa

en un modelo cliente-servidor, pero no hay una petición explícita por parte del cliente antes de que el servidor transmita la información o el servicio. Otra manera

de expresarlo es que mientras que en las transacciones de tipo pull el cliente

siempre inicia el flujo de información, en las transacciones push es el servidor el que inicia el flujo de información.

El SMS (Short Message Service) es un ejemplo de tecnología push e identifica el servicio de mensajería que posibilita el envío de mensajes de texto

corto entre terminales móviles y que se basa en el protocolo SMPP (Short message

peer to peer), un protocolo de mensajería abierto y diseñado para simplificar la integración de aplicaciones de datos con redes de dispositivos móviles inalámbricos

como el GSM. Es importante tener en cuenta que el éxito de cualquier tecnología o

servicio ha de medirse no sólo en términos de velocidad, capacidad de transmisión

y seguridad, sino también en términos de utilización. En el caso del SMS, el éxito ha superado las expectativas de cualquier operador de telefonía: se ha convertido en

el sistema de comunicación de toda una generación. La posibilidad de que el terminal destinatario del mensaje esté inactivo o

sin cobertura hace necesaria la existencia de entidades destinadas al almacenamiento de los mensajes que no pueden ser entregados a sus

destinatarios. El BSC (Base station center) se encarga de transmitir el mensaje que

procede de un terminal móvil dentro del área de cobertura de una antena hacia la entidad que almacena los mensajes, el SMSC (Short messaging service center). Si

Page 397: sistemas operativos, redes y bases de datos

10 · Comunicaciones inalámbricas

el terminal móvil receptor no está disponible o está desconectado en ese momento,

el mensaje se almacenará en el SMSC y se volverá a enviar posteriormente. El mensaje quedará en el SMSC hasta que se consiga el envío o se llegue al máximo

de tiempo de validez, el periodo máximo que un mensaje se puede almacenar en un SMSC.

El EMS (enhanced messaging service) es una evolución del SMS basada en

un diseño inicial de Ericsson aceptado por el 3GPP, que permite el envío a otro usuario de una combinación de imágenes, texto con formato, melodías, sonidos y

animaciones. Este servicio no comporta ningún cambio para los centros SMS de mensajería, ya que el envío es transparente para estos centros y el único

requerimiento para la correcta visualización del mensaje es que el terminal móvil soporte las especificaciones de este tipo de mensajería. Para los envíos de gran

tamaño el mensaje resultante puede utilizar la práctica totalidad del tamaño

máximo de un mensaje SMS; en estos casos y para permitir el envío de más información, se puede utilizar el mecanismo de concatenación de mensajes que

incorpora el protocolo SMPP. El estándar SMS permite la concatenación de un total de 255 mensajes de 140 bytes cada uno, para obtener un único mensaje de

aproximadamente 38 Kbs. Pero los terminales móviles actuales sólo soportan la

concatenación de entre 3 y 6 mensajes, pues las concatenaciones de tamaño superior se considerarán mensajes separados.

El MMS (Multimedia messaging service) permite el envío de mensajes con una combinación de uno o más de los siguientes componentes: texto alfanumérico,

imágenes, sonidos, animaciones y video. Este sistema comporta unos cambios fundamentales en la mensajería, no sólo en lo tocante al tipo de mensajes que se

pueden enviar y a los mecanismos utilizados para enviarlos y recibirlos, sino

también en lo que respecta a la infraestructura de red necesaria para poder enviarlos. El SMS utiliza para la emisión y la recepción de mensajes el canal de

señalización de las redes GSM, lo cual permite la recepción de mensajes mientras se hace, por ejemplo, una llamada de voz. Sin embargo, este hecho limita el

formato de los mensajes que pueden ser enviados por SMS, ya que el canal de

señalización tiene un ancho de banda pequeño. El MMS difiere del SMS porque aprovecha la gran capacidad de las redes de

tercera generación para enviar los mensajes por el canal de transmisión de datos. De este modo, no tiene limitación de ancho de banda y, al mismo tiempo, utiliza

protocolos estándar de internet para enviar y recibir esa información.

Para prever el éxito de penetración en el mercado de todas estas nuevas

tecnologías de comunicación, hay que tener en cuenta factores muy importantes, como la evolución de las redes actualmente existentes en las fechas previstas y la

presencia en el mercado de una elevada cantidad de terminales compatibles con estas tecnologías. Además, cuando la aplicación de una tecnología conlleva un

cambio de terminal, el éxito de implantación también dependerá de la decisión del

usuario de invertir o no en ese nuevo terminal móvil.

Portales de voz

Estos portales son webs que permiten el acceso y la navegación por su

información desde un terminal telefónico mediante la voz. De manera análoga a los portales de internet, los portales de voz permiten una interacción entre los usuarios

y el servidor de contenidos. Existen dos tecnologías del habla claves en la interacción persona máquina:

el reconocimiento de voz y la conversión de texto a habla. El primero (traduce palabras habladas en palabras escritas) puede tener dos utilidades principales: el

dictado (puede crearse con la voz una pieza de texto) y la navegación (cuando se

utiliza la voz para controlar el sistema).La conversión de texto a voz aumenta la creación de sonidos a partir de palabras escritas.

El voiceXML es un lenguaje basado en XML y definido por el W3C que permite diseñar diálogos orales para acceder a la web mediante la voz con

teléfonos móviles.

Page 398: sistemas operativos, redes y bases de datos

Comunicaciones inalámbricas · 11

TEMA

TEMA 4 ENTORNOS DE DESARROLLO

La gran variedad de dispositivos móviles provoca la continua aparición de

nuevos estándares y lenguajes de programación. A medida que los navegadores de estos dispositivos son capaces de procesar diferentes formatos de contenido, la

oferta crece más y más, dificultando el desarrollo de software en entornos de

comunicación inalámbrica. Podemos distinguir y clasificar los entornos de desarrollo según los

dispositivos a los que van dirigidos:

Entornos independientes de los dispositivos: Son los que permiten desarrollar

software apto para cualquier tipo de dispositivo, sin basarse en las funcionalidades y características específicas del sistema operativo y del

hardware.

Entornos dependientes de los dispositivos: Son los que permiten explotar a

fondo las posibilidades del sistema operativo y del hardware empleados, siempre que la tipología de los dispositivos clientes sea reducida y previsible. La

lista de posibilidades es realmente extensa y creciente.

Los entornos de desarrollo contienen emuladores que simulan la ejecución de

código en dispositivos concretos. Hay infinidad de emuladores, pero es preciso tener en cuenta que el comportamiento del software en el emulador no

necesariamente ha de coincidir exactamente con el que tendrá en el dispositivo real. Los emuladores facilitan un primer nivel de depuración del código; se requiere

una segunda depuración con los dispositivos físicos.

1. ENTORNOS DEPENDIENTES DEL DISPOSITIVO Web Clipping de Palm OS

Una aplicación web clipping es un conjunto de páginas HTML comprimidas

con un formato denominado PQA (Palm query apllication), diseñado para reducir

los requerimientos de ancho de banda y de pantalla necesarios para ser mostrados al usuario. El PQA es un subconjunto del HTML.

La navegación web clipping no se basa en un modelo de hiperenlaces, sino en preguntas-respuesta entre el usuario y el servidor intermediario.

Entornos visuales de Pocket PC y Windows CE

Estos entornos visuales permiten desarrollar, depurar y emular rápidamente aplicaciones móviles para plataformas Pocket PC y Windows CE. Todo ello

empleando dos lenguajes de programación bastante maduros en el mercado: Visual Basic y Visual C++. Pese a esa madurez, para cada tipo de dispositivo se requiere

un SDK diferente para compilar y ejecutar la aplicación.

Con el eMbedded Visual Basic y el eMbedded Visual C++ se pueden crear componentes y aplicaciones con interfaz gráfica que se ejecutarán por encima de

las funcionalidades nativas de los dispositivos, pero no implementarán drivers ni servicios de bajo nivel.

2. ENTORNOS INDEPENDIENTES DEL DISPOSITIVO

WML

La estructura del WML se define mediante el XML y el correspondiente

DTD. Si se genera un documento WML, siguiendo las especificaciones del XML, decimos que se está formateando correctamente y cuando el documento cumple

con las especificaciones de su DTD, decimos que es válido. Los documentos creados con el WML se componen de unas unidades mínimas de información,

Tema 4

Entornos de desarrollo

1. Entornos dependientes del

dispositivo 2. Entornos independientes del

dispositivo

Page 399: sistemas operativos, redes y bases de datos

12 · Comunicaciones inalámbricas

cartas, que se estructuran en barajas, de manera similar a como los documentos

HTML se componen de diferentes marcos de información. Las aplicaciones diseñadas con el WML permiten al micronavegador que

incorporan los terminales móviles navegar de manera sencilla hacia la carta anterior o posterior de uno o más documentos. Cuando se navega por un contenido, el

navegador guarda en su memoria toda la baraja, pero sólo muestra una carta al

usuario: así, la navegación hacia otra carta no comporta un nuevo acceso a la red, lo cual disminuye el tiempo de respuesta y reduce el consumo de batería y

procesador.

Personal Java y JavaPhone

Combinado con la plataforma Personal Java, el API JavaPhone proporciona

el entorno ideal para una entrega de información fiable y dinámica a dispositivos de telefonía. Esta nueva API se diseñó para proveer de acceso a las funcionalidades

más características de los teléfonos móviles más sofisticados y de pantallas de teléfono con acceso a internet.

El secreto para poder ejecutar el Java en dispositivos limitados es la

reducción del tamaño de las clases que se instalan en el entorno de ejecución. La versión Micro Edition elimina todas las clases innecesarias quedándose solamente

con las que forman el núcleo básico para la ejecución de aplicaciones sobre dispositivos móviles y reduce estas clases eliminando todas sus funciones y

procedimientos redundantes y duplicados.

Page 400: sistemas operativos, redes y bases de datos

Comunicaciones inalámbricas · 13

TEMA

TEMA 5 SEGURIDAD EN COMUNICACIONES INALÁMBRICAS

1. LA PROBLEMÁTICA DE LA SEGURIDAD

Los cuatro conceptos clave de seguridad de la información son:

Confidencialidad: Propiedad que asegura que sólo tienen acceso a la

información los que están autorizados (privacidad). Integridad: Asegura la no alternación de la información (inserción, borrado o

sustitución de la misma).

Autenticación: Hace referencia a la identificación, es el nexo de unión entra

la información y su emisor. No repudio: Asegura que ninguna parte pueda negar ningún compromiso o

acción tomados anteriormente

La preocupación por la seguridad en los entornos inalámbricos es creciente, ya

que su uso para aplicaciones de comercio electrónico requiere un alto grado de

seguridad. Cuando hablamos de técnicas para prevenir la seguridad podemos hacer una distinción clara entre las que trabajan en el nivel físico de la comunicación y las

que trabajan en el resto de niveles, tanto en el de enlace como el de aplicación. Entre las técnicas habituales en el nivel físico hallamos las de difusión de

espectro, que basan su funcionamiento en fraccionar la señal de radio y

transmitirla de manera imperceptible por diferentes frecuencias: al no conocerse la manera en que se ha distribuido la señal por las diferentes frecuencias, no se

puede reconstruir, ya que las distintas señales que se reciben en cada frecuencia, aisladamente son percibidas como ruido.

2. TECNOLOGÍAS DE CORTO ALCANCE: BLUETOOTH

A la hora de estudiar la seguridad de las tecnologías de corto alcance, nos centraremos en la tecnología de Bluetooth, ya que las tecnologías DECT y HomeRF

son propietarias y un porcentaje mínimo de su información es pública.

Los dispositivos Bluetooth operan en tres modos de seguridad: Modo de seguridad 1, modo 2 y 3.

El modo de seguridad 1 no incorpora ningún mecanismo de seguridad,

permitiendo la conexión entre cualquier dispositivo y/o aplicación. De hecho, no tendría que considerarse de seguridad, pero las especificaciones de la arquitectura

así nos lo indican.

El modo de seguridad 2 ofrece una seguridad débil, es el llamado nivel

de servicio, porque las restricciones se aplican cuando la comunicación entre los dispositivos ya se ha efectuado. Pese a ello, se utiliza mucho porque si se

restringen las conexiones a nivel de enlace no es posible diseñar aplicaciones más

abiertas, como el intercambio de tarjetas de negocio o la consulta de los servicios ofrecidos por un dispositivo. La política de seguridad en estos casos se basa en la

información almacenada en dos bases de datos: la de dispositivos y la de servicios. La base de datos de dispositivos mantiene información de los requisitos de

seguridad de los dispositivos de acuerdo con la confianza que se tiene en ellos. Se

especifican dos niveles de confianza:

Dispositivos de confianza: Han sido autenticados previamente, tienen una clave

de enlace almacenada y en la base de datos están marcados como dispositivos de confianza.

Dispositivos untrusted: Autenticados también previamente, tienen una clave de

enlace almacenada pero se aplican como de no confianza normalmente porque no se tiene con ellos una relación permanente.

Tema 5 Seguridad en comunicaciones

inalámbricas

1. La problemática de la seguridad

2. Tecnologías de corto alcance: Bluetooth

3. El estándar IEE 802.11

4. Las tecnologías de gran alcance: GPRS

Page 401: sistemas operativos, redes y bases de datos

14 · Comunicaciones inalámbricas

Por otro lado, la base de datos de servicios especifica las necesidades de

seguridad de los distintos servicios: abiertos, con autorización o con autenticación y autorización.

El modo de seguridad 3 en el nivel de enlace es el sistema más seguro

especificado en la arquitectura Bluetooth, ya que las restricciones de seguridad se

aplican antes de la conexión entre los dispositivos, así se minimiza el riesgo de ataques de dispositivos ya conectados.

El proceso de autenticación es de tipo reto-respuesta y requiere que los dos interlocutores conozcan un valor con anterioridad al proceso, que en este caso es la

llamada clave de enlace.

Aunque la arquitectura Bluetooth incorpora ciertos niveles de seguridad, existen

puntos del diseño poco robustos:

En el caso de no haberse dado una conexión previa entre los dispositivos, la

clave de enlace se obtiene por medio de la clave de inicialización. Esta clave se genera, básicamente, a partir del PIN, ya que el valor aleatorio se transmite en

claro de un dispositivo a otro. Teniendo en cuenta que los PIN están formados

por 4 dígitos, el número de posibilidades es bastante bajo. Aún es peor si se utiliza la clave de dispositivo como clave de enlace. La clave

de dispositivo se general al inicializarse el dispositivo y raramente se cambia.

Eso hace que cuando un dispositivo A ha usado su clave de dispositivo como clave de enlace para autenticarse ante B, el siguiente proceso de autenticación

de A ante un tercer dispositivo con su clave de dispositivo como clave de enlace no sea fiable: el dispositivo B podría hacerse pasar por A dado que conoce su

clave de dispositivo.

Para finalizar, cabe destacar que los esquemas de seguridad que incorpora la

arquitectura Bluetooth autentican dispositivos, pero no usuarios. Eso, junto con la poca longitud del PIN, hace que no sea adecuado para ciertas aplicaciones.

3. EL ESTÁNDAR IEEE 802.11

En el estándar IEEE 802.11 se especifican dos servicios de seguridad: uno para obtener la propiedad de autenticación y el otro para la propiedad de

confidencialidad e integridad.

El servicio de confidencialidad del estándar IEEE 802.11 se basa en el

algoritmo WEP. Este algoritmo proporciona las propiedades de confidencialidad e integridad. La confidencialidad se logra utilizando criptografía de clave simétrica, en

particular el cifrador en flujo RC4. La integridad se obtiene mediante un ckecksum CRC32. Tal como dice el estándar, el algoritmo WEP pretende dotar a las redes

inalámbricas de las mismas propiedades de seguridad que las redes con cables.

Este argumento ha sido utilizado a menudo para rebatir los problemas de debilidad del algoritmo, ya que muchos

de esos problemas también están en las redes con cables.

El proceso de descifrado de la información que

lleva a cabo el receptor es exactamente el inverso al de cifrado que reproducimos en la imagen lateral.

Como el RC4 es un criptosistema de clave compartida, la estación y el punto de

acceso necesitan intercambiar tanto el vector inicial VI como la clave K para poder

comunicarse utilizando el WEP. Como el VI se envía en claro, la seguridad del algoritmo depende solamente de la clave. Aún así, hay que asegurar la integridad

de la transmisión del VI, ya que si el VI utilizado por el emisor no es exactamente igual que el del receptor, los procesos de cifrado y descifrado no serán inversos.

Este intercambio de información se realiza durante el proceso de autenticación.

Page 402: sistemas operativos, redes y bases de datos

Comunicaciones inalámbricas · 15

TEMA

Sobre el proceso de autenticación diremos que el estándar IEEE 802.11

tiene dos variantes: el OSA y el SKA. OSA es la implementación obligada en el estándar y lo incluyen por defecto la mayoría de los productos que se pueden

encontrar en el mercado. Como su nombre indica (Open System Autenthication), es un sistema de autenticación abierto y que, por lo tanto, no limita el acceso, cosa

que implica que, desde el punto de vista de la seguridad, este sistema por sí mismo

no tiene interés. El método SKA (Shared Key Autenthication) permite la autenticación de las

estaciones y los puntos de acceso por medio del algoritmo WEP, junto con un sistema de reto-respuesta. Este proceso de autenticación consiste en el intercambio

de 4 mensajes entre la estación que se autentica y el punto de acceso. El sistema de intercambio de claves no implica el envío de claves en claro, pero requiere que

la clave secreta compartida haya sido proporcionada por un canal seguro con

anterioridad al proceso de autenticación. El punto de acceso envía continuamente una señal de baliza para

anunciar su presencia. Una estación que quiera acceder a la red, al encontrar la señal de baliza, inicia el proceso de autenticación con el punto

de acceso cuya dirección figura en la señal de baliza.

El proceso de intercambio de mensajes es el siguiente:

La estación envía un mensaje al punto de acceso para solicitar la

autenticación. El punto de acceso genera un reto de 128 bytes utilizando el

algoritmo WEP a partir de un valor pseudoaleatorio, una clave K y un vector

inicial VI. La estación genera la respuesta utilizando el algoritmo WEP con el

valor reto, la calve K y un VI diferente del que se ha usado en el paso

anterior.

El punto de acceso calcula la respuesta utilizando el algoritmo WEP

con la clave compartida, el valor reto y el valor VI recibido de la estación. Si ambas respuestas coinciden, la estación ha sido autenticada correctamente.

El diseño y el funcionamiento de las redes de área local hacen que la captura

del tráfico de red sea simple, utilizando una tarjeta de red en modo promiscuo (que

acepta todos los mensajes que le llegan). Si a esto le añadimos el hecho de que en las comunicaciones inalámbricas no se necesita estar conectado a la red para

recibir la señal, tenemos que es relativamente fácil realizar un ataque sobre las mismas.

Uno de los problemas añadidos que encontramos en el proceso de autenticación es que el estándar sólo obliga a implementar el modelo OSA, así que

en muchos productos sólo viene este modelo y cualquier estación que sea capaz de

generar tramas correctas se puede autenticar. Pero el proceso de autenticación SKA tampoco está libre de problemas, uno de

los principales es la longitud de la clave: el estándar fija en 40 bits esta longitud, y esto hace que sea lo suficientemente pequeña como para poder intentarse un

ataque de “fuerza bruta”, es decir, probando todas las combinaciones posibles. Este

hecho deriva de un problema legal en EEUU. Cuando se fijó este estándar una ley prohibía la exportación de EEUU de criptografía fuerte (con claves de longitud

grande), ya que consideraban esto como armamento. Por ello, muchos estándares que incorporan esquemas criptográficos utilizan, como máximo, claves de 40 bits.

En la actualidad esta ley ya no está en vigor, pero se siguen sufriendo sus

consecuencias, como en este caso.

Las recomendaciones de seguridad para el estándar actual son:

Situar la red inalámbrica fuera del perímetro de acción del firewall de la

empresa y nunca en la red de la organización. Utilizar redes privadas virtuales para el acceso entre estaciones móviles de red

inalámbrica y estaciones en el firewall de la empresa.

Eliminar las rutas que permiten el acceso a internet por la red inalámbrica.

Page 403: sistemas operativos, redes y bases de datos

16 · Comunicaciones inalámbricas

Tener una buena política de gestión de claves para que cada estación tenga

una clave de cifrado diferente y que estas claves se actualicen con frecuencia.

4. LAS TECNOLOGÍAS DE GRAN ALCANCE: GPRS

Nos vamos a centrar en el GPRS dado que esta tecnología se puede

considerar como un servicio sobre GSM, y muchos de los procedimientos y

algoritmos de seguridad se basan en los mismos principios. El proceso de autenticación de un terminal en una red GPRS, al igual

que sucede en las redes GSM, utiliza un modelo reto-respuesta. Los mayores problemas en la seguridad del sistema GPRS y también del GSM, recaen en el

hecho de que utilizan sistemas propietarios, lo que dificulta su evaluación por parte

de la comunidad científica internacional. Así, no se puede asegurar que los algoritmos sean lo suficientemente robustos para seguir siendo seguros en el caso

de que la descripción del algoritmo se hiciera pública. Por otro lado, el proceso de autenticación se basa en la clave que

comparten el terminal y la operadora. Esta clave figura en la tarjeta SIM del usuario. Eso comporta que la clonación de esta tarjeta implica la duplicación de la

identidad del usuario y, por tanto, todo el gasto que se realice con la tarjeta

clonada se facturará al usuario legítimo.

Texto elaborado a partir de: Comunicaciones inalámbricas

Josep Prieto Blázquez, Genís Berbel Navarro, José Manuel Santos Villa, Silvia González González, Jordi Herrera Joancomartí

Febrero 2008