class: ProcessorScheduler
authorClaus Gittinger <cg@exept.de>
Fri, 23 Aug 2013 13:23:28 +0200
changeset 15687 7679c998f5ac
parent 15686 2efc686ef383
child 15688 1a99731256ba
class: ProcessorScheduler added: #timeSlicingLoop changed: #startTimeSlicing #timeoutHandlerProcess
ProcessorScheduler.st
--- a/ProcessorScheduler.st	Fri Aug 23 02:21:19 2013 +0200
+++ b/ProcessorScheduler.st	Fri Aug 23 13:23:28 2013 +0200
@@ -12,24 +12,24 @@
 "{ Package: 'stx:libbasic' }"
 
 Object subclass:#ProcessorScheduler
-        instanceVariableNames:'quiescentProcessLists scheduler zombie activeProcess
-                activeProcessId currentPriority readFdArray readSemaphoreArray
-                readCheckArray writeFdArray writeSemaphoreArray writeCheckArray
-                timeoutArray timeoutActionArray timeoutProcessArray
-                timeoutSemaphoreArray idleActions anyTimeouts dispatching
-                interruptedProcess useIOInterrupts gotIOInterrupt
-                osChildExitActions gotChildSignalInterrupt
-                exitWhenNoMoreUserProcesses suspendScheduler timeSliceProcess
-                supportDynamicPriorities timeSliceNeededSemaphore
-                scheduledProcesses preWaitActions timeoutHandlerProcess
-                readableResultFdArray writableResultFdArray'
-        classVariableNames:'KnownProcesses KnownProcessIds PureEventDriven
-                UserSchedulingPriority UserInterruptPriority TimingPriority
-                HighestPriority SchedulingPriority MaxNumberOfProcesses
-                InvalidProcessSignal TimeSlicingPriorityLimit TimeSliceInterval
-                EventPollingInterval'
-        poolDictionaries:''
-        category:'Kernel-Processes'
+	instanceVariableNames:'quiescentProcessLists scheduler zombie activeProcess
+		activeProcessId currentPriority readFdArray readSemaphoreArray
+		readCheckArray writeFdArray writeSemaphoreArray writeCheckArray
+		timeoutArray timeoutActionArray timeoutProcessArray
+		timeoutSemaphoreArray idleActions anyTimeouts dispatching
+		interruptedProcess useIOInterrupts gotIOInterrupt
+		osChildExitActions gotChildSignalInterrupt
+		exitWhenNoMoreUserProcesses suspendScheduler timeSliceProcess
+		supportDynamicPriorities timeSliceNeededSemaphore
+		scheduledProcesses preWaitActions timeoutHandlerProcess
+		readableResultFdArray writableResultFdArray'
+	classVariableNames:'KnownProcesses KnownProcessIds PureEventDriven
+		UserSchedulingPriority UserInterruptPriority TimingPriority
+		HighestPriority SchedulingPriority MaxNumberOfProcesses
+		InvalidProcessSignal TimeSlicingPriorityLimit TimeSliceInterval
+		EventPollingInterval'
+	poolDictionaries:''
+	category:'Kernel-Processes'
 !
 
 !ProcessorScheduler class methodsFor:'documentation'!
@@ -2193,32 +2193,7 @@
 
     timeSliceProcess := [
         [
-            |myDelay t flipFlop|
-
-            myDelay := Delay forMilliseconds:(t := TimeSliceInterval).
-            flipFlop := true.
-
-            'Processor [info]: timeslicer started' infoPrintCR.
-            [true] whileTrue: [
-                t ~~ TimeSliceInterval ifTrue:[
-                    "/ interval changed -> need a new delay
-                    myDelay delay:(t := TimeSliceInterval).
-                ].
-                myDelay wait.
-                self slice.
-
-                "/ every other tick, recompute priorities.
-                flipFlop := flipFlop not.
-                flipFlop ifTrue:[
-                    scheduledProcesses notNil ifTrue:[
-                        supportDynamicPriorities == true ifTrue:[
-                            self recomputeDynamicPriorities.
-                        ].
-                        scheduledProcesses removeAll.
-                    ].
-                    scheduledProcesses := IdentitySet new.
-                ].
-            ]
+            self timeSlicingLoop.
         ] ifCurtailed:[
             timeSliceProcess := nil.
             'Processor [info]: timeslicer finished' infoPrintCR.
@@ -2277,6 +2252,35 @@
     "
 
     "Modified: / 3.8.1998 / 22:54:52 / cg"
+!
+
+timeSlicingLoop
+    |myDelay t flipFlop|
+
+    myDelay := Delay forMilliseconds:(t := TimeSliceInterval).
+    flipFlop := true.
+
+    'Processor [info]: timeslicer started' infoPrintCR.
+    [true] whileTrue: [
+        t ~~ TimeSliceInterval ifTrue:[
+            "/ interval changed -> need a new delay
+            myDelay delay:(t := TimeSliceInterval).
+        ].
+        myDelay wait.
+        self slice.
+
+        "/ every other tick, recompute priorities.
+        flipFlop := flipFlop not.
+        flipFlop ifTrue:[
+            scheduledProcesses notNil ifTrue:[
+                supportDynamicPriorities == true ifTrue:[
+                    self recomputeDynamicPriorities.
+                ].
+                scheduledProcesses removeAll.
+            ].
+            scheduledProcesses := IdentitySet new.
+        ].
+    ]
 ! !
 
 !ProcessorScheduler methodsFor:'semaphore signalling'!
@@ -2925,7 +2929,7 @@
 
         timeoutHandlerProcess
             priority:TimingPriority;
-            name:'Timeout handler';
+            name:'timeout handler';
             beSystemProcess;
             resume.
     ].
@@ -3399,11 +3403,11 @@
 !ProcessorScheduler class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.276 2013-08-20 13:56:31 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.277 2013-08-23 11:23:28 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.276 2013-08-20 13:56:31 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.277 2013-08-23 11:23:28 cg Exp $'
 ! !