Experimental Systems Projects Seminar (CS590??)
Professor Douglas Comer
Spring 2010
Purpose:
To encourage students to engage in experimental work
that is either a masters-level project or the beginning
of a PhD research investigation, and to help them learn
how to share and discuss ideas about system technologies,
abstractions, and designs in a constructive environment.
Paradigm:
A participant can choose to engage with other students who
are working on an existing project (several are described
below) or can propose an original project. Proposals
must be approved. The general criteria are that
the project must have an experimental focus (i.e., a
student must propose to build a working prototype), and
each project must have a concrete objective that can be
accomplished in a semester. Thus, a student can work
on a long-term research topic, but must define a
short-term intermediate step that can be completed by
the end of the semester. If multiple students propose a
group project, the overall project must be commensurate
with the group size, and each student must define a
specific piece of the project for which they have
responsibility.
Background Required:
Although a general background in operating systems and
networking is desirable, several students have mentioned
that their undergraduate institution did not have faculty
expertise in systems areas. Consequently, we will find a
way to accommodate any student who has the desire and
dedication needed to be a ``builder'' (i.e., enjoys
designing and implementing programs, especially in a
systems language such as C), even if their background is
weaker than that of more senior students.
A Few Possibilities:
Note: the list contains both large, open-ended projects as
well as smaller, well-defined projects; think of the list
as illustrating the type of projects that are appropriate.
Furthermore, because we will focus on finding small, elegant
designs and making code easy to understand, almost any
topic can be considered (i.e., the topic need not be
completely novel).
-
Learn A New Programming Language. There are many interesting
languages, such as Python, Perl, and awk, that can be useful
for specific tasks. Choose a language and explore its
features. Design and build a nontrivial system. Compare
performance to a conventional language.
-
New Router Architectures. This project investigates how to
use parallel and distributed systems techniques to make the
next generation of IP routers have high reliability. One
particular aspect to be explored involves the use of
"observers" in which some processors are dedicated to the
task of observing the overall system and reporting potential
problems.
-
Device Driver #1: Ethernet. This project involves building
a Xinu device driver for an Intel Ethernet NIC. Intel has
promised to donate a set of PCs, and we will need to build
a driver before the new machines can be used in the lab. A
knowledge of synchronization primitives (e.g., semaphores)
is desirable.
-
Device Driver #2: USB Drive. This project involves building
a Xinu device driver for an embedded platform with a USB
memory stick. A knowledge of synchronization primitives
(e.g., semaphores) is desirable.
-
Device Driver #3: Wireless Network. This project involves
building a Xinu device driver for an 802.11 wireless access
point. A knowledge of synchronization primitives (e.g.,
semaphores) is desirable.
-
Multicore Operating System Scheduling. Intel has promised
to donate multicore PCs. This project investigates how to
schedule processes/threads on a multicore platform. It
requires one to study hardware facilities and invent
scheduling techniques.
-
Reconfigurable Testbed System. This project extends the
Automated Reconfigurable Testbed software that has been used
in the Xinu lab (and should be running again by Spring).
There are two aspects: a better graphical user interface,
and more powerful extension facilities. Neither requires
an extensive knowledge of networking or operating systems.
-
Operating System Testing. This project involves testing code
for a small embedded operating system. Because the system
runs on a relatively slow processor with limited I/O
facilities, the challenge arises from finding ways to exercise
the code without using extensive processing time or
secondary storage.