aboutsummaryrefslogtreecommitdiff
path: root/nuttx/sched/Kconfig
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/sched/Kconfig')
-rw-r--r--nuttx/sched/Kconfig188
1 files changed, 160 insertions, 28 deletions
diff --git a/nuttx/sched/Kconfig b/nuttx/sched/Kconfig
index bfaec3b5d..fe9a88085 100644
--- a/nuttx/sched/Kconfig
+++ b/nuttx/sched/Kconfig
@@ -4,7 +4,7 @@
#
config MSEC_PER_TICK
- int "tick timer"
+ int "Milliseconds per system timer tick"
default 10
---help---
The default system timer is 100Hz or MSEC_PER_TICK=10. This setting
@@ -12,7 +12,7 @@ config MSEC_PER_TICK
system timer interrupts at some interrupt interval other than 10 msec.
config RR_INTERVAL
- int "round robin timeslice"
+ int "Round robin timeslice (MSEC)"
default 0
---help---
The round robin timeslice will be set this number of milliseconds;
@@ -38,6 +38,92 @@ config TASK_NAME_SIZE
Useful if scheduler instrumentation is selected. Set to zero to
disable.
+config SCHED_HAVE_PARENT
+ bool "Support parent/child task relationships"
+ default n
+ ---help---
+ Remember the ID of the parent task when a new child task is
+ created. This support enables some additional features (such as
+ SIGCHLD) and modifies the behavior of other interfaces. For
+ example, it makes waitpid() more standards complete by restricting
+ the waited-for tasks to the children of the caller. Default:
+ disabled.
+
+config SCHED_CHILD_STATUS
+ bool "Retain child exit status"
+ default n
+ depends on SCHED_HAVE_PARENT
+ ---help---
+ If this option is selected, then the exit status of the child task
+ will be retained after the child task exits. This option should be
+ selected if you require knowledge of a child process' exit status.
+ Without this setting, wait(), waitpid() or waitid() may fail. For
+ example, if you do:
+
+ 1) Start child task
+ 2) Wait for exit status (using wait(), waitpid(), or waitid()).
+
+ This can fail because the child task may run to completion before
+ the wait begins. There is a non-standard work-around in this case:
+ The above sequence will work if you disable pre-emption using
+ sched_lock() prior to starting the child task, then re-enable pre-
+ emption with sched_unlock() after the wait completes. This works
+ because the child task is not permitted to run until the wait is in
+ place.
+
+ The standard solution would be to enable SCHED_CHILD_STATUS. In
+ this case the exit status of the child task is retained after the
+ child exits and the wait will successful obtain the child task's
+ exit status whether it is called before the child task exits or not.
+
+ Warning: If you enable this feature, then your application must
+ either (1) take responsibility for reaping the child status with wait(),
+ waitpid(), or waitid(), or (2) suppress retention of child status.
+ If you do not reap the child status, then you have a memory leak and
+ your system will eventually fail.
+
+ Retention of child status can be suppressed on the parent using logic like:
+
+ struct sigaction sa;
+
+ sa.sa_handler = SIG_IGN;
+ sa.sa_flags = SA_NOCLDWAIT;
+ int ret = sigaction(SIGCHLD, &sa, NULL);
+
+config PREALLOC_CHILDSTATUS
+ int "Number of pre-allocated child status"
+ default 0
+ depends on SCHED_CHILD_STATUS
+ ---help---
+ To prevent runaway child status allocations and to improve
+ allocation performance, child task exit status structures are pre-
+ allocated when the system boots. This setting determines the number
+ of child status structures that will be pre-allocated. If this
+ setting is not defined or if it is defined to be zero then a value
+ of 2*MAX_TASKS is used.
+
+ Note that there cannot be more that CONFIG_MAX_TASKS tasks in total.
+ However, the number of child status structures may need to be
+ significantly larger because this number includes the maximum number
+ of tasks that are running PLUS the number of tasks that have exit'ed
+ without having their exit status reaped (via wait(), waitid(), or
+ waitpid()).
+
+ Obviously, if tasks spawn children indefinitely and never have the
+ exit status reaped, then you may have a memory leak! If you enable
+ the SCHED_CHILD_STATUS feature, then your application must take
+ responsibility for either (1) reaping the child status with wait(),
+ waitpid(), or waitid() or it must (2) suppress retention of child
+ status. Otherwise, your system will eventually fail.
+
+ Retention of child status can be suppressed on the parent using logic like:
+
+ struct sigaction sa;
+
+ sa.sa_handler = SIG_IGN;
+ sa.sa_flags = SA_NOCLDWAIT;
+ int ret = sigaction(SIGCHLD, &sa, NULL);
+
config JULIAN_TIME
bool "Enables Julian time conversions"
default n
@@ -45,15 +131,15 @@ config JULIAN_TIME
Enables Julian time conversions
config START_YEAR
- int "start year"
+ int "Start year"
default 2013
config START_MONTH
- int "start month"
+ int "Start month"
default 1
config START_DAY
- int "start day"
+ int "Start day"
default 1
config DEV_CONSOLE
@@ -77,7 +163,7 @@ config PRIORITY_INHERITANCE
Set to enable support for priority inheritance on mutexes and semaphores.
config SEM_PREALLOCHOLDERS
- int "Pre-allocated holders"
+ int "Number of pre-allocated holders"
default 16
depends on PRIORITY_INHERITANCE
---help---
@@ -127,6 +213,7 @@ config SDCLONE_DISABLE
config SCHED_WORKQUEUE
bool "Enable worker thread"
default n
+ depends on !DISABLE_SIGNALS
---help---
Create a dedicated "worker" thread to handle delayed processing from interrupt
handlers. This feature is required for some drivers but, if there are no
@@ -158,14 +245,6 @@ config SCHED_WORKSTACKSIZE
---help---
The stack size allocated for the worker thread. Default: 2K.
-config SIG_SIGWORK
- int "Worker thread wakeup signal"
- default 4
- depends on SCHED_WORKQUEUE
- ---help---
- The signal number that will be used to wake-up the worker thread.
- Default: 4
-
config SCHED_LPWORK
bool "Enable a lower priority worker thread"
default n
@@ -203,7 +282,12 @@ config SCHED_WAITPID
bool "Enable waitpid() API"
default n
---help---
- Enables the waitpid() API
+ Enables the waitpid() interface in a default, non-standard mode
+ (non-standard in the sense that the waited for PID need not be child
+ of the caller). If SCHED_HAVE_PARENT is also defined, then this
+ setting will modify the behavior or waitpid() (making more spec
+ compliant) and will enable the waitid() and wait() interfaces as
+ well.
config SCHED_ATEXIT
bool "Enable atexit() API"
@@ -310,10 +394,60 @@ config DISABLE_POLL
depends on DISABLE_OS_API
default n
+if !DISABLE_SIGNALS
+comment "Signal Numbers"
+
+config SIG_SIGUSR1
+ int "SIGUSR1"
+ default 1
+ ---help---
+ Value of standard user signal 1 (SIGUSR1). Default: 1
+
+config SIG_SIGUSR2
+ int "SIGUSR2"
+ default 2
+ ---help---
+ Value of standard user signal 2 (SIGUSR2). Default: 2
+
+config SIG_SIGALARM
+ int "SIGALRM"
+ default 3
+ ---help---
+ Default the signal number used with POSIX timers (SIGALRM).
+ Default: 3
+
+config SIG_SIGCHLD
+ int "SIGCHLD"
+ default 4
+ depends on SCHED_HAVE_PARENT
+ ---help---
+ The SIGCHLD signal is sent to the parent of a child process when it
+ exits, is interrupted (stopped), or resumes after being interrupted.
+ Default: 4
+
+config SIG_SIGCONDTIMEDOUT
+ int "SIGCONDTIMEDOUT"
+ default 16
+ depends on !DISABLE_PTHREAD
+ ---help---
+ This non-standard signal number is used the implementation of
+ pthread_cond_timedwait(). Default 16.
+
+config SIG_SIGWORK
+ int "SIGWORK"
+ default 17
+ depends on SCHED_WORKQUEUE
+ ---help---
+ SIGWORK is a non-standard signal used to wake up the internal NuttX
+ worker thread. This setting specifies the signal number that will be
+ used for SIGWORK. Default: 17
+
+endif
+
comment "Sizes of configurable things (0 disables)"
config MAX_TASKS
- int "Max tasks"
+ int "Max number of tasks"
default 32
---help---
The maximum number of simultaneously active tasks. This value must be
@@ -327,33 +461,32 @@ config MAX_TASK_ARGS
receive (i.e., maxmum value of 'argc')
config NPTHREAD_KEYS
- int "Number of pthread keys"
+ int "Maximum number of pthread keys"
default 4
---help---
The number of items of thread-
specific data that can be retained
config NFILE_DESCRIPTORS
- int "Max file descriptors"
+ int "Maximum number of file descriptors per task"
default 16
---help---
- The maximum number of file
- descriptors (one for each open)
+ The maximum number of file descriptors per task (one for each open)
config NFILE_STREAMS
- int "Max file streams"
+ int "Maximum number of FILE streams"
default 16
---help---
The maximum number of streams that can be fopen'ed
config NAME_MAX
- int "name max"
+ int "Maximum size of a file name"
default 32
---help---
The maximum size of a file name.
config PREALLOC_MQ_MSGS
- int "Pre-allocated messages"
+ int "Number of pre-allocated messages"
default 32
---help---
The number of pre-allocated message structures. The system manages
@@ -367,21 +500,20 @@ config MQ_MAXMSGSIZE
setting (does not include other message structure overhead.
config MAX_WDOGPARMS
- int "max watchdog parms"
+ int "Maximum number of watchdog parameters"
default 4
---help---
- Maximum number of parameters that
- can be passed to a watchdog handler
+ Maximum number of parameters that can be passed to a watchdog handler
config PREALLOC_WDOGS
- int "Pre-allocated watchdogs"
+ int "Number of pre-allocated watchdog timers"
default 32
---help---
The number of pre-allocated watchdog structures. The system manages a
pool of preallocated watchdog structures to minimize dynamic allocations
config PREALLOC_TIMERS
- int "Pre-allocated timers"
+ int "Number of pre-allocated POSIX timers"
default 8
---help---
The number of pre-allocated POSIX timer structures. The system manages a