
L Peter Deutsch 
426
scheduler. It had virtual memory. It had a file system. In fact, it had several 
file systems. 
There, there were more complex questions of data-structure design. The 
one that I remember is there was an active process table. And there was a 
question as to how to design that and how the operating system should 
decide when a process was runnable or not—that kind of thing. There were 
structures for keeping track of the virtual memory system. But some issues 
of interface started to emerge. Not within the operating system itself, 
because the operating system was so small that the kernel was designed 
essentially as a single piece, as a monolith. 
But there were two important areas where issues of software interface 
started to emerge. One of them was simply the interface between user 
programs and the kernel. What should the system calls be? How should the 
parameters be laid out? I know that in the first few versions of the 940 TSS, 
the basic operations for reading and writing files were the equivalent of the 
Unix
read and write calls, where you basically gave a base address and a 
count. Well, that was all very well and good, but a lot of the time that 
wasn’t what you wanted. You basically wanted a stream interface. And in 
those days, we didn’t have the concept that you could take an operating-
system facility and then wrap user-level code around it to give you some 
nicer interface in the way 
getc and putc get built on top of read and write.
So what we actually did was in later versions of the operating system, we 
added operating-system calls that were the equivalent of 
getc and putc.
The other place where issues of interface started to show up were—again, 
based on the MULTICS mode—from the beginning we had a strong 
distinction between the kernel and what today we would call the shell. This 
was early enough in the development of operating systems that we didn’t 
realize that you could, in fact, build a shell with essentially no special 
privileges. The shell was a user-mode program, but it had a lot of special 
privileges. But there were some issues about what facilities the kernel had 
to give the shell—what things the shell should be able to do directly and 
what things it should have to make kernel calls for. 
We saw interface-design choices just emerging from the task. That was the 
point in my career at which I dimly started to become aware that interfaces