home *** CD-ROM | disk | FTP | other *** search
- From: lwj@cs.kun.nl (Luc Rooijakkers)
- Newsgroups: alt.folklore.computers
- Subject: Explanation of "don't understand" comment
- Message-ID: <3812@wn1.sci.kun.nl>
- Date: 24 Jul 91 10:06:02 GMT
- Sender: root@sci.kun.nl
- Organization: University of Nijmegen, The Netherlands
- Lines: 66
-
- In <1991Jul22.113627.13234@sun.pcl.ac.uk> malcolmr@sun.pcl.ac.uk (Malcolm Ray)
- writes:
-
- >In article <1991Jul20.133238.25882@aber.ac.uk> ccs7@aber.ac.uk (Christopher
- Samuel) writes:
- >>In article <KENW.91Jul15225254@skyler.arc.ab.ca>
- >> kenw@skyler.arc.ab.ca (Ken Wallewein) doodled:
- >>
- >>> I've heard -- or read, I think -- about some code that contained the comment
- >>> "you aren't expected to understand this". Seems to me it was in TCP/IP.
- >>> /kenw
- >>
- >>I always thought that it was in or just before the sheduler algorithm.
-
- >It was in the swtch() function, which was indeed part of the scheduler.
-
- [Gives edited full text of the comment]
-
- >Well, you can see what they mean! :-) I remember being well chuffed that
- >I *did* understand it, but don't expect me to now...
-
- It was not terribly complicated, though, but you had to read the machine
- language also... An excerpt of my submission for the jargon file:
-
- I looked it up in my photocopy of `UNIX(tm) Operating System Source Code,
- Level Six', from J. Lions from the University of New South Wales.
-
- The full text of the comment from V6 slp.c (context-switching code) was
-
- If the new process paused because is was swapped out,
- set the stack level to the last call to savu(u_ssav).
- This means that the return which is executed immediately after
- the call to aretu actually returns from the last routine which
- did the savu.
-
- You are not expected to understand this.
-
- The difficulty with V6 context switching was that the assembly language
- routines for restoring context changed the stack pointer but
- nevertheless returned to their calling routine, leaving it with an invalid
- stack frame (actually, the stack frame of the routine which did the
- original context save). This was changed in V7 to routines more like
- setjmp/longjmp. Even the authors of V6 had trouble with it, as
- exemplified by
-
- Finally, the most basic routines for multi-programming, those
- that pass control from one process to another, turned out
- (after causing months of nagging problems) to be incorrectly
- specified and actually unimplementable correctly on the
- Interdata, because they depended improperly on details of the
- register-saving mechanism of the calling sequence generated
- by the compiler. These primitives had to be redesigned; they
- are of special interest not only because of the problems they
- caused, but because they represent the only part of the
- system that had to be significantly changed, as distinct from
- expressed properly, to achieve portability.
-
- (from S. C. Johnson and D. M. Ritchie, `Portability of C Programs and the
- UNIX System', UNIX System Readings and Applications, Bell System Technical
- Journal special issue on UNIX, Vol 57, No 6, July-August, also available
- from Prentice-Hall). This article discusses the porting of Research Unix
- from the PDP-11 to the Interdata 8/32 during 1977, somewhere between V6
- and V7.
-
- --
- Luc Rooijakkers Internet: lwj@cs.kun.nl
- Faculty of Mathematics and Computer Science UUCP: uunet!cs.kun.nl!lwj
- University of Nijmegen, the Netherlands tel. +3180652271
-
-
- [ and from Dennis Ritchie himself ]
-
- From: Dennis Ritchie <dmr@alice.att.com>
- Date: 2 Apr 92 09:34:24 GMT
- Organization: AT&T Bell Laboratories, Murray Hill NJ
-
- People might be interested in more of the context
- of the famous `you are not expected to understand this' comment.
- (Tim Smith is wrong on the details.) It was made somewhat in
- the spirit of `this won't be on the exam,' not as a contemptuous
- challenge. Nevertheless, people did find it necessary
- to understand it, and the comment was too flippant.
-
- And of course, the real joke was that we did not understand
- what what was really happening either: the setu/retu mechanism
- of pre-Seventh Edition Unix was basically unworkable,
- because it depended inextricably on subroutine calling
- conventions of the PDP-11 implementation, and more fundamentally
- because it was not the right way to do things. Specifically,
- as the comment says, `savu' arranges that a routine
- that subsequently calls `retu' jumps out not to
- a location near the `savu' (as with setjmp/longjmp),
- but to the routine that called the routine with the `savu.'
-