Computer Science Curriculum
CS Depth: Systems

The courses below fulfill the Depth: Systems requirement in computer science.

EECS 321 - Programming Languages

This course introduces students to the key features of programming languages. Students implement a series of interpreters that nail down the precise details of how various aspects of programming languages behave. Students are assumed to understand trees and (mathematical) functions that process them; the course builds up to the features of real programming languages from there.

EECS 322 - Compiler Construction

The compiler is the programmer's primary tool. Understanding the compiler is therefore critical for programmers, even if they never build one. Furthermore, many design techniques that emerged in the context of compilers are useful for a range of other application areas. This course introduces students to the essential elements of building a compiler: parsing, context-sensitive property checking, code linearization, register allocation, etc. To take this course, students are expected to already understand how programming languages behave, to a fairly detailed degree. The material in the course builds on that knowledge via a series of semantics preserving transformations that start with a fairly high-level programming language and culminate in machine code. This course satisfies the project requirement.

EECS 333 - Intro to Communication Networks

Data communication basics, Telephone, cellular, cable and computer networks, Layered network architectures, models, and protocols, Switching, routing, flow control, and congestion control, Medium access control, ARQ, and local area networks. Queueing models and network performance analysis. This course fulfills the Systems Depth requirement.

EECS 339 - Intro to Databases

Data models and database design. Modeling the real world: structures, constraints, and operations. The entity relationship to data modeling (including network hierarchical and object-oriented), emphasis on the relational model. Use of existing database systems for the implementation of information systems. This course satisfies the project requirement.

EECS 340 - Introduction to Computer Networking

A top-down exploration of networking using the 5-layer model and the TCP/IP stack. HTTP, FTP, DNS, BSD Sockets, concurrent servers, checksums, reliable transport with stop-and-wait, go-back-n, selective repeat, flow control, congestion control, TCP, unicast routing, multicast routing, router architecture, IP, IPv6, IP multicast, MAC protocols and LANs, Ethernet , wireless networks, and network security. Over the course of the quarter, students build web clients and servers, a fully compatible TCP/IP stack that can run them, and evaluate routing protocols in simulation. This course satisfies the project requirement.

EECS 343 - Operating Systems

A fundamental overview of operating systems. Topics covered include: Operating system structures, processes, process synchronization, deadlocks, CPU scheduling, memory management, file systems, secondary storage management. Requires substantial programming projects. Approved for Systems Breadth and Depth in the CS curriculum in McCormick and Weinberg This course satisfies the project requirement.

EECS 345 - Distributed Systems

Basic principles behind distributed systems (collections of independent components that appear to users as a single coherent system) and main paradigms used to organize them. This course satisfies the project requirement

EECS 350 - Introduction to Computer Security

The past decade has seen an explosion in the concern for the security of information. This course introduces students to the basic principles and practices of computer and information security. Focus will be on the software, operating system and network security techniques with detailed analysis of real-world examples. Topics include cryptography, authentication, software and operating system security (e.g., buffer overflow), Internet vulnerability (DoS attacks, viruses/worms, etc.), intrusion detection systems, firewalls, VPN, Web and wireless security. Students with good performance in the class will be awarded researchship in the academic year and/or the summer. This course can help satisfy the project course requirement for undergraduates and satisfy the breadth requirement in computer systems for system Ph.D. students. This course satisfies the project requirement

EECS 354 - Network Penetration and Security

This course will focus on remote computer penetration (hacking). The class will introduce basic theory for many different types of attacks; then we will actually carry them out in 'real-world' settings. The goal is to learn security by learning how to view your machine from a hacker's perspective. In addition, we encourage students to participate in the UCSB International Capture the Flag Competition. Capture the Flag is a network security exercise where the goal is to exploit other machines while defending your own. In fact, this course should prepare you for any one of many capture the flag competitions that take place year round.

EECS 358 - Intro to Parallel Computing

Introduction to parallel computing for scientists and engineers. Shared memory parallel architectures and programming, distributed memory, message-passing data-parallel architectures, and programming.

EECS 361 - Computer Architecture I

Design and understanding of the computer system as a whole unit. Performance Evaluation and its role in computer system design; Instruction Set Architecture design, Datapath design and optimizations (e.g., ALU); Control design; Single cycle, multiple cycle and pipeline implementations of processor; Hazard detection and forwarding; memory hierarchy design; Cache memories, Virtual memory, peripheral devices and I/O.

EECS 368, 468 - Programming Massively Parallel Processors with CUDA

This course focuses on developing and optimizing applications software on massively parallel graphics processing units (GPUs). Such processing units routinely come with hundreds to thousands of cores per chip and sell for a few hundred to a few thousand dollars. The massive parallelism they offer allows applications to run 2x-150x faster than on conventional multicores. However, to reach this performance improvement, the application must fully utilize the computational, storage and communication resources provided by the device. This course discusses state-of-the-art parallel programming optimization methods to achieve this goal. Ideally this course will bring together people with strong programming skills, with people with a strong need for solving compute-intensive problems that can benefit from programming graphics processors. The initial part of the course will discuss a popular programming interface for graphics processors, the CUDA programming tools for NVIDIA processors. The course will continue with a closer view of the internal architecture of graphics processors and how it impacts performance. Finally, implementations of applications and algorithms on graphics processors will be discussed. The course is lab intensive, and it will utilize the machines at the Wilkinson Lab. Students taking the course for EECS-395 credit will work on a well-defined final mini project that utilizes advanced parallel programming, data layout, and algorithm decomposition concepts. Students taking the course for EECS-495 credit will work on a quarter-long open-ended final project that draws upon their own interests and line of research. Ideally, in their final project these students will form interdisciplinary teams and complete the first steps of optimizing a real-world compute-intensive problem in science or engineering (e.g., materials science, astrophysics, civil engineering, etc.). This course fulfills the Systems Depth requirement.

