En informática , una tarea es una unidad de ejecución o una unidad de trabajo. El término es ambiguo; Los términos alternativos precisos incluyen proceso , proceso liviano , hilo (para ejecución), paso , solicitud o consulta (para trabajo). En el diagrama adyacente, hay colas de trabajo entrante por realizar y trabajo saliente completado, y un grupo de subprocesos para realizar este trabajo. Se puede hacer referencia a las unidades de trabajo en sí o a los subprocesos que realizan el trabajo como "tareas", y a estos se les puede hacer referencia respectivamente como solicitudes/respuestas/subprocesos, tareas entrantes/tareas completadas/subprocesos (como se ilustra) o solicitudes/ respuestas/tareas.
En el sentido de "unidad de ejecución", en algunos sistemas operativos , una tarea es sinónimo de un proceso [ cita requerida ] , y en otros de un hilo [ cita requerida ] . En la ejecución no interactiva ( procesamiento por lotes ), una tarea es una unidad de ejecución dentro de un trabajo , [1] [2] y la tarea en sí suele ser un proceso. El término " multitarea " se refiere principalmente al sentido de procesamiento (múltiples tareas ejecutándose al mismo tiempo), pero tiene matices del sentido de trabajo de múltiples tareas que se realizan al mismo tiempo.
En el sentido de "unidad de trabajo", en un trabajo (que significa "trabajo único") una tarea puede corresponder a un solo paso (el paso en sí, no la ejecución del mismo), mientras que en el procesamiento por lotes las tareas individuales pueden Corresponden a un solo paso de procesamiento de un solo artículo en un lote, o a un solo paso de procesamiento de todos los artículos en el lote. En los sistemas en línea, las tareas comúnmente corresponden a una sola solicitud (en arquitecturas de solicitud-respuesta ) o una consulta (en recuperación de información ), ya sea una sola etapa de manejo o todo el manejo de todo el sistema.
En el lenguaje de programación Java , estos dos conceptos (unidad de trabajo y unidad de ejecución) se combinan cuando se trabaja directamente con subprocesos, pero se distinguen claramente en el marco de Ejecutores:
Cuando se trabaja directamente con subprocesos, a
Thread
sirve como unidad de trabajo y mecanismo para ejecutarlo. En el marco del ejecutor, la unidad de trabajo y el mecanismo de ejecución están separados. La abstracción clave es la unidad de trabajo, que se llama tarea . [3]
El uso del término por parte de IBM ha sido influyente, aunque subraya la ambigüedad del término; en la terminología de IBM, "tarea" tiene docenas de significados específicos, que incluyen: [4]
En z/OS específicamente, se define precisamente como: [5]
El término tarea en OS/360 a z/OS es aproximadamente equivalente a proceso liviano; las tareas en un paso de trabajo comparten un espacio de direcciones. Sin embargo, en MVS/ESA a través de z/OS, una tarea o bloque de solicitud de servicio (SRB) puede tener acceso a otros espacios de direcciones a través de su lista de acceso.
El término tarea se utiliza en el kernel de Linux (al menos desde v2.6.13, [6] hasta v4.8 [7] inclusive ) para referirse a una unidad de ejecución, que puede compartir varios recursos del sistema con otras tareas en el kernel. sistema. Dependiendo del nivel de intercambio, la tarea puede considerarse como un hilo o proceso convencional . Las tareas surgen mediante la clone()
llamada al sistema, [8] donde un usuario puede especificar el nivel deseado de intercambio de recursos.
El término tarea para una parte de un trabajo se remonta a la multiprogramación a principios de la década de 1960, como en este ejemplo de 1961:
El modelo serial tiene la capacidad de procesar tareas de un trabajo de manera independiente similar al funcionamiento del IBM 709 . [9]
El término se popularizó con la introducción de OS/360 (anunciado en 1964), que incluía multiprogramación con un número fijo de tareas (MFT) y multiprogramación con un número variable de tareas (MVT). En este caso las tareas se identificaban con procesos livianos, un trabajo constaba de una serie de tareas y, posteriormente, las tareas podían tener subtareas (en la terminología moderna, procesos hijos ).
Hoy en día el término "tarea" se utiliza de forma muy ambigua. Por ejemplo, el Administrador de tareas de Windows gestiona (en ejecución) los procesos , mientras que el Programador de tareas de Windows programa los programas para ejecutarse en el futuro, lo que tradicionalmente se conoce como programador de trabajos , y utiliza la .job
extensión. Por el contrario, el término " cola de tareas " se utiliza comúnmente en el sentido de "unidades de trabajo".