Управление вводом-выводом в ОС.

 

 

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

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

 

 

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

С позиции объемов двухэтапной схемы отображения адресов выделяются следующие три ситуации:

1. объем виртуального адресного пространства программы Vv меньшем объема физической памяти Vm. Данная ситуация в настоящее время практически не встречается, но тем не менее это реальное соотношение;

2. Vv = Vm. Встречается очень часто, особенно характерна она была для не дорогих вычислительных комплексов. Для этого случая имеется большое количество методов распределения оперативной памяти.

3. Vv > Vm. Такая ситуация встречается повсеместно во всех современных персональных компьютерах и программах. Для нее имеется несколько методов распределения памяти, отличающихся как сложностью, так и эффективностью.

Страничный способ организации виртуальной памяти.

В системе с размещением страниц по запросу виртуальная память процесса разделена на страницы некоторой фиксированной длинны, которые, как правило, размещаются во внешней памяти. Файл размещения виртуальной памяти называют файлом подкачки или страничным файлом (pagefile.sys). В Unix-системах для этих целей выделяется специальный раздел – swap. Реальная память ЭВМ разделяется на страничные кадры той же длины, что и страницы. Любая страница любого процесса потенциально может быть загружена в любой строчный кадр реальной памяти. Отображение в строчные кадры описывается таблицей отображения страницы (ТОС); для каждого процесса в системе имеется одна ТОС. ТОС используется аппаратурой для преобразования адресов виртуальной памяти программы в соответствующие адреса реальной памяти. Такой перевод виртуальных адресов в реальные, называется динамическим преобразованием адресов.

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

При обращении к виртуальной странице, не оказавшейся в данный момент в оперативной памяти, возникает прерывание и управление передается диспетчеру памяти, который должен найти свободное место. Обычно предоставляется первая же свободная страница. Если свободной станицы нет, то диспетчер памяти по одной из дисциплин замещения (LRU – последний из недавно использованных; LFU – используемый реже всех остальных; FIFO – первый пришедший первым и выбывает; random – случайный выбор) определит страницу, подлежащую расформированию или сохранению во внешней памяти. На ее место он разместит ту новую виртуальную страницу, к которой было обращение из задачи, но ее не оказалось в оперативной памяти.

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

Предположим, что обращение к слову в центральной памяти занимает 1 мкс, а считывание страницы из внешней памяти – в среднем 10 мс (10.000мкс). Предположим также, что в среднем для всех заданий в системе только 1 из 100 обращений к виртуальной памяти вызывает страничное прерывание. Даже при такой очевидно малой величине страничных прерываний система хорошо работать не будет. На каждое 100 обращений (требующих 100 мкс) система потратит 10.000 мкс на считывание страниц из внешней памяти. Т.е., вычислительная система тратит приблизительно 99% своего времени на свопинг страниц и только 1% на полезную работу. Этот полный разлад в работе называется пробуксовкой. Очевидно, что пробуксовка – это очень плохое явление. Чтобы его не допускать необходимо увеличить объем оперативной памяти (сейчас это стало самым простым решением), уменьшить количество параллельно выполняемых задач либо попробовать использовать более эффективные дисциплины замещения.

В абсолютном большинстве современных ОС используется дисциплина замещения LRU как самая эффективная (OS/2, Linux). В операционной системе Windows NT, разработчики, желая сделать систему максимально независимой от аппаратных возможностей процессора, пошли на отказ от этой дисциплины и применили правило FIFO. А для того, чтобы сгладить неэффективность этой стратегии управления виртуальной памятью, была введена буферизация тех страниц, которые должны быть записаны в файл подкачки на диск или просто расформированы. Принцип буферизации прост. Прежде чем замещаемая страница будет перемещена во внешнюю память или просто расформирована, она помечается как кандидат на выгрузку. Если в следующий раз произойдет обращение к странице, находящейся в таком буфере, то страница никуда не выгружается и уходит в конец списка FIFO. В противном случае страница действительно выгружается, а на ее места в буфер попадает следующий кандидат.

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

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

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

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

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

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

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

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

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

