Программист имеет дело с логической организацией файла, представляя файл в виде определенным чином организованных логических записей. Логическая запись - это наименьший элемент данных, которым может оперировать программист при обмене с внешним устройством. Даже если физический обмен с устройством осуществляется большими единицами, операционная система обеспечивает программисту доступ к отдельной логической записи. На рисунке 2.33 показанные несколько схем логической организации файла. Записи могут быть фиксированной длины или переменной длины.
Основная идея организации программного обеспечения ввода вывода составляется в разбивке его на несколько уровней, причем нижние уровне обеспечивают экранизацию особенностей аппаратуры от верхних, а те, в свою очередь, обеспечивают удобный интерфейс для пользователей.
Ключевым принципом является независимость от устройств. Вид программы не должен зависеть от того, читает ли она данные из гибкого диска или из жесткого диска.
Очень близкой к идее независимости от устройств есть идея одинакового именования, то есть для именования устройств должны быть принятые единые правила.
В сравнении с доступом к памяти, традиционный доступ к файлам выглядит запутанным и неудобным. По этой причине некоторые ОС, начиная с MULTICS, обеспечивают отображение файлов в адресное пространство выполняемого процесса. Это выражается в появлении двух новых системных вызовов: MAP (отобразить) и UNMAP (отменить отображение). Первый вызов передает операционной системе в качестве параметров имени файла и виртуальный адрес, и операционная система отображает указанный файл в виртуальное адресное пространство по указанному адресу.
Для того, чтобы послать сообщение, необходимо заметить адресу получателя. В очень простой сети адреса может задаваться в виде константы, но в более сложных сетях нужен и более утонченное средство адресации.
Одним из вариантов адресации на верхнему уровне есть использования физических адресов сетевых адаптеров. Если в компьютере, который получает, выполняется только один процесс, то ядро будет знать, что делать с сообщением, которое поступило - передать его этому процессу. Однако, если на машине выполняется несколько процессов, то ядру не известно, которому из них предназначенное сообщение, поэтому использование сетевого адреса адаптеру в качестве адреса получателя приводит к очень серьезному ограничению - на каждой машине должен выполняться только один процесс.
При страничной организации виртуальное адресное пространство процесса делится механически на уровне части. Это не позволяет дифференцировать средства доступа к разным частям программы (сегментам), а это свойство часто бывает очень полезным. Например, можно запретить оборачиваться с операциями записи и чтение в кодовый сегмент программы, а для сегмента данных решить только чтение. Кроме того, разбивка программы на "осмысленные" части делает принципиально возможным низменность одного сегмента несколькими процессами.
Средство синхронизации , которая обоется , процессов предложил Дейкстра, что ввел два новых примитива. В абстрактной форме эти примитивы, которые обозначаются P и V, оперируют над целыми неотрицательными переменными, называемыми семафорами. Пусть S такой семафор. Операции определяются таким способом:
V(S) : переменная S увеличивается на 1 одним неделимым действием; выборка, инкремент и запоминание не могут быть прерваны, и к S нет доступа другим процессам во время выполнения этой операции.
P(S) : уменьшение S на 1, если это возможно.
В дополнение к стандарту POSIX правительство США также определил требования компьютерной безопасности для приложений, используемых правительством. Многие из этих требований являются желательными свойствами для любой многопользовательской системы. Правила безопасности определяют такие свойства, как защита ресурсов одного пользователя от других и установление квот по ресурсам для предотвращения увлечения одним пользователем всех системных ресурсов (таких как память).
Обеспечение защиты информации от несанкционированного доступа является обязательной функцией сетевых операционных систем.
Домен - это основная единица администрирования и обеспечение безопасности в Windows NT. Для домена существует общая база данных учетной информации пользователей (user accounts), так что при входе у домен пользователь получает доступ сразу ко всем разрешенных ресурсов всех серверов домена.
Доверительные отношения (trust relationships) обеспечивают транзитную аутентификацию, при какой пользователь имеет только одна учетная запись в одном домене, но может получить доступ к ресурсам всех доменов сети.
Только небольшое количество сетей имеет однородность (гомогенностью) программного и аппаратного обеспечения. Однородными чаще есть сети, которые составляются из небольшого количества компонентов от одного производителя.
Некоторые организации имеют сети, составленные из оборудования, например, только IBM или DEC. Дни сетей от одного производителя миновали. Нормой сегодняшнего дня являются сети неоднородные (гетерогенные), что составляются из разных рабочих станций, операционных систем и приложений, а для реализации взаимодействия между компьютерами используют разные протоколы.
Эта модель хорошо подходит для предприятий, где необходимо разбить ресурсы на группы в организационных целях, и в то же время количество пользователей и групп пользователей не очень велико. Эта модель соединит централизацию администрирования с организационными преимуществами деления ресурсов между несколькими доменами.
Главный домен удобно рассматривать как чисто учетный домен, основное назначение которого - сохранение и обработка учетных данных. Другие домены в сети - это домены ресурсов, они не берегут и не обрабатывают учетную информацию, а поставляют ресурсы (такие как что разделяются файлы и принтеры) для сети.
Обычно приложения имеют дело с процессами, каждый из который составляется с одной нити управления.
Нити - это важная модель для выражения параллелизма внутри процесса, особенно для распределенного окружения. Например, возможности многонитевой обработки становятся особенно важными в контексте RPC. RPC является синхронным механизмом по своей природе: клиент делает вызов отдаленной функции и ожидает выполнение вызова. При использовании нитей одна нить может сделать запрос, а другая начать обрабатывать данные от другого запроса.
Есть две больших группы функций службы безопасности: идентификация и авторизация. Идентификация проверяет идентичность объекта (например, пользователя или сервиса). Авторизация (или управление доступом) назначает привилегии объекту, такие как доступ к файлу.
Авторизация - это только часть решения. В распределенной сетевой среде обязательно должна работать глобальная служба идентификации, потому что рабочей станции нельзя доверить функции идентификации себя или своего пользователя. Служба идентификации представляет собой механизм передачи третьей стороне функций проверки идентичности пользователя.
В системах, которые составляются из клиентов и серверов, потенциально есть четыре разных места для сохранности файлов и их частей: диск серверу, память серверу, диск клиента (если есть) и память клиента. Более всего подходящим местом для сохранности всех файлов есть диск серверу. Он обычно имеет большую емкость, и файлы становятся доступными всем клиентам. Кроме того, поскольку в этом случае существует только одна копия каждого файла, то не возникает проблемы согласования состояний копий.
Проблемой при использовании диска серверу есть производительность.
Разновидностью виртуальной памяти есть свопинг.
На рисунке 2.16 показанный график зависимости коэффициента загрузки процессора в зависимости от числа одновременно выполняемых процессов и частицы времени, проведенное этими процессами в состоянии ожидания ввода вывода.
Рис. 2.16. Зависимость загрузки процессора от числа задач и интенсивности внедрения-висновка
Из рисунка очевидно, что для загрузки процессора на 90% достаточно всего трех счетных задач.
Базовые примитивы передачи сообщений в распределенных системах
Единым по-настоящему важным отличием распределенных систем от централизованных есть межпроцессная взаимосвязь. В централизованных системах связок между процессами, как правило, предполагает наличие что разделяется памяти. Типичный пример - проблема " поставщик-потребитель", в этом случае один процесс пишет в что разделяется буфер, а другой - читает из него. Даже более всего простая форма синхронизации - семафор - нуждается в, чтобы хотя бы одно слово (переменная самого семафора) было что разделяется.
s#0