
- •Ответы на экзаменационные вопросы по соСиА
- •Классификация операционных систем
- •Обобщенная структура операционных систем
- •Сравнение моделей osi и tcp/ip
- •Сравнение моделей atm и tcp/ip
- •Модель клиент-сервер на базе микроядра
- •Сетевое по: иерархия протоколов, разработка уровней
- •Настройка сети
- •Службы, примитивы и протоколы
- •Распределенные системы: доступ, прозрачность
- •Прозрачность в распределенных системах.
- •Доступ в распределенных системах
- •Методы управления доступом
- •Распределенные системы: масштабируемость, открытость
- •Открытость
- •Масштабируемость
- •Концепции аппаратных решений
- •Гомогенные и гетерогенные сети
- •Концепции программных решений, сравнение систем
- •Мультипроцессорные ос
- •Мультикомпьютерные ос
- •Системы с распределенной разделяемой памятью
- •Программное обеспечение промежуточного уровня
- •Разделение приложений по уровням
- •Архитектура клиент-сервер: многозвенные архитектуры
- •Структура файловой системы: принципы и особенности
- •Структура файловой системы: стандарт fhs
- •Структура файловой системы: принципы организации данных на диске
- •Структура файловой системы: монтирование и размонтирование
- •Структура файловой системы: журналирование
- •Структура файловой системы: принципы создания стартового виртуального диска
- •Досистемная загрузка: первичный и вторичный загрузчик
- •Досистемная загрузка: загрузчики lilo и grub
- •Загрузка системы: первый процесс init
- •Загрузка системы: стартовый виртуальный диск и модули ядра
- •Загрузка системы: демоны системных служб
- •Загрузка системы: схема «.D»
- •Загрузка системы: уровни выполнения
- •Работа с внешними устройствами: файлы-дырки, драйверы
- •Разметка диска и наименование устройств
- •Область подкачки
- •Проектирование свойств системы
- •Профиль системы
- •Управление пакетами
- •Установщики пакетов
- •Сетевые и серверные возможности
Модель клиент-сервер на базе микроядра
Модель клиент-сервер - это один из подходов к структурированию ОС. В широком смысле модель клиент-сервер предполагает наличие программного компонента - потребителя какого-либо сервиса - клиента, и программного компонента - поставщика этого сервиса - сервера. Взаимодействие между клиентом и сервером стандартизуется, так что сервер может обслуживать клиентов, реализованных различными способами и, может быть, разными производителями. При этом главным требованием является то, чтобы они запрашивали услуги сервера понятным ему способом. Инициатором обмена обычно является клиент, который посылает запрос на обслуживание серверу, находящемуся в состоянии ожидания запроса. Один и тот же программный компонент может быть клиентом по отношению к одному виду услуг, и сервером для другого вида услуг. Модель является удобным концептуальным средством ясного представления функций того или иного программного элемента в той или иной ситуации, нежели технологией. Эта модель успешно применяется не только при построении ОС, но и на всех уровнях программного обеспечения, и имеет в некоторых случаях более узкий, специфический смысл, сохраняя, естественно, при этом все свои общие черты.
Применительно к структурированию ОС идея состоит в разбиении ее на несколько процессов - серверов, каждый из которых выполняет отдельный набор сервисных функций - например, управление памятью, создание или планирование процессов. Каждый сервер выполняется в пользовательском режиме. Клиент, которым может быть либо другой компонент ОС, либо прикладная программа, запрашивает сервис, посылая сообщение на сервер. Ядро ОС (называемое здесь микроядром), работая в привилегированном режиме, доставляет сообщение нужному серверу, сервер выполняет операцию, после чего ядро возвращает результаты клиенту с помощью другого сообщения. (СП, СП и СС заменить на подсистему П, П и С)
Подход с использованием микроядра заменил вертикальное распределение функций операционной системы на горизонтальное. Компоненты, лежащие выше микроядра, хотя и используют сообщения, пересылаемые через микроядро, взаимодействуют друг с другом непосредственно. Микроядро играет роль регулировщика. Оно проверяет сообщения, пересылает их между серверами и клиентами, и предоставляет доступ к аппаратуре.
Сетевое по: иерархия протоколов, разработка уровней
Для упрощения структуры большинство сетей организуются в наборы уровней или слоев, каждый последующий из которых возводится над предыдущим. Количество уровней, их названия, содержание и назначение разнятся от сети к сети. Однако во всех сетях целью каждого уровня является предоставление неких сервисов для вышестоящих уровней. При этом от них скрываются детали реализации предоставляемого сервиса.
Такая концепция не нова и используется уже давно. Ее вариации известны как сокрытие информации, абстрактные типы данных, свойство инкапсуляции и объектно-ориентированное программирование. Фундаментальной идеей является предоставление неким программным или аппаратным уровнем сервисов своим пользователям без раскрытия деталей своего внутреннего состояния и подробностей алгоритмов.
Уровень n одной машины поддерживает связь с уровнем n другой машины. Правила и соглашения, используемые в данном общении, называются протоколом уровня n. По сути протокол является договоренностью общающихся сторон о том, как должно происходить общение. Нарушение протокола создаст затруднения в общении, а может, и вовсе сделает общение невозможным.
На рисунке показана пятиуровневая сеть. Объекты, включающие в себя соответствующие уровни на разных машинах, называются одноранговыми, или равноправными, узлами, или сущностями, сети. Именно они общаются при помощи протокола.
В действительности, данные не пересылаются с уровня n одной машины на уровень n другой машины. Вместо этого каждый уровень передает данные и управление уровню, лежащему ниже, пока не достигается самый нижний уровень. Ниже первого уровня располагается физическая среда, по которой и производится обмен информацией. На рисунке виртуальное общение показано пунктиром, тогда как физическое — сплошными линиями.
Между каждой парой смежных уровней находится интерфейс, определяющий набор примитивных операций, предоставляемых нижним уровнем верхнему. Когда разработчики сетей решают, сколько уровней включить в сеть, и что нужно делать на каждом уровне, по мере продвижения сообщения, заголовки нижних уровней более высоким уровням не передаются.
Необходимо понять соотношение между виртуальным и реальным общением и разницу между протоколом и интерфейсом. Одноранговые процессы уровня 4, например, считают свое общение горизонтальным, использующим протокол 4-го уровня. У каждого из них имеется процедура с названием вроде SendToOtherSide (Отправить другой стороне) и GetFromOtherSide (Получить от другой стороны), даже если на самом деле эти процедуры общаются не друг с другом, а с нижними уровнями при помощи интерфейсов 3/4.
Абстракция одноранговых процессов является ключевой для проектирования сетей. С ее помощью невыполнимая задача разработки целой сети может быть разбита на несколько меньших по размеру и вполне разрешимых проблем разработки, а именно разработки индивидуальных уровней.
Следует отметить, что нижние уровни в иерархии протоколов часто реализуются аппаратно или программно-аппаратно. Тем не менее при этом используются сложные алгоритмы протоколов, хотя они и внедряются в аппаратуру частично или целиком.
Некоторые из ключевых аспектов разработки, возникающие при создании компьютерных сетей, присутствуют на нескольких уровнях. Кратко опишем наиболее важные из них.
Каждый уровень нуждается в механизме идентификации отправителей и получателей. В сети обычно работает довольно много компьютеров, на них одновременно могут выполняться сразу несколько процессов, каждому из которых необходимо средство, позволяющее указать, с кем он хочет поговорить. Следовательно, нужна система адресации.
Также необходимо выработать правила для переноса данных. В некоторых системах данные могут перемещаться только в одном направлении, в других — в любом направлении. Протокол также должен определять количество логических каналов, относящихся к соединению, и их приоритеты. Многие сети обеспечивают минимум по два логических канала на соединение: один для обычных данных и еще один — для срочных.
Важным аспектом является контроль ошибок, поскольку физические каналы связи несовершенны. Известно множество кодов, опознающих и исправляющих ошибки, однако обе стороны соединения должны договориться между собой о том, какой именно код будет выбран. Кроме того, получатель должен иметь возможность сообщить отправителю, какие из сообщений были получены правильно, а какие — нет.
Не все каналы связи сохраняют последовательность посылаемых по ним сообщений. Чтобы исправить возможную потерю порядка сообщений, протокол должен явно снабжать получателя номерами пакетов, чтобы получаемые фрагменты сообщений могли быть собраны в правильном порядке. Очевидным решением проблемы является нумерация пакетов, однако остается открытым вопрос: что делать с пакетами, приходящими в неверном порядке?
Кроме того, на каждом уровне возникает вопрос: как организовать пересылку данных так, чтобы быстрая передающая сторона не завалила пакетами медленную принимающую сторону? Для разрешения данной проблемы существуют различные решения, которые будут обсуждаться далее. Некоторые из них предполагают прямые или косвенные ответы получателя посылающей стороне, информирующие ее о текущем состоянии получателя. Другим решением может быть ограничение скорости передачи до некоторого договорного уровня. В целом это называется управлением потоком.
Еще одна проблема, которую необходимо разрешать на различных уровнях, — это неспособность всех процессов принимать сколь угодно длинные сообщения. С этим может быть связан вопрос: что делать, если процесс настаивает на передаче данных столь малыми порциями, что передача становится неэффективной? Для решения подобной проблемы можно объединять посылаемые сообщения в один большой пакет и снова разбивать его после пересылки на отдельные сообщения.
Когда неудобно или неэффективно устанавливать отдельное соединение для каждой пары общающихся процессов, располагающийся ниже уровень может принять решение использовать одно и то же соединение для различных не связанных друг с другом разговоров. Пока это уплотнение каналов, или мультиплексирование, происходит прозрачно, оно может использоваться любым уровнем. Мультиплексирование, например, необходимо на физическом уровне, где вся связь должна осуществляться по ограниченному числу контуров.
Когда между отправителем и получателем существует несколько возможных путей следования сообщения, возникает задача выбора пути. Иногда она может быть разделена между несколькими уровнями. Основание выбора на знании законов, касающихся тайны переписки данных пользователей, тогда как выбор нижнего уровня может основываться на текущей загруженности линий связи. Эта задача называется маршрутизацией.