54 #ifndef __INCLUDE_TINYARA_SCHED_H 55 #define __INCLUDE_TINYARA_SCHED_H 61 #include <tinyara/config.h> 63 #include <sys/types.h> 72 #include <tinyara/irq.h> 73 #include <tinyara/mm/shm.h> 74 #include <tinyara/fs/fs.h> 75 #include <tinyara/net/net.h> 77 #include <arch/arch.h> 85 #undef HAVE_TASK_GROUP 86 #undef HAVE_GROUP_MEMBERS 92 #if defined(CONFIG_SCHED_HAVE_PARENT) && defined(CONFIG_SCHED_CHILD_STATUS) 93 #define HAVE_TASK_GROUP 1 94 #define HAVE_GROUP_MEMBERS 1 103 #if !defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_SCHED_HAVE_PARENT) 104 #define HAVE_TASK_GROUP 1 105 #elif !defined(CONFIG_DISABLE_ENVIRON) 106 #define HAVE_TASK_GROUP 1 107 #elif !defined(CONFIG_DISABLE_SIGNALS) 108 #define HAVE_TASK_GROUP 1 109 #elif defined(CONFIG_SCHED_ATEXIT) 110 #define HAVE_TASK_GROUP 1 111 #elif defined(CONFIG_SCHED_ONEXIT) 112 #define HAVE_TASK_GROUP 1 113 #elif defined(CONFIG_SCHED_WAITPID) 114 #define HAVE_TASK_GROUP 1 115 #elif CONFIG_NFILE_DESCRIPTORS > 0 116 #define HAVE_TASK_GROUP 1 117 #elif CONFIG_NFILE_STREAMS > 0 118 #define HAVE_TASK_GROUP 1 119 #elif CONFIG_NSOCKET_DESCRIPTORS > 0 120 #define HAVE_TASK_GROUP 1 121 #elif !defined(CONFIG_DISABLE_MQUEUE) 122 #define HAVE_TASK_GROUP 1 123 #elif defined(CONFIG_ARCH_ADDRENV) 124 #define HAVE_TASK_GROUP 1 125 #elif defined(CONFIG_MM_SHM) 126 #define HAVE_TASK_GROUP 1 132 #ifdef CONFIG_DISABLE_PTHREAD 133 #undef HAVE_GROUP_MEMBERS 139 #define NULL_TASK_PROCESS_ID (pid_t)0 140 #define INVALID_PROCESS_ID (pid_t)-1 144 #define MAX_LOCK_COUNT 127 148 #define TCB_FLAG_TTYPE_SHIFT (0) 149 #define TCB_FLAG_TTYPE_MASK (3 << TCB_FLAG_TTYPE_SHIFT) 150 #define TCB_FLAG_TTYPE_TASK (0 << TCB_FLAG_TTYPE_SHIFT) 151 #define TCB_FLAG_TTYPE_PTHREAD (1 << TCB_FLAG_TTYPE_SHIFT) 152 #define TCB_FLAG_TTYPE_KERNEL (2 << TCB_FLAG_TTYPE_SHIFT) 153 #define TCB_FLAG_NONCANCELABLE (1 << 2) 154 #define TCB_FLAG_CANCEL_DEFERRED (1 << 3) 155 #define TCB_FLAG_CANCEL_PENDING (1 << 4) 156 #define TCB_FLAG_POLICY_SHIFT (5) 157 #define TCB_FLAG_POLICY_MASK (3 << TCB_FLAG_POLICY_SHIFT) 158 # define TCB_FLAG_SCHED_FIFO (0 << TCB_FLAG_POLICY_SHIFT) 159 # define TCB_FLAG_ROUND_ROBIN (1 << TCB_FLAG_POLICY_SHIFT) 160 # define TCB_FLAG_SCHED_SPORADIC (2 << TCB_FLAG_POLICY_SHIFT) 161 # define TCB_FLAG_SCHED_OTHER (3 << TCB_FLAG_POLICY_SHIFT) 162 #define TCB_FLAG_CPU_LOCKED (1 << 7) 163 #define TCB_FLAG_EXIT_PROCESSING (1 << 8) 168 #define GROUP_FLAG_NOCLDWAIT (1 << 0) 169 #define GROUP_FLAG_ADDRENV (1 << 1) 170 #define GROUP_FLAG_PRIVILEGED (1 << 2) 174 #define CHILD_FLAG_TTYPE_SHIFT (0) 175 #define CHILD_FLAG_TTYPE_MASK (3 << CHILD_FLAG_TTYPE_SHIFT) 176 #define CHILD_FLAG_TTYPE_TASK (0 << CHILD_FLAG_TTYPE_SHIFT) 177 #define CHILD_FLAG_TTYPE_PTHREAD (1 << CHILD_FLAG_TTYPE_SHIFT) 178 #define CHILD_FLAG_TTYPE_KERNEL (2 << CHILD_FLAG_TTYPE_SHIFT) 179 #define CHILD_FLAG_EXITED (1 << 0) 203 #ifndef CONFIG_DISABLE_SIGNALS 206 #ifndef CONFIG_DISABLE_MQUEUE 211 TSTATE_WAIT_PAGEFILL,
219 #define FIRST_READY_TO_RUN_STATE TSTATE_TASK_READYTORUN 220 #define LAST_READY_TO_RUN_STATE TSTATE_TASK_RUNNING 221 #define FIRST_BLOCKED_STATE TSTATE_TASK_INACTIVE 222 #define LAST_BLOCKED_STATE (NUM_TASK_STATES-1) 239 #ifdef CONFIG_SCHED_STARTHOOK 247 #ifdef CONFIG_SCHED_ATEXIT 251 #ifdef CONFIG_SCHED_ONEXIT 260 #ifdef CONFIG_SCHED_CHILD_STATUS 273 #ifdef CONFIG_PTHREAD_CLEANUP 274 struct pthread_cleanup_s {
275 pthread_cleanup_t pc_cleaner;
328 #ifdef HAVE_TASK_GROUP 330 #ifndef CONFIG_DISABLE_PTHREAD 336 #if defined(HAVE_GROUP_MEMBERS) || defined(CONFIG_ARCH_ADDRENV) 340 #ifdef HAVE_GROUP_MEMBERS 343 #if !defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_SCHED_HAVE_PARENT) 351 #ifdef HAVE_GROUP_MEMBERS 356 #if defined(CONFIG_SCHED_ATEXIT) && !defined(CONFIG_SCHED_ONEXIT) 359 #if defined(CONFIG_SCHED_ATEXIT_MAX) && CONFIG_SCHED_ATEXIT_MAX > 1 366 #ifdef CONFIG_SCHED_ONEXIT 369 #if defined(CONFIG_SCHED_ONEXIT_MAX) && CONFIG_SCHED_ONEXIT_MAX > 1 378 #if defined(CONFIG_SCHED_HAVE_PARENT) && defined(CONFIG_SCHED_CHILD_STATUS) 384 #if defined(CONFIG_SCHED_WAITPID) && !defined(CONFIG_SCHED_HAVE_PARENT) 392 #ifndef CONFIG_DISABLE_PTHREAD 401 #ifndef CONFIG_DISABLE_SIGNALS 407 #ifndef CONFIG_DISABLE_ENVIRON 420 #if CONFIG_NFILE_DESCRIPTORS > 0 426 #if CONFIG_NFILE_STREAMS > 0 433 #if (defined(CONFIG_BUILD_PROTECTED) || defined(CONFIG_BUILD_KERNEL)) && \ 434 defined(CONFIG_MM_KERNEL_HEAP) 435 FAR
struct streamlist *tg_streamlist;
437 struct streamlist tg_streamlist;
441 #if CONFIG_NSOCKET_DESCRIPTORS > 0 444 struct socketlist tg_socketlist;
447 #ifndef CONFIG_DISABLE_MQUEUE 453 #ifdef CONFIG_ARCH_ADDRENV 456 group_addrenv_t tg_addrenv;
462 struct group_shm_s tg_shm;
482 #ifdef HAVE_TASK_GROUP 490 #ifdef CONFIG_SCHED_HAVE_PARENT 491 #ifndef HAVE_GROUP_MEMBERS 493 #ifndef CONFIG_SCHED_CHILD_STATUS 503 #ifdef CONFIG_PRIORITY_INHERITANCE 504 #if CONFIG_SEM_NNESTPRIO > 0 505 uint8_t npend_reprio;
506 uint8_t pend_reprios[CONFIG_SEM_NNESTPRIO];
514 #ifdef CONFIG_CANCELLATION_POINTS 518 #if CONFIG_RR_INTERVAL > 0 533 #ifdef CONFIG_MPU_STACKGUARD 534 FAR
void *stack_guard;
549 #ifndef CONFIG_DISABLE_SIGNALS 560 #ifndef CONFIG_DISABLE_MQUEUE 573 #if CONFIG_TASK_NAME_SIZE > 0 574 char name[CONFIG_TASK_NAME_SIZE + 1];
577 #ifdef CONFIG_DEBUG_MM_HEAPINFO 600 #ifdef CONFIG_SCHED_STARTHOOK 613 #ifndef CONFIG_DISABLE_PTHREAD 634 #ifndef CONFIG_PTHREAD_MUTEX_UNSAFE 640 #ifdef CONFIG_PTHREAD_CLEANUP 646 struct pthread_cleanup_s stack[CONFIG_PTHREAD_CLEANUP_STACKSIZE];
651 #if CONFIG_NPTHREAD_KEYS > 0 654 #if defined(CONFIG_BUILD_PROTECTED) 672 #if defined(__cplusplus) 673 #define EXTERN extern "C" 676 #define EXTERN extern 732 #if CONFIG_NFILE_DESCRIPTORS > 0 737 FAR
struct filelist *sched_getfiles(
void);
741 #if CONFIG_NFILE_STREAMS > 0 749 FAR
struct streamlist *sched_getstreams(
void);
753 #if CONFIG_NSOCKET_DESCRIPTORS > 0 754 FAR
struct socketlist *sched_getsockets(
void);
776 #ifdef CONFIG_SCHED_STARTHOOK 818 pid_t task_vforkstart(FAR
struct task_tcb_s *child);
822 void task_vforkabort(FAR
struct task_tcb_s *child,
int errcode);
827 #if defined(__cplusplus)
FAR struct tcb_s * sched_gettcb(pid_t pid)
Give a task ID, look up the corresponding TCB.
This structure describes a reference counted D-Space region. This must be a separately allocated "bre...
sq_queue_t sigpendactionq
Structure of pthread mutex configuration.
CODE void(* start_t)(void)
void(* sched_foreach_t)(FAR struct tcb_s *tcb, FAR void *arg)
FAR struct wdog_s * waitdog
FAR struct child_status_s * tg_children
FAR void * pthread_addr_t
This structure is used to maintin information about child tasks. pthreads work differently, they have join information. This is only for child tasks.
structure for header queue
CODE void(* starthook_t)(FAR void *arg)
FAR struct join_s * tg_jointail
Structure for using to pass parameters to/from signal handlers.
struct filelist tg_filelist
FAR void * pthread_data[CONFIG_NPTHREAD_KEYS]
This is the common part of the task control block (TCB). The TCB is the heart of the TinyAra task-con...
FAR struct join_s * tg_joinhead
FAR struct tcb_s * sched_self(void)
returns the TCB of the currently running task (i.e., the caller)
Structure for Task Group Information.
CODE void(* atexitfunc_t)(void)
tstate_e
This is the type of the task_state field of the TCB. NOTE: the order and content of this enumeration ...
onexitfunc_t tg_onexitfunc
FAR void * stack_alloc_ptr
FAR struct task_group_s * group
FAR struct pthread_mutex_s * mhead
void sched_foreach(sched_foreach_t handler, FAR void *arg)
enumerate over each task and provide the TCB of each task or thread to a callback function...
struct task_group_s * flink
FAR struct mqueue_inode_s * msgwaitq
This is the particular form of the task control block (TCB) structure used by pthreads. There are two TCB forms: one for pthreads and one for tasks. Both share the common TCB fields (which must appear at the top of the structure) plus additional fields unique to tasks and threads. Having separate structures for tasks and pthreads adds some complexity, but saves memory in that it prevents pthreads from being burdened with the overhead required for tasks (and vice versa).
Structure of generic semaphore.
pthread_addr_t(* pthread_startroutine_t)(pthread_addr_t)
This is the entry point into the main thread of the task or into a created pthread within the task...
FAR struct child_status_s * flink
FAR struct dspace_s * dspace
This is the particular form of the task control block (TCB) structure used by tasks (and kernel threa...
Structure of pthread region configuration.
CODE void(* onexitfunc_t)(int exitcode, FAR void *arg)
pthread_startroutine_t pthread
char name[CONFIG_TASK_NAME_SIZE+1]