Un proceso es la ejecución de un programa, es decir, los datos e instrucciones están cargados en la memoria principal, ejecutándose o esperando a hacerlo.
Un proceso no tiene porqué estar siempre en ejecución. Puede pasar por diferentes estados:
- Preparado: Un proceso preparado es un proceso que está preparado para ejecutarse. Sólo le "falta" la CPU
- En Ejecución: Un proceso en ejecución es un proceso que "tiene" CPU, se está ejecutando
- Bloqueado: Un proceso bloqueado está esperando que ocurra un suceso antes de poder "usar" la CPU. Dicho suceso suele ser una operación de Entrada / Salida: pulsar una tecla, leer de disco... Pero también puede
ser que esté esperando a que otro proceso haga algo.
- 1. Creación del proceso. Está preparado para ejecutarse
- 2. El proceso se ejecuta en CPU
- 3. El proceso espera a que ocurra un suceso y se bloquea
- 4. Ocurre el suceso por el que esperaba el proceso. Está preparado para ejecutarse
- 5. El proceso "sale" de la CPU
- 6. Fin de la ejecución del proceso
No es necesario que se cumplan todos los pasos, por ejemplo, podría ser que un proceso hiciera los pasos 1-2-6.
Desde el punto de vista del Hardware, dependiendo del número de CPU's, un sistema puede ser:
- Sistema Monoprocesador
- Sistema Multiprocesador
- Sistema fuertemente acoplado
- Sistema débilmente acoplado
- Sistema fuertemente acoplado
Como su nombre indica, un sistema monoprocesador es aquel en el que sólo hay una CPU; y como todos habréis imaginado, un sistema multiprocesador es el que tiene varias CPU's. Éste último se divide
en 2 tipos. Los sistemas fuertemente aclopados, en los que hay memoria común y los débilmente acoplados, en los que no hay memoria común. Un ejemplo de los fuertemente acoplados es un PC con
varios procesadores, y otro de los débilmente acoplados es una red de ordenadores.
Desde el punto de vista del Software, también hay diferentes tipos de sistemas, atendiendo a cómo se ejecutan los procesos:
- Sistema de Multiprogramación
- Sistema de Multiprocesamiento
La Multiprogramación consiste en que todos los procesos se ejecuten en la misma CPU. Esto se consigue mediante la intercalación de la ejecución de los procesos.
En Multiprocesamiento cada proceso se ejecuta en una CPU. En este caso hay paralelismo real en la ejecución de los procesos.
Además de la programación imperativa o secuencial y la programación concurrente, hay otros paradigmas o enfoques de la programación.
La programación imperativa se centra en la transformación que hay que realizar para procesar los datos, pasando estos a un segundo plano. En cambio, la programación orientada a objetos gira en torno a un nuevo
concepto: el objeto. Éste comprende tanto procesos como datos. Aunque pueda parecer más complejo, este tipo de programación se asemeja a la forma que tiene el ser humano de ver el mundo, frente a la programación
imperativa que está orientada a la máquina. Para entenderlo mejor, un objeto es "una cosa con límites definidos", como por ejemplo, una pelota, que tiene características (datos como tamaño o color), asociadas a unas operaciones
(procesos como botar o lanzar) aplicables sobre el objeto. Otras operaciones no son válidas. No puedes beberte una pelota... aunque el mundo es muy raro y hay de todo. Otra característica importante de la programación
orientada a objetos es la herencia. Este mecanismo se utiliza para estructurar el programa en forma jerárquica.
La programación declarativa es otra visión de la programación, en la que no se describe cómo obtener los resultados, sino qué es lo que debemos obtener. Se divide en 2 tipos, la programación lógica y la programación funcional.
Hace unos años, cuando todavía no existían los entornos gráficos, ni el hardware que los soportara, todo se hacía en un entorno de consola. Al abrir una ventana de msdos en windows, o una consola de comandos en
unix... entran escalofríos sólo de pensar que las cosas eran antes "tan frías". Eso si, no se colgaban de vez en cuando sin saber porqué. Primero Apple copiando de Xerox, y después Microsoft copiando de Apple, crearon los entornos visuales,
con lo que vino la revolución multimedia y se disparó el negocio de la informática. Dichos entornos visuales constan de una interfaz gráfica "más amigable", además de ofrecernos un amplio abanico de posibilidades. No hay que
creer que los entornos multitarea aparecieron con lo entornos visuales en los que se puede "tener abiertas muchas ventanitas". UNIX siempre ha sido multitarea, desde sus inicios en modo consola.
Ahora vamos a hacer un pequeño repaso de las arquitecturas existentes dentro del mundo de la informática. Cuando en los años 60 se empezaron a comercializar los ordenadores, disponibles sólo para empresas debido a su alto
coste, se utilizaban sistemas centralizados o mainframes, que tenían diferentes consolas para dar acceso a múltiples usuarios. Todo el trabajo lo realizaba el mainframe. En los años 80 surgió el PC, con
un precio más asequible. Nacieron los sistemas en red que permiten interconectar ordenadores de diferentes características compartiendo recursos. El siguiente paso fueron los sistemas distribuidos en
los que hay diferentes estaciones interconectadas, aunque el usuario no necesita conocer su ubicación, como sucede en los sistemas en red. El acceso a los recursos es transparente, es decir, se accede a los recursos
como si fueran locales, aunque no lo sean. También existen sistemas paralelos, que constan de varios procesadores operando conjuntamente.
Una vez aclarados ciertos conceptos, es hora de empezar con el curso de Metodología de la Programación.