АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Информатика. В модели процесса все функционирующее на компьютере ПО организовано в виде набора последовательных процессов

Читайте также:
  1. Значение изучения теоретической информатики в подготовке социолога информатика
  2. Информатика
  3. ИНФОРМАТИКА
  4. Информатика
  5. Информатика
  6. Информатика
  7. Информатика
  8. ИНФОРМАТИКА
  9. Информатика
  10. Информатика как наука и учебная дисциплина
  11. Информатика _ _ _

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

Операционной системе нужен способ создания и прерывания процессов по мере необходимости. Обычно при загрузке ОС созда­ются несколько процессов. Некоторые из них обеспечивают взаимо­действие с пользователем и выполняют заданную работу. Остальные процессы являются фоновыми. Они не связаны с конкретными пользователями, но выполняют особые функции. Например, один фоновый процесс может обеспечивать вывод на печать, другой мо­жет обрабатывать запросы к теЪ-страницам.

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

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

Процесс является независимым объектом со своим счетчиком


команд и внутренним состоянием, однако существует необходимость взаимодействия с другими процессами. Например, выходные данные одного процесса могут служить входными данными для другого про­цесса.

Модель процессов упрощает представление о внутреннем пове­дении системы. Некоторые процессы запускают программы, выпол­няющие команды, введенные с клавиатуры пользователем. Другие процессы являются частью системы и обрабатывают такие задачи, как выполнение запросов файловой службы, управление запуском диска или магнитного накопителя.

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

Процессы

 

    • • • п-2 п-1
Планировщик

Рис. 3.4. Нижний уровень ОС, отвечающий за прерывание и планирование

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

Потоки

В обычных ОС процесс определяется соответствующим адресным пространством и одиночным управляющим потоком. Но часто встре­чаются ситуации, когда в одном адресном пространстве предпочти-


тельно иметь несколько квазипараллельных управляющих процессов.

Модель процесса базируется на двух независимых концепциях: группировании ресурсов и выполнении программы. Когда их разделяют, появляется понятие потока.

С одной стороны, процесс можно рассматривать как способ объединения родственных ресурсов в одну группу У процесса есть адресное пространство, содержащее программу, данные и другие ре­сурсы. Ресурсами являются открытые файлы, дочерние процессы, аварийные необработанные сообщения, обработчики сигналов, учет­ная информация и многое другое. Гораздо проще управлять ресурса­ми, объединив их в форме процесса.

С другой стороны, процесс можно рассматривать как поток ис­полняемых команд. У потока есть счетчик команд, отслеживающий порядок выполнения действий. У него есть регистры, в которых хра­нятся текущие переменные. У него есть стек, содержащий протокол выполнения процесса, где на каждую вызванную процедуру отведе­на отдельная структура. Хотя поток протекает внутри процесса, сле­дует различать концепции потока и процесса. Процессы использу­ются для группирования ресурсов, а потоки являются объектами, поочередно исполняющимися на ЦП.

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

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


быстродействием, равным одной трети быстродействия реального процессора.

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

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

В пользу потоков работает еще один аргумент — легкость их со­здания и уничтожения, так как с потоком не связаны никакие ре­сурсы. В большинстве систем на создание потока уходит примерно в 100 раз меньше времени, чем на создание процесса. Это свойство особенно полезно при необходимости динамического и быстрого изменения числа потоков.

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

Концепция потоков полезна также в системах с несколькими процессорами, где возможен настоящий параллелизм.

Необходимость потоков проще продемонстрировать на конкрет­ном примере. Рассмотрим текстовый процессор, который выводит на экран монитора текст в том виде, в котором он будет напечатан. Допустим, что пользователь пишет книгу. С точки зрения автора про­ще хранить книгу в одном файле, чтобы легче было искать отдель­ные фрагменты, редактировать и т.п.

Представим, что пользователь удалил предложение на первой странице, а затем исправил предложение на 350-й странице докумен­та, в котором 400 страниц. Он дает команду программе перейти на


страницу с номером 350. Текстовому процессору придется перефор­матировать весь документ вплоть до 350-й страницы, поскольку он не знает, где начинается эта страница. Это может занять довольно много времени и вряд ли обрадует пользователя.

