Computer Systems

EECS Associate Professor Prasad Kulkarni, an NSF CAREER Award Winner, is building more secure and better performing software systems.

EECS researchers design, implement, and verify software and hardware components for high assurance systems. They develop high-level programming language design, language type systems, and specification and verification of language semantics, ensuring highly reliable and secure software. From small embedded elements to large distributed computing environments, the breadth of EECS research addresses all computer systems and aspects of the system lifecycle. Researchers focus on performance, reliability, and power characteristics and their trade-offs to engineer exceptional systems.

Associated Disciplines


Explore: Disciplines

Associated Programs

AT&T Foundation Distinguished Professor of Electrical and Computer Science and Director of the Information and Telecommunication Technology Center
2022 Eaton Hall

Primary Research Interests

  • Formal Methods, Verification, and Synthesis
  • Trusted Computing
  • System-Level Design Languages and Semantics
  • Specification Languages
Associate Professor
2024 Eaton Hall

Primary Research Interests

  • Functional Programming
  • Software Engineering
  • Compilers
  • Systems
  • FPGAs
Professor, Associate Chair for Graduate Studies
2030 Eaton Hall

Primary Research Interests

  • Compilers
  • Virtual Machines
  • Runtime Systems
  • Computer Architecture
2046 Eaton Hall

Primary Research Interests

  • Digital systems
  • Microprocessors
  • Embedded Systems
Assistant Professor
3040 Eaton Hall

Primary Research Interests

  • Operating Systems
  • Embedded Real-Time Systems
  • Computer Architecture


Associated Facilities

  • Smart GDB debugging environment
  • C, C++, and GDB and associated support tools
  • Rosetta specification language
  • Raskell evaluation environment
  • PVS, SPIN, Isabelle, HOL, and SAT analysis software
  • Protocols for ad-hoc sensor networks
  • Xilinx and Altera FPGA/SoC prototyping systems
  • Synplicity and Xilinx FPGA synthesis tools
  • ModelSim VHDL/Verilog simulation tools
  • Bugzilla and CVS project management tools

Hardware and software design tools for:

  • Specification languages and semantics
  • Language interpreters, analyzers, and compilers
  • Real-time and distributed operating systems
  • Distributed simulation systems
  • Embedded software and hardware systems
  • FPGA-based OS primitives
  • Reconfigurable Systems-on-Chip
  • VHDL/Verilog modeling, simulation, and synthesis

Program Objectives

  • Acquire the ability to design, implement, and verify the various software and hardware components in systems whose primary constituents include computers.
  • Understand the foundations of high-level programming language design, language type systems, and specification and verification of language semantics.
  • Understand the process of generating and running software that realizes the performance, security, privacy, and real-time goals of the underlying problem domain.
  • Understand the fundamental principles of operating systems and other runtime environments.
  • Understand the design and implementation of modern computer hardware architectures and their performance, reliability, and power characteristics and trade-offs.

Core Coursework (MS)

EECS 750 Advanced Operating Systems
In this course, we will study advanced topics in operating systems for modern hardware platforms. The topics include: multicore CPU scheduling, cache and DRAM management, flash-based storage systems and I/O management, power/energy management, and cloud systems. We will discuss classical and recent papers in each of these topics. We will also study advanced resource management capabilities in recent Linux kernels. The course will consist of lectures, student presentations, and a term project. Prerequisite: EECS 678. LEC.

The class is not offered for the Spring 2019 semester.

EECS 762 Programming Language Foundation I
This course presents a basic introduction to the semantics of programming languages. The presentation begins with basic lambda calculus and mechanisms for evaluating lambda calculus terms. Types are introduced in the form of simply typed lambda calculus and techniques for type inference and defining type systems are presented. Finally, techniques for using lambda calculus to define, evaluate and type check common programming language constructs are presented. Prerequisite: EECS 662 or equivalent. LEC.

The class is not offered for the Spring 2019 semester.

