Слайд 1Архитектура вычислительных систем.
Лекция 5.
Ловецкий К.П.
Москва,
ноябрь 2014
Ввод-вывод
Слайд 2Необходимость абстрагирования
Устройства, подключаемые к компьютерам, могут выполнять самые разные функции,
от домашнего будильника до управления космическими кораблями. Существуют тысячи разнообразных
устройств, причем некоторые из них могут выполнять схожие функции, но при этом требовать совершенно разных действий для управления.
Прекрасным примером этого служат жесткий диск и flash-брелок: оба используются для долговременного хранения файлов, причем работа с диском и с flash-брелком с точки зрения пользовательского интерфейса практически не различаются (и то, и другое устройство представляется абстрактным «хранилищем» файлов). По своему внутреннему строению эти устройства не имеют между собой ничего общего.
Слайд 3Твердотельный накопитель
(SSD, Solid State Drive, Solid State Disk).
Это энергонезависимое,
перезаписываемое компьютерное запоминающее устройство без движущихся частей. Следует различать твердотельные
накопители, основанные на использовании энергозависимой (RAM SSD) и
энергонезависимой (NAND или Flash SSD) памяти. 512 GB в 2010 году.
In November 2010, Fusion-io released its highest performing SSD drive named ioDrive Octal utilising PCI-Express x16 Gen 2.0 interface with storage space of 5.12TB, read speed of 6.0GB/s, write speed of 4.4GB/s
Слайд 4Сравнение накопителей
Поддержка каждого конкретного устройства − задача достаточно сложная.
Слайд 5Преимущества по сравнению с жесткими дисками
более высокая скорость запуска,переход Power
On - Ready 1 с;
отсутствие движущихся частей;
производительность, чтение
до 250 Мб/с;
производительность, запись до 170 Мб/с;
низкая потребляемая мощность;
полное отсутствие шума от движущихся частей и охлаждающих вентиляторов;
высокая механическая стойкость;
широкий диапазон рабочих температур;
практически устойчивое время считывания файлов вне зависимости от их расположения или фрагментации;
малый размер и вес;
совместимость с SATA-I, SATA-2.
Слайд 6Недостатки твердотельных накопителей
высокая цена за 1 Гб (от 8 долларов
за гигабайт);
малая емкость (лишь экспериментальные твердотельные накопители имеют емкость
1 Тб и больше, в продаже доступны NAND SSD до 250 Гб);
более высокая чувствительность к некоторым эффектам, например, внезапной потере питания, магнитным и электрическим полям;
ограниченное количество циклов перезаписи: обычная флеш-память - до 100 тыс. раз,
более дорогостоящие виды памяти — до 5 млн раз;
медленная скорость записи (для флеш-памяти);
Наиболее проблематичным является использование флеш-памяти в проприетарной системе Windows: она работает значительно медленнее, чем, скажем, в Linux. Это связано с политикой разработчиков Windows и недостатками файловой системы NTFS.
Слайд 7Внутреннее устройство Flash drive
1 USB connector
2 USB mass storage controller
device
3 Test points
4 Flash memory chip
5 Crystal oscillator
6 LED
7 Write-protect
switch
8 Space for second flash memory chip
Слайд 8USB flash drive
The chip on the left is the flash
memory. The controller is on the right.
Слайд 9Программирование флеш-памяти
Флеш-память хранит информацию в массиве транзисторов с плавающим затвором,
называемых ячейками (англ. cell). В традиционных устройствах с одноуровневыми ячейками (англ. single-level
cell, SLC), каждая из них может хранить только один бит. Некоторые новые устройства с многоуровневыми ячейками (англ. multi-level cell, MLC; triple-level cell, TLC) могут хранить больше одного бита, используя разный уровень электрического заряда на плавающем затворе транзистора
Слайд 10Стирание
NOR
В основе этого типа флеш-памяти лежит ИЛИ-НЕ элемент (англ. NOR), потому
что в транзисторе с плавающим затвором низкое напряжение на затворе
обозначает единицу.
Транзистор имеет два затвора: управляющий и плавающий. Последний полностью изолирован и способен удерживать электроны до 10 лет. В ячейке имеются также сток и исток. При программировании напряжением на управляющем затворе создаётся электрическое поле и возникает туннельный эффект. Часть электронов туннелирует сквозь слой изолятора и попадает на плавающий затвор. Заряд на плавающем затворе изменяет «ширину» канала сток-исток и его проводимость, что используется при чтении.
Слайд 11Программирование флеш-памяти
Программирование и чтение ячеек сильно различаются в энергопотреблении: устройства
флеш-памяти потребляют достаточно большой ток при записи, тогда как при
чтении затраты энергии малы.
Для стирания информации на управляющий затвор подаётся высокое отрицательное напряжение, и электроны с плавающего затвора переходят (туннелируют) на исток.
В NOR-архитектуре к каждому транзистору необходимо подвести индивидуальный контакт, что увеличивает размеры схемы. Эта проблема решается с помощью NAND-архитектуры.
Слайд 12NAND - тип
NAND
В основе NAND-типа лежит И-НЕ элемент (англ. NAND). Принцип
работы такой же, от NOR-типа отличается только размещением ячеек и
их контактами. В результате уже не требуется подводить индивидуальный контакт к каждой ячейке, так что размер и стоимость NAND-чипа может быть существенно меньше.
Также запись и стирание происходит быстрее. Однако эта архитектура не позволяет обращаться к произвольной ячейке.
NAND и NOR-архитектуры сейчас существуют параллельно и не конкурируют друг с другом, поскольку находят применение в разных областях хранения данных.
Слайд 13Флеш - память
История
Флеш-память была изобретена инженером компании Toshiba Фудзио Масуокой
в 1984 году. Название «флеш» было придумано также в Toshiba
коллегой Фудзио, Сёдзи Ариидзуми, потому что процесс стирания содержимого памяти ему напомнил фотовспышку (англ. flash). Масуока представил свою разработку на IEEE 1984 International Electron Devices Meeting (IEDM), проходившей в Сан-Франциско, Калифорния. Intel увидела большой потенциал в изобретении и в 1988 году выпустила первый коммерческий флеш-чип NOR-типа.
NAND-тип флеш-памяти был анонсирован Toshiba в 1989 году на International Solid-State Circuits Conference. У него была больше скорость записи и меньше площадь чипа.
На конец 2008 года, лидерами по производству флеш-памяти являются Samsung (31 % рынка) и Toshiba (19 % рынка, совместно с Sandisk).
Стандартизацией чипов флеш-памяти типа NAND занимается Open NAND Flash Interface Working Group (ONFI). Текущий стандарт выпущен в 2006. Группа ONFI поддерживается конкурентами Samsung и Toshiba в производстве NAND-чипов: Intel, Hynix и Micron Technology.[4]
Слайд 14Файловые системы
Файловые системы
Основное слабое место флеш-памяти — количество циклов перезаписи. Ситуация
ухудшается также в связи с тем, что операционные системы часто
записывают данные в одно и то же место. Часто обновляется таблица файловой системы, так что первые сектора памяти израсходуют свой запас значительно раньше. Распределение нагрузки позволяет существенно продлить срок работы памяти.
Для решения этой проблемы были созданы специальные файловые системы: JFFS2[11] и YAFFS[12] для GNU/Linux и exFAT для Microsoft Windows.
USB флеш-носители и карты памяти, такие, как Secure Digital и CompactFlash, имеют встроенный контроллер, который производит обнаружение и исправление ошибок и старается равномерно использовать ресурс перезаписи флеш-памяти. На таких устройствах не имеет смысла использовать специальную файловую систему и для лучшей совместимости применяется обычная FAT.
Слайд 15Необходимость абстрагирования
Поддержка каждого конкретного устройства − задача достаточно сложная. Кроме
того, если каждая программа будет вынуждена поддерживать (или хотя бы
пытаться поддерживать) все возможные устройства, это приведет к необходимости огромных объемов программирования; авторы программ будут вынуждены скорее тратить время на борьбу с устройствами, чем на прикладные задачи.
В связи с этим управление устройствами возлагается на операционную систему. Прикладным программам для взаимодействия с устройствами предоставляется простой интерфейс, абстрагированный от конкретных особенностей отдельных устройств. Так, относительно любого устройства, способного содержать файлы, следует знать его размер, возможность записи на него и, может быть, «сменность» (то есть может ли пользователь данное устройство физически отключить во время работы).
Слайд 16Необходимость абстрагирования
Ввод-вывод с точки зрения подключения аппаратуры
Слайд 17Две точки зрения на ввод-вывод
Схематически ввод-вывод (или, говоря шире, управление
устройствами) показан на рисунке. Центральный процессор и оперативная память занимают
в этой схеме несколько особое место: несмотря на то, что и процессор, и память, несомненно, являются техническими устройствами, они не входят в число тех устройств, об управлении которыми идет речь. Иногда говорят об управлении внешними устройствами, при этом подразумевается, что процессор и память − устройства внутренние.
Таким образом, взаимодействие между процессором и памятью не входит в понятие ввода-вывода; с точки зрения, принятой при обсуждении аппаратного обеспечения (в том числе среди программистов, создающих ядра операционных систем), ЦП и память представляют собой единый конструктив, а вводом-выводом считается обмен информацией между этим конструктивом и всем остальным миром.
Слайд 18Две точки зрения на ввод-вывод
Существует и иная точка зрения, принятая
среди прикладных программистов. Эта точка зрения могла бы полностью совпадать
с предыдущей, если бы не тот факт, что одна и та же программа, выполняя одни и те же действия, в зависимости от обстоятельств, в которых ее запустили, может как осуществлять аппаратный ввод-вывод (Prog.exe > file), так и не осуществлять его (Prog.exe > Prog2.exe).
Прикладные программисты обычно под вводом-выводом понимают любой обмен информацией между программой (задачей) и внешним миром, к которому относится, кроме прочего, и память за пределами данной задачи.
Слайд 19Назначение драйверов
Под драйвером понимается программа (обычно являющаяся частью ядра операционной
системы), отвечающая за работу с конкретным устройством.
Зная, как нужно работать
с данным конкретным аппаратным устройством, драйвер скрывает особенности этого устройства от всей остальной системы. Другие части ядра обращаются к драйверу, вызывая его внешние функции, причем эти функции называются одинаково для всех драйверов определенной категории.
Детали процесса управления конкретными устройствами оказываются локализованы в коде драйвера. При написании остальных частей операционной системы, а также при создании пользовательского программного обеспечения становится возможным их не учитывать.
Слайд 20Способы загрузки драйверов
Драйвер (программа) обычно должен выполняться в привилегированном режиме,
то есть быть частью ядра. Теоретически возможно выполнение драйвера и
в пользовательском режиме, но такое применяется редко.
Существует три основных способа загрузки драйвера в ядро:
Включение кода драйвера в качестве модуля на этапе сборки ядра. При этом добавление или удаление драйвера требует новой сборки (перекомпиляции) ядра и перезагрузки операционной системы. Заметим, при этом пользователю должны быть доступны исходные тексты ядра либо, как минимум, его объектные модули и соответствующие им интерфейсные файлы. Такой подход является традиционным для Unix-подобных операционных систем.
Слайд 21Способы загрузки драйверов - 2
Подключение драйвера на этапе загрузки операционной
системы. При этом в системе имеется файл, содержащий список драйверов,
и сами драйверы в виде отдельных файлов. При загрузке ядро анализирует список и подключает драйверы, после чего начинает работу.
В этом случае для подключения дополнительного драйвера достаточно перезагрузить систему. Перекомпиляция ядра не требуется. Традиционно этот подход использовали системы семейства Windows, а ранее − и MS-DOS.
Слайд 22Способы загрузки драйверов - 3
Динамическая загрузка модулей в ядро. При
таком подходе достаточно подготовить файл драйвера, соблюдающий определенные соглашения об
именах, и выдать ядру соответствующий системный вызов, после чего модуль становится частью ядра. Ни перезагрузки, ни перекомпиляции ядра не требуется. Более того, ненужные модули можно из ядра изъять.
Такая возможность присутствует практически на всех современных Unix-системах, включая Linux, FreeBSD и Solaris. Необходимо отметить, что при высокой гибкости эта модель считается небезопасной, т.к. позволяет запустить произвольный код в привилегированном режиме.
Слайд 23Ввод-вывод на разных уровнях вычислительных систем
Рассмотрим работу программы с выводом
информации в файл. Пользователь подает пользовательской программе команду на понятном
пользователю языке.
Прикладная программа для вывода использует библиотечную функцию ввода-вывода высокого уровня. Библиотека функций, относящаяся к слою систем программирования, переводит полученный запрос на язык, понятный более низкому уровню (ядру операционной системы); таким языком является интерфейс системных вызовов, а переведенный запрос становится вызовом (например, write()) с соответствующими параметрами.
Операционная система на уровне процедур управления логическими устройствами преобразует параметры системного вызова write() в последовательность действий, необходимых для записи полученной информации в файл, на открытый дескриптор которого сослался вызвавший процесс. Говоря конкретнее, драйвер файловой системы переводит запрос в последовательность операций по модификации секторов логического дискового устройства, а драйвер соответствующего логического диска, в свою очередь,− в последовательность операций над секторами диска физического. Соответствующая последовательность запросов передается более низкоуровневым подпрограммам ядра, включающим драйвер физического диска. И уже этот драйвер осуществляет действия, необходимые для выполнения поступившего запроса с учетом особенностей конкретного имеющегося физического дискового устройства.
Слайд 24Ввод-вывод на разных уровнях вычислительных систем
Ранее приводилась условная (упрощенная) многоуровневая
структурная схема вычислительной системы. Понятие ввода-вывода присутствует при описании любого
из этих уровней, однако термины, в которых описывается сам ввод-вывод, меняются. Компоненты каждого уровня, получив от уровня более высокого соответствующее обращение, переводят его в термины уровня более низкого и передают ниже, а полученный ответ переводят, наоборот, в термины уровня более высокого и отправляют наверх.
Таким образом, по мере движения от аппаратуры к пользователю нарастает уровень абстрагирования, а сложность описания падает.
Слайд 25Взаимодействие ОС с аппаратурой
Понятие контроллера
Для управления внешними устройствами центральный процессор
способен генерировать определенные комбинации логических значений; в частности, на современных
архитектурах процессор может передавать по общей шине определенные значения по определенным адресам.
Ясно при этом, что никакой из выводов («ножек») процессора не может соответствовать конкретным действиям с внешними устройствами, таким как перемещение читающих головок, запуск или останов моторов и т.п.: во-первых, различных действий такого рода слишком много, а выводов у процессора − ограниченное количество, и, во-вторых, такое построение архитектуры ограничило бы ассортимент устройств, которыми может управлять данный конкретный процессор.
В связи с этим между внешним физическим устройством и процессором всегда имеется определенный посредник, называемый контроллером данного устройства.
Контроллер представляет собой электронную логическую схему, подключенную, с одной стороны, к общей шине компьютера, что позволяет обмениваться данными с процессором, и, с другой стороны, − к соответствующему физическому устройству.
Слайд 26Взаимодействие ОС с аппаратурой
Порты и буфера ввода-вывода
Поскольку к общей шине
может быть подключено одновременно большое количество различных контроллеров, необходимо различать,
кому предназначены передаваемые данные или, наоборот, кто должен ответить на запрос данных. Для этого вводится понятие порта ввода-вывода.
Порт ввода-вывода представляет собой абстракцию, имеющую адрес, представимый на данной шине. Для каждого порта возможны (с точки зрения процессора) операции записи и чтения: передачи значения по заданному адресу и запроса значения с заданного адреса.
Диапазон возможных значений, как и диапазон адресов портов, зависит от архитектуры шины. За каждым контроллером числится один или несколько портов ввода-вывода, причем, возможно, что некоторые из них могут быть только прочитаны, а некоторые − только записаны.
Слайд 27Взаимодействие ОС с аппаратурой
Порты и буфера ввода-вывода
Кроме портов, некоторые контроллеры
имеют еще и буфера ввода-вывода. Такие буфера представляют собой оперативную
память, конструктивно являющуюся частью контроллера и предназначенную для обмена массивами информации между контроллером и центральным процессором.
Например, данные, предназначенные для записи на диск, необходимо скопировать в буфер контроллера этого диска, а затем дать через порты соответствующую команду на запись; наоборот, при чтении информации с диска она помещается в буфер контроллера, откуда ее можно потом скопировать в основную память.
Другим примером буфера ввода-вывода можно считать видеопамять, то есть память, в которой хранится изображение, видимое на экране дисплея.
Слайд 28Контроллер как средство абстрагирования
Современные контроллеры устройств сами представляют собой достаточно
сложные устройства, позволяющие в ряде случаев абстрагироваться от некоторых особенностей
аппаратуры, что снимает часть нагрузки с драйверов устройств.
Большинство современных жестких дисков на самом деле имеет геометрию (расположение секторов), отличающуюся от видимой для операционной системы. Например, на дорожках, расположенных ближе к центру диска, для сохранения более-менее постоянной плотности записи данных размещают меньше секторов, чем на внешних дорожках; вместе с тем, с точки зрения всей остальной системы геометрия диска состоит из Nh сторон, Nc дорожек на каждой стороне (цилиндров), Ns секторов на каждой дорожке, причем все три параметра постоянны и не зависят от значения других.
Слайд 29Буферизация ввода-вывода
Ядру часто желательно, а иногда и просто необходимо при
проведении операций ввода-вывода сохранять данные в неких областях памяти для
промежуточного хранения. Такие области памяти называются буферами ввода-вывода (их не следует путать с буферами контроллеров устройств).
Для дисковых устройств буфера организуются как набор порций данных, соответствующих тому, что должно находиться в секторах физического диска. В итоге при операции записи, вместо того, чтобы непосредственно обращаться к драйверу устройства, верхний слой ядра просто заносит переданную ему информацию в буфер.
Драйвер устройства, имеющий доступ к буферам, самостоятельно определит очередность, в которой содержимое буферов будет реально записано на диск; например, при наличии нескольких буферов, соответствующих смежным областям диска, драйвер может записать их все, прежде чем переходить к другим буферам, вне зависимости от того, сколько времени назад соответствующие буфера были созданы.
Слайд 30Буферизация последовательных потоков ввода-вывода
Последовательные потоки ввода-вывода обычно используются при передаче
данных на печать, при передаче информации по локальной сети или
по модемному каналу и т.п.. Здесь также возникают определенные трудности, в основном обусловленные конечностью скорости обмена с периферийными устройствами.
Буферизация последовательного вывода позволяет процессам не ждать результатов выполнения операции вывода. Что касается буферизации ввода, то с ее помощью можно накапливать информацию, полученную от внешнего источника (например, модема), с тем, чтобы выдать ее читающему процессу в один прием (за один системный вызов). Поскольку системный вызов, как мы видели ранее, представляет собой операцию дорогостоящую в плане использования процессорного времени, а информация от внешнего устройства может приходить небольшими порциями и даже отдельными символами (байтами), буферизация здесь также приводит к экономии ресурсов системы.
Слайд 31Синхронный и асинхронный ввод-вывод
Иногда необходимо точно удостовериться в том, что
информация, переданная в операции вывода, была физически записана на диск.
В качестве простейшего примера можно назвать операцию вывода на съемный диск (дискету) перед физическим удалением этого диска из системы. Более сложным является пример с банкоматом, выдающим деньги: прежде чем выдать пачку банкнот, необходимо удостовериться в том, что эта операция реально зафиксирована в долговременной памяти, то есть что со счета клиента соответствующая сумма списана.
Это логично приводит нас к вопросу о том, в какой момент следует вернуть управление процессу, запросившему операцию вывода.
Два противоположных подхода состоят в том, что управление можно вернуть сразу же, записав данные в буфер и не дожидаясь каких-либо результатов, либо, напротив, записать информацию в буфер, но управление пользовательскому процессу не возвращать, пока операция не будет физически произведена.
Эти два подхода называются, соответственно, асинхронным и синхронным.
Слайд 32Синхронный и асинхронный ввод-вывод
Асинхронный подход эффективен по времени, поскольку позволяет
процессу продолжать работу, не дожидаясь окончания медленной физической операции. С
другой стороны, синхронный подход более надежен, т.к. если во время выполнения физических действий с устройством произойдет какая-либо ошибка, об этом можно будет сразу же сообщить процессу, тогда как при асинхронном построении вывода процесс может даже успеть завершиться до того, как результаты операции станут известны.
Выбор того или иного подхода зависит от стоящих перед нами конкретных задач. К примеру, файловые системы можно использовать как в синхронном, так и в асинхронном режиме. Часто используется подход, при котором фиксированные диски работают в асинхронном режиме, а съемные диски (дискеты, флэш-карты и пр.) − в синхронном.
Отметим, что именно применением асинхронного режима обусловлена крайняя нежелательность выключения питания компьютера без подготовки системы к такому выключению.
При работе в асинхронном режиме операционная система обычно предоставляет возможность принудительного сброса содержимого буферов на диск.
Это называется принудительной синхронизацией.
Слайд 33Basic Input-Output System
BIOS (англ. Basic Input-Output System — базовая система ввода-вывода,
БСВВ) — программа, находящаяся в ПЗУ (постоянном запоминающем устройстве) персонального компьютера
и исполняющаяся при включении питания. Главная функция BIOS — подготовить компьютер к тому, чтобы основное программное обеспечение (в большинстве случаев это операционная система), записанное на различных носителях (жёсткий диск, дискета или компакт-диск), либо доступное через сеть, могло стартовать и получить контроль над компьютером.