- •Организация эвм и систем
- •Содержание
- •Глава 1. Становление и эволюция цифровой вычислительной техники 8
- •Глава 2. Архитектура системы команд 37
- •Глава 3. Программная модель процессора на примере Intel i8086 71
- •Глава 4. Интерфейсы и шины в вычислительной системе 87
- •Глава 5. Системы ввода/вывода. Организация обмена в вычислительной системе 116
- •Глава 6. Основные направления в архитектуре процессоров 129
- •Глава 7. Подсистема памяти 169
- •Глава 8. Внешние накопители 197
- •Глава 9. Основы параллельных вычислений 220
- •Глава 10. Архитектура многопроцессорных систем 237
- •Глава 1. Становление и эволюция цифровой вычислительной техники
- •1.1. Определение понятия «архитектура»
- •1.2. Уровни детализации структуры вычислительной машины
- •1.3. Эволюция средств автоматизации вычислений
- •1.3.1. Нулевое поколение (1492-1945)
- •1.3.2. Первое поколение(1937-1953)
- •1.3.3. Второе поколение (1954-1962)
- •1.3.4. Третье поколение (1963-1972)
- •1.3.5. Четвертое поколение (1972-1984)
- •1.3.6. Пятое поколение (1984-1990)
- •1.3.7. Шестое поколение (1990–)
- •1.4. Концепция машины с хранимой в памяти программой
- •1.4.1. Принцип двоичного кодирования
- •1.4.2. Принцип программного управления
- •1.4.3. Принцип однородности памяти
- •1.4.4. Принцип адресности
- •1.6 Типы структур вычислительных машин и систем
- •1.6.1. Структуры вычислительных машин
- •1.6.2. Структуры вычислительных систем
- •1.6.3. Перспективные направления исследований в области архитектуры
- •Контрольные вопросы
- •Глава 2. Архитектура системы команд
- •2.1. Понятие архитектуры системы команд
- •2.2. Классификация архитектур системы команд
- •2.2.1. Классификация по составу и сложности команд
- •2.2.2. Классификация по месту хранения операндов
- •2.3. Форматы команд
- •2.3.1. Длина команды
- •2.3.2. Разрядность полей команды
- •2.3.3. Количество адресов в команде
- •2.4. Выбор адресности команд
- •2.4.1. Адресность и емкость запоминающего устройства
- •2.4.2. Адресность и время выполнения программы
- •2.4.3. Адресность и эффективность использования памяти
- •2.5. Способы адресации операндов
- •2.5.1. Непосредственная адресация
- •2.5.2. Прямая адресация
- •2.5.3. Косвенная адресация
- •2.5.4. Регистровая адресация
- •2.5.5. Косвенная регистровая адресация
- •2.5.6. Адресация со смещением
- •2.5.7. Относительная адресация
- •2.5.8. Базовая регистровая адресация
- •2.5.9. Индексная адресация
- •2.5.10. Страничная адресация
- •2.6. Цикл команды
- •2.7. Основные показатели вычислительных машин
- •Контрольные вопросы
- •Глава 3. Программная модель процессора на примере Intel i8086
- •3.1. Программная архитектура i80х86
- •3.2. Микропроцессор i8086
- •3.3. Доступ к ячейкам памяти
- •3.4. Команды микропроцессора
- •3.5. Основные группы команд и их краткая характеристика
- •3.6. Способы адресации в архитектуре i80x86
- •Контрольные вопросы
- •Лабораторная работа №1. Программная архитектура процессора i8086
- •Глава 4. Интерфейсы и шины в вычислительной системе
- •4.1. Структура взаимосвязей вычислительной машины
- •4.2. Типы шин
- •4.2.1. Шина «процессор-память»
- •4.2.2. Шина ввода/вывода
- •4.2.3. Системная шина
- •4.3. Иерархия шин
- •4.3.1. Вычислительная машина с одной шиной
- •4.3.2. Вычислительная машина с двумя видами шин
- •4.3.3. Вычислительная машина с тремя видами шин
- •4.4. Физическая реализация шин
- •4.4.1. Механические аспекты
- •4.4.2. Электрические аспекты
- •4.5. Распределение линий шины
- •4.6. Выделенные и мультиплексируемые линии
- •4.7. Арбитраж шин
- •4.7.1. Схемы приоритетов
- •4.7.2. Схемы арбитража
- •4.8. Основные интерфейсы современных вм на базе архитектуры ia-32
- •4.8.1. Интерфейс pci
- •4.8.2. Порт agp
- •4.8.3. Pci Express
- •Глава 5. Системы ввода/вывода. Организация обмена в вычислительной системе
- •5.1. Основные функции модуля ввода-вывода
- •5.1.1. Локализация данных
- •5.1.2. Управление и синхронизация
- •5.1.3. Обмен информацией
- •5.2. Методы управления вводом/выводом
- •5.3. Система прерываний и исключений в архитектуре ia-32
- •5.4. Расширенный программируемый контроллер прерываний (apic)
- •Глава 6. Основные направления в архитектуре процессоров
- •6.1. Конвейеризация вычислений
- •6.1.1. Синхронные линейные конвейеры
- •6.1.2. Метрики эффективности конвейеров
- •6.1.3. Нелинейные конвейеры
- •6.2. Конвейер команд
- •6.3. Конфликты в конвейере команд
- •6.4. Методы решения проблемы условного перехода
- •6.5. Предсказание переходов
- •6.5.1. Статическое предсказание переходов
- •6.5.2. Динамическое предсказание переходов
- •6.6. Суперконвейерные процессоры
- •6.7. Архитектуры с полным и сокращенным набором команд
- •6.8. Основные черты risc-архитектуры
- •6.9. Преимущества и недостатки risc
- •6.10. Суперскалярные процессоры
- •Лабораторная работа №4. Исполнительные устройства вм
- •Глава 7. Подсистема памяти
- •7.1. Характеристики систем памяти
- •7.2. Иерархия запоминающих устройств
- •7.3. Основная память
- •7.4. Блочная организация основной памяти
- •7.5. Организация микросхем памяти
- •7.6. Синхронные и асинхронные запоминающие устройства
- •7.7. Оперативные запоминающие устройства
- •7.8 Статическая и динамическая оперативная память
- •7.9. Статические оперативные запоминающие устройства
- •7.10. Динамические оперативные запоминающие устройства
- •Лабораторная работа №5. Расширенная работа с памятью и передача управления в программе
- •Глава 8. Внешние накопители
- •8.1. Магнитные диски
- •8.1.1. Организация данных и форматирование
- •8.1.2. Внутреннее устройство дисковых систем
- •8.2. Массивы магнитных дисков с избыточностью
- •8.2.1. Концепция массива с избыточностью
- •8.2.2. Повышение производительности дисковой подсистемы
- •8.2.3. Повышение отказоустойчивости дисковой подсистемы
- •8.2.4. Raid уровня 0
- •8.2.5. Raid уровня 1
- •8.2.6. Raid уровня 2
- •8.2.7. Raid уровня 3
- •8.2.8. Raid уровня 4
- •8.2.9. Raid уровня 5
- •8.2.10. Raid уровня 6
- •8.2.11. Raid уровня 7
- •8.2.12. Raid уровня 10
- •8.2.13. Raid уровня 53
- •8.2.14. Особенности реализации raid-систем
- •8.3. Оптическая память
- •Контрольные вопросы
- •Глава 9. Основы параллельных вычислений
- •9.1. Уровни параллелизма
- •9.1.1. Параллелизм уровня задания
- •9.1.2. Параллелизм уровня программ
- •9.1.3. Параллелизм уровня команд
- •9.2. Метрики параллельных вычислений
- •9.2.1. Профиль параллелизма программы
- •9.2.2. Ускорение, эффективность, загрузка и качество
- •9.3. Закон Амдала
- •9.4. Закон Густафсона
- •9.5. Классификация параллельных вычислительных систем. Классификация Флинна
- •Контрольные вопросы
- •Глава 10. Архитектура многопроцессорных систем
- •Классификация многопроцессорных систем
- •Организация коммуникационной среды в системах с разделяемой памятью.
- •Когерентность кэш- памяти в smp- системах.
- •Когерентность кэш- памяти в mpp-системах.
- •Организация прерываний в мультипроцессорных системах.
- •Заключение
- •Библиографический список
3.3. Доступ к ячейкам памяти
Как уже отмечалось, в состав любой микропроцессорной системы обязательно должна входить память, в которой располагаются программы и необходимые для их работы данные. Физическая и логическая организации памяти могут существенно отличаться. При программировании на языке ассемблера память можно рассматривать как массив ячеек, каждая из которых имеет размерность, равную одному байту. При выполнении некоторых команд микропроцессора некоторые участки памяти можно рассматривать как массив из слов, двойных слов и т.п.
В отличии от регистров микропроцессора доступ к ячейкам памяти осуществляется с помощью чисел (адресов), а не имен. В программах языка ассемблера оперирует с адресом, состоящим из адреса начала сегмента и смещения относительно начала этого сегмента. Смещение называется исполнительным адресом (effective address). По определенным правилам адрес преобразуется. к логическому адресу. Правила преобразование зависят от режима работы микропроцессора – реального и защищенного. В реальном режиме работы микропроцессора логический адрес непосредственно подается на шину адреса т.е. совпадает с физическим адресом. В защищенном режиме правила получения логического адреса отличаются от реального режима, а при использовании страничной организации логические адреса могут отличаются от физического.
В микропроцессоре i8086 шина адреса состоит из 20 линий, следовательно этот микропроцессор может адресовать 220 байт. Однако размерности регистров, с помощью которых они адресуются, ограничена 16 битами. Поэтому при формировании адреса из двух частей (сегмента и смещения внутри этого сегмента) используется следующая формула:
ЕА = As * 16 + Ао,
где ЕА – логический адрес ячейки памяти, As – адрес начала сегмента (содержимое одного из сегментных регистров – с для сегмента кода, SS для сегмента стека, DS и ES для сегментов данных), Ао – смещение относительно начала сегмента ( содержимое регистра IP для сегмента кода, SP для сегмента стека и смещение адреса переменной, расположенной в сегменте данных).
Умножение 16-разрядного регистра на.16 означает его сдвиг на 4 разряда влево, причем 4 младшие разряда получающегося 20-разрядного числа заполняются нулями. Тогда эту формулу можно проиллюстрировать на рис. 33.
Рис. 33. Формирование исполнительного адреса в реальном режиме.
Так как при вычислении адреса к сегментному адресу добавляется 4 нулевых разряда, это значит, что начало любого сегмента (т.е. при нулевом смещении) может находится только по адресу, кратному 24 = 16 байт. Область памяти в 16 байт называется параграфом поэтому, сегменты в программе всегда начинаются с начала (выровнены на границе) параграфа.
Исходя из того, что адрес образуется из двух компонент, для записи его будет использоваться следующая форма – As:Ao – сегментный адрес и смешение, разделенные двоеточием. Например, запись 400:20 определяет следующий логический адрес (As = 400h, Ао = 20h):
EA = 400h * 16 + 20h = 4000h+ 20h =4020h.
В подавляющем большинстве случаев число всегда можно представить в виде суммы разных пар чисел, поэтому возможно несколько вариантов определения одного и того же адреса. Например, адрес 4020h соответствует вариантам 401:10, 402:0 и т.д.
Так как в программах начальный адрес сегмента всегда определяется содержимым одного из сегментных регистров, то в некоторых случая адреса будут записываться в виде, например, DS:10. В этом случае адрес составляют текучее значение регистра сегмента данных DS и смещение в 10h байт по отношению к началу сегмента данных. Кроме того, так как в программах на языке ассемблера может использоваться косвенная адресация, то допустима также и запись адреса, например, в таком вида – SS:BP (содержимое сегментного регистра SS определяет компоненту As, а регистра ВР – компоненту Ао адреса).
Так как при определении адреса используются две компоненты, то при определении некоторого адреса в программе можно использовать или одну часть адреса (оставляя другую неизменной – обычно используется смещение внутри сегмента), или обе компоненты. В первом случае адрес называется ближним (near adress), во втором – дальним (far address)..
При определении ближнего адреса удобно использовать компоненту адреса, задаваемую смещением, оставляя сегментный адрес неизменным. В этом случае можно легко организовать доступ к любой ячейке памяти, лежащей внутри соответствующего сегмента (например, использовать все переменные, находящиеся в сегменте данных, зная только смещения этих переменных). Так как максимальное значение смещения может быть 216 = 65536 = 64 Кбайт, то именно эта величина и определяет максимальную длину любого сегмента в реальном режиме работы микропроцессора. При дальнейшем увеличении смещения значение этой компоненты станет равной 0 (0FFFFh + 1 = 10000h, но переполнение не сохраняется в шестнадцатиразрядном регистре, поэтому результат будет равен 0000h) и, следовательно, с помощью ближнего адреса невозможно получить доступ к элементу памяти, лежащему за пределами 64 Кбайт от начала сегмента (с помощью ближней адресации невозможно работать с массивом данных, превышающим 64 Кбайт).
При адресации с помощью дальнего адреса изменяются обе компоненты адреса сегмент и смещение, поэтому с помощью такой адресации принципиально можно обратиться к любой ячейке памяти во всем диапазоне адресов микропроцессорной системы.
Дальний адрес, у которого смещение не превышает 15 байт (т.е. находится в пределах одного параграфа), называется "громадным" адресом (huge address). Такая нормализация дальнего адреса при которой может измениться и значение начала сегмента, позволяет организовать доступ к элементам памяти, занимающим размер более 64 Кбайт.
Следует отметить, что использование ближнего адреса для доступа к некоторой ячейке памяти происходит быстрее, чем с помощью дальней адресации, так как изменяется только одна из компонент адреса.