A study of operating systems, with emphasis on a multiprogramming environment. The course concentrates on the general principles involved in the management of resources and on the application of these principles to operating system design. Specific algorithms for functions such as job scheduling and memory management are also studied along with an evaluation of the tradeoffs involved in choosing a particular algorithm as part of a system design. A study of the formal concepts and notations of theoretical computer science. Topics covered include automata, formal languages and grammars, Turing machines, recursive functions, computability, and undecidability.
Emphasis is on developing and presenting rigorous and formal arguments.
A study of database design and implementation. Data manipulation languages for querying are studied, and issues of integrity and security are discussed. An overview of distributed databases is given. A study of general approaches for designing computer algorithms and techniques of analyzing their time and space requirements. Numerous specific algorithms are analyzed, chosen from applications including searching, sorting, resource scheduling, and graph theory.