Syllabus for CSC 2400 (Computer Systems I)




Mirela Damian, MSC 167A
Phone: (610)519-7414

Office Hours

M 4:00 pm 5:00 pm

W 1:30 pm 3:30 pm

Course Meets

W 6:00 am 8:45 am in Mendel G88


CSC 1052 Algorithms and Data Structures II

CSC 1300 Discrete Structures


Course Description


This course is the first part of a two semester sequence Computer Systems I and II. The goal of this course is to bridge the gap between high-level programming and actual computer systems -- processors, caches, operating systems, compilers, linkers and so on. The course comprises three major parts: machine organization and assembly language programming, C program design and development, and operating system tools. Unix will be used as a running example. Labs will be interspersed with lectures to give students hands on experience with the C language and the Unix system.

Student Learning Outcomes


1.      Students will differentiate between different internal formats to represent numerical data and their effect on precision and accuracy.

2.      Students will be able to explain of the role of the basic computer system components (hardware and software) and how they interact with one another.

3.      Students will enhance their programming skills through the development, testing and debugging of C programs in Unix.

4.      Students will use basic operating system services to create processes and have them communicate with one another.

5.      Students will appreciate the need for security and ethics in computer use.




The textbook for this class is


Adam Hoover

System Programming with C and Unix

Addison-Wesley, ISBN: 0-13-606712-3


Other course-related materials will be posted online at

Please make sure you check the class page regularly.

Course Requirements

1.      Assignments: Weekly, most of which will involve C programming in Unix.


2.      Quizzes: Weekly, cover assignment material.

3.      Tests: one midterm and one comprehensive final exam. Tests will be closed books, closed notes. However, you are allowed to bring one sheet of paper (letter size) with any information you think will help you during the exam. Please note that notes may not be shared during the exam.


4.      Class Attendance. Regular attendance is expected of all students. Each student is responsible for all material, announcements, and assignments covered during any class missed.


5.      Late Policy. All assignments are due at the beginning of the class on the due date. Late submissions will receive no credit.



Tentative Grading Procedure


The following allocation of points is tentative and may change during the semester:



Assignment and Quizzes:


Class Participation:



Academic Integrity


I encourage you to collaborate on assignments and learn from your fellow students. However, there is a fine line between collaboration and cheating. Collaboration means discussing problems and solution approaches with other students and independently writing your own answers; cheating means copying solutions from someone else or giving someone else your solutions. If you have questions about what is acceptable, please bring them to me before submitting your work.


Cheating, plagiarism and helping others commit these acts are all forms of academic dishonesty, and will not be tolerated. Academic misconduct could result in disciplinary action that may include, but is not limited to, suspension or dismissal. To read the entire Code on Academic Integrity, consult


Special Arrangements


If anyone has a disability or other problems that warrant the need for special accommodation to complete the course work, please contact me at your earliest convenience.


Tentative Course Schedule


The course schedule below is approximate and subject to change as the semester progresses. It is the responsibility of the student to learn and adjust to changes. Students are expected to read chapter material to be covered prior to each session.





Wk 1: Aug. 29

Introduction to Computer Systems. Simple C.

Ch. 1

Wk 2: Sep. 5

From C to Executable Code. Simple Unix.

Ch. 1

Wk 3: Sep. 12

Bitwise and Logical Operators.

Ch. 1

Wk 4: Sep. 19

Integral C Data Types. Bit Manipulations.

Ch. 2

Wk 5: Sep. 26

Arrays and Strings. Array Overflows.

Ch. 3, 4

Wk 6: Oct. 3

Pointers and Dynamic Memory Allocation.

Ch. 4

Wk 7: Oct. 10

Review and Midterm.

Oct. 15 21

Fall Break ENJOY !

Wk 8: Oct. 24

Introduction to X86. Memory Addressing Modes.

Ch. 4

Wk 9: Oct. 31

Translating X86 to C.

Ch 6, Notes

Wk 10: Nov. 7

X86 Stack Layout and Usage.


Wk 11: Nov. 14

Buffer Overflow Attacks.


Nov. 20 25

Thanksgiving Recess ENJOY !

Wk 12: Nov.28

Introduction to Processes. System Calls.

Ch. 7

Wk 13: Dec.5

Process Communication.

Ch. 7

Wk 14: Dec. 12

Socket System Calls. SMTP.

Ch. 7.5, Notes

Final Exam Wednesday, Dec. 19, 6:00 8:30 pm