Computadora multitarea

Ajustar Compartir Imprimir Citar
Ejecución simultánea de múltiples procesos
Los sistemas operativos modernos de escritorio son capaces de manejar grandes cantidades de diferentes procesos al mismo tiempo. Esta captura de pantalla muestra Linux Mint funcionando simultáneamente Xfce entorno de escritorio, Firefox, un programa de calculadora, el calendario integrado, Vim, GIMP y reproductor multimedia VLC.
Multitarea de Microsoft Windows 1.01 lanzado en 1985, aquí se muestra ejecutando los programas MS-DOS Executive and Calculator

En informática, la multitarea es la ejecución simultánea de múltiples tareas (también conocidas como procesos) durante un cierto período de tiempo. Las tareas nuevas pueden interrumpir las ya iniciadas antes de que finalicen, en lugar de esperar a que finalicen. Como resultado, una computadora ejecuta segmentos de múltiples tareas de manera intercalada, mientras que las tareas comparten recursos de procesamiento comunes, como las unidades centrales de procesamiento (CPU) y la memoria principal. La multitarea interrumpe automáticamente el programa en ejecución, guarda su estado (resultados parciales, contenido de la memoria y contenido del registro de la computadora) y carga el estado guardado de otro programa y le transfiere el control. Este "cambio de contexto" puede iniciarse a intervalos de tiempo fijos (multitarea preventiva), o el programa en ejecución puede codificarse para señalar al software de supervisión cuándo puede interrumpirse (multitarea cooperativa).

La multitarea no requiere la ejecución paralela de múltiples tareas exactamente al mismo tiempo; en cambio, permite que más de una tarea avance durante un período de tiempo determinado. Incluso en computadoras multiprocesador, la multitarea permite ejecutar muchas más tareas que CPU.

La multitarea es una característica común de los sistemas operativos de computadora desde al menos la década de 1960. Permite un uso más eficiente del hardware de la computadora; cuando un programa está esperando que se complete algún evento externo, como una entrada de usuario o una transferencia de entrada/salida con un periférico, el procesador central aún se puede usar con otro programa. En un sistema de tiempo compartido, varios operadores humanos usan el mismo procesador como si estuviera dedicado a su uso, mientras que detrás de escena la computadora está sirviendo a muchos usuarios al realizar múltiples tareas en sus programas individuales. En los sistemas de multiprogramación, una tarea se ejecuta hasta que debe esperar un evento externo o hasta que el programador del sistema operativo cambia a la fuerza la tarea en ejecución fuera de la CPU. Los sistemas en tiempo real, como los diseñados para controlar robots industriales, requieren un procesamiento oportuno; se puede compartir un solo procesador entre los cálculos del movimiento de la máquina, las comunicaciones y la interfaz de usuario.

A menudo, los sistemas operativos multitarea incluyen medidas para cambiar la prioridad de las tareas individuales, de modo que los trabajos importantes reciban más tiempo de procesamiento que los que se consideran menos significativos. Según el sistema operativo, una tarea puede ser tan grande como un programa de aplicación completo o puede estar compuesta por subprocesos más pequeños que llevan a cabo partes del programa general.

Un procesador diseñado para usarse con sistemas operativos multitarea puede incluir hardware especial para admitir múltiples tareas de forma segura, como protección de memoria y anillos de protección que garantizan que el software de supervisión no se dañe ni se altere por errores del programa en modo de usuario.

El término "multitarea" se ha convertido en un término internacional, ya que la misma palabra se usa en muchos otros idiomas, como alemán, italiano, holandés, rumano, checo, danés y noruego.

Multiprogramación

En los primeros días de la informática, el tiempo de CPU era costoso y los periféricos eran muy lentos. Cuando la computadora ejecutaba un programa que necesitaba acceso a un periférico, la unidad central de procesamiento (CPU) tendría que dejar de ejecutar las instrucciones del programa mientras el periférico procesaba los datos. Esto era por lo general muy ineficiente.

La primera computadora que usó un sistema de multiprogramación fue la Leo III británica, propiedad de J. Lyons and Co. Durante el procesamiento por lotes, se cargaron varios programas diferentes en la memoria de la computadora y el primero comenzó a funcionar. correr. Cuando el primer programa llegó a una instrucción que esperaba un periférico, el contexto de este programa se almacenó y el segundo programa en la memoria tuvo la oportunidad de ejecutarse. El proceso continuó hasta que todos los programas terminaron de ejecutarse.

El uso de la multiprogramación se mejoró con la llegada de la memoria virtual y la tecnología de máquinas virtuales, que permitieron que los programas individuales hicieran uso de la memoria y los recursos del sistema operativo como si otros programas que se ejecutan simultáneamente no existieran, a todos los efectos prácticos.

La multiprogramación no garantiza que un programa se ejecutará de manera oportuna. De hecho, el primer programa puede funcionar durante horas sin necesidad de acceder a un periférico. Como no había usuarios esperando en una terminal interactiva, esto no fue un problema: los usuarios entregaron una baraja de tarjetas perforadas a un operador y regresaron unas horas más tarde para obtener los resultados impresos. La multiprogramación redujo considerablemente los tiempos de espera cuando se procesaban varios lotes.

Multitarea cooperativa

Los primeros sistemas multitarea usaban aplicaciones que cedían tiempo voluntariamente entre sí. Este enfoque, que finalmente fue respaldado por muchos sistemas operativos de computadora, se conoce hoy como multitarea cooperativa. Aunque ahora rara vez se usa en sistemas más grandes, excepto para aplicaciones específicas como CICS o el subsistema JES2, la multitarea cooperativa alguna vez fue el único esquema de programación empleado por Microsoft Windows y Mac OS clásico para permitir que múltiples aplicaciones se ejecutaran simultáneamente. La multitarea cooperativa todavía se usa hoy en día en los sistemas RISC OS.

Como un sistema multitarea cooperativo depende de que cada proceso ceda tiempo regularmente a otros procesos en el sistema, un programa mal diseñado puede consumir todo el tiempo de la CPU por sí mismo, ya sea realizando cálculos extensos o esperando ocupado; ambos harían que todo el sistema se colgara. En un entorno de servidor, este es un peligro que hace que todo el entorno sea inaceptablemente frágil.

Multitarea preventiva

Kubuntu (KDE Plasma 5) cuatro escritorios virtuales que ejecutan múltiples programas al mismo tiempo.

La multitarea preventiva permite que el sistema informático garantice de forma más fiable a cada proceso un "segmento" del tiempo de funcionamiento. También permite que el sistema se ocupe rápidamente de eventos externos importantes, como la entrada de datos, que pueden requerir la atención inmediata de uno u otro proceso. Los sistemas operativos se desarrollaron para aprovechar estas capacidades de hardware y ejecutar múltiples procesos de manera preventiva. La multitarea preventiva se implementó en PDP-6 Monitor and Multics en 1964, en OS/360 MFT en 1967 y en Unix en 1969, y estaba disponible en algunos sistemas operativos para computadoras tan pequeñas como DEC's PDP-8; es una característica central de todos los sistemas operativos similares a Unix, como Linux, Solaris y BSD con sus derivados, así como las versiones modernas de Windows.

En cualquier momento específico, los procesos se pueden agrupar en dos categorías: aquellos que están esperando entrada o salida (llamados "límite de E/S") y aquellos que están utilizando completamente la CPU (" 34;Uso de la CPU"). En los sistemas primitivos, el software solía "sondear" o "esperar ocupado" mientras espera la entrada solicitada (como entrada de disco, teclado o red). Durante este tiempo, el sistema no estaba realizando ningún trabajo útil. Con la llegada de las interrupciones y la multitarea preventiva, los procesos vinculados de E/S podrían 'bloquearse' o ponerse en espera, a la espera de la llegada de los datos necesarios, lo que permitiría que otros procesos utilicen la CPU. Como la llegada de los datos solicitados generaría una interrupción, los procesos bloqueados podrían tener garantizado un retorno oportuno a la ejecución.

El primer sistema operativo multitarea preventivo disponible para usuarios domésticos fue Sinclair QDOS en Sinclair QL, lanzado en 1984, pero muy pocas personas compraron la máquina. Amiga de Commodore, lanzada al año siguiente, fue la primera computadora doméstica comercialmente exitosa en utilizar la tecnología, y sus capacidades multimedia la convierten en un claro antecesor de las computadoras personales multitarea contemporáneas. Microsoft convirtió la multitarea preventiva en una función central de su sistema operativo insignia a principios de la década de 1990 cuando desarrolló Windows NT 3.1 y luego Windows 95. En 1988, Apple ofreció A/UX como una alternativa basada en UNIX System V al Classic Mac OS. En 2001, Apple cambió a Mac OS X influenciado por NeXTSTEP.

Se utiliza un modelo similar en Windows 9x y la familia de Windows NT, donde las aplicaciones nativas de 32 bits realizan múltiples tareas de forma preventiva. Las ediciones de Windows de 64 bits, tanto para las arquitecturas x86-64 como Itanium, ya no son compatibles con las aplicaciones heredadas de 16 bits y, por lo tanto, brindan multitarea preventiva para todas las aplicaciones compatibles.

Tiempo real

Otra razón para la multitarea fue el diseño de los sistemas informáticos en tiempo real, donde hay una serie de actividades externas posiblemente no relacionadas que deben ser controladas por un solo sistema de procesador. En dichos sistemas, un sistema de interrupción jerárquico se combina con la priorización de procesos para garantizar que las actividades clave reciban una mayor parte del tiempo de proceso disponible.

