Главная страница
Навигация по странице:

  • Обеспечение согласованности кэш-памяти микропроцессоров в мультипроцессорных системах

  • Cостояние признака протокола Состояние строки памяти

  • Еңгізу –шығару функциясын ұйымдастыру: үзілістермен басқарылатын еңгізу-шығару

  • ОС СРС. Кэш жадысы. Кэш жадысында деректерді келісімділігі кері жне ткел жазба дістері


    Скачать 304.48 Kb.
    НазваниеКэш жадысы. Кэш жадысында деректерді келісімділігі кері жне ткел жазба дістері
    Дата18.12.2018
    Размер304.48 Kb.
    Формат файлаdocx
    Имя файлаОС СРС.docx
    ТипДокументы
    #60836
    страница1 из 3
      1   2   3

    Кэш жадысы. Кэш жадысында деректердің келісімділігі кері және өткел жазба әдістері

    Процессордың жұмыс жылдамдығы оның барлық бөлімшелерінің жұмыс жасау жылдамдығымен анықталады. Бұл бөлімшелердің жұмыс жылдамдығы оның аппараттық мүмкіндіктерімен, қабілеттеріне байланысты. Осы жағдайларды ескере отырып, процессорды өндірушілер аппараттық блоктардың жұмысын жылдамдату мақсатында кэш-жадын ойлап шығарды.

    Кэш-жады компьютердің жедел жадысынан айырмашылығы - жұмыс жылдамдығы. Тәжірибе жүзінде, кэш-жадының жұмыс жылдамдығы қарапайым компьютердің жедел жадысынан он шақты есе жоғары, ол оның технологиялық үрдіспен жасалуы және қызмет шарттарымен тығыз байланысты.

    Кэш-жадының бірнеше түрлері бар. Көбіне жылдамдығы жағынан жоғары бірінші дәрежелі кэш жады, содан кейін жылдамдығы жағынан екінші және үшінші дәрежелі кэш жадылар. Әдетте, тек қана алғашқы екі айқындама міндетті болып табылады. Қандай жағдайда да бұл жады жедел жадыдан тез жұмыс жасайды.

    Кэш-жадының өлшеміне келер болсақ, ол процессордың моделі мен өндірушілерге байланысты әр түрлі болып келеді. Екінші және үшінші дәрежелі кэш-жадының өлшемі аз болады. Сонымен қатар, бірінші дәрежелі кэш-жады процессордың ұяшығында орналасқандықтан тез жұмыс жасайды.

    АМD процессорының кэш-жадысына қарағанда Intel процессорының кэш-жадысының өлшемі үлкен болып келеді. Ол кэш-жадысының жұмыс алгоритмімен тығыз байланысты. АМD процессорының кэш-жадысы кез келген деңгейдегі бірегей нақты ақпараттарды сыйғыза алады, ал осындай жағдайда Intel кэш – жадысы қайталанатын нақты ақпараттарды сыйғызуы мүмкін.

    Кэш-жадының қарапайым жадыдағы сияқты разрядтығы болады. Айтып кететін мәселе, әр өндірушілердің процессорлары кэш-жадымен әр-түрлі жұмыс жасайды: кейбірі үлкен разрядты, мысалы 256 бит, ал екіншілері - аз разрядты қолданады.

    Управление работой кэш-памяти на уровне страниц

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

    Бит PCD запрещает ( PCD = 1 ) или разрешает ( PCD = 0 ) кэширование страницы. Запрещение кэширования необходимо для страниц, которые содержат порты ввода/вывода с отображением на память. Оно также полезно для страниц, кэширование которых не дает выигрыша в быстродействии, например, страниц, содержащих программу инициализации.

    Бит PWT определяет метод обновления ОЗУ и внешней кэш-памяти (кэш 2-го уровня). Если PWT = 1, то для данных в соответствующей странице определяется кэширование со сквозной записью, при PWT = 0 применяется способ обратной записи. Используется в микропроцессорах начиная с Pentium. Так как внутренняя кэш-память в МП i486 работает со сквозной записью, состояние бита PWT на нее не влияет. Бит PWT в этом случае действует только на внешнюю КП.

    Обеспечение согласованности кэш-памяти микропроцессоров в мультипроцессорных системах

    Рассмотрим особенности работы кэш-памяти в том случае, когда одновременно несколько микропроцессоров используют общую оперативную память (рис. 4.4). В этом случае могут возникнуть проблемы, связанные с кэшированием информации из оперативной памяти в кэш-память микропроцессоров.

    структура мультимикропроцессорной системы с общей оперативной памятью Рис. 4.4. Структура мультимикропроцессорной системы с общей оперативной памятью

    Предположим, что МП А считал некоторую строку данных из ОЗУ в свою внутреннюю КП и изменил данные в этой строке в процессе работы.

    Мы отмечали, что существует два основных механизма обновления оперативной памяти:

    1. сквозная запись, которая подразумевает, что как только изменилась информация во внутренней кэш-памяти, эта же информация копируется в то же место оперативной памяти, и

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

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

    Существует два класса протоколов когерентности:

    • протоколы на основе справочника ( directory based ): информация о состоянии блока физической памяти содержится только в одном месте, называемом справочником (физически справочник может быть распределен по узлам системы);

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

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

    Для поддержания когерентности применяется два основных метода.

    Один из методов заключается в том, чтобы гарантировать, что процессор должен получить исключительные права доступа к элементу данных перед выполнением записи в этот элемент данных. Этот тип протоколов называется протоколом записи с аннулированием ( write invalidate protocol ), поскольку при выполнении записи он аннулирует другие копии. Это наиболее часто используемый протокол как в схемах на основе справочников, так и в схемах наблюдения. Исключительное право доступа гарантирует, что во время выполнения записи не существует никаких других копий элемента данных, в которые можно писать или из которых можно читать: все другие кэшированные копии элемента данных аннулированы.

    Альтернативой протоколу записи с аннулированием является обновление всех копий элемента данных в случае записи в этот элемент данных.

    Этот тип протокола называется протоколом записи с обновлением ( write update protocol ), или протоколом записи с трансляцией ( write broadcast protocol ).

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

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

    Рассмотрим один из наиболее распространенных протоколов, обеспечивающих согласованную работу кэш-памяти нескольких микропроцессоров и основной памяти в мультимикропроцессорных системах, протокол MESI, который относится к группе протоколов наблюдения с аннулированием. Будем знакомиться с ним на примере двухпроцессорной системы, состоящей из микропроцессоров A и B.

    Этот протокол использует 4 признака состояния строки кэш-памяти микропроцессора, по первым буквам которых и называется протокол:

    • измененное состояние ( Modified ): информация, хранимая в кэш-памяти микропроцессора А, достоверна только в этом кэше; она отсутствует в оперативной памяти и в кэш-памяти других микропроцессоров;

    • исключительная копия ( Exclusive ): информация, содержащаяся в кэше А, содержится еще только в оперативной памяти;

    • разделяемая информация ( Shared ): информация, содержащаяся в кэше А, содержится в кэш-памяти по крайней мере еще одного МП, а также в оперативной памяти;

    • недостоверная информация ( Invalid ): в строке кэш-памяти находится недостоверная информация.

    Таким образом, состояние признаков потокола MESI отражает следующие состояния (по отношению к МПА) строки кэш-памяти (табл. 4.2):

    Таблица 4.2. Формирование признаков состояния протокола MESI

    Cостояние признака протокола

    Состояние строки памяти

    Кэш А

    Кэш В

    ОЗУ

    Modified

    Д

    НД

    НД

    Shared

    Д

    Д

    Д

    Exclusive

    Д

    НД

    Д

    Invalid

    НД

    Х

    Х

    При работе микропроцессора А с точки зрения обеспечения когерентности памяти возможны следующие ситуации:

    • RH ( Read Hit ) - кэш-попадание при чтении;

    • WH ( Write Hit ) - кэш-попадание при записи;

    • RME ( Read Miss Exclusive ) - кэш-промах при чтении;

    • RMS ( Read Miss Shared ) - кэш-промах при чтении, но соответствующий блок есть в кэш-памяти другого микропроцессора;

    • WM ( Write Miss ) - кэш-промах при записи;

    • SHR ( Snoop Hit Read ) - обнаружение копии блока при прослушивании операции чтения другого кэша;

    • SHW ( Snoop Hit Write ) - обнаружение копии блока при прослушивании операции записи другого кэша.

    Наибольший интерес здесь представляют две последние позиции.

    Современные микропроцессоры имеют двунаправленную шину адреса.

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

    Изменения признака состояния блока кэш-памяти МП в зависимости от различных ситуаций в его работе и работе мультимикропроцессорной системы в целом представлены на рис. 4.5.

    mesi-диаграмма обеспечения когерентности кэш-памяти

    Рис. 4.5. MESI-диаграмма обеспечения когерентности кэш-памяти

    Проиллюстрируем некоторые из представленных переходов.

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

    При этом состояние строки в кэш-памяти рассматриваемого микропроцессора изменится с модифицированного на разделяемое ( Shared ).

    Если строка кэш-памяти находилась в состоянии Invalid, то есть информация в ней была недостоверной, то по отношению к этой строке следует рассматривать только ситуации, связанные с кэш-промахами. Так, если произошел кэш-промах при выполнении операции записи, то необходимая строка будет занесена в кэш-память данного МП, в эту строку будут записаны измененные данные, и она приобретет статус исключительного владельца новой информации ( Modified ).

    Краткие итоги. В лекции рассмотрены общие принципы функционирования кэш-памяти микропроцессора, организация кэш-памяти с прямым отображением, полностью ассоциативной и множественно-ассоциативной КП. Рассмотрены основные механизмы обновления оперативной памяти: кэширование со сквозной и с обратной записью. Представлена организация внутренней кэш-памяти микропроцессора. Разобраны способы обеспечения согласованности кэш-памяти микропроцессоров в мультипроцессорных системах.
    Еңгізу –шығару функциясын ұйымдастыру: үзілістермен басқарылатын еңгізу-шығару

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

     

     

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

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

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

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

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

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

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

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

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

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

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

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

    https://helpiks.org/helpiksorg/baza9/4795352108970.files/image002.jpg

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

     

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     

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

     

    1. Управление вводом/выводом осуществляет центральный процессор. В этом случае имеет место программный канал обмена данными между внешними устройствами и оперативной памятью). ЦП посылает устройству управления команду выполнить некоторое действие устройству ввода/вывода. Последнее исполняет команду, транслируя сигналы, понятные центральному процессору и устройству управления в сигналы, в сигналы понятные УВВ. Однако, быстродействие УВВ намного меньше быстродействия центрального процессора (рис. 2).

    https://helpiks.org/helpiksorg/baza9/4795352108970.files/image004.jpg Поэтому сигнал готовности (транслируемый или генерируемый устройством управления и сигнализирующий процессору о том, что команда ввода/вывода выполнена и можно выдать новую команду для продолжения обмена данными) приходится очень долго ожидать, постоянно опрашивая существующую линию интерфейса на наличие или отсутствие нужного сигнала. Посылать новую команду, не дождавшись сигнала готовности, сообщающего об исполнении предыдущей команды, бессмысленно. До тех пор, пока не появится сигнал готовности, драйвер в цикле опрашивает УВВ, расходуя при этом ресурс процессора.

    2. Гораздо выгоднее выдав команду ввода/вывода на время «забыть» об УВВ и перейти на выполнение другой программы. А появление сигнала готовности трактовать как запрос на прерывание от УВВ.

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

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

    Понятие виртуального устройства основывается на понятии SPOOLing (simultaneous peripheral operation on-line – имитация работы с устройством в режиме «он-лайн»). Главная задача спулинга создать видимость параллельного разделение УВВ с последовательным доступом, которое фактически должно использоваться только монопольно. Например, каждому вычислительному процессу можно предоставить не реальный, а виртуальный принтер и поток выводимых символов сначала направлять в специальный файл. Затем, по окончании виртуальной печати, в соответствии с принятой дисциплиной обслуживания и приоритетами приложений выводить содержимое спул-файла на принтер. Системный процесс, который управляет спул-файлом, называется спулером.

    Основные системные таблицы ввода-вывода

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

    состав устройств ввода-вывода и способы их подключения;

    аппаратные ресурсы, закрепленные за имеющимися в системе устройствами ввода-вывода;

    логические (символьные) имена устройств ввода-вывода, используя которые вычислительные процессы могут запрашивать те или иные операции ввода-вывода;

    адреса размещения драйверов устройств ввода-вывода и области памяти для хранения текущих значений переменных, определяющих работу с этими устройствами;

    области памяти для хранения информации о текущем состоянии устройства ввода-вывода и параметрах, определяющих режимы работы устройства;

    данные о текущем процессе, который работает с данным устройством;

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

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

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

    Первая таблица (или список) содержит информацию обо всех устройствах ввода-вывода, подключенных к вычислительной системе – таблица оборудования (equipment table), а каждый элемент этой таблицы называется UCB (Unit Control Block — блок управления устройством ввода-вывода). Каждый элемент UCB таблицы оборудования, как правило, содержит следующую информацию об устройстве:

    тип устройства, его конкретная модель, символическое имя и характеристики устройства;

    способ подключения устройства (через какой интерфейс, к какому разъему, какие порты и линия запроса прерывания используются и т. д.);

    номер и адрес канала (и подканала), если такие используются для управления устройством;

    информация о драйвере, который должен управлять этим устройством, адреса секции запуска и секции продолжения драйвера;

    информация о том, используется или нет буферизация при обмене данными с устройством, «имя» (или просто адрес) буфера, если такой выделяется из системной области памяти;

    установка тайм-аута и ячейки для счетчика тайм-аута;

    состояние устройства;

    поле указателя для связи задач, ожидающих устройство;

    возможно, множество других сведений.

    Во многих операционных системах драйверы могут обладать свойством реентерабельности поэтому в элементе UCB должна храниться либо непосредственно сама информация о текущем состоянии устройства и сами переменные для реентерабельной обработки, либо указание на место, где такая информация может быть найдена. Важнейшим компонентом элемента таблицы оборудования является указатель на дескриптор той задачи, которая в настоящий момент использует данное устройство. Если устройство свободно, то поле указателя будет иметь нулевое значение. Если же устройство уже занято и рассматриваемый указатель не нулевой, то новые запросы к устройству фиксируются посредством образования списка из дескрипторов задач, ожидающих данное устройство. Вторая таблица предназначена для реализации еще одного принципа виртуализации устройств ввода-вывода — принципа независимости от устройства. Желательно, чтобы программисту не приходилось учитывать конкретные параметры (и/или возможности) того или иного устройства ввода-вывода, которое установлено (или не установлено) в компьютер. Для него должны быть важными только самые общие возможности, характерные для данного класса устройств ввода-вывода. Например, принтер должен уметь выводить (печатать) символы или графические изображения. А накопитель на магнитных дисках — считывать или записывать порцию данных по указанному адресу, то есть в координатах C-H-S (Cylinder-Head-Sector — номера цилиндра, головки и сектора) или по порядковому номеру блока данных. Хотя чаще всего программист и не использует прямую адресацию при работе с магнитными дисками, а работает на уровне файловой системы. Однако в таком случае уже разработчики системы управления файлами не должны зависеть от того, каких типа и модели накопитель используется в данном компьютере и кто является его производителем. Важным должен быть только сам факт существования накопителя, имеющего некоторое количество цилиндров, головок чтения-записи и секторов на дорожке магнитного диска. Упомянутые значения количества цилиндров, головок и секторов должны быть взяты из элемента таблицы оборудования. При этом для программиста также не должно иметь значения, каким образом то или иное устройство подключено к вычислительной системе. Поэтому в запросе на ввод-вывод программист указывает именно логическое имя устройства. Действительное устройство, которое сопоставляется виртуальному (логическому), выбирается супервизором с помощью описываемой таблицы.

    Итак, способ подключения устройства, его конкретная модель и соответствующий ей драйвер содержатся в уже рассмотренной таблице оборудования. Но для того чтобы связать некоторое виртуальное устройство, использованное программистом, с системной таблицей, отображающей информацию о том, какое конкретно устройство и каким образом подключено к компьютеру, требуется вторая системная таблица – таблиц виртуальных логических устройств (Device Reference Table, DRT). Назначение этой второй таблицы — установление связи между виртуальными (логическими) устройствами и реальными устройствами, описанными посредством первой таблицы (таблицы оборудования). Другими словами, вторая таблица позволяет супервизору перенаправить запрос на ввод-вывод из приложения в те программные модули и структуры данных, которые (или адреса которых) хранятся в соответствующем элементе первой таблицы. Во многих многопользовательских системах таких таблиц несколько: одна общая и по одной на каждого пользователя, что позволяет строить необходимые связи между логическими устройствами (символьными именами устройств) и реальными физическими устройствами, которые имеются в системе.

    Наконец, третья таблица — таблица прерываний — необходима для организации обратной связи между центральной частью и устройствами ввода-вывода. Эта таблица указывает для каждого сигнала запроса на прерывание тот элемент UCB, который сопоставлен данному устройству. Каждое устройство либо имеет свою линию запроса на прерывание, либо разделяет линию запроса на прерывание с другими устройствами, но при этом имеется механизм второго уровня адресации устройств ввода-вывода. Таким образом, таблица прерываний отображает связи между сигналами запроса на прерывания и самими устройствами ввода-вывода. Как и системная таблица ввода-вывода, таблица прерываний в явном виде может и не присутствовать. Другими словами, можно сразу из основной таблицы прерываний компьютера передать управление на программу обработки (драйвер), связанную с элементом UCB. Важно наличие связи между сигналами прерываний и таблицей оборудования.

    В ряде современные 32-разрядных систем для персональных компьютеров, имеется гораздо больше системных таблиц или списков, используемых для организации управления операциями ввода-вывода. Например, одной из возможных и часто реализуемых информационных структур, сопровождающих практически каждый запрос на ввод-вывод, является блок управления данными (Data Control Block, DCB). Назначение DCB — подключение препроцессоров к процессу подготовки данных на ввод-вывод, то есть учет конкретных технических характеристик и используемых преобразований. Это необходимо для того, чтобы имеющееся устройство получало не какие-то непонятные ему коды или форматы данных, не соответствующие режиму его работы, а коды и форматы, созданные специально под данное устройство. Теперь такие препроцессоры часто называют высокоуровневыми драйверами, или просто драйверами, хотя изначально под термином «драйвер» подразумевалась программа управления операциями ввода-вывода.

    Взаимосвязи между описанными таблицами изображены на рис. 3.

    https://helpiks.org/helpiksorg/baza9/4795352108970.files/image006.gif

    Запрос на операцию ввода-вывода от выполняющейся программы поступает на супервизор задач (шаг 1) (рис. 4).

    https://helpiks.org/helpiksorg/baza9/4795352108970.files/image008.gif

    Рис. 4

    Этот запрос представляет собой обращение к операционной системе и указывает на конкретную функцию API. Вызов сопровождается некоторыми параметрами, уточняющими требуемую операцию. Модуль операционной системы, принимающий от задач запросы на те или иные действия, часто называют супервизором задач. Супервизор задач проверяет системный вызов на соответствие принятым спецификациям и в случае ошибки возвращает задаче соответствующее сообщение (шаг 1-1). Если же запрос корректен, то он перенаправляется в супервизор ввода-вывода (шаг 2). Последний по логическому (виртуальному) имени с помощью таблицы DRT находит соответствующий элемент UCB в таблице оборудования. Если устройство уже занято, то описатель задачи, запрос которой обрабатывается супервизором ввода-вывода, помещается в список задач, ожидающих это устройство. Если же устройство свободно, то супервизор ввода-вывода определяет из UCB тип устройства и при необходимости запускает препроцессор, позволяющий получить последовательность управляющих кодов и данных, которую сможет правильно понять и отработать устройство (шаг 3). Когда «программа» управления операцией ввода-вывода будет готова, супервизор ввода-вывода передает управление соответствующему драйверу на секцию запуска (шаг 4), Драйвер инициализирует операцию управления, обнуляет счетчик тайм-аута и возвращает управление супервизору (диспетчеру задач) с тем, чтобы он поставил на процессор готовую к исполнению задачу (шаг 5). Система работает своим чередом, но когда устройство ввода-вывода отработает посланную ему команду, оно выставляет сигнал запроса на прерывание, по которому через таблицу прерываний управление передается на секцию продолжения (шаг 6). Получив новую команду, устройство вновь начинает ее обрабатывать, а управление процессором опять передается диспетчеру задач, и процессор продолжает выполнять полезную работу. Таким образом, получается параллельная обработка задач, на фоне которой процессор осуществляет управление операциями ввода-вывода.

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

    Синхронный и асинхронный ввод-вывод

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

    Простейшим вариантом асинхронного вывода является так называемый буферизованный вывод данных на внешнее устройство, при котором данные из приложения передаются не непосредственно на устройство ввода-вывода, а в специальный системный буфер — область памяти, отведенную для временного размещения передаваемых данных. В этом случае логически операция вывода для приложения считается выполненной сразу же, и задача может не ожидать окончания действительного процесса передачи данных на устройство. Реальным выводом данных из системного буфера занимается супервизор ввода-вывода. Естественно, что выделение буфера из системной области памяти берет на себя специальный системный процесс по указанию супервизора ввода-вывода. Итак, для рассмотренного случая вывод будет асинхронным, если, во-первых, в запросе на ввод-вывод указано на необходимость буферизации данных, а во-вторых, устройство ввода-вывода допускает такие асинхронные операции, и это отмечено в UCB. Можно организовать и асинхронный ввод данных. Однако для этого необходимо не только выделять область памяти для временного хранения считываемых с устройства данных и связывать выделенный буфер с задачей, заказавшей операцию, но и сам запрос на операцию ввода-вывода разбивать на две части (на два запроса). В первом запросе указывается операция на считывание данных, подобно тому как это делается при синхронном вводе-выводе, однако тип (код) запроса используется другой, и в запросе указывается еще, по крайней мере, один дополнительный параметр — имя (код) системного объекта, которое получает задача в ответ на запрос и которое идентифицирует выделенный буфер. Получив имя буфера (будем так условно называть этот системный объект, хотя в различных операционных системах используются и другие термины, например «класс»), задача продолжает свою работу. Здесь очень важно подчеркнуть, что в результате запроса на асинхронный ввод данных задача не переводится супервизором ввода-вывода в состояние ожидания завершения операции ввода-вывода, а остается в состоянии выполнения или в состоянии готовности к выполнению. Через некоторое время, выполнив необходимый код, который был определен программистом, задача выдает второй запрос на завершение операции ввода-вывода. В этом втором запросе к тому же устройству, который, естественно, имеет другой код (или имя запроса), задача указывает имя системного объекта (буфера для асинхронного ввода данных) и в случае успешного завершения операции считывания данных тут же получает их из системного буфера. Если же данные еще не успели до конца переписаться с внешнего устройства в системный буфер, супервизор ввода-вывода переводит задачу в состояние ожидания завершения операции ввода-вывода, и далее все напоминает обычный синхронный ввод данных.

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

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

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

     

     

    3. Кэширование операций ввода/вывода при работе

    с накопителями на магнитных дисках

     

     

    Накопители на магнитных дисках обладают гораздо более низкой скоростью обмена данными по сравнению с быстродействием центральной части компьютера. Разница в быстродействии отличается на несколько порядков. Например, современные процессоры за один такт работы с частотой 1 ГГц, может выполнять по две операции. Таким образом, время выполнения операции (с позиции внешнего наблюдателя, не видящего конвейеризации при выполнении машинных команд, благодаря которой производительность возрастает в несколько раз) может составлять 0,5 нс. В то же время переход магнитной головки с дорожки на дорожку составляет несколько миллисекунд. Такие же временные интервалы имеют место и при ожидании, пока под головкой чтения/ записи не окажется нужный сектор данных. Как известно, в современных приводах средняя длительность на чтение случайным образом выбранного сектора данных составляет около 20 мс, что существенно медленнее, чем выборка команды или операнда из оперативной памяти и уж тем более из кэша. Правда, после этого данные читаются большим пакетом (сектор, как мы уже говорили, имеет размер в 512 байтов, а при операциях с диском часто читается или записывается сразу несколько секторов). Таким образом, средняя скорость работы процессора с оперативной памятью на 2-3 порядка выше, чем средняя скорость передачи данных из внешней памяти на магнитных дисках в оперативную память.

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

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

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

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

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

    В ряде ОС имеется возможность указать в явном виде параметры кэширования, в то время как в других за эти параметры отвечает сама ОС. Так, например, в системе Windows NT нет возможности в явном виде управлять ни объемом файлового кэша, ни параметрами кэширования. В системах Windows 95/98 такая возможность имеется, но она представляет не слишком богатый выбор. Фактически можно указать только объем памяти, отводимый для кэширования, и объем порции данных, из которых набирается кэш. В файле system.ini есть возможность в секции [VCACHE] прописать, например, следующие значения:

    [vcache]

    MinFileCache=4096

    MaxFileCache=32768

    ChankSize=512

    Здесь указано, что минимально под кэширование данных зарезервировано 4 Мбайт оперативной памяти, максимальный объем кэша может достигать 32 Мбайт, а размер данных, которыми манипулирует менеджер кэша, равен одному сектору.

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

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

    Дисциплины, в соответствии с которыми можно перестраивать очередь запросов на операции чтения/записи данных:

    SSTF (shortest seek time – first) с наименьшим временем поиска – первым. В соответствии с этой дисциплиной при позиционировании магнитных головок следующим выбирается запрос, для которого необходимо минимальное перемещение с цилиндра на цилиндр, даже если этот запрос не был первым в очереди на ввод/вывод. Однако для этой дисциплины характерна резкая дискриминация определенных запросов, а ведь они могут идти от высокоприоритетных задач. Обращения к диску проявляют тенденцию концентрироваться, в результате чего запросы на обращение к самым внешним и самым внутренним дорожкам могут обслуживаться существенно дольше и нет никакой гарантии обслуживания. Достоинством такой дисциплины является максимально возможная пропускная способность дисковой подсистемы.

    Scan (сканирование). По этой дисциплине головки перемещаются то в одном, то в другом «привилегированном» направлении, обслуживая «по пути» подходящие запросы. Если при перемещении головок чтения/записи более нет попутных запросов, то движение начинается в обратном направлении.

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

    C-Scan (циклическое сканирование). По этой дисциплине головки перемещаются циклически с самой наружной дорожки к внутренним, по пути обслуживая имеющиеся запросы, после чего вновь переносятся к наружным цилиндрам. Эту дисциплину иногда реализуют таким образом, чтобы запросы, поступающие во время текущего прямого хода головок, обслуживались не попутно, а при следующем ходе, что позволяет исключить дискриминацию запросов к самым крайним цилиндрам; она характеризуется очень малой дисперсией времени ожидания обслуживания. Эту дисциплину обслуживания часто называют «элеваторной».

    В операционной системе DOS для выполнения кэширования дисковых операций используется программа smartdrv.exe.

    файлдық жүйе, негізгі функциялары
    Рано или поздно начинающий пользователь компьютера сталкивается с таким понятием, как файловая система (ФС). Как правило, впервые знакомство с данным термином происходит при форматировании носителя информации: логические диски винчестера и подключаемые носители (флешки, карты памяти, внешний жесткий диск).

    Перед форматированием операционная система Windows предлагает выбрать вид файловой системы на носителе, размер кластера, способ форматирования (быстрое или полное). Давайте разберемся, что же такое файловая система и для чего она нужна?
      1   2   3


    написать администратору сайта