CS360 -- Systems Programming

James S. Plank --- Spring, 2021


  • General Information
  • Sketchy Syllabus
  • Rough schedule of class
  • Labs
  • Lecture Notes
  • Tests
  • Piazza
  • Final Grade Information
  • Academic Success Center - Tutoring is available here (and I'm guessing they could use tutors, too!)


    The following are the goals that I have set for teaching this class -- they represent what I'd like you all to get out of the class. When the semester is over, go over this list, and see how well these goals were met. If you feel like it, send me email with comments -- it's more useful after the semester than in the middle of it, I think.

    1. To understand the basics of an operating system from the user perspective.

    Classes like COSC 361 teach you operating system design, and sometimes implementation. That is very different from learning the constructs that the operating system gives you to write system programs, and how to effectively use the constructs. When you master the material of this class, you position yourself to benefit much more from an operating system class like COSC 361.

    2. To program in C well enough to understand why you're programming in C.

    Every year, computer languages and systems are developed that "ease" the task of programming to the point where we have NCDP's (No-code development platforms -- see https://en.wikipedia.org/wiki/No-code_development_platform). It is my view that a computer scientist or computer engineer needs to understand the basic components of his or her computer such as memory, files, processes, the call stack, etc. You explore the components best in a language like C, where the world is not abstracted away from you in high-level constructs. So, C it is, and you should enjoy it for a semester. Bonus: when you decide you want to build that automated cat door or christmas lighting display, you'll be happy that Androids are programmed in C.

    3. To become well-versed in the language of systems programming.

    If you master this course, then one goal is to ensure that you can talk systems. This means that when you go out to the job market or to graduate school, when anyone wants to talk systems with you, you not only understand what they are saying, but can communicate back with them in a common language. This also means that if you have to read research papers in systems, you can do so without a huge amount of difficulty.

    4. To understand basic uniprocessor organization.

    This means to know pretty much what goes on from the time that a computer gets turned on, to writing and executing programs in a multi-user enviroment.