CAPÍTULO 5 Software de computadoras. OBJETIVOS. Los objetivos de este capítulo son varios: mostrar el concepto de software, señalar la diferencia entre los distintos tipos de software y cuáles son sus funciones, mostrar el concepto y funciones de un sistema operativo, también se estudian los lenguajes de programación, y los fundamentos del proceso de traducción. 1.- INTRODUCCIÓN. Se ha visto en capítulos anteriores el hardware o parte física. En este capítulo vamos a abordar el estudio del software. A medida que la informática a evolucionado, se ha valorado más y más la importancia del software, hasta el punto en que, hoy en día, el software es considerado como la clave del éxito o fracaso de los sistemas basados en computadoras, tanto si se utiliza la computadora para manejar un negocio, controlar la fabricación de un producto o capacitar un sistema. En cualquier caso, el software es el factor que marca la diferencia., lo que distingue a una compañía de su competidora es la suficiencia y oportunidad de la información dada por el software. Ya se ha comentado en los objetivos que el software es una parte principal de los sistemas informáticos. Se intentaba resaltar entonces la importancia que tiene el software, hasta el punto en que todo análisis de sistemas el software es la parte principal, pasando el hardware a ser un mero instrumento para que el software pueda ejecutar sus funciones. Esta es la mejor perspectiva para acercarse al mundo de la informática como usuario. 2.- DEFINICIÓN Y TIPOS DE SOFTWARE. Software o soporte lógico de una computadora es el conjunto de programas asociados a dicha computadora. Dentro de estos programas se incluyen los suministrados por el constructor, los adquiridos en empresas especializadas en venta de programas, y los redactados por los propios usuarios de la computadora. Software o soporte lógico o logical es la parte de la Informática que estudia todo lo relativo a la programación de las computadoras, tanto desde el punto de vista de los programas como de los datos. Los programas o componentes que forman el software de una computadora se pueden agrupar en tres apartados: a) Software de control o sistema de explotación. Es el conjunto de programas que controla el funcionamiento de los programas que se ejecutan y administra los recursos hardware, facilitando el uso de la computadora de la forma más eficiente posible. Dentro de este apartado se incluye el sistema operativo. b) Software de tratamiento. Contiene los programas con los que los usuarios utilizan los recursos (hardware, sistema operativo, traductores, etc.), para resolver sus problemas o realizar sus aplicaciones. Estas aplicaciones pueden ser: cálculos científicos, aplicaciones de gestión administrativa, almacenamiento y recuperación de la información, etc. (Sección 1.3). El software de tratamiento incluye a su vez dos tipos: software de programación o de servicio y software de aplicación. Capítulo 5: Software de computadoras. Página 2. El software de programación o de servicio contiene programas o utilidades que facilitan la construcción de las aplicaciones de los usuarios, sea cual sea la naturaleza de éstas. Incluye herramientas tales como intérpretes, compiladores, editores de textos, módulos de gestión de archivos y cargadores/montadores. El software de aplicación incluye programas relacionados con aplicaciones específicas, como pueden ser: procesadores de textos, bibliotecas de programas para problemas estadísticos (por ejemplo, BMDP o SPSS) o de cálculo numérico (por ejemplo, IMSL o MATH-PACK), sistemas de administración de archivos, sistemas de administración de bases de datos, etc. También aquí se incluyen los propios programas realizados por los usuarios. Entre los programas de aplicación es común incluir, entre otros, los que se describen a continuación: Procesador de textos. Permite componer textos (informes, periódicos, monografías, libros y documentos en general) con una gran calidad de presentación (similar a los escritos hechos a imprenta). También es usual que los procesadores de texto contengan diccionarios para poder consultar la grafía o sinónimos de palabras. Hoja electrónica u hoja de cálculo. Es una aplicación que permite definir una retícula con filas y columnas. Cada intersección de fila y columna representa un campo (numérico o no) que se denomina celda. Con el lenguaje de utilización de la hoja electrónica puede hacerse que una celda sea función de otra u otras. Una vez definida una hoja electrónica e introducidos datos en la misma, puede salvarse en disco para usarla posteriormente (leerla, modificarla, listarla, etc.). Sistema de administración de archivos y de bases de datos. Permite definir, generar, actualizar y consultar información contenida en archivos o bases de datos (Capítulo 6). Agenda electrónica. Posibilita que los usuarios de la computadora introduzcan en ella y consulten información acerca de sus ocupaciones o compromisos (entrevistas, horas de reuniones,…), todo ello dentro de una estructura o tabla días/horas. Correo electrónico. Tiene por objeto transmitir información (mensajes cortos) entre los distintos usuarios de una computadora o red de computadoras, garantizando que el control de los contenidos de los mensajes recaiga sobre la persona receptora. Gráficos y dibujos. En este apartado se incluyen paquetes de rutinas gráficas (por ejemplo, GKS), programas de dibujo, programas de diseño con ayuda de computadora (CAD) y paquetes o programas de representación de datos (gráficas comerciales o científicas). Comunicaciones. Esta aplicación suele incluir protocolos de comunicaciones así como programas emuladores de terminales, y permite a la computadora conectarse en una red como terminal de otra, transferir archivos, etc. Existe una gran cantidad de paquetes comerciales para las aplicaciones citadas. Estos paquetes han adquirido una gran relevancia (por su amplia difusión) y, aunque el ámbito de uso de las mismas supera con creces el campo de la gestión administrativa, al conjunto de dichas aplicaciones cuando está integrado suele denominarse oficina electrónica o paquete integrado de ofimática. La denominación paquete o software integrado hace referencia a lo siguiente: Las distintas aplicaciones o utilidades se diseñan con un objetivo y filosofía de utilización común. Existe una cooperación entre los distintos módulos para conseguir un fin compartido. Los archivos creados por cualquiera de las aplicaciones pueden ser utilizados por las demás. Es decir, existe una compatibilidad de información de una aplicación a otra. Capítulo 5: Software de computadoras. Página 3. Dentro de una aplicación se puede llamar a otra, de forma que unas aplicaciones pueden auxiliar a otras. Así, por ejemplo, un software integrado de oficina electrónica permite operaciones tales como: 1. Utilizar el procesador de texto para componer un mensaje para el correo electrónico o para editar un campo de una hoja electrónica. 2. Combinar un texto generado con el procesador de textos con un archivo creado por el sistema de gestión de archivos para generar directamente cartas personalizadas. c) Software de diagnóstico y mantenimiento. Está formado por programas a utilizar por las personas responsables del mantenimiento y puesta al día del hardware y del software de la computadora. Con estos programas se pretende, por ejemplo, localizar automáticamente las averías de un determinando dispositivo o circuito, o las causas de un mal funcionamiento de algún módulo del sistema operativo. En este tercer grupo de programas del software de una computadora también incluimos los de generación y mantenimiento del sistema operativo. 2.1.- Características del software. ¿Que diferencia el software de otras cosas que el hombre puede construir? .Veamos, para ello, algunas de sus características, [PRE 93]. El software no se fabrica, se desarrolla. A diferencia de otros productos, el software no se fabrica en el sentido clásico. Los costes del software son mayoritariamente costes de ingeniería, en lugar de costes de producción, donde residen básicamente los costes de, por ejemplo, productos industriales, incluido el hardware. Figura 1.- Tasa ideal de fallos del software. El software no se estropea. Un problema concreto, con un enunciado concreto, se resuelve hoy y mañana con el mismo algoritmo, es decir, con la misma secuencia de pasos. Si el programa está bien confeccionado, y soluciona el problema adecuadamente, no existe la posibilidad de que el programa se estropee y deje de proporcionar los resultado deseados. La tasa de fallos ideal del software se muestra en la Figura 1, inicialmente es alta ya medida que se depura el programa se estabiliza a valores casi nulos. Sin embargo, aunque el software no se estropea, si que sufre un deterioro. Veamos el porqué. Cuando se confecciona un programa que soluciona un problema se plantea en unos términos concretos. Sin embargo, con el paso del tiempo, al detectar fallos se procede a su corrección, lo que puede provocar nuevos fallos. Además, puede ocurrir que las condiciones iniciales cambien, y se desee modificar el funcionamiento del software. Esto también puede introducir nuevos fallos en el software, de forma que la tasa de fallos ideal reflejada en la Figura 1 se convierte en la curva de la Figura 2, donde puede observarse que la tasa de fallo aumenta con el tiempo, es decir, el software se deteriora. Capítulo 5: Software de computadoras. Página 4. El software se construye a medida, en lugar de ensamblar componentes. Generalmente, salvo raras excepciones, los diseños industriales se realizan de forma modular , es decir, se diseñan módulos que posteriormente se ensamblan para componer otros productos. En el caso del software la regla es la excepción industrial, lo que comporta una baja modularidad y poca productividad a la hora de realizar nuevos proyectos, puesto que de cada vez se parte de cero. Figura 2.- Tasa real de fallos del software. Aunque las tecnologías orientadas a objetos se han convertido en la década de los noventa en uno de los motores clave de la industria del software. El desarrollo de programas orientados a objetos es un enfoque diferente del mundo informático. Implica la creación de modelos del mundo real y la construcción de programas informáticos basados en esos modelos. 3.- LENGUAJES DE PROGRAMACION. Un lenguaje de programación es un conjunto de símbolos y de reglas para combinarlos, que se usan para expresar algoritmos. Los lenguajes de programación, al igual que los lenguajes que usamos para comunicamos, poseen un léxico (vocabulario o conjunto de símbolos permitidos), una sintaxis, que indica cómo realizar construcciones del lenguaje y una semántica, que determina el significado de cada construcción correcta. Los lenguajes de programación, o lenguajes de alto nivel, están específicamente diseñados para programar computadoras. Sus características fundamentales son: Son independientes de la arquitectura física de la computadora. Por tanto, no obligan al programador a conocer los detalles de la computadora que usa, y permiten usar los mismos programas en diferentes computadoras, con distinto lenguaje máquina (portabilidad). Hay normalizaciones de lenguajes realizadas por organismos de estandarización (principalmente ANSI e ISO), las cuales tratan de garantizar la portabilidad de los programas. Normalmente, una sentencia en un lenguaje de alto nivel da lugar; al ser traducida a varias instrucciones en lenguaje máquina. Utilizan notaciones cercanas a las habituales en el ámbito en que se usan. Con estos lenguajes las operaciones se expresan con sentencias o frases muy parecidas al lenguaje matemático o al lenguaje natural. Por los motivos antes aducidos, en los lenguajes de programación se utilizan por lo general palabras o términos en inglés. Como consecuencia de este alejamiento de la máquina y acercamiento a las personas, los programas escritos en lenguajes de programación no pueden ser directamente interpretados por la computadora, siendo necesario realizar previamente su traducción a lenguaje máquina. Hay dos tipos de traductores de lenguajes de programación, que vamos a considerar en las siguientes secciones: los compiladores y los intérpretes. Capítulo 5: Software de computadoras. Página 5. 4.- TIPOS DE LENGUAJES DE PROGRAMACIÓN. Los lenguajes de programación se pueden clasificar atendiendo a varios criterios. Un criterio simple es el nivel. El nivel hace referencia a lo próxima que la forma de expresar las sentencias esté al hombre (al lenguaje natural), o a la máquina (al lenguaje de ceros y unos de los circuitos electrónicos). Si el lenguaje es parecido al lenguaje máquina, el lenguaje se denomina de bajo nivel. Si el lenguaje se aproxima al lenguaje natural, el lenguaje se denomina de alto nivel. Considerando el nivel, y ordenados de mayor a menor nivel, los lenguajes de programación se pueden clasificar en: Lenguajes declarativos. En los lenguajes declarativos o de órdenes, los programas están formados por sentencias que ordenan “qué es lo que se quiere hacer”, no teniendo el programador que indicar a la computadora el proceso detallado, algoritmo, de “cómo hacerlo”. Aquí se incluyen ciertos lenguajes especializados, para propósitos muy específicos, tales como recuperación de la información en bases de datos (NATURAL, SQL o IMS), etc. Lenguajes de alto nivel. Son los más usados en la programación y poseen una gramática rica, parecida a la del hombre, que facilita la expresión de los algoritmos. Están orientados más a las personas que a las máquinas. Atendiendo al estilo de programación, se pueden clasificar en dos grandes grupos: a) Lenguajes basados en la asignación de valores (Lenguajes imperativos o procedurales). Se fundamentan en el uso de variables para almacenar valores, y en la realización de operaciones con los datos almacenados. La mayoría de los lenguajes son de este tipo: FORTRAN, BASIC, COBOL, Pascal, Modula, ADA, C, etc. b) Lenguajes basados en la definición de funciones o relaciones. No usan instrucciones de asignación (sus variables no almacenan valores). Los programas están formados por una serie de definiciones de funciones (lenguajes funcionales, como LISP) o de predicados (lenguajes de programación lógica, como PROLOG). Lenguajes ensambladores. Son lenguajes con una gramática pobre, orientada a la máquina más que al hombre. Cada procesador tiene su propio lenguaje ensamblador. Lenguajes máquinas. Son los lenguajes que entienden las unidades de control de las computadoras, cada tipo procesador tiene su propio lenguaje máquina. Desde el punto de vista del campo de aplicación, [Tucker 1987] hace la siguiente distribución de los once principales lenguajes de programación de la actualidad: Aplicaciones científicas. Predominan en ellas el tratamiento de (o cálculos con) números y matrices. Los algoritmos son de tipo matemático (cálculo numérico, estadística, etc.). Lenguajes adecuados para este tipo de problemas son el FORTRAN, APL y Pascal. Aplicaciones en procesamiento de datos. Aquí predominan problemas de creación, mantenimiento, consulta y listado de datos, organizados en registros, archivos y bases de datos. Se incluyen en este apartado aplicaciones de gestión empresarial tales como programas de nómina, contabilidad, facturación, inventario, control de producción y control de ventas. Lenguajes aptos para este tipo de problemas son el COBOL y PL/I. Aplicaciones de tratamiento de textos. Principalmente relacionados con la manipulación de textos en lenguaje natural. Lenguajes adecuados para ello son el SNOBOL y el C. Aplicaciones en inteligencia artificial, o realización de programas que emulan el comportamiento inteligente: algoritmos de juegos (ajedrez, etc.), programas para comprender el lenguaje natural, visión artificial, robótica y sistemas expertos (diagnóstico médico, etc. ). Los lenguajes que se suelen utilizar en estos casos son el LISP y PROLOG. Capítulo 5: Software de computadoras. Página 6. Aplicaciones de programación de sistemas, o programación de módulos de sistemas operativos, compiladores, ensambladores, intérpretes y, en general, aquellos de interfaz entre el hardware y los usuarios. Tradicionalmente se utilizaban para estos cometidos lenguajes ensambladores, pero en la actualidad se están mostrando muy adecuados tos lenguajes Ada, C, y Modula-2. 5.- TRADUCTORES: COMPILADORES E INTERPRETES. Para facilitar el uso de las computadoras se han desarrollado lenguajes de programación que permiten utilizar una simbología y una terminología próximas a las utilizadas tradicionalmente en la descripción de problemas. Como la computadora puede interpretar y ejecutar únicamente código máquina, existen programas traductores, que traducen programas escritos en lenguajes de programación a lenguaje máquina. Un traductor es un programa que recibe como entrada un texto en un lenguaje de programación concreto y produce, como salida, un texto en lenguaje máquina equivalente. El programa inicial se denomina programa fuente y el programa obtenido, programa objeto. En la Figura 3 se representa un programa para obtener el valor medio de una serie de datos, redactado en Pascal. Este programa fuente lo utiliza el traductor como conjunto de datos que debe procesar, ya partir de él genera como resultado el programa objeto. Figura 3.- Traducción de un programa escrito de un lenguaje fuente a un lenguaje objeto. La traducción por un compilador, compilación, consta de dos etapas fundamentales, que a veces no están claramente diferenciadas a lo largo del proceso: la etapa de análisis del programa fuente y la etapa de síntesis del programa objeto (Figura 4). Cada una de estas etapas conlleva la realización de varias fases. El análisis del texto fuente implica la realización de un análisis del léxico, de la sintaxis y de la semántica. La síntesis del programa objeto conduce a la generación de código y su optimización. La compilación es un proceso complejo y que consume a veces un tiempo muy superior a la propia ejecución del programa. En cualquiera de las fases de análisis, el compilador puede dar mensajes sobre los errores que detecta en el programa fuente, cancelando en ocasiones la compilación, para que el usuario realice las correcciones oportunas en el archivo fuente. Figura 4.- Fases en la traducción de un programa fuente a un programa objeto, por un compilador. Capítulo 5: Software de computadoras. Página 7. 5.1.- Compiladores e interpretes. Un compilador traduce un programa fuente, escrito en un lenguaje de alto nivel, a un programa objeto, escrito en lenguaje ensamblador o máquina. El programa fuente suele estar contenido en un archivo, y el programa objeto puede almacenarse como archivo en memoria masiva para ser procesado posteriormente, sin necesidad de volver a realizar la traducción. Una vez traducido el programa, su ejecución es independiente del compilador, así, por ejemplo, cualquier interacción con el usuario solamente estará controlada por el sistema operativo (Figura 5). Figura 5.- Al compilar un texto fuente se crea un programa, cuya ejecución es independientemente del compilador. Un intérprete hace que un programa fuente escrito en un lenguaje vaya, sentencia a sentencia, traduciéndose y ejecutándose directamente por la computadora. El intérprete capta una sentencia fuente, la analiza e interpreta dando lugar a su ejecución inmediata, no creándose, por tanto, un archivo o programa objeto (como hace el compilador) a almacenar en memoria masiva para posteriores ejecuciones, Por tanto, la ejecución del programa está supervisada por el intérprete (Figura 6). Figura 6.- Esquema de la ejecución de un programa con un interprete. En la práctica el usuario crea un archivo con el programa fuente. Esto suele realizarse con un editor específico del propio intérprete del lenguaje. Según se van almacenando las instrucciones simbólicas, se analizan y se producen los mensajes de error correspondientes; así, el usuario puede proceder inmediatamente a su corrección. Una vez creado el archivo fuente el usuario puede dar la orden de ejecución y el intérprete lo ejecuta línea a línea. Siempre el análisis antecede inmediatamente a la ejecución. Cada vez que utilicemos un programa tenemos que volver a analizarlo, ya que en la traducción no se genera un archivo objeto que poder guardar en memoria masiva (y utilizarlo en cada ejecución). Con un compilador, aunque la traducción sea más lenta, ésta sólo debe realizarse una vez (ya depurado el programa) y cuando deseamos ejecutar un programa, ejecutamos el archivo objeto, que se tradujo previamente. Los intérpretes, a pesar de los inconvenientes anteriores, son preferibles a los compiladores cuando el número de veces que se va a ejecutar el programa es muy bajo y no hay problemas de velocidad; además, con ellos puede ser más fácil desarrollar programas. Esto es así porque, normalmente, la ejecución de un programa bajo un intérprete puede interrumpirse en cualquier momento para conocer los valores de las distintas variables y la instrucción fuente que acaba de ejecutarse. cuando esto se hace, se tiene una gran ayuda para la localización de errores en el programa. Con un programa compilador esto no se puede realizar, salvo que el programa se ejecute bajo el control de un programa especial de ayuda denominado depurador (“debugger”). Además, con un intérprete, cuando se localiza un error Capítulo 5: Software de computadoras. Página 8. sólo debe modificarse este error y volver a ejecutar a partir de la instrucción en cuestión. En cambio, con un compilador, si se localiza un error durante la ejecución, el programador debe corregir las instrucciones erróneas sobre el archivo fuente (no sobre el objeto), y volver a compilarlo en su totalidad. Obviamente, los intérpretes resultan más pedagógicos para aprender a programar, ya que el alumno puede detectar y corregir más fácilmente sus errores. Existen en la actualidad traductores (por ejemplo, Turbo Pascal) que en cierta medida disponen de la ventajas tanto de los intérpretes, como de los compiladores. Estos traductores se denominan compiladores interactivos o increméntales. Un compilador interactivo es un sistema que permite la edición, compilación, ejecución y depuración de programas escritos en un determinado lenguaje de alto nivel. Pueden presentar esencialmente las siguientes ventajas: Es muy cómoda la creación y depuración del programa, puesto que la iteración edicióncompilación-ejecución no implica ejecutar distintos programas desde el sistema operativo. Permite que el compilador, durante la edición, realice parte de las comprobaciones, y en algunos casos la traducción a código intermedio, lo que permite detectar con antelación la mayor parte de los tipos de error. Al realizar una modificación puede no ser necesario volver a traducir todo el programa, si no sólo la parte implicada en el cambio (por eso el nombre de “increméntales”). Existen lenguajes cuyos traductores se idearon como intérpretes (BASIC, APL, LISP, y PROLOG), y otros como compiladores (FORTRAN, COBOL, ALGOL, SNOBOL, PL/I, C, MODULA, y ADA). No obstante, para un lenguaje dado, pueden existir tanto compiladores como intérpretes (BASIC, FORTRAN, LISP, y SNOBOL). 6.- DEFINICION DE SISTEMA OPERATIVO. Un sistema operativo es un programa (o conjunto de programas) de control que tiene por objeto facilitar el uso de la computadora y conseguir que ésta se utilice eficientemente. Básicamente, un sistema operativo cumple dos funciones: Administrar recursos.- Es un programa de control, ya que se encarga de gestionar y asignar los recursos hardware a los usuarios. Controla los programas de los usuarios y los dispositivos de E/S. Pensemos en una computadora que es utilizada desde diversos terminales por varios usuarios. Los recursos hardware son: la CPU, la memoria principal, discos y otros periféricos. Obviamente, si varios usuarios están utilizando la misma computadora, debe haber algo o alguien que asigne los recursos y evite los conflictos que puedan surgir cuando dos programas requieran los mismos elementos (por ejemplo una unidad de cinta, o la impresora). Esta es una de las funciones del sistema operativo. El sistema operativo también hace que la computadora se utilice eficientemente. Por ejemplo, en los sistemas de multitarea, que se verán más adelante, el sistema operativo hace que, cuando un programa esté dedicado a una operación de entrada o salida, la CPU pase a atender a otro programa. El sistema operativo hace que ello ocurra así. Con este ejemplo se pone de manifiesto cómo un sistema operativo de multitarea aumenta la eficiencia o rendimiento de la computadora. Figura 7.- Estructura se un sistema operativo. Capítulo 5: Software de computadoras. Página 9. Proporciona al usuario una máquina virtual.- El sistema operativo facilita la utilización de la computadora, encargándose de ocultar al usuario la realidad del hardware (facilitar al usuario una máquina virtual) y presentarle un mundo más amable, en el que se encuentre más cómodo. Veamos un ejemplo de cómo lo hace. Cada dispositivo de E/S, para ser utilizado, requiere varias instrucciones máquina que establezcan un “diálogo” entre la computadora central y el periférico, enviando o captando, respectivamente, el dato de salida o entrada. Estas instrucciones dependen mucho de las características concretas del periférico. Por otra parte, para un dispositivo dado, estas instrucciones u operaciones son comunes para todos los programas que los usen, según su naturaleza (científica, de gestión o técnica). El sistema operativo, con objeto de facilitar el trabajo de los programadores, contiene módulos de gestión de entradas/salidas que evitan a los usuarios tener que incluir esas instrucciones cada vez que hacen operaciones de E/S. Se puede decir que esos programas del sistema operativo hacen “transparente” al usuario las características hardware concretas de los dispositivos. 6.1.- Conceptos básicos de sistemas operativos. Respecto al modo de funcionamiento de los sistemas operativos, podemos analizar los siguientes términos: Tiempo compartido. Este término hace referencia a la posibilidad que puede ofrecer un sistema operativo de atender a varios usuarios a la vez, de forma que cada uno de ellos tenga la impresión de que es el único usuario. Esta posibilidad se basa en la gran velocidad a la que operan los componentes del hardware de las computadoras, cuya escala de tiempo es mucho más pequeña que la nuestra. Así, el sistema operativo reparte el tiempo de uso de la máquina entre los distintos usuarios de forma que a cada uno se le atiende un periodo de tiempo. Tiempo real. Este término hace referencia un tipo de procesamiento en que los requisitos de tiempo son muy estrictos, es decir, el sistema debe atender a las diversas peticiones que le llegan en un periodo de tiempo predeterminado. Como ya hemos indicado anteriormente, este tipo de requerimientos se dan en determinado sistemas, como pueden ser centrales nucleares o sistemas de navegación. Multitarea. Este término hace referencia a la posibilidad de que una misma computadora atienda varias tareas de forma simultánea, bien mediante la intercalación de instrucciones, bien mediante la utilización de varios procesadores. En segundo lugar, y relativos a la estructura de un sistema operativo podemos estudiar los siguientes términos: Kernel o núcleo. Parte más interna del sistema operativo encargado de la interacción directa con el hardware y de proporcionar los servicios básicos de administración de recursos. Driver. Parte del sistema operativo que se encarga de interactuar directamente con el hardware de los distintos periféricos, tales como impresora, discos, etc. Interprete de comandos. Parte del sistema operativo que se encara de la interacción con el usuario, interpretando y ejecutando sus órdenes. Envía a los otros componentes del sistema los mensajes correspondientes para que se lleven a cabo las instrucciones del usuario. Capítulo 5: Software de computadoras. Página 10. 7.- EVOLUCIÓN DE LOS SISTEMAS OPERATIVOS. Cuando aparecieron los primeros ordenadores, hacía 1943, la programación de estos era hecha íntegramente en código máquina, lo cual resultaba una tarea extremadamente pesada: cada vez que se escribía un nuevo programa, además de escribir el algoritmo adecuado era preciso añadir todo el código necesario para que el ordenador pudiese leer datos desde una cinta perforada, imprimir en un teletipo, etc. Dado que, en general, todas estas rutinas eran exactamente iguales para todos los programas que se hacían, pronto los programadores de aquellas máquinas aprendieron a organizarlas en bibliotecas de rutinas. Cada vez que había que escribir un nuevo programa, sólo tenían que ir a su libreta y copiar las rutinas de E/S que necesitaban, lo cual les simplificaba un poco el trabajo. Otro sistema era el que la propia empresa que fabricaba el ordenador incluyese un paquete de fichas perforadas con dichas rutinas, de modo que el programador sólo tenía que coger las que le interesasen y añadirlas estratégicamente en su paquete. El siguiente paso fue generalizar este conjunto de rutinas. La idea era incluir juntas todas las rutinas necesarias para acceder al hardware, y hacerlas accesibles a cualquier programador en forma de llamadas a subrutina. De este modo, cada vez que se hacía un programa no era preciso incluir en él todas esas rutinas, había nacido el sistema operativo. Los primeros sistemas operativos (si es que podían recibir ese nombre) no eran más que un conjunto de subrutinas que ayudaban al programador, ofreciéndole servicios básicos como lectura de caracteres desde un teletipo, escritura en tambor, disco, etc. Sin embargo, pronto se vio la necesidad de un nuevo enfoque. Los ordenadores eran caros, y su mantenimiento también, por lo que sólo algunas grandes empresas y universidades podían disponer de ellos. Para amortizarlos, se alquilaba tiempo de proceso, de modo que se podía ir allí con un programa, ejecutarlo, y pagar por el tiempo que le llevase hacerlo a la computadora. El primer problema que había era que se tardaba mucho en cargar cada programa. Cuando la computadora terminaba de ejecutar uno, el operador tenía que insertar el siguiente, lo cual era una tarea bastante pesada y larga. Durante el tiempo que se hacía esto, el ordenador estaba totalmente inactivo, se estaba desperdiciando tiempo. Fue entonces cuando surgieron los sistemas de proceso por lotes (batch), hacía 1963. En los sistemas de proceso por lotes, los programas se almacenan en una cinta, todos seguidos. Cada vez que la computadora terminaba de ejecutar un programa, leía el siguiente de dicha cinta. Si llegaba alguien con un programa, éste se añadía a continuación del último que hubiese, mientras la computadora ejecutaba el que ya tenía en memoria. El coste de mantenimiento del nuevo sistema era ligeramente superior, pues había que añadir al sistema el lector de cintas en donde se escribían los programas; pero al poder ejecutar muchos más programas en el mismo tiempo (no se perdía parte de este en cargar los programas), el precio de alquiler bajó drásticamente, permitiendo que más gente tuviese acceso a las computadoras. Es en los sistemas de proceso por lotes donde empieza a aparecer realmente lo que hoy conocemos como sistema operativo: un programa principal que es el que va cargando los distintos programas desde la cinta, les cede el control de la CPU pero ofreciéndoles una serie de servicios de E/S, y cuando terminan, recupera el control del ordenador. Pronto los programadores se dieron cuenta de que había aún más tiempos muertos de los que parecía: si una computadora tenía que leer algo de una cinta o tarjeta con datos, al ser el sistema era mecánico tardaba mucho tiempo en encontrarlo (mucho tiempo en relación a la computadora). También, se empezaban a utilizar terminales para dar entrada de datos en tiempo real la computadora, y el tiempo que ésta esperaba a que el usuario pulsase cada tecla también era grande. Entonces se empezó a pensar en los sistemas operativos multitarea. Capítulo 5: Software de computadoras. Página 11. La idea consistía en tener varios programas simultáneamente en memoria, si bien, como el ordenador es único, sólo uno estaría activo en cada momento. Cuando dicho programa hace una operación de E/S en la que se pierde tiempo de CPU (como leer una tarjeta, por ejemplo), mientras la mecánica realiza la operación de búsqueda y lectura, la computadora conmuta al siguiente programa que tiene en memoria, el cual continuará ejecutándose hasta que haga una operación de E/S. Cuando se llega al último, se vuelve a empezar, y para ese momento, la operación de E/S pedida por el primer programa ya estará lista, con lo que podrá seguir su ejecución. De esta forma, hemos aprovechado un tiempo que antes perdíamos. Finalmente, llegamos a los sistemas distribuidos. Generalmente, lo que tenemos es una red de ordenadores (por ejemplo, en una universidad es normal tener una gran cantidad de PC's) conectados entre sí. Si nos fijamos, normalmente sólo unos cuantos están en uso en cada momento, y el resto simplemente se dedican, por ejemplo, a ejecutar un bonito salvapantallas. En otras palabras, estamos desperdiciando una vez más tiempo de proceso. Para solucionarlo, se han ideado los sistemas operativos distribuidos. Estos sistemas operativos son el siguiente paso en la evolución de los sistemas operativos multitarea. Los sistemas operativos distribuidos son mucho más complejos, ya que permiten que un usuario ejecute, de forma transparente, uno o varios programas en varios procesadores trabajando simultáneamente y, posiblemente, con datos distribuidos en diferentes servidores de archivos, lo cual requiere que el sistema operativo disponga de sofisticados algoritmos de planificación que paralelicen adecuadamente el trabajo a realizar. 8.- VIRUS INFORMÁTICOS. Definiciones de virus hay tantas como preguntas sin respuesta exacta. Veamos, pues, si cabe la posibilidad de concretar algunos requisitos que cumplen estos agentes víricos: Son programas de computadora. Su principal cualidad es la de poder autorreplicarse. Intentan ocultar su presencia hasta el momento de la explosión. Producen efectos dañinos en el “huésped”. Si exceptuamos el primer punto, los restantes podrían aplicarse también a los virus biológicos. El parecido entre biología y tecnología puede llegar a ser en ocasiones ciertamente abrumador. Como el cuerpo humano, el computadora puede ser atacado por agentes infecciosos capaces de alterar su correcto funcionamiento o incluso provocar daños irreparables en ciertas ocasiones. Por ello comúnmente se usan términos biológicos para referirse a virus informáticos. Esto es debido a que pienso que , realmente, los virus informáticos son auténticas imitaciones de sus hermanos biológicos. Un virus es un agente peligroso que hay que manejar con sumo cuidado. La “contención” es la primera regla de oro. Desarrollemos un poco los puntos expuestos antes: Un virus informático es un programa de computadora, tal y como podría ser un procesador de textos, una hoja de cálculo o un juego. Obviamente ahí termina todo su parecido con estos típicos programas que casi todo el mundo tiene instalados en sus computadoras. Un virus informático ocupa una cantidad mínima de espacio en disco ( el tamaño es vital para poder pasar desapercibido ), se ejecuta sin conocimiento del usuario y se dedica a autorreplicarse, es decir, hace copias de sí mismo e infecta archivos, tablas de partición o sectores de arranque de los discos duros y disquetes para poder expandirse lo más rápidamente posible. Ya se ha dicho antes que los virus informáticos guardan cierto parecido con los biológicos y es que mientras los segundos infectan células para poder replicarse los primeros usan archivos para la misma función. En ciertos aspectos es una especie de “burla tecnológica” hacia la Naturaleza. Mientras el virus se replica intenta pasar lo más desapercibido que puede, intenta evitar que el “huésped” se dé cuenta de su presencia hasta que llega el momento de la “explosión”. Es el Capítulo 5: Software de computadoras. Página 12. momento culminante que marca el final de la infección y cuando llega suele venir acompañado del formateo del disco duro, borrado de archivos o mensajes de protesta. No obstante el daño se ha estado ejerciendo durante todo el proceso de infección, ya que el virus ha estado ocupando memoria en el computadora, ha ralentizado los procesos y ha “engordado” los archivos que ha infectado. 8.1.- ¿ Por que se hace un virus ? La gran mayoría de los creadores de virus lo ven como un hobby, aunque también otros usan los virus como un medio de propaganda o difusión de sus quejas o ideas radicales, como por ejemplo el virus Telefónica, que emitía un mensaje de protesta contra las tarifas de esta compañía a la vez que reclamaba un mejor servicio, o el famosísimo Silvia que sacaba por pantalla la dirección de una chica que al parecer no tuvo una buena relación con el programador del virus. En otras ocasiones es el orgullo, o la competitividad entre los programadores de virus lo que les lleva a desarrollar virus cada vez más destructivos y difíciles de controlar. Pero que afortunadamente se están desarrollando mejores antivirus. 8.2.- Tipos de virus. Cuando hicieron su aparición, una primera clasificación útil de los virus era según su emplazamiento: de boot y partición, infecta boot y partición de discos duros y disquetes. de archivo, infectan archivos ejecutables y, la nueva generación, también infecta archivos de datos. companion, infectan archivos .EXE creando un .COM del mismo nombre. multipartitos, infectan tanto archivos, como sectores boot, partición, dispositivos drivers,... En la actualidad, esta diferenciación ya no es significativa, y podemos distinguir entre: Virus de macro. Los primeros virus capaces de extenderse a gran velocidad, ya que infectan las plantillas de los archivos de datos y éstos se intercambian mucho más a menudo que los ejecutables. Virus en Internet. La difusión de Internet propicia entornos de trabajo abiertos para las empresas haciendo sus datos más vulnerables a las amenazas de virus. Éstos pueden llegar a través de archivos adjuntos o bien bajando archivos infectados de páginas Web (entre ellos, OCX). Virus en mensajes de correo. Se difunden también a gran velocidad al transmitir por correo electrónico archivos infectados. Un concepto debe quedar claro, todos esos rumores de que hay correos que con sólo abrirlos nos pueden destruir toda la información de nuestro disco duro, todo eso es mentira, porque precisamente el correo electrónico no se ejecuta por si mismo. Sí es posible que recibamos un programa infectado con un virus pero sólo pasará a tener efecto cuando se ejecute desde el shell del DOS o pinchándole al icono en el Windows, etc., pero habremos de ejecutarlo ya desde nuestro ordenador. Capítulo 5: Software de computadoras. Página 13. 8.3.- ¿Cómo protegerse de los virus informáticos? Copias de seguridad. Realice copias de seguridad frecuentes. recuerde, el software se puede comprar de nuevo, su información sólo usted puede protegerla, y su pérdida le ocasionará graves daños. Programa Antivirus. Mantenga su antivirus actualizado con toda la frecuencia que le sea posible. Un antivirus sin actualizar no sirve como defensa ante los virus de nueva generación. Virus a través de correo electrónico. Un mensaje de correo puede incorporar un virus en una macro. Al abrir un mensaje que incluya macros, asegúrese de que las ha desactivado antes de continuar. Tenga configurados sus programas para que le avisen antes de abrir un archivo que contenga macros. Por ejemplo, Excel y Word tienen un revisor interno que chequea la existencia de macros. Un mensaje de correo puede incorporar un virus en un script de Visual Basic y en HTML. Es muy parecido a las macros. Hay que desactivar la opción de ejecutar los scripts en el navegador o en el procesador de textos. Si recibe algún mensaje de alguien a quien no conoce y ese mensaje contiene un archivo adjunto, no abra ese archivo hasta que esté seguro de que no contiene ningún virus. 8.4.- ¿Qué hacer ante una infección de virus informáticos? Si a pesar de todo, sufre una infección de virus, siga las siguientes recomendaciones: Lo primero de todo, evitar el pánico. Informar a los responsables de seguridad informática. Si se trata de una red, comprobar en primer lugar el servidor y después las estaciones de trabajo. Aislar el PC y evitar el intercambio de disquetes y CD's con otros PC's. No enviar mensajes ni archivos a través de la red o de Internet. Comprobar que existen copias de seguridad actualizadas y, si no es así, hacerlas inmediatamente, aunque el PC ya esté infectado. Comprobar que está instalada (o instalar) la versión más actualizada que exista del software antivirus adecuado. Y, lo más importante, en caso de duda, solicitar el asesoramiento de alguien que sepa.