Структура и функции драйверов

Важными компонентами ПО являются драйверы – программные модули, содержащие процедуры работы с устройствами. Необходимость выделения драйверов в отдельные модули: устройство определенного назначения может иметь самые разные реализации. Драйвер хорошо знает программную модель и особенности работы со своим устройством. У драйверов несколько функций. Наиболее очевидная функция любого драйвера состоит в обработке абстрактных запросов чтения и записи от независимого от устройств программного обеспечения, которое расположено над ним. Кроме этого драйверы должны выполнять некоторые другие функции, например драйвер при необходимости должен инициализировать устройство. Ему также может понадобиться управлять регистрацией событий и управлять энергосбережением. Типичный драйвер начинает работу с проверки входных параметров. Если они не удовлетворяют определенным требованиям, драйвер возвращает ошибку. В противном случае драйвер преобразует абстрактные требования в конкретные. Например, дисковый драйвер может преобразовать линейный номер блока в физические координаты (головка-дорожка-сектор). Затем драйвер может проверить, не используется ли данное устройство в данное время. Если оно занято, запрос может быть поставлен в очередь. Если свободно, проверяется аппаратный статус устройства, чтобы определить может ли запрос быть обслужен немедленно.

Также может оказаться необходимым включить устройство или запустить двигатель прежде чем начать процедуру переноса данных. Как только устройство включено и готово, можно начать процесс управления им. Управление подразумевает выдачу серии команд. Именно в драйвере определяется последовательность команд, после чего драйвер начинает записывать команды в регистры контроллера устройства.

После записи каждой команды в контроллер необходимо проверить, принял ли контроллер и готов ли принять следующую. Некоторые контроллеры способны принимать связанные списки команд, находящиеся в памяти. Они способны сами считывать эти списки при помощи ОС.

После того, как драйвер передал все команды контроллеру, считывание может развиваться двумя способами. Часто драйвер должен ждать, пока контроллер не выполнит для него работу, поэтому он блокируется до тех пор, пока прерывание устройства его не разблокирует. В другом случае, операция завершается без задержек, и драйверу не нужно блокироваться.

Драйвер возвращает информацию о своем состоянии и для вызывающей программы. Если в очереди находятся другие запросы, один из них может быть выбран и запущен. В противном случае, драйвер блокируется в ожидании следующего запроса. Драйверам не разрешается обращаться к системным вызовам, но им часто бывает необходимо взаимодействовать с основным ядром. Обычно разрешается обращение к некоторым системным процедурам. Например, драйверы обращаются к системным процедурам для выделения им аппаратно-фиксированных страниц памяти в качестве буфера. А также затем, чтобы вернуть эти станицы обратно ядру. Кроме того, драйверы пользуются вызовами, управляющими таймерами, контроллерами прерываний, контроллерами DMA и тому подобное.

БУФЕРИЗАЦИЯ ВВОДА-ВЫВОДА

Одна из возможных стратегий обработки поступающих символов от входных устройств состоит в обращении процессов пользователя к системному вызову <read> и блокировки в ожидании отдельного символа. Каждый прибывающий символ выглядит как прерывание. Процедура обработки прерываний передает символ пользовательскому процессу и разблокирует его. Поместив куда-нибудь полученный символ, процесс читает следующий и опять блокируется.

Недостаток:процесс пользователя должен быть активизирован при приближении каждого символа, что неэффективно.

Улучшенный вариант решения задачи:пользовательский процесс предоставляет буфер размером в n символов в пространстве пользователя, после чего выполняет чтение n символов.

Процедура обработки прерываний помещает приходящие символы в буфер, пока он не заполнится. Затем активизируется процесс пользователя. Но у такого подхода есть и недостаток: если слишком много процессов начнут фиксировать свои страницы в памяти, то <pull> ( общее количество) доступных страниц уменьшится, в результате чего уменьшится производительность.

Третий подход состоит в создании буфера, в который обработчик прерываний будет помещать поступающие символы в ядро. Когда этот буфер наполнится, извлекается страница с буфером пользователя и содержание буфера помещается туда за одну операцию. Такая схема намного эффективнее.

