Course Overview


Professors:
Zbigniew Kalbarczykkalbarcz@illinois.edu
Nikita Borisovnikita@illinois.edu
Graduate TAs:
Xiang Lixiangl5@illinois.edu
Shaobo Lishaobol2@illinois.edu
Nachuan Wang nachuan3@illinois.edu
Zhongbo Zhu zhongbo2@illinois.edu
Linghao Zhang linghao3@illinois.edu

Objectives: This class will introduce you to the concepts and abstractions central to the development of modern computing systems, with an emphasis on the systems software that controls interaction between devices and other hardware and application programs. We will cover input-output semantics, synchronization, interrupts, multitasking, virtualization of resources, protection, and resource management concepts. You will also be introduced to network and storage device abstractions. In terms of practical skills, you will be exposed to software development tools for source control, debugging, dependency management, and compilation, and will work in the context of a real operating system executing in a virtual machine. You will also develop software analysis skills as well as team-based development and testing skills.
The list of topics includes:

Prerequisites: ECE 220 (old ECE 190). ECE120 (old ECE 290) is strongly recommended. If you have not taken ECE220 (old ECE 190), please review the guide to catching up on ECE 190 material. We expect you to have the necessary background. You may want to purchase a copy of Patt & Patel's book (the ECE220 (old ECE190) textbook), or at least print copies of the free appendices.

Textbook: The primary source of material for this class is a set of class notes, available online . There are also many reference materials available. Please see the class web page for a list of materials. You may want to print copies of the manuals for yourself as well, most are available for free.

We will use this text as a reference describing many of the concepts in the course and their implementation in Linux:

This book is quite detailed; you may also want to consult this classic book that explains the concepts in a more general way:

You may also want to reference a general book on UNIX programming; consider these option:

  • Rochkind, Marc J.: Advanced UNIX Programming, 2nd edtion, Addison-Wesley, 2004, ISBN 0-131-41154-3.
  • Robbins, Kay A; Robbins, Steven: Unix Systems Programming: Communication, Concurrency, and Threads, Prentice Hall, 2003, ISBN 0-13-042411-0. Available for free inside UIUC at: http://proquest.safaribooksonline.com/0130424110.
  • Finally, you may want a book on C programming; there are many available and you may choose one that suits you best.

    What you should expect:
    There will be 2 homework assignments to prepare you for the MPs. They will be posted on the webpage for the course and due in class gitlab on the posted due dates.

    There will be 4 programming assignments, the first of which is involves setting up your class environment, and the last of which is a final project in which you will implement your own operating system. The fourth and final programming assignment must be written in groups of four. Assignments will typically involve both user-level and Linux kernel programming in C. Please see the tool references and MP0 for details on the environment.

    There will be two midterms and one final exam.

    Weight of assignments:
    Machine Problems:50% (5%, 10%, 10%, 25%)
    Prelabs:Worth 10% of that MP's overall grade
    Exams:15% midterm #1 15% midterm #2 15% final exam
    Other:5% subjective evaluation

    Website and Piazza: The website (http://courses.engr.illinois.edu/ece391/) will contain important announcements, lecture notes, handouts, and other material helpful for succeeding in this course.

    Please read the Piazza, on a daily basis. This board will serve as a forum for students to post and answer questions, discuss issues, warn of pitfalls, etc. The TAs and I will read and contribute to the board to focus discussions and to provide more definitive answers to posted questions. It is your responsibility to stay updated with information on Piazza. Whenever an important announcement is made we will chose to notify you via email through Piazza. Excuses that you did not view the post will not be accepted.

    Academic integrity: You are encouraged to study in groups, and to come to office hours in groups. Studying in groups usually will result in all of you understanding the material better. You, working with other members of your study group, can often unravel concepts to the benefit of all members of the group much better than one can person can, working alone. You are allowed to work together on MP prelabs. However, you must properly credit anyone with whom you have collaborated. Should you work on the entire assignment as a group, we prefer that you turn in one copy of your solution with all of your names rather than replicating it. This policy DOES NOT APPLY to machine problems, final projects, or examinations!

    All other work products of this course (machine problems, final projects, and examinations) must be your own individual work for individual assignments, and the work only of your team for team assignments. For the avoidance of doubt, this means that the use of any other resources, including but not limited to other students' code (whether from this semester or previous semesters), non-course websites, content available on websites such as CourseHero or github, or code produced by automated tools, is not authorized. The value of a degree from the University of Illinois depends on maintaining the highest standards of academic integrity. Any violations of academic integrity will be dealt with severely. All parties involved will, at minimum, receive a 0 on that assignment or exam, their name will be reported to the college via FAIR, and their final course grade will be reduced by a full letter grade. If a student has or develops a history of such violations, the college may decide to expel the student. A second offense in our class will result, at a minimum, in failing the class.