В данном случае помогут потоки. Пусть текстовый процессор на­писан в виде двухпоточной программы. Один поток взаимодейству­ет с пользователем, а второй переформатирует документ в фоновом режиме. Как только предложение на первой странице было удалено, интерактивный поток дает команду фоновому потоку переформати­ровать весь документ. В то время как первый поток продолжает вы­полнять команды с клавиатуры или мыши, второй поток быстро пе­реформатирует документ. Может случиться, что форматирование будет закончено раньше, чем пользователь захочет перейти к 350-й странице, и тогда команда будет выполнена мгновенно. Можно до­бавить третий поток. Большинство текстовых процессоров автома­тически сохраняет редактируемый текст один раз в несколько минут (время устанавливается пользователем), чтобы в случае аварийного завершения программы, отказа системы или перебоев с питанием пользователь не лишился результатов своей работы. Этим может за­ниматься третий поток, не отвлекая два оставшихся.

3,2.5. Управление памятью

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

Память в компьютере имеет иерархическую структуру. Неболь­шая ее часть представляет собой очень быструю энергозависимую (теряющую информацию при выключении питания) кэш-память. Компьютеры обладают также десятками мегабайт энергозависимой оперативной памяти ОЗУ (КАМ, Капйот Асс姧 Метогу — память с произвольным доступом) и десятками или сотнями гигабайт медлен­ного энергонезависимого пространства на жестком диске. Одной из задач ОС является координация использования всех этих составля­ющих памяти.

Часть операционной системы, отвечающая за управление памя­тью, называется модулем управления памятью или менеджером памяти. Менеджер следит за тем, какая часть памяти используется в данный


момент, выделяет память процессам и по их завершении освобождает ресурсы, управляет обменом данных между ОЗУ и диском.

Системы управления памятью делят на два класса. К первому классу относятся системы, перемещающие процессы между опера­тивной памятью и диском во время их выполнения, т.е. осуществля­ющие подкачку процессов целиком (§\уаррт§) или постранично (ра§т§). Обычный и постраничный варианты подкачки являются искусственными процессами, вызванными отсутствием достаточно­го количества оперативной памяти для одновременного хранения всех программ. Ко второму — те, которые этого не делают. Второй класс систем проще. Поскольку ПО растет еще быстрее, чем память, то, вероятно, потребность в эффективном управлении памятью бу­дет существовать всегда. В 80-е гг. использовали системы разделения времени для работы десятков пользователей на машинах УАХ с объе­мом памяти 4 Мбайт. Сейчас рекомендуется для индивидуальной работы в системе \Утс1о>У5 2000 устанавливать на компьютер не ме­нее 64 Мбайт оперативной памяти. Дальнейшее развитие в сторону мультимедийных систем накладывает еще большие требования на размер оперативной памяти.

Самая простая схема управления памятью — однозадачная систе­ма без подкачки на диск — заключается в том, что в каждый момент времени работает только одна программа, и память разделяется меж­ду программами и операционной системой. Когда система органи­зована таким образом, в каждый конкретный момент времени мо­жет работать только один процесс. Как только пользователь набирает команду, ОС копирует запрашиваемую программу с диска в память и выполняет ее, а после окончания процесса выводит на экран сим­вол приглашения и ждет новой команды. Получив команду, она за­гружает новую программу в память, записывая ее поверх предыду­щей. Так работают компьютеры с операционной системой М8-ОО8.

Большинство современных систем позволяет одновременный запуск нескольких процессов. Наличие нескольких процессов, рабо­тающих в один и тот же момент времени, означает, что когда один процесс приостановлен в ожидании завершения операции ввода-вы­вода, другой может использовать центральный процессор. Таким об­разом, многозадачность увеличивает загрузку процессора. На сетевых серверах всегда одновременно работают несколько процессов (для разных клиентов), но и большинство клиентских машин в наши дни


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

При использовании многозадачности повышается эффективность загрузки ЦП. Если средний процесс выполняет вычисления только 20 % от времени, которое он находится в памяти, то при обработке пяти процессов ЦП должен быть загружен полностью. Реальная же ситуация предполагает, что все пять процессов никогда не ожидают завершения операции ввода-вывода одновременно.

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


чения постоянной занятости ЦП, причин для усложнения алгорит­ма нет.

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

