En informática , una tarea es una unidad de ejecución o una unidad de trabajo. El término es ambiguo; otros términos alternativos precisos incluyen proceso , proceso ligero , subproceso (para ejecución), paso , solicitud o consulta (para trabajo). En el diagrama adyacente, hay colas de trabajo entrante por hacer y trabajo saliente completado, y un grupo de subprocesos para realizar este trabajo. Tanto las unidades de trabajo en sí mismas como los subprocesos que realizan el trabajo pueden denominarse "tareas", y estos pueden denominarse respectivamente 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] siendo la tarea en sí misma típicamente 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 su ejecución), mientras que en el procesamiento por lotes las tareas individuales pueden corresponder a un solo paso del procesamiento de un solo elemento de un lote, o a un solo paso del procesamiento de todos los elementos del lote. En los sistemas en línea, las tareas corresponden más comúnmente a una sola solicitud (en arquitecturas de solicitud-respuesta ) o una consulta (en recuperación de información ), ya sea a una sola etapa de procesamiento o al procesamiento de todo el sistema.
En el lenguaje de programación Java , estos dos conceptos (unidad de trabajo y unidad de ejecución) se fusionan cuando se trabaja directamente con hilos, pero se distinguen claramente en el marco de Ejecutores:
Cuando se trabaja directamente con subprocesos, un subproceso
Thread
actúa como unidad de trabajo y como 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 denomina tarea . [3]
El uso que IBM ha hecho del término ha sido influyente, aunque subraya la ambigüedad del término: en la terminología de IBM, "tarea" tiene docenas de significados específicos, entre ellos: [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 z/OS, una tarea o un 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 núcleo Linux (al menos desde la versión v2.6.13, [6] hasta la versión v4.8 [7] inclusive ) para referirse a una unidad de ejecución, que puede compartir varios recursos del sistema con otras tareas del sistema. Dependiendo del nivel de compartición, la tarea puede considerarse como un hilo o proceso convencional . Las tareas se crean mediante la clone()
llamada al sistema, [8] donde un usuario puede especificar el nivel deseado de compartición de recursos.
El término tarea para una parte de un trabajo se remonta a la multiprogramación de 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 la multiprogramación con un número fijo de tareas (MFT) y la multiprogramación con un número variable de tareas (MVT). En este caso, las tareas se identificaban con procesos ligeros, un trabajo constaba de un número de tareas y, más tarde, las tareas podían tener subtareas (en la terminología moderna, procesos secundarios ).
Hoy en día, el término "tarea" se utiliza de forma muy ambigua. Por ejemplo, el Administrador de tareas de Windows administra los procesos (en ejecución) , mientras que el Programador de tareas de Windows programa los programas que se ejecutarán en el futuro, lo que tradicionalmente se conoce como programador de tareas , y utiliza la .job
extensión . Por el contrario, el término " cola de tareas " se utiliza habitualmente en el sentido de "unidades de trabajo".