%!PS-Adobe-2.0 %%Creator: dvips 5.58 Copyright 1986, 1994 Radical Eye Software %%Title: port.dvi %%Pages: 5 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%EndComments %DVIPSCommandLine: dvips -r0 port.dvi %DVIPSParameters: dpi=300, comments removed %DVIPSSource: TeX output 1998.05.10:2100 %%BeginProcSet: tex.pro /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} forall round exch round exch]setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ /nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ /sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ 128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]} if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict /eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail {dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ 4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end %%EndProcSet TeXDict begin 40258431 52099146 1000 300 300 (/usr/miller/usenix/port.dvi) @start /Fa 25 123 df<00E001E0038007000E00 1C001C0038003800700070007000E000E000E000E000E000E000E000E000E00070007000 7000380038001C001C000E000700038001E000E00B217A9C16>40 DI<70F8F8F8700505788416>46 D<01800380038007800F807F80FF8073800380038003 80038003800380038003800380038003800380038003807FF87FFC7FF80E197C9816>49 D<00E00001F00001F00001B00001B00003B80003B80003B800031800071C00071C00071C 00071C00071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1F E07F1FC013197F9816>65 D<7FF800FFFE007FFF001C0F001C07801C03801C03801C0380 1C07801C07001FFF001FFE001FFE001C1F001C03801C03C01C01C01C01C01C01C01C01C0 1C03C01C07807FFF80FFFF007FFC0012197F9816>I<7FFFC0FFFFC07FFFC01C01C01C01 C01C01C01C01C01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00 001C00E01C00E01C00E01C00E01C00E07FFFE0FFFFE07FFFE013197F9816>69 D76 D<7E1FC0FF3FE07F1FC01D07001D87001D87001D87001DC700 1DC7001CC7001CC7001CE7001CE7001CE7001C67001C67001C77001C77001C37001C3700 1C37001C17007F1F00FF9F007F0F0013197F9816>78 D<1FFC003FFE007FFF00780F00F0 0780E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E0 0380E00380E00380F00780F00780780F007FFF003FFE001FFC0011197E9816>I<07E300 1FFF003FFF00781F00F00700E00700E00700E00000F000007800003F80001FF00007FC00 00FE00000F00000700000380000380600380E00380E00700F80F00FFFE00FFFC00C7F000 11197E9816>83 D<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E 0E00700E00E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803 F010127D9116>99 D<003F00007F00003F0000070000070000070000070003C7000FF700 1FFF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F00700F00 3C1F001FFFE00FE7F007C7E014197F9816>I<03E00FF81FFC3C1E780E7007E007FFFFFF FFFFFFE000E000700778073C0F1FFE0FFC03F010127D9116>I<001F00007F8000FF8001 E78001C30001C00001C0007FFF00FFFF00FFFF0001C00001C00001C00001C00001C00001 C00001C00001C00001C00001C00001C00001C0003FFE007FFF003FFE0011197F9816>I< 018003C003C0018000000000000000007FC07FC07FC001C001C001C001C001C001C001C0 01C001C001C001C001C07FFFFFFF7FFF101A7D9916>105 D<7E3C00FEFE007FFF000F87 800F03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03807FC7 F0FFE7F87FC7F01512809116>110 D<03E0000FF8001FFC003C1E00780F00700700E003 80E00380E00380E00380E00380F00780700700780F003C1E001FFC000FF80003E0001112 7E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E 00700E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E 00000E00007FC000FFE0007FC000141B809116>I114 D<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600E E00EF00EF81EFFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007FFF 00FFFF00FFFF000700000700000700000700000700000700000700000701000703800703 8007038007870003FE0001FC0000F80011177F9616>I<7E1F80FE3F807E1F800E03800E 03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E0F800FFFF007 FBF803E3F01512809116>I<3FFFC07FFFC07FFFC0700780700F00701E00003C00007800 01F00003E0000780000F00001E01C03C01C07801C0FFFFC0FFFFC0FFFFC012127F9116> 122 D E /Fb 18 122 df45 D<01FFC0003C000038000038 0000380000380000700000700000700000700000E00000E00000E00000E00001C00001C0 0001C00001C0000380000380000380000380000700000700000700000700000F0000FFE0 00121C7E9B10>73 D<01FC03FE001C0070003C0060002E0040002E0040002E0040004700 800047008000470080004380800083810000838100008181000081C1000101C2000101C2 000100E2000100E2000200E4000200740002007400020074000400380004003800040038 000C0018001C001000FF8010001F1C7D9B1F>78 D<000F8400304C00403C008018010018 03001803001806001006001006000007000007000003E00003FC0001FF00007F800007C0 0001C00001C00000C00000C02000C02000C0600180600180600300600200F00400CC1800 83E000161E7D9C17>83 D<1FFFFFC01C0701C0300E00C0200E0080600E0080400E008040 1C0080801C0080801C0080001C0000003800000038000000380000003800000070000000 700000007000000070000000E0000000E0000000E0000000E0000001C0000001C0000001 C0000001C0000003C000007FFE00001A1C799B1E>I<7FF0FF800F001C000E0018000E00 10000E0010000E0010001C0020001C0020001C0020001C00200038004000380040003800 40003800400070008000700080007000800070008000E0010000E0010000E0010000E002 0000E0020000E0040000E00400006008000030300000104000000F800000191D779B1F> I<01FF81FE001E00F0001C0060001E0080000E0180000E0100000F020000070400000708 00000790000003A0000003C0000001C0000001C0000001E0000002E0000004E0000008F0 000010700000207000006038000040380000803C0001001C0002001C0006001E001E001E 00FF80FFC01F1C7E9B1F>88 D<03CC063C0C3C181C3838303870387038E070E070E070E0 70E0E2C0E2C0E261E462643C380F127B9115>97 D<01E007100C1018083810701070607F 80E000E000E000E000E000E0086010602030C01F000D127B9113>101 D<00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C381C383830383038187818F00F 700070007000E000E0C0C0E1C0C3007E00101A7D9113>103 D<0FC00001C00001C00003 80000380000380000380000700000700000700000700000E78000E8C000F0E000E0E001C 0E001C0E001C0E001C0E00381C00381C00381C00383800703880703880707080707100E0 3200601C00111D7D9C15>I<01800380010000000000000000000000000000001C002600 470047008E008E000E001C001C001C0038003800710071007100720072003C00091C7C9B 0D>I<3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C 0701C01C0701C01C0701C01C070380380E0388380E0388380E0708380E0710701C032030 0C01C01D127C9122>109 D<3C3C002646004687004707008E07008E07000E07000E0700 1C0E001C0E001C0E001C1C00381C40381C40383840383880701900300E0012127C9117> I<3C3C26C2468747078E068E000E000E001C001C001C001C003800380038003800700030 0010127C9112>114 D<01F006080C080C1C18181C001F001FC00FF007F0007800386030 E030C030806060C01F000E127D9111>I<00C001C001C001C00380038003800380FFE007 00070007000E000E000E000E001C001C001C001C00384038403840388019000E000B1A7D 990E>I<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C3838383818381838 1C7007F00070007000E0E0C0E1C0818047003C00101A7C9114>121 D E /Fc 76 125 df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0 000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0 000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0000E01C0000E01C0007F87FC001A1D809C18>11 D<007E0001C1800301800703 C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17>I<003F07 E00001C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00E000 000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C00 0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D 809C23>I<003F07FC0001C0DC1C000381F03C000701F03C000E01E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C00FFFFFFFC000E00E01C000E00 E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E0 1C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C 007FC7FCFF80211D809C23>I<60F0F0F0F0F0F0F0606060606060606060606060600000 00000060F0F060041E7C9D0C>33 D<6060F0F0F8F8686808080808080810101010202040 4080800D0C7F9C15>I<60F0F8680808081010204080050C7C9C0C>39 D<004000800100020006000C000C0018001800300030007000600060006000E000E000E0 00E000E000E000E000E000E000E000E000E000600060006000700030003000180018000C 000C00060002000100008000400A2A7D9E10>I<800040002000100018000C000C000600 060003000300038001800180018001C001C001C001C001C001C001C001C001C001C001C0 01C0018001800180038003000300060006000C000C00180010002000400080000A2A7E9E 10>I<60F0F0701010101020204080040C7C830C>44 DI<60F0F0 6004047C830C>I<00010003000600060006000C000C000C001800180018003000300030 0060006000C000C000C0018001800180030003000300060006000C000C000C0018001800 1800300030003000600060006000C000C00010297E9E15>I<03C00C301818300C300C70 0E60066006E007E007E007E007E007E007E007E007E007E007E007E007E0076006600670 0E300C300C18180C3007E0101D7E9B15>I<030007003F00C70007000700070007000700 070007000700070007000700070007000700070007000700070007000700070007000F80 FFF80D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E00 1C001C00380070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I< 07E01830201C201C781E780E781E381E001C001C00180030006007E00030001C001C000E 000F000F700FF80FF80FF80FF00E401C201C183007E0101D7E9B15>I<000C00000C0000 1C00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C0010 1C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C0000 1C0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E02430 2818301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D 7E9B15>I<00F0030C06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE0 06E007E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<4000 007FFF807FFF007FFF004002008004008004008008000010000010000020000060000040 0000C00000C00001C0000180000180000380000380000380000380000780000780000780 00078000078000078000030000111D7E9B15>I<03E00C301008200C2006600660066006 7006780C3E083FB01FE007F007F818FC307E601E600FC007C003C003C003C00360026004 300C1C1007E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E0 07E0076007700F300F18170C2707C700060006000E300C780C78187010203030C00F8010 1D7E9B15>I<60F0F0600000000000000000000060F0F06004127C910C>I<60F0F0600000 000000000000000060F0F0701010101020204080041A7C910C>I<0FE03038401CE00EF0 0EF00EF00E000C001C0030006000C0008001800100010001000100010001000000000000 000000000003000780078003000F1D7E9C14>63 D<000600000006000000060000000F00 00000F0000000F00000017800000178000001780000023C0000023C0000023C0000041E0 000041E0000041E0000080F0000080F0000180F8000100780001FFF80003007C0002003C 0002003C0006003E0004001E0004001E000C001F001E001F00FF80FFF01C1D7F9C1F>65 DI<001F808000E061800180198007000780 0E0003801C0003801C00018038000180780000807800008070000080F0000000F0000000 F0000000F0000000F0000000F0000000F0000000F0000000700000807800008078000080 380000801C0001001C0001000E000200070004000180080000E03000001FC000191E7E9C 1E>IIII72 DI<1FFF00F800780078 007800780078007800780078007800780078007800780078007800780078007800787078 F878F878F878F0F040E021C01F00101D7F9B15>I76 DII<003F800000E0E0000380380007001C000E 000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F0 0001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C038 0003803C0007801C0007000E000E0007001C000380380000E0E000003F80001B1E7E9C20 >II82 D<07E0801C1980300580700380600180E00180E00080E00080E00080F00000F800007C00 007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001 C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F 00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E> IIII89 D<08081010202040404040808080808080B0B0F8F878 7830300D0C7A9C15>92 D<1FC000307000783800781C00301C00001C00001C0001FC000F 1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F870012127E9115>97 DI<07E00C301878307870306000E0 00E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F00000700 00070000070000070000070000070000070000070000070000070003E7000C1700180F00 300700700700600700E00700E00700E00700E00700E00700E00700600700700700300700 180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000 E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E 000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C 00381C00381C001818001C38000C300013C0001000003000001800001FF8001FFF001FFF 803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F9215>II<18003C003C00180000000000000000 00000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C00FF80091D7F9C0C>I<00C001E001E000C00000000000000000000000000000 0FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0 00E000E000E060E0F0C0F1C061803E000B25839C0D>IIIII<03F0000E1C00180600300300700380600180E001 C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F0001212 7F9115>II<03C1000C3300180B00300F00700700700700 E00700E00700E00700E00700E00700E00700600700700700300F00180F000C370007C700 000700000700000700000700000700000700000700003FE0131A7E9116>II<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D060 8FC00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C001C001C001C 001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>IIII<7F8FF00F03800F030007020003840001C80001 D80000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF815 12809116>II<7FFC70386038407040F040E041C003C003 8007000F040E041C043C0C380870087038FFF80E127F9112>I124 D E /Fd 34 121 df<00000300000007800000078000000F8000000F0000000F 0000001F0000001E0000003E0000003C0000003C0000007C0000007800000078000000F8 000000F0000001F0000001E0000001E0000003E0000003C0000003C0000007C000000780 00000F8000000F0000000F0000001F0000001E0000003E0000003C0000003C0000007C00 00007800000078000000F8000000F0000001F0000001E0000001E0000003E0000003C000 0003C0000007C00000078000000F8000000F0000000F0000001F0000001E0000001E0000 003E0000003C0000007C0000007800000078000000F8000000F0000000F0000000600000 00193C7CAC22>47 D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 00FE0000FE0000FE007FFFFE7FFFFE7FFFFE17277BA622>49 D<00FF800007FFF0000FFF FC001E03FE003800FF807C003F80FE003FC0FF001FC0FF001FE0FF000FE0FF000FE07E00 0FE03C001FE000001FE000001FC000001FC000003F8000003F0000007E000000FC000000 F8000001F0000003E00000078000000F0000001E0000003C00E0007000E000E000E001C0 01C0038001C0060001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFF FF801B277DA622>I<007F800003FFF00007FFFC000F80FE001F007F003F807F003F803F 803F803F803F803F801F803F801F003F8000007F0000007F0000007E000000FC000001F8 000007F00000FFC00000FFC0000001F80000007E0000003F0000003F8000001FC000001F C000001FE000001FE03C001FE07E001FE0FF001FE0FF001FE0FF001FC0FF003FC0FE003F 807C007F003F00FE001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E00 00003E0000007E000000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00 001C7E0000387E0000707E0000E07E0000E07E0001C07E0003807E0007007E000E007E00 0E007E001C007E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE00 0000FE000000FE000000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8 007FFFF81D277EA622>I<180003001F801F001FFFFE001FFFFC001FFFF8001FFFF0001F FFC0001FFF00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C 7FC0001DFFF8001F80FC001E003F0008003F0000001F8000001FC000001FC000001FE000 001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078 003F803C007F001F01FE000FFFFC0003FFF00000FF80001B277DA622>I<0007F800003F FE0000FFFF0001FC078003F00FC007C01FC00F801FC01F801FC01F001FC03F000F803F00 00007E0000007E0000007E000000FE020000FE1FF000FE3FFC00FE603E00FE801F00FF80 1F80FF000FC0FF000FC0FE000FE0FE000FE0FE000FE0FE000FE07E000FE07E000FE07E00 0FE07E000FE03E000FE03F000FC01F000FC01F001F800F801F0007E07E0003FFFC0001FF F800003FC0001B277DA622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFF E07FFFFFC07FFFFF807FFFFF0070000E0070000E0070001C00E0003800E0007000E000E0 000001E0000001C000000380000007800000070000000F0000001F0000001E0000003E00 00003E0000007E0000007C0000007C000000FC000000FC000000FC000000FC000001FC00 0001FC000001FC000001FC000001FC000001FC000001FC000000F80000007000001C297C A822>I<00000780000000000780000000000FC0000000000FC0000000000FC000000000 1FE0000000001FE0000000003FF0000000003FF0000000003FF00000000077F800000000 77F800000000F7FC00000000E3FC00000000E3FC00000001C1FE00000001C1FE00000003 C1FF0000000380FF0000000380FF00000007007F80000007007F8000000F007FC000000E 003FC000000E003FC000001C001FE000001C001FE000003FFFFFF000003FFFFFF000003F FFFFF00000700007F80000700007F80000F00007FC0000E00003FC0000E00003FC0001C0 0001FE0001C00001FE0003C00001FF00FFFE003FFFFCFFFE003FFFFCFFFE003FFFFC2E29 7EA833>65 D<00007FE0030007FFFC07001FFFFF0F007FF00F9F00FF0001FF01FC0000FF 03F800007F07F000003F0FE000001F1FC000001F1FC000000F3F8000000F3F800000077F 800000077F800000077F00000000FF00000000FF00000000FF00000000FF00000000FF00 000000FF00000000FF00000000FF00000000FF000000007F000000007F800000007F8000 00073F800000073F800000071FC00000071FC000000E0FE000000E07F000001C03F80000 3C01FC00007800FF0001F0007FF007C0001FFFFF800007FFFE0000007FF00028297CA831 >67 D69 D73 D75 D<0000FFC00000000FFFFC 0000003F807F000000FE001FC00001F80007E00003F00003F00007E00001F8000FE00001 FC001FC00000FE001FC00000FE003F8000007F003F8000007F007F8000007F807F000000 3F807F0000003F807F0000003F80FF0000003FC0FF0000003FC0FF0000003FC0FF000000 3FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF000000 3FC07F0000003F807F8000007F807F8000007F803F8000007F003F8000007F001FC00000 FE001FC00000FE000FE00001FC0007F00003F80003F80007F00001FC000FE00000FE001F C000003FC0FF0000000FFFFC00000000FFC000002A297CA833>79 DI<00FF00 C003FFE1C00FFFF9C01F80FFC03F003FC03E000FC07C0007C07C0007C0FC0003C0FC0003 C0FC0001C0FE0001C0FE0001C0FF000000FFC000007FFC00007FFFE0003FFFF8001FFFFE 001FFFFF0007FFFF8003FFFFC000FFFFC0000FFFE000007FE000001FF000000FF0000007 F0E00003F0E00003F0E00003F0E00003F0F00003E0F00003E0F80007E0FC0007C0FF000F 80FFE01F80E3FFFF00E1FFFC00C01FF0001C297CA825>83 D<7FFFFFFFFF807FFFFFFFFF 807FFFFFFFFF807F807F807F807C007F800F8078007F80078078007F80078070007F8003 80F0007F8003C0F0007F8003C0E0007F8001C0E0007F8001C0E0007F8001C0E0007F8001 C0E0007F8001C000007F80000000007F80000000007F80000000007F80000000007F8000 0000007F80000000007F80000000007F80000000007F80000000007F80000000007F8000 0000007F80000000007F80000000007F80000000007F80000000007F80000000007F8000 0000007F80000000007F80000000007F80000000007F80000000007F80000000FFFFFFC0 0000FFFFFFC00000FFFFFFC0002A287EA72F>II<03FF80000FFFF0001F01FC003F80FE 003F807F003F803F003F803F801F003F8000003F8000003F8000003F8000003F80003FFF 8001FC3F800FE03F801F803F803F003F807E003F80FC003F80FC003F80FC003F80FC003F 80FC005F807E00DF803F839FFC1FFE0FFC03F803FC1E1B7E9A21>97 D<00007FF000007FF000007FF0000007F0000007F0000007F0000007F0000007F0000007 F0000007F0000007F0000007F0000007F0000007F0000007F0003F87F001FFF7F007F03F F00FC00FF01F8007F03F0007F03F0007F07E0007F07E0007F07E0007F0FE0007F0FE0007 F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F07E0007F07E0007F03F0007 F03F0007F01F800FF00FC01FF007E07FFF01FFE7FF007F87FF202A7EA925>100 D<003FC00001FFF00003E07C000F803E001F801F001F001F003F000F807E000F807E000F C07E000FC0FE0007C0FE0007C0FFFFFFC0FFFFFFC0FE000000FE000000FE0000007E0000 007E0000007F0000003F0001C01F0001C00F80038007C0070003F01E0000FFFC00003FE0 001A1B7E9A1F>I<007F80F001FFE3F807C0FE1C0F807C7C1F003E7C1F003E103F003F00 3F003F003F003F003F003F003F003F003F003F001F003E001F003E000F807C0007C0F800 05FFE0000C7F8000180000001C0000001C0000001E0000001FFFF8001FFFFF000FFFFFC0 07FFFFE003FFFFF00FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F8 7C0001F07C0001F03F0007E00FC01F8007FFFF00007FF0001E287E9A22>103 DI<07000F80 1FC03FE03FE03FE01FC00F8007000000000000000000000000000000FFE0FFE0FFE00FE0 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 0FE00FE0FFFEFFFEFFFE0F2B7EAA12>I 108 DII<003FE00001FFFC0003F0 7E000FC01F801F800FC03F0007E03F0007E07E0003F07E0003F07E0003F0FE0003F8FE00 03F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F87E0003F07E0003F03F00 07E03F0007E01F800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>II114 D<03FE300FFFF03E03F07800F07000F0F00070F00070F80070FE0000FFE0007FFF007FFF C03FFFE01FFFF007FFF800FFF80007FC0000FCE0007CE0003CF0003CF00038F80038FC00 70FF01E0E7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000 F00001F00003F00003F00007F0001FFFE0FFFFE0FFFFE007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F00007F00007F00007F00007F07007F07007F07007 F07007F07007F07007F07003F0E001F8C000FFC0003F0014267FA51A>I I120 D E /Fe 18 117 df<70F8F8F0E005057A840F>46 D<0000FE000007018000180060002000100040001000800008010000040201F004040708 04080C040210180202103003C2206001C220E0038240C0038241C0038241C00382838007 0483800704838007048380070483800E0883800E0881801E0881802E1080C04E2080618E 60403E0780400000002000000020000000100000E00C00078003007C0000FF80001F2379 A225>64 D<00FFFC00000F8000000F0000000F0000001E0000001E0000001E0000001E00 00003C0000003C0000003C0000003C00000078000000780000007800000078000000F000 0000F0000000F0000000F0000001E0000001E0000001E0002001E0002003C0004003C000 4003C0008003C0008007800180078001000780030007800F000F803E00FFFFFE001B227D A11F>76 D<00FF800007FC000F80000F80000F80001780000F80001780001780002F0000 13C0002F000013C0004F000013C0008F000023C0009E000023C0011E000023C0011E0000 23C0021E000043C0043C000043C0043C000043C0083C000041E0083C000081E010780000 81E02078000081E02078000081E04078000101E040F0000101E080F0000101E100F00001 01E100F0000200F201E0000200F201E0000200F401E0000200F801E0000400F803C00004 00F003C0000400F003C0000C00E003C0001E00C007C000FFC0C07FFC002E227DA12C>I< 00FFFFC0000F0070000F003C000F001C001E000E001E000E001E000F001E000F003C001E 003C001E003C001E003C003C0078003800780070007801E00078078000FFFC0000F00E00 00F0070000F0038001E003C001E003C001E003C001E003C003C0078003C0078003C00780 03C0078007800F0007800F0107800F01078007020F800702FFF8038C000000F020237DA1 24>82 D<00F8C00185C00705C00E03800E03801C03803C03803807007807007807007807 00F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F078014157B9419 >97 D<007E0001C1000301800703800E07801C07803C0000380000780000780000780000 F00000F00000F00000F00000F00100700100700200300C001830000FC00011157B9416> 99 D<00003C0003F80000380000380000380000700000700000700000700000E00000E0 0000E00000E00001C000F9C00185C00705C00E03800E03801C03803C0380380700780700 780700780700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F0780 16237BA219>I<00F803840E021C023C0238027804F018FFE0F000F000E000E000E000E0 00E002E0026004701830600F800F157A9416>I<001F180030B800E0B801C07001C07003 80700780700700E00F00E00F00E00F00E01E01C01E01C01E01C01E01C01E03800E03800E 0780060B8006170001E700000700000700000E00000E00000E00701C00F01800F0300060 E0003F8000151F7E9416>103 D<00F0000FE00000E00000E00000E00001C00001C00001 C00001C000038000038000038000038000070000071F0007218007C0C00F00E00F00E00E 00E00E00E01C01C01C01C01C01C01C01C0380380380380380380380704700708700E0870 0E10700610E006206003C016237DA219>I<00C001E001C001C000000000000000000000 0000000000001C002300430043008700870087000E000E001C001C001C00380038003840 708070807080710032001C000B217BA00F>I<01E01FC001C001C001C003800380038003 8007000700070007000E000E000E000E001C001C001C001C003800380038003800700070 0070007100E200E200E200E200640038000B237CA20C>108 D<1C0F80F8002610C10C00 476066060087807807008780780700870070070087007007000E00E00E000E00E00E000E 00E00E000E00E00E001C01C01C001C01C01C001C01C01C001C01C0382038038038403803 8070403803807080380380308070070031003003001E0023157B9428>I<007E0001C300 0381800701C00E01C01C01E03C01E03801E07801E07801E07801E0F003C0F003C0F00380 F00780700700700E00700C0030180018700007C00013157B9419>111 D<1C1F002620804741C08783C08703C08701808700000E00000E00000E00000E00001C00 001C00001C00001C000038000038000038000038000070000030000012157B9415>114 D<00FC000183000200800401800C03800C03000C00000F00000FF00007FC0003FE00003E 00000F00000700700700F00600F00600E004004008002030001FC00011157D9414>I<00 C001C001C001C001C003800380038003800700FFF8070007000E000E000E000E001C001C 001C001C003800380038003810702070207040708031001E000D1F7C9E10>I E /Ff 10 115 df77 D82 D<0FE0001838003C0C003C0E0018070000070000070000070000FF00 07C7001E07003C0700780700700700F00708F00708F00708F00F087817083C23900FC1E0 15157E9418>97 D<01FE000703000C07801C0780380300780000700000F00000F00000F0 0000F00000F00000F00000F000007000007800403800401C00800C010007060001F80012 157E9416>99 D<0000E0000FE00001E00000E00000E00000E00000E00000E00000E00000 E00000E00000E00000E00000E001F8E00704E00C02E01C01E03800E07800E07000E0F000 E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03800E01801E00C02E0070C F001F0FE17237EA21B>I<01FC000707000C03801C01C03801C07801E07000E0F000E0FF FFE0F00000F00000F00000F00000F000007000007800203800201C00400E008007030000 FC0013157F9416>I<0E0000FE00001E00000E00000E00000E00000E00000E00000E0000 0E00000E00000E00000E00000E00000E1F800E60C00E80E00F00700F00700E00700E0070 0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070 0E0070FFE7FF18237FA21B>104 D<1C003E003E003E001C000000000000000000000000 00000000000E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E000E00FFC00A227FA10E>I<0E00FE001E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E00FFE00B237FA20E>108 D<0E3CFE461E8F0F0F0F060F 000E000E000E000E000E000E000E000E000E000E000E000E000E000F00FFF010157F9413 >114 D E /Fg 13 121 df70 D80 D<7FFFFFFFFFE07FFFFFFFFFE07E000F8007E078000F80 01E070000F8000E060000F80006040000F80002040000F800020C0000F800030C0000F80 003080000F80001080000F80001080000F80001080000F80001080000F80001080000F80 001000000F80000000000F80000000000F80000000000F80000000000F80000000000F80 000000000F80000000000F80000000000F80000000000F80000000000F80000000000F80 000000000F80000000000F80000000000F80000000000F80000000000F80000000000F80 000000000F80000000000F80000000000F80000000000F80000000000F80000000000F80 000000000F80000000000F80000000000F80000000000F80000000000F80000000000F80 000000001FC00000000FFFFF8000000FFFFF80002C317EB030>84 DI<003F800000E0E0000380380007003C00 0E001E001E001E001C000F003C000F007C000F0078000F8078000780F8000780F8000780 FFFFFF80F8000000F8000000F8000000F8000000F8000000F8000000780000007C000000 3C0000003C0000801E0000800E0001000F0002000780020001C00C0000F03000001FC000 191F7E9E1D>101 D<0780000000FF80000000FF800000000F8000000007800000000780 000000078000000007800000000780000000078000000007800000000780000000078000 00000780000000078000000007800000000780000000078000000007800000000780FE00 000783078000078C03C000079001E00007A001E00007A000F00007C000F00007C000F000 078000F000078000F000078000F000078000F000078000F000078000F000078000F00007 8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 00F000078000F000078000F000078000F000078000F000078000F0000FC001F800FFFC1F FF80FFFC1FFF8021327EB125>104 D<0F001F801F801F801F800F000000000000000000 00000000000000000000000000000780FF80FF800F800780078007800780078007800780 078007800780078007800780078007800780078007800780078007800780078007800FC0 FFF8FFF80D307EAF12>I<0780FE0000FF83078000FF8C03C0000F9001E00007A001E000 07A000F00007C000F00007C000F000078000F000078000F000078000F000078000F00007 8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 00F000078000F000078000F000078000F000078000F000078000F000078000F000078000 F000078000F0000FC001F800FFFC1FFF80FFFC1FFF80211F7E9E25>110 D<001FC00000F0780001C01C00070007000F0007801E0003C01C0001C03C0001E03C0001 E0780000F0780000F0780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000 F8F80000F8F80000F8780000F07C0001F03C0001E03C0001E01E0003C01E0003C00F0007 8007800F0001C01C0000F07800001FC0001D1F7E9E21>I<0783E0FF8C18FF907C0F907C 07A07C07C03807C00007C00007C000078000078000078000078000078000078000078000 078000078000078000078000078000078000078000078000078000078000078000078000 0FC000FFFE00FFFE00161F7E9E19>114 D<01FC100E03301800F0300070600030E00030 E00010E00010E00010F00010F800007E00003FF0001FFF000FFFC003FFE0003FF00001F8 0000F880003C80003C80001CC0001CC0001CE0001CE00018F00038F00030CC0060C301C0 80FE00161F7E9E1A>I<00400000400000400000400000400000C00000C00000C00001C0 0001C00003C00007C0000FC0001FFFE0FFFFE003C00003C00003C00003C00003C00003C0 0003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C01003C0 1003C01003C01003C01003C01003C01003C01001C02001E02000E0400078C0001F00142C 7FAB19>I120 D E end %%EndProlog %%BeginSetup %%Feature: *Resolution 300dpi TeXDict begin %%EndSetup %%Page: 1 1 1 0 bop 642 183 a Fg(The)22 b(First)g(Unix)f(P)n(ort)779 325 y Ff(Ric)o(hard)15 b(Miller)723 383 y Fe(Mil)r(ler)j(R)n(ese)n(ar)n (ch)e(Ltd)751 441 y(r.mil)r(ler@acm.or)n(g)-42 675 y Fd(1)67 b(Prelude)-42 781 y Fc(The)14 b(story)g(of)f(the)h(\014rst)g (Unix)f(p)q(ort)h(b)q(egins)g(with)f(a)g(letter)-42 831 y(I)k(receiv)o(ed)g(in)f(April)g(1976)f(from)f(Professor)k(Juris)f (Rein-)-42 881 y(felds,)d(head)g(of)f(the)i(newly)e(created)j (Computing)c(Science)-42 930 y(Departmen)o(t)k(at)g(the)h(Univ)o(ersit) o(y)f(of)g(W)m(ollongong,)e(Aus-)-42 980 y(tralia.)30 b(A)o(t)19 b(the)f(time)f(I)h(w)o(as)g(a)g(\015edgling)g(systems)g (pro-)-42 1030 y(grammer)d(at)h(SDL,)g(an)h(Otta)o(w)o(a)f(computer)h (service)h(bu-)-42 1080 y(reau)f(whic)o(h)f(pro)o(vided)h(a)e(remote)h (batc)o(h)h(and)f(timeshar-)-42 1130 y(ing)h(service)i(on)e(large)g (IBM)h(mainfram)o(es)e(for)h(clien)o(ts)g(in)-42 1179 y(Canada)f(and)h(the)g(U.S.)f(I)h(w)o(as)f(preparing)h(to)g(join)e (Juris)-42 1229 y(later)h(that)f(y)o(ear)g(as)g(the)h(departmen)o(t's)e (second)j(mem)o(b)q(er)-42 1279 y(of)d(sta\013,)h(to)f(set)h(up)f(and)h (run)f(a)g(lab)q(oratory)g(for)g(soft)o(w)o(are)-42 1329 y(teac)o(hing)g(and)g(researc)o(h.)0 1387 y(Juris's)d(idea)g(of)f (creating)h(an)f(in)o(teractiv)o(e)h(soft)o(w)o(are)g(lab-)-42 1437 y(oratory)m(,)16 b(using)g(timeshared)g(terminals)e(connected)k (to)e(a)-42 1486 y(departmen)o(tal)h(minicom)o(puter,)e(w)o(as)i(a)g (progressiv)o(e)h(one)-42 1536 y(for)f(the)h(time.)26 b(The)17 b(usual)g(exp)q(erience)i(for)e(studen)o(ts)h(in)-42 1586 y(computing)i(w)o(as)h(to)g(queue)h(up)f(at)g(a)g(univ)o(ersit)o (y)g(com-)-42 1636 y(puter)c(cen)o(tre)g(to)e(submit)g(their)g (programs)g(and)g(data)g(on)-42 1686 y(punc)o(hed)i(cards,)g(and)e (return)i(some)e(hours)h(later)g(to)f(col-)-42 1735 y(lect)k(the)g (prin)o(ted)f(output.)31 b(Being)18 b(constrained)h(to)e(t)o(w)o(o)-42 1785 y(or)c(three)i(attempts)d(p)q(er)i(da)o(y)e(at)h(compiling)d(and)j (running)-42 1835 y(a)i(program)d(ma)o(y)h(ha)o(v)o(e)h(encouraged)i(a) e(more)f(disciplined)-42 1885 y(approac)o(h)21 b(to)g(programmi)o(ng)d (than)i(is)h(common)d(no)o(w)o(a-)-42 1935 y(da)o(ys,)11 b(but)g(it)f(strictly)h(limited)d(the)j(size)g(of)f(pro)r(jects)i(whic) o(h)-42 1984 y(studen)o(ts)20 b(could)d(b)q(e)h(exp)q(ected)i(to)d(tac) o(kle,)h(and)g(made)e(it)-42 2034 y(di\016cult)e(to)g(teac)o(h)h (computing)e(as)h(an)g(exp)q(erimen)o(tal)g(sci-)-42 2084 y(ence.)0 2142 y(The)i(plan)f(had)h(b)q(een)h(to)e(buy)h(a)g(DEC)f (PDP-11)g(mini-)-42 2192 y(computer)23 b(to)f(run)h(Unix,)g(a)f(no)o(v) o(el)g(op)q(erating)g(system)-42 2242 y(from)17 b(Bell)i(Labs)f(whic)o (h)h(w)o(as)f(acquiring)g(a)g(cult)h(follo)o(w-)-42 2291 y(ing)c(at)g(univ)o(ersities)h(around)g(the)g(w)o(orld.)22 b(Juris)16 b(w)o(as)f(im-)-42 2341 y(pressed)e(b)o(y)d(the)h(p)q (ositiv)o(e)f(exp)q(erience)i(of)e(the)h(nearb)o(y)f(Uni-)-42 2391 y(v)o(ersit)o(y)16 b(of)f(New)h(South)g(W)m(ales)e(in)h(Sydney)m (,)h(where)g(Unix)-42 2441 y(w)o(as)c(used)g(en)o(th)o(usiastically)f (in)g(programming)d(courses)13 b(as)-42 2491 y(w)o(ell)21 b(as)g(b)q(eing)f(itself)h(an)g(ob)r(ject)g(of)f(study)i(in)e(an)h(Op-) -42 2540 y(erating)d(Systems)f(course)h(taugh)o(t)f(b)o(y)g(John)h (Lions.)28 b(Ju-)-42 2590 y(ris)17 b(had)f(sen)o(t)i(me)d(a)i(cop)o(y)f (of)g(Ritc)o(hie)g(and)g(Thompson's)-42 2640 y(1974)j(CA)o(CM)h(pap)q (er)h Fb(The)f(UNIX)g(Time-Sharing)h(Sys-)971 675 y(tem)p Fc(,)11 b(whic)o(h)h(I)f(found)g(tremendously)h(exciting.)17 b(After)12 b(the)971 725 y(dispiriting)k(exp)q(erience)j(of)d(trying)h (to)f(use)i(\(and)f(debug\))971 775 y(early)10 b(v)o(ersions)g(of)g (IBM's)g(TSO)g(timesharing)f(system,)h(the)971 824 y(simplicit)o(y)g (and)i(elegan)o(t)g(minim)o(ali)o(sm)c(of)k(Unix)g(seemed)h(a)971 874 y(bra)o(v)o(e)h(new)g(w)o(orld)g(indeed.)1013 929 y(But)i(Juris's)g(letter)h(brough)o(t)f(a)f(disapp)q(oin)o(tmen)o(t:)21 b(the)971 979 y(price)g(of)e(a)h(PDP-11)g(w)o(as)g(out)g(of)f(reac)o (h.)38 b(Instead,)22 b(he)971 1028 y(wrote,)17 b(\\unless)h(y)o(ou)e(v) o(oice)g(y)o(our)h(ob)r(jections)g(loudly)e(w)o(e)971 1078 y(will)d(probably)i(ha)o(v)o(e)f(an)h(In)o(terdata)g(7/32)f(with)h (10Mb)o(yte)971 1128 y(disk)f(and)g(192kb)o(yte)f(core)i(as)f(our)g (lab)f(computer...)17 b(Since)971 1178 y(In)o(terdata)10 b(assem)o(bler)g(is)f(lik)o(e)g(IBM's)i(it)e(should)h(b)q(e)g(to)g(y)o (our)971 1228 y(liking.")26 b(As)18 b(Unix)f(w)o(as)g(a)g(PDP-11)g(op)q (erating)g(system,)971 1277 y(no)d(PDP-11)g(mean)o(t)f(no)i(Unix;)e(w)o (e)i(w)o(ould)f(ha)o(v)o(e)g(to)g(build)971 1327 y(our)c(soft)o(w)o (are)f(lab)q(oratory)g(using)h(In)o(terdata's)g(o)o(wn)f(OS/32)971 1377 y(op)q(erating)14 b(system.)971 1539 y Fd(2)67 b(The)22 b(In)n(terdata)h(7/32)971 1639 y Fc(I)18 b(b)q(egan)h(w)o(ork)f(at)g(W) m(ollongong,)e(and)i(so)q(on)g(afterw)o(ards)971 1689 y(the)f(In)o(terdata)f(minicomputer)e(w)o(as)i(installed:)22 b(a)15 b(32-bit)971 1739 y(mac)o(hine)g(with)i(a)f(p)q(eak)h(execution) g(sp)q(eed)h(of)e(somewhat)971 1789 y(less)21 b(than)g(1)f(million)e (instructions)j(p)q(er)h(second,)h(along)971 1838 y(with)16 b(sev)o(en)h(\\glass)f(telet)o(yp)q(e")g(terminals,)f(and)h(a)g(daisy-) 971 1888 y(wheel)g(t)o(yp)q(ewriter)h(whic)o(h)e(serv)o(ed)i(as)e(b)q (oth)h(system)f(con-)971 1938 y(sole)f(and)g(prin)o(ter.)1013 1993 y(It)e(did)g(not)h(tak)o(e)f(long)g(to)g(realise)h(that)g(OS/32)f (w)o(as)h(not)971 2042 y(going)f(to)h(help)g(us)g(to)g(build)f(the)i (kind)e(of)h(in)o(teractiv)o(e)g(sys-)971 2092 y(tem)19 b(w)o(e)h(w)o(an)o(ted.)37 b(Although)19 b(it)h(w)o(as)g(a)f(m)o (ulti-tasking)971 2142 y(system,)13 b(able)g(to)h(execute)h(sev)o(eral) f(programs)f(at)g(once,)h(it)971 2192 y(could)k(not)h(really)f(b)q(e)h (considered)h(to)e(b)q(e)h(m)o(ulti-user)e(or)971 2242 y(ev)o(en)f(timesharing)d(in)i(the)h(usual)f(sense.)23 b(The)16 b(terminals)971 2291 y(w)o(ere)j(strictly)f(passiv)o(e)g(p)q (eripheral)g(devices:)27 b(y)o(ou)18 b(could)971 2341 y(run)10 b(a)g(program)f(using)g(a)h(sp)q(eci\014c)i(terminal)c(for)i (input)g(and)971 2391 y(output,)i(but)f(programs)f(\(including)h (system)g(utilities)f(lik)o(e)971 2441 y(the)16 b(text)f(editor)g(and)g (compiler\))f(could)h(only)f(b)q(e)h(started)971 2491 y(from)e(the)i(cen)o(tral)h(system)e(console.)21 b(If)15 b(something)e(w)o(en)o(t)971 2540 y(wrong)20 b(with)h(a)f(program,)h (the)g(error)g(messages)g(w)o(ould)971 2590 y(app)q(ear)d(only)f(on)h (the)g(system)g(console.)30 b(There)19 b(w)o(as)f(no)971 2640 y(concept)f(of)e(user)i(names)e(or)h(logging)e(in,)h(no)h(\014le)g (protec-)p eop %%Page: 2 2 2 1 bop -42 0 a Fc(tion)12 b(of)f(an)o(y)h(kind,)f(and)h(a)g(single)g (linear)f(directory)i(of)f(\014les)-42 50 y(on)18 b(eac)o(h)g(disk)g (device)h(|)e(a)g(recip)q(e)i(for)f(confusion)f(with)-42 100 y(thirt)o(y)11 b(studen)o(ts)h(all)e(w)o(an)o(ting)g(to)h(call)f (their)h(\014rst)h(program)-42 149 y Fa(LESSON1.BAS)p Fc(.)0 199 y(Clearly)d(something)g(had)h(to)f(b)q(e)i(done)f(b)q(efore) h(the)f(In)o(ter-)-42 249 y(data)k(w)o(ould)g(b)q(e)h(usable)f(in)g(a)g (studen)o(t)h(en)o(vironmen)o(t.)j(As)-42 299 y(an)e(emergency)g (measure,)f(I)h(cobbled)f(together)i(a)e(proto-)-42 349 y(timesharing)g(system)h(to)g(run)h(on)f(top)g(of)g(OS/32,)g(whic)o(h) -42 399 y(I)e(mo)q(destly)e(named)h(MOTH)h(\(My)f(Own)h(T)m(erminal)d (Han-)-42 448 y(dler\).)19 b(Essen)o(tially)13 b(this)h(w)o(as)g(a)f (simple)f(m)o(ulti-user)h(shell,)-42 498 y(whic)o(h)i(w)o(ould)f (prompt)g(for)g(a)g(user)i(login)d(at)i(eac)o(h)g(termi-)-42 548 y(nal,)20 b(and)f(then)h(read)g(and)f(execute)i(simple)c(commands) -42 598 y(on)i(the)g(user's)h(b)q(ehalf,)f(with)f(input)h(and)g(output) f(auto-)-42 648 y(matically)e(directed)k(to)e(the)i(user's)f(terminal.) 30 b(\(I)19 b(can't)-42 697 y(recall)c(whether)h(I)f(succeeded)i(in)e (redirecting)g(error)h(mes-)-42 747 y(sages)g(as)f(w)o(ell.\))22 b(Some)14 b(measure)h(of)f(\014le)h(protection)h(w)o(as)-42 797 y(obtained)d(b)o(y)f(in)o(tercepting)h(system)f(calls)g(from)f (user)i(pro-)-42 847 y(grams,)19 b(transforming)f Fa(create)g Fc(and)h Fa(open)f Fc(requests)j(to)-42 897 y(mak)o(e)e(\014le)i(names) f(unique)g(to)g(eac)o(h)h(user.)39 b(There)22 b(w)o(as)-42 946 y(also)13 b(a)g(simple)f(\(v)o(olun)o(tary\))h(queuing)g(mec)o (hanism)e(whic)o(h)-42 996 y(could)i(b)q(e)g(used)g(to)f(request)i (exclusiv)o(e)f(use)g(of)f(the)h(console)-42 1046 y(prin)o(ter)i(b)q (efore)g(sending)f(output)g(there.)0 1096 y(With)c(MOTH)i(in)e(place,)i (the)f(\014rst)h(programming)c(class)-42 1146 y(w)o(ere)17 b(able)d(to)h(use)h(the)g(lab)e(for)h(their)g(assignmen)o(ts.)21 b(But)-42 1196 y(the)i(service)h(w)o(as)e(far)g(from)e(ideal.)43 b(MOTH's)22 b(con)o(trol)-42 1245 y(w)o(as)e(not)g(complete:)29 b(for)20 b(example,)f(a)h(program)e(whic)o(h)-42 1295 y(en)o(tered)g(an)e(in\014nite)g(lo)q(op)g(\(not)g(uncommon)d(in)j (studen)o(t)-42 1345 y(programs\),)c(could)g(not)g(b)q(e)h(in)o (terrupted)g(but)g(w)o(ould)e(ha)o(v)o(e)-42 1395 y(to)16 b(b)q(e)g(cancelled)h(from)d(the)i(system)f(console.)24 b(OS/32)15 b(at)-42 1445 y(that)k(time)e(had)h(only)g(a)g(primitiv)o(e) f(memory)f(allo)q(cation)-42 1494 y(sc)o(heme)k(with)f(\014xed-size)h (partitions)f(to)g(share)h(our)f(192)-42 1544 y(kilob)o(ytes)13 b(of)e(memory)g(among)f(sev)o(en)k(users,)f(with)g(no)f(ca-)-42 1594 y(pabilit)o(y)f(of)g(sw)o(apping)h(to)g(disk)g(|)f(it)h(w)o(as)g (v)o(ery)h(cramp)q(ed.)-42 1644 y(Among)i(other)i(quirks,)f(the)h(In)o (terdata)f(w)o(ould)g(crash)h(in-)-42 1694 y(stan)o(tly)12 b(if)e(the)j(system)e(console)h(w)o(as)f(tak)o(en)h(o\017ine.)k(Since) -42 1743 y(the)f(console)f(w)o(as)g(our)f(only)g(hardcop)o(y)h(device,) g(this)g(hap-)-42 1793 y(p)q(ened)20 b(frequen)o(tly)f(as)g(studen)o (ts)h(attempted)f(to)f(eject)i(a)-42 1843 y(page)14 b(to)g(remo)o(v)o (e)f(their)h(prin)o(tout.)0 1893 y(As)20 b(our)f(frustration)g(with)g (the)g(OS/32)g(en)o(vironmen)o(t)-42 1943 y(grew,)13 b(Unix)g(lo)q(ok)o(ed)f(more)f(and)i(more)f(attractiv)o(e.)18 b(Could)-42 1993 y(w)o(e)11 b(p)q(ossibly)g(return)g(to)g(the)g (original)e(plan)h(of)g(using)g(Unix,)-42 2042 y(ev)o(en)k(without)f(a) g(PDP-11?)k(Wh)o(y)12 b(not)h(attempt)g(to)f(mak)o(e)-42 2092 y(Unix)i(run)g(on)g(the)g(In)o(terdata?)0 2142 y(In)i(the)g(case)g (of)f(a)h(t)o(ypical)e(computer)i(man)o(ufacturer's)-42 2192 y(op)q(erating)i(system,)g(the)h(idea)e(of)h(p)q(ortabilit)o(y)e (to)i(a)f(new)-42 2242 y(mac)o(hine)j(w)o(ould)h(ha)o(v)o(e)g(b)q(een)h (prep)q(osterous.)42 b(Con)o(v)o(en-)-42 2291 y(tionally)12 b(op)q(erating)h(systems)g(w)o(ere)h(written)f(in)g(assem)o(bly)-42 2341 y(language)g(for)h(a)f(sp)q(eci\014c)j(mac)o(hine,)c(exploiting)g (lo)o(w-lev)o(el)-42 2391 y(details)k(of)g(the)g(hardw)o(are)g(arc)o (hitecture)i(whic)o(h)e(w)o(ere)h(of-)-42 2441 y(ten)j(exp)q(osed)f(to) g(the)g(user.)33 b(F)m(or)19 b(example)e(in)h(OS/360,)-42 2491 y(disk)h(\014les)g(had)f(to)h(b)q(e)g(allo)q(cated)f(b)o(y)h(the)g (user)h(in)e(units)-42 2540 y(of)e(trac)o(ks)h(and)f(cylinders,)h(and)e (for)h(e\016cien)o(t)h(access)h(one)-42 2590 y(could)f(write)g(\\c)o (hannel)f(programs")f(to)h(b)q(e)h(executed)i(di-)-42 2640 y(rectly)12 b(b)o(y)e(the)h(autonomous)e(hardw)o(are)i(whic)o(h)f (con)o(trolled)971 0 y(the)k(disks.)1013 52 y(But)19 b(Unix)g(app)q(eared)i(v)o(ery)e(di\013eren)o(t.)36 b(It)19 b(w)o(as)h(writ-)971 101 y(ten)h(in)f(C,)g(a)g(\(fairly\))f(high)h(lev) o(el)g(language)g(for)g(whic)o(h)971 151 y(compilers)11 b(already)g(existed)i(for)e(other)h(mac)o(hines)f(b)q(esides)971 201 y(the)21 b(PDP-11.)38 b(Also,)21 b(Unix's)f(device-indep)q(enden)o (t)j(in-)971 251 y(put/output)f(mo)q(del)f(presen)o(ted)j(a)e (simpli\014ed)e(and)i(ab-)971 301 y(stract)17 b(view)e(of)g(the)i (underlying)e(hardw)o(are,)h(whic)o(h)f(sug-)971 351 y(gested)i(mac)o(hine)e(indep)q(endence)j(as)e(w)o(ell.)24 b(A)16 b(Unix)g(pro-)971 400 y(gram)g(writes)j(a)f(string)g(of)g(b)o (ytes)h(on)o(to)f(a)f(disk)h(\014le)h(or)f(a)971 450 y(magnetic)i(tap)q(e)i(or)f(a)g(terminal)f(screen)j(using)e(exactly)971 500 y(the)e(same)e(simple)f(system)i(call;)h(it)f(should)g(b)q(e)g(p)q (ossible)971 550 y(to)13 b(write)h(to)f(an)f(In)o(terdata)i(disk)f(or)g (a)g(PDP-11)g(disk)g(with)971 600 y(equal)h(indi\013erence.)1013 651 y(There)20 b(seemed)g(to)f(b)q(e)i(no)e(reason)h(in)f(principle)h (wh)o(y)971 701 y(Unix)9 b(could)h(not)f(b)q(e)h(adapted)g(to)g(a)f (di\013eren)o(t)h(mac)o(hine.)16 b(So)971 751 y(in)d(late)g(1976)f(the) i(Univ)o(ersit)o(y)g(of)f(W)m(ollongong)d(ordered)15 b(a)971 801 y(source)c(co)q(de)f(licence)g(for)f(Unix)g(\(6th)g (Edition\),)g(and)h(I)f(to)q(ok)971 851 y(on)14 b(the)g(pro)r(ject)h (of)e(making)f(it)h(run)i(on)e(the)i(In)o(terdata.)971 998 y Fd(3)67 b(P)n(orting)23 b(the)g(C)f(Compiler)971 1092 y Fc(As)15 b(most)f(of)g(the)h(Unix)g(k)o(ernel)g(and)f(nearly)h (all)f(the)h(com-)971 1142 y(mands)d(and)i(utilities)f(w)o(ere)h (written)g(in)g(C,)f(the)h(\014rst)g(task)971 1192 y(w)o(as)h(to)f(pro) q(duce)i(a)f(C)g(compiler)e(for)h(the)i(7/32.)k(The)15 b(ob-)971 1242 y(vious)k(starting)h(p)q(oin)o(t)f(w)o(as)h(Dennis)g (Ritc)o(hie's)f(PDP-11)971 1291 y(C)f(compiler,)f(whic)o(h)h(w)o(as)h (itself)e(written)i(in)f(C.)f(I)h(sp)q(en)o(t)971 1341 y(a)g(few)g(w)o(eeks)h(learning)e(the)h(C)g(language)f(b)o(y)h(reading) g(a)971 1391 y(prin)o(ted)i(cop)o(y)g(of)f(the)i(compiler)d(source,)k (and)e(unra)o(v)o(el-)971 1441 y(ling)15 b(its)g(structure.)26 b(There)17 b(w)o(as)f(no)g(in)o(ternal)f(do)q(cumen-)971 1491 y(tation)f(and)g(the)g(commen)o(ts)f(w)o(ere)i(sparse,)g(but)f (the)h(clear)971 1540 y(and)k(concise)h(st)o(yle)f(made)f(it)h(quite)g (easy)g(to)g(\014nd)g(one's)971 1590 y(w)o(a)o(y)e(around.)30 b(The)18 b(compiler)f(w)o(as)h(in)f(t)o(w)o(o)h(sections:)27 b(a)971 1640 y(syn)o(tactic)18 b(fron)o(t)e(end)i(whic)o(h)f(w)o(as)g (fairly)f(mac)o(hine)g(inde-)971 1690 y(p)q(enden)o(t,)e(and)f(a)g(co)q (de)h(generating)g(bac)o(k)f(end)h(whic)o(h)f(for-)971 1740 y(tunately)k(w)o(as)g(mostly)e(table)h(driv)o(en.)27 b(I)17 b(devised)g(a)g(new)971 1790 y(set)e(of)e(tables)i(with)e(co)q (de)i(generation)g(templates)e(for)h(the)971 1839 y(In)o(terdata's)j (instruction)f(set,)i(and)e(wrote)h(new)g(v)o(ersions)971 1889 y(of)12 b(routines)g(whic)o(h)h(p)q(erformed)f(storage)g(la)o(y)o (out,)f(analysis)971 1939 y(of)k(addressing)g(mo)q(des,)g(and)g(other)h (mac)o(hine)e(dep)q(enden)o(t)971 1989 y(functions.)1013 2040 y(I)e(no)o(w)h(had)g(\(I)g(b)q(eliev)o(ed\))g(an)g(In)o(terdata)g (C)g(compiler)f(in)971 2090 y(C)d(source)i(co)q(de)f(form,)e(but)i(I)f (needed)i(a)e(running)g(In)o(terdata)971 2140 y(C)15 b(compiler)f(b)q(efore)i(I)f(could)g(compile)f(it.)21 b(This)15 b(seeming)971 2190 y(parado)o(x)h(app)q(ears)h(whenev)o(er)h (a)e(compiler)f(is)h(written)h(in)971 2240 y(the)g(language)f(whic)o(h) h(it)f(is)h(mean)o(t)e(to)i(compile,)e(and)h(its)971 2290 y(solution)i(is)g(kno)o(wn)h(as)f(b)q(o)q(otstrapping)h(\(a)f (term)h(whic)o(h)971 2339 y(refers)14 b(to)f(lifting)e(oneself)h(up)h (b)o(y)g(one's)g(o)o(wn)f(b)q(o)q(otstraps\).)971 2389 y(In)k(this)f(case)i(I)e(planned)h(a)f(half)f(b)q(o)q(otstrap,)i(in)o (v)o(olving)e(a)971 2439 y(second)j(computer:)23 b(I)16 b(w)o(ould)f(use)i(the)g(PDP-11)f(C)g(com-)971 2489 y(piler)11 b(running)g(on)g(a)g(Unix)g(mac)o(hine)f(at)h(the)h(Univ)o(ersit)o(y)f (of)971 2539 y(New)k(South)g(W)m(ales,)f(to)g(compile)f(m)o(y)g(In)o (terdata)i(C)g(com-)971 2588 y(piler.)1013 2640 y(On)22 b(Decem)o(b)q(er)h(14)f(1976,)h(I)g(made)e(the)i(80)f(kilome-)p eop %%Page: 3 3 3 2 bop -42 0 a Fc(tre)22 b(journey)g(from)d(W)m(ollongong)f(to)j (Sydney)h(with)e(the)-42 50 y(prop)q(osed)h(c)o(hanges)f(to)g(the)g(C)g (compiler)e(on)i(a)f(dec)o(k)i(of)-42 100 y(punc)o(hed)16 b(cards,)f(and)f(sp)q(en)o(t)h(t)o(w)o(o)f(da)o(ys)h(editing,)e (compil-)-42 149 y(ing)j(and)g(debugging.)24 b(This)16 b(w)o(as)g(m)o(y)e(\014rst)j(actual)f(exp)q(e-)-42 199 y(rience)21 b(as)e(a)g(user)i(of)d(Unix,)i(but)g(with)e(some)h (guidance)-42 249 y(from)f(lo)q(cal)g(gurus)h(P)o(eter)i(Iv)n(ano)o(v)d (and)h(Ian)f(Johnstone,)-42 299 y(I)j(so)q(on)f(felt)g(at)g(home.)35 b(I)20 b(quic)o(kly)g(learned)g(ab)q(out)g(the)-42 349 y(Unix)13 b(principle)g(of)f(\\trusting)i(users)g(to)f(kno)o(w)f(what)h (they)-42 399 y(are)f(doing",)e(when)i(I)g(mist)o(yp)q(ed)e(a)h (\014lename)f(and)h(inadv)o(er-)-42 448 y(ten)o(tly)17 b(deleted)g(sev)o(eral)f(hours')h(w)o(ork.)24 b(But)17 b(b)o(y)f(Decem-)-42 498 y(b)q(er)g(16)e(the)h(compiler)e(w)o(as)i (able)f(to)h(translate)f(a)h(handful)-42 548 y(of)f(short)g(test)i (programs)c(in)o(to)i(what)g(lo)q(ok)o(ed)f(lik)o(e)g(correct)-42 598 y(In)o(terdata)h(assem)o(bly)e(language.)17 b(Using)c(the)h (compiler)e(to)-42 648 y(translate)j(its)e(o)o(wn)g(source)i(co)q(de)g (then)f(resulted)h(in)e(man)o(y)-42 697 y(thousands)j(of)e(lines)g(of)g (assem)o(bly)g(co)q(de,)h(whic)o(h)f(I)h(copied)-42 747 y(on)o(to)f(a)f(magnetic)g(tap)q(e)h(to)g(tak)o(e)g(bac)o(k)g(to)g(W)m (ollongong.)0 797 y(A)o(t)i(this)f(p)q(oin)o(t)g(there)i(w)o(as)f(a)f (logistical)f(problem:)20 b(our)-42 847 y(7/32)e(had)h(no)f(tap)q(e)h (driv)o(e.)32 b(The)19 b(W)m(ollongong)d(Univ)o(er-)-42 897 y(sit)o(y)f(computer)g(cen)o(tre)h(had)f(a)g(Univ)n(ac)f(1106)g (mainframe)-42 946 y(with)f(a)f(tap)q(e)h(driv)o(e,)f(but)g(that)h(w)o (as)f(not)h(compatible)d(with)-42 996 y(PDP-11)15 b(tap)q(es.)21 b(F)m(ortunately)14 b(the)h(Sydney)g(o\016ce)g(of)f(In-)-42 1046 y(terdata)i(knew)g(of)e(a)h(clien)o(t)g(who)g(could)g(do)g(tap)q (e)h(con)o(v)o(er-)-42 1096 y(sions.)27 b(So)16 b(the)h(translated)g (compiler)e(w)o(as)i(copied)g(there)-42 1146 y(to)d(a)f(Univ)n (ac-compatible)e(tap)q(e)j(to)f(b)q(e)h(tak)o(en)g(to)f(W)m(ollon-)-42 1196 y(gong,)d(where)h(it)e(w)o(as)g(loaded)h(on)o(to)f(the)h(computer) f(cen)o(tre's)-42 1245 y(1106,)h(transmitted)f(to)h(an)g(In)o(terdata)g (8/16)f(\(a)h(smaller)e(In-)-42 1295 y(terdata)13 b(mac)o(hine)e(whic)o (h)h(w)o(as)f(used)i(as)f(a)g(fron)o(t)g(end)g(com-)-42 1345 y(m)o(unication)h(pro)q(cessor)j(for)e(the)h(Univ)n(ac\))f(and)g (copied)h(to)-42 1395 y(a)c(5)g(megab)o(yte)f(remo)o(v)n(able)g(disk)h (pac)o(k)g(whic)o(h)g(w)o(as)g(carried)-42 1445 y(upstairs)h(and)e (loaded)g(on)o(to)g(the)i(Computing)c(Science)k(De-)-42 1494 y(partmen)o(t's)i(7/32.)0 1544 y(The)h(assem)o(bly)e(language)h(v) o(ersion)g(of)g(the)h(C)f(compiler)-42 1594 y(could)d(no)o(w)f(b)q(e)g (run)h(through)f(the)h(In)o(terdata)g(assem)o(bler)f(to)-42 1644 y(pro)q(duce)16 b(an)e(executable)h(program.)i(W)m(ell,)12 b(that)i(w)o(as)g(the)-42 1694 y(theory:)25 b(in)17 b(fact,)g(what)g (it)f(pro)q(duced)j(w)o(as)d(pages)i(of)e(as-)-42 1743 y(sem)o(bler)f(syn)o(tax)f(error)h(messages.)20 b(The)15 b(compiler's)e(o)o(wn)-42 1793 y(source)g(co)q(de)f(con)o(tained)f(man) o(y)e(new)j(C)f(constructs)i(whic)o(h)-42 1843 y(m)o(y)f(trivial)g (test)i(programs)e(had)h(not)g(exercised,)i(so)f(there)-42 1893 y(w)o(ere)k(still)e(mistak)o(es)g(in)g(the)i(co)q(de)f(generator.) 28 b(Another)-42 1943 y(w)o(eek's)20 b(w)o(ork)f(on)g(the)h(compiler)e (source)j(follo)o(w)o(ed)c(b)o(y)i(a)-42 1993 y(second)j(trip)f(to)g (Sydney)g(on)f(Decem)o(b)q(er)h(22)g(for)f(cross-)-42 2042 y(compilation)13 b(resulted)j(in)f(a)g(new)h(tap)q(e)f(full)f(of)h (assem)o(bly)-42 2092 y(language)c(whic)o(h)g(w)o(as)g(brough)o(t)h (bac)o(k)f(to)g(W)m(ollongong)e(via)-42 2142 y(the)17 b(same)d(tortuous)i(route)g(as)f(b)q(efore)i(|)e(and)g(this)g(time)-42 2192 y(it)f(passed)h(successfully)g(through)f(the)g(assem)o(bler.)0 2242 y(One)22 b(further)g(thing)f(w)o(as)g(needed.)41 b(Because)23 b(the)f(C)-42 2291 y(compiler)12 b(w)o(as)h(originally)e (a)h(Unix)h(program)f(it)g(made)g(use)-42 2341 y(of)18 b(Unix)g(system)g(calls)g(to)g(p)q(erform)f(input/output)h(and)-42 2391 y(memory)7 b(allo)q(cation.)15 b(While)9 b(I)g(w)o(as)h(w)o (orking)e(on)h(the)h(com-)-42 2441 y(piler,)18 b(a)f(library)f(of)h (OS/32)f(routines)i(to)f(em)o(ulate)f(some)-42 2491 y(basic)22 b(Unix)e(system)h(calls)g(\(op)q(en,)h(close,)h(read,)g(write,)-42 2540 y(mallo)q(c,)10 b(and)i(a)g(few)g(others\))h(w)o(as)f(b)q(eing)g (written)g(b)o(y)g(Ross)-42 2590 y(Nealon,)20 b(a)f(W)m(ollongong)e (computing)h(studen)o(t.)35 b(\(Y)m(ears)-42 2640 y(later,)21 b(Ross)e(to)q(ok)g(o)o(v)o(er)g(m)o(y)e(place)j(in)e(the)i(departmen)o (t)971 0 y(when)f(I)f(left)g(W)m(ollongong.)28 b(He)19 b(died)f(of)g(cancer,)i(tragi-)971 50 y(cally)13 b(y)o(oung,)g(in)g (1988.\))1013 101 y(Com)o(bining)19 b(the)k(assem)o(bled)f(compiler)f (with)i(Ross's)971 151 y(Unix)18 b(compatibilit)o(y)d(library)j(ga)o(v) o(e)g(us,)h(at)g(last,)f(an)h(In-)971 201 y(terdata)13 b(C)g(compiler)e(running)i(on)g(the)g(7/32.)k(It)c(w)o(as)f(still)971 251 y(far)h(from)f(correct,)i(but)g(it)f(could)g(no)o(w)g(b)q(e)h(main) o(tained)d(on)971 301 y(our)19 b(o)o(wn)f(mac)o(hine)f(without)h (further)i(trips)f(to)f(Sydney)m(.)971 351 y(Ov)o(er)h(the)g(Christmas) e(break)h(I)h(con)o(tin)o(ued)f(testing)h(and)971 400 y(correcting)14 b(the)f(compiler.)k(Eac)o(h)c(time)e(I)i(made)f(a)g(c)o (hange)971 450 y(to)d(the)h(assem)o(bly)e(language)h(co)q(de,)h(I)g(w)o (ould)e(also)h(mak)o(e)f(the)971 500 y(corresp)q(onding)17 b(c)o(hange)g(in)f(the)h(C)f(source,)i(whic)o(h)e(when)971 550 y(ev)o(en)o(tually)f(compiled)f(w)o(ould)h(generate)i(exactly)f (the)h(as-)971 600 y(sem)o(bly)c(source)i(whic)o(h)f(I)f(had)h(just)g (written)h(b)o(y)e(hand.)1013 651 y(After)d(man)o(y)e(iterations,)j(on) e(Jan)o(uary)h(5)g(1977)f(the)i(com-)971 701 y(piler)j(could)f (successfully)i(compile)e(itself,)g(pro)q(ducing)h(as-)971 751 y(sem)o(bly)f(output)h(iden)o(tical)f(to)h(the)g(running)g (compiler.)971 898 y Fd(4)67 b(Unix)23 b(T)-6 b(o)r(ols)22 b(on)h(OS/32)971 993 y Fc(The)12 b(C)g(compiler)e(had)i(b)q(een)h(mo)o (v)o(ed)d(b)o(y)i(a)f(half)g(b)q(o)q(otstrap)971 1042 y(pro)q(cedure,)19 b(with)d(an)h(initial)d(cross-compilation)h(on)i (an-)971 1092 y(other)10 b(mac)o(hine.)15 b(Had)10 b(a)f(PDP-11)g(b)q (een)h(a)o(v)n(ailable)d(in)i(W)m(ol-)971 1142 y(longong,)g(I)i(w)o (ould)e(doubtless)j(ha)o(v)o(e)e(carried)h(out)g(a)f(similar)971 1192 y(half)g(b)q(o)q(otstrap)i(of)e(the)i(op)q(erating)f(system,)g (using)g(the)g(ex-)971 1242 y(isting)g(Unix)g(system)g(as)h(a)f(dev)o (elopmen)o(t)f(en)o(vironmen)o(t)h(to)971 1291 y(main)o(tain)i(and)i (cross-compile)g(a)h(k)o(ernel,)g(for)f(do)o(wnload-)971 1341 y(ing)h(and)g(testing)h(on)f(the)h(7/32.)24 b(But)17 b(if)f(a)g(PDP-11)g(had)971 1391 y(b)q(een)f(a)o(v)n(ailable,)10 b(I)k(w)o(ould)e(not)i(b)q(e)g(doing)e(the)i(p)q(ort)g(in)f(the)971 1441 y(\014rst)f(place!)17 b(The)12 b(80)e(kilometres)g(separating)h (us)h(from)d(the)971 1491 y(nearest)14 b(PDP-11)e(seemed)g(to)h (mandate)e(a)h(full)f(b)q(o)q(otstrap)971 1540 y(of)h(the)h(op)q (erating)g(system,)f(p)q(erforming)g(all)f(the)j(dev)o(elop-)971 1590 y(men)o(t)f(on)h(the)g(target)g(mac)o(hine)f(itself.)1013 1642 y(Before)20 b(starting)h(on)e(the)i(k)o(ernel,)h(it)d(seemed)i(w)o (orth-)971 1692 y(while)g(to)f(get)i(some)e(of)g(the)i(Unix)f(dev)o (elopmen)o(t)f(to)q(ols)971 1742 y(w)o(orking)9 b(on)h(the)g(In)o (terdata.)17 b(The)11 b(system)f(call)f(em)o(ulation)971 1791 y(library)m(,)g(whic)o(h)h(enabled)h(the)g(Unix)e(C)h(compiler)f (to)h(run)h(on)971 1841 y(OS/32,)k(w)o(as)g(extended)h(a)f(bit)g(to)g (supp)q(ort)h(other)g(simple)971 1891 y(Unix)c(programs)f(suc)o(h)i(as) f(the)h(editor)f Fa(ed)g Fc(and)g(\014le)h(manip-)971 1941 y(ulation)18 b(and)i(comparison)e(commands.)33 b(Ha)o(ving)19 b(these)971 1991 y(a)o(v)n(ailable)g(w)o(ould)g(b)q(e)j(a)e (signi\014can)o(t)h(aid)f(to)g(pro)q(ductiv-)971 2040 y(it)o(y)14 b(in)h(comparison)e(with)i(the)g(existing)g(In)o(terdata)g (to)q(ols.)971 2090 y(\(The)h(standard)f(OS/32)g(text)h(editor,)f(for)g (example,)f(w)o(as)971 2140 y(only)g(able)g(to)g(mo)o(v)o(e)f(sequen)o (tially)g(through)i(a)f(\014le)g(in)g(one)971 2190 y(direction;)k (after)f(examining)d(or)j(mo)q(difying)d(a)j(line,)f(one)971 2240 y(could)e(not)h(mo)o(v)o(e)d(to)j(an)f(earlier)h(line)e(of)h(the)h (\014le)g(without)971 2290 y(exiting)e(from)f(the)j(editor)f(and)g(b)q (eginning)f(again.\))1013 2341 y(P)o(orting)20 b(Unix)g(to)q(ols)h(to)f (the)i(In)o(terdata)f(w)o(as)g(a)f(w)o(a)o(y)971 2391 y(of)f(exercising)h(more)f(of)g(the)h(C)f(compiler)f(and)i(increas-)971 2441 y(ing)14 b(con\014dence)j(in)d(its)h(reliabilit)o(y)m(,)d(and)j (help)q(ed)g(to)g(p)q(oin)o(t)971 2491 y(out)g(compatibilit)o(y)c (problems)j(in)g(C)h(seman)o(tics)f(b)q(et)o(w)o(een)971 2540 y(the)20 b(PDP-11)e(and)h(In)o(terdata.)34 b(Although)19 b(in)f(theory)i(a)971 2590 y(user)c(lev)o(el)f(C)g(program)e(can)j(b)q (e)g(en)o(tirely)f(mac)o(hine)f(inde-)971 2640 y(p)q(enden)o(t,)19 b(in)e(the)h(6th)f(Edition)g(system)g(rather)h(a)f(lot)g(of)p eop %%Page: 4 4 4 3 bop -42 0 a Fc(shortcuts)17 b(had)e(b)q(een)h(tak)o(en,)e(with)h (assumed)f(kno)o(wledge)-42 50 y(of)h(prop)q(erties)h(of)e(the)h (PDP-11)f(whic)o(h)h(failed)e(on)i(the)g(In-)-42 100 y(terdata.)k(The)13 b(most)f(common)f(of)h(these)j(w)o(ere)f(w)o(ord)f (size,)-42 149 y(the)j(order)f(of)f(b)o(ytes)h(within)f(w)o(ords,)h (and)f(sign)g(extension)-42 199 y(of)i(c)o(haracters.)25 b(I)16 b(learned)g(to)g(b)q(e)g(suspicious)g(of)g(an)o(y)f(o)q(c-)-42 249 y(currence)20 b(of)c(the)h(n)o(um)o(b)q(er)f(2)g(in)h(a)f(C)h (program)e(|)h(more)-42 299 y(often)g(than)f(not,)g(it)g(really)g(mean) o(t)f Fa(sizeof\(int\))f Fc(whic)o(h)-42 349 y(on)h(the)h(7/32)d (should)i(b)q(e)h(4.)-42 497 y Fd(5)67 b(The)23 b(Unix)g(Kernel)g(on)g (OS/32)-42 592 y Fc(An)17 b(op)q(erating)f(system)h(lik)o(e)e(Unix)h (can)h(b)q(e)g(decomp)q(osed)-42 641 y(in)o(to)j(three)i(la)o(y)o(ers.) 37 b(A)o(t)21 b(the)g(top)f(is)h(the)g(in)o(terface)g(de-)-42 691 y(\014ned)13 b(b)o(y)f(the)h(rep)q(ertoire)h(of)d(system)h(calls)g (whic)o(h)g(pro)o(vide)-42 741 y(op)q(erating)k(system)f(services)j(to) d(user)i(programs.)22 b(In)15 b(the)-42 791 y(middle)g(are)i(the)g(mec) o(hanisms)e(whic)o(h)h(implemen)o(t)e(these)-42 841 y(services)h(and)d (manage)f(the)i(sharing)f(of)g(resources)j(among)-42 890 y(pro)q(cesses)g(and)c(users)i(of)d(the)j(system.)k(In)11 b(Unix)g(this)g(la)o(y)o(er)-42 940 y(is)i(largely)e(hardw)o(are)h (indep)q(enden)o(t;)i(for)e(example,)f(all)g(di-)-42 990 y(rect)j(access)h(devices)e(are)g(treated)h(in)e(an)h(abstract)g(w) o(a)o(y)f(as)-42 1040 y(indexed)k(collections)f(of)f(\014xed-size)i (blo)q(c)o(ks.)21 b(A)o(t)15 b(the)g(b)q(ot-)-42 1090 y(tom)c(are)i(device)h(driv)o(ers,)f(in)o(terrupt)g(handlers)g(and)f (other)-42 1140 y(lo)o(w-lev)o(el)f(routines)i(whic)o(h)f(deal)g(with)g (the)h(idiosyncrasies)-42 1189 y(of)g(actual)h(hardw)o(are)g(b)q(eha)o (viour,)f(and)g(supp)q(ort)h(the)h(sim-)-42 1239 y(pler)21 b(view)f(of)g(idealised)g(hardw)o(are)g(used)h(b)o(y)g(the)f(la)o(y)o (er)-42 1289 y(ab)q(o)o(v)o(e.)0 1341 y(Because)e(eac)o(h)f(la)o(y)o (er)f(dep)q(ends)i(on)e(the)h(one)g(b)q(elo)o(w,)f(it)-42 1391 y(w)o(ould)j(app)q(ear)h(that)f(a)g(new)h(implemen)o(tatio)o(n)d (of)h(Unix)-42 1440 y(w)o(ould)12 b(need)g(to)g(b)q(e)g(built)g(from)e (the)i(b)q(ottom)f(up.)17 b(But)12 b(the)-42 1490 y(7/32)h(w)o(as)h (not)f(a)g(bare)h(mac)o(hine:)j(it)c(already)h(had)f(an)g(op-)-42 1540 y(erating)h(system,)f(and)g(in)g(a)h(sense)h(the)f(top)f(la)o(y)o (er)g(of)g(Unix)-42 1590 y(w)o(as)f(already)f(w)o(orking)g(ab)q(o)o(v)o (e)g(OS/32)h(in)f(the)h(form)e(of)h(our)-42 1640 y(library)j(of)h(em)o (ulated)e(system)i(calls.)20 b(There)15 b(w)o(as)g(a)f(com-)-42 1690 y(p)q(elling)f(attraction)f(to)h(the)h(idea)f(of)f(con)o(tin)o (uing)g(from)f(the)-42 1739 y(top)j(do)o(wn,)g(b)q(eginning)f(with)h (the)h(easier)g(task)f(of)f(p)q(orting)-42 1789 y(and)h(testing)h(the)f (middle)e(la)o(y)o(er)i(o)o(v)o(er)g(an)f(idealised)h(hard-)-42 1839 y(w)o(are)19 b(in)o(terface)g(pro)o(vided)f(b)o(y)h(the)g (facilities)e(of)h(OS/32,)-42 1889 y(and)i(lea)o(ving)f(the)h (complexities)e(of)i(the)g(real)g(hardw)o(are)-42 1939 y(un)o(til)14 b(the)g(last.)0 1990 y(Here)k(I)e(w)o(as)g(in\015uenced)i (b)o(y)e(m)o(y)f(exp)q(erience)j(at)f(SDL,)-42 2040 y(where)22 b(IBM's)f(VM/370)e(op)q(erating)h(system)h(had)f(b)q(een)-42 2090 y(used)k(to)d(test)j(m)o(ultiple)c(v)o(ersions)i(of)g(OS/360)f (concur-)-42 2140 y(ren)o(tly)14 b(on)g(the)g(same)f(mac)o(hine.)j(VM)e (used)g(the)h(IBM)f(370)-42 2190 y(paging)g(facilities)f(to)h(divide)g (the)h(computer)g(in)o(to)e(sev)o(eral)-42 2240 y(disjoin)o(t)j (virtual)h(mac)o(hines,)f(eac)o(h)h(able)g(to)g(run)g(its)g(o)o(wn)-42 2289 y(op)q(erating)i(system)g(with)g(the)h(illusion)d(of)h(ha)o(ving)g (com-)-42 2339 y(plete)d(con)o(trol)e(of)g(the)i(real)f(hardw)o(are.)k (Execution)c(of)f(the)-42 2389 y(virtual)e(mac)o(hines)g(w)o(as)g (timeshared,)g(with)h(privileged)f(in-)-42 2439 y(structions)23 b(b)q(eing)e(in)o(tercepted)i(and)e(em)o(ulated)e(b)o(y)i(the)-42 2489 y(VM)13 b(k)o(ernel.)19 b(The)13 b(virtualisation)e(w)o(as)i(so)g (complete)f(that)-42 2538 y(a)i(VM)f(virtual)f(mac)o(hine)g(could)i(b)q (e)f(used)i(to)e(run)h(another)-42 2588 y(instance)h(of)e(VM)h(itself.) 0 2640 y(OS/32)e(w)o(as)h(not)f(quite)h(as)f(sophisticated)i(as)e (VM/370,)971 0 y(but)19 b(it)g(did)g(ha)o(v)o(e)g(some)f(useful)h (facilities)f(for)h(real-time)971 50 y(programming)d(whic)o(h)j(could)g (b)q(e)h(exploited)g(to)f(build)g(a)971 100 y(kind)14 b(of)h(virtual)f(mac)o(hine)f(en)o(vironmen)o(t.)20 b(Lik)o(e)14 b(the)i(370,)971 149 y(the)j(In)o(terdata)f(had)g(a)f(Program)g(Status) h(W)m(ord)f(\(PSW\))971 199 y(with)e(an)g(instruction)h(p)q(oin)o(ter)f (and)h(con)o(trol)f(bits)g(for)g(en-)971 249 y(abling)d(and)h (disabling)f(in)o(terrupts)i(and)f(memory)e(protec-)971 299 y(tion)j(and)g(relo)q(cation.)19 b(An)c(in)o(terrupt)g(or)f(system) g(call)g(in-)971 349 y(struction)f(w)o(ould)e(cause)i(the)f(old)f(PSW)h (to)g(b)q(e)g(stored)h(in)f(a)971 399 y(\014xed)h(lo)q(cation)f(in)g (lo)o(w)g(memory)m(,)d(and)k(a)f(new)h(PSW)g(\(t)o(yp-)971 448 y(ically)g(with)h(in)o(terrupts)i(disabled\))e(to)h(b)q(e)g(loaded) f(from)f(a)971 498 y(table)h(indexed)g(b)o(y)g(the)g(t)o(yp)q(e)h(of)e (in)o(terrupt.)1013 565 y(Under)18 b(OS/32,)g(eac)o(h)g(program's)e (address)j(space)g(b)q(e-)971 614 y(gan)e(with)g(a)g(reserv)o(ed)j (area)d(called)g(the)h(UDL,)f(con)o(tain-)971 664 y(ing)c(system)g (information)d(ab)q(out)j(the)h(running)g(program.)971 714 y(This)g(included)h(things)f(lik)o(e)f(p)q(oin)o(ters)i(to)g(op)q (en)f(\014les,)h(and)971 764 y(a)e(T)m(ask)f(Status)h(W)m(ord)g (\(TSW\))f(whic)o(h)h(w)o(as)g(analogous)f(to)971 814 y(the)17 b(PSW.)f(If)g(a)g(program)f(requested)k(an)d(async)o(hronous) 971 863 y(input/output)10 b(op)q(eration,)h(the)g(op)q(erating)g (system)f(w)o(ould)971 913 y(signal)i(its)h(completion)e(b)o(y)i(a)f (TSW)h(exc)o(hange,)g(loading)f(a)971 963 y(new)19 b(TSW)f(and)h (instruction)g(p)q(oin)o(ter)f(from)f(a)h(table)h(in)971 1013 y(the)e(UDL)f(whic)o(h)h(w)o(as)f(analogous)g(to)g(the)h(hardw)o (are)g(in-)971 1063 y(terrupt)j(table)e(in)g(lo)o(w)g(memory)m(.)29 b(An)19 b(OS/32)f(program)971 1112 y(whic)o(h)12 b(w)o(as)g(declared)h (at)f(link)f(time)g(to)g(b)q(e)i(an)f(E-task)g(\(ex-)971 1162 y(ecutiv)o(e)k(task\))g(had)f(extra)h(privileges,)f(and)g(could)g (de\014ne)971 1212 y(its)h(o)o(wn)f(system)h(calls)f(b)o(y)h(sp)q (ecifying)g(that)g(certain)g(sys-)971 1262 y(tem)g(call)h(instructions) h(w)o(ould)e(load)h(a)g(new)g(TSW)g(from)971 1312 y(the)11 b(program's)d(o)o(wn)i(UDL)f(instead)i(of)e(the)i(k)o(ernel's)f(table.) 1013 1378 y(These)24 b(mec)o(hanisms)d(pro)o(vided)j(most)e(of)g(what)i (w)o(as)971 1428 y(needed)15 b(to)e(em)o(ulate)f(the)i(lo)o(w)o(est)g (la)o(y)o(er)f(of)g(Unix)g(|)g(asyn-)971 1478 y(c)o(hronous)22 b(device)h(I/O,)e(pro)q(cess)j(switc)o(hing,)f(in)o(terrupt)971 1528 y(handling,)18 b(and)g(system)f(calls)h(to)g(switc)o(h)h(b)q(et)o (w)o(een)g(user)971 1577 y(and)d(k)o(ernel)g(mo)q(de)f(|)h(b)o(y)f (manipulating)e(TSWs)j(within)971 1627 y(a)i(single)g(OS/32)f (partition.)30 b(The)19 b(missing)d(mec)o(hanism)971 1677 y(w)o(as)e(con)o(trol)f(o)o(v)o(er)h(memory)d(managemen)o(t,)g (whic)o(h)j(I)g(had)971 1727 y(to)d(supply)g(b)o(y)f(tric)o(k)o(ery)m (.)17 b(As)12 b(an)e(E-task,)h(the)h(virtual)e(Unix)971 1777 y(k)o(ernel)h(had)f(access)i(to)e(the)h(7/32's)e(memory)f (managemen)o(t)971 1826 y(registers,)17 b(so)f(it)f(w)o(as)g(able)g(to) h(p)q(erform)f(its)g(o)o(wn)g(address)971 1876 y(relo)q(cation,)d(sw)o (apping)g(m)o(ultiple)f(Unix)h(pro)q(cesses)j(in)e(and)971 1926 y(out)18 b(of)g(its)g(memory)d(partition)j(while)f(main)o(taining) e(the)971 1976 y(illusion)d(of)h(b)q(eing)h(a)g(single)f(OS/32)h(pro)q (cess.)1013 2042 y(Using)d(this)h(simple)f(virtual)g(mac)o(hine)g(en)o (vironmen)o(t)g(on)971 2092 y(OS/32,)18 b(p)q(orting)g(the)g(top)g(and) g(middle)e(la)o(y)o(ers)i(of)g(Unix)971 2142 y(pro)o(v)o(ed)11 b(fairly)e(straigh)o(tforw)o(ard.)16 b(Nearly)11 b(all)e(the)j(c)o (hanges)971 2192 y(required)17 b(w)o(ere)g(due)g(to)f(trivial)f(w)o (ord)h(size)h(and)f(b)o(yte)h(or-)971 2242 y(der)d(problems)f(|)g(the)h (program)e(logic)h(remained)f(almost)971 2291 y(unaltered.)22 b(Dev)o(eloping)14 b(and)h(testing)g(a)g(virtual)f(v)o(ersion)971 2341 y(of)h(Unix)g(on)g(OS/32)g(had)g(practical)g(adv)n(an)o(tages.)22 b(There)971 2391 y(w)o(as)d(no)f(need)i(for)f(exclusiv)o(e)g(use)h(of)e (the)i(mac)o(hine;)f(us-)971 2441 y(ing)12 b(MOTH)i(the)f(system)g (could)g(b)q(e)g(used)h(b)o(y)f(studen)o(ts)i(at)971 2491 y(the)f(same)e(time)f(as)i(m)o(y)f(k)o(ernel)h(testing.)18 b(And)13 b(the)h(OS/32)971 2540 y(in)o(teractiv)o(e)e(debugger)h(w)o (as)f(a)o(v)n(ailable)e(for)i(breakp)q(oin)o(ting)971 2590 y(and)f(single-stepping)f(through)h(the)h(Unix)e(k)o(ernel)h(just) g(lik)o(e)971 2640 y(an)o(y)i(other)i(program.)p eop %%Page: 5 5 5 4 bop -42 0 a Fd(6)67 b(Unix)24 b(Stands)f(Alone)-42 96 y Fc(By)15 b(F)m(ebruary)m(,)f(it)g(w)o(as)h(p)q(ossible)f(to)h(log) e(in)h(to)g(a)h(terminal)-42 146 y(assigned)j(to)e(the)i(virtual)e (Unix)g(and)h(run)g(\(v)o(ery)g(slo)o(wly\))-42 196 y(a)d(Unix)g (program.)j(One)e(of)e(the)i(7/32's)e(t)o(w)o(o)g(5)h(megab)o(yte)-42 245 y(disk)i(driv)o(es)g(w)o(as)f(initialised)f(as)h(a)h(Unix)f(\014le) g(system,)g(b)o(y)-42 295 y(writing)g(a)f(data-only)g(assem)o(bly)f (program)g(whose)j(struc-)-42 345 y(ture)g(w)o(as)f(the)h(image)d(of)h (an)h(empt)o(y)f(\014le)h(system,)g(assem-)-42 395 y(bling)h(it,)g(and) g(cop)o(ying)g(the)h(binary)f(result)h(to)g(the)g(disk.)-42 445 y(The)f(\014le)f(system)g(w)o(as)f(gradually)g(p)q(opulated)h(with) f(Unix)-42 494 y(commands,)e(eac)o(h)i(one)h(b)q(eing)f(compiled)f(and) g(assem)o(bled)-42 544 y(under)h(OS/32,)f(con)o(v)o(erted)h(from)e (OS/32)g(ob)r(ject)i(to)f(Unix)-42 594 y Fa(a.out)h Fc(format,)e(and)i (mo)o(v)o(ed)f(to)h(the)h(Unix)f(disk.)20 b(A)o(t)14 b(last)-42 644 y(it)h(w)o(as)h(time)e(to)h(p)q(erform)f(the)i (conjuring)f(tric)o(k)h(of)f(whip-)-42 694 y(ping)j(OS/32)g(out)g(from) f(underneath,)j(lea)o(ving)d(Unix)h(to)-42 743 y(stand)d(on)e(its)h(o)o (wn.)0 796 y(W)m(riting)e(device)j(driv)o(ers)f(for)f(the)i(In)o (terdata)f(p)q(eripher-)-42 846 y(als)h(\(disk)g(driv)o(e,)f(serial)h (in)o(terface,)g(clo)q(c)o(k\))g(w)o(as)g(c)o(halleng-)-42 896 y(ing)j(as)h(exp)q(ected:)30 b(real)19 b(hardw)o(are,)g(unlik)o(e)f (the)i(virtual)-42 945 y(kind,)e(is)g(alw)o(a)o(ys)e(full)g(of)h (surprises.)31 b(I)18 b(w)o(as)f(able)h(to)f(use)-42 995 y(PDP-11)10 b(driv)o(ers)g(as)f(a)h(pattern,)g(but)g(the)g(In)o (terdata)g(arc)o(hi-)-42 1045 y(tecture)19 b(w)o(as)e(rather)h(more)f (complex.)26 b(Comm)o(uni)o(cating)-42 1095 y(to)16 b(the)g(disk)f (driv)o(e,)h(for)f(example,)f(in)o(v)o(olv)o(ed)g(a)i(disk)f(con-)-42 1145 y(troller)g(and)f(DMA)h(c)o(hannel)g(as)f(w)o(ell)g(as)h(the)g (driv)o(e)g(itself,)-42 1194 y(all)d(needing)i(to)f(b)q(e)g(programmed) e(separately)j(and)f(in)f(the)-42 1244 y(righ)o(t)19 b(order,)i(and)e(all)e(generating)j(separate)g(in)o(terrupts)-42 1294 y(\(or)h(not,)g(dep)q(ending)g(on)f(timing)e(conditions\).)36 b(F)m(ortu-)-42 1344 y(nately)13 b(the)h(top-do)o(wn)f(approac)o(h)g (mean)o(t)f(that)h(I)g(w)o(as)g(not)-42 1394 y(trying)19 b(to)h(test)g(driv)o(ers)g(and)f(in)o(terrupt)h(handlers)g(on)f(a)-42 1444 y(bare)h(mac)o(hine:)27 b(I)19 b(had)g(all)f(the)i(rest)g(of)f (Unix,)g(already)-42 1493 y(running)d(and)g(stable,)g(to)f(use)i(as)f (a)f(test)i(b)q(ed.)24 b(On)16 b(April)-42 1543 y(28,)d(Unix)h(w)o(as)g (running)f(in)h(full)e(con)o(trol)i(of)f(the)i(7/32.)0 1596 y(Of)21 b(course,)i(the)e(\014rst)g(successful)h(\\Hello,)f(w)o (orld")f(is)-42 1645 y(not)h(the)g(end)g(of)f(the)h(story)m(.)38 b(Un)o(til)20 b(this)h(p)q(oin)o(t)f(the)h(C)-42 1695 y(compiler)e(w)o(as)g(still)g(running)g(on)h(OS/32,)g(b)q(ecause)h(the) -42 1745 y(OS/32)12 b(assem)o(bler)f(w)o(as)h(needed)h(to)e(assem)o (ble)h(its)f(output.)-42 1795 y(When)18 b(I)g(wrote)g(a)g(new)g(In)o (terdata)g(assem)o(bler)f(for)g(Unix)-42 1845 y(\(in)12 b(C\),)f(I)g(w)o(as)h(grati\014ed)f(to)g(\014nd)h(that)g(it)f(w)o(as)g (smaller)f(and)-42 1895 y(m)o(uc)o(h)g(faster)i(than)f(In)o(terdata's)g (o)o(wn)g(assem)o(bler)f(\(written)-42 1944 y(in)k(assem)o(bly)f (language\))g(|)h(a)g(victory)g(for)f(the)i(principle)-42 1994 y(of)k(systems)h(programming)c(in)j(a)g(high)g(lev)o(el)g (language.)-42 2044 y(Man)o(y)j(other)h(Unix)f(commands)e(and)i (utilities)f(needed)-42 2094 y(compiling)11 b(and)i(testing,)g(and)g (most)f(had)h(the)g(o)q(dd)g(trivial)-42 2144 y(PDP-11)g(dep)q(endency) i(to)e(b)q(e)h(corrected.)20 b(Another)14 b(three)-42 2193 y(mon)o(ths)19 b(of)f(w)o(ork)h(w)o(ere)i(required)f(un)o(til)e (25)h(July)g(1977,)-42 2243 y(when)c(OS/32)f(w)o(as)g(retired)i(and)e (Unix)g(formally)d(b)q(ecame)-42 2293 y(the)k(pro)q(duction)f(system)g (on)f(the)i(W)m(ollongong)c(7/32.)-42 2445 y Fd(7)67 b(The)23 b(7th)f(Edition)-42 2540 y Fc(When)15 b(Unix)f(\014rst)i(b)q (egan)e(to)h(run)f(as)h(a)f(stand-alone)g(sys-)-42 2590 y(tem)19 b(on)g(the)g(In)o(terdata)h(w)o(e)f(con)o(tacted)i(Bell)e (Labs,)h(ex-)-42 2640 y(p)q(ecting)c(them)e(to)h(b)q(e)g(surprised)i (to)e(hear)g(that)g(their)g(op-)971 0 y(erating)20 b(system)f(w)o(as)h (p)q(ortable.)35 b(In)20 b(fact)f(there)i(w)o(as)f(a)971 50 y(surprise)d(on)f(b)q(oth)g(sides:)23 b(a)16 b(team)e(at)i(Bell)g (Labs)g(w)o(as)g(in)971 100 y(the)f(midst)e(of)g(doing)h(their)g(o)o (wn)g(p)q(ort)h(of)f(Unix)f(to)i(an)f(In-)971 149 y(terdata)i(8/32)f (\(a)g(sligh)o(tly)f(more)h(p)q(o)o(w)o(erful)g(32-bit)g(mini-)971 199 y(computer\).)21 b(They)15 b(had)g(b)q(egun)g(w)o(ork)g(at)g(the)g (b)q(eginning)971 249 y(of)h(1977)g(in)g(an)o(ticipation)f(of)h(the)i (deliv)o(ery)e(of)g(their)h(ma-)971 299 y(c)o(hine)c(in)f(April,)g(and) h(had)f(a)h(k)o(ernel)g(w)o(orking)f(b)o(y)g(June)i(|)971 349 y(less)20 b(than)e(t)o(w)o(o)h(mon)o(ths)e(after)j(the)f(W)m (ollongong)d(k)o(ernel)971 399 y(\014rst)f(ran)f(on)f(the)i(bare)f (7/32.)1013 448 y(The)i(Bell)h(Labs)f(In)o(terdata)h(p)q(ort)g(w)o(as)g (nev)o(er)g(released)971 498 y(to)h(the)h(public,)f(but)h(it)f(b)q (ecame)g(the)h(basis)f(for)g(the)h(7th)971 548 y(Edition)f(of)g(Unix,)g (whic)o(h)h(w)o(as)f(sp)q(eci\014cally)h(engineered)971 598 y(to)d(b)q(e)h(p)q(ortable)g(\(with)f(Stev)o(e)h(Johnson's)g(new)f (p)q(ortable)971 648 y(compiler,)d(and)i(a)f(m)o(uc)o(h)g(more)g (disciplined)g(approac)o(h)h(to)971 697 y(data)22 b(t)o(yping)g(in)g (C\).)g(When)h(the)g(PDP-11)f(v)o(ersion)h(of)971 747 y(the)16 b(7th)f(Edition)f(b)q(ecame)h(a)o(v)n(ailable,)d(the)k(Univ)o (ersit)o(y)f(of)971 797 y(W)m(ollongong)i(ordered)22 b(a)e(cop)o(y)m(,)h(and)f(I)g(p)q(orted)h(that)g(to)971 847 y(the)12 b(In)o(terdata,)g(with)g(some)e(assistance)j(from)d(Rob)q (ert)i(Elz)971 897 y(at)19 b(the)g(Univ)o(ersit)o(y)g(of)g(Melb)q (ourne)h(who)e(had)h(b)q(een)h(us-)971 946 y(ing)13 b(the)i(W)m (ollongong)c(6th)j(Edition)f(system)h(on)g(an)g(8/32.)971 996 y(The)19 b(pro)r(ject)h(w)o(as)f(somewhat)f(easier)h(the)h(second)g (time)971 1046 y(around,)12 b(but)h(there)g(w)o(as)g(still)e(a)h(lot)g (of)g(w)o(ork)g(b)q(ecause)i(the)971 1096 y(k)o(ernel)k(had)f(already)h (b)q(egin)f(to)h(gro)o(w)f(bigger)g(and)g(more)971 1146 y(complex,)12 b(and)i(there)h(w)o(ere)g(man)o(y)d(new)i(commands.)1013 1196 y(The)20 b(app)q(earance)h(of)e(the)h(7th)g(Edition)f(of)g(Unix)g (b)q(e-)971 1245 y(gan)13 b(a)g(tric)o(kle)h(and)g(then)g(a)f(\015o)q (o)q(d)h(of)f(p)q(orting)g(pro)r(jects)i(in)971 1295 y(man)o(y)g(places)i(to)g(mac)o(hines)f(of)g(all)g(kinds;)i(b)o(y)e (the)i(early)971 1345 y(1980's)11 b(there)j(w)o(ere)g(at)e(least)g (three)i(companies)e(making)e(a)971 1395 y(full-time)g(business)k(of)e (p)q(orting)h(Unix.)k(By)c(the)g(1990's)f(no)971 1445 y(computer,)k(from)e(micro)g(to)i(mainframe,)d(could)j(b)q(e)g(con-)971 1494 y(sidered)h(to)f(b)q(e)g(a)g(serious)h(mac)o(hine)e(if)g(it)g(w)o (asn't)h(able)g(to)971 1544 y(run)c(some)f(form)g(of)g(Unix.)17 b(No)o(w,)12 b(t)o(w)o(en)o(t)o(y-one)g(y)o(ears)g(after)971 1594 y(the)h(\014rst)h(p)q(ort,)f(it's)f(di\016cult)h(to)f(b)q(eliev)o (e)i(that)f(there)h(once)971 1644 y(w)o(as)j(a)g(time)f(when)i(op)q (erating)f(system)h(p)q(ortabilit)o(y)e(w)o(as)971 1694 y(an)e(audacious)f(idea.)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF