Виктор Шнитман
Институт системного программирования РАН vzs@ivann.delta.msk.suГруппа компаний Bull является сегодня одним из крупнейших производителей информационных систем на мировом компьютерном рынке. В связи с происходившей в последнем пятилетии перестройкой структуры компьютерного рынка группа объявила о своей приверженности идеологии открытых систем. Сегодня Bull выпускает компьютеры класса мэйнфрейм . DPS9000, среднего класса . DPS7000и DPS6000, работающие под управлением операционной системы GCOS8, UNIX-системы DPX/20 и Escala, а также серию персональных компьютеров ZDS. В результате технологического соглашения с компанией IBM, в 1992 году Bull анонсировала ряд компьютеров DPX/20, базирующихся на архитектуре POWER, а позднее в1993 году . на архитектуре PowerPC, работающих под управлением операционной системы AIX. Версия ОС AIX 4.1, разработанная совместно специалистами IBM и Bull, поддерживает симметричную многопроцессорную обработку. Архитектура PowerScale представляет собой первую реализацию симметричной мультипроцессорной архитектуры, разработанной Bull специально для процессоров PowerPC, применяемых в компьютерах Escala. Вначале она была реализована на процессоре PowerPC601, но легко модернизируется и для других моделей этих чипов.
Основа архитектуры PowerPC . многокристальная архитектура POWER, которая была сначала разработана в расчете на однопроцессорную реализацию процессора. При разработке PowerPC для удовлетворения потребностей компаний Apple, IBM и Motorola в архитектуре POWER было сделано несколько изменений в следующих направлениях:
Архитектура PowerPC поддерживает ту же самую базовую модель программирования и назначение кодов операций команд, что и архитектура POWER. В тех местах, где были сделаны изменения, которые могли потенциально нарушить двоичную совместимость с приложениями, написанными для архитектуры POWER, были расставлены "ловушки", обеспечивающие прерывание и эмуляцию с помощью программных средств. Такие изменения вводились, естественно, только в тех случаях, если соответствующая возможность либо использовалась не очень часто в кодах прикладных программ, либо была изолирована в библиотечных программах, которые можно просто заменить.
Микропроцессор PowerPC поддерживает мультипроцессорную обработку, в частности, модель тесно связанных вычислений в разделяемой памяти. Работа тесно связанных процессоров предполагает использование разными процессорами одной общей памяти и одной операционной системы, управляющей всеми процессорами и аппаратурой системы. Процессоры должны конкурировать за разделяемые ресурсы. В симметричной мультипроцессорной системе все процессоры считаются функционально-эквивалентными и могут выполнять операции ввода/вывода и другие вычисления. Возможности управления подобной системой с разделяемой памятью реализованы в ОС AIX 4.1.
Разработанное Bull семейство Escala обеспечивает масштабируемость и высокую готовность систем, центральным местом которых является симметричная мультипроцессорная архитектура, названная PowerScale, позволяющая производить постепенную модернизацию и объединять в системе от 1 до 8 процессоров.
Симметричная мультипроцессорная обработка (SMP) является архитектурой, в которой несколько процессоров разделяют доступ к единственной общей памяти и работают под управлением одной копии операционной системы. В этом случае задания могут соответствующим образом планироваться для работы на разных процессорах в пределах "пула имеющихся ресурсов", допуская распараллеливание выполнения одновременно нескольких процессов. Главным преимуществом архитектуры SMP, по сравнению с другими подходами к реализации мультипроцессорных систем, является прозрачность для программных приложений. Этот фактор существенно сокращает время выхода на рынок и готовность традиционных коммерческих приложений на системах SMP по сравнению с другими мультипроцессорными архитектурами.
В современных системах SMP наиболее актуальный вопрос разработки . создание высокопроизводительной подсистемы памяти для обеспечения скоростных RISC-процессоровданными и командами. Общее решение этой проблемы заключается в использовании большой высокоскоростной кэш-памяти или в создании иерархии памяти между процессорами и разделяемой глобальной памятью. Архитектура PowerScale предлагает новый подход к решению традиционных вопросов "бутылочного горлышка", ограничивающего производительность SMP-систем, а именно новую организацию управления кэш-памятью и доступа к памяти.
PowerScale представляет собой оптимизированную разработку, которая является результатом исследований параметров производительности современных коммерческих приложений. Обычно выполнение этих прикладных систем связано с необходимостью манипулирования огромными объемами данных и разделения доступа к этим данным между многими пользователями или программами. Такого рода рабочая нагрузка характеризуется наличием больших рабочих наборов данных с низким уровнем локализации. При моделировании прикладных систем подобного профиля на системах SMP были замечены два особых эффекта.
В традиционной SMP-архитектуре связи между кэшами ЦП и глобальной памятью реализуются с помощью общей шины памяти, разделяемой между различными процессорами. Как правило, эта шина становится слабым местом конструкции системы и стремится к насыщению при увеличении числа инсталлированных процессоров. Это происходит потому, что увеличивается трафик пересылок между кэшами и памятью, а также между кэшами разных процессоров, конкурирующих между собой за пропускную способность шины памяти. При рабочей нагрузке, характеризующейся интенсивной обработкой транзакций, эта проблема становится даже еще более острой.
В архитектуре PowerScale группы Bull интерфейс памяти реализован с учетом указанного выше профиля приложений и рассчитан на использование нескольких поколений процессоров со все возрастающей производительностью. В действительности архитектура PowerScale с самого начала была разработана в расчете на поддержку до 8 процессоров PowerPC 620.
В архитектуре PowerScale (рис. 1) основным средством оптимизации доступа к разделяемой основной памяти является использование достаточно сложной системной шины. Реально эта "шина" представляет собой комбинацию шины адреса/управления, реализованной классическим способом, и набора магистралей данных, которые соединяются между собой посредством высокоскоростного матричного коммутатора. Эта система межсоединений получила название MPB_SysBus. Шина памяти используется только для пересылки простых адресных тегов, а не блокируемый матричный коммутатор . для обеспечения более интенсивного трафика данных. К матричному коммутатору могут быть подсоединены до 4 двухпроцессорных портов, порт ввода/вывода и подсистема памяти.
Рисунок 1.
Архитектура PowerScale.
Главное преимущество такого подхода состоит в том, что он позволяет каждому процессору иметь прямой доступ к подсистеме памяти. Другим важным свойством реализации является использование расслоения памяти, что дает возможность многим процессорам обращаться к памяти одновременно. На рис.2 приведена схема, иллюстрирующая организацию доступа к памяти.
Рисунок 2.
Схема организации доступа к памяти.
Каждый процессорный модуль имеет свой собственный выделенный порт памяти для пересылки данных. При этом общая шина адреса и управления гарантирует, что на уровне системы все адреса являются когерентными.
В процессе разработки системы был сделан выбор в направлении использования больших кэшей второго уровня (L2), дополняющих кэши первого уровня (L1),интегрированные в процессорах PowerPC. Это решение породило необходимость более глубокого рассмотрения работы системы в целом. Чтобы получить полное преимущество от применения пространственной локальности данных, присутствующих в кэшах L2, необходимо иметь возможность повторного назначения ранее отложенного процесса на процессор, где он ранее выполнялся, даже если этот процессор не является следующим свободным процессором. Подобная "настройка" системы является основой для балансировки нагрузки и аналогична процессу планирования.
Очевидно, что всегда полезно выполнять процесс на одном и том же процессоре и иметь более высокий коэффициент попаданий в кэш, чем при выполнении процесса на следующем доступном процессоре. Применяя алгоритмы, базирующиеся на средствах ядра системы, можно определить наиболее подходящее использование пула процессоров с учетом текущего коэффициента попаданий в кэш. Это позволяет оптимизировать уровень миграции процессов между процессорами и увеличивает общую пропускную способность системы.
Процессор PowerPC определяет слабо упорядоченную модель памяти, позволяющую оптимизировать использование пропускной способности памяти системы. Это достигается за счет того, что аппаратуре разрешается переупорядочивать операции загрузки и записи так, что требующие длительного времени операции загрузки могут выполняться ранее определенных операций записи. Такой подход дает возможность уменьшить действительную задержку операций загрузки. Архитектура PowerScale полностью поддерживает эту модель памяти как на уровне процессора за счет набора команд PowerPC, так и глобально путем реализации следующих ограничений:
Для обеспечения подобной модели упорядоченных обращений к памяти на уровне каждого процессора системы используются определенная аппаратная поддержка и явные команды синхронизации. Кроме того, на системном уровне соблюдение необходимых протоколов для обеспечения упорядочивания обращений между процессорами или между процессорами и подсистемой ввода/вывода возложено на программное обеспечение.
С реализацией архитектуры глобальной памяти в мультипроцессорной системе обычно связан очень важный вопрос. Как объединить преимущества "логически" локальной для каждого процессора памяти, имеющей малую задержку доступа, с требованиями реализации разделяемой глобальной памяти? Группа Bull разработала патентованную архитектуру, в которой массив памяти полностью расслоен до уровня длины строки системного кэша (32 байта). Такая организация обеспечивает минимум конфликтов между процессорами при работе подсистемы памяти и гарантирует минимальную задержку. Требование реализации глобальной памяти обеспечивается тем, что массив памяти для программных средств всегда представляется непрерывным.
Предложенная конструкция решает также проблему, часто возникающую в других системах, где использование методов расслоения для организации последовательного доступа к различным областям памяти возможно, только если платы памяти устанавливаются сбалансировано. Этот, кажущийся тривиальным, вопрос может приводить к излишним закупкам дополнительных ресурсов и связан исключительно с возможностями конструкции системы. Архитектура PowerScale позволяет обойти эту проблему за счет автоматической оптимизации степени расслоения памяти в зависимости от того, какие платы памяти инсталлированы в системе. В каждой конкретной конфигурации PowerScale будет использовать низкую или высокую степень расслоения или их комбинацию. Все это полностью прозрачно для программного обеспечения и, что более важно, для пользователя.
Архитектура коммутатора реализована с помощью аппаратной сети, которая осуществляет индивидуальные соединения типа точка-точка: процессора с процессором, процессора с основной памятью и процессора с магистралью данных ввода/вывода. Эта сеть работает совместно с разделяемой адресной шиной. Такой сбалансированный подход позволяет использовать лучшие свойства каждого из этих методов организации соединений.
Разделяемая адресная шина упрощает реализацию наблюдения (snooping)за адресами, что необходимо для аппаратной поддержки когерентности памяти. Адресные транзакции конвейеризованы, выполняются асинхронно . расщеплено по отношению к пересылкам данных и требуют относительно небольшой полосы пропускания, гарантируя, что этот ресурс никогда не войдет в состояние насыщения.
Организация пересылок данных требует больше внимания, поскольку уровень трафика и время занятости ресурсов физического межсоединения здесь существенно выше, чем это требуется для пересылки адресной информации. Операция пересылки адреса представляет собой одиночную пересылку, в то время как операция пересылки данных должна удовлетворять требованию многобайтной пересылки в соответствии с размером строки кэша. При реализации отдельных магистралей данных появляется ряд дополнительных возможностей, которые обеспечивают:
Поэтому архитектуру PowerScale можно назвать многопоточной аппаратной архитектурой (multi-threaded hardware architecture) с возможностями параллельных операций. На рис. 3 показаны основные режимы и операции, выполняемые матричным коммутатором.
Рисунок 3.
Матричный коммутатор.
Режим обращения к памяти . Memory mode: (a). Процессорный узел или узел в/в коммутируется с массивом памяти (MA). Такое соединение используется для организации операций чтения памяти или записи в память.
Режим вмешательства (чтение): (b). Читающий узел коммутируется с другим, вмешивающимся узлом и шиной данных MA. Этот режим используется когда при выполнении операции чтения строки от механизма наблюдения за когерентным состоянием памяти поступает ответ, что данная строка находится в кэш-памяти другого узла и модифицирована. В этом случае данные, извлекаемые из строки кэша владельца, подаются читающему узлу и одновременно записываются в MA. Если читающий и вмешивающийся ЦП находятся внутри одного и того же узла, то данные заворачиваются назад на уровне узла и одновременно записываются в память.
Режим вмешательства (чтение с намерением модификации . RWITM):(c). Процессорный узел или узел в/в (читающий узел) коммутируется с другим процессорным узлом или узлом в/в. Этот режим используется тогда, когда при выполнении операции RWITM от механизма наблюдения поступает ответ, что данная строка находится в кэш-памяти другого узла и модифицирована. В этом случае данные, извлекаемые из строки кэша владельца, подаются только читающему узлу и не записываются в память.
Режим программируемого ввода/вывода (PIO): (d). Процессорный узел коммутируется с узлом в/в. Это случай операций PIO, при котором обмен данными происходит только между процессором и узлом в/в.
Режим в/в с отображением в памяти (memory mapped). Главный узел коммутируется с узлами в/в (подчиненными узлами), вовлеченными в транзакцию. Это случай операций с памятью.
Вслед за установочной фазой транзакции, например после установки адреса на адресной шине, данные могут пересылаться через коммутатор на полной скорости синхронизации. Это возможно благодаря организации соединения точка-точка, которое создается для каждой отдельной транзакции. Поэтому в дальнейшем какие-либо помехи отсутствуют. Можно также выполнять параллельно несколько операций, например множественный доступ к памяти или пересылки между кэшами.
Для того чтобы уменьшить задержку памяти, операции чтения начинаются до выполнения каких-либо действий по обеспечению глобальной когерентности на уровне системы. Ответы когерентности полностью синхронизированы, разрешаются за фиксированное время и поступают всегда прежде, чем будет захвачен разделяемый ресурс . шина памяти. Это помогает избежать ненужных захватов шины. Любые транзакции, которые не разрешаются когерентно за данное фиксированное время, позднее будут повторены системой.
Используемая в системе внутренняя частота синхронизации равна 75 МГц, что позволяет оценить уровень производительности разработанной архитектуры. Интерфейс физической памяти имеет ширину 32 байта и, учитывая арбитраж шины, позволяет пересылать 32 байта каждые 3 такта синхронизации. Это дает скорость передачи данных 800 Мбайт/с, поддерживаемую на уровне интерфейса памяти. Каждый порт ЦП имеет ширину 8 байт и способен передавать по 8 байт за такт, что дает скорость 600 Мбайт/с, достигаемую как при пересылке ЦП-память, так и при пересылке кэш-кэш. Скорость 800 Мбайт/с для памяти поддерживается с помощью буферов в коммутаторе, которые позволяют конвейеризовать несколько операций.
Поскольку несколько операций могут выполняться через коммутатор на полной скорости параллельно, то для оптимальной смеси операций (две пересылки из ЦП в память плюс пересылка кэш-кэш) пропускная способность может достигать пикового значения 1400 Мбайт/с. Таким образом, максимальная пропускная способность будет варьироваться в диапазоне от 800 до 1400 Мбайт/с в зависимости от коэффициента попаданий кэш-памяти.
Известно, что требования, предъявляемые современными процессорами к полосе пропускания памяти, можно существенно сократить путем применения больших многоуровневых кэшей. Проблема когерентности памяти в мультипроцессорной системе возникает из-за того, что значение элемента данных, хранящееся в кэш-памяти разных процессоров, доступно этим процессорам только через их индивидуальные кэши. При этом определенные операции одного из процессоров могут влиять на достоверность данных, хранящихся в кэшах других процессоров. Поэтому в подобных системах жизненно необходим механизм обеспечения когерентного. согласованного . состояния кэшей. С этой целью в архитектуре PowerScale используется стратегия обратной записи, достигаемая при применении вертикальной когерентности кэшей и вторичной когерентности кэш-памяти.
Каждый процессор для своей работы использует двухуровневый кэш со свойствами охвата. Это означает, что кроме внутреннего кэша первого уровня, встроенного в каждый процессор PowerPC, имеется связанный с ним кэш второго уровня. При этом каждая строка в кэше L1 имеется также и в кэше L2. В текущей реализации объем кэша L2 составляет 1 Мбайт на каждый процессор, а в будущем предполагается его расширение до 4 Мбайт. Сама по себе кэш-память второго уровня позволяет существенно уменьшить число обращений к памяти и увеличить степень локализации данных. Для повышения быстродействия кэш L2 построен на принципах прямого отображения. Длина строки равна 32 байт . размер когерентной гранулированности системы. Следует отметить, что, хотя с точки зрения физической реализации процессора PowerPC, 32 байта составляют только половину строки кэша L1,это не меняет протокол когерентности, который управляет операциями кэшаL1 и гарантирует, что кэш L2 всегда содержит данные кэша L1.
Кэш L2 имеет внешний набор тегов. Таким образом, любая активность механизма наблюдения за когерентным состоянием кэш-памяти может быть связана с кэшем второго уровня, в то время как большинство обращений со стороны процессора могут обрабатываться первичным кэшем. Если механизм наблюдения обнаруживает попадание в кэш второго уровня, то он должен выполнить арбитраж за первичный кэш, с целью обновления состояния и, возможно, поиска данных, что обычно будет приводить к приостановке процессора. Поэтому глобальная память может работать на уровне тегов кэша L2, что позволяет существенно ограничить количество операций наблюдения, генерируемых системой в направлении данного процессора. Это, в свою очередь, существенно увеличивает производительность системы, поскольку любая операция наблюдения в направлении процессора сама по себе может приводить к приостановке его работы.
Вторичная когерентность кэш-памяти требуется для поддержки когерентности кэшей L1&L2 различных процессорных узлов . для обеспечения когерентного состояния всех имеющихся в мультипроцессорной системе распределенных кэшей, естественно включая поддержку когерентной буферизации ввода/вывода как по чтению, так и по записи. Вторичная когерентность обеспечивается с помощью проверки каждой транзакции, возникающей на шине MPB_SysBus. Такая проверка позволяет обнаружить, что запрашиваемая по шине строка уже кэширована в процессорном узле, и обеспечивает выполнение необходимых операций. Это делается с помощью тегов кэша L2 и логически поддерживается тем фактом, что L1 является подмножеством L2.
В рамках архитектуры PowerScale используется протокол MESI, представляющий собой стандартный способ реализации вторичной когерентности кэш-памяти. Одной из основных задач протокола MESI является откладывание на максимально возможный срок операции обратной записи кэшированных данных в глобальную память системы. Это позволяет улучшить производительность системы за счет минимизации ненужного трафика данных между кэшами и основной памятью. Протокол MESI определяет четыре состояния, в которых может находиться каждая строка каждого кэша системы. Эта информация применяется для определения соответствующих последующих операций (рис. 4).
Рисунок 4.
Диаграмма переходов состояний протокола MESI.
Состояние строки "Единственная" (Exclusive). Данные этой строки достоверны в этом кэше и недостоверны в любом другом кэше. Данные не модифицированы по отношению к памяти.
Состояние строки "Разделяемая" (Shared). Данные этой строки достоверны в этом кэше, а также в одном или нескольких удаленных кэшах.
Состояние строки " Модифицированная " (Modified). Данные этой строки достоверны только в этом кэше и были модифицированы. Данные недостоверны в памяти.
Состояние строки " Недостоверная " (Invalid). Достоверные данные не были найдены в данном кэше.
Для поддержки мультипроцессорной организации были реализованы несколько примитивов адресной шины. Это позволяет одному главному устройству шины передавать, а другим устройствам обнаруживать появление этих примитивов на шине. Устройство . владелец кэша наблюдает за адресной шиной во время глобального запроса и сравнивает целевой адрес с адресами тегов в своем кэше L2. Если происходит попадание, то выполняемые действия определяются природой запроса.
Как уже было отмечено, одной из функций тегов L2 является уменьшение накладных расходов, связанных с ответами на запросы механизма наблюдения. Доступ к тегам L2 разделяется между процессорами и адресной шиной. ТегиL2 практически выполняют роль фильтров по отношению к активностям наблюдения. Это позволяет процессорам продолжать обработку вместо того, чтобы отвечать на каждый запрос наблюдения. Хотя теги L2 представляют собой разделяемый между процессором и шиной ресурс, его захват настолько кратковременен, что практически не приводит ни к каким конфликтам.
Состояние строки кэш-памяти " Модифицированная " означает, что кэш, хранящий такие данные, несет ответственность за правильность этих данных перед системой в целом. Поскольку в основной памяти эти данные недостоверны, это означает, что владелец такого кэша должен каким-либо способом гарантировать, что никакой другой модуль системы не прочитает эти недостоверные данные. Обычно для описания такой ответственности используется термин " вмешательство "(intervention), которое представляет собой действие, выполняемое устройством-владельцем модифицированных кэшированных данных при обнаружении запроса наблюдения за этими данными. Вмешательство сигнализируется с помощью ответа состоянием " строка модифицирована " протокола MESI, за которым следуют данные, пересылаемые запросчику и, потенциально, в память.
Для увеличения пропускной способности системы в PowerScale реализованы два способа выполнения функции вмешательства.
На рис. 5 приведена схема, представляющая системные платы, разработанные группой Bull и используемые для физической реализации архитектуры PowerScale.
Рисунок 5.
Физическая реализация PowerScale.
Многопроцессорная плата. Многопроцессорная материнская плата используется также в качестве монтажной панели для установки модулей ЦП, модулей основной памяти и одной платы в/в (IOD).
Модуль ЦП (дочерняя процессорная плата). Каждый модуль ЦП, построенный на базе PowerPC 601/604, включает два микропроцессора и связанные с ними кэши. Имеется возможность модернизации системы, построенной на базе процессоров601, путем установки модулей ЦП с процессорами 604. Смешанные конфигурации601/604 не поддерживаются.
Дочерняя плата ввода/вывода: (IOD). IOD работает в качестве моста между шинами MCA и комплексом ЦП и памяти. Поддерживаются 2 канала MCA со скоростью передачи 160 Мбайт/с каждый. Хотя поставляемая сегодня подсистема в/в базируется на технологии MCA, это не является принципиальным элементом архитектуры PowerScale . проводятся работы по реализации нескольких альтернативных шин ввода/вывода, например, PCI.
Платы памяти. Каждая плата памяти состоит из четного числа банков. Максимальное число банков равно 16. Объем памяти на каждой плате может быть 64, 256или 512 Мбайт. Коммутатор данных (DCB) интегрирован в нескольких СБИС (4х16бит) и функционально соединяет магистраль данных MPB_SysBus с подсистемой памяти, модулями ЦП и платой в/в. Ширина магистрали данных DCB на уровне массива памяти составляет 256 + 32 бит, а ширина магистрали данных для каждого порта ЦП и порта в/в равна 64 + 8 бит. Операции DCB управляются контроллером системной памяти (SMC) с помощью командной шины, обеспечивающей необходимую коммутацию устройств.
На российском рынке активно продвигаются UNIX-серверы семейства Escala. многопроцессорные системы с архитектурой PowerScale, построенные на базе микропроцессора PowerPC 601. Они предназначаются для работы в качестве нескольких типов серверов приложений: сервера транзакций (Transaction Server)при использовании мониторов обработки транзакций подобных Tuxedo, сервера базы данных (Database Server) на основе систем Oracle или Informix, а также управляющего сервера (System Management Server), обеспечивающего управление инфраструктурой предприятия и существенно упрощающего администрирование гетерогенными системами и сетями. Серверы Escala двоично совместимы с системами Bull DPX/20, а их архитектура разработана с учетом возможности применения процессоров PowerPC 604 и 620.
Основные характеристики серверов Escala в зависимости от применяемого конструктива приведены в таблице 1. Системы семейства Escala обеспечивают подключение следующих коммуникационных адаптеров: 8-, 16- и 128-входовыхадаптеров асинхронных последовательных портов, 1- или 4-входовых адаптеров портов 2 Мбит/с X.25, а также адаптеров Token Ring, Ethernet и FDDI.
Модель Escala | M101 | M201 | D201 | D401 | R201 |
Тип процессора Число процессоров Размер кэша второго уровня (Кбайт) | PowerPC 601 1/4 512 | . 2/4 512 | . 2/8 1024 | . 4/8 1024 | . 2/8 1024 |
Максимальный объем (Мбайт) | 512 | 512 | 2048 | 2048 | 2048 |
Пропускная способность (Мбайт/с) Количество слотов Количество посадочных мест:
Емкость внешней дисковой памяти (Гбайт) Количество сетевых адаптеров | 160 6 . 2 738 1/4 | 160 6 . 2 738 1/4 | 160 15 . 3 1899 1/12 | 2х160 15 . 3 1899 1/12 | 2х160 16 . 3 2569 1/13 |
SPECfp92 SPECrate_int92 SPECrate_fp92 Tpm-C | 84 3600/6789 3900/7520 750/1350 | 84 3600/6789 3900/7520 750/1350 | 84 3600/6789 3900/7520 750/1350 | 84 -/6789 -/7520 750/1350 | 84 3600/6789 3900/7520 750/1350 |
Таблица 1.
При разработке PowerScale Bull удалось создать архитектуру с достаточно высокими характеристиками производительности в расчете на удовлетворение текущих и будущих требований приложений пользователей. Это обеспечивается не только путем увеличения числа процессоров в системе, но и переходом на модернизированные поколения процессоров PowerPC. Разработанная архитектура привлекательна как для разработчиков систем, так и для пользователей.
Открытые Системы· # 4(18)/96