Computer Science 4630
Operating Systems
Summer 2001
Syllabus

Class meeting 9:40-11:10 M-F Austin 305
Instructor Karl Abrahamson
Office Austin 233
Office hours M-Th 1:15-2:00
Phone 328-1879
Email karl@cs.ecu.edu
Course web page www.cs.ecu.edu/~karl/4630/sum01/
My web page www.cs.ecu.edu/~karl/
Text Applied Operating System Concepts (first edition), by A. Silbershatz, P. Galvin and G. Gagne

Overview

A computer's operating system is an extension of the computer's hardware, providing basic services, managing resources, and generally making the computer much easier to use than the bare hardware would be. Operating systems can be studied at different levels.

  1. Kernel level. The most basic features of an operating system are provided in the kernel. These typically including multitasking (distributing the processor resource among multiple tasks, processes or threads), facilitating communication among threads and processes, memory management (distributing the memory resource among tasks or processes) and provision for basic security features. Issues include mechanisms and policies for managing basic resources, and how the system makes use of the computer hardware to accomplish its goals.

  2. Near kernel level. Closely tied to the kernel are a collection of services that the operating system provides. In some cases, these services are part of the kernel itself, but often they are separate. They can include management of the file system and handling of input and output devices and network connections. Issues include file system organization and implementation, how an operating system can manage a large and ever-changing menagerie of devices, and how to provide an elegant and simple interface to all of this to application programs.

  3. System programming level. Application programs and libraries can be written at a variety of levels, depending on how closely they interact with the basic features provided by the operating system. The programs that make extensive or low level use of system features are generally called system programs, to distinguish them from software that makes only limited or very high level use of such resources. Issues include understanding an operating system's application program interface and how to deal with programs written for a multithreaded setting.

  4. System administration level. Configuring and maintaining an operating system is done by a system administrator, who needs to be familiar with the user-level features. Issues include understanding how to use system utilities, knowing where information is stored, and understanding how to diagnose and fix system problems.

  5. User level. The less sophisticated user needs an interface to the operating system for performing basic tasks. This interface is offered by an operating system shell, which can be either text-based or graphically based.

Of course, different operating systems look different from one another at all of those levels. Each level tends to be more specific than the previous one. Kernel level concepts, for example, are fairly universal, even if the kernels of existing operating systems differ in how they implement those concepts. (To illustrate, the most recent version of the MacIntosh operating system is built on a Unix kernel.) File systems look somewhat different across different operating systems, but there are also many similarities. The application program interface is different for each operating system, although with the advent of the Portable Operating System Interface (POSIX) standards, system programs can be written that will run under any POSIX-compliant operating system. The system administration level tends to be quite specific to each operating system.

In this course, we will explore, to some degree, all of the above levels. We will cover basic kernel concepts, and will make use of some of them at the system programming level by writing some simple system programs. We will not cover a great deal of system administration; it is not the intent of this course to turn you into a qualified system administrator for any particular operating system or environment.


Prerequisites

You should be a competent computer programmer familiar with data structures. You should have an elementary knowledge of assembly language programming, although no assembly language programming will be done in this course. You need to understand what is going on in a computer in order to understand how the operating system interacts with the computer hardware.


Grading

Grading will be on the basis of four quizzes (12% each), a yet-to-be-determined number of programming and homework assignments (27% total) and a comprehensive final exam (25%).

Tentative grade cutoffs are 90% for an A, 80% for a B, 70% for a C and 60% for a D. These cutoffs will not be raised. For example, if you would get a B according to these cutoffs, then you will receive no worse than a B.


Summer session

The summer session goes by very quickly. In five weeks, we will cover what is covered in fifteen weeks during the fall or spring sessions. There are no breaks, and you will have to work hard. You should count on working more than three times as hard as during the regular term, because it takes more work to learn material faster. Here are some tips on how to do well in the summer session.

  1. Attend class. Arrive on time.

  2. Do not allow yourself to fall behind. Work on the homework early. Do not wait until just before the deadline.

  3. Schedule time to work outside of class.

  4. Read your notes and the book twice. Take a break in between. You will learn much more this way.

  5. If you are having trouble, seek help soon. Do not wait until it is too late.