Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.milw.wisc.edu!cs.utexas.edu!uunet!zephyr.ens.tek.com!tekcrl!scotth From: scotth@tekcrl.LABS.TEK.COM (Scott R. Herzinger) Newsgroups: comp.realtime Subject: Re: Lightweight Tasks Summary: Variable weight processes Message-ID: <4405@tekcrl.LABS.TEK.COM> Date: 31 Jul 89 18:35:41 GMT References: <2153@gmu90x.UUCP> <70900004@m.cs.uiuc.edu> Organization: Tektronix Inc., Beaverton, Or. Lines: 32 What about additional shades of gray between "heavy" and "light"? At the USENIX conference in San Diego last January, someone from Data General presented a paper about their changes to fork() semantics and the organization of process context in order to provide something they called variable weight processes. I don't have the proceedings at hand, so I can't give details and must disclaim that errors are mine, not the paper's author's. The idea is that process context is partitioned into about several (about seven, I think) parts, each comprising things that roughly "belonged together" or had interdependencies such that they couldn't be separated. A variant of fork() is provided that permitted the caller to create a new process for which any of the parts could be copied or shared. A child that copies only the stack and otherwise shares *everything* is a light[est]weight task. Normal fork() is provided to create children that copy everything (on-write, of course :-)). There are lots of combinations in-between. I suppose that some of them are very useful and some probably aren't interesting or useable at all. Instead of adding a new layer of context partitioning (e.g. lightweight tasks) to UNIX processes, graduated partitioning is provided. Context management depends on the amount of non-shared context. Lightweight tasks are available, but within a fairly conventional UNIX framework. Hope this is interesting, Scott -- Scott Herzinger scotth%crl.labs.tek.com@relay.cs.net Computer Research Lab, Tektronix, Inc. PO Box 500 MS 50-662, Beaverton, OR 97077