39
Железо
Процессоры
Типы процессоров:
1. с регистрами общего назначения (РОН);
2. аккумуляторные;
3. стековые.
Процессоры с РОН
Любой регистр как операнд может участвовать в любой команде. Работа с операндами осуществляется только через регистры. Среди всех регистров выделяются два:
SP - указатель стека
PC - счетчик команд
Нет команд push и pop, всегда используется mov:
mov (SP)+,R0 вместо pop R0
mov R0,-(SP) вместо push R0
Вместо непосредственной загрузки константы в регистр (mov #5,R0) используется:
mov (PC)+,R0
db 5
PC может использоваться как универсальный регистр во всем множестве команд ЦП. PC используется и при выборке команды и при ее исполнении.
Конвейеризация сильно затруднена.
Недостаток: большой размер команд, т.к. много операндов, много типов адресации.
Можно уменьшить оперативность инструкций и упростить внутреннюю топологию ЦП.
Процессоры аккумуляторного типа
При любой операции один из операндов всегда находится в аккумуляторе и результат всегда помещается в аккумулятор. Непосредственно обратиться к PC и SP уже нельзя, но этого и не требуется.
Процессоры стекового типа
У них стек регистров. Система команд не позволяет непосредственно адресовать регистры. При выполнении операции из вершины стека снимаются операнды и кладется результат.
Имеется стандартный набор команд:
- ADD
- SUB
- MUL
- DIV
- и т.д.
и еще дополнительные (только они работают с операндами в памяти):
- LOAD - помещение данных из памяти в верх стека
- STORE - перемещение данных с верха стека в память
Параметры ЦП
Разрядность ЦП - разрядность его регистров.
Во время выполнения инструкции состояние процессора не определено, оно становится строго определенным после завершения выполнения текущей инструкции.
В качестве операндов кроме данных в АЛУ поступают и адреса, следовательно, разрядность ЦП прямо определяет размер адресного пространства.
Архитектуры ЦП
Скалярная.
ЦП делится на две секции, каждая из которых независимо тактируется одним тактовым генератором.
Идея: АЛУ не должно простаивать, пока идет выборка команды из памяти.
Выборка инструкции происходит параллельно с работой АЛУ. Для этого используется конвейер.
Суперскалярная.
Несколько АЛУ и каждое занимается своим делом. Добавляется АЛУ для вычисления адресов. Несколько команд могут выполняться одновременно. Возникает проблема, когда команда, стоящая в памяти дальше, выполняется быстрее. Выход - механизм замещения регистров: используются копии регистров для хранения результатов.
Принцип параллельности команд - независимость операндов, т.е. если у команд есть общий операнд - они не параллельны. Если в инструкциях операнды в памяти, то трудно проверить, пересекаются ли они - процессор считает такие команды не параллельными. Процессор оперирует относительными адресами в адресном пространстве процесса, которые дал компилятор и линковщик. Два адреса могут указывать на одно место в физической памяти и два одинаковых адреса - на разные участки физической памяти.
Архитектура RISC.
Запрещает использовать методы адресации во всех инструкциях, кроме load и store. Все мнемонические команды остаются (они необходимы всем ЦП).
add R0,R1 команды почти одинаковы с точки
sub R0,R1 зрения внутренней топологии
add R0,R1 эти сильно
add R0,(R1) отличаются
Запретив команды add R0,(R1) существенно меняем набор команд.
Таким образом, можно максимально сгруппировать команды загрузки из/в память. Еще надо побольше регистров (лучше несколько десятков).
Рост быстродействия RISC колоссален, по сравнению с CISC (если еще использовать кэш для ОП и сгруппировать обращения к ОП вместе).
Адресное пространство
Существует два типа адресных пространств:
- Логическое АП - этими адресами оперирует ЦП (разрядность ЦП)
- Физическое АП - этот адрес выставляется на шину.
В общем случае ЛА и ФА - разные.
ЦП не может сгенерировать адрес, выходящий за пределы его разрядности. Для памяти нужен ФА большой разрядности.
Возникает две проблемы:
1. Сделать физическую память разрядности больше разрядности ЦП.
2. Если увеличить разрядность ФА, тогда не хватит физической памяти, что делать? (Например, 32-разрядный процессор позволяет каждому процессу иметь ЛАП 4Гб, но где взять столько физической памяти)
Пусть ЛАП < ФАП.
Тогда нужен отдельный базовый регистр для кода - CS. Следовательно, ЦП должен выдавать Устройству Сопряжения с Шиной какой-то признак вместе с операцией, чтобы УСШ знало, какой базовый регистр использовать.
Все операции работы с памятью используют CS, если выбирается код, и DS, если выбираются данные.
Недостатки данной схемы: сегменты могут налезать друг на друга, программа сама заполняет сегментные регистры, следовательно, ей доступна вся память.
Страничное преобразование
Все логическое адресное пространство делится на страницы фиксированного размера. Все физическое адресное пространство делится на страницы того же размера.
УПА = Устройство Преобразования Адреса. УПА может добавлять к смещению произвольный базовый адрес страницы.
Таблицу страниц можно (и нужно) вынести за пределы ЦП.
В таком случае получаем диспетчер памяти (ДП) вместо УПА.
Сегментная организация памяти
Нужно частично размещать программу в памяти (?) - существуют два метода: страничный и сегментный метод организации памяти.
Вся память делится на сегменты произвольной длины. Каждый сегмент характеризуется базовым адресом и смещением.
Надо выделять физическую память сегменту (половинке - нельзя (?)).
УПА преобразует логический адрес в физический:
В Intel-процессорах имеется набор базовых регистров - CS, DS, SS, ES, GS, FS.
Для идентификации сегментов используются не их логические адреса, а их логические номера.
Дескрипторная таблица (ДТ)
Дескриптор: адресная часть (содержит базовый адрес сегмента в физической памяти) и дескрипторная часть (?) (содержит сведения о защите + длину + бит присутствия).
ДТ находится в оперативной памяти.
При обращении к байту каждый раз производится преобразование адреса + контроль выхода за границу сегмента + права доступа. Т.е., чтобы прочитать байт, нужно два обращения к памяти - так нельзя, нужно кэшировать дескрипторы!
Дескриптор загружается в скрытую часть сегментного регистра каждый раз, когда в сегментный регистр загружается нами номер сегмента. Далее - проверка выхода и прав доступа. В разных режимах работы ЦП используется один режим адресации. Скрытые части базовых сегментных регистров фактически выполняют функцию кэшей!
Недостатком данного метода является переменная длина сегментов, трудно организовать загрузку/выгрузку сегментов. Возникает фрагментация памяти.
Страничная организация памяти
Если все блоки (которые меняются) имеют один и тот же размер, исчезает фрагментация 1-го уровня. (Однако есть фрагментация 2-го уровня - блоки одного сегмента «разбегаются» по памяти).
Это и есть механизм страничной организации памяти.
ЛАП и ФАП делится на страницы фиксированного размера.
ТСП (таблица страничного преобразования) - это вектор, содержащий дескрипторы для страниц. Тут должны быть описаны все страницы ЛАП-ва. В дескрипторе страниц есть бит присутствия (есть ли страница в памяти или она на диске).
Если происходит обращение к странице, отсутствующей в памяти происходит страничное прерывание.
Существует два типа исключений: прерывание и ловушка.
В первом случае управление возвращается на ту же инструкцию, которая вызвала исключение (специально для того, чтобы можно было, загрузив недостающую страницу, повторить эту операцию). В другом - управление возвращается на инструкцию, следующую за вызвавшей исключение.
Таблица страниц каждого процесса занимает 4 Мб (?), она должна быть резидентна в памяти - это не допустимо.
Применяется 2-х уровневая система.
Каталог страниц (КС) состоит из одной физической страницы, он обязательно резидентен.
На одну операцию чтения байта потребуется три (!!!) обращения к памяти - Ужас!
Нужен кэш. Кэшируются все данные, с которыми работает ЦП (логическое кэширование не годится, нужно универсальное). Чаще всего происходит обращение к ТСП, они и будут занимать большую часть кэш.
Тогда буфер трансляции адреса (TLB) - используется только для адресных преобразований. А кэш данных - только для кэширования данных (хотя, в некоторых ЦП используется только один кэш - в расчете на то, что в нем в основном будет оседать ТСП).
Любое обращение к памяти происходит через кэш.
Кэш никогда не обменивается байтами или словами. Обращаясь к байту, кэш считывает целый блок (например, 128 бит в случае 128-разрядной шины).
Понятие интерфейса
Интерфейс - это правила перехода границы (т.е. правила, по которым граница может быть пересечена).
Типы интерфейсов:
- Физический интерфейс - правила, описывающие механические характеристики подключения ВУ.
- Электрический интерфейс - определяет величины напряжений, токов и нагрузок, которые должны выполняться при подключении.
- Логический интерфейс - определяет последовательность во времени сигналов (оперирует логическими понятиями 0 и 1, а не вольтами).
- Программный интерфейс - описывает как интерпретировать значения регистров в процессе управления устройством.
Логический интерфейс системной шины
Системная шина нужна для объединения узлов ВС.
Связь между каждыми двумя узлами может быть специализированна для этих двух узлов.
Добавление еще одного узла приводит к нехилому увеличению числа связей.
Жертвуем оптимальностью, так, что сложность связей не зависит от сложности системы. Появляется шинный интерфейс.
Оптимальность этого интерфейса будет логарифмически падать с ростом числа устройств и различием между ними.
Виды интерфейсов
Интерфейс «общая шина» (UNIBUS)
Реализовано в PDP-11 (DEC).
Максимально универсальна.
Этот интерфейс предполагает, что все устройства примерно одинаковы. Вывод идет со скоростью «самого медленного солдата» - все определяется самым медленным устройством.
Шина ISA
ISA (Industry Standard Architecture) - применяется с первых моделей PC.
ISA-8 (8 бит данных и 20 бит адреса) и ISA-16 (16 бит данных и 24 бит адреса).
Частота системной шины - до 8 МГц.
Существует расширение до 32 бит - EISA (совместима, для режима EISA используются специальные управляющие сигналы) - 32 бит адрес и данные, частота до 33 МГц.
Шина PCI
PCI (Peripheral Component Interconnect) - локальная шина, являющаяся мостом между шиной процессора и шиной ввода/вывода ISA/EISA.
Разрядность данных - 32/64 бит. Разрядность адреса - 32 бит. Частота - 33/66 МГц.
Шина является синхронной.
На ее базе существуют расширения (например AGP).
Шина VLB
VLB (VESA Local Bus) - использует шину процессора для подключения периферии (графический адаптер, контроллеры дисков и т.д.).
32-битная шина (32/64 - данные, 32 - адрес), частота колеблется от 33 до 50 МГц.
Шина MassBus
MassBus - высокоскоростная синхронная блочная шина.
Использовалась на VAX-11 (DEC).
В многошинных интерфейсах некоторые узлы выведены из-под управления общей шины.
Интерфейс системной шины. Асинхронная шина
Инициатор - ЦП. Взаимодействие происходит с одним устройством.
Любое устройство - дешифратор адреса (ДША). Обладает диапазоном адресов.
Вводится специальный таймаут для проверки существования адреса.
Среагировать на изменение сигнала можно в лучшем случае на следующем такте, т.к. триггеры переключаются не мгновенно.
Синхронная шина
К ней могут подключаться только те устройства, которые соответствуют ее временным характеристикам.
Цикл шины делится на фазы фиксированного времени.
Фаза адреса (ФА): длина - не менее 2-х тактов, чтобы приемники смогли «засечь» адрес.
Фаза ожидания (ФО): пока ВУ не выдает данные на шину. ФО имеет стандартный фиксированный размер.
Все ВУ должны успевать за ФО дешифровать адреса, выбрать данные и т.д. Иначе они не смогут работать с этой шиной.
Фаза данных - на шину выставляются данные.
Но все устройства имеют разное быстродействие. Для этого заводится сигнал wait state (WS). Он устанавливается до фазы данных - в середине ФО. ЦП, получив сигнал WS (медленное устройство), продлевает ФО еще на один такт.
Есть также сигнал High Speed (например, для ОП) - от ФО отнимается один такт.
IO/Mem - определяет, это порт ввода-вывода или адрес памяти.
Высокочастотные шины
Из-за высокой частоты передачи возникают некоторые эффекты, из-за которых могут потеряться данные.
Применяется код Хэмминга:
Завершающие три бита формируются по восьми.
2 бита - diagnostics, 1 бит - modify
Если испорчен один бит, код Хэмминга поможет его восстановить, если два - устранить ошибку.
Контроль паритета [выявит] только одну ошибку. Биты дополняются еще одним - четность/нечетность.
Если к устройству пришел неверный адрес, оно выставляет на шину сигнал ошибки. На высокочастотных шинах появляются:
- Фаза ожидания ошибки адреса
- Фаза ожидания данных
Т.к. ошибки появляются [редко], в эти фазы все просто чего-то ждут, обмена по шине нет.
Разделение шины между несколькими ЦП
Эффективность шины очень мала:
1) Большую часть времени на шине ничего не происходит.
2) Даже во время активности шины не все провода используются одновременно.
Надо совместить разные фазы шины разных ЦП, так, чтобы ЦП друг другу не мешали и использовали шину параллельно.
Предыдущий ЦП освободил шину - следующий ее занимает. Такие шины называются транзакционными.
В настоящее время в […] системах, т.к. алгоритмы анализа очень сложны (ко всему прочему, фазы могут быть разной длины).
Используется арбитр шин - устройство, которое управляет разделением шины между разными ЦП.
П просит АШ выдать ему шину. Если несколько запросов, АШ по какому-то алгоритму выделяет шину конкретному ЦП.
ЦП тогда начинает анализировать сигнал Busy.
Использование кэш
Когда мы общаемся с ВУ, должны на шину выставить адрес.
В некоторых системах:
Старшие разряды шины служат для адресации регистров ВУ.
Когда мы даем команду «писать в регистр», данные оседают в кэш. Если после этого будет дана команда «читать кэш», прочитаны данные будут прочитаны из кэша! Что неверно!
КЭШ предназначен для устройств, обладающих только свойством хранения (например, ОП). А любое ВУ обладает еще какой-нибудь функцией (при этом совсем не обязательно ему обладать функцией хранения). Например, видеопамять - хранение и отображение.
Кэш не может отличить память ВУ от ОП. От нас потребуется соответствующее управление. Надо обращение к регистрам делать отличным от обращения к ОП.
- Шина адресов
- Шина ВУстройств
То есть, делаем логическую шину, отличную от адресной.
В Intel ввели специальные инструкции - in и out. ЦП четко различает (по коду) команда работы с памятью и с портами. Обращения к ВУ не кэшируются.
Есть еще одна проблема: в случае большой памяти ВУ.
По байтам брать нельзя, т.к. на каждый байт нужно прерывание, а это накладно (на весь пакет нужно одно прерывание).
1-е решение: сигнал кэшу сбросить всю свою память перед выполнением обмена с памятью. Но сбросятся все таблицы страниц! В ЦП УПА управляет адресацией с помощью таблицы страничных преобразований.
2-е решение: для каждой страницы 2 бита: «запрет кэширования» и «кэширование только при чтении»
Способы подключения ВУ к ВС. Использование контроллера ввода/вывода
КВУ знает протокол СШ и подключается к ней. С другой стороны он подключается к ВУ, т.е. должен знать интерфейс ВУ.
Управляющими объектами (ВУ-ва) являются регистры и память. ВУ отображает их на виртуальное АП.
Если устройство быстрое и большие объемы передаваемых данных - используется резидентная память (существует два механизма - прямой доступ к памяти и отображение памяти).
Если медленное устройство и малые объемы передачи данных - используются регистры ВУ.
Как же КВУ интерпретирует адрес, выставленный на шину?..
Используются регистры:
К такому регистру (например, к RD) можно обращаться по одному адресу, но физически это два разных регистра. В один - отправляются данные, а из другого получаются.
КВУ дешевы и достаточно универсальны.
Недостаток: они реализованы в виде фиксированной логики. Логику работы изменить нельзя!
Если нужно подключать программируемые устройства, контроллеры не годятся, нужно применять механизм сопроцессора.
Механизм сопроцессора
Сопроцессор не обладает полной вычислительной самостоятельностью. Он не может самостоятельно обмениваться данными по шине, принимать решения об обмене.
Сопроцессор имеет собственную систему команд, ему требуется помощь ЦП для организации работы.
1) Сопроцессор должен отличать циклы шины ЦП от своих циклов шины.
2) ЦП также должен отличать циклы шины сопроцессора от своих.
Escape-признак - это префикс команды.
Если команда, встречаемая ЦП имеет такой префикс, ЦП ее пропускает. Сопроцессор выполняет команды, следующие за признаком Escape.
Недостаток: нельзя изолировать поток команд сопроцессора от потока команд ЦП (в поток команд ЦП входят команды сопроцессора).
Тогда применяются процессоры ввода/вывода (ПВВ).
Они также имеют собственную систему команд, но могут управлять системной шиной. Следовательно, в памяти можно изолировать команды ЦП и ПВВ.
Отличие ПВВ от ЦП: ЦП никогда не останавливается. ПВВ останавливается по завершению операции.
ПВВ часто называют канальным процессором, а его программу - канальной программой.
Применяются для управления [произвольным] оборудованием (нужно только загрузить нужную программу) (например, в Mainframeах IBM).
Механизмы управления ВУ-ми через контроллеры. Управление через отображение регистров и адресов памяти на СШ
Самый простой способ.
Драйвер ВУ должен знать, какой регистр за что отвечает. Драйвер может в любой момент времени обратиться к любому регистру.
Преимущества:
- разработчик драйвера наиболее свободен в выборе - когда и что делать;
- за 1 цикл шины позволяет обращаться к запрошенному регистру (нет задержки).
Недостаток: если устройство сложное, нужно много регистров, а разрядность шины регистров ограничена.
Следовательно, нужно экономить регистры! (см. след. тему).
Механизм косвенной адресации
Число регистров в КВУ уменьшить невозможно (сколько есть, столько есть). Регистры эти имеют некоторые адреса внутри КВУ и не отображаются на шину.
На шину отображаются два регистра - регистр номера регистра и регистр данных.
Алгоритм работы:
Надо сгенерировать два цикла шины:
Цикл 1: число, обозначающее номер регистра в рег. # регистра.
Цикл 2: данные передаются из регистра данных во внутренний регистр с этим номером, либо коммутируются внутри регистра на шину (прямо так, без пересылки данных из него в регистр данных).
Драйвер может опять в любой момент обращаться к любому регистру, но существует задержка, т.к. требуется два цикла шины.
Примечание: для ВУ с большим числом регистров, доступ к которым осуществляется редко (пример: часы реального времени (70h и 71h - регистры номера и данных) и CMOS-память - используются только в момент загрузки компьютера).
Если надо гонять часто большие объемы данных, механизм косвенной адресации неприменяем!
В случае быстрых устройств и больших объемов данных необходимо выставить мало регистров на шину, но чтобы не тратилось два цикла шины.
Конвейерная схема загрузки регистров
Смысл: любое устройство, работающее с таким КВУ имеет фиксированный набор команд и строго определенный порядок загрузки регистров для каждой команды.
Регистры уже не доступны драйверу по номеру, Номер регистра, в который будет помещена информация, определяется самой командой, а не драйвером.
Надо выполнить транзакцию и передачу КВУ данных, необходимых для данной операции. А КВУ сам распихает их по своим регистрам и запустит операцию.
В регистр команд загружаем команду (например, «читать сектор»). После этого последовательно помещаем все необходимые данные для этой команды в рег. данных.
После получения всего блока данных транзакция управления завершена, КВУ получает результат.
Чтобы не было бесконечного ожидания, считается, что любая операция записи в регистр команд сбрасывает предыдущую команду, если только она еще не выполняется.
Недостаток: в драйверах уже нельзя просто так использовать многопоточность, т.к. регистры должны запоминаться в нужном порядке.
Как еще можно снизить диапазон адресов? (см. след. тему).
Схема прямого доступа
Можно организовать так называемый канал управления (для обмена командами с КВУ).
ПДП (DMA) может использоваться как для обмена данными, так и для обмена командами.
Заполняем программную копию регистров ВУ в ОЗУ требуемыми значениями и толкаем операцию ПДП.
Контроллер ПДП копирует блок из ОЗУ в регистры ВУ. Затем, КВУ автоматически начинает производить операцию.
Также в любой момент мы можем скопировать регистры ВУ в ОЗУ.
Недостаток: для организации обмена требуется ПДП.
КВУ должно поддерживать механизм ПДП. Ему нужно два канала: для данных и для управления. В Intel количество каналов ПДП ограничено, поэтому отказались от этого механизма.
В ВС с большими диапазонами АП актуальность сужения диапазона адресов уменьшается (для 32, 64 бит). Так что используют простое отображение регистров ВУ на шину.
Управление по опросу (polling)
В
Status-регистре любого устройства всегда есть бит Ready (чаще всего он в знаковом разряде).
При поступлении команды в регистр команд аппаратура сбрасывает этот бит. При завершении команды бит снова устанавливается.
Ready bit можно проверять в цикле или по таймауту.
Для большого числа устройств работа в режиме pollingа неприемлема. Для асинхронных устройств этот режим вообще неприемлем.
Появился режим прерываний (см. след. тему).
Организация механизма прерываний
Задачи:
1) Проинформировать ЦП о завершении операции ввода/вывода.
2) Найти ту программу, которая может обработать это прерывание.
Была разработана схема, названная «векторной таблицей».
Все события пронумерованы.
Дескрипторы описывают программы обработки прерывания.
Дескрипторы аппаратно (процессорно) зависимы.
ЦП должен сохранять тот контекст, который нельзя сохранить другими средствами. Если работаем с виртуальной памятью, надо аппаратно сохранять тот контекст, который меняется автоматически аппаратно во время перехода (таблица страниц, стек и т.д.).
Чтобы выполнить процедуру аппаратного прерывания достаточно сказать о факте происхождения события и передать номер сообщения (сигнализация и передача номера).
Система прерываний - специальный набор действий (какой номер выставлять на шину, что делать, если несколько и т.д.).
Система прерываний радиального типа
Ножка запроса прерываний всегда опрашивается центральным процессором между выполнением машинных инструкций.
Аппаратно в ЦП можно блокировать опрос этого бита (CLI).
Если этот бит устанавливается в 1, начинается обработка прерываний:
1) ЦП должен спасти свой контекст.
2) ЦП должен получить номер дескриптора таблицы (для этого сгенерировать цикл шины - подтверждение прерывания).
Контроллер прерываний - программируемое через СШ устройство.
Необходимо указать контроллеру, какой номер события связан с каким ВУ.
Система прерываний радиального типа: каждое прерывание ассоциирует с каждым устройством специальный единичный запрос.
Для каждой линии IRQx - одно событие. Устройства подключаются к таким линиям.
Приоритет предоставления прерываний - алгоритм, по которому контроллер прерываний определяет приоритеты ВУ, подключаемых к одной линии IRQx (?).
В MS-DOS и Windows используется линейная приоритетная схема: устройства имеют статические приоритеты, которые определяются номером линии IRQx.
Возможны и другие алгоритмы.
Например, циклическая схема: после завершения обработки прерываний устройство становится самым низкоприоритетным.
Наивысший приоритет предоставляется асинхронным устройствам, а также системным событиям. Низший - синхронным устройствам.
Главный недостаток - ограничено число линий запроса, а следовательно и устройств.
Можно построить иерархическую схему (расширяем вторым контроллером):
Третий контроллер подключить нельзя, т.к. не хватит линий прерываний. Шина тоже может накладывать ограничение на число прерываний (ISA - 15).
Если количество устройств очень большое, нельзя использовать эту схему!
Чтобы не потерять короткие прерывания используется маска запомненных прерываний.
End of Interrupt - команда сброса масок блокировок и запомненных прерываний.
Нужно отправить ее контроллеру!
Нужно, чтобы на одну линию можно было подключить сколько угодно устройств - в этом случае нельзя использовать контроллер!
Приоритетная (параллельная) схема обработки прерываний
Производится программная или аппаратная привязка.
Устройство выставляет номер вектора на шину.
Но в цикле прерывания только одно устройство должно выставлять номер на шину.
Для этого вводится сигнал ответа устройству данного приоритета. ЦП должен иметь столько линий подтверждения прерываний, сколько у него линий запроса.
ACK должен попасть только к одному устройству данного приоритета!
Устройства с одинаковым приоритетом имеют «внутренний приоритет», определяемый их близостью к ЦП.
В этой схеме есть проблема, связанная с блокировкой запросов (в прошлой схеме проблем не было, блокировкой занимался контроллер).
С запросами связывается битовая маска, которая транслируется в слово состояния процессора. Т.е. ответственность за блокировку/разрешение прерываний возлагается на программиста (системного, конечно ;) )!
Действия, выполняемые в обработчике прерывания
intx: push ax
push si
push ds
in ax, #port
mov ds:[si], ax
inc si
dec cx
pop
...
iret
Если темп поступления прерывания высок, не успеем все обработать.
Механизм прямого доступа к памяти
ЦП не участвует в обмене.
Аппаратуре нужно знать: номер порта и адрес буфера. Контроллер прямого доступа (КПДП) и есть та самая железяка!
Это минимальный набор регистров
Как подключить это устройство.
По завершении операции КПДП генерирует прерывание.
Схемы организации прямого доступа:
1) Радиальная:
Канал прямого доступа резервируется для каждого устройства. ВУ выставляет к КПДП запрос DMAx с номером этого канала.
Недостаток: ограничиваем количество физических устройств, которые могут работать ПДП посредством каналов к КПДП.
2) Динамическая
Конкретное физическое устройство не привязывается к номеру канала.
Канал ПД выдается устройству при необходимости в прямом доступе и освобождается по завершению операции.
КПДП выполняет обмен между ОП и ВУ, генерируя цикл шины. В цикле шины могут присутствовать только физические адреса. Необходимо добавить (к регистрам выше) набор регистров адресации памяти, например, таблицу страниц.
Кроме того, буфер должен быть физически непрерывным.
Вопрос с кэшированием!
Параллельные вычисления
Общие понятия.
Сильно и слабо связанные:
- Сильно связанные - общая память для всех ЦП;
- Слабо связанные - у каждого ЦП своя память.
Однородные и неоднородные:
- Однородные - все ЦП одинаковые;
- Неоднородные - разные ЦП.
Архитектуры:
- Симметричная (SMP) - сильно связанная система с однородными процессорами;
- Массово-параллельные системы (MPP) - неоднородные слабо связанные системы.
Параллельность команд и параллельность данных.
1. Уровень процессов (изолированных задач)
2. Второй уровень параллельности - общие коды (процесс), общие данные, много потоков - многопоточная обработка.
3. Алгоритмическая параллельность - параллельностью обладает сам алгоритм. Например, умножение матрицы на вектор, можно считать компоненты результирующего вектора одновременно (параллельно).
4. Формами параллельности обладает и самый обычный код (параллельность на уровне машинных команд, независимые операции).
При увеличении числа процессоров скорость системы увеличивается не линейно. Это объясняется тем, что передача информации будет занимать все большую часть времени.
Перед обработкой данные надо сначала распределить между узлами, а потом передать результаты обратно.
Топологии массово-параллельных систем:
1. Пространственный куб
2. Пространственный тор
Цель: минимизировать число передач данных между узлами.
Обеспечивают большее количество подключенных устройств при меньшем количестве передач. Каждый узел - это ЦП, ОП, ВУ и т.д.
В SMP-системах синхронизация осуществляется с помощью семафоров.
Команда xchg AX,[BX] - обмен значений регистра AX и содержимого ячейки с адресом BX. Все происходит в цикле - чтение/модификация/запись.
При наличии кэша ситуация резко ухудшается, т.к. ЦП обращается к кэшу, а не к общей ОП. Нужен механизм управления кэшами.
Путь 1 - поместить общие данные в некэшируемые ячейки данных.
Путь 2 - Синхронизация кэшей.
Заводится бит Shared для данных в кэше. Если такие данные изменяются, то ЦП обмениваются данными.
У Интела добавляются четыре бита SMEH.
Принципы работы периферийных устройств
- Внешние Запоминающие Устройства (ВЗУ)
- Устройства отображения
- Устройства связи
- Устройства сопряжения с объектами управления
- Специальные внешние устройства (таймеры и т.д.)
· Символьные (передают потоки данных в виде потока байтов)
· Блочные (всегда обмениваются блоками информации)
· Файловые (интерпретируют информацию в виде спецификаций ФС)
§ Синхронные (поставляют данные только по команде)
§ Асинхронные (сами в любой момент времени могут осуществить передачу данных)
Коммуникационные и устройства хранения:
- Произвольного доступа
- Последовательного доступа
По доступу:
- Коллективного доступа (запросы без ограничения из многих задач, не имеют истории запросов)
- Исключительного доступа (заранее задан порядок доступа, имеют историю запросов)
- Транзакционного доступа (исключительный доступ по очереди для разных задач)
Внешние Запоминающие Устройства (ВЗУ)
Магнитные ВЗУ
Ферромагнетики имеют кристаллическую структуру
Непосредственно записывать и считывать данные с носителя невозможно, нужно использовать специальное кодирование.
Виды кодирования:
- Амплитудное - основано на абсолютном значении параметра;
- Частотное - основано не на значении параметра, а на факте его изменения.
Запись и считывание
Чтение - анализ возникающего при движении головки тока.
Запись - подача тока в головку.
Плотность записи (размер пятна) зависит от формы магнита и магнитных свойств материала.
Нечувствительный материал - жутко большое поле, значит, надо повышать площадь, чтобы не затереть соседние записи (пятна).
Чувствительный материал - больше плотность записи, но меньше уровень сигнала.
Оптические ВЗУ
Кодирование тоже частотное: луч на какое-то время уходит с фотоприемника и возникает импульс.
А если надо писать?
Болванка - диск без канавок.
Запись производится тоже лазером, но при повышенной мощности луча - прожигание канавок. Это однократная запись.
Для многократной записи:
1. Фазовые диски (быстоостывающие сплавы, если остывают медленно - становятся аморфными и работаю как зеркало, если быстро - кристаллизуются и рассеивают свет)
2. Пленочные диски (полимерные пленки, которые под воздействием лазера изменяют свои спектральные свойства)
Магнитооптические ВЗУ
Разные излучения, имеющие высокие плотности, взаимодействуют между собой. Отражаясь от магнитного домена, луч получает спиновое
отклонение (поворачивается вектор поляризации). На обычном луче этого не видно, а только на поляризованном.
Луч, попадая на домен, изменяет свой вектор поляризации в зависимости от намагниченности материала (ориентации доменов). Таким образом, луч то проходит через поляризатор фотоприемника, то - нет.
Диаметр пятна в магнитооптических ВЗУ соизмерим с размером луча лазера, т.к. запись происходит в области, нагретой лазером. При нагревании, материал становится более магнитомягким. Магнитная головка может иметь большой размер пятна, но все равно область записи очень мала. Магнитная головка используется только при записи.
Способы кодирования информации
Как закодировать импульсами нули и единицы? Наличие импульса в определенном временном диапазоне означает единицу. Надо закодировать саму информацию и временное окно.
FM (Frequency Modulation) - ФК (Фазовое Кодирование)
Каждое временное окно нужно закодировать. Временные окна делят пополам, следовательно, теряется ровно половина диска. Одно пятно уходит на синхроимпульсы, а второе на импульсы данных.
Плотность записи - 8s. А исходно - 4s.
Нужно использовать весь диск под данные и при этом не терять синхронизацию. Надо кодировать так, чтобы при длинных последовательностях нулей не терялась синхронизация.
MFM (МФК)
Применяется на 5-ти и 3-ех дюймовых дисководах.
В нулях нет данных, поэтому будем их использовать для синхронизации. Бит данных располагается в середине временного окна, бит синхронизации - в начале.
В первом нуле синхроимпульс не пишется, чтобы не затереть окно предыдущей единицы.
Недостаток: аппаратура должна чувствовать импульсы с точностью 2s.
RLL - ГК (Групповое Кодирование)
Задача - преобразовать поток данных так, чтобы в нем отсутствовали длинные последовательности нулей (не более заданного количества).
Разобьем байт на две части по 4 бита.
|
0
|
0
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
|
0
|
0
|
0
|
1
|
1
|
1
|
0
|
1
|
1
|
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
0
|
|
0
|
0
|
1
|
1
|
1
|
0
|
0
|
1
|
1
|
|
0
|
1
|
0
|
0
|
1
|
1
|
1
|
0
|
1
|
|
. . .
|
. . .
|
|
|
В новой последовательности не более двух нулей подряд - не успеем потерять синхронизацию (можно назвать RLL 0.2). Плотность информации на диске уменьшится на 1/5.
Надо, не теряя синхронизацию, более полно использовать возможности носителя, чем исходный поток данных.
Соответствующий метод - RLL. Исходные данные - просто поток битов, а выходные - такая последовательность битов, что между двумя единицами идет последовательность нулей, количество которых лежит в заданных пределах. Эти пределы прописаны в названии (например, RLL 2.7 - количество нулей от двух до семи включительно).
RLL 2.7
10 1000
11 0100
000 100100
010 001000
011 000100
0010 00001000
0011 00100100
Реально нули на диск не пишутся, только единицы. Т.о. получается логическое сжатие информации. Реальный объем битов, который пишется на диск, уменьшается примерно на 40%.
Формат диска
Весь диск разбивается на одинаковые дорожки. Проблема - как найти начало дорожки?
Это делается чисто механически - на гибких дисках это дырочка, которая ловится оптопарой, а на жестких дисках делается вырез, при прохождении которого рядом с катушкой будет возникать импульс из-за изменения магнитного поля.
Формат дорожки.
Зазор индекса содержит определенное количество синхроимпульсов, по которым определяется величина временного окна.
Сначала определяем величину временных окон, только потом читаем данные. Если не известен размер временных окон, то вообще ничего прочитать не получится.
Формат сектора
Идентификатор создается при форматировании и больше никогда не изменяется.
Последний байт маркера данных показывает тип сектора:
FB - сектор обычных данных
F8 - сектор стертых данных (не видны команде стандартного чтения)
Перед записью данных всегда производится запись межзонных промежутков.
Малые интерфейсы
Контроллеры Внешних Устройств разные для разных Системных Шин. Нужно, чтобы можно было подключать большое количество устройств к одному контроллеру.
Малые интерфейсы - интерфейсы между контроллером и внешним устройством.
ST412 (Seagate Technology)
Контроллер позволяет подключать до четырех дисков. Есть две шины - шина
управления (одна на всех) и шина данных (по одной на устройство).
Шины данных - аналоговые!
Недостаток - контроллер должен знать характеристики всех дисков, чтобы ими управлять.
Должна быть некая информация, устанавливаемая извне. Для этого использовался CMOS.
IDE
Производитель выполняет диск вместе с контроллером к нему. Контроллер IDE просто коммутирует на шину нужный диск. Одновременная работа с двумя дисками невозможна.
Не нужно знать о характеристиках диска.
Можно ввести понятие физического и логического адресов. Сейчас диску передается уже номер логического сектора (LBN), а контроллер сам знает, где этот сектор физически находится. Еще и можно применять переменное количество секторов на дорожке.
Эта схема хороша для подключения большого числа дисков, но не позволяет работать со всеми дисками одновременно.
Интерфейсы, решающие эту проблему:
SCSI (Small Computer System Interface)
Был разработан как системный интерфейс, но потом стал использоваться как малый.
Внешнее устройство имеет на выходе SCSI-клиент интерфейс.
Каждое ВУ имеет свой собственный адрес (1, 2, 3, 4, 5, 6, 7).
SCSI-сервер имеет адрес 0.
В принципе, SCSI - полноценная шина. Она имеет циклы шина, адреса, набор управляющих команд.
Команды делятся на группы:
1. Обязательные (не зависят от типа устройства)
2. Рекомендуемые (для выполнения операций обмена, зависят от типа устройства)
3. User-defined
Ограничен не сам ресурс, а скорость шины (канала доступа к этим ресурсам). Управление ВУ осуществляется с помощью подачи последовательностей команд по SCSI шине (логическое управление).
Недостаток - высокая стоимость.
Применяется там, где без него вообще нельзя.
RAID (организация дисковых массивов)
RAID0 - ничего, обычный диск.
RAID1 - оптимизация доступа.
RAID2 - резервирование (зеркало), один сектор пишется сразу на два диска, но зато чтение происходит с обоих сразу - при чтении удваивается скорость.
RAID5 - резервирование и “склеивание” дисков, нужно не менее трех. В одном из них хранится XOR всех секторов с таким же номером с других дисков. Повышается скорость из-за “склеивания” и возможность восстановить информацию, если любой из дисков (но только один) грохнется.
Hot Plug интерфейсы - PCMCIA и USB
Основная идея - обеспечить на носимых мобильных к ...........
Страницы: [1] | 2 |
|