COMP 411: Computer Organization



Syllabus and Policies

  1. Bulletin Description
  2. General Course Info
  3. Instructor Info
  4. Teaching Assistant(s)
  5. Textbooks and Resources
  6. Course Description
  7. Target Audience
  8. Prerequisites
  9. Goals and Key Learning Objectives
  10. Course Requirements
    1. Lecture Recordings
  11. Key Dates
  12. Grading
    1. Examinations
    2. Homework
  13. Course Policies
    1. Lateness
    2. Collaboration vs. Cheating
    3. Cheating Yourself
  14. Disclaimer
  15. Acknowledgements

Bulletin Description

Digital logic, circuit components. Data representation, computer architecture and implementation, assembly language programming.

General Course Info

Term: Spring 2018
Department: COMP
Course Number: 411
Section Number:001
Time: TTh 2:00-3:15, F 1:25-2:15
Location: FH 109 (TTh), SN 014 (F)
Website: http://www.cs.unc.edu/~porter/courses/comp411/s18

Instructor Info

Name: Dr. Donald Porter
Office: Sitterson 362
Email: porter at cs dot unc dot edu
Phone: 919-590-6044
Web: http://www.cs.unc.edu/~porter
Office Hours: T 10:30-11:30 AM, W 3-4 PM, R 1-1:45 PM, or by appointment.

Teaching Assistants

NameOfficeEmailOffice Hours
Michael GuSN 155gum5606 at cs dot unc dot eduM 3-4:30 PM, R 11 AM-12:30 PM, or by appointment.
Connor HamletSN 115 (W), SN 014 (F)cphamlet at cs dot unc dot eduW 1:20-3:20 PM, F 2:15-3:15 PM, or by appointment.

Textbooks and Resources

Required Textbook: We will be using this book for required course readings, as listed on the course schedule. The readings will not necessarily be in order, and I will supplement the book with additional required and optional resources as needed. All required readings will be listed on the course schedule.

The book is available from the university book stores as well as Amazon and your neighborhood book store.

Each student must have full use of a personal laptop computer, which must be brought to the lab sessions, and to class for online quizzes/assessments.

Many course materials will also be posted on the course website. We will also use Piazza for class discussions, and Sakai only for posting assignment grades.

A number of helpful references for the labs are available on the References page.

Optional Textbooks: The following books are useful references for this course and OS kernel programming in general. These books are available from amazon, and several are available for free online via the UNC library (links below).

If you need help with C or Unix, I recommend these texts:

Course Description

This course is intended to be an introduction to computer organization and design. Students will be introduced to the conceptual design of a basic microprocessor, along with assembly and C programming. We start with an overview of trends in computer design and performance, and then introduce fundamental concepts such as binary numbers, binary arithmetic, and representing information as well as instructions. Students learn to program in the C language and then in assembly (i.e., machine) language. The second half of the course focuses on fundamentals of computer hardware design, starting with transistors and logic gates, progressing through basic combinational and sequential components (including arithmetic circuits, state machines, memories, etc.), culminating in the conceptual design of a full but basic CPU (a mini MIPS processor). The course ends with a brief overview of some of the more advanced topics, such as pipelining and cache memory.

Target Audience

This course is intended to be an introduction to computer design, and is therefore suitable for all undergraduate students who already have a basic understanding of programming (COMP401 is a prerequisite). Graduate students from outside of computer science who want basic understanding of computer architecture will also benefit from this course. Students will be introduced to the conceptual design of a basic microprocessor, along with assembly and C programming.

Prerequisites

The prerequisite for this class is COMP 401 (Foundations of Programming).

Goals and Key Learning Objectives

A key goal of this course is to demystify the inner workings of a computer. Students will learn (i) how to program computer hardware at a lower level (in C and assembly language) than they might be used to (e.g., java); (ii) how computer hardware is designed using transistors and logic gates; and (iii) the relationship between hardware and software. This course will be beneficial both to students who want to pursue a career or further studies in the field of computer architecture and design, and to students who simply want a basic understanding of computer hardware so they can write better software.

Course Requirements

There will be a lab assignment approximately every week, requiring programming in C and/or assembly. The last two lab assignments may be substituted by the instructor for a small “lab project”, requiring programming in C and assembly. In addition, there will be homework assignments covering the theoretical aspects of the course, and quizzes and exams.

The course is taught in an interactive lecture style. Although there are slides and planned topics to discuss, students are expected to answer questions during the lecture and ask questions. Attendance is expected, but will not be recorded.

Lecture Recording

Lectures will be recorded and be made available to the students in the class. These recordings are intended to help students review the material after attending lectures, and are not a substitute for attending lectures in person. Lecture attendance is still expected, to facilitate questions, announcements, and discussion. If lecture recording substantially harms attendance, it will be discontinued.

This is a best-effort service and should not replace lecture attendance. Student questions, chalkboard drawings, and other materials may not record properly. Moreover, my experience has been that a few lectures are lost each semester for unforeseen technical difficulties (e.g., the recording space fills up mid-lecture, a file gets corrupted).

Key Dates

There will be one in-class midterm exam: Thurs 03/08, held during class time.

There will be a final exam on Monday 05/07 at noon.

Please mark your calendars now. If you have a conflict with the midterm, tell the instructor during the first two weeks of class, and we will schedule a makeup for a time before the exam is given to the rest of the class.

Grading

The final grade will be determined as follows: The raw scores obtained by all students on each assignment and exam will be standardized for that particular assignment or exam either (at my discretion) by converting them to percentile scores, or else by applying a linear transformation to map the scores to a standard [0, 100] scale. A weighted sum of the resulting standardized scores will then be formed (with weights as shown below) to obtain a composite score for each student.

I will drop the lowest Homework grade, the lowest lab grade (the project will not be dropped), and the two lowest quiz grades.

Finally, the composite scores will be ranked, and I will apply a subjective method of my choice to determine the cutoffs for each grade category. Absolute performance standards, the distribution of composite scores, information derived from late homeworks, and class participation are factors likely to contribute to this decision.

Attendance and participation in classes, in particular, will be factors that can offset borderline grades. This includes conversations with the instructor and TA over email, contributing on Piazza, and so on. I also often take into account evidence of improvement over the course of a semester. However, I will not entertain end-of-term pleas to get a certain grade.

So that you can get an idea of how you are doing as the term progresses, I will report rough percentile information when I hand back each assignment. Final percentile scores will not be computed until after all grade changes and corrections have been taken into account at the end of the term.

Re-grading: after each grade is given out, you will have a chance to discuss it with the grader and the instructor. You must first discuss your grade with the grader, within the first 48 hours after the grade has been handed back. It's highly recommended that you take some time to review your entire grade before discussing it with the grader. After discussing your grade with the grader, if you wish, you may discuss it with the instructor during office hours or by appointment. If, after discussion with the grader or instructor, you ask for an assignment to be regraded, the entire assignment will be regraded. Your grade can be improved or harmed by regrading.

Extra credit: Some labs may include optional challenge problems, which may be completed for extra credit. Please indicate if you do these when you hand in the lab. The instructor may also assign bonus work in class at his discretion. Any extra credit points accrued by any student will be used as follows. The final course grade will be assigned as a letter grade which excludes all extra credit points. Then I will apply a subjective method to determine how much value to assign to extra credit points. Extra credit points can only be used to raise your final course letter grade. In other words, you are not obligated to do any of the extra credit work, and you can still get an A in this course.
A note of caution: in the past, some students have spent too much time working challenge problems and gotten behind on core assignments; note that the relative value of extra credit is small compared to the main course assignments.

Examinations

Exams and quizzes are open book and open notes, unless otherwise noted. You may also bring a basic, non-internet-connected, handheld calculator. The use of a computer is allowed, to access sakai or the course website, but other internet pages (e.g., googling) are not allowed. Accessing non-approved websites during the exams will be treated as an honor code violation.

Special offer: you can write your own exam questions! Submit a question with your solution to course staff in advance of the exam, and if we like it, it will appear on the exam.

Homework

