Fall 2020 CPSC 323a - Introduction to Systems Programming and Computer Organization Instructor ~~~~~~~~~~ Stanley C. Eisenstat, 208 Watson (432-1246) Office hours (via Zoom): TBA & 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) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TBA Textbooks ~~~~~~~~~ John L. Hennessy and David A. Patterson, "Computer Architecture: A Quantitative Approach", 6th edition, Morgan Kaufman, 2017 ($82.46 @ Amazon / on-line @ Orbis) Neil Matthew and Richard Stones, "Beginning Linux Programming", 4th edition, Wrox, 2007 ($31.66 @ Amazon / on-line @ Orbis) Coursework ~~~~~~~~~~ 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%. Grading ~~~~~~~ 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 Purpose (Language) ~~~~ ~~~~~ ~~~~~~~~ ~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~~ Homework #1 60 09/18 (F) 08/31 09/11 fiend Homework #2 60 10/02 (F) 09/16 09/25 TBA Exam #1 10/12 (M) - Homework #3 40 10/23 (F) 09/30 10/16 Scripting (TeX) Homework #4 60 11/13 (F) 10/21 11/06 LZW Exam #2 12/02 (W) - Homework #5 60 12/11 (F) 11/11 11/04 Shell Resources ~~~~~~~~~ Directory: /home/classes/cs323/* (handouts; test scripts; other files) Web Page: http://zoo.cs.yale.edu/classes/cs323 (handouts; links; reachable only within yale.edu domain) 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 (optional; 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 Other 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. CS-323-08/31/20