EECS 743 Advanced Computer Architecture
This course will focus on the emerging technologies to build high-performance, low-power, and resilient microprocessors. Topics include multiprocessing, reliability-and-variability-aware computer architecture designs, energy-efficient computer systems, on-chip networks, 3D microprocessor designs, general-purpose computation on graphics processing units, and non-volatile computer memory. The course responds to VLSI technologies ability to provide increasing numbers of transistors and clock speeds to allow computer architects to build powerful microprocessors and computer systems and the challenges (e.g. resilience, energy-efficiency) that the growth in microprocessor performance is facing from the aggressive technology scaling. Prerequisite: EECS 643 or EECS 645, or equivalent. A good understanding of C/C++ and having basic Unix/Linux skills is required. LEC.
Spring 2019
Type Time/Place and Instructor Credit Hours Class #
LEC Aly, Esam Eldin
MWF 09:00-09:50 AM LEA 1136 - LAWRENCE
3 70914
EECS 768 Virtual Machines
Understand the fundamental principles and advanced implementation aspects of key virtual machine concepts. Topics include principles of virtualization, binary translation, process and system level virtual machines, JIT complication and optimizations in managed environments, garbage collection, virtual machine implementation issues, and virtual machine security. Includes in-depth coverage of the latest developments and research issues in the filed of virtual machines. Prerequisite: EECS 665 and either EECS 643 or EECS 645 or consent of instructor. LEC.
Spring 2019
Type Time/Place and Instructor Credit Hours Class #
LEC Kulkarni, Prasad
TuTh 08:00-09:15 AM LEA 1136 - LAWRENCE
3 75497

Elective Coursework (MS)

EECS 645 Computer Architecture
The structure, design, analysis, and evaluation of computer processors and systems. The design of instruction sets. Principles and techniques of parallelism at the data transfer (memory hierarchy), data processing (pipelines), and concurrent instruction execution. Prerequisite: EECS 388. LEC.
Spring 2019
Type Time/Place and Instructor Credit Hours Class #
LEC Pan, Chenyun
TuTh 04:00-05:15 PM LEEP2 G415 - LAWRENCE
3 72167
EECS 662 Programming Languages
Formal definition of programming languages including specification of syntax and semantics. Simple statements including precedence, infix, prefix, and postfix notation. Global properties of algorithmic languages including scope of declaration, storage allocation, grouping of statements, binding time of constituents, subroutines, coroutines, and tasks. Run-time representation of program and data structures. Prerequisite: EECS 368 and EECS 388 and EECS 560. LEC.
Spring 2019
Type Time/Place and Instructor Credit Hours Class #
LEC Morris, John
TuTh 01:00-02:15 PM LEA 1136 - LAWRENCE
3 61234
EECS 665 Compiler Construction
Compilation of simple expressions and statements. Organization of a compiler including symbol tables, lexical analysis, syntax analysis, intermediate and object code generation, error diagnostics, code optimization techniques and run-time structures in a block-structured language such as PASCAL or C. Programming assignments include using tools for lexer and parser generator, and intermediate , and object code generation techniques. Laboratory exercises will provide hands-on experience with the tools and concepts required for the programming assignments. Prerequisite: EECS 368, EECS 448, and EECS 510. LEC.
Spring 2019
Type Time/Place and Instructor Credit Hours Class #
LEC Davidson, Andrew
MWF 03:00-03:50 PM LEEP2 G411 - LAWRENCE
4 73456
Tu 09:00-10:50 AM EATN 1005C - LAWRENCE
4 73458
Th 02:30-04:20 PM EATN 1005C - LAWRENCE
4 73459
EECS 678 Introduction to Operating Systems
The objective of this course is to provide the students with the concepts necessary to enable them to: a) identify the abstract services common to all operating system, b) define the basic system components that support the operating system's machine independent abstractions on particular target architectures, c) consider how the design and implementation of different systems components interact and constrain one another, not merely how one or two important parts work in isolation, and d) understand the means by which fundamental problems in operating systems can be analyzed and addressed. Programming assignments address topics including process creation, inter-process communication, system call implementation, process scheduling and virtual memory. Laboratory exercises primarily focus on use of tools and concepts required for the programming assignments but include a small number of independent topics. Prerequisite: EECS 388 and EECS 448. LEC.
Spring 2019
Type Time/Place and Instructor Credit Hours Class #
LEC Yun, Heechul
MWF 08:00-08:50 AM LEEP2 G415 - LAWRENCE
4 61235
W 04:00-05:50 PM EATN 1005D - LAWRENCE
4 64973
W 09:00-10:50 AM EATN 1005D - LAWRENCE
4 67404
M 12:00-01:50 PM EATN 1005D - LAWRENCE
4 70631
F 12:00-01:50 PM EATN 1005D - LAWRENCE
4 68860
M 04:00-05:50 PM EATN 1005D - LAWRENCE
4 75266
EECS 739 Parallel Scientific Computing
This course is concerned with the application of parallel processing to real-world problems in engineering and the sciences. State-of-the-art serial and parallel numerical computing algorithms are studied along with contemporary applications. The course takes an algorithmic design, analysis, and implementation approach and covers an introduction to scientific and parallel computing, parallel computing platforms, design principles of parallel algorithms, analytical modeling of parallel algorithms, MPI programming, direct and iterative linear solvers, numerical PDEs and meshes, numerical optimization, GPU computing, and applications of parallel scientific computing. Prerequisite: MATH 122 or MATH 126; MATH 290; experience programming in C, C++, or Fortran; EECS 639 (or equivalent.) Highly recommended: MATH 127 or MATH 223. LEC.
Spring 2019
Type Time/Place and Instructor Credit Hours Class #
LEC Shontz, Suzanne
MWF 03:00-03:50 PM LEA 3150 - LAWRENCE
3 75458
EECS 742 Static Analysis
This course presents an introduction to techniques for statically analyzing programs. Converge includes theoretical analysis, definition and implementation of data flow analysis, control flow analysis, abstract interpretation, and type and effects systems. The course presents both the underlying definitions and pragmatic implementation of these systems. Prerequisite: EECS 665 or EECS 662 or equivalent. LEC.
Spring 2019
Type Time/Place and Instructor Credit Hours Class #
LEC Alexander, Perry
TuTh 01:00-02:15 PM LEA 3150 - LAWRENCE
3 78378
EECS 753 Embedded and Real Time Computer Systems
This course will cover emerging and proposed techniques and issues in embedded and real time computer systems. Topics will include new paradigms, enabling technologies, and challenges resulting from emerging application domains. Prerequisite: EECS 645 and EECS 678. LEC.
Spring 2019
Type Time/Place and Instructor Credit Hours Class #
LEC Yun, Heechul
MWF 10:00-10:50 AM LEA 1136 - LAWRENCE
3 75466
EECS 755 Software Modeling and Analysis
Modern techniques for modeling and analyzing software systems. Course coverage concentrates on pragmatic, formal modeling techniques that support predictive analysis. Topics include formal modeling, static analysis, and formal analysis using model checking and theorem proving systems. Prerequisite: EECS 368 or equivalent. LEC.

