1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
|
//$Id$
// ================================================================
//
// = LIBRARY
// TAO_RTScheduling
//
// = FILENAME
// RTScheduling.pidl
//
// = DESCRIPTION
// Some new data types included for GIOP 1.2
// This file was used to generate the code in
// RTScheduler*.* The command used to generate code
// is:
//
// tao_idl
// -o orig -GA -Sa -Gp -Gd -Sci
// -Wb,export_macro=TAO_RTScheduler_Export
// -Wb,export_include="rtscheduler_export.h"
// -Wb,pre_include="ace/pre.h"
// -Wb,post_include="ace/post.h"
// -I$(TAO_ROOT)
// RTScheduler.pidl
//
// ================================================================
#ifndef TAO_RTSCHEDULER_PIDL
#define TAO_RTSCHEDULER_PIDL
#include "tao/RTCORBA/RTCORBA_include.pidl"
#include "tao/PortableServer/PortableServer_include.pidl"
#include "tao/PI/ClientRequestInfo.pidl"
#include "tao/PI_Server/ServerRequestInfo.pidl"
#include "tao/PortableInterceptor.pidl"
#include "tao/PI/PIForwardRequest.pidl"
module CORBA
{
// Extensions by this proposal:
native VoidData;
// Ada: System.Address
// C: void*
// C++: void*
// Java: Object
};
module RTScheduling
{
// ------------------------------------------------------------------
// Interfaces that are useful to dynamically schedule applications
// ------------------------------------------------------------------
local interface ThreadAction
{
void do(in CORBA::VoidData data);
};
local interface DistributableThread
{
enum DT_State
{
ACTIVE,
CANCELLED
};
void cancel();
// raises CORBA::OBJECT_NOT_FOUND if
// the distributable thread is
// not known to the scheduler
readonly attribute DT_State state;
};
local interface Current
: RTCORBA::Current
{
DistributableThread
spawn
(in ThreadAction start,
in CORBA::VoidData data,
in string name,
in CORBA::Policy sched_param,
in CORBA::Policy implicit_sched_param,
in unsigned long stack_size,
// zero means use the O/S default
in RTCORBA::Priority base_priority);
exception UNSUPPORTED_SCHEDULING_DISCIPLINE {};
// The scheduling_parameter argument didn't match the
// active scheduling policy.
void begin_scheduling_segment
(in string name,
in CORBA::Policy sched_param,
in CORBA::Policy implicit_sched_param)
raises (UNSUPPORTED_SCHEDULING_DISCIPLINE );
void update_scheduling_segment
(in string name,
in CORBA::Policy sched_param,
in CORBA::Policy implicit_sched_param)
raises ( UNSUPPORTED_SCHEDULING_DISCIPLINE );
void end_scheduling_segment(in string name);
typedef sequence<octet> IdType;
readonly attribute IdType id;
// a globally unique id
//IdType get_current_id();
// returns id of thread that is running
DistributableThread lookup(in IdType id);
// returns a null reference if
// the distributable thread is
// not known to the local scheduler
readonly attribute CORBA::Policy scheduling_parameter;
readonly attribute CORBA::Policy implicit_scheduling_parameter;
typedef sequence<string> NameList;
readonly attribute NameList current_scheduling_segment_names;
// Ordered from innermost segment name
// to outmost segment name
};
local interface ResourceManager
: RTCORBA::Mutex
{
};
local interface Scheduler
{
exception INCOMPATIBLE_SCHEDULING_DISCIPLINES {};
attribute CORBA::PolicyList scheduling_policies;
readonly attribute CORBA::PolicyList poa_policies;
readonly attribute string scheduling_discipline_name;
ResourceManager
create_resource_manager
(in string name,
in CORBA::Policy scheduling_parameter);
void set_scheduling_parameter
(inout PortableServer::Servant resource,
in string name,
in CORBA::Policy scheduling_parameter);
void begin_new_scheduling_segment (in Current::IdType guid,
in string name,
in CORBA::Policy sched_param,
in CORBA::Policy implicit_sched_param)
raises (Current::UNSUPPORTED_SCHEDULING_DISCIPLINE);
void begin_nested_scheduling_segment (in Current::IdType guid,
in string name,
in CORBA::Policy sched_param,
in CORBA::Policy implicit_sched_param)
raises (Current::UNSUPPORTED_SCHEDULING_DISCIPLINE);
void update_scheduling_segment (in Current::IdType guid,
in string name,
in CORBA::Policy sched_param,
in CORBA::Policy implicit_sched_param)
raises (Current::UNSUPPORTED_SCHEDULING_DISCIPLINE);
void end_scheduling_segment (in Current::IdType guid,
in string name);
void end_nested_scheduling_segment (in Current::IdType guid,
in string name,
in CORBA::Policy outer_sched_param);
void send_request (in PortableInterceptor::ClientRequestInfo ri)
raises (PortableInterceptor::ForwardRequest);
void receive_request (in PortableInterceptor::ServerRequestInfo ri,
out Current::IdType guid,
out string name,
out CORBA::Policy sched_param,
out CORBA::Policy implicit_sched_param)
raises (PortableInterceptor::ForwardRequest);
void send_reply (in PortableInterceptor::ServerRequestInfo ri);
void send_exception (in PortableInterceptor::ServerRequestInfo ri)
raises (PortableInterceptor::ForwardRequest);
void send_other (in PortableInterceptor::ServerRequestInfo ri)
raises (PortableInterceptor::ForwardRequest);
void send_poll (in PortableInterceptor::ClientRequestInfo ri)
raises (PortableInterceptor::ForwardRequest);
void receive_reply (in PortableInterceptor::ClientRequestInfo ri);
void receive_exception (in PortableInterceptor::ClientRequestInfo ri)
raises (PortableInterceptor::ForwardRequest);
void receive_other (in PortableInterceptor::ClientRequestInfo ri)
raises (PortableInterceptor::ForwardRequest);
void cancel (in Current::IdType guid);
};
};
#endif /*TAO_RTSCHEDULER_PIDL*/
|