Monday, June 04, 2007

Parte 2 Historia de la Computación


2. El Software

Durante las tres primeras décadas de la Informática, el principal desafío era el desarrollo del hardware de las computadoras, de forma que se redujera el costo de procesamiento y almacenamiento de datos.

La necesidad de enfoques sistemáticos para el desarrollo y mantenimiento de productos de software se patentó en la década de 1960. En ésta década aparecieron las computadoras de la tercera generación y se desarrollaron técnicas de programación como la multiprogramación y de tiempo compartido. Y mientras las computadoras estaban haciéndose más complejas, resultó obvio que la demanda por los productos de software creció en mayor cantidad que la capacidad de producir y mantener dicho software. Estas nuevas capacidades aportaron la tecnología necesaria para el establecimiento de sistemas computacionales interactivos, de multiusuario, en línea y en tiempo real; surgiendo nuevas aplicaciones para la computación, como las reservaciones aéreas, bancos de información médica, etc.

Fue hasta el año 1968 que se convocó una reunión en Garmisch, Alemania Oriental estimulándose el interés hacia los aspectos técnicos y administrativos utilizados en el desarrollo y mantenimiento del software, y fue entonces donde se utilizó el término "Ingeniería del Software".


A lo largo de la década de los ochenta, los avances en microelectrónica han dado como resultado una mayor potencia de cálculo a la vez que una reducción de costo. Hoy el problema es diferente. El principal desafío es mejorar la calidad y reducir el costo.

Las personas encargadas de la elaboración del software se han enfrentado a problemas muy comunes: unos debido a la exigencia cada vez mayor en la capacidad de resultados del software, debido al permanente cambio de condiciones lo que aumenta su complejidad y obsolescencia; y otros, debido a la carencia de herramientas adecuadas y estándares de tipo organizacional encaminados al mejoramiento de los procesos en el desarrollo del software.

Una necesidad sentida en nuestro medio es el hecho de que los productos de software deben ser desarrollados con base en la implementación de estándares mundiales, modelos , sistemas métricos, capacitación del recurso humano y otros principios y técnicas de la ingeniería de software que garanticen la producción de software de calidad y competitividad a nivel local e internacional.


Con el acelerado avance tecnológico de la información, la cantidad y la complejidad de los productos de software se están incrementando considerablemente, así como también la exigencia en su funcionalidad y confiabilidad; es por esto que la calidad y la productividad se están constituyendo en las grandes preocupaciones tanto de gestores como para desarrolladores de software.

En los primeros años del software, las actividades de elaboración de programas eran realizadas por una sola persona utilizando lenguajes de bajo nivel y ajustándose a un computador en especial, que generaban programas difíciles de entender, aun hasta para su creador, después de algún tiempo de haberlo producido. Esto implicaba tener que repetir el mismo proceso para desarrollar el mismo programa para otras máquinas. Por consiguiente, la confiabilidad, facilidad de mantenimiento y cumplimiento no se garantizaban y la productividad era muy baja.

Posteriormente, con la aparición de técnicas estructuradas y con base en las experiencias de los programadores se mejoró la productividad del software. Sin embargo, este software seguía teniendo fallas, como por ejemplo: documentación inadecuada, dificultad para su correcto funcionamiento, y por su puesto, insatisfacción del cliente.
Conforme se incrementaba la tecnología de los computadores, también crecía la demanda de los productos de software, pero mucho más lentamente, tanto que hacia 1990 se decía que las posibilidades del software estaban retrasadas respecto a las del hardware en un mínimo de dos generaciones de procesadores y que la distancia continuaba aumentando.

En la actualidad muchos de estos problemas subsisten en el desarrollo de software, con una dificultad adicional relacionada con la incapacidad para satisfacer totalmente la gran demanda y exigencias por parte de los clientes.
El elemento básico del software es el programa. Un programa es un grupo de instrucciones destinadas a cumplir una tarea en particular. Un programa puede estar conformado por varios programas más sencillos.
El software se puede clasificar en tres grupos: sistemas operativos, lenguajes de programación y aplicaciones.

Sistema Operativo

El sistema operativo es un conjunto de programas que coordinan el equipo físico de la computadora y supervisan la entrada, la salida, el almacenamiento y las funciones de procesamiento. Incluye comandos internos y externos. Los comandos internos se encuentran en la memoria de la computadora y los comandos externos, generalmente, están en la unidad de disco. Para usar los comandos externos, se necesitan sus archivos.

El sistema operativo es una colección de programas diseñados para facilitarle al usuario la creación y manipulación de archivos, la ejecución de programas y la operación de otros periféricos conectados a la computadora. Ejemplo de algunos comandos son: abrir un archivo, hacer una copia impresa de lo que hay en la pantalla y copiar un archivo de un disco a otro.

En las décadas de los 70 y 80 la mayor parte de las computadoras utilizaban su propio sistema operativo, o sea, que aquellas aplicaciones creadas para un sistema operativo no se podían usar en otro. Debido a este problema, los vendedores de sistemas operativos decidieron concentrarse en aquellos sistemas más utilizados. Ellos visualizaron que las dos compañías más grandes de microcomputadoras se unirían para crear mayor compatibilidad y esto es un hecho.


Toda computadora tiene algún tipo de sistema operativo, el cual debe ser activado cuando la computadora se enciende. Si el sistema operativo está grabado en la ROM o presente en el disco duro de la computadora, el sistema operativo, generalmente, se activa automáticamente cuando la computadora se enciende. Si no, se inserta un disco que contenga el sistema operativo para activarlo.

Un sistema operativo provee un programa o rutina para preparar los discos ("formatting a disk"), copiar archivos o presentar un listado del directorio del disco.
El sistema operativo del disco de una computadora personal de IBM (IBM-PC) es una colección de programas diseñados para crear y manejar archivos, correr programas y utilizar los dispositivos unidos al sistema de la computadora. Microsoft (compañía de programas) desarrolló PC-DOS para IBM y MS-DOS para IBM compatibles. Los dos sistemas operativos son idénticos. DOS dicta cómo los programas son ejecutados en IBM y compatibles.

El DOS ("Disk Operating System") es el sistema operativo del disco. Es el conjunto de instrucciones del programa que mantiene un registro de las tareas requeridas para la operación de la computadora, o sea, es una colección de programas diseñados para crear y manejar archivos, correr programas y utilizar los dispositivos unidos al sistema de la computadora.

Entre las tareas que realiza un SO tenemos:
Si es un sistema multitarea: asignar y controlar los recursos del sistema, definir qué aplicación y en qué orden deben ser ejecutadas.
Manejar la memoria del sistema que comparten las múltiples aplicaciones.
Manejar los sistemas de entrada y salida, incluidos discos duros, impresoras y todo tipo de puertos.
Envío de mensajes de estado a las aplicaciones, al administrador de sistema o al propio usuario, sobre cualquier error o información necesaria para el trabajo estable y uniforme del sistema.
Asume tareas delegadas de las propias aplicaciones, como impresión en background y procesamiento por lotes, con el fin de que éstas ganen en eficiencia y tiempo.
Administra, de existir, el procesamiento en paralelo.

Tipos de sistemas operativos

El "Character based”:
DOS dice si está listo para recibir un comando presentando un símbolo ("prompt") en la pantalla: C:\>. El usuario responde escribiendo una instrucción para ser ejecutada, carácter por carácter mediante el uso del teclado.

El "Graphic User Interface”:
Hace uso de un "mouse" como un dispositivo de puntero y permite que se apunte a iconos (pequeños símbolos o figuras que representan alguna tarea a realizarse) y oprimir el botón del "mouse" para ejecutar la operación o tarea seleccionada. El usuario puede controlar el sistema operativo seleccionando o manipulando iconos en el monitor.


Ejemplos de sistemas operativos

PC-DOS (Personal Computer DOS)
MS-DOS (Microsoft DOS)
OS/2 (IBM Operating System 2)
DR DOS 5.0 (Digital Research DOS)
UNIX
Linux
Windows para sistemas operativos DOS
Windows NT


3. GENERACIONES DE SISTEMAS OPERATIVOS


Los sistemas operativos, al igual que el hardware de las computadoras, han sufrido una serie de cambios revolucionarios llamados generaciones. En el caso del hardware, las generaciones han sido enmarcadas por grandes avances en los componentes utilizados, pasando de válvulas (primera generación), a transistores (segunda generación), a circuitos integrados (tercera generación), a circuitos integrados de gran y muy gran escala (cuarta generación). Cada generación sucesiva de hardware ha sido acompañada de reducciones substanciales en los costos, tamaño, emisión de calor y consumo de energía, y por incrementos notables en velocidad y capacidad.

Generación Cero (Década de 1940)


Los sistemas operativos han ido evolucionando durante los últimos 40 años a través de un número de distintas fases o generaciones que corresponden a décadas. En 1940, las computadoras electrónicas digitales más nuevas no tenían sistema operativo. Las Máquinas de ese tiempo eran tan primitivas que los programas por lo regular manejaban un bit a la vez en columnas de switch's mecánicos. Eventualmente los programas de lenguaje de máquina manejaban tarjetas perforadas, y lenguajes ensamblador fueron desarrollados para agilizar el proceso de programación. Los usuarios tenían completo acceso al lenguaje de la maquina.
Todas las instrucciones eran codificadas a mano.

Primera Generación (Década de 1950)


Los sistemas operativos de los años cincuenta fueron diseñados para hacer más fluída la transmisión entre trabajos. Antes de que los sistemas fueran diseñados, se perdía un tiempo considerable entre la terminación de un trabajo y el inicio del siguiente. Este fue el comienzo de los sistemas de procesamiento por lotes, donde los trabajos se reunían por grupo o lotes. Cuando el trabajo estaba en ejecución, este tenía control total de la máquina. Al terminar cada trabajo, el control era devuelto al sistema operativo, el cual "limpiaba" y leía e inicia el trabajo siguiente.
Al inicio de los años 50 esto había mejorado un poco con la introducción de tarjetas perforadas (las cuales servían para introducir los programas de lenguajes de máquina), puesto que ya no había necesidad de utilizar los tableros enchufables. Esto se conoce como sistemas de procesamiento por lotes de un sólo flujo, ya que los programas y los datos eran sometidos en grupos o lotes. El laboratorio de investigación General Motors implementó el primer sistema operativo para la IBM 701.

La introducción del transistor a mediados de los años 50 cambió la imagen radicalmente. Se crearon máquinas suficientemente confiables las cuales se instalaban en lugares especialmente acondicionados, aunque sólo las grandes universidades y las grandes corporaciones o bien las oficinas del gobierno se podían dar el lujo de tenerlas.
Para poder correr un trabajo (programa), tenían que escribirlo en papel (en Fortran o en lenguaje ensamblador) y después se perforaría en tarjetas. Enseguida se llevaría la pila de tarjetas al cuarto de introducción al sistema y la entregaría a uno de los operadores. Cuando la computadora terminaba el trabajo, un operador se dirigiría a la impresora y desprendía la salida y la llevaba al cuarto de salida, para que la recogiera el programador.

Segunda Generación (A mitad de la década de 1960)


