Назначение и функции драйверов. Файлы устройств, драйверы
Понять, что такое драйвер, попробуем на типовом примере взаимодействия прикладной программы с драйвером.
Код прикладной программы исполняется в пользовательском режиме работы процессора. В этом случае имеется ряд серьезных ограничений на доступ к памяти, аппаратному обеспечению и привилегированным инструкциям процессора. Когда возникает необходимость в преодолении этих ограничений, прикладная программа обращается к ядру ОС, код которого исполняется процессором в режиме ядра. Режим ядра лишен всех упомянутых ограничений. Для расширения функциональных возможностей ядра как раз и служат драйверы ядра (kernel mode drivers). Как они работают?
В отличие от прикладной программы, драйвер не является процессом, и не обладает потоком исполнения. Вместо этого любая функция драйвера выполняется в контексте того потока и процесса, в котором она была вызвана. При этом вызов может проистекать от прикладной программы, от драйвера, либо в результате прерывания. В первом случае контекст исполнения драйвера точно известен – это прикладная программа. В третьем случае контекст исполнения случайный, поскольку прерывание (и, соответственно, исполнение кода драйвера) может произойти при выполнении любой прикладной программы. Во втором случае контекст исполнения может быть как известным, так и случайным, это зависит от контекста исполнения функции вызывающего драйвера.
Под вызовом драйвера здесь подразумевается не обычный вызов функции, а передача так называемого запроса в/в. Более подробно см. лекцию 6.
Различают несколько классов драйверов:
Драйвер, получающий запросы в/в из прикладной программы, называют драйвером высшего уровня. Если такой драйвер не пользуется услугами других драйверов, он называется монолитным.
Драйвер, получающий запросы в/в от другого драйвера, называют промежуточным, если он пользуется услугами других драйверов, или драйвером низшего уровня, если услугами других драйверов он не пользуется.
Типы драйверов и характеристики
[Дополнительная информация] Ifs kit Help\Kernel-Mode Drivers\Design Guide\Part1 General Kernel Mode\Windows 2000 and WDM drivers\Kinds of driversили в DDK.
В NTсуществует 2 типа драйверов: драйверы пользовательского режима и драйверы режима ядра. В дальнейшем, говоря «драйвер», мы будем подразумевать драйверы режима ядра. Такие драйверы являются частью исполнительной системы, а более точно – элементами диспетчера в/в (архитектура NT и ее компоненты будут обсуждаться в лекции 2). Как следует из названия, при работе драйвера режима ядра процессор находится в режиме ядра (RING 0) – см. любой справочник по защищенному режиму работы процессора.
Драйвер NT располагается в файле с расширением.sys и имеет стандартный PE-формат (PE - Portable Executable).
Драйверы реализованы как самостоятельные модули с четко определенным интерфейсом взаимодействия с ОС. Все драйверы имеют определенный системой набор стандартных функций драйвера (standard driver routines) и некоторое число внутренних функций, определенных разработчиком.
Все драйверы режима ядра можно разбить на 3 типа:
Драйверы высшего уровня (highest level drivers)
Драйверы промежуточного уровня (intermediate drivers)
Драйверы низшего уровня (lowest level drivers)
Как мы увидим в дальнейшем, такое разбиение обусловлено многоуровневой моделью драйверов (layered driver model). Для сохранения общности изложения, монолитный драйвер можно включить в эту схему, хотя он не использует многоуровневую архитектуру. В этом случае он будет «гибридом» – драйвером, принадлежащим одновременно к нескольким типам. Например, монолитный драйвер, имеющий интерфейс с приложением и осуществляющий доступ к оборудованию, будет одновременно и драйвером высшего, и драйвером низшего уровня.
Кроме того, в зависимости от назначения драйвера, он может являться каким либо специализированным драйвером, т.е. удовлетворять дополнительному набору требований к своей структуре. Можно привести следующие типы специализированных драйверов:
Драйверы файловой системы
Сетевые драйверы
Отдельно необходимо упомянуть архитектуру WDM – Windows Driver Model. Эта архитектура позволяет создавать драйверы для Windows 98и Windows 2000, совместимые на уровне двоичного кода.
Можно привести следующие характеристики драйверов:
Поддержка динамической загрузки и выгрузки (однако могут быть исключения)
Необходимость следовать определенным протоколам взаимодействия с системой, нарушение которых чаще всего ведет к BSOD
Возможность «наслоения» драйверов поверх друг друга. В Win2K эта возможность возведена в абсолют, хотя монолитные драйверы все еще поддерживаются
Поскольку драйверы являются частью ядра ОС, они могут сделать с системой абсолютно все. Основная проблема – закрытость архитектуры ОС.
Драйвер - системная программа, предназначенная для управления каким-либо физическим или виртуальным устройством компьютера.
Фактически, пользовательские программы либо системные утилиты не могут напрямую обращаться к аппаратуре, используя порты ввода-вывода, DMA либо подобные низкоуровневые механизмы напрямую. Все программы пользователя и часть ОС работают в 3-м кольце защиты компьютера (наименее привилегированном). При этом любая команда обращения к порту из данной программы может быть замаскирована и повлечет за собой аппаратное исключение (Exception). Напрямую к аппаратуре может обратится программа, работающая в самом приоритетном, 0-м кольце защиты.
В настоящее время практически все устройства используют технологию автоматического распределения ресурсов - Plug and Play (PnP). Когда новое устройство будет добавлено в систему, ему будут выделены свободные ресурсы - незадействованные линии запросов на прерывание (IRQ ), свободные адреса портов ввода-вывода. Поэтому драйвер изначально "не знает", какие именно адреса портов и IRQ ему будут выделены - эти данные будут различными для разных компьютеров. При этом задача распределения ресурсов ложится на ОС.
Система ввода-вывода в Windows
Окружение Win 2000 включает компоненты, которые работают в режиме пользователя (User mode ) и в режиме ядра (Kernel mode ). В режиме пользователя работают подсистема защиты, подсистема Win 32-архитектуры (обеспечивает стандартные API - вызовы Windows), подсистема POSIX (обеспечение кроссплатформенности). В режиме ядра работают все основные компоненты системы: диспетчер ввода-вывода (I / O manager), диспетчер конфигурации (Configuration Manager), подсистема PnP , диспетчер управления энергопотреблением (Power Manager), диспетчер памяти (Memory Manager) и прочие жизненно необходимые службы. Драйвера в Win 2000 включены в подсистему ввода-вывода. При этом драйвера тесно взаимодействуют практически со всеми компонентами ядра. Драйвера взаимодействуют с аппаратурой при помощи HAL (уровень абстракции аппаратуры). HAL - программный компонент ядра Win 2000, который обеспечивает интерфейс ядра (в том числе и некоторых драйверов) с аппаратурой. Т.к. Win 2000 - платформенно независимая система, то HAL избавляет ядро от непосредственного общения с кэшем, прерываниями, шинами ввода-вывода и большинством прочих устройств, оставляя эту работу драйверам, специально написанным для данной системы. Таким образом, ядро системы представляется набором отдельных изолированных модулей с четко определенными внешними интерфейсами.
Все драйвера NT имеют множество стандартных методов драйвера, определенных системой, и, возможно, несколько специфических методов, определенных разработчиком. Драйвера Windows 2000 используют архитектуру WDM (Windows Driver Model). В Windows 2000 драйвера бывают следующих типов:
- Kernel mode drivers (драйверы режима ядра). Основной тип драйвера. Такие драйвера используются для решения общих задач: управление памятью, шинами, прерываниями, файловыми системами, устройствами хранения данных и т.п.
- Graphics drivers (драйверы видеокарт). Как правило, создаются одновременно с самой видеокартой. Очень сложны в написании, так как должны учитывать множество противоречивых требований и поддерживать множество стандартов. Скорее всего, вам не потребуется создавать ничего подобного.
- Multimedia drivers (мультимедиа-драйверы). Драйверы для: Аудиоустройств - считывание, воспроизведение и компресс ия ау диоданных. Устройств работы с видео - захват и компрессия видеоданных. Позиционных устройств - джойстики, световые перья, планшеты и пр.
- Network drivers (сетевые драйвера) - работа с сетью и сетевыми протоколами на всех уровнях.
- Virtual DOS Drivers - драйверы для виртуальных машин MS - DOS . Постепенно переходят в раздел рудиментарных.
В свою очередь, существует три типа драйверов ядра, каждый тип имеет четко определенные структуру и функциональность.
- Device drivers (драйвера устройств), такие как драйвер клавиатуры или дисковый драйвер, напрямую общающийся с дисковым контроллером. Эти драйвера называются драйверами низкого уровня, т. к. они находятся в самом низу цепочки драйверов Windows NT .
- Intermediate drivers (промежуточные драйвера), такие как драйвер виртуального диска. Они используют драйверы устрой ств дл я обращения к аппаратуре.
- File system drivers (FSDs). Драйверы файловых систем, таких как FAT, NTFS, CDFS, для доступа к аппаратуре используют Intermediate drivers и Device drivers.
Драйвера Windows 2000 должны удовлетворять следующим требованиям:
- Переносимы с одной платформы на другую.
- Конфигурируемые программно.
- Всегда прерываемые.
- Поддерживающие мультипроцессорные платформы.
- Объектно-ориентированные.
- Поддерживать пакетный ввод-вывод с использванием I / O request packets (IRPs , запросы ввода-вывода).
- Поддерживать асинхронный ввод-вывод.
Система ввода-вывода Windows 2000 имеет следующие особенности:
Менеджер ввода-вывода NT представляет интерфейс для всех kernel - mode драйверов, включая драйвера физических устройств, драйвера логических устройств и драйвера файловых систем.
Операции ввода-вывода послойные. Это значит, что вызов, сделанный пользователем, проходит через несколько драйверов, генерируя несколько пакетов запросов на ввод-вывод и "по пути" обращаясь к необходимым драйверам. К примеру, когда приложение пытается открыть файл, подсистема ввода-вывода Windows делает запрос к драйверу файловой системы; драйвер файловой системы обращается к промежуточному драйверу; и лишь промежуточный драйвер обращается непосредственно к винчестеру. Такая архитектура построения системы существенно повышает ее гибкость и снижает общую стоимость разработки.
Системная служба Windows NT - это фоновый процесс, который может запускаться и работать без участия интерактивного пользователя. В этом смысле системные службы похожи на демоны Unix и резидентные программы MS-DOS. Как правило, системные службы стартуют при загрузке системы и продолжают работать, пока система не будет остановлена, хотя возможны запуск и остановка служб уже в процессе работы.
Основное отличие драйвера от службы заключается в том, что драйвер может работать в 0 кольце и в пользовательском режиме, а служба работает только в пользовательском режиме. Установка службы осуществляется через SCM менеджер, а драйвер через. inf файл, однако драйвер может быть установлен через SCM менеджер, но не все типы драйверов могут установлены через SCM менеджер.
Второй вариант ответа на вопрос
Драйвер устройства является файлом PE-формата, таким же как обычные exe и dll . Только загружается и работает по другим правилам. Драйверы можно рассматривать как DLL режима ядра, предназначенные для выполнения задач не решаемых из пользовательского режима. Принципиальная разница здесь (не считая уровня привилегий) в том, что мы не сможем напрямую обращаться к драйверу, ни к его коду, ни к его данным, а будем пользоваться специальным механизмом предоставляемым диспетчером ввода-вывода (Input / Output Manager). Диспетчер ввода-вывода обеспечивает среду для функционирования драйверов, а также предоставляет механизмы для их загрузки, выгрузки и управления ими.
Многоуровневые драйверы
Большинство драйверов управляющих физическими устройствами являются многоуровневыми (layered drivers). Обработка запроса ввода-вывода разделяется между несколькими драйверами. Каждый выполняет свою часть работы. Например, запрос на чтение файла передается драйверу файловой системы, который, выполнив некоторые операции (например, разбиение запроса на несколько частей), передает его "ниже" - драйверу диска, а тот, в свою очередь, отправляет запрос драйверу шины. Кроме того между этими драйверами можно добавить любое количество драйверов-фильтров (например, шифрующих данные). Выполнив запрос нижестоящий драйвер (lower-level driver) передает его результаты "наверх" - вышестоящему (higher-level driver).
Driver Development Kit
Первое, что необходимо для разработки драйвера - это Комплект разработки драйверов устройств (Windows 2000 Driver Development Kit , 2KDDK ). В этот пакет входит документация, которая содержит информацию о внутренних структурах данных и внутрисистемных функциях используемых драйверами устройств. Помимо документации в DDK входит набор библиотечных файлов (*. lib), которые необходимы при компоновке.
Отладка драйверов
Отладчики драйвера – отладчики, которые позволяют отлаживать код режима ядра. Самым лучшим выбором будет SoftICE . Или можно воспользоваться Kernel Debugger входящим в состав DDK.
Существует два метода установки драйвера:
- При наличии. inf файла, установка драйвера производиться с помощью стандартного менеджера установки оборудования OC Windows . Инсталляция при помощи inf-файла позволяет выполнить все действия по копированию файлов, относящихся к драйверу, и внесению изменений в Системный Рее стр пр актически без участия пользователя.
- C помощью функций SCM Менеджера возможно установить драйвер непосредственно из приложения, которое также может выполнить как остановку, так и выгрузку драйвера. Следует, однако, признать, что не все драйверы поддаются работе через сервисы SCM Менеджера. Этот удобный (особенно при экспериментах по изучению системных вызовов режима ядра).
Порядок функционирования драйвера в ОС
Обычно принята двухуровневая схема организации драйверов виртуальных устройств. На самом нижнем уровне (уровень ядра операционной системы) работает собственно драйвер виртуального устройства. Который должен выполнять все операции ввода/вывода, которые может осуществлять устройство, реализовывать интерфейс IOCTL и взаимодействовать с системой. По возможности данная часть ПО должна быть небольшой и занимать минимум процессорного времени.
Рис. 1 Схема взаимодействия пользовательской программы с драйвером
Второй уровень – уровень DLL, предоставляющей API прикладным программам (далее уровень API). Под API понимается набор функций, которые могут вызывать клиентские программы, для доступа к нашему виртуальному устройству. Клиентские приложения, которые желают работать с драйвером, также могут использовать интерфейс IOCTL.
Третий уровень – уровень клиентских приложений он уже не относится к драйверу.
Пример простейшего драйвера:
Вид файла driver.h:
#ifdef __cplusplus
extern "C"
#endif
#include "ntddk.h"
#ifdef __cplusplus
#endif
// Определяем структуру расширения устройства. Включим в нее
// указатель на FDO и имя символьной ссылки в формате UNOCODE_STRING.
typedef struct _EXAMPLE_DEVICE_EXTENSION
PDEVICE_OBJECT fdo;
UNICODE_STRING ustrSymLinkName; // L"\\DosDevices\\Example"
} EXAMPLE_DEVICE_EXTENSION, *PEXAMPLE_DEVICE_EXTENSION;
Текст init.cpp:
#include "Driver.h"
// Предварительные объявления функций:
VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject) ;
NTSTATUS Create_File_IRPprocessing(IN PDEVICE_OBJECT fdo, IN PIRP Irp) ;
NTSTATUS Close_Handle_IRPprocessing(IN PDEVICE_OBJECT fdo, IN PIRP Irp) ;
#pragma code_seg("INIT") // начало секции INIT
// DriverEntry - инициализация драйвера и необходимых объектов
// Аргументы: указатель на объект драйвера
// раздел реестра (driver service key) в UNICODE
// Возвращает: STATUS_Xxx
extern "C"
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath )
NTSTATUS status = STATUS_SUCCESS;
PDEVICE_OBJECT fdo;
UNICODE_STRING devName;
// Экспорт точек входа в драйвер
DriverObject->DriverUnload = UnloadRoutine;
DriverObject->MajorFunction[ IRP_MJ_CREATE] = Create_File_IRPprocessing;
DriverObject->MajorFunction[ IRP_MJ_CLOSE] = Close_Handle_IRPprocessing;
// Действия по созданию символьной ссылки
RtlInitUnicodeString( &devName, L"\\ Device\\ EXAMPLE" ) ;
// Создаем наш Functional Device Object (FDO) и получаем
// указатель на созданный FDO в нашей переменной fdo.
status = IoCreateDevice(DriverObject,
sizeof (EXAMPLE_DEVICE_EXTENSION) ,
&devName, // может быть и NULL
FILE_DEVICE_UNKNOWN,
FALSE , // без эксклюзивного доступа
&fdo) ;
if (!NT_SUCCESS(status) ) return status;
// Получаем указатель на область, предназначенную под
// структуру расширение устройства
PEXAMPLE_DEVICE_EXTENSION dx =
(PEXAMPLE_DEVICE_EXTENSION) fdo->DeviceExtension;
dx->fdo = fdo; // Сохраняем обратный указатель
UNICODE_STRING symLinkName; // Сформировать символьное имя:
// необходимо поступать следующим образом:
#define SYM_LINK_NAME L"\\DosDevices\\Example"
RtlInitUnicodeString( &symLinkName, SYM_LINK_NAME ) ;
dx->ustrSymLinkName = symLinkName;
status = IoCreateSymbolicLink( &symLinkName, &devName ) ;
if (!NT_SUCCESS(status) )
{ // при неудаче - удалить Device Object и вернуть управление
IoDeleteDevice( fdo ) ;
return status;
} // Теперь можно вызывать CreateFile("\\\\.\\Example",...);
// в пользовательских приложениях
return status;
#pragma code_seg() // end INIT section
// CompleteIrp: Устанавливает IoStatus и завершает обработку IRP
// Первый аргумент - указатель на объект нашего FDO.
NTSTATUS CompleteIrp( PIRP Irp, NTSTATUS status, ULONG info)
Драйверы внешних устройств
Драйвер (driver) представляет собой специализированный программный модуль, управляющий внешним устройством. Слово driver происходит от глагола to drive (вести) и переводится с английского языка как извозчик или шофер: тот, кто ведет транспортное средство. Драйверы обеспечивают единый интерфейс для доступа к различным устройствам, тем самым устраняя зависимость пользовательских программ и ядра ОС от особенностей аппаратуры. Драйвер не обязательно должен управлять каким-либо физическим устройством. Многие ОС предоставляют также драйверы виртуальных устройств или псевдоустройств – объектов, которые ведут себя аналогично устройству ввода-вывода, но не соответствуют никакому физическому устройству. В виде псевдоустройств реализуются трубы в системах семейства Unix и почтовые ящики в VMS. Еще одним примером полезного псевдоустройства являются устройства /dev/null в Unix и аналогичное ему \DEV\NUL в MS DOS\Windows\OS/2.
Прикладные программы, использующие собственные драйверы, не так уж редки – примерами таких программ могут быть GhostScript (свободно распространяемый интерпретатор языка PostScript, способный выводить программы на этом языке на различные устройства.
Большинство ОС общего назначения запрещают пользовательским программам непосредственный доступ к аппаратуре. Это делается для повышения надежности и обеспечения безопасности в многопользовательских системах. В таких системах драйверы являются для прикладных программ единственным способом доступа к внешнему миру. Еще одна важная функция драйвера – это взаимоисключение доступа к устройству в средах с вытесняющей многозадачностью. Допускать одновременный неконтролируемый доступ к устройству нескольких параллельно исполняющихся процессов просто нельзя, потому что для большинства внешних устройств даже простейшие операции ввода-вывода не являются атомарными. Например, в большинстве аппаратных реализации последовательного порта RS232 передача байта состоит из четырех шагов: записи значения в регистр данных, записи команды “передавать” в регистр команды, ожидания прерывания по концу передачи и проверки успешности передачи путем считывания статусного регистра устройства. Нарушение последовательности шагов может приводить к неприятным последствиям – например, перезапись регистра данных после подачи команды, но до завершения передачи, может привести к остановке передачи или, что еще хуже, передаче искаженных данных и т. д. Нельзя также забывать о неприятностях более высокого уровня – например, смешивании вывода разных процессов на печати или данных – на устройстве внешней памяти. Поэтому оказывается необходимо связать с каждым внешним устройством какой-то разграничитель доступа во времени. В современных ОС эта функция возлагается именно на драйвер. Обычно одна из нитей драйвера представляет собой процесс-монитор, выполняющий асинхронно поступающие запросы на доступ к устройству. В Unix, OS/2 и Windows NT/2000/XP этот процесс называется стратегической функцией. При определении интерфейса драйвера разработчики ОС должны найти правильный баланс между противоречивыми требованиями:
1. стремлением как можно сильнее упростить драйвер, чтобы облегчить его разработку и (косвенно) уменьшить вероятность опасных ошибок;
2. желанием предоставить гибкий и интеллектуальный интерфейс к разнообразным устройствам.
Драйверы обычно разрабатываются не поставщиками операционной системы, а сторонними фирмами – разработчиками и изготовителями периферийного оборудования. Поэтому интерфейс драйвера является ничуть не менее внешним, чем то, что обычно считается внешним интерфейсом ОС – интерфейс системных вызовов. Соответственно, к нему предъявляются те же требования, что и к любому другому внешнему интерфейсу: он должен быть достаточно простым, исчерпывающе документированным и стабильным – не меняться непредсказуемо от одной версии ОС к другой. Идеальным вариантом была бы полная совместимость драйверов хотя бы снизу вверх, чтобы драйвер предыдущей версии ОС мог использоваться со всеми последующими версиями. Потеря совместимости в данном случае означает, что все независимые изготовители оборудования должны будут обновить свои драйверы. Организация такого обновления оказывается сложной, неблагодарной и часто попросту невыполнимой задачей – например, потому, что изготовитель оборудования уже не существует как организация или отказался от поддержки данного устройства. Таким образом, интерфейс драйвера часто оказывается наиболее консервативной частью ОС. К сожалению – несмотря даже на то, что в общих чертах архитектура драйвера в большинстве современных ОС удивительно похожа – идея эта, по-видимому, нереализуема. Даже для близкородственных ОС – например, систем семейства Unix – драйверы одного и того же устройства не всегда могут быть легко перенесены из одной ОС в другую, не говоря уж о возможности использования без модификаций. Еще более удивительным является тот факт, что две линии ОС – Windows 95/98/МЕ и Windows NT/2000/XP – поставляемых одной и той же компанией Microsoft и реализующих почти один и тот же интерфейс системных вызовов, – Win32 – имеют совсем разный интерфейс драйвера. Проблема здесь в том, что интерфейс между драйвером и ядром ОС всегда двусторонний: не только прикладные программы и ядро вызывают функции драйвера, но и, наоборот, драйвер должен вызывать функции ядра. Таким образом, до тех пор, пока используются ОС различной архитектуры, разработка универсального интерфейса драйвера, если теоретически и возможна, то практически вряд ли осуществима.
Драйвер устройства - необходим для каждого устройства. Для разных ОС нужны разные драйверы.
Драйверы должны быть частью ядра (в монолитной системе), что бы получить доступ к регистрам контроллера.
Это одна из основных причин приводящих к краху операционных систем. Потому что драйверы, как правило, пишутся производителями устройств, и вставляются в ОС.
Логическое расположение драйверов устройств. На самом деле обмен данными между контроллерами и драйверами идет по шине.
Драйвера должны взаимодействовать с ОС через стандартные интерфейсы.
Стандартные интерфейсы, которые должны поддерживать драйвера:
- Для блочных устройств
- Для символьных устройств
Раньше для установки ядра приходилось перекомпилировать ядра системы.
Сейчас в основном ОС загружают драйверы. Некоторые драйверы могут быть загружены в горячем режиме.
Функции, которые выполняют драйвера:
- обработка запросов чтения или записи
- инициализация устройства
- управление энергопотреблением устройства
- прогрев устройства (сканера)
- включение устройства или запуска двигателя
Конец работы -
Эта тема принадлежит разделу:
Операционная система, процессы, оборудование
Операционная система ос в наибольшей степени определяет облик всей вычислительной системы в целом ос выполняет две по существу мало связанные.. ос как виртуальная расширенная машина использование большинства компьютеров.. с точки зрения пользователя функцией ос является предоставление пользователю некоторой расширенной или виртуальной..
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ:
Что будем делать с полученным материалом:
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Все темы данного раздела:
Особенности аппаратных платформ
На свойства операционной системы непосредственное влияние оказывают аппаратные средства, на которые она ориентирована. По типу аппаратуры различают операционные системы персональных компьютеров, ми
Задачи и упражнения
1. Какие события в развитии технической базы вычислительных машин стали вехами в истории операционных систем?
2. В чем состояло принципиальное отличие первых мониторов пакетной обработки о
Архитектура операционной системы
Любая хорошо организованная сложная система имеет понятную и рациональную структуру, то есть разделяется на части - модули, имеющие вполне законченное функциональное назначение с че
Управление основной памятью
Память представляет собой большой массив слов или байт, каждый из которых имеет собственный адрес. Это хранилище данных, к которым обеспечивается быстрый доступ, распределенный между процессором и
Управление внешней памятью
Поскольку основная память (первичная память) энергозависима и слишком мала для размещения всех данных и программ постоянно, ВС должна обеспечить вторичную память для сохранения основной памяти. Бол
Подсистема управления файлами
Файл представляет собой набор взаимосвязанной информации, определенной при создании. Кроме собственно данных, файлы представляют программы, как в исходном, так и в объектном виде.
Подсисте
Сетевое обеспечение
Распределенная система - набор процессоров, которые не распределяют память или каждый процессор имеет свою локальную память. Процессоры в системе соединены посредством компьютерной сети и обеспечив
Ядро и вспомогательные модули ОС
Наиболее общим подходом к структуризации операционной системы является разделение всех ее модулей на две группы:
ядро - модули ОС, выполняющие основные функции;
Ядро и привилегированный режим
Для надежного управления ходом выполнения приложений операционная система должна иметь по отношению к приложениям определенные привилегии. Иначе некорректно работающее приложение мо
Многослойная структура ОС
Вычислительную систему, работающую под управлением ОС на основе ядра, можно рассматривать как систему, состоящую из трех иерархически расположенных слоев: нижний слой образует аппар
Структура ядра
Средства аппаратной поддержки ОС. До сих пор об операционной системе говорилось как о комплексе программ, но часть функций ОС может выполняться и аппаратными средствами. Поэт
Аппаратная зависимость и переносимость ОС
Многие операционные системы успешно работают на различных аппаратных платформах без существенных изменений в своем составе. Во многом это объясняется тем, что, несмотря на различия
Переносимость операционной системы
Если код операционной системы может быть сравнительно легко перенесен с процессора одного типа на процессор другого типа и с аппаратной платформы одного типа на аппаратную пл
Концепция
Микроядерная архитектура является альтернативой классическому способу построения операционной системы. Под классической архитектурой в данном случае понимается рассмотренная выше структурная органи
Двоичная совместимость и совместимость исходных текстов
Необходимо различать совместимость на двоичном уровне и совместимость на уровне исходных текстов. Приложения обычно хранятся в ОС в виде исполняемых файлов, содержащих двоичные обра
Трансляция библиотек
Выходом в таких случаях является использование так называемых прикладных программных сред. Одной из составляющих, формирующих прикладную программную среду, является набор фун
Способы реализации прикладных программных сред
Создание полноценной прикладной среды, полностью совместимой со средой другой операционной системы, является достаточно сложной задачей, тесно связанной со структурой операционной системы. Существ
Понятие процесса
Процессом называется некоторая деятельность, выполняемая на процессоре. Процессором в широком смысле называется любое устройство в составе ЭВМ, спо
Понятие ресурса
Одной из функций ОС является обеспечение эффективного и бесконфликтного способа управления ресурсами вычислительной системы.
Под ресурсом часто понимается показатель
Концепция виртуализации
Виртуализация того или иного ресурса осуществляется в рамках централизованной схемы распределения ресурсов. Путем виртуализации осуществляются две формы обмана пользователей:
Одноочередные дисциплины обслуживания
а) FIFO (First In -- First Out) – дисциплина обслуживания в порядке поступления. Все заявки поступают в конец очереди. Первыми обслуживаются заявки, находящиеся в начале очереди. Схематическ
Система прерываний
Ситуация, которая возникает в результате воздействия какого-то независимого события, приводящего к временному прекращению выполнения последовательности команд одной программы с цель
Понятие процесса
Процесс(задача) - программа, находящаяся в режиме выполнения.
С каждым процессом связывается его адресное пространство, из которого он может читать и в ко
Модель процесса
В многозадачной системе реальный процессор переключается с процесса на процесс, но для упрощения модели рассматривается набор процессов, идущих параллельно (псевдопараллельно).
Рассмотрим
Завершение процесса
(вызов exit или ExitProcess):
Плановое завершение (окончание выполнения) Плановый выход по известной ошибке (например, отсутствие файла)
Иерархия процессов
В UNIX системах заложена жесткая иерархия процессов. Каждый новый процесс созданный системным вызовом fork, является дочерним к предыдущему процессу. Дочернему процессу достаются от родительского п
Состояние процессов
Три состояния процесса:
Выполнение (занимает процессор) Готовность (процесс временно приостановлен, чтобы позволить выполняться другому процессу) Ожидание (процесс
Понятие потока
Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд. В многопользовательских системах, при каждом обращении к одному и тому же сервису, приход
Модель потока
С каждым потоком связывается:
Счетчик выполнения команд Регистры для текущих переменных Стек Состояние Потоки делят между собой элементы
Преимущества использования потоков
Упрощение программы в некоторых случаях, за счет использования общего адресного пространства. Быстрота создания потока, по сравнению с процессом, примерно в 100 раз. Повышен
Реализация потоков в пространстве пользователя, ядра и смешанное
А - потоки в пространстве пользователя
B
Особенности реализации Windows
Используется четыре понятия:
Задание - набор процессов с общими квотами и лимитами Процесс - контейнер ресурсов (память...), содержит как минимум один поток. Пото
Взаимодействие между процессами
Ситуации, когда приходится процессам взаимодействовать:
Передача информации от одного процесса другому Контроль над деятельностью процессов (например: когда они борются за о
Передача информации от одного процесса другому
Передача может осуществляться несколькими способами:
Разделяемая память Каналы(трубы), это псевдофайл, в который один процесс пишет, а другой читает.
Состояние состязания
Состояние состязания - ситуация когда несколько процессов считывают или записывают данные (в память или файл) одновременно.
Рассмотрим пример, когда два процесса пытаются
Критические области
Критическая область - часть программы, в которой есть обращение к совместно используемым данным.
Условия избегания состязания и эффективной работы процессов:
Два процесса не
Переменные блокировки
Вводится понятие переменной блокировки, т.е. если значение этой переменной равно, например 1, то ресурс занят другим процессом, и второй процесс переходит в режим ожидания (блокируется) до тех пор,
Строгое чередование
В этой модели, процессы могут выполняться строго по очереди, используя переменную.
Примитивы взаимодействия процессов
Вводится понятия двух примитивов.
sleep - системный запрос, в результате которого вызывающий процесс блокируется, пока его не запустит другой процесс.
wak
Семафоры
Семафоры - переменные для подсчета сигналов запуска, сохраненных на будущее.
Были предложены две операции down и up (аналоги sleep и wake
Планирование в системах пакетной обработки
6.2.1 "Первый пришел - первым обслужен" (FIFO - First In Fist Out)
Процессы ставятся в очередь по мере поступления.
Преимущества:
Циклическое планирование
Самый простой алгоритм планирования и часто используемый.
Каждому процессу предоставляется квант времени процессора. Когда квант заканчивается процесс переводится планировщиком в конец оче
Приоритетное планирование
Каждому процессу присваивается приоритет, и управление передается процессу с самым высоким приоритетом.
Приоритет может быть динамический и статический.
Динамичес
Планирование в системах реального времени
Системы реального времени делятся на:
жесткие (жесткие сроки для каждой задачи) - управление движением гибкие (нарушение временного графика не желательны, но допустимы) - уп
Общее планирование реального времени
Используется модель, когда каждый процесс борется за процессор со своим заданием и графиком его выполнения.
Планировщик должен знать:
частоту, с которой должен работать кажд
Взаимоблокировка процессов
Взаимоблокировка процессов может происходить, когда несколько процессов борются за один ресурс.
Ресурсы бывают выгружаемые и невыгружаемые, аппаратные и программные.
Моделирование взаимоблокировок
Моделирование тупиков с помощью графов.
Условные обозначения
На такой модели оч
Обнаружение и устранение взаимоблокировок
Система не пытается предотвратить взаимоблокировку, а пытается обнаружить ее и устранить.
Обнаружение взаимоблокировки при наличии одного ресурса каждого типа
Динамическое избежание взаимоблокировок
В этом способе ОС должна знать, является ли предоставление ресурса безопасным или нет.
Траектории ресурсов
Рассмотрим модель из двух процессов и двух ресурсов
Предотвращение четырех условий, необходимых для взаимоблокировок
Предотвращение условия взаимного исключения
Можно минимизировать количество процессов борющихся за ресурсы.
Например, с помощью спулинга для принтера, когда т
Принципы аппаратуры ввода-вывода
Два нижних уровня системы управления вводом-выводом составляет hardware: сами устройства, непосредственно выполняющие операции, и их контроллеры, служащие для организации совместной работы устройст
Контроллеры устройств
Устройства ввода-вывода обычно состоят из двух частей:
механическая (не надо понимать дословно) - диск, принтер, монитор электронная - контроллер или
Отображаемый на адресное пространство памяти ввод-вывод
Каждый контроллер имеет несколько регистров, которые используются для взаимодействия с центральным процессором. При помощи этих регистров ОС управляет (считывает, пишет, включает и т.д.) и определя
Прямой доступ к памяти (DMA - Direct Memory Access)
Прямой доступ к памяти реализуется с помощью DMA - контроллера.
Контроллер содержит несколько регистров:
регистр адреса памяти счетчик байтов
Прерывания
После того как устройство ввода-вывода начало работу, процессор переключается на другие задачи.
Чтобы сигнализировать процессору об окончании работы, устройство инициализирует прерывание,
Задачи программного обеспечения ввода-вывода
Основные задачи, которые должно решать программное обеспечение ввода-вывода:
Независимость от устройств - например, программа, читающая данные из файла не должна задумываться с чего
Программный ввод-вывод
В этом случае всю работу выполняет центральный процессор.
Рассмотрим процесс печати строки ABCDEFGH этим способом.
Управляемый прерываниями ввод-вывод
Если в предыдущем примере буфер не используется, а принтер печатает 100 символов в секунду, то на каждый символ будет уходить 10мс, в это время процессор будет простаивать, ожидая готовности принте
Обработчики прерываний
Прерывания должны быть скрыты как можно глубже в недрах операционной системы, чтобы как можно меньшая часть ОС имела с ними дело. Лучше всего блокировать драйвер, начавший ввод-вывод.
Алго
Независимое от устройств программное обеспечение ввода-вывода
Функции независимого от устройств программного обеспечения ввода-вывода:
Единообразный интерфейс для драйверов устройств, Буферизация Сообщения об ошибках
Обобщение уровней и функций ввода-вывода
Уровни и основные функции системы ввода-вывода
Баз
Блокирующиеся, неблокирующиеся и асинхронные системные вызовы
Все системные вызовы, связанные с осуществлением операций ввода-вывода, можно разбить на три группы по способам реализации взаимодействия процесса и устройства ввода-вывода.
· К первой, на
Буферизация и кэширование
Под буфером обычно понимается некоторая область памяти для запоминания информации при обмене данных между двумя устройствами, двумя процессами или процессом и устройством. Обмен ин
Spooling и захват устройств
О понятии spooling мы говорили в первой лекции нашего курса, как о механизме, впервые позволившем совместить реальные операции ввода-вывода одного задания с выполнением другого зад
Обработка прерываний и ошибок
Если при работе с внешним устройством вычислительная система не пользуется методом опроса его состояния, а задействует механизм прерываний, то при возникновении прерывания, как мы уже
Планирование запросов
При использовании неблокирующегося системного вызова может оказаться, что нужное устройство уже занято выполнением некоторых операций. В этом случае неблокирующийся вызов может немедл
Принципы, заложенные в подсистему управления вводом-выводом в ОС UNIX
1. Эта подсистема построена единообразно с подсистемой управления данными (файловой системой). Пользователю предоставляется унифицированный способ доступа как к ПУ, так и к файлам. Под файлом в ОС
Управление памятью в ОС
4.1. Понятие об организации и управлении физической памятью в операционных системах
4.2. Методы связного распределения основной памяти
4.2.1. Связное распределен
Понятие об организации и управлении физической памятью в операционных системах
Организация и управление основной (первичной, физической, реальной) памятью вычислительной машины - один из важнейших факторов, определяющих построение операционных систем. В англоязычной техническ
Связное распределение памяти для одного пользователя
Связное распределение памяти для одного пользователя, называемое также одиночным непрерывным распределением, применяется в ЭВМ, работающих в пакетном однопрограммном режиме под управлением простейш
Связное распределение памяти при мультипрограммной обработке
При мультипрограммной обработке в памяти компьютера размещается сразу несколько заданий. Распределение памяти между заданиями в этом случае может быть выполнено следующими способами:
· рас
Стратегии размещения информации в памяти
Стратегии размещения информации в памяти предназначены для того, чтобы определить, в какое место основной памяти следует помещать поступающие программы и данные при распределении памяти неперемещае
Основные концепции виртуальной памяти
Термин виртуальная память обычно ассоциируется с возможностью адресовать пространство памяти, гораздо большее, чем емкость первичной (реальной, физической) памяти конкретной вычислительной м
Страничная организация виртуальной памяти
Виртуальный адрес при чисто страничной организации памяти _ это упорядоченная пара (p, d), где p - номер страницы в виртуальной памяти, а d - смещение в рамках страницы p. Процесс может выполняться
Сегментная организация виртуальной памяти
Виртуальный адрес при сегментной организации виртуальной памяти - это упорядоченная пара n = (s, d) , где s - номер сегмента виртуальной памяти, а d - смещение в рамках этого сегмента. Процесс мож
Странично-сегментная организация виртуальной памяти
Системы со странично-сегментной организацией обладают достоинствами обоих способов реализации виртуальной памяти. Сегменты обычно содержат целое число страниц, причем не обязательно, чтобы все стра
Стратегии управления виртуальной памятью
Стратегии управления виртуальной памятью, так же как и стратегии управления физической памятью, разделяются на три категории: стратегии вталкивания, стратегии размещения и стратегии выталкивания.
Стратегии вталкивания (подкачки)
Для управления вталкиванием применяются следующие стратегии:
· вталкивание (подкачка) по запросу (по требованию);
· вталкивание (подкачка) с упреждением (опережением).
Стратегии размещения
В системах со страничной организацией виртуальной памяти решение о размещении вновь загружаемых страниц принимается достаточно просто: новая страница может быть помещена в любой свободный
Стратегии выталкивания
В мультипрограммных системах вся первичная память бывает, как правило, занята. В этом случае программа управления памятью должна решать, какую страницу или какой сегмент следует удалить из первично
Именование файлов
Длина имени файла зависит от ОС, может быть от 8 (MS-DOS) до 255 (Windows, LINUX) символов.
ОС могут различать прописные и строчные символы. Например, WINDOWS и windows для MS-DOS одно и т
Структура файла
Три основные структуры файлов:
1. Последовательность байтов - ОС не интересуется содержимым файла, она видит только байты. Основное преимущество такой системы, это гибкост
Типы файлов
Основные типы файлов:
· Регулярные - содержат информацию пользователя. Используются в Windows и UNIX.
· Каталоги - системные файлы, обеспечивающи
Атрибуты файла
Основные атрибуты файла:
· Защита - кто, и каким образом может получить доступ к файлу (пользователи, группы, чтение/запись). Используются в Windows и UNIX.
· Пароль - пароль к фа
Файлы, отображаемые на адресное пространство памяти
Иногда удобно файл отобразить в памяти (не надо использовать системные вызовы ввода-вывода для работы с файлом), и работать с памятью, а потом записать измененный файл на диск.
При использ
Одноуровневые каталоговые системы
В этой системе все файлы содержатся в одном каталоге.
Од
Имя пути
Для организации дерева каталогов нужен некоторый способ указания файла.
Два основных метода указания файла:
· абсолютное имя пути - указывает путь от корневого ка
Реализация каталогов
При открытии файла используется имя пути, чтобы найти запись в каталоге. Запись в каталоге указывает на адреса блоков диска.
В зависимости от системы это может быть:
· дисковый ад
Реализация длинных имен файлов
Раньше операционные системы использовали короткие имена файлов, MS-DOS до 8 символов, в UNIX Version 7 до 14 символов. Теперь используются более длинные имена файлов (до 255 символов и больше).
Ускорение поиска файлов
Если каталог очень большой (несколько тысяч файлов), последовательное чтение каталога мало эффективно.
1 Использование хэш-таблицы для ускорения поиска файла.
А - совместно используемый файл
Такая файловая система называется ориентированный ациклический граф(DAG, Directed Acyclic Graph).
Возникает проблема, если дисковые адреса содержатся в самих каталоговых з
Размер блока
Если принято решение хранить файл в блоках, то возникает вопрос о размере этих блоков.
Есть две крайности:
· Большие блоки - например, 1Мбайт, то файл даже 1 байт займет целый бло
Учет свободных блоков
Основные два способа учета свободных блоков:
· Связной список блоков диска, в каждом блоке содержится номеров свободных блоков столько, сколько вмешается в блок. Часто для списка резервир
Дисковые квоты
Чтобы ограничить пользователя, существует механизм квот.
Два вида лимитов:
· Жесткие - превышены быть не могут
· Гибкие - могут быть превышены, но при выходе пользователь
Резервное копирование
Случаи, для которых необходимо резервное копирование:
· Аварийные ситуации, приводящие к потере данных на диске
· Случайное удаление или программная порча файлов
Основные
Непротиворечивость файловой системы
Если в системе произойдет сбой, прежде чем модифицированный блок будет записан, файловая система может попасть в противоречивое состояние. Особенно если это блок i-узла, каталога и
Кэширование
Блочный кэш (буферный кэш) - набор блоков хранящиеся в памяти, но логически принадлежащие диску.
Перехватываются все запросы чтения к диску, и проверяется наличие требуемы
Файловая система ISO 9660
Более подробная информация - http://ru.wikipedia.org/wiki/ISO_9660 Стандарт принят в 1988 г.
По стандарту диски могут быть разбиты на логические разделы, но мы будем рассматривать диски с
Каталоговая запись стандарта ISO 9660
Расположение файла - номер начального блока, т.к. блоки располагаются последовательно.
L - длина имени файла в байтах
Имя файла - 8 символов, 3 символа расширения (из-за совместим
Рок-ридж расширения для UNIX
Это расширение было создано, чтобы файловая система UNIX была представлена на CD-ROM.
Для этого используется поле System use.
Расширения содержат следующие поля:
1. PX -
Файловая система UDF (Universal Disk Format)
Более подробная информация - http://ru.wikipedia.org/wiki/Universal_Disk_Format
Изначально созданная для DVD, с версии 1.50 добавили поддержку CD-RW и CD-R.
Сейчас последняя верси
Файловая система MS-DOS (FAT-12,16,32)
В первых версиях был только один каталог (MS-DOS 1.0).
С версии MS-DOS 2.0 применили иерархическую структуру.
Каталоговые записи, фиксированны по 32 байта.
Имена файлов -
Они будут задействованы в Windows 98
Атрибут архивныйнужен для программ резервного копирования, по нему они определяют надо копировать файл или нет.
Поле время (16 разрядов) разбивается на три подполя:
Расширение Windows 98 для FAT-32
Для расширения были задействованы 10 свободных бит.
Форм
Основная надстройка над FAT-32, это длинные имена файлов
Для каждого файла стали присваивать два имени:
1. Короткое 8+3 для совместимости с MS-DOS
2. Длинное имя файла, в формате Unicode
Доступ к файлу может быть получен по люб
Формат каталогов записи с фрагментом длинного имени файла в Windows 98
Поле "Атрибуты" позволяет отличить фрагмент длинного имени (значение 0х0F) от дескриптора файла. Старые программы MS-DOS каталоговые записи со значением поля атрибутов 0х0
Файловая система NTFS
Файловая система NTFS была разработана для Windows NT.
Особенности:
· 64-разрядные адреса, т.е. теоретически может поддерживать 264*216 байт (1 208 925 819 M
Поиск файла по имени
При создании файла, программа обращается к библиотечной процедуре
CreateFile("C:windowsreadmy.txt", ...)
Этот вызов попадает в совместно используемую библиотеку уровня п
Сжатие файлов
Если файл помечен как сжатый, то система автоматически сжимает при записи, а при чтении происходит декомпрессия.
Алгоритм работы:
1. Берутся для изучения первые 16 блоков файла (н
Шифрование файлов
Любую информацию, если она не зашифрована, можно прочитать, получив доступ. Поэтому самая надежная защита информации от несанкционированного доступа - шифрование.
Даже если у вас украдут в
Файловая система UNIX V7
Хотя это старая файловая система основные элементы используются и современных UNIX системах.
Особенности:
· Имена файлов ограничены 14 символами ASCII, кроме косой черты "/&q
Структура i-узела
Поле
Байты
Описание
Mode
Тип файла, биты защиты, биты setuid и setgid
Nlinks
Создание и работа с файлом
fd=creat("abc", mode) - Пример создания файла abc с режимом защиты, указанном в переменной mode(какие пользователи имеют доступ). Используется системный
Файловая система BSD
Основу составляет классическая файловая система UNIX.
Особенности (отличие от предыдущей системы):
· Увеличена длина имени файла до 255 символов
· Реорганизованы каталоги
Размещение файловой системы EXT2 на диске
Другие особенности:
· Размер блока 1 Кбайт
· Размер каждого i-узла 128 байт.
· i-узел содержит 12 прямых и 3 косвенных адресов, длина адреса в i-узле стала 4 байта, что о
Файловая система EXT3
В отличие от EXT2, EXT3 является журналируемой файловой системой, т.е. не попадет в противоречивое состояние после сбоев. Но она полностью совместима с EXT2.
Файловая система XFS
XFS - журналируемая файловая система разработанная Silicon Graphics, но сейчас выпущенная открытым кодом (open source).
Официальная информация на http://oss.sgi.com/projec
Файловая система RFS
RFS (RaiserFS)- журналируемая файловая система разработанная Namesys.
Официальная информация на RaiserFS
Некоторые особенности:
· Более эффективно работа
Файловая система JFS
JFS (Journaled File System) -журналируемая файловая система разработанная IBM для ОС AIX, но сейчас выпущенная как открытый код.
Официальная информация на Journaled File S
Структура уровней файловой системы NFS
VFS (Virtual File System) - виртуальная файловая система. Необходима для управления таблицей открытых файлов.
Записи для каждого открытого файла называются v-узлам