Для любого файлового сервиса, независимо от того, централизованный он или распределен, самым главным есть вопросы, что такое файл? Во многих системах, таких как UNIX и MS DOS, файл - это неинтерпретирует последовательность байтов. Значение и структура информации в файле является заботой прикладных программ, операционную систему это не интересует.
В ОС мейнфреймов поддерживаются разные типы логической организации файлов, каждый с разными свойствами. Файл может быть организованная как последовательность записей, и у операционной системы есть вызовы, которые позволяют работать на уровне этих записей.
Природа сервиса каталогов не зависит от типа используемой модели файлового сервиса. В распределенных системах используются те же принципы организации каталогов, что и в централизованных, в том числе многоуровневая организация каталогов.
Принципиальной проблемой, связанной со средствами именования файлов, есть обеспечения прозрачности. В данном контексте прозрачность понимается в двух слабо заметных содержаниях. Первый - прозрачность расположения - означает, что имена не дают возможности определить местоположение файла.
Другим местом кэширования является ядро. Недостатком этого варианта является то, что во всех случаях нужно выполнять системные вызовы, даже в случае успешного обращения к кэш-памяти (файл оказался в кэше). Но преимуществом является то, что файлы остаются в кэше и после завершения процессов. Например, предположим, что двухпроходный компилятор выполняется, как два процесса. Первый проход записывает промежуточный файл, который читается вторым проходом. На рисунке 3.11,в показаниный, что после завершения процесса первого прохода промежуточный файл, наверное, будет находиться в кэше, так что вызов серверу не потребуется.
В системах, которые составляются из клиентов и серверов, потенциально есть четыре разных места для сохранности файлов и их частей: диск серверу, память серверу, диск клиента (если есть) и память клиента. Более всего подходящим местом для сохранности всех файлов есть диск серверу. Он обычно имеет большую емкость, и файлы становятся доступными всем клиентам. Кроме того, поскольку в этом случае существует только одна копия каждого файла, то не возникает проблемы согласования состояний копий.
Проблемой при использовании диска серверу есть производительность.
Обычно в распределенных системах используются как RPC, так и нити. Потому что нити были введенные как дешевая альтернатива стандартным процессам, то естественно, что исследователи обратили особое внимание в этом контексте на RPC: нельзя или их также сделать облегченными. Было замечено, что в распределенных системах значительное количество RPC обрабатывает на той же машине, на которой они были вызваны (локально), например, вызовы к менеджеру окон. Поэтому была предложена новая схема, которая делает возможным для нити одного процесса вызвать нить другого процесса на этой же машине более эффективно, чем обычным средством.
Структура с диспетчером не единый путь организации многонитевой обработка. В модели "команда" все нити эквивалентные, каждая получает и обрабатывает свои собственные запросы. Иногда работы приходят, а нужна нить занята, особенно, если каждая нить специализируется на выполнении особого вида работ. В этом случае может создаваться очередь незавершенных работ. При такой организации нити должны сначала просматривать очередь работ, а потом почтовый ящик.
Нити могут быть также организованные в виде конвейера.
Понятие "internetworking" и "interoperability"
До недавнего времени проблемы межсетевого взаимодействия не очень волновали отечественных пользователей и системных администраторов. Они уютно себя чувствовали в замкнутом мире IBM PC совместных компьютеров, сетей Novell и сетевых адаптеров Ethernet, хотя в "большом" миру много фирм, в том числе и Novell, успешно продавали разные средства межсетевой связи. Однако пора монокультурного развития отечественных сетей заканчивается, организации приобретают разную технику, например, бизнесы-серверы Hewlett-Packard, графические станции Sun или Silicon Graphics, мини-компьютеры AS-400 фирмы IBM и другую не меньше достойную аппаратуру с разными операционными системами, поэтому проблемы, характерные для западных корпоративных сетей, постепенно становятся актуальными и для нас.
Ключевым компонентом любой распределенной системы есть файловая система. Как и в централизованных системах, в распределенной системе функцией файловой системы есть сохранения программ и данных и предоставления доступа к ним в меру необходимости. Файловая система поддерживается одной или более машинами, называемыми файлами-серверами. Файлы-Серверы перехватывают запросы на чтение или запись файлов, которые поступают от других машин (не серверов). Эти другие машины называются клиентами. Каждый посланный запрос проверяется и выполняется, а ответ отсылается обратно.
Распределенные системы часто обеспечивают репликацию (тиражирование) файлов в качестве одной из услуг, предоставленных клиентам. Репликация - это асинхронный перенос изменений данных исходной файловой системы в файловые системы, которые принадлежат разным узлам распределенной файловой системы. Другими словами, система оперирует несколькими копиями файлов, причем каждая копия находится на отдельному файловом сервере. Есть несколько причин для предоставления этого сервиса, главными с который есть:
1.
Когда два или более пользователи разделяют один файл, необходимо точно определить семантику чтения и записи, во избежание проблем. В централизованных системах, которые позволяют низменность файлов, таких как UNIX, обычно определяется, что, когда операция ЧТЕНИЯ вытекает за операцией ЗАПИСЬ, то читается только что обновленный файл. Аналогично, когда операция чтения вытекает за двумя операциями записи, то читается файл, измененный последней операцией записи. Тем самым система придерживается абсолютного временного упорядочивания всех операций, и всегда возвращает самое последнее значение.
Физическое адресное пространство процессора i386 составляет 4 Гбайта, что определяется 32-разрядной шиной адреса. Физическая память есть линейной с адресами от 00000000 до FFFFFFFF в шестнадцатеричном представлении. Виртуальный адрес, используемый в программе, представляет собой пары - номер сегмента и сдвиг внутри сегмента. Сдвиг хранится в соответствующем поле команды, а номер сегмента - в одном из шести сегментных регистров процессора (CS, SS, DS, ES, FS или GS), каждый из который есть 16-битным.
Проблема синхронизации
Процессам часто нужно взаимодействовать друг с другом, например, один процесс может передавать данные другому процесса, или несколько процессов могут обрабатывать данные с общего файла. Во всех этих случаях возникает проблема синхронизации процессов, которая может решаться прекращением и активизацией процессов, организацией очередей, блокированием и освобождением ресурсов.
Рис.
Операционная система, как однозадачная, так и многозадачная, должна предоставлять задачам средству вызова подпрограмм операционной системы, библиотечных подпрограмм, а также иметь средства для запуска задач, а при многозадачной работе средства быстрого переключения из задачи на задачу. Вызов подпрограммы отличается от запуска задачи тем, что в первом случае адресное пространство остается тем же (таблица LDT остается старой), а при вызова задача адресное пространство целиком меняется.
Вызов подпрограмм без изменения кодового сегмента в защищенном режиме процессора i386 ведется аналогично вызова в реальном режиме с помощью команд JMP и CALL.
Служба NDS определяет права доступа одних сетевых объектов к другим. Различаются права доступа к объекту в целом и права доступа к его атрибутам.
Относительно объектов существует такой набор прав:
Browse - просмотр;
Add - добавление;
Delete - удаление;
Rename - переименование;
Supervisor - обеспечивает все вышеперечисленные права.
Относительно атрибутов объектов используются такие права:
Compare - сравнение значения атрибута;
Read - чтение значения атрибута;
Write - запись нового значения атрибута;
Self - присвоение себя в качестве значения атрибута другого объекта, например, если объект-группа позволяет право Self для объекта User, то последний может сделать себя членом этой группы;
Supervisor - все права по доступу к атрибутам.
Apple, вместе из Wordperfect, Novell, Sun, Xerox, Oracle, IBM и Taligent, известными вместе как Component Integration Laboratory (Лаборатория по объединению компонентов), также занимается архитектурой объектно-ориентированных составляющих документов, называемой Opendoc. Создаваемый для работы на разных платформах, этот проект значительно отстает по степени готовности от OLE 2.0.
Ключевыми технологиями Opendoc есть механизм сохранения Бенто (названный так в честь японской тарелки с отделениями для разной пищи), технология сценариев (scripting), заимствованная в значительной мере с Applesript, и SOM фирмы IBM.
На рисунке 2.12 показанная схема страничного распределения памяти. Виртуальное адресное пространство каждого процесса делится на части одинакового, фиксированного для данной системы размера, называемые виртуальными страницами. В общем случае размер виртуального адресного пространства не является кратным размера страницы, поэтому последняя страница каждого процесса дополняется фиктивной областью.
Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами (или блоками).
Как очевидно из названия, данный метод представляет собой комбинацию страничного и сегментного распределения памяти и, вследствие этого, соединит в себе достоинства обеих подходов. Виртуальное пространство процесса делится на сегменты, а каждый сегмент в свою очередь делится на виртуальные страницы, которые нумеруются в пределах сегмента. Оперативная память делится на физические страницы. Загрузка процесса выполняется операционной системой постранично, при этом часть страниц размещаются в оперативной памяти, а часть на диске.
Разновидностью виртуальной памяти есть свопинг.
На рисунке 2.16 показанный график зависимости коэффициента загрузки процессора в зависимости от числа одновременно выполняемых процессов и частицы времени, проведенное этими процессами в состоянии ожидания ввода вывода.
Рис. 2.16. Зависимость загрузки процессора от числа задач и интенсивности внедрения-висновка
Из рисунка очевидно, что для загрузки процессора на 90% достаточно всего трех счетных задач.
Для идентификации переменных и команд используются символьные имена (мотки), виртуальные адреса и физические адреса (рисунок 2.7).
Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере.
Виртуальные адреса вырабатывает транслятор, который перекладывает программу на машинный язык. Потому что во время трансляции в общем случае не известно, в какое место оперативной памяти будет загружена программа, то транслятор присваивает переменным и командам виртуальные (условные) адреса, обычно считая по умолчанию, что программа будет размещена, начиная с нулевого адреса.
Файлы бывают разных типов: обычные файлы, специальные файлы, файлы-каталоги.
Обычные файлы в свою очередь подразделяются на тексту и двоичные. Текстовые файлы составляются из строк символов, представленных в Ascii-Коде. Это могут быть документы, исходные тексты программ и т.п. Текстовые файлы можно прочитать на экране и распечатать на принтере. Двоичные файлы не используют Ascii-Коды, они часто имеют сложную внутреннюю структуру, например, объектный код программы или архивный файл. Все операционные системы должны уметь распознавать хотя бы один тип файлов - их собственные что выполняются файлы.
Операционная система является сердцевиной сетевого программного обеспечения, она создает среда для выполнения приложений и во многом определяет, какими полезными для пользователя свойствами эти приложения будут владеть. В связи с этим рассмотрим требования, которой должна удовлетворять современная ОС.
Очевидно, что главным требованием, предложенным к операционной системе, есть способность выполнения основных функций: эффективного управления ресурсами и обеспечение удобного интерфейса для пользователя и прикладных программ.
Такой важный период развития вычислительных машин относится к 1965-1980 лет. В это время в технической базе состоялся переход от отдельных полупроводниковых элементов типа транзисторов к интегральным микросхемам, которое дало намного широкие озможность новому, третьему поколению компьютеров.
Для этого периода характерно также создания семейств программно-совместных машин. Первым семейством программно-совместных машин, построенных на интегральных микросхемах, явилась серия машин IBM/360. Построенное в начале 60-х лет это семейство значительно превосходило машины второго поколения по критерию цена/производительность.
Более всего очевидный и простой путь реализации взаимного исключения в распределенных системах - это применения тех же методов, которые используются в однопроцессорных системах. Один из процессов выбирается в качестве координатора (например, процесс, который выполняется на машине, которая имеет самое большое значение сетевого адреса). Когда какой-либо процесс хочет войти в критическую секцию, он посылает сообщение с запросом к координатору, оповещая его о том, в какую критическую секцию он хочет войти, и ждет от координатора разрешение.
Самой важной функцией операционной системы есть организация рационального использования всех аппаратных и программных ресурсов системы. К основным ресурсам могут быть отнесенные: процессоры, память, внешние устройства, дани и программы. Привлекательная теми самыми ресурсами, но управляемая разными ОС, вычислительная система может работать с разной степенью эффективности. Поэтому знание внутренних механизмов операционной системы позволяет косвенно судить о ее эксплуатационных возможностях и характеристики.
Память является важнейшим ресурсом, который нуждается в тщательном управлении со стороны мультипрограммной операционной системы. Распределения подлежит вся оперативная память, не занятая операционной системой. Обычно ОС располагается в самых младших адресах, однако может занимать и самой старшие адреса. Функциями ОС по управлению памятью есть: отслеживание свободной и занятой памяти, выделение памяти процессам и освобождение памяти при завершении процессов, вытеснение процессов из оперативной памяти на диск, когда размеры основной памяти не достаточные для размещения в ней всех процессов, и возвращение их в оперативную память, когда в ней освобождается место, а также настройка адресов программы на конкретную область физической памяти.
Базовые примитивы передачи сообщений в распределенных системах
Единым по-настоящему важным отличием распределенных систем от централизованных есть межпроцессная взаимосвязь. В централизованных системах связок между процессами, как правило, предполагает наличие что разделяется памяти. Типичный пример - проблема " поставщик-потребитель", в этом случае один процесс пишет в что разделяется буфер, а другой - читает из него. Даже более всего простая форма синхронизации - семафор - нуждается в, чтобы хотя бы одно слово (переменная самого семафора) было что разделяется.
Одной из главных функций ОС есть управления всеми устройствами ввода вывода компьютера. ОС должна передавать устройствам команды, перехватывать прерывание и обрабатывать ошибки; она также должна обеспечивать интерфейс между устройствами и другой частью системы. С целью розвитки интерфейс должен быть одинаковым для всех типов устройств (независимость от устройств).
.
Теперь проследим, как виртуальное пространство отображается на физическое пространство размером в 4 Гбайта при чисто сегментном механизме отображения. Итак, когда задачи необходимо получить доступ к сердцевине физической памяти, то для выбора дескриптора виртуального сегмента используется значения селектора с соответствующего (в зависимости от команды и стадии ее выполнения - выборка кода команды или данных) сегментного регистра процессора. Значение поля типа таблицы указывает на то, какую таблицу нужно использовать - GDT или LDT.
Рассмотрим прежде всего вопрос о распределении серверной и клиентской частей между машинами. В некоторых системах (например, NFS) нет различия между клиентом и сервером, на всех машинах работает то самое базовое программное обеспечение, так что любая машина, которая хочет предложить файловый сервис, свободно может это сделать. Для этого ей достаточно экспортировать имена избранных каталогов, чтобы другие машины могли иметь к ним доступ.
В других системах файловый сервер - это только користувальна программа, так что система может быть сконфигурирована как клиент, как сервер или как клиент и сервер одновременно.
При объединении сетей разных типов в общем случае необходимо обеспечить двустороннее взаимодействие сетей, то есть решить две задачи (рисунок 3.17):
1. Обеспечение доступа клиентам сети A к ресурсам и сервисам серверов сети B.
2. Обеспечение доступа клиентам сети B к ресурсам и сервисам сети A.
Рис. 3.17. Варианты сетевого взаимодействия
Эти задачи независимые и их можно решать отдельно.
Существует два подхода к управлению нитями: статический и динамический. При статическом подходе вопроса, сколько будет нитей, решается уже на стадии написания программы или на стадии компиляции. Каждой нити назначается фиксированный стек. Этот подход простой, но негибкий. Более общим есть динамический подход, который позволяет создавать и удалять нити оперативно по ходу выполнения. Системный вызов для создания нити обычно содержится в нити главной программы в виде указателя на процедуру с указанием размера стека, а также других параметров, например, диспетчерского приоритета.
Сегодня в типичных программах значительная часть кода занята вызовом GUI ABI. Apple подтверждает, что программы для Mac тратят до 90 процентов процессорного времени на выполнение подпрограмм из Mac toolbox, а не на уникальные для этих программ действия. Sunselect говорит, что программы для Windows тратят от 60 до 80 процентов времени на работу в ядре Windows. В результате при эмуляции программы на основе GUI потери производительности могут быть значительно меньше. Sunselect заявляет, что его новая прикладная среда Windows, WABI (Windows Application Binary Interface - двоичный интерфейс прикладных программ Windows), благодаря сильно оптимизированным библиотекам, на некоторых платформах при выполнении тех самых тестов могут обогнать действительный Microsoft Windows.
Концепция отдаленного вызова процедур
Идея вызова отдаленных процедур (Remote Procedure Call - RPC) составляется в расширении хорошо известного и понятного механизма передачи управления и данных внутри программы, которое выполняется на одной машине, на передачу управления и данных через сеть. Средства отдаленного вызова процедур предназначенные для облегчения организации распределенных вычислений. Самая большая эффективность использования RPC достигается в тех приложениях, в которых существует интерактивная связь между отдаленными компонентами с небольшим временем ответов и относительно малым количеством переданных данных.
s#0