|
Dr. Douglas Niehaus Teaching Information |
| Fall 2009 Semester |
The objective of this course is to provide the students with the concepts necessary to enable them to:
The course will consider the subsystems of a generic operating system, the problems driving the design and implementation of each subsystem, and how the properties of each subsystem interact with other components of the system. This will include discussion of: the process abstraction, concurrency control and process synchronization, address space management, process scheduling, resource management, file system implementation, interprocess communication, security and protection, device drivers, networking, and more advanced topics as time allows.
This course will consider issues influencing established, emerging, and proposed techniques for design and implementation of embedded and real time computer systems. Topics will include how characteristics of specific real-time and embedded application domains influence system hardware architecture, system software architecture, system services, application programming models, program development tools, and performance evaluation. The course will examine new techniques required by emerging application domains as well as current techniques for established application domains.
| Undergraduate Classes |
The course will consider the subsystems of a generic operating system, the problems driving the design and implementation of each subsystem, and how the properties of each subsystem interact with other components of the system. This will include discussion of: the process abstraction, concurrency control and process synchronization, address space management, process scheduling, resource management, file system implementation, interprocess communication, security and protection, device drivers, networking, and more advanced topics as time allows.
The course will address sets of tools and practices which have been developed to aid programmers programming for real projects in real situations, as well as the doctrine and procedures associated with the classical software engineering stages: requirements, specification, design, implementation, and maintenance. Since many aspects of software engineering doctrine are expressed at an abstract level, the class will also provide an opportunity to see how the abstract ideas are put into practice by applying them to the semester project within the software development environment supported by the department UNIX systems.
The second objective is to expand the student's understanding of standard programming environment tools and their interaction with the system compiler. The student should, for example, finish the class with a reasonably clear idea of how to use compiler writing tools (Lex and Yacc) to process command line or descriptive languages used as part of an application's interface. The students should also have a reasonable understanding of how the information provided by the compiler is used during the linking of executable programs, during debugging under GDB or other source-level debuggers, and how the code produced by compilation is used by the operating system to create a process running the program.
| Graduate Classes |
The objective of this course is to consider advanced topics in operating systems and systems programming. Some of the topics addressed by the class will cover topics considered in EECS 678, the introductory OS class, in considerably greater detail, while coverage of new topics will broaden the student's perspective and understanding of the subject matter. Much of the class studies the Linux kernel implementation and source code. Class exercises include building Linux kernels, instrumenting them for performance evaluation, and lernaing how to write a simple device driver. The class also reads papers drawn from current and classic research in multiprocessor and distributed systems to see how the basic concepts introduced in 678 are extended and generalized in new situations.