An Active Learning Laboratory Manual for Teaching a Contemporary Undergraduate Operating System Course

,


Summary
We present a laboratory manual for use in teaching an undergraduate course in operating systems. The manual contains a set of labs (i.e., active-learning exercises), which are categorized into modules, that can be completed individually or in a team. Instructors can make use of these labs as they see fit in their teaching activities. The plug-and-play nature of the labs within each module allows instructors the ability to craft a tailor-made operating systems course. The manual offers significant value especially since developing lab and project plans is quite time consuming in computer science education. Moreover, the open-source access to the LaTeX source code of the entire manual allows instructors to customize the labs to suit the needs of their students and program, contribute additional labs to the modules, and/or develop new modules. This paper provides an introduction to the laboratory manual. Through the brief exposition of its modules in this paper, we hope to inspire both adoption and adaptation of this laboratory manual by instructors of operating system courses.

Statement of Need
A course in operating systems (OS) plays a central role in the curriculum of undergraduate degree programs in computer science. Unfortunately, many OS courses are out-of-date and in need of time-consuming revision since innovations in course content and related pedagogy are typically focused, understandably enough, on the introductory computer science sequence. The OS laboratory manual discussed here resolves issues of misalignment found between existing OS courses and employee professional skills and knowledge requirements. Instructors can make use of the labs in the manual as they see fit in their teaching activities. The plug-and-play nature of the labs within each module allows instructors the ability to craft a tailor-made operating systems course. The manual offers significant value especially since developing lab and project plans is quite time consuming in computer science education. Thus, this laboratory manual fills a much-needed void in the operating systems education community.

Introduction
The laboratory manual constitutes a contemporary operating system curriculum that involves four progressive modules (and a setup module): The labs in these modules are active learning exercises that can be completed in a team within a learning environment (e.g., an OS studio) that can be reconfigured based upon the content and equipment needs of the module (e.g., Raspberry Pi or BeagleBone), thereby blending the boundaries of a lecture and laboratory.
To facilitate adoption of this laboratory manual, the preface contains a mapping from the chapters of a widely used (undergraduate) OS textbook (Silberschatz et al., 2018) (i.e., a traditional approach) to the labs in the manual. The open-source nature of the manual not only grants immediate access to the shared module content therein, but also enables instructors to adapt the labs to suit the needs of their students and program, contribute additional labs to the modules, and/or develop new modules.
This laboratory manual is, to the best of our knowledge, the first and only of its kind for a contemporary operating systems coursethat is, one that is aligned with the current landscape of computing practices and OS knowledge requirements companies have for their prospective employees.
Our use of this lab manual and the student data we have collected suggests this approach improves student engagement. This laboratory manual has the potential to be widely used both nationally and internationally. Promotion of this laboratory manual through avenues such as the Journal of Open Source Education will help attract attention to it. It may also inspire computer science faculty to realign their OS course content and develop similar approaches in their teaching activities and, thus, foster continued community engagement. In this context, its adoption has the potential to advance the ongoing development of innovative teaching practices as well as improve student retention.

Setup Module
The setup modules contains labs detailing how to setup the software and equipment used in the lab manual. These labs include a RaspberryPi setup lab, a VirtualMachine setup lab, and a secure copy lab (i.e., scp).

Module O: Fundamentals (Linux and C)
This preliminary module involves labs that help students acquire the knowledge of Linux and C programming requisite to working through the labs in Modules I-III.

Module I: Mobile Devices and Internet of Things
This module contains four Internet of Things labs: one involving camera sensors and three involving moisture sensors. This module also contains a project that entails developing a simulation of a variety of the job/process scheduling algorithms and semaphore-processing activities of a time-shared OS. A GUI has been overlayed as a front end to the simulation and can be used by students to explore the job/process scheduling algorithms as well as the semaphore processing activities of a preemptive OS. The simulation can also be used by instructors to demonstrate these algorithms and activities in class. The graphical front end of the simulator is available for use at https://cpudemo.azurewebsites.net/#/ and described in detail in (Buck & Perugini, 2019a, 2019c.

Module II: Concurrency and Synchronization
Module II involves a suite of labs that explore concurrency, threads, critical sections, race conditions, and the Communicating Sequential Processes (CSP) and Actor models of concurrency and synchronization. CSP is explored in Go and the Actor model is used in Elixir.

Module III: Cloud Computing and Big Data Processing
Module III involves a suite of labs that explore cloud computing and big data processing using Amazon Web Services (AWS).

Compiling the Entire Composite Manual
The laboratory manual is written in LaTeX and BibTeX and can be compiled with the standard packages that ship with a LaTeX installation (e.g., the The MacTeX-2021 Distribution available at https://www.tug.org/mactex/).
There is a Makefile in the repository for building the entire manual. A manual can be built using the following commands in sequence: make clean; make.

Compiling Individual Labs Separately
Each lab in the manual can also be compiled/built individually. Simply navigate to the directory of the lab you desire to build and enter pdflatex main. This will produce the file main.pdf, which will contain only the contains of the particular lab. For instance: $ pwd operating-systems-lab-manual $ cd module1mobile/IoTcamera/ $ pwd operating-systems-lab-manual/module1mobile/IoTcamera $ pdflatex main ... ...

... $ open main.pdf
The last three labs of Module I, which constitute the BigSenseWorkbook (version 2), involve the use of moisture sensors on a BeagleBone. Compiling these labs requires the installation of some extra LaTeX packages. In particular, these labs require the LaTeX mi nted package and the Python syntax highlighter Pygments available at https://pygments. org/docs/cmdline/ as well as the pygmentize script. Compiling these labs also requires passing the -shell-escape flag to pdflatex.

Adding New Labs to the Manual
Users can add new labs (and/or modules) to the laboratory manual. There is a template for creating a new lab in the directory ADDING_NEW_LABS. The process of getting started adding a new lab involves the following series of commands:

Larger Scope
This laboratory manual is part of a larger effort to foster innovation in the teaching of operating systems at the undergraduate level as part of a three-year NSF-funded IUSE (Improving Undergraduate STEM Education) project titled "Engaged Student Learning: Re-conceptualizing and Evaluating a Core Computer Science Course for Active Learning and STEM Student Success" . The project website is at https://sites.udayton. edu/operatingsystems/. Through the dissemination of this OS laboratory manual we intend to foster a community of practice among computer science faculty at multiple institutions who adopt or adapt the use of the manual, or elements thereof, for their own students and programs. A GitHub site for the community is available at https://saverioperugini. github.io/Teaching-Operating-Systems-Community-of-Practice/ and a GitHub repository for sharing OS learning materials (e.g., exercises and exams) is available at https:// github.com/saverioperugini/Teaching-Operating-Systems-Community-of-Practice. 1 We anticipate the evolution of the GitHub site into a socially-engaging hub for computer science educators, specifically tailored for OS course content and discourse, where teaching experiences and best practices can be shared.

Related Work
Perugini has presented work associated with this laboratory manual in a variety of venues: conference tutorials (Perugini & Wright, 2018, a demonstration (Buck & Perugini, 2019a, 2019c, and a birds-of-a-feather session (Perugini & Wright, 2019a).