The out-of-class work in this course will consist of three types of activities:

  1. Reading from the textbook and assigned papers. The main purpose of reading is to provide you with other means to learn the material. Reading in advance of class and giving the basics time to digest also helps one understand more subtle concepts that are explained in class. You won't be graded on the readings per se, but reading can improve your exam scores.
    Note also that you are resposible for reading all of the posts on the class mailing list (on Piazza this semester). The list will be an invaluable informational resource for you throughout the class (that's why you must subscribe to it).

  2. Homeworks handed out in class or electronically. You are expected to complete these, in order to help you gain experience reasoning about the issues discussed in class.

  3. Labs in which you will gain hands-on experience with low-level programming.

Reading will take place on an ongoing basis throughout the semester. There will be roughly 10 small programming assignments due weekly, and one mini-project, due on the last day of class. All assignments will be completed individually. The exam may also include questions about the labs.

Course Policies

The course final is given in compliance with UNC final exam regulations and according to the UNC Final Exam calendar.

Lateness

Each student has 72 late hours to be used at his/her discretion on programming assignments throughout the semester. After your late hours are exhausted, each additional day late will incur a full letter grade penalty. In your lab handin code, you must include a file called slack.txt that lists how many late hours you have used. Similarly, homework assignments should list any late hours used on this assignment, and total.

Conflicts with other courses, research deadlines, holidays, etc. are unavoidable. Thus, you are expected to budget these to account for your other obligations, as well as plan ahead and start early.

The lowest grade you will receive for lateness is a D. If you turn nothing in by the last day of classes for a given lab, you will get an F for that lab. If you turn in all programming assignments on the last day, late assignment may receive up to 60% of the credit.

I would recommend turning in what you have by the deadline for a lab, and then submit an updated version late if it will improve your grade after the deducted late penalties. Course staff will generally not grade labs until several days to a week after they are turned in.

Exemptions to the lateness rule will be allowed in three cases:

  1. Illness, which has to be documented by a doctor and approved by the university.
  2. Death in the immediate family.
  3. Accomodations for students with disabilities, as prescribed by the university.

No extensions will be given for any other reason.

Honor Code

All enrolled students must complete this homework, which explores academic integrity. Course staff will not grade any assignments for a student until this form is received.

You are allowed to (actually, encouraged to) discuss basic concepts as well as assignment tasks with other students. However, you are required to write the solutions and code assignments individually: i.e., what you hand in must be your own work. Also, you may not use solutions from previous offerings of the course. Not following these rules is a violation of the honor code.

You may discuss the programming assignments with anyone you like in general terms, but you may not share code with anyone other than course staff. The code you submit must be your own work, and only your own work. Any evidence that source code has been copied, shared, or transmitted in any way between students (this includes using source code written by others in previous semesters, or at other universities!) will be regarded as evidence of academic dishonesty.

Handing in someone else's work is expressly forbidden.

Some more specific guidelines for the labs:

Note that the course staff will use tools such as MOSS to detect cheating. These tools are very good at comparing large sets of programing assignments and correlating those that have a shared code basis, even if the code has been changed significantly!

You are welcome to use existing public libraries in your programming assignments (such as public classes for queues, trees, etc.) You may also look at operating systems code for public domain software such as Linux. Such activities qualify under approved collaboration practices, and you are welcome to take advantage of them. Note that you must cite and acknowledge those sources properly. Not doing so constitutes academic plagiarism, and will not be tolerated.

I am very serious about not tolerating academic dishonesty. Unacceptable collaboration, copying or unapproved use of any code, or failure to attribute sources used to formulate a homework solution will be considered a violation of the UNC Honor Code and will be reported to the Student Attorney General.

Intellectual dishonesty can end your career, and it is your responsibility to stay on the right side of the line. If you are not sure about something, ask.

Cheating Yourself

Let me also appeal to your better nature, and remind you of what you will miss out on if you engage in dishonest behavior.

This is a demanding course, and computer science is a demanding major. A successful CS student will learn many skills that are in high demand on the job market. In this course, I hope you will learn to do low-level system programming---a very valuable skill.

It is my experience that there are some skills that can only be learned through struggling with a problem, such as debugging a complex system or synchronization design. If you "take a shortcut" by cheating, you will nominally complete the assignment, but you are cheating yourself of learning how to fix these problems in the future.

By analogy, this class is like signing up with a personal trainer. If you tell your trainer you did all your exercises while she had her back turned, are you actually going to be stronger?

When you graduate, I hope you will get a good job. Your employer and colleagues will expect you to be a master programmer. If you are not a master programmer, and you won't be if you violate the academic integrity policy, you will not have a long or rewarding career.

In summary, these academic honesty guidelines are in your long-term interest.

Disclaimer

The professor reserves to right to make changes to the syllabus, including project due dates and test dates. These changes will be announced as early as possible.

Acknowledgements

Portions of this course design, organization, policies, syllabus, web design, etc. came from Montek Singh and Michael Bender.


Last updated: 2018-02-17 11:48:55 -0500 [validate xhtml]