CSE 303 Operating System Design (3)
Instructor: Daniel Lopresti
Current Catalog Description
Process and thread programming models, management, and scheduling. Resource sharing and deadlocks. Memory management, including virtual memory and page replacement strategies. I/O issues in the operating system. File system implementation. Multiprocessing. Computer security as it impacts the operating system. Prerequisites: ECE 201 and CSE 109.
Textbook
Andrew S. Tanenbaum, Modern Operating Systems, 2nd Ed., Prentice-Hall.
References
Course Goals
To develop an understanding of basic operating system concepts.
To become aware of resource management issues and how they are solved.
To gain experience with different models of computation and communication (processes, threads, RPC, multiprocessing) supported by modern operating systems.
Prerequisites by Topic
Systems programming in C and/or C++, including data types and data structures.
Computer architecture: instruction sets & processing, memory and I/O subsystems.
Major Topics Covered in the Course
System calls
Processes
Threads
Interprocess communication
Process scheduling
Deadlocks
Memory management
Paging and segmentation
I/O software and device drivers
File systems
Multiprocessor operating systems
Operating system security
Laboratory projects (specify number of weeks on each)
One-week programming assignments:
a. Processes vs. threads: creation and communication
b. Race conditions and mutual exclusion
Two-week programming assignments:
a. File system and directory structures in Unix
b. Programming the Beowulf multiprocessor using MPI
One-week simulator assignments:
a. Process scheduling
b. Memory management
Estimate CSAB Category Content
CORE ADVANCED
Data Structures 1
Computer Organization and Architecture 1
Algorithms Software Design 1
Concepts of Programming Languages
Oral and Written Communications
Every student is required to submit at least __0__ written reports (not including exams, tests, quizzes, or commented programs) of typically __n/a__ pages and to make __0__ oral presentations of typically __n/a__ minutes duration. Include only material that is graded for grammar, spelling, style, and so forth, as well as for technical content, completeness, and accuracy.
Social and Ethical Issues
Because operating systems typically run at the highest level of privilege, the students are made aware of the potential for disaster by poorly written code and the importance of responsible software engineering. This is tested throughout the course in homework assignments, quizzes, and exams. Four lectures at the end of the course are devoted to issues regarding computer security, attacks on computer systems by unethical individuals (crackers), and how to prevent such events from occurring. This material is tested during the final exam.
Theoretical Content
1. Algorithms for process scheduling and deadlock avoidance (4 lectures)
2. Algorithms for memory management (7 lectures)
3. Algorithms for I/O scheduling (1 lecture)
4. Algorithms for file system implementation (3 lectures).
5. Models for parallel computing (3 lectures)
6. Computer security, data encryption and user authentication (4 lectures)
Problem Analysis
The students are assigned a combination of written homeworks and programming projects. For the former, they must determine the nature of the question, the relationship to the material we have studied, and an appropriate technique for performing the requested computation or explaining in written terms the required answer. Each of the programming projects requires the student to break the problem into smaller pieces using top-down design. They must then code the required solution in either C or C++ under the Unix operating system, debug it, and test it using input we provide along with their own test cases. Several of the programming projects involve multiple communicating processes and/or threads; hence, the students must also learn how to analyze parallel programs and the special problems they induce.
Solution Design
The students engage in programming projects using either C or C++ under Unix. Their solutions must express in program code the basic operating system techniques they learn about during class. Typically, this will involve implementing data structures and algorithms we have discussed explicitly or that they are assumed to know from the course's prerequisites. To receive full credit, they must produce code that is well-structured, documented, and that works.