Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROSY_Kolesnikov.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
613.39 Кб
Скачать
  1. Високопродуктивні обчислювальні системи

Прогресс в микроэлектронике и структурно-технических решениях привел к тому, что суперкомпьютерные системы быстро обновляются. Чтобы работа суперкомпьютерных центров была максимально эффективной, ориентируются на наиболее современные и быстродействующие системы. В США в порядке реализации программы Acselerated Strategic Computer Initiative (ASCI - ускоренная стратегическая компьютерная инициатива) в интересах ядерного комплекса в 2001 г. введена в действие вычислительная система White (IBM), имеющая пиковую производительность 12,3 Тфлопс и содержащая более 8 тыс. процессоров. К 2003 г. намечена установка системы производительностью 30 Тфлопс и в 2004-2005 гг. - 100 Тфлопс. Современный массово-параллельный суперкомпьютер строится путем объединения большого количества (до нескольких тысяч) серийно выпускаемых быстродействующих микропроцессоров, которые используются также и для построения обычных рабочих станций и серверов. Несколько процессоров могут объединяться в модули с общей оперативной памятью. Обмен между процессорными узлами-модулями осуществляется через высокоскоростные стандартные или специализированные каналы. Хотя физически оперативная память распределена между процессорными узлами, аппаратура и специальное программное обеспечение могут поддерживать логически общее поле разделяемой памяти. Такой подход способствует решению сложных проблем распараллеливания программ.

Все более распространенным подходом к построению высокопроизводительных систем является объединение серийных компьютеров в кластер с использованием стандартных сетевых средств. Это позволяет распределить между машинами кластера вычислительную нагрузку, в том числе организовать параллельное выполнение отдельной задачи сразу на нескольких машинах - узлах кластера. Такой способ наращивания вычислительных мощностей относительно дешев, однако возможности эффективного выполнения задач в кластере могут быть ограничены недостаточным быстродействием сети межмашинного обмена. При этом необходимо создание специального программного обеспечения наряду с использованием общепринятого базового.

  1. Взаємні блокування у паралельних програмах

Взаимная блокировка - это взаимоисключающая блокировка. Захватить такую блокировку может только одна нить. Взаимные блокировки применяются для предотвращения одновременного доступа к общим данным. У взаимной блокировки есть атрибуты, которые определяют ее свойства. В текущей версии AIX атрибуты взаимных блокировок не применяются. Следовательно, при создании взаимной блокировки ее объект атрибутов можно проигнорировать.

Как и нити, взаимные блокировки создаются с помощью объектов атрибутов. Объект атрибутов взаимной блокировки представляет собой абстрактный объект, содержащий несколько атрибутов, набор которых зависит от реализации компонентов POSIX. Для работы с объектом атрибутов создается переменная типа pthread_mutexattr_t. В AIX тип данных pthread_mutexattr_t - это указатель; в других системах он может быть структурой или каким-то другим типом данных.

Функция pthread_mutexattr_init инициализирует объект атрибутов взаимной блокировки значениями по умолчанию. Для работы с атрибутами предназначены специальные функции. Для удаления объекта атрибутов взаимной блокировки предназначена функция pthread_mutexattr_destroy. В некоторых реализациях библиотеки нитей эта функция освобождает память, динамически выделенную функцией pthread_mutexattr_init.

С помощью одного объекта атрибутов можно создать несколько взаимных блокировок. Кроме того, объект атрибутов можно изменить в промежутке между созданием двух взаимных блокировок. После создания взаимных блокировок объект атрибутов можно удалить - это никак не отразится на созданных взаимных блокировках.

Взаимная блокировка создается вызовом функции pthread_mutex_init. При вызове этой функции можно указать объект атрибутов взаимной блокировки. Если значение указателя будет равно NULL, атрибутам будут присвоены значения по умолчанию.

Взаимная блокировка должна создаваться один раз. Не следует вызывать функцию pthread_mutex_init с тем же параметром mutex несколько раз (например, в двух разных нитях, одновременно выполняющих один и тот же код). В результате повторного вызова будет возвращен код ошибки EBUSY.

Когда взаимная блокировка становится ненужной, ее нужно удалить с помощью функции pthread_mutex_destroy. Эта функция освобождает все области памяти, выделенные функциейpthread_mutex_init. После удаления взаимной блокировки ту же самую переменную pthread_mutex_t можно вновь использовать для создания другой взаимной блокировки. 

Как и другие общие системные ресурсы, взаимные блокировки, размещенные в стеке нити, необходимо удалить до завершения нити. В библиотеке нитей хранится скомпонованный список взаимных блокировок; следовательно, при освобождении стека, в котором хранится взаимная блокировка, этот список будет поврежден.

Захват и освобождение взаимных блокировок

Взаимная блокировка - это обычная блокировка, у которой есть два состояния: занята и свободна. После создания взаимная блокировка свободна. Для захвата взаимной блокировки применяется функция pthread_mutex_lock:

Если взаимная блокировка свободна, функция ее захватывает.

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

Если блокировка уже захвачена вызывающей нитью, функция возвращает сообщение об ошибке.

Функция pthread_mutex_trylock работает так же, как и функция pthread_mutex_lock, но не блокирует вызывающую нить:

Если взаимная блокировка свободна, функция ее захватывает.

Если взаимная блокировка захвачена, функция возвращает сообщение об ошибке.

Нить, захватившую взаимную блокировку, часто называют владельцем блокировки.

Функция pthread_mutex_unlock освобождает взаимную блокировку, если ее владельцем является вызывающая нить:

Если взаимная блокировка уже свободна, функция возвращает сообщение об ошибке.

Если владельцем взаимной блокировки является вызывающая нить, функция освобождает блокировку.

Если владельцем взаимной блокировки является другая нить, функция возвращает сообщение об ошибке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]