CSE 30341-01, Spring 2020
Operating Systems Principles
University of Notre Dame
Prof. Douglas Thain (dthain@nd.edu)
A good understanding of OS internals offers several benefits, whether you intend to work in computer hardware or computer software. First, by understanding how an OS works, you will be able to write better software applications by making efficient use of OS abstractions such as filesystems and memory allocators. Second, the traditional problems that occur in operating systems (like scheduling, synchronization, and resource management) also occur in all sorts of other systems, ranging from small embedded computers to large scale cloud computing systems. The techniques that you learn here will have applications in any complex computer system.
The concepts presented in class will be explored through a series of six intensive programming assignments. The assignments will make use of the C programming language, which the universal language for implementing and accessing operating systems at the lowest level. The projects will give students ample practice in manipulating pointers, managing memory, invoking system services, and dealing with error conditions. Although we will offer some technical guidance on these matters, students should expect to spend significant time debugging, consulting reference materials, and revising the projects until they work properly.
The goals for each student in this course are:
The course materials will test each student's achievement of these goals at several levels. For each topic in the course, students must be able to:
Sakai will be used only to record and distribute grades:
http://sakai.nd.edu
Piazza will be used for general Q&A about assignments. You are welcome to post or answer questions at any time; the instructors will generally answer questions on weekday afternoons: https://piazza.com/class/k55khced8f06f5
Your notes can be organized in whatever way is appropriate to that chapter and is useful for you. Good things to include may be an outline of the chapter, definition of key terms, a sketch of the systems or data structures being discussed, that sort of thing.
Along with your notes, you should submit one thoughtful question you would like to discuss that week. I will try to answer a few highlighted questions each week, and steer the lecture to address them.
Grading on notes will be very simple: either one, one-half, or zero points. There will be twelve opportunities to earn a total of ten points, so you may miss up to two without penalty.
Late assignments receive no credit. You are free to turn in programming assignments multiple times before the deadline expires. It would be a good habit to turn in an incomplete but working assignment on a daily basis. Thus, there is no excuse for failing to turn in an assignment: everyone should turn in something long before the deadline.
Exceptions will only be made for serious circumstances beyond your control (e.g. major illness) or participation in an official University activity. In either case, please confer with the instructor as soon as you are able.
If you believe an error has been made in grading an item, please bring it to the attention of the TA who graded it within seven days of receiving it. (The TA who graded it knows the details best, and so can give you the best explanation.) Factual and clerical errors will of course be cheerfully corrected. If you are unsatisfied with the TA's explanation, you may appeal to the instructor. After seven days, graded items are final and will not be revisited.
As a member of the Notre Dame community, I acknowledge that it is my responsibility to learn and abide by principles of intellectual honesty and academic integrity, and therefore I will not participate in or tolerate academic dishonesty.The purpose of the homeworks and assignments in this course is for each student to gain the discipline and skills in design, programming, and analysis, so that they will be able to work independently in a professional setting.
To that end, all exams, homeworks, and programming assignments are to be completed individually. Each student must write their own code from scratch with their own hands based on their own understanding of the course material.
You may consult with other students and outside resources in order to better understand concepts and techniques, or to debug localized problems. You may not copy code from another student or resource, excepting any starter code provided by the instructor.