Meanwhile, at one of our faculty lunches, Garth Gibson described the challenges he had in his operating systems course with the students’ lack of understanding of how programs are executed. He would say “To do a context switch, the OS needs to push the values of the registers onto the stack,” to which the students responded “Registers? Stack? What are those?” I told Garth that the students learned all that in my architecture course, but we realized that my course was not a prerequisite for operating systems, and it wouldn’t really work to make it so, in terms of student schedules.
So, Dave O’Hallaron (who had cotaught the computer architecture course with me) and I started thinking about a new course that would
- Provide a programer’s perspective, rather than a computer architect’s perspective on computers systems, and
- would come early enough in the curriculum that it could then feed into our systems courses, including OS.
We also decided to introduce the basics of operating systems and networking, again from a programmer’s perspective. These include the ideas of processes and the Unix API for managing them, along with the basics of TCP/IP and the sockets interface. This material would help students be better programmers and also prepare them for our OS and networking courses, where they actually implement these aspects of computer systems.We decided to simply call the course Introduction to Computer Systems.