Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Sistemas Operativos (página 2)




Enviado por samescot2



Partes: 1, 2

Segmentación

Otra opción para el manejo de la memoria
es usar una forma de liberar al programador de la tarea del
control de
las tablas en expansión y contracción, de la
misma forma que la memoria virtual
elimina la preocupación por organizar el programa en una
serie de proyectos.

Esto se puede lograr dotando a la máquina de
varios espacios independientes de direcciones llamados
segmentos. Cada segmento tiene una serie lineal de direcciones,
desde 0 hasta cierto máximo. La longitud de cada
segmento puede variar de 0 hasta un máximo permitido.
Los distintos segmentos pueden tener y de hecho tienen por lo
general, longitudes distintas. Además, la longitud de un
segmento puede variar durante la ejecución. La longitud
de un segmento de la pila puede crecer si algo entra a la pila
y decrecer si algo sale de ella.

Puesto que cada segmento constituye un espacio
independiente de direcciones, los distintos segmentos pueden
crecer o reducirse en forma independiente sin afectar a los
demás. En la figura 13 podemos ver una lista de
comparación entre la paginación y la segmentación.

La segmentación también facilita el
uso de procedimientos
o datos
compartidos entre varios procesos. Un
ejemplo común son las bibliotecas
compartidas (Shared DLL’s). Es frecuente que las
estaciones de trabajo modernas que ejecutan sistemas
avanzados, con ventanas, tengan bibliotecas
gráficas de tamaño muy grande que
se compilan casi en todos los programas. En
un sistema
segmentado, la biblioteca
gráfica se puede colocar en un segmento y compartirse
entre varios procesos,
sin necesidad de tenerla en el espacio de direcciones de cada
proceso.

Aunque también es posible tener bibliotecas
compartidas sin los sistemas con
paginación pura, es mucho más complejo. De hecho,
estos sistemas simulan la segmentación.

Segmentación pura

La implantación de la segmentación
difiere del caso de la paginación en un sentido
esencial: las páginas tienen un tamaño fijo y los
segmentos no. La figura 14 muestra un
ejemplo de memoria
física
que contiene al principio 5 segmentos. Consideremos que el
segmento 1 se elimina y su lugar se ocupa por el segmento 7,
que es menor. El área que queda entre el segmento 7 y el
2 es un hueco. Luego, el segmento 4 se reemplaza por el
segmento 5 y el segmento 3 es reemplazado por el segmento 6.
Después de que el sistema
esté en ejecución durante cierto tiempo,
la memoria
quedará dividida en varios bloques, algunos con
segmentos y otros con huecos.

Considerando

Paginación

Segmentación

¿Necesita saber el programador si
está utilizando esta técnica?

No

¿Cuántos espacios lineales de
direcciones existen?

1

Muchos

¿Puede el espacio total de direcciones
exceder el tamaño de la memoria física?

¿Pueden distinguirse los procedimientos y los datos, además de protegerse en
forma independiente?

No

¿Pueden adecuarse con facilidad las
tablas con tamaños fluctuantes?

No

¿Se facilita el uso de procedimientos
compartidos entre los usuarios?

No

¿Para qué se inventó esta
técnica?

Para obtener un gran espacio lineal de
direcciones sin tener que adquirir más memoria
física

Para permitir que los programas y datos fueran separados en
espacios independientes de direcciones y poder proporcionar la protección
y uso de objetos compartidos

Fig. 13. Comparación de paginación y
segmentación.

Este fenómeno de fragmentación externa o
checkboarding, desperdicia la memoria correspondiente a
los huecos, pero es fácilmente corregido mediante el uso
de la compactación. De esta forma los huecos son
unificados, generando así un hueco de tamaño
suficiente para albergar algún otro segmento
más.

 Para ver el gráfico
seleccione la opción "Descargar" del menú
superior

Fig. 14. Desarrollo
de fragmentación externa y su corrección mediante
compactación.

Segmentación con paginación:
MULTICS

En el sistema MULTICS, una dirección lógica está formada por un
número de segmento de 18-bit y un offset de 16 bit.
Aunque este esquema crea un espacio de dirección de 34-bit, la sobrecarga en la
tabla de segmentos es tolerable; solo se requiere de las
suficientes localidades en la tabla de segmentos como haya
segmentos, puesto que no debe haber localidades
vacías.

Sin embargo, con segmentos de palabras de 64K, es
donde cada una consiste de 36 bits, el tamaño promedio
de segmento puede ser grande y se podría presentar un
problema de fragmentación externa. Aunque no lo fuera,
el tiempo de
búsqueda para ubicar un segmento, usando primer ajuste o
mejor ajuste, puede ser prolongado. Lo que puede causar
desperdicio de memoria debido a la fragmentación
externa, o desperdicio de tiempo por las largas
búsquedas o ambas.

La solución al problema es paginar los
segmentos. La paginación elimina la fragmentación
externa y convierte el problema de ubicación en algo
trivial: cualquier frame desocupado puede ser usado para una
página deseada. En MULTICS, cada página consiste
de palabras de 1K. En consecuencia, el offset del segmento (16
bits) es dividido en un número de página de 6 bit
y un offset de página de 10 bit. El número de
página se indexa en la tabla de páginas para
obtener el número de frame. Finalmente, el número
de frame es combinado con el offset de página para
formar una dirección física. El esquema de esto
se muestra en la
figura 15.

  Para ver el
gráfico seleccione la opción "Descargar" del
menú superior

Fig. 15. Segmentación paginada en el GE 645
(MULTICS)

Ahora se debe de tener una tabla de páginas
individual para cada segmento. Sin embargo, dado que cada
segmento está limitado en tamaño por su
ubicación en la tabla de segmentos, la tabla de
páginas no tiene que ser de tamaño completo, solo
requiere de los espacios que son realmente
necesarios.

Al igual que en la paginación, la última
página de cada segmento, por lo general no estará
totalmente llena. En consecuencia, se tiene, en promedio, una
fragmentación interna de media página por
segmento.

Segmentación con paginación: Intel
386

El sistema
operativo IBM OS/2 de 32 bits es un sistema
operativo que corre con las arquitecturas del procesador
Intel 386 y 486. El 386 una la segmentación con
paginación para su manejo de memoria. El número
máximo de segmentos por proceso es
de 16K y cada segmento puede llegar a ser de hasta 4 gigabytes.
El tamaño de página es de 4K.

 Para ver el gráfico
seleccione la opción "Descargar" del menú
superior

Fig. 16. Traducción de dirección en el
Intel 80386

El espacio de direcciones lógicas está
dividido en dos particiones. La primera partición
consiste en segmentos de hasta 8K los cuales son privados para
ese proceso. La segunda partición también
consiste en segmentos de hasta 8K, los cuales son compartidos
entre todos los procesos. La información de la primera
partición es guardada en la tabla descriptora local (LDT
– Local Descriptor Table), y la de la segunda
partición es guardada en la tabla descriptora global
(GDT – Global Descriptor Table). Cada registro de las
tablas LDT y GDT consiste de 8 bytes con información detallada sobre un segmento
en particular incluyendo la ubicación base y longitud
del segmento.

Cada segmento es paginado, y cada página es de
4K. Una tabla de páginas puede entonces consistir de
hasta un millón de registros. Dado
que cada registro
consiste de 4 bytes, cada proceso puede llegar a necesitar
hasta 4 megabytes de espacio de direcciones física para
la tabla de páginas únicamente. Claro está
que no sería conveniente alojar la tabla de
páginas contigua en la memoria principal. La
solución que es implementada en el esquema para el 386,
es usar un esquema de paginación de dos niveles. La
dirección lineal es dividida en un número de
página consistente de 20 bits y un offset de
página de 12 bits. Siendo que se pagina a la tabla de
páginas, el número de páginas es a su vez
dividido en un apuntador para el directorio de páginas
de 10 bit y en un apuntador para la tabla de páginas de
10 bit. La transición de la dirección se puede
apreciar en más detalle en la figura 16.

Capitulo 5

Comunicación y sincronización de
procesos

Uno de los módulos más importantes de un
sistema operativo es la de administrar los procesos y tareas
del sistema de cómputo. En esta sección se
revisarán dos temas que componen o conciernen a este
módulo: la planificación del procesador y
los problemas de
concurrencia.

Planificación del procesador

La planificación del procesador se refiere a
la manera o técnicas
que se usan para decidir cuánto tiempo de
ejecución y cuando se le asignan a cada proceso del
sistema. Obviamente, si el sistema es monousuario y monotarea
nohay mucho que decidir, pero en el resto de los sistemas esto
es crucial para el buen funcionamiento del sistema.

Niveles de planificación

En los sistemas de planificación generalmente
se identifican tres niveles: el alto, em medio y el bajo. El
nivel alto decide que trabajos (conjunto de procesos) son
candidatos a convertirse en procesos compitiendo por los
recursos del
sistema; el nivel intermedio decide que procesos se suspenden o
reanudan para lograr ciertas metas de rendimiento mientras que
el planificador de bajo nivel es el que decide que proceso, de
los que ya están listos (y que en algún momento
paso por los otros dos planificadores) es al que le toca ahora
estar ejecutándose en la unidad central de
procesamiento. En este trabajo se revisaran principalmente los
planificadores de bajo nivel porque son los que finalmente
eligen al proceso en ejecución.

Objetivos de la planificación

Una estrategia de
planificación debe buscar que los procesos obtengan sus
turnos de ejecución apropiadamente, conjuntamente con un
buen rendimiento y minimización de la sobrecarga
(overhead) del planificador mismo. En general, se buscan cinco
objetivos
principales:

  • Justicia o Imparcialidad: Todos los procesos son
    tratados de
    la misma forma, y en algún momento obtienen su turno de
    ejecución o intervalos de tiempo de ejecución
    hasta su terminación exitosa.
  • Maximizar la Producción: El sistema debe de finalizar
    el mayor numero de procesos en por unidad de
    tiempo.
  • Maximizar el Tiempo de Respuesta: Cada usuario o
    proceso debe observar que el sistema les responde
    consistentemente a sus requerimientos.
  • Evitar el aplazamiento indefinido: Los procesos deben
    terminar en un plazo finito de tiempo.
  • El sistema debe ser predecible: Ante cargas de
    trabajo ligeras el sistema debe responder rápido y con
    cargas pesadas debe ir degradándose paulatinamente. Otro
    punto de vista de esto es que si se ejecuta el mismo proceso en
    cargas similares de todo el sistema, la respuesta en todos los
    casos debe ser similar.

Características a considerar de los
procesos

  • No todos los equipos de cómputo procesan el
    mismo tipo de trabajos, y un algoritmo de
    planificación que en un sistema funciona excelente puede
    dar un rendimiento pésimo en otro cuyos procesos tienen
    características diferentes. Estas
    características pueden ser:
  • Cantidad de Entrada/Salida: Existen procesos que
    realizan una gran cantidad de operaciones de
    entrada y salida (aplicaciones de bases de datos,
    por ejemplo).
  • Cantidad de Uso de CPU: Existen
    procesos que no realizan muchas operaciones de
    entrada y salida, sino que usan intensivamente la unidad
    central de procesamiento. Por ejemplo, operaciones con matrices.
  • Procesos de Lote o Interactivos: Un proceso de lote
    es más eficiente en cuanto a la lectura
    de datos, ya que generalmente lo hace de archivos,
    mientras que un programa
    interactivo espera mucho tiempo (no es lo mismo el tiempo de
    lectura de
    un archivo que la
    velocidad en
    que una persona teclea
    datos) por las respuestas de los usuarios.
  • Procesos en Tiempo Real: Si los procesos deben dar
    respuesta en tiempo real se requiere que tengan prioridad para
    los turnos de ejecución.
  • Longevidad de los Procesos: Existen procesos que
    típicamente requerirán varias horas para
    finalizar su labor, mientras que existen otros que solo
    necesitan algunos segundos.

Planificación apropiativa o no apropiativa
(preemptive or not preemptive)

La planificación apropiativa es aquella en la
cual, una vez que a un proceso le toca su turno de
ejecución ya no puede ser suspendido, ya no se le puede
arrebatar la unidad central de procesamiento. Este esquema
puede ser peligroso, ya que si el proceso contiene accidental o
deliberadamente ciclos infinitos, el resto de los procesos
pueden quedar aplazados indefinidamente. Una
planificación no apropiativa es aquella en que existe un
reloj que lanza interrupciones periodicas en las cuales el
planificador toma el control y se
decide si el mismo proceso seguirá ejecutándose o
se le da su turno a otro proceso. Este mismo reloj puede servir
para lanzar procesos manejados por el reloj del sistema. Por
ejemplo en los sistemas UNIX existen
los 'cronjobs' y 'atjobs', los cuales se programan en base a la
hora, minuto, día del mes, día de la semana y
día del año.

En una planificación no apropiativa, un trabajo
muy grande aplaza mucho a uno pequeño, y si entra un
proceso de alta prioridad esté también debe
esperar a que termine el proceso actual en
ejecución.

Asignación del turno de
ejecución

Los algoritmos
de la capa baja para asignar el turno de ejecución se
describen a continuación:

  • Por prioridad: Los procesos de mayor prioridad se
    ejecutan primero. Si existen varios procesos de mayor prioridad
    que otros, pero entre ellos con la misma prioridad, pueden
    ejecutarse estos de acuerdo a su orden de llegada o por 'round
    robin'. La ventaja de este algoritmo es
    que es flexible en cuanto a permitir que ciertos procesos se
    ejecuten primero e, incluso, por más tiempo. Su
    desventaja es que puede provocar aplazamiento indefinido en los
    procesos de baja prioridad. Por ejemplo, suponga que existen
    procesos de prioridad 20 y procesos de prioridad 10. Si durante
    todo el día terminan procesos de prioridad 20 al mismo
    ritmo que entran otros con esa prioridad, el efecto es que los
    de prioridad 10 estarán esperando por siempre.
    También provoca que el sistema sea impredecible para los
    procesos de baja prioridad.
  • El trabajo más corto primero: Es dificil de
    llevar a cabo porque se requiere saber o tener una
    estimación de cuánto tiempo necesita el proceso
    para terminar. Pero si se sabe, se ejecutan primero aquellos
    trabajos que necesitan menos tiempo y de esta manera se obtiene
    el mejor tiempo de respuesta promedio para todos los procesos.
    Por ejemplo, si llegan 5 procesos A,B,C,D y E cuyos tiempos de
    CPU son 26,
    18, 24, 12 y 4 unidades de tiempo, se observa que el orden de
    ejecución será E,D,B,C y A (4,12,18, 24 y 26
    unidades de tiempo respectivamente). En la tabla siguiente se
    muestra en que unidad de tiempo comienza a ejecutarse cada
    proceso y como todos comenzaron a esperar desde la unidad cero,
    se obtiene el tiempo promedio de espera.

Proceso Espera desde Termina Tiempo de
Espera

A 0 4 4

B 0 16 16

C 0 34 34

D 0 58 58

E 0 84 84

Tiempo promedio = (4 + 16 + 34 + 58 + 84 )/5 = 39
unidades.

  • El primero en llegar, primero en ejecutarse: Es muy
    simple, los procesos reciben su turno conforme llegan. La
    ventaja de este algoritmo es que es justo y no provoca
    aplazamiento indefinido. La desventaja es que no aprovecha
    ninguna característica de los procesos y puede no servir
    para unproceso de tiempo real. Por ejemplo, el tiempo promedio
    de respuesta puede ser muy malo comparado con el logrado por el
    del trabajo más corto primero. Retomando el mismo
    ejemplo que en el algoritmo anterior, obtenemos un tiempo de
    respuesta promedio (26+44+68+80+84)/5 = 60 unidades, el cual es
    muy superior a las 39 unidades que es el mejor tiempo
    posible.
  • Round Robin: También llamada por turno,
    consiste en darle a cada proceso un intervalo de tiempo de
    ejecución (llamado time slice), y cada vez que se vence
    ese intervalo se copia el contexto del proceso a un lugar
    seguro y se
    le da su turno a otro proceso. Los procesos están
    ordenados en una cola circular. Por ejemplo, si existen tres
    procesos, el A,B y C, dos repasadas del planificador
    darían sus turnos a los procesos en el orden
    A,B,C,A,B,C. La ventaja de este algoritmo es su simplicidad, es
    justo y no provoca aplazamiento indefinido.
  • El tiempo restante más corto: Es parecido al
    del trabajo más corto primero, pero aquií se
    está calculando en todo momento cuánto tiempo le
    resta para terminar a todos los procesos, incluyendo los
    nuevos, y aquel que le quede menos tiempo para finalizar es
    escogido para ejecutarse. La ventaja es que es muy útil
    para sistemas de tiempo compartido porque se acerca mucho al
    mejor tiempo de respuesta, además de responder
    dinámicamente a la longevidad de los procesos; su
    desventaja es que provoca más sobrecarga porque el
    algoritmo es más complejo.
  • La tasa de respuesta más alta: Este algoritmo
    concede el truno de ejecución al proceso que produzca el
    valor mayor
    de la siguiente formula:

tiempo que ha esperado + tiempo total para
terminar

valor =
___________________________________________

tiempo total para terminar.

Es decir, que dinámicamente el valor se va
modificando y mejora un poco las deficiciencias del algoritmo
del trabajo más corto primero.

  • Por política: Una forma
    de asignar el turno de ejecución es por politica, en la
    cual se establece algún reglamento específico que
    el planificador debe obedecer. Por ejemplo, una politica
    podría ser que todos los procesos reciban el mismo
    tiempo de uso de CPU en cualquier momento. Esto sig- nifica,
    por ejemplo, que si existen 2 procesos y han recibido 20
    unidades de tiempo cada uno (tiempo acumulado en time slices de
    5 unidades) y en este momento entra un tercer proceso, el
    planificador le dara inmediatamente el turno de
    ejecución por 20 unidades de tiempo. Una vez que todos
    los procesos están 'parejos' en uso de CPU, se les
    aplica 'round robin'.

Problemas de Concurrencia

En los sistemas de tiempo compartido (aquellos con
varios usuarios, procesos, tareas, trabajos que reparten el uso
de CPU entre estos) se presentan muchos problemas
debido a que los procesos compiten por los recursos del
sistema. Imagine que un proceso está escribiendo en la
unidad de cinta y se le termina su turno de ejecución e
inmediatamente después el proceso elegido para
ejecutarse comienza a escribir sobre la misma cinta. El
resultado es una cinta cuyo contenido es un desastre de datos
mezclados. Así como la cinta, existen una multitud de
recursos cuyo acceso debe der controlado para evitar los
problemas de la concurrencia.

El sistema operativo debe ofrecer mecanismos para
sincronizar la ejecución de procesos: semáforos,
envío de mensajes, 'pipes', etc. Los semáforos
son rutinas de software (que
en su nivel más interno se auxilian del hardware) para
lograr exclusión mutua en el uso de recursos. Para
entender este y otros mecanismos es importante entender los
problemas generales de concurrencia, los cuales se describen
enseguida.

  • Condiciones de Carrera o Competencia: La
    condición de carrera (race condition) ocurre cuando dos
    o más procesos accesan un recurso compartido sin
    control, de manera que el resultado combinado de este acceso
    depende del orden de llegada. Suponga, por ejemplo, que dos
    clientes de un
    banco realizan
    cada uno una operación en cajeros diferentes al mismo
    tiempo.
  • El usuario A quiere hacer un depósito. El B un
    retiro. El usuario A comienza la transacción y lee su
    saldo que es 1000. En ese momento pierde su turno de
    ejecución (y su saldo queda como 1000) y el usuario B
    inicia el retiro: lee el saldo que es 1000, retira 200 y
    almacena el nuevo saldo que es 800 y termina. El turno de
    ejecución regresa al usuario A el cual hace su
    depósito de 100, quedando saldo = saldo + 100 = 1000 +
    100 = 1100. Como se ve, el retiro se perdió y eso le
    encanta al usuario A y B, pero al banquero no le convino esta
    transacción. El error pudo ser al revés, quedando
    el saldo final en 800.
  • Postergación o Aplazamiento Indefinido(a):
    Esto se mencionó en el apartado anterior y consiste en
    el hecho de que uno o varios procesos nunca reciban el
    suficiente tiempo de ejecución para terminar su tarea.
    Por ejemplo, que un proceso ocupe un recurso y lo marque como
    'ocupado' y que termine sin marcarlo como 'desocupado'. Si
    algún otro proceso pide ese recurso, lo verá
    'ocupado' y esperará indefinidamente a que se
    'desocupe'.
  • Condición de Espera Circular: Esto ocurre
    cuando dos o más procesos forman una cadena de espera
    que los involucra a todos. Por ejemplo, suponga que el proceso
    A tiene asignado el recurso 'cinta' y el proceso B tiene
    asignado el recurso 'disco'. En ese momento al proceso A se le
    ocurre pedir el recurso 'disco' y al proceso B el recurso
    'cinta'. Ahi se forma una espera circular entre esos dos
    procesos que se puede evitar quitándole a la fuerza un
    recurso a cualquiera de los dos procesos.
  • Condición de No Apropiación: Esta
    condición no resulta precisamente de la concurrencia,
    pero juega un papel
    importante en este ambiente.
    Esta condición especifica que si un proceso tiene
    asignado un recurso, dicho recurso no puede
    arrebatársele por ningún motivo, y estará
    disponible hasta que el proceso lo 'suelte' por su
    voluntad.
  • Condición de Espera Ocupada: Esta
    condición consiste en que un proceso pide un recurso que
    ya está asignado a otro proceso y la condición de
    no apropiación se debe cumplir. Entonces el proceso
    estará gastando el resto de su time slice checando si el
    recurso fue liberado. Es decir, desperdicia su tiempo de
    ejecución en esperar. La solución más
    común a este problema consiste en que el sistema
    operativo se dé cuenta de esta situación y mande
    a una cola de espera al proceso, otorgándole
    inmediatamente el turno de ejecución a otro
    proceso.
  • Condición de Exclusión Mutua: Cuando un
    proceso usa un recurso del sistema realiza una serie de
    operaciones sobre el recurso y después lo deja de usar.
    A la sección de código que usa ese recurso se le llama
    'región crítica'. La condición de
    exclusión mutua establece que solamente se permite a un
    proceso estar dentro de la misma región crítica.
    Esto es, que en cualquier momento solamente un proceso puede
    usar un recurso a la vez. Para lograr la exclusión mutua
    se ideo también el concepto de
    'región crítica'. Para logar la exclusión
    mutua generalmente se usan algunas técnicas
    para lograr entrar a la región crítica:
    semáforos, monitores,
    el algoritmo de Dekker y Peterson, los 'candados'. Para ver una
    descripción de estos algoritmos
    consulte
  • Condición de Ocupar y Esperar un Recurso:
    Consiste en que un proceso pide un recurso y se le asigna.
    Antes de soltarlo, pide otro recurso que otro proceso ya tiene
    asignado.

Los problemas descritos son todos importantes para el
sistema operativo, ya que debe ser capaz de prevenir o
corregirlos. Tal vez el problema más serio que se puede
presentar en un ambiente de
concurrencia es el 'abrazo mortal', también llamado
'trabazón' y en inglés deadlock. El deadlock es una
condición que ningún sistema o conjunto de
procesos quisiera exhibir, ya que consiste en que se presentan
al mismo tiempo cuatro condiciones necesarias: La
condición de no apropiación, la condición
de espera circular, la condición de exclusión
mutua y la condición de ocupar y esperar un recurso.
Ante esto, si el deadlock involucra a todos los procesos del
sistema, el sistema ya no podrá hacer algo productivo.
Si el deadlock involucra algunos procesos, éstos
quedarán congelados para siempre.

En el área de la informática, el problema del deadlock ha
provocado y producido una serie de estudios y técnicas
muy útiles, ya que éste puede surgir en una sola
máquina o como consecuencia de compartir recursos en
una
red.

En el área de las bases de datos
y sistemas
distribuidos han surgido técnicas como el 'two phase
locking' y el 'two phase commit' que van más allá
de este trabajo. Sin embargo, el interés
principal sobre este problema se centra en generar
técnicas para detectar, prevenir o corregir el
deadlock.

Las técnicas para prevenir el deadlock
consisten en proveer mecanismos para evitar que se presente una
o varias de las cuatro condiciones necesarias del deadlock.
Algunas de ellas son:

  • Asignar recursos en orden lineal: Esto significa que
    todos los recursos están etiquetados con un valor
    diferente y los procesos solo pueden hacer peticiones de
    recursos 'hacia adelante'. Esto es, que si un proceso tiene el
    recurso con etiqueta '5' no puede pedir recursos cuya etiqueta
    sea menor que '5'. Con esto se evita la condición de
    ocupar y esperar un recurso.
  • Asignar todo o nada: Este mecanismo consiste en que
    el proceso pida todos los recursos que va a necesitar de una
    vez y el sistema se los da solamente si puede dárselos
    todos, si no, no le da nada y lo bloquea.
  • Algoritmo del banquero: Este algoritmo usa una tabla
    de recursos para saber cuántos recursos tiene de todo
    tipo. También requiere que los procesos informen del
    máximo de recursos que va a usar de cada tipo. Cuando un
    proceso pide un recurso, el algoritmo verifica si
    asignándole ese recurso todavía le quedan otros
    del mismo tipo para que alguno de los procesos en el sistema
    todavía se le pueda dar hasta su máximo. Si la
    respuesta es afirmativa, el sistema se dice que está en
    'estado
    seguro' y se
    otorga el recurso. Si la respuesta es negativa, se dice que el
    sistema está en estado
    inseguro y se hace esperar a ese proceso.

Para detectar un deadlock, se puede usar el mismo
algoritmo del banquero, que aunque no dice que hay un deadlock,
sí dice cuándo se está en estado inseguro
que es la antesala del deadlock. Sin embargo, para detectar el
deadlock se pueden usar las 'gráficas de recursos'. En ellas se pueden
usar cuadrados para indicar procesos y círculos para los
recursos, y flechas para indicar si un recurso ya está
asignado a un proceso o si un proceso está esperando un
recurso. El deadlock es detectado cuando se puede hacer un
viaje de ida y vuelta desde un proceso o recurso. Por ejemplo,
suponga los siguientes eventos:

evento 1: Proceso A pide recurso 1 y se le
asigna.

evento 2: Proceso A termina su time slice.

evento 3: Proceso B pide recurso 2 y se le
asigna.

evento 4: Proceso B termina su time slice.

evento 5: Proceso C pide recurso 3 y se le
asigna.

evento 6: Proceso C pide recurso 1 y como lo
está ocupando el proceso A, espera.

evento 7: Proceso B pide recurso 3 y se bloquea porque
lo ocupa el proceso C.

evento 8: Proceso A pide recurso 2 y se bloquea porque
lo ocupa el proceso B.

En la figura 5.1 se observa como el 'resource graph'
fue evolucionando hasta que se presentó el deadlock, el
cual significa que se puede viajar por las flechas desde un
proceso o recurso hasta regresar al punto de partida. En el
deadlock están involucrados los procesos A,B y
C.

Una vez que un deadlock se detecta, es obvio que el
sistema está en problemas y lo único que resta
por hacer es una de dos cosas: tener algún mecanismo de
suspensión o reanudación [Deitel93] que permita
copiar todo el contexto de un proceso incluyendo valores de
memoria y aspecto de los periféricos que esté usando para
reanudarlo otro día, o simplemente eliminar un proceso o
arrebatarle el recurso, causando para ese proceso la
pérdida de datos y tiempo.

Capitulo 6

Interbloqueos

6.1. Los interbloqueos: Una historia basada en hechos
reales.

El problema de los interbloqueos no se circunscribe
únicamente al mundo de la informática, sino que aparece en muchos
otros ámbitos incluyendo el de la vida cotidiana. De
hecho, algunos de los ejemplos utilizados por los
investigadores en este tema están inspirados en
situaciones cotidianas.

El interbloqueo surge debido a que se produce un
conflicto
entre las necesidades de los dos vehículos: el recurso
que necesita cada vehículo lo posee el otro. Hay que
resaltar que otros vehículos que intentarán
cruzar el puente en ese momento en cualquiera de los dos
sentidos se quedarían detenidos detrás de ellos
viéndose, por tanto, implicados también en el
interbloqueo.

Las posibles estrategias
para tratar el problema de los interbloqueos son:

  • Detección y
    recuperación.

Una vez detectada la situación de interbloqueo
uno de los vehículos debe liberar el recurso que posee
para dejar que el otro lo utilice. Una posible
recuperación de esta situación consistiría
en seleccionar uno de los sentidos de
circulación y hacer que el vehículo o
vehículos detenidos en ese sentido dieran marcha
atrás hasta el principio del puente, liberando
así el paso en el otro sentido (se está
suponiendo que un vehículo tiene capacidad para avanzar
marcha atrás, sino fuera así, habría que
tomar una acción más drástica como tirarlo
al río que pasa por debajo del puente). Debería
existir una política para
determinar qué vehículo debe
retroceder.

  • Prevención o
    predicción.

Un punto importante a resaltar en este ejemplo y, en
general, sobre los interbloqueos es que, antes de producirse el
interbloqueo propiamente dicho (los vehículos detenidos
frente a frente), existe un <<punto de retorno>> a
partir del cual el interbloqueo es inevitable.

Capitulo 7

Entrada/Salida

El código
destinado a manejar la entrada y salida de los diferentes
periféricos en un sistema operativo es de
una extensión considerable y sumamente complejo. Resuelve
las necesidades de sincronizar, atrapar interrupciones y ofrecer
llamadas al sistema para los programadores. En esta
sección se repasarán los principios
más importantes a tomar en cuenta en este módulo
del sistema operativo.

Dispositivos de
Entrada – Salida

Los dispositivos de
entrada salida se dividen, en general, en dos tipos:
dispositivos orientados a bloques y dispositivos orientados a
caracteres. Los dispositivos orientados a bloques tienen la
propiedad de
que se pueden direccionar, esto es, el programador puede escribir
o leer cualquier bloque del dispositivo realizando primero una
operación de posicionamiento
sobre el dispositivo. Los dispositivos más comunes
orientados a bloques son los discos duros,
la memoria, discos compactos y, posiblemente, unidades de cinta.
Por otro lado, los dispositivos orientados a caracteres son
aquellos que trabajan con secuencias de byes sin importar su
longitud ni ningúna agrupación en especial. No son
dispositivos direccionables. Ejemplos de estos dispositivos son
el teclado, la
pantalla o display y las impresoras.

La clasificación anterior no es perfecta, porque
existen varios dispositivos que generan entrada o salida que no
pueden englobarse en esas categorías. Por ejemplo, un
reloj que genera pulsos. Sin embargo, aunque existan algunos
periféricos que no se puedan categorizar, todos
están administrados por el sistema operativo por medio de
una parte electrónica – mecánica y una parte de software.
[Tan92].

Controladores de
Dispositivos (Terminales y Discos
Duros)

Los controladores de dispositivos (también
llamados adaptadores de dispositivos) son la parte electrónica de los periféricos, el
cual puede tener la forma de una tarjeta o un circuito impreso
integrado a la tarjeta maestra de la
computadora. Por ejemplo, existen controladores de discos que
se venden por separado y que se insertan en una ranura de la
computadora, o
existen fabricantes de computadoras
que integran esa funcionalidad en la misma tarjeta en que viene
la unidad central de procesamiento (tarjeta maestra).

Los controladores de dispositivos generalmente trabajan
con voltajes de 5 y 12 volts con el dispositivo propiamente, y
con la computadora
a través de interrupciones. Estas interrupciones viajan
por el 'bus' de la computadora y
son recibidos por el CPU el cual a su vez pondrá en
ejecución algún programa que sabrá
qué hacer con esa señal. A ese programa se le llama
'manejador de disposito' (device driver). Algunas veces el mismo
controlador contiene un pequeño programa en una memoria de
solo lectura o en
memoria de acceso aleatoria no volátil y re-escribible que
interactúa con el correspondiente manejador en la
computadora. En la figura 6.1 se muestra un esquema simple de
dispositivos orientados a bloques y otros a
caracteres.

 Para ver el gráfico
seleccione la opción "Descargar" del menú
superior

Por ejemplo, la terminal (CRT) tiene un 'chip' que se
encarga de enviar cadenas de bits por medio de un cable serial
que a su vez son recibidos por un controlador de puerto serial en
la computadora. Este 'chip' también se encarga de leer
secuencias de bits que agrupa para su despiegue en la pantalla o
para ejecutar algunas funciones de
control. Lo importante en todos estos dispositivos es que se debe
ejercer un mecanismo para sincronizar el envío y llegada
de datos de manera concurrente.

Para intercambiar datos o señales entre la
computadora y los controladores, muchas veces se usan registros o
secciones predefinidas de la memoria de la computadora. A este
esquema se le llama 'manejo de entrada – salida mapeado por
memoria' (memory mapped I/O). Por ejmplo, para una IBM PC se
muestran los vectores de
interrupción y las direcciones para la entrada -salida en
la tabla 6.1.

Controlador Dirección(Hex) Vector de
Interrupción

Reloj 040 – 043 8

Teclado 060 – 063 9

Disco Duro 320 – 32F 13

Impresora 378 – 37F 15

Monitor Mono 380 – 3BF –

Monitor Color 3D0 –
3DF –

Disco Flexible 3F0 – 3F7 14

Tabla 6.1 Direcciones de Mapeo de Entrada – Salida

Acceso Directo a Memoria (DMA)

El acceso directo a memoria se inventó con el
propósito de liberar al CPU de la carga de atender a
algunos controladores de dispositivos. Para comprender su
funcionamiento vale la pena revisar cómo trabaja un
controlador sin DMA. Cuando un proceso requiere algunos bloques
de un dispositivo, se envia una señal al controlador con
la dirección del bloque deseado. El controlador lo recibe
a través del 'bus' y el proceso puede
estar esperando la respuesta (trabajo síncrono) o puede
estar haciendo otra cosa (trabajo asíncrono). El
controlador recibe la señal y lee la dirección del
bus. Envía a su vez una o varias señales al
dispositivo mecánico (si es que lo hay) y espera los
datos. Cuando los recibe los escribe en un buffer local y
envía una señal al CPU indicándole que los
datos están listos. El CPU recibe esta interrupción
y comienza a leer byte por byte o palabra por palabra los datos
del buffer del controlador (a través del device driver)
hasta terminar la operación.

Como se ve, el CPU gasta varios ciclos en leer los datos
deseados. El DMA soluciona ese problema de la manera siguiente.
Cuando un proceso requiere uno o varios bloques de datos, el CPU
envía al controlador la petición junto con el
número de bytes deseados y la dirección de en
dónde quiere que se almacenen de regreso. El DMA
actuará como un 'cpu secundario' [Stal92] en cuanto a que
tiene el poder de tomar
el control del 'bus' e indicarle al verdadero CPU que espere.
Cuando el controlador tiene listos los datos, el DMA 'escucha' si
el 'bus' está libre aprovechando esos ciclos para ir
leyendo los datos del buffer del controlador e ir
escribiéndolos en el área de memoria que el CPU le
indicó. Cuando todos los datos fueron escritos, se le
envía una interrupción al CPU para que use los
datos. El ahorro con el
DMA es que el CPU ya no es interrumpido (aunque sí puede
ser retardado por el DMA) salvando así el 'cambio de
contexto' y además el DMA aprovechará aquellos
ciclos en que el 'bus' no fue usado por el CPU.

El hecho de que los controladores necesiten buffers
internos se debe a que conforme ellos reciban datos de los
dispositivos que controlan, los deben poder almacenar
temporalmente, ya que el CPU no está listo en todo momento
para leerlos.

Principios en el
Software de Entrada – Salida

Los principios de
software en la entrada – salida se resumen en cuatro puntos: el
software debe ofrecer manejadores de interrupciones, manejadores
de dispositivos, software que sea independiente de los
dispositivos y software para usuarios.

