The course aims to teach the main concepts and techniques involved in the design of modern operating systems. Since these concepts and techniques pervade the design of all nontrivial computer systems, the course is also meant to introduce the student to the main concepts and techniques involved in building nontrivial computing systems.
The topics covered include:
- multiple-program systems (processes and inter-process communication);
- multi-threaded programming;
- memory allocation (address translation, segmentation, paging);
- resource allocation and scheduling;
- file systems and persistent storage;
- protection and security.
The above topics are going to be partially covered in the lectures; however, to get a full understanding of the topics, you will have to do the readings. At the very least, this means thorough reading of the prescribed textbook (see below): you do have to have permanent access to a copy of the prescribed textbook and keep up with all the readings; the book can be purchased at the campus bookshop (Van Schaik at the Matrix). You might also want to enquire with the students who did the course last year whether they would like to sell you the copy they were using for the course.
Since the development of computer systems is an integral part of learning about them, the course has a substantial practical component in the form of homework assignments. Homework assignments are meant to give you an opportunity to write systems-level software that relies on the functionality of an operating system. All the HW assignments will have to be done in C. You might get some help with C during the tutorials and labs, but it is largely your responsibility to learn those aspect of C that you are going to need for completing your work. Some resources that you might find helpful for that are listed here.
Prior knowledge assumed
We assume that the student has the ability to write programs in C++ and Java, knows the most important algorithms and data structures, and has the basic knowledge of computer architecture. This knowledge should have been obtained in COMS1018, COMS1017, COMS1015, and COMS2013. For some topics, it will be helpful for the student to be familiar with series and products, logarithms, advanced algebra, some calculus, and basic probability. We assume that you either know the material that is supposed to be covered in the above-mentioned courses, or that you are willing to learn the material as necessary. We will not spend time in lectures covering any of this material.
Presentation of the courseWe will use the board to present the course material during lectures and tutorials -- no slides will be used. The summary of the main points coved in lectures will appear on the course's GitHub page, with links provided from the course's main page, which will also list readings for each topic. As no lecture slides will be used, it is very important for you to attend the lectures and take your own notes.
dmitry.shkatov -AT- wits.ac.za
Office: MSB 105
Office hours: TBD
Third teaching blockWednesdays, 10:15-12:00, SHB3
Fourth teaching blockTuesdays, 8:00-9:45, SHB3
For the schedule of lab sessions and tutorials will be announced at the first lecture of the course.
AttendanceThe attendance of lectures, tutorials, and lab sessions is compulsory. It is important that you attend tutorials and labs---they will provide essential specifics on hands-on aspects of the course, including tools and techniques.
Grades will be determined, in accordance with the School policy, as follows:
- Final exam -- 60%
- Midterm exam -- 20%
- Homeworks -- 20%
The exam will be closed book, and will cover material from lectures, tutorials, and the readings.
Thomas Anderson and Michael Dahlin. Operating Systems: Principles and Practice (2nd Edition) (A&D) (available from Van Schaik at Matrix)
Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau. Operating systems: Three Easy Pieces. (freely avalable here) (A&A)
You might want to take a look at some parts of these if you want to see how the concepts we're going to be studying are implemented in Linux.
Last modified: Sun Jul 10 16:38:00 SAST 2016