DataSys: Data-Intensive Distributed Systems LaboratoryData-Intensive Distributed Systems Laboratory

Illinois Institute of Technology
Department of Computer Science


These are courses taught at IIT by DataSys faculty members. These courses are part of various specializations at IIT in the CS Department:

If you are considering doing a Master of Computer Science with a Specialization in Distributed and Cloud Computing, please see the following page for a list of recommended coursework.

Each course title is followed by the names of the faculty members who usually teach these courses, and the next semester each course is likely to be offered (F## denotes the Fall semester and S## denotes the Spring semester). 

CS451: Introduction to Parallel and Distributed Computing (Ioan Raicu, Zhiling Lan)
This course covers general introductory concepts in the design and implementation of distributed systems, covering all the major branches such as Cloud Computing, Grid Computing, Cluster Computing, Supercomputing, and Many-core Computing. The specific topics that this course will cover are:  asynchronous/synchronous computation/communication, concurrency control, fault tolerance, GPU architecture and programming, heterogeneity, interconnection topologies, load balancing, memory consistency model, memory hierarchies, Message passing interface (MPI), MIMD/SIMD, multithreaded programming, parallel algorithms & architectures, parallel I/O, performance analysis and tuning, power, programming models (data parallel, task parallel, process-centric, shared/distributed memory), scalability and performance studies, scheduling, storage systems, and synchronization. Some of these topics are covered in more depth in the graduate courses focusing on specific sub-domains of distributed systems, such CS546, CS550, CS553, CS554, CS570, and CS595. While this CS451 course is not a pre-requisite to any of the graduate level courses in distributed systems, both undergraduate and graduate students who wish to be better prepared for these courses could take this CS451 course. This course involves lectures, programming assignments, and exams. This course was offered as CS495 in the past. Prerequsites: CS351 or CS450.  

CS550: Advanced Operating Systems (Ioan Raicu, Zhiling Lan)
This course covers general issues of design and implementation of advanced modern operating systems. The focus is on issues that are critical to the applications of distributed systems and computer networks, which include interprocess communication, distributed processing, sharing and replication of data and files. Approximately two third of the course will be devoted to basic concepts and techniques, and the remaining third will be on assorted current topics in modern operating systems and distributed systems. Prerequsites: CS450.

CS553: Cloud Computing (Ioan Raicu)
This course will cover a new distributed computing paradigm called Cloud Computing. Topics include distributed system models and enabling eechnologies, computer clusters for scalable Computing, virtual machines and virtualization of clusters and datacenters, design of cloud computing platforms, cloud programming and software environments (Workflow Systems, MapReduce, Google App Engine, Amazon AWS, Microsoft Azure, and emerging cloud software stacks), grid computing and resource management, P2P computing with overlay networks, ubiquitous computing with clouds and the Internet of things, and dta-intensive distributed computing. The course involves lectures, homeworks, programming assignments, and exams. Prerequsites: CS450 or CS495.

CS554: Data-Intensive Computing (Ioan Raicu)
This course is a tour through various research topics in distributed data-intensive computing, covering topics in cluster computing, grid computing, supercomputing, and cloud computing. We will explore solutions and learn design principles for building large network-based computational systems to support data intensive computing. This course is geared for junior/senior level undergraduates and graduate students in computer science. Prerequsites: CS495 (Intro to Distributed Systems) or CS495 or CS546 or CS550 or CS553 or CS570.

CS695: Doctoral Seminar (Ioan Raicu)
This course is required for all PhD students in computer science, and will expose the students to presentations from senior people in computer science from industry, government labs, and academia. The course will involve outside invited speakers, written summaries of presentations, and short oral presentations by the students. Prerequsites: PhD student.

Other Relevant Courses

CS546: Parallel and Distributed Processing (Xian-He Sun, Zhiling Lan)

This course covers general issues of parallel processing, which include system, architectures, programming, performance evaluation, and applications. Approximately two third of the course will be devoted to basic concepts and techniques, and the remaining third will be on programming and assorted current topics in parallel computing. Four textbooks are recommended as the general guideline of the lecture. Both undergrads and grads are welcome to the class. Prerequisites: CS450 and CS470


CS570: Advanced Computer Architecture (Xian-He Sun)

This course is about advanced computer architecture. It teaches the science and art of selecting and interconnecting hardware components to create a computer that meets functional, performance and cost goals, and teaches the qualitative and quantitative examination of computer design tradeoffs. We cover the system architecture, processor technology, advanced memory hierarchy and I/O organization, power and energy management, and reliability, and conver the new development in multicore, data center design, and parallel I/O. We will learn, for example, how uniprocessors execute many instructions concurrently and why state-of-the-art memory systems are nearly as complex as processors, and etc. We will follow the text by Patterson and Hennessy, with additional material pulling from other recources. Assignments will include problems from the end of the chapters as will as some selected exercises. For the last part of the course we will read an assortment of papers and work on different term projects.


CS562: Virtual Machines (Kyle Hale)

This course will draw back the curtains and expose the magic that makes various types of VMs work. By the end of the course, you will have a deep understanding of hypervisors, system virtualization, machine emulation, language virtual machines, binary translators, virtual resource management, and more. You will gain exposure to a real-world hypervisor code-base. Furthermore, you will actually build a virtual machine and develop an intuition for using VMs to solve problems. The course will involve lectures, written assignments, involved programming projects, and discussions of foundational research papers.


CS595: OS and Runtime System Design for Supercomputing (Kyle Hale)

This is a seminar course that will expose you to current research at the intersection of several areas within computer systems, including Operating Systems, Computer Architecture, High-performance Computing, Parallel Programming, and Programming Languages. Students will apply what they learn to complete a course project in the design of OS internals for a specific runtime system, parallel language, or parallel algorithm.


CS595: Fault Tolerance Computing (Zhiling Lan)

This is a research-oriented course that will cover challenges and opportunities in fault tolerance computing. There are no required textbooks. Instead, research publications will be used as reference materials. Each lecture will have 1-2 assigned papers to read. Students should read the papers before coming to class, participate in class discussions, present at least one research topic during the course, and do a term project individually or in a two-member team. and be prepared to discuss them. Major topics that will be covered include fautl measurement and modeling, fault detection and diagnosis, fault avoidance/prevention techniques, and  FT applications. Prerequisites: CS450 and CS470