1 /**
2 * D header file for POSIX.
3 *
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors: Sean Kelly,
7 Alex Rønne Petersen
8 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
9 */
10
11 /* Copyright Sean Kelly 2005 - 2009.
12 * Distributed under the Boost Software License, Version 1.0.
13 * (See accompanying file LICENSE or copy at
14 * http://www.boost.org/LICENSE_1_0.txt)
15 */
16 module core.sys.posix.sched;
17
18 import core.sys.posix.config;
19 public import core.sys.posix.time;
20 public import core.sys.posix.sys.types;
21
22 version (OSX)
23 version = Darwin;
24 else version (iOS)
25 version = Darwin;
26 else version (TVOS)
27 version = Darwin;
28 else version (WatchOS)
29 version = Darwin;
30
version(Posix)31 version (Posix):
32 extern (C):
33 nothrow:
34 @nogc:
35 @system:
36
37 //
38 // Required
39 //
40 /*
41 struct sched_param
42 {
43 int sched_priority (THR)
44 int sched_ss_low_priority (SS|TSP)
45 struct timespec sched_ss_repl_period (SS|TSP)
46 struct timespec sched_ss_init_budget (SS|TSP)
47 int sched_ss_max_repl (SS|TSP)
48 }
49
50 SCHED_FIFO
51 SCHED_RR
52 SCHED_SPORADIC (SS|TSP)
53 SCHED_OTHER
54
55 int sched_getparam(pid_t, sched_param*);
56 int sched_getscheduler(pid_t);
57 int sched_setparam(pid_t, const scope sched_param*);
58 int sched_setscheduler(pid_t, int, const scope sched_param*);
59 */
60
61 version (linux)
62 {
63 version (CRuntime_Musl)
64 {
65 struct sched_param
66 {
67 int sched_priority;
68 int __reserved1;
69 timespec[2] __reserved2;
70 int __reserved3;
71 }
72 }
73 else
74 {
75 struct sched_param
76 {
77 int sched_priority;
78 }
79 }
80
81 enum SCHED_OTHER = 0;
82 enum SCHED_FIFO = 1;
83 enum SCHED_RR = 2;
84 //SCHED_SPORADIC (SS|TSP)
85 enum SCHED_BATCH = 3;
86 enum SCHED_IDLE = 5;
87 enum SCHED_RESET_ON_FORK = 0x40000000;
88 }
89 else version (Darwin)
90 {
91 enum SCHED_OTHER = 1;
92 enum SCHED_FIFO = 4;
93 enum SCHED_RR = 2;
94 //SCHED_SPORADIC (SS|TSP)
95
96 struct sched_param
97 {
98 int sched_priority;
99 byte[__PTHREAD_MUTEX_SIZE__] __opaque;
100 }
101 }
102 else version (FreeBSD)
103 {
104 struct sched_param
105 {
106 int sched_priority;
107 }
108
109 enum SCHED_FIFO = 1;
110 enum SCHED_OTHER = 2;
111 enum SCHED_RR = 3;
112 }
113 else version (NetBSD)
114 {
115 struct sched_param
116 {
117 int sched_priority;
118 }
119
120 enum SCHED_FIFO = 1;
121 enum SCHED_OTHER = 0;
122 enum SCHED_RR = 2;
123 }
124 else version (OpenBSD)
125 {
126 struct sched_param
127 {
128 int sched_priority;
129 }
130
131 enum SCHED_FIFO = 1;
132 enum SCHED_OTHER = 2;
133 enum SCHED_RR = 3;
134 }
135 else version (DragonFlyBSD)
136 {
137 struct sched_param
138 {
139 int sched_priority;
140 }
141
142 enum SCHED_FIFO = 1;
143 enum SCHED_OTHER = 2;
144 enum SCHED_RR = 3;
145 }
146 else version (Solaris)
147 {
148 struct sched_param
149 {
150 int sched_priority;
151 int[8] sched_pad;
152 }
153
154 enum SCHED_OTHER = 0;
155 enum SCHED_FIFO = 1;
156 enum SCHED_RR = 2;
157 enum SCHED_SYS = 3;
158 enum SCHED_IA = 4;
159 enum SCHED_FSS = 5;
160 enum SCHED_FX = 6;
161 enum _SCHED_NEXT = 7;
162 }
163 else
164 {
165 static assert(false, "Unsupported platform");
166 }
167
168 int sched_getparam(pid_t, sched_param*);
169 int sched_getscheduler(pid_t);
170 int sched_setparam(pid_t, const scope sched_param*);
171 int sched_setscheduler(pid_t, int, const scope sched_param*);
172
173 //
174 // Thread (THR)
175 //
176 /*
177 int sched_yield();
178 */
179
180 version (CRuntime_Glibc)
181 {
182 int sched_yield();
183 }
184 else version (Darwin)
185 {
186 int sched_yield();
187 }
188 else version (FreeBSD)
189 {
190 int sched_yield();
191 }
192 else version (NetBSD)
193 {
194 int sched_yield();
195 }
196 else version (OpenBSD)
197 {
198 int sched_yield();
199 }
200 else version (DragonFlyBSD)
201 {
202 int sched_yield();
203 }
204 else version (Solaris)
205 {
206 int sched_yield();
207 }
208 else version (CRuntime_Bionic)
209 {
210 int sched_yield();
211 }
212 else version (CRuntime_Musl)
213 {
214 int sched_yield();
215 }
216 else version (CRuntime_UClibc)
217 {
218 int sched_yield();
219 }
220 else
221 {
222 static assert(false, "Unsupported platform");
223 }
224
225 //
226 // Scheduling (TPS)
227 //
228 /*
229 int sched_get_priority_max(int);
230 int sched_get_priority_min(int);
231 int sched_rr_get_interval(pid_t, timespec*);
232 */
233
234 version (CRuntime_Glibc)
235 {
236 int sched_get_priority_max(int);
237 int sched_get_priority_min(int);
238 int sched_rr_get_interval(pid_t, timespec*);
239 }
240 else version (Darwin)
241 {
242 int sched_get_priority_min(int);
243 int sched_get_priority_max(int);
244 //int sched_rr_get_interval(pid_t, timespec*); // FIXME: unavailable?
245 }
246 else version (FreeBSD)
247 {
248 int sched_get_priority_min(int);
249 int sched_get_priority_max(int);
250 int sched_rr_get_interval(pid_t, timespec*);
251 }
252 else version (NetBSD)
253 {
254 int sched_get_priority_min(int);
255 int sched_get_priority_max(int);
256 int sched_rr_get_interval(pid_t, timespec*);
257 }
258 else version (OpenBSD)
259 {
260 int sched_get_priority_min(int);
261 int sched_get_priority_max(int);
262 int sched_rr_get_interval(pid_t, timespec*);
263 }
264 else version (DragonFlyBSD)
265 {
266 int sched_get_priority_min(int);
267 int sched_get_priority_max(int);
268 int sched_rr_get_interval(pid_t, timespec*);
269 }
270 else version (Solaris)
271 {
272 int sched_get_priority_max(int);
273 int sched_get_priority_min(int);
274 int sched_rr_get_interval(pid_t, timespec*);
275 }
276 else version (CRuntime_Bionic)
277 {
278 int sched_get_priority_max(int);
279 int sched_get_priority_min(int);
280 int sched_rr_get_interval(pid_t, timespec*);
281 }
282 else version (CRuntime_Musl)
283 {
284 int sched_get_priority_max(int);
285 int sched_get_priority_min(int);
286 int sched_rr_get_interval(pid_t, timespec*);
287 }
288 else version (CRuntime_UClibc)
289 {
290 int sched_get_priority_max(int);
291 int sched_get_priority_min(int);
292 int sched_rr_get_interval(pid_t, timespec*);
293 }
294 else
295 {
296 static assert(false, "Unsupported platform");
297 }
298