La característica de la segunda generación de los sistemas operativos fue el desarrollo de los sistemas compartidos con multiprogramación, y los principios del multiprocesamiento. En los sistemas de multiprogramación, varios programas de usuarios se encuentran al mismo tiempo en el almacenamiento principal, y el procesador se cambia rápidamente de un trabajo a otro. En los sistemas de multiprocesamiento se utilizan varios procesadores en un solo sistema computacional, con la finalidad de incrementar el poder de procesamiento de la máquina. La independencia de dispositivos aparece después. Un usuario que deseara escribir datos en una cinta en sistemas de la primera generación tenia que hacer referencia específica a una unidad en particular. En los sistemas de la segunda generación, el programa del usuario especificaba tan solo que un archivo iba a ser escrito en una unidad de cinta con cierto número de pistas y cierta densidad. El sistema operativo localizaba, entonces, una unidad de cinta disponible con las características deseadas, y le indicaba al operador que montara la cinta en esa unidad.

El surgimiento de un nuevo campo: LA INGENIERÍA DEL SOFTWARE.


Los sistemas operativos desarrollados durante los años 60 tuvieron una enorme conglomeración de software escrito por gente que no entendía el software, también como el hardware, tenía que ser ingeniero para ser digno de confianza, entendible y mantenible.
Se desarrollaron sistemas compartidos, en la que los usuarios podían acoplarse directamente con el computador a través de terminales. Surgieron sistemas de tiempo real, en que los computadores fueron utilizados en el control de procesos industriales.

Los sistemas de tiempo real se caracterizan por proveer una respuesta inmediata.
Multiprogramación
Sistemas multiprogramados: varios trabajos se conservan en memoria al mismo tiempo, y el cpu se comparte entre ellos
Rutinas de E/S: provista por el sistema ejecutadas simultáneamente con procesamiento del CPU.
Administración de memoria: el sistema debe reservar memoria para varios trabajos.
Administración del CPU: el sistema debe elegir entre varios trabajos listos para ejecución.
Administración de dispositivos.


Tercera Generación (Mitad de la década de 1960 a mitad de la década de 1970)


Se inicia en 1964, con la introducción de la familia de computadores Sistema/360 de IBM. Los computadores de esta generación fueron diseñados como sistemas para usos generales. Casi siempre eran sistemas grandes, voluminosos. Eran sistemas de modos múltiples, algunos de ellos soportaban simultáneamente procesos por lotes, tiempo compartido, procesamiento de tiempo real y multiprocesamiento. Eran grandes y costosos, nunca antes se había construido algo similar, y muchos de los esfuerzos de desarrollo terminaron muy por arriba del presupuesto y mucho después de lo que el planificador marcaba como fecha de terminación.
Estos sistemas introdujeron mayor complejidad a los ambientes computacionales; una complejidad a la cual, en un principio, no estaban acostumbrados los usuarios.

Sistemas de Tiempo Compartido


El CPU se comparte entre varios trabajos que se encuentran residentes en memoria y en el disco (el CPU se asigna a un trabajo solo si éste esta en memoria).
Un trabajo es enviado dentro y fuera del la memoria hacia el disco.
Existe comunicación en-línea entre el usuario y el sistema; cuando el sistema operativo finaliza la ejecución de un comando, busca el siguiente “estatuto de control” no de una tarjeta perforada, sino del teclado del operador.
Existe un sistema de archivos en línea el cual está disponible para los datos y código de los usuarios

Cuarta Generación (Mitad de la década de 1970 a nuestros días)

Los sistemas de la cuarta generación constituyen el estado actual de la tecnología. Muchos diseñadores y usuarios se sienten aun incómodos, después de sus experiencias con los sistemas operativos de la tercera generación, y se muestran cautelosos antes de comprometerse con sistemas operativos complejos. Con la ampliación del uso de redes de computadores y del procesamiento en línea los usuarios obtienen acceso a computadores alejados geográficamente a través de varios tipos de terminales. El microprocesador ha hecho posible la aparición de la computadora personal, uno de los desarrollos de notables consecuencias sociales más importantes de las últimas décadas.

