1 00:00:00,000 --> 00:00:21,660 2 00:00:21,660 --> 00:00:23,970 Welcome to the Distinguished Lecture series. 3 00:00:23,970 --> 00:00:27,270 I'm Karen Mathews of University Video Communications. 4 00:00:27,270 --> 00:00:28,980 Our program is designed to enrich 5 00:00:28,980 --> 00:00:30,840 graduate and upper division curriculum 6 00:00:30,840 --> 00:00:33,120 with academic presentations from top computer 7 00:00:33,120 --> 00:00:34,830 scientists and industry. 8 00:00:34,830 --> 00:00:36,540 Speakers and topics were nominated 9 00:00:36,540 --> 00:00:40,380 by computer science faculty of more than 50 universities. 10 00:00:40,380 --> 00:00:43,800 This presentation is sponsored by Apollo Computer. 11 00:00:43,800 --> 00:00:45,750 Dr. David Nelson, a leading figure 12 00:00:45,750 --> 00:00:48,840 in computer architecture, received his PhD in physics 13 00:00:48,840 --> 00:00:51,720 from the University of Maryland in 1970. 14 00:00:51,720 --> 00:00:54,780 He has managed research at Digital Equipment Corporation, 15 00:00:54,780 --> 00:00:57,900 and directed Research and Development at Prime Computer. 16 00:00:57,900 --> 00:01:00,330 He is now Vice President and Chief Technical Officer 17 00:01:00,330 --> 00:01:02,010 at Apollo Computer. 18 00:01:02,010 --> 00:01:04,500 His talk today is network computing. 19 00:01:04,500 --> 00:01:07,530 It's our pleasure to introduce Dr. David Nelson. 20 00:01:07,530 --> 00:01:08,270 Dr. Nelson. 21 00:01:08,270 --> 00:01:10,920 22 00:01:10,920 --> 00:01:12,660 Thank you, Karen. 23 00:01:12,660 --> 00:01:15,150 Before I begin a detailed discussion 24 00:01:15,150 --> 00:01:17,910 about the technical aspects of network computing, 25 00:01:17,910 --> 00:01:20,700 I'd like to build a context, a way of thinking 26 00:01:20,700 --> 00:01:25,290 about architecture and the technology in general. 27 00:01:25,290 --> 00:01:29,130 And I have developed a number of axioms that I, on the one hand, 28 00:01:29,130 --> 00:01:31,870 think are very simple and easy to understand, 29 00:01:31,870 --> 00:01:34,650 but on the other hand, I think are relatively significant 30 00:01:34,650 --> 00:01:37,380 and provide some insight. 31 00:01:37,380 --> 00:01:43,410 The first such axiom is the idea, or the observation, 32 00:01:43,410 --> 00:01:46,650 that computers over the years have generally 33 00:01:46,650 --> 00:01:50,310 cost an equal amount in terms of weight. 34 00:01:50,310 --> 00:01:52,470 And I've observed that independent of time 35 00:01:52,470 --> 00:01:56,700 and largely independent of the size of the computer, 36 00:01:56,700 --> 00:02:01,670 that figure on the order of $200 down to $100 a pound 37 00:02:01,670 --> 00:02:06,270 is not a bad estimate for how computers 38 00:02:06,270 --> 00:02:07,810 compare to each other. 39 00:02:07,810 --> 00:02:10,710 Another axiom is, again, relating to weight, 40 00:02:10,710 --> 00:02:15,270 is the idea that weight is a very good determinant of use. 41 00:02:15,270 --> 00:02:18,460 In the sense that a department for example, 42 00:02:18,460 --> 00:02:21,190 might use 500 pounds of computers, 43 00:02:21,190 --> 00:02:23,970 whereas an individual might use 50 pounds of computer. 44 00:02:23,970 --> 00:02:26,220 A personal portable computer might 45 00:02:26,220 --> 00:02:29,520 be as little as 10 pounds, for example. 46 00:02:29,520 --> 00:02:32,640 And when we view computer architecture this way, 47 00:02:32,640 --> 00:02:37,620 we can derive a system of tiers which really start 48 00:02:37,620 --> 00:02:44,010 with very large environments such as campus environments, 49 00:02:44,010 --> 00:02:47,010 and then a lower than that going to a building environment, 50 00:02:47,010 --> 00:02:51,750 and then further down is a department, an office, and then 51 00:02:51,750 --> 00:02:53,610 you get into the personal area which 52 00:02:53,610 --> 00:02:57,000 is briefcase computers, laptop computers, and even 53 00:02:57,000 --> 00:02:58,710 wallet-size computers. 54 00:02:58,710 --> 00:03:00,630 And one interesting thing about this 55 00:03:00,630 --> 00:03:03,810 is that over time the technology going 56 00:03:03,810 --> 00:03:07,590 across these multiple tiers has very accurately correlated 57 00:03:07,590 --> 00:03:11,820 weight to that environment. 58 00:03:11,820 --> 00:03:13,860 We've observed another axiom, which 59 00:03:13,860 --> 00:03:18,360 is that the technology rate through these various tiers 60 00:03:18,360 --> 00:03:22,050 is approximately 35% per year. 61 00:03:22,050 --> 00:03:27,180 When you compound that over a period of about seven years, 62 00:03:27,180 --> 00:03:30,640 you observe about a factor of 10 improvement. 63 00:03:30,640 --> 00:03:35,850 And so if we were to show that changes 64 00:03:35,850 --> 00:03:38,730 across the tiers as a function of time, 65 00:03:38,730 --> 00:03:41,700 we would get some very qualitative differences 66 00:03:41,700 --> 00:03:45,480 in the machines at each tier. 67 00:03:45,480 --> 00:03:49,980 We have here a chart which shows the computer developments, 68 00:03:49,980 --> 00:03:54,330 beginning in approximately 1960, and extrapolate it out 69 00:03:54,330 --> 00:03:56,220 to about 1990. 70 00:03:56,220 --> 00:03:59,550 And vertically is the logarithm of the cost 71 00:03:59,550 --> 00:04:02,740 of the machine or, accordingly, the weight of the machine. 72 00:04:02,740 --> 00:04:05,940 And so we find that the technology following 73 00:04:05,940 --> 00:04:09,120 an exponential curve at 35% a year, 74 00:04:09,120 --> 00:04:13,110 is represented here by the series of straight lines 75 00:04:13,110 --> 00:04:16,019 beginning at the upper left and then migrating slowly 76 00:04:16,019 --> 00:04:17,890 toward the bottom. 77 00:04:17,890 --> 00:04:22,050 We have found that concepts such as large virtual address 78 00:04:22,050 --> 00:04:23,760 spaces, and large physical address 79 00:04:23,760 --> 00:04:27,330 spaces, and many other concepts, such as hierarchical file 80 00:04:27,330 --> 00:04:32,640 systems and other properties, or characteristics, of computers 81 00:04:32,640 --> 00:04:37,650 typically obey this downward trend beginning at the top 82 00:04:37,650 --> 00:04:41,550 and evolving toward the lower right. 83 00:04:41,550 --> 00:04:44,610 When we populate these with workstations, 84 00:04:44,610 --> 00:04:47,490 we see that there is a further refinement 85 00:04:47,490 --> 00:04:53,190 of workstation products in that workstation tier. 86 00:04:53,190 --> 00:04:55,530 The problem that this all generates 87 00:04:55,530 --> 00:04:57,540 is that as time goes on, the tiers 88 00:04:57,540 --> 00:05:00,210 become more and more populated with computers. 89 00:05:00,210 --> 00:05:03,150 So these days we don't find simple environments. 90 00:05:03,150 --> 00:05:07,200 We find environments that contain a variety of computer 91 00:05:07,200 --> 00:05:11,070 sizes, ranging it with very large supercomputers at the top 92 00:05:11,070 --> 00:05:16,140 and building mainframes in the mid-range and department-sized 93 00:05:16,140 --> 00:05:18,840 computers lower down, and then finally workstations 94 00:05:18,840 --> 00:05:20,160 at the lower tier. 95 00:05:20,160 --> 00:05:22,950 And this, in part, has motivated the development 96 00:05:22,950 --> 00:05:25,110 of a network computing model, which 97 00:05:25,110 --> 00:05:30,750 is what I want to focus on primarily in this lecture. 98 00:05:30,750 --> 00:05:32,700 Network computing, in our judgment, 99 00:05:32,700 --> 00:05:36,120 should be viewed in a much broader context, which includes 100 00:05:36,120 --> 00:05:38,670 some predecessor architectures. 101 00:05:38,670 --> 00:05:41,730 Basically we view each of these architectures 102 00:05:41,730 --> 00:05:44,850 as being generational, that is one mode 103 00:05:44,850 --> 00:05:47,400 of computing lasted perhaps a decade each 104 00:05:47,400 --> 00:05:50,340 and then it gave way to the subsequent mode. 105 00:05:50,340 --> 00:05:54,180 So while the 1960s was largely associated with batch, 106 00:05:54,180 --> 00:05:58,170 and the 1970s was largely associated with time-sharing, 107 00:05:58,170 --> 00:06:00,900 Apollo Computer and others developed the idea 108 00:06:00,900 --> 00:06:03,930 of distributed workstations as being the principle 109 00:06:03,930 --> 00:06:06,480 architecture for the 1970s. 110 00:06:06,480 --> 00:06:09,000 We are now developing a technique 111 00:06:09,000 --> 00:06:11,550 which we refer to as network computing, which 112 00:06:11,550 --> 00:06:16,260 positions the entire environment for the 1990s. 113 00:06:16,260 --> 00:06:19,140 One interesting way of viewing this transition 114 00:06:19,140 --> 00:06:22,860 is to observe the ratio of computers per user 115 00:06:22,860 --> 00:06:25,240 over a very long period of time. 116 00:06:25,240 --> 00:06:28,890 The number of users per computer back in the 60s 117 00:06:28,890 --> 00:06:31,560 was literally thousands or more servicing 118 00:06:31,560 --> 00:06:33,060 a fairly wide community. 119 00:06:33,060 --> 00:06:37,000 The 1970s reduced that number down to approximately 100. 120 00:06:37,000 --> 00:06:40,560 The 1980s, with Apollo and others and personal computers, 121 00:06:40,560 --> 00:06:43,680 we reduced the ratio down to about one-to-one. 122 00:06:43,680 --> 00:06:46,290 The interesting question here is whether that ratio, 123 00:06:46,290 --> 00:06:48,810 or that trend in the ratio, will continue, 124 00:06:48,810 --> 00:06:51,060 or will it stop with one-to-one? 125 00:06:51,060 --> 00:06:53,850 And in fact, we believe that it will continue, 126 00:06:53,850 --> 00:06:56,710 that the ratio will invert itself, 127 00:06:56,710 --> 00:06:58,710 so that the number of computers will actually 128 00:06:58,710 --> 00:07:03,270 outnumber the number of users by a very significant margin. 129 00:07:03,270 --> 00:07:06,390 We could envision in the mid-90s of applications, 130 00:07:06,390 --> 00:07:09,540 single applications, doing single functions, 131 00:07:09,540 --> 00:07:12,660 taking advantage of literally hundreds of computers working 132 00:07:12,660 --> 00:07:16,080 collectively, partly in parallel, partly sequentially, 133 00:07:16,080 --> 00:07:22,790 but all to serve some greater goal or objective of the user. 134 00:07:22,790 --> 00:07:24,710 This diagram more or less shows some 135 00:07:24,710 --> 00:07:27,980 of the physical configurations of computer systems 136 00:07:27,980 --> 00:07:30,410 as they have evolved from the 60s and on. 137 00:07:30,410 --> 00:07:33,590 And in the lower right, we show a typical configuration 138 00:07:33,590 --> 00:07:35,960 of a network computing environment. 139 00:07:35,960 --> 00:07:38,690 Now I would stress in this diagram 140 00:07:38,690 --> 00:07:41,360 that we are not thinking of simply connecting together 141 00:07:41,360 --> 00:07:43,730 a large number of computers, but rather, we 142 00:07:43,730 --> 00:07:47,540 are developing a technique whereby a single application 143 00:07:47,540 --> 00:07:51,860 can dynamically run across an environment that's shown there. 144 00:07:51,860 --> 00:07:55,460 Taking advantage of say, a Cray, or taking advantage of an IBM 145 00:07:55,460 --> 00:07:59,030 mainframe, taking advantage of the graphics on a workstation, 146 00:07:59,030 --> 00:08:04,640 in one integrated solution. 147 00:08:04,640 --> 00:08:07,730 There are many dimensions to network computing. 148 00:08:07,730 --> 00:08:11,970 It includes certainly the user view. 149 00:08:11,970 --> 00:08:15,440 And in this area we regard the x windows standard 150 00:08:15,440 --> 00:08:19,460 developed at MIT as being very fundamental to the technique 151 00:08:19,460 --> 00:08:23,750 of exporting the user view across a network. 152 00:08:23,750 --> 00:08:27,230 Network computing services is in the second area, 153 00:08:27,230 --> 00:08:32,270 and here the yellow indicates systems 154 00:08:32,270 --> 00:08:34,520 which have been developed and are in place, 155 00:08:34,520 --> 00:08:37,070 and white indicates areas that are yet 156 00:08:37,070 --> 00:08:40,880 to be fully developed or explored. 157 00:08:40,880 --> 00:08:43,250 Further on, distributed data access, 158 00:08:43,250 --> 00:08:47,420 and further on is network administration issues. 159 00:08:47,420 --> 00:08:49,550 I'm going to narrow in on this broad view 160 00:08:49,550 --> 00:08:53,480 by focusing on the network computing architecture, 161 00:08:53,480 --> 00:08:58,220 and spend the rest of the time on, pretty much, this area 162 00:08:58,220 --> 00:08:59,750 of network computing services. 163 00:08:59,750 --> 00:09:03,770 164 00:09:03,770 --> 00:09:07,580 We look at the whole problem of network computing 165 00:09:07,580 --> 00:09:10,970 as being constructed, or I should say supported, 166 00:09:10,970 --> 00:09:13,790 by two pillars, if you will. 167 00:09:13,790 --> 00:09:19,040 One pillar being that which is associated with network data, 168 00:09:19,040 --> 00:09:21,710 and the other pillar being that which is associated 169 00:09:21,710 --> 00:09:23,960 with network computing. 170 00:09:23,960 --> 00:09:26,000 These two pillars, to some extent, 171 00:09:26,000 --> 00:09:30,080 represent the history of networking and the other pillar 172 00:09:30,080 --> 00:09:33,200 represents the future of networking. 173 00:09:33,200 --> 00:09:34,910 If you reflect on it, I think you'd 174 00:09:34,910 --> 00:09:39,080 agree that most of the networks over the past 25 or 30 years 175 00:09:39,080 --> 00:09:41,630 have been pretty much exclusively designed 176 00:09:41,630 --> 00:09:45,500 around the idea of transferring or accessing data. 177 00:09:45,500 --> 00:09:48,260 If you consider X.25, the ISO model, 178 00:09:48,260 --> 00:09:51,380 and many other networking schemes developed 179 00:09:51,380 --> 00:09:55,670 by various manufacturers, they have been principally developed 180 00:09:55,670 --> 00:09:58,940 for the purpose of transferring files or accessing 181 00:09:58,940 --> 00:10:00,690 files in place. 182 00:10:00,690 --> 00:10:03,890 The idea of accessing computation on other machines 183 00:10:03,890 --> 00:10:07,610 has been rather late-coming, rudimentary at best, 184 00:10:07,610 --> 00:10:11,030 and generally thought of as an afterthought, 185 00:10:11,030 --> 00:10:16,370 taking the principle role as being the axis of data. 186 00:10:16,370 --> 00:10:17,780 That's been the history. 187 00:10:17,780 --> 00:10:21,290 The future is to take is to re-examine networking and see 188 00:10:21,290 --> 00:10:25,250 if we can't build a far more comprehensive model to truly do 189 00:10:25,250 --> 00:10:26,960 distributed processing. 190 00:10:26,960 --> 00:10:30,800 Using all of the features that have been previously 191 00:10:30,800 --> 00:10:33,530 implemented regarding data access, 192 00:10:33,530 --> 00:10:36,590 but advancing these principles to solve 193 00:10:36,590 --> 00:10:41,150 the complementary problem of networked computing. 194 00:10:41,150 --> 00:10:44,090 Frequently, the question of why now is raised. 195 00:10:44,090 --> 00:10:45,710 The idea of distributed computing 196 00:10:45,710 --> 00:10:49,050 is not a new one, its history goes back at least 15 years, 197 00:10:49,050 --> 00:10:50,270 if not further. 198 00:10:50,270 --> 00:10:52,940 This has been a rather well explored topic. 199 00:10:52,940 --> 00:10:55,700 We have had numerous proposals, and implementations, 200 00:10:55,700 --> 00:10:58,820 and research studies, and languages have evolved, 201 00:10:58,820 --> 00:11:01,490 and architectures have been developed all for the purpose 202 00:11:01,490 --> 00:11:03,680 of distributing an application. 203 00:11:03,680 --> 00:11:06,680 But I think there are two trends that are occurring, 204 00:11:06,680 --> 00:11:09,380 or two significant happenings, which 205 00:11:09,380 --> 00:11:11,720 cause a commercial supplier like Apollo 206 00:11:11,720 --> 00:11:14,390 to take a good hard look at this technology. 207 00:11:14,390 --> 00:11:17,570 The first I'm going to comment on in a few moments, 208 00:11:17,570 --> 00:11:19,910 is basically the emergence of a large number 209 00:11:19,910 --> 00:11:23,450 of server hardware, which is being developed and now 210 00:11:23,450 --> 00:11:27,630 being marketed on networks in the industry. 211 00:11:27,630 --> 00:11:31,490 The second is certain advances in the area of software 212 00:11:31,490 --> 00:11:35,720 engineering, and I've prepared a very brief sequence 213 00:11:35,720 --> 00:11:39,890 over time of what I thought some significant happenings were 214 00:11:39,890 --> 00:11:42,240 in the area of software development. 215 00:11:42,240 --> 00:11:45,200 While I won't go through these in detail, 216 00:11:45,200 --> 00:11:47,240 there is an interesting trend that 217 00:11:47,240 --> 00:11:53,090 occurs when one looks down the chart from 1960 on. 218 00:11:53,090 --> 00:11:56,870 The 1960s, generally, it was the first decade 219 00:11:56,870 --> 00:12:00,390 to embrace high-level languages in any meaningful way. 220 00:12:00,390 --> 00:12:03,200 And so we saw languages such as Fortran and COBOL, 221 00:12:03,200 --> 00:12:05,390 which, to these standards, are largely 222 00:12:05,390 --> 00:12:07,610 regarded as unstructured languages, 223 00:12:07,610 --> 00:12:09,980 and so people didn't have any structured approach 224 00:12:09,980 --> 00:12:13,610 to either code or to data objects. 225 00:12:13,610 --> 00:12:18,140 The 1970s emerged with the concept 226 00:12:18,140 --> 00:12:19,700 of structured programming. 227 00:12:19,700 --> 00:12:23,570 Structured programming then led to the development, 228 00:12:23,570 --> 00:12:27,590 or the modernization of Fortran, and the Fortran 77 standard, 229 00:12:27,590 --> 00:12:32,150 and ultimately to the broader acceptance of C and Pascal. 230 00:12:32,150 --> 00:12:34,640 And these days practically all languages 231 00:12:34,640 --> 00:12:37,430 embody some form of structure in the programming. 232 00:12:37,430 --> 00:12:41,990 They did not, by and large, address data in a complete way. 233 00:12:41,990 --> 00:12:49,340 The 1980s are doing to data what the 1970s did for code. 234 00:12:49,340 --> 00:12:52,220 That is, it is through the techniques, which 235 00:12:52,220 --> 00:12:54,680 are referred to as object-oriented design, 236 00:12:54,680 --> 00:12:57,620 we are now adding a high degree of structure to data. 237 00:12:57,620 --> 00:13:01,970 By essentially encapsulating it into objects, 238 00:13:01,970 --> 00:13:05,420 encapsulating data and procedures into objects, 239 00:13:05,420 --> 00:13:08,210 allowing the internal state of these objects 240 00:13:08,210 --> 00:13:13,160 to be varied and hidden from the rest of the world, 241 00:13:13,160 --> 00:13:14,840 placing a high degree of emphasis 242 00:13:14,840 --> 00:13:17,120 on the external interface of the object, 243 00:13:17,120 --> 00:13:19,400 and attempting to describe applications 244 00:13:19,400 --> 00:13:24,020 more as relationships, or interactions, of objects. 245 00:13:24,020 --> 00:13:26,990 The significance here with regard to network computing 246 00:13:26,990 --> 00:13:31,100 is that to the extent we can, in fact, think of applications 247 00:13:31,100 --> 00:13:34,730 as collections of objects, we have, in essence, 248 00:13:34,730 --> 00:13:39,470 decomposed a large, linear, complicated address space 249 00:13:39,470 --> 00:13:45,200 into a number of independent, smaller address spaces. 250 00:13:45,200 --> 00:13:48,440 And since we've then decomposed the virtual address 251 00:13:48,440 --> 00:13:51,470 space we can in turn then, think of decomposing 252 00:13:51,470 --> 00:13:53,780 the physical address space and, in fact, assigning 253 00:13:53,780 --> 00:13:58,640 each of those address spaces to a unique physical machine. 254 00:13:58,640 --> 00:14:02,540 So to some extent, the network computing architecture 255 00:14:02,540 --> 00:14:06,470 can be thought of as an application which 256 00:14:06,470 --> 00:14:08,810 is comprised of a set of distributed 257 00:14:08,810 --> 00:14:10,850 network-based objects. 258 00:14:10,850 --> 00:14:13,770 Now a good deal of the formalism and the theory, 259 00:14:13,770 --> 00:14:16,190 I should say, behind network computing 260 00:14:16,190 --> 00:14:22,340 is described in terms of object-oriented design. 261 00:14:22,340 --> 00:14:25,100 Having said that, however, it's important to realize 262 00:14:25,100 --> 00:14:28,340 that this requirement does not extend 263 00:14:28,340 --> 00:14:30,140 its way into the application. 264 00:14:30,140 --> 00:14:33,140 The network computing system that I'll be describing here 265 00:14:33,140 --> 00:14:37,460 is very appropriate for non-object-oriented languages 266 00:14:37,460 --> 00:14:42,080 such as C, and Fortran, and Pascal, and others. 267 00:14:42,080 --> 00:14:45,230 But much of the theoretical description 268 00:14:45,230 --> 00:14:47,600 and the architectural description of network 269 00:14:47,600 --> 00:14:51,110 computing is, in fact, described in terms 270 00:14:51,110 --> 00:14:54,020 of object-oriented design, and is most appropriately 271 00:14:54,020 --> 00:14:58,430 thought of in terms of object-oriented designs. 272 00:14:58,430 --> 00:15:00,140 The other trend I want to get back to 273 00:15:00,140 --> 00:15:04,790 is one, really, comprised of two trends, one 274 00:15:04,790 --> 00:15:07,730 in the area of applications and the other in the area 275 00:15:07,730 --> 00:15:10,130 of hardware development. 276 00:15:10,130 --> 00:15:13,040 And my assertion here is that these two trends are really 277 00:15:13,040 --> 00:15:18,020 diverging and proceeding in opposite direction, 278 00:15:18,020 --> 00:15:20,780 requiring, therefore, something like network computing 279 00:15:20,780 --> 00:15:22,460 to bring them back together. 280 00:15:22,460 --> 00:15:25,880 Simply stated, the trend in the area of applications 281 00:15:25,880 --> 00:15:29,060 is toward integration of multiple disciplines 282 00:15:29,060 --> 00:15:30,380 of computation. 283 00:15:30,380 --> 00:15:32,150 And here we refer to a discipline 284 00:15:32,150 --> 00:15:35,690 as being, say, computation, which is highly numerical; 285 00:15:35,690 --> 00:15:38,750 or graphics which is, obviously, graphics; 286 00:15:38,750 --> 00:15:42,440 simulation, which is frequently logical in its nature; 287 00:15:42,440 --> 00:15:45,890 data management; AI; and many others, all of which 288 00:15:45,890 --> 00:15:49,940 here we think of as being generic forms of computation. 289 00:15:49,940 --> 00:15:52,130 Years ago, we would find applications 290 00:15:52,130 --> 00:15:55,950 that would exclusively involve one discipline. 291 00:15:55,950 --> 00:15:58,580 For example, we might find an application that simply 292 00:15:58,580 --> 00:16:02,330 did computation, or another application, modeling 293 00:16:02,330 --> 00:16:05,300 or drafting, which simply did graphics. 294 00:16:05,300 --> 00:16:07,640 These days, however, application developers 295 00:16:07,640 --> 00:16:10,700 are tending to integrate multiple disciplines together 296 00:16:10,700 --> 00:16:12,650 into a single application. 297 00:16:12,650 --> 00:16:14,300 Clearly in the area of workstations, 298 00:16:14,300 --> 00:16:16,340 we integrate computation and graphics 299 00:16:16,340 --> 00:16:18,170 in a very integrated way. 300 00:16:18,170 --> 00:16:20,420 And in the area of electronic design, 301 00:16:20,420 --> 00:16:22,340 we include things like simulation, 302 00:16:22,340 --> 00:16:25,340 and in the area of mechanical solids modeling, 303 00:16:25,340 --> 00:16:28,460 we very much integrate data management. 304 00:16:28,460 --> 00:16:31,920 Not to exclude the others, such as AI, and testing, and so on. 305 00:16:31,920 --> 00:16:33,590 So the tendency here is very clear, 306 00:16:33,590 --> 00:16:37,550 and that is one of integrating multiple pieces of this puzzle 307 00:16:37,550 --> 00:16:41,360 together into a single application. 308 00:16:41,360 --> 00:16:42,920 What is the problem with this? 309 00:16:42,920 --> 00:16:46,460 The problem simply stated, is that hardware does not 310 00:16:46,460 --> 00:16:49,280 generally map well on to this puzzle. 311 00:16:49,280 --> 00:16:51,650 Hardware, in fact, is going more or less 312 00:16:51,650 --> 00:16:55,460 in the opposite direction, as shown here. 313 00:16:55,460 --> 00:16:57,200 While applications are integrating, 314 00:16:57,200 --> 00:16:58,850 one could say that hardware is somewhat 315 00:16:58,850 --> 00:17:02,630 disintegrating, that is, they're specializing in their design. 316 00:17:02,630 --> 00:17:05,869 So rather than finding a processor or a machine that 317 00:17:05,869 --> 00:17:10,369 can equally well run all of the various generic types 318 00:17:10,369 --> 00:17:13,130 of computation, we find just the opposite, 319 00:17:13,130 --> 00:17:14,569 that products are being developed 320 00:17:14,569 --> 00:17:18,020 to run one type of computation very well, 321 00:17:18,020 --> 00:17:21,480 and neglecting altogether the other types. 322 00:17:21,480 --> 00:17:25,640 And basically developing these components as 323 00:17:25,640 --> 00:17:28,430 servers to be integrated at the network level. 324 00:17:28,430 --> 00:17:31,790 325 00:17:31,790 --> 00:17:34,550 The reason for specialization in the area of hardware 326 00:17:34,550 --> 00:17:39,290 is complicated, but it's very compelling 327 00:17:39,290 --> 00:17:42,500 to look at the results. 328 00:17:42,500 --> 00:17:46,160 This chart compares the price performance ratio 329 00:17:46,160 --> 00:17:50,270 of special purpose machines to general purpose machines, 330 00:17:50,270 --> 00:17:54,300 as a function of a typical figure of merit of computation. 331 00:17:54,300 --> 00:17:56,120 So for example, if the application 332 00:17:56,120 --> 00:18:00,450 requires integer MIPS, we can go to a special purpose computer 333 00:18:00,450 --> 00:18:03,320 and buy it at roughly a 6-to-1 advantage 334 00:18:03,320 --> 00:18:05,150 over a general purpose computer. 335 00:18:05,150 --> 00:18:08,270 If our interest is in megaflops, we can have a 10 to 1 336 00:18:08,270 --> 00:18:09,140 advantage. 337 00:18:09,140 --> 00:18:12,260 If our application is AI-oriented, and therefore 338 00:18:12,260 --> 00:18:15,110 logical inferences per second, we can find a 4 339 00:18:15,110 --> 00:18:18,830 to 5-to-1 advantage, simply by going to a special purpose 340 00:18:18,830 --> 00:18:21,740 computer rather than a general purpose computer. 341 00:18:21,740 --> 00:18:24,020 Similarly for transactions per second, 342 00:18:24,020 --> 00:18:27,890 we have a 12-to-1 advantage, and for events 343 00:18:27,890 --> 00:18:32,390 per second for simulators, MTB for fault-tolerant systems, 344 00:18:32,390 --> 00:18:34,670 vectors per second for graphics systems. 345 00:18:34,670 --> 00:18:37,640 All of these give a significant advantage 346 00:18:37,640 --> 00:18:41,420 when the customer, essentially, buys a special purpose 347 00:18:41,420 --> 00:18:44,480 computer rather than a general purpose computer. 348 00:18:44,480 --> 00:18:47,960 The problem is, of course, that applications don't map well 349 00:18:47,960 --> 00:18:49,340 on to this hardware. 350 00:18:49,340 --> 00:18:53,270 But what we want, therefore, is a runtime environment 351 00:18:53,270 --> 00:18:56,090 that essentially allows for the application shown 352 00:18:56,090 --> 00:18:58,910 on the right, comprised of multiple pieces, 353 00:18:58,910 --> 00:19:03,290 multiple components, to be executing transparently 354 00:19:03,290 --> 00:19:06,380 on the configuration shown on the left. 355 00:19:06,380 --> 00:19:10,700 Assigning, dynamically perhaps, the computational part 356 00:19:10,700 --> 00:19:14,180 of the application to a compute server, 357 00:19:14,180 --> 00:19:18,530 the graphics part of an application to a workstation, 358 00:19:18,530 --> 00:19:22,400 the data management part of the application to a database 359 00:19:22,400 --> 00:19:24,660 server, and so on. 360 00:19:24,660 --> 00:19:27,840 So that here we are able to have the better of both worlds. 361 00:19:27,840 --> 00:19:30,770 We're able to perceive and develop 362 00:19:30,770 --> 00:19:33,860 the application as a single entity on the one hand, 363 00:19:33,860 --> 00:19:36,170 and on the other hand, have its execution 364 00:19:36,170 --> 00:19:38,870 occur on the machine which is best designed 365 00:19:38,870 --> 00:19:41,750 for that type of application. 366 00:19:41,750 --> 00:19:44,810 The challenges are many-fold, I've introduced a few of them 367 00:19:44,810 --> 00:19:46,130 here. 368 00:19:46,130 --> 00:19:51,080 Foremost, perhaps is to leverage the rather significant 369 00:19:51,080 --> 00:19:54,290 investment that the industry has made in the area of software 370 00:19:54,290 --> 00:19:55,220 engineering. 371 00:19:55,220 --> 00:19:59,450 And so, to this goal we have insisted that there be really 372 00:19:59,450 --> 00:20:03,410 no new software engineering concepts introduced 373 00:20:03,410 --> 00:20:05,390 in the network computing system. 374 00:20:05,390 --> 00:20:09,620 We want the software engineer to think of the application 375 00:20:09,620 --> 00:20:13,190 as being singular, integrated together, 376 00:20:13,190 --> 00:20:19,920 and we want the concept of assignment to be dynamic. 377 00:20:19,920 --> 00:20:24,560 We want to have the perception on the part of the user 378 00:20:24,560 --> 00:20:28,100 to be one where the user is not necessarily 379 00:20:28,100 --> 00:20:33,900 aware of where computation is taking place, and so on. 380 00:20:33,900 --> 00:20:37,310 So on the one hand, we want to have the logical advantages 381 00:20:37,310 --> 00:20:40,400 of a single application, and do so 382 00:20:40,400 --> 00:20:44,330 in a manner which does not introduce any new programming 383 00:20:44,330 --> 00:20:45,890 concepts. 384 00:20:45,890 --> 00:20:50,900 The second challenge is to take advantage of the dynamic nature 385 00:20:50,900 --> 00:20:51,920 of networks. 386 00:20:51,920 --> 00:20:54,470 And here we use terms such as accommodate 387 00:20:54,470 --> 00:20:59,330 and exploit to describe our objectives here. 388 00:20:59,330 --> 00:21:01,610 Applications should not be dependent 389 00:21:01,610 --> 00:21:04,100 on any particular network configuration, 390 00:21:04,100 --> 00:21:05,810 but rather, they should accommodate 391 00:21:05,810 --> 00:21:09,320 a variety of configurations and, in fact, 392 00:21:09,320 --> 00:21:12,110 accommodate them in real time as the configuration 393 00:21:12,110 --> 00:21:13,640 of the network changes. 394 00:21:13,640 --> 00:21:17,210 Machines, after all, can go up and they can come down, 395 00:21:17,210 --> 00:21:19,260 networks can break and so on. 396 00:21:19,260 --> 00:21:21,710 So we like to think of the application 397 00:21:21,710 --> 00:21:25,910 rather like an expanding gas, where the gas is rather 398 00:21:25,910 --> 00:21:29,630 contained by the pressure exerted on it through a vessel, 399 00:21:29,630 --> 00:21:30,530 or whatever. 400 00:21:30,530 --> 00:21:34,520 As the pressure is released and the vessel more or less 401 00:21:34,520 --> 00:21:37,100 expands, the gas expands to fill it. 402 00:21:37,100 --> 00:21:40,340 And conversely as the environment exerts pressure 403 00:21:40,340 --> 00:21:43,730 on the gas, the gas contracts. 404 00:21:43,730 --> 00:21:47,420 The metaphor here is applied to networks in the sense 405 00:21:47,420 --> 00:21:51,800 that as networks break, the application 406 00:21:51,800 --> 00:21:55,490 should contract and accommodate whatever environment 407 00:21:55,490 --> 00:21:57,470 that it sees. 408 00:21:57,470 --> 00:21:59,900 And conversely, when the network is repaired, 409 00:21:59,900 --> 00:22:02,840 the application should suddenly somehow expand 410 00:22:02,840 --> 00:22:06,920 to take advantage of that repair. 411 00:22:06,920 --> 00:22:09,650 The network computing system that I 412 00:22:09,650 --> 00:22:11,330 will describe in a little more detail 413 00:22:11,330 --> 00:22:17,940 here exists currently as three major components. 414 00:22:17,940 --> 00:22:21,290 These components exist on not only Apollo computers, 415 00:22:21,290 --> 00:22:26,480 but they exist on most other competitive machines. 416 00:22:26,480 --> 00:22:28,160 They've been ported to, and continue 417 00:22:28,160 --> 00:22:31,130 to be ported to, a wide variety of workstations, 418 00:22:31,130 --> 00:22:35,960 a wide variety of server processors, and so on. 419 00:22:35,960 --> 00:22:39,920 The three components here include a locating broker, 420 00:22:39,920 --> 00:22:44,630 a RPC architecture, and an NDL, or NDL compiler. 421 00:22:44,630 --> 00:22:47,240 The locating broker is a database 422 00:22:47,240 --> 00:22:49,400 in the system which helps facilitate 423 00:22:49,400 --> 00:22:54,410 what we refer to as deferred binding, or dynamic linking. 424 00:22:54,410 --> 00:22:57,200 Binding is a process, as we all know, 425 00:22:57,200 --> 00:23:00,680 of one of linking together, or binding together, 426 00:23:00,680 --> 00:23:02,900 various software modules, typically 427 00:23:02,900 --> 00:23:05,030 subroutines or procedures. 428 00:23:05,030 --> 00:23:07,280 Binding is usually static, that is 429 00:23:07,280 --> 00:23:09,800 to say that developers bind-- 430 00:23:09,800 --> 00:23:12,620 or they compile a series of modules, 431 00:23:12,620 --> 00:23:16,520 and then they bind them together into a static executable unit. 432 00:23:16,520 --> 00:23:20,120 Some systems have employed dynamic linking, or deferred 433 00:23:20,120 --> 00:23:23,600 binding, in the context of an operating system to facilitate 434 00:23:23,600 --> 00:23:26,190 linking to libraries and so on. 435 00:23:26,190 --> 00:23:28,490 But by and large, applications have 436 00:23:28,490 --> 00:23:31,370 gone through static binding techniques. 437 00:23:31,370 --> 00:23:36,590 We have implemented a technique of deferred binding, 438 00:23:36,590 --> 00:23:40,430 largely for the purpose of deferring the binding problem 439 00:23:40,430 --> 00:23:43,190 until execution time, where we can take 440 00:23:43,190 --> 00:23:45,410 better advantage of the information 441 00:23:45,410 --> 00:23:47,460 about the state of the network. 442 00:23:47,460 --> 00:23:51,350 So rather than bind two modules together, one on a workstation, 443 00:23:51,350 --> 00:23:54,110 and one on a mainframe, ahead of time, 444 00:23:54,110 --> 00:23:56,780 we would rather defer and make that decision 445 00:23:56,780 --> 00:23:59,600 at execution time, to take advantage of the fact 446 00:23:59,600 --> 00:24:02,450 that maybe the mainframe is down, or too busy 447 00:24:02,450 --> 00:24:06,380 or whatever other dimensions of the problem 448 00:24:06,380 --> 00:24:07,760 might be imposed on it. 449 00:24:07,760 --> 00:24:11,540 So by implementing dynamic binding, or deferred linking, 450 00:24:11,540 --> 00:24:15,740 we can essentially create a much more dynamic environment 451 00:24:15,740 --> 00:24:19,580 and assign the various procedures, or modules, 452 00:24:19,580 --> 00:24:23,900 of the application to the appropriate part of the network 453 00:24:23,900 --> 00:24:26,000 at execution time. 454 00:24:26,000 --> 00:24:28,970 I have mentioned the idea of procedures. 455 00:24:28,970 --> 00:24:31,670 Procedures are the basic building blocks 456 00:24:31,670 --> 00:24:34,310 of applications. 457 00:24:34,310 --> 00:24:36,290 Procedures are generally implemented-- 458 00:24:36,290 --> 00:24:39,170 referenced from one module to another through a procedure 459 00:24:39,170 --> 00:24:43,430 call, and we have implemented remote procedure call, largely 460 00:24:43,430 --> 00:24:45,980 as a mechanism to transfer control 461 00:24:45,980 --> 00:24:47,820 from one computer to another. 462 00:24:47,820 --> 00:24:51,380 So the way in which we dynamically assign the program 463 00:24:51,380 --> 00:24:55,910 from one computer to another is at the procedure call level, 464 00:24:55,910 --> 00:24:58,730 and we do it through what's called a remote procedure call 465 00:24:58,730 --> 00:25:00,170 architecture. 466 00:25:00,170 --> 00:25:02,070 RPCs are not new. 467 00:25:02,070 --> 00:25:04,430 They have been fairly well explored 468 00:25:04,430 --> 00:25:06,590 over the last 10 to 15 years. 469 00:25:06,590 --> 00:25:08,910 They've been implemented in numerous systems, 470 00:25:08,910 --> 00:25:10,610 including ours and others. 471 00:25:10,610 --> 00:25:13,520 But the unique thing about the NCS RPC 472 00:25:13,520 --> 00:25:18,290 is the way in which it interacts with the NDL compiler, which 473 00:25:18,290 --> 00:25:20,550 I will describe in a few moments, 474 00:25:20,550 --> 00:25:25,040 so as to provide application-level transparency. 475 00:25:25,040 --> 00:25:28,100 Application-level transparency is required here 476 00:25:28,100 --> 00:25:30,560 because we don't want the software 477 00:25:30,560 --> 00:25:33,050 developer, or the application developer, 478 00:25:33,050 --> 00:25:36,920 to be necessarily aware of how the application is, 479 00:25:36,920 --> 00:25:39,720 in fact, going to decompose across the network. 480 00:25:39,720 --> 00:25:44,390 So we are able, rather than to assign specific procedure names 481 00:25:44,390 --> 00:25:48,800 to do RPC, we are able to allow application-oriented 482 00:25:48,800 --> 00:25:52,070 procedures, such as invert a matrix, or whatever, 483 00:25:52,070 --> 00:25:55,760 to be dynamically assigned to various machines 484 00:25:55,760 --> 00:26:01,420 in a way that is transparent to the rest of the application. 485 00:26:01,420 --> 00:26:04,560 It's important to understand how these three components play 486 00:26:04,560 --> 00:26:08,660 together in the context of a real application. 487 00:26:08,660 --> 00:26:11,360 In order to consider a real application, 488 00:26:11,360 --> 00:26:16,020 let's consider the dimensions of a typical application. 489 00:26:16,020 --> 00:26:19,610 For example, it may be comprised of literally dozens, 490 00:26:19,610 --> 00:26:22,190 or hundreds or more, procedures. 491 00:26:22,190 --> 00:26:26,330 These procedures can in turn be nested to some arbitrary 492 00:26:26,330 --> 00:26:28,370 level of depth. 493 00:26:28,370 --> 00:26:30,650 Procedures can call procedures, which 494 00:26:30,650 --> 00:26:32,300 in turn can call other procedures, 495 00:26:32,300 --> 00:26:37,880 and this nesting of procedure calls can be quite deep. 496 00:26:37,880 --> 00:26:40,250 So in a network computing environment, 497 00:26:40,250 --> 00:26:43,730 when we want to dynamically switch from one computer 498 00:26:43,730 --> 00:26:47,000 to another at the event of a procedure call, 499 00:26:47,000 --> 00:26:49,430 it's pretty clear that we could develop a very, very 500 00:26:49,430 --> 00:26:50,840 complex environment. 501 00:26:50,840 --> 00:26:53,830 Because one procedure call could call another computer, which 502 00:26:53,830 --> 00:26:55,580 in turn could call another computer, which 503 00:26:55,580 --> 00:26:57,590 could call my computer back again, 504 00:26:57,590 --> 00:27:01,520 and this could wind itself into a very complicated state. 505 00:27:01,520 --> 00:27:04,490 Now in order to understand all of that, what I'd like to do 506 00:27:04,490 --> 00:27:07,880 is to describe a very simple application, in fact, 507 00:27:07,880 --> 00:27:09,710 the most trivial application that 508 00:27:09,710 --> 00:27:11,690 involves a procedure at all. 509 00:27:11,690 --> 00:27:15,440 And that's shown on this slide, which at the top center 510 00:27:15,440 --> 00:27:22,130 has one application comprised of a main body program and one 511 00:27:22,130 --> 00:27:23,370 procedure. 512 00:27:23,370 --> 00:27:26,810 So the idea here is that the application developer 513 00:27:26,810 --> 00:27:31,070 think of and design the application 514 00:27:31,070 --> 00:27:36,170 as being, very simply, a main program and one procedure. 515 00:27:36,170 --> 00:27:39,020 It is desirable, however, to run, 516 00:27:39,020 --> 00:27:42,260 for example, the main program on the Apollo 517 00:27:42,260 --> 00:27:46,880 system on the left and the subroutine, or the procedure, 518 00:27:46,880 --> 00:27:49,790 on the Vax computer on the right. 519 00:27:49,790 --> 00:27:53,720 We want to do that in a way that preserves-- totally, 520 00:27:53,720 --> 00:27:55,040 if possible-- 521 00:27:55,040 --> 00:27:58,010 the procedure call interface. 522 00:27:58,010 --> 00:28:02,120 The procedure call interface can include parameter passing 523 00:28:02,120 --> 00:28:04,130 and a variety of other things which 524 00:28:04,130 --> 00:28:06,710 can complicate the environment. 525 00:28:06,710 --> 00:28:09,740 We want, further, to perhaps run the procedure not 526 00:28:09,740 --> 00:28:11,840 on a specific Vax, but we may want 527 00:28:11,840 --> 00:28:15,080 to run it on, say, one of a family of Vaxs. 528 00:28:15,080 --> 00:28:18,170 Perhaps the environment has two or four Vaxs. 529 00:28:18,170 --> 00:28:20,810 We might also want to run the procedure 530 00:28:20,810 --> 00:28:24,690 on a mainframe computer, which is not shown on the diagram. 531 00:28:24,690 --> 00:28:28,640 So the policy may be something like run the procedure 532 00:28:28,640 --> 00:28:30,860 on the mainframe if it is available, 533 00:28:30,860 --> 00:28:33,530 and if it isn't available, then contract and run it 534 00:28:33,530 --> 00:28:36,320 on one of the Vaxs, and if they aren't available, 535 00:28:36,320 --> 00:28:38,960 whatever that might mean, then contract and run 536 00:28:38,960 --> 00:28:41,090 the subroutine on the Apollo. 537 00:28:41,090 --> 00:28:42,830 But from the user's point of view, 538 00:28:42,830 --> 00:28:45,440 and from the software developer's point of view, 539 00:28:45,440 --> 00:28:47,610 that assignment is not important. 540 00:28:47,610 --> 00:28:49,850 The point here is that the application, 541 00:28:49,850 --> 00:28:52,370 from both the developer's and the user's point of view 542 00:28:52,370 --> 00:28:56,000 is perceived as a single entity, and the assignment 543 00:28:56,000 --> 00:28:58,370 of the procedure is done dynamically 544 00:28:58,370 --> 00:29:02,420 by the system in conjunction with the locating broker. 545 00:29:02,420 --> 00:29:06,020 The assignment of procedures to other machines 546 00:29:06,020 --> 00:29:07,520 is obviously not trivial. 547 00:29:07,520 --> 00:29:10,220 We have a number of problems to overcome here, 548 00:29:10,220 --> 00:29:14,210 not the least of which is the dealing of parameters, which 549 00:29:14,210 --> 00:29:16,310 in part can be called by value, and part 550 00:29:16,310 --> 00:29:17,900 can be called by reference. 551 00:29:17,900 --> 00:29:21,140 There are other issues, such as dealing with pointer variables, 552 00:29:21,140 --> 00:29:23,540 and variably dimensioned arrays, and things 553 00:29:23,540 --> 00:29:26,420 like that, all of which have to be dealt with by the network 554 00:29:26,420 --> 00:29:28,280 computing runtime environment. 555 00:29:28,280 --> 00:29:31,250 Furthermore, we have differences in machine architecture. 556 00:29:31,250 --> 00:29:33,830 Clearly these two machines have different representations 557 00:29:33,830 --> 00:29:35,690 for floating point, and that turns out 558 00:29:35,690 --> 00:29:38,240 to be a relatively easy thing to deal with. 559 00:29:38,240 --> 00:29:40,190 More complicated, however, is the fact 560 00:29:40,190 --> 00:29:42,500 that the two machines order bytes differently 561 00:29:42,500 --> 00:29:43,950 to form integers. 562 00:29:43,950 --> 00:29:46,940 And so while on the Apollo we form it one way, 563 00:29:46,940 --> 00:29:48,600 the Vax forms it another way. 564 00:29:48,600 --> 00:29:50,870 And so we need a much lower level information 565 00:29:50,870 --> 00:29:56,750 than is typically provided by languages, or by filesystems, 566 00:29:56,750 --> 00:29:59,210 and things like that, to essentially solve 567 00:29:59,210 --> 00:30:01,560 this byte ordering problem. 568 00:30:01,560 --> 00:30:04,310 Obviously, the runtime environment 569 00:30:04,310 --> 00:30:06,890 has to deal with the dynamics and uncertain nature 570 00:30:06,890 --> 00:30:08,750 of networks. 571 00:30:08,750 --> 00:30:11,893 The fact that machines fail while applications are running, 572 00:30:11,893 --> 00:30:13,310 and so the runtime environment has 573 00:30:13,310 --> 00:30:16,880 to monitor the machines to which they have assigned work, 574 00:30:16,880 --> 00:30:17,960 and so on. 575 00:30:17,960 --> 00:30:20,210 There's a high degree of complexity associated 576 00:30:20,210 --> 00:30:22,230 with the runtime environment. 577 00:30:22,230 --> 00:30:25,630 So, consequently, we introduce this concept of a stub. 578 00:30:25,630 --> 00:30:30,440 A stub means that something remains after you break it off. 579 00:30:30,440 --> 00:30:33,890 And so in moving the application to the machine on the right, 580 00:30:33,890 --> 00:30:36,020 or the subroutine to the machine on the right, 581 00:30:36,020 --> 00:30:37,910 there remains a stub on the machine 582 00:30:37,910 --> 00:30:42,420 on the left to totally mimic the missing part on the left. 583 00:30:42,420 --> 00:30:44,180 Similarly, on the machine on the right, 584 00:30:44,180 --> 00:30:48,650 we introduce a stub to totally mimic the missing main program 585 00:30:48,650 --> 00:30:50,090 on the machine on the left. 586 00:30:50,090 --> 00:30:52,430 The stubs then cooperate in dealing 587 00:30:52,430 --> 00:30:55,400 with all of the problems that I have mentioned, 588 00:30:55,400 --> 00:30:57,890 in a way that minimizes, if not eliminates, 589 00:30:57,890 --> 00:31:01,640 all of the additional complexity on the part of the application. 590 00:31:01,640 --> 00:31:05,600 The problem then becomes one of who generates the stubs? 591 00:31:05,600 --> 00:31:07,520 How do we generate them? 592 00:31:07,520 --> 00:31:09,980 Who manages them, who maintains them, 593 00:31:09,980 --> 00:31:13,820 and who guarantees their integrity, and so on. 594 00:31:13,820 --> 00:31:17,240 The stubs are generated by another part of the NCS 595 00:31:17,240 --> 00:31:20,180 architecture, which is called the NDL compiler. 596 00:31:20,180 --> 00:31:24,110 NDL refers to network interface definition language. 597 00:31:24,110 --> 00:31:25,820 The interface definition language 598 00:31:25,820 --> 00:31:29,120 is shown at the very top of this slide in blue, 599 00:31:29,120 --> 00:31:32,630 and basically contains a description and interface 600 00:31:32,630 --> 00:31:35,540 definition of where the application is 601 00:31:35,540 --> 00:31:36,920 to be partitioned. 602 00:31:36,920 --> 00:31:40,350 It contains the names of the various procedures, 603 00:31:40,350 --> 00:31:43,100 contains a list of all the variables that are passed. 604 00:31:43,100 --> 00:31:45,860 Most importantly, it contains type information 605 00:31:45,860 --> 00:31:48,060 associated with each of these variables 606 00:31:48,060 --> 00:31:50,300 so that we can subsequently solve 607 00:31:50,300 --> 00:31:54,410 this problem of byte ordering and different formats 608 00:31:54,410 --> 00:31:57,080 for data types. 609 00:31:57,080 --> 00:32:01,130 The NDL compiler reads the interface definition, 610 00:32:01,130 --> 00:32:04,520 and essentially automatically generates the stubs. 611 00:32:04,520 --> 00:32:08,060 The stubs are then compiled on the various target machines, 612 00:32:08,060 --> 00:32:11,000 in this case an Apollo on the left and a Vax on the right, 613 00:32:11,000 --> 00:32:12,950 and, in addition, it can be compiled 614 00:32:12,950 --> 00:32:15,740 on various other machines such as a mainframe. 615 00:32:15,740 --> 00:32:18,620 The stubs are then compiled and bound together 616 00:32:18,620 --> 00:32:21,830 with the various component of the application 617 00:32:21,830 --> 00:32:24,000 to form a server process. 618 00:32:24,000 --> 00:32:26,390 And so what we have done here is develop 619 00:32:26,390 --> 00:32:28,820 a dualistic view of the world. 620 00:32:28,820 --> 00:32:31,400 One view is one of the application, which 621 00:32:31,400 --> 00:32:33,620 still appears to be singular, that 622 00:32:33,620 --> 00:32:36,770 is we still think of the various application components 623 00:32:36,770 --> 00:32:39,650 as being a collection, or I should say parts, 624 00:32:39,650 --> 00:32:41,400 of a single program. 625 00:32:41,400 --> 00:32:45,260 The other view is that after we run the interface definition 626 00:32:45,260 --> 00:32:48,050 through the NDL compiler and bind it together 627 00:32:48,050 --> 00:32:51,080 with the application component, thereby producing 628 00:32:51,080 --> 00:32:54,530 a server, we at that point have a client-server model 629 00:32:54,530 --> 00:32:59,660 of the world, where one server process is referencing 630 00:32:59,660 --> 00:33:02,000 other server processes, and so on. 631 00:33:02,000 --> 00:33:04,160 It's important to have this latter point of view, 632 00:33:04,160 --> 00:33:08,150 because only in this way can we build a runtime environment 633 00:33:08,150 --> 00:33:11,960 and operate it on top of conventional operating 634 00:33:11,960 --> 00:33:15,050 systems such as Unix, and VMS, and others. 635 00:33:15,050 --> 00:33:17,150 Because most of these operating systems do 636 00:33:17,150 --> 00:33:21,560 embody some form of a server view of the world, clients 637 00:33:21,560 --> 00:33:24,180 and servers and the like. 638 00:33:24,180 --> 00:33:27,570 I'd like to mention a few other aspects of the network 639 00:33:27,570 --> 00:33:28,470 computing system. 640 00:33:28,470 --> 00:33:30,990 The first here refers to the locating broker, which I 641 00:33:30,990 --> 00:33:33,090 have briefly already described. 642 00:33:33,090 --> 00:33:35,070 The functions of the locating broker 643 00:33:35,070 --> 00:33:38,430 are to track network resources, for sure, 644 00:33:38,430 --> 00:33:43,080 and to essentially deal with the dynamics of the network. 645 00:33:43,080 --> 00:33:45,810 The locating broker is best understood 646 00:33:45,810 --> 00:33:49,200 in terms of the client-server model. 647 00:33:49,200 --> 00:33:51,090 The purpose of the locating broker 648 00:33:51,090 --> 00:33:54,600 is to really prevent clients and servers 649 00:33:54,600 --> 00:33:58,110 from requiring complete knowledge about the network. 650 00:33:58,110 --> 00:34:01,500 Rather than having everyone know everything about everything, 651 00:34:01,500 --> 00:34:03,540 we put all of the knowledge in one place, 652 00:34:03,540 --> 00:34:05,250 basically, in the broker. 653 00:34:05,250 --> 00:34:07,920 It behaves then as an object-oriented database, 654 00:34:07,920 --> 00:34:10,650 and is referenced by clients and servers 655 00:34:10,650 --> 00:34:13,590 to obtain information in much the same way 656 00:34:13,590 --> 00:34:17,159 that a broker serves in the transaction of a real estate 657 00:34:17,159 --> 00:34:18,840 sale. 658 00:34:18,840 --> 00:34:21,420 Real estate is listed and sold in a broker, 659 00:34:21,420 --> 00:34:24,179 largely to provide both buyer and seller 660 00:34:24,179 --> 00:34:27,600 with wider knowledge than what they would otherwise have. 661 00:34:27,600 --> 00:34:31,117 The locating broker is made aware of network services 662 00:34:31,117 --> 00:34:32,909 through what is called a register function, 663 00:34:32,909 --> 00:34:34,679 or a registration function. 664 00:34:34,679 --> 00:34:37,530 Basically, as servers are assigned to machines 665 00:34:37,530 --> 00:34:40,320 and they become operational, the first thing they do 666 00:34:40,320 --> 00:34:42,960 is to register their availability with the broker. 667 00:34:42,960 --> 00:34:46,020 Subsequently, when the application is executing, 668 00:34:46,020 --> 00:34:47,969 the locating broker is referenced 669 00:34:47,969 --> 00:34:50,790 to find out what the complete set of information 670 00:34:50,790 --> 00:34:53,219 is relative to that particular service, 671 00:34:53,219 --> 00:34:57,360 and make some policy decision as to which machine to be used. 672 00:34:57,360 --> 00:34:59,490 The policy decision is complicated, 673 00:34:59,490 --> 00:35:01,890 but could include the level of loading 674 00:35:01,890 --> 00:35:04,530 on the various machines, what machines are available, 675 00:35:04,530 --> 00:35:07,290 what networks are available, what sort of special hardware 676 00:35:07,290 --> 00:35:13,290 is available on the machines, and many other issues as well. 677 00:35:13,290 --> 00:35:15,840 Several other aspects of the computer system 678 00:35:15,840 --> 00:35:20,850 is to allow for the execution on a variety of transports, 679 00:35:20,850 --> 00:35:24,210 and to work in a multi-vendor environment, which 680 00:35:24,210 --> 00:35:27,420 is clearly required in order to realize the objectives that we 681 00:35:27,420 --> 00:35:28,900 stated earlier. 682 00:35:28,900 --> 00:35:30,630 We have developed a system so that it 683 00:35:30,630 --> 00:35:34,800 is layered in on top of a number of different types 684 00:35:34,800 --> 00:35:36,090 of protocols. 685 00:35:36,090 --> 00:35:38,310 Basically, the runtime environment 686 00:35:38,310 --> 00:35:42,180 employs what is referred to as a connection-less, unreliable 687 00:35:42,180 --> 00:35:45,270 datagram service, and such a service is generally 688 00:35:45,270 --> 00:35:49,470 found in a variety of protocol suites, including ISO, 689 00:35:49,470 --> 00:35:52,560 and including TCP/IP, and a variety of others. 690 00:35:52,560 --> 00:35:55,500 In this way, we're able to take advantage of not only 691 00:35:55,500 --> 00:35:57,100 the software that has been developed, 692 00:35:57,100 --> 00:36:00,030 but also hardware architectures that take 693 00:36:00,030 --> 00:36:02,110 advantage of those protocols. 694 00:36:02,110 --> 00:36:05,040 Further function is to be transportable to another number 695 00:36:05,040 --> 00:36:06,240 of operating systems. 696 00:36:06,240 --> 00:36:08,790 The specification of the network computing system 697 00:36:08,790 --> 00:36:10,890 is in the public domain, source code 698 00:36:10,890 --> 00:36:13,320 is licensable at a very low cost, 699 00:36:13,320 --> 00:36:15,930 and furthermore, there is no binary license 700 00:36:15,930 --> 00:36:20,580 fee on the part of users, or application suppliers, 701 00:36:20,580 --> 00:36:23,530 or other vendors, to employ this system. 702 00:36:23,530 --> 00:36:26,100 So we have created a fairly complete scenario, 703 00:36:26,100 --> 00:36:30,420 and we expect it to be readily used on various Unix systems, 704 00:36:30,420 --> 00:36:37,860 as well as VMS, and including, in fact IBM PCs running MS-DOS. 705 00:36:37,860 --> 00:36:41,280 I'd like to present an example which 706 00:36:41,280 --> 00:36:44,400 I believe illustrates many of the advantages of network 707 00:36:44,400 --> 00:36:45,180 computing. 708 00:36:45,180 --> 00:36:48,720 In this example, it is one of mechanical simulation used 709 00:36:48,720 --> 00:36:53,880 by automotive industries, aerospace industries, farm 710 00:36:53,880 --> 00:36:56,440 equipment manufacturers, and so on. 711 00:36:56,440 --> 00:36:59,040 The problem is how do you simulate 712 00:36:59,040 --> 00:37:02,280 a very complex mechanical device, that on the one hand 713 00:37:02,280 --> 00:37:04,980 requires mainframe levels of computation 714 00:37:04,980 --> 00:37:07,680 to simulate, and on the other hand, 715 00:37:07,680 --> 00:37:11,970 would be desirable to be able to view the simulation as it 716 00:37:11,970 --> 00:37:12,930 is occurring. 717 00:37:12,930 --> 00:37:16,200 Typically, this is not done, but rather an engineer 718 00:37:16,200 --> 00:37:19,860 employs a series of pre-processors, and simulators, 719 00:37:19,860 --> 00:37:22,800 and post-processors, and generators of animation 720 00:37:22,800 --> 00:37:24,510 sequences, and so on. 721 00:37:24,510 --> 00:37:26,310 With network computing, we replace 722 00:37:26,310 --> 00:37:28,080 all of those various applications 723 00:37:28,080 --> 00:37:31,560 with a single application whose graphics part 724 00:37:31,560 --> 00:37:34,080 runs on the workstation, and computation part 725 00:37:34,080 --> 00:37:35,580 runs on a mainframe. 726 00:37:35,580 --> 00:37:37,830 This really allows the design engineer 727 00:37:37,830 --> 00:37:40,860 to do two things they've never really done before. 728 00:37:40,860 --> 00:37:43,080 First of all, they can, for the first time, 729 00:37:43,080 --> 00:37:47,730 visualize the results of mainframe computation. 730 00:37:47,730 --> 00:37:49,920 As the mainframe is computing, it 731 00:37:49,920 --> 00:37:53,160 is very rapidly making procedure calls to the workstation. 732 00:37:53,160 --> 00:37:55,320 The workstation is then, in real time, 733 00:37:55,320 --> 00:37:58,450 rendering the effects of that simulation 734 00:37:58,450 --> 00:38:01,380 so that what the user is seeing at the workstation 735 00:38:01,380 --> 00:38:03,870 is the visual results, in real time, 736 00:38:03,870 --> 00:38:07,350 of the simulation being performed on the mainframe. 737 00:38:07,350 --> 00:38:08,940 The second thing the design engineer 738 00:38:08,940 --> 00:38:11,760 can do with this application is to begin to interact 739 00:38:11,760 --> 00:38:14,410 with the problem of simulation. 740 00:38:14,410 --> 00:38:16,890 We could envision velocity controls, 741 00:38:16,890 --> 00:38:19,410 for example, that would allow the simulation 742 00:38:19,410 --> 00:38:21,150 to even run in reverse. 743 00:38:21,150 --> 00:38:24,800 We can envision the dynamic adjustment of parameters. 744 00:38:24,800 --> 00:38:26,900 In this case, perhaps the suspension system 745 00:38:26,900 --> 00:38:29,810 of an automobile, to tune it, if you will, 746 00:38:29,810 --> 00:38:33,590 in the simulation without having to iterate over various design 747 00:38:33,590 --> 00:38:34,790 parameters. 748 00:38:34,790 --> 00:38:37,190 Furthermore, with a multi-windowing environment, 749 00:38:37,190 --> 00:38:39,590 we can create multiple windows, each of which 750 00:38:39,590 --> 00:38:42,230 has an aperture into the mechanical model. 751 00:38:42,230 --> 00:38:46,340 We can zoom in on problem areas, and reverse the simulation, run 752 00:38:46,340 --> 00:38:48,300 it in slow motion, and so on. 753 00:38:48,300 --> 00:38:50,570 So the bottom line is that with network computing, 754 00:38:50,570 --> 00:38:53,990 we can bring the resources of the mainframe 755 00:38:53,990 --> 00:38:56,780 down to the desk of the design engineer, 756 00:38:56,780 --> 00:38:59,240 with no real artificial boundaries imposed 757 00:38:59,240 --> 00:39:00,320 by the network. 758 00:39:00,320 --> 00:39:03,890 Bring those computational cycles to the desktop, 759 00:39:03,890 --> 00:39:07,370 and allow them to be applied to what would otherwise 760 00:39:07,370 --> 00:39:10,655 appear to be a graphics-oriented problem. 761 00:39:10,655 --> 00:39:13,370 762 00:39:13,370 --> 00:39:15,980 A further development of network computing 763 00:39:15,980 --> 00:39:19,160 is the ability to run concurrency 764 00:39:19,160 --> 00:39:20,210 in the network computing. 765 00:39:20,210 --> 00:39:22,370 This essentially involves the ability 766 00:39:22,370 --> 00:39:25,250 to run a large number of computers in parallel, 767 00:39:25,250 --> 00:39:28,850 as shown here, dynamically assigning them, 768 00:39:28,850 --> 00:39:32,570 perhaps in fairly large numbers. 769 00:39:32,570 --> 00:39:34,460 As a final thought on network computing, 770 00:39:34,460 --> 00:39:37,370 we'd like to consider many of the operating system 771 00:39:37,370 --> 00:39:38,510 implications. 772 00:39:38,510 --> 00:39:42,200 Once one distributes the upper layer, the application layer, 773 00:39:42,200 --> 00:39:44,240 one develops a lot of problems having 774 00:39:44,240 --> 00:39:47,570 to do with security, licensing, accounting, scheduling, 775 00:39:47,570 --> 00:39:49,160 and the user environment. 776 00:39:49,160 --> 00:39:51,290 Basically, what is going on is the industry 777 00:39:51,290 --> 00:39:53,660 is developing a comprehensive model 778 00:39:53,660 --> 00:39:56,480 to deal with these operating system 779 00:39:56,480 --> 00:40:00,980 functions, re-implementing them, rethinking them, re-engineering 780 00:40:00,980 --> 00:40:01,620 them. 781 00:40:01,620 --> 00:40:04,910 So many of the features found in traditional operating systems 782 00:40:04,910 --> 00:40:08,630 will in the future be placed at the network level, 783 00:40:08,630 --> 00:40:10,790 in terms of vendor-independent, operating 784 00:40:10,790 --> 00:40:14,330 system-independent servers, and thereby reducing 785 00:40:14,330 --> 00:40:17,780 the complexity of the workstation dramatically. 786 00:40:17,780 --> 00:40:20,120 We, in fact, intend that network computing 787 00:40:20,120 --> 00:40:23,930 could be the first environment that would transparently 788 00:40:23,930 --> 00:40:29,360 operate across multiple operating systems, manufactured 789 00:40:29,360 --> 00:40:33,740 by multiple vendors, and applied in a fully distributed 790 00:40:33,740 --> 00:40:37,080 environment. 791 00:40:37,080 --> 00:40:38,220 Licensing servers. 792 00:40:38,220 --> 00:40:42,960 One example of a server-based operating system component 793 00:40:42,960 --> 00:40:44,400 shown here, that will essentially 794 00:40:44,400 --> 00:40:49,140 give application suppliers much more flexibility in how 795 00:40:49,140 --> 00:40:50,490 they license server. 796 00:40:50,490 --> 00:40:53,460 We are beginning to develop equivalent models 797 00:40:53,460 --> 00:40:59,340 for dealing with authentication, accounting, security, the user 798 00:40:59,340 --> 00:41:02,710 point of view, and so on. 799 00:41:02,710 --> 00:41:05,400 So what I have described to you is a network computing 800 00:41:05,400 --> 00:41:08,220 architecture which we believe represents 801 00:41:08,220 --> 00:41:11,730 a new generation of computers, has the advantage 802 00:41:11,730 --> 00:41:15,420 of taking advantage of many different types of computation, 803 00:41:15,420 --> 00:41:17,430 all applied to what would be viewed 804 00:41:17,430 --> 00:41:20,700 as a single problem, or a single application, 805 00:41:20,700 --> 00:41:24,360 by both the application developer and the end user. 806 00:41:24,360 --> 00:41:29,520 807 00:41:29,520 --> 00:41:32,580 I'm Judith Lemon from University Video Communications. 808 00:41:32,580 --> 00:41:35,490 Our first four faculty questions are from the University 809 00:41:35,490 --> 00:41:38,136 of California at Berkeley. 810 00:41:38,136 --> 00:41:39,060 Dave. 811 00:41:39,060 --> 00:41:41,220 Number one. 812 00:41:41,220 --> 00:41:45,300 What do you see is the role of multiprocessor in workstations? 813 00:41:45,300 --> 00:41:49,440 Well, multiprocessors already occur in workstations. 814 00:41:49,440 --> 00:41:51,160 We find, for example, on the one hand, 815 00:41:51,160 --> 00:41:53,880 there may be a main CPU doing general applications, 816 00:41:53,880 --> 00:41:58,140 and on the other hand, a graphics CPU doing graphics. 817 00:41:58,140 --> 00:42:00,090 So what we are attempting to do is 818 00:42:00,090 --> 00:42:03,570 to generalize that dichotomy that already exists, 819 00:42:03,570 --> 00:42:06,235 make these general purpose computers in general, 820 00:42:06,235 --> 00:42:07,860 but making the general purpose computer 821 00:42:07,860 --> 00:42:11,520 more robust in its ability to perform not only computation, 822 00:42:11,520 --> 00:42:12,600 but graphics. 823 00:42:12,600 --> 00:42:15,090 So at the high end, we see a very strong role, 824 00:42:15,090 --> 00:42:18,300 an important role, in multiprocessing. 825 00:42:18,300 --> 00:42:20,850 And, moreover, we see these processors 826 00:42:20,850 --> 00:42:24,030 being generally applied, not only to applications, but also 827 00:42:24,030 --> 00:42:26,860 for high-end graphics processing. 828 00:42:26,860 --> 00:42:27,360 OK. 829 00:42:27,360 --> 00:42:28,260 Karen? 830 00:42:28,260 --> 00:42:31,200 Question number two for you is, do you think RISC ideas 831 00:42:31,200 --> 00:42:33,510 in workstations are a fad? 832 00:42:33,510 --> 00:42:36,030 Well, I'm not sure I would characterize them as a fad. 833 00:42:36,030 --> 00:42:39,690 Clearly there's a lot of merchandising, and so on, 834 00:42:39,690 --> 00:42:42,360 going on associated with RISC. 835 00:42:42,360 --> 00:42:45,420 We think there are a lot of valuable ideas associated 836 00:42:45,420 --> 00:42:47,280 with RISC techniques, but we don't 837 00:42:47,280 --> 00:42:49,860 think that they ought to be exclusively applied 838 00:42:49,860 --> 00:42:51,570 to the design of a computer. 839 00:42:51,570 --> 00:42:55,590 We think RISC is one component in many different components, 840 00:42:55,590 --> 00:42:59,820 all of which can be applied to the design of high performance 841 00:42:59,820 --> 00:43:00,570 computing. 842 00:43:00,570 --> 00:43:03,150 Basically, RISC is the result of there no longer 843 00:43:03,150 --> 00:43:06,210 being importance placed on a machine language architecture 844 00:43:06,210 --> 00:43:08,850 any longer, allowing high-level language compilers 845 00:43:08,850 --> 00:43:12,450 to have direct access to the computer. 846 00:43:12,450 --> 00:43:13,530 OK. 847 00:43:13,530 --> 00:43:18,000 What is the role of mini-mainframe 848 00:43:18,000 --> 00:43:20,950 and supercomputers in workstation environments? 849 00:43:20,950 --> 00:43:23,200 Well, I think the role now we are aware-- 850 00:43:23,200 --> 00:43:24,840 we are becoming more and more aware 851 00:43:24,840 --> 00:43:26,910 through network computing and other techniques, 852 00:43:26,910 --> 00:43:29,770 that the role is one of integrating together. 853 00:43:29,770 --> 00:43:32,100 The problem is, and will continue to be, 854 00:43:32,100 --> 00:43:35,910 how do we get the MIPS that the mainframes 855 00:43:35,910 --> 00:43:39,120 and the supercomputers supply, and the databases 856 00:43:39,120 --> 00:43:42,480 that these machines supply, down to the level 857 00:43:42,480 --> 00:43:43,980 of the individual user. 858 00:43:43,980 --> 00:43:46,860 Network computing can be applied to that problem, 859 00:43:46,860 --> 00:43:48,360 and we believe solve it very nicely. 860 00:43:48,360 --> 00:43:50,900 861 00:43:50,900 --> 00:43:54,930 Why does Apollo think that four MIPS is enough in 1987, 862 00:43:54,930 --> 00:43:58,880 but needs significantly more MIPS in 1988? 863 00:43:58,880 --> 00:44:00,710 What demanded this big change? 864 00:44:00,710 --> 00:44:04,490 Well, fundamentally the reason for the disproportionate jump 865 00:44:04,490 --> 00:44:08,840 in performance rates is basically 866 00:44:08,840 --> 00:44:11,540 driven by what technology offers us. 867 00:44:11,540 --> 00:44:13,880 If we take RISC technology, and we 868 00:44:13,880 --> 00:44:17,570 take very large-scale integration of circuits, 869 00:44:17,570 --> 00:44:21,800 and apply them to chips, and do some organizational things 870 00:44:21,800 --> 00:44:24,950 in the design of the computers, along the lines that I've just 871 00:44:24,950 --> 00:44:27,410 mentioned, we believe that technology 872 00:44:27,410 --> 00:44:30,650 will allow us, at the high end, to actually deliver 873 00:44:30,650 --> 00:44:33,950 those kinds of performance levels. 874 00:44:33,950 --> 00:44:38,210 The applications that we envision for this are numerous. 875 00:44:38,210 --> 00:44:43,400 Seismic analysis, finite element modeling, in terms of graphics 876 00:44:43,400 --> 00:44:46,410 would include three-dimensional solids modeling. 877 00:44:46,410 --> 00:44:50,450 There are numerous applications for high-end computing, 878 00:44:50,450 --> 00:44:54,260 and users continue to be demanding 879 00:44:54,260 --> 00:44:55,770 more and more computation. 880 00:44:55,770 --> 00:44:57,410 So there's clearly a market need. 881 00:44:57,410 --> 00:44:59,450 And the basic thing that's driving us 882 00:44:59,450 --> 00:45:01,910 is the availability of the technology 883 00:45:01,910 --> 00:45:04,880 that we see forthcoming. 884 00:45:04,880 --> 00:45:07,640 What do you see as the next generation of computers 885 00:45:07,640 --> 00:45:09,433 beyond workstations? 886 00:45:09,433 --> 00:45:10,850 Well, beyond workstations, I think 887 00:45:10,850 --> 00:45:14,840 that's a very broad and long-ranging question, 888 00:45:14,840 --> 00:45:15,830 I suppose. 889 00:45:15,830 --> 00:45:18,620 But one of the things that I, as a user, 890 00:45:18,620 --> 00:45:22,070 have been interested in for some time 891 00:45:22,070 --> 00:45:27,380 is the application of portable computers to many engineering 892 00:45:27,380 --> 00:45:28,430 problems. 893 00:45:28,430 --> 00:45:32,690 If we think of a workstation as being confined to an office, 894 00:45:32,690 --> 00:45:35,000 and confined to a specific network, 895 00:45:35,000 --> 00:45:38,990 basically, what we want to do is relieve those constraints. 896 00:45:38,990 --> 00:45:41,360 Reduce the confinement, allow the user 897 00:45:41,360 --> 00:45:43,400 to carry the system around with them, 898 00:45:43,400 --> 00:45:46,880 allow the system to automatically know where it's 899 00:45:46,880 --> 00:45:48,630 been, know where it's going. 900 00:45:48,630 --> 00:45:50,630 If it's at home, it should know it's at home. 901 00:45:50,630 --> 00:45:53,210 When it's in the office, it should know it's in the office. 902 00:45:53,210 --> 00:45:55,580 It should be able, through ISDN techniques, 903 00:45:55,580 --> 00:45:59,780 perhaps, be able to connect in a very broad way all 904 00:45:59,780 --> 00:46:00,650 over the globe. 905 00:46:00,650 --> 00:46:03,140 And in a very dynamic way, depending 906 00:46:03,140 --> 00:46:04,740 on the nature of the problem. 907 00:46:04,740 --> 00:46:07,970 So I think we will see in several years, the forthcoming 908 00:46:07,970 --> 00:46:11,240 of very, very capable portable systems 909 00:46:11,240 --> 00:46:13,550 which are really well beyond what we see today 910 00:46:13,550 --> 00:46:15,710 in portable computers, but will include 911 00:46:15,710 --> 00:46:20,450 these characteristics of being able to dynamically adapt 912 00:46:20,450 --> 00:46:22,640 itself to an environment. 913 00:46:22,640 --> 00:46:23,870 I like that idea. 914 00:46:23,870 --> 00:46:27,740 And finally, how do you manage to keep up 915 00:46:27,740 --> 00:46:30,780 with the rapid change in computer development, 916 00:46:30,780 --> 00:46:33,890 and what kind of a framework would you recommend to students 917 00:46:33,890 --> 00:46:35,240 for doing this? 918 00:46:35,240 --> 00:46:41,030 Well, I personally have relied on the idea 919 00:46:41,030 --> 00:46:45,660 of models and trends over long periods of time. 920 00:46:45,660 --> 00:46:49,040 And to look at deviations off of that model. 921 00:46:49,040 --> 00:46:51,200 That is, rather than look at rates 922 00:46:51,200 --> 00:46:54,320 of change in terms of their absolute value, 923 00:46:54,320 --> 00:46:58,430 look at the deviation in rates of change over a fairly 924 00:46:58,430 --> 00:46:59,960 long period of time. 925 00:46:59,960 --> 00:47:02,720 I think it's as valuable to look at the things that 926 00:47:02,720 --> 00:47:07,160 don't change as it is to look at the things that do change. 927 00:47:07,160 --> 00:47:10,250 For example, the cost per pound of a system 928 00:47:10,250 --> 00:47:13,980 is one of the constants that I alluded to earlier. 929 00:47:13,980 --> 00:47:18,440 The 35% per year as a function of time 930 00:47:18,440 --> 00:47:20,330 is another constant that seems to have 931 00:47:20,330 --> 00:47:23,090 prevailed over several decades. 932 00:47:23,090 --> 00:47:26,270 Although in the workstation area, the rate of change 933 00:47:26,270 --> 00:47:28,170 is significantly higher than that. 934 00:47:28,170 --> 00:47:32,750 So basically, I like the idea of developing a very simple model 935 00:47:32,750 --> 00:47:35,360 that is uniform over a long period of time, 936 00:47:35,360 --> 00:47:37,370 and then looking at the deviations 937 00:47:37,370 --> 00:47:40,490 relative to that model. 938 00:47:40,490 --> 00:47:42,110 Well, thank you very much. 939 00:47:42,110 --> 00:47:43,760 Thank you, I enjoyed being here. 940 00:47:43,760 --> 00:47:47,370 And thank you for joining us today. 941 00:47:47,370 --> 00:47:49,950 We invite your comments and questions. 942 00:47:49,950 --> 00:47:56,210 And we hope you will nominate future speakers and topics. 943 00:47:56,210 --> 00:47:59,120 For these purposes, we have provided, 944 00:47:59,120 --> 00:48:04,280 under the label of your video cassette, feedback postcards. 945 00:48:04,280 --> 00:48:06,310 Thank you again. 946 00:48:06,310 --> 00:48:35,000