Manejadores de
interrupciones

El primer objetivo
referente a los manejadores de interrupciones consiste en que el
programador o el usuario no debe darse cuenta de los manejos de
bajo nivel para los casos en que el dispositivo está
ocupado y se debe suspender el proceso o sincronizar algunas
tareas. Desde el punto de vista del proceso o usuario, el sistema
simplemente se tardó más o menos en responder a su
petición.

Manejadores de
disposisitivos

El sistema debe proveer los manejadores de dispositivos
necesarios para los periféricos, así como ocultar
las peculiaridades del manejo interno de cada uno de ellos, tales
como el formato de la información, los medios
mecánicos, los niveles de voltaje y otros. Por ejemplo, si
el sistema tiene varios tipos diferentes de discos duros, para el
usuario o programador las diferencias técnicas entre ellos
no le deben importar, y los manejadores le deben ofrecer el mismo
conjunto de rutinas para leer y escribir datos.

Software
independiente del dispositivo

Este es un nivel superior de independencia
que el ofrecido por los manejadores de dispositivos. Aquí
el sistema operativo debe ser capaz, en lo más posible, de
ofrecer un conjunto de utilerías para accesar
periféricos o programarlos de una manera consistente. Por
ejemplo, que para todos los dispositivos orientados a bloques se
tenga una llamada para decidir si se desea usar 'buffers' o no, o
para posicionarse en ellos.

Software para
usuarios

La mayoría de las rutinas de entrada – salida
trabajan en modo privilegiado, o son llamadas al sistema que se
ligan a los programas del usuario formando parte de sus
aplicaciones y que no le dejan ninguna flexibilidad al usuario en
cuanto a la apariencia de los datos. Existen otras
librerías en donde el usuario si tiene poder de
decisión (por ejemplo la llamada a "printf" en el lenguaje
"C"). Otra facilidad ofrecida son las áreas de trabajos
encolados (spooling areas), tales como las de impresión y
correo
electrónico.

Relojes

Los relojes son esenciales para el buen funcionamiento
de cualquier sistema porque juegan un papel decisivo
en la sincronización de procesos, en la
calendarización de trabajos por lote y para la
asignación de turnos de ejecución entre otras
tareas relevantes. Generalmente se cuenta con dos relojes en el
sistema: uno que lleva la hora y fecha del sistema y que oscila
entre 50 y 60 veces por segundo y el reloj que oscila entre 5 y
100 millones de veces por segundo y que se encarga de enviar
interrupciones al CPU de manera periódica. El reloj de
mayor frecuencia sirve para controlar el tiempo de
ejecución de los procesos, para despertar los procesos que
están 'durmiendo' y para lanzar o iniciar procesos que
fueron calendarizados.

Para mantener la hora y fecha del sistema generalmente
se usa un registro alimentado por una pila de alta
duración que almacena estos datos y que se programan de
fábrica por primera vez. Así, aunque se suspenda la
energía la fecha permanece. Para lanzar procesos (chequeo
de tiempo ocioso de un dispositivo, terminación del time
slice de un proceso, etc), se almacena un valor en un registro
(valor QUANTUM) el cual se decrementa con cada ciclo del reloj, y
cuando llega a cero se dispara un proceso que ejecutará
las operaciones necesarias (escoger un nuevo proceso en
ejecución, verificar el funcionamiento del motor del disco
flexible, hacer eco de un caracter del teclado,
etc).

Capitulo 8

Gestión de Archivos y
Directorios

Un sistema de archivos ( file system ) es una estructura de
directorios con algún tipo de organización el cual nos permite almacenar,
crear y borrar archivos en diferentes formatos. En esta
sección se revisarán conceptos importantes
relacionados a los sistemas de archivos.

Almacenamiento
Físico de Datos

En un sistema de cómputo es evidente que existe
la necesidad por parte de los usuarios y aplicaciones de
almacenar datos en algún medio, a veces por periodos
largos y a veces por instantes. cada aplicación y cada
usuario debe tener ciertos derechos con sus datos, como
son el poder crearlos y borrarlos, o cambialos de lugar;
así como tener privacidad contra otros usuarios o
aplicaciones. El subsistema de archivos del sistema operativo se
debe encargar de estos detalles, además de establecer el
formato físico en el cual almacenará los datos en
discos duros, cintas o discos flexibles. Debe ser conocido por
todos que tradicionalmente la información en los sistemas
modernos se almacena en discos duros, flexibles y unidades de
disco óptico, y en todos ellos se comparten algunos
esquemas básicos para darles formato físico: las
superficies de almacenamiento
son divididas en círculos concéntricos llamados
"pistas" y cada pista se divide en "sectores". A la unión
lógica
de varias pistas a través de varias superficies
"paralelas" de almacenamiento se
les llama "cilindros", los cuales son inspeccionados al momento
de lectura o escritura de
datos por las respectivas unidades fisicas llamadas "cabezas".
Las superficies de almacenamiento reciben el nombre de "platos" y
generalmente están en movimiento
rotatorio para que las cabezas accesen a las pistas que los
componen. Los datos se escriben a través de los sectores
en las pistas y cilindros modificando las superficies por medio
de las cabezas.

El tiempo que una cabeza se tarda en ir de una pista a
otra se le llama "tiempo de búsqueda" y dependerá
de la distancia entre la posición actual y la distancia a
la pista buscada. El tiempo que tarda una cabeza en ir del sector
actual al sector deseado se le llama tiempo de latencia y depende
de la distancia entre sectores y la velocidad de
rotación del disco. El impacto que tiene las lecturas y
escrituras sobre el sistema está determinado por la
tecnología
usada en los platos y cabezas y por la forma de resolver las
peticiones de lectura y escritura, es
decir, los algoritmos de planificación.

Algoritmos de planificación de
peticiones

Los algoritmos de planificación de peticiones de
lectura y escritura a discos se encargan de registrar dichas
peticiones y de responderlas en un tiempo razonable. Los
algoritmos más comunes para esta tarea son:

  • Primero en llegar, primero en ser servido ( FIFO ):
    Las peticiones son encoladas de acuerdo al orden en que
    llegaron y de esa misma forma se van leyendo o escribiendo las
    mismas. La ventaja de este algoritmo es su simplicidad y no
    causa sobrecarga, su desventaja principal es que no aprovecha
    para nada ninguna característica de las peticiones, de
    manera que es muy factible que el brazo del disco se mueva muy
    ineficientemente, ya que las peticiones pueden tener
    direcciones en el disco unas muy alejadas de otras. Por
    ejemplo, si se están haciendo peticiones a los sectores
    6,10,8,21 y 4, las mismas serán resueltas en el mismo
    orden. _ Primero el más cercano a la posición
    actual: En este algoritmo las peticiones se ordenan de acuerdo
    a la posición actual de la cabeza lectora, sirviendo
    primero a aquellas peticiones más cercanas y reduciendo,
    así, el movimiento
    del brazo, lo cual constituye la ventaja principal de este
    algoritmo. Su desventaja consiste en que puede haber
    solicitudes que se queden esperando para siempre, en el
    infortunado caso de que existan peticiones muy alejadas y en
    todo momento estén entrando peticiones que estén
    más cercanas. Para las peticiones 6,10,8,21 y 4, las
    mismas serán resueltas en el orden 4,6,8,10 y
    21.
  • Por exploración ( algoritmo del elevador ): En
    este algoritmo el brazo se estará moviendo en todo
    momento desde el perímetro del disco hacia su centro y
    viceversa, resolviendo las peticiones que existan en la
    dirección que tenga en turno. En este caso las
    peticiones 6,10,8,21 y 4 serán resueltas en el orden
    6,10,21,8 y 4; es decir, la posición actual es 6 y como
    va hacia los sectores de mayor numeración (hacia el
    centro, por ejemplo), en el camino sigue el sector 10, luego el
    21 y ese fue el más central, así que ahora el
    brazo resolverá las peticiones en su camino hacia afuera
    y la primera que se encuentra es la del sector 8 y luego la 4.
    La ventaja de este algoritmo es que el brazo se moverá
    mucho menos que en FIFO y evita la espera indefinida; su
    desventaja es que no es justo, ya que no sirve las peticiones
    en el orden en que llegaron, además de que las
    peticiones en los extremos interior y exterior tendrán
    un tiempo de respuesta un poco mayor.
  • Por exploración circular: Es una
    variación del algoritmo anterior, con la única
    diferencia que al llegar a la parte central, el brazo regresa
    al exterior sin resolver ninguna petición, lo cual
    proveerá un tiempo de respuesta más cercana al
    promedio para todas las peticiones, sin importar si
    están cercas del centro o del exterior.

Asignación del espacio de
almacenamiento

El subsistema de archivos se debe encargar de localizar
espacio libre en los medios de
almacenamiento para guardar archivos y para después
borrarlos, renombrarlos o agrandarlos. Para ello se vale de
localidades especiales que contienen la lista de archivos creados
y por cada archivo una serie
de direcciones que contienen los datos de los mismos. Esas
localidades especiales se llaman directorios. Para asignarle
espacio a los archivos existen tres criterios generales que se
describen enseguida.

  • Asignación contigua: Cada directorio contiene
    la los nombres de archivos y la dirección del bloque
    inicial de cada archivo, así como el tamaño total
    de los mismos. Por ejemplo, si un archivo comienza en el sector
    17 y mide 10 bloques, cuando el archivo sea accesado, el brazo
    se moverá inicialmente al bloque 17 y de ahí
    hasta el 27. Si el archivo es borrado y luego creado otro
    más pequeño, quedarán huecos
    inútiles entre archivos útiles, lo cual se llama
    fragmentación externa.
  • Asignación encadenada: Con este criterio los
    directorios contienen los nombres de archivos y por cada uno de
    ellos la dirección del bloque inicial que compone al
    archivo. Cuando un archivo es leído, el brazo va a esa
    dirección inicial y encuentra los datos iniciales junto
    con la dirección del siguiente bloque y así
    sucesivamente. Con este criterio no es necesario que los
    bloques estén contiguos y no existe la
    fragmentación externa, pero en cada "eslabón" de
    la cadena se desperdicia espacio con las direcciones mismas. En
    otras palabras, lo que se crea en el disco es una lista
    ligada.
  • Asignación con índices ( indexada ): En
    este esquema se guarda en el directorio un bloque de
    índices para cada archivo, con apuntadores hacia todos
    sus bloques constituyentes, de mabnera que el acceso directo se
    agiliza notablemente, a cambio de
    sacrificar varios bloques para almacenar dichos apuntadores.
    Cuando se quiere leer un archivo o cualquiera de sus partes, se
    hacen dos accesos: uno al bloque de índices y otro a la
    dirección deseada. Este es un esquema excelente para
    archivos grandes pero no para pequeños, porque la
    relación entre bloques destinados para índices
    respecto a los asignados para datos es
    incosteable..

Métodos de acceso en los sistemas de
archivos

Los métodos de
acceso se refiere a las capacidades que el subsistema de archivos
provee para accesar datos dentro de los directorios y medios de
almacenamiento en general. Se ubican tres formas generales:
acceso secuencial, acceso directo y acceso directo
indexado.

  • Acceso secuencial: Es el método
    más lento y consiste en recorrer los componentes de un
    archivo uno en uno hasta llegar al registro deseado. Se
    necesita que el orden lógico de los registros sea igual
    al orden físico en el medio de almacenamiento. Este tipo
    de acceso se usa comunmente en cintas y cartuchos.
  • Acceso directo: Permite accesar cualquier sector o
    registro inmediatamente, por medio de llamadas al sistema como
    la de seek. Este tipo de acceso es rápido y se usa
    comúnmente en discos duros y discos o archivos manejados
    en memoria de acceso aleatorio. _ Acceso directo indexado: Este
    tipo de acceso es útil para grandes volúmenes de
    información o datos. Consiste en que cada arcivo tiene
    una tabla de apuntadores, donde cada apuntador va a la
    dirección de un bloque de índices, lo cual
    permite que el archivo se expanda a través de un espacio
    enorme. Consume una cantidad importante de recursos en las
    tablas de índices pero es muy rápido.

Operaciones soportadas por el subsistema de
archivos

Independientemente de los algoritmos de
asignación de espacio, de los métodos de
acceso y de la forma de resolver las peticiones de lectura y
escritura, el subsistema de archivos debe proveer un conjunto de
llamadas al sistema para operar con los datos y de proveer
mecanismos de protección y seguridad. Las
operaciones básicas que la mayoría de los sistemas
de archivos soportan son:

  • Crear ( create ) : Permite crear un archivo sin
    datos, con el propósito de indicar que ese nombre ya
    está usado y se deben crear las estructuras
    básicas para soportarlo.
  • Borrar ( delete ): Eliminar el archivo y liberar los
    bloques para su uso posterior.
  • Abrir ( open ): Antes de usar un archivo se debe
    abrir para que el sistema conozca sus atributos, tales como el
    dueño, la fecha de modificación, etc. _ Cerrar (
    close ): Después de realizar todas las operaciones
    deseadas, el archivo debe cerrarse para asegurar su integridad
    y para liberar recursos de su control en la
    memoria.
  • Leer o Escribir ( read, write ): Añadir
    información al archivo o leer el caracter o una cadena
    de caracteres a partir de la posición actual. _
    Concatenar ( append ): Es una forma restringida de la llamada
    `write', en la cual sólo se permite añadir
    información al final del archivo. _ Localizar ( seek ):
    Para los archivos de acceso directo se permite posicionar el
    apuntador de lectura o escritura en un registro aleatorio, a
    veces a partir del inicio o final del archivo.
  • Leer atributos: Permite obtener una estructura
    con todos los atributos del archivo especificado, tales como
    permisos de escritura, de borrado, ejecución,
    etc.
  • Poner atributos: Permite cambiar los atributos de un
    archivo, por ejemplo en UNIX, donde
    todos los dispositivos se manejan como si fueran archivos, es
    posible cambiar el comportamiento de una terminal con una de estas
    llamadas.
  • Renombrar ( rename ): Permite cambiarle el nombre e
    incluso a veces la posición en la
    organización de directorios del archivo
    especificado. Los subsistemas de archivos también
    proveen un conjunto de llamadas para operar sobre directorios,
    las más comunies son crear, borrar, abrir, cerrar,
    renombrar y leer. Sus funcionalidades son obvias, pero existen
    también otras dos operaciones no tan comunes que son la
    de `crear una liga' y la de `destruir la liga'. La
    operación de crear una liga sirve para que desde
    diferentes puntos de la
    organización de directorios se pueda accesar un
    mismo directorio sin necesidad de copiarlo o duplicarlo. La
    llamada a `destruir nla liga' lo que hace es eliminar esas
    referencias, siendo su efecto la de eliminar las ligas y no el
    directorio real. El directorio real es eliminado hasta que la
    llmada a `destruir liga' se realiza sobre
    él.

Algunas facilidades extras de los sistemas de
archivos

Algunos sistemas de archivos proveen herramientas
al administrador del
sistema para facilitarle la vida. Las más notables es la
facilidad de compartir archivos y los sistemas de
`cotas'.

La facilidad de compartir archivos se refiere a la
posibilidad de que los permisos de los archivos o directorios
dejen que un grupo de
usuarios puedan accesarlos para diferentes operaciones" leer,
escribir, borrar, crear, etc. El dueño verdadero es quien
decide qué permisos se aplicarán al grupo e,
incluso, a otros usuarios que no formen parte de su grupo. La
facilidad de `cotas' se refiere a que el sistema de archivos es
capaz de llevar un control para que cada usuario pueda usar un
máximo de espacio en disco duro.
Cuando el usuario excede ese límite, el sistema le
envía un mensaje y le niega el permiso de seguir
escribiendo, obligándolo a borrar algunos archivos si es
que quiere almacenar otros o que crezcan. La versión de
UNIX SunOS contiene esa facilidad.

Sistemas de Archivos
Aislados

Los sistemas de archivos aislados son aquellos que
residen en una sola computadora y no existe la posibilidad de
que, aún estando en una red, otros sistemas puedan
usar sus directorios y archivos. Por ejemplo, los archivos en
discos duros en el sistema MS-DOS
clásico se puede ver en esta categoría.

Sistemas de Archivos
Compartidos o de Red

Estos sistemas de archivos es factible accesarlos y
usarlos desde otros nodos en una red. Generalmente existe
un `servidor' que es
la computadora en donde reside el sistema de archivos
físicamente, y por otro lado están los `clientes', que se
valen del servidor para ver
sus archivos y directorios de manera como si estuvieran
localmente en el cliente. Algunos
autores les llaman a estos sistemas de archivos `sistemas de
archivos distribuídos' lo cual no se va a discutir en este
trabajo.

Los sistemas de archivos compartidos en red más populares son
los provistos por Netware, el Remote Filke Sharing ( RFS en UNIX
), Network File System ( NFS de Sun Microsystems ) y el Andrew
File System ( AFS ). En general, lo que proveen los servidores es un
medio de que los clientes, localmente, realicen peticiones de
operaciones sobre archivos los cuales con `atrapadas' por un
`driver' o un `módulo' en el núcleo del sistema
operativo, el cual se comunica con el servidor a través de
la red y la operación se ejecuta en el servidor. Existen
servidores de
tipo "stateless y no-stateless". Un servidor "stateless" no
registra el estado de
las operaciones sobre los archivos, de manera que el cliente se
encarga de todo ese trabajo. La ventaja de este esquema es que si
el servidor falla, el cliente no perderá
información ya que ésta se guarda en memoria
localmente, de manera que cuando el servidor reanude su servicio el
cliente proseguirá como si nada hubiese sucedido. Con un
servidor "no-stateless", esto no es posible.

La protección sobre las operaciones se lleva a
cabo tanto el los clientes como en el servidor: si el usuario
quiere ejecutar una operación indebida sobre un archivo,
recibirá un mensaje de error y posiblemente se
envíe un registro al subsistema de `seguridad' para
informar al administrador del
sistema de dicho intento de violación.

En la práctica, el conjunto de permisos que cada
usuario tiene sobre el total de archivos se almacena en estructuras
llamadas `listas de acceso' ( access lists
).