36 ЮНИКС подобные ОС

Операционная система ЮНИКС обладает простым, но очень мощным командным языком и независимой от устройств файловой системой. При разработке этой системы были реализованы 4 цели: 1-стремление сохранить простоту и обойтись минимальным количеством функций, 2-общность(одни и те же методы и механизмы должны были использоваться во многих случаях), 3-решение сложных задач, путем комбинирования существующих небольших программ, а не разрабатывая их заново, 4-большие программные системы можно создавать путем композиции имеющихся небольших программ.

37 структура ядра ОС ЮНИКС

Центральной частью ЮНИКС систем является ядро kernel. Оно состоит из большого количества модулей и с точки зрения архитектуры считается монолитным. В ядре всегда можно выделить 3 основные подсистемы: управление процессами, управление файлами, управление операциями ввода-вывода между центральной частью и периферийными устройствами. Ядро ЮНИКСа идентифицирует каждого пользователя по его идентификатору(UID), уникальному целому значению, присваиваемому пользователю при регистрации в системе.

38 загрузка ЮНИКС подобной ОС

После входа(регистрации) пользователя в систему для него запускается 1 из командных интерпретаторов. Общее название для любого командного интерпретатора ОС ЮНИКС – оболочка, поскольку любой интерпретатор представляет внешнюю оболочку ядра системы. По умолчанию в системах линукс командным интерпретатором является bash. Вызванный командный интерпретатор выдает приглашение на ввод пользователем командной строки, которая может содержать простую команду, конвейер команд или последовательность команд. После выполнения очередной командной строки и выдачи на экран терминала или в файл соответствующих результатов интерпретатор команд снова выдает приглашение на ввод командной строки, и так до тех пор, пока пользователь не завершит свой сеанс и не выйдет из системы.

39 процессы в системе ЮНИКС

Процесс в системах ЮНИКС – это процесс, в классическом понимании этого термина, то есть это программа, выполняемая в собственном виртуальном адресном пространстве.

Когда пользователь входит в систему, автоматически создается процесс, в котором выполняется программа командного интерпретатора. Если командному интерпретатору встречается команда, соответствующая выполняемому файлу, то он создает новый процесс и запускает в нем соответствующую программу, начиная с функции main. Эта запущенная программа, в свою очередь, может создать процесс и запустить в нем другую программу(та тоже должна содержать функцию main) и так далее. Для образования нового процесса и запуска в нем программы используются 2 системных вызова API – fork() & exec(имя_выполняемого_файла). Системный вызов fork() приводит к созданию нового адресного пространства , состояние которого абсолютно идентично состоянию адресного пространства основного процесса(то есть в нем содержатся те же программы и данные). Для дочернего процесса заводятся копии всех сегментов данных.

Процесс – объект, создаваемый в результате выполнения функции fork(). Каждый процесс имеет одного родителя, но может породить много процессов. Начальный процесс является особенным процессом, который создается в результате загрузки системы. После порождения нового процесса с идентификатором 1 начальный процесс становится процессом подкачки и реализует механизм виртуальной памяти.

40 управление процессами ядром ЮНИКС

Процесс может выполняться в одном из двух состояний, пользовательском или системном. В пользовательском состоянии процесс выполняет пользовательскую программу и имеет доступ к пользовательскому сегменту данных.

В системном состоянии процесс выполняет программы ядра и имеет доступ к системному сегменту данных. Когда пользовательскому процессу требуется выполнить системную функцию, он делает системный вызов. Происходит вызов ядра системы как подпрограммы. С момента системного вызова процесс считается системным. Пользовательский и системный процессы являются двумя фазами одного и того же процесса, но они никогда не пересекаются между собой. Каждая фаза пользуется своим собственным стеком. Стек задачи содержит аргументы, локальные переменные и другую информацию относительно функций, выполняемых в режиме задачи.

41 системные вызовы управления процессами

