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 */ 16module core.sys.posix.sched; 17 18import core.sys.posix.config; 19public import core.sys.posix.time; 20public import core.sys.posix.sys.types; 21 22version (OSX) 23 version = Darwin; 24else version (iOS) 25 version = Darwin; 26else version (TVOS) 27 version = Darwin; 28else version (WatchOS) 29 version = Darwin; 30 31version (Posix): 32extern (C): 33nothrow: 34@nogc: 35@system: 36 37// 38// Required 39// 40/* 41struct 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 50SCHED_FIFO 51SCHED_RR 52SCHED_SPORADIC (SS|TSP) 53SCHED_OTHER 54 55int sched_getparam(pid_t, sched_param*); 56int sched_getscheduler(pid_t); 57int sched_setparam(pid_t, const scope sched_param*); 58int sched_setscheduler(pid_t, int, const scope sched_param*); 59*/ 60 61version (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} 89else 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} 102else 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} 113else 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} 124else 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} 135else 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} 146else 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} 163else 164{ 165 static assert(false, "Unsupported platform"); 166} 167 168int sched_getparam(pid_t, sched_param*); 169int sched_getscheduler(pid_t); 170int sched_setparam(pid_t, const scope sched_param*); 171int sched_setscheduler(pid_t, int, const scope sched_param*); 172 173// 174// Thread (THR) 175// 176/* 177int sched_yield(); 178*/ 179 180version (CRuntime_Glibc) 181{ 182 int sched_yield(); 183} 184else version (Darwin) 185{ 186 int sched_yield(); 187} 188else version (FreeBSD) 189{ 190 int sched_yield(); 191} 192else version (NetBSD) 193{ 194 int sched_yield(); 195} 196else version (OpenBSD) 197{ 198 int sched_yield(); 199} 200else version (DragonFlyBSD) 201{ 202 int sched_yield(); 203} 204else version (Solaris) 205{ 206 int sched_yield(); 207} 208else version (CRuntime_Bionic) 209{ 210 int sched_yield(); 211} 212else version (CRuntime_Musl) 213{ 214 int sched_yield(); 215} 216else version (CRuntime_UClibc) 217{ 218 int sched_yield(); 219} 220else 221{ 222 static assert(false, "Unsupported platform"); 223} 224 225// 226// Scheduling (TPS) 227// 228/* 229int sched_get_priority_max(int); 230int sched_get_priority_min(int); 231int sched_rr_get_interval(pid_t, timespec*); 232*/ 233 234version (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} 240else 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} 246else 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} 252else 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} 258else 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} 264else 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} 270else 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} 276else 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} 282else 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} 288else 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} 294else 295{ 296 static assert(false, "Unsupported platform"); 297} 298