|
|
1.1 root 1: % -*- LaTeX -*- (really SLiTeX)
2:
3: \begin{bwslide}
4: \part {A MODEL FOR DISTRIBUTED APPLICATIONS}\bf
5:
6: \begin{nrtc}
7: \item ABSTRACT DATA TYPES
8:
9: \item OPERATIONS
10:
11: \item ASSOCIATIONS
12:
13: \item DESIGN GUIDELINES
14:
15: \item IN PERSPECTIVE
16: \end{nrtc}
17: \end{bwslide}
18:
19:
20: \begin{note}\em
21: this part of the presentation corresponds to chapter~2 in The Application
22: Cookbook
23:
24: our focus is on the 1984--style of remote operations ([X.410])
25: and the newer joint-iso-ccitt work ([ISO~9072/1])
26: \end{note}
27:
28:
29: \begin{bwslide}
30: \ctitle {USE OF REMOTE OPERATIONS IN OSI}
31:
32: \begin{nrtc}
33: \item {}[ECMA~TR/31] PRESENTS A METHOD FOR USING REMOTE OPERATIONS TO:
34: \begin{nrtc}
35: \item SPECIFY THE EXTERNALLY VISIBLE CHARACTERISTICS
36: NEEDED FOR INTERCONNECTION
37:
38: \item WHILE AVOIDING UNNECESSARY CONSTRAINTS UPON THE
39: INTERNAL DESIGN OF THE SYSTEMS TO BE INTERCONNECTED
40: \end{nrtc}
41:
42: \item ALTHOUGH THE LATTER HALF OF THIS DOCUMENT (THE PROTOCOL) IS NOW
43: OBSOLETE, THE FIRST FOUR SECTIONS (THE METHOD) ARE QUITE RELEVANT
44:
45: \item {}[ECMA~TR/31] IS BASED ON [X.410],
46: WE TERM THIS ``OLD-STYLE'' ROS
47:
48: \item {}[ISO~9072] IS THE NEWER JOINT ISO/CCITT WORK,
49: WE TERM THIS ``NEW-STYLE'' ROS
50: \end{nrtc}
51: \end{bwslide}
52:
53:
54: \begin{note}\em
55: note that ECMA documents are not standards,
56: though they may be used as contributions to the standards process
57: \end{note}
58:
59:
60: \begin{bwslide}
61: \ctitle {A BIT OF HISTORY}
62:
63: \begin{nrtc}
64: \item XEROX's COURIER WAS THE FIRST WELL-KNOWN SYSTEM TO USE THIS APPROACH
65:
66: \item BUT EVEN IN THE EARLY 70's, SIMILAR IDEAS WERE BEING EXPLORED
67: ELSEWHERE (e.g., MIT)
68:
69: \item TODAY, SUN's RPC AND APOLLO's NCS ARE CONTINUING IN THIS VEIN
70: \end{nrtc}
71: \end{bwslide}
72:
73:
74: \begin{bwslide}
75: \part* {ABSTRACT DATA TYPES}\bf
76:
77: \begin{nrtc}
78: \item REMOTE OPERATIONS ARE A MECHANISM BY WHICH LOOSELY COUPLED SYSTEMS
79: INTERACT
80:
81: \item BUT, REMOTE OPERATIONS ARE ONLY ONE PART OF A LARGER PICTURE HOWEVER
82:
83: \item THE FUNDAMENTAL CONCEPT IS THAT OF THE \emph{ABSTRACT DATA TYPE}
84: \end{nrtc}
85: \end{bwslide}
86:
87:
88: \begin{bwslide}
89: \ctitle {ABSTRACT DATA TYPES}
90:
91: \begin{nrtc}
92: \item PUT SIMPLY, AN ABSTRACT DATA TYPE DEFINES BOTH
93: \begin{nrtc}
94: \item THE DATA STRUCTURE CONTAINED IN AN OBJECT (SYNTAX), AND
95:
96: \item HOW THAT DATA IS INTERPRETED (SEMANTICS)
97: \end{nrtc}
98:
99: \item THIS IS HARDLY A NEW CONCEPT
100: \begin{nrtc}
101: \item e.g., SMALLTALK, SIMULA, and so on
102: \end{nrtc}
103: \end{nrtc}
104: \end{bwslide}
105:
106:
107: \begin{bwslide}
108: \ctitle {PROPERTIES OF ABSTRACT DATA TYPES:\\ REPRESENTATION}
109:
110: \begin{nrtc}
111: \item DATA STRUCTURES IN PROGRAMMING LANGUAGES HAVE A \emph{CONCRETE}
112: REPRESENTATION
113: \begin{nrtc}
114: \item WHICH IS DEFINED BY THE PROGRAMMING LANGUAGE AND THE
115: UNDERLYING HARDWARE
116:
117: \item e.g., BYTE-ORDERING, WORD SIZE, etc.
118: \end{nrtc}
119:
120: \item THE CORRESPONDING ABSTRACT DATA TYPE IS DEFINED IN AN
121: IMPLEMENTATION-INDEPENDENT FASHION
122: \begin{nrtc}
123: \item TERMED THE \emph{ABSTRACT SYNTAX}
124: \end{nrtc}
125:
126: \item AN APPLICATION CAN EXPECT THIS TO BEHAVE CONSISTENLY REGARDLESS OF THE
127: HARDWARE ON WHICH IT IS RUNNING
128: \end{nrtc}
129: \end{bwslide}
130:
131:
132: \begin{bwslide}
133: \ctitle {REPRESENTATION: EXAMPLE}
134:
135: \vskip.15in
136: \begin{verbatim}
137: struct mail_address {
138: char *local;
139: char *domain;
140:
141: unsigned char options;
142: #define default_local 0x01
143: #define default_host 0x02
144: };
145: \end{verbatim}
146: \end{bwslide}
147:
148:
149: \begin{bwslide}
150: \ctitle {REPRESENTATION: EXAMPLE (cont.)}
151:
152: \vskip.15in
153: \begin{verbatim}
154: Mail-Address ::=
155: [APPLICATION 2]
156: IMPLICIT SEQUENCE {
157: local[0]
158: IMPLICIT GraphicString,
159:
160: domain[1]
161: IMPLICIT GraphicString,
162:
163: options[2]
164: IMPLICIT BITSTRING {
165: default-local(0), default-host(1)
166: }
167: DEFAULT { default-local, default-host }
168: }
169: \end{verbatim}
170: \end{bwslide}
171:
172:
173: \begin{bwslide}
174: \ctitle {PROPERTIES OF ABSTRACT DATA TYPES:\\ SERIALIZATION}
175:
176: \begin{nrtc}
177: \item \emph{ABSTRACT TRANSFER NOTATION}:
178: \begin{nrtc}
179: \item A WELL-DEFINED SET OF RULES USED TO DEFINE HOW ABSTRACT DATA
180: TYPES ARE TRANSMITTED THROUGH THE NETWORK
181: \end{nrtc}
182: \end{nrtc}
183: \end{bwslide}
184:
185:
186: \begin{bwslide}
187: \ctitle {SERIALIZATION (cont.)}
188:
189: \begin{nrtc}
190: \item CONCEPTUALLY, TWO MAPPINGS OCCUR
191:
192: \item FIRST, THE DATA STRUCTURE IS MAPPED TO THE ABSTRACT SYNTAX FOR ITS
193: CORRESPONDING ABSTRACT DATA TYPE
194: \begin{nrtc}
195: \item THIS IS A LOCAL ISSUE
196: \end{nrtc}
197:
198: \item SECOND, THE ABSTRACT SYNTAX IS MAPPED TO THE CONCRETE SYNTAX,
199: A STREAM OF OCTETS
200: \begin{nrtc}
201: \item THE ABSTRACT TRANSFER NOTATION IS USUALLY [ISO~8825]
202:
203: \item OTHER POSSIBILITIES INCLUDE COMPRESSION, ENCRYPTION, etc.
204: \end{nrtc}
205:
206: \item NOTE THAT THE CONCRETE REPRESENTATION MENTIONED EARLIER FOR
207: DATA STRUCTURES IS {\bf NOT\/} THE SAME AS THE CONCRETE SYNTAX
208: \end{nrtc}
209: \end{bwslide}
210:
211:
212: \begin{bwslide}
213: \ctitle {PROPERTIES OF ABSTRACT DATA TYPES:\\ OPERATIONS}
214:
215: \begin{nrtc}
216: \item ACCESS TO AN ABSTRACT DATA TYPE IS DEFINED BY A SET OF PRIMITIVE
217: ACTIONS
218:
219: \item EACH PRIMITIVE ACTION IS TERMED AN \emph{OPERATION}
220:
221: \item THIS SET OF OPERATIONS DEFINES THE COMPLETE BEHAVIOR OF AN ABSTRACT
222: DATA TYPE
223: \end{nrtc}
224: \end{bwslide}
225:
226:
227: \begin{bwslide}
228: \ctitle {PROPERTIES OF ABSTRACT DATA TYPES:\\ OBJECT MODEL}
229:
230: \begin{nrtc}
231: \item SINCE OPERATIONS INTRODUCE A LEVEL OF INDIRECTION,
232: USING ABSTRACT DATA TYPES RATHER THAN CONCRETE DATA STUCTURES
233: PERMITS ACCESS TO DATA STRUCTURES WITHOUT REGARD TO THEIR ACTUAL
234: IMPLEMENTATION
235: \end{nrtc}
236: \end{bwslide}
237:
238:
239: \begin{bwslide}
240: \part* {OPERATIONS}\bf
241:
242: \begin{nrtc}
243: \item IN ITS PRIMITIVE FORM,
244: AN \emph{OPERATION} IS A SIMPLE REQUEST/REPLY INTERACTION
245:
246: \item A \emph{INVOCATION} GENERATES ONE OF THREE OUTCOMES:
247: \begin{nrtc}
248: \item A \emph{RESULT}, IF THE OPERATION SUCCEEDS;
249:
250: \item AN \emph{ERROR}, IF THE OPERATION FAILED; or,
251:
252: \item A \emph{REJECTION}, IF THE OPERATION WAS NOT PERFORMED
253: \end{nrtc}
254:
255: \item OPERATIONS ARE SAID TO BE \emph{TOTAL}, AS THE NORMAL OUTCOME (RESULT),
256: AND THE EXCEPTION OUTCOMES (THE ERRORS) ARE WELL-DEFINED AND
257: UNAMBIGUOUS
258: \end{nrtc}
259: \end{bwslide}
260:
261:
262: \begin{bwslide}
263: \ctitle {PROPERTIES OF OPERATIONS:\\ INVOCATIONS}
264:
265: \begin{nrtc}
266: \item THE OPERATION IS \emph{INVOKED} WHEN IT IS REQUESTED
267:
268: \item AN INVOCATION CONSISTS OF:
269: \begin{nrtc}
270: \item AN \emph{OPERATION NUMBER} IDENTIFYING THE OPERATION REQUESTED
271:
272: \item AN ARBITRARILY COMPLEX \emph{ARGUMENT}
273:
274: \item AN \emph{INVOCATION IDENTIFIER} DISTINGUISHING THIS INVOCATION
275: FROM PREVIOUS INVOCATIONS
276:
277: \item (POSSIBLY) A \emph{LINKED-INVOCATION IDENTIFIER}
278: \end{nrtc}
279: \end{nrtc}
280: \end{bwslide}
281:
282:
283: \begin{bwslide}
284: \ctitle {LINKED INVOCATIONS}
285:
286: \begin{nrtc}
287: \item INTRODUCED IN THE NEWER JOINT ISO/CCITT WORK
288:
289: \item SOMETIMES REFERRED TO AS A ``CALLBACK'' OR A ``REMOTE UPCALL''
290: \end{nrtc}
291: \end{bwslide}
292:
293:
294: \begin{bwslide}
295: \ctitle {EXAMPLE:\\ LINKED INVOCATIONS}
296:
297: \begin{nrtc}
298: \item CONSIDER AN OPERATION \verb"Traverse", WITH TWO ARGUMENTS:
299: \begin{nrtc}
300: \item THE NAME OF A REMOTE DIRECTORY IN A FILESYSTEM
301:
302: \item THE NUMBER OF AN OPERATION TO INVOKE FOR EACH FILE
303: (WITH A HANDLE TO THE FILE)
304: \end{nrtc}
305:
306: \item TO LIST A REMOTE DIRECTORY:
307: \begin{verbatim}
308: Traverse (``directory-name'', ListFile)
309: \end{verbatim}
310:
311: \item TO PRINT EACH FILE IN A REMOTE DIRECTORY:
312: \begin{verbatim}
313: Traverse (``directory-name'', PrintFile)
314: \end{verbatim}
315: \end{nrtc}
316: \end{bwslide}
317:
318:
319: \begin{bwslide}
320: \ctitle {PROPERTIES OF OPERATIONS:\\ RESULTS}
321:
322: \begin{nrtc}
323: \item IF THE OPERATION SUCCEEDS, THEN A RESULT IS RETURNED
324:
325: \item A RESULT CONSISTS OF:
326: \begin{nrtc}
327: \item AN INVOCATION IDENTIFIER CORRESPONDING TO THE OPERATION WHICH
328: SUCCEEDED
329:
330: \item (POSSIBLY) AN ARBITRARILY COMPLEX \emph{RESULT}
331: \end{nrtc}
332: \end{nrtc}
333: \end{bwslide}
334:
335:
336: \begin{note}\em
337: actually, on success a result \emph{may optionally} be returned as some
338: operations are defined to not return any result
339:
340: this violates the totality principle, a solution is discussed later on
341: \end{note}
342:
343:
344: \begin{bwslide}
345: \ctitle {PROPERTIES OF OPERATIONS:\\ ERRORS}
346:
347: \begin{nrtc}
348: \item IF THE OPERATION FAILS, THEN AN ERROR IS RETURNED
349:
350: \item AN ERROR CONSISTS OF:
351: \begin{nrtc}
352: \item AN INVOCATION IDENTIFIER CORRESPONDING TO THE OPERATION WHICH
353: FAILED
354:
355: \item AN \emph{ERROR NUMBER} IDENTIFYING THE ERROR ENCOUNTERED
356:
357: \item (POSSIBLY) AN ARBITRARILY COMPLEX \emph{PARAMETER}
358: \end{nrtc}
359:
360: \item NOTE THAT ERRORS DO NOT NECESSARILY INDICATE BAD BEHAVIOR!
361: \begin{nrtc}
362: \item THEY CAN OCCUR AS A PART OF CORRECT AND NORMAL OPERATIONS
363:
364: \item HENCE, THINK OF THEM AS EXCEPTIONS
365: \end{nrtc}
366: \end{nrtc}
367: \end{bwslide}
368:
369:
370: \begin{bwslide}
371: \ctitle {PROPERTIES OF OPERATIONS:\\ REJECTIONS}
372:
373: \begin{nrtc}
374: \item IF THE OPERATION CAN NOT BE PERFORMED, THEN A REJECTION IS RETURNED
375:
376: \item A REJECTION CONSISTS OF:
377: \begin{nrtc}
378: \item AN INVOCATION IDENTIFIER CORRESPONDING TO THE OPERATION WHICH
379: WAS REJECTED
380:
381: \item A \emph{REASON} EXPLAINING WHY THE OPERATION WAS REJECTED
382: \begin{nrtc}
383: \item e.g., MISTYPED PARAMETERS
384: \end{nrtc}
385: \end{nrtc}
386:
387: \item SOME REJECTIONS ARE USER-INITIATED, OTHERS ARE PROVIDER-INITIATED
388: \end{nrtc}
389: \end{bwslide}
390:
391:
392: \begin{bwslide}
393: \part* {ASSOCIATIONS}\bf
394:
395: \begin{nrtc}
396: \item AN \emph{ASSOCIATION} IS A BINDING BETWEEN TWO ENTITIES,
397: THE \emph{INITIATOR} AND THE \emph{RESPONDER}
398:
399: \item ASSOCIATIONS EXIST AT THE APPLICATION LAYER AND
400: RELY ON AN UNDERLYING CONNECTION
401:
402: \item ASSOCIATIONS MAY BE SYMMETRIC, i.e., THEY DON'T HAVE TO FOLLOW A
403: CLIENT/SERVER MODEL
404: \end{nrtc}
405: \end{bwslide}
406:
407:
408: \begin{bwslide}
409: \ctitle {ASSOCIATIONS (cont.)}
410:
411: \begin{nrtc}
412: \item THE BINDING OCCURS IN A TWO-STEP PROCESS
413:
414: \item FIRST, THE INITIATOR DETERMINES WHICH SERVICE IT REQUIRES,
415: AND ASKS (DIRECTORY SERVICES) TO MAP THIS SERVICE ONTO
416: ENTITIES AVAILABLE ON THE NETWORK
417:
418: \item SECOND, BASED ON THE INITIATOR'S COMMUNICATION NEEDS
419: (QUALITY OF SERVICE), AN ASSOCIATION WILL BE BOUND TO ONE OF
420: THOSE ENTITIES WHICH BECOMES THE RESPONDER
421: \end{nrtc}
422: \end{bwslide}
423:
424:
425: \begin{bwslide}
426: \part* {DESIGN GUIDELINES}\bf
427:
428: \begin{nrtc}
429: \item THE CHARACTERISTICS OF OPERATIONS WILL VARY WIDELY BETWEEN APPLICATIONS
430:
431: \item HOWEVER, THERE ARE TWO ISSUES OF UNIVERSAL INTEREST TO BE CONSIDERED
432: \end{nrtc}
433: \end{bwslide}
434:
435:
436: \begin{bwslide}
437: \ctitle {RELIABILITY CHARACTERISTICS}
438:
439: \begin{nrtc}
440: \item UNCERTAINTY DURING EXECUTION OF OPERATIONS IS ALWAYS PRESENT
441:
442: \item THIS IS PARTICULARLY TROUBLESOME IF THE NETWORK ``BREAKS''
443: AFTER A REQUEST IS RECEIVED BY THE RESPONDER BUT BEFORE
444: THE INITIATOR RECEIVES THE REPLY
445:
446: \item ONE SCHEME OF CLASSIFYING THE RELIABILITY REQUIREMENTS OF AN OPERATION
447: IS:
448: \begin{nrtc}
449: \item EXACTLY ONCE
450:
451: \item AT LEAST ONCE (IDEMPOTENT)
452:
453: \item AT MOST ONCE
454: \end{nrtc}
455:
456: \item IMPLEMENTING THESE SEMANTICS IS POSSIBLE USING THE INVOCATION
457: IDENTIFIER
458: \begin{nrtc}
459: \item BUT IS THE RESPONSBILITY OF THE USER OF REMOTE OPERATIONS
460: \end{nrtc}
461: \end{nrtc}
462: \end{bwslide}
463:
464:
465: \begin{note}\em
466: note that ``initiator'' here doesn't necessarily mean the entity which
467: initiated the association
468:
469: i.e., an entity can start an association, and then it's peer could possibly
470: initiate all of the operations
471: \end{note}
472:
473:
474: \begin{bwslide}
475: \ctitle {RELIABILITY CHARACTERISTIC:\\ EXACTLY ONCE}
476:
477: \begin{nrtc}
478: \item RESPONDER
479: \begin{nrtc}
480: \item KEEPS TRACK OF THE INVOCATION IDENTIFIERS OF ALL PERFORMED
481: OPERATIONS
482:
483: \item WHEN PROCESSING AN INVOCATION, IF AN INVOCATION IDENTIFIER IS
484: REPEATED, REJECT THE OPERATION
485: \end{nrtc}
486:
487: \item INITIATOR
488: \begin{nrtc}
489: \item REPEATEDLY INVOKES THE OPERATION USING THE SAME INVOCATION
490: IDENTIFIER UNTIL EITHER
491:
492: \item A CONFIRMATION (RESULT OR ERROR) IS RECEIVED, OR
493:
494: \item A REJECTION (DUPLICATE OPERATION) IS RECEIVED
495: \end{nrtc}
496:
497: \item A ROS BUG: REJECTION DOES NOT INCLUDE THE VALUE OF THE PREVIOUS RESULT!
498: \end{nrtc}
499: \end{bwslide}
500:
501:
502: \begin{bwslide}
503: \ctitle {RELIABILITY CHARACTERISTIC:\\ AT LEAST ONCE}
504:
505: \begin{nrtc}
506: \item RESPONDER
507: \begin{nrtc}
508: \item KEEPS NO INFORMATION REGARDING PREVIOUSLY PERFORMED OPERATIONS
509: \end{nrtc}
510:
511: \item INITIATOR
512: \begin{nrtc}
513: \item REPEATEDLY INVOKES THE OPERATION (WITH ANY INVOCATION
514: IDENTIFIER) UNTIL
515:
516: \item A CONFIRMATION (RESULT OR ERROR) IS RECEIVED
517: \end{nrtc}
518: \end{nrtc}
519: \end{bwslide}
520:
521:
522: \begin{bwslide}
523: \ctitle {RELIABILITY CHARACTERISTIC:\\ AT MOST ONCE}
524:
525: \begin{nrtc}
526: \item RESPONDER
527: \begin{nrtc}
528: \item KEEPS NO INFORMATION REGARDING PREVIOUSLY PERFORMED OPERATIONS
529: \end{nrtc}
530:
531: \item INITIATOR
532: \begin{nrtc}
533: \item INVOKES THE OPERATION (WITH ANY INVOCATION IDENTIFIER)
534: EXACTLY ONCE
535: \end{nrtc}
536: \end{nrtc}
537: \end{bwslide}
538:
539:
540: \begin{bwslide}
541: \ctitle {KEEPING TOTAL OPERATIONS TOTAL}
542:
543: \begin{nrtc}
544: \item IN THE OSI FRAMEWORK, IT IS POSSIBLE TO DEFINE OPERATIONS WHICH:
545: \begin{nrtc}
546: \item RETURN A RESULT, BUT NO ERRORS
547:
548: \item RETURN ONLY ERRORS
549: \end{nrtc}
550:
551: \item THIS CAN POTENTIALLY VIOLATE THE TOTALITY PRINCIPLE
552: \begin{nrtc}
553: \item (ALL OUTCOMES ARE WELL-DEFINED AND UNAMBIGUOUS)
554: \end{nrtc}
555: AS AN OPERATION WHICH SUCCEEDS BUT RETURNS NO RESULT WILL RETURN NOTHING!
556:
557: \item THIS IN TURN LEADS TO PROBLEMS WHEN THE INITIATOR TRIES TO DETERMINE
558: IF THE OPERATION SUCCEEDED OR NOT (HOW LONG TO WAIT FOR AN ERROR?)
559:
560: \item SOLUTION: OPERATIONS SHOULD ALWAYS BE ABLE TO RETURN A RESULT,
561: EVEN IF THAT RESULT IS \verb"NULL"
562: \end{nrtc}
563: \end{bwslide}
564:
565:
566: \begin{note}\em
567: note that this totality issue is a philosophical one
568:
569: some may argue that it is valid only for a class of applications
570: \end{note}
571:
572:
573: \begin{bwslide}
574: \part* {IN PERSPECTIVE}\bf
575:
576: \begin{nrtc}
577: \item IDEALLY WOULD LIKE TO HIDE ALL (OR MOST) OF THIS FORMALISM FROM
578: THE PROGRAMMER
579:
580: \item INSTEAD, WE'D LIKE TO PRESENT A SIMPLE PROCEDURE CALL MODEL IN WHICH
581: WE DEFINE:
582: \begin{nrtc}
583: \item THE INTERFACE TO EACH OPERATION AS A SUBROUTINE CALL
584:
585: \item WITH KNOWN ARGUMENT TYPES
586: \end{nrtc}
587: \end{nrtc}
588: \end{bwslide}
589:
590:
591: \begin{bwslide}
592: \ctitle {AN EXAMPLE (cont.)}
593:
594: \vskip.15in
595: \begin{verbatim}
596: int op_CMIP_m__ConfirmedEventReport (sd, in, out, roi)
597: int sd;
598: struct type_CMIP_EventReportArgument *in;
599: struct type_CMIP_EventReportResult *out;
600: struct RoSAPindication *roi;
601: \end{verbatim}
602: \end{bwslide}
603:
604:
605: \begin{bwslide}
606: \ctitle {AN EXAMPLE (cont.)}
607:
608: \vskip.15in
609: \begin{verbatim}
610: struct type_CMIP_EventReportArgument {
611: struct type_CMIP_ObjectClass *managedObjectClass;
612:
613: struct type_CMIP_ObjectInstance *managedObjectInstance;
614:
615: struct type_CMIP_EventTypeID *eventType;
616:
617: struct type_UNIV_GeneralizedTime *eventTime;
618:
619: struct type_CMIP_EventInfo *eventInfo;
620: };
621: \end{verbatim}
622: \end{bwslide}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.