stringtranslate.com

Multitarea informática

Los sistemas operativos de escritorio modernos son capaces de manejar una gran cantidad de procesos diferentes al mismo tiempo. Esta captura de pantalla muestra Linux Mint ejecutando simultáneamente el entorno de escritorio Xfce , Firefox , un programa de calculadora, el calendario integrado, Vim , GIMP y el reproductor multimedia VLC .
Multitarea de Microsoft Windows 1.01 lanzado en 1985, aquí se muestra ejecutando los programas MS-DOS Executive y Calculator

En informática , la multitarea es la ejecución simultánea de múltiples tareas (también conocidas como procesos ) durante un período de tiempo determinado. Las nuevas tareas pueden interrumpir las ya iniciadas antes de que terminen, en lugar de esperar a que terminen. Como resultado, una computadora ejecuta segmentos de múltiples tareas de manera entrelazada, 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, 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 en 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 computadoras multiprocesador , la multitarea permite ejecutar muchas más tareas que CPU.

La multitarea es una característica común de los sistemas operativos informáticos desde al menos la década de 1960. Permite un uso más eficiente del hardware informático; Cuando un programa está esperando que se complete algún evento externo, como una entrada del 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 utilizan el mismo procesador como si estuviera dedicado a su uso, mientras que detrás de escena la computadora sirve a muchos usuarios realizando 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 por 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 podría compartir un único 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 procesamiento que aquellos considerados 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 ejecutan partes del programa general.

Un procesador diseñado para usarse 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 pueda ser dañado o subvertido 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 utiliza en muchos otros idiomas, como el 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 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) tenía que dejar de ejecutar las instrucciones del programa mientras el periférico procesaba los datos. Por lo general, esto era muy ineficaz. La multiprogramación es una técnica informática que permite cargar y ejecutar múltiples programas simultáneamente en la memoria de una computadora, lo que permite que la CPU cambie entre ellos rápidamente. Esto optimiza la utilización de la CPU manteniéndola comprometida con la ejecución de tareas, lo que es particularmente útil cuando un programa está esperando que se completen las operaciones de E/S.

La Bull Gamma 60 , diseñada inicialmente en 1957 y lanzada por primera vez en 1960, fue la primera computadora diseñada teniendo en cuenta la multiprogramación. Su arquitectura presentaba una memoria central y un distribuidor de programas que alimentaba hasta veinticinco unidades de procesamiento autónomas con código y datos, y permitía el funcionamiento simultáneo de múltiples clústeres.

Otra computadora de este tipo fue la LEO III , lanzada por primera vez en 1961. 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 llegaba a una instrucción en espera de un periférico, el contexto de este programa se almacenaba y el segundo programa en la memoria tenía la oportunidad de ejecutarse. El proceso continuó hasta que todos los programas terminaron de ejecutarse. [3]

El uso de la multiprogramación se vio reforzado por la llegada de la memoria virtual y la tecnología de máquinas virtuales , que permitieron 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 necesaria ]

La multiprogramación no ofrece garantía de que un programa se ejecutará de manera oportuna. De hecho, es muy posible que el primer programa funcione durante horas sin necesidad de acceder a un periférico. Como no había usuarios esperando en un terminal interactivo, 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. [4] [5]

Multitarea cooperativa

Los primeros sistemas multitarea utilizaban aplicaciones que voluntariamente cedían tiempo entre sí. Este enfoque, que finalmente fue respaldado por muchos sistemas operativos informáticos , 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 el Mac OS clásico para permitir que múltiples aplicaciones se ejecutaran simultáneamente. La multitarea cooperativa todavía se utiliza hoy en día en los sistemas RISC OS . [6]

Como un sistema cooperativo multitarea depende de que cada proceso ceda tiempo regularmente a otros procesos del sistema, un programa mal diseñado puede consumir todo el tiempo de la CPU, ya sea realizando cálculos extensos o esperando ocupadamente ; ambos provocarí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

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

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 funcionamiento. También permite que el sistema se ocupe rápidamente de eventos externos importantes, como datos entrantes, que podrían 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 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 la PDP-8 de DEC; es una característica central de todos los sistemas operativos tipo Unix , como Linux , Solaris y BSD con sus derivados , [7] así como de 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 " limitados a E/S ") y aquellos que están utilizando completamente la CPU (" limitados a CPU "). En sistemas primitivos, el software a menudo " sondeaba " o " ocupadoesperaba " mientras esperaba la entrada solicitada (como disco, teclado o entrada de red). Durante este tiempo, el sistema no realizó ningún trabajo útil. Con la llegada de las interrupciones y la multitarea preventiva, los procesos vinculados a E/S podrían "bloquearse" o ponerse en espera, en espera de la llegada de los datos necesarios, permitiendo que otros procesos utilicen la CPU. Como la llegada de los datos solicitados generaría una interrupción, se podría garantizar que los procesos bloqueados vuelvan a ejecutarse oportunamente. [ cita necesaria ]

El primer sistema operativo preventivo multitarea disponible para usuarios domésticos fue Sinclair QDOS en Sinclair QL , lanzado en 1984, pero no fue un gran éxito. Amiga de Commodore , lanzado al año siguiente, fue la primera computadora doméstica comercialmente exitosa que utilizó esta 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 . En 1988, Apple ofreció A/UX como una alternativa basada en UNIX System V al Classic Mac OS . En 2001, Apple cambió al Mac OS X , influenciado por NeXTSTEP .

Se utiliza un modelo similar en Windows 9x y la familia Windows NT , donde las aplicaciones nativas de 32 bits realizan múltiples tareas de forma preventiva. [8] 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, proporcionan 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 deben ser controladas por un único sistema de procesador. En tales 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 proporción del tiempo de proceso disponible . [9]

subprocesos múltiples

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). Sin embargo, esto requirió algunas herramientas para permitir que los procesos intercambien datos de manera eficiente. [ cita necesaria ]

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 efectivamente 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 livianos porque cambiar entre subprocesos no implica cambiar el contexto de la memoria. [10] [11] [12]

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

Algunos sistemas admiten directamente subprocesos múltiples en hardware .

Protección de memoria

Esencial para cualquier sistema multitarea es compartir de forma segura y eficaz el acceso a los recursos del sistema. El acceso a la memoria debe gestionarse estrictamente para garantizar que ningún proceso pueda leer o escribir de forma inadvertida o deliberada en ubicaciones de memoria fuera del espacio de direcciones del proceso. Esto se hace con el fin de garantizar la estabilidad general del sistema y la integridad de los datos, así como la seguridad de los datos.

En general, la gestión del acceso a la memoria es responsabilidad del núcleo del sistema operativo, en combinación con mecanismos de hardware que proporcionan funcionalidades de soporte, como una unidad de gestió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 núcleo que tome las acciones apropiadas; Esto generalmente resulta en la terminación forzosa del proceso infractor. Dependiendo del diseño del software y del kernel y del error específico en cuestión, el usuario puede recibir un mensaje de error de infracción de acceso como "fallo de segmentación".

En un sistema multitarea bien diseñado e implementado correctamente, un proceso determinado nunca puede acceder directamente a la memoria que pertenece a otro proceso. Una excepción a esta regla es el caso de la memoria compartida; por ejemplo, en el mecanismo de comunicación entre procesos del System V, el núcleo asigna memoria para que la compartan mutuamente varios procesos. Estas funciones suelen ser utilizadas por software de gestión de bases de datos como PostgreSQL.

Los mecanismos inadecuados de protección de la memoria, 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 que tiene el sistema operativo de proporcionar más memoria de la que está físicamente disponible manteniendo partes de la memoria primaria en el almacenamiento secundario . Si bien la multitarea y el intercambio de memoria son dos técnicas completamente independientes, muy a menudo se usan juntas, ya que el intercambio de memoria permite cargar más tareas al mismo tiempo. Normalmente, 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. [14]

Programación

Los procesos que son completamente independientes no suponen 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 la operación de tareas cooperativas. [ cita necesaria ]

Se utilizan varias técnicas informáticas simultáneas para evitar posibles problemas causados ​​por múltiples tareas que intentan acceder al mismo recurso. [ cita necesaria ]

A veces, los sistemas más grandes se construían con procesador(es) central(es) y cierta cantidad de procesadores de E/S , una especie de multiprocesamiento asimétrico . [ cita necesaria ]

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

Ver también

Referencias

  1. ^ "Simultaneidad versus paralelismo, programación concurrente versus programación paralela". Oráculo. Archivado desde el original el 7 de abril de 2016 . Consultado el 23 de marzo de 2016 .
  2. ^ Anthony Ralston, Edwin D. Reilly (ed), Encyclopedia of Computer Science, tercera edición , Van Nostrand Reinhold, 1993, ISBN 0-442-27679-6 , artículos "Multitarea" y "Multiprogramación" 
  3. ^ PROGRAMA MAESTRO Y SISTEMA DE PRUEBAS DEL PROGRAMA PARTE 1 ESPECIFICACIÓN DEL PROGRAMA MAESTRO. Febrero de 1965. apartado 6 “RUTINAS DE CONTROL DE PRIORIDADES”.
  4. ^ 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 .
  5. ^ "Evolución del sistema operativo". 2017-09-29 . Consultado el 14 de abril de 2020 .
  6. ^ "Multitarea preventiva". risco.info . 03/11/2009 . Consultado el 27 de julio de 2014 .
  7. ^ "UNIX, primera parte". La Iniciativa de Investigación Digital . ibiblio.org. 2002-01-30 . Consultado el 9 de enero de 2014 .
  8. ^ Joseph Moran (junio de 2006). "Aplicaciones de Windows 2000 y 16 bits". Computación inteligente . vol. 16, núm. 6. págs. 32–33. Archivado desde el original el 25 de enero de 2009.
  9. ^ Liu, CL; Layland, James W. (1 de enero de 1973). "Algoritmos de programación para multiprogramación en un entorno de tiempo real complicado". Revista de la ACM . 20 (1): 46–61. doi : 10.1145/321738.321743 . ISSN  0004-5411. S2CID  59896693.
  10. ^ 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 .
  11. ^ "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 .
  12. ^ "¿Qué son los subprocesos (usuario/kernel)?". tldp.org . 8 de septiembre de 1997 . Consultado el 26 de febrero de 2015 .
  13. ^ Multitarea con diferentes métodos. Consultado el 19 de febrero de 2019.
  14. ^ "¿Qué es un archivo de intercambio?". kb.iu.edu . Consultado el 26 de marzo de 2018 .
  15. ^ "Arquitectura de sistemas operativos". cis2.oc.ctc.edu . Consultado el 17 de marzo de 2018 .