Articulo de referencia

multitarea cooperativa

La multitarea cooperativa , también conocida como multitarea no preferente , es una técnica informática en la que el sistema operativo nunca inicia un cambio de contexto entre p...

La multitarea cooperativa , también conocida como multitarea no preferente , es una técnica informática en la que el sistema operativo nunca inicia un cambio de contexto entre procesos en ejecución . En cambio, para ejecutar varias aplicaciones simultáneamente, los procesos ceden el control voluntariamente de forma periódica o cuando están inactivos o bloqueados lógicamente . Este tipo de multitarea se denomina cooperativa porque todos los programas deben cooperar para que el esquema de planificación funcione.

En este esquema, el planificador de procesos de un sistema operativo se conoce como planificador 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 asíncrona .

Uso

Aunque rara vez se utiliza como mecanismo de planificación principal en los sistemas operativos modernos, se usa ampliamente en sistemas embebidos con memoria limitada y en aplicaciones específicas como CICS o el subsistema JES2 . La multitarea cooperativa fue el esquema de planificació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 usó multitarea no preemptiva para aplicaciones heredadas de 16 bits, y las versiones PowerPC de Mac OS  X anteriores a Leopard la usaron para aplicaciones clásicas . [ 1 ] NetWare , que es un sistema operativo orientado a la red, usó multitarea cooperativa hasta NetWare  6.5. La multitarea cooperativa todavía se usa en 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 hilo en su entorno de ejecución. Esto contrasta con la multitarea cooperativa, ya que await no puede invocarse desde una función no asíncrona, sino solo desde una función asíncrona, que es un tipo 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 planificador de procesos; por ejemplo, varias funciones dentro de la aplicación no necesitan ser reentrantes . [ 2 ]

Problemas

Dado que un sistema multitarea cooperativo depende de que cada proceso ceda tiempo regularmente a otros procesos del sistema, un programa mal diseñado puede consumir todo el tiempo de CPU para sí mismo, ya sea realizando cálculos extensos o esperando activamente ; ambos provocarían que todo el sistema se bloqueara . En un entorno de servidor , este es un riesgo 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 servidor, incluidos NetWare y CICS.

En cambio, la multitarea preventiva interrumpe las aplicaciones y cede el control a otros procesos ajenos al control de la aplicación.

La posibilidad de que el sistema se bloquee se puede mitigar utilizando un temporizador de vigilancia , que a menudo se implementa en el hardware; esto normalmente provoca un reinicio del hardware .

Véase también

Referencias

  1. 1 2 3 "Definición de multitarea no preemptiva" . pcmag.com . Consultado el 15 de agosto de 2015 .
  2. 1 2 Joe Bartel (5 de noviembre de 2011). "Multitarea no preventiva" (PDF) . classiccmp.org . Archivado del original (PDF) el 19 de agosto de 2019. Recuperado el 15 de agosto de 2015 .
  3. "Multitarea preventiva" . riscos.info . 2 de noviembre de 2009. Consultado el 15 de agosto de 2015 .
  4. Kerkour, Sylvain (25 de enero de 2022). "Async Rust: Planificación cooperativa frente a planificación preventiva" . Consultado el 30 de enero de 2023 .
  5. Skvortsov, Victor. "Python entre bastidores #12: Cómo funciona async/await en Python" . Consultado el 30 de enero de 2023 .