660 likes | 903 Views
TDC368 UNIX and Network Programming. Week 1: Course Introduction Overview of UNIX Operating Systems Architecture UNIX process concepts. Camelia Zlatea, PhD Email: czlatea@cs.depaul.edu. Overview of UNIX operating system architecture.
E N D
TDC368UNIX and Network Programming Week 1: • Course Introduction • Overview of UNIX Operating Systems Architecture • UNIX process concepts Camelia Zlatea, PhD Email: czlatea@cs.depaul.edu
Overview of UNIX operating system architecture. UNIX process concepts. Process control primitives (fork, exec, exit, wait, waitpid). Filters and I/O Redirection. Interprocess Comunications (IPC): pipes, FIFO's. Asynchronous Events. Signals. Signal Functions (kill, system, sleep, raise, alarm, pause, abort). UNIX system calls: C library functions, C++ classes, POSIX API's. UNIX File System: files, catalogs (inodes; types,size, permissions). UNIX File I/O: unbuffered I/O functions (open ,close,seek,umask,read,write). Standard I/O buffering (fopen, fclose, fflush). File Sharing (dup,dup2,fcntl). Course Outline
Interprocess Communication: Shared Memories, Semaphores, POSIX Semaphores, lock files. Socket API (TCP, UDP). Design Methods for Client/Server Applications UNIX shells. C-shell commands, shell variables. C-Shell Programming. Managing UNIX projects (make). Compilation and Debugging. UNIX shells: I/O redirection, filters(grep, sed), awk. Course Outline (cont.)
Objectives • Upon completion of this course, students • will understand the fundamental concepts of UNIX operating system and use them to create various multitasking applications. • Will be familiar with UNIX programming environment, system call interface, ANSI C and ANSI/ISO C++ functions and classes • Will be familiar with Client/Server methods and Socket APIs • Will be proficient in UNIX shell programming
Prerequisites • CSC 309 • Basic understanding of operating systems and programming techniques • C/C++ will be used to illustrate the concepts presented in the lecture material and for the implementation of the programming assignments and the project.
Dave Curry, UNIX Systems Programming for SVR4, O'Reilly & Assoc., Sebastopol, CA, 1996. W. Richard Stevens, UNIX Network Programming - Interprocess Communication, Volume 2, Second Edition, Prentice Hall PTR, Upper Saddle River, NJ, 1999. W. Richard Stevens, Advanced Programming in the UNIX Environment, Addison-Wesley, Reading, MA, 1992. John Shapley Gray, Interprocess Communications in Unix, The Nooks & Crannies, 2nd ed. Prentice Hall PTR, NJ, 1998. HP-UX man pages http://docs.hp.com/hpux/onlinedocs/B2355-90682/B2355-90682.html (system calls) Texts
Daniel Gilly, Unix in a Nutshell, O'Reilly and Associates, Inc., Sebastopol, CA, 1992. K.A.Robbins and S. Robbins, Practical UNIX Programming - A Guide to Concurrency, Communication, and Multithreading , Prentice Hall PTR, NJ, 1996 Ellie Quingley, UNIX Shells by Example, Prentice Hall PTR, NJ, 1997 Prabhat K. Andleigh, UNIX System Architecture, Prentice-Hall, Englewood Cliffs, NJ, 1990. Andrew Oran and Steve Talbot, Managing Projects with make, O'Reilly and Associates, Inc., Sebastopol, CA, 1991. Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, Second Edition, Prentice-Hall, Englewood Cliffs, NJ, 1989. Other References
Programming Environment • All students will get an account on hawk.depaul.edu server (running HP-UX). • Optional, you can use Linux system • Project submissions via COL (dlweb.cti.depaul.edu ) • use Submit Assignments link • Grading will be done on HP-UX or Linux • An experimental report is required for each programming project • The the report should include the program design description and the test cases and test scenarios for the application.
TDC368 – Network Programming Instructor: Camelia Zlatea, PhD Office Hours: T 4:45-5:45PM; 9:00-9:30PM Where: Rm. 429, ext. x26149 (during office hours) or leave a message to setup a conference: +630-979-3621 Email: czlatea@cs.depaul.edu Web: http://condor.depaul.edu/~czlatea/TDC368/(*) Note: • In addition, course materials will be available from dlweb.cti.depaul.edu
Class Communication • COL (dlweb.cti.depaul.edu) will be used primarily for: • Links to course materials/assignments • Grades • Announcements • Email/Communication • Newsgroup • Asking questions • Send me an email at czlatea@cs.depaul.edu OR • Use dlweb.cti.depaul.edu and post questions to class forum • Anybody may reply (including your classmates) • Everyone benefits from common issues
1969, Ken Thompson, Bell-Labs. UNIX OS written in Assembly on PDP-7 (DEC) 1973, K.Thompson&D.Richie UNIX re-written in C 1975, Bell-Labs. offered UNIX to educational institutions, at minimal cost UNIX - Brief History
Portability Multi-process architecture (multitasking) Multi-user capability Ability to initiate asynchronous processes A hierarchical file system Device independent I/O operations User interface: Shell; selectable per user basis UNIX Features
AT&T UNIX version V 1983 /SV, 1986 /SVR3.0 AT&T and Sun Microsystems 1988 /SVR4.0 - tries to unify Berkeley UNIX & other Berkeley UNIX, CSRG at U. of California BSD (Berkeley Software Distribution) UNIX Major Versions
System V Interface Definition (SVID), AT&T Portable Operating System Interface for Computer Environments (POSIX), based on SVID, IEEE ANSI C, American National Standard Institute ANSI/ISO C++ Standard (draft) UNIX Standards
Solaris - Sun Microsystems SunOS (later called Solaris), Solaris 2.x based on SVR4 HP-UX, Hewlett-Packard, SVR2 Linux, Linus Torvalds, free distribution, PC-based AIX, IBM, similar to SVR4 IRIX, Silicon Graphics, SVR4 UNIX Implementations
UNIX-like same facilities as SV, does not use entirely the same code Mach (CMU), kernel is based on OO model server Next (implementation inspired by Mach with MacOS UI) UNIX-alike portability is no longer supported attributes not compliant with SV or BSD OS/9(MicroWare, Motorola 680xx, RT kernel) QNX(Quantum Software, Intel, RT processing) UNIX Implementations
UNIX Architectural Overview Applications Network Applications DBMS Utilities Shell’s Executable Programs Commands pipe, filters System Calls Interface Kernel UNIX Hardware Architecture
Portability Multi-process architecture (multitasking) Multi-user capability Ability to initiate asynchronous processes A hierarchical file system Device independent I/O operations User interface: Shell; selectable per user basis UNIX Features
Multi-process/Multi-user architecture • Virtual Machine • timesharing OS • process, process quantum, process states • Kernel, base OS • manages all HW dependent functions • users have no direct access to it • System Calls Interface • service routine performing user requests
A process may create sub-processes fork(); A process may terminate exit(); A process may put itself to sleep temporarily sleep(20); pause(); wait(); Processes synchronization mechanisms communication mechanisms UNIX Processes
Multiple Processes - concurrency at OS level Multiple Threads - concurrency at process level thread = flow of control in a process multiple threads (stream of instructions) are executed within the same process threads share code & data (address space) threads have their own execution stack, PC, register set and states context switches are avoided efficient mapping on multi-processor machines UNIX Threads
Some Unix Terms • TRAP INSTRUCTION • switches a system call from user to kernel mode • handles error conditions • synchronous execution • Ex: division by zero/overflow • INTERRUPT • used by peripherals to request services from the devices handles • asynchronous execution • SIGNALS software notification of an event • example: • when typing “ctrl-c” an interrupt is generated for the keyboard driver, which notifies the process by sending a signal
UNIX Kernel - model User Space User Processes System Call Interface (Library Routines) Process Memory File System I/O Services Mgmt. Mgmt. Kernel Space Scheduler Device Drivers I/O Buffers Hardware
Apps./Utilities System Calls UNIX KERNEL Hardware Interrupts Hardware
Process representation, scheduling, dispatching Memory allocation and de-allocation Interrupt handling Low level device control Disk Mgmt., data buffering Process synchronization and IPC UNIX Kernel - low level
Maps user-level requests with device driver actions A user system call is translated to a call of the kernel routine, providing that requested service Type of Services: process creation and termination I/O services UNIX file system services terminal handling services Kernel - services level
User program: system(“ps -e”); System calls actions: fork(); //process creation service execl(“/bin/ps”, “ps -e”); //code execution Kernel - services level
A user mode process is translated into a protected kernel mode process Now, program can call kernel routines System Call Interface level
User processes running: shells Unix commands utilities application programs User Processes level
UNIX and POSIX API Library Functions ANSI C Standard ANSI/ISO C++ Standard UNIX Standards
UNIX and POSIX API • UNIX API - system calls • UNIX API are called by • C library functions and • C++ standard classes Example: iostream class • Program confirms POSIX.1? #define _POSIX_SOURCE or % CC -D_POSIX_SOURCE *.C
UNIX and POSIX API • API set to perform: • determine system configuration and user information • file management • process creation and management • inter-process communication • network communication
UNIX and POSIX API User Process (User Mode of Execution) an API is invoked API execution completed UNIX API’s level Kernel mode of execution API executed in protected mode
Context Switch from user to kernel mode more overhead than library functions, for the same task I/O lib.functions are buffered UNIX and POSIX API
UNIX and POSIX API • UNIX API - system calls • UNIX API are called by • C library functions and • C++ standard classes Example: iostream class • Program confirms POSIX.1? #define _POSIX_SOURCE or % CC -D_POSIX_SOURCE *.C
Development elements: Headers <unistd.h> <sys> (/usr/include/sys directory) <stdio.h> function perror - system diagnostic message for an API execution failure Object Code libc.a and libc.so (on most systems) other special libraries, libsocket.a and libsocket.so UNIX and POSIX API
#include <stdio.h> void perror(const char *s); #include <errno.h> int errno; #include <string.h> char *strerror(int errnum); UNIX and POSIX API
Library of functions object code of the functions stored in archives (library files) run-time library routines UNIX archive ar utility manage library files. Displaying the table of contents of the standard library: ar -t /usr/lib/libc.a Library Functions
Standard C library functions: memory management get system information get/set time information data conversion, processing Advantages: portability maintainability cost effective for application design Disadvantages: duration of execution weak support for time-critical apps. ANSI C Standard
Header files directory: /usr/include Header files: - <stdio.h> - <stdlib.h> - <string.h> - <memory.h> - <malloc.h> - <time.h> - <assert.h> - <stdarg.h> - <getopt.h> - <setjmp.h> Object code directory: /usr/lib libc.a , libc.so Standard C library functions
<stdio.h> - declares FILE data type functions/macros -manage stream files open/close stream files: fopen/fclose read/write block data: fread/fwrite read/write lines: fgets/fputs write formatted data: fprintf positions/returns stream file location:fseek/ftell macros: feof, ferror unnamed pipes: popen/pclose Standard C library functions
#include <stdio.h> int main() { /* execute the command */ FILE *cmd = popen(“ls -l|grep tdc368”,”r”); if (!cmd) { perror(“popen”); return 1; } char answer[256]; /* read grep process execution output */ while(fgets(answer, sizeof(answer),cmd)) fputs(answer, stdout); /* echo */ pclose(cmd); return 0; } Example: ls -l|grep tdc368
<stdlib.h> - declares set of functions for data conversions, get/set env. variables, shell command execution, process termination atoi, atof, atol, strtod, strtol rand, srand getenv, putenv system exit Standard C library functions
#include <stdlib.h> int main() { /* execute the command */ if (system(“ls -l|grep tdc368”)== -1) { perror(“system”); return 1; } return 0; } Example: ls -l|grep tdc368
#include <iostream.h> #include <stdlib.h> int main() { char *env = getenv(“REMOTEHOST”); cout << “\REMOTEHOST\” is:”<<env<<‘\n’; if (putenv(“CC=c++”)) cer<<“putenv of CC failed\n”); return 0; } Example: getenv/putenv
//C style char* adr1 = (char *)malloc(4096); free(adr1); //C++ style , no use of malloc ! char* adr2 = new char[4096]; delete adr2; Example: <malloc.h>
<time.h> - declares set of functions for system clock query time - #sec since 01/01/70 (UNIX birth) ctime - current local time localtime gmtime asctime mktime clock - (ANSI C) , #microsec since the process first called clock Standard C library functions
// evaluate process execution time #include <iostream.h> #include <time.h> main() { time_t tick = CLOCKS_PER_SECOND; clock_t start_time = clock(); // start timer /* process code here */ clock_t duration = clock() - start_time; cout <<“Duration:”<<(duration/tick)<<endl; } Example: <time.h>
<assert.h> - declares a macro to assert conditions or invariants of the program easier program debugging compiler option -DNDEBUG take them out or #ifndef NDEBUG #define assert(p) {if (!(p)) {\ fprintf(stderr,”Assertion failed: \ file:\”%s\”,line %d\n”,\ _FILE_, _LINE_); exit(1); } #endif Standard C library functions