Multiproceso

A medida que la multitarea mejoró enormemente el rendimiento de las computadoras, los programadores comenzaron a implementar aplicaciones como conjuntos de procesos cooperativos (por ejemplo, un proceso que recopila datos de entrada, un proceso que procesa datos de entrada, un proceso que escribe los resultados en el disco). Esto, sin embargo, requería algunas herramientas para permitir que los procesos intercambien datos de manera eficiente.

Los subprocesos nacieron de la idea de que la forma más eficiente para que los procesos cooperativos intercambien datos sería compartir todo su espacio de memoria. Por lo tanto, los subprocesos son procesos que se ejecutan en el mismo contexto de memoria y comparten otros recursos con sus procesos principales, como archivos abiertos. Los subprocesos se describen como procesos ligeros porque cambiar entre subprocesos no implica cambiar el contexto de la memoria.

Si bien los subprocesos se programan de forma preventiva, algunos sistemas operativos ofrecen una variante de los subprocesos, denominada fibras, que se programan de forma cooperativa. En los sistemas operativos que no proporcionan fibras, una aplicación puede implementar sus propias fibras mediante llamadas repetidas a funciones de trabajo. Las fibras son aún más livianas que los hilos y algo más fáciles de programar, aunque tienden a perder algunos o todos los beneficios de los hilos en máquinas con múltiples procesadores.

Algunos sistemas admiten directamente subprocesos múltiples en el hardware.

Protección de memoria

Es esencial para cualquier sistema multitarea compartir el acceso a los recursos del sistema de manera segura y efectiva. El acceso a la memoria debe administrarse estrictamente para garantizar que ningún proceso pueda leer o escribir sin darse cuenta o deliberadamente en ubicaciones de memoria fuera del espacio de direcciones del proceso. Esto se hace con el propósito de la estabilidad general del sistema y la integridad de los datos, así como la seguridad de los datos.

En general, la administración del acceso a la memoria es responsabilidad del kernel del sistema operativo, en combinación con los mecanismos de hardware que brindan funcionalidades de soporte, como una unidad de administración de memoria (MMU). Si un proceso intenta acceder a una ubicación de memoria fuera de su espacio de memoria, la MMU niega la solicitud y le indica al kernel que tome las medidas adecuadas; esto generalmente resulta en la terminación forzosa del proceso ofensivo. Según el software y el diseño del kernel y el error específico en cuestión, el usuario puede recibir un mensaje de error de infracción de acceso como "falla de segmentación".

En un sistema multitarea bien diseñado y correctamente implementado, un proceso dado nunca puede acceder directamente a la memoria que pertenece a otro proceso. Una excepción a esta regla es en el caso de la memoria compartida; por ejemplo, en el mecanismo de comunicación entre procesos de System V, el kernel asigna memoria para que múltiples procesos la compartan mutuamente. Este tipo de características son utilizadas a menudo por el software de gestión de bases de datos como PostgreSQL.

Mecanismos de protección de memoria inadecuados, ya sea debido a fallas en su diseño o implementaciones deficientes, permiten vulnerabilidades de seguridad que pueden ser potencialmente explotadas por software malicioso.

Intercambio de memoria

El uso de un archivo de intercambio o una partición de intercambio es una forma en que el sistema operativo proporciona más memoria de la que está disponible físicamente al mantener partes de la memoria principal en el almacenamiento secundario. Si bien la multitarea y el intercambio de memoria son dos técnicas completamente independientes, a menudo se usan juntas, ya que el intercambio de memoria permite cargar más tareas al mismo tiempo. Por lo general, un sistema multitarea permite que se ejecute otro proceso cuando el proceso en ejecución llega a un punto en el que tiene que esperar a que se recargue una parte de la memoria desde el almacenamiento secundario.

Programación

Los procesos que son totalmente independientes no son muy complicados de programar en un entorno multitarea. La mayor parte de la complejidad en los sistemas multitarea proviene de la necesidad de compartir recursos informáticos entre tareas y de sincronizar la operación de tareas cooperativas.

Se utilizan varias técnicas informáticas simultáneas para evitar posibles problemas causados por varias tareas que intentan acceder al mismo recurso.

Los sistemas más grandes a veces se construyeron con uno o más procesadores centrales y una cierta cantidad de procesadores de E/S, una especie de multiprocesamiento asimétrico.

A lo largo de los años, los sistemas multitarea se han perfeccionado. Los sistemas operativos modernos generalmente incluyen mecanismos detallados para priorizar procesos, mientras que el multiprocesamiento simétrico ha introducido nuevas complejidades y capacidades.