- •Э. Таненбаум
- •Глава 2. Организация компьютерных систем 56
- •Глава 3. Цифровой логический уровень 139
- •Глава 4. Микроархитектурный уровень 230
- •Глава 5. Уровень архитектуры команд 334
- •Глава 6. Уровень операционной системы 437
- •Глава 7. Уровень языка ассемблера 517
- •Глава 8. Архитектуры компьютеров параллельного
- •Глава 9. Библиография 647
- •Глава 8 (архитектура компьютеров параллельного действия) полностью изменена. В ней подробно описываются мультипроцессоры (uma, numa и сома) и мультикомпьютеры (мрр и cow).
- •Глава 1
- •Глава 2 знакомит читателей с основными компонентами компьютера: процессорами, памятью, устройствами ввода-вывода. В ней дается краткое описание системной архитектуры и введение к следующим главам.
- •Глава 2
- •Центральный процессор Центральный процессор
- •12 Битов б
- •24 Входные линии
- •50 Входных линий
- •Глава 4
- •Старший бит
- •Блок выборки команд
- •Сигналы управления
- •Глава 5
- •Intel ia-64
- •Глава 6
- •Глава 7
- •3. Сведения о том, можно ли получить доступ к символу извне процедуры.
- •Глава 8
- •64 Элемента на каждый регистр
- •Intel/Sandia Option Red
- •00 Процессор 2
- •Глава 9
- •4. Mazidi and Mazidi, The 80x86ibm pc and Compatible Computers, 2nd ed.
- •5. McKee et al., Smarter Memory: ImprovingBandwidthforStreamed References.
- •4. McKusick et al., Design and Implementation ofthe 4.4bsd Operating System.
- •3. Hill, Multiprocessors Should Support Simple Memory-Consistency Models.
- •Ieee Scalable Coherent Interface Working Group, ieee, 1989.
- •Ieee Micro Magazine, vol. 18, p. 60-75, July/Aug. 1998b.
- •3Rd ed., Reading, ma: Addison-Wesley, 1998.
- •1988 Int'l. Conf. On Parallel Proc. (Vol. 11), ieee, p. 94-101, 1988.
- •Implementation of the 4.4 bsd Operating System», Reading, ma: Addison-Wesley, 1996.
- •In Shared Memory Multiprocessing», ieee Computer Magazine, vol. 30, p. 4450, Dec. 1997.
- •78Jan.-March 1999.
- •0 123456789Abcdef
- •I и Ijmii him
- •Э. Таненбаум
00 Процессор 2
13 15
Процессор 3
в
Рис. 8.34. Виртуальное адресное пространство, состоящее из 16 страниц, которые распределены между четырьмя узлами в мультикомпьютере: исходное положение (а); положение после обращения процессора 0 к странице 10 (б); положение после обращения процессора 0 к странице 10 (в); в данном случае эта страница предназначенатолько для чтения
Проблему ложного совместного использования можно разрешить по-разному. Например, можно отказаться от согласованности по последовательности в пользу свободной согласованности [6]. Потенциально записываемые страницы могут присутствовать в нескольких узлах одновременно, но перед записью процесс должен совершить операцию acquire, чтобы сообщить о своем намерении. В этот момент все копии, кроме последней, объявляются недействительными. Нельзя делать никаких копий до тех пор, пока не будет совершена операция rel ease и после этого страница снова станет общей.
Второй способ оптимизации — изначально преобразовывать каждую записываемую страницу в режим «только для чтения». Когда в страницу запись производится впервые, система создает копию страницы, называемую двойником. Затем страница преобразуется в формат «для чтения и записи», и последующие записи могут производиться на полной скорости. Если позже произойдет ошибка из-за отсутствия страницы и страницу придется туда доставлять, между текущей страницей и двойником производится пословное сравнение. Пересылаются только те
слова, которые были изменены, что сокращает размер сообщений.
Если возникает ошибка из-за отсутствия страницы, нужно определить, где находится отсутствующая страница. Возможны разные способы, в том числе каталоги, которые используются в машинах NUMA и СОМА. Многие средства, которые используются в DSM, применимы к машинам NUMA и СОМА, поскольку DSM — это программная реализация машины NUMA или СОМА, в которой каждая страница трактуется как строка кэш-памяти.
DSM — это обширная область для исследования. Большой интерес представляют системы CASHMERE [76, 141], CRL [68], Shata [124] и Treadmarks [6, 87].
Linda
Системы DSM со страничной организацией памяти (например, IVY и Treadmarks) используют аппаратный блок управления памятью, чтобы закрывать доступ к отсутствующим страницам. Хотя пересылка только отдельных слов вместо всей страницы и влияет на производительность, страницы неудобны для совместного использования, поэтому применяются и другие подходы.
Один из таких подходов — система Linda, в которой процессы на нескольких машинах снабжены структурированной распределенной памятью совместного использования [21, 22]. Доступ к такой памяти осуществляется с помощью небольшого набора примитивных операций, которые можно добавить к существующим языкам (например, С или FORTRAN), в результате чего получатся параллельные языки, в данном случае C-Linda и FORTRAN-Linda.
В основе системы Linda лежит понятие абстрактного пространства кортежей, которое глобально по отношению ко всей системе и доступно всем процессам этой
системы. Пространство кортежей похоже на глобальную память совместного использования, только с определенной встроенной структурой. Пространство содержит ряд кортежей, каждый из которых состоит из одного или нескольких полей. Для C-Linda поля могут содержать целые числа, числа типа long integers, числа
с плавающей точкой, а также массивы (в том числе цепочки) и структуры (но не
другие кортежи). В листинге 8.4. приведено 3 примера кортежей.
Над кортежами можно совершать 4 операции. Первая из них, out, помещает кортеж в пространство кортежей. Например, операция
outC'abc", 2, 5);
помещает кортеж («abc», 2,5) в пространство кортежей. Поля операции out обычно содержат константы, переменные и выражения, например out("matnx-l". i. j, 3.14);
Это выражение помещает в пространство кортеж с четырьмя полями, причем второе и третье поля определяются по текущим значениям переменных i и j.
Вторая операция, in, извлекает кортеж из пространства. Обращение к кортежам ирогаъодатся. wo содержанию, л we wo жлтан vura адресу. Х\оля операнда V/ шэтут содержать выражения или формальные параметры. Рассмотрим операцию mCabc". 2, ? i);
Эта операция отыскивает кортеж, состоящий из цепочки «abc», целого числа 2 и третьего поля, которое может содержать любое целое число (предполагается, что i — это целое число). Найденный кортеж удаляется из пространства кортежей, а переменной i приписывается значение третьего поля. Когда два процесса выполняют одну и ту же операцию in одновременно, успешно выполнит эту операцию
только один из них, если нет двух и более подходящих кортежей. Пространство
кортежей может содержать много копий одного кортежа.
Листинг 8.4. Три кортежа системы Linda
("abc".2.5)
Cmatrix-1". 1.6.3.14)
("family", "is sister". Carolyn, Elinor)
Алгоритм соответствия, который используется в операции in, довольно прост. Поля шаблона операции in сравниваются с соответствующими полями каждого кортежа в пространстве кортежей. Совпадение происходит, если удовлетворены следующие три условия:
Шаблон и кортеж имеют одинаковое количество полей.
Типы соответствующих полей совпадают.
Каждая константа или переменная в шаблоне совпадает с полем кортежа.
Формальные параметры, указываемые знаком вопроса, за которым следует имя переменной или типа, не участвуют в сравнении (за исключением проверки типа), хотя тем параметрам, которые содержат имя переменной, присваиваются значения после совпадения.
Если соответствующий кортеж отсутствует, процесс приостанавливается, пока другой процесс не вставит нужный кортеж, и в этот момент вызывающий процесс
автоматически возобновит работу и найдет этот новый кортеж. Процессы блокируются и разблокируются автоматически, поэтому если один процесс собирается выводить кортеж, а другой — вводить его, то не имеет никакого значения, какой из процессов будет первым.
Третья операция, read, сходна с in, только она не удаляет кортеж из пространства. Четвертая операция, eval, параллельно оценивает свои параметры, а полученный в результате кортеж копируется в пространство кортежей. Этот механизм можно использовать для выполнения любых вычислений. Именно так создаются параллельные процессы в системе Linda.
Основной принцип программирования в системе Linda — это модель replicated worker. В основе этой модели лежит понятие пакета задач (task bag), которые нужно выполнить. Основной процесс начинается с выполнения цикла, содержащего операцию
out("task-bag",job):
При каждом прохождении цикла одна из задач выдается в пространство кортежей. Каждый рабочий процесс начинает работу с получения кортежа с описанием задачи, используя операцию
in("Task-bag". ?job):
Затем он выполняет эту задачу. По выполнении задачи он получает следующую. Новая задача тоже может быть помещена в пакет задач во время выполнения. Таким образом, работа динамически распределяется среди рабочих процессов, и каждый рабочий процесс занят постоянно.
Существуют различные реализации Linda в мультикомпьютерных системах. Во всех реализациях ключевым является вопрос о том, как распределить кортежи по машинам и как их находить. Возможные варианты — широковещание и каталоги. Дублирование — это тоже важный вопрос. Подробнее об этом см. [16].
Огса
Несколько другой подход к совместно используемой памяти на прикладном уровне в мультикомпьютере — в качестве общей совместно используемой единицы использовать полные объекты, а не просто кортежи. Объекты состоят из внутреннего (скрытого) состояния и процедур для оперирования этим состоянием. Поскольку программист не имеет прямого доступа к состоянию, появляется возможность совместного использования ресурсов машинами, которые не имеют общей физической памяти.
Одна из таких систем называется Огса [11, 13, 14]. Огса — это традиционный язык программирования (основанный на Modula 2), к которому добавлены две
особенности — объекты и возможность создавать новые процессы. Объект Огса —
это стандартный тип данных, аналогичный объекту в языке Java или пакету в языке Ada. Объект заключает в себе внутренние структуры данных и написанные пользователем процедуры, которые называются операциями. Объекты пассивны, то есть они не содержат потоков, которым можно посылать сообщения. Процессы получают доступ к внутренним данным объекта путем вызова его процедур.
Каждая процедура в Огса состоит из списка пар (предохранитель (guard), блок операторов). Предохранитель — это логическое выражение, которое может принимать значение «истина» (true) или «ложь (false). Когда вызывается операция, все ее предохранители оцениваются в произвольном порядке. Если все они ложны (false), вызывающий процесс приостанавливается до тех пор, пока один из них не примет значение true. При нахождении предохранителя со значением true выполняется следующий за ним блок выражений. В листинге 8.5 показан объект stack с двумя операциями push и pop.
Листинг 8.5. Упрощенный объект stack в системе Огса с внутренними данными
и двумя операциями
Object implementation stack;
top:integer;
stack:array[integer O..N-l]of integer;
1хранилище для стека
operation pushOtem:integer); begin
stack[top]:=item;
top:=top+l:
end:
1функция. которая ничего не 1возвращает
1помещаем элемент в стек 1увеличения указателя стека
operation popO integer. begin
guard top>0 do
#функция, которая возвращает #целое число
Приостанавливает работу, если стек пуст
top =top-l. return stack[top]:
#уменьшает указатель стека # возвращает вершину стека
od.
end
begin
top =0,
Инициализация
end
Как только определен объект stack, нужно объявить переменные этого типа: s, t stack.
Такая запись создает два стековых объекта и устанавливает переменную top в каждом объекте на 0. Целочисленную переменную к можно поместить в стек s с помощью выражения
s$push(k)
и т. д. Операция pop содержит предохранитель, поэтому попытка вытолкнуть переменную из пустого стека вызовет блокировку вызьтающего процесса до тех пор, пока другой процесс не положит что-либо в стек.
Осга содержит оператор ветвления (fork statement) для создания нового процесса в процессоре, определяемом пользователем. Новый процесс запускает процедуру, названную в команде ветвления. Параметры, в том числе объект, могут передаваться новому процессу. Именно так объекты распределяются среди машин.
Например, выражение
for I in I n do fork foobar(s) on I; od; порождает новый процесс на каждой из машин с 1 по п, запуская программу/OoZar
в каждой из них. Поскольку эти п новых процессов (а также исходный процесс)
работают параллельно, они все могут помещать элементы в общий стек s и выталкивать элементы из общего стека s, как будто все они работают на мультипроцессоре с памятью совместного использования.
Операции в объектах совместного использования атомарны и согласованы по последовательности. Если несколько процессов выполняют операции над одним общим объектом практически одновременно, система выбирает определенный порядок выполнения, и все процессы «видят» этот же порядок.
В системе Осга данные совместного использования совмещаются с синхронизацией не так, как в системах со страничной организацией памяти. В программах с параллельной обработкой нужны два вида синхронизации. Первый вид — взаимное исключение. Этот метод не позволяет двум процессам одновременно выполнять одну и ту же критическую область. В системе Огса каждая операция над общим объектом похожа на критическую область, поскольку система гарантирует, что конечный результат будет таким же, как если бы все критические области выполнялись последовательно одна за другой. В этом отношении объект Огса похож на распределенное контролирующее устройство [61].
Второй вид синхронизации — условная синхронизация, при которой процесс блокируется и ждет выполнения определенного условия. В системе Огса условная синхронизация осуществляется при помощи предохранителей. В примере, приведенном в листинге 8.5, процесс, который пытается вытолкнуть элемент из пустого стека, блокируется до появления в стеке элементов.
В системе Огса допускается копирование объектов, миграция и вызов операций. Каждый объект может находиться в одном из двух состояний: он может быть единственным, а может быть продублирован. В первом случае объект существует только на одной машине, поэтому все запросы отправляются туда. Продублированный объект присутствует на всех машинах, которые содержат процесс, использующий этот объект. Это упрощает операцию чтения (поскольку ее можно производить локально), но усложняет процесс обновления. При выполнении операции, которая изменяет продублированный объект, сначала нужно получить от центрального процесса порядковый номер. Затем в каждую машину, содержащую копию объекта, отправляется сообщение о необходимости выполнить эту операцию. Поскольку все такие обновления обладают порядковыми номерами, все машины просто выполняют операции в порядке номеров, что гарантирует согласованность по последовательности.
Globe
Большинство систем DSM, Linda и Огса работают в пределах одного здания или
предприятия. Однако можно построить систему с совместно используемой памятью на прикладном уровне, которая может распространяться на весь мир. В системе Globe объект может находиться в адресном пространстве нескольких процессов одновременно, возможно, даже на разных континентах [72,154]. Чтобы получить доступ к данным общего объекта, пользовательские процессы должны пройти через его процедуры, поэтому для разных объектов возможны разные способы реализации. Например, можно иметь один экземпляр данных, который запрашивается по мере необходимости (это удобно для данных, часто обновляемых одним
владельцем). Другой вариант — когда все данные находятся в каждой копии объекта, а сигналы об обновлении посылаются каждой копии в соответствии с надежным протоколом широковещания.
Цель системы Globe — работать на миллиард пользователей и содержать триллион объектов — делает эту систему амбициозной. Ключевыми моментами являются размещение объектов, управление ими, а также расширение системы. Система Globe содержит общую сеть, в которой каждый объект может иметь собственную стратегию дублирования, стратегию защиты и т. д.
Среди других ттшрокомасштабных систем можно назвать Globus [40,41 ] и Legion [50,51], но они, в отличие от Globe, не создают иллюзию совместного использования памяти.
Краткое содержание главы
Компьютеры параллельной обработки можно разделить на две основные категории: SIMD и MIMD. Машины SIMD выполняют одну команду одновременно над несколькими наборами данных. Это массивно-параллельные процессоры и векторные компьютеры. Машины MIMD выполняют разные программы на разных машинах. Машины MIMD можно подразделить на мультипроцессоры, которые
совместно используют общую основную память, и мультикомпьютеры, которые не используют общую основную память. Системы обоих типов состоят из процессоров и модулей памяти, связанных друг с другом различными высокоскоростными сетями, по которым между процессорами и модулями памяти передаются пакеты запросов и ответов. Применяются различные топологии, в том числе решетки, торы, кольца и гиперкубы.
Для всех мультипроцессоров ключевым вопросом является модель согласованности памяти. Из наиболее распространенных моделей можно назвать согласованность по последовательности, процессорную согласованность, слабую согласованность и свободную согласованность. Мультипроцессоры можно строить с использованием отслеживающей шины, например, в соответствии с протоколом MESI. Кроме того, возможны различные сети, а также машины на основе каталога NUMAHCOMA.
Мультипроцессоры можно разделить на системы МРР и COW, хотя граница между ними произвольна. К системам МРР относятся Cray ТЗЕ и Intel/Sandia Option Red. В них используются запатентованные высокоскоростные сети межсоединений. Системы COW, напротив, строятся из таких стандартных деталей, как Ethernet, ATM и Myrinet.
Мультикомпьютеры часто программируются с использованием пакета с передачей сообщений (например, PVM или MPI). Оба пакета поддерживают библиотечные вызовы для отправки и получения сообщений. Оба работают поверх существующих операционных систем.
Альтернативный подход — использование памяти совместного использования на прикладном уровне (например, система DSM со страничной организацией, пространство кортежей в системе Linda, объекты в системах Огса и Globe). Система DSM моделирует совместно используемую память на уровне страниц, и в этом она сходна с машиной NUMA. Системы Linda, Orca и Globe создают иллюзию совместно используемой памяти с помощью кортежей, локальных объектов и глобальных объектов соответственно.
Вопросы и задания
Утром пчелиная матка созывает рабочих пчел и сообщает им, что сегодня им нужно собрать нектар ноготков. Рабочие пчелы вылетают из улья и летят в разных направлениях в поисках ноготков. Что это за система — SIMD или MIMD?
Вычислите диаметр сети для каждой топологии, изображенной на рис. 8.4.
Для каждой топологии, изображенной на рис. 8.4, определите степень отказоустойчивости. Отказоустойчивость — максимальное число каналов связи,
после утраты которых сеть не будет разделена на две части.
4. Рассмотрим топологию двойной тор (см. рис. 8.4, е), расширенную до раз- мера kxk. Каков диаметр такой сети? Подсказка: четное и нечетное к нужно рассматривать отдельно.
5. Представим сеть в форме куба 8x8x8. Каждый канал связи имеет дуплекс- ную пропускную способность 1 Гбайт/с. Какова бисекционная пропускная
способность этой сети?
6. Рассмотрим сеть в форме прямоугольной решетки размером 4 коммутатора в ширину и 3 коммутатора в высоту. В ней пакеты, исходящие из левого верхнего угла и направляющиеся в правый нижний угол, могут следовать
по любому из нескольких возможных путей. Пронумеруйте верхний ряд
коммутаторов с 1 по 4, следующий ряд — с 5 по 8, а нижний — с 9 по 12. Выпишете все пути, по которым пакеты перемещаются только вправо или вниз, начиная с коммутатора 1 и заканчивая коммутатором 12.
Закон Амдала ограничивает потенциальный коэффициент ускорения, достижимый в компьютере параллельного действия. Вычислите как функцию от f максимально возможный коэффициент ускорения, если число процессоров стремится к бесконечности. Каково значение этого предела для f=0,l?
На рисунке 8.10 показано, что расширение невозможно с шиной, но возможно с решеткой. Каждая шина или канал связи имеет пропускную способность Ь.
Вычислите среднюю пропускную способность на каждый процессор для
каждого из четырех случаев. Затем расширьте каждую систему до 64 процессоров и выполните те же вычисления. Чему равен предел, если число процессоров стремится к бесконечности?
9. Компьютерная компания выпускает системы, состоящие из п компьютеров с совместно используемой памятью, организованных в квадратную решет- ку. Однажды вице-президенту компании приходит в голову идея выпустить новый продукт: трехмерную решетку, в которой п компьютеров организова- ны в правильный куб (это возможно, например, для п=4096).
Как это изменение повлияет на максимальное время ожидания?
Как это изменение повлияет на общую пропускную способность?
10. Когда мы говорили о согласованности памяти, мы сказали, что модель со- гласованности — это вид контракта между программным обеспечением и
памятью. Зачем нужен такой контракт?
Векторный процессор (например, Cray-1) содержит арифметические устройства с конвейерами из четырех стадий. Прохождение каждой стадии занимает 1 не. Сколько времени понадобится для сложения двух векторов из 1024 элементов?
Рассмотрим мультипроцессор с общей шиной. Что произойдет, если два
процессора попытаются получить доступ к глобальной памяти в один и тот
же момент?
13. Предположим, что по техническим причинам отслеживающий кэш может
отслеживать только адресные линии и не может отслеживать информационные. Повлияет ли это изменение на протокол сквозной записи?
14. Рассмотрим простую модель мультипроцессорной системы с шиной без
кэш-памяти. Предположим, что одна из каждых четырех команд обращается к памяти и что при каждом обращении к памяти шина занимается на все
время выполнения команды. Если шина занята, то запрашивающий процессор становится в очередь «первым вошел — первым вышел». Насколько быстрее будет работать система с 64 процессорами по сравнению с однопроцессорной системой?
Протокол MESI содержит 4 состояния. Каким из 4 состояний можно пожертвовать и каковы будут последствия каждого из четырех вариантов? Если бы вам пришлось выбрать только три состояния, какие бы вы выбрали?
Бывают ли в протоколе MESI такие ситуации, когда строка кэш-памяти присутствует в локальной кэш-памяти, но при этом все равно требуется транзакция шины? Если да, то опишите такую ситуацию.
Предположим, что к общей шине подсоединено п процессоров. Вероятность, что любой процессор пытается использовать шину в данном цикле, равна р. Какова вероятность, что:
Шина свободна (0 запросов).
Совершается ровно один запрос.
Совершается более одного запроса.
Процессоры Sun Enterprise 10000 работают с частотой 333 МГц, а отслеживающие шины — с частотой 83,3 МГц. Если имеется 64 процессора, ясно, что шины не справятся с такой нагрузкой. Тем не менее машина работает. Объясните, почему.
В этой книге мы вычислили, что производительности координатного коммутатора было достаточно для обработки 167 млн отслеживаний/с, когда к нему подсоединено 16 плат, причем мы даже принимаем во внимание тот факт, что из-за конфликтных ситуаций на практике пропускная способность составляет 60% от теоретической. Небольшая машина Enterprise 10000 может содержать всего 4 платы (16 процессоров). Будет ли такая машина работать
с полной скоростью?
Предположим, что провод между коммутатором 2А и коммутатором ЗВ в сети Omega поврежден. Какие именно элементы будут отрезаны друг от друга?
Области памяти, к которым часто происходят обращения, представляют большую проблему в многоступенчатых сетях. А являются ли они проблемой в системах с шинной организацией?
Сеть Omega соединяет 4096 процессоров RISC, время цикла каждого из которых составляет 60 не, с 4096 бесконечно быстрыми модулями памяти. Каждый переключательный элемент дает задержку 5 не. Сколько пустых циклов требуется для команды IOAD?
Рассмотрим машину с сетью Omega (см. рис. 8.22). Предположим, что программа и стек i хранятся в модуле памяти i. Какое незначительное изменение топологии может сильно повлиять на производительность? (IBM RP3 и BBN Butterfly используют эту измененную топологию.) Какой недостаток имеет новая топология по сравнению со старой?
В мультипроцессоре NUMA обращение к локальной памяти занимает 20 не, а к памяти другого процессора — 120 не. Программа во время выполнения совершает N обращений к памяти, 1 % из которых — обращения к странице Р. Изначально эта страница находится в удаленной памяти, а на копирование ее из локальной памяти требуется С не. При каких обстоятельствах эту страницу следует копировать локально, если ее не используют другие процессоры?
Система DASH содержит b байтов памяти, которые распределены между п кластерами. В каждом кластере содержится р процессоров. Размер строки
кэш-памяти составляет с байтов. Напишите формулу для общего количества памяти, предоставленного каталогам (исключая два бита состояния на
каждый элемент каталога).
26. Рассмотрим мультипроцессор CC-NUMA (см. рис. 8.24), содержащий
512 узлов по 8 Мбайт каждый. Если длина строки кэш-памяти составляет 64 байта, каков процент непроизводительных затрат для каталогов? Как повлияет увеличение числа узлов на непроизводительные затраты (они увеличатся, уменьшатся или останутся без изменений)?
На какую операцию в SCI требуется больше всего времени?
Мультипроцессор на базе SCI содержит 63 узла. Длина строки кэш-памяти составляет 32 байта, а общее адресное пространство составляет 232 байтов. Размер кэш-памяти в каждом узле — 1 Мбайт. Сколько байтов нужно иметь в каждом кэш-каталоге?
Машина NUMA-Q 2000 содержит 63 узла. Предложите ввести 64 узла вместо 63. Почему компания Sequent в качестве максимума выбрала именно 63,
а не 64?
30. В этой книге мы обсуждали 3 варианта примитива send — синхронный, бло- кирующий и неблокирующий. Предложите четвертый метод, который схож с блокирующей операцией send, но немного отличается по свойствам. Какое
преимущество и какой недостаток имеет новый метод по сравнению с обычной блокирующей операцией send?
31. Рассмотрим компьютер, который работает в сети с аппаратным широкове- щанием (например, Ethernet). Почему важно соотношение операций чте- ния (которые не изменяют внутреннее состояние переменных) и операций
записи (которые изменяют внутреннее состояние переменных)?
32. Многие вопросы, возникающие при разработке мультипроцессоров, возни- кают также при разработке совместно используемой памяти на прикладном уровне. Один из таких вопросов — выбор одной из двух политик: обновле- ние или объявление недействительным. Какая политика используется в си- стеме Огса?