Description
This course is designed for sophomore CS-major students and serves as the introduction system-level course. In this course, students will learn how to write the programs using system services in Unix-like systems. The following are the goals of this course.
1. To be familiar with the UNIX-like systems.
It means to know how to make use of many tools/services provided by the system: commands, library calls or system calls. It also means that you understand the model of computation that Unix presents.
2. To become good system programmers.
It means that you should know how to write a descent C program in Unix/Linux as the semester is over. However, this course should not limit yourself in writing system programs in Unix/Linux. The learning process that you will have in this course should teach you how to program in any other operating systems which you might use later in your career.
The topics covered in this course include:
- Course Overview
- Basic OS Concepts
- Unix History, Standardization & Implementation
- File Input and Output
- Standard I/O Library
- Files and Directories
- System Data Files and Information (optional)
- Environment of a Unix Process
- Process Control
- Process Relationships
- Signals
- Inter-process Communication
- Thread Programming
- Networking (optional)
-
Pu-Jen Cheng -
Email: pjcheng@csie.ntu.edu.tw -
Homepage: http://www.csie.ntu.edu.tw/~pjcheng -
Office hours: R218, 9:30 am ~ 11:30 am, Tuesday (make appointments first)
Prerequisites
Textbook:
- Advanced Programming in the Unix Environment, 3rd Edition, by Richard Stevens and Steven A Rago, Addison-Wesley, 2013
References:
- Understanding UNIX/LINUX Programming: A Guide to Theory and Practice, by Bruce Molay, Prentice Hall, 2002.
- The Art of Unix Programming, by Eric S. Raymond.
- Managing Projects with make, by Andrew Oram and Steve Talbott, 1991.
- Assignments (40%):
Programming (32%)+Hand-written (8%)
- Midterm Exam (30%)
- Final Exam (30%)