CPSC 323a Introduction to Systems Programming and Computer Organization (Fall 2020)

Class Web Page



Stanley C. Eisenstat, 208 Watson   (432-1246)   <sce@cs.yale.edu>
Office hours (via Zoom): TBA and by appointment   (see https://sce.cs.yale.edu)

Teaching Fellow (Office Hours via Zoom: TBA)

Richard Habeeb

Undergraduate Learning Assistants (Office Hours via Zoom: TBA)



John L. Hennessy and David A. Patterson, Computer Architecture: A Quantitative Approach, 6th edition, Morgan Kaufman, 2017   ( On-line @ Orbis )   ($82.46 @ Amazon)

Neil Matthew and Richard Stones, Beginning Linux Programming, 4th edition, Wrox, 2007   ( on-line @ Orbis )   ($31.66 @ Amazon)   (Second Source)


The class will NOT meet during reading period.

There will be 5 assignments requiring an average of 6-9 hours per week (or an average of 15-25 hours per C assignment, somewhat less per non-C assignment). There will be in-class examinations on Monday, October 12th, and Wednesday, December 2nd.

Homework will constitute ~80% of the final grade; the examinations will constitute the remaining ~20%.


Programs will be submitted electronically and checked using test scripts: a public script, which will generally be available at least one week before the assignment is due; and a more comprehensive private script, which will be used to assign a grade. C programs may also be evaluated for "style".

Late Homework Policy

Programs should be submitted electronically by 2:00 am on the day specified in the assignment. Late work not authorized by a Dean's excuse will be assessed a penalty of 5% per calendar day or part thereof and MAY not be graded at all if more than ten days late or after solutions are released. The submit-times of the sources determine when a program was completed.

Note: If a Dean's excuse would authorize an assignment to be submitted more than ten days late or after solutions are released, then the student MAY be asked to complete an equivalent assignment instead.

Homework/Examination Schedule (tentative)
What  Value  When Due  Spec  Script  Name/Topic
Program #1  60  09/18 (F)  08/31  09/11  fiend
Program #2  50  10/02 (F)  09/16  09/25  TBA
Midterm  10/12 (M)
Program #3  30  10/23 (F)  09/30  10/16  Scripting
Program #4  60  11/13 (F)  10/21  11/06  LZW2020
In-class final  12/02 (W)
Program #5  60  12/11 (F)  11/11  11/04  Shell


Directory:   /home/classes/cs323/*   (handouts; test scripts; other files)
Web Page:   http://zoo.cs.yale.edu/classes/cs323   (handouts; links; within yale.edu domain only)
Newsgroup:   https://sce.cs.yale.edu/News/cs323/index.html   (announcements; responses to e-mail)
Mailing List:   http://mailman.cs.yale.edu/mailman/listinfo/cs323   (home delivery of newsgroup)

Topics Covered/Emphasized (tentative)

Systems programming in a high level language
user-level interfaces to a typical operating system (LINUX)
writing programs (e.g., a shell) that interact with the operating system
Elementary machine architecture / computer organization
computer arithmetic and general structure/organization of machines
approaches to parallelism (vector, SIMD, MIMD, networks)
instruction set architectures (ISAs) and pipelining instruction execution
Operating systems
implications of concurrency and implementation of semaphores
implementation and ramifications of virtual memory and caches
data compression; error detection and correction; computer networks

General Statement on Collaboration

Programming, like composition, is an individual creative process in which you must reach your own understanding of the problem and discover a path to its solution. During this time, discussions with others (including members of the teaching staff) are encouraged. But see the Gilligan's Island Rule below.

However, when the time comes to design the program and write the code, such discussions are no longer appropriate---your solution must be your own personal inspiration (although you may ask members of the teaching staff for help in understanding, designing, writing, and debugging).

Since code reuse is an important part of programming, you may study and/or incorporate published code (e.g., from text books or the Net) in your programs, provided that you give proper attribution in your source code and in your log file and that the bulk of the code submitted is your own. Note: Removing/rewriting comments, renaming functions/variables, or reformatting statements does not convey ownership.

But when you incorporate more than 25 lines of code from a single source, this code (prefaced by a comment identifying the source) must be isolated in a separate file that the rest of your code #include-s or links with. The initial submission of this file should contain only the identifying comment and the original code; revisions may only change types or function/variable names, turn blocks of code into functions, or add comments.

DO NOT UNDER ANY CIRCUMSTANCES COPY SOMEONE ELSE'S CODE OR GIVE A COPY OF YOUR CODE TO SOMEONE ELSE OR OTHERWISE MAKE IT PUBLICLY AVAILABLE---to do so is a clear violation of ethical/academic standards that, when discovered, will be referred to the Executive Committee of Yale College for disciplinary action. Modifying code to conceal copying only compounds the offense.

The Gilligan's Island Rule

When discussing an assignment with anyone other than a member of the teaching staff, you may write on a board or a piece of paper, but you may not keep any written or electronic record of the discussion. Moreover, you must engage in some mind-numbing activity (e.g., watching an episode of Gilligan's Island) before you work on the assignment again. This will ensure that you can reconstruct what you learned, by yourself, using your own brain. The same rule applies to reading books or studying on-line sources.