|
|
1.1 root 1: % run this through LaTeX with the appropriate wrapper
2:
3: \chapter {A Discipline for Meal Preparation}\label{cook:discipline}
4: The previous chapter
5: presented a methodology for building distributed applications,
6: based on two key aspects:
7: {\em abstract data types}, and {\em remote operations}.
8: During the exposition of these abstract terms,
9: they were related to their more concrete realization in an OSI architecture,
10: namely: abstract syntax, association control, and remote operations.
11:
12: In the chapters that follow,
13: this volume will introduce the utensils (programming tools)
14: and various recipes (boilerplate routines)
15: which can be used to cook-up OSI applications.
16: Future editions of this volume will no doubt detail how one can prepare
17: either fast food, nouvelle cuisine, or gourmet cooking.
18: Given the raw power of remote operations in OSI,
19: the cooking analogy is actually quite appropriate:
20: some features of the remote operations service will be restricted in order to
21: make the programming work more digestable!
22:
23: In this chapter,
24: the steps described in the following chapters are introduced and placed in
25: perspective.
26: Throughout the remaining chapters,
27: an extended example is presented to illustrate, step-by-step,
28: the use of remote operations.
29:
30: \section {Defining A New Service}\label{service:define}
31: A collection of remote operations forms {\em only\/} a partial definition of a
32: service.
33: Other parts of this definition include naming and addressing information.
34: Chapter~\ref{services} of \volone/ describes fully how a service is defined
35: in these terms.
36: Rather than reproduce that chapter in this volume,
37: let us consider the essential points.
38: At first reading,
39: this seems complicated.
40: In point of fact,
41: the first definition of a service is challenging,
42: defining later services is straight-forward and only marginally tedious!
43:
44: Here are the ones we are interested in:
45: \begin{describe}
46: \item[abstract syntax:] this describes the data structures being exchanged by
47: the service;
48:
49: \item[application context name:] this describes the protocol being used by
50: the service;
51:
52: \item[application-entity information:] this uniquely names an entity in the
53: network;
54:
55: \item[presentation address:] this locates an entity in the network;
56: and,
57:
58: \item[local program:] this identifies the program on the local system which
59: implements the service.
60: \end{describe}
61:
62: We now begin the example which will be repeatedly extended in the chapters
63: which follow.
64: Let us suppose that we are defining the {\em ISODE Image Service},
65: which offers a simple image database service.
66:
67: Although Chapter~\ref{services} of \volone/ defines several approaches,
68: we will take the ``standard'' approach for our example:
69: \begin{describe}
70: \item[abstract syntax:] defined in the \man isobjects(5) file as:
71: \begin{quote}\small\begin{verbatim}
72: "local service pci" 1.17.2.n.1
73: \end{verbatim}\end{quote}
74: If we select \verb"n" as the lowest unassigned number in the \verb"1.17.2"
75: subtree, e.g., \verb"7", we might have:
76: \begin{quote}\small\begin{verbatim}
77: "isode image pci" 1.17.2.7.1
78: \end{verbatim}\end{quote}
79:
80: \item[application context name:] defined in the \man isobjects(5) file as:
81: \begin{quote}\small\begin{verbatim}
82: "local service" 1.17.2.n.2
83: \end{verbatim}\end{quote}
84: Similarly, for a value of \verb"7" for \verb"n", we have:
85: \begin{quote}\small\begin{verbatim}
86: "isode image" 1.17.2.7.2
87: \end{verbatim}\end{quote}
88:
89: \item[{\small application-entity information/presentation address:}]
90: defined with:
91: \begin{quote}\small\begin{verbatim}
92: default servicestore 1.17.4.1.n "" "" #p
93: \end{verbatim}\end{quote}
94: in the \man isoentities(5) file
95: (we say that \verb"servicestore" is the ``qualifier'' portion of the service).
96: If we select \verb"p" as the lowest unassigned TSAP ID between \verb"1024"
97: and \verb"2047" inclusive, e.g., \verb"1040", we might have:
98: \begin{quote}\small\begin{verbatim}
99: default imagestore 1.17.4.1.7 "" "" #1040
100: \end{verbatim}\end{quote}
101:
102: \item[local program:] defined in the \man isoservices(5) file as:
103: \begin{quote}\small\begin{verbatim}
104: "tsap/servicestore" #p program arg1 arg2 ... argN
105: \end{verbatim}\end{quote}
106: If we select \pgm{ros.image} as the \unix/ program implementing the {\em ISODE
107: Image Service},
108: we might have something like:
109: \begin{quote}\small\begin{verbatim}
110: "tsap/imagestore" #1040 ros.image
111: \end{verbatim}\end{quote}
112: \end{describe}
113: By convention,
114: the names of responder programs start with \verb+"ros."+.
115:
116: In future releases of the software,
117: a facility might be added to determine most of this information directly
118: from the formal definition of the service
119: (i.e., from the remote operations module described momentarily).
120:
121: The definition of this naming and addressing information is an administrative
122: necessity.
123: With this out of the way,
124: let's consider the actual work that goes into building a distributed
125: application which uses remote operations.
126:
127: \section {Defining A Remote Operations Module}
128: A {\em remote operations module\/} defines the operations
129: (and associated errors) along with the abstract syntax of the data structures
130: exchanged by the service.
131: The \man rosy(1) program reads a description of the module and produces the
132: corresponding {\em C\/} stubs and definitions used in accessing the service.
133:
134: In simple terms,
135: what this means is that \pgm{rosy} will produce routines that
136: the invoker calls that will request the operation by the performer.
137:
138: \section {Defining Concrete Data Structures}
139: An {\em abstract syntax module\/} defines the data structures being exchanged
140: by the service.
141: In many senses,
142: it is equivalent to a remote operations module with the definitions of the
143: operations removed.
144: The \man posy(1) program reads a description of the module and produces the
145: corresponding {\em C\/} structure definitions along with an augmented module
146: that is read by the \pgm{pepy} compiler.
147: The {\em C\/} structure definitions are used by the invoker and the
148: performer,
149: the run-time environment is responsible for mapping these data structures to
150: the abstract syntax and then for mapping the abstract syntax to the concrete
151: syntax.
152:
153: In simple terms,
154: what this means is that the invoker and performer worry about only the
155: native machine {\em C\/} structures,
156: and the open systems interface is handled entirely automatically.
157:
158: \section {Building An Initiator}
159: In general,
160: an initiator might take one of two implementational forms:
161: \begin{describe}
162: \item[interactive:] the user runs a program and interactively directs the
163: invocation of operations;
164: or,
165:
166: \item[embedded:] as a part of its running,
167: the program automatically forms an association and invokes operations as
168: required.
169: \end{describe}
170: The choice of form is up to the implementor.
171: Note that in both cases, the initiator is also acting as the invoker.
172:
173: In order to speed development,
174: complete boilerplate for an interactive initiator,
175: along with partial boilerplate for an embedded initiator is provided.
176:
177: \section {Building A Responder}
178: In general,
179: a responder may also take on of two implementational forms:
180: \begin{describe}
181: \item[single association:] each time the service is requested,
182: a new instantiation of the program implementing the service is executed
183: (this is termed the {\em dynamic\/} approach);
184: or,
185:
186: \item[multiple association:] each time the service is requested,
187: the request is given to a single, already executing,
188: instantiation of the program which implements the service
189: (this is termed the {\em static\/} approach).
190: \end{describe}
191: Although Section~\ref{service:define} describes how to define addressing
192: information for the dynamic approach,
193: it is good practice to implement each responder to be capable of operating in
194: either mode and then leaving the decision to the system administrator.
195:
196: In order to speed development,
197: complete boilerplate for a dual-approach responder is provided.
198:
199: \section {Putting It All Together}
200: In addition to the skeletal information above,
201: a set of consistent policies for file names, rules for \man make(1), and so on,
202: are needed.
203: These will be introduced at the appropriate time.
204:
205: It is important to understand that this volume
206: defines {\bf one\/} possible discipline for using remote operations.
207: There are, of course, {\bf many\/} possible disciplines for accomplishing the
208: same goal.
209: (And some will most likely be vastly superior.)
210: The particular discipline described in {\sl The Applications Cookbook} was
211: chosen primarily for its balance of relative simplicity and extensibility.
212: For some developers, it will still be too under done;
213: if this is the case, you are encouraged to build further cooked interfaces
214: on top of these facilities.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.