2. Введение
• Legion 1.8 – Grid операционная система.
• Разработка объектно-ориентированного
программного обеспечения для построения
виртуальных метакомпьютеров, включающих до
нескольких миллионов хостов, объединенных
высокоскоростными сетями
2
Legion 1.8. Плешаков С.А., Завьялов Г.О.
3. Ключевые характеристики
• Распределение исполняемых файлов по узлам;
• Виртуальная файловая система;
• Объектно-ориентированная архитектура ;
• Конфиденциальность и целостность.
3
Legion 1.8. Плешаков С.А., Завьялов Г.О.
5. Основные пакеты
• Core -это основной пакет и является минимумом для
работы с системой LEGION. Позволяет запускать и
прекращать работы системы LEGION, а также работать
в контекстном пространстве.
• Software development kit –набор
инструментов для разработки. Содержит инструменты
разработки и библиотеки. По сути не является
необходимым, если вы собираетесь писать LEGION-
приложения.
• High-performance computing –этот модуль
осуществляет прогон программы в LEGION. Содержит
PVM и MPI.
• Extra–этот модуль является дополнительным к
основному пакету. Не является необходимым, но дает
больший контроль над объектами.
• Applications–Также расширяет основной пакет.
Предоставляет большую гибкость в обмене данными
LEGION и вашим рабочим простанством.
5
Legion 1.8. Завьялов Г.О., Плешаков С.А.
6. Legion System:
A single host system
Resources Legion host
Host
object
Host
object
Host
object
6
Legion 1.8. Завьялов Г.О., Плешаков С.А.
12. Удаленное выполнение программ
• Удаленная программа – это исполняемы процесс,
который может быть запущен из командной строки.
(основной сценарий, компилятор, существующий
исполняемый файл)
Программы
Связанные с
Legion
Независимые
Legion 1.8. Плешаков С.А., Завьялов Г.О.
12
13. Регистрация программы в системе
• Независимая - legion_register_program
• Связанная с системой Legion - legion_register_runnable
<program class>
<executable path>
<legion arch>
Пример:
$ legion_register_runnable myProgram /bin/myProgram linux
Program class “myProgram” does not exist.
Creating class “myProgram”.
Registering implementation for class “myProgram”
$
Legion 1.8. Плешаков С.А., Завьялов Г.О.
13
14. Выполнение программы
• Выбор узла
• Аргументы командной строки
• Отправка входных файлов на удаленный узел
до начала работы программы (-in, -IN);
во время выполнения программы
(legion_probe_run).
• Получение выходных файлов с удаленного
узла
до начала работы программы (-out, -OUT);
во время выполнения программы
(legion_probe_run).
Legion 1.8. Плешаков С.А., Завьялов Г.О.
14
15. Host and vault objects
Host-это машина, которая содержи по крайней
мере 1 процессор и могут содержать активные
LEGION объекты.
Vault- хранит неактивные LEGION объекты. Может
быть файловой системой, базой данных, CD-ROM.
Host object-представляет и может запускать host
или набор host’ов в LEGION системе. Host object
защищает все или часть ресурсов host и может
активировать и деактивировать другие LEGION
объекты. Host может иметь более чем 1 host object.
Vault object-представляет и запускает vault. Как и
host object защищает ресурсы vault.
Host
Object
Vault
Object
Host
Vault
15
Legion 1.8. Завьялов Г.О., Плешаков С.А.
16. Legion system management
Legion core objects:
Объектная модель Legion Core устанавливает построение и функциональность
объектов Legion Core. Эти объекты создают, размещают, управляют и удаляют
объекты в Legion системе. В этой объектной модели каждый Legion объект
принадлежит классу, который в свою очередь представляет собой Legion объект.
LegionClass
LegionBindingAgent
LegionHost
LegionVault
ContextObject
ImplementationObject
16
Legion 1.8. Завьялов Г.О., Плешаков С.А.
17. About host-value pairs
Добавляя новые узлы и склады на
вашу систему сделайте так, чтобы
различные процессоры и хранилища
были доступны на вашей системе, но
до того как начать расширять систему
убедитесь, что узлы и склады Legion’a
должны работать в совместимых
парах.
В Legion все host objects должны
иметь хотя бы одну соответствующую
пару vault object . Поэтому перед тем
как добавить новый host object или
vault object нужно рассмотреть
возможные проблемы
Host CHost A
Vault B
Host
Object A
Host
Object C
Vault
Object B
Vault D
Vault
Object D
17
Legion 1.8. Завьялов Г.О., Плешаков С.А.
18. Implementation model
Когда пользователь запрашивает объект
класса создать шаблон на другом узле,
класс должен сделать следующее:
Определить какой тип архитектуры
новый хост имеет;
Соединиться с правильным vault object запросив постоянное хранилище;
Определить у нового объекта OPA(адрес постоянного представления объекта) и LOID ;
Соединиться с правильным host object и запросить начать использование нового объекта на узле,
используя детальное исполнение объекта;
1.01.07.01.000001fc0d24ab3512f63533f3f96b2bba0572aed8d47efec7c24618fca3a3d49326
fa84eaa320724c10264f225c97820aced74586194974256ee86c2ae0565d55c8e623
The groups of numbers, separated by period, show the object’s characteristics. First, the
type field, 1, indicates the LOID’s type. Next, the first variable field, 01, indicates the domain
in which the object was created. The second variable field, 07, indicates which class that the
object belongs to. The third variable field, 01, indicates the object’s instance number. The
fourth variable field (the last field), 000001fc0d24ab..., is the object’s RSA public key. This
notation is obviously cumbersome, so we expect that users will prefer context space.
Legion system
User
Class Object
Host
Object
Host
Object Vault
Vault
Object
Host
Host
Object
18
Legion 1.8. Завьялов Г.О., Плешаков С.А.
19. The implementation cache object
• Класс Foo сообщает Beta создать шаблон Foo, используя
Implementation ObjectX;
• Beta запрашивает собственный Implementation Cache Object
найти копию Implementation ObjectX;
• Cache находит копию Implementation ObjectX в Vault;
• Beta запускает копию Implementation ObjectX для содания
шаблона Foo;
Host Alpha
Vault
Binary
Copy
ClassFoo
Implementation
ObjectX
Host Beta
Implementation
ObjectX
ClassFoo
Implementation
Cache
19
Legion 1.8. Завьялов Г.О., Плешаков С.А.
20. Mentat Programming Language
Version 1.1
MPL(Mentat Programming Language)-расширение языка C++, созданный
для упрощения задач написания параллельных приложений, обеспечи-
чивающих инкапсуляцию параллелизма. Возможны две формы
инкапсуляции:
• внутри-объектная инкапсуляция(intra-object encapsulation)-в этом
случае при запросе метода Mentat объекта , мы не знаем какой будет
выполнение данного метода: последовательной или параллельной;
• меж-объектная инкасуляция (inter-object encapsulation)- в этой форме
инкапсуляции программисты не заботятся о возможности
параллельного исполнения между различным методами Mentat
объекта;
20
Legion 1.8. Завьялов Г.О., Плешаков С.А.
21. Mentat classes
Различаются следующие виды классов:
• stateful;
• sequential;
• stateless;
Stateful и sequential определяют информацию
состояния между запросами методов, в то
время как stateless этого не делает;
Объектная модель Mentat. Объекты имеют разделенное адресное пространство и
взаимодействуют посредством методов, возвращают какое-либо значение.
main program
Object A
Object B
Object C
local
variables
local
variables
local
variables
local
variables
Example
stateless mentat class int_ops{
puplic:
int add(int arg1, int arg2);
int mpy(int arg1, int arg2);
};
21
Legion 1.8. Завьялов Г.О., Плешаков С.А.
22. Mentat Object
Все объекты имеют разделенное адресное пространство, нить контроля и
уникальное имя в системе. В принципе объект Mentat такой же как и
объекты в стандарте C++. Так же MPL расширяет язык C++ добавлением
типовыми спецификаторами :
mentat_handle-оператор связывает объект с уже существующим шаблоном
класса по какому-либо параметру;
mentat_object-оператор преобразует объект типа mentat_handle MentatClass к
типу mentat_object MentatClass;
Другие функкции:
int bound()-функция, которая показывает, что является какая-либо функция
связанной с индивидуальным шаблоном;
loid() –функция возвращает LOID шаблона с которым объект является
связанным;
22
Legion 1.8. Завьялов Г.О., Плешаков С.А.
23. Example
stateful mentat class MC {
public:
int mbrData
MC(); //overloaded default
//constructor
MC(int); //overloaded constructor
int func();
int func(int);
void setValue(int);
void getValue();
};
stateful mentat class Name_Server;
int typicalUsage() {
MC foo;
mentat_handle Name_Server
bar(MPL_SEARCH_GLOBAL);
int i;
i = foo.func(bar.getInteger());
printf(“Result = %dn”, i);
} //NOTE: foo object has been
//destroyed, name_server object
//bar still exists.
int basicUsage() {
MC a, b; //create and bind new objects
//a & b
mentat_object MC c; //create and bind new object c
//(same as above)
mentat_handle MC d, e; //create names only, no bind
a = b; //copy a.mbrData to b.mbrData
d = e; //copy name binding (from e to d
a = d; //copy name binding from d to a
d = a; //copy name binding from a to d
(mentat_object MC) d = e; //copy e.mbrData to
d.mbrData
(mentat_handle MC) b = a; //copy name binding from
a to b
a.func(); //invoke member function
e.func(); //invoke member function,
//run-time error if not bound
}
void moe(MC x) {x.setValue(99);}
void larry(mentat_handle MC x) {x.setValue(11);}
void curly(MC *x) {x.setValue(33);}
int callUsage() {
MC a;
larry(a);
val = a.getValue(); //Value will be 11
moe(a);
val = a.getValue(); //Value will still be 11!
curly(&a);
val = a.getValue(); //Value will be 33
}
int newUsage() {
mentat_handle MC a(SEARCH_GLOBAL);
//create name and bind to
//existing object
mentat_object MC b(SEARCH_GLOBAL);
//error, constructor undefined
mentat_handle MC c, d;
mentat_handle MC *e; //pointer to a mentat_handle
MC
MC *f; //pointer to a mentat_object MC
MC g;
c = new mentat_handle MC;//error, incompatible
types
e = new mentat_handle MC;//create new name and
return
//pointer
f = new mentat_object MC; //create & bind new object
//and return pointer
e = new mentat_object MC; //create & bind new object.
//Will not auto-destroy on
//exit.
e = (mentat_handle MC *)(new mentat_object MC);
//explicit form of above
f = new (g) mentat_object MC;
//create new object on same
//host as g
f = new(MPL_restriction_host, “/hosts/foobar.cs”);
//create new object on host
//foobar.cs
f = new(MPL_restriction_vault,
“/vaults/some_vault”);
//create new object on same
//host as vault some_vault
f = new(MPL_restriction_none); //same as new()
//not currently implemented…
//but defined
delete e; //delete front-end object only
delete f; //delete front & back-end
//objects
}
int scopeUsage() {
MC a, b;
mentat_handle MC c, z;
{
MC d, e;
mentat_handle MC f, g, y;
c = d; //copy the name
c.func(); //call d.func()
f = e; //copy the name
e = (mentat_handle MC) a; //copy the name
e.func(); //call a.func()
g = (m
entat_handle MC) b; //copy the name
g.func(); //call b.func()
y = (mentat_handle MC) (new mentat_object MC)
//bind y to a new object
z = y; // copy the name
}
d.func(); //error, d does not exist
b.func(); //Ok, call b.func()
a.func(); //error, a‟s back-end was
//destroyed by the
//implied „delete e‟
c.func(); //error, c is bound to d which
//was destroyed
z.func(); //OK, y‟s back-end was not
//destroyed
//NOTE: the original back-end
//object e has become an
//orphan!
}
23
Legion 1.8. Завьялов Г.О., Плешаков С.А.
24. MPL:Legion host object
Cледующая секция содержит функции, которые используются для вызова на host object:
MakeReservationFromHost(LegionIdType
HIdType,
char *HostName,
LegionIdType VIdType,
char *ReqVltName);
Ask a host to make a reservation for either an
instantiation, or an activation.
Parameters
HIdType A flag indicating whether HostName is a
context path name or a LOID.
HostName= The name of the host with which the
reservation should be made.
VIdType = A flag indicating whether ReqVltName is
a context path name or a LOID.
ReqVltName = The name of the vault to be paired up
with this host reservation.
CheckHostReservation(LegionIdType
HIdType, char *HostName,
CLegionHostReservation HstRes);
Check on the status of a host reservation previously
made.
Parameters:
HIdType = A flag indicating whether HostName is a
context path name or a LOID.
HostName = The name of the host that will check
the reservation.
HstRes = The previously made host reservation.
Return Values:
A CLegionHostReservationRecord containing the
status of the reservation.
CancelHostReservation(LegionIdType
HIdType,
char *HostName, CLegionHostReservation
HstRes);
Cancel a previously made host reservation.
Parameters:
HIdType = A flag indicating whether HostName is a
context path name or a LOID.
HostName= The name of the host that will cancel
the reservation.
HstRes = The previously made host reservation.
Return Values:
1 on Success
0 on Failure
GetImplArchFromHost(LegionIdType
HIdType, char *HostName);
Retrieve the implementation architecture for a given
host.
Parameters:
HIdType = A flag indicating whether HostName is a
context path name or a LOID.
HostName= The name of the host to get the arch
from.
Return Values:
The architecture of the given host.
GetCompatibileVaults(LegionIdType
HIdType, char *HostName);
Ask the host to return a list of vaults that are
compatible with it.
Parameters:
HIdType = A flag indicating whether HostName is a
context path name or a LOID.
HostName= The name of the host to check.
Return Values:
A NULL terminated list of LOIDs. Each LOID
represents one
vault that is compatible with the given host.
ListObjects(LegionIdType HIdType, char
*HostName);
Ask the host to return a list of objects that it is
currently managing.
Parameters:
HIdType = A flag indicating whether HostName is a
context path name or a LOID.
HostName = The name of the host to acquire the list
from.
Return Values:
A NULL terminated list of
CLegionHostObjectStatus’s. Each
array element represents the status of one object
currently being managed by a host.
24
Legion 1.8. Завьялов Г.О., Плешаков С.А.
25. Vault object Class object
функции, которые используются для вызова на host object Функции для соединения с объектами класса
MakeReservationFromVault(LegionIdType
VIdType,
char *VaultName, LegionIdType HIdType,
char *ReqHostNm);
Ask a vault to make a reservation for either an
instantiation or an activation.
Parameters:
VIdType = A flag indicating whether VaultName is a
context path name or a LOID.
VaultName = The name of the vault that will make
the reservation.
HIdType = A flag indicating whether ReqHostName
is a context path name or a LOID.
ReqHostName =The name of the host to be paired
up with this vault reservation.
Return Values:
The CLegionVaultReservation that represents the
VaultReservation just made.
CheckVaultReservation(LegionIdType
VIdType,
char *VaultName, CLegionVaultReservation
VtRes);
Check on the status of a vault reservation previously
made.
Parameters:
HIdType = A flag indicating whether VaultName is a
context path name or a LOID.
VaultName= The name of the vault that will check
the reservation.
VtRes = The Vault reservation previously made.
Return Values:
A CLegionVaultReservationRecord containing the
status of the reservation.
AddImplementation(LegionIdType CIdType,
char *ClassName,
LegionIdType IIdType, char *ImplName, int Arch);
Adds a new implementation of a class binary to the
given class.
Parameters:
CIdType = A flag indicating whether ClassName is
a LOID or a context path.
ClassName = The name of the class to add the
implementation to.
IIdType = A flag indicating whether ImplName is a
LOID or a context path.
ImplName = The name of an implementation object
to add.
Arch = The architecture for which the
implementation is valid.
Return Values:
1 on Success
0 on Failure
DeactivateInstance(LegionIdType CIdType,
char *ClassName,
LegionIdType OIdType, char *ObjName);
Asks a class to deactivate one of its instances.
Parameters:
CIdType = A flag indicating whether ClassName is a
LOID or a context path.
ClassName = The name of the class to deactivate the
instance for.
OIdType = A flag indicating whether ObjName is a
LOID or a context path.
ObjName = A LOID or context path indicating which
object to deactivate.
Return Values:
1 on Success
0 on Failure
25
Legion 1.8. Завьялов Г.О., Плешаков С.А.