Posted on January 15, 2017 by Gabriel Parmer
Location: Rome 204
Office Hours: ???
This course covers a subset of the fundamental concepts of operating systems, focusing on resource management and abstraction. This includes OS structure, processes and thread management, communication with peripherals (I/O), synchronization, deadlocks, memory management, Virtual Machines, cloud infrastructures, and abstractions for cloud computation.
Please note that the workload for this class is heavy and programming intensive. This is not a good class to take if you want an easy class to fill in three credits. This is a good class to take if you want to deeply understand how systems work.
Objectives - In completing this class, students will…
Structure - This class has lectures broken into two main activities: lectures and code discussion.
Prerequisites:
Computer Architecture
Assignments for this class will be done in C, and will require kernel-level programming. Though we do not assume that you have kernel experience, if you aren’t somewhat comfortable with C, you will have a very difficult time. Thus, a familiarity with C or a willingness to quickly learn and practice it is required.
If you are not comfortable with C, at least go through Essential C and the exercises in the Course Material Section.
You very much need to comfortable coding quite a bit, and comfortable doing it in C. You will have very little support for booting you up in C, so if you aren’t comfortable with it, you might be putting yourself into a bad position.
Responsibilities - Students must
Technology - Students must
This class will use three key techologies:
None of these technologies have extensive documentation. General Linux programming can be found online, while xv6 and Composite are more limited in documentation. There is no book for the class, so attendance and understanding in class is essential.
You can fork the xv6 source on github. When you do, test that you can run it with make, and make qemu.
In the end, you have to get comfortable walking through the code. Using a code indexing system will make this easier. ggtags for emacs does great, but there are corresponding technologies for nearly all editors.
ppos
branch).If you’re having trouble with C, here is a list of references:
cdecl
command, or, if it isn’t installed, you can use the cdecl webpage.It is your responsibility to get up to speed in C, so please use these resources.
Once you are more advanced in C, it will be useful to read the style guide for Composite, our research OS here at GWU.
Please see piazza for these details.
There is no credit for late submissions. You cannot procrastinate in this class.
Just as you can do a google search for code online, it is trivial for us to do the same. We have caught numerous people cheating in the past in this way. If you feel pressured about an assignment, please come see me instead of cheating.
You are not allowed to collaborate on the homeworks and projects with anyone outside of your team. Teams are not allowed to collaborate. You should never see another team’s code outside of the class-sanctioned code-reviews which will always be after the deadline. The group projects require collaboration amidst each group, but no collaboration between teams is permitted.
Please refer to the academic integrity policy linked from the course web page. This policy will be strictly enforced. If you’re having significant trouble with an assignment, please contact me. If you are looking at code from another student, or from an outside source that is not prescribed by the course, or other students are looking at your code, you are probably not adhering to the academic honesty code.
Academic Integrity Policy Credit: I’d like to thank Prof. Narahari for the first versions of this academic honesty policy.