Tendencias
actuales

Con el gran auge de las redes de comunicaciones
y su incremento en el ancho de banda, la proliferación de
paquetes que ofrecen la compartición de archivos es
común. Los esquemas más solicitados en la industria es
el poder accesar los grandes volúmenes de
información que residen en grandes servidores desde las
computadoras
personales y desde otros servidores también. Es una
realidad que la solución más socorrida en las
empresas
pequeñas es usar Novell Netware
en un servidor 486 o superior y accesar los archivos desde
máquinas similares.

A veces se requieren soluciones
más complejas con ambientes
heterogéneos:

diferentes sistemas
operativos y diferentes arquitecturas. Uno de los sistemas de
archivos más expandidos en estaciones de trabajo es el
NFS, y prácticamente todas las versiones de UNIX traen
instalado un cliente y hasta un servidor de este servicio. Es
posible así que una gran cantidad de computadoras
personales (de 10 a 80 ) accesen grandes volúmenes de
información o paquetería (desde 1 a 8 Gygabytes )
desde una sola estación de trabajo, e incluso tener la
flexibilidad de usar al mismo tiempo servidores de Novell y NFS.
Soluciones
similares se dan con algunos otros paquetes comerciales, pero
basta ya de `goles'. Lo importante aquí es observar que el
mundo se va moviendo poco a poco hacia soluciones
distribuídas, y hacia la estandarización que,
muchas veces, es `de facto'.

Capitulo 11.

Estudio de casos: linux.

11.1 historia de linux.

El origen de LINUX esta en MINIX que es un Sistema
Operativo de carácter
pedagógico basado en un microkernel. Fue desarrollado
por Andrew S. Tanenbaum. Con el objetivo
principal de que sirviera de apoyo para la enseñanza de sistemas
operativos.

Andrew, intentaba demostrar al crear MINIX que se
podía construir un sistema operativo mas sencillo y
fiable pero a la vez muy eficiente.

MINIX presentaba las siguientes
características:

  • Ofrecía una interfaz basada en la de UNIX
    versión 7.
  • Tenía un tamaño relativamente
    pequeño, constaba aproximadamente de 12,000
    líneas de código.
  • Podía trabajar en equipos que disponían
    de unos recursos hardware muy
    limitados, de hecho, incluso podía utilizarse en
    maquinas que no disponían de disco
    duro.
  • MINIX presenta algunas deficiencias y
    limitaciones.
  • La gestión de memoria era muy primitiva, no
    había ni memoria
    virtual ni intercambio.
  • Por simplicidad, algunas partes del sistema
    operativo, como por ejemplo el sistema de archivos, no eran
    concurrentes, lo que limitaba considerablemente en rendimiento
    del sistema.

En 1990 un estudiante Finlandés llamado LINUS
TORVALDS, con ganas de ampliar sus conocimientos envío
un mensaje a un grupo de noticias comp.os.minix, comentando que
estaba desarrollando un nuevo sistema operativo tomando como
base MINIX. Se estaba produciendo el humilde nacimiento de
LINUX, cuya primera versión(numerada como 0.01) vio la
luz a mediados
del año de 1991.

LINUX tomaba prestadas numerosas
características de MINIX por ejemplo el sistema de
archivos. De hecho LINUX se desarrollo
usando como plataforma de trabajo MINIX y las primeras
versiones de LINUX no eran autónomas sino que
tenían que arrancarse desde MINIX.

MINIX y LINUX son radicalmente diferentes. Por un lado
LINUX solventa muchas de las deficiencias de MINIX como la
carencia de memoria
virtual. Estas mejoras permiten que se trate de un sistema
adecuado para trabajar de memoria profesional, no
limitándose su uso a un entorno académico , pero
la diferencia la diferencia mas importante entre ellos esta en
su organización interna. Mientras que MINIX
tiene una estructura moderna basada en un Microkernel, LINUX
posee una estructura monolítica mas clásica.
Desde su lanzamiento publico en 1991, LINUX ha ido
evolucionando e incorporando nuevas características.
Además se transportado a otros procesadores
como SPARC, ALPHA Y MIPS. En la actualidad es un sistema con
unas características y prestaciones
comparables a las de cualquier sistema operativo
comercial.

11.2 Características y estructura de
LINUX.-

LINUX es un sistema de tipo UNIX y, por tanto, posee
las características típicas de los sistemas UNIX,
LINUX se trata de un sistema multiusuarios y multitarea de
propósito general.

Características especificas de
LINUX.

  • Proporciona una interfaz POSIX.
  • Tiene un código independiente del procesador
    en la medida de lo posible.
  • Puede adaptarse en maquinas de muy diversas
    características.
  • Permite incluir de forma dinámica nuevas funcionalidades al
    núcleo del sistema operativo gracias al mecanismo de los
    módulos.
  • Proporciona soportes para una gran variedad de tipos
    de sistemas de archivos, entre ellos los utilizados en Windows.
    También es capaz de manejar distintos formatos de
    archivos ejecutables.
  • Proporciona soportes para los multiprocesadores
    utilizando un esquema de multiprocesos simétrico. Para
    aprovechar al máximo el paralelismo del hardware, se ha
    ido modificando progresivamente el núcleo con el
    objetivo de aumentar su concurrencia interna.

En cuanto a la estructura de LINUX, como se
comentó previamente, tiene una organización
monolítica al igual que ocurre con la mayoría de
las implementaciones de UNÍS. A pesar de este carácter
monolítico, el núcleo no es algo estático
y cerrado sino que se pueden añadir y quitar
módulos de código en tiempo de ejecución.
Se trata de un mecanismo similar al de las bibliotecas
dinámicas pero aplicado al propio sistema operativo. Se
pueden añadir módulos que correspondan con nuevos
tipos de sistemas de archivos, nuevos manejadores de
dispositivos o gestores de nuevos formatos de
ejecutables.

Un sistema LINUX completo no sólo está
formado por el núcleo monolítico sino
también incluye programas del sistema (como, por
ejemplo, demonios) y bibliotecas del sistema.

Debido a las dificultades que hay para instalar y
configurar el sistema, existen diversas distribuciones de LINUX
que incluyen el núcleo, los programas y bibliotecas del
sistema, así como un conjunto de herramientas
de instalación y configuración que facilitan
considerablemente esta ardua labor. Hay distribuciones tanto de
carácter comercial como gratuitas. Algunas de las
distribuciones más populares son Slackware, Debian, suse
y Red Hat.

11.3 gestión de procesos.

La gestión de procesos en LINUX es
básicamente igual en cualquier otra variedad de
UNÍS. Un aspecto original de LINUX es el servicio clone
que es una extensión del clásico fork.

Este nuevo servicio permite crear un proceso que
comparta con el padre su mapa de memoria, sus rutinas de manejo
de señales y sus descriptores de archivos. Aunque LINUX
no implementa threads en el núcleo, se pueden construir
bibliotecas de threads usando este nuevo servicio.

En cuanto a la sincronización dentro del
núcleo, siguiendo la tradición de UNÍS,
LINUX no permite que haya llamadas concurrentes activas dentro
del sistema operativo. Así se produce un evento que
causa un cambio de proceso mientras se está ejecutando
una llamada al sistema (por ejemplo, una interrupción de
reloj), el cambio se difiere hasta que la llamada termina o se
bloquea. Para evitar las condiciones de carrera entre la
ejecución de una llamada y el tratamiento de una
interrupción, se prohíben las interrupciones en
pequeñas zonas del código del sistema.

Puesto que el código del rutina de
interrupción ejecuta con una prioridad lata bloqueando
el tratamiento de las interrupciones, es importante que estas
rutinas sean muy cortas. Para ayudar a lograr este objetivo,
LINUX ofrece un mecanismo que permite dividir las operaciones
asociadas a una interrupción en dos partes:

  • Las operaciones de carácter más urgente
    se ejecutan en el entorno de la rutina de interrupción,
    denominada mitad superior en la nomenclatura de
    LINUX.
  • Las operaciones menos urgentes las ejecuta una rutina
    del núcleo que tiene una prioridad inferior a la de los
    dispositivos. Esta rutina se denomina en LINUX mitad inferior y
    durante su ejecución no estarán bloqueadas las
    interrupciones de otros dispositivos. La propia mitad superior
    se encarga de fijar un determinado valor en una estructura de
    datos para indicar que la mitad inferior está
    activada. Justo antes de retornar a modo usuario, el sistema
    operativo comprueba dicha estructura, y si encuentra que hay
    alguna mitad inferior activada, la
    ejecutará.

En cuanto a la planificación, LINUX soporta
tres clases de planificación: un algoritmo de tiempo
compartido y dos algoritmos de planificación de tiempo
real que se corresponden con los definitivos por
POSIX.

  Para ver el
gráfico seleccione la opción "Descargar" del
menú superior

Figura 11.1

. Niveles de prioridad dentro del núcleo de
LINUX.

El servicio sched_setscheduler permite definir la
clase de planificación del proceso que la invoca. Esta
llamada sólo puede hacerla un proceso privilegiado. Cada
de tiempo real tiene asociada una prioridad y un tipo de
planificación que puede ser FIFO o Round-Robin. El
planificador selecciona en cada momento el proceso listo para
ejecutar que tenga mayor prioridad. Si el proceso de este tipo
FIFO, seguirá ejecutando hasta que bloquee. Si es de
tipo Round-Robin, cuando termine su rodaja, el proceso
pasará al final de la cola de procesos listos para
ejecutar de su misma prioridad.

Todo proceso tiene asociada una prioridad base.
Inicialmente la prioridad del proceso es igual a su prioridad
base. Cada vez que se produce una interrupción de reloj
se resta una unidad a la prioridad del proceso que estaba
ejecutando. El algoritmo de planificación está
basado en la prioridad del proceso y tiene carácter
exclusivo: el planificador elige el proceso listo para ejecutar
que tenga mayor prioridad.

  1. Gestion de memoria.

LINUX tiene un sistema de memoria que incluye todas
las características habituales en los sistemas modernos.
Estas características ya fueron discutidas en el
capítulo dedicado a este tema, por lo que en esta
sección se presentan aquellos aspectos
específicos de LINUX:

  • Se utiliza un modelo de
    memoria independiente del procesador. Utiliza un esquema de
    paginación de 3 niveles. Existe una capa de software de
    bajo nivel que se encarga de adaptar este modelo
    abstracto al hardware de gestión de memoria
    real.
  • Permite utilizar tantos dispositivos como archivos
    para soporte de la memoria secundaria.
  • Se utiliza una versión modificada del
    algoritmo del reloj como algoritmo de reemplazo.
  • Gestiona la memoria dinámica del propio sistema operativo
    usando un algoritmo inspirado en el sistema buddy.

11.5 entrada/salida.

La entrada/salida en LINUX es muy similar a la de
cualquier otro sistema UNIX. Se distinguen, por tanto, 2 tipos
de dispositivos: dispositivos de bloques y dispositivos de
caracteres.

Como el resto de sistemas UNIX, se utiliza una
caché común

Para todos los dispositivos de bloques. El
tamaño de la caché es dinámico y crece de
acuerdo a las necesidades de memoria del resto de sistema. Para
gestionarla se usa básicamente una política de
reemplazo LRU. En las últimas versiones esta
caché trabaja coordinadamente con la utilizada por el
gestor de memoria.

En cuanto al acceso a los discos, se utiliza el
algoritmo del ascensor con un único sentido d
servicio.

Siguiendo el modelo de UNIX, en LINUX los usuarios ven
los dispositivos como archivos y utilizan los servicios
destinados a trabajar con archivos para acceder a los
dispositivos.

La red, sin embargo, es un dispositivo que tiene un
tratamiento un poco diferente. El usuario no puede acceder a
este dispositivo de la misma manera que a un archivo. La parte
del sistema operativo que trata la red está dividida en
tres niveles:

  • En el nivel inferior está el manejador del
    dispositivo al que el usuario no puede acceder
    directamente.
  • En el nivel intermedio está el software que
    implementa la pila de protocolos (
    por ejemplo, TCP e IP).
  • En el nivel superior está la interfaz del
    programador que corresponde con la de los sockets definidos en
    el UNIX BSD.

11.6. Sistema de archivos.

LINUX da soporte a una gran variedad de tipos de
sistemas de archivos en los que se incluyen los distintos
sistemas de archivos de windows y de
otros sistemas UNIX. Además, cualquier usuario puede
programar un manejador de un nuevo tipo de sistema de archivos
e incluirlo en el sistema como un módulo.

Esta coexistencia de distintos tipos de sistemas de
archivos la posibilita el VFS (virtual file system, sistema
virtual de archivos).

Aunque admite muy diferentes tipos de sistemas de
archivos, LINUX tiene sus propio sistema de archivos que se
denomina ext2fs. Este sistema evolucionó desde el
sistema de archivos de MINIX. Se le fueron añadiendo
nuevas características al sistema de archivos de MINIX
hasta llegar al sistema extfs. Posteriormente se
rediseñó dando lugar al ext2fs actual. Se trata
de un sistema basado en el FFS (fast file system, sistema de
archivos rápidos) del UNIX BSD.

Merece mención aparte un tipo de sistema de
archivos muy especial: el sistema de archivos proc. Este
sistema de archivos no tiene soporte en ningún
dispositivo. Su objetivo es poner a disposición del
usuario datos del estado del sistema en la forma d archivos.
Esta idea no es original de LINUX ya que casi todos los
sistemas UNIX la incluyen. Sin embargo, LINUX se caracteriza
por ofrecer más información del sistema que el
resto de variedades de UNIX. En este sistema de archivos se
puede acceder a información general sobre
características y estadísticas del sistema, así como
información sobre los distintos procesos
existentes.

   Para
ver el gráfico seleccione la opción "Descargar"
del menú superior

Figura 11.2. Niveles del sistema de
archivos.

Capitulo 12.

Estudio de casos: Windows
NT.

12.1. Introducción.

Windows NT es un sistema operativo multitarea, basado
en 32 bits, cuyas características principales son su
diseño orientado a objetos, el subsistema
de seguridad y los servicios de
entrada y salida.

La historia de este sistema operativo empezó en
1989, cuando Microsoft
decidió diseñar un nuevo sistema que sustituyera
a Windows 3.x y que incluyera las características
adecuadas para ser usadas en máquinas
multiprocesos de grandes dimensiones, para lo que versiones
anteriores de Windows no eran válidas. Para ello
contrató a expertos en diseño de
sistemas operativos, como Dave Cutler de DEC, que aportaron
al diseño de Windows NT
muchas de las ideas existentes en otros sistemas
operativos.

12.2. Principio de diseño de Windows
NT.

Windows NT tiene un diseño moderno de tipo
micro núcleo, con una pequeña capa de
núcleo que da soporte a las restantes funciones del
ejecutivo del sistema operativo. Dentro del ejecutivo destaca
la integración del modelo de seguridad
(nivel C2), de la gestión de red, de la existencia de
sistemas d archivos robustos y de aplicación exhaustiva
del modelo orientado a objetos.

Los principios de diseño fundamentales se
parecen mucho a los de otros sistemas
operativos:

  • Compatibilidad. Tanto con los sistemas anteriores
    (interfaz gráfico y sistemas de archivos FAT de Windows
    3.x) como con otros sistemas operativos (OS/2, POSIX, etc.) y
    con distintos entornos de red. La compatibilidad se logra
    mediante el uso de subsistemas que emulan los servicios de los
    distintos sistemas operativos. Los emuladores son similares a
    las máquinas virtuales de MVS.
  • Transportabilidad. Windows NT se diseñó
    para tener amplia difusión comercial, por lo que se
    pensó desde el principio en la posibilidad de
    transportarlo a distintos tipos de
    computadoras con procesadores
    CISC (Intel) y RISC ( MIPS, Digital Alpha, etc.). Para
    facilitar el transporte,
    Windows NT se ha construido sobre una pequeña capa de
    abstracción de hardware (HAL, Hardware Abstraction
    Layer) que proporciona toda la funcionalidad dependiente del
    hardware al núcleo del sistema.
  • Escabilidad. Windows NT se diseñó de
    forma modular sobre la base de un micronúcleo. Esta
    arquitectura
    permite repartir elementos del sistema sobre distintos
    procesadores de forma sencilla y extender el sistema con nuevos
    componentes. Actualmente el sistema operativo se puede ejecutar
    en computadoras con 32 procesadores, lo que permite integrar
    entornos de estaciones de trabajo y servidores.
  • Seguridad. Uno de los requisitos fundamentales de
    diseño de Windows NT fue proporcionar un nivel de
    seguridad C2 de acuerdo a la clasificación del DoD. Para
    ello se diseñó una arquitectura de
    seguridad, basada en un monitor de
    seguridad, que proporciona servicios de seguridad a todos los
    componentes del sistema operativo y a las aplicaciones externas
    al mismo.
  • Fiabilidad y Robustez. Los diseñadores de
    Windows NT han incluido servicios para dar más robustez
    al sistema tanto en el ámbito de procesos como en el de
    sistemas de archivos. Ejemplos son los sistemas de archivos con
    puntos de recuperación, la información
    redundantes con técnicas de paridad, las técnicas
    d gestión de memoria o la existencia de depuradores
    internos al núcleo.
  • Procesamiento Distribuido. Al contrario que otros
    micronúcleos, Windows NT incluye las utilidades de
    gestión de redes como parte del
    núcleo del sistema, proporcionando múltiples
    protocolos
    de transporte,
    RPC, Socket, colas de mensajes, etc.
  • Eficiencia. Los diseñadores de Windows NT se
    plantearon diseñar un sistema muy eficiente, tanto en
    monoprocesadores como en multiprocesadores. Por ello
    construyeron un modelo de proceso basado en procesos ligeros y
    un sistema de entrada y salida muy compacto en el que todos sus
    componentes se usan como manejadores de
    dispositivos.

12.3. Arquitectura de Windows NT.

Windows NT tiene una por capas muy modular, en la que
cada capa está compuesta de varios módulos
relativamente simples y con una funcionalidad muy
específica.

El sistema operativo está compuesta por las
siguientes capas:

  • Capa de abstracción del hardware. Proporciona
    una interfaz virtual del hardware, escondiendo las
    particularidades de cada entorno de ejecución del
    sistema operativo. Incluye la
  • funcionalidad del hardware que necesita el resto del
    sistema y es el único módulo que es necesario
    transportar cuando se cambia a otra plataforma
    hardware.
  • Núcleo. Proporciona servicios y
    funcionalidades básicas del sistema operativo tales como
    gestión de excepciones hardware, control de procesos
    ligeros, sincronización, etc. Solo incluye mecanismos,
    nunca políticas, aunque toma las decisiones
    para expulsar procesos de memoria.
  • Ejecutivo. Incluye los módulos que
    proporcionan los servicios de sistema operativo para los
    distintos subsistemas de ejecución. Tiene diseño
    orientado a objetos. Por ello entre sus componentes incluye un
    gestor de objetos, además de gestores para los sistemas
    de seguridad, procesos, memoria virtual, etc. Su interfaz
    define capa de servicios que el sistema operativo exporta a los
    subsistemas externos al núcleo. Estos servicios son las
    interfases entre los subsistemas, que se ejecutan en modo
    usuario, y el núcleo.
  • Subsistemas de entorno de ejecución.
    Proporcionan las llamadas al sistema operativo que usan las
    aplicaciones de usuario, existiendo subsistemas compatibles con
    distintos sistemas operativos (MS-DOS,
    OS/2, POSIX 1, etc.). A diferencia de las capas anteriores, sus
    componentes se ejecutan en modo usuario. Sus servicios se
    pueden acceder a través de las bibliotecas de los
    compiladores.

12.4. El núcleo de Windows
NT.

El núcleo es la base de Windows NT ya que
planifica las actividades, denominadas threads, de los
procesadores de la computadora. Al igual que en UNIX, el
núcleo de Windows NT se ejecuta siempre en modo seguro
(modo núcleo) y no usa la memoria virtual (no
paginable). El software del núcleo no se puede expulsar
de la UCP y, por tanto, no hay cambios de contexto durante su
ejecución. En caso en que se ejecute en un
multiprocesador se puede ejecutar simultáneamente en
todos los procesadores.

El núcleo proporciona las siguientes funciones
al resto del sistema:

  • Modelos de objeto, denominados objetos del
    núcleo.
  • Ejecución ordenada de los threads según
    un modelo de prioridad con 32 niveles.
  • Sincronización de la ejecución de
    distintos procesadores si es necesario.
  • Gestión de excepciones hardware.
  • Gestión de interrupciones y traps.
  • Funcionalidad específica para manejar el
    hardware.
  • Mecanismos eficientes de comunicación y
    sincronización.

El modelo de objetos está en la base de
funcionamiento del núcleo, que proporciona dos tipos de
de objetos básicos:

  • Objetos de planificación. Permiten controlar
    la ejecución y sincronización de operaciones del
    sistema mediante una señal de estado. Los eventos,
    mutantes, mutex, semáforos, threads y temporizadores
    pertenecen a este tipo de objetos. Los mutantes son el
    equivalente a los mutex, pero a nivel de usuario y concepto de
    propiedad.
    Los mutex solo están disponibles en el modo
    núcleo.
  • Objetos de control. Permiten controlar las
    operaciones del núcleo, pero no la planificación.
    Dentro de este tipo de objeto se agrupan las interrupciones,
    las llamadas asíncronas a procedimiento,
    los procesos y los perfiles de ejecución.

Un objeto contiene un nombre, un manejador, un
descriptor de seguridad, una lista de manejadores de objetos
abiertos, una descripción del tipo de objeto que
almacena y un cuerpo que incluye información
específica del objeto.

Para almacenar la información acerca de los
objetos y sus atributos, el núcleo gestiona las
siguientes estructuras de datos:

  • Tabla de interrupciones (IDT, Interrupt Dispatch
    Table). Asocia las interrupciones con las rutinas que las
    gestionan.
  • Tabla de descriptores de proceso ( PCB, Process
    Control Blocks). Incluye apuntadores a los manejadores de
    objetos de tipo proceso. Hay una tabla por cada procesador del
    sistema. Asociada a ellas ayuna tabla de control de regiones de
    memoria, cuyas entradas apuntan a las regiones de memoria donde
    están las otras tablas con información relativa
    al proceso.
  • Cola de temporizadores. Lista global de
    temporizadores activos de
    todo el sistema, se mantiene en el núcleo.

Además de estas estructuras se mantienen otras
como las colas de dispositivos, las petición de
procesadores y recursos, etc.

12.5 el ejecutivo de Windows NT.

La capa mas compleja del sistema operativo es el
ejecutivo, un conjunto de servicios comunes que pueden ser
usados por todos los subsistemas de entorno de ejecución
existentes en Windows NT a través de la capa de
servicios del sistema.

Cada grupo de servicios es manejado por uno de los
siguientes componentes:

  • Gestor de objetos.
  • Gestor de procesos.
  • Gestor de memoria virtual.
  • Monitor de seguridad.
  • Utilidad para llamadas a procedimientos
    locales.
  • Gestor de entrada y salida.

12.5. Gestor de objetos.

El gestor de objetos es el componente del ejecutivo de
Windows NT que se encarga de proporcionar servicios para todos
los aspectos de los objetos, incluyendo reglas para nombres y
seguridad. Todo el funcionamiento del sistema operativo se basa
en los objetos, que son instancias en tiempo de
ejecución de un tipo objeto particular que pueden ser
manipuladas por algún componente del sistema operativo.
Un tipo objeto está compuesto por un tipo de datos
estructurado definido por el sistema y las operaciones que se
pueden hacer sobre este tipo de datos y conjunto de atributos
de datos para dichas operaciones.

ANEXOS

Línea del Tiempo de
Linux

1992

1993

1994

1995

1996

1997

1998

1999

El padre de Linux es Linus Torvalds, un programador
finlandés de 21 años que inicialmente no
tenía más pretensión que 'divertirse'
creando un sistema operativo para su uso personal.
Torvalds
colocó Linux en Internet para
que cualquiera lo bajara gratis, en 1991, y desde entonces
participan en su desarrollo cientos de voluntarios. Hoy Linux
se difunde más rápido que cualquier otro sistema
operativo, es venerado por una comunidad de
diez millones de usuarios y comienza a verse como una
alternativa real a Windows. Esta es su historia. 
1991 
– En abril, Linus Torvalds comenzó a crear un programa
que varios meses después se convertiría en Linux,
un sistema operativo Unix para PC (Unix es un sistema operativo
usado en estaciones de trabajo y otros computadores de alto
rendimiento; hay muchas versiones de Unix). Linux nació
como un pasatiempo de Torvalds, que en esa época
tenía 21 años y estudiaba segundo año de
ciencias de
los computadores en la Universidad
de Helsinki (Finlandia); su intención inicial no era
crear un sistema operativo, sino experimentar creando software
para manejar ciertas funciones básicas del PC que
había comprado cuatro meses antes (un sistema operativo
es el programa que controla el funcionamiento de un computador).
La inquietud surgió porque el sistema
operativo que usaba en su PC, llamado Minix, era una
versión de Unix limitada, y él necesitaba algo
mejor; Torvalds no usaba DOS o Windows porque le
parecían –aún hoy– sistemas pobres y
poco confiables (Minix es un sistema operativo Unix
experimental, creado por un profesor holandés para
enseñar a los estudiantes el funcionamiento de los
sistemas operativos). 
– A mediados del año, el programa estaba avanzado y
Trovalds comenzó a pensar seriamente en que
podría crear el kernel de un nuevo sistema operativo,
similar a Minix pero mejor (el kernel es el corazón
de un sistema operativo). Trovalds no tenía grandes
pretensiones; él dice que no pensó en crear Linux
para que fuera un sistema operativo profesional, sino que lo
diseñó para su uso personal. Sin
embargo, poco a poco su pasatiempo se fue convirtiendo en un
proyecto
más serio.  
– El 5 de octubre, Trovalds publicó en un grupo de
noticias sobre Minix, en Internet, un
mensaje en el que anunció la creación de Linux,
un sistema operativo para PC basados en procesadores Intel 386.
El mensaje decía que el sistema (Linux versión
0.02) estaba todavía en desarrollo, pero ya funcionaba,
y lo ofrecía gratis a cualquiera que deseara bajarlo.
También invitó a los programadores interesados en
sistemas operativos a usarlo, y enviarle correcciones y mejoras
para incluirlas en la próxima versión. Ese fue un
suceso clave en la historia de Linux; gracias a
Internet, Linux pronto se convertiría en un
fenómeno mundial. 
1992 
– En enero, Linux tenía cerca de 100 usuarios, y varios
de ellos ya participaban en el desarrollo de Linux con mejoras
y correcciones que enviaban a Torvalds por Internet. Él
lanzó ese mes la versión 0.12 de Linux; esa fue
la primera versión que incluyó partes
desarrolladas por otros programadores y la primera que
realmente se desempeñaba mejor que Minix en ciertos
aspectos. 
– Microsoft
lanzó Windows 3.1. 
– El número de
usuarios de Linux comenzó a crecer rápidamente, y
no era extraño que tuviera gran acogida. Al igual que
Torvalds, muchos estudiantes de sistemas y gomosos de la
computación amaban los sistemas
operativos Unix por su estabilidad y potencia,
pero estos eran inalcanzables porque una versión
comercial de Unix costaba en esa época 4.000 o 5.000
dólares, y casi todas funcionaban exclusivamente en
estaciones de trabajo de 10.000 o más dólares (no
en PC). Linux, en cambio, era un sistema Unix gratuito, y
funcionaba en PC basados en procesadores Intel (386, 486,
etc.).  
– A medida que creció el número de usuarios,
también aumentaron los programadores voluntarios que se
involucraron en el desarrollo de Linux. Torvalds
distribuyó Linux bajo un tipo de licencia llamada GPL,
que permite a cualquier persona bajar,
usar, modificar e incluso vender Linux, sin pagar un peso; la
única condición es que los cambios o mejoras que
una persona o compañía realicen en Linux
también deben ser públicos. Es generó un
fenómeno de colaboración mundial sin precedentes.
Programadores de todo el planeta enviaron a Torvalds mejoras
para el kernel,
reportaron errores y comenzaron a crear controladores de
dispositivos para Linux. Se calcula que al final de 1992 Linux
tenía aproximadamente 1.000
usuarios.  

1993 
– Se estima que este año Linux completó 20.000
usuarios en el mundo, y más de 100 programadores
contribuyeron en su desarrollo. Para poder manejar esas
colaboraciones, Torvalds delegó las labores de
revisión del código de programación de Linux a cinco personas,
que se convirtieron en sus ‘oficiales’ principales.
A diferencia de los programas comerciales, que se actualizan
cada dos o tres años, en el mundo Linux aparecen
actualizaciones y mejoras menores cada pocas semanas; eso ha
permitido que Linux evolucione
rápidamente.  

– Microsoft lanzó Windows NT, una
versión de Windows para servidores y estaciones de
trabajo (es, por ello, rival de los sistemas operativos
Unix).  

1994 
– En marzo se lanzó la primera versión 'completa'
del sistema operativo de Torvalds: Linux 1.0. Esta
versión ofreció soporte a redes de computadores,
e incluyó docenas de utilidades, programas de desarrollo
de aplicaciones y otras herramientas.  
– Se fundó Red Hat Software, una empresa que
hoy es el principal distribuidor de Linux. Aunque Linux se
puede bajar gratis de Internet, hay docenas de empresas
–como Red Hat Software y Caldera– que elaboran sus
propias versiones, y las venden en CD-ROM,
junto con manuales,
soporte técnico y programas adicionales (esto es lo que
se conoce en el mundo de Linux como una distribución). Estas distribuciones
cuestan entre 10 y 70 dólares, dependiendo de la
empresa. 
– Este año Linux completó aproximadamente 100.000
usuarios. 

1995 
– En agosto, Microsoft lanzó Windows
95. 

– A finales de este año Linux tenía
aproximadamente 500.000 usuarios. 
1996 
– El 9 de junio se lanzó la versión 2.0 de Linux.
Una de las principales novedades fue el soporte a
multiprocesamiento simétrico (el sistema aprovechaba el
poder de computadores con más de un
procesador). 
Además, Linux 2.0 no solo trabajaba en PC con
procesadores Intel x86 (como el 386, 486 y Pentium),
sino también en estaciones de trabajo con procesadores
Alpha. 
– Se calcula que este año Linux completó 1,5
millones de usuarios. 
1997 
– Linus Torvalds se fue a vivir a Santa Clara (California,
Estados
Unidos), debido a que fue contratado por una
compañía llamada Transmeta (es una empresa de
chips, que no está relacionada con Linux). Sin embargo,
Torvalds continuó encabezando el equipo de gente que se
encarga del desarrollo del kernel de Linux. 
– La firma de investigaciones
Datapro dijo que Linux era el segundo sistema operativo
más popular en los servidores web de
Internet, después de Solaris (un sistema Unix de Sun
Microsystems). 
– Se estima que Linux completó 3,5 millones de usuarios.
Este año se lanzó la versión
2.1. 
1998 
– Varios de los principales fabricantes de programas para el
mercado
corporativo, como Oracle,
Informix, Computer Associates (CA) y Netscape, anunciaron que
lanzarán versiones para Linux de sus productos.
El respaldo de estas empresas ha sido clave para la
consolidación de Linux en las empresas. 
– En junio, Microsoft lanzó Windows
98.
– En septiembre, Intel Corporation y Netscape anunciaron una
inversión de capital en
la empresa Red
Hat Software. Este hecho fue muy importante para aumentar la
credibilidad de Linux, debido a que Intel y Netscape son dos de
los líderes de la industria de
los computadores. 
– En diciembre, Corel Corporation lanzó una
versión para Linux de su procesador de palabra
WordPerfect 8.
El programa se colocó en Internet para que los usuarios
lo pudieran probar gratis durante 90 días, y en los
primeros seis meses lo bajaron un millón de
personas. 
– A finales de 1998, Linux dominaba cerca del 17 por ciento del
mercado de
sistemas operativos para redes, según la empresa de
investigación de mercados International
Data Corporation (IDC). 
– Se calcula que Linux completó 7,5 millones de
usuarios. Y el número de programadores que participan en
el desarrollo y pruebas del
programa creció a 10.000. 
1999 
– En enero se lanzó la versión 2.2 de Linux, que
ofreció un mejor rendimiento y soporte para procesadores
Sparc, Motorola 68000, PowerPC y MIPS. Esta versión, al
igual que la 2.0, soporta computadores con 8 procesadores, pero
el multiprocesamiento es mucho
más eficiente en la versión 2.2. 
– Corel Corporation anunció que antes de terminar este
año lanzará Corel Linux, una distribución de Linux dirigida a usuarios
de PC. Aunque hay muchas empresas que ofrecen versiones
comerciales de Linux, esta tiene gran relevancia por estar
dirigida a usuarios
comunes y por ser producida por uno de los más grandes
fabricantes de software del mundo. Corel también dijo
que en el año 2000 lanzará una versión
para Linux del programa gráfico más importante
del mundo Windows, CorelDraw, lo mismo que una versión
de su paquete de programas Corel WordPerfect Suite.
– Linus Torvalds dijo que a finales de 1999 se lanzará
la versión 2.4 del kernel de Linux. La versión
2.4 (la actual es la 2.2.11) mejorará el soporte a
multiprocesamiento simétrico, y soportará
tecnologías como Universal Serial Bus (USB) y
PCMCIA (actualmente tienen soporte, pero por medio de programas
adicionales). 
– Actualmente, Linux tiene gran acogida y un futuro prometedor.
Se calcula que cuenta con más de diez millones de
usuarios. Además, trabaja en los principales tipos de
procesadores: Intel x86, Motorola 680×0, MIPS, PowerPC (los que
usan los Macintosh),
Alpha y Sparc (estos dos últimos son procesadores de 64
bits, más potentes que los chips Intel x86). Incluso,
hay una versión que funciona en el computador
de mano PalmPilot. De otro lado, varios de los principales
fabricantes de computadores, como Dell Computer, Compaq y
Hewlett-Packard, venden equipos que traen Linux
preinstalado. 

   ANEXO II

Estudio sobre virus
informáticos

El nuevo escenario
informático.

Uno de los cambios más sorprendentes del mundo
de hoy es la rapidez de las comunicaciones. Modernos sistemas permiten que
el flujo de conocimientos sea independiente del lugar
físico en que nos encontremos. Ya no nos sorprende la
transferencia de información en tiempo real o
instantáneo. Se dice que el
conocimiento es poder; para adquirirlo, las empresas se han
unido en grandes redes internacionales para transferir datos,
sonidos e imágenes, y realizan el comercio en
forma electrónica, para ser más eficientes. Pero
al unirse en forma pública, se han vuelto vulnerables,
pues cada sistema de computadoras involucrado en la red es un
blanco potencial y apetecible para obtener
información.

El escenario electrónico actual es que las
organizaciones
están uniendo sus redes internas a la Internet, la que
crece a razón de más de un 10% mensual. Al unir
una red a la Internet se tiene acceso a las redes de otras
organizaciones
también unidas. De la misma forma en que accedemos la
oficina del
frente de nuestra empresa, se puede recibir información
de un servidor en Australia, conectarnos a una supercomputadora
en Washington o revisar la literatura
disponible desde Alemania.
Del universo de
varias decenas de millones de computadoras interconectadas, no
es difícil pensar que puede haber más de una
persona con perversas intenciones respecto de una
organización. Por eso, se debe tener la red protegida
adecuadamente.

Cada vez es más frecuente encontrar noticias
referentes a que redes de importantes organizaciones han sido
violadas por criminales informáticos desconocidos. A
pesar de que la prensa ha
publicitado que tales intrusiones son solamente obra de
adolescentes
con propósitos de entretenerse o de jugar, ya no se
trata de un incidente aislado de una desafortunada
institución. A diario se reciben reportes los ataques a
redes informáticas, los que se han vuelto cada vez
más siniestros: los archivos son alterados
subrepticiamente, las computadoras se vuelven inoperativas, se
ha copiado información confidencial sin
autorización, se ha reemplazado el software para agregar
"puertas traseras" de entrada, y miles de contraseñas
han sido capturadas a usuarios inocentes.

Los administradores de sistemas deben gastar horas y a
veces días enteros volviendo a cargar o reconfigurando
sistemas comprometidos, con el objeto de recuperar la confianza
en la integridad del sistema. No hay manera de saber los
motivos que tuvo el intruso, y debe suponerse que sus
intenciones son lo peor. Aquella gente que irrumpe en los
sistemas sin autorización, aunque sea solamente para
mirar su estructura, causa mucho daño, incluso sin que
hubieran leído la correspondencia confidencial y sin
borrar ningún archivo.

Uno de los cambios más sorprendentes del mundo
de hoy es la rapidez de las comunicaciones. Modernos sistemas
permiten que el flujo de conocimientos sea independiente del
lugar físico en que nos encontremos. Ya no nos sorprende
la transferencia de información en tiempo real o
instantáneo. Se dice que el conocimiento
es poder; para adquirirlo, las empresas se han unido en grandes
redes internacionales para transferir datos, sonidos e imágenes, y realizan el comercio en
forma electrónica, para ser más eficientes. Pero
al unirse en forma pública, se han vuelto vulnerables,
pues cada sistema de computadoras involucrado en la red es un
blanco potencial y apetecible para obtener
información.

El escenario electrónico actual es que las
organizaciones están uniendo sus redes internas a la
Internet, la que crece a razón de más de un 10%
mensual.

Al unir una red a la Internet se tiene acceso a las
redes de otras organizaciones también unidas. De la
misma forma en que accedemos la oficina del
frente de nuestra empresa, se puede recibir información
de un servidor en Australia, conectarnos a una supercomputadora
en Washington o revisar la literatura
disponible desde Alemania.
Del universo de
varias decenas de millones de computadoras interconectadas, no
es difícil pensar que puede haber más de una
persona con perversas intenciones respecto de una
organización. Por eso, se debe tener nuestra red
protegida adecuadamente.

Cada vez es más frecuente encontrar noticias
referentes a que redes de importantes organizaciones han sido
violadas por criminales informáticos desconocidos. A
pesar de que la prensa ha
publicitado que tales intrusiones son solamente obra de
adolescentes
con propósitos de entretenerse o de jugar, ya no se
trata de un incidente aislado de una desafortunada
institución. A diario se reciben reportes los ataques a
redes informáticas, los que se han vuelto cada vez
más siniestros: los archivos son alterados
subrepticiamente, las computadoras se vuelven inoperativas, se
ha copiado información confidencial sin
autorización, se ha reemplazado el software para agregar
"puertas traseras" de entrada, y miles de contraseñas
han sido capturadas a usuarios inocentes.

Los administradores de sistemas deben gastar horas y a
veces días enteros volviendo a cargar o reconfigurando
sistemas comprometidos, con el objeto de recuperar la confianza
en la integridad del sistema. No hay manera de saber los
motivos que tuvo el intruso, y debe suponerse que sus
intenciones son lo peor. Aquella gente que irrumpe en los
sistemas sin autorización, aunque sea solamente para
mirar su estructura, causa mucho daño, incluso sin que
hubieran leído la correspondencia confidencial y sin
borrar ningún archivo.

De acuerdo a un estudio de la Consultora "Ernst and
Young" abarcando más de mil empresas, un 20% reporta
pérdidas financieras como consecuencia de intrusiones en
sus computadoras (Technology Review, Abril 95, pg.33). Ya
pasaron los tiempos en que la seguridad de las computadoras era
sólo un juego o
diversión.

¿cómo nacieron los
virus?.

Hacia finales de los años 60, Douglas McIlory,
Victor Vysottsky y Robert Morris idearon un juego al que
llamaron Core War (Guerra en lo
Central, aludiendo a la memoria de la computadora), que se
convirtió en el pasatiempo de algunos de los
programadores de los laboratorios Bell de AT&T.

El juego consistía en que dos jugadores
escribieran cada uno un programa llamado organismo, cuyo
hábitat fuera la memoria de la computadora. A partir de
una señal, cada programa intentaba forzar al otro a
efectuar una instrucción inválida, ganando el
primero que lo consiguiera.

Al término del juego, se borraba de la memoria
todo rastro de la batalla, ya que estas actividades eran
severamente sancionadas por los jefes por ser un gran riesgo dejar un
organismo suelto que pudiera acabar con las aplicaciones
del día siguiente. De esta manera surgieron los
programas destinados a dañar en la escena de la
computación.

Uno de los primeros registros que se tienen de una
infección data del año 1987, cuando en la
Universidad
estadounidense de Delaware notaron que tenían un virus
porque comenzaron a ver "© Brain" como etiqueta de los
disquetes.

La causa de ello era Brain Computer Services, una casa
de computación paquistaní que, desde 1986,
vendía copias ilegales de software comercial infectadas
para, según los responsables de la firma, dar una
lección a los piratas.

Ellos habían notado que el sector de booteo de
un disquete contenía código ejecutable, y que
dicho código se ejecutaba cada vez que la máquina
se inicializaba desde un disquete.

Lograron reemplazar ese código por su propio
programa, residente, y que este instalara una réplica de
sí mismo en cada disquete que fuera utilizado de
ahí en más.

También en 1986, un programador llamado Ralf
Burger se dio cuenta de que un archivo podía ser creado
para copiarse a sí mismo, adosando una copia de
él a otros archivos. Escribió una
demostración de este efecto a la que llamó
VIRDEM, que podía infectar cualquier archivo con
extensión .COM.

Esto atrajo tanto interés
que se le pidió que escribiera un libro, pero,
puesto que él desconocía lo que estaba ocurriendo
en Paquistán, no mencionó a los virus de sector
de arranque (boot sector). Para ese entonces, ya se
había empezado a diseminar el virus Vienna.

Actualmente, los virus son producidos en cantidades
extraordinarias por muchisima gente alrededor del planeta.
Algunos de ellos dicen hacerlo por divertimento, otros
quizás para probar sus habilidades. De cualquier manera,
hasta se ha llegado a notar un cierto grado de competitividad entre los autores de estos
programas.

Con relación a la
motivación de los autores de virus para llevar a
cabo su obra, existe en Internet un documento escrito por un
escritor freelance Markus Salo, en el cual, entre otros, se
exponen los siguientes conceptos:

  • Algunos de los programadores de virus, especialmente
    los mejores, sostienen que su interés por el tema es
    puramente científico, que desean averiguar todo lo que
    se pueda sobre virus y sus usos.
  • A diferencia de las compañías de
    software, que son organizaciones relativamente aisladas unas de
    otras (todas tienen secretos que no querrían que sus
    competidores averiguaran) y cuentan entre sus filas con
    mayoría de estudiantes graduados, las agrupaciones de
    programadores de virus están abiertas a cualquiera que
    se interese en ellas, ofrecen consejos, camaradería y
    pocas limitaciones. Además, son libres de seguir
    cualquier objetivo que les parezca, sin temer por la
    pérdida de respaldo económico.
  • El hecho de escribir programas vírales da al
    programador cierta fuerza
    coercitiva, lo pone fuera de las reglas convencionales de
    comportamiento. Este factor es uno de los
    más importantes, pues el sentimiento de pertenencia es
    algo necesario para todo ser humano, y es probado que dicho
    sentimiento pareciera verse reforzado en situaciones
    marginales.
  • Por otro lado, ciertos programadores parecen intentar
    legalizar sus actos poniendo sus creaciones al alcance de mucha
    gente, (vía Internet, BBS especializadas, etc.) haciendo
    la salvedad de que el material es peligroso, por lo cual el
    usuario debería tomar las precauciones del
    caso.
  • Existen programadores, de los cuales, generalmente,
    provienen los virus más destructivos, que alegan que sus
    programas son creados para hacer notoria la falta de
    protección de que sufren la mayoría de los
    usuarios de computadoras.
  • La gran mayoría de estos individuos son del
    mismo tipo de gente que es reclutada por los grupos
    terroristas: hombres, adolescentes, inteligentes.

En definitiva, sea cual fuere el motivo por el cual se
siguen produciendo virus, se debe destacar que su existencia no
ha sido sólo perjuicios: gracias a ellos, mucha gente a
tomado conciencia
de qué es lo que tiene y cómo
protegerlo.

¿Qué es un
virus?.

Es un pequeño programa escrito intencionalmente
para instalarse en la computadora de un usuario sin el
conocimiento o el permiso de este. Decimos que es un
programa parásito porque el programa ataca a los
archivos o sector es de "booteo" y se replica a sí mismo
para continuar su esparcimiento.

Algunos se limitan solamente a replicarse, mientras
que otros pueden producir serios daños que pueden
afectar a los sistemas. Se ha llegado a un punto tal, que un
nuevo virus llamado W95/CIH-10xx. o también como
CIH.Spacefiller (puede aparecer el 26 de cada mes,
especialmente 26 de Junio y 26 de Abril) ataca al BIOS de la
PC huésped y cambiar su configuración de tal
forma que se requiere cambiarlo. Nunca se puede asumir que un
virus es inofensivo y dejarlo "flotando" en el
sistema.

Existen ciertas analogías entre los virus
biológicos y los informáticos: mientras los
primeros son agentes externos que invaden células
para alterar su información genética y reproducirse, los segundos son
programas-rutinas, en un sentido más estricto, capaces
de infectar archivos de computadoras, reproduciéndose
una y otra vez cuando se accede a dichos archivos,
dañando la información existente en la memoria o
alguno de los dispositivos de
almacenamiento del ordenador.

Tienen diferentes finalidades: Algunos sólo
'infectan', otros alteran datos, otros los eliminan, algunos
sólo muestran mensajes. Pero el fin último de
todos ellos es el mismo: PROPAGARSE.

Es importante destacar que el potencial de
daño de un virus
informático no depende de su complejidad sino del
entorno donde actúa
.

La definición más simple y completa que
hay de los virus corresponde al modelo D. A. S., y se
fundamenta en tres características, que se refuerzan y
dependen mutuamente. Según ella, un virus es un programa
que cumple las siguientes pautas:

  • Es dañino
  • Es autorreproductor
  • Es subrepticio

El hecho de que la definición imponga que los
virus son programas no admite ningún tipo de observación; está extremadamente
claro que son programas, realizados por personas. Además
de ser programas tienen el fin ineludible de causar daño
en cualquiera de sus formas.

Asimismo, se pueden distinguir tres módulos
principales de un virus
informático:

  • Módulo de Reproducción
  • Módulo de Ataque
  • Módulo de Defensa

El módulo de reproducción se
encarga de manejar las rutinas de "parasitación" de
entidades ejecutables (o archivos de datos, en el caso de los
virus macro) a fin de que el virus pueda ejecutarse
subrepticiamente. Pudiendo, de esta manera, tomar control del
sistema e infectar otras entidades permitiendo se traslade de
una computadora a otra a través de algunos de estos
archivos.

El módulo de ataque es optativo. En caso
de estar presente es el encargado de manejar las rutinas de
daño adicional del virus. Por ejemplo, el conocido virus
Michelangelo, además de producir los daños
que se detallarán más adelante, tiene un
módulo de ataque que se activa cuando el reloj de la
computadora indica 6 de Marzo. En estas condiciones la rutina
actúa sobre la información del disco
rígido volviéndola inutilizable.

El módulo de defensa tiene, obviamente,
la misión
de proteger al virus y, como el de ataque, puede estar o no
presente en la estructura. Sus rutinas apuntan a evitar todo
aquello que provoque la remoción del virus y retardar,
en todo lo posible, su detección.

Tipos de virus.

Los virus se clasifican por el modo en que
actúan infectando la computadora:

  • Programa: Infectan archivos ejecutables tales como
    .com / .exe / .ovl / .drv / .sys / .bin
  • Boot: Infectan los sectores Boot Record, Master Boot, FAT y la Tabla de
    Partición.
  • Múltiples: Infectan programas y sectores de
    "booteo".
  • Bios: Atacan al Bios para
    desde allí reescribir los discos duros.
  • Hoax: Se distribuyen por e-mail y la única
    forma de eliminarlos es el uso del sentido
    común.

Al respecto, se trata de virus que no existe y que se
utiliza para aterrar a los novatos especialmente en la Internet
a pesar que los rumores lo muestran como algo muy serio y a
veces la información es tomada por la prensa
especializada.

Por lo general, como ya se expresó, la
difusión se hace por cadenas de e-mail con terribles e
inopinadas advertencias. En realidad el único virus es
el mensaje. A continuación se dan una serie de supuestos
"virus", por lo que es aconsejable ignorar los mensajes que
aparecen y no ayudar a replicarlos continuando con la
cadena:

  • 3b Trojan (alias PKZIP Virus).
  • AOL4Free Virus Hoax.
  • Baby New Year Virus Hoax.
  • BUDDYLST.ZIP
  • BUDSAVER.EXE
  • Budweiser Hoax
  • Death69
  • Deeyenda
  • E-Flu
  • FatCat Virus Hoax
  • Free Money
  • Get More Money Hoax
  • Ghost
  • Good Times
  • Hacky Birthday Virus Hoax
  • Hairy Palms Virus Hoax
  • Irina
  • Join the Crew
  • Londhouse Virus Hoax
  • Microsoft Virus Hoax
  • Millenium Time Bomb
  • Penpal Greetings
  • Red Alert
  • Returned or Unable to Deliver
  • Teletubbies
  • Time Bomb
  • Very Cool
  • Win a Holiday
  • World Domination Hoax
  • Yellow Teletubbies
  • A.I.D.S. hoax email virus
  • AltaVista virus scare
  • AOL riot hoax email
  • ASP virus hoax
  • Back Orifice Trojan horse
  • Bill Gates hoax
  • Bloat, see MPEG virus hoax
  • Budweiser frogs screen-saver scare
  • Good Times hoax email virus
  • Irina hoax virus
  • Java virus scare
  • Join the Crew hoax email virus
  • 'Millennium' virus misunderstanding
  • MPEG virus hoax
  • 'My clock says 2097/2098' virus
    misunderstanding
  • New virus debug device hoax email virus with attached
    Trojan horse
  • Open: Very Cool, see A.I.D.S. hoax email
    virus
  • Penpal Greetings, see Good Times hoax email
    virus
  • PKZ300 Trojan virus scare
  • Returned or Unable to Deliver hoax email
    virus
  • Walt Disney greeting, see Bill Gates
    hoax
  • Win a Holiday hoax email virus
  • Windows ’98 MS Warning.

Por último, cabe destacar que los HOAX
están diseñados únicamente para asustar a
los novatos (y a los que no lo son tanto). Otros como el
mensaje del carcinoma cerebral de Jessica, Jessica
Mydek
, Anabelle, Ana, Billy y otros
personajes imaginarios tampoco son reales como tampoco lo es la
dirección ,
ya que fueron creados para producir congestionamiento en la
Internet.

Características de los virus.

El virus es un pequeño software (cuanto
más pequeño más fácil de esparcir y
más difícil de detectar), que permanece inactivo
hasta que un hecho externo hace que el programa sea ejecutado o
el sector de "booteo" sea leído. De esa forma el
programa del virus es activado y se carga en la memoria de la
computadora, desde donde puede esperar un evento que dispare su
sistema de destrucción o se replique a sí
mismo.

Los más comunes son los residentes en la
memoria que pueden replicarse fácilmente en los
programas del sector de "booteo", menos comunes son los
no-residentes que no permanecen en la memoria después
que el programa-huesped es cerrado.

Los virus pueden llegar a "camuflarse" y esconderse
para evitar la detección y reparación. Como lo
hacen:

  1. El virus re-orienta la lectura
    del disco para evitar ser detectado;
  2. Los datos sobre el tamaño del directorio
    infectado son modificados en la FAT, para evitar que se
    descubran bytes extra que aporta el virus;
  3. encriptamiento: el virus se encripta en
    símbolos sin sentido para no ser detectado, pero para
    destruir o replicarse DEBE desencriptarse siendo
    entonces detectable;
  4. polimorfismo: mutan cambiando segmentos del
    código para parecer distintos en cada "nueva
    generación", lo que los hace muy difíciles de
    detectar y destruir;
  5. Gatillables: se relaciona con un evento que puede ser
    el cambio de fecha, una determinada combinación de
    tecleo; un macro o la apertura de un programa asociado al virus
    (Troyanos).

Los virus se transportan a través de programas
tomados de BBS (Bulletin Boards) o copias de software no
original, infectadas a propósito o accidentalmente.
También cualquier archivo que contenga "ejecutables" o
"macros" puede
ser portador de un virus: downloads de programas de lugares
inseguros; e-mail con "attachments", archivos de MS-Word y
MS-Excel con
macros.
Inclusive ya existen virus que se distribuyen con MS-Power Point.
Los archivos de datos, texto o
Html NO
PUEDEN
contener virus, aunque pueden ser dañados por
estos.

Los virus de sectores de "booteo" se instalan en esos
sectores y desde allí van saltando a los sectores
equivalentes de cada uno de los drivers de la PC. Pueden
dañar el sector o sobreescribirlo. Lamentablemente
obligan al formateo del disco del drive infectado. Incluyendo
discos de 3.5" y todos los tipos de Zip de Iomega, Sony y 3M.
(No crean vamos a caer en el chiste fácil de decir que
el más extendido de los virus de este tipo se llama
MS

Windows 98).

En cambio los virus de programa, se manifiestan cuando
la aplicación infectada es ejecutada, el virus se activa
y se carga en la memoria, infectando a cualquier programa que
se ejecute a continuación. Puede solaparse infecciones
de diversos virus que pueden ser destructivos o permanecer
inactivos por largos periodos de tiempo.

Daños de los
virus.

Definiremos daño como acción una
indeseada, y los clasificaremos según la cantidad de
tiempo necesaria para reparar dichos daños. Existen seis
categorías de daños hechos por los virus, de
acuerdo a la gravedad.

  1. Sirva como ejemplo la forma de trabajo del virus
    FORM (el más común): En el día 18
    de cada mes cualquier tecla que presionemos hace sonar el
    beep. Deshacerse del virus implica, generalmente, segundos o
    minutos.

  2. DAÑOS TRIVIALES.

    Un buen ejemplo de este tipo de daño es el
    JERUSALEM. Este virus borra, los viernes 13, todos los
    programas que uno trate de usar después de que el
    virus haya infectado la memoria residente. En el peor de los
    casos, tendremos que reinstalar los programas perdidos. Esto
    nos llevará alrededor de 30 minutos.

  3. DAÑOS MENORES.

    Cuando un virus formatea el disco rígido,
    mezcla los componentes de la FAT (File Allocation
    Table, Tabla de Ubicación de Archivos), o sobreescribe
    el disco rígido. En este caso, sabremos inmediatamente
    qué es lo que está sucediendo, y podremos
    reinstalar el sistema operativo y utilizar el último
    backup. Esto quizás nos lleve una hora.

  4. DAÑOS MODERADOS.

    Algunos virus, dada su lenta velocidad de
    infección y su alta capacidad de pasar desapercibidos,
    pueden lograr que ni aún restaurando un backup
    volvamos al último estado de los datos. Un ejemplo de
    esto es el virus DARK AVENGER, que infecta archivos y
    acumula la cantidad de infecciones que realizó. Cuando
    este contador llega a 16, elige un sector del disco al azar y
    en él escribe la frase: "Eddie lives …
    somewhere in time
    " (Eddie vive … en algún
    lugar del tiempo).

    Esto puede haber estado pasando por un largo tiempo
    sin que lo notemos, pero el día en que detectemos la
    presencia del virus y queramos restaurar el último
    backup notaremos que también él contiene
    sectores con la frase, y también los backups
    anteriores a ese.

    Puede que lleguemos a encontrar un backup limpio,
    pero será tan viejo que muy probablemente hayamos
    perdido una gran cantidad de archivos que fueron creados con
    posterioridad a ese backup.

  5. DAÑOS MAYORES.

    Los daños severos son hechos cuando un virus
    realiza cambios mínimos, graduales y progresivos. No
    sabemos cuándo los datos son correctos o han cambiado,
    pues no hay pistas obvias como en el caso del DARK
    AVENGER
    (es decir, no podemos buscar la frase Eddie
    lives …
    ).

  6. DAÑOS SEVEROS.
  7. DAÑOS ILIMITADOS.

Algunos programas como CHEEBA,
VACSINA.44.LOGIN y GP1 entre otros, obtienen la
clave del administrador del sistema y la pasan a un tercero.
Cabe aclarar que estos no son virus sino troyanos. En el caso
de CHEEBA, crea un nuevo usuario con los privilegios
máximos, fijando el nombre del usuario y la clave. El
daño es entonces realizado por la tercera persona, quien
ingresará al sistema y haría lo que
quisiera.

Síntomas típicos de una
infección.

  • El sistema operativo o un programa toma mucho tiempo
    en cargar sin razón aparente.
  • El tamaño del programa cambia sin razón
    aparente.
  • El disco duro se queda sin espacio o reporta falta de
    espacio sin que esto sea necesariamente así.
  • Si se corre el CHKDSK no muestra "655360 bytes
    available".
  • En Windows aparece "32 bit error".
  • La luz del disco
    duro en la CPU continua parpadeando aunque no se este
    trabajando ni haya protectores de pantalla activados. (Se debe
    tomar este síntoma con mucho cuidado, porque no siempre
    es así).
  • No se puede "bootear" desde el Drive A, ni siquiera
    con los discos de rescate.
  • Aparecen archivos de la nada o con nombres y
    extensiones extrañas.
  • Suena "clicks" en el teclado (este sonido es
    particularmente aterrador para quien no esta
    advertido).
  • Los caracteres de texto se
    caen literalmente a la parte inferior de la pantalla
    (especialmente en DOS).
  • En la pantalla del monitor
    pueden aparecen mensajes absurdos tales como "Tengo hambre.
    Introduce un Big Mac en el Drive A".
  • En el monitor aparece una pantalla con un fondo de
    cielo celeste, unas nubes blancas difuminadas, una ventana de
    vidrios repartidos de colores y una
    leyenda en negro que dice Windows ’98 (No puedo evitarlo,
    es mas fuerte que yo…!!).

Una infección se soluciona con las llamadas
"vacunas"
(que impiden la infección) o con los remedios que
desactivan y eliminan, (o tratan de hacerlo) a los virus de los
archivos infectados. Hay cierto tipo de virus que no son
desactivables ni removibles, por lo que se debe destruir el
archivo infectado.

Virus informáticos
argentinos.

Al igual que todos los países informatizados,
la Argentina
cuenta con una producción local de virus
informáticos.

Si bien estos no son de los más complejos (en
su mayoría, buenas copias y variaciones de virus
conocidos) representan un problema, ya que muchos de ellos no
están incluidos en las bases de datos de los programas
antivirus.

Veamos algunos ejemplos:

  • PING PONG:

Este virus fue el primero en hacer explosión en
Argentina. Fue
descubierto en marzo de 1988 y en poco tiempo estuvo en nuestro
país, en donde se convirtió rápidamente en
epidemia.

La falta de conocimiento
sobre los virus ayudó a que se diseminara ampliamente y
fuera incontrolable en un principio. En centros universitarios
como la Facultad de Ciencias
Exactas de la UBA o la Facultad de Informática de la
Universidad de Morón era difícil encontrar un
disco sin infectar.

Ese mismo desconocimiento llevó a que pasara
bastante tiempo hasta que se empezaran a tomar medidas.
Sólo después de algunos meses, en revistas
especializadas en informática, empezaron a publicarse
formas de desinfectar los discos, y como consecuencia de ello
se aplicaron políticas de seguridad en las
universidades.

Lo positivo de esto fue que la gente comenzara a
conocer el D.O.S. más profundamente, por ejemplo el boot
sector: qué es y para qué sirve, ya que las
máquinas eran utilizadas pero pocos sabían
cómo funcionaban realmente.

Como tenía un síntoma muy evidente (una
pelotita que rebotaba), se pensó que todos los virus
debían ser visibles, pero los siguientes fueron
más subrepticios, y se limitaban a reproducirse o
destruir sin avisar al usuario.

El Ping Pong original no podía infectar discos
rígidos, pero la versión que se popularizó
en el país fue la B, que sí podía hacerlo.
Se creó una variante en Argentina, que probablemente fue
la primera variante de virus originada en el país, el
Ping Pong C, que no mostraba la pelotita en la pantalla. Este
virus está extinto en este momento ya que sólo
podía funcionar en máquinas con procesador 8088
ó 8086, porque ejecutaba una instrucción no
documentada en estos e incorrecta en los modelos
siguientes.

  • AVISPA:

Escrito en Noviembre de 1993 que en muy poco tiempo se
convirtió en epidemia. Infecta archivos .EXE

Al ejecutarse, si no se encontraba ya residente en
memoria, intenta infectar los archivos XCOPY, MEM, SETVER y
EMM386 para maximizar sus posibilidades de reproducción, ya que estos archivos son
de los más frecuentemente utilizados.

Este virus está encriptado siempre con una
clave distinta (polimórfico), para dificultar su
detección por medio de antivirus
heurísticos.

  • MENEM TOCOTO:

Esta adaptación del virus Michelangelo
apareció en 1994. En los disquetes se aloja en el boot
sector, y en los discos rígidos en la tabla de
particiones. Es extremadamente sencillo y, por ende,
fácil de detectar.

  • CAMOUFLAGE II:

Aparecido por primera vez en 1993. Infecta el boot
sector de los disquetes ubicados en la unidad A y la tabla de
partición de los discos rígidos. Es bastante
simple y fácil de ser detectado.

  • LEPROSO:

Creado en 1993, en Rosario, provincia de Santa
Fé. Se activa el día 12 de Enero
(cumpleaños del autor), y hace aparecer un mensaje que
dice: "Felicitaciones, su máquina está
infectada por el virus leproso creado por J. P.. Hoy es mi
cumpleaños y lo voy a festejar formateando su
rígido. Bye… (Vamos Newell's que con Diego somos
campeones)."

  • PINDONGA:

Virus polimórfico residente en memoria que se
activa los días 25 de febrero, 21 de marzo, 27 de agosto
y 16 de septiembre, cuando ataca, borra toda la
información contenida en el disco
rígido.

  • TEDY:

Es el primer virus argentino interactivo.
Apareció hace poco tiempo. Infecta archivos con
extensión .EXE, y se caracteriza por hacer una serie de
preguntas al usuario.

Una vez activado, una pantalla muestra:

¡TEDY, el primer virus interactivo de la
computación!

Responda el siguiente cuestionario:

  1. ¿Los programas que Ud. utiliza son
    originales? (s/n)
  2. ¿Los de Microsoft son unos ladrones?
    (s/n)

Si se responde afirmativamente a la primer
pregunta, el virus contestará: 5 archivos menos por
mentiroso

En caso contrario:

2 archivos menos por ladrón

En cuanto a la segunda pregunta, el único
mensaje que se ha visto es:

Te doy otra oportunidad para responder
bien.

Con este virus, los archivos infectados aumentan su
tamaño en 4310 bytes.

¿Qué no es un virus?.

Existen algunos programas que, sin llegar a ser virus,
ocasionan problemas al usuario. Estos no-virus carecen
de por lo menos una de las tres características
identificatorias de un virus (dañino, autorreproductor y
subrepticio). Veamos un ejemplo de estos no – virus: "Hace
algunos años, la red de I. B. M., encargada de conectar
más de 130 países, fue virtualmente paralizada
por haberse saturado con un correo
electrónico que contenía un mensaje de
salutación navideña que, una vez leído por
el destinatario, se enviaba a sí mismo a cada integrante
de las listas de distribución de correo del usuario. Al
cabo de un tiempo, fueron tantos los mensajes que esperaban ser
leídos por sus destinatarios que el tráfico se
volvió demasiado alto, lo que ocasionó la
caída de la red".

Asimismo, es necesario aclarar que no todo lo que
altere el normal funcionamiento de una computadora es
necesariamente un virus.

Por ello, daré algunas de las pautas
principales para diferenciar entre qué debe preocuparnos
y qué no:

BUGS (Errores en programas).

Los bugs no son virus, y los virus no son bugs. Todos
usamos programas que tienen graves errores (bugs). Si se
trabaja por un tiempo largo con un archivo muy extenso,
eventualmente algo puede comenzar a ir mal dentro del programa,
y este a negarse a grabar el archivo en el disco. Se pierde
entonces todo lo hecho desde la última grabación.
Esto, en muchos casos, se debe a ERRORES del programa. Todos
los programas lo suficientemente complejos tienen
bugs.

Falsa alarma.

Algunas veces tenemos problemas con nuestro hardware o
software y, luego de una serie de verificaciones, llegamos a la
conclusión de que se trata de un virus, pero nos
encontramos con una FALSA ALARMA luego de correr nuestro
programa antivirus.

Desafortunadamente no hay una regla estricta por la
cual guiarse, pero contestarse las siguientes preguntas puede
ser de ayuda:

  • ¿Es sólo un archivo el que reporta la
    falsa alarma (o quizás varios, pero copias del
    mismo)?.
  • ¿Solamente un producto
    antivirus reporta la alarma? (Otros productos
    dicen que el sistema está limpio).
  • ¿Se indica una falsa alarma después de
    correr múltiples productos, pero no después de
    bootear, sin ejecutar ningún programa?.

Si al menos una de nuestras respuestas fue afirmativa,
es muy factible que efectivamente se trate de una falsa
alarma.

Programas corruptos.

A veces algunos archivos son accidentalmente
dañados, quizás por problemas de hardware. Esto
quiere decir que no siempre que encontremos daños en
archivos deberemos estar seguros de
estar infectados.

¿Qué es un antivirus?.

No para toda enfermedad existe cura, como tampoco
existe una forma de erradicar todos y cada uno de los virus
existentes.

Es importante aclarar que todo antivirus es un
programa y que, como todo programa, sólo
funcionará correctamente si es adecuado y está
bien configurado. Además, un antivirus es una
herramienta para el usuario y no sólo no será
eficaz para el 100% de los casos
, sino que nunca
será una protección total ni
definitiva
.

La función
de un programa antivirus es detectar, de alguna manera, la
presencia o el accionar de un virus informático en una
computadora. Este es el aspecto más importante de un
antivirus, independientemente de las prestaciones
adicionales que pueda ofrecer, puesto que el hecho de detectar
la posible presencia de un virus informático, detener
el trabajo y
tomar las medidas necesarias, es suficiente para acotar un buen
porcentaje de los daños posibles. Adicionalmente, un
antivirus puede dar la opción de erradicar un virus
informático de una entidad infectada.

El modelo más primario de las funciones de un
programa antivirus es la detección de su presencia y, en
lo posible, su identificación. La primera técnica
que se popularizó para la detección de virus
informáticos, y que todavía se sigue
utilizando (aunque cada vez con menos eficiencia), es
la técnica de scanning. Esta técnica
consiste en revisar el código de todos los archivos
contenidos en la unidad de almacenamiento -fundamentalmente los
archivos ejecutables- en busca de pequeñas porciones de
código que puedan pertenecer a un virus
informático. Este procedimiento,
denominado escaneo, se realiza a partir de una base de datos
que contiene trozos de código representativos de cada
virus conocido, agregando el empleo de
determinados algoritmos que agilizan los procesos de
búsqueda.

La técnica de scanning fue bastante
eficaz en los primeros tiempos de los virus
informáticos, cuando había pocos y su
producción era pequeña. Este relativamente
pequeño volumen de
virus informáticos permitía que los
desarrolladores de antivirus escaneadores tuvieran tiempo de
analizar el virus, extraer el pequeño trozo de
código que lo iba a identificar y agregarlo a la
base de
datos del programa para lanzar una nueva versión.
Sin embargo, la obsolescencia de este mecanismo de
identificación como una solución antivirus
completa se encontró en su mismo modelo.

El primer punto grave de este sistema radica en que
siempre brinda una solución a posteriori: es
necesario que un virus informático alcance un grado de
dispersión considerable para que sea enviado (por
usuarios capacitados, especialistas o distribuidores del
producto) a
los desarrolladores de antivirus. Estos lo analizarán,
extraerán el trozo de código que lo
identificará, y lo incluirán en la próxima
versión de su programa antivirus. Este proceso puede
demorar meses a partir del momento en que el virus comienza a
tener una dispersión considerable, lapso en el cual
puede causar graves daños sin que pueda ser
identificado.

Además, este modelo consiste en una
sucesión infinita de soluciones parciales y
momentáneas (cuya sumatoria jamás
constituirá una solución definitiva)
, que
deben actualizarse periódicamente debido a la
aparición de nuevos virus.

En síntesis, la técnica de scanning
es altamente ineficiente, pero se sigue utilizando debido a que
permite identificar rápidamente la presencia de los
virus más conocidos y, como son estos los de mayor
dispersión, permite una importante gama de
posibilidades.

Un ejemplo típico de un antivirus de esta clase
es el Viruscan de McAfee, que se verá más
adelante.

En virtud del pronto agotamiento técnico de la
técnica de scanning, los desarrolladores de programas
antivirus han dotado a sus creaciones de métodos para
búsquedas de virus informáticos (y de sus
actividades), que no identifican específicamente al
virus sino a algunas de sus características generales y
comportamientos universalizados.

Este tipo de método
rastrea rutinas de alteración de información que
no puedan ser controladas por el usuario, modificación
de sectores críticos de las unidades de
almacenamiento (master boot record, boot sector, FAT, entre
otras), etc.

Un ejemplo de este tipo de métodos es el que
utiliza algoritmos heurísticos.

De hecho, esta naturaleza de
procedimientos busca, de manera bastante eficiente,
códigos de instrucciones potencialmente pertenecientes a
un virus informático. Resulta eficaz para la
detección de virus conocidos y es una de las soluciones
utilizadas por los antivirus para la detección de nuevos
virus. El inconveniente que presenta este tipo de algoritmo
radica en que puede llegar a sospecharse de muchisimas cosas
que no son virus
. Esto hace necesario que el usuario que lo
utiliza conozca un poco acerca de la estructura del sistema
operativo, a fin de poseer herramientas que le faciliten una
discriminación de cualquier falsa alarma
generada por un método heurístico.

Algunos de los antivirus de esta clase son F-Prot,
Norton Anti Virus y Dr. Solomon's Toolkit.

Ahora bien, otra forma de detectar la presencia de un
virus informático en un sistema consiste en monitorear
las actividades de la PC señalando si algún
proceso intenta modificar los sectores críticos de los
dispositivos de
almacenamiento o los archivos ejecutables. Los programas
que realizan esta tarea se denominan chequeadores de
integridad
.

Sobre la base de estas consideraciones, podemos
consignar que un buen sistema antivirus debe estar
compuesto por un programa detector de virus -que siempre
esté residente en memoria- y un programa que
verifique la integridad
de los sectores críticos del
disco rígido y sus archivos ejecutables. Existen
productos antivirus que cubren los dos aspectos, o bien pueden
combinarse productos diferentes configurados de forma que no se
produzcan conflictos
entre ellos.

Modelo antivirus:

La estructura de un programa antivirus, está
compuesta por dos módulos principales: el primero
denominado de control y el segundo denominado de
respuesta
. A su vez, cada uno de ellos se divide en varias
partes:

  1. Módulo de control: posee la
    técnica verificación de integridad que
    posibilita el registro de cambios en los archivos ejecutables y
    las zonas críticas de un disco rígido. Se trata,
    en definitiva, de una herramienta preventiva para mantener y
    controlar los componentes de información de un disco
    rígido que no son modificados a menos que el usuario lo
    requiera.

Otra opción dentro de este módulo es la
identificación de virus, que incluye diversas
técnicas para la detección de virus
informáticos. Las formas más comunes de
detección son el scanning y los algoritmos, como por
ejemplo, los heurísticos.

Asimismo, la identificación de código
dañino
es otra de las herramientas de
detección que, en este caso, busca instrucciones
peligrosas incluidas en programas, para la integridad de la
información del disco rígido.

Esto implica descompilar (o desensamblar) en forma
automática los archivos almacenados y ubicar sentencias
o grupos de
instrucciones peligrosas.

Finalmente, el módulo de control también
posee una administración de recursos para
efectuar un monitoreo de las rutinas a través de las
cuales se accede al hardware de la computadora (acceso a disco,
etc.). De esta manera puede limitarse la acción de un
programa restringiéndole el uso de estos recursos, como
por ejemplo impedir el acceso a la escritura de zonas
críticas del disco o evitar que se ejecuten funciones de
formato del mismo.

  1. Módulo de respuesta: la función
    alarma se encuentra incluida en todos los programas
    antivirus y consiste en detener la acción del sistema
    ante la sospecha de la presencia de un virus
    informático, e informar la situación a
    través de un aviso en pantalla.

Algunos programas antivirus ofrecen, una vez detectado
un virus informático, la posibilidad de erradicarlo. Por
consiguiente, la función reparar se utiliza como
una solución momentánea para mantener la
operatividad del sistema hasta que pueda instrumentarse una
solución adecuada. Por otra parte, existen dos
técnicas para evitar el contagio de entidades
ejecutables
: evitar que se contagie todo el programa o
prevenir que la infección se expanda más
allá de un ámbito fijo.

Aunque la primera opción es la más
adecuada, plantea grandes problemas de
implementación.

Detección y
prevención
.

Debido a que los virus informáticos son cada
vez más sofisticados, hoy en día es
difícil sospechar su presencia a través de
síntomas como la pérdida de performance. De todas
maneras la siguiente es una lista de síntomas que pueden
observarse en una computadora de la que se sospeche esté
infectada por alguno de los virus más
comunes:

  • Operaciones de procesamiento más
    lentas.
  • Los programas tardan más tiempo en
    cargarse.
  • Los programas comienzan a acceder por momentos a las
    disqueteras y/o al disco rígido.
  • Disminución no justificada del espacio
    disponible en el disco rígido y de la memoria RAM
    disponible, en forma constante o repentina.
  • Aparición de programas residentes en memoria
    desconocidos.

La primera medida de prevención a ser tenida en
cuenta es, como se dijo anteriormente, contar con un sistema
antivirus y utilizarlo correctamente. Por lo tanto, la
única forma de que se constituya un bloqueo eficaz para
un virus es que se utilice con determinadas normas y
procedimientos. Estas normas tienden
a controlar la entrada de archivos al disco rígido de la
computadora, lo cual se logra revisando con el antivirus todos
los disquetes o medios de almacenamiento en general y, por
supuesto, disminuyendo al mínimo posible todo tipo de
tráfico.

Además de utilizar un sistema antivirus y
controlar el tráfico de archivos al disco rígido,
una forma bastante eficaz de proteger los archivos
ejecutables
es utilizar un programa chequeador de
integridad
que verifique que estos archivos no sean
modificados, es decir, que mantengan su estructura. De esta
manera, antes que puedan ser parasitados por un virus
convencional, se impediría su accionar.

Para prevenir la infección con un virus de
sector de arranque
, lo más indicado es no dejar
disquetes olvidados en la disquetera de arranque y contar con
un antivirus. Pero, además, puede aprovecharse una
característica que incorpora el setup de las
computadoras más modernas: variar la secuencia de
arranque de la PC a "primero disco rígido y luego
disquetera
" (C, A). De esta manera, la computadora no
intentará leer la disquetera en el arranque aunque tenga
cargado un disquete.

Algunos distribuidores o representantes de programas
antivirus envían muestras de los nuevos virus argentinos
a los desarrolladores del producto para que los estudien o
incluyan en sus nuevas versiones o upgrades, con la demora que
esto implica.

En consecuencia, la detección alternativa a la
de scanning y las de chequeo de actividad e integridad resultan
importantes, ya que pueden detectar la presencia de un virus
informático sin la necesidad de identificarlo. Y esta es
la única forma disponible para el usuario de detectar
virus nuevos, sean nacionales o extranjeros.

De todas maneras, existe una forma de actualizar la
técnica de scanning
. La misma consiste en
incorporarle al antivirus un archivo conteniendo cadenas de
caracteres ASCII que
sean trozos de código (strings) significativos del
sector vital de cada nuevo virus que todavía no
esté incorporado en la base de datos del
programa.

De todas formas, esta solución será
parcial: la nueva cadena introducida sólo
identificará al virus, pero no será capaz
de erradicarlo.

Es muy importante que los "strings" que se vayan a
incorporar al antivirus provengan de una fuente confiable ya
que, de lo contrario, pueden producirse falsas alarmas o ser
ineficaces.

Algunos de los antivirus que soportan esta cualidad de
agregar strings son Viruscan, F-Prot y
Thunderbyte.

La NCSA (National Computer Security Association,
Asociación Nacional de Seguridad de Computadoras) es la
encargada de certificar productor antivirus.

Para obtener dicha certificación los productos
deben pasar una serie de rigurosas pruebas
diseñadas para asegurar la adecuada protección
del usuario.

Antiguamente el esquema de certificación
requería que se detectara (incluyendo el número
de versión) el 90 % de la librería de virus del
NCSA, y fue diseñado para asegurar óptimas
capacidades de detección. Pero esta metodología no era completamente
eficiente.

Actualmente, el esquema de certificación enfoca
la amenaza a las computadoras empresariales. Para ser
certificado, el producto debe pasar las siguientes
pruebas: 

  1. Debe detectar el 100% de los virus encontrados
    comúnmente. La lista de virus comunes es actualizada
    periódicamente, a medida que nuevos virus son
    descubiertos.
  2. Deben detectar, como mínimo, el 90% de la
    librería de virus del NCSA (más de 6.000
    virus)

Estas pruebas son realizadas con el producto
ejecutándose con su configuración "por
defecto".

Una vez que un producto ha sido certificado, la NCSA
tratará de recertificar el producto un mínimo de
cuatro veces. Cada intento es realizado sin previo aviso al
desarrollador del programa. Esta es una buena manera de
asegurar que el producto satisface el criterio de
certificación.

Si un producto no pasa la primera o segunda prueba, su
distribuidor tendrá siete días para proveer de la
corrección. Si este límite de tiempo es excedido,
el producto será eliminado de la lista de productos
certificados.

Una vez que se ha retirado la certificación a
un producto la única forma de recuperarla es que el
distribuidor envíe una nueva versión completa y
certificable (no se aceptará sólo una
reparación de la falla.

Acerca de la lista de virus de la NCSA, aclaremos que
ningún desarrollador de antivirus puede obtener una
copia. Cuando un antivirus falla en la detección de
algún virus incluido en la lista, una cadena
identificatoria del virus le es enviada al productor del
antivirus para su inclusión en futuras
versiones.

En el caso de los virus polimórficos, se
incluyen múltiples copias del virus para asegurar que el
producto testeado lo detecta perfectamente. Para pasar esta
prueba el antivirus debe detectar cada mutación del
virus.

La A. V. P. D. (Antivirus Product Developers,
Desarrolladores de Productos Antivirus) es una
asociación formada por las principales empresas
informáticas del sector, entre las que se
cuentan:

  • Cheyenne Software
  • I. B. M.
  • Intel
  • McAfee Associates
  • ON Tecnology
  • Stiller Research Inc.
  • S&S International
  • Symantec Corp.
  • ThunderByte
  1. ALGUNOS ANTIVIRUS.
  • DR. SOLOMON'S ANTIVIRUS TOOLKIT.

Certificado por la NCSA. Detecta más de 6.500
virus gracias a su propio lenguaje de
detección llamado VirTran, con una velocidad de
detección entre 3 y 5 veces mayor que los antivirus
tradicionales.

Uno de los últimos desarrollos de S&S es la
tecnología G. D. E. (Generic Decription
Engine, Motor de
Desencriptación Genérica) que permite detectar
virus polimórficos sin importar el algoritmo de
encriptación utilizado.

Permite detectar modificaciones producidas tanto en
archivos como en la tabla de partición del disco
rígido. Para ello utiliza Checksumms
Criptográficos lo cual, sumado a una clave personal de
cada usuario, hace casi imposible que el virus pueda descubrir
la clave de encriptación.

Elimina virus en archivos en forma sencilla y efectiva
con pocas falsas alarmas, y en sectores de buteo y tablas de
partición la protección es genérica, es
decir, independiente del virus encontrado.

Otras características que presenta este
antivirus, son:

  • Ocupa 9K de memoria extendida o
    expandida.
  • Documentación amplia y detallada en español y una enciclopedia sobre los
    virus más importantes.
  • Actualizaciones mensuales o trimestrales de software
    y manuales.
  • Trabaja como residente bajo Windows.
  • A. H. A. (Advanced Heuristic Analysis, Análisis Heurístico
    Avanzado).
  • NORTON ANTIVIRUS.

Certificado por la NCSA. Posee una protección
automática en segundo plano. Detiene
prácticamente todos los virus conocidos y desconocidos
(a través de una tecnología propia denominada
NOVI, que implica control de las actividades
típicas de un virus, protegiendo la integridad del
sistema), antes de que causen algún daño o
pérdida de información, con una amplia
línea de defensa, que combina búsqueda,
detección de virus e inoculación (se
denomina 'inoculación' al método por el cual este
antivirus toma las características principales de los
sectores de booteo y archivos para luego chequear su
integridad. Cada vez que se detecta un cambio en dichas
áreas, NAV avisa al usuario y provee las opciones de
Reparar – Volver a usar la imagen guardada
– Continuar – No realiza cambios – Inocular – Actualizar la
imagen.

Utiliza diagnósticos propios para prevenir
infecciones de sus propios archivos y de archivos
comprimidos.

El escaneo puede ser lanzado manualmente o
automáticamente a través de la
planificación de fecha y hora. También permite
reparar los archivos infectados por virus desconocidos. Incluye
información sobre muchos de los virus que detecta y
permite establecer una contraseña para aumentar
así la seguridad.

La lista de virus conocidos puede ser actualizada
periódicamente (sin cargo) a través de servicios
en línea como Internet, América On Line, Compuserve, The
Microsoft Network o el BBS propio de Symantec, entre
otros.

  • VIRUSSCAN.

Este antivirus de McAfee Associates es uno de
los más famosos. Trabaja por el sistema de scanning
descripto anteriormente, y es el mejor en su estilo.

Para escanear, hace uso de dos técnicas
propias: CMS (Code Matrix Scanning, Escaneo de Matriz de
Código) y CTS (Code Trace Scanning, Escaneo de
Seguimiento de Código).

Una de las principales ventajas de este antivirus es
que la actualización de los archivos de bases de datos
de strings es muy fácil de realizar, lo cual, sumado a
su condición de programa shareware, lo pone al alcance
de cualquier usuario. Es bastante flexible en cuanto a la
configuración de cómo detectar, reportar y
eliminar virus.

  1. CONCLUSIONES.

En razón de lo expresado pueden extraerse
algunos conceptos que pueden considerarse necesarios para tener
en cuenta en materia de
virus informáticos:

  • No todo lo que afecte el normal funcionamiento de una
    computadora es un virus.
  • TODO virus es un programa y, como tal, debe
    ser ejecutado para activarse.
  • Es imprescindible contar con herramientas de
    detección y desinfección.
  • NINGÚN sistema de seguridad es 100%
    seguro. Por eso todo usuario de computadoras debería
    tratar de implementar estrategias de
    seguridad antivirus, no sólo para proteger su propia
    información sino para no convertirse en un agente de
    dispersión de algo que puede producir daños
    graves e indiscriminados.

Para implementar tales estrategias deberían
tenerse a mano los siguientes elementos:

  • UN DISCO DE SISTEMA PROTEGIDO CONTRA ESCRITURA Y
    LIBRE DE VIRUS:
    Un disco que contenga el sistema operativo
    ejecutable (es decir, que la máquina pueda ser arrancada
    desde este disco) con protección contra escritura y que
    contenga, por lo menos, los siguientes comandos:
    FORMAT, FDISK, MEM y CHKDSK (o SCANDISK en versiones recientes
    del MS-DOS).
  • POR LO MENOS UN PROGRAMA ANTIVIRUS
    ACTUALIZADO:
    Se puede considerar actualizado a un antivirus
    que no tiene más de tres meses desde su fecha de
    creación (o de actualización del archivo de
    strings). Es muy recomendable tener por lo menos dos
    antivirus.
  • UNA FUENTE DE INFORMACIÓN SOBRE VIRUS
    ESPECÍFICOS:
    Es decir, algún programa,
    libro o
    archivo de texto que contenga la descripción,
    síntomas y características de por lo menos los
    cien virus más comunes.
  • UN PROGRAMA DE RESPALDO DE ÁREAS
    CRÍTICAS:
    Algún programa que obtenga respaldo
    (backup) de los sectores de arranque de los disquetes y
    sectores de arranque maestro (MBR, Master Boot Record) de los
    discos rígidos. Muchos programas antivirus incluyen
    funciones de este tipo.
  • LISTA DE LUGARES DÓNDE ACUDIR: Una
    buena precaución es no esperar a necesitar ayuda para
    comenzar a buscar quién puede ofrecerla, sino ir
    elaborando una agenda de direcciones, teléfonos y
    direcciones electrónicas de las personas y lugares que
    puedan servirnos más adelante. Si se cuenta con un
    antivirus comercial o registrado, deberán tenerse
    siempre a mano los teléfonos de soporte
    técnico.
  • UN SISTEMA DE PROTECCIÓN RESIDENTE:
    Muchos antivirus incluyen programas residentes que previenen
    (en cierta medida), la intrusión de virus y programas
    desconocidos a la computadora.
  • TENER RESPALDOS: Se deben tener respaldados en
    disco los archivos de datos más importantes,
    además, se recomienda respaldar todos los archivos
    ejecutables. Para archivos muy importantes, es bueno tener un
    respaldo doble, por si uno de los discos de respaldo se
    daña. Los respaldos también pueden hacerse en
    cinta (tape backup), aunque para el usuario normal es
    preferible hacerlo en discos, por el costo que
    las unidades de cinta representan.
  • REVISAR TODOS LOS DISCOS NUEVOS ANTES DE
    UTILIZARLOS:
    Cualquier disco que no haya sido previamente
    utilizado debe ser revisado, inclusive los programas originales
    (pocas veces sucede que se distribuyan discos de programas
    originales infectados, pero es factible) y los que se
    distribuyen junto con revistas de
    computación.
  • REVISAR TODOS LOS DISCOS QUE SE HAYAN
    PRESTADO:
    Cualquier disco que se haya prestado a
    algún amigo o compañero de trabajo, aún
    aquellos que sólo contengan archivos de datos, deben ser
    revisados antes de usarse nuevamente.
  • REVISAR TODOS LOS PROGRAMAS QUE SE OBTENGAN POR
    MÓDEM O REDES:
    Una de las grandes vías de
    contagio la constituyen Internet y los BBS, sistemas en los
    cuales es común la transferencia de archivos, pero no
    siempre se sabe desde dónde se está recibiendo
    información.
  • REVISAR PERIÓDICAMENTE LA COMPUTADORA:
    Se puede considerar que una buena frecuencia de análisis es, por lo menos,
    mensual.

Finalmente, es importante tener en cuenta estas
sugerencias referentes al comportamiento a tener en cuenta
frente a diferentes situaciones:

  • Cuando se va a revisar o desinfectar una computadora,
    es conveniente apagarla por más de 5 segundos y arrancar
    desde un disco con sistema, libre de virus y protegido contra
    escritura, para eliminar virus residentes en memoria. No se
    deberá ejecutar ningún programa del disco
    rígido, sino que el antivirus deberá estar en el
    disquete. De esta manera, existe la posibilidad de detectar
    virus stealth.
  • Cuando un sector de arranque (boot sector) o de
    arranque maestro (MBR) ha sido infectado, es preferible
    restaurar el sector desde algún respaldo, puesto que en
    ocasiones, los sectores de arranque genéricos utilizados
    por los antivirus no son perfectamente compatibles con el
    sistema operativo instalado. Además, los virus no
    siempre dejan un respaldo del sector original donde el
    antivirus espera encontrarlo.
  • Antes de restaurar los respaldos es importante no
    olvidar apagar la computadora por más de cinco segundos
    y arrancar desde el disco libre de virus.
  • Cuando se encuentran archivos infectados, es
    preferible borrarlos y restaurarlos desde respaldos, aún
    cuando el programa antivirus que usemos pueda desinfectar los
    archivos. Esto es porque no existe seguridad sobre si el virus
    detectado es el mismo para el cual fueron diseñadas las
    rutinas de desinfección del antivirus, o es una
    mutación del original.
  • Cuando se va a formatear un disco rígido para
    eliminar algún virus, debe recordarse apagar la
    máquina por más de cinco segundos y
    posteriormente arrancar el sistema desde nuestro disquete
    limpio, donde también debe encontrarse el programa que
    se utilizará para dar formato al disco.
  • Cuando, por alguna causa, no se puede erradicar un
    virus, deberá buscarse la asesoría de un experto
    directamente pues, si se pidiera ayuda a cualquier aficionado,
    se correrá el riesgo de
    perder definitivamente datos si el procedimiento sugerido no es
    correcto.
  • Cuando se ha detectado y erradicado un virus es
    conveniente reportar la infección a algún
    experto, grupo de investigadores de virus, soporte
    técnico de programas antivirus, etc. Esto que en
    principio parecería innecesario, ayuda a mantener
    estadísticas, rastrear focos de
    infección e identificar nuevos virus, lo cual en
    definitiva, termina beneficiando al usuario mismo.

 

Samuel Alexander Escoto

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter