CS360 -- Systems Programming

Jian Huang --- Fall, 2013


  • General Information
  • Syllabus
  • Homeworks
  • Labs
  • Lecture Notes
  • The Lab Home Page (maintained by the TA's)


    Let's first start with an analogy. Making money is fun, but going to college and majoring in Economics or Accounting, etc., may not be. Similarly, while programming is fun, learning about computer science truly depends :). Just like how making money is different from economics, programming, as the general public sees it, is hardly related to computer science. In some regard, computer science is a discipline that develops fundamental principles and methodologies to construct basic computer tools. Application developers would then make use of those tools to solve whatever problems they are concerned with, just like one might use a "socket wrench" to fix a car. Of course, the tools we develop are a lot more sophisticated and powerful than a mere "socket wrench".

    In this course, CS360, we devote our attention to the principles and methologies of operating system, a computer tool that is indispensable to today's society. The name of this course, Systems Programming, tells the uniqueness of this special kind of programming. For details about such uniqueness, we have an entire semester to elaborate. At the same time, systems programming is also inherently related to the latest development of open source movement in the field. Here, I would like to emphasize that CS360 makes a great contribution towards student learning outcomes, as outlined by our department's mission statement. Throughout this course, you need to pay special attention to the following capabilities:

    The following are a few concrete 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 become good general-purpose C programmers

    This means that when you see a problem that needs to be coded, you can envision the overall structure of the solution, and then set about solving it in an ordered way, using the appropriate data structures where necessary.

    2. To become decent Unix hackers

    This means that you know how to make use of the many tools that Unix provides, be it commands, library calls or system calls. This also means that you understand the model of computation that Unix presents.

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

    If you finish this course with a decent grade (B or better), then my 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.