Контакт:
  • Наши кнопки

  • Карта сайта
  • Вход для админа:

Ключевым компонентом любой распределенной системы есть файловая система. Как и в централизованных системах, в распределенной системе функцией файловой системы есть сохранения программ и данных и предоставления доступа к ним в меру необходимости. Файловая система поддерживается одной или более машинами, называемыми файлами-серверами. Файлы-Серверы перехватывают запросы на чтение или запись файлов, которые поступают от других машин (не серверов). Эти другие машины называются клиентами. Каждый посланный запрос проверяется и выполняется, а ответ отсылается обратно.

Проблема синхронизации

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

Рис.

Файлы бывают разных типов: обычные файлы, специальные файлы, файлы-каталоги.

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

Рассмотрим прежде всего вопрос о распределении серверной и клиентской частей между машинами. В некоторых системах (например, NFS) нет различия между клиентом и сервером, на всех машинах работает то самое базовое программное обеспечение, так что любая машина, которая хочет предложить файловый сервис, свободно может это сделать. Для этого ей достаточно экспортировать имена избранных каталогов, чтобы другие машины могли иметь к ним доступ.

В других системах файловый сервер - это только користувальна программа, так что система может быть сконфигурирована как клиент, как сервер или как клиент и сервер одновременно.

В общем случае "структура" монолитной системы представляет собой отсутствие структуры (рисунок 4.1). ОС написанный как набор процедур, каждая с который может вызвать другие, когда ей это нужно. При использовании этой техники каждая процедура системы имеет хорошо определенный интерфейс в сроках параметров и результатов, и каждая свободна вызвать любую другую для выполнения некоторой нужной для нее полезной работы.

Рис.

Служба NDS предназначена для управления такими сетевыми ресурсами, как серверы и потому Netware, но она не обеспечивает управления файловой системой. Файлы и каталоги не являются объектами службы NDS. Однако они рекомендуются в виде иконок при использовании графической утилиты Netware Administrator. Одним из атрибутов объекта-поэтому есть местоположение физического потому, что содержит файлы и каталоги. Таким образом, объект-том представляет собой связь между NDS и файловой системой.

Служба NDS предоставляет средства для поиска объектов в ее базе данных сетевых ресурсов.

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

На рисунке 1.2 показанное взаимодействие сетевых компонентов. Здесь компьютер 1 выполняет роль "чистого" клиента, а компьютер 2 - роль "чистого" серверу, соответственно на первой машине отсутствующих серверная часть, а на второй - клиентская. На рисунке отдельно показанный компонент клиентской части - редиректор. Именно редиректор перехватывает все запросы, которые поступают от приложений, и анализирует их.

Понятие виртуальной памяти

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

Использование большинства компьютеров на уровне машинного языка тяжело, особенно это касается запровадження-висновка. Например, для организации чтения блока данных из гибкого диска программист может использовать 16 разных команд, каждая с который нуждается в 13 параметрах, таких как номер блока на диске, номер сектора на дорожке и т.п. Когда выполнение операции с диском завершается, контроллер возвращает 23 значение, которые отбивают наличие и типы ошибок, которые, очевидно, надо анализировать. Даже если не входить в курс реальных проблем программирования внедрения, ясно, что среди программистов нашлось бы не много желающих непосредственно заниматься программированием этих операций.

Примитивы, которые были описаны, есть небуферизуемыми примитивами. Это означает, что вызов ПОЛУЧИТЬ сообщает ядру машины, на которой он выполняется, адрес буфера, в который следует поместить сообщение, которые находится для него.

Эта схема работает прекрасно при условии, что получатель выполняет вызов ПОЛУЧИТЬ раньше, чем отправитель выполняет вызов ПОСЛАТЬ. Вызов ПОЛУЧИТЬ сообщает ядру машины, на которой выполняется, по какому адресу должно поступить ожидаемое сообщение, и в какую область памяти необходимо его поместить.

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

Файлы идентифицируются именами. Пользователи дают файлам символьные имена, при этом учитываются ограничения ОС как на используемые символы, так и на длину имени. До недавнего времени эти границы были очень узкими. Так в популярной файловой системе FAT длина имен ограничивается известной схемой 8.3 (8 символов - собственное имя, 3 символа - расширение имени), а в ОС UNIX System V имя не может содержать более 14 символов. Однако пользователю намного удобнее работать с длинными именами, поскольку они позволяют даты файла действительно мнемоническое название, по которому даже через достаточно большой промежуток времени можно будет припомнить, что содержит этот файл.

Прерывания должны быть скрыты как можно глубже в недрах операционной системы, чтобы как можно меньшая часть ОС имела с ними дело. Наилучшее средство составляется в разрешении процесса, который инициировал операцию ввода вывода, блокировать себя к завершению операции и наступление прерывания. Процесс может блокировать себя, используя, например, вызов DOWN для семафора, или вызов WAIT для переменной условия, или вызов RECEIVE для ожидания сообщения. При наступлении прерывания процедура обработки прерывания выполняет разблокирование процесса, который инициировал операцию ввода вывода, используя вызовы UP, SIGNAL или посылая процесса сообщения.

В реальных системах возможность попадания в кэш составляет приблизительно 0,9. Высокое значение возможности пребывания данных в кэш-памяти связано с наличием в данных объективных свойств: пространственной и временной локальности.

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

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

В идеале RPC должен функционировать правильно и в случае отказов. Рассмотрим такие классы отказов:

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

Утерян запрос от клиента до серверу. Самое простое решение - через определенное время повторить запрос.


s#0