University of Minnesota
Computer Science & Engineering
http://www.cs.umn.edu/

CSCI 4061: Introduction to Operating Systems

Overall Description

4061 is a required course for computer science and computer engineering majors. 4061 introduces operating systems principles through practical systems programming. Students will learn about fundamental operating systems principles: definition and comparison of operating systems, hardware services for system protection and memory management, the kernel and shell, file I/O and buffering, file system, process and thread control, signals, interprocess communication and synchronization. They will be able to write Unix system programs that utilize system services, and they will understand the benefits and complications of buffering, asynchronous events, and synchronized communicating processes or threads.

Catalog Description

Processes/threads, process coordination, interprocess communication, asynchronous events, memory management/file systems. Systems programming projects using operating system interfaces and program development tools.

Content

Week 1: BASIC CONCEPTS: Files, processes, memory. Kernel functions and user/supervisor mode execution. System calls. Interrupts and traps.
Week 2: SYSTEM TOOLS AND UTILITIES: Concept of shells; shell commands for process and file operations, shell command execution, environment variables, programming environments, libraries, and program development tools.
Weeks 3 - 4: PROCESSES AND THREADS: Concepts and structures in process managements. Process scheduling. Concept of threads --- user level and system level threads. Application programming primitives for process and thread management.
Weeks 5 - 6: CONCURRENT PROGRAMMING AND SYNCHRONIZATION: Concurrent processes. Race conditions. Mutual exclusion and critical section problems. Process synchronization mechanisms --- semaphores, locks, monitors. Deadlock problems and solutions.
Weeks 7 - 8: INTERPROCESS COMMUNICATION: Streams and pipes. Shared memory mechanism. Asynchronous communication. Signals. Operating system interfaces for application programming using pipes, shared memory, signal handling.
Weeks 9 - 10: MEMORY MANAGEMENT: Memory hierarchy. Basic concepts in virtual memory, demand paging and page replacement algorithms. System level functions for memory management by application programs. Dynamic memory management.
Weeks 11 - 12: FILE SYSTEMS AND I/O: Logical view of file systems, files, directories, and file metadata. Application level programming interfaces. File system organization and storage management techniques. Examples of file system designs from contemporary operating systems.

The remaining time can be spent in a deeper look at the above topics, or to cover other, operating systems-related topics.

Why This Class is Important and its Role in the Curriculum

Many upper level courses expect fundamental knowledge of operating systems concepts, and many programming assignments and projects require familiarity with systems programming. This course provides this knowledge and skill. More generally it exposes students to complex computing systems, and related concepts. For example, synchronization issues are complex and difficult for students to understand, but important in systems, networking, and languages. Students must learn to think non-deterministically to understand race conditions and synchronization operations.

In many ways this course serves as an advanced programming course; the programming projects require solid programming and debugging skills.

The systems programming skills taught in this course are also of value in the work world. Many students have commented that this was the most helpful course in their computing jobs.

Prerequisites and Rationale

CS 2021 (Machine Architecture and Organization) for CS students, or EE 2361 (Introduction to Microcontrollers) for Computer Engineering students, is the prerequisite for CSci 4061. Students need to understand basic hardware and assembly language programming concepts for this course. Students need to understand data representation and number systems to understand the difference between raw binary I/O and formatted I/O. They need to understand bit flags and bitwise operations to understand the arguments to many system calls. They need to understand subroutine calls and the hardware stack to understand the process memory organization. They need basic hardware concepts to understand I/O, interrupts, and virtual memory. And they need to understand assembly language programming to understand the test-and-set operation for synchronization.

Classes Having 4061 as a Prerequisite and Rationale

CS 4061 is a prerequisite for a number of courses, particularly those in the systems and networking areas. These include CSci 5013 (Operating Systems), CSci 5143 (Real-Time Systems), CSci 4211/5211 (Data Communications and Computer Networks), and CSci 5271 (Computer Security). These courses all require an understanding of operating systems basics. For example, for CSci 5103, students must understand operating systems services and the systems programmers' view of an operating system from the outside (from 4061) before they can understand operating systems design from the inside (in 5103). As a second example, the 4211/5211 networks course requires an understanding of interprocess communication, which is introduced in 4061.

Class Format

4 credits, 3 hours of lecture + 1 of lab per week.

Probable Text, If Any

Robbins and Robbins, “Unix Systems Programming,” 2nd edition, Prentice Hall, 2003 (required); Silberschatz, Galvin, and Gagne, “Operating Systems Concepts,” 7th edition, John Wiley and Sons, 2005 (recommended).

Outcomes

Upon successful completion of the course students should understand basic operating systems concepts and be able to write systems programs that use operating systems services.

Contact CS&E | CS&E Employment | Site Map
Contact: 4-192 Keller Hall, 200 Union St, Minneapolis, MN 55455     Phone: (612) 625-4002