EECS 369 - Introduction to Sensor Networks

This course will provide coverage of the basic hardware and software platforms for sensor networks and will address in detail several algorithmic techniques for data routing, querying processing, and topology management. The students will obtain hands-on experience through programming projects involving TinyOS or MantisOS, running on Telos/MicaZ platforms. In addition, a number of prototype systems, such as TinyDB will be studied, in the context of various application domains of sensor networks.

EECS 395 - Code Analysis and Transformation

Fast, highly sophisticated code analysis and code transformation tools are essential for modern software development. Before releasing its mobile apps, Facebook submits them to a tool called Infer that finds bugs by static analysis, i.e., without even having to run the code, and guides developers in fixing them. Google Chrome and Mozilla Firefox analyze and optimize JavaScript code to make browsers acceptably responsive. Performance-critical systems and application software would be impossible to build and evolve without compilers that derive highly optimized machine code from high-level source code that humans can understand and reason about efficiently. Understanding what modern code analysis and transformation techniques can and can't do is a prerequisite for research on both software engineering and computer architecture, since hardware relies on software to realize its potential. In this class, you will learn the fundamentals of code analysis and transformation, and you will apply them by extending LLVM, a compiler framework now in production use by Apple, Adobe, Intel and other industrial and academic enterprises

EECS 395, 495 - (Special Topics) Embedded Systems

Introduction to the design and evaluation of embedded systems, with emphasis on the system-level aspects of embedded systems. Topics include modeling (models of computation and models of communication), survey of embedded system hardware, software and operating system issues specific to embedded system design, mapping specifications to hardware, and testing and evaluation of embedded systems.

EECS 395, 495 - The Art of Multicore Concurrent Programming

- NOTE: 2015 FALL COURSE CANCELLED - You will not get the automatic speedup for your software when you upgrade to a new computer, since the frequency scaling is virtually stopped, and you only get more cores on new machines. For speed, you have to do concurrent programming for multicores. This course will teach you how to do it effectively. We will start with synchronization primitives, mutual exclusion, and consensus, and talk about different programming models such as multi-threading, locking, and transactional memory. We will also discuss how to debug and check concurrent programs, which may give your different behaviors at different executions.

EECS 395, 495 - Data Science

In this seminar, we will survey the fundamentals of data science by reading state of the art research papers in this area. This class will cover the basics of how to manipulate, integrate, and analyze data at scale. To receive credit, students must give in-class presentations and complete a final project.

EECS 395, 495 - Networking Problems in Cloud Computing

This course will cover a broad range of topics related to networking problems in cloud computing, including network structure of Internet Data Centers, layer 2 data network fabric, lease management and partitioning, data placement for geo-distributed cloud services, energy efficient cloud design, flow scheduling, congestion control, i.e., the incast problem, and more.

EECS 395, 495 - Technology Infrastructure: Concepts, Requirements, Design and Operation

Requirements of large-scale computer systems and networks; space, power, environmental control, operational software and security; planning, data centers, network operations centers, national and international regulations and practices.

EECS 440 - Advanced Networking

The Internet has evolved from a small, well controlled, and trusted network, into a gigantic, loosely controlled, and highly uncooperative infrastructure of astonishing scale and complexity. Not only that different hosts or networks have divergent functional or economical interests, but the Internet has become a “playground” for malicious denial-of-service attackers of all kinds. Moreover, its everyday operation is often poorly understood, and existing solutions to many of the classical challenges remain unsatisfactory. Hence, the design of Internet is far from complete, and it is certain that it will continue to change. This class is intended to help you understand how and why, by letting the Internet to become your “playground” for a quarter.

EECS 441 - Resource Virtualization

The bulk of the time in this class examining a virtual machine monitor (VMM) in depth, at the source code level. The course explains the hardware/software interface of a modern x86 computer in detail. A VMM is an operating system that is implemented directly on top of the hardware interface, and itself presents a hardware interface to higher-level software. Students will also acquire valuable kernel development skills. This course satisfies the project requirement

EECS 443 - Advanced Operating Systems

Advanced operating systems. Topics covered include: Approved for Systems Breadth and Depth in the CS curriculum in McCormick and Weinberg This course satisfies the project requirement.

EECS 450 - Internet Security

Cybercrime has exploded over the last decade. In this course, we will start with the basic concepts of network security, then focus on security challenges of network and distributed systems as well as the counter-attack approaches. Approved for Security Depth and Systems Breadth and Depth in the CS curriculum in McCormick and Weinberg This course satisfies the project requirement.