Back to index

glibc  2.9
sched.h
Go to the documentation of this file.
00001 /* Definitions of constants and data structure for POSIX 1003.1b-1993
00002    scheduling interface.
00003    Copyright (C) 1996, 1997, 2001, 2003, 2007 Free Software Foundation, Inc.
00004    This file is part of the GNU C Library.
00005 
00006    The GNU C Library is free software; you can redistribute it and/or
00007    modify it under the terms of the GNU Lesser General Public
00008    License as published by the Free Software Foundation; either
00009    version 2.1 of the License, or (at your option) any later version.
00010 
00011    The GNU C Library is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014    Lesser General Public License for more details.
00015 
00016    You should have received a copy of the GNU Lesser General Public
00017    License along with the GNU C Library; if not, write to the Free
00018    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00019    02111-1307 USA.  */
00020 
00021 #ifndef _SCHED_H
00022 # error "Never include <bits/sched.h> directly; use <sched.h> instead."
00023 #endif
00024 
00025 
00026 /* Scheduling algorithms.  */
00027 #define SCHED_OTHER  0
00028 #define SCHED_FIFO   1
00029 #define SCHED_RR     2
00030 
00031 /* Data structure to describe a process' schedulability.  */
00032 struct sched_param
00033 {
00034   int __sched_priority;
00035 };
00036 
00037 
00038 #if defined _SCHED_H && !defined __cpu_set_t_defined
00039 # define __cpu_set_t_defined
00040 /* Size definition for CPU sets.  */
00041 # define __CPU_SETSIZE      1024
00042 # define __NCPUBITS  (8 * sizeof (__cpu_mask))
00043 
00044 /* Type for array elements in 'cpu_set'.  */
00045 typedef unsigned long int __cpu_mask;
00046 
00047 /* Basic access functions.  */
00048 # define __CPUELT(cpu)      ((cpu) / __NCPUBITS)
00049 # define __CPUMASK(cpu)     ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
00050 
00051 /* Data structure to describe CPU mask.  */
00052 typedef struct
00053 {
00054   __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
00055 } cpu_set_t;
00056 
00057 /* Access functions for CPU masks.  */
00058 # define __CPU_ZERO(cpusetp) \
00059   do {                                                               \
00060     unsigned int __i;                                                       \
00061     cpu_set *__arr = (cpusetp);                                             \
00062     for (__i = 0; __i < sizeof (cpu_set) / sizeof (__cpu_mask); ++__i)             \
00063       __arr->__bits[__i] = 0;                                               \
00064   } while (0)
00065 # define __CPU_SET(cpu, cpusetp) \
00066   ((cpusetp)->__bits[__CPUELT (cpu)] |= __CPUMASK (cpu))
00067 # define __CPU_CLR(cpu, cpusetp) \
00068   ((cpusetp)->__bits[__CPUELT (cpu)] &= ~__CPUMASK (cpu))
00069 # define __CPU_ISSET(cpu, cpusetp) \
00070   (((cpusetp)->__bits[__CPUELT (cpu)] & __CPUMASK (cpu)) != 0)
00071 
00072 __BEGIN_DECLS
00073 
00074 extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
00075      __THROW;
00076 
00077 __END_DECLS
00078 
00079 # define __CPU_COUNT(cpusetp) \
00080   __sched_cpucount (sizeof (cpu_set_t), cpusetp)
00081 #endif