Intro to unix for smart people part i
Download
1 / 19

Intro to Unix for Smart People Part I - PowerPoint PPT Presentation


  • 84 Views
  • Uploaded on

Intro to Unix for Smart People Part I. Joe Morrison, Lab49. GE 645. (Artist’s rendition). GE 645 Specs. Dual-core .000435 GHz 3 Mb RAM 16 Mb swapping drum 136 Mb HD. Multics achievements. Modular design Memory mapped files Dynamic linking Hot swappable everything

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Intro to Unix for Smart People Part I' - meagan


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Ge 645
GE 645

(Artist’s rendition)


Ge 645 specs
GE 645 Specs

  • Dual-core .000435 GHz

  • 3 Mb RAM

  • 16 Mb swapping drum

  • 136 Mb HD


Multics achievements
Multics achievements

  • Modular design

  • Memory mapped files

  • Dynamic linking

  • Hot swappable everything

  • Ring oriented security

  • First OS to have a hierarchical file system

  • Symlinks

  • Per-process stacks


Verdict
Verdict

  • Only supported 35 users

  • Performance deemed inadequate

  • Verdict: Failure

  • Bell Labs: “We’re out of here.”


Take 2 unics
Take 2: Unics

  • Bell Labs pulled out of Multics in 1969

  • Started work on a simpler alternative

  • Unics = Uniplexed Information and Computing System

  • Also a pun on Eunuchs

  • Later name simplified to Unix


Unix family tree simplified
Unix family tree (simplified)

1970

AT&T Bell Labs

UC Berkeley

1 BSD

Version 7

1980

Microsoft

4.2 BSD

Unix System III

Xenix

SUN Microsystems

Unix System V

SUN OS

Licenses

4.3 BSD

1990

Linux

Novell

Solaris

SCO

Red Hat

Caldera

2000

SCO Group

Lawsuits


Strange and wonderful fork
Strange and wonderful: fork()

int pid = fork ();

if (pid == 0){ /* I am the child process */}else

{ /* I am the parent process and pid is my new child*/

}


Intro to unix for smart people part i
exec ()

  • exec family of system calls

    • execl, execv, execle, execve, execlp, execvp

    • Load executable file and replace myself (while keeping same process identity and resources)

/* goodbye, cruel world */

exec (“/bin/foo”);

LOAD

/bin/foo

/* not reached */

/* process continues with code loaded from /bin/foo */


Launching a program
Launching a program

pid_t pid;

if ((pid = fork ()) == 0) {

exec (…);

/* not reached */

}

/* child has been launched – parent can wait if desired */

int status;

while (wait (&status) != pid)

;


Orphans and zombies
Orphans and zombies

  • Zombies (defunct processes)

    • All processes have entries in a process table

    • When child terminates and parent calls wait(), entry is removed

    • If child terminates, but parent does not wait()– zombie (dead but not reaped)

  • Orphans

    • If parent dies before child, child becomes an orphan and is adopted by “init”

  • If child exits and parent dies without calling wait(), child is an orphan zombie

    • No problem, “init” periodically checks all its adoptees and reaps them when they terminate


Unix system startup
Unix system startup

/etc/inittab

getty

fork/exec

(respawn)

exec

login

init (pid = 1)

exec

fork/exec

(respawn)

sh

getty

exec

login

Start other required processes

exec

sh


Simple structure is very adaptable
Simple structure is very adaptable

  • Shell is just a program, not a deep component of the OS

    • Anybody can write one!

  • Easy to provide computing services to anything that can send/receive chars

  • For example telnetd

    • Listen on a port

    • When an incoming request is received, fork a handler process and exec login


A small but working shell
A small but working shell

main ()

{

while (1) {

printf ("49: ");

char line [1024];

if ((fgets (line, sizeof line, stdin) == 0) || (strncmp (line, "quit", 4) == 0)) {

exit (0);

}

char *tokens [256];

tokens [0] = strtok (line, " \n");

int i = 1;

while (tokens [i++] = strtok (0, " \n")) {

if (i == 255) break;

}

tokens [i] = 0;

for (i=0; i<2; i++) {

pid_t pid;

int status;

if ((pid = fork ()) == 0) {

execvp (tokens[0], tokens);

perror ("error");

exit (1);

} else {

while (wait (&status) != pid)

;

}

}

}

}

49: ls

foo.txt bar.txt baz.txt

foo.txt bar.txt baz.txt

49:


A history of shells
A history of shells

  • Bourne shell (sh) – the classic

    • Slightly unwieldy for interactive use

  • ash - lightweight version of sh

  • csh – better interactivity, crappy for programming

  • tcsh – fewer bugs, more features

  • ksh – Korn shell (great but not free)

  • bash – Bourne again shell (learn this one)

  • rc – a shell for Plan9 - simple and clean

  • zsh – another feature-laden shell

  • es – an enhanced version of rc


Bash shell examples
Bash shell examples

# example 1

foo > bar 2>&1

# example 2

foo 2>&1 > /tmp/out | wc

# example 3

mkfifo /tmp/fifo

foo > /tmp/fifo 2>&1 &

...

cat /tmp/fifo

# example 4

for i in `grep -l foo *`

do

cp $i $i.saved

done

# example 5

find /home/jdm -type f -iname '*foo*' | xargs grep bar

# or even better (handles filenames with spaces)

find /home/jdm -type f -iname '*foo*‘ -print0 | xargs -0 grep bar


Closing thoughts
Closing thoughts

  • In general Unix desktops are primitive compared to other popular operating systems

    • (NeXT and Mac being notable exceptions)

  • But it’s not just about features, ease of use, and stability

    • (This better be good)

  • It’s also about internal interfaces

    • Make OS reusable in more contexts

    • Create a breeding ground for improvements

  • For example

    • Accessibility (rewrite the window manager)

    • Embedded systems (replace /etc/inittab)


Unix versus windows
Unix versus Windows

  • Windows: Best platform for creating end-user applications

  • Unix: Best set of building blocks for general purpose, secure, multi-user, multi-process computing


Final closing thoughts really
Final closing thoughts (really)

  • Windows

    • Intelligent design

  • Unix

    • Mutation and natural selection