stringtranslate.com

Multitarea cooperativa

La multitarea cooperativa , también conocida como multitarea no preventiva , es un estilo de multitarea informática en el que el sistema operativo nunca inicia un cambio de contexto de un proceso en ejecución a otro proceso. En cambio, para ejecutar múltiples aplicaciones simultáneamente, los procesos ceden el control voluntariamente periódicamente o cuando están inactivos o lógicamente bloqueados . Este tipo de multitarea se llama cooperativa porque todos los programas deben cooperar para que funcione el esquema de programación.

En este esquema, el programador de procesos de un sistema operativo se conoce como programador cooperativo cuya función se limita a iniciar los procesos y permitirles devolverle el control voluntariamente. [1] [2]

Esto está relacionado con el enfoque de programación asincrónica .

Uso

Aunque rara vez se utiliza como mecanismo de programación principal en los sistemas operativos modernos, se usa ampliamente en sistemas integrados con memoria limitada y también en aplicaciones específicas como CICS o el subsistema JES2 . La multitarea cooperativa fue el esquema de programación principal para aplicaciones de 16 bits empleado por Microsoft Windows antes de Windows 95 y Windows NT , y por el Mac OS clásico . Windows 9x usaba multitarea no preventiva para aplicaciones heredadas de 16 bits, y las versiones PowerPC de Mac OS X anteriores a Leopard la usaban para aplicaciones clásicas . [1] NetWare , que es un sistema operativo orientado a la red, utilizaba multitarea cooperativa hasta NetWare 6.5. La multitarea cooperativa todavía se utiliza en los sistemas RISC OS . [3]

La multitarea cooperativa es similar a async/await en lenguajes como JavaScript o Python , que cuentan con un bucle de eventos de un solo subproceso en su tiempo de ejecución. Esto contrasta con la multitarea cooperativa en que await no se puede invocar desde una función no asíncrona, sino solo desde una función asíncrona, que es una especie de corrutina . [4] [5]

La multitarea cooperativa permite una implementación mucho más sencilla de las aplicaciones porque su ejecución nunca es interrumpida inesperadamente por el programador de procesos; por ejemplo, no es necesario reentrar varias funciones dentro de la aplicación . [2]

Problemas

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 a menudo se considera que hace que todo el entorno sea inaceptablemente frágil, [1] aunque, como se señaló anteriormente, la multitarea cooperativa se ha utilizado con frecuencia en entornos de servidores, incluidos NetWare y CICS.

Por el contrario, la multitarea preventiva interrumpe las aplicaciones y da control a otros procesos fuera del control de la aplicación.

La posibilidad de que el sistema se cuelgue se puede aliviar mediante el uso de un temporizador de vigilancia , a menudo implementado en el hardware; esto normalmente invoca un reinicio del hardware .

Referencias

  1. ^ abc "Definición de multitarea no preventiva". pcmag.com . Consultado el 15 de agosto de 2015 .
  2. ^ ab Joe Bartel (5 de noviembre de 2011). "Multitarea no preventiva" (PDF) . classiccmp.org . Archivado desde el original (PDF) el 19 de agosto de 2019 . Consultado el 15 de agosto de 2015 .
  3. ^ "Multitarea preventiva". risco.info . 2 de noviembre de 2009 . Consultado el 15 de agosto de 2015 .
  4. ^ Kerkour, Sylvain (25 de enero de 2022). "Async Rust: programación cooperativa versus preventiva" . Consultado el 30 de enero de 2023 .
  5. ^ Skvortsov, Víctor. "Python detrás de escena n.° 12: cómo funciona async/await en Python" . Consultado el 30 de enero de 2023 .