<?xml version="1.0" encoding="utf-8" ?><transcript><text start="15.039" dur="6.851">the usual way to get a large computer</text><text start="17.689" dur="6.121">application developed involves a big</text><text start="21.89" dur="5.549">team of people working in close</text><text start="23.81" dur="6">coordination most of the time this works</text><text start="27.439" dur="7.321">surprisingly well but it does have its</text><text start="29.81" dur="9.12">problems and large projects tend to get</text><text start="34.76" dur="5.79">done poorly they take a long time they</text><text start="38.93" dur="4.949">consume an astonishing amount of money</text><text start="40.55" dur="5.879">and in many cases the individual team</text><text start="43.879" dur="4.351">members are dissatisfied so everybody in</text><text start="46.429" dur="4.621">the computing business is constantly</text><text start="48.23" dur="7.05">searching for ways to do a better job of</text><text start="51.05" dur="6.289">developing computer applications there</text><text start="55.28" dur="4.799">aren&amp;#39;t likely to be any final answers</text><text start="57.339" dur="5.171">both because the problems are hard and</text><text start="60.079" dur="5.731">because as we find solutions we try even</text><text start="62.51" dur="4.8">more ambitious objectives but there are</text><text start="65.81" dur="3.27">some things that can be done to make</text><text start="67.31" dur="5.01">life easier for everybody on a large</text><text start="69.08" dur="6.51">programming project a good programming</text><text start="72.32" dur="5.76">environment helps a lot and in the next</text><text start="75.59" dur="4.08">few minutes we&amp;#39;re going to show you some</text><text start="78.08" dur="4.2">of the properties of the UNIX operating</text><text start="79.67" dur="6.12">system that make it a good programming</text><text start="82.28" dur="5.97">environment for many purposes in Bell</text><text start="85.79" dur="4.53">Labs as in many industries almost</text><text start="88.25" dur="4.44">everyone has some kind of involvement</text><text start="90.32" dur="4.38">with software either they are actually</text><text start="92.69" dur="5.82">producing software and that is their job</text><text start="94.7" dur="6.48">or they are impacted by software or they</text><text start="98.51" dur="4.89">use software fact that Bell Labs about</text><text start="101.18" dur="4.56">50% of the people are actually producing</text><text start="103.4" dur="3.54">software and everyone else has some kind</text><text start="105.74" dur="3.39">of involvement with it</text><text start="106.94" dur="5.28">in fact that&amp;#39;s one of our worse problems</text><text start="109.13" dur="6.51">today there is a crying need for useful</text><text start="112.22" dur="4.95">software to do effective jobs we just do</text><text start="115.64" dur="4.62">not have enough people for write all</text><text start="117.17" dur="5.25">that software keeping large amounts of</text><text start="120.26" dur="4.44">software working and keeping it working</text><text start="122.42" dur="5.13">in the face of change is a big job takes</text><text start="124.7" dur="6.27">a lot of skilled people to do this now</text><text start="127.55" dur="5.64">software is different from hardware when</text><text start="130.97" dur="4.739">you build hardware and send it out</text><text start="133.19" dur="5.64">you may have to fix it because it breaks</text><text start="135.709" dur="4.651">but you don&amp;#39;t demand for example that</text><text start="138.83" dur="3.84">your radio suddenly turn into a</text><text start="140.36" dur="3.93">television and you don&amp;#39;t demand that a</text><text start="142.67" dur="3.78">piece of hardware suddenly do a</text><text start="144.29" dur="3.54">completely different function but people</text><text start="146.45" dur="4.44">do that of software all</text><text start="147.83" dur="6.84">the time there&amp;#39;s a continual demand for</text><text start="150.89" dur="6.09">changes enhancements new features that</text><text start="154.67" dur="4.41">people find necessary once they get used</text><text start="156.98" dur="4.2">to a system in other words we put the</text><text start="159.08" dur="4.65">system out there people get used to it</text><text start="161.18" dur="4.41">their jobs change they come back with</text><text start="163.73" dur="5.13">more demands for different sorts of</text><text start="165.59" dur="4.8">features in the system the result is</text><text start="168.86" dur="3.9">there&amp;#39;s no way to get perfect</text><text start="170.39" dur="3.9">requirements in the first place and that</text><text start="172.76" dur="4.62">means that we have to build the software</text><text start="174.29" dur="4.98">to be very changed tolerant because we</text><text start="177.38" dur="4.5">do not want to throw the software away</text><text start="179.27" dur="5.49">the year after we wrote it there are a</text><text start="181.88" dur="6.12">couple ways to do that one is to make</text><text start="184.76" dur="6">the software fairly clear and easy to</text><text start="188" dur="4.92">read and understand and change and you</text><text start="190.76" dur="3.86">do that with some of the current popular</text><text start="192.92" dur="5.4">structured programming techniques</text><text start="194.62" dur="6.31">another way is to write many many small</text><text start="198.32" dur="5.31">modules of code that way when you have a</text><text start="200.93" dur="5.01">change perhaps you only throw out a few</text><text start="203.63" dur="4.74">small modules or make changes in a few</text><text start="205.94" dur="4.71">modules rather than in thousands and</text><text start="208.37" dur="3.99">thousands of lines of code what we</text><text start="210.65" dur="4.17">should be doing in the computing</text><text start="212.36" dur="4.8">business is trying to raise the level at</text><text start="214.82" dur="5.43">which we work so that a programmer can</text><text start="217.16" dur="5.16">write a few lines of code that turn into</text><text start="220.25" dur="4.53">many many instructions in the machine</text><text start="222.32" dur="4.53">that way when changes need to be made</text><text start="224.78" dur="4.56">one just changes a few lines of code</text><text start="226.85" dur="5.31">rather than thousands and thousands of</text><text start="229.34" dur="5.61">them in the mythical man-month</text><text start="232.16" dur="4.77">fred brooks estimates that it took 5,000</text><text start="234.95" dur="4.44">staff years of effort to produce the</text><text start="236.93" dur="5.82">operating system for IBM&amp;#39;s 360 series</text><text start="239.39" dur="5.04">computers clearly nobody is going to do</text><text start="242.75" dur="3.45">that sort of thing very often certainly</text><text start="244.43" dur="4.19">not for every new type of hardware or</text><text start="246.2" dur="5.009">for every new class of application</text><text start="248.62" dur="4.69">someone once said that software stands</text><text start="251.209" dur="4.021">between the user and the machine and to</text><text start="253.31" dur="3.899">me this conveys this picture of a great</text><text start="255.23" dur="4.53">wall of software up there that you have</text><text start="257.209" dur="3.9">to overcome to get anything done there&amp;#39;s</text><text start="259.76" dur="3.75">certainly a grain of truth in the remark</text><text start="261.109" dur="4.141">anyway if you stop to look many many</text><text start="263.51" dur="4.35">operating systems seem to spend a</text><text start="265.25" dur="4.89">substantial fraction of their time and</text><text start="267.86" dur="4.08">effort not in helping you but in</text><text start="270.14" dur="3.779">impeding you in making your job</text><text start="271.94" dur="4.229">difficult sort of providing obstacles to</text><text start="273.919" dur="3.121">be overcome when Ken Thompson and Dennis</text><text start="276.169" dur="3.681">Ritchie start</text><text start="277.04" dur="5.68">the unit system 1969</text><text start="279.85" dur="5.4">they found a structure which simplified</text><text start="282.72" dur="5.68">many aspects of the interactions between</text><text start="285.25" dur="5.01">computers and people Thomson and Richie</text><text start="288.4" dur="3.78">were aiming to keep their system simple</text><text start="290.26" dur="4.14">and they found a collection of</text><text start="292.18" dur="3.87">primitives that enable them to do a</text><text start="294.4" dur="5.07">great deal with the very few primitives</text><text start="296.05" dur="5.37">a UNIX system is made up sort of of</text><text start="299.47" dur="4.08">three layers if you like the central</text><text start="301.42" dur="3.89">layer the kernel is the thing that</text><text start="303.55" dur="4.55">controls the resources of the machine</text><text start="305.31" dur="4.87">then wrapped around that at least in</text><text start="308.1" dur="4.06">conceptually is something called the</text><text start="310.18" dur="4.89">shell which is the interface between</text><text start="312.16" dur="4.2">most users and the kernel part it sits</text><text start="315.07" dur="3.21">there and waits for you to type commands</text><text start="316.36" dur="3.66">at it and then it interprets them and</text><text start="318.28" dur="4.44">then around that sort of an yet another</text><text start="320.02" dur="4.95">layer are useful programs things like</text><text start="322.72" dur="4.08">editors and compilers for programming</text><text start="324.97" dur="4.14">languages and document formatting</text><text start="326.8" dur="7.17">programs and programs that you write</text><text start="329.11" dur="7.89">yourself and what you can do is to think</text><text start="333.97" dur="4.86">of these UNIX system programs basically</text><text start="337" dur="4.77">as in some sense the building blocks</text><text start="338.83" dur="4.44">with which you can create things and the</text><text start="341.77" dur="3.63">thing that distinguishes UNIX system</text><text start="343.27" dur="3.81">from any other system is the degree to</text><text start="345.4" dur="3.9">which those building blocks can be glued</text><text start="347.08" dur="4.17">together in a variety of different ways</text><text start="349.3" dur="4.77">not just obvious ways but in many cases</text><text start="351.25" dur="5.97">very unobvious ways to get different</text><text start="354.07" dur="5.04">jobs done the system is very flexible in</text><text start="357.22" dur="3.63">that respect I think the notion of</text><text start="359.11" dur="4.19">pipelining is the fundamental</text><text start="360.85" dur="5.73">contribution if the system is you can</text><text start="363.3" dur="4.99">take a bunch of programs two or more</text><text start="366.58" dur="3.57">programs and stick them together end to</text><text start="368.29" dur="3.18">end so that the data simply flows from</text><text start="370.15" dur="3.69">the one on the left to the one on the</text><text start="371.47" dur="3.75">right and the system itself looks after</text><text start="373.84" dur="3.33">all the connections all of the</text><text start="375.22" dur="3.48">synchronization making sure that the</text><text start="377.17" dur="3.84">data goes from the one into the other</text><text start="378.7" dur="4.08">the program&amp;#39;s themselves don&amp;#39;t know</text><text start="381.01" dur="2.82">anything about the connection as far as</text><text start="382.78" dur="2.61">they&amp;#39;re concerned they&amp;#39;re just talking</text><text start="383.83" dur="5.36">to the terminal let me give you an</text><text start="385.39" dur="6.84">example of how this works in practice</text><text start="389.19" dur="5.62">the system is as I mentioned is used a</text><text start="392.23" dur="5.13">lot for document preparation kinds of</text><text start="394.81" dur="4.74">things programs for helping you type</text><text start="397.36" dur="5.61">letters or produce technical papers or</text><text start="399.55" dur="4.68">write books in all of those things of</text><text start="402.97" dur="2.91">course people when they&amp;#39;re typing into</text><text start="404.23" dur="2.82">machine make spelling mistakes so let&amp;#39;s</text><text start="405.88" dur="3">see how we could use some of these</text><text start="407.05" dur="4.02">building block notions in practice to</text><text start="408.88" dur="3.93">help you develop a program for finding</text><text start="411.07" dur="2.52">spelling mistakes suppose I take a</text><text start="412.81" dur="4.35">sentence this is a</text><text start="413.59" dur="8.31">sentence which is in a paper that John</text><text start="417.16" dur="5.91">Massey and I wrote some years ago now if</text><text start="421.9" dur="2.82">you look at it carefully you&amp;#39;ll see that</text><text start="423.07" dur="4.05">there are actually a couple of spelling</text><text start="424.72" dur="3.99">mistakes in there now suppose that we</text><text start="427.12" dur="3.03">wanted to find the spelling mistakes</text><text start="428.71" dur="4.08">using a machine how would we do that</text><text start="430.15" dur="3.93">well basically what we would do the</text><text start="432.79" dur="5.7">simplest thing I can think of is to</text><text start="434.08" dur="6.09">split the sentence there in two words</text><text start="438.49" dur="3.54">individual words and then compare the</text><text start="440.17" dur="3.48">words against a dictionary and every</text><text start="442.03" dur="3.24">time we find a word which is in that</text><text start="443.65" dur="3.6">sentence but not in dictionary it&amp;#39;s at</text><text start="445.27" dur="4.32">least a plausible contender for being a</text><text start="447.25" dur="4.44">spelling mistake now how do we do that</text><text start="449.59" dur="4.05">what I want to show is that you can do</text><text start="451.69" dur="3.72">that using just existing UNIX programs</text><text start="453.64" dur="4.44">just gluing them together to get the job</text><text start="455.41" dur="5.36">done suppose that we say first we will</text><text start="458.08" dur="5.22">take a program called make words and</text><text start="460.77" dur="5.68">we&amp;#39;ll run that on the sentence now what</text><text start="463.3" dur="6.96">that does is break the thing up into one</text><text start="466.45" dur="6.72">word per line now I&amp;#39;ll take the output</text><text start="470.26" dur="4.23">and I&amp;#39;ll pipe it into another program</text><text start="473.17" dur="3.03">which will simply convert it into</text><text start="474.49" dur="3.36">lowercase the reason I want to convert</text><text start="476.2" dur="3.45">it into lowercase is that my dictionary</text><text start="477.85" dur="4.41">doesn&amp;#39;t have any capitalizations and so</text><text start="479.65" dur="4.08">words like Bell and UNIX which are</text><text start="482.26" dur="4.32">capitalized here would show up as</text><text start="483.73" dur="4.59">spelling mistakes unless I did this now</text><text start="486.58" dur="3.3">the next thing that I want to do my</text><text start="488.32" dur="3.69">dictionary is in fact sorted in</text><text start="489.88" dur="4.05">alphabetical order dictionaries are and</text><text start="492.01" dur="4.68">so it&amp;#39;s a lot easier for me to compare</text><text start="493.93" dur="4.83">the words of my document to the words in</text><text start="496.69" dur="8.79">the dictionary if they&amp;#39;re started so I&amp;#39;m</text><text start="498.76" dur="7.95">going to run them into sort and finally</text><text start="505.48" dur="4.23">if you look at it carefully it doesn&amp;#39;t</text><text start="506.71" dur="5.64">show up very easily here but there are</text><text start="509.71" dur="5.34">in fact there is a duplicate word their</text><text start="512.35" dur="4.62">systems appears twice and in a real</text><text start="515.05" dur="3.33">document words like TIG would show up</text><text start="516.97" dur="3.3">many times so we&amp;#39;d like to get rid of</text><text start="518.38" dur="5.34">duplicates so let&amp;#39;s throw that through</text><text start="520.27" dur="5.52">another program called unique so what</text><text start="523.72" dur="3.87">we&amp;#39;ve got so far is we&amp;#39;ve got the words</text><text start="525.79" dur="5.34">of my document in this case the sentence</text><text start="527.59" dur="5.34">one word per line in lowercase neatly</text><text start="531.13" dur="4.26">sorted and all of the duplicate words</text><text start="532.93" dur="4.59">thrown away so there&amp;#39;s only one word one</text><text start="535.39" dur="3.54">instance of each different word then</text><text start="537.52" dur="3.78">what I&amp;#39;m going to do is run it into one</text><text start="538.93" dur="4.08">last program called mismatch which will</text><text start="541.3" dur="4.24">simply print all of the words that came</text><text start="543.01" dur="5.17">down this pipeline and</text><text start="545.54" dur="5.27">print out the ones that were in the</text><text start="548.18" dur="6.21">document that word in the dictionary</text><text start="550.81" dur="6.57">what we have here is five separate</text><text start="554.39" dur="6.6">programs cooperating to do this job and</text><text start="557.38" dur="4.96">in one giant pipeline now if you look at</text><text start="560.99" dur="3.48">the list that came out you&amp;#39;ll see that</text><text start="562.34" dur="4.05">indeed we got laboratories and provide</text><text start="564.47" dur="3.39">which were our two spelling mistakes of</text><text start="566.39" dur="3.9">course we&amp;#39;ve got two other words as well</text><text start="567.86" dur="4.29">and this tells you not only was what</text><text start="570.29" dur="4.56">what&amp;#39;s good about the approach but also</text><text start="572.15" dur="4.41">what&amp;#39;s bad about it time sharing is not</text><text start="574.85" dur="3.81">a spelling mistake but it&amp;#39;s a perfectly</text><text start="576.56" dur="3.27">fine example of technical jargon the</text><text start="578.66" dur="2.91">sort of thing that means something to</text><text start="579.83" dur="3.27">everybody in the computer business it</text><text start="581.57" dur="3.75">means nothing whatsoever to people who</text><text start="583.1" dur="4.8">are not computer types and the word UNIX</text><text start="585.32" dur="3.9">is a fine example of something that&amp;#39;s</text><text start="587.9" dur="5.49">not going to be found in a normal</text><text start="589.22" dur="6.33">dictionary so what do we do first we</text><text start="593.39" dur="3.66">take the misspelled words and we go back</text><text start="595.55" dur="2.49">to the original document and we correct</text><text start="597.05" dur="3.51">them so we don&amp;#39;t have any spelling</text><text start="598.04" dur="4.77">mistakes secondly we take the words that</text><text start="600.56" dur="3.75">like time-sharing and unix that are not</text><text start="602.81" dur="3.48">spelling mistakes but which showed up</text><text start="604.31" dur="3.66">here and we put them back into our</text><text start="606.29" dur="3.57">dictionary so that the next time</text><text start="607.97" dur="3.45">somebody has a document that contains</text><text start="609.86" dur="3.39">the UNIX or time-sharing they don&amp;#39;t show</text><text start="611.42" dur="3.48">up as spelling mistakes so we&amp;#39;ve not</text><text start="613.25" dur="3.92">only done our own job but we&amp;#39;ve improved</text><text start="614.9" dur="4.74">the tool that we&amp;#39;re using in the process</text><text start="617.17" dur="4.48">so you notice that I did that whole job</text><text start="619.64" dur="3.69">without writing any programs at all the</text><text start="621.65" dur="3.42">whole thing is cobbled together out of</text><text start="623.33" dur="4.23">programs that already exist it and all I</text><text start="625.07" dur="4.56">did was to use the fact that the system</text><text start="627.56" dur="3.63">provides this mechanism of the pipeline</text><text start="629.63" dur="3.39">so that I can take programs and stick</text><text start="631.19" dur="4.59">them together one after another to get</text><text start="633.02" dur="4.23">my job done and I think this is one of</text><text start="635.78" dur="4.35">the reasons why the system so productive</text><text start="637.25" dur="4.53">that there&amp;#39;s a large collection of</text><text start="640.13" dur="5.61">things that people have already built</text><text start="641.78" dur="5.28">that we use and as we build our new</text><text start="645.74" dur="2.96">things then they become part of the</text><text start="647.06" dur="4.53">repertoire of things that people</text><text start="648.7" dur="5.44">subsequently can build on during the</text><text start="651.59" dur="5.39">last decade we have discovered a number</text><text start="654.14" dur="5.34">of new powerful pattern matching</text><text start="656.98" dur="5.02">algorithms that are useful for locating</text><text start="659.48" dur="5.55">patterns and texts many of these</text><text start="662" dur="5.64">algorithms have been developed using</text><text start="665.03" dur="4.74">insights obtained from theory obtained</text><text start="667.64" dur="6.54">by studying automata and language theory</text><text start="669.77" dur="7.29">as our knowledge of pattern matching</text><text start="674.18" dur="5.08">algorithms increases we can very quickly</text><text start="677.06" dur="4.33">take this knowledge and</text><text start="679.26" dur="5.79">package it in the form of UNIX programs</text><text start="681.39" dur="7.94">and we can spread these UNIX programs to</text><text start="685.05" dur="4.28">the entire community very quickly</text><text start="695.66" dur="5.4">the UNIX systems has many features which</text><text start="698.6" dur="3.57">make it easier for the programmer to</text><text start="701.06" dur="5.52">write programs</text><text start="702.17" dur="7.17">these include form atlas files the</text><text start="706.58" dur="4.68">hierarchical directory structure the</text><text start="709.34" dur="5.73">ability to pipeline the output of one</text><text start="711.26" dur="7.65">command as the input of another device</text><text start="715.07" dur="6.66">independent i/o all of these things make</text><text start="718.91" dur="5.88">programming considerably easier than on</text><text start="721.73" dur="4.8">most other systems the heart of the</text><text start="724.79" dur="3.75">system is really the file system the</text><text start="726.53" dur="4.71">ability to store information for</text><text start="728.54" dur="4.35">extended periods of time and the reason</text><text start="731.24" dur="3.51">one of the reasons the system works as</text><text start="732.89" dur="4.74">well as it does is that the file system</text><text start="734.75" dur="4.47">is well designed and many systems you</text><text start="737.63" dur="3.21">have to say an awful lot about a file</text><text start="739.22" dur="3.81">before you can do anything with it you</text><text start="740.84" dur="3.93">have to say where it is and how big it</text><text start="743.03" dur="3.42">is and what kind of information it&amp;#39;s</text><text start="744.77" dur="3.21">going to that&amp;#39;s going to be in it</text><text start="746.45" dur="4.17">all kinds of things that are basically</text><text start="747.98" dur="4.5">utterly completely irrelevant here you</text><text start="750.62" dur="4.38">don&amp;#39;t have to do any of that the file is</text><text start="752.48" dur="3.72">as big as it is it doesn&amp;#39;t matter where</text><text start="755" dur="3.96">it is as long as you know what it&amp;#39;s</text><text start="756.2" dur="4.14">called and so you basically don&amp;#39;t have</text><text start="758.96" dur="3.3">to think of any of those complexities</text><text start="760.34" dur="3.42">that you have in other systems when you</text><text start="762.26" dur="2.97">want information in a file you put it</text><text start="763.76" dur="2.7">there when you want it back you get it</text><text start="765.23" dur="3.93">out again and you don&amp;#39;t have to think</text><text start="766.46" dur="4.11">about size or number of Records or</text><text start="769.16" dur="3.33">number of fields or anything like that</text><text start="770.57" dur="4.17">unless it&amp;#39;s really germane to your</text><text start="772.49" dur="4.8">program for most purposes it&amp;#39;s utterly</text><text start="774.74" dur="5.4">irrelevant a file is simply a sequence</text><text start="777.29" dur="5.31">of bytes its main attribute is its size</text><text start="780.14" dur="5.82">by contrast and more conventional</text><text start="782.6" dur="6.06">systems file has dozen or so attributes</text><text start="785.96" dur="5.25">to specify or create a file it takes</text><text start="788.66" dur="4.95">endless amounts of chitchat if you want</text><text start="791.21" dur="3.6">a UNIX system file you simply ask for a</text><text start="793.61" dur="4.29">file and you can use it interchangeably</text><text start="794.81" dur="5.36">wherever you want to file the UNIX</text><text start="797.9" dur="5.07">system consists of a hierarchy of</text><text start="800.17" dur="5.05">directories which a directory is simply</text><text start="802.97" dur="5.13">a file that contains the names of either</text><text start="805.22" dur="5.7">other directories or files and this</text><text start="808.1" dur="4.68">whole thing goes on recursively when you</text><text start="810.92" dur="3.15">log into a UNIX system you normally are</text><text start="812.78" dur="3.27">sitting in a place that&amp;#39;s called your</text><text start="814.07" dur="4.26">home directory or users directory and I</text><text start="816.05" dur="3.84">can say TWD which means print the name</text><text start="818.33" dur="3.15">of my working directory and it&amp;#39;ll tell</text><text start="819.89" dur="4.53">me where I am it says at the moment that</text><text start="821.48" dur="6.72">I mean user bwk that&amp;#39;s where I start</text><text start="824.42" dur="4.81">when I log in now I can go up a level in</text><text start="828.2" dur="4.18">that I can</text><text start="829.23" dur="4.92">change to parent level and now if I</text><text start="832.38" dur="4.02">print my working directory I&amp;#39;m in slash</text><text start="834.15" dur="4.68">user and I can go up one more level to</text><text start="836.4" dur="5.67">the root of the whole file system let me</text><text start="838.83" dur="5.1">go back down to BW k and I can list the</text><text start="842.07" dur="6.45">direct the files that I have in that</text><text start="843.93" dur="8.46">directory and I find there among other</text><text start="848.52" dur="5.19">things a directory called TV and I can</text><text start="852.39" dur="3.57">list the files that are there and I&amp;#39;ll</text><text start="853.71" dur="4.23">find among other things the sentence</text><text start="855.96" dur="4.2">that we printed in a spelling mistake</text><text start="857.94" dur="4.98">finding program they look at that and</text><text start="860.16" dur="5.19">sure enough there it is so as you can</text><text start="862.92" dur="4.35">see the file system hierarchy makes it</text><text start="865.35" dur="4.26">possible for users to organize</text><text start="867.27" dur="5.34">information into its natural grouping</text><text start="869.61" dur="6.06">and to go up or down and find things</text><text start="872.61" dur="5.34">quickly and easily the UNIX system</text><text start="875.67" dur="4.26">interface for most people is through</text><text start="877.95" dur="3.54">program called the shell or the command</text><text start="879.93" dur="4.7">interpreter basically it&amp;#39;s simply a</text><text start="881.49" dur="6.78">program that watches what you type and</text><text start="884.63" dur="6.18">treats it as requests to run particular</text><text start="888.27" dur="5.01">programs now there&amp;#39;s nothing magic about</text><text start="890.81" dur="4.78">running programs the programs that you</text><text start="893.28" dur="5.04">run are actually just the names of files</text><text start="895.59" dur="4.38">in the file system the shell searches in</text><text start="898.32" dur="4.11">the file system in a particular way to</text><text start="899.97" dur="3.57">find a file whose name is the name of</text><text start="902.43" dur="3.98">the program that you think you&amp;#39;re</text><text start="903.54" dur="6.63">running and it goes and executes it and</text><text start="906.41" dur="6.7">in fact it&amp;#39;s not possible for you as a</text><text start="910.17" dur="5.37">user just by executing a program to tell</text><text start="913.11" dur="3.93">how that particular program has been</text><text start="915.54" dur="2.91">implemented for example it might have</text><text start="917.04" dur="3.93">been written in a language like Fortran</text><text start="918.45" dur="5.07">or C or it may have in fact been written</text><text start="920.97" dur="3.81">as something like the spell program that</text><text start="923.52" dur="3.6">we talked about earlier which is a</text><text start="924.78" dur="4.74">combination of other programs stuck</text><text start="927.12" dur="6.77">together with pipes or some similar</text><text start="929.52" dur="7.46">thing and all put in a single file as a</text><text start="933.89" dur="6.31">shell sequence or sequence of commands</text><text start="936.98" dur="5.76">what Brian did earlier was he typed all</text><text start="940.2" dur="5.58">the commands the the five program names</text><text start="942.74" dur="5.89">for his spelling checker on one line</text><text start="945.78" dur="5.04">using the pipeline facilities that&amp;#39;s</text><text start="948.63" dur="5.64">nice except that you may want to check</text><text start="950.82" dur="4.92">documents often and you don&amp;#39;t want to</text><text start="954.27" dur="4.29">have to type that long sequence of</text><text start="955.74" dur="5.19">commands so it&amp;#39;s possible to put all of</text><text start="958.56" dur="3.51">these commands in a file and tell the</text><text start="960.93" dur="3.839">shell when</text><text start="962.07" dur="4.47">I type the name of that file I want you</text><text start="964.769" dur="4.111">to execute the commands that are inside</text><text start="966.54" dur="6.12">that file let me show you an example of</text><text start="968.88" dur="9.09">this we have a program called spline</text><text start="972.66" dur="7.02">which fits curves to a set of data</text><text start="977.97" dur="3.45">points and I&amp;#39;ve got a set of five data</text><text start="979.68" dur="4.11">points that we&amp;#39;re going to see what the</text><text start="981.42" dur="6.599">curve looks like I&amp;#39;m going to run spline</text><text start="983.79" dur="6.81">through a program that turns this into</text><text start="988.019" dur="4.981">graphics called graph and I&amp;#39;m going to</text><text start="990.6" dur="5.179">run that through a special program that</text><text start="993" dur="5.339">turns the graphic language into</text><text start="995.779" dur="7.211">something specific for this terminal I</text><text start="998.339" dur="6.961">only need to type plot and data because</text><text start="1002.99" dur="4.079">inside the file plot is the string of</text><text start="1005.3" dur="3.42">commands and here is a result of</text><text start="1007.069" dur="4.591">plotting those five data points on this</text><text start="1008.72" dur="6.09">particular terminal the ability to put</text><text start="1011.66" dur="5.039">commands in files and only have to type</text><text start="1014.81" dur="5.399">the file name to get these commands</text><text start="1016.699" dur="5.64">executed makes the computing business a</text><text start="1020.209" dur="4.171">lot easier often you&amp;#39;re doing things</text><text start="1022.339" dur="4.47">that are repetitive and you don&amp;#39;t want</text><text start="1024.38" dur="4.47">to have to type long lists of things</text><text start="1026.809" dur="4.26">this makes our life much easier and</text><text start="1028.85" dur="5.13">allows us to tailor our environment for</text><text start="1031.069" dur="4.35">the way we want to work another nice</text><text start="1033.98" dur="3.81">feature of the UNIX programming</text><text start="1035.419" dur="5.701">environment is the concept of input</text><text start="1037.79" dur="5.639">output redirection normally when you</text><text start="1041.12" dur="4.319">type a command the output from it goes</text><text start="1043.429" dur="3.321">to your terminal and the input comes</text><text start="1045.439" dur="3.571">from your keyboard</text><text start="1046.75" dur="4.659">however the shell can be told by a</text><text start="1049.01" dur="3.84">simple notation that when you run a</text><text start="1051.409" dur="3.781">program you wish the output to be</text><text start="1052.85" dur="4.98">directed into a file or that the input</text><text start="1055.19" dur="4.65">be taken from a file for example to</text><text start="1057.83" dur="4.29">print the output of my spelling program</text><text start="1059.84" dur="4.38">on the line printer instead of putting</text><text start="1062.12" dur="5.82">it on my terminal all I have to do is</text><text start="1064.22" dur="6.75">say my spell sentence greater than</text><text start="1067.94" dur="4.95">device line printer rather than my spell</text><text start="1070.97" dur="4.35">sentence and the output goes into the</text><text start="1072.89" dur="3.84">file what looks like a file except that</text><text start="1075.32" dur="3.089">it&amp;#39;s actually a file that causes the</text><text start="1076.73" dur="4.47">line printer to spring into action and</text><text start="1078.409" dur="6.111">print my three or four spelling mistakes</text><text start="1081.2" dur="6.81">on the line printer on many systems</text><text start="1084.52" dur="4.899">redirection of input and output is</text><text start="1088.01" dur="3.6">literally impossible because the</text><text start="1089.419" dur="4.531">programs have wired into them the notion</text><text start="1091.61" dur="3.93">that they have to read or write the</text><text start="1093.95" dur="2.01">user&amp;#39;s terminal and there&amp;#39;s simply no</text><text start="1095.54" dur="1.889">way</text><text start="1095.96" dur="4.65">to convince them otherwise they&amp;#39;d have</text><text start="1097.429" dur="5.61">to do that here that is not the case</text><text start="1100.61" dur="4.799">here any program can have its input or</text><text start="1103.039" dur="4.171">output redirected because the input and</text><text start="1105.409" dur="3.781">output redirection is handled not by the</text><text start="1107.21" dur="3.839">individual program but by the shell and</text><text start="1109.19" dur="4.5">so that way it applies to all programs</text><text start="1111.049" dur="4.26">without any exception at all and in fact</text><text start="1113.69" dur="5.01">this goes a little further than you</text><text start="1115.309" dur="5.73">might expect because not only are parts</text><text start="1118.7" dur="6.54">of the disk files as they are in other</text><text start="1121.039" dur="6.24">systems but in addition the i/o devices</text><text start="1125.24" dur="4.259">the peripheral devices connected to the</text><text start="1127.279" dur="4.02">computer are also files in the file</text><text start="1129.499" dur="3.3">system for example the line printer and</text><text start="1131.299" dur="4.291">the tape drive and even the thing that</text><text start="1132.799" dur="4.531">dials telephone numbers are all devices</text><text start="1135.59" dur="4.169">in the file system in the same program</text><text start="1137.33" dur="4.439">that will copy information from one disk</text><text start="1139.759" dur="4.53">file to another disk file will also copy</text><text start="1141.769" dur="4.35">information from a disk file to the line</text><text start="1144.289" dur="3.96">printer or from the magnetic tape drive</text><text start="1146.119" dur="5.971">to the printer the same program exactly</text><text start="1148.249" dur="6.721">a good operating system is easiest for</text><text start="1152.09" dur="5.219">programmer to use if the programming</text><text start="1154.97" dur="4.829">language fits with the style of the</text><text start="1157.309" dur="4.56">system so along the way in the course of</text><text start="1159.799" dur="4.71">the unit systems development Dennis</text><text start="1161.869" dur="5.16">Ritchie created the C language C is a</text><text start="1164.509" dur="4.951">very nice high-level language with many</text><text start="1167.029" dur="5.01">of the modern programming constructs in</text><text start="1169.46" dur="6.15">it the thing that&amp;#39;s very important about</text><text start="1172.039" dur="6.33">it is that it lets you avoid the details</text><text start="1175.61" dur="5.069">of the machine when you want to but when</text><text start="1178.369" dur="3.93">you need to and sometimes when you&amp;#39;re</text><text start="1180.679" dur="4.47">writing an operating system you really</text><text start="1182.299" dur="5.25">do need to you can get at the details of</text><text start="1185.149" dur="3.931">the machine and control everything but</text><text start="1187.549" dur="3.87">you&amp;#39;re not forced to do that and that&amp;#39;s</text><text start="1189.08" dur="4.079">important because that means you can</text><text start="1191.419" dur="4.5">write operating systems in this language</text><text start="1193.159" dur="5.431">and still have something that can be</text><text start="1195.919" dur="4.38">portable to other machines the UNIX</text><text start="1198.59" dur="4.439">system has been moved to many many</text><text start="1200.299" dur="5.161">different kinds of computers again that</text><text start="1203.029" dur="6.27">means that people can ignore the details</text><text start="1205.46" dur="7.89">of what a machine is underneath and get</text><text start="1209.299" dur="6.36">on with their job now so at that level C</text><text start="1213.35" dur="4.199">is by far the favorite language at the</text><text start="1215.659" dur="4.801">next level the shell programming</text><text start="1217.549" dur="4.891">language is very popular back on some</text><text start="1220.46" dur="3.87">machines people find that the shell</text><text start="1222.44" dur="4.349">meets all of their programming needs</text><text start="1224.33" dur="4.469">they are writing lots of procedures to</text><text start="1226.789" dur="3">help them manage their work they don&amp;#39;t</text><text start="1228.799" dur="5.1">even have to</text><text start="1229.789" dur="6.57">go to a language at the level of see as</text><text start="1233.899" dur="4.4">it happens though because the system is</text><text start="1236.359" dur="4.32">such a pleasant programming environment</text><text start="1238.299" dur="5.56">programmers all over the world have</text><text start="1240.679" dur="5.761">imported or added their own languages so</text><text start="1243.859" dur="6.601">for instance you can find Fortran Algol</text><text start="1246.44" dur="6.569">Lisp basic fact almost any language you</text><text start="1250.46" dur="4.11">can think of exists on some UNIX system</text><text start="1253.009" dur="3.78">somewhere what&amp;#39;s important about the</text><text start="1254.57" dur="4.62">unique system is not so much what Ricci</text><text start="1256.789" dur="4.98">and Thompson put into it as what they</text><text start="1259.19" dur="4.589">were able to leave out of it rather than</text><text start="1261.769" dur="5.58">produce a large number of primitives</text><text start="1263.779" dur="5.551">each one complex they were able to</text><text start="1267.349" dur="4.17">choose a small number of simple</text><text start="1269.33" dur="4.74">primitives which could be fitted</text><text start="1271.519" dur="4.71">naturally together to accomplish complex</text><text start="1274.07" dur="6.12">tasks this structure of the operating</text><text start="1276.229" dur="5.58">system makes it natural and easy for</text><text start="1280.19" dur="3.829">people who create applications to</text><text start="1281.809" dur="5.161">produce applications in that same style</text><text start="1284.019" dur="5.681">for example as the scale of integration</text><text start="1286.97" dur="4.319">of silicon circuits gets ever larger we</text><text start="1289.7" dur="3.659">find it necessary to have more and more</text><text start="1291.289" dur="4.171">sophisticated design aids to help people</text><text start="1293.359" dur="4.62">create large-scale integrated circuits</text><text start="1295.46" dur="4.86">our existing design aids are advanced</text><text start="1297.979" dur="4.231">and effective but advances in VLSI</text><text start="1300.32" dur="4.02">create a need for even better tools</text><text start="1302.21" dur="5.519">rather than produce those tools in the</text><text start="1304.34" dur="6.179">form of one humongous program designed</text><text start="1307.729" dur="4.95">to do everything the people here have</text><text start="1310.519" dur="4.321">been producing small packages each</text><text start="1312.679" dur="3.541">designed to do some individual function</text><text start="1314.84" dur="3.839">that&amp;#39;s helpful in the design of</text><text start="1316.22" dur="4.589">integrated circuits then these</text><text start="1318.679" dur="4.68">individual packages can be combined</text><text start="1320.809" dur="5.011">using shell procedures to design a part</text><text start="1323.359" dur="4.2">of a circuit or a circuit and the parts</text><text start="1325.82" dur="5.189">of a circuit can be combined to make a</text><text start="1327.559" dur="4.83">whole circuit Steve Johnson is one of</text><text start="1331.009" dur="3.691">the people who has been involved in this</text><text start="1332.389" dur="4.201">effort he is currently working on a</text><text start="1334.7" dur="4.319">program called Elgin which takes boolean</text><text start="1336.59" dur="5.159">equations as input and produces logic</text><text start="1339.019" dur="5.34">circuit designs as output because tool</text><text start="1341.749" dur="4.471">building is such a way of life on the</text><text start="1344.359" dur="4.2">UNIX system over the years we&amp;#39;ve</text><text start="1346.22" dur="5.73">developed tools that actually help us</text><text start="1348.559" dur="6.661">make other tools these involve things</text><text start="1351.95" dur="6.689">like parser generators lexical analyser</text><text start="1355.22" dur="9">generators and other programs that help</text><text start="1358.639" dur="6.841">us organize and develop tools these</text><text start="1364.22" dur="4.039">tools have been used in the development</text><text start="1365.48" dur="7.35">of L gen and many other applications</text><text start="1368.259" dur="9.16">here we see the boolean equations for a</text><text start="1372.83" dur="13.4">simple matter down here we have the</text><text start="1377.419" dur="8.811">equations for the carryout and the sum</text><text start="1388.14" dur="5.7">in the middle we have some descriptions</text><text start="1390.6" dur="6.209">as to how we would like the cell to be</text><text start="1393.84" dur="7.079">laid out geometrically see we would like</text><text start="1396.809" dur="7.59">the two inputs on the left side the</text><text start="1400.919" dur="8.061">carry in on the bottom the carryout on</text><text start="1404.399" dur="7.591">the top and the output on the right side</text><text start="1408.98" dur="5.65">the input equations first have to be</text><text start="1411.99" dur="4.98">processed so that they can be more</text><text start="1414.63" dur="4.679">easily represented in silicon this</text><text start="1416.97" dur="4.709">process is very similar to recognizing</text><text start="1419.309" dur="5.941">common sub-expressions in the input of a</text><text start="1421.679" dur="6.541">compiler input language the boolean</text><text start="1425.25" dur="5.97">equations are read and processed by a</text><text start="1428.22" dur="6.689">program called yak which was originally</text><text start="1431.22" dur="5.309">developed to help us build compilers but</text><text start="1434.909" dur="4.911">has in fact been used in a large number</text><text start="1436.529" dur="9.681">of application programs as well yak is</text><text start="1439.82" dur="8.739">based on the theory of lalr 1 parsing</text><text start="1446.21" dur="5.38">represents it builds a small finite</text><text start="1448.559" dur="6.12">state machine which is able to control</text><text start="1451.59" dur="7.579">the actions of the program which reads</text><text start="1454.679" dur="7.11">the input detect errors accurately and</text><text start="1459.169" dur="4.5">structure the input in such a way that</text><text start="1461.789" dur="6.99">the program can then go ahead and</text><text start="1463.669" dur="6.791">perform its operations on it after these</text><text start="1468.779" dur="4.441">equations have been processed</text><text start="1470.46" dur="7.74">it&amp;#39;s then necessary to worry about the</text><text start="1473.22" dur="7.98">geometric layout of the circuit this is</text><text start="1478.2" dur="6.51">done in the next 2 portions of el jem</text><text start="1481.2" dur="9.089">the first program worries about the</text><text start="1484.71" dur="8.9">ordering of these columns it uses a</text><text start="1490.289" dur="5.85">technique called graph partitioning to</text><text start="1493.61" dur="4.6">attempt to iteratively come up with a</text><text start="1496.139" dur="5.301">good solution to what is in fact an</text><text start="1498.21" dur="6.449">extremely difficult problem in theory</text><text start="1501.44" dur="6.4">after the columns have been ordered then</text><text start="1504.659" dur="6.65">the tracks where the signals run are</text><text start="1507.84" dur="7.11">laid out as well by another program and</text><text start="1511.309" dur="5.801">finally in some sense we now have the</text><text start="1514.95" dur="4.05">circuit designed and it&amp;#39;s simply a</text><text start="1517.11" dur="3.21">question of realizing it with the</text><text start="1519" dur="5.19">particular rules</text><text start="1520.32" dur="7.59">for our fabrication process and that is</text><text start="1524.19" dur="6.84">done by a fourth program so once again</text><text start="1527.91" dur="6.08">we have an example of taking a very</text><text start="1531.03" dur="5.61">complex problem dividing it into pieces</text><text start="1533.99" dur="5.89">representing each piece with a separate</text><text start="1536.64" dur="5.04">program and then using the facilities of</text><text start="1539.88" dur="5.78">the UNIX system to glue the pieces</text><text start="1541.68" dur="3.98">together into a coherent whole again</text><text start="1545.99" dur="3.82">computing is going to be more and more</text><text start="1547.92" dur="5.1">inner woven with people&amp;#39;s lives as the</text><text start="1549.81" dur="5.34">years go by so computer technology is</text><text start="1553.02" dur="5.28">going to have to evolve to be easier for</text><text start="1555.15" dur="5.13">people to use the unit system is not the</text><text start="1558.3" dur="5.33">end of the road in this regard but I</text><text start="1560.28" dur="3.35">think it&amp;#39;s a good step along the way</text><text start="1601.08" dur="2.06">you</text><text start="1630.37" dur="2.06">you</text><text start="1637.34" dur="2.06">you</text></transcript>