Descargar

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