Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!apple!netcom!schang From: schang@netcom.UUCP (Sehyo Chang) Newsgroups: comp.lang.smalltalk Subject: Re: ST-80 Processes and pre-emption Message-ID: <10788@netcom.UUCP> Date: 10 Apr 90 21:23:34 GMT References: <49b89829.20b6d@apollo.HP.COM> Organization: NetCom- The Bay Area's Public Access Unix System {408 249-0290 guest} Lines: 50 In article <49b89829.20b6d@apollo.HP.COM> yon@apollo.HP.COM (David Yon) writes: > >Hey there Smalltalk-80 hackers... > > I'm working on prototyping a system which requires us to explore >concurrency issues. Our model is of a central messaging server connected >to several running tools. The message server and each tool will probably >map one-to-one to a UNIX process in the final product. > > The problem is as follows. We really, really want this thing to >simulate the final environment as closely as possible. One of the things >we want to simulate is each of these processes marching ahead using UNIX >the pre-emptive multitasking model. In Smalltalk-80 (in 2.3 at least) >multi-tasking is NOT preemptive. A process has control until it explicitly >terminates or suspends. > > Seems to me that anyone who has had to use Smalltalk to simulate >real-world events must have run up against this. Any good/bad experiences >out there? Thanks... > There are two strategies: (1) write full discrete event event simulator (on Blue Book, there is chapter on discrete event simulation at end). Model message passing as event and write (a) UNIX process object (b) pre-emptive multitaksing event manager which handles generation of proper events such that pre-emptive is fully simulated. By default, full discrete event simulator is multi-tasking, however, you need to build some process termination/ interrupt logic. *Warning: make sure you save images often when you are doing these sort of things (2) build special processor scheduler which can do pre-emptive interrupt. Idea is to put *Delay* process as higher than normal priority process. When that Delay process wakes up it suspends current running process and restart other waiting processes. I do not recommed you put this scheduler as system default scheduler because there is other processes to content with(for example, current active window controller which may during text editing, do 'Process yield', thus may encounter race condition. What you can do is just coordinate only UNIX alike processes. Anyway, doing simulation in Smalltalk is awful lots of *fun*, especially since lightweight processes doesn't take much weight as real UNIX process. It is awesome to see 1000 smalltalk processes doing simulation -- Sehyo Chang schang@netcom.uucp Ascent Logic Corp. ucvbax!ames!apple!netcom!schang (408)943-0630