The class is not offered for the Spring 2019 semester.

EECS 776 Functional Programming and Domain Specific Languages
An introduction to functional programming. Topics include learning how to program in Haskell; IO and purity in software engineering; functional data structures and algorithms; monads and applicative functors; parsing combinators; Domain Specific Languages (DSLs) and DSL construction; advanced type systems; making assurance arguments; testing and debugging. Prerequisite: EECS 368 or equivalent or consent of instructor. LEC.

The class is not offered for the Spring 2019 semester.

EECS 843 Programming Language Foundation II
This course presents advanced topics in programming language semantics. Fixed point types are presented followed by classes of polymorphism and their semantics. System F and type variables are presented along with universal and existential types. The lambda cube is introduced along with advanced forms of polymorphism. Several interpreters are developed implementing various type systems and associated type inference algorithms. Prerequisite: EECS 762. LEC.

The class is not offered for the Spring 2019 semester.

Explore: EECS Courses

Degree Programs
Explore: Disciplines
Department Events
KU Today
High school seniors can apply to the SELF Program, a four-year enrichment and leadership experience
Engineering students build concrete canoes, Formula race cars, unmanned planes, and rockets for competitions nationwide
More first and second place awards in student AIAA aircraft design contests than any other school in the world
One of 34 U.S. public institutions in the prestigious Association of American Universities
44 nationally ranked graduate programs.
—U.S. News & World Report
Top 50 nationwide for size of library collection.
23rd nationwide for service to veterans —"Best for Vets," Military Times