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 nuevas tareas pueden interrumpir las ya iniciadas antes de que finalicen, en lugar de esperar a que terminen. Como resultado, una computadora ejecuta segmentos de múltiples tareas de manera intercalada, mientras que las tareas comparten recursos de procesamiento comunes, como unidades centrales de procesamiento (CPU) y memoria principal . La multitarea interrumpe automáticamente el programa en ejecución, guardando su estado (resultados parciales, contenido de la memoria y contenido del registro de la computadora) y cargando el estado guardado de otro programa y transfiriéndole el control. Este " cambio de contexto"puede iniciarse a intervalos de tiempo fijos ( multitarea preventiva ), o el programa en ejecución puede codificarse para indicar 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. [1] Incluso en equipos multiprocesador , la multitarea permite ejecutar muchas más tareas que CPU.
La multitarea es una característica común de los sistemas operativos de las computadoras. Permite un uso más eficiente del hardware de la computadora; donde un programa está esperando algún evento externo como una entrada de usuario o una transferencia de entrada / salida con un periférico para completar, el procesador central todavía 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 atiende a muchos usuarios mediante la multitarea de 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. [2]
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 procesador que los que se consideran menos importantes. Dependiendo del sistema operativo, una tarea puede ser tan grande como un programa de aplicación completo, o puede estar formada por subprocesos más pequeños que llevan a cabo partes del programa general.
Un procesador diseñado para su uso con sistemas operativos multitarea puede incluir hardware especial para soportar de forma segura múltiples tareas, como protección de memoria y anillos de protección que garantizan que el software de supervisión no se dañe o altere por errores de 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, danés y noruego.
Multiprogramación
En los primeros días de la informática, el tiempo de la CPU era caro 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. Por lo general, esto era muy ineficaz.
La primera computadora que utilizó un sistema de multiprogramación fue la británica Leo III, 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 ejecutarse. Cuando el primer programa alcanzó una instrucción en espera de 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. [ cita requerida ]
El uso de la multiprogramación se vio reforzado por la llegada de la memoria virtual y la tecnología de máquina virtual , que permitió a los programas individuales hacer uso de la memoria y los recursos del sistema operativo como si otros programas que se ejecutan simultáneamente fueran, a todos los efectos prácticos, inexistentes. [ cita requerida ]
La multiprogramación no garantiza que un programa se ejecute de manera oportuna. De hecho, es muy posible que el primer programa se ejecute 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 en gran medida los tiempos de espera cuando se procesaban varios lotes. [3] [4]
Multitarea cooperativa
Los primeros sistemas multitarea usaban aplicaciones que voluntariamente cedían tiempo entre sí. Este enfoque, que finalmente fue apoyado 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 fue una vez el único esquema de programación empleado por Microsoft Windows y Classic Mac OS para permitir que varias aplicaciones se ejecuten simultáneamente. La multitarea cooperativa todavía se usa hoy en día en sistemas RISC OS . [5]
Como un sistema cooperativo multitarea se basa en que cada proceso cede tiempo regularmente a otros procesos del sistema, un programa mal diseñado puede consumir todo el tiempo de la CPU para sí mismo, ya sea realizando cálculos extensos o esperando ocupada ; ambos harían que todo el sistema se bloqueara . En un entorno de servidor, este es un peligro que hace que todo el entorno sea inaceptablemente frágil.
Multi tareas preventivo
La multitarea preventiva permite que el sistema informático garantice de manera más confiable a cada proceso una "porción" regular de tiempo de operación. También permite que el sistema se ocupe rápidamente de eventos externos importantes, como datos entrantes, 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 forma preventiva. La multitarea preventiva se implementó en PDP-6 Monitor y 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 el PDP-8 de DEC; es una característica central de todos los sistemas operativos similares a Unix, como Linux , Solaris y BSD con sus derivados , [6] 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 " vinculados a E / S ") y aquellos que están utilizando completamente la CPU (" vinculados a la CPU "). En los sistemas primitivos, el software a menudo " sondeo ", o " busywait " a la espera de la entrada solicitada (como el disco, el teclado o la entrada de la red). Durante este tiempo, el sistema no estaba realizando un 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, permitiendo que otros procesos utilicen la CPU. Dado que 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. [ cita requerida ]
El primer sistema operativo preventivo multitarea disponible para los usuarios domésticos fue Sinclair QDOS en Sinclair QL , lanzado en 1984, pero muy pocas personas compraron la máquina. La Amiga de Commodore , lanzada al año siguiente, fue la primera computadora doméstica con éxito comercial en utilizar la tecnología, y sus capacidades multimedia la convierten en un claro antepasado de las computadoras personales multitarea contemporáneas. Microsoft hizo de la multitarea preventiva una característica central de su sistema operativo insignia a principios de la década de 1990 cuando desarrolló Windows NT 3.1 y luego Windows 95 . Más tarde fue adoptado en Apple Macintosh por Mac OS X que, como un sistema operativo similar a Unix, usa multitarea preventiva para todas las aplicaciones nativas.
Se utiliza un modelo similar en Windows 9x y la familia Windows NT , donde las aplicaciones nativas de 32 bits se realizan de forma preventiva para múltiples tareas. [7] Las ediciones de 64 bits de Windows, tanto para las arquitecturas x86-64 como para Itanium , ya no admiten 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 sistemas informáticos en tiempo real , donde hay una serie de actividades externas posiblemente no relacionadas que necesitan ser controladas por un sistema de procesador único. En tales sistemas, un sistema de interrupciones jerárquicas se combina con la priorización de procesos para garantizar que las actividades clave reciban una mayor proporción del tiempo de proceso disponible . [ cita requerida ]
Subprocesos múltiples
Como 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). Sin embargo, esto requirió algunas herramientas para permitir que los procesos intercambiaran datos de manera eficiente. [ cita requerida ]
Los hilos 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. [8] [9] [10]
Si bien los subprocesos se programan de forma preventiva, algunos sistemas operativos proporcionan una variante a los subprocesos, denominados 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 trabajador. Las fibras son incluso más ligeras que los subprocesos y, en cierto modo, más fáciles de programar, aunque tienden a perder algunos o todos los beneficios de los subprocesos en máquinas con varios procesadores . [11]
Algunos sistemas admiten directamente subprocesos múltiples en hardware .
Protección de la memoria
Es esencial para cualquier sistema multitarea compartir de forma segura y eficaz el acceso a los recursos del sistema. El acceso a la memoria debe administrarse estrictamente para garantizar que ningún proceso pueda leer o escribir inadvertidamente 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 rechaza la solicitud y le indica al núcleo que tome las acciones apropiadas; esto generalmente da como resultado la terminación forzosa del proceso de infracción. Dependiendo del software y del diseño del kernel y del error específico en cuestión, el usuario puede recibir un mensaje de error de violación de acceso como "falla de segmentación".
En un sistema multitarea bien diseñado e implementado correctamente, 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 ser compartida mutuamente por múltiples procesos. Estas funciones suelen ser utilizadas por software de gestión de bases de datos como PostgreSQL.
Los 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 primaria en el almacenamiento secundario . Si bien la multitarea y el intercambio de memoria son dos técnicas que no están relacionadas, con mucha frecuencia se usan juntas, ya que el intercambio de memoria permite que se carguen 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 una parte de la memoria se recargue desde el almacenamiento secundario. [12]
Programación
Los procesos que son completamente independientes no son muchos problemas para programar en un entorno multitarea. La mayor parte de la complejidad de los sistemas multitarea proviene de la necesidad de compartir recursos informáticos entre tareas y sincronizar el funcionamiento de las tareas cooperativas. [ cita requerida ]
Se utilizan varias técnicas de computación simultánea para evitar problemas potenciales causados por múltiples tareas que intentan acceder al mismo recurso. [ cita requerida ]
En ocasiones, los sistemas más grandes se construían con un procesador o procesadores centrales y cierto número de procesadores de E / S , una especie de multiprocesamiento asimétrico . [ cita requerida ]
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. [13]
Ver también
- Estado de proceso
- Cambiar de tarea
Referencias
- ^ "Simultaneidad vs paralelismo, programación concurrente vs programación paralela" . Oráculo. Archivado desde el original el 7 de abril de 2016 . Consultado el 23 de marzo de 2016 .
- ^ Anthony Ralston, Edwin D. Reilly (ed), Encyclopedia of Computer Science Third Edition , Van Nostrand Reinhold, 1993 ISBN 0-442-27679-6 , artículos "Multitarea" y "Multiprogramación"
- ^ Lithmee (20 de mayo de 2019). "¿Cuál es la diferencia entre procesamiento por lotes y multiprogramación?" . Pediaa.Com . Consultado el 14 de abril de 2020 .
- ^ "Evolución del sistema operativo" . 2017-09-29 . Consultado el 14 de abril de 2020 .
- ^ "Multitarea preventiva" . riscos.info . 2009-11-03 . Consultado el 27 de julio de 2014 .
- ^ "UNIX, primera parte" . La Iniciativa de Investigación Digital . ibiblio.org. 2002-01-30 . Consultado el 9 de enero de 2014 .
- ^ Joseph Moran (junio de 2006). "Aplicaciones de Windows 2000 y 16 bits" . Computación inteligente . Vol. 16 no. 6. págs. 32–33. Archivado desde el original el 25 de enero de 2009.
- ^ Eduardo Ciliendo; Takechika Kunimasa (25 de abril de 2008). "Pautas de ajuste y rendimiento de Linux" (PDF) . redbooks.ibm.com . IBM . pag. 4. Archivado desde el original (PDF) el 26 de febrero de 2015 . Consultado el 1 de marzo de 2015 .
- ^ "Definición de cambio de contexto" . linfo.org . 28 de mayo de 2006. Archivado desde el original el 18 de febrero de 2010 . Consultado el 26 de febrero de 2015 .
- ^ "¿Qué son los hilos (usuario / kernel)?" . tldp.org . 8 de septiembre de 1997 . Consultado el 26 de febrero de 2015 .
- ^ Diferentes métodos de multitarea Consultado el 19 de febrero de 2019
- ^ "¿Qué es un archivo de intercambio?" . kb.iu.edu . Consultado el 26 de marzo de 2018 .
- ^ "Arquitectura de sistemas operativos" . cis2.oc.ctc.edu . Consultado el 17 de marzo de 2018 .