next up previous
Next: Publications Up: Curriculum Vita Previous: Employment

Courses taught

Programming Practicum in C++.
Comprehensive coverage of the C and C++ programming languages, emphasizing the semantics, implementation, efficiency, and utility of language features in practical settings. Topics include: types, methods, virtual methods, operator overloading, inheritance, multiple inheritance, templates, and the standard template library. Prerequisite: knowledge of data structures and ability to read assembly code.

Linux Internals.
Operating system design and implementation as illustrated in the Linux kernel source code. Project work involves modifying the kernel and observing the effects. Prerequisites: data structures, assembly language, computer architecture, and an advanced programming course or equivalent experience in C or C++.

Computer Architecture and Assembly Language Programming.
This course presents the essential properties of computer hardware insofar as computer programming is concerned, using low-level assembly language programming as the vehicle for exploring these properties. Topics: the CRISC assembly language for the CRISP virtual machine; general properties of assembly languages; the relationship between assembly languages and high level languages; representation of integer and floating point quantities; and execution time of programs. Programming projects involve the CRISC assembly language using its associated simulator. Prerequisite: data structures.

Computing on the Internet.
Computing on the Internet is a technical introduction to the Internet, to computers, and to computer science. The course is suitable for all students, including those with minimal prior exposure to computers or the Internet. Prerequisites: none.

Compilers.
This course conveys an understanding of compilers and of the semantics and implementation of high-level programming languages. It acquaints students with some important ideas and algorithms which have widespread applicability. A programming project results in a working compiler for a useful subset of the C programming language. Prerequisites: previous exposure to programming language semantics, formal languages and grammars, and assembly language.

Operating Systems.
We study the mechanisms used to create the timesharing effect. Through this study we see some of the special issues that arise for concurrent programs running in a shared-memory environment. We will also survey some major ideas in operating system design such as protection, naming, and file system organization. Coursework includes a semester-long programming project writing an operating system kernel. Prerequisites: computer architecture and one further course in computer science.

Parallel Computation.
The essential properties of parallel machines, the development of parallel algorithms, and project work running and analyzing programs. Prerequisites: data structures and algorithms.

Data Structures.
Semantics of C and C++, lists, trees, hashing, recursion. Prerequisites: introductory programming.

Computer Organization.
Logic design, central processor organization, microprogrammed control, pipelining, arithmetic, instruction set design, supercomputers, and parallel computers. Prerequisite: computer architecture, assembly language programming.


next up previous
Next: Publications Up: Curriculum Vita Previous: Employment
Prof. David Krumme 2004-03-13