En informática , la preempción es el acto realizado por un planificador externo —sin asistencia ni cooperación de la tarea— de interrumpir temporalmente una tarea en ejecución , con la intención de reanudarla más tarde. [ 1 ] : 153 Este planificador preemptivo generalmente se ejecuta en el anillo de protección más privilegiado , lo que significa que la interrupción y luego la reanudación se consideran acciones altamente seguras. Tales cambios en la tarea que se está ejecutando actualmente en un procesador se conocen como cambio de contexto .
Modo de usuario y modo kernel
En cualquier diseño de sistema, algunas operaciones realizadas por el sistema pueden no ser interrumpibles. Esto suele aplicarse a las funciones del núcleo y a las interrupciones de servicio que, si no se les permite completarse , tenderían a generar condiciones de carrera que provocarían un interbloqueo . Impedir que el planificador interrumpa tareas mientras procesan funciones del núcleo simplifica el diseño del núcleo a costa de la capacidad de respuesta del sistema . La distinción entre el modo de usuario y el modo del núcleo , que determina el nivel de privilegio dentro del sistema, también puede utilizarse para determinar si una tarea es interrumpible en ese momento.
La mayoría de los sistemas operativos modernos tienen núcleos preemptivos , diseñados para permitir que las tareas sean interrumpidas incluso cuando están en modo núcleo. Ejemplos de estos sistemas operativos son Solaris 2.0/SunOS 5.0, [ 2 ] Windows NT , el núcleo de Linux (2.5.4 y posteriores), [ 3 ] AIX y algunos sistemas BSD ( NetBSD , desde la versión 5).
multitarea preventiva
El término multitarea preventiva se utiliza para distinguir un sistema operativo multitarea , que permite la interrupción de tareas, de un sistema multitarea cooperativo en el que los procesos o tareas deben programarse explícitamente para ceder el paso cuando no necesitan recursos del sistema.
En términos sencillos: la multitarea preventiva implica el uso de un mecanismo de interrupción que suspende el proceso que se está ejecutando y activa un planificador para determinar qué proceso debe ejecutarse a continuación. Por lo tanto, todos los procesos dispondrán de una cierta cantidad de tiempo de CPU en cualquier momento dado.
En la multitarea preventiva, el núcleo del sistema operativo también puede iniciar un cambio de contexto para satisfacer la restricción de prioridad de la política de planificación , interrumpiendo así la tarea activa. En general, la interrupción significa "toma de control prioritaria". Cuando la tarea de alta prioridad en ese momento toma el control de la tarea que se está ejecutando, se habla de planificación preventiva.
El término "multitarea preventiva" a veces se usa erróneamente cuando el significado previsto es más específico, refiriéndose en cambio a la clase de políticas de planificación conocidas como planificación de tiempo compartido o tiempo compartido .
La multitarea preventiva permite que el sistema informático garantice de forma más fiable a cada proceso una porción regular de tiempo de funcionamiento. También permite que el sistema gestione rápidamente eventos externos importantes, como la llegada de datos, que podrían requerir la atención inmediata de uno u otro proceso.
En cualquier momento dado, los procesos se pueden agrupar en dos categorías: aquellos que esperan entrada o salida (denominados " limitados a E/S ") y aquellos que utilizan completamente la CPU (" limitados a la CPU "). En los primeros sistemas, los procesos solían " sondear " o " esperar activamente " mientras aguardaban la entrada solicitada (como entrada de disco, teclado o red). Durante este tiempo, el proceso no realizaba trabajo útil, pero mantenía el control total de la CPU. Con la llegada de las interrupciones y la multitarea preventiva, estos procesos limitados a E/S podían "bloquearse" o ponerse en espera, aguardando la llegada de los datos necesarios, lo que permitía a otros procesos utilizar la CPU. Dado que la llegada de los datos solicitados generaba una interrupción, se garantizaba a los procesos bloqueados un retorno oportuno a la ejecución.
Aunque las técnicas multitarea se desarrollaron originalmente para permitir que varios usuarios compartieran una sola máquina, pronto se hizo evidente su utilidad independientemente del número de usuarios. Muchos sistemas operativos, desde grandes ordenadores hasta ordenadores personales de un solo usuario y sistemas de control sin usuario (como los de las naves espaciales robóticas ), han reconocido la utilidad de la compatibilidad con la multitarea por diversas razones. La multitarea permite que un solo usuario ejecute varias aplicaciones simultáneamente o procesos en segundo plano manteniendo el control del ordenador.
Fragmento de tiempo
El período de tiempo durante el cual se permite que un proceso se ejecute en un sistema multitarea con desalojo se denomina generalmente segmento de tiempo o cuanto . [ 1 ] : 158 El planificador se ejecuta una vez en cada segmento de tiempo para elegir el siguiente proceso a ejecutar. La duración de cada segmento de tiempo puede ser crítica para equilibrar el rendimiento del sistema con la capacidad de respuesta del proceso: si el segmento de tiempo es demasiado corto, el planificador consumirá demasiado tiempo de procesamiento, pero si el segmento de tiempo es demasiado largo, los procesos tardarán más en responder a la entrada.
Se programa una interrupción para permitir que el núcleo del sistema operativo cambie entre procesos cuando expiran sus intervalos de tiempo, lo que permite que el tiempo del procesador se comparta entre varias tareas, creando la ilusión de que las procesa en paralelo (simultáneamente). El sistema operativo que controla este diseño se denomina sistema multitarea.
Soporte del sistema
Actualmente, casi todos los sistemas operativos admiten la multitarea preventiva, incluidas las versiones actuales de Windows , Linux (incluido Android ) y Darwin (incluidos macOS e iOS ).
Un sistema operativo de microcomputadoras primitivo que proporcionaba multitarea preventiva fue OS-9 de Microware , disponible para computadoras basadas en el Motorola 6809 , incluidas computadoras domésticas como la TRS-80 Color Computer 2 cuando se configuraba con unidades de disco, [ 4 ] con el sistema operativo suministrado por Tandy como una actualización. [ 5 ] Sinclair QDOS [ 6 ] : 18 y AmigaOS en Amiga también fueron sistemas operativos de microcomputadoras que ofrecían multitarea preventiva como una característica principal. Ambos se ejecutaban en microprocesadores de la familia Motorola 68000 sin gestión de memoria. Amiga OS utilizaba la carga dinámica de bloques de código reubicables (" fragmentos " en la jerga de Amiga) para realizar multitarea preventivamente todos los procesos en el mismo espacio de direcciones plano.
Los primeros sistemas operativos para ordenadores compatibles con IBM PC, como MS-DOS y PC DOS , no admitían la multitarea en absoluto; sin embargo, sistemas operativos alternativos como MP/M-86 (1981) y Concurrent CP/M-86 sí admitían la multitarea con prioridad. Otros sistemas tipo Unix, como MINIX y Coherent, ofrecían multitarea con prioridad en los ordenadores personales de la década de 1980.
Los sistemas compatibles con MS-DOS posteriores que admiten de forma nativa la multitarea/multihilo con prioridad incluyen Concurrent DOS , Multiuser DOS , Novell DOS (más tarde llamado Caldera OpenDOS y DR-DOS 7.02 y versiones posteriores). Desde Concurrent DOS 386 , también podían ejecutar varios programas DOS simultáneamente en máquinas virtuales DOS .
La primera versión de Windows que admitía una forma limitada de multitarea preventiva fue Windows/386 2.0 , que utilizaba el modo Virtual 8086 del Intel 80386 para ejecutar aplicaciones DOS en máquinas virtuales 8086 , comúnmente conocidas como "cajas DOS", que podían ser preventivas. En Windows 95, 98 y Me , las aplicaciones de 32 bits se volvieron preventivas al ejecutarse cada una en un espacio de direcciones separado, pero las aplicaciones de 16 bits permanecieron cooperativas para la retrocompatibilidad. [ 7 ] En Windows 3.1x (modo protegido), el kernel y los controladores de dispositivos virtuales se ejecutaban preventivamente, pero todas las aplicaciones de 16 bits no eran preventivas y compartían el mismo espacio de direcciones.
La multitarea preventiva siempre ha sido compatible con Windows NT (todas las versiones), OS/2 (aplicaciones nativas), sistemas Unix y similares a Unix (como Linux , BSD y macOS ), VMS , OS/360 y muchos otros sistemas operativos diseñados para su uso en los mercados académico y de empresas medianas y grandes.
Las primeras versiones del Mac OS clásico no admitían la multitarea en absoluto, y la multitarea cooperativa estuvo disponible a través de MultiFinder en System Software 5 y luego se convirtió en estándar en System 7. Aunque había planes para actualizar la multitarea cooperativa que se encontraba en el Mac OS clásico a un modelo preventivo (y existía una API preventiva en Mac OS 9 , aunque en un sentido limitado [ 8 ] ), estos fueron abandonados en favor de Mac OS X (ahora llamado macOS) que, como un híbrido del estilo del antiguo Mac System y NeXTSTEP , es un sistema operativo basado en el núcleo Mach y derivado en parte de BSD , que siempre había proporcionado multitarea preventiva similar a Unix.
Véase también
Referencias
- 1 2 Tanenbaum, Andrew (2015). Sistemas operativos modernos . Boston: Pearson. ISBN 978-0-13-359162-0OCLC 870646449
- ↑ Khanna, S.; Sebree, M.; Zolnovsky, J. "Planificación en tiempo real en SunOS 5.0". Actas de la Conferencia de Invierno de USENIX, 1992 : 375–390 .
- ↑ "Notas de la versión v2.5.4" . Archivos del núcleo de Linux . Organización del núcleo de Linux, Inc. Consultado el 3 de julio de 2021 .
- ↑ Downard, Dan (septiembre de 1983). "Dynamic Uno" . The Rainbow . págs. 236–240 . Recuperado el 9 de mayo de 2024 .
- ↑ Catálogo TRS-80 de 1984. Tandy Corporation. 1984. págs. 53–54 . Consultado el 14 de mayo de 2024 .
- ↑ Pennell, Andrew (1985). The Sinclair QDOS Companion . Sunshine Books. ISBN 978-0-946408-69-6. Consultado el 12 de mayo de 2024 .
- ↑ "Cómo los programas de 16 y 32 bits realizan multitarea en Windows 95 (Q117567)" . Archivado del original el 17 de enero de 2008. Consultado el 17 de enero de 2008 .
- ↑ "Re: pregunta de principiante: ¿Qué es una tarea azul?" . Archivado del original el 13 de octubre de 2007. Consultado el 29 de marzo de 2007 .
- Tecnología de sistemas operativos
- Computación concurrente