La multitarea ( en inglés multitasking ) es una propiedad del sistema operativo o entorno de tiempo de ejecución para brindar la posibilidad de procesamiento paralelo (o pseudoparalelo ) de varias tareas . La verdadera multitarea del sistema operativo sólo es posible en los sistemas informáticos distribuidos .
Hay 2 tipos de multitarea [1] :
Multithreading es una forma especializada de multitarea [1] .
Los entornos multitarea primitivos proporcionan "uso compartido de recursos" puro, donde a cada tarea se le asigna un área de memoria específica y la tarea se activa en intervalos de tiempo estrictamente definidos.
Los sistemas multitarea más avanzados asignan recursos de forma dinámica cuando una tarea se inicia en la memoria o abandona la memoria, según su prioridad y la estrategia del sistema. Este entorno multitarea tiene las siguientes características:
La principal dificultad para implementar un entorno multitarea es su confiabilidad, expresada en la protección de la memoria, el manejo de fallas e interrupciones , la protección contra bloqueos y puntos muertos .
Además de ser confiable, un entorno multitarea debe ser eficiente. El costo de los recursos para mantenerlo no debe: interferir con los procesos, ralentizar su trabajo, limitar drásticamente la memoria.
Al principio, la implementación de los sistemas operativos multitarea supuso una dificultad técnica grave, por lo que la introducción de los sistemas multitarea se retrasó y los usuarios prefirieron los sistemas monotarea durante mucho tiempo después de la implementación.
Más tarde, tras la aparición de varias soluciones exitosas, los entornos multitarea comenzaron a mejorar, y ahora se usan en todas partes.
Por primera vez, la multitarea del sistema operativo se implementó durante el desarrollo del sistema operativo Multics ( 1964 ). Uno de los primeros sistemas multitarea fue OS/360 (1966 [2] ), utilizado para computadoras IBM y sus contrapartes soviéticas ES EVM . El desarrollo del sistema se retrasó mucho y, por primera vez, IBM presentó un DOS de una sola tarea para satisfacer a los clientes antes de la puesta en marcha completa de OS / 360. El sistema ha sido criticado debido a su baja confiabilidad y dificultad de operación.
En 1969, sobre la base de Multics, se desarrolló el sistema UNIX con una solución algorítmica bastante clara al problema de la multitarea. Actualmente se han creado decenas de sistemas operativos basados en UNIX.
Las computadoras PDP-11 y sus contrapartes soviéticas SM-4 usaban el sistema multitarea RSX-11 (la contraparte soviética es SM EVM RTOS ) y el sistema de distribución de tiempo TSX-PLUS, que proporciona capacidades limitadas de multitarea y un tiempo multiusuario. modo compartido, emulando para cada usuario un RT-11 monotarea (análogo soviético - RAFOS ). La última solución fue muy popular debido a la baja eficiencia y confiabilidad de un sistema multitarea completo.
Una buena solución resultó ser el sistema operativo VMS , desarrollado originalmente para computadoras VAX (el equivalente soviético es SM-1700 ) como un desarrollo del RSX-11.
La primera computadora personal multimedia del mundo Amiga 1000 ( 1984 ) fue diseñada originalmente con soporte completo de hardware para multitarea preventiva en tiempo real en AmigaOS . En este caso, el desarrollo de hardware y software se llevó a cabo en paralelo, lo que llevó a que, en términos de cuantificación del programador multitarea (1/50 segundo por cambio de contexto), AmigaOS se mantuviera insuperable en las computadoras personales durante mucho tiempo .
La multitarea también fue proporcionada por Microsoft en los sistemas operativos Windows . El uso de la experiencia VMS proporcionó sistemas con un rendimiento y una fiabilidad significativamente mayores. En términos de tiempo de cambio de contexto multitarea (cuantificación), solo estos sistemas operativos pueden compararse con AmigaOS y UNIX (y también sus descendientes, como el kernel de Linux ).
Curiosamente, la multitarea se puede implementar no solo en el entorno operativo, sino también en el entorno del lenguaje. Por ejemplo, las especificaciones para los lenguajes de programación Modula-2 y Ada requieren soporte para multitarea fuera de cualquier sistema operativo. Como resultado, la implementación popular de JPI / Clarion del lenguaje de programación TopSpeed Modula-2 en la primera mitad de la década de 1990 hizo posible organizar varios tipos de tareas múltiples (cooperativas y preventivas, ver más abajo) para los hilos de una programa dentro de un sistema operativo fundamentalmente de una sola tarea como MS-DOS . Esto se hizo incluyendo un planificador de tareas compacto en el módulo de programa , que contiene un controlador de interrupción de temporizador [3] . Los lenguajes de programación que tienen esta propiedad a veces se denominan lenguajes en tiempo real [4] .
Un tipo de multitarea en el que el sistema operativo carga dos o más aplicaciones en la memoria al mismo tiempo, pero solo la aplicación principal recibe tiempo de CPU. Para que se ejecute una aplicación en segundo plano , debe estar activada. Dicha multitarea se puede implementar no solo en el sistema operativo, sino también con la ayuda de programas de cambio de tareas. Conocido en esta categoría es el programa DESQview , que se ejecutó bajo DOS y se lanzó por primera vez en 1985.
Ventajas: puede usar programas que ya se están ejecutando escritos sin tener en cuenta la multitarea.
Inconvenientes: imposible en sistemas no interactivos que funcionan sin intervención humana. La interacción entre programas es extremadamente limitada.
Un tipo de multitarea en el que la siguiente tarea se ejecuta solo después de que la tarea actual se haya declarado explícitamente lista para dar tiempo de CPU a otras tareas. Como caso especial, dicha declaración está implícita cuando se intenta capturar un objeto mutex ya ocupado (kernel de Linux), así como cuando se espera que llegue el siguiente mensaje del subsistema de interfaz de usuario (versiones de Windows hasta 3.x inclusive, así como aplicaciones de 16 bits en Windows 9x ).
La multitarea cooperativa se puede llamar multitarea de "segunda etapa" porque utiliza técnicas más avanzadas que el simple cambio de tareas implementado por muchos programas conocidos (como DOS Shell de MS-DOS 5.0). Con un simple cambio, el programa activo obtiene todo el tiempo de la CPU y las aplicaciones en segundo plano se congelan por completo. Con la multitarea cooperativa, una aplicación puede tomar tanto tiempo de CPU como considere oportuno. Todas las aplicaciones comparten tiempo de CPU, pasando el control periódicamente a la siguiente tarea.
Ventajas de la multitarea cooperativa: no es necesario proteger todas las estructuras de datos compartidas con objetos como secciones críticas y mutexes, lo que simplifica la programación, especialmente la migración de código de entornos de una sola tarea a entornos multitarea.
Desventajas: la incapacidad de todas las aplicaciones para funcionar en caso de un error en una de ellas, lo que lleva a la ausencia de una llamada a la operación "dar tiempo de CPU". La posibilidad extremadamente difícil de implementar una arquitectura de E / S multitarea en el kernel del sistema operativo, que permite que el procesador ejecute una tarea, mientras que otra tarea ha iniciado una operación de E / S y está esperando su finalización.
Un tipo de multitarea en el que el propio sistema operativo transfiere el control de un programa ejecutable a otro en caso de que se completen las operaciones de E/S, la ocurrencia de eventos en el hardware de la computadora, la expiración de los temporizadores y los intervalos de tiempo, o la recepción. de ciertas señales de un programa a otro. En este tipo de multitarea, el procesador puede pasar de ejecutar un programa a ejecutar otro sin ningún deseo del primer programa y literalmente entre dos instrucciones en su código. La distribución del tiempo del procesador la realiza el planificador de procesos. Además, el usuario o el propio sistema operativo pueden asignar a cada tarea una cierta prioridad, lo que proporciona un control flexible sobre la distribución del tiempo del procesador entre tareas (por ejemplo, puede reducir la prioridad de un programa que consume muchos recursos, por lo que reduciendo su velocidad, pero aumentando el rendimiento de los procesos en segundo plano). Este tipo de multitarea proporciona una respuesta más rápida a las acciones del usuario.
ventajas:
Defectos:
Implementado en sistemas operativos tales como:
El tiempo de retraso desde que se activa un subproceso hasta que se llama al procesador, durante el cual está en la lista de subprocesos listos para ejecutarse. Ocurre debido a la presencia de subprocesos con prioridades mayores o iguales que se ejecutan todo el tiempo.
El efecto negativo es que hay un retraso de tiempo desde que se activa el subproceso hasta que realiza la siguiente operación importante, lo que retrasa la ejecución de esta operación y, después, el trabajo de muchos otros componentes.
El hambre crea un cuello de botella en el sistema y evita que obtenga el máximo rendimiento, limitado solo por cuellos de botella impulsados por hardware.
Cualquier inanición más allá del 100 % del uso de la CPU se puede solucionar aumentando la prioridad del subproceso hambriento, posiblemente temporalmente.
Como regla general, para evitar la inanición, el sistema operativo invoca automáticamente subprocesos de baja prioridad listos para la ejecución, incluso si hay subprocesos de alta prioridad, siempre que el subproceso no se haya ejecutado durante mucho tiempo (~ 10 segundos). Visualmente, esta imagen es bien conocida por la mayoría de los usuarios de Windows: si en uno de los programas el hilo se repite indefinidamente, entonces la ventana frontal funciona bien, a pesar de esto, el hilo asociado con la ventana frontal, Windows aumenta la prioridad. El resto de las ventanas se redibujan con largos retrasos, porciones por segundo, porque su representación en esta situación solo funciona debido al mecanismo de prevención de inanición (de lo contrario, moriría de hambre para siempre).
El orden no determinista de ejecución de dos flujos de código que procesan los mismos datos y se ejecutan en dos subprocesos (tareas) diferentes. Conduce a la dependencia del orden y la corrección de la ejecución de factores aleatorios.
Se elimina añadiendo los bloqueos necesarios y las primitivas de sincronización . Suele ser un defecto fácilmente reparable ( cerradura olvidada ).
El subproceso L tiene una prioridad baja, el subproceso M tiene una prioridad media y el subproceso H tiene una prioridad alta. El subproceso L adquiere la exclusión mutua y, mientras se ejecuta mientras mantiene la exclusión mutua, es interrumpido por el subproceso M, que se ha despertado por algún motivo y tiene una prioridad más alta. El subproceso H intenta adquirir el mutex.
En la situación resultante, el subproceso H está esperando que el subproceso M complete el trabajo actual, porque mientras se ejecuta el subproceso M, el subproceso L de baja prioridad no recibe el control y no puede liberar la exclusión mutua.
Se elimina elevando la prioridad de todos los subprocesos que adquieren una exclusión mutua determinada al mismo valor alto durante el período en que se mantiene la exclusión mutua. Algunas implementaciones de mutex hacen esto automáticamente. Alternativamente, un subproceso que ya ha adquirido la exclusión mutua se promociona después de un intento de adquirir simultáneamente la exclusión mutua por parte de un subproceso de mayor prioridad.
de los sistemas operativos | Aspectos|||||
---|---|---|---|---|---|
| |||||
Tipos |
| ||||
Núcleo |
| ||||
Gestión de procesos |
| ||||
Gestión y direccionamiento de memoria | |||||
Herramientas de carga e inicialización | |||||
caparazón | |||||
Otro | |||||
Categoría Wikimedia Commons Wikilibros Wikcionario |