Ahora muchos usuarios han desarrollado sistemas de computación que son accesibles para su uso personal en cualquier momento del día o de la noche. La potencia del computador, que costaba varios cientos de miles de dólares al principio de la década de 1960, hoy es mucho más accesible. El porcentaje de la población que tiene acceso a un computador en el Siglo XXI es mucho mayor. El usuario puede tener su propia computadora para realizar parte de su trabajo, y utilizar facilidades de comunicación para transmitir datos entre sistemas. La aplicación de paquetes de software tales como procesadores de palabras, paquetes de bases de datos y paquetes de gráficos ayudaron a la evolución de la computadora personal. La llave era transferir información entre computadoras en redes de trabajo.

El correo electrónico, transferencia de archivos, y aplicaciones de acceso a bases de datos proliferaron. El modelo cliente-servidor fue esparcido. El campo de ingeniería del software continuó evolucionando con una mayor confianza proveniente de los EE.UU. Los ambientes del usuario, altamente simbólicos, y orientados hacia las siglas de las décadas de los sesenta y setenta, fueron reemplazados, en la década de los ochenta, por los sistemas controlados por menú, los cuales guían al usuario a lo largo de varias opciones expresadas en un lenguaje sencillo.

Mini-computadoras y Microprocesadores


Computadoras de menor tamaño.
Desarrollo de sistemas operativos (UNIX, DOS, CP/M).
Mejora en las interfaces de usuario.
Introducción de Microprocesadores.
Desarrollo de lenguajes de programación.

Sistemas de cómputo personales
Computadoras Personales- sistemas de cómputo dedicados a un solo usuario.
Dispositivos de E/S- teclados, ratón, pantalla, impresoras..
Conveniente al usuario y de respuesta rápida.
Puede adaptarse a la tecnología para soportar otros sistemas operativos.

Sistemas Distribuidos
Sistemas Distribuidos: Distribuyen el cómputo entre varios procesadores geográficamente dispersos.
Sistemas débilmente acoplados: Cada procesador tiene su propia memoria local y el procesador se comunica con los demás procesadores mediante líneas de comunicación, buses de alta velocidad y líneas telefónicas.


Ventajas:
- Compartición de recursos
- Incremento en la velocidad de cómputo
- Compartición de carga
- Confiabilidad
- Comunicación
- Redes


Estaciones de Trabajo: Sun, Vax, Silicon Graphics.
Redes de Area Local Ethernet, Token Ring, FDDI, ATM, Redes de larga distancia (Arpanet).
Redes organizadas como clientes-servidores.
Servicios de S.O. Protocolos de comunicación, encriptación de datos, seguridad, consistencia

Sistemas Paralelos


Sistemas Paralelos: Sistemas de múltiples procesadores con mas de un procesador con comunicación entre ellos.
Sistema Fuertemente Acoplado: Los procesadores comparten memoria y reloj; la comunicación usualmente se realiza mediante memoria compartida.

Ventajas:


- Incremento de throughput
- Económica
- Incremento en la confiabilidad


1990 - 2000

Cómputo Paralelo (Teraflops).
PC’s poderosas (1.5 GigaHertz), Computadoras Multimedia.
Redes de Comunicación de distancia mundial, con envío de imágenes, grandes cantidades de datos, audio y video.
World Wide Web.
Notebooks utilizando tecnologías de comunicación inalámbrica: Cómputo Móvil.
Cómputo Embebido y Robótica.

Sistemas de Tiempo Real


A menudo son utilizados como dispositivos de control en aplicaciones dedicadas, como control de experimentos científicos, sistemas de procesamiento de imágenes médicas, sistemas de control industrial, etc...

Exige cumplimiento de restricciones de tiempos.
Sistemas de Tiempo Real Críticos.
- Cumplimiento forzoso de plazos de respuesta.
- Predecibilidad y análisis de cumplimiento de plazos de respuesta
Sistemas de tiempo real acríticos.
- Exigencia “suave” de plazos de respuesta.
- Atención lo mas rápido posible a eventos, en promedio.



No comments: