Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción a al Multitarea
Introducción a la Multitarea
Conceptos básicos
Cada tarea al ejecutarse, es como si fuera la única dentro del sistema que se está
ejecutando y con acceso a todos los recursos y servicios que nos brinda el sistema
operativo.
Los procesos que se ejecutan de forma concurrente (al mismo tiempo) pueden
representar:
• Programas diferentes
• Partes diferentes de un mismo programa
• Diferentes instancias de un mismo programa (cada instancia es una copia en
ejecución del mismo programa)
• El tamaño de la memoria
• La velocidad del procesador central (CPU)
• El tamaño de los programas
• La tecnología del procesador para soportar la multitarea
Una característica importante del sistema operativo para poder soportar la multitarea
es que cada proceso esté protegido del resto de los procesos.
Protegido quiere decir que se ejecuta en un espacio físico y lógico que garantiza su ejecución y que no es
alcanzado accidentalmente por ningún otro proceso, no quiere decir aislado completamente (existen
formas de comunicar un proceso con otro si es necesario).
Esta protección de procesos realizada a nivel de kernel (núcleo de ejecución del sistema
operativo), permite que cuando un proceso se detiene por alguna razón (halt o crash) el
resto de los procesos y el propio sistema operativo continúan normalmente con su
ejecución.
• Monotarea: solo ejecutan una tarea al mismo tiempo, por ejemplo el MS-DOS
• Multitarea: pueden ejecutar simultáneamente múltiples tareas. Aquí se incluyen
prácticamente todos los sistemas operativos modernos como Windows XP/7,
Mac OSX o UNIX/Linux
En los sistemas operativos monotarea, el CPU permanece ocioso (idle) hasta que el
recurso que demanda el programa está disponible (un disco o una impresora por
ejemplo). Esta espera es una pérdida de tiempo de proceso y de eficiencia del sistema.
Si solo hay un procesador, a las tareas no les queda otro camino que compartirlo y al
sistema operativo asignarles el tiempo de ejecución que les toca.
Orígenes de la multitarea
La multitarea se originó en los años 60, cuando los sistemas de tiempo compartido
fueron desarrollados como una alternativa para abaratar los costes de explotación de
los grandes ordenadores (mainframes), permitiendo su uso por múltiples usuarios.
A su vez el sistema de tiempo compartido desarrolló los primeros algoritmos para que
un usuario pudiera tener su propia zona protegida de memoria y el acceso a recursos
compartidos del sistema sin interferir en el trabajo de otros usuarios.
Pronto se hizo evidente que esta misma técnica de tiempo compartido, podía aplicarse
a los procesos o tareas ejecutados por un mismo usuario. Con un hardware más
potente, fue más fácil que los usuarios pudieran ejecutar a la vez varios procesos,
haciendo un uso más óptimo del sistema y del ordenador.
De esta manera el término “tiempo compartido” (time sharing) fue sustituido por un
término más genérico: multitarea (multitasking), teniendo en cuenta que cada una de
las conexiones de usuario representaban a su vez tareas para el proceso operativo.
De esta forma, cada usuario conectado abría una tarea de usuario. A su vez cada usuario
dentro de su tarea de usuario, podía ejecutar varias tareas o procesos de manera
simultánea.
IBM fue uno de los líderes en implementar los primeros sistemas operativos multitarea,
tales como el OS/360 y OS/370. Aun hoy en día su entorno interactivo multitarea se
sigue llamando TSO (Time Sharing Option) incluso para los sistemas más recientes como
MVS, OS/390 y z/OS.
Otro centro importante en el desarrollo de los sistemas operativos multitarea fueron los
laboratorios Bell, los creadores del sistema operativo UNIX entre 1969 y1972.
El sistema operativo UNIX fue muy famoso por ser el primer sistema escrito en lenguaje
de programación C y en ser explotado no solo comercialmente sino por instituciones
científicas y universitarias. Miles de horas de entusiastas programadores invertidas en
su desarrollo, le convirtieron en el padre de numerosos sistemas operativos modernos
tales como AIX, Solaris, Linux o Mac OSX.
Algunos de los sistemas operativos de tiempo real más importantes son: RTLinux,
Neutrino o QNX.
Multi-hilos (Multi-threading)
Esto requirió algunas herramientas que permitieran que estos procesos pudieran
comunicarse entre sí.
Así nacieron los hilos de ejecución o threads, con el objetivo de implementar una vía
eficiente de ejecutar procesos que compartieran un único espacio de memoria para
intercambiar datos.
Dicho de otra manera, los hilos de ejecución son procesos que se ejecutan en un mismo
espacio o contexto de memoria (memory context).
Los hilos se consideran procesos ligeros (lightweight processes) porque los cambios
entre un hilo y otro no implican cambiar el contexto de memoria.
Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio
de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite
simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones
simultáneamente.
Otros (la mayoría) desconocen la existencia de hilos de ejecución y éstos deben ser
creados mediante llamadas de biblioteca especiales que dependen del sistema
operativo en el que estos lenguajes están siendo utilizados (como es el caso del C , C++ o
Microsoft .NET C#).
Fibras
Mientras que los hilos son ejecutados mediante multitarea preventiva (preemptive
multitasking), algunos sistemas operativos ofrecen una variante de hilos denominada
fibras (fiber) que se ejecutan de manera cooperativa.
Las fibras son unidades de ejecución aún más ligeras que los hilos. Una fibra en ejecución
debe ceder o permitir explícitamente la ejecución de otra fibra. Eso es más simple que
implementar hilos a nivel de kernel o a nivel de usuario.
Esto permite que las aplicaciones puedan administrar por ellas mismas la multitarea, en
vez de utilizar el planificador del kernel (kernel scheduler).