Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 12
Текст из файла (страница 12)
Единственно возможным видом связи является передача сообщений (messagepassing). Мультикомпьютерные операционные системы в основном организованытак, как показано на рис. 1.9.Каждый узел имеет свое ядро, которое содержит модули для управления локальными ресурсами — памятью, локальным процессором, локальными дискамии т. д. Кроме того, каждый узел имеет отдельный модуль для межпроцессорноговзаимодействия, то есть посылки сообщений на другие узлы и приема сообщений от них.52Глава 1. ВведениеМашина АМашина СМашина В"IГ3 п.Распределенные приложенияI II IСлужбы распределенной операционной системыЯдроЯдроЯдроСетьРис. 1.9. Общая структура мультикомпьютерных операционных системПоверх каждого локального ядра лежит уровень программного обеспеченияобщего назначения, реализуюгций операционную систему в виде виртуальноймашины, поддерживающей параллельную работу над различными задачами. Наделе, как мы сейчас кратко рассмотрим, этот уровень может даже предоставлятьабстракцию мультипроцессорной машины.
Другими словами, он предоставляетполную программную реализацию совместно используемой памяти. Дополнительные средства, обычно реализуемые на этом уровне, предназначены, например,для назначения задач процессорам, маскировки сбоев аппаратуры, обеспеченияпрозрачности сохранения и общего обмена между процессами.
Другими словами, эти средства абсолютно типичны для операцрюнных систем вообще.Мультикомпьютерные операционные системы, не предоставляющие средствдля совместного использования памяти, могут предложить приложениям толькосредства для обмена сообщениями. К сожалению, семантика примитивов обменасообщениями в значительной степени разная для разных систем. Понять этиразличия проще, если отмечать, буферизуются сообщения или нет.
Кроме того,мы нуждаемся в учете того, блокируется ли посылающий или принимающийпроцесс. На рис. 1.10 продемонстрирован вариант с буферизацией и блокировкой.ВозможнаяточкасинхронизацииОтправительБуфер -^отправителя,ir±ПолучательБуферполучателяS2СетьРис. 1.10.
Возможности блокировки и буферизациипри пересылке сообщений1.4. Концепции программных решений53Существует всего два возможных места буферизации сообщений — на стороне отправителя или на стороне получателя. Это приводит к четырем возможнымточкам синхронизации, то есть точкам возможной блокировки отправителя илиполучателя. Если буферизация происходит на стороне отправителя, это дает возможность заблокировать отправителя, только если его буфер полон, что показаноточкой синхронизации S1 на рисунке.
С другой стороны, процедура помещениясообщения в буфер может возвращать состояние, показывающее, что операцияуспешно выполнена. Это позволяет отправителю избежать блокировки по причине переполнения буфера. Если же отправитель ие имеет буфера, существуеттри альтернативных точки блокировки отправителя: отправление сообщения(точка 52), поступление сообщения к получателю (точка S3), принятие сообщения получателем (точка S4). Отметим, что если блокировка происходит в точке52, S3 или S4, наличие или отсутствие буфера на стороне отправителя не имеетникакого значения.Блокировка получателя имеет смысл только в точке синхронизации S3 и может производиться, только если у получателя нет буфера или если буфер пуст.Альтернативой может быть опрос получателем наличия входящих сообщений.Однако эти действия часто ведут к пустой трате процессорного времени илислишком запоздалой реакции на пришедшее сообщение, что, в свою очередь,приводит к переполнению буфера входящими сообщениями и их потере [52].Другой момент, важный для понимания семантики обмена сообщениями, —надежность связи.
Отличительной чертой надежной связи является получениеотправителем гарантии приема сообщения. На рис. 1.10 надежность связи означает, что все сообщения гарантированно достигают точки синхронизации S3.При ненадежной связи всякие гарантии отсутствуют. Если буферизация производится на стороне отправителя, о надежности связи ничего определенного сказать нельзя. Также операционная система не нуждается в гарантированно надежной связи в случае блокировки отправителя в точке S2.С другой стороны, если операционная система блокирует отправителя до достижения сообщением точки S3 или S4, она должна иметь гарантированно надежную связь.
В противном случае мы можем оказаться в ситуации, когда отправитель ждет подтверждения получения, а сообщение было потеряно при передаче.Отношение между блокировкой, буферизацией и гарантиями относительно надежности связи суммированы в табл. 1.4.Т а б л и ц а 1 . 4 . С о о т н о ш е н и е между б л о к и р о в к о й , буферизациейи надежностью связиТочка синхронизацииБуферизацияотправителяГарантия надежнойсвязиБлокировка отправителя до наличиясвободного места в буфереДаНет необходимостиБлокировка отправителядо посылки сообщенияНетНет необходимостиБлокировка отправителядо приема сообщенияНетНеобходимаБлокировка отправителядо обработки сообщенияНетНеобходима54Глава 1.
ВведениеМножество аспектов проектирования мультикомпьютерных операционныхсистем одинаково важны для любой распределенной системы. Основная разницамежду мультикомпьютерными операционными системами и распределеннымисистемами состоит в том, что в первом случае обычно подразумевается, что аппаратное обеспечение гомогенно и полностью управляемо.
Множество распределенных систем, однако, строится на базе существующих операционных систем.Далее мы обсудим этот вопрос.Системы с распределенной разделяемой памятьюПрактика показывает, что программировать мультикомпьютерные системы значительно сложнее, чем мультипроцессорные. Разница объясняется тем, что связьпосредством процессов, имеющих доступ к совместно используемой памяти,и простых примитивов синхронизации, таких как семафоры и мониторы, значительно проще, чем работа с одним только механизмом обмена сообщениями. Такие вопросы, как буферизация, блокировка и надежность связи, только усложняют положение.По этой причине проводились впечатляющие исследования по вопросу эмуляции совместно используемой памяти на мультикомпьютерных системах. Ихцелью было создание виртуальных машин с разделяемой памятью, работающихна мультикомпьютерных системах, для которых можно было бы писать приложения, рассчитанные на модель совместно используемой памяти, даже если физически она отсутствует.
Главную роль в этом играет мультикомпьютерная операционная система.Один из распространенных подходов — задействовать виртуальную памятькаждого отдельного узла для поддержки общего виртуального адресного пространства. Это приводит нас к распределенной разделяемой памяти {DistiibutedShared Memory, DSM) со страничной организацией. Принцип работы этой памяти следующий. В системе с DSM адресное пространство разделено на страницы(обычно по 4 или по 8 Кбайт), распределенные по всем процессорам системы.Когда процессор адресуется к памяти, которая не является локальной, происходитвнутреннее прерывание, операционная система считывает в локальную памятьстраницу, содержащую указанный адрес, и перезапускает выполнение вызвавшейпрерывание инструкции, которая теперь успешно выполняется.
Этот подходпродемонстрирован на рис. 1.11, а для адресного пространства из 16 страници четырех процессоров. Это вполне нормальная страничная организация, если несчитать того, что в качестве временного хранилища информации используетсяне диск, а удаленная оперативная память.В этом примере при обращении процессора 1 к коду или данным со страницыО, 2, 5 или 9 обращение происходит локально. Ссылки на другие страницы вызывают внутреннее прерывание.
Так, например, ссылка на адрес со страницы 10вызывает внутреннее прерывание операционной системы, и она перемещает страницу 10 с машины 2 на машину 1, как показано на рис. 1.11, б.Одно из улучшений базовой системы, часто позволяющее значительно повысить ее производительность, — это репликация страниц, которые объявляются1.4. Концепции программных решений55закрытыми на запись, например, страниц, содержащих текст программы, константы «только для чтения» или другие закрытые на запись структуры. Например,если страница 10 — это секция текста программы, ее использование процессором 1приведет к пересылке процессору 1 ее копии, а оригинал в памяти процессора 2будет продолжать спокойно храниться, как показано на рис. 1.11, в.
В этом случае процессоры 1 и 2 оба смогут обращаться к странице 10 так часто, как им понадобится, не вызывая при этом никаких внутренних прерываний для выборкипамяти.Разделяемое глобальное адресное пространство01 2 3 45 6 7 8 9 10 11 1 2 | l 3 | l 4 | l 5:^^^^sxz7 11£ II 2 II 510Процессор1Процессор213 1512 14Процессор3щщ [| 1 1 з|[б]|]4 [|7 |[l1• ПамятьПроцессор4ш\щ[TjRo]Процессор1.11 Процессор2Процессор3Процессор4|0 ||2 IjTj 1 1 ||3 IfTj[|Т][Т|[гГ|[T][io]mjTo] 1процессор1Процессор2Процессор3IРис. 1 . 1 1 . Страницы адресного пространства распределены по четырем машинам (а).Ситуация после обращения процессора 1 к странице 10 (б). Ситуация, когдазапись в страницу 10 невозможна и необходима репликация (в)Другая возможность — это репликация также и не закрытых на запись страниц, то есть любых страниц.