Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 34
Текст из файла (страница 34)
В каждом сегменте TSS имеется селектор локальной таблицы деск-128Глава 4. Особенности архитектуры микропроцессоров JSOXRRрипторов (LDT), поэтому при переключении задачи процессор загружает в регистпLDTR новое значение. Это позволяет обратиться к сегментам кода, которые абсолютно не пересекаются с сегментами кода любых других задач, поскольку именнолокальные таблицы дескрипторов обеспечивают эффективную изоляцию виртуальных адресных пространств. Новая задача начинает свое выполнение на уровнепривилегий, определяемом полем RPL нового содержимого регистра CS, котороезагружается из сегмента TSS.
Достоинством этого коммутатора является то, чтоон позволяет сохранить все регистры процессора с помощью механизма переключения задач, тогда как коммутаторы перехвата и прерываний сохраняют толькосодержимое регистров IFLAGS, CS и IP, а сохранение других регистров возлагается на программиста, разрабатывающего соответствующую программу обработкипрерывания.I—Номер прерыванияIDTGDTСегмент TSSДескриптор коммутатора задачиСелекторДескриптор сегмента TSS—•Адрес-ЭРРис. 4 .
1 3 . Схема передачи управления при прерывании с переключением на новую задачуСправедливости ради следует признать, что несмотря на возможности коммутаторазадачи, разработчики современных операционных систем достаточно редко его используют, поскольку переключение на другую задачу требует существен но большихзатрат времени, а полное сохранение всех рабочих регистров часто не требуется. В основном обработку прерываний осуществляют в контексте текущей задачи, так какэто приводит к меньшим накладным расходам и повышает быстродействие системы-Контрольные вопросы и задачи1. Как в реальном режиме работы микропроцессоров i80x86 осуществляется преобразование виртуального адреса в физический?т-рппьные вопросы и задачи1 29Какие механизмы виртуальной памяти используются в защищенном режимеработы микропроцессоров i80x86?Для чего в микропроцессоры i80x86 введен регистр-указатель задачи TR? Какой он разрядности?л Как в микропроцессорах i80x86 реализована поддержка сегментного способаорганизации виртуальной памяти?5 Что понимается под термином «линейный адрес»? Как осуществляется преобразование линейного адреса в физический? Может ли линейный адрес бытьравным физическому?6 Что дало введение двухэтапной страничной трансляции в механизме страничного способа реализации виртуальной памяти? Как разработчики микропроцессора i80386 решили проблему замедления доступа к памяти, которое придвухэтапном преобразовании адресов очень существенно?7.
Что означает термин «плоская модель памяти»? В чем заключаются достоинства (и недостатки, если они есть) этой модели?8. Что дало введение виртуального режима? Как в этом режиме осуществляетсявычисление физического адреса?9. Что имеется в микропроцессорах i80x86 для обеспечения защиты адресногопространства задач?10. Что такое «уровень привилегий»? Сколько уровней привилегий в микропроцессорах i80x86? Для каких целей введено такое количество уровней привилегий?И.
Что такое текущий уровень привилегий? Как узнать, чему он равен? Что такое эффективный уровень привилегий?12. Объясните правила работы с уровнями привилегий для различных типов сегментов.13. Поясните работу механизма шлюзов. Для чего он предназначен, как осуществляется передача управления на сегменты кода с другими уровнями привилегий?14. Опишите работу системы прерываний микропроцессоров i80x86 в реальномрежиме.15. В чем заключаются принципиальные отличия работы системы прерываниймикропроцессоров i80x86 в защищенном режиме по сравнению с реальнымрежимом?"• Как осуществляется переход на программу обработки прерываний, если дескриптор прерываний является коммутатором прерываний?• Как осуществляется переход на программу обработки прерываний, если дескриптор прерываний является коммутатором перехвата?• Как осуществляется переход на программу обработки прерываний, если дескриптор прерываний является коммутатором задачи?Глава 5.
Управлениевводом-выводомв операционных системахПобудительной причиной, в конечном итоге приведшей разработчиков к созданию системного программного обеспечения, в том числе операционных систем,стала необходимость предоставить программам средства обмена данными с внешними устройствами, которые бы не требовали непосредственного включения в каждую программу двоичного кода, управляющего устройствами ввода-вывода. Напомним, что программирование ввода-вывода является наиболее сложными трудоемким, требующим очень высокой квалификации. Поэтому код, реализующий операции ввода-вывода, сначала стали оформлять в виде системных библиотечных процедур, а потом и вовсе вывели из систем программирования, включивв операционную систему.
Это позволило не писать такой код в каждой программе,а только обращаться к нему — системы программирования стали генерировать обращения к системному коду ввода-вывода. Таким образом, управление вводомвыводом — это одна из основных функций любой операционной системы.С одной стороны, организация ввода-вывода в различных операционных системахимеет много общего. С другой стороны, реализация ввода-вывода в ОС так сильноотличается от системы к системе, что очень нелегко выделить и описать именноосновные принципы реализации этих функций.
Проблема усугубляется еще и тем,что в большинстве ныне используемых систем эти моменты вообще, как правило,подробно не описаны (исключением являются только системы Linux и FreeBSD,для которых имеются комментированные исходные тексты), а детально описываются только функции API, реализующие ввод-вывод. Другими словами, для техже систем Windows от компании Microsoft мы воспринимаем подсистему вводавывода как «черный ящик». Известно, как можно и нужно использовать эту подсистему, но детали ее внутреннего устройства остаются неизвестными.
Поэтомув данной главе мы рассмотрим только основные идеи и концепции. Наконец, поскольку такой важный ресурс, как внешняя память, в основном реализуется нустройствах ввода-вывода с прямым доступом, а к ним, прежде всего, относитенакопители на магнитных дисках, мы также рассмотрим логическую структуру ДиОсновные концепции организации ввода-вывода в операционных системах131а начальную стадию процесса загрузки операционной системы, кэширование опева'ций ввода-вывода, оптимизацию дисковых операций.Основные концепции организации вводавывода в операционных системахКак известно, ввод-вывод считается одной из самых сложных областей проектирования операционных систем, в которой сложно применить общий подход и вкоторой изобилуют частные методы.
В действительности, источником сложностиявляется огромное число устройств ввода-вывода разнообразной природы, которые должна поддерживать операционная система. При этом перед создателямиоперационной системы встает очень непростая задача — не только обеспечить эффективное управление устройствами ввода-вывода, но и создать удобный и эффективный виртуальный интерфейс устройств ввода-вывода, позволяющий прикладным программистам просто считывать или сохранять данные, не обращаявнимание на специфику устройств и проблемы распределения устройств междувыполняющимися задачами. Система ввода-вывода, способная объединить в одной модели широкий спектр устройств, должна быть универсальной.
Она должнаучитывать потребности существующих устройств, от простой мыши до клавиатур,принтеров, графических дисплеев, дисковых накопителей, компакт-дисков и дажесетей. С другой стороны, необходимо обеспечить доступ к устройствам ввода-вывода для множества параллельно выполняющихся задач, причем так, чтобы оникак можно меньше мешали друг другу.Поэтому самым главным является следующий принцип: любые операции по управлению вводом-выводом объявляются привилегированными и могут выполнятьсятолько кодом самой операционной системы. Для обеспечения этого принципа вбольшинстве процессоров даже вводятся режимы пользователя и супервизора.Последний еще называют привилегированным режимом, или режимом ядра.
Какправило, в режиме супервизора выполнение команд ввода-вывода разрешено, а впользовательском режиме — запрещено. Обращение к командам ввода-вывода впользовательском режиме вызывает исключение1, и управление через механизмпрерываний передается коду операционной системы. Хотя возможны и более сложные схемы, в которых в ряде случаев пользовательским программам может бытьразрешено непосредственное выполнение команд ввода-вывода.ьще раз подчеркнем, что мы, прежде всего, говорим о мультипрограммных операционных системах, для которых существует проблема разделения ресурсов, и одним из основных видов ресурсов являются устройства ввода-вывода и соответствующее программное обеспечение, с помрщью которого осуществляется обменДанными между внешними устройствами и оперативной памятью.
Помимо раздеемых устройств ввода-вывода (эти устройства допускают разделение посред°м механизма доступа) существуют неразделяемые устройства. Примерами^ -течение — это определенный вид внутреннего прерывания. Этим термином, во-первых, обознат Некоторое множество синхронных прерываний, а во-вторых, подчеркивают, что ситуация, выз•Я запрос на прерывание, является исключительной, то есть отличается от обычной.132Глава 5, Управление вводом-выводом в операционных системахразделяемого устройства могут служить накопитель на магнитных дисках, устройство чтения компакт-дисков. Это устройства с прямым доступом. Примеры неразделяемых устройств — принтер, накопитель на магнитных лентах. Это устройствас последовательным доступом.
Операционные системы должны управлять и темии другими, предоставляя возможность параллельно выполняющимся задачам ихиспользовать.Можно назвать три основные причины, по которым нельзя разрешать каждой отдельной пользовательской программе обращаться к внешним устройствам непосредственно.О Необходимость разрешать возможные конфликты в доступе к устройствамввода-вывода. Например, пусть две параллельно выполняющиеся программыпытаются вывести на печать результаты своей работы. Если не предусмотретьвнешнего управления устройством печати, то в результате мы можем получитьабсолютно нечитаемый текст, так как каждая программа будет время от времени выводить свои данные, перемежающиеся с данными от другой программы.Либо можно взять ситуацию, когда для одной программы необходимо прочитать данные с одного сектора магнитного диска, а для другой записать результаты в другой сектор того же накопителя.
Если операции ввода-вывода не будут отслеживаться каким-то третьим (внешним) процессом-арбитром, то послепозиционирования магнитной головки для первой задачи может тут же прийтикоманда позиционирования головки для второй задачи, и обе операции вводавывода не смогут выполниться корректно.Q Желание увеличить эффективность использования ресурсов ввода-вывода. Например, у накопителя на магнитных дисках время подвода головки чтения/записи к необходимой дорожке и время обращения к определенному сектору могутзначительно (до тысячи раз) превышать время пересылки данных. В результате, если задачи по очереди обращаются к цилиндрам, далеко отстоящим друг отдруга, то полезная работа, выполняемая накопителем, может быть существенно снижена.Q Необходимость избавить программы ввода-вывода от ошибок.
Ошибки в программах ввода-вывода могут привести к краху всех вычислительных процессов, ибо часть операций ввода-вывода требуются самой операционной системе.В ряде операционных систем системный ввод-вывод имеет существенно болеевысокие привилегии, чем ввод-вывод задач пользователя. Поэтому системныйкод, управляющий операциями ввода-вывода, очень тщательно отлаживаетсяи оптимизируется для повышения надежности вычислений и эффективностииспользования оборудования.Итак, управление вводом-выводом осуществляется компонентом операционнойсистемы, который часто называют супервизором ввода-вывода. Перечислим основные задачи, возлагаемые на супервизор.1. Модуль супервизора операционной системы, иногда называемый супервизоромзадач, получает запросы от прикладных задач на выполнение тех или иных операций, в том числе на ввод-вывод. Эти запросы проверяются на корректность йесли они соответствуют спецификациям и не содержат ошибок, то обрабатыва-Основные концепции организации ввода-вывода в операционных системах1 33ются дальше.