From mboxrd@z Thu Jan 1 00:00:00 1970 From: clemc at ccc.com (Clem Cole) Date: Tue, 10 Mar 2020 14:31:29 -0400 Subject: [COFF] Fwd: [ih] NCP and TCP implementations In-Reply-To: References: Message-ID: s/Leah/Lead/ <-- finger fumble/ROM clash (my daughters first name) On Tue, Mar 10, 2020 at 2:30 PM Clem Cole wrote: > > On Tue, Mar 10, 2020 at 2:23 PM Warner Losh wrote: > >> >>> In addition to the Berkeley BSD work, I remember Gurwitz, Wingfield, >> Nemeth, and others working on TCP implementation for the PDP-11/70 and Vax. >> >> This is new. I'd like more info The name Nemeth is interesting. Is that >> Evi? And does that body of code still exist? >> > Alan Nemeth -- former BBN Fellow, later DEC CCE. Leah Architect of the > C30/C70 and the Bufferfly. > This is the 'official' IP/TCP implementation for UNIX. Joy would start > with it. A version of the code is in Warren's archives and on Kirk's > larger disk. > > >> >> >>> I think I speak authoritatively here, since I wrote and debugged that >> first Unix TCP code. I still have an old, yellowing listing of that first >> Unix TCP. >> >> I wonder if you could write him and see if this listing can be scanned / >> preserved... >> > I have this AM in fact before I sent the message to you -- no response so > far. > >> >> Warner >> >> On Tue, Mar 10, 2020 at 11:52 AM Clem Cole wrote: >> >>> >>> Given the recent discussion of pipes and networking ... I'm passing >>> this along for those that might not have seen it. >>> >>> ---------- Forwarded message --------- >>> From: Jack Haverty via Internet-history >>> Date: Tue, Mar 10, 2020 at 1:30 PM >>> Subject: Re: [ih] NCP and TCP implementations >>> To: *Internet-History* >>> >>> >>> The first TCP implementation for Unix was done in PDP-11 assembly >>> language, running on a PDP-11/40 (with way too little memory or address >>> space). It was built using code fragments excerpted from the LSI-11 >>> TCP implementation provided by Jim Mathis, which ran under SRI's >>> home-built OS. Jim's TCP was all written in PDP-11 assembler. The code >>> was cross-compiled (assembled) on a PDP-10 Tenex system, and downloaded >>> over a TTY line to the PDP-11/40. That was much easier and faster than >>> doing all the implementation work on the PDP-11. >>> >>> The code architecture involved putting TCP itself at the user level, >>> communicating with its "customers" using Unix InterProcess >>> Communications facilities (Rand "Ports"). It would have been >>> preferable to implement TCP within the Unix kernel, but there was simply >>> not enough room due to the limited address space available on the 11/40 >>> model. Later implementations of TCP, on larger machines with twice the >>> address space, were done in the kernel. In addition to the Berkeley BSD >>> work, I remember Gurwitz, Wingfield, Nemeth, and others working on TCP >>> implementation for the PDP-11/70 and Vax. >>> >>> The initial Unix TCP implementation was for TCP version 2 (2.5 IIRC), as >>> was Jim's LSI-11 code. This 2.5 implementation was one of the players >>> in the first "TCP Bakeoff" organized by Jon Postel and carried out on a >>> weekend at ISI before the quarterly Internet meeting. The PDP-11/40 TCP >>> was modified extensively over the next year or so as TCP advanced >>> through 2.5, 2.5+, 3, and eventually stabilized at TCP4 (which it seems >>> we still have today, 40+ years later!) >>> >>> The Unix TCP implementation required a small addition to the Unix kernel >>> code, to add the "await" and "capac" system calls. Those calls were >>> necessary to enable the implementation of user-level code where the >>> traditional Unix "pipeline" model of programming >>> (input->process->process...->output) was inadequate for use in >>> multi-computer programming (such as FTP, Telnet, etc., - anywhere where >>> more than one computer was involved). >>> >>> The code to add those new system calls was written in C, as was almost >>> all of the Unix OS itself. The new system calls added the functionality >>> of "non-blocking I/O" which did not previously exist. It involved very >>> few lines of code, since there wasn't room for very many more >>> instructions, and even so it required finding more space by shortening >>> many of the kernel error messages to save a few bytes here and there. >>> >>> Randy Rettberg and I did that work, struggling to understand how Unix >>> kernel internals worked, since neither of us had ever worked with Unix >>> before even as a user. We did not try to "get it right" by making >>> significant changes to the basic Unix architecture. That came later >>> with the Berkeley and Gurwitz efforts. The PDP-11/40 was simply too >>> constrained to support such changes, and our mission was to get TCP >>> support on the machine, rather than develop the OS. >>> >>> I think I speak authoritatively here, since I wrote and debugged that >>> first Unix TCP code. I still have an old, yellowing listing of that >>> first Unix TCP. >>> >>> FWIW, if there's interest in why certain languages were chosen, there's >>> a very simple explanation of why the Unix implementation was done in >>> assembler rather than C, the native language of Unix. First, Jim >>> Mathis' code was in assembler, so it was easy to extract large chunks >>> and paste them into the Unix assembler implementation. Second, and >>> probably most important, was that I was very accustomed to writing >>> assembler code and working at the processor instruction level. But I >>> barely knew C existed, and was certainly not proficient in it, and we >>> needed the TCP working fast for use in other projects. The choice was >>> very pragmatic, not based at all on technical issues of languages or >>> superiority of any architecture. >>> >>> /Jack Haverty >>> >>> >>> On 3/9/20 11:14 PM, vinton cerf via Internet-history wrote: >>> > Steve Kirsch asks in what languages NCP and TCP were written. >>> > >>> > The Stanford first TCP implementation was done in BCPL by Richard Karp. >>> > Another version was written for PDP-11/23 by Jim Mathis but not clear >>> in >>> > what language. Tenex was probably done in C at BBN. Was 360 done in >>> PL/1?? >>> > Dave Clark did one for IBM PC (assembly language/??) >>> > >>> > Other recollections much appreciated. >>> > >>> > vint >>> -- >>> Internet-history mailing list >>> Internet-history at elists.isoc.org >>> https://elists.isoc.org/mailman/listinfo/internet-history >>> _______________________________________________ >>> COFF mailing list >>> COFF at minnie.tuhs.org >>> https://minnie.tuhs.org/cgi-bin/mailman/listinfo/coff >>> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: