ос и с. ОСиС. 1. Классификация программного обеспечения
Скачать 2.7 Mb.
|
Управление памятью Windows NT поддерживает сегментностраничную модель виртуальной памяти и использует для этих целей аппаратную поддержку таких процессоров как Intel 80386 и выше, MIPS R4000, DEC Alpha и Power PC. Для этого в NT executive имеется специальный компонент - менеджер виртуальной памяти. Менеджер ВП обеспечивает для процессов следующие наборы функций: управление виртуальным адресным пространством процесса; разделение памяти между процессами; защита виртуальной памяти одного процесса от других процессов. Средства защиты памяти в Windows NT существуют в четырех формах. Отдельное адресное пространство для каждого процесса. Аппаратура запрещает нити доступ к физическим адресам другого процесса. Два режима работы: режим ядра, в котором нитям разрешен доступ к системным данным, и пользовательский режим, в котором это запрещено. Страничный механизм защиты. Каждая виртуальная страница имеет набор признаков, который определяет разрешенные типы доступа в пользовательском режиме и в режиме ядра. Объектно-ориентированная защита памяти. Каждый раз, когда процесс открывает указатель на секцию, монитор ссылок безопасности проверяет, разрешен ли доступ процесса к данному объекту. Каждый раз, когда нить использует адрес, менеджер ВП вместе с аппаратными средствами транслирует виртуальный адрес в физический. Подсистема виртуальной памяти, управляя процессом трансляции виртуальных адресов, гарантирует, что нить одного процесса не сможет получить доступ к физической странице памяти, относящейся к другому процессу. В дополнение к прямой защите, обеспечиваемой механизмом трансляции, каждый процессор, который поддерживает виртуальную память, реализует некоторую форму аппаратно-управляемой защиты памяти. Часто аппаратная защита бывает минимальной. Из-за этого менеджер виртуальной памяти Windows NT в гораздо большей степени зависит от аппаратуры, чем другие части операционной системы. Каждый процесс NT executive имеет большое виртуальное адресное пространство размером в 4Гб, из которых 2 Гб резервируются для системных нужд. (Процессор MIPS R4000 требует, чтобы 2 Гб адресного пространства были зарезервированы для системы. Хотя другие процессоры требуют меньше, для переносимости системы Windows NT всегда резервирует 2 Гб.) Младшие адреса виртуального адресного пространства доступны для нитей, работающих и в пользовательском, и в привилегированном режимах, они указывают на области памяти, уникальные для каждого процесса. Старшая часть адресов доступна для нитей только тогда, когда они выполняются в привилегированном режиме. Виртуальное адресное пространство процесса показано на рисунке 1.4. В нижней (младшей) части системной области памяти располагаются код и данные ядра, они никогда не вытесняются из памяти. Поскольку адреса из этого диапазона транслируются аппаратурой и всегда бывают действительными, доступ к этой области памяти осуществляется очень быстро. Она используется для тех частей ядра, от которых требуется максимальная производительность, например, для кода, который диспетчирует нити. Верхняя часть системной памяти управляется менеджером виртуальной памяти и используется для хранения остальных системных данных и кода. Часть этой области резервируется для кода и данных, которые могут быть вытеснены на диск с помощью страничного механизма, а другая часть никогда не вытесняется из памяти (в ней, например, размещается код, который осуществляет страничный обмен). В составе менеджера виртуальной памяти имеется такой компонент, как пейджер (pager). Этот код перемещает страницы между диском и памятью, представляя собой промежуточное звено между аппаратными механизмами и программно-реализуемыми стратегиями. В его функции входит: загрузка страницы в память при возникновении страничного прерывания, проверка прав доступа к отсутствующим страницам и дополнение аппаратных средств защиты страниц, загруженных в память, обновление структур данных подсистемы управления памятью. Рис. 1.4. Виртуальное адресное пространство Процесс принятия решения о замене страниц системой виртуальной памяти обычно включает три фазы: извлечение, размещение, замена. Этап извлечения связан с выбором условия, при выполнении которого страница перемещается с диска в память. Существует два типа стратегий извлечения: с упреждением, когда страницы загружаются в память до того, как они оказываются необходимыми процессу, и стратегии загрузки по требованию, в соответствии с которыми страница перемещается в память только при наступлении страничного прерывания. При использовании стратегий "по требованию" при старте каждой нити происходит интенсивная загрузка страниц. Эти страницы называются начальным набором страниц. После загрузки начального набора интенсивность загрузки страниц заметно уменьшается. Менеджер виртуальной памяти Windows NT использует стратегию "по требованию" с кластеризацией. При возникновении страничного прерывания менеджер виртуальной памяти загружает в память вызвавшую прерывание страницу, а также небольшое количество окружающих ее страниц. Эта стратегия пытается минимизировать количество страничных прерываний. Этап размещения. Набор правил, используемых для определения места размещения новой страницы в памяти, называется стратегией размещения. В Windows NT менеджер виртуальной памяти просто выбирает первую страницу из списка свободных физических страниц. База данных физических страниц - это массив записей, пронумерованных от 0 до максимального номера страницы, зависящего от объема памяти. Каждая запись содержит информацию о соответствующей физической странице. Менеджер виртуальной памяти использует прямые связи в случае, когда процесс запрашивает доступ к виртуальному адресу в действительной виртуальной странице. Этап замещения. Если при возникновении страничного прерывания в физической памяти нет свободных страниц, то используется стратегия замещения, которая определяет, какую виртуальную страницу нужно удалить из памяти для освобождения места для размещения новой страницы. Менеджер виртуальной памяти Windows NT использует локальный алгоритм FIFO (First Input First Output). В соответствии с алгоритмом FIFO из памяти удаляется та страница, которая дольше всего там находится. Локальность в данном случае означает, что поиск страницы-кандидата на выгрузку осуществляется только среди страниц того процесса, который требует загрузки новой страницы. Существуют и глобальные стратегии, в соответствии с которыми поиск замещаемой страницы выполняется на множестве страниц всех процессов. Локальный вариант стратегии не дает одному процессу возможность захватить всю имеющуюся память. Когда процесс стартует, ему назначается минимальный рабочий набор страниц. Процесс может его увеличивать до некоторого максимального размера. Если процесс требует еще больше страниц, то менеджер виртуальной памяти удаляет из рабочего набора по одной странице при загрузке каждой новой страницы. Когда размер свободной физической памяти уменьшается до некоторой критической границы, то менеджер виртуальной памяти использует прием, называемый автоматическим триммингом рабочего набора. Он просматривает страницы каждого процесса, находящиеся в памяти, сравнивает их количество с минимальным размером рабочего набора и удаляет избыточные страницы из памяти. В Windows NT реализована сегментно-страничная модель распределения памяти. Для хранения информации о состоянии виртуальных сегментов используется набор структур, называемых дескрипторами виртуальных адресов. Когда процессу назначается новая область памяти, менеджер виртуальной памяти создает дескриптор, в котором хранится вся информация, связанная с этой областью, такая как диапазон адресов, признаки того, является ли память разделяемой или частной, будет ли процесс-потомок наследовать содержимое этой области, признаки защиты. Затем дескриптор встраивается в двоичное дерево дескрипторов данного процесса, используемое для ускорения поиска. Для снижения объема вычислений, затрачиваемых на работу менеджера виртуальной памяти, в Windows NT минимизируется количество страничных прерываний. Для этого предпринимаются следующие меры: Каждому процессу предоставляется рабочий набор страниц достаточно большого размера, чтобы избежать частых страничных отказов. Менеджер виртуальной памяти производит автоматический тримминг рабочего набора каждого процесса, чтобы сделать доступными для других процессов области памяти, занимаемые редко используемыми страницами. 54. Драйверы в Windows NT Архитектура любой современной ОС включает в себя множество не пар. При разработке подсистемы ввода-вывода Windows NT ставились следующие задачи: обеспечить поддержку нескольких файловых систем: FAT, CDFS, NTFS; предоставить средства для упрощения разработки драйверов устройств, в том числе для SMP-платформ; обеспечить возможность динамического добавления и удаления драйверов из системы; обеспечить возможность ввода-вывода для отображаемых в памяти файлов. Компоненты системы ввода-вывода представлены на рисунке 1.11. Каждый запрос на ввод-вывод представлен пакетом IRP (I/O Request Packet). Пакеты передаются от одной подсистемы ввода-вывода к другой. Менеджер ввода-вывода определяет порядок доставки пакетов IRP файловым системам и драйверам устройств. Менеджер не выполняет операций ввода-вывода, он только создает пакет IRP, передает его нужному драйверу и удаляет пакет, когда операция завершается. Драйвер же, получив IRP, выполняет операцию ввода-вывода, а затем возвращает пакет менеджеру для уничтожения или передачи другому драйверу. Термин "драйвер" в Windows NT имеет более широкое значение, чем "драйвер устройства". Файловая система - это сложный драйвер, который принимает запросы к файлам и передает свои более конкретные запросы драйверам физических устройств. Рис. 1.11. Компоненты системы ввода-вывода Windows NT Кроме передачи пакетов, менеджер ввода-вывода выполняет следующие действия: предоставляет драйверам некоторые общие функции, например, для вызова одного драйвера другим, управляет буферами для запросов ввода-вывода, управляет тайм-аутом для драйверов, ведет записи о том, какие файловые системы установлены. Unix в свое время представил новую упрощенную модель ввода-вывода. Все независимые данные представлялись в виде потока байтов, который направлялся в виртуальный файл; этот файл мог быть терминалом, межпроцессным конвейером или "настоящим" файлом. В Windows NT тоже принят этот подход. Запросы к виртуальным файлам менеджер ввода-вывода динамически направляет к реальным файлам: каталогам, физическим устройствам, конвейерам, почтовым ящикам или к любым адресатам, которые будут поддерживаться в будущем. Особенностью Windows NT является общая структура ее драйверов и широкое определение того, что собой представляет драйвер. В Windows NT и драйвер устройства, и драйвер ФС построены единым образом, и для остальной части ОС имеют один и тот же вид. Более того, редиректоры и именованные конвейеры также выглядят как "файловые системы" и реализованы в виде драйверов. Каждый драйвер - это самодостаточный компонент, который может быть динамически добавлен или удален из системы. Основные черты модели драйвера: Драйверы переносимы. Они написаны на языке высокого уровня и мало зависят от архитектуры процессора (драйверы высокого уровня, такие как файловая система, совсем не зависят). Операции ввода-вывода управляются пакетами IRP. Система ввода-вывода может динамически назначать драйверы для новых устройств при изменении конфигурации системы. Драйверы должны синхронизировать свой доступ к глобальным данным драйвера - из-за того, что выполнение драйвера может быть прервано либо высокоприоритетной нитью, либо высокоприоритетным прерыванием. Кроме того, драйвер может выполняться на многопроцессорном компьютере, что повышает вероятность одновременного обращения нескольких копий драйвера к общим глобальным данным. Интерфейс драйверов с менеджером ввода-вывода стандартизирован, что позволяет менеджеру вызывать их "вслепую", не зная их особенностей или структур внутренних данных. Драйверы могут также вызывать друг друга (через менеджер ввода-вывода) для достижения многоуровневой обработки запросов ввода-вывода. В Windows NT чаще используется многоуровневая модель обработки запроса ввода-вывода, но для простых устройств может применяться и одноуровневая модель, когда менеджер вызывает только драйвер устройства. Может использоваться не только двухуровневая модель (как, например, файловый драйвер - драйвер устройства), но и модель с большим числом уровней. Например, если в компьютере есть SCSI-адаптер, к которому подключен диск, то запрос к такому диску проходит через 3 драйвера: драйвер файловой системы, драйвер класса дисков, драйвер SCSI-порта. Ввод-вывод в отображаемые файлы - это важное свойство Windows NT, которое обеспечивается как менеджером ввода-вывода, так и менеджером виртуальной памяти. Менеджер виртуальной памяти делает это свойство доступным для пользовательского режима. Подсистемы окружения (например, Win32) могут использовать эти сервисы менеджера виртуальной памяти для предоставления возможности отображения файлов своим приложениям. При отображении файл представляется как часть виртуального адресного пространства процесса. Процесс может осуществлять доступ к данным файла как к большому массиву в памяти, не выполняя операций ввода-вывода в файл. При доступе к памяти, отображающей файл, менеджер виртуальной памяти использует свой страничный механизм для загрузки соответствующей страницы в физическую память с диска. Если приложение пишет в файл, то менеджер виртуальной памяти записывает измененные страницы на диск как часть общего процесса страничного обмена. Использование отображенных файлов резко увеличивает производительность системы. Один из компонентов системы ввода-вывода - менеджер кэша - использует механизм отображенного ввода-вывода для управления своим кэшем, расположенным в оперативной памяти. Файловые системы и сетевой сервер используют этот кэш для размещения в нем часто используемых файловых данных. Тогда как в большинстве файловых систем объем кэша фиксированный, в Windows NT кэш растет или уменьшается в зависимости от наличия свободной физической памяти. Обращение к части файла, расположенной в кэше, является гораздо более быстрым. 55. Реализация многозадачности в Windows NT Многозадачной называется такая система, в которой одновременно могут быть задействованы несколько независимых задач (программ). Существуют несколько веских причин для того, чтобы иметь возможность выполнять несколько программ параллельно. Первая - связана с необходимостью обработки событий, поступающих от различных аппаратных устройств. К примеру, программа, отвечающая за обработку нажатия клавиш, может быть вызвана в любой момент в ответ на соответствующее действие пользователя, независимо от того, чем в этот момент занят компьютер. Вторая причина - возможность делать что-либо еще пока одно приложение занято длительной обработкой информации. Согласитесь, что в то время, когда идет прием по модему файла мегабайта на три гораздо приятнее раскладывать пасьянс, нежели наблюдать, как бегут, вернее, как ползут, проценты. Можно конечно сварить кофе, но при качестве отечественных телефонных линий времени будет предостаточно, чтобы опустошить не один кофейник, а это вредно для здоровья. Интересно, что у рядового пользователя многозадачность, как правило, ассоциируется с возможностью поиграть в минера или перекинуться в картишки, пока идет печать большого документа. И, наконец, третья, последняя, но от этого не менее веская, причина. Затрагивает она программирование и, следовательно, программистов. Дело в том, что сложность разработки программного продукта, а вместе с ней стоимость, длительность, количество ошибок и т.п., возрастают с размером самой программы отнюдь не линейно: написать пять программ по двадцать тысяч строк гораздо легче, чем одну в сто тысяч. Поэтому, если есть возможность разбить крупный проект, реализовать части по отдельности, а затем объединить в рамках единого приложения - это, как правило, приводит к существенному повышению надежности и, опять-таки, сокращению сроков разработки, необходимых ресурсов и т.п. Разумеется, что эти отдельные блоки должны выполняться параллельно. Кроме всего, такой подход позволяет, один раз вложив деньги, получать многократную отдачу. Например, создав модуль архивного копирования один раз, можно затем многократно использовать его при разработке других программ. Давайте проследим, как менялся механизм реализации многозадачности в процессе эволюции операционных систем: MS DOS - Windows - Windows95. DOS с ее командной строкой, тем не менее, была многозадачной операционной системой. Конечно, весьма примитивной, однако и работать она могла на 86-м процессоре с 256-ю килобайтами памяти, сравните с 16-ю мегабайтами и пентиумом, необходимыми для нормальной работы Windows95. В основе многозадачности MS DOS лежит механизм прерываний. Прерывания бывают аппаратными и программными. Первые возникают, когда какое-либо устройство нуждается в помощи процессора, а вторые вызываются из программы. Когда процессор получает сигнал прерывания, он, в большинстве случаев, останавливает всякую другую деятельность и активизирует находящуюся в памяти программу, соответствующую данному номеру прерывания. После того, как программа обработки прерывания выполнит свою задачу, работа компьютера продолжается с того самого места, где она остановилась в момент возникновения прерывания. Простейший пример многозадачной работы MS DOS - резидентный русификатор клавиатуры. Программа загружается в память один раз, как правило, из файла autoexec.bat при старте системы. Каждый раз при нажатии клавиши русификатор получает управление и преобразует скан-код физической клавиши в код русской или английской буквы, в зависимости от текущего режима. Однако, даже создание таких несложных резидентных программ, как русификатор, часы или калькулятор, требует применения весьма нетривиальных методов и трудоемкого программирования на ассемблере. Как образно сказал один из разработчиков Sidekick: "Создание надежной резидентной программы напоминает попытку бежать по гладкому льду". И уж конечно не может быть и речи об одновременном запуске, скажем, электронных таблиц и базы данных. Следующей итерацией от Microsoft был выпуск Windows. Вариант многозадачности, реализованный в этой операционной системе, получил название совместной (cooperative) многозадачности. Это был, бесспорно, огромный шаг вперед и, одновременно, одно из самых слабых мест в надежности системы. В основе функционирования Windows лежит модель сообщений. Любые события, происходящие в системе, приводят к генерации и посылке соответствующих сообщений. К примеру, когда пользователь перемещает мышь, окно, над которым находится указатель, получает сообщения. При нажатии клавиш соответствующие сообщения адресуются окну, обладающему в данный момент фокусом. Создание нового окна вообще приводит к генерации последовательности из нескольких десятков сообщений и т.д. Каждая Windows программа - это цикл. Из очереди сообщений извлекается одно и обрабатывается, затем все повторяется сначала, пока не поступит специальное сообщение-сигнал о завершении приложения. Причем, пока одна программа занята обработкой сообщения, все остальные терпеливо ожидают завершения этого процесса. Единственный способ организовать длительную обработку информации так, чтобы другие приложения не "застыли" - разбить весь процесс на небольшие части и в перерывах между ними передавать управление системе. Теперь представим, что одновременно с текстовым редактором работает дефрагментатор диска. Программа считала несколько секторов, внесла изменения в FAT, а перед записью передала управление редактору, который взял да и завис. Дефрагментатор уже никогда не получит управление обратно, что скорее всего приведет к потере данных и краху всей системы, после которого поможет только холодная перезагрузка. Многозадачность, используемая в операционных системах Windows95 и Windows NT, носит название вытесняющей или приоритетной (preemptive) многозадачности. Время работы процессора разбивается на небольшие отрезки - кванты. Каждая задача имеет свой приоритет, от которого зависит, сколько квантов для выполнения будет выделено ей операционной системой, после чего эта задача будет прервана (вытеснена) и управление перейдет к следующей по очереди. Задачей в данном контексте может быть не только отдельная программа, но и ее часть, выделенная в т.н. поток (thread). Так, в седьмой версии MS Word'a как поток выделено открытие файла и, если вы решили открыть большой файл, а затем передумали, то можно закрыть Word, не дожидаясь, пока на экране появится текст. Теперь программисту не приходится прибегать к разного рода ухищрениям для организации более-менее надежной совместной работы нескольких программ. Операционная система следит за тем, чтобы процессорное время надлежащим образом распределялось между ними, и ни одна не могла помешать другой. К сожалению, в среде Windows95 в режиме вытесняющей многозадачности выполняются только 32-х разрядные приложения. Старые - 16-ти разрядные - по-прежнему работают с очередью сообщений, как под Windows 3.1, со всеми вытекающими отсюда последствиями. В чем, наверняка, каждый пользователь имел печальную возможность убедиться. Что до вопроса, вынесенного в заголовок, то он бесспорно риторический. Пользователи извлекают из многозадачности свою выгоду, программисты - свою. Справедливости ради следует отметить, что все вышерассмотренные схемы - варианты псевдомногозадачности. На одном процессоре в один момент времени физически может выполняться только одна программа. Однако не за горами светлое будущее, когда мультипроцессорные компьютеры шагнут со страниц рекламных проспектов на наши рабочие столы и можно будет говорить о реальной 56. Файловая система в Windows NT Windows NT 4.0 поддерживает две файловые системы: существовавшую ранее файловую систему FAT и собственную, новую файловую систему NTFS. (Все предыдущие версии поддерживали также файловую систему HPFS, разработанную для операционной системы OS/2 версии 1.х.) FAT успешно применяется миллионами пользователей в составе различных ОС (прежде всего DOS и Windows 3.х). Однако не следует забывать, что в то время, когда она создавалась, основными устройствами для хранения данных были гибкие диски. Затем появились и жесткие диски, начался процесс наращивания их емкостей. В результате отдельные технологические решения тех дней потеряли свою актуальность. К основным недостаткам FAT могут быть отнесены следующие: ограничения, налагаемые на размер файлов и дискового пространства; ограничение длины имени файла; фрагментация файлов, приводящая к снижению быстродействия системы и износу оборудования; непроизводительные затраты памяти, вызванные большими размерами кластеров; подверженность потерям данных. Файловая система Windows NT FAT функционирует так же, как если бы она работала в среде MS-DOS или Windows. Практически можно без всяких опасений устанавливать Windows NT в существующем разделе FAT. Однако следует учитывать, что если были использованы какие-либо программы для сжатия или разбиения диска на разделы, то для чтения таких дисков скорее всего могут потребоваться специально разработанные для этих целей драйверы Windows NT. Файлы из разделов FAT могут безболезненно копироваться в разделы NTFS, но при выполнении обратной операции будет потеряна информация о правах доступа и об альтернативных связях файла. Таким образом, если до установки Windows NT 4.0 на компьютере была установлена MS-DOS (или OS/2, если используется версия Windows NT 3.5х), то нет никакой необходимости переформатировать диск. Система преобразует FAT (или HPFS) в NTFS, сохранив всю информацию на диске. Обратное преобразование невозможно. Не стоит устанавливать NTFS только затем, чтобы использовать длинные (до 255 символов) имена файлов, так как для этих целей прекрасно подойдет и FAT. Возможность использования длинных имен файлов на FAT была введена только в версии Windows NT начиная с 3.5. Можно спокойно называть файлы и каталоги именами, выходящими за пределы традиционного для MS-DOS правила 8.3, нисколько не опасаясь, что эти файлы не будут доступны при работе в MS-DOS. Для таких файлов и каталогов будут назначены вторые, "короткие" имена. Новая файловая система NTFS обладает лучшими показателями производительности и надежности по сравнению с FAT. Эта файловая система поддерживает объектно-ориентированные приложения, обрабатывая все файлы как объекты, которые имеют определяемые пользователем и системой атрибуты. NTFS позволяет задавать права доступа к отдельному файлу, а не к каталогу в целом. |