Если бит присутствия в дескрипторе указывает, что сейчас этот сегмент находится не в оперативной памяти, а во внешней, то поля адреса и длины используются для указания адреса сегмента в координатах внешней памяти. При этом возникает прерывание, и управление передается через диспетчер памяти программе загрузки сегмента. Пока происходит поиск сегмента во внешней памяти и загрузка его в оперативную, диспетчер памяти определяет подходящее для сегмента место. Возможно, что свободного места нет, и тогда принимается решение о выгрузке какого-нибудь сегмента и о его перемещении во внешнюю память. При поиске свободного места используется одна из вышеперечисленных дисциплин (FIFO, LRU, LFU, random).

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

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

Сегментно-страничный способ организации виртуальной памяти.

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

 

 

Управление вводом-выводом в ОС.

 

 

1. Основные понятия и концепции организации ввода/вывода.

2. Режимы управления вводом/выводом. Основные системные таблицы ввода/вывода.

3. Кэширование операций ввода/вывода при работе с накопителями на магнитных дисках.

 

 

1. Основные понятия и концепции организации ввода/вывода.

 

 

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

Управление вводом/выводом – это одна из главных функций операционной системы.

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

Структура системы ввода-вывода.

Все устройства ввода-вывода различаются по нескольким направлениям:

§ Скорость обмена информацией может варьироваться в диапазоне от нескольких байт в секунду (клавиатура) до нескольких гигабайт в секунду (сетевые карты).

§ Некоторые устройства могут быть использованы параллельно несколькими процессами (являются разделяемыми), в то время как другие требуют монопольного захвата процессом.

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

§ Часть устройств умеет передавать данные только по одному байту последовательно (символьные устройства), а часть устройств умеет передавать блок байт как единое целое (блочные устройства).

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

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

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

Рис 1. Структура системы ввода-вывода

 

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

Самым главным является следующий принцип организации управления вводом/выводом: любые операции по управлению вводом/выводом объявляются привилегированными и могут выполняться только кодом операционной системы. Для обеспечения этого принципа в большинстве процессоров вводятся режим пользователя и режим супервизора. В режиме супервизора выполнение команд ввода/вывода разрешено, а пользовательском режиме – запрещено.

В системах мультипрограммирования одним из основных видов ресурсов являются УВВ и соответствующее программное обеспечение, с помощью которого осуществляется управление обменом данными между внешними устройствами и оперативной памятью. Помимо разделяемых устройств ввода/вывода (эти устройства допускают разделение посредством механизма доступа) существуют неразделяемые устройства. Примерами разделяемого устройства являются HDD, CD-ROM – устройства с прямым доступом. К неразделяемым устройствам относятся принтеры – устройства с последовательным доступом.

Управление вводом/выводом осуществляется операционной системой, для чего в ее состав включается супервизор ввода/вывода, основными функциями которого является:

· получение запросов на ввод/вывод от прикладных задач и программных модулей самой ОС. Эти запросы проверяются на корректность, и если запрос выполнен по спецификациям и не содержит ошибок, он обрабатывается дальше, в противном случае пользователю (программе) выдается соответствующее диагностическое сообщение о недействительности (некорректности) запроса;

· вызов соответствующих распределителей каналов и контроллеров, планирование ввода/вывода (определяет очередность предоставления УВВ задачам). Запрос на ввод/вывод либо сразу выполняется, либо ставится в очередь на выполнение;

· инициирование операции ввода/вывода (передает управление соответствующим драйверам) и в случае управления вводом/выводом с использованием прерываний предоставление процессора диспетчеру задач с тем, чтобы передать его первой задаче, стоящей в очереди на выполнение;

· идентификация сигналов прерываний от УВВ и передача управления соответствующей программе обработке прерываний;

· передача сообщений об ошибках, если таковые происходят в процессе управления операциями ввода/вывода;

· посылка сообщения о завершении операции ввода/вывода запросившему эту операцию процессу и снятие его с состояния ожидания ввода/вывода, если процесс ожидал завершения операции ввода/вывода.

Запросы на ввод/вывод должны удовлетворять требованиям API той ОС, в среде которой выполняется приложение.

Имеются два основных режима ввода/вывода:

1. режим обмена с опросом готовности УВВ;

2. режим обмена с прерываниями.

 








Дата добавления: 2015-03-26; просмотров: 2127;


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

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.019 сек.