Существуют два основных способа управления памятью, зави­сящие частично от доступного аппаратного обеспечения. Самая про­стая стратегия, называемая свопингом (здуарршё) или подкачкой, со­стоит в том, что каждый процесс полностью переносится в память, работает некоторое время и затем целиком возвращается на диск. Другая стратегия, носящая название виртуальной памяти, позволяет программам работать даже тогда, когда они только частично нахо­дятся в оперативной памяти.

Работа системы свопинга заключается в следующем. Пусть име­ются 4 процесса — А, В, С, О. На начальной стадии в памяти нахо­дится только процесс А. Затем с течением времени создаются или загружаются с диска последовательно процессы В и С. В следующий момент процесс А выгружается на диск. Затем появляется процесс В, а процесс В завершается. Наконец, процесс А снова возвращает­ся в память. Распределение памяти изменяется по мере того, как процессы поступают в память и покидают ее. Так как теперь про­цесс А имеет другое размещение в памяти, его адреса должны быть перенастроены или программно во время загрузки в память, или ап-паратно во время выполнения программы.

Основная разница между фиксированными и изменяющимися разделами состоит в том, что во втором случае количество, размеще­ние и размер разделов изменяются динамически по мере поступле­ния и завершения процессов. Здесь нет ограничений, связанных с количеством разделов и их объемом. Это улучшает использование памяти, но значительно усложняет операции размещения процессов, освобождения памяти и отслеживание происходящих изменений.

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


остальные — на диске. Например, программа размером 16 Мбайт сможет работать на машине с 4 Мбайт памяти, если тщательно про­думать, какие 4 Мбайт должны храниться в памяти в каждый момент времени. При этом части программы, находящиеся на диске и в па­мяти, будут меняться местами по мере необходимости.

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

3.2.6. ВВоЭ-ВыВоЭ

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

Устройства ввода-вывода можно разделить на две категории: блочные устройства и символьные устройства. Блочные устройства хранят информацию в виде блоков фиксированного размера, причем у каждого блока имеется свой адрес. Размеры блоков колеблются от 521 до 32 768 байт. Важное свойство блочного устройства состоит в том, что каждый его блок может быть прочитан независимо от ос­тальных блоков. Наиболее распространенными блочными устрой­ствами являются диски.

Другой тип устройств ввода-вывода — символьные устройства. Символьное устройство принимает или предоставляет поток неструк­турированных символов. Оно не является адресуемым и не выпол­няет операцию поиска. Принтеры, сетевые адаптеры, мыши и боль­шинство других устройств, не похожих на диски, можно считать символьными устройствами.

Такая классификация является условной. Некоторые устройства не попадают ни в одну из категорий. Например, часы не являются


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

Устройства ввода-вывода обычно состоят из механической и электронной частей. Механический компонент находится в самом устройстве. Электронный компонент устройства называется контрол­лером или адаптером. В современных компьютерах контроллеры встраиваются в материнскую плату или располагаются на самом ус­тройстве ввода-вывода. Многие контроллеры способны управлять несколькими идентичными устройствами. Если интерфейс между контроллером и устройством является официальным стандартом АК81, ШЕЕ или 18О либо фактическим стандартом, то различные производители могут выпускать отдельно устройства и контроллеры, удовлетворяющие данному интерфейсу. Так производятся жесткие диски, соответствующие интерфейсу ШЕ (1п1е§га1ес1 Впуе Е1ес1гошс8 — встроенный интерфейс накопителей) или 8С81 (8та11 Сотри1ег 8уз1ет 1п1егГасе — системный интерфейс малых компьютеров).

Часто интерфейс между устройством и контроллером является интерфейсом низкого уровня. С диска в контроллер поступает по­следовательный поток битов, начинающийся с заголовка сектора (преамбулы), за которым следует 4096 бит в секторе, и контрольная сумма, называемая кодом исправления ошибок ЕСС (Еггог СоггесИщ* Соде). Заголовок сектора записывается на диск во время формати­рования. Он содержит номера цилиндра и сектора, размер сектора, коды синхронизации и другую служебную информацию.

Работа контроллера заключается в конвертировании последова­тельного потока битов в блок байтов и коррекцию ошибок. Обычно байтовый блок накапливается в буфере контроллера. Затем проверя­ется контрольная сумма блока, и если она совпадает с указанной в заголовке сектора, то блок считается принятым без ошибок. После этого блок копируется в оперативную память.

Контроллер монитора (видеоадаптер) работает на таком же низ-


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

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

