I am John or JJ Foley. My office and hours are kept up to date on my main website: jjfoley.me.
Office hours for the Spring will include a time selected by poll in Operating Systems. I am also teaching CSC212 in the Spring, but since that class has TA support I will try to prioritize questions from students in Operating Systems.
An introduction to the functions of an operating system and their underlying implementation. Topics include file systems, CPU and memory management, concurrent communicating processes, deadlock, and access and protection issues. Programming projects will implement and explore algorithms related to several of these topics. Prerequisite: 231.
CSC262 is a laboratory course. In addition to lecture, we have 2 hours of lab time together each week. I will use lab time to introduce new projects and to jump start our understanding of the starter code. To encourage attendance and participation there are bonus portions of assignments only available during Lab.
This syllabus is incomplete and will be finalized before the first day of class. I encourage students with further questions to contact me directly. I will plan to be as consistent as possible.
We will refer to a variety of sources throughout the class. However, I will try to prioritize free and open resources where possible. In our discussion of OS Principles, it will be helpful to have a resource for background understanding the *nix command line, I suggest the free and open TLCL. The rest of our topics will be covered in the open Operating Systems: Three Easy Pieces.
In this course, we will have assignments due roughly every two weeks. Our first assignment will be completed in Java (it will be a bounded circular buffer). We will then focus on C as a language that will help us better understand how to communicate and use OS-level constructs. Toward the end of the course we will see a little bit of languages inspired by C, including C++ and Rust.
The principles of operating systems are shared with many modern systems, such as web browsers (IE, Chrome, Safari, Firefox) and managed programming languages like Python or Java. Our final projects will include study of these large modern systems from an OS perspective and some implementation work.