Skip to content

1 Programa vs Proceso

Aplicación

A simple vista, parece que con los términos aplicación, ejecutable y proceso, hacen referencia al mismo concepto, pero en realidad no es así.

En general, conocemos como software el conjunto de programas informáticos que se ejecutan sobre el hardware del equipo.

Programa

Un programa es el conjunto de instrucciones que ejecutadas en un ordenador realizarán una tarea o ayudarán al usuario a realizarla.

Este conjunto de programas se puede subdividir en dos grandes grupos:

  • Los programas para la gestión del hardware: sistema operativo, controladores de dispositivos, etc.
  • Las aplicaciones de usuario, que son los que resuelven problemas específicos del usuario, como por ejemplo editar una imagen, enviar un e-mail, etc.

Aplicación

Una aplicación es un tipo de programa informático, diseñado como herramienta para resolver de manera automática un problema específico del usuario.

Desde el punto de vista de los sistemas operativos, llamamos programa a la representación en disco de una aplicación, que contiene tanto el código como los datos que maneja.

Una aplicación es un tipo de programa informático, diseñado como herramienta para resolver de manera automática un problema específico del usuario.

Ejecutable

Nosotros, como programadores y programadoras, creamos un programa, escribiendo su código fuente. Con ayuda de un compilador, obtenemos su código binario o interpretado. Este código binario o interpretado, lo guardamos en un fichero. Este fichero, es un fichero ejecutable.

Ejecutable

Un ejecutable es un fichero que contiene el código binario o interpretado que puede ser ejecutado en un ordenador.

En sistemas operativos Windows, podemos reconocer un fichero ejecutable porque su extensión suele ser .exe. En otros sistemas operativos, como los basados en GNU/Linux, los ficheros ejecutables se identifican como ficheros que tienen activado su permiso de ejecución y no tienen que tener una extensión determinada.

Según el tipo de código que contenga, podemos clasificar ejecutables en:

  • Binarios: Formados por un conjunto de instrucciones que directamente son ejecutadas por el procesador del ordenador. Este código se obtiene al compilar el código fuente de un programa y se guarda en un fichero ejecutable. Este código sólo se ejecutará correctamente en equipos cuya plataforma sea compatible con aquella para la que ha sido compilado (no es multiplataforma).
  • Interpretados. Código que suele tratarse como un ejecutable, pero no es código binario (máquina), sino otro tipo de código, como por ejemplo el bytecode de Java. Está formado por códigos de operación que tomará el intérprete, en el caso de Java la máquina virtual Java o JRE. Ese intérprete será el encargado de traducirlos al lenguaje máquina que ejecutará el procesador. El código interpretado es más susceptible de ser multiplataforma o independiente de la máquina física en la que se haya compilado.

Un tipo especial de ejecutables interpretados, son los llamados scripts. Estos ficheros, contienen las instrucciones que serán ejecutadas una detrás de otra por el intérprete. Se diferencian de otros lenguajes interpretados porque no son compilados. Por lo que los podremos abrir y ver el código que contienen con un editor de texto plano (cosa que no pasa con los binarios e interpretados compilados). Los intérpretes de este tipo de lenguajes se suelen llamar motores. Ejemplos de lenguajes de script son JavaScript, PHP, Python, ficheros .BAT en MS-DOS, Powershell en Windows, bash scripts en GNU/Linux, etc.

Las librerías, por su parte, contienen código ejecutable que es de utilidad para varios programas, que pueden invocar las funciones que contienen. El conjunto de funciones que incorpora una librería suele ser altamente reutilizable y útil para los programadores, evitando que tengan que reescribir una y otra vez el código que realiza la misma tarea.

Proceso

Desde el punto de vista del sistema operativo, un programa no deja de ser un conjunto de ficheros almacenados en un disco. Entre dichos archivos, al menos uno de ellos será un archivo ejecutable, pero no deja de ser un archivo en disco.

Sin embargo, cuando ejecutamos el fichero ejecutable de un programa aparece un nuevo concepto, el de proceso.

Proceso

Podríamos definir proceso como la representación en el sistema operativo de un programa en ejecución.

Un proceso no se refiere únicamente al código y a los datos gestionados por el programa correspondiente, sino también toda la información necesaria para que el sistema operativo pueda ejecutar el programa.

Siempre que lancemos la ejecución de un programa, se creará, al menos, un proceso nuevo en nuestro sistema.

Debemos tener en cuenta que podemos tener dos procesos distintos que provengan del mismo programa. Por ejemplo, si ejecutamos el mismo programa dos veces, a través de su fichero ejecutable, tendremos dos procesos distintos, con un contador, imagen de memoria y estado del procesador diferentes, aunque ambos procesos estén basados en el mismo programa.

Otra posibilidad es que un programa, al ponerse en ejecución, de lugar a más de un proceso, cada uno de ellos ejecutando una parte del programa. Por ejemplo, al ejecutar el navegador puede dar lugar a más de un proceso: uno que controla la interacción del usuario con la interfaz, otro que lleva a cabo las peticiones web solicitadas por el usuario, etc.

Demonios y servicios

Demonio

Llamamos demonio a un proceso que está ejecutándose continuamente en segundo plano, sin interactuar con el usuario. Se dedican normalmente a ofrecer un servicio básico al sistema. De hecho, en algunos sistemas operativos, como Windows, a los demonios se les denomina servicios.

Un servicio es un proceso que, normalmente, es cargado durante el arranque del sistema operativo. Recibe el nombre de servicio, ya que es un proceso que queda a la espera de que otro le pida que realice una tarea. Por ejemplo, tenemos el servicio de impresión con su típica cola de trabajos a imprimir. Nuestra impresora imprime todo lo que recibe del sistema. El servicio de impresión, es el encargado de ir enviando los datos de forma correcta a la impresora para que el resultado sea el esperado. Además, las impresoras, no siempre tienen suficiente memoria para guardar todos los datos de impresión de un trabajo completo, por lo que el servicio de impresión se los dará conforme vaya necesitándolos. Cuando finalice cada trabajo, puede notificárselo al usuario. Si en la cola de impresión, no hay trabajos pendientes, el servicio de impresión quedará a la espera y podrá avisar a la impresora para que quede en standby.

Normalmente hay muchos servicios activos o en ejecución en el sistema, y no todos son servicios del sistema operativo, también hay servicios de aplicación, instalados por el usuario y que pueden lanzarse al arrancar el sistema operativo o no, dependiendo de su configuración.