CS-701 Software Design

Section E4MBA (2832) - Dr. Vickery

Spring 2003

Course Administration

Information about textbooks, grading policies, and office hours.

Coding Guidelines for This Course

Every programming assignment you submit for this course must be written in accordance with these coding guidelines. Study them carefully!

Check Grades

You can check the grades I have recorded for you throughout the semester by clicking the above link. You will have to enter the "codeword" you supplied me as part of your first assignment.

Course Schedule

The course does not have a rigid structure, and varies in content from semester to semester. The sections of the table below that have a green background are accurate, but the sections that have a red background are tentative and/or incomplete. The red sections will become green as the semester progresses.

Date Topics Assignments
1 January 27 Course Introduction: Objectives, Unix, Open Source, Tool Chains. The Unix command line. Read Das Chapters 1-4 or equivalent to become familiar with using the Unix command line.
2 January 29 Unix command lines: I/O Redirection; job control; environment variables. Assignment 1 Due
Read Harbison and Steele, Chapter 5.
3 February 3 The g++ compiler driver and some of its options. Read Stevens, Chapters 1-4.
4 February 5 Unix processes and the context in which they run.
Memory segments: text, data, stack, heap.
Read Stevens, Chapter 7.
5 February 10 Arrays and pointers. Environment variables. Re-read Stevens Chapters 3 and 4
  February 12 No Class (Lincoln's Birthday)
  February 17 No Class (President's Day)
6 February 19 Environment variables.
Java Native Interface (JNI)
Option Processing.
Assignment 2 Due
JNI Tutorial
7 February 24 Project Management:
Using Make and RCS
Using RCS Web Page
Using Make Web Page
8 February 26 Make and RCS continued.
Make variables: Pattern substitution. Defining in Makefile, on make command line, or from environment variables.
Using Java Web Page
9 March 3 RCS operations.  
10 March 5 Shell algorithm: read, parse, alias substitution, environment variable substitution, pattern matching. Introduction to fork() and exec(): Library vs. Kernel calls..  
11 March 10 Makefile design: Using variables, phony targets, and long dependency chains. Stevens, Chapter 8
12 March 12 Processes, subshells, fork(). Assignment 3 Due
Sample Solution
13 March 17 Review for Exam. fork()  
14 March 19 *** Midterm Exam ***
15 March 24 Shell processing. exec()  
  March 26 *** Last Day to Drop ***
16 March 26 Kernel and library function errors. perror(), errno, strerror(). Code for perror()
(Replaces wrong code given in lecture.)
17 March 31 Function pointers: Intercepting calls to malloc() and free(); Using the atexit() facility; Implementing a dispatch table for shell built-in commands. Malloc/Free Manager
Optional Exercise (not for credit): Add realloc() processing to the sample Malloc/Free Manager package. Write an application that tests the entire package.
18 April 2    
19 April 7    
20 April 9    
21 April 14    
22 April 15
  Assignment 4 Due
  April 16 through April 24 *** Spring Break ***
23 April 28 Introduction to select(). Logic flow for jsh with persistent JVM.  
24 April 30 Use poll() to wait for input from multiple fds simultaneously (sample code). Blocking when reading; reading does not preserve message boundaries when reading from pipes, sockets, or other byte stream sources.  
25 May 5 Terminal I/O. The termios struct; canonical and raw modes. Sample Code
26 May 7 Recognizing whether commands come from a tty or a file and adjusting the program's behavior appropriately. Using the access() function to check whether a file is executable before creating a new process and trying a call to exec(). Managing user-defined variables such as PATH.  
27 May 12 Review of Makefile design issues. Project 5 design issues.  
28 May 14 IPC between jsh and jvm processes by redirecting stdin, stdout, and stderr of the jvm process to pipes. Using dup2() in this context.  
  May 21 *** Final Exam ***
  May 23   Assignment 5 Due

Valid CSS! Valid HTML 4.0!