[squeak-dev] Processor Scheduler

John M McIntosh johnmci at smalltalkconsulting.com
Sun Jan 10 20:54:38 UTC 2010


Let me answer the question in a different way. If you wanted to insert code at the point where the process switch actually occurs, 
this can only be done in the VM slang code.  

In general the transfer is 

transferTo(wakeHighestPriority())

Except in the case of resume  where it's resume: theProcess and theProcess will be run if it's priority is > than the current process priority.
Does that mean it could preempt a higher ready to run (but not running) process? That is a exercise for the reader... 

transfer is a result of  calling:
wait
	via primitiveWait, lurks on Semaphore
resume
	via primitiveResume
	via signal to a Semaphore
suspend
	via primitiveSuspend
yield
	via primitiveYield

Obviously you can control the use of wait, suspend, resume, yield in Smalltalk.  The "Signal to a semaphore" is harder
because that is either a smalltalk message send, or internal to the VM/plugins where various  semaphores are used:

The VM has the following semaphores:
LowSpace, if space "is low" signal it
Interrupt,  I'm not sure this is used in the VM it was for the interrupt key code logic pre event driven keyboard logic, it is used in Smalltalk code.
TimerSemaphore,  drives Delay logic, it wakes the Delay process when the next  Delay(s) expire.
FinalizationSemaphore, drives Finalization logic
GCSemaphore, optional wakes something at the end of a GC cycle. 

Other Semaphores driven by plugins, like the 3 on a Socket instance. 


wakeHighestPriority

Again in Slang is where the logic is done that decides what the "Highest Priority" task to wake is. Which is find the highest priority linked list and remove the first element from the list. 
The reverse of this is when we place the process we are "suspending" that goes to the end of the linked list based on the Process priority. 

This is not the most clever scheduling see http://en.wikipedia.org/wiki/Priority_inversion
for issues.  Changing the way it works can be done, check the archives and the VisualWork's mailing list archives I think you'll find other people have visited the problem


On 2010-01-10, at 7:56 AM, Bert Freudenberg wrote:

> On 10.01.2010, at 16:25, Ang BeePeng wrote:
>> 
>> 
>> Hi all.
>> 
>> I find that there are little material about processorScheduler on the wiki.
>> Is it written in C, Smalltalk and C? It is the SchedulerAssociate, fourth
>> special object, which mean VM knows about the class directly. I wish to know
>> more, what VM know about processorScheduler? How it interacts with the VM?
>> Which part of processorScheduler is in C and which part of it is in
>> Smalltalk? When specialObjects being loaded from image, I assume they are
>> all in C, true?
>> 
>> Thank you very much.
> 
> See pg. 254 of the Blue Book.
> 
> There are no "C objects" in Squeak.
> 
> - Bert -
> 
> 
> 

--
===========================================================================
John M. McIntosh <johnmci at smalltalkconsulting.com>   Twitter:  squeaker68882
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
===========================================================================







More information about the Squeak-dev mailing list