¿Cómo funciona la multitarea?

14

Estoy completamente despistado sobre el funcionamiento interno de un sistema operativo, pero puedo adivinar más o menos el comportamiento aproximado de muchas funciones. Sin embargo, una cosa que no puedo resolver es la multitarea.

En teoría, el sistema operativo administra el tiempo, de acuerdo con la CPU para pequeños intervalos a los diversos programas que se ejecutan. Pero no está claro cómo funciona realmente .

Digamos que el sistema operativo quiere iniciar mi programa. El código de la máquina se carga en algún lugar de la RAM, comenzando en una dirección determinada. Supongo que entonces debería realizarse un salto a esa dirección, permitiendo que mi código se ejecute. Pero de esta manera, el sistema operativo no puede recuperar el control hasta que retroceda.

Básicamente, puedo imaginar solo dos formas de hacer que esto funcione, pero ninguna parece realmente adecuada:

  • El sistema operativo podría leer las instrucciones de la máquina que quiero realizar y emularlas en lugar de ejecutarlas directamente. Soy intencionalmente vago, ya que no sé cómo funcionaría esto, pero parece que ralentizaría considerablemente el programa.

  • Alternativamente, el sistema operativo podría esperar hasta que haga una llamada al sistema. En ese momento, recupera el control y puede verificar cuánto tiempo he estado corriendo y hacer su tiempo compartido. Esto puede funcionar, pero parece poco confiable, ya que podría hacer un cálculo largo que no implique llamadas al sistema y colgar todo por un tiempo.

Entonces, parece que ningún mecanismo funcionaría muy bien. ¿Cómo se realiza realmente la multitarea?

    
pregunta Andrea 08.06.2011 - 13:41

3 respuestas

19

El sistema operativo programa un temporizador para activarse cada pocos microsegundos (o milisegundos, según la velocidad del sistema). Este temporizador eleva la interrupción de hardware, lo que hace que la CPU detenga lo que esté haciendo actualmente, descargue todo su contenido en la pila y procese la rutina de interrupción indicada por la dirección proporcionada por el controlador de interrupción. Esta rutina puede inspeccionar la pila y varias otras variables para tomar una decisión sobre qué proceso en ejecución se debe volver a poner en práctica. Si es el mismo proceso, la rutina de interrupción simplemente regresa. Si es diferente, las partes relevantes de la pila se guardan y luego se reemplazan con el contenido de un proceso previamente interrumpido, de modo que cuando la rutina de interrupción regresa, ese proceso continúa. Aparte del hecho de que ha transcurrido algún tiempo, ese proceso no es consciente de haber sido interrumpido y / o detenido durante algún tiempo.

Esto es (para las CPU modernas) una versión MUY MUY simplificada de lo que sucede, pero explica el principio. Además de estas interrupciones controladas por el sistema operativo, también hay interrupciones causadas por eventos externos (mouse, teclado, puertos serie, puertos de red, etc.) que se procesan con rutinas de interrupción separadas, que generalmente están conectadas a los controladores de eventos.

Muy a menudo, el cambio de proceso / tarea / contexto también se basa en la disponibilidad de recursos externos. Por lo general, un proceso que requiere datos del almacenamiento (es decir, no en la RAM) colocará la solicitud en una cola, establecerá un controlador de eventos para la interrupción de hardware que indica que la solicitud ha sido atendida y luego entregará el control al programador de tareas (ya que no hay punto de espera). Una vez más, una descripción muy simplificada de lo que realmente sucede, pero debería servir a los propósitos de esta respuesta.

    
respondido por el wolfgangsz 08.06.2011 - 14:22
5

Varía de un sistema a otro.

En los sistemas multitarea no preventivos (como el Oberon original o el Apple Macintosh original), el sistema operativo "sondea" periódicamente todas las tareas, dándoles la oportunidad de hacer un trabajo. Se espera que las tareas jueguen bien juntas. Si solo tienen un poco de trabajo que hacer, lo hacen y regresan al sistema operativo. Si una tarea tiene una parte GRANDE de hacer, se espera que se rompa en pedazos pequeños y que se trabaje un poco cada vez que se encueste.

Las interrupciones de hardware (finalizaciones de DMA de la unidad de disco, interrupciones del puerto serie, ¿qué es lo que tiene) hacen que se ejecuten las rutinas de interrupción? Estas rutinas de interrupción pueden, a su vez, notificar a las tareas el trabajo que debe realizarse la próxima vez que se ejecute la tarea.

En los sistemas multitarea no preventivos, la ocurrencia o no ocurrencia de una interrupción no afecta a qué tarea se está ejecutando después de que finaliza la rutina de interrupción.

En los sistemas multitarea preferentes, es posible que una rutina de interrupción fuerce un cambio de programación. En un sistema multitarea preventivo de round-robin tradicional, una interrupción periódica del temporizador hace exactamente eso. La interrupción del temporizador se dispara, la rutina de la interrupción del temporizador hace magia negra para hacer que la instrucción de retorno de la interrupción regrese a la programación preventiva del sistema operativo, en lugar de a la tarea en ejecución, alejando al procesador de la tarea actual, y (POSIBLEMENTE ) dandolo a otra tarea. Si ninguna otra tarea está lista para ejecutarse en ese momento, la tarea actual volverá a obtener el procesador, y solo habrá perdido algo de tiempo.

La multitarea preventiva puede causar MUCHOS problemas. Todas esas cosas molestas sobre mutexes y secciones críticas y abrazos mortales e inversiones de prioridad y ... aparecen cuando el procesador se lo quitan sin previo aviso. Tiene que usar todas esas cosas para decirle al sistema operativo que está mezclando la nitroglicerina y le está quitando el procesador en este momento, lo que probablemente resulte en un gran agujero para fumar en el medio del piso de la sala de servidores.

    
respondido por el John R. Strohm 08.06.2011 - 18:24
4

El hardware de la computadora puede generar interrupciones del temporizador para interrumpir la CPU. De esta manera, en función del algoritmo de programación utilizado por el sistema operativo, el sistema operativo puede decidir si continuar ejecutando su programa actual o cambio de contexto a otro que está listo para ejecutarse.

    
respondido por el nevayeshirazi 08.06.2011 - 14:09

Lea otras preguntas en las etiquetas