summaryrefslogtreecommitdiff
path: root/microkernel/mach/task.mdwn
blob: c03c6a14f50b3cb816dda08147750c8f71f9315a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[[!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.