Mercurial > ecos
annotate packages/kernel/current/include/mlqueue.hxx @ 2275:bd5fe26e87c5
* src/strftime.cxx: Fixed "%I" (Time in 12 hour modus was 1 hour off)
| author | jlarmour |
|---|---|
| date | Fri, 25 Aug 2006 00:12:41 +0000 |
| parents | d2c90368aeef |
| children | 73a01c1a35ba |
| rev | line source |
|---|---|
| 0 | 1 #ifndef CYGONCE_KERNEL_MLQUEUE_HXX |
| 2 #define CYGONCE_KERNEL_MLQUEUE_HXX | |
| 3 | |
| 4 //========================================================================== | |
| 5 // | |
| 2 | 6 // mlqueue.hxx |
| 0 | 7 // |
| 2 | 8 // Multi-Level Queue scheduler class declarations |
| 0 | 9 // |
| 10 //========================================================================== | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
11 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
12 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
13 // This file is part of eCos, the Embedded Configurable Operating System. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
15 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
16 // eCos is free software; you can redistribute it and/or modify it under |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
17 // the terms of the GNU General Public License as published by the Free |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
18 // Software Foundation; either version 2 or (at your option) any later version. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
19 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
20 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
21 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
23 // for more details. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
24 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
25 // You should have received a copy of the GNU General Public License along |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
26 // with eCos; if not, write to the Free Software Foundation, Inc., |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
27 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
28 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
29 // As a special exception, if other files instantiate templates or use macros |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
30 // or inline functions from this file, or you compile this file and link it |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
31 // with other works to produce a work based on this file, this file does not |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
32 // by itself cause the resulting work to be covered by the GNU General Public |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
33 // License. However the source code for this file must still be made available |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
34 // in accordance with section (3) of the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
35 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
36 // This exception does not invalidate any other reasons why a work based on |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
37 // this file might be covered by the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
38 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
39 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
40 // at http://sources.redhat.com/ecos/ecos-license/ |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
41 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
177
diff
changeset
|
42 //####ECOSGPLCOPYRIGHTEND#### |
| 0 | 43 //========================================================================== |
| 44 //#####DESCRIPTIONBEGIN#### | |
| 45 // | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
46 // Author(s): nickg |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
47 // Contributors: jlarmour |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
48 // Date: 1997-09-10 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
49 // Purpose: Define multilevel queue scheduler implementation |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
50 // Description: The classes defined here are used as base classes |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
51 // by the common classes that define schedulers and thread |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
52 // things. The MLQ scheduler in various configurations |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
53 // provides standard FIFO, round-robin and single priority |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
54 // schedulers. |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
55 // Usage: Included according to configuration by |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
56 // <cyg/kernel/sched.hxx> |
| 0 | 57 // |
| 58 //####DESCRIPTIONEND#### | |
| 59 // | |
| 60 //========================================================================== | |
| 61 | |
| 62 #include <cyg/kernel/ktypes.h> | |
| 63 | |
|
148
8f2f7615e727
Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents:
132
diff
changeset
|
64 #include <cyg/infra/clist.hxx> // List implementation |
|
8f2f7615e727
Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents:
132
diff
changeset
|
65 |
| 0 | 66 // ------------------------------------------------------------------------- |
| 67 // The macro CYGNUM_KERNEL_SCHED_PRIORITIES contains the number of priorities | |
| 68 // supported by the scheduler. | |
| 69 | |
| 70 #ifndef CYGNUM_KERNEL_SCHED_PRIORITIES | |
| 71 #define CYGNUM_KERNEL_SCHED_PRIORITIES 32 // define a default | |
| 72 #endif | |
| 73 | |
| 74 // set bitmap size | |
| 75 #define CYGNUM_KERNEL_SCHED_BITMAP_SIZE CYGNUM_KERNEL_SCHED_PRIORITIES | |
| 76 | |
| 77 // ------------------------------------------------------------------------- | |
| 78 // The macro CYGNUM_KERNEL_SCHED_BITMAP_SIZE contains the number of bits that the | |
| 79 // scheduler bitmap should contain. It is derived from the number of prioirity | |
| 80 // levels defined by the configuration. | |
| 81 | |
| 82 #if CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 8 | |
| 83 typedef cyg_ucount8 cyg_sched_bitmap; | |
| 84 #elif CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 16 | |
| 85 typedef cyg_ucount16 cyg_sched_bitmap; | |
| 86 #elif CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 32 | |
| 87 typedef cyg_ucount32 cyg_sched_bitmap; | |
| 88 #else | |
| 89 #error Bitmaps greater than 32 bits not currently allowed | |
| 90 #endif | |
| 91 | |
| 92 // ------------------------------------------------------------------------- | |
| 93 // Customize the scheduler | |
| 94 | |
| 95 #define CYGIMP_THREAD_PRIORITY 1 // Threads have changable priorities | |
| 96 | |
| 97 #define CYG_THREAD_MIN_PRIORITY (CYGNUM_KERNEL_SCHED_PRIORITIES-1) | |
| 98 #define CYG_THREAD_MAX_PRIORITY 0 | |
| 99 | |
| 100 // set default scheduling info value for thread constructors. | |
| 101 #define CYG_SCHED_DEFAULT_INFO CYG_THREAD_MAX_PRIORITY | |
| 102 | |
| 103 // ------------------------------------------------------------------------- | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
104 // scheduler Run queue object |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
105 |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
106 typedef Cyg_CList_T<Cyg_Thread> Cyg_RunQueue; |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
107 |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
108 // ------------------------------------------------------------------------- |
| 0 | 109 // Thread queue implementation. |
| 110 // This class provides the (scheduler specific) implementation of the | |
| 111 // thread queue class. | |
| 112 | |
| 113 class Cyg_ThreadQueue_Implementation | |
|
148
8f2f7615e727
Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents:
132
diff
changeset
|
114 : public Cyg_CList_T<Cyg_Thread> |
| 0 | 115 { |
| 116 friend class Cyg_Scheduler_Implementation; | |
| 117 friend class Cyg_SchedThread_Implementation; | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
118 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
119 void set_thread_queue(Cyg_Thread *thread, |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
120 Cyg_ThreadQueue *tq ); |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
121 |
| 0 | 122 protected: |
| 123 | |
| 124 // API used by Cyg_ThreadQueue | |
| 125 | |
|
148
8f2f7615e727
Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents:
132
diff
changeset
|
126 Cyg_ThreadQueue_Implementation() {}; // Constructor |
| 0 | 127 |
| 128 // Add thread to queue | |
| 129 void enqueue(Cyg_Thread *thread); | |
| 130 | |
| 131 // return first thread on queue | |
| 132 Cyg_Thread *highpri(); | |
| 133 | |
| 134 // remove first thread on queue | |
| 135 Cyg_Thread *dequeue(); | |
| 136 | |
|
151
25e238959bae
Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
148
diff
changeset
|
137 // Remove thread from queue |
|
25e238959bae
Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
148
diff
changeset
|
138 void remove(Cyg_Thread *thread); |
|
25e238959bae
Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
148
diff
changeset
|
139 |
| 0 | 140 }; |
| 141 | |
| 142 // ------------------------------------------------------------------------- | |
| 143 // This class contains the implementation details of the scheduler, and | |
| 144 // provides a standard API for accessing it. | |
| 145 | |
| 146 class Cyg_Scheduler_Implementation | |
| 147 : public Cyg_Scheduler_Base | |
| 148 { | |
| 149 friend class Cyg_ThreadQueue_Implementation; | |
| 150 friend class Cyg_SchedThread_Implementation; | |
| 151 friend class Cyg_HardwareThread; | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
152 friend void cyg_scheduler_set_need_reschedule(); |
| 0 | 153 |
| 154 // Mask of which run queues have ready threads | |
| 155 cyg_sched_bitmap queue_map; | |
| 156 | |
| 157 // Each run queue is a double linked circular list of threads. | |
| 158 // These pointers point to the head element of each list. | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
159 Cyg_RunQueue run_queue[CYGNUM_KERNEL_SCHED_PRIORITIES]; |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
160 |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
161 #ifdef CYGPKG_KERNEL_SMP_SUPPORT |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
162 |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
163 // In SMP systems we additionally keep a counter for each priority |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
164 // of the number of pending but not running threads in each queue. |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
165 |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
166 cyg_uint32 pending[CYGNUM_KERNEL_SCHED_PRIORITIES]; |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
167 |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
168 cyg_sched_bitmap pending_map; |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
169 |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
170 #endif |
| 0 | 171 |
| 172 protected: | |
| 173 | |
| 174 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE | |
| 175 | |
| 176 // Timeslice counter. This is decremented on each | |
| 177 // clock tick, and a timeslice is performed each | |
| 178 // time it zeroes. | |
| 179 | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
180 static cyg_ucount32 timeslice_count[CYGNUM_KERNEL_CPU_MAX] |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
181 CYGBLD_ANNOTATE_VARIABLE_SCHED; |
| 0 | 182 |
| 183 static void reset_timeslice_count(); | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
184 |
| 0 | 185 #endif |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
186 |
| 0 | 187 Cyg_Scheduler_Implementation(); // Constructor |
| 188 | |
| 189 // The following functions provide the scheduler implementation | |
| 190 // interface to the Cyg_Scheduler class. These are protected | |
| 191 // so that only the scheduler can call them. | |
| 192 | |
| 193 // choose a new thread | |
| 194 Cyg_Thread *schedule(); | |
| 195 | |
| 196 // make thread schedulable | |
| 197 void add_thread(Cyg_Thread *thread); | |
| 198 | |
| 199 // make thread un-schedulable | |
| 200 void rem_thread(Cyg_Thread *thread); | |
| 201 | |
| 202 // register thread with scheduler | |
| 203 void register_thread(Cyg_Thread *thread); | |
| 204 | |
| 205 // deregister thread | |
| 206 void deregister_thread(Cyg_Thread *thread); | |
| 207 | |
| 208 // Test the given priority for uniqueness | |
| 209 cyg_bool unique( cyg_priority priority); | |
| 210 | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
211 // Set need_reschedule if the supplied thread is of lower |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
212 // priority than any that are currently running. |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
213 static void set_need_reschedule( Cyg_Thread *thread ); |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
214 static void set_need_reschedule(); |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
215 |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
216 public: |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
217 void set_idle_thread( Cyg_Thread *thread, HAL_SMP_CPU_TYPE cpu ); |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
218 |
| 0 | 219 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE |
| 220 | |
| 221 // If timeslicing is enbled, define a scheduler | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
222 // entry points to do timeslicing. This will be |
| 0 | 223 // called from the RTC DSR. |
| 224 public: | |
| 225 void timeslice(); | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
226 void timeslice_cpu(); |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
227 |
| 0 | 228 #endif |
| 229 | |
| 230 }; | |
| 231 | |
| 232 // ------------------------------------------------------------------------- | |
| 233 // Cyg_Scheduler_Implementation inlines | |
| 234 | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
235 inline void Cyg_Scheduler_Implementation::set_need_reschedule() |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
236 { |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
237 need_reschedule[CYG_KERNEL_CPU_THIS()] = true; |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
238 } |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
239 |
| 0 | 240 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE |
| 241 | |
| 242 inline void Cyg_Scheduler_Implementation::reset_timeslice_count() | |
| 243 { | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
244 timeslice_count[CYG_KERNEL_CPU_THIS()] = CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS; |
| 0 | 245 } |
| 246 | |
| 247 #endif | |
| 248 | |
| 249 // ------------------------------------------------------------------------- | |
| 250 // Scheduler thread implementation. | |
| 251 // This class provides the implementation of the scheduler specific parts | |
| 252 // of each thread. | |
| 253 | |
| 254 class Cyg_SchedThread_Implementation | |
|
148
8f2f7615e727
Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents:
132
diff
changeset
|
255 : public Cyg_DNode_T<Cyg_Thread> |
| 0 | 256 { |
| 257 friend class Cyg_Scheduler_Implementation; | |
| 258 friend class Cyg_ThreadQueue_Implementation; | |
| 259 | |
| 260 protected: | |
| 261 | |
| 262 cyg_priority priority; // current thread priority | |
| 263 | |
|
177
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
264 #ifdef CYGPKG_KERNEL_SMP_SUPPORT |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
265 HAL_SMP_CPU_TYPE cpu; // CPU id of cpu currently running |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
266 // this thread, or CYG_KERNEL_CPU_NONE |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
267 // if not running. |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
268 #endif |
|
4c750ce71ae3
Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents:
151
diff
changeset
|
269 |
| 0 | 270 Cyg_SchedThread_Implementation(CYG_ADDRWORD sched_info); |
| 271 | |
| 272 void yield(); // Yield CPU to next thread | |
| 273 | |
| 274 static void rotate_queue( cyg_priority pri ); | |
| 275 // Rotate that run queue | |
| 2 | 276 |
| 277 void to_queue_head( void ); // Move this thread to the head | |
| 278 // of its queue (not necessarily | |
| 279 // a scheduler queue) | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
280 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
281 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
282 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
283 // This defines whether this thread is subject to timeslicing. |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
284 // If false, timeslice expiry has no effect on the thread. |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
285 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
286 cyg_bool timeslice_enabled; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
287 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
288 public: |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
289 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
290 void timeslice_enable(); |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
291 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
292 void timeslice_disable(); |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
293 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
294 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
295 |
| 0 | 296 }; |
| 297 | |
| 298 // ------------------------------------------------------------------------- | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
299 // Cyg_SchedThread_Implementation inlines. |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
300 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
301 #ifdef CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
302 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
303 inline void Cyg_SchedThread_Implementation::timeslice_enable() |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
304 { |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
305 timeslice_enabled = true; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
306 } |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
307 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
308 inline void Cyg_SchedThread_Implementation::timeslice_disable() |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
309 { |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
310 timeslice_enabled = false; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
311 } |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
312 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
313 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
314 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
315 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
66
diff
changeset
|
316 // ------------------------------------------------------------------------- |
| 0 | 317 #endif // ifndef CYGONCE_KERNEL_MLQUEUE_HXX |
| 318 // EOF mlqueue.hxx |
