diff packages/kernel/current/cdl/scheduler.cdl @ 76:435cced73e2f ecos-v1_3_1-release

eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
author jlarmour
date Tue, 28 Mar 2000 14:10:45 +0000
parents
children 6736c52df507
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/kernel/current/cdl/scheduler.cdl
@@ -0,0 +1,157 @@
+# ====================================================================
+#
+#      scheduler.cdl
+#
+#      configuration data related to the kernel schedulers
+#
+# ====================================================================
+#####COPYRIGHTBEGIN####
+#                                                                          
+# -------------------------------------------                              
+# The contents of this file are subject to the Red Hat eCos Public License 
+# Version 1.1 (the "License"); you may not use this file except in         
+# compliance with the License.  You may obtain a copy of the License at    
+# http://www.redhat.com/                                                   
+#                                                                          
+# Software distributed under the License is distributed on an "AS IS"      
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+# License for the specific language governing rights and limitations under 
+# the License.                                                             
+#                                                                          
+# The Original Code is eCos - Embedded Configurable Operating System,      
+# released September 30, 1998.                                             
+#                                                                          
+# The Initial Developer of the Original Code is Red Hat.                   
+# Portions created by Red Hat are                                          
+# Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+# All Rights Reserved.                                                     
+# -------------------------------------------                              
+#                                                                          
+#####COPYRIGHTEND####
+# ====================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):      jskov
+# Original data:  nickg
+# Contributors:
+# Date:           1999-07-05
+#
+#####DESCRIPTIONEND####
+#
+# ====================================================================
+
+cdl_interface CYGINT_KERNEL_SCHEDULER {
+    display  "Number of schedulers in this configuration"
+    requires 1 == CYGINT_KERNEL_SCHEDULER
+}
+
+# FIXME: The two below options must be mutually exclusive
+cdl_option CYGSEM_KERNEL_SCHED_MLQUEUE {
+    display       "Multi-level queue scheduler"
+    default_value 1
+    implements    CYGINT_KERNEL_SCHEDULER
+    description   "
+        The multi-level queue scheduler supports multiple priority
+        levels and multiple threads at each priority level.
+        Preemption between priority levels is automatic. Timeslicing
+        within a given priority level is controlled by a separate
+        configuration option."
+}
+
+cdl_option CYGSEM_KERNEL_SCHED_BITMAP {
+    display       "Bitmap scheduler"
+    default_value 0
+    implements    CYGINT_KERNEL_SCHEDULER
+    description   "
+        The bitmap scheduler supports multiple priority levels but
+        only one thread can exist at each priority level. This means
+        that scheduling decisions are very simple and hence the
+        scheduler is efficient. Preemption between priority levels is
+        automatic. Timeslicing within a given priority level is
+        irrelevant since there can be only one thread at each
+        priority level."
+}
+
+#cdl_option CYGSEM_KERNEL_SCHED_LOTTERY {
+#    display      "Lottery scheduler"
+#    type          radio
+#    description "
+#       This scheduler is not yet available."
+#}
+
+cdl_option CYGPRI_KERNEL_SCHED_IMPL_HXX {
+    display       "Scheduler header file"
+    flavor        data
+    description   "
+	This option sets a preprocessor symbol which names the header
+	file for the selected scheduler.  It is used internally by the
+	common scheduler code to include the correct header file."
+    calculated { \
+               CYGSEM_KERNEL_SCHED_BITMAP  ? "<cyg/kernel/bitmap.hxx>"  :\
+               CYGSEM_KERNEL_SCHED_MLQUEUE ? "<cyg/kernel/mlqueue.hxx>" :\
+               CYGSEM_KERNEL_SCHED_LOTTERY ? "<cyg/kernel/lottery.hxx>" :\
+               "!!!-- Configuration broken - no scheduler selected --!!!"}
+}
+
+
+
+# NOTE: This option only makes sense if the current scheduler
+#       supports multiple priority levels.
+cdl_component CYGNUM_KERNEL_SCHED_PRIORITIES {
+    display       "Number of priority levels"
+    flavor        data
+    legal_values  1 to 32
+    default_value 32
+    #active_if     CYGINT_KERNEL_SCHED_PRIORITY_SCHEDULER
+    description "
+        This option controls the number of priority levels that are
+        available. For some types of scheduler including the bitmap
+        scheduler this may impose an upper bound on the number of
+        threads in the system. For other schedulers such as the
+        mlqueue scheduler the number of threads is independent from
+        the number of priority levels. Note that the lowest priority
+        level is normally used only by the idle thread, although
+        application threads can run at this priority if necessary."
+
+    cdl_option CYGNUM_KERNEL_SCHED_BITMAP_SIZE {
+        display       "Bitmap size"
+        flavor        data
+        calculated    {"CYGNUM_KERNEL_SCHED_PRIORITIES"}
+	description   "
+		This option automatically defines the size of bitmap
+		used to track occupied priority levels."
+    }
+}
+
+
+# NOTE: this option only makes sense for some of the schedulers.
+# Timeslicing is irrelevant for bitmap schedulers.
+cdl_component CYGSEM_KERNEL_SCHED_TIMESLICE {
+    display       "Scheduler timeslicing"
+    requires      !CYGSEM_KERNEL_SCHED_BITMAP
+    requires      CYGVAR_KERNEL_COUNTERS_CLOCK
+    default_value 1
+    description "
+        Some schedulers including the mlqueue scheduler support
+        timeslicing. This means that the kernel will check regularly
+        whether or not there is another runnable thread with the
+        same priority, and if there is such a thread there will be
+        an automatic context switch. Not all applications require
+        timeslicing, for example because every thread performs a
+        blocking operation regularly. For these applications it is
+        possible to disable timeslicing, which reduces the overheads
+        associated with timer interrupts."
+
+    cdl_option CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS {
+        display       "Number of clock ticks between timeslices"
+        flavor        data
+        legal_values  1 to 65535
+        default_value 5
+        description "
+            Assuming timeslicing is enabled, how frequently should it
+            take place? The value of this option corresponds to the
+            number of clock ticks that should occur before a timeslice
+            takes place, so increasing the value reduces the frequency
+            of timeslices."
+    }
+}