Learning Objectives¶
Virtualization¶
Processes¶
CPU Scheduling¶
Memory Management¶
Paging¶
Swapping¶
Concurrency¶
Threads¶
Locks¶
Semaphores¶
Persistence¶
Input/Output Devices¶
File Systems¶
Network File Systems¶
Security¶
Authentication¶
Authorization¶
Access Control¶
Cryptography¶
Advanced Programming¶
A person who is learning the fundamentals of operating systems should demonstrate mastery of the following programming skills in all of the necessary programming languages:
Programming¶
- Write short programs up to five hundred lines that have the following characteristics for the chosen programming language:
- Has function and variable names that adhere to an industry-standard coding style for the chosen programming language.
- All program components have descriptive comments that adhere to an industry-standard coding style.
- Features a source code format that adheres to an industry-standard coding style for the chosen language.
- Passes an automated test suite, written with an industry-standard framework for the chosen language, showing that it correctly implements the specification for the function or component.
- Performs the specified operation in an efficient fashion, as determined through experiments that evaluate the components's performance in minutes, seconds, or milliseconds.
- Features functions that correctly use the basic building blocks of the chosen programming language in a way that passes the function's test suite, works efficiently, and conveys the function's intended purpose.
- Correctly performs file and console input and output, ensuring that all input and output is displayed and stored correctly, is not corrupted, and is processed efficiently.
- Correctly simulates aspects of an operating system (e.g., process scheduling) through the use of a program.
Programming Tools¶
- Use a Docker and/or operating system-based programming environment that supports a recent version of the C, Go, and Python programming languages to complete these tasks while implementing a program of up to five hundred lines of code:
- Install, upgrade, and use a recent version of the Python programming language environment to create, run, and debug a Python program with a terminal window, a text editor, and the Poetry package manager.
- Install, upgrade, and use a recent version of the C programming language toolchain to create, run, test, and debug a C program through a terminal window and/or a text editor.
- Install, upgrade, and use a recent version of the Go programming language environment to create, run, test, debug, and format a Go program through a terminal window and/or a text editor.
- Leveraging plugins for workflow enhancement, use a text editor like VS Code to implement, test, debug, document, and manage the source code of a program in the C, Go, or Python programming languages.
Version Control¶
- Use the GitHub platform and the Git version control system in the following fashion:
- Using SSH keys, clone a GitHub repository without error using either a command in a terminal window or an extension for Git integration in a text editor like VS Code.
- Write short and descriptive commit messages that use the Conventional Commits standard explain the specific way in which a commit changes the source code and documentation in the GitHub repository.
- Navigate reports produced by GitHub Actions so as to determine which aspects of a GitHub repository do and do not adhere to a project's specification, iteratively fixing broken components until the project works.
- In either a team-based on individual context, use the GitHub Flow model to implement specific features in a branch of a GitHub repository and then merge that branch to the main one only after all the checks run by GitHub Actions pass as required and code reviews confirm the code's correctness. When modifying the source code of the OS-Sketch web site, use a preview build created by Netlify to survey the site's content and layout.
- Create and discuss programming and technical writing issues with the GitHub Issue Tracker and the GitHub Discussion Forum, furnishing descriptive titles and problem descriptions that adhere to industry best practices and project templates.
- Submit completed projects that pass all of the automated instructor-provided and industry-standard checks, as evidenced through the report of a passing build run in GitHub Actions.
Effective Learning¶
A person learning about operating systems will demonstrate mastery of the following technology-mediated learning skills:
-
Follow a systematic process when using resources to implement C, Go, and Python programs:
- After detecting an error in a program through the use of either automated or manual debugging, develop a satisfactory understanding of the problem's likely root cause and then search sites like Stack Overflow for potential solutions.
- After evaluating suggested solutions to a programming problem that originate from sites like Stack Overflow, develop a way to fix an error in a program, try that approach, and then incrementally improve it.
- Independently develop solutions to programming problems even if the specifical technical challenge that you face was not previously covered in a course session or as part of your prior review of technical content.
-
Use Discord to effectively communicate about technology in the following fashion:
- In the correct public channel, post a question that includes source code segments, screenshots, and a description of the steps taken in an attempt to document and then ultimately solve a problem.
- Answer questions that were posted in a public channel, responding with source code segments, screenshots, and links to external references, pointing the person who asked the question in the right direction without solving the problem for them and limiting their opportunity to learn more about the topic in question.
- By sharing the acquired knowledge or skill, how you can be contacted, and how you can help, offer to help others who may need to learn technical knowledge and skills in the field of operating systems that a learner has already mastered.
Improving Objectives¶
As Robert Talbert explains, a learning objective is clear when it is "clear from the students' perspective" and measurable when there is "some way to know whether the objective has been met" or "how far away the learner is from meeting it".1 Do you see a way in which we can improve the learning objectives for the OS-Sketch site? If you do, then please participate in the OS Sketch community by sharing your ideas for improving them!
-
See Robert Talbert's article entitled How to Write Learning Objectives for more details about how to design learning objectives for an academic course. From your perspective what does it mean to write learning objectives that are both clear and measurable for an advanced course on the topic of operating systems? ↩