Computer Systems Design and Implementation

TBA
TBA
2008-2009
Shortcuts: Schedule

Instructor

Steven Swanson
Email: swanson @ cs.ucsd.edu
IM (not email): professorswanson@{AIM, Yahoo!, google talk, MS Messenger}
Office: EBU3B 3212
Office Hours: TBA
UCSD homepage


Course Description

The goal of this course it to provide you with experience desiging and implementing several components of a complex hardware/software system and to expose you to emerging non-volatile memory technology. In taking this course, you will:

  1. Have a software development experience that is closer to what you will find in industry than with more traditional course projects.
  2. Work in large teams (six) and on a project too large to be completed by the heroics of one individual.
  3. Build software using real-world tools instead of doing everything from scratch.
  4. Have some fun (really).
  5. Work on a project that you can showcase to potential employers.

The system you will be working on is complete computer system including a state-of-the art, NAND flash memory storage system (custom built for this class). Rather than providing this storage system as a "black box" storage device (i.e., an SSD), you will have full access to all components of the system including the controller hardware, the OS drivers, the user space interface, and the applications. It is even possible to modify the architecture of array itself.

How you choose to modify, extend, and exploit the system is up to you. The course staff will provide guidance, support, and technical expertise, you will decide how to improve and extend the system.

The project requires both serious commitment and ability. In terms of time commitment, it will be on the order of the compilers or operating systems course (using Nachos). In terms of ability, you will need to have excellent programming skills, significant personal initiative, and a well-developed capacity for problem-solving. As an example, you will encounter problems that I will not know the answer to (e.g., detailed problems memory devices, the drivers, Linux internals, etc.). Our TA designed most of the system you'll be using, but you will also and you will have to troubleshoot the problems yourself or search online (Web pages, newsgroups, source code, etc.).

This class is intended to combine the talents of students with strong backgrounds in applications, system software, and hardware. If you have any questions about whether the course is for you, send me email. Since the success of the project fundamentally depends upon your ability to significantly contribute to a group effort, though, this course should not be taken casually. As a result, I am only allowing students to enroll by instructor permission only. See the application procedure below for more information.

The course will include a few lectures during the first two weeks, covering the basics of the memory system's operation and discussing trends in emerging memory technologies. During this time you will form groups and develop a project plan.

From the third week on, the course will be lab-only. You have until the finals period to complete your project. Grading will be based on a combination of group and individual performance, including your ability to work successfully as part of a large group. We will be meeting and interacting closely enough that I will be able to appraise individual effort.

The image below shows the platform we will be using for the course. It combines a FPGA prototyping board and a custom-built flash storage array.

To give you an idea of what's possible in the course, here's a list of project ideas. You should not feel limited to these, however.


Prerequisites

Enrollment is by instructor permission only so that I can ensure that students have sufficient background for the course. Also, to make this kind of class manageable, I plan to limit enrollment to about 30 students. I expect that most students will be in their last year and have taken all of the core classes, but this is not mandatory.

My goal is to ensure that you are not getting in over your head, and that you have the requisite programming skills, personal initiative, and problem-solving ability for the class. It does not require an outstanding GPA; I fully realize that some students are much better software developers than test-takers.

To apply to enroll in the course, submit the following information to me:

Simply email the info to me and I'll acknowledge that I received it.


Schedule

I will post the slides for most lectures. Since the slides contain material I am not allowed to distribute publically, they are password protected. I have posted the username and password to the web board.

Date Topic Readings Slides Due Notes
Tuesday, January 8 Overview of course and project; Administrivia; Survey of memory technologies
Thursday, January 10 Flash memory in depth TBA
Tuesday, January 15 Managing non-volatile memory; course infrastructure overview TBA
Thursday, January 17 DRAM, SRAM, and emerging technologies TBA
Tuesday, January 22 Work in lab. TBA
Thursday, March 20 Final Exam 11:30-2:30