Time: 3:00pm - 3:50pm
Place: OH 107
This is an introductory course in the design of operating systems. It covers principles, design decisions, design techniques, policies, and mechanisms. The course focuses on the design of general-purpose multiprogramming systems and covers processes, resource allocation, concurrency, memory management, time management, synchronization, mutual exclusion and possibly file systems. The goals are 1) to acquaint students with the components of a structured operating system, 2) to show students abstractions underlying design choices, tradeoffs, and their consequences, and 3) to give students "hands on" experience with operating systems and related applications.
Good knowledge of C. Working knowledge of common data structures such as stacks, queues, and linked lists. An interest in learning about operating systems. Recommended background CS courses are: CS2011 and CS2005.
Final grades will be computed as follows:
Grading policy for each project and homework will be provided at the time of the assignment. In general, each assignment will have a basic objective for the majority of the assignment points. There may be an extended objective for demonstrating additional work and understanding.
Final grades will reflect the extent to which you have demonstrated understanding of the material, and completed the assigned projects. The base level grade will be a "B" which indicates that the basic objectives on assignments and exams have been met. A grade of "A" will indicate significant achievement beyond the basic objectives and a grade of "C" will indicate not all basic objectives were met, but work was satisfactory for credit. No incomplete grades will be assigned unless there exist exceptional, extenuating circumstances. Similarly, no makeup exams will be given unless there exist exceptional, extenuating circumstances.
There will be 4 programming assignments with the first one or two of these assignments also serving as an introduction to writing programs in the Linux evnironment. The intent is to familiarize the student with Linux, its editor, debuggers, etc. C and Linux will NOT be taught as part of this course, but any required Linux-specific help will be provided for the projects. System calls and other aspects of Unix will be introduced as the course progresses and programming projects are assigned.
There will be 3-4 short homework assignments for which you must provide written answers. They are not a large portion of your grade for this class, but they do help be sure you understand some of the fundamental operating system concepts that you cannot learn through just programming. In particulary, use of the homeworks is intended to provide preparation for the exams.
There will be two in-class exams (including a final exam during the last week). There is a very remote possibility of a pop quiz for which no advance notice will be provided. Exams will be closed book and closed notes, with any exceptions noted at the time of the exam. The majority of each exam will cover basic ideas and objectives of the class with a few questions testing additional understanding and insight.
Late programs and homeworks will be be penalized 10% of total assignment value per day (with the weekend counting as one day) or partial day, and no assignments will be accepted after seven days beyond the due date. All programs and written homeworks are due at the start of class on the due date. Homeworks and programs turned in after the start of class will be counted late. Projects will be submitted as directed in class. Exceptions to these rules can be made only beforehand.
Cheating ... don't do it. Cheating, either by taking credit for work you did not do or getting unauthorized help on homework or exams, is a serious offense. Punishment is in an automatic NR for the course. Note, discussion among students and even sanctioned group work is encouraged, but blatant copying of homework or code is not allowed. When in doubt, ask!