Тесно связан с концепцией независимости от устройств прин­цип единообразного именования. Имя файла или устройства должно быть просто текстовой строкой или целым числом. Оно никак не должно зависеть от физического устройства.

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

Одним из ключевых вопросов является способ переноса дан-


ных — синхронный (блокирующий) или асинхронный (управляемый прерываниями). Большинство операций ввода-вывода на физическом уровне являются асинхронными — ЦП запускает перенос данных и переключается на другой процесс, пока не придет прерывание.

Еще одним аспектом ПО ввода-вывода является буферизация. Часто данные, поступающие с устройства, не могут быть сохранены там, куда они направлены. Например, когда пакет приходит по сети, ОС не знает, куда его поместить, пока не будет проанализировано его содержимое. Буферизация предполагает копирование данных в больших количествах, что часто является основным фактором сни­жения производительности операций ввода-вывода.

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

Существуют три различных способа осуществления операций ввода-вывода. Простейший вид ввода-вывода состоит в том, что всю работу выполняет центральный процессор. Этот метод называется программным вводом-выводом. ЦП вводит или выводит каждый байт или слово, находясь в цикле ожидания готовности устройства вво­да-вывода. Второй способ представляет собой управляемый прерыва­ниями ввод-вывод, при котором ЦП начинает передачу ввода-выво­да для символа или слова, после чего переключается на другой процесс, пока прерывание от устройства не сообщит ему об оконча­нии операции ввода-вывода. Третий способ заключается в исполь­зовании прямого доступа к памяти (ВМА — О1гес1 Метогу Ассе88), при котором отдельная микросхема управляет переносом целого бло­ка данных и инициирует прерывание только после окончания опе­рации переноса блока.


3.2,7, ПройВеры устройств

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

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

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

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


Программа пользователя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

     
Остальная часть операционной системы
    I    
Драйвер принтера Драйвер видеокарты Драйвер СВ-КОМ
I I  
*        
  Контроллер принтера Контроллер видеоадаптера Контроллер СО-ЯОМ    

Пространство пользователя

Пространство ядра

Аппаратура


 


Принтер


 

Видеоадаптер   СО-КОМ

Устройства


Рис. 3.5. Логическое расположение драйверов устройств

полагаются под остальной частью ОС (рис. 3.5).

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

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

Некоторые ОС представляют собой двоичную программу, содер­жащую в себе все необходимые драйверы. Такая схема в течение многих лет была нормой для ОС 1Ж1Х, так как они предназнача-


лись для работы в компьютерных центрах, где устройства ввода-вы­вода менялись редко. При добавлении нового устройства системный администратор просто перекомпилировал ядро с новым драйвером, получая новый двоичный модуль.

С появлением персональных компьютеров с их огромным раз­нообразием устройств ввода-вывода такая модель перестала работать. Далеко не все пользователи могли самостоятельно перекомпилиро­вать и собрать ядро даже при наличии исходных текстов или объек­тных модулей. Поэтому операционные системы, начиная с М5-ВО8, перешли к модели динамической подгрузки драйверов. Различные системы выполняют эту процедуру по-разному.

Драйвер устройства выполняет несколько функций:

1) обработку абстрактных запросов чтения и записи независи­
мого от устройств и расположенного над ними программного обес­
печения;

2) инициализацию устройства;

3) управление энергопотреблением устройства и регистрацией
событий;

4) проверку входных параметров. Если они не удовлетворяют оп­
ределенным критериям, драйвер возвращает ошибку В противном
случае драйвер преобразует абстрактные термины в конкретные. На­
пример, дисковый драйвер может преобразовывать линейный номер
блока в номера головки, дорожки и секторы;

5) проверку использования устройства в данный момент. Если ус­
тройство занято, запрос может быть поставлен в очередь. Если уст­
ройство свободно, проверяется его состояние. Возможно, требуется
включить устройство или запустить двигатель, прежде чем начнется
перенос данных. Как только устройство готово, может начинаться
собственно управление устройством.

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

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


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

По завершении выполнения операции драйвер должен прове­рить, завершилась ли операция без ошибок. Если все в порядке, драйверу, возможно, придется передать данные (например, прочитан­ный блок) независимому от устройств программному обеспечению. Затем драйвер возвращает некоторую информацию вызывающей про­грамме о завершении операции. Если в очереди находились другие запросы, один из них теперь может быть выбран и запущен, в про­тивном случае драйвер блокируется в ожидании следующего за­проса.

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

Как сделать так, чтобы все устройства ввода-вывода и драйверы выглядели примерно одинаково? Если диски, принтеры, клавиату­ры и т. д. требуют различных интерфейсов, то при появлении ново­го устройства будет требоваться переделка операционной системы, что очень неудобно. Этот вопрос связан с интерфейсом между драй­верами устройств и операционной системой. Функции драйверов, доступные системе, отличаются от драйвера к драйверу. Это означа­ет, что функции ядра, необходимые для драйвера, тоже различают­ся, поэтому взаимодействие с каждым новым драйвером требует больших усилий программистов.

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


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

3,2.8. Файловые системы

Всем компьютерным приложениям нужно хранить и получать информацию. Наиболее удобной для доступа к долговременным ус­тройствам хранения информации оказалась система, при которой пользователь назначает для той или иной совокупности данных не­которое имя. Определенный участок диска, занятый информацией, имеющей собственное имя, называется файлом. Часть ОС, работаю­щая с файлами и обеспечивающая хранение данных на дисках и до­ступ к ним, называется файловой системой (ФС).

С точки зрения пользователя наиболее важным аспектом фай­ловой системы является ее внешнее представление, т.е. именование и защита файлов, операции с файлами и т.д. Компьютеру безразлич­но, какое имя имеет любая программа или документ, так как он по­лучает от ОС инструкцию подобно такой: «прочитай столько-то байт с такого-то места на диске». При этом пользователь не обязан знать, в каком физическом порядке и где именно находятся его данные. Ему достаточно потребовать от ОС прочитать документ или загрузить не­обходимую программу.

Одной из важнейших характеристик ОС, помимо управления памятью, ресурсами компьютера и задачами, является поддержка файловой системы — основного хранилища системной и пользова­тельской информации.

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


Точные правила именования файлов варьируются от системы к системе, но все современные операционные системы поддерживают использование в качестве имен файлов 8-символьные текстовые стро­ки. Так, книга, страница, карандаш являются допустимыми имена­ми файлов. Часто в именах файлов также разрешается использова­ние цифр и специальных символов, поэтому могут применяться и такие имена файлов, как 2 (лучше _2), срочный! и Рис.2-14. Многие файловые системы поддерживают имена файлов длиной до 255 сим­волов.

В некоторых ФС различаются прописные и строчные символы, в других, таких как М8-ОО8, нет. Операционные системы \Ушс1о^8 95 и ХУтдоте 98 используют файловую систему М8-ВО8 и наследуют многие ее свойства, включая именование файлов. Операционные системы \Ут<1о\У5 МТ и \Утс1о\У8 2000 также поддерживают файловую систему М8-ОО8 и наследуют ее свойства. Однако у них имеется своя файловая система КТР8, обладающая отличными свойствами.

Во многих ОС имя файла может состоять из двух частей, разде­ленных точкой, например рго§г.ехе. Часть имени файла после точки называется расширением файла и обычно означает тип файла. Так, в М8-ОО8 имя файла может содержать от 1 до 8 символов плюс через точку расширение от 0 до 3 символов. В некоторых ОС, например в 1Ж1Х, расширения файлов являются просто соглашениями, и ОС не заставляет пользователя их строго придерживаться. Так, файл Ше.М может быть текстовым файлом, но это скорее памятка пользовате­лю, а не руководство к действию для операционной системы. Сис­тема ДУшс1о\У8, напротив, знает о расширениях файлов и назначает каждому расширению определенное значение. Пользователи или процессы могут регистрировать расширения в ОС, указывая програм­му, создающую данное расширение. При двойном щелчке мышью на имени файла запускается программа, назначенная этому расшире­нию, с именем файла в качестве параметра. Например, двойной щел­чок мышью на имени Ше.с1ос запускает М8 ^огс1, который открыва­ет файл Ше.дос.

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


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

При организации ФС в виде дерева каталогов требуется некото­рый способ указания файла. Для этого обычно используются два различных метода. В первом случае каждому файлу дается абсолют­ное имя пути, состоящее из имен всех каталогов от корневого до того, в котором содержится файл, и имени самого файла. Например, путь \и8ег\аЪс\туШе.с!ос означает, что корневой каталог содержит каталог шег, который, в свою очередь, содержит подкаталог аЪс, где находит­ся файл туШе.ёос. Абсолютные имена путей всегда начинаются от корневого каталога и являются уникальными. Если первым симво­лом имени пути является разделитель, это означает, что путь абсо­лютный. Применяется и относительное имя пути. Оно используется вместе с понятием текущего каталога. Пользователь может назначить один из каталогов текущим рабочим каталогом. В этом случае все имена путей, не начинающиеся с символа разделителя, считаются относительными и отсчитываются относительно текущего каталога. Например, если текущим каталогом является \шег\аЪс, тогда к фай­лу с абсолютным путем \шег\аЪс\туШе.с1ос можно обратиться про­сто как к туШе.с!ос.

Итак, любая файловая система предназначена для хранения ин­формации о физическом размещении частей файла. В ФС существует минимальная единица информации — кластер, размер которого яв­ляется нижним пределом размера записываемой на носитель инфор­мации в рамках ФС. Не следует путать понятие кластера с понятием сектора, который является минимальной единицей информации со стороны аппаратного обеспечения. От ФС требуется четкое выпол­нение следующих действий:

• определение физического расположения частей файла;

• определение наличия свободного места и выделение его для
вновь создаваемых файлов.

Скорость выполнения этих операций напрямую зависит от са­мой ФС. Разные файловые системы используют различные механиз-


мы для реализации указанных задач и имеют свои преимущества и недостатки. ФС типа ГАТ (РПе А11оса1юп ТаЫе) представляют собой образ носителя в миниатюре, где детализация ведется до кластерно­го уровня. Поэтому операция поиска физических координат файла при его большой фрагментации будет затруднительна. ФС РАТ16 за­нимает объем 128 Кб. И это позволяет легко кэшировать ее инфор­мацию. Для РАТ32 эта величина для больших дисков составит ~ 1 Мб, что еще более затрудняет поиск физических координат фрагменти-рованного файла. Еще хуже обстоит дело с поиском свободного ме­ста для больших файлов. Приходится просматривать практически всю таблицу. Быстродействие падает. МТР8 (№\у ТесЪгю1о&у РПе 8у8*ет) использует более компактную форму записи, что ускоряет поиск фай­ла. Операции с выделением места проходят быстрее. Ключевое пре­имущество МТР8 — возможность ограничения доступа к файлам и папкам.

Важный параметр — размер кластера. Больший размер кластера гарантирует более высокую производительность за счет уменьшения самой ФС. Для МТР8 увеличение кластера — болезненная процеду­ра из-за невозможности выполнить дефрагментацию, поскольку большинство таких программ не работает с кластерами, отличными от штатных 4 Кб.

ФойлоВые системы ГГНсго/оРЬ ЧПпс)ош/

Рассмотрим основные файловые системы, поддерживаемые ^тйоте - РАТ16, РАТ32, МТР8, а также системы СОР8 и УОР Каждая файловая система имеет свои достоинства и недостатки.

Файловая система РАТ16 начала свое существование еще во вре­мена, предшествующие М8-ОО8. Она поддерживается всеми ОС Мюгозой для обеспечения совместимости. Ее название РПе АИосаиоп ТаЫе (таблица расположения файлов) отлично отражает физическую организацию файловой системы, к основным характеристикам ко­торой можно отнести то, что максимальный размер поддерживаемо­го тома НОВ или его раздела не превышает 4095 Мбайт. Во времена М8-ОО8 4-гига'байтные НОВ казались несбыточной мечтой (роско­шью были диски 20—40 Мбайт), поэтому такой запас был вполне оправдан.

Том, отформатированный для использования РАТ16, разделяет­ся на кластеры. Размер кластера по умолчанию зависит от размера


тома и может колебаться от 512 б до 64 Кб. Размер кластера может отличаться от значения по умолчанию, но должен иметь одно из зна­чений, предписанных для этой ФС.

Не рекомендуется использовать файловую систему РАТ16 на то­мах больше 511 Мб, так как для небольших файлов дисковое про­странство будет использоваться крайне неэффективно: файл разме­ром 1 байт будет занимать 16, 32 или 64 Кб. Независимо от размера кластера файловая система РАТ16 не поддерживается для томов боль­ше 4 Гбайт.

На рис. 3.6 показано, как организован том при использовании файловой системы РАТ16.


} Загрузочный сектор


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.023 сек.)