CS226{C,S}. Operating Systems and Networking
Introduces the fundamentals of operating systems together with the basics of networking and communications.
Prerequisites: introduction to computer science (any implementation of CS103 or CS112), discrete structures (CS106 or CS115)
Syllabus:
- 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
- Introduction to concurrency: Synchronization principles; the "mutual exclusion" problem and some solutions; deadlock avoidance
- Introduction to concurrency: States and state diagrams; structures; dispatching and context switching; the role of interrupts; concurrent execution; the "mutual exclusion" problem and some solutions; deadlock; models and mechanisms; producer-consumer problems and synchronization
- Scheduling and dispatch: Preemptive and nonpreemptive 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
- Introduction to distributed algorithms: Consensus and election; fault tolerance
- Introduction to net-centric computing: Background and history of networking and the Internet; network architectures; the range of specializations within net-centric computing
- Introduction to networking and communications: Network architectures; issues associated with distributed computing; simple network protocols; APIs for network operations
- Introduction to the World-Wide Web: 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
Units covered:
| PF5 | Event-driven programming | 2 | core hours (of 4) |
| AL4 | Distributed algorithms | 3 | core hours |
| OS1 | Overview of operating systems | 2 | core hours |
| OS2 | Operating system principles | 2 | core hours |
| OS3 | Concurrency | 6 | core hours |
| OS4 | Scheduling and dispatch | 3 | core hours |
| OS5 | Memory management | 5 | core hours |
| NC1 | Introduction to net-centric computing | 2 | core hours |
| NC2 | Communication and networking | 7 | core hours |
| NC3 | Network security | 3 | core hours |
| NC4 | The web as an example of client-server computing | 3 | core hours |
| PL6 | Object-oriented programming | 2 | core hours (of 10) |
Notes:
Because this course includes a range of topics, CS226 is an example of a "crosscutting" approach to designing a core. In a more traditional implementation of the core, an institution might offer one course in operating systems and another in networks. There is, however, a good deal of interplay between these topics. It therefore makes sense to design a course that looks at these pieces of system software together, particularly since the web is extremely appealing to students. Combining the operating system topics with the discussion of networking helps motivate students and stimulates their thinking about both the effect of the web on operating systems and the more general principles involved.
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.
Students who complete this course 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.
- Use the facilities of the operating system to achieve a range of simple tasks, including enhancing the functionality by integrating new software components.
- Identify the security issues associated with distributed web applications and be able to suggest mechanisms leading to a resolution of these problems.
Online resources for CS226