This course is a broad introduction to computer science that focuses on how a computer works and how programs run on computers. We examine the hardware and software components required to go from a program expressed in a high-level programming language like C or Python to the computer actually running the program. This course takes a bottom-up approach to discovering how a computer works, and introduces parallel and distributed computing with a specific focus on shared memory parallelism for multicore and SMP systems. Topics include theoretical models of computation, data representation, machine organization, assembly and machine code, memory, I/O, the stack, the operating system, compilers and interpreters, processes and threads, and synchronization. In addition to parallel programming, we will discuss parallel computers and system-level support for parallel computing.
Prerequisite: Completion of CS21 or its equivalent.
Professor: Tia Newhall
Office: Science Center 249
Phone: (610) 690-5637
Office hours: Thurs 1:30-3:00 and by appointment
Room: Science Center 256
Class Time: 11:20 TR
Lab A Time: 1:00 Mondays
Lab B Time: 2:40 Tuesdays
Text: Computer Systems: A Programmer's Perspective,
Bryant and O'Hallaron, Prentice Hall, 2011, ISBN: 0-13-610804-0
|WEEK||DAY||ANNOUNCEMENTS||TOPIC & READING||ASSIGNMENTS|
|1||Sep 04||Using Unix Session: Wed 7-8pm (Sep 05)
Using Unix Session: Mon 4-5pm (240 Sci Cntr) (Sep 03)
|Chapter 1, 2.1-2.2
|Sep 06||Lab 1|
|2||Sep 11||Chapter 2, 1.4
|Sep 13||Drop/Add ends (Sep 14)||Lab 2|
|3||Sep 18||Skim Chapter 1.4, 4.2
|4||Sep 25||Chapter 3.1-3.6 (skip 3.5.5)
|Sep 27||Lab 3|
|5||Oct 02||Chapter 3.6-3.9 (skip 3.8.4, 3.8.5, 3.9.2)
|Oct 04||Lab 4|
|6||Oct 09||Chapter 3.9-3.12, 3.15, 5.1
|7||Oct 23||Chapt. 5.1
|8||Oct 30||Chapt. 1.5-1.7, 6, motherboard fig
|Nov 01||Midterm: Thursday 7:30-9:30pm
room 181 Sci Cntr
|9||Nov 06||Chapt. 6, 1.7, 7.1-7.10 (skim)
|Nov 08||Lab 6|
|10||Nov 13||Chapt. 1.7, 8.1-8.5, 9.1-9.3, 9.9
|Nov 15||Lab 7|
|11||Nov 20||Chapt. 1.7, 1.9, 12
|Nov 22||Thanksgiving Break|
|12||Nov 27||Chapt. 12
|Nov 29||Lab 8|
|13||Dec 04||Chapt. 12
Final exam 9:00 am - noon (Sci Cntr 104 & 105)
|50%||Labs and Written Assignments|
|25%||Final exam (Dec. 15, 9am-noon)|
|20%||Midterm exam (Thursday Nov. 1, 7:30-9:30pm, 181 Sci Center)|
|5%||Class Participation and Attendance|
Weekly Evening Ninja Session: Thursdays 7-11pm, Sci Center
The CS31 Ninjas: Chloe, Emily and Gabe
Ninja Coordinator: Frances Ruiz
Lab assignments will typically be assigned in class on Thursday and be due the following Friday evening. You are strongly encouraged to start early and ask questions early if you get stuck. For some assignments you must work individually. For others you will work with a partner.
Late lab and written assignments will not normally be accepted; however, special exceptions can be made if you contact me well in advance of the deadline (having a lot of work in other classes does not qualify for a special exception). Even if you do not fully complete an assignment, you should submit what you have done to receive partial credit.
Some labs may take a considerable amount of time, so you are strongly encouraged to begin working on assignments well before the due date.
You will submit you assignments electronically using the handin31 program. You may submit your assignment multiple times, but each submission overwrites the previous one and only the final submission will be graded.
Even though our class and the scheduled labs are held in Sci Cntr 256, I encourage you to work in one of the CS labs when possible. You will not need to remotely connect, and some programs will run faster.
The CS labs are available 24 hours a day 7 days a week for CS lab work. Just swipe your ID to gain access on weekends and evenings when the CS lab doors are closed and locked. Please review the CS Lab Rules and CS User Rules about appropriate use of CS labs.
Academic honesty is required in all work you submit to be graded. With the exception of your partner on lab assignments, you may not submit work done with (or by) someone else, or examine or use work done by others to complete your own work. Not all lab assignments will be done with a partner.
You may discuss lab specifications and requirements with others in the class to be sure you understand the problem. In addition, you are allowed to work with others to help learn the course material. However, with the exception of your lab partner, you may not work with others on your lab assignments in any capacity.
All code you submit must be your own with the following permissible exceptions: code distributed by me as part of the class, code found in the course text book, and code worked on with your lab partner. You should always include detailed comments that indicates which parts of the lab you received help on, and what your sources were.
Please see me if there are any questions about what is permissible.
Below are some resources and links which may be helpful to you.