240 likes | 398 Views
Plan 9 (modified from slides by Reynald Affeldt). Worst movie ever made (by Ed Wood) An operating system and associated utilities (by the people who made Unix and C) Three design principles: Resources are represented as file trees Resources are privately assembled by processes
E N D
Plan 9(modified from slides by Reynald Affeldt) • Worst movie ever made (by Ed Wood) • An operating system and associated utilities (by the people who made Unix and C) • Three design principles: • Resources are represented as file trees • Resources are privately assembled by processes • Resources are accessed by a standard protocol • Inferno is a light version of Plan 9
Outline • A typical Plan 9 installation • A traditional file server • Some unusual file servers • Namespace • Overview of the 9P protocol • User interface • Programming under Plan9 • The Inferno operating system • The Limbo programming language
A Typical Plan 9 Installation Fiber Network CPU server CPU server File server Ethernet Gateway Terminal Terminal Terminal
The File System Emelie WORM media SCSI disks
The Backup Service % grep ‘mouse bug fix’ 2000/*/sys/src/cmd/rio/file.c … % bind /n/dump/2000/0416/sys/include /sys/include … /n /dump /2001 50 0416 0417 0418 60 70 usr usr usr 80 90 glenda glenda glenda 100 foo foo foo
The File Metaphor • Unix: most things are files ○ /dev/tty × network interfaces ○ /proc × X Windows • Plan 9: everything is a file ○emelie○ window system ○backup○ text editor ○/dev/cons ○ ftp ○/prog ○ tar ○ network interfaces○ …
Console Device:/devor#c • Keyboard input/output, miscellaneous information • /dev/consis the equivalent of/dev/tty • /dev/time: current date • /dev/cputime: process computation time • /dev/pid: process’ id • /dev/user: process’ owner • % echo newtime > /tmp/newtime • % bind /tmp/newtime /dev/time
Environment Device:/envor#e • Environment variables and their values • /env/prompt: user’s prompt • % cd ‘#e’ • % echo newprompt > prompt
Network Protocols over IP:/netor#I • /net/dns: domain name lookup • A machine with a Datakit interface can use the TCP interface of another machine % echo www.yahoo.co.jp!http > /net/dns • % import harp /net • % telnet tcp!www.yahoo.co.jp
Network Protocols over IP:/netor#I • /net contains one directory per protocol % cd /net/tcp % cat clone % cd 0 % echo connect ip_address!port_number > ctl #I udp tcp clone 0 ctl status data local remote listen
Running Programs:/progor#p • /progis the equivalent of Linux/proc • Remote debugging • A rawpscommand • % import harp /proc • % db /prog/0/text /prog/0/mem % cat /prog/*/status
Graphics Device:/devor#d • This device serves an interface to • The graphics system • The window system (rio) • % cat /dev/draw/new • % cd 0 • % lc • ctl data refresh colormap • % echo new –dx 200 –dy 400 –cd /sys/src/cmd sam > /dev/wctl • % lp /dev/wsys/0/window
Serial Communication Control:/devor#t • Command a serial port • of a machine running Linux’s Inferno • from another running Windows’ Inferno • % mount tcp!piccolo.is.s.u-tokyo.ac.jp!styx/n/linux • % bind /n/linux/dev/eia0ctl /dev/eia0ctl • % echo b1200 > /dev/eia0ctl
A Per-process Namespace • User processes construct namespace using • mount • bind • union • unmount • Most services are conventionally located • Comparison • Unix: a global mount table for all processes • Plan 9: a mount table per process stored in the kernel mount table from_fileto_file /bin /$cputype/bin, /rc/bin /n/remote tcp!piccolo.is.s.u-tokyo.ac.jp!9p
9P UDP TCP IL URP Fiber IP DK The 9P Protocol • The (invisible) glue that holds Plan 9 together • Similar to NFS • Composed of 17 messages • 3 for authentication • 14 for object manipulation • 14 pages long description
file tree 100 110 120 9P Transaction 9P client 9P server user process the client’s kernel Tsession mount(“tcp!ip_address”) Tattach 50 Rattach 100 Tclone 50 70 Twalk 70 “dev” open(“/dev/cons”, OREAD) Twalk 70 “cons” Topen 70 Ropen 120 mount table fidqid 50 100 70 120
9P Authentication 9P client 9P server authorizationserver user process the client’s kernel Tsession () challenge_c Rsession () challenge_s,id_s challenge_s, id_s,id_c key_c{challenge_s, id_c, nonce} Ok, id_c can speak to id_s nonce{challenge_s} Ok, id_c isauthenticated key_s{challenge_s, id_c, nonce} Tattach () Ok, id_s isauthenticated Rattach () nonce{challenge_c}
Programming • New C compilers • 8c for Intel, kc for SPARC, … • ANSI C + goodies (inheritance, …) • Simplified preprocessor (no #if, …) • No nested include files • Smaller library • Slightly difference syntax (nil, void main (…)) • Preprocessing, parsing, register allocation, code generation, assembly
Programming • A new make: mk • Simplified • New Linkers • 8l, kl, … • Perform instruction selection, branch folding, instruction scheduling, executable writing • Don’t require indications on which library to load • Don’t do dynamic linking! • A new debugger: acid • A new shell: rc
User Interface • Commands: Unix-like • Text edition: cat, ed, sam, acme • Unicode everywhere • Mouse centric: • no cursor-addressed programs • 3 buttons unavoidable (chored actions) • Plumbing • text-based inter application mechanism
Inferno • A small Plan 9 • Can run • As the native operating system • As a hosted operating system • As a plug-in for Internet Explorer • A different looking: • wm/wm and prefab window managers • Graphics with Tk • Mostly open source
Limbo • User applications run above the DIS virtual machine • A C-like language that compiles to bytecodes and that runs • Over the VM (30/40 times slower than C) • JIT compilation (2/3 times slower than C)