Here are the COEN 4820 course goals and objectives as prepared for ABET accreditation:
They apply equally well for COSC 3250.
Course goals: To provide students with an understanding of the standard problems and their
solutions in the area of operating systems (including process management, storage
management, I/O systems design, distributed systems, protection and security)
and with practical experience with one or more modern operating systems (usually
some versions of Unix and Windows).
Course Objectives: By the end of this course, you should be able to perform the following tasks:
- Summarize the principles underlying the design and construction of
a typical operating system, giving particular recognition to the wider applicability
of the ideas and the influences from such developments as high-level languages,
networking, multimedia, and security concerns.
- Describe the basic structure of an operating system and its components.
- Describe the concept of a process and how processes deal with scheduling,
cooperation, and communication with other processes.
- Write a program spawning multiple processes and communicate between them using shared memory
and using messages.
- List the most important CPU scheduling algorithms and be able
to compare them.
- Explain the classical problems in process synchronization and know
several different ways to solve such problems, including semaphores,
critical regions, and monitors.
- Write a program using synchronization to protect critical regions in multiple processes.
- Explain how to characterize and cope
with processor deadlock, including prevention, avoidance, detection,
- Describe several different schemes for managing main memory, including
swapping, virtual memory, paging, and segmentation.
- Write a program using operating system services to access, organize, and protect files.
- Compare and contrast several schemes for file allocation and file management.
- Describe the characteristics of an I/O system and explain how the user,
the operating system, and the hardware interact with I/O.
- Describe how disks are structured and how their space is managed
by the operating system.
- Describe several different network topologies and network types and the processes involved in designing a network.
- Describe the challenges of designing a distributed operating system and a distributed file system and give several
- Compare and contrast protection and security in operating systems and distributed web
applications and describe how to implement these mechanisms in an operating system.
- Introduction to event-driven programming.
- Using APIs: API programming; class browsers and related tools; programming by example; debugging in
the API environment.
- Overview of operating systems: Role and purpose of the
operating system; history of operating system development; functionality
of a typical operating system.
- Operating system principles: Structuring methods; abstractions,
processes, and resources; concepts of application program interfaces; device
organization; interrupts; concepts of user/system state and protection.
- Concurrency: Synchronization principles; the "mutual exclusion" problem
and some solutions; deadlock avoidance; producer-consumer problems
- Scheduling and dispatch: Preemptive and non-preemptive
scheduling; schedulers and policies; processes and threads; deadlines
and real-time issues.
- Memory management: Review of physical memory and memory
management hardware; overlays, swapping, and partitions; paging and segmentation;
placement and replacement policies; working sets and thrashing; caching.
- Distributed algorithms: Consensus and election; fault tolerance.
- Net-centric computing: Background and history of networking and the Internet; network architectures;
the range of specializations within net-centric computing.
- Networking and communications: Network architectures;
issues associated with distributed computing; simple network protocols;
APIs for network operations.
- Web technologies; characteristics of web servers;
nature of the client-server relationship; web protocols; support tools
for web site creation and web management.
- Network security: Fundamentals of cryptography;
secret-key algorithms; public-key algorithms; authentication protocols; digital signatures; examples.
The issue of motivation is paramount in the design of the course. The area
of operating systems is often regarded as difficult for both students and faculty,
but nonetheless contains many ideas of relevance to all computer scientists.
Faculty must ask themselves how they can make operating systems relevant to
undergraduates. This consideration must drive the choice of approach to learning
and teaching. To this end, students must see these issues as related to the
systems that they use. As an example, students might be asked to consider the
impact on the operating system of such developments as networking, multimedia,
security, and hand-held devices. Similarly, one could also ask about the impact
of other developments, such as the following:
- Playing music on a CD at the same time as using the computer
- Downloading TV pictures onto a window
- Docking systems or devices such as digital cameras and hand-held computers
- Client-server architectures
In pursuing any course on operating systems, students need to be made aware
of the wider relevance of many of the ideas. It is therefore useful to highlight
the following connections:
- The cache idea, while relevant at the hardware level, shows up again in the context of the web and downloading material from web sites.
- The concepts that arise in the discussion of virtual memory come up again in the development of virtual environments.
- The material on concurrency is relevant in the wider context of concurrent and parallel programming.
- The material on resource allocation and scheduling features as a major component of operations research.
- Much of the course material is relevant to the design and construction of real-time and dependable systems.
Students are likely to take a greater interest in operating systems if they
see themselves as working in the context of a real system rather than some
highly simplified and more abstract simulation. In this regard, the open-source
movement has made an important contribution to pedagogy in the operating systems
area, because the source code for several well-known operating systems is now
available free of charge. These public-domain resources make it easier to illustrate
aspects of operating systems and can often provide useful examples of how different
systems implement particular features. It is worth observing that many of the
students are likely to be fired up with the idea of installing Linux (for example)
on their own machines.