aboutsummaryrefslogtreecommitdiff
path: root/nuttx/sched/Kconfig
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/sched/Kconfig')
-rw-r--r--nuttx/sched/Kconfig115
1 files changed, 94 insertions, 21 deletions
diff --git a/nuttx/sched/Kconfig b/nuttx/sched/Kconfig
index 6d53a03aa..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;
@@ -39,16 +39,91 @@ config TASK_NAME_SIZE
disable.
config SCHED_HAVE_PARENT
- bool "Remember Parent"
+ bool "Support parent/child task relationships"
default n
---help---
- Remember the ID of the parent thread when a new child thread is
+ 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
@@ -56,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
@@ -88,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---
@@ -372,7 +447,7 @@ 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
@@ -386,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
@@ -426,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