class: ProcessorScheduler
added: #timeSlicingLoop
changed:
#startTimeSlicing
#timeoutHandlerProcess
--- 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 $'
! !