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) 183 #define KEY_NOT_INUSE (0) 184 #define KEY_INUSE (1) 208 #ifndef CONFIG_DISABLE_SIGNALS 211 #ifndef CONFIG_DISABLE_MQUEUE 216 TSTATE_WAIT_PAGEFILL,
224 #define FIRST_READY_TO_RUN_STATE TSTATE_TASK_READYTORUN 225 #define LAST_READY_TO_RUN_STATE TSTATE_TASK_RUNNING 226 #define FIRST_BLOCKED_STATE TSTATE_TASK_INACTIVE 227 #define LAST_BLOCKED_STATE (NUM_TASK_STATES-1) 244 #ifdef CONFIG_SCHED_STARTHOOK 252 #ifdef CONFIG_SCHED_ATEXIT 256 #ifdef CONFIG_SCHED_ONEXIT 265 #ifdef CONFIG_SCHED_CHILD_STATUS 278 #ifdef CONFIG_PTHREAD_CLEANUP 279 struct pthread_cleanup_s {
280 pthread_cleanup_t pc_cleaner;
333 #ifdef HAVE_TASK_GROUP 335 #ifndef CONFIG_DISABLE_PTHREAD 341 #if defined(HAVE_GROUP_MEMBERS) || defined(CONFIG_ARCH_ADDRENV) 345 #ifdef HAVE_GROUP_MEMBERS 348 #if !defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_SCHED_HAVE_PARENT) 356 #ifdef HAVE_GROUP_MEMBERS 361 #if defined(CONFIG_SCHED_ATEXIT) && !defined(CONFIG_SCHED_ONEXIT) 367 #ifdef CONFIG_SCHED_ONEXIT 372 #if defined(CONFIG_SCHED_HAVE_PARENT) && defined(CONFIG_SCHED_CHILD_STATUS) 378 #if defined(CONFIG_SCHED_WAITPID) && !defined(CONFIG_SCHED_HAVE_PARENT) 386 #ifndef CONFIG_DISABLE_PTHREAD 392 #if CONFIG_NPTHREAD_KEYS > 0 398 #ifndef CONFIG_DISABLE_SIGNALS 404 #ifndef CONFIG_DISABLE_ENVIRON 417 #if CONFIG_NFILE_DESCRIPTORS > 0 420 struct filelist tg_filelist;
423 #if CONFIG_NFILE_STREAMS > 0 430 #if (defined(CONFIG_BUILD_PROTECTED) || defined(CONFIG_BUILD_KERNEL)) && \ 431 defined(CONFIG_MM_KERNEL_HEAP) 432 FAR
struct streamlist *tg_streamlist;
434 struct streamlist tg_streamlist;
438 #if CONFIG_NSOCKET_DESCRIPTORS > 0 441 struct socketlist tg_socketlist;
444 #ifndef CONFIG_DISABLE_MQUEUE 450 #ifdef CONFIG_ARCH_ADDRENV 453 group_addrenv_t tg_addrenv;
459 struct group_shm_s tg_shm;
479 #ifdef HAVE_TASK_GROUP 487 #ifdef CONFIG_SCHED_HAVE_PARENT 488 #ifndef HAVE_GROUP_MEMBERS 490 #ifndef CONFIG_SCHED_CHILD_STATUS 500 #ifdef CONFIG_PRIORITY_INHERITANCE 501 #if CONFIG_SEM_NNESTPRIO > 0 502 uint8_t npend_reprio;
503 uint8_t pend_reprios[CONFIG_SEM_NNESTPRIO];
511 #ifdef CONFIG_CANCELLATION_POINTS 515 #if CONFIG_RR_INTERVAL > 0 530 #ifdef CONFIG_MPU_STACKGUARD 531 FAR
void *stack_guard;
546 #ifndef CONFIG_DISABLE_SIGNALS 557 #ifndef CONFIG_DISABLE_MQUEUE 568 struct xcptcontext xcp;
570 #if CONFIG_TASK_NAME_SIZE > 0 571 char name[CONFIG_TASK_NAME_SIZE + 1];
574 #ifdef CONFIG_DEBUG_MM_HEAPINFO 597 #ifdef CONFIG_SCHED_STARTHOOK 610 #ifndef CONFIG_DISABLE_PTHREAD 631 #ifndef CONFIG_PTHREAD_MUTEX_UNSAFE 637 #ifdef CONFIG_PTHREAD_CLEANUP 643 struct pthread_cleanup_s stack[CONFIG_PTHREAD_CLEANUP_STACKSIZE];
648 #if CONFIG_NPTHREAD_KEYS > 0 651 #if defined(CONFIG_BUILD_PROTECTED) 669 #if defined(__cplusplus) 670 #define EXTERN extern "C" 673 #define EXTERN extern 729 #if CONFIG_NFILE_DESCRIPTORS > 0 734 FAR
struct filelist *sched_getfiles(
void);
738 #if CONFIG_NFILE_STREAMS > 0 746 FAR
struct streamlist *sched_getstreams(
void);
750 #if CONFIG_NSOCKET_DESCRIPTORS > 0 751 FAR
struct socketlist *sched_getsockets(
void);
773 #ifdef CONFIG_SCHED_STARTHOOK 815 pid_t task_vforkstart(FAR
struct task_tcb_s *child);
819 void task_vforkabort(FAR
struct task_tcb_s *child,
int errcode);
824 #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.
This is the common part of the task control block (TCB). The TCB is the heart of the TinyAra task-con...
CODE void(* pthread_destructor_t)(void *arg)
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 ...
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