1 | \makeglossaries |
---|
2 | |
---|
3 | % ---------------------------------- |
---|
4 | % Acronyms |
---|
5 | \newacronym{api}{API}{Application Programming Interface} |
---|
6 | \newacronym{fifo}{FIFO}{First-In, First-Out} |
---|
7 | \newacronym{io}{I/O}{Input and Output} |
---|
8 | \newacronym{numa}{NUMA}{Non-Uniform Memory Access} |
---|
9 | \newacronym{prng}{PRNG}{Pseudo Random Number Generator} |
---|
10 | \newacronym{raii}{RAII}{Resource Acquisition Is Initialization} |
---|
11 | \newacronym{tls}{TLS}{Thread Local Storage} |
---|
12 | |
---|
13 | % ---------------------------------- |
---|
14 | % Definitions |
---|
15 | |
---|
16 | \longnewglossaryentry{thrd} |
---|
17 | {name={thread}} |
---|
18 | { |
---|
19 | Threads created and managed inside user-space. Each thread has its own stack and its own thread of execution. User-level threads are invisible to the underlying operating system. |
---|
20 | |
---|
21 | \textit{Synonyms : User threads, Lightweight threads, Green threads, Virtual threads, Tasks.} |
---|
22 | } |
---|
23 | |
---|
24 | \longnewglossaryentry{proc} |
---|
25 | {name={processor}} |
---|
26 | { |
---|
27 | |
---|
28 | } |
---|
29 | |
---|
30 | \longnewglossaryentry{rQ} |
---|
31 | {name={ready-queue}} |
---|
32 | { |
---|
33 | |
---|
34 | } |
---|
35 | |
---|
36 | \longnewglossaryentry{uthrding} |
---|
37 | {name={user-level threading}} |
---|
38 | { |
---|
39 | |
---|
40 | |
---|
41 | \textit{Synonyms : User threads, Lightweight threads, Green threads, Virtual threads, Tasks.} |
---|
42 | } |
---|
43 | |
---|
44 | % ---------------------------------- |
---|
45 | |
---|
46 | \longnewglossaryentry{hthrd} |
---|
47 | {name={hardware thread}} |
---|
48 | { |
---|
49 | Threads representing the underlying hardware directly, \eg the CPU core, or hyper-thread if the hardware supports multiple threads of execution per core. The number of hardware threads is considered to be always fixed to a specific number determined by the hardware. |
---|
50 | |
---|
51 | \textit{Synonyms : } |
---|
52 | } |
---|
53 | |
---|
54 | \longnewglossaryentry{kthrd} |
---|
55 | {name={kernel-level thread}} |
---|
56 | { |
---|
57 | Threads created and managed inside kernel-space. Each thread has its own stack and its own thread of execution. Kernel-level threads are owned, managed and scheduled by the underlying operating system. |
---|
58 | |
---|
59 | \textit{Synonyms : OS threads, Hardware threads, Physical threads.} |
---|
60 | } |
---|
61 | |
---|
62 | \longnewglossaryentry{fiber} |
---|
63 | {name={fiber}} |
---|
64 | { |
---|
65 | Fibers are non-preemptive user-level threads. They share most of the caracteristics of user-level threads except that they cannot be preempted by another fiber. |
---|
66 | |
---|
67 | \textit{Synonyms : Tasks.} |
---|
68 | } |
---|
69 | |
---|
70 | \longnewglossaryentry{job} |
---|
71 | {name={job}} |
---|
72 | { |
---|
73 | Unit of work, often sent to a thread pool or worker pool to be executed. Has neither its own stack nor its own thread of execution. |
---|
74 | |
---|
75 | \textit{Synonyms : Tasks.} |
---|
76 | } |
---|
77 | |
---|
78 | \longnewglossaryentry{pool} |
---|
79 | {name={thread-pool}} |
---|
80 | { |
---|
81 | Group of homogeneuous threads that loop executing units of works after another. |
---|
82 | |
---|
83 | \textit{Synonyms : } |
---|
84 | } |
---|
85 | |
---|
86 | \longnewglossaryentry{preemption} |
---|
87 | {name={preemption}} |
---|
88 | { |
---|
89 | Involuntary context switch imposed on threads at a given rate. |
---|
90 | |
---|
91 | \textit{Synonyms : None.} |
---|
92 | } |
---|
93 | |
---|
94 | |
---|
95 | |
---|
96 | \longnewglossaryentry{at} |
---|
97 | {name={fred}} |
---|
98 | { |
---|
99 | Abstract object representing an unit of work. Systems will offer one or more concrete implementations of this concept (\eg \gls{kthrd}, \gls{job}), however, most of the concept of schedulings are independent of the particular implementations of the work representation. For this reason, this document use the term \Gls{at} to mean any representation and not one in particular. |
---|
100 | } |
---|
101 | |
---|
102 | \longnewglossaryentry{atsched} |
---|
103 | {name={Scheduling a \gls{at}}} |
---|
104 | { |
---|
105 | Scheduling an \gls{at} refers to the act of notifying the scheduler that a task is ready to be ran. When representing the scheduler as a queue of tasks, scheduling is the act of pushing a task onto the end of the queue. This doesn't necesserily means the task will ever be allocated CPU time (\gls{atrun}), for example, if the system terminates abruptly, scheduled \glspl{at} will probably never run. |
---|
106 | |
---|
107 | \textit{Synonyms : None.} |
---|
108 | } |
---|
109 | |
---|
110 | \longnewglossaryentry{atrun} |
---|
111 | {name={Running a \gls{at}}} |
---|
112 | { |
---|
113 | Running an \gls{at} refers to the act of allocating CPU time to a task that is ready to run. When representing the scheduler as a queue of tasks, running is the act of poping a task from the front of the queue and putting it onto a \gls{proc}. The \gls{at} can than accomplish some or all of the work it is programmed to do. |
---|
114 | |
---|
115 | \textit{Synonyms : None.} |
---|
116 | } |
---|
117 | |
---|
118 | \longnewglossaryentry{atmig} |
---|
119 | {name={migration of \gls{at}}} |
---|
120 | { |
---|
121 | Migration refers to the idea of an \gls{at} running on a different worker/processor than the last time it was run. It is generally preferable to minimise migration as it incurs cost but any load balancing among workers requires some amount of migration. |
---|
122 | |
---|
123 | \textit{Synonyms : None.} |
---|
124 | } |
---|
125 | |
---|
126 | \longnewglossaryentry{atpass} |
---|
127 | {name={overtaking \gls{at}}} |
---|
128 | { |
---|
129 | When representing the scheduler as a queue of \glspl{at}, overtaking is the act breaking the FIFO-ness of the queue by moving a \gls{at} in front of some other \gls{at} when it arrived after. This remains true for schedulers that do not use a FIFO queue, when the order in which the \glspl{at} are \glslink{atsched}{scheduled} and \glslink{atrun}{run} in a different order. A \gls{at} is said to \emph{overtake} another if it is run \emph{before} but was \emph{scheduled} after the other \gls{at}. |
---|
130 | |
---|
131 | \textit{Synonyms : None.} |
---|
132 | } |
---|
133 | |
---|
134 | \longnewglossaryentry{atblock} |
---|
135 | {name={Blocking an \gls{at}}} |
---|
136 | { |
---|
137 | Blocking an abstract task refers to the act of taking a task that us running on a CPU off the CPU. Unless no other task is ready, this action is generally immediately followed by running an other task. |
---|
138 | |
---|
139 | \textit{Synonyms : None.} |
---|
140 | } |
---|
141 | |
---|
142 | \longnewglossaryentry{atcomplet} |
---|
143 | {name={Running to completion}} |
---|
144 | { |
---|
145 | Running to completion refers to the entire sequence of : being scheduled, running and blocking, for a given task. |
---|
146 | |
---|
147 | See also \gls{atsched}, \gls{atrun}, \gls{atblock} |
---|
148 | |
---|
149 | \textit{Synonyms : None.} |
---|
150 | } |
---|
151 | |
---|
152 | \longnewglossaryentry{load} |
---|
153 | {name={System Load}} |
---|
154 | { |
---|
155 | The load is refers to the rate at which \glspl{at} are \glslink{atsched}{scheduled} versus the rate at which they are \glslink{atrun}{run}. When \glspl{at} are being scheduled faster than they are run, the system is considered \emph{overloaded}. When \glspl{at} are being run faster than they are scheduled, the system is considered \emph{underloaded}. Conrrespondingly, if both rates are equal, the system is considered \emph{loaded}. Note that the system is considered loaded only of the rate at which \glspl{at} are scheduled/run is non-zero, otherwise the system is empty, it has no load. |
---|
156 | } |
---|
157 | |
---|