Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.499


Таненбаум Э.- Архитектура компьютера. стр.499

od; end;

begin

top:=0; # инициализация

end;

После определения объекта stack можно объявлять переменные этого типа:

s, t, stack;

Такая запись создает два объекта стека и устанавливает переменную top в каждом объекте на 0. Целочисленную переменную к можно поместить в стек s с помощью оператора

s$push(k);

Операция pop содержит предохранитель, поэтому попытка вытолкнуть переменную из пустого стека вызовет приостановку вызывающего процесса до тех пор, пока другой процесс не поместит что-либо в стек.

В Огса имеется оператор порождения нового процесса — оператор fork. Новый процесс запускает процедуру, указанную в операторе fork. Новому процессу могут передаваться и другие параметры, в том числе объект. Именно так объекты распределяются по машинам. Например:

for i in l..n do fork foobar(s) on i; od;

Этот оператор порождает новый процесс на всех машинах с 1 по п, запуская программу foobar в каждом из них. Поскольку эти п новых процессов (а также исходный процесс) работают параллельно, они все могут помещать элементы в общий стек s и извлекать элементы из общего стека s, как будто все они работают на мультипроцессоре с общей памятью.

Операции с совместно используемыми объектами атомарны и секвенциально состоятельны. То есть система гарантирует, что если несколько процессов выполняют операции с одним объектом практически одновременно, система сама устанавливает определенную очередность событий, которую воспринимают все процессы.

В Огса общие данные и синхронизация реализованы иначе, чем в системах со страничной организацией памяти. В параллельных программах требуются два вида синхронизации. Первый — взаимное исключение. Благодаря взаимному исключению два процесса не могут одновременно выполнять одну и ту же критическую секцию кода. В Огса каждая операция с совместно используемым объектом напоминает выполнение критической секции, поскольку система гарантирует, что конечный результат будет таким же, как если бы все критические секции кода выполнялись поочередно. В этом отношении объект в Огса похож на распределенный монитор [95].

Второй вид синхронизации — условная синхронизация, при которой процесс блокируется, ожидая выполнения определенного условия. В Огса условная синхронизация осуществляется при помощи предохранителей. В примере, приведенном в листинге 8.2, процесс, который пытается извлечь из пустого стека элемент, блокируется до появления элементов в стеке.

Огса поддерживает репликацию, миграцию и состоятельность объектов, а также вызов для них операций. Каждый объект может находиться в одном из двух состояний: он может быть единственным или реплицированным. В первом случае объект существует только на одной машине, поэтому все запросы направляются туда. Реплицированный объект присутствует на всех машинах, на которых запущен процесс, использующий этот объект. Это упрощает операцию чтения (поскольку ее можно производить локально), но усложняет обновление. При выполнении операции, которая изменяет реплицированный объект, сначала нужно получить от центрального процесса порядковый номер процесса. Затем в каждую машину, содержащую копию объекта, отправляется сообщение о необходимости выполнить указанную операцию. Поскольку все такие обновления обладают порядковыми номерами, каждая машина просто выполняет операции в указанном порядке, что гарантирует секвенциальную состоятельность.


⇐ Предыдущая страница| |Следующая страница ⇒

.