1 system programming chapters 1 & 2. 2 unix history developed in the late 1960s and 1970s at...
TRANSCRIPT
![Page 1: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/1.jpg)
1
System Programming
Chapters 1 & 2
![Page 2: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/2.jpg)
2
UNIX History• Developed in the late 1960s and 1970s at Bell Labs• UNICS – a pun MULTICS (Multiplexed Information and
Computer Service) which was supposed to support 1000 on line users but only handled a few (barely 3). (MULTI-UNiplexed).
• Thomson writes first version of UNICS in assembler for a PDF-7 in one MONTH which contains a new type of file system: kernel, shell, editor and the assembler (one week).
• 1969 Thomson writes interpretive B based on BCPL --Ritchie improves on B and called it “C”
• 1972 UNIX is re-written in C to facilitate porting
![Page 3: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/3.jpg)
3
UNIX History (cont)
• 1973 UNIX philosophy developed:– Write programs that do one thing and do
it well– Write programs that work together– Write programs that handle text
streams, because that is the universal interface
![Page 4: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/4.jpg)
4
UNIXBerkleySoftwareDistributions
Bell LabsResearch
UNIX System Laboratories(USG/USDL/ATTIS/DSG/USO/USL)
1BSD,…,4.0BSD
4.3BSD4.3BSD Tahoe4.3BSD Reno4.4BSD
SUNOSSolarisSolaris 2
Mach
First Edition
Sixth EditionSeventh Edition
XENIXSystem VRelease 2,3
UNIXSystem VRelease 4
Chorus
* POSIX.1 (IEEE, ISO) standard!
![Page 5: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/5.jpg)
5
UNIX Today
• Supports many users running many programs at the same time, all sharing the same computer system
• Information Sharing (which is Ken’s original goal in 1969.)
• Geared towards facilitating the job of creating new programs
• UNIX system– Sun: SunOS
• UNIX-Compatible systems– Solaris; SGI: IRIX; Free BSD; Hewlett Packard:
HP-UX; Apple: OS X (Darwin) GNU: Linux;
![Page 6: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/6.jpg)
6
UNIX Architecture
terminal controller, terminals, physical memory, device controller, devices such as disks, memory, etc.
CPU scheduling, signal handling, virtual memory, paging, swapping,file system, disk drivers, caching/buffering, etc.
Shells, compilers, X, application programs, etc.
UNIX
Kernel interfaceto the hardware
System callinterface
useruseruseruseruseruseruser
Userinterface
![Page 7: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/7.jpg)
7
Introduction
• Objective– Briefly describe services provided by various versio
ns of the UNIX operating system.• Logging In
– /etc/passwd – local machine or NIS DB• root:x:0:1:Super-User:/root:/bin/tcsh• Login-name, encrypted passwd, numeric user-ID, numeric
group ID, comment, home dir, shell program– /etc/shadow – with “x” indicated for passwd
![Page 8: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/8.jpg)
8
Introduction
• Shell– Command interpreters
• Built-in commands, e.g., umask• (External) commands, e.g., ls
forkshellprocess
wait
shellprocess
execve() exit
zombie process
child process
![Page 9: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/9.jpg)
9
Introduction
• Shells– Bourne shell, /bin/sh
• Steve Bourne at Bell Labs– C shell, /bin/csh
• Bill Jay at Berkeley– Command-line editing, history, job-control, etc
– KornShell. /bin/ksh• David Korn (successor of Bourne shell)• Command-line editing, job-control, etc
– .cshrc
![Page 10: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/10.jpg)
10
Introduction
• Filesystem– A hierarchical arrangement of directories and files – starting i
n root /• File
– No / or null char in filenames– . and ..– BSD: 255-char filenames (14 in the past)– Attributes – stat()
• Type, size, owner, permissions, modification/access time, etc.• Directory
– Files with directory entries, e.g., { (filenames, inode) }
![Page 11: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/11.jpg)
11
Introduction – Files and Dir
• File– A sequence of bytes
• Directory– A file that includes info on how to find other
files.
vmunix
/
dev
console lp0 …
bin
csh …
lib
libc.a …
usr
include …
etc
passwd …
* Use command “mount” to show all mounted file systems!
![Page 12: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/12.jpg)
12
Introduction
• Path name– Absolute path name
• Start at the root / of the file system• /user/john/fileA
– Relative path name• Start at the “current directory” which is an attribute of the process
accessing the path name.• ./dirA/fileB
• Links– Symbolic Link – 4.3BSD
• A file containing the path name of another file can cross file-system boundaries. (home/prof/cshih>ln –s ../cshih cshih-test)
– Hard Link• . or ..
![Page 13: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/13.jpg)
13
Introduction
• Directories– /vmunix - binary root image of UNIX– /dev - device special files, e.g., /dev/console– /bin - binaries of UNIX system programs
• /usr/ucb - written by Berkley instead of AT&T• /usr/local/bin - written at the local site
– /lib - library files, e.g., those for C– /user - directories for users, e.g., /user/john– /etc - administrative files and programs, e.g.,
passwd– /tmp - temporary files
![Page 14: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/14.jpg)
14
Introduction
• Program 1.1 – Page 5– List all the files in a directory
• Note– “apue.h”, err_sys() and err_quit() in Appen
dix B– opendir(), readdir(), closedir()
• No ordering of directory entries• Working directory
– Goes with each process• Home Directory
![Page 15: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/15.jpg)
15
Introduction – Input/Output• Operations
– open, close, read, write, truncate, lseek, dup, rename, chmod, chown, fcntl, ioctl, mkdir, cd, opendir, readdir, closedir, etc.
• File descriptor
Read(4, …)
Tables ofOpened Files(per process)
SystemOpen FileTable
In-corei-node list
i-nodei-nodei-nodesync
data blockdata block
![Page 16: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/16.jpg)
16
Introduction
• File descriptor– Standard input (stdin), standard output (stdout), standard err
or (stderr)– Connected to the terminal if nothing special is done.
• I/O redirection– ls > file.list
• Unbuffered I/O: open, close, read, write, lseek– Program 1.2 – Page 8– Copies of stdin to stdout– STDIN_FILENO, STDOUT_FILENO in <unistd.h> , POSIX.1– ls | a.out > datafile
![Page 17: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/17.jpg)
17
Introduction
• Advantages of standard I/O functions such as fgets() and printf()– No need to worry about the optimal block size – a b
uffered interface– Handling of line input
• Misc.– <stdio.h>– Figure 1.5 – Page 9
• Copy stdin to stdout using standard I/O
![Page 18: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/18.jpg)
18
Introduction
• Programs and Processes– Program – an executable file residing in a di
sk file– exec(), etc.– Process – an executing instance of a progra
m• Unique Process ID• Figure 1.6 – Page 11
– Print process ID // getpid()
![Page 19: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/19.jpg)
19
Introduction
• Process Control– Three primary functions: fork(), exec(), waitpid()– Figure 1.7 – Page 12
• Read commands from stdin and execute them
• Note– End-of-file: ^D– fork(), execlp(), waitpid()– No parsing of the input line– execlp(file, arg0 , …, argn, (char *) 0)
• If file does not contain a slash character, the path prefix for this file is obtained by a search of the directories passed in the PATH environment variable.
![Page 20: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/20.jpg)
20
Introduction
• ANSI C Features– Function Prototypes
• ssize_t read(int, void *, size_t);• void *malloc(size_t)
– Generic Pointers• void * - avoid type casting
– Primitive System Data Types• ssize_t, pid_t, etc.• <sys/types.h> included in <unistd.h>• Prevent programs from using specific data types – each impleme
ntation choose its proper data types by “typedef”!
![Page 21: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/21.jpg)
21
Introduction
• Error Handling– errno in <errno.h> (sys/errno.h)
• E.g., 15 error numbers for open()• #define ENOTTY 25 /* Inappropriate ioctl for device */• Never cleared if no error occurs• No value 0 for any error number
• Functions– char *strerror (int errnum) (<string.h>)– void perror(const char *msg) (<stdio.h>)
• Figure 1.8 – Page 15 – demo perror and strerror
![Page 22: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/22.jpg)
22
Introduction
• UNIX – A Layer Architecture– System Calls
• Programmer Interface to UNIX• Trap 40 – VAX 4.2BSD• R0 – error code
– Categories• File Manipulation
– Devices are special files under “/dev”!
• Process Control• Information Manipulation
![Page 23: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/23.jpg)
23
Introduction
• User Identification– Numeric value in /etc/passwd
• 0 for root/superuser– Unchangeable and for access permission control
• Group ID– Numeric value in /etc/passwd– /etc/group
• Supplementary Group ID’s– /etc/group (4.2BSD allows 16 additional groups.)– adm::4:root,adm,daemo
• “ls –l” uses /etc/passwd and /etc/group
![Page 24: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/24.jpg)
24
Introduction
• Signals– To notify a process that some condition has occurred
• Action– Ignore the signal– Execute the default action
• E.g., for SIGFPE (divided by zero)
– Provide a function
• Signal Generation– Terminal keys (^c ~> SIGINT), kill – owner-only
• Program 1.8 – Page 19– Read commands and exec + signal SIGINT
![Page 25: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/25.jpg)
25
Introduction
• Time Values– Calendar time
• In seconds since the Epoch (00:00:00 January 1, 1970, Coordinated Universal Time, i.e., UTC)
• type time_t – Process time
• In clock ticks (divided by CLK_TCK -> secs)• type clock_t • Clock time, user/system CPU time
> time grep _POSIX_SOURCE */*.h > /dev/null0.25u 0.25s 0:03.51 14.2%
![Page 26: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/26.jpg)
26
Introduction
• System Calls vs Library Functions– System Calls
• 50 for Unix Ver 7, 110 for 4.3+BSD, 120 for SVR4– Unix Technique
• Same function names for system calls• Differences
– Fixed set, more elaborate functionality• malloc() calls sbrk() better allocated space management• gmtime() calls time() seconds into broken-down time!• fgets() calls read() unbuffered I/O -> buffered I/O
• Misc– Process control: fork(), exec(), wait() invoked directly from ap
plication code (vs system()).
![Page 27: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/27.jpg)
27
Contents
1. Preface/Introduction2. Standardization and Implementation3. File I/O4. Standard I/O Library5. Files and Directories6. System Data Files and Information7. Environment of a Unix Process8. Process Control9. Signals10.Inter-process Communication
![Page 28: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/28.jpg)
28
Ariane 5• An European rocket designed to launch commercial p
ayloads (e.g. communications satellites, etc.) into Earth orbit.
• Successor to the successful Ariane 4 launchers.• Ariane 5 can carry a heavier payload than Ariane 4.• On June 4th, 1996, Flight 501 was launched.• Approximately 37 seconds after a successful lift-off, th
e Ariane 5 launcher lost control.
![Page 29: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/29.jpg)
29
Flight 501 Failure
• The attitude and trajectory of the rocket are measured by a computer-based inertial reference system. This transmits commands to the engines to maintain attitude and direction.
• The software failed and this system and the backup system shut down.
• Diagnostic commands were transmitted to the engines which interpreted them as real data and which swiveled to an extreme position resulting in unforeseen stresses on the rocket.
![Page 30: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/30.jpg)
30
What Causes the Failure?
• Software failure occurred when an attempt to convert a 64-bit floating point number to a signed 16-bit integer caused the number to overflow.
• Why not Ariane 4?– The physical characteristics of Ariane 4 (A smaller vehi
cle) are such that it has a lower initial acceleration and build up of horizontal velocity than Ariane 5.)
– The value of the variable on Ariane 4 could never reach a level that caused overflow during the launch period.
![Page 31: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/31.jpg)
31
What Lesson Can We Learn?
• While porting one software from one platform to another platform, we have to keep our eyes on the platform assumption and capabilities.
• Software reliability cannot be sacrificed.– Exact copy of the failure software was used as
the backup copy.– Exception handler was removed to save the
computation power, which is a rare resource on space mission.
• How do you make sure your program functions correctly from one Unix platform to another Unix platform?
![Page 32: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/32.jpg)
32
Standardization and Implementation
• Why Standardization?– Proliferation of UNIX versions
• What should be done?– The specifications of limits that each
implementation must define!
![Page 33: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/33.jpg)
33
UNIX Standardization
• ANSI C– American National Standards Institute – ISO/IEC 9899:1990
• International Organization for Standardization (ISO)
• Syntax/Semantics of C, a standard library
– Purpose:• Provide portability of conforming C programs
to a wide variety of OS’s.
– 15 areas: Fig 2.1 – Page 27
![Page 34: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/34.jpg)
34
UNIX Standardization
• ANSIC C– <assert.h> - verify program assertion– <ctype.h> - char types– <errno.h> - error codes– <float.h> - float point constants– <limits.h> - implementation constants– <locale.h> - locale catalogs– <math.h> - mathematical constants– <setjmp.h> - nonlocal goto– <signal.h> - signals– <stdarg.h> - variable argument lists– <stddef.h> - standard definitions– <stdio.h> - standard library– <stdlib.h> - utilities functions– <string.h> - string operations– <time.h> - time and date
![Page 35: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/35.jpg)
35
UNIX Standardization
• POSIX.1 (Portable Operating System Interface) developed by IEEE– Not restricted for Unix-like systems and no distincti
on for system calls and library functions– Originally IEEE Standard 1003.1-1988– 1003.2: shells and utilities, 1003.7: system administ
rator, > 15 other communities– Published as IEEE std 1003.1-1990, ISO/IEC9945-1:1
990– New: the inclusion of symbolic links– No superuser notion
![Page 36: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/36.jpg)
36
UNIX Standardization
• POSIX.1– <cpio.h> - cpio archive val
ues– <dirent.h> - directory entr
ies– <fcntl.h> - file control– <grp.h> - group file– <pwd.h> - passwd file– <tar.h> tar archieve value
s– <termios.h> - terminal I/O
– <unistd.h> - symbolic constants
– <utime.h> file times– <sys/stat.h> - file status– <sys/times.h> - process ti
mes– <sys/types.h> - primitive s
ystem data types– <sys/utsname.h> - system
name– <sys/wait.h> - process con
trol
![Page 37: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/37.jpg)
37
UNIX Standardization
• X/Open– An international group of computer vendors– Volume 2 of X/Open Portability Guide, Issue 3
(XPG3)• XSI System Interface and Headers• Based on IEEE Std. 1003.1 – 1988 (text displaying in
different languages)• Built on the draft of ANSI C
– Some are out-of-date.
– Solaris 2.4 – compliance to XPG4V2• man xpg4
![Page 38: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/38.jpg)
38
UNIX Standardization
• FIPS (Federal Information Processing Standard) 151-1– IEEE Std. 1003.1-1988 & ANSI C– For the procurement of computers by the US gover
nment.– Required Features:
• JOB_CONTROL, SAVED_ID, NO_TRUNC, CHOWN_RESTRICTED, VDISIBLE,• NGROUP_MAX >= 8, Group Ids of new files and dir be equal to their paren
t dir, env var HOME and LOGNAME defined for a login shell, interrupted read/write functions return the number of transferred bytes.
![Page 39: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/39.jpg)
39
UNIX ImplementationBerkleySoftwareDistributions
Bell LabsResearch
UNIX System Laboratories(USG/USDL/ATTIS/DSG/USO/USL)
1BSD,…,4.0BSD
4.3BSD4.3BSD Tahoe4.3BSD Reno4.4BSD
SUNOSSolarisSolaris 2
Mach
First Edition
Sixth Edition (1976)Seventh Edition (1979)
XENIXSystem VRelease 2,3
UNIXSystem VRelease 4
Chorus
* POSIX.1 (IEEE, ISO) standard!
![Page 40: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/40.jpg)
40
UNIX Implementation
• System V Release 4 - 1989– POSIX 1003.1 & X/Open XPG3– Merging of SVR3.2, SunOS, 4.3BSD, Xenix– SVID (System V Interface Definition)
• Issue 3 specifies the functionality qualified for SVR4.
– Containing of a Berkley compatibility library• For 4.3BSD counterparts
![Page 41: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/41.jpg)
41
UNIX Implementation
• 4.2BSD - 1983– DARPA (Defense Advanced Research Projects Agency) wanted a
standard research operating systems for the VAX.– Networking support - remote login, file transfer (ftp), etc.
Support for a wide range of hardware devices, e.g., 10Mbps Ethernet.
– Higher-speed file system.– Revised virtual memory to support processes with large
sparse address space (not part of the release).– Inter-process-communication facilities.
![Page 42: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/42.jpg)
42
UNIX Implementation
• 4.3 BSD - 1986– Improvement of 4.2 BSD
• Loss of performance because of many new facilities in 4.2 BSD.
• Bug fixing, e.g., TCP/IP implementation.• New facilities such as TCP/IP subnet and routing support.
– Backward compatibility with 4.2 BSD.– Second Version - 4.3 BSD Tahoe
• support machines beside VAX
– Third Version - 4.3 BSD Reno• freely redistributable implementation of NFS, etc.
![Page 43: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/43.jpg)
43
UNIX Implementation
• 4.4 BSD - 1992– POSIX compatibility– Deficiencies remedy of 4.3 BSD
• Support for numerous architectures such as 68K, SPARC, MIPS, PC.
• New virtual memory better for large memory and less dependent on VAX architecture – Mach.
• TCP/IP performance improvement and implementation of new network protocols.
• Support of an object-oriented interface for numerous filesystem types, e.g., SUN NFS.
![Page 44: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/44.jpg)
44
UNIX Implementation - Major UCB CSRG Distributions
• Major new facilities:– 3BSD, 4.0BSD, 4.2BSD, 4.4 BSD
• Bug fixes and efficiency improvement:– 4.1 BSD, 4.3BSD
• BSD Networking Software, Release 1.0 (from 4.3BSD Tahoe, 1989), 2.0 (from 4.3BSD Reno, 1991)
• Remark: – Standards define a subset of any actual system –
compliance and compatibility
![Page 45: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/45.jpg)
45
Limits – ANSI C, POSIX, XPG3, FIPS 151-1
• Compiler-time options and limits (headers)– Job control?– Largest value of a short?
• Run-time limits related to file/dir– pathconf and fpathconf, e.g., the max # of bytes in
a filename• Run-time limits not related to file/dir
– sysconf, e.g., the max # of opened files per process• Remark: implementation-related
![Page 46: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/46.jpg)
46
ANSI C Limits
• All compile-time limits - <limits.h>– Minimum acceptable values
• E.g., CHAR_BIT, INT_MAX– Implementation-related
• char (limits.h), float (FLT_MAX in float.h) • open (FOPEN_MAX & TMP_MAX in stdio.h)#if defined(_CHAR_IS_SIGNED)#define CHAR_MAX SCHAR_MAX #elif defined(_CHAR_IS_UNSIGNED)#define CHAR_MAX UCHAR_MAX
![Page 47: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/47.jpg)
47
POSIX Limits
• 33 limits and constants– Invariant minimum values (POSIX defined in Figure 2.3 –
Page 33, limits.h)– Corresponding implementation (limits.h)
• Invariant SSIZE_MAX• Run-time increasable value NGROUP_MAX• Run-time invariant values, e.g., CHILD_MAX• Pathname variable values, e.g., LINK_MAX
– Compile-time symbolic constants, e.g., _POSIX_JOB_CONTROL
– Execution-time symbolic constants, e.g., _POSIX_CHOWN_RESTRICTED
– Obsolete constant: CLK_TCK
![Page 48: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/48.jpg)
48
POSIX Limits
• Limitation of POSIX– E.g., _POSIX_OPEN_MAX in <limits.h>– sysconf(), pathconf(), fpathconf() at run-time– Possibly indeterminate from some
• E.g., OPEN_MAX under SVR4
![Page 49: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/49.jpg)
49
XPG3 Limits
• 7 constants in <limits.h> - invariant minimum values called by POSIX.1– Dealing with message catalogs
• NL_MSGMAX – 32767
• PASS_MAX– <limits.h>
• Run-time invariant value called by POSIX.1– sysconf()
![Page 50: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/50.jpg)
50
Run-Time Limits
• #include <unistd.h> (Figure 2.7 – Page 40: compile/run time limits)
• long sysconf(int name);– _SC_CHILD_MAX, _SC_OPEN_MAX, etc.
• long pathconf(const char *pathname, int name);• long fpathconf(int *filedes, int name);
– _PC_LINK_MAX, _PC_PATH_MAX, _PC_PIPE_BUF, _PC_NAME_MAX, etc.
• Various names and restrictions on arguments (Page 35 and Figure 2.5)
• Return –1 and set errno if any error occurs.– EINVAL if the name is incorrect.
![Page 51: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/51.jpg)
51
Run-Time Limits
• Example Program 2.1 – Page 38– Print sysconf and pathconf valuesb (Fig 2.6 – Page 39)
Limit SunOS4.1.1 SVR4 4.3+BSDCHILD_MAX 133 30 40OPEN_MAX 64 64 64LINK_MAX 32767 1000 32767NAME_MAX 255 14/255 255_POSIX_NO_TRUC 1 nodef/1 1
![Page 52: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/52.jpg)
52
Indeterminate Run-Time Limits –Two Cases
• Pathname– 4.3BSD: MAXPATHLEN in <sys/param.h>, PATH_MAX in <limits.
h>– Program 2.2 – Page 42
• Allocate space for a pathname vs getcwd• _PC_PATH_MAX is for relative pathnames
• Max # of Open Files – POSIX run-time invariant– NOFILE (<sys/param.h>), _NFILE (stdio.h>)– sysconf(_SC_OPEN_MAX) – POSIX.1
• getrlimit() & setrlimit() for SVR4 & 4.3+BSD– Program 2.3 – Page 43: OPEN_MAX!
![Page 53: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/53.jpg)
53
MISC
• Feature Test Macro– POSIX only
• cc –D_POSIX_SOURCE file.c• Or, #define _POSIX_SOURCE 1
– ANSI C onlyifdef __STDC__void *myfunc(const char*, int)#elsevoid *myfunc();#endif
![Page 54: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/54.jpg)
54
MISC
• Primitive System Data Types– Figure 2.8 – Page 45
• Implementation-dependent data types• E.g., caddr_t, pid_t, ssize_t, off_t, etc.
– <sys/types.h>• E.g., major_t, minor_t, caddr_t, etc.• Examples:
– typedef char * caddr_t;– typedef ulong_t major_t;(SRV4: 14 bits for the major device number, and 18 bits for the
minor device number. Traditionally they are all short: 8-bits)
![Page 55: 1 System Programming Chapters 1 & 2. 2 UNIX History Developed in the late 1960s and 1970s at Bell Labs UNICS – a pun MULTICS (Multiplexed Information](https://reader036.vdocument.in/reader036/viewer/2022062801/56649e585503460f94b511ca/html5/thumbnails/55.jpg)
55
MISC
• Conflicts Between Standards– clock() in ANSI C and times() in POSIX.1
• clock_t divided by CLOCKS_PER_SEC in <time.h> (while CLK_TCK became obsolete) – different values for clock_t
– Implementation of POSIX functions• No assumption on the host operating system.• signal() in SRV4 is different from sigaction() in P
OSIX.1