В системном состоянии процесс выполняет программы ядра и имеет доступ к системному сегменту данных. Когда пользовательскому процессу требуется выполнить системную функцию, он делает системный вызов. Происходит вызов ядра системы как подпрограммы. С момента системного вызова процесс считается системным. Пользовательский и системный процессы являются двумя фазами одного и того же процесса, но они никогда не пересекаются между собой. Каждая фаза пользуется своим собственным стеком. Стек задачи содержит аргументы, локальные переменные и другую информацию относительно функций, выполняемых в режиме задачи.

42 системные вызовы управления потоками

Сюда ХЗ!

43 сигналы

Если рассматривать выполнение процесса на виртуальном компьютере, который предоставляется каждому пользователю, то в такой системе должна существовать система прерываний, отвечающая стандартным требованиям(обработка исключительных ситуаций, средства обработки внешних и внутренних прерываний, средства управления системой прерываний – маскирование и демаскирование). Всем этим требованиям в ЮНИКСе отвечает механизм сигналов, который позволяет не только воспринимать и обрабатывать сигналы, но и порождать их и посылать на другие процессы. Сигналы могут быть синхронными, когда инициатор сигнала – сам процесс, и асинхронным, когда инициатор сигнала – интерактивный пользователь, сидящий за терминалом. Источником асинхронных сигналов может быть также ядро, когда оно контролирует определенные состояния аппаратуры, рассматриваемые как ошибочные. Сигналы – простейшая форма взаимодействия между процессами. Они используются для передачи от одного процесса другому или от ядра ОС какому-либо процессу уведомления о возникновении определенного события.

44 файловая система и иерархия данных

Система управления файлами является основной в абсолютном большинстве современных операционных систем. Существует большое количество файловых систем, созданных для разных устройств внешней памяти и разных ОС. В них используются разные принципы размещения данных на носителе. Файл – именованный набор данных, организованных в виде совокупности записей одинаковой структуры. Для управления этими данными создаются соответствующие файловые системы. Файловая система дает возможность иметь дело с логическим уровнем структуры данных и операций, выполняемых над данными в процессе их обработки. Файловая система определяет способ организации данных на диске или на каком-нибудь ином носителе. Специальное системное программное обеспечение, реализующее работу с файлами по принятым спецификациям файловой системы, часто называют системой управления файлами. Системы управления файлами отвечают за создание, уничтожение, организацию, чтение, запись, модификацию и перемещение файловой информации, а также за управление доступом к файлам и за управление ресурсами, которые используются файлами. Благодаря системам управления файлами пользователям предоставляются следующие возможности: защита файлов от несанкционированного доступа; работа с не дисковыми периферийными устройствами как с файлами; обмен данными между файлами, между устройствами, между файлом и устройством (и наоборот); создание, удаление, переименование именованных наборов данных (файлов) из своих программ или посредством специальных управляющих программ, реализующих функции интерфейса пользователя с его данными и активно использующих систему управления файлами.

45 файловая система FAT

Файловая система FAT (File Allocation Table – таблица размещения файлов) получила свое название благодаря простой таблице, в которой указываются: свободные области дискового пространства, непосредственно адресуемые участки логического диска, отведенные для размещения в них файлов или их фрагментов, дефектные области диска. В файловой системе FAT дисковое пространство любого логического диска делится на две области: системную область и область данных. Системная область логического диска создается и инициализируется при форматировании, а в последующем обновляется при работе с файловой структурой. Область данных логического диска содержит обычные файлы и файлы-каталоги; эти объекты используют иерархию, подчиненную корневому каталогу(специальная системная информационная структура). Элемент каталога описывает файловый объект, который может быть либо обычным файлом, либо файлом-каталогом. Область данных, в отличии? от системной области, доступна через пользовательский интерфейс ОС. Системная область состоит из следующих компонентов: загрузочная запись (Boot Record, BR), зарезервированные секторы (Reserved Sectors, ResSec), таблицы размещения файлов (File Allocation Table, FAT), корневой каталог (Root Directory, RDir).

Наши рекомендации