[[!meta copyright="Copyright © 2002, 2003, 2010 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] A Mach *task* is a collection of resources, a [[virtual_address_space]], and a [[port name space|port]]. They depend on [[thread]]s for executing program code: a task alone has no means to do so. Switching from one task to another one involves doing a *context switch*, which is usually not a cheap operation, as it involves switching the hardware's idea of the memory layout ([[virtual_address_space]]), amongst others. Mach tasks are distinct from [[UNIX processes|unix/process]] in that they provide less facilities. In processes, there are [[unix/signal]]s, process / group / session IDs, [[unix/file_descriptor]]s and many other things. Tasks are used for resource allocation and sharing; they are *resource container*s.