Per Brinch Hansen. The nucleus of a multiprogramming system. Communications of the ACM 13, 4 (April, 1970) pages 238-241.
by J. H. Saltzer, February 14, 1996
(Note: when searching for this author's stuff, it is helpful to realize that his last name starts with the letter "B". It is also helpful to realize that not all cataloguers have figured that out.) The RC-4000 was the first, and may still be the best explained, system to use messages as the primary task coordination mechanism. It is also the earliest example of a published microkernel design. (A student in one of Corby's classes remarked "The only thing that has changed is the buzzwords.") - written in Europe. Does that matter? (European academics tend to be VERY academic, and less tolerant of practical and real-world things.) Is this a description of - a speculative plan for a system - an experimental system designed and built to see if it would work - a real system put into active use with a bunch of applications to validate that it is useful? (Answer: experimental toy.) How can you tell? Note that by modern refereeing standards, this paper is deficient in that it doesn't explicitly tell us, you have to infer it from clues. Citations: only half a dozen, quite narrow. Worrisome. When was this paper written? (1970). What is the speed and scale of the RC-4000 computer compared with present-day machines? (128 Kbytes of memory, 250 KIPS processor.) Both are about three orders of magnitude smaller than 1996 numbers for a network server. Among other things, this paper gives us a point on the technology curve and allows us to estimate the average rate of change over 25 years. Ask what rate of change is involved. (About 35%/year, compounded annually.) How big is the Operating System? (kernel is 19 Kilobytes, -- 6200 words of three bytes each.) The Windows kernel is only 4 Mbytes, so maybe system size is growing only 30%/year, but it isn't far behind. Where is the overlap with Simon's paper? (Process hierarchy. When a process creates another process, the child process receives a share of the parent's resources. Control of a process can be exercised only by its parent.) What is the definition of process used by Brinch Hansen? (A thread of execution together with an address space.) Note carefully; every paper will use a different definition. (Note also that many students do not come out of 6.004 with a clear idea of what a thread of execution is and how it differs from a program.) Notation problem: can't tell which arguments of send/wait/message/answer are input and which are output. Exercise: figure it out. send message (rcvr, msg, buff) in in out wait message (sndr, msg, buff) out out out send answer (rslt, ans, buff) in in in wait answer (rslt, ans, buff) out out out? Insight: the buffers are being passed around, by address. Second insight: the language being used must not be C, because it is using call-by-reference. This observation is good for a discussion of assumptions that the author is making about what the reader knows. What exactly is the distinction between internal and external processes? (internal processes are kernel simulations intended to give I/O operations the same interface as an external process.) Why did we read this paper? (kernel, client/server, message system, hard modularity) Why did Brinch Hansen write it? (extensible supervisor, process hierarchy, uniform treatment of I/O)