{'fraction_non_alphanumeric': 0.015822784810126583, 'fraction_numerical': 0.0, 'mean_word_length': 5.693121693121693, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
A State Machine Language for the Undergraduate Operating Systems Course

Assigning projects in an undergraduate operating systems course that includes a mix of software development students and information technology students, many without a background in assembly language and machine architecture, can be challenging. Assigning low level simulation code or operating system modules can lead to frustration and failure for some students. Also, that approach takes too long to explore more than a few basic algorithms. Assigning paper projects may be uninteresting and can lead to rote memorization. This paper explores the approach of requiring students to write state machines, using a notation based on State Diagrams of the Unified Modeling Language, that implement the core logic of various CPU schedulers, page replacement algorithms, disk scheduling algorithms, and other operating system mechanisms. This approach concentrates student efforts more on analysis and less on low level coding. The paper explores the Python-based compiler technology and runtime system used to implement the state machine simulation framework, along with several example assignments, auxiliary tools for visualization, deficiencies in the current framework, and their remedies.