KL_OEHS

Федеральное агентство по образованию
Сибирский государственный аэрокосмический университет
имени академика М. Ф. Решетнева













ОРГАНИЗАЦИЯ ЭВМ И СИСТЕМ


Учебное пособие
для студентов, обучающихся по направлению
«Информатика и вычислительная техника»





















Красноярск 2008
УДК 681.3(075)




Организация ЭВМ и систем : учебное пособие по курсу «Организация ЭВМ и систем» для студентов спец. очной формы обучения /сост.: К. В. Богданов, В. А. Сарычев ; Сиб. гос. аэрокосмич. ун-т. Красноярск, 2008. с.





























© Сибирский государственный аэрокосмический
университет имени академика М. Ф. Решетнева, 2008
СОДЕРЖАНИЕ

13 TOC \o "3-3" \h \z \u 1413 LINK \l "_Toc192268366" 14ВВЕДЕНИЕ 13 PAGEREF _Toc192268366 \h 1471515

13 LINK \l "_Toc192268367" 14ГЛАВА 1. Становление и эволюция цифровой вычислительной техники 13 PAGEREF _Toc192268367 \h 1481515
13 LINK \l "_Toc192268368" 141.1. Определение понятия «архитектура» 13 PAGEREF _Toc192268368 \h 1491515
13 LINK \l "_Toc192268369" 141.2. Уровни детализации структуры вычислительной машины 13 PAGEREF _Toc192268369 \h 1491515
13 LINK \l "_Toc192268370" 141.3. Эволюция средств автоматизации вычислений 13 PAGEREF _Toc192268370 \h 14111515
13 LINK \l "_Toc192268371" 141.3.1. Нулевое поколение (1492-1945) 13 PAGEREF _Toc192268371 \h 14131515
13 LINK \l "_Toc192268372" 141.3.2. Первое поколение(1937-1953) 13 PAGEREF _Toc192268372 \h 14161515
13 LINK \l "_Toc192268373" 141.3.3. Второе поколение (1954-1962) 13 PAGEREF _Toc192268373 \h 14191515
13 LINK \l "_Toc192268374" 141.3.4. Третье поколение (1963-1972) 13 PAGEREF _Toc192268374 \h 14211515
13 LINK \l "_Toc192268375" 141.3.5. Четвертое поколение (1972-1984) 13 PAGEREF _Toc192268375 \h 14221515
13 LINK \l "_Toc192268376" 141.3.6. Пятое поколение (1984-1990) 13 PAGEREF _Toc192268376 \h 14231515
13 LINK \l "_Toc192268377" 141.3.7. Шестое поколение (1990–) 13 PAGEREF _Toc192268377 \h 14241515
13 LINK \l "_Toc192268378" 141.4. Концепция машины с хранимой в памяти программой 13 PAGEREF _Toc192268378 \h 14251515
13 LINK \l "_Toc192268379" 141.4.1. Принцип двоичного кодирования 13 PAGEREF _Toc192268379 \h 14271515
13 LINK \l "_Toc192268380" 141.4.2. Принцип программного управления 13 PAGEREF _Toc192268380 \h 14271515
13 LINK \l "_Toc192268381" 141.4.3. Принцип однородности памяти 13 PAGEREF _Toc192268381 \h 14281515
13 LINK \l "_Toc192268382" 141.4.4. Принцип адресности 13 PAGEREF _Toc192268382 \h 14281515
13 LINK \l "_Toc192268383" 141.5. Фон-неймановская архитектура 13 PAGEREF _Toc192268383 \h 14291515
13 LINK \l "_Toc192268384" 141.6 Типы структур вычислительных машин и систем 13 PAGEREF _Toc192268384 \h 14311515
13 LINK \l "_Toc192268385" 141.6.1. Структуры вычислительных машин 13 PAGEREF _Toc192268385 \h 14311515
13 LINK \l "_Toc192268386" 141.6.2. Структуры вычислительных систем 13 PAGEREF _Toc192268386 \h 14331515
13 LINK \l "_Toc192268387" 141.6.3. Перспективные направления исследований в области архитектуры 13 PAGEREF _Toc192268387 \h 14341515
13 LINK \l "_Toc192268388" 14Контрольные вопросы 13 PAGEREF _Toc192268388 \h 14351515

13 LINK \l "_Toc192268389" 14ГЛАВА 2. Архитектура системы команд 13 PAGEREF _Toc192268389 \h 14361515
13 LINK \l "_Toc192268390" 142.1. Понятие архитектуры системы команд 13 PAGEREF _Toc192268390 \h 14361515
13 LINK \l "_Toc192268391" 142.2. Классификация архитектур системы команд 13 PAGEREF _Toc192268391 \h 14371515
13 LINK \l "_Toc192268392" 142.2.1. Классификация по составу и сложности команд 13 PAGEREF _Toc192268392 \h 14381515
13 LINK \l "_Toc192268393" 142.2.2. Классификация по месту хранения операндов 13 PAGEREF _Toc192268393 \h 14411515
13 LINK \l "_Toc192268394" 142.3. Форматы команд 13 PAGEREF _Toc192268394 \h 14491515
13 LINK \l "_Toc192268395" 142.3.1. Длина команды 13 PAGEREF _Toc192268395 \h 14501515
13 LINK \l "_Toc192268396" 142.3.2. Разрядность полей команды 13 PAGEREF _Toc192268396 \h 14511515
13 LINK \l "_Toc192268397" 142.3.3. Количество адресов в команде 13 PAGEREF _Toc192268397 \h 14521515
13 LINK \l "_Toc192268398" 142.4. Выбор адресности команд 13 PAGEREF _Toc192268398 \h 14531515
13 LINK \l "_Toc192268399" 142.4.1. Адресность и емкость запоминающего устройства 13 PAGEREF _Toc192268399 \h 14541515
13 LINK \l "_Toc192268400" 142.4.2. Адресность и время выполнения программы 13 PAGEREF _Toc192268400 \h 14541515
13 LINK \l "_Toc192268401" 142.4.3. Адресность и эффективность использования памяти 13 PAGEREF _Toc192268401 \h 14541515
13 LINK \l "_Toc192268402" 142.5. Способы адресации операндов 13 PAGEREF _Toc192268402 \h 14551515
13 LINK \l "_Toc192268403" 142.5.1. Непосредственная адресация 13 PAGEREF _Toc192268403 \h 14561515
13 LINK \l "_Toc192268404" 142.5.2. Прямая адресация 13 PAGEREF _Toc192268404 \h 14571515
13 LINK \l "_Toc192268405" 142.5.3. Косвенная адресация 13 PAGEREF _Toc192268405 \h 14571515
13 LINK \l "_Toc192268406" 142.5.4. Регистровая адресация 13 PAGEREF _Toc192268406 \h 14581515
13 LINK \l "_Toc192268407" 142.5.5. Косвенная регистровая адресация 13 PAGEREF _Toc192268407 \h 14591515
13 LINK \l "_Toc192268408" 142.5.6. Адресация со смещением 13 PAGEREF _Toc192268408 \h 14601515
13 LINK \l "_Toc192268409" 142.5.7. Относительная адресация 13 PAGEREF _Toc192268409 \h 14611515
13 LINK \l "_Toc192268410" 142.5.8. Базовая регистровая адресация 13 PAGEREF _Toc192268410 \h 14621515
13 LINK \l "_Toc192268411" 142.5.9. Индексная адресация 13 PAGEREF _Toc192268411 \h 14641515
13 LINK \l "_Toc192268412" 142.5.10. Страничная адресация 13 PAGEREF _Toc192268412 \h 14651515
13 LINK \l "_Toc192268413" 142.6. Цикл команды 13 PAGEREF _Toc192268413 \h 14661515
13 LINK \l "_Toc192268414" 142.7. Основные показатели вычислительных машин 13 PAGEREF _Toc192268414 \h 14671515
13 LINK \l "_Toc192268415" 14Контрольные вопросы 13 PAGEREF _Toc192268415 \h 14691515

13 LINK \l "_Toc192268416" 14ГЛАВА 3. Программная модель процессора на примере Intel i8086 13 PAGEREF _Toc192268416 \h 14701515
13 LINK \l "_Toc192268417" 143.1. Программная архитектура х86 13 PAGEREF _Toc192268417 \h 14701515
13 LINK \l "_Toc192268418" 143.2. Микропроцессор 8086 13 PAGEREF _Toc192268418 \h 14731515
13 LINK \l "_Toc192268419" 143.3. Доступ к ячейкам памяти 13 PAGEREF _Toc192268419 \h 14751515
13 LINK \l "_Toc192268420" 143.4. Команды микропроцессора 13 PAGEREF _Toc192268420 \h 14781515
13 LINK \l "_Toc192268421" 143.5. Основные группы команд и их краткая характеристика 13 PAGEREF _Toc192268421 \h 14791515
13 LINK \l "_Toc192268422" 143.6. Способы адресации в архитектуре x86 13 PAGEREF _Toc192268422 \h 14801515
13 LINK \l "_Toc192268423" 14Лабораторная работа №1. Программная архитектура процессора i8086 13 PAGEREF _Toc192268423 \h 14841515

13 LINK \l "_Toc192268424" 14ГЛАВА 4. Интерфейсы и шины в вычислительной системе 13 PAGEREF _Toc192268424 \h 14861515
13 LINK \l "_Toc192268425" 144.1. Структура взаимосвязей вычислительной машины 13 PAGEREF _Toc192268425 \h 14861515
13 LINK \l "_Toc192268426" 144.2. Типы шин 13 PAGEREF _Toc192268426 \h 14891515
13 LINK \l "_Toc192268427" 144.2.1. Шина «процессор-память» 13 PAGEREF _Toc192268427 \h 14901515
13 LINK \l "_Toc192268428" 144.2.2. Шина ввода/вывода 13 PAGEREF _Toc192268428 \h 14901515
13 LINK \l "_Toc192268429" 144.2.3. Системная шина 13 PAGEREF _Toc192268429 \h 14901515
13 LINK \l "_Toc192268430" 144.3. Иерархия шин 13 PAGEREF _Toc192268430 \h 14911515
13 LINK \l "_Toc192268431" 144.3.1. Вычислительная машина с одной шиной 13 PAGEREF _Toc192268431 \h 14921515
13 LINK \l "_Toc192268432" 144.3.2. Вычислительная машина с двумя видами шин 13 PAGEREF _Toc192268432 \h 14921515
13 LINK \l "_Toc192268433" 144.3.3. Вычислительная машина с тремя видами шин 13 PAGEREF _Toc192268433 \h 14931515
13 LINK \l "_Toc192268434" 144.4. Физическая реализация шин 13 PAGEREF _Toc192268434 \h 14931515
13 LINK \l "_Toc192268435" 144.4.1. Механические аспекты 13 PAGEREF _Toc192268435 \h 14931515
13 LINK \l "_Toc192268436" 144.4.2. Электрические аспекты 13 PAGEREF _Toc192268436 \h 14941515
13 LINK \l "_Toc192268437" 144.5. Распределение линий шины 13 PAGEREF _Toc192268437 \h 14981515
13 LINK \l "_Toc192268438" 144.6. Выделенные и мультиплексируемые линии 13 PAGEREF _Toc192268438 \h 141011515
13 LINK \l "_Toc192268439" 144.7. Арбитраж шин 13 PAGEREF _Toc192268439 \h 141021515
13 LINK \l "_Toc192268440" 144.7.1. Схемы приоритетов 13 PAGEREF _Toc192268440 \h 141021515
13 LINK \l "_Toc192268441" 144.7.2. Схемы арбитража 13 PAGEREF _Toc192268441 \h 141031515
13 LINK \l "_Toc192268442" 144.8. Основные интерфейсы современных ВМ на базе архитектуры IA-32 13 PAGEREF _Toc192268442 \h 141041515
13 LINK \l "_Toc192268443" 144.8.1. Интерфейс PCI 13 PAGEREF _Toc192268443 \h 141041515
13 LINK \l "_Toc192268444" 144.8.2. Порт AGP 13 PAGEREF _Toc192268444 \h 141071515
13 LINK \l "_Toc192268445" 144.8.3. PCI Express 13 PAGEREF _Toc192268445 \h 141091515
13 LINK \l "_Toc192268446" 14Лабораторная работа №2. Мультиплексоры и демультиплексоры 13 PAGEREF _Toc192268446 \h 141111515

13 LINK \l "_Toc192268447" 14ГЛАВА 5. Системы ввода/вывода. Организация обмена в вычислительной системе 13 PAGEREF _Toc192268447 \h 141151515
13 LINK \l "_Toc192268448" 145.1. Основные функции модуля ввода-вывода 13 PAGEREF _Toc192268448 \h 141151515
13 LINK \l "_Toc192268449" 145.1.1. Локализация данных 13 PAGEREF _Toc192268449 \h 141151515
13 LINK \l "_Toc192268450" 145.1.2. Управление и синхронизация 13 PAGEREF _Toc192268450 \h 141161515
13 LINK \l "_Toc192268451" 145.1.3. Обмен информацией 13 PAGEREF _Toc192268451 \h 141161515
13 LINK \l "_Toc192268452" 145.2. Методы управления вводом/выводом 13 PAGEREF _Toc192268452 \h 141171515
13 LINK \l "_Toc192268453" 145.3. Система прерываний и исключений в архитектуре IA-32 13 PAGEREF _Toc192268453 \h 141181515
13 LINK \l "_Toc192268454" 145.4. Расширенный программируемый контроллер прерываний (APIC) 13 PAGEREF _Toc192268454 \h 141221515
13 LINK \l "_Toc192268455" 14Лабораторная работа №3. Прерывания и работа с монитором 13 PAGEREF _Toc192268455 \h 141241515

13 LINK \l "_Toc192268456" 14ГЛАВА 6. Основные направления в архитектуре процессоров 13 PAGEREF _Toc192268456 \h 141271515
13 LINK \l "_Toc192268457" 146.1. Конвейеризация вычислений 13 PAGEREF _Toc192268457 \h 141271515
13 LINK \l "_Toc192268458" 146.1.1. Синхронные линейные конвейеры 13 PAGEREF _Toc192268458 \h 141281515
13 LINK \l "_Toc192268459" 146.1.2. Метрики эффективности конвейеров 13 PAGEREF _Toc192268459 \h 141291515
13 LINK \l "_Toc192268460" 146.1.3. Нелинейные конвейеры 13 PAGEREF _Toc192268460 \h 141301515
13 LINK \l "_Toc192268461" 146.2. Конвейер команд 13 PAGEREF _Toc192268461 \h 141301515
13 LINK \l "_Toc192268462" 146.3. Конфликты в конвейере команд 13 PAGEREF _Toc192268462 \h 141311515
13 LINK \l "_Toc192268463" 146.4. Методы решения проблемы условного перехода 13 PAGEREF _Toc192268463 \h 141351515
13 LINK \l "_Toc192268464" 146.5. Предсказание переходов 13 PAGEREF _Toc192268464 \h 141381515
13 LINK \l "_Toc192268465" 146.5.1. Статическое предсказание переходов 13 PAGEREF _Toc192268465 \h 141381515
13 LINK \l "_Toc192268466" 146.5.2. Динамическое предсказание переходов 13 PAGEREF _Toc192268466 \h 141401515
13 LINK \l "_Toc192268467" 146.6. Суперконвейерные процессоры 13 PAGEREF _Toc192268467 \h 141411515
13 LINK \l "_Toc192268468" 146.7. Архитектуры с полным и сокращенным набором команд 13 PAGEREF _Toc192268468 \h 141421515
13 LINK \l "_Toc192268469" 146.8. Основные черты RISC-архитектуры 13 PAGEREF _Toc192268469 \h 141441515
13 LINK \l "_Toc192268470" 146.9. Преимущества и недостатки RISC 13 PAGEREF _Toc192268470 \h 141451515
13 LINK \l "_Toc192268471" 146.10. Суперскалярные процессоры 13 PAGEREF _Toc192268471 \h 141461515
13 LINK \l "_Toc192268472" 14Лабораторная работа №4. Исполнительные устройства ВМ 13 PAGEREF _Toc192268472 \h 141521515

13 LINK \l "_Toc192268473" 14ГЛАВА 7. Подсистема памяти 13 PAGEREF _Toc192268473 \h 141671515
13 LINK \l "_Toc192268474" 147.1. Характеристики систем памяти 13 PAGEREF _Toc192268474 \h 141671515
13 LINK \l "_Toc192268475" 147.2. Иерархия запоминающих устройств 13 PAGEREF _Toc192268475 \h 141691515
13 LINK \l "_Toc192268476" 147.3. Основная память 13 PAGEREF _Toc192268476 \h 141731515
13 LINK \l "_Toc192268477" 147.4. Блочная организация основной памяти 13 PAGEREF _Toc192268477 \h 141741515
13 LINK \l "_Toc192268478" 147.5. Организация микросхем памяти 13 PAGEREF _Toc192268478 \h 141751515
13 LINK \l "_Toc192268479" 147.6. Синхронные и асинхронные запоминающие устройства 13 PAGEREF _Toc192268479 \h 141781515
13 LINK \l "_Toc192268480" 147.7. Оперативные запоминающие устройства 13 PAGEREF _Toc192268480 \h 141791515
13 LINK \l "_Toc192268481" 147.9. Статические оперативные запоминающие устройства 13 PAGEREF _Toc192268481 \h 141821515
13 LINK \l "_Toc192268482" 147.10. Динамические оперативные запоминающие устройства 13 PAGEREF _Toc192268482 \h 141841515
13 LINK \l "_Toc192268483" 14Лабораторная работа №5. Расширенная работа с памятью и передача управления в программе 13 PAGEREF _Toc192268483 \h 141921515

13 LINK \l "_Toc192268484" 14ГЛАВА 8. Внешние накопители 13 PAGEREF _Toc192268484 \h 141951515
13 LINK \l "_Toc192268485" 148.1. Магнитные диски 13 PAGEREF _Toc192268485 \h 141951515
13 LINK \l "_Toc192268486" 148.1.1. Организация данных и форматирование 13 PAGEREF _Toc192268486 \h 141951515
13 LINK \l "_Toc192268487" 148.1.2. Внутреннее устройство дисковых систем 13 PAGEREF _Toc192268487 \h 141961515
13 LINK \l "_Toc192268488" 148.2. Массивы магнитных дисков с избыточностью 13 PAGEREF _Toc192268488 \h 142011515
13 LINK \l "_Toc192268489" 148.2.1. Концепция массива с избыточностью 13 PAGEREF _Toc192268489 \h 142011515
13 LINK \l "_Toc192268490" 148.2.2. Повышение производительности дисковой подсистемы 13 PAGEREF _Toc192268490 \h 142021515
13 LINK \l "_Toc192268491" 148.2.3. Повышение отказоустойчивости дисковой подсистемы 13 PAGEREF _Toc192268491 \h 142021515
13 LINK \l "_Toc192268492" 148.2.4. RAID уровня 0 13 PAGEREF _Toc192268492 \h 142041515
13 LINK \l "_Toc192268493" 148.2.5. RAID уровня 1 13 PAGEREF _Toc192268493 \h 142051515
13 LINK \l "_Toc192268494" 148.2.6. RAID уровня 2 13 PAGEREF _Toc192268494 \h 142061515
13 LINK \l "_Toc192268495" 148.2.7. RAID уровня 3 13 PAGEREF _Toc192268495 \h 142071515
13 LINK \l "_Toc192268496" 148.2.8. RAID уровня 4 13 PAGEREF _Toc192268496 \h 142081515
13 LINK \l "_Toc192268497" 148.2.9. RAID уровня 5 13 PAGEREF _Toc192268497 \h 142101515
13 LINK \l "_Toc192268498" 148.2.10. RAID уровня 6 13 PAGEREF _Toc192268498 \h 142101515
13 LINK \l "_Toc192268499" 148.2.11. RAID уровня 7 13 PAGEREF _Toc192268499 \h 142111515
13 LINK \l "_Toc192268500" 148.2.12. RAID уровня 10 13 PAGEREF _Toc192268500 \h 142121515
13 LINK \l "_Toc192268501" 148.2.13. RAID уровня 53 13 PAGEREF _Toc192268501 \h 142131515
13 LINK \l "_Toc192268502" 148.2.14. Особенности реализации RAID-систем 13 PAGEREF _Toc192268502 \h 142131515
13 LINK \l "_Toc192268503" 148.3. Оптическая память 13 PAGEREF _Toc192268503 \h 142141515
13 LINK \l "_Toc192268504" 14Контрольные вопросы 13 PAGEREF _Toc192268504 \h 142171515

13 LINK \l "_Toc192268505" 14ГЛАВА 9. Основы параллельных вычислений 13 PAGEREF _Toc192268505 \h 142181515
13 LINK \l "_Toc192268506" 149.1. Уровни параллелизма 13 PAGEREF _Toc192268506 \h 142181515
13 LINK \l "_Toc192268507" 149.1.1. Параллелизм уровня задания 13 PAGEREF _Toc192268507 \h 142191515
13 LINK \l "_Toc192268508" 149.1.2. Параллелизм уровня программ 13 PAGEREF _Toc192268508 \h 142211515
13 LINK \l "_Toc192268509" 149.1.3. Параллелизм уровня команд 13 PAGEREF _Toc192268509 \h 142221515
13 LINK \l "_Toc192268510" 149.2. Метрики параллельных вычислений 13 PAGEREF _Toc192268510 \h 142221515
13 LINK \l "_Toc192268511" 149.2.1. Профиль параллелизма программы 13 PAGEREF _Toc192268511 \h 142231515
13 LINK \l "_Toc192268512" 149.2.2. Ускорение, эффективность, загрузка и качество 13 PAGEREF _Toc192268512 \h 142251515
13 LINK \l "_Toc192268513" 149.3. Закон Амдала 13 PAGEREF _Toc192268513 \h 142271515
13 LINK \l "_Toc192268514" 149.4. Закон Густафсона 13 PAGEREF _Toc192268514 \h 142301515
13 LINK \l "_Toc192268515" 149.5. Классификация параллельных вычислительных систем. Классификация Флинна 13 PAGEREF _Toc192268515 \h 142311515
13 LINK \l "_Toc192268516" 14Контрольные вопросы 13 PAGEREF _Toc192268516 \h 142341515

13 LINK \l "_Toc192268517" 14ЗАКЛЮЧЕНИЕ 13 PAGEREF _Toc192268517 \h 142351515

13 LINK \l "_Toc192268518" 14БИБЛИОГРАФИЧЕСКИЙ СПИСОК 13 PAGEREF _Toc192268518 \h 142361515
15 ВВЕДЕНИЕ

Современные вычислительные машины (ВМ) и системы (ВС) являются одним из самых значимых достижений научной и инженерной мысли, влияние которого на прогресс во всех областях человеческой деятельности трудно переоценить. Поэтому понятно то пристальное внимание, которое уделяется изучению ВМ и ВС в направлении «Информатика и вычислительная техника» высшего профессионального образования.
Вычислительная техника прошла уже достаточно долгий исторический путь, и потому достаточно сложно понять принципы функционирования современных ВМ и ВС, не обладая багажом фундаментальных знаний. Кроме того, в последнее время наблюдается «уход» учебных пособий в частные вопросы информационных технологий. В противовес этому авторы попытались осветить в данном учебном пособии основные принципы построения и функционирования ВМ и ВС вообще, стараясь не останавливаться на какой либо конкретной архитектуре. Исключение сделано лишь для архитектуры I8086, которая в силу своей распространённости, наиболее доступна студентам для изучения и практической работы.
В государственном образовательном стандарте высшего профессионального образования содержание дисциплины «Организация ЭВМ и систем» определено следующим образом:
основные характеристики, области применения ЭВМ различных классов;
функциональная и структурная организация процессора;
организация памяти ЭВМ;
основные стадии выполнения команды;
организация прерываний в ЭВМ;
организация ввода-вывода;
периферийные устройства;
архитектурные особенности организации ЭВМ различных классов;
параллельные системы;
понятие о многомашинных и многопроцессорных вычислительных системах.
Все эти вопросы освещены в данном учебном пособии. Кроме того, рассмотрены не только классические основы, но и современные научные и практические достижения, характеризующие динамику развития современных аппаратных средств компьютерной техники.
Каждая глава учебного пособия раскрывает фундаментальные принципы и особенности организации какого-либо компонента ВМ или ВС. В конце каждой главы приводятся либо контрольные вопросы для закрепления материала главы, либо задания на лабораторную работу, которая основывается на материале главы. Лабораторные работы по моделированию аппаратных средств выполняются в среде Electronics Workbench, по работе с системой команд – с помощью пакета TASM.
ГЛАВА 1. Становление и эволюция цифровой вычислительной техники

Изучение любого вопроса принято начинать с договоренностей о терминологии. В нашем случае определению подлежат понятия вычислительная машина (ВМ) и вычислительная система (ВС). Сразу же оговорим, что предметом рассмотрения будут исключительно цифровые машины и системы, то есть устройства, оперирующие дискретными величинами. В литературе можно найти множество самых различных определений терминов «вычислительная машина» и «вычислительная система». Причина такой терминологической неопределенности кроется в невозможности дать удовлетворяющее всех четкое определение, достойное роли стандарта. Любая из известных формулировок несет в себе стремление авторов отразить наиболее существенные, по их мнению, моменты, в силу чего не может быть всеобъемлющей. В подтверждение этого тезиса приведем несколько определений термина «вычислительная машина», взятых из различных литературных источников. Итак, вычислительная машина это:
Устройство, которое принимает данные, обрабатывает их в соответствии с хранимой программой, генерирует результаты и обычно состоит из блоков ввода, вывода, памяти, арифметики, логики и управления.
Функциональный блок, способный выполнять реальные вычисления, включающие множественные арифметические и логические операции, без участия человека в процессе этих вычислений.
Устройство, способное:
хранить программу или программы обработки и по меньшей мере информацию, необходимую для выполнения программы;
быть свободно перепрограммируемым в соответствии с требованиями пользователя;
выполнять арифметические вычисления, определяемые пользователем;
выполнять без вмешательства человека программу обработки, требующую изменения действий путем принятия логических решений в процессе обработки.
Не отдавая предпочтения ни одной из известных формулировок терминов «вычислительная машина» и «вычислительная система», тем не менее воспользуемся наиболее общим их определением, условившись, что по мере необходимости смысловое их наполнение может уточняться.
Термином вычислительная машина будем обозначать комплекс технических и программных средств, предназначенный для автоматизации подготовки и решения задач пользователей.
В свою очередь, вычислительную систему определим как совокупность взаимосвязанных и взаимодействующих процессоров или вычислительных машин, периферийного оборудования и программного обеспечения, предназначенную для подготовки и решения задач пользователей.


1.1. Определение понятия «архитектура»

Рассмотрение принципов построения и функционирования вычислительных машин и систем предварим определением термина архитектура в том виде, как он будет далее.
Под архитектурой вычислительной машины обычно понимается логическое построение ВМ, то есть то, какой машина представляется программисту. Впервые термин «архитектура вычислительной машины» (computer architecture) был употреблен фирмой IBM при разработке машин семейства IBM 360 для описания тех средств, которыми может пользоваться программист, составляя программу на уровне машинных команд.
Подобную трактовку называют «узкой», и охватывает она перечень и формат команд, формы представления данных, механизмы ввода/вывода, способы адресации памяти и т. п. Из рассмотрения выпадают вопросы физического построения вычислительных средств: состав устройств, число регистров процессора, емкость памяти, наличие специального блока для обработки вещественных чисел, тактовая частота центрального процессора и т. д. Этот круг вопросов принято определять понятием организация или структурная организация.
Архитектура (в узком смысле) и организация это две стороны описания ВМ и ВС. Поскольку для наших целей, помимо теоретической строгости, такое деление не дает каких-либо преимуществ, то в дальнейшем будем пользоваться термином «архитектура», правда, в «широком» его толковании, объединяющем как архитектуру в узком смысле, так и организацию ВМ. Применительно к вычислительным системам термин «архитектура» дополнительно распространяется на вопросы распределения функций между составляющими ВС и взаимодействия этих составляющих.

1.2. Уровни детализации структуры вычислительной машины

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

Специалист
Круг вопросов

Производитель полупроводниковых материалов
Материал для интегральных микросхем (легированный кремний, диоксид кремния и т. п.)

Разработчик электронных схем
Электронные схемы узлов ВМ (разработка и анализ)

Разработчик интегральных микросхем
Сверхбольшие интегральные микросхемы (схемы электронных элементов, их размещение на кристалле)

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

Системный программист
Операционная система, компиляторы

Теоретик
Алгоритмы, абстрактные структуры данных



Рис. 1. Уровни детализации вычислительной машины. а – уровень «черного ящика»; б – уровень общей архитектуры; в – уровень архитектуры центрального процессора; г – уровень архитектуры устройства управления.

На первом уровне вычислительная машина рассматривается как устройство, способное хранить и обрабатывать информацию, а также обмениваться данными с внешним миром (см. рис. 1, а). ВМ представляется «черным ящиком», который может быть подключен к коммуникационной сети и к которому, в свою очередь, могут подсоединяться периферийные устройства.
Уровень общей архитектуры (см. рис. 1, б) предполагает представление ВМ в виде четырех составляющих: центрального процессора (ЦП), основной памяти (ОП), устройства ввода/вывода (УВВ) и системы шин.
На третьем уровне детализируется каждое из устройств второго уровня. Для примера взят центральный процессор (см. рис. 1, в). В простейшем варианте в нем можно выделить:
арифметико-логическое устройство (АЛУ), обеспечивающее обработку целых чисел;
блок обработки чисел в формате с плавающей запятой (БПЗ);
регистры процессора, использующиеся для краткосрочного хранения команд, данных и адресов;
устройство управления (УУ), обеспечивающее совместное функционирование устройств ВМ;
внутренние шины.
На четвертом уровне детализируются элементы третьего уровня. Так, на рис. 1, г раскрыта структура устройства управления. УУ представлено в виде четырех составляющих:
логики программной последовательности – электронных схем, обеспечивающих выполнение команд программы в последовательности, предписываемой программой;
регистров и дешифраторов устройства управления;
управляющей памяти;
логики формирования управления, генерирующей все необходимые управляющие сигналы.
Применительно к параллельным и распределенным многопроцессорным и многомашинным вычислительным системам зачастую вводят понятие «метауровня». На данном этапе метауровень рассматриваться не будет.

1.3. Эволюция средств автоматизации вычислений

Попытки облегчить, а в идеале автоматизировать процесс вычислений имеют давнюю историю, насчитывающую более 5000 лет. С развитием науки и технологий средства автоматизации вычислений непрерывно совершенствовались. Современное состояние вычислительной техники (ВТ) являет собой результат многолетней эволюции. В последнее время вопросы развития ВТ стали предметом особо пристального внимания ученых, свидетельством чего служит активно развивающаяся новая область знаний, получившая название «Теория эволюции компьютеров» (Computer evolution theory). Создатели теории обратили внимание на сходство закономерностей эволюции вычислительной техники и эволюции в биологии. В основу новой науки положены следующие постулаты:
самозарождение «живых» вычислительных систем из «неживых» элементов (в биологии это явление известно как абиогенез);
поступательное продвижение по древу эволюции от протопроцессорных (однопроцессорных) вычислительных машин к полипроцессорным (многопроцессорным) вычислительным системам;
прогресс в технологии вычислительных систем как следствие полезных мутаций и вариаций;
отмирание устаревших технологий в результате естественного отбора;
закон Мура как подтверждение эволюции вычислительных систем.
По мнению специалистов в области теории эволюции компьютеров, изучение закономерностей развития вычислительных машин и систем может, как и в биологии, привести к ощутимым практическим результатам.
В традиционной трактовке эволюцию вычислительной техники представляют как последовательную смену поколений ВТ. Появление термина «поколение» относится к 1964 году, когда фирма IBM выпустила серию компьютеров IBM 360, назвав эту серию «компьютерами третьего поколения». Сам термин имеет разные определения, наиболее популярными из которых являются:
«Поколения вычислительных машин это сложившееся в последнее время разбиение вычислительных машин на классы, определяемые элементной базой и производительностью».
«Поколения компьютеров нестрогая классификация вычислительных систем по степени развития аппаратных и, в последнее время, программных средств».
При описании эволюции ВТ обычно используют один из двух подходов: хронологический или технологический. В первом случае это хронология событий, существенно повлиявших на становление ВТ. Для наших целей больший интерес представляет технологический подход, когда развитие вычислительной техники рассматривается в терминах архитектурных решений и технологий. По словам главного конструктора фирмы DEC и одного из изобретателей мини-ЭВМ Белла: «История компьютерной индустрии почти всегда двигалась технологией».
В качестве узловых моментов, определяющих появление нового поколения ВТ, обычно выбираются революционные идеи или технологические прорывы, кардинально изменяющие дальнейшее развитие средств автоматизации вычислений. Одной из таких идей принято считать концепцию вычислительной машины с хранимой в памяти программой, сформулированную Джоном фон Нейманом. Взяв ее за точку отсчета, историю развития ВТ можно представить в виде трех этапов:
донеймановского периода;
эры вычислительных машин и систем с фон-неймановской архитектурой;
постнеймановской эпохи эпохи параллельных и распределенных вычислений, где наряду с традиционным подходом все большую роль начинают играть отличные от фон-неймановских принципы организации вычислительного процесса.
Значительно большее распространение, однако, получила привязка поколений к смене технологий. Принято говорить о «механической» эре (нулевое поколение) и последовавших за ней пяти поколениях ВС. Первые четыре поколения традиционно связывают с элементной базой вычислительных систем: электронные лампы, полупроводниковые приборы, интегральные схемы малой степени интеграции (ИМС), большие (БИС), сверхбольшие (СБИС) и ультрабольшие (УБИС) интегральные микросхемы. Пятое поколение в общепринятой интерпретации ассоциируют не столько с новой элементной базой, сколько с интеллектуальными возможностями ВС. Работы по созданию ВС пятого поколения велись в рамках четырех достаточно независимых программ, осуществлявшихся учеными США, Японии, стран Западной Европы и стран Совета экономической взаимопомощи.
Ввиду того, что ни одна из программ не привела к ожидаемым результатам, разговоры о ВС пятого поколения понемногу утихают. Трактовка пятого поколения явно выпадает из «технологического» принципа. С другой стороны, причисление всех ВС на базе сверхбольших интегральных схем (СБИС) к четвертому поколению не отражает принципиальных изменений в архитектуре ВС, произошедших за последние годы. Чтобы в какой-то мере проследить роль таких изменений, воспользуемся несколько отличной трактовкой, и выделим шесть поколений ВС. Попытаемся кратко охарактеризовать каждое из них, выделяя наиболее значимые события.

1.3.1. Нулевое поколение (1492-1945)

Для полноты картины упомянем два события, произошедшие до нашей эры: первые счеты абак, изобретенные в древнем Вавилоне за 3000 лет до н. э., и их более «современный» вариант с косточками на проволоке, появившийся в Китае примерно за 500 лет также до н. э.
«Механическая» эра (нулевое поколение) в эволюции ВТ связана с механическими, а позже электромеханическими вычислительными устройствами. Основным элементом механических устройств было зубчатое колесо. Начиная с XX века роль базового элемента переходит к электромеханическому реле. Не умаляя значения многих идей «механической» эры, необходимо отметить, что ни одно из созданных устройств нельзя с полным основанием назвать вычислительной машиной в современном ее понимании. Чтобы подчеркнуть это, вместо термина «вычислительная машина» будем использовать такие слова, как «вычислитель», «калькулятор» и т. п.
Хронология основных событий «механической» эры выглядит следующим образом.
1492 год. В одном из своих дневников Леонардо да Винчи приводит рисунок тринадцатиразрядного десятичного суммирующего устройства на основе зубчатых колес.

1623 год. Вильгельм Шиккард (Wilhelm Schickard, 1592-1635), профессор университета Тюбингена, разрабатывает устройство на основе зубчатых колес («считающие часы») для сложения и вычитания шестиразрядных десятичных чисел. Было ли устройство реализовано при жизни изобретателя, достоверно неизвестно, но в 1960 году оно было воссоздано и проявило себя вполне работоспособным.

1642 год. Блез Паскаль (Blaise Pascal, 1623-1663) представляет «Паскалин» первое реально осуществленное и получившее известность механическое цифровое вычислительное устройство. Прототип устройства суммировал и вычитал пятиразрядные десятичные числа. Паскаль изготовил более десяти таких вычислителей, причем последние модели оперировали числами длиной в восемь цифр.

1673 год. Готфрид Вильгельм Лейбниц (Gottfried Wilhelm Leibniz, 1646-1716) создает «пошаговый вычислитель» десятичное устройство для выполнения всех четырех арифметических операций над 12-разрядными десятичными числами. Результат умножения представлялся 16 цифрами. Помимо зубчатых колес в устройстве использовался новый элемент ступенчатый валик.

1786 год. Немецкий военный инженер Иоганн Мюллер (Johann Mueller, 1746-1830) выдвигает идею «разностной машины» специализированного калькулятора для табулирования логарифмов, вычисляемых разностным методом. Калькулятор, построенный на ступенчатых валиках Лейбница, получился достаточно небольшим (13 см в высоту и 30 см в диаметре), но при этом мог выполнять все четыре арифметических действия над 14-разрядными числами.

1801 год. Жозеф Мария Жаккард (Joseph-Marie Jacquard, 1752-1834) строит ткацкий станок с программным управлением, программа работы которого задается с помощью комплекта перфокарт.

1832 год. Английский математик Чарльз Бэббидж (Charles Babbage, 1792-1871) создает сегмент разностной машины, оперирующий шестиразрядными числами и разностями второго порядка. Разностная машина Бэббиджа по идее аналогична калькулятору Мюллера.

1834 год. Пер Георг Шутц (Per George Scheutz, 1785-1873) из Стокгольма, используя краткое описание проекта Бэббиджа, создает из дерева небольшую разностную машину.
1836 год. Бэббидж разрабатывает проект «аналитической машины». Проект предусматривает три считывателя с перфокарт для ввода программ и данных, память (по Бэббиджу – «склад») на пятьдесят 40-разрядных чисел, два аккумулятора для хранения промежуточных результатов. В программировании машины предусмотрена концепция условного перехода. В проект заложен также и прообраз микропрограммирования – содержание инструкций предполагалось задавать путем позиционирования металлических штырей в цилиндре с отверстиями. По оценкам автора, суммирование должно было занимать 3 с, а умножение и деление – 2 - 4 мин.

1843 год. Георг Шутц совместно с сыном Эдвардом (Edvard Scheutz, 1821-1881) строят разностную машину с принтером для работы с разностями третьего порядка.

1871 год. Бэббидж создает прототип одного из устройств своей аналитической машины «мельницу» (так он окрестил то, что сейчас принято называть центральным процессором), а также принтер.

1885 год. Дорр Фельт (Dorr E. Felt, 1862-1930) из Чикаго строит свой «комптометр» первый калькулятор, где числа вводятся нажатием клавиш.

1890 год. Результаты переписи населения в США обрабатываются с помощью перфокарточного табулятора, созданного Германом Холлеритом (Herman Hollerith, 1860-1929) из Массачусетсского технологического института.

1892 год. Вильям Барроуз (William S. Burroughs, 1857-1898) предлагает устройство, схожее с калькулятором Фельта, но более надежное, и от этого события берет старт индустрия офисных калькуляторов.

1937 год. Джорж Стибитц (George Stibitz, 1904-1995) из Bell Telephone Laboratories демонстрирует первый однобитовый двоичный вычислитель на базе электромеханических реле.

1937 год. Алан Тьюринг (Alan M. Turing, 1912-1954) из Кембриджского университета публикует статью, в которой излагает концепцию теоретической упрощенной вычислительной машины, в дальнейшем получившей название машины Тьюринга.

1938 год. Клод Шеннон (Claude E. Shannon, 1916-2001) публикует статью о реализации символической логики на базе реле.

1938 год. Немецкий инженер Конрад Цузе (Konrad Zuse, 1910-1995) строит механический программируемый вычислитель Z1 с памятью на 1000 бит. В последнее время Z1 все чаще называют первым в мире компьютером.
1939 год. Джордж Стибитц и Сэмюэль Вильяме (Samuel Williams, 1911-1977) представили Model I калькулятор на базе релейной логики, управляемый с помощью модифицированного телетайпа, что позволило подключаться к калькулятору по телефонной линии. Более поздние модификации допускали также определенную степень программирования.

1940 год. Следующая работа Цузе электромеханическая машина Z2, основу которой составляла релейная логика, хотя память, как и в Z1, была механической.

1941 год. Цузе создает электромеханический программируемый вычислитель Z3. Вычислитель содержит 2600 электромеханических реле. Z3 это первая попытка реализации принципа программного управления, хотя и не в полном объеме (в общепринятом понимании этот принцип еще не был сформулирован). В частности, не предусматривалась возможность условного перехода. Программа хранилась на перфоленте. Емкость памяти составляла 64 22-битовых слова. Операция умножения занимала 3-5 с.

1943 год. Группа ученых Гарвардского университета во главе с Говардом Айке-ном (Howard Aiken, 1900-1973) разрабатывает вычислитель ASCC Mark I (Automatic Sequence-Controlled Calculator Mark I) первый программно управляемый вычислитель, получивший широкую известность. Длина устройства составила 18м, а весило оно 5 т. Машина состояла из множества вычислителей, обрабатывающих свои части общей задачи под управлением единого устройства управления. Команды считывались с бумажной перфоленты и выполнялись в порядке считывания. Данные считывались с перфокарт. Вычислитель обрабатывал 23-разрядные числа, при этом сложение занимало 0,3 с, умножение 4 с, а деление 10 с.

1945 год. Цузе завершает Z4 улучшенную версию вычислителя Z3. По архитектуре у Z4 очень много общих черт с современными ВМ: память и процессор представлены отдельными устройствами, процессор может обрабатывать числа с плавающей запятой и, в дополнение к четырем основным арифметическим операциям, способен извлекать квадратный корень. Программа хранится на перфоленте и считывается последовательно.
Не умаляя важности каждого из перечисленных фактов, в качестве важнейшего момента «механической» эпохи все-таки выделим аналитическую машину Чарльза Бэббиджа и связанные с ней идеи.

1.3.2. Первое поколение(1937-1953)

На роль первой в истории электронной вычислительной машины в разные периоды претендовало несколько разработок. Общим у них было использование схем на базе электронно-вакуумных ламп вместо электромеханических реле. Предполагалось, что электронные ключи будут значительно надежнее, поскольку в них отсутствуют движущиеся части, однако технология того времени была настолько несовершенной, что по надежности электронные лампы оказались ненамного лучше, чем реле. Однако у электронных компонентов имелось одно важное преимущество: выполненные на них ключи могли переключаться примерно в тысячу раз быстрее своих электромеханических аналогов.
Первой электронной вычислительной машиной чаще всего называют специализированный калькулятор ABC (Atanasoff-Berry Computer). Разработан он был в период с 1939 по 1942 год профессором Джоном Атанасовым (John V. Atanasoff, 1903-1995) совместно с аспирантом Клиффордом Берри (Clifford Berry, 1918-1963) и предназначался для решения системы линейных уравнений (до 29 уравнений с 29 переменными). ABC обладал памятью на 50 слов длиной 50 бит, а запоминающими элементами служили конденсаторы с цепями регенерации. В качестве вторичной памяти использовались перфокарты, где отверстия не перфорировались, а прожигались. ABC стал считаться первой электронной ВМ, после того как судебным решением были аннулированы патенты создателей другого электронного калькулятора ENIАС. Необходимо все же отметить, что ни ABC, ни ENIАС не являются вычислительным машинами в современном понимании этого термина и их правильней классифицировать как калькуляторы.
Вторым претендентом на первенство считается вычислитель Colossus, построенный в 1943 году в Англии в местечке Bletchley Park близ Кембриджа. Изобретателем машины был профессор Макс Ньюмен (Max Newman, 1987-1984), а изготовил его Томми Флауэрс (Tommy Flowers, 1905-1998). Colossus был создан для расшифровки кодов немецкой шифровальной машины «Лоренц Шлюссель-цузат-40». В состав команды разработчиков входил также Алан Тьюринг. Машина была выполнена в виде восьми стоек высотой 2,3 м, а общая длина ее составляла 5,5 м. В логических схемах машины и в системе оптического считывания информации использовалось 2400 электронных ламп, главным образом тиратронов. Информация считывалась с пяти вращающихся длинных бумажных колец со скоростью 5000 символов/с.
Наконец, третий кандидат на роль первой электронной ВМ уже упоминавшийся программируемый электронный калькулятор общего назначения ENIAC (Electronic Numerical Integrator and Computer электронный цифровой интегратор и вычислитель). Идея калькулятора, выдвинутая в 1942 году Джоном Мочли (John J. Mauchly, 1907-1980) из университета Пенсильвании, была реализована им совместно с Преспером Эккертом (J. Presper Eckert, 1919-1995) в 1946 году. С самого начала ENIAC активно использовался в программе разработки водородной бомбы. Машина эксплуатировалась до 1955 года и применялась для генерирования случайных чисел, предсказания погоды и проектирования аэродинамических труб. ENIAC весил 30 тонн, содержал 18 000 радиоламп, имел размеры 2,5 х 30 м и обеспечивал выполнение 5000 сложений и 360 умножений в секунду. Использовалась десятичная система счисления. Программа задавалась схемой коммутации триггеров на 40 наборных полях. Когда все лампы работали, инженерный персонал мог настроить ENIAC на новую задачу, вручную изменив подключение 6000 проводов. При пробной эксплуатации выяснилось, что надежность машины чрезвычайно низка – поиск неисправностей занимал от нескольких часов до нескольких суток. По своей структуре ENIAC напоминал механические вычислительные машины. 10 триггеров соединялись в кольцо, образуя десятичный счетчик, который исполнял роль счетного колеса механической машины. Десять таких колец плюс два триггера для представления знака числа представляли запоминающий регистр. Всего в ENIAC было 20 таких регистров. Система переноса десятков в накопителях была аналогична предварительному переносу в машине Бэббиджа.
При всей важности каждой из трех рассмотренных разработок основное событие, произошедшее в этот период, связано с именем Джона фон Неймана. Американский математик Джон фон Нейман (John von Neumann, 1903-1957) принял участие в проекте ENIAC в качестве консультанта. Еще до завершения ENlAC Эккерт, Мочли и фон Нейман приступили к новому проекту EDVAC, главной особенностью которого стала идея хранимой в памяти программы.
Технология программирования в рассматриваемый период была еще на зачаточном уровне. Первые программы составлялись в машинных кодах числах, непосредственно записываемых в память ВМ. Лишь в 50-х годах началось использование языка ассемблера, позволявшего вместо числовой записи команд использовать символьную их нотацию, после чего специальной программой, также называемой ассемблером, эти символьные обозначения транслировались в соответствующие коды.
Несмотря на свою примитивность, машины первого поколения оказались весьма полезными для инженерных целей и в прикладных науках. Так, Атанасофф подсчитал, что решение системы из восьми уравнений с восемью переменными с помощью популярного тогда электромеханического калькулятора Маршана заняло бы восемь часов. В случае же 29 уравнений с 29 переменными, с которыми калькулятор ABC справлялся менее чем за час, устройство с калькулятором Маршана затратило бы 381 час. С первой задачей в рамках проекта водородной бомбы ENIAC справился за 20с, в противовес 40 часам, которые понадобились бы при использовании механических калькуляторов.
В 1947 году под руководством С. А. Лебедева начаты работы по созданию малой электронной счетной машины (МЭСМ). Эта ВМ была запущена в эксплуатацию в 1951 году и стала первой электронной ВМ в СССР и континентальной Европе.
В 1952 году Эккерт и Мочли создали первую коммерчески успешную машину UNIVAC. Именно с помощью этой ВМ было предсказано, что Эйзенхауэр в результате президентских выборов победит Стивенсона с разрывом в 438 голосов (фактический разрыв составил 442 голоса).
Также в 1952 году в опытную эксплуатацию была запущена вычислительная машина М-1 (И. С. Брук, Н. Я. Матюхин, А. Б. Залкинд). М-1 содержала 730 электронных ламп, оперативную память емкостью 256 25-разрядных слов, рулонный телетайп и обладала производительностью 15-20 операций/с. Впервые была применена двухадресная система команд. Чуть позже группой выпускников МЭИ под руководством И. С. Брука создана машина М-2 с емкостью оперативной памяти 512 34-разрядных слов и быстродействием 2000 операций/с.
В апреле 1953 года в эксплуатацию поступила самая быстродействующая в Европе ВМ БЭСМ (С. А. Лебедев). Ее быстродействие составило 8000-10 000 операций/с. Примерно в то же время выпущена ламповая ВМ «Стрела» (Ю. А. Базилевский, Б. И. Рамееев) с быстродействием 2000 операций/с.

1.3.3. Второе поколение (1954-1962)

Второе поколение характеризуется рядом достижений в элементной базе, структуре и программном обеспечении. Принято считать, что поводом для выделения нового поколения ВМ стали технологические изменения, и, главным образом, переход от электронных ламп к полупроводниковым диодам и транзисторам со временем переключения порядка 0,3 мс.
Первой ВМ, выполненной полностью на полупроводниковых диодах и транзисторах, стала TRADIC (TRAnisitor Digital Computer), построенная в Bell Labs no заказу военно-воздушных сил США как прототип бортовой ВМ. Машина состояла из 700 транзисторов и 10 000 германиевых диодов. За два года эксплуатации TRADIC отказали только 17 полупроводниковых элементов, что говорит о прорыве в области надежности, по сравнению с машинами на электронных лампах. Другой достойной упоминания полностью полупроводниковой ВМ стала ТХ-0, созданная в 1957 году в Массачусетсском технологическом институте.
Со вторым поколением ВМ ассоциируют еще одно принципиальное технологическое усовершенствование – переход от устройств памяти на базе ртутных линий задержки к устройствам на магнитных сердечниках. В запоминающих устройствах (ЗУ) на линиях задержки данные хранились в виде акустической волны, непрерывно циркулирующей по кольцу из линий задержки, а доступ к элементу данных становился возможным лишь в момент прохождения соответствующего участка волны вблизи устройства считывания/записи. Главным преимуществом ЗУ на магнитных сердечниках стал произвольный доступ к данным, когда в любой момент доступен любой элемент данных, причем время доступа не зависит от того, какой это элемент.
Технологический прогресс дополняют важные изменения в архитектуре ВМ. Прежде всего, это касается появления в составе процессора ВМ индексных регистров, что позволило упростить доступ к элементам массивов. Прежде, при циклической обработке элементов массива, необходимо было модифицировать код команды, в частности хранящийся в нем адрес элемента массива. Как следствие, в ходе вычислений коды некоторых команд постоянно изменялись, что затрудняло отладку программы. С использованием индексных регистров адрес элемента массива вычисляется как сумма адресной части команды и содержимого индексного регистра. Это позволяет обратиться к любому элементу массива, не затрагивая код команды, а лишь модифицируя содержимое индексного регистра.
Вторым принципиальным изменением в структуре ВМ стало добавление аппаратного блока обработки чисел в формате с плавающей запятой. До этого обработка вещественных чисел производилась с помощью подпрограмм, каждая из которых имитировала выполнение какой-то одной операции с плавающей запятой (сложение, умножение и т. п.), используя для этой цели обычное целочисленное арифметико-логическое устройство.
Третье значимое нововведение в архитектуре ВМ – появление в составе вычислительной машины процессоров ввода/вывода, позволяющих освободить центральный процессор от рутинных операций по управлению вводом/выводом и обеспечивающих более высокую пропускную способность тракта «память устройства ввода/вывода» (УВВ).
Ко второму поколению относятся и две первые суперЭВМ, разработанные для ускорения численных вычислений в научных приложениях. Термин «суперЭВМ» первоначально применялся по отношению к ВМ, производительность которых на дин или более порядков превосходила таковую для прочих вычислительных машин того же поколения. Во втором поколении этому определению отвечали две (правильнее сказать системы): LARC (Livermore Atomic Research Computer) i IBM 7030. Помимо прочего, в этих ВМ нашли воплощение еще две новинки: совмещение операций процессора с обращением к памяти и простейшие формы параллельной обработки данных.
Заметным событием данного периода стало появление в 1958 году машины М-20. В этой ВМ, в частности, были реализованы: частичное совмещение операций, аппаратные средства поддержки программных циклов, возможность параллельной работы процессора и устройства вывода. Оперативная память емкостью 4096 45-разрядных слов была выполнена на магнитных сердечниках.
Шестидесятые годы XX века стали периодом бурного развития вычислительной техники в СССР. За этот период разработаны и запущены в производство вычислительные машины «Урал-1», «Урал-4», «Урал-11», «Урал-14», БЭСМ-2, М-40, «Минск-1»,«Минск-2», «Минск-22», «Минск-32».В 1960 году под руководством В. М. Глушкова и Б. Н. Малиновского разработана первая полупроводниковая управляющая машина «Днепр».
Наконец, нельзя не отметить значительные события в сфере программного обеспечения, а именно создание языков программирования высокого уровня: Фортрана (1956), Алгола (1958) и Кобола (1959).



1.3.4. Третье поколение (1963-1972)

Третье поколение ознаменовалось резким увеличением вычислительной мощности ВМ, ставшим следствием больших успехов в области архитектуры, технологии и программного обеспечения. Основные технологические достижения связаны с переходом от дискретных полупроводниковых элементов к интегральным микросхемам и началом применения полупроводниковых запоминающих устройств, начинающих вытеснять ЗУ на магнитных сердечниках. Существенные изменения произошли и в архитектуре ВМ. Это, прежде всего, микропрограммирование как эффективная техника построения устройств управления сложных процессоров, а также наступление эры конвейеризации и параллельной обработки. В области программного обеспечения определяющими вехами стали первые операционные системы и реализация режима разделения времени.
В первых ВМ третьего поколения использовались интегральные схемы с малой степенью интеграции (small-scale integrated circuits, SSI), где на одном кристалле размещается порядка 10 транзисторов. Ближе к концу рассматриваемого периода на смену SSI стали приходить интегральные схемы средней степени интеграции (medium-scale integrated circuits, MSI), в которых число транзисторов на кристалле увеличилось на порядок. К этому же времени относится повсеместное применение многослойных печатных плат. Все шире востребуются преимущества параллельной обработки, реализуемые за счет множественных функциональных блоков, совмещения во времени работы центрального процессора и операций ввода/вывода, конвейеризации потоков команд и данных.
В 1964 году Сеймур Крей (Seymour Cray, 1925-1996) построил вычислительную систему CDC 6600, в архитектуру которой впервые был заложен функциональный параллелизм. Благодаря наличию 10 независимых функциональных блоков, способных работать параллельно, и 32 независимых модулей памяти удалось достичь быстродействия в 1 MFLOPS (миллион операций с плавающей запятой в секунду). Пятью годами позже Крей создал CDC 7600 с конвейеризированными функциональными блоками и быстродействием 10 MFLOPS. CDC 7600 называют первой конвейерной вычислительной системой (конвейерным процессором). Революционной вехой в истории ВТ стало создание семейства вычислительных машин IBM 360, архитектура и программное обеспечение которых на долгие годы служили эталоном для последующих больших универсальных ВМ (mainframes). В машинах этого семейства нашли воплощение многие новые для того периода идеи, в частности: предварительная выборка команд, отдельные блоки для операций с фиксированной и плавающей запятой, конвейеризация команд, кэш-память. К третьему поколению ВС относятся также первые параллельные вычислительные системы: SOLOMON корпорации Westinghause и ILLIAC IV – совместная разработка Иллинойского университета и компании Burroughs. Третье поколение ВТ ознаменовалось также появлением первых конвейерно-векторных ВС: TI-ASC (Texas Instruments Advanced Scientific Computer) и STAR-100 фирмы СВС.
Среди вычислительных машин, разработанных в этот период в СССР, прежде всего необходимо отметить «быстродействующую электронно-счетную машину» – БЭСМ-6 (С. А. Лебедев) с производительностью 1 млн операций/с. Продолжением линии М-20 стали М-220 и М-222 с производительностью до 200 000 операций/с. Оригинальная ВМ для инженерных расчетов «Мир-1» была создана под руководством В. М. Глушкова. В качестве входного языка этой ВМ использован язык программирования высокого уровня «Аналитик», во многом напоминающий язык Алгол.
В сфере программного обеспечения необходимо отметить создание в 1970 году Кеном Томпсоном (Kenneth Thompson) из Bell Labs языка В, прямого предшественника популярного языка программирования С, и появление ранней версии операционной системы UNIX.

1.3.5. Четвертое поколение (1972-1984)

Отсчет четвертого поколения обычно ведут с перехода на интегральные микросхемы большой (large-scale integration, LSI) и сверхбольшой (very large-scale integration, VLSI) степени интеграции. К первым относят схемы, содержащие около 1000 транзисторов на кристалле, в то время как число транзисторов на одном кристалле VLSI имеет порядок 100 000. При таких уровнях интеграции стало возможным уместить в одну микросхему не только центральный процессор, но и вычислительную машину (ЦП, основную память и систему ввода/вывода).
Конец 70-х и начало 80-х годов это время становления и последующего победного шествия микропроцессоров и микроЭВМ, что, однако, не снижает важности изменений, произошедших в архитектуре других типов вычислительных машин и систем.
Одним из наиболее значимых событий в области архитектуры ВМ стала идея вычислительной машины с сокращенным набором команд (RISC, Redused Instruction Set Computer), выдвинутая в 1975 году и впервые реализованная в 1980 году. В упрощенном изложении суть концепция RISC заключается в сведении набора команд ВМ к наиболее употребительным простейшим командам. Это позволяет упростить схемотехнику процессора и добиться резкого сокращения времени выполнения каждой из «простых» команд. Более сложные команды реализуются как подпрограммы, составленные из быстрых «простых» команд.
В ВМ и ВС четвертого поколения практически уходят со сцены ЗУ на магнитных сердечниках и основная память строится из полупроводниковых запоминающих устройств (ЗУ). До этого использование полупроводниковых ЗУ ограничилось лишь регистрами и кэш-памятью.
В сфере высокопроизводительных вычислений доминируют векторные вычислительные системы, более известные как суперЭВМ. Разрабатываются новые параллельные архитектуры, однако подобные работы пока еще носят экспериментальный характер. На замену большим ВМ, работающим в режиме разделения времени, приходят индивидуальные микроЭВМ и рабочие станции (этим термином обозначают сетевой компьютер, использующий ресурсы сервера).
В области программного обеспечения выделим появление языков программирования сверхвысокого уровня, таких как FP (functional programming функциональное программирование) и Пролог (Prolog, programming in logic). Эти языки ориентированы на декларативный стиль программирования, в отличие от Паскаля, С, Фортрана и т. д. языков императивного стиля программирования. При декларативном стиле программист дает математическое описание того, что должно быть вычислено, а детали того, каким образом это должно быть сделано, возлагаются на компилятор и операционную систему. Такие языки пока используются недостаточно широко, но выглядят многообещающими для ВС с массовым параллелизмом, состоящими из более чем 1000 процессоров. В компиляторах для ВС четвертого поколения начинают применяться сложные методы оптимизации кода.
Два события в области программного обеспечения связаны с Кеном Томпсоном (Kenneth Thompson) и Деннисом Ритчи (Dennis Ritchie) из Bell Labs. Это создание языка программирования С и его использование при написании операционной системы UNIX для машины DEC PDP-11. Такая форма написания операционной системы позволила быстро распространить UNIX на многие ВМ.

1.3.6. Пятое поколение (1984-1990)

Главным поводом для выделения вычислительных систем второй половины 80-х годов в самостоятельное поколение стало стремительное развитие ВС с сотнями процессоров, ставшее побудительным мотивом для прогресса в области параллельных вычислений. Ранее параллелизм вычислений выражался лишь в виде конвейеризации, векторной обработки и распределения работы между небольшим числом процессоров. Вычислительные системы пятого поколения обеспечивают такое распределение задач по множеству процессоров, при котором каждый из процессоров может выполнять задачу отдельного пользователя.
В рамках пятого поколения в архитектуре вычислительных систем сформировались два принципиально различных подхода: архитектура с совместно используемой памятью и архитектура с распределенной памятью.
Характерным примером первого подхода может служить система Sequent Balance 8000, в которой имеется большая основная память, разделяемая 20 процессорами. Помимо этого, каждый процессор оснащен собственной кэш-памятью. Каждый из процессоров может выполнять задачу своего пользователя, но при этом в составе программного обеспечения имеется библиотека подпрограмм, позволяющая программисту привлекать для решения своей задачи более одного процессора. Система широко использовалась для исследования параллельных алгоритмов и техники программирования.
Второе направление развития систем пятого поколения системы с распределенной памятью, где каждый процессор обладает своим модулем памяти, а связь между процессорами обеспечивается сетью взаимосвязей. Примером такой ВС может служить система iPSC-1 фирмы Intel, более известная как «гиперкуб». Максимальный вариант системы включал 128 процессоров. Применение распределенной памяти позволило устранить ограничения в пропускной способности тракта «процессор-память», но потенциальным «узким местом» здесь становится сеть взаимосвязей.
Наконец, третье направление в архитектуре вычислительных систем пятого поколения это ВС, в которых несколько тысяч достаточно простых процессоров работают под управлением единого устройства управления и одновременно производят одну и ту же операцию, но каждый над своими данными. К этому классу можно отнести Connection Machine фирмы Thinking Machines Inc. и МР-1 фирмы MasPar Inc.
В научных вычислениях по-прежнему ведущую роль играют векторные суперЭВМ. Многие производители предлагают более эффективные варианты с несколькими векторными процессорами, но число таких процессоров обычно невелико (от 2 до 8).
RISC-архитектура выходит из стадии экспериментов и становится базовой архитектурой для рабочих станций (workstations).
Знаковой приметой рассматриваемого периода стало стремительное развитие технологий глобальных и локальных компьютерных сетей. Это стимулировало изменения в технологии работы индивидуальных пользователей. В противовес мощным универсальным ВС, работающим в режиме разделения времени, пользователи все более отдают предпочтение подключенным к сети индивидуальным рабочим станциям. Такой подход позволяет для решения небольших задач задействовать индивидуальную машину, а при необходимости в большой вычислительной мощности обратиться к ресурсам подсоединенных к той же сети мощных файл-серверов или суперЭВМ.

1.3.7. Шестое поколение (1990–)

На ранних стадиях эволюции вычислительных средств смена поколений ассоциировалась с революционными технологическими прорывами. Каждое из первых четырех поколений имело четко выраженные отличительные признаки и вполне определенные хронологические рамки. Последующее деление на поколения уже не столь очевидно и может быть понятно лишь при ретроспективном взгляде на развитие вычислительной техники. Пятое и шестое поколения в эволюции ВТ – это отражение нового качества, возникшего в результате последовательного накопления частных достижений, главным образом в архитектуре вычислительных систем и, в несколько меньшей мере, в сфере технологий.
Поводом для начала отсчета нового поколения стали значительные успехи в области параллельных вычислений, связанные с широким распространением вычислительных систем с массовым параллелизмом. Особенности организации таких систем, обозначаемых аббревиатурой МРР (massively parallel processing), будут рассмотрены в последующих разделах. Здесь же упрощенно определим их как совокупность большого количества (до нескольких тысяч) взаимодействующих, но достаточно автономных вычислительных машин. По вычислительной мощности такие системы уже успешно конкурируют с суперЭВМ, которые, как ранее отмечалось, по своей сути являются векторными ВС. Появление вычислительных систем с массовым параллелизмом дало основание говорить о производительности, измеряемой в TFLOPS (1 TFLOPS соответствует 1012 операциям с плавающей запятой в секунду).
Вторая характерная черта шестого поколения резко возросший уровень рабочих станций. В процессорах новых рабочих станций успешно совмещаются RISC-архитектура, конвейеризация и параллельная обработка. Некоторые рабочие станции по производительности сопоставимы с суперЭВМ четвертого поколения. Впечатляющие характеристики рабочих станций породили интерес к гетерогенным (неоднородным) вычислениям, когда программа, запущенная на одной рабочей станции, может найти в локальной сети не занятые в данный момент другие станции, после чего вычисления распараллеливаются и на эти простаивающие станции.
Наконец, третьей приметой шестого поколения в эволюции ВТ стал взрывной рост глобальных сетей. Этот момент, однако, выходит за рамки данной книги, поэтому далее комментироваться не будет.
Завершая обсуждение эволюции ВТ, отметим, что верхняя граница шестого поколения хронологически пока не определена и дальнейшее развитие вычислительной техники может внести в его характеристику новые коррективы. Не исключено также, что последующие события дадут повод говорить и об очередном поколении.

1.4. Концепция машины с хранимой в памяти программой

Исходя из целей данного раздела, введем новое определение термина «вычислительная машина» как совокупности технических средств, служащих для автоматизированной обработки дискретных данных по заданному алгоритму.
Алгоритм – одно из фундаментальных понятий математики и вычислительной техники. Международная организация стандартов (ISO) формулирует понятие алгоритм как «конечный набор предписаний, определяющий решение задачи посредством конечного количества операций» (ISO 2382/1-84). Помимо этой стандартизированной формулировки существуют и другие определения. Приведем более распространенные из них. Итак, алгоритм – это:
способ преобразования информации, задаваемый с помощью конечной системы правил;
совокупность правил, определяющих эффективную процедуру решения любой задачи из некоторого заданного класса задач;
точно определенное правило действий, для которого задано указание, как и в какой последовательности это правило необходимо применять к исходным данным задачи, чтобы получить ее решение.
Основными свойствами алгоритма являются: дискретность, определенность, массовость и результативность.
Дискретность выражается в том, что алгоритм описывает действия над дискретной информацией (например, числовой или символьной), причем сами эти действия также дискретны.
Свойство определенности означает, что в алгоритме указано все, что должно быть сделано, причем ни одно из действий не должно трактоваться двояко.
Массовость алгоритма подразумевает его применимость к множеству значений исходных данных, а не только к каким-то уникальным значениям.
Наконец, результативность алгоритма состоит в возможности получения результата за конечное число шагов.
Рассмотренные свойства алгоритмов предопределяют возможность их реализации на ВМ, при этом процесс, порождаемый алгоритмом, называют вычислительным процессом.
В основе архитектуры современных ВМ лежит представление алгоритма решения задачи в виде программы последовательных вычислений. Согласно стандарту ISO 2382/1-84, программа для ВМ это «упорядоченная последовательность команд, подлежащая обработке».
ВМ, где определенным образом закодированные команды программы хранятся в памяти, известна под названием вычислительной машины с хранимой в памяти программой. Идея принадлежит создателям вычислителя ENIАС Эккерту, Мочли и фон Нейману. Еще до завершения работ над ENIАС они приступили к новому проекту EDVAC, главной особенностью которого стала концепция хранимой в памяти программы, на долгие годы определившая базовые принципы построения последующих поколений вычислительных машин. Относительно авторства существует несколько версий, но поскольку в законченном виде идея впервые была изложена в 1945 году в статье фон Неймана, именно его фамилия фигурирует в обозначении архитектуры подобных машин, составляющих подавляющую часть современного парка ВМ и ВС.
Сущность фон-неймановской концепции вычислительной машины можно свести к четырем принципам:
двоичного кодирования;
программного управления;
однородности памяти;
адресности.

1.4.1. Принцип двоичного кодирования

Согласно этому принципу, вся информация, как данные, так и команды, кодируются двоичными цифрами 0 и 1. Каждый тип информации представляется двоичной последовательностью и имеет свой формат. Последовательность битов в формате, имеющая определенный смысл, называется полем. В числовой информации обычно выделяют поле знака и поле значащих разрядов. В формате команды можно выделить два поля (рис. 2): поле кода операции (КОп) и поле адресов (адресную часть АЧ).


Рис. 2. Структура команды.

Код операции представляет собой указание, какая операция должна быть выполнена, и задается с помощью r-разрядной двоичной комбинации.
Вид адресной части и число составляющих ее адресов зависят от типа команды: в командах преобразования данных АЧ содержит адреса объектов обработки (операндов) и результата; в командах изменения порядка вычислений – адрес следующей команды программы; в командах ввода/вывода – номер устройства ввода/вывода. Адресная часть также представляется двоичной последовательностью, длину которой обозначим через р. Таким образом, команда в вычислительной машине имеет вид (г+р)-разрядной двоичной комбинации.

1.4.2. Принцип программного управления

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

1.4.3. Принцип однородности памяти

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

1.4.4. Принцип адресности

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

1.5. Фон-неймановская архитектура

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



Рис. 3. Структура фон-неймановской вычислительной машины.

Введенная информация сначала запоминается в основной памяти, а затем переносится во вторичную память, для длительного хранения. Чтобы программа могла выполняться, команды и данные должны располагаться в основной памяти (ОП), организованной таким образом, что каждое двоичное слово хранится в отдельной ячейке, идентифицируемой адресом, причем соседние ячейки памяти имеют следующие по порядку адреса. Доступ к любым ячейкам запоминающего устройства (ЗУ) основной памяти может производиться в произвольной последовательности. Такой вид памяти известен как память с произвольным доступом. ОП современных ВМ в основном состоит из полупроводниковых оперативных запоминающих устройств (ОЗУ), обеспечивающих как считывание, так и запись информации. Для таких ЗУ характерна энергозависимость – хранимая информация теряется при отключении электропитания. Если необходимо, чтобы часть основной памяти была энергонезависимой, в состав ОП включают постоянные запоминающие устройства (ПЗУ), также обеспечивающие произвольный доступ.
Размер ячейки основной памяти обычно принимается равным 8 двоичным разрядам – байту. Для хранения больших чисел используются 2,4 или 8 байтов, размещаемых в ячейках с последовательными адресами. В этом случае за адрес числа часто принимается адрес его младшего байта. Так, при хранении 32-разрядного числа в ячейках с адресами 200, 201, 202 и 203 адресом числа будет 200. Такой прием называют адресацией по младшему байту или методом «остроконечников» (little endian addressing). Возможен и противоположный подход по меньшему из адресов располагается старший байт. Этот способ известен как адресация по старшему байту или метод «тупоконечников» (big endian addressing). Адресация по младшему байту характерна для микропроцессоров фирмы Intel и мини-ЭВМ фирмы DEC, а по старшему байту для микропроцессоров фирмы Motorola и универсальных ЭВМ фирмы IBM. В принципе выбор порядка записи байтов существенен лишь при пересылке данных между ВМ с различными формами их адресации или при манипуляциях с отдельными байтами числа. В большинстве ВМ предусмотрены специальные инструкции для перехода от одного способа к другому.
Для долговременного хранения больших программ и массивов данных в ВМ обычно имеется дополнительная память, известная как вторичная. Вторичная память энергонезависима и чаще всего реализуется на базе магнитных дисков. Информация в ней хранится в виде специальных программно поддерживаемых объектов – файлов (согласно стандарту ISO, файл – это «идентифицированная совокупность экземпляров полностью описанного в конкретной программе типа данных, находящихся вне программы во внешней памяти и доступных программе посредством специальных операций»).
Устройство управления (УУ) – важнейшая часть ВМ, организующая автоматическое выполнение программ (путем реализации функций управления) и обеспечивающая функционирование ВМ как единой системы. Для пояснения функций УУ ВМ следует рассматривать как совокупность элементов, между которыми происходит пересылка информации, в ходе которой эта информация может подвергаться определенным видам обработки. Пересылка информации между любыми элементами ВМ инициируется своим сигналом управления (СУ), то есть управление вычислительным процессом сводится к выдаче нужного набора СУ в нужной временной последовательности. Основной функцией УУ является формирование управляющих сигналов, отвечающих за извлечение команд из памяти в порядке, определяемом программой, и последующее исполнение этих команд. Кроме того, УУ формирует СУ для синхронизации и координации внутренних и внешних устройств ВМ.
Еще одной неотъемлемой частью ВМ является арифметико-логическое устройство (АЛУ). АЛУ обеспечивает арифметическую и логическую обработку двух входных переменных, в результате которой формируется выходная переменная. Функции АЛУ обычно сводятся к простым арифметическим и логическим операциям, а также операциям сдвига. Помимо результата операции АЛУ формирует ряд признаков результата (флагов), характеризующих полученный результат и события, произошедшие в процессе его получения (равенство нулю, знак, четность, перенос, переполнение и т. д.). Флаги могут анализироваться в УУ с целью принятия решения о дальнейшей последовательности выполнения команд программы.
УУ и АЛУ тесно взаимосвязаны и их обычно рассматривают как единое устройство, известное как центральный процессор (ЦП) или просто процессор. Помимо УУ и АЛУ в процессор входит также набор регистров общего назначения (РОН), служащих для промежуточного хранения информации в процессе ее обработки.

1.6 Типы структур вычислительных машин и систем

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

1.6.1. Структуры вычислительных машин

В настоящее время примерно одинаковое распространение получили два способа построения вычислительных машин: с непосредственными связями и на основе шины.
Типичным представителем первого способа может служить классическая фон-неймановская ВМ (см. рис. 3). В ней между взаимодействующими устройствами (процессор, память, устройство ввода/вывода) имеются непосредственные связи. Особенности связей (число линий в шинах, пропускная способность и т. п.) определяются видом информации, характером и интенсивностью обмена. Достоинством архитектуры с непосредственными связями можно считать возможность развязки «узких мест» путем улучшения структуры и характеристик только определенных связей, что экономически может быть наиболее выгодным решением. У фон-неймановских ВМ таким «узким местом» является канал пересылки данных между ЦП и памятью, и «развязать» его достаточно непросто. Кроме того, ВМ с непосредственными связями плохо поддаются реконфигурации.
В варианте с общей шиной все устройства вычислительной машины подключены к магистральной шине, служащей единственным трактом для потоков команд, данных и управления (рис..4). Наличие общей шины существенно упрощает реализацию ВМ, позволяет легко менять состав и конфигурацию машины. Благодаря этим свойствам шинная архитектура получила широкое распространение в мини- и микроЭВМ. Вместе с тем, именно с шиной связан и основной недостаток архитектуры: в каждый момент передавать информацию по шине может только одно устройство. Основную нагрузку на шину создают обмены между процессором и памятью, связанные с извлечением из памяти команд и данных и записью в память результатов вычислений. На операции ввода/вывода остается лишь часть пропускной способности шины. Практика показывает, что даже при достаточно быстрой шине для 90% приложений этих остаточных ресурсов обычно не хватает, особенно в случае ввода или вывода больших массивов данных.


Рис. 4. Структура вычислительной машины на базе общей шины.

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


1.6.2. Структуры вычислительных систем

Понятие «вычислительная система» предполагает наличие множества процессоров или законченных вычислительных машин, при объединении которых используется один из двух подходов.
В вычислительных системах с общей памятью (рис. 5) имеется общая основная память, совместно используемая всеми процессорами системы. Связь процессоров с памятью обеспечивается с помощью коммуникационной сети, чаще всего вырождающейся в общую шину. Таким образом, структура ВС с общей памятью аналогична рассмотренной выше архитектуре с общей шиной, в силу чего ей свойственны те же недостатки. Применительно к вычислительным системам данная схема имеет дополнительное достоинство: обмен информацией между процессорами не связан с дополнительными операциями и обеспечивается за счет доступа к общим областям памяти.



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

Альтернативный вариант организации распределенная система, где общая память вообще отсутствует, а каждый процессор обладает собственной локальной памятью (рис. 6). Часто такие системы объединяют отдельные ВМ. Обмен информацией между составляющими системы обеспечивается с помощью коммуникационной сети посредством обмена сообщениями.



Рис. 6. Структура распределенной вычислительной системы.

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

1.6.3. Перспективные направления исследований в области архитектуры

Основные направления исследований в области архитектуры ВМ и ВС можно условно разделить на две группы: эволюционные и революционные. К первой группе следует отнести исследования, целью которых является совершенствование методов реализации уже достаточно известных идей. Изыскания, условно названные революционными, направлены на создание совершенно новых архитектур, принципиально отличных от уже ставшей традиционной фон-неймановской архитектуры.
Большинство из исследований, относимых к эволюционным, связано с совершенствованием архитектуры микропроцессоров (МП). В принципе кардинально новых архитектурных подходов в микропроцессорах сравнительно мало. Основные идеи, лежащие в основе современных МП, были выдвинуты много лет тому назад, но из-за несовершенства технологии и высокой стоимости реализации нашли применение только в больших универсальных ВМ (мэйнфреймах) и суперЭВМ. Наиболее значимые из изменений в архитектуре МП связаны с повышением уровня параллелизма на уровне команд (возможности одновременного выполнения нескольких команд). Здесь в первую очередь следует упомянуть конвейеризацию, суперскалярную обработку и архитектуру с командными словами сверхбольшой длины (VLIW). После успешного переноса на МП глобальных архитектурных подходов «больших» систем основные усилия исследователей теперь направлены на частные архитектурные изменения. Примерами таких эволюционных архитектурных изменений могут служить: усовершенствованные методы предсказания переходов в конвейере команд, повышение частоты успешных обращений к кэшпамяти за счет усложненных способов буферизации и т. п.
Наблюдаемые нами достижения в области вычислительных средств широкого применения пока обусловлены именно «эволюционными» исследованиями. Однако уже сейчас очевидно, что, оставаясь в рамках традиционных архитектур, мы довольно скоро натолкнемся на технологические ограничения. Один из путей преодоления технологического барьера лежит в области нетрадиционных подходов. Исследования, проводимые в этом направлении, по нашей классификации отнесены к «революционным». Справедливость такого утверждения подтверждается первыми образцами ВС с нетрадиционной архитектурой.
Оценивая перспективы эволюционного и революционного развития вычислительной техники, можно утверждать, что на ближайшее время наибольшего прогресса можно ожидать на пути использования идей параллелизма на всех его уровнях и создания эффективной иерархии запоминающих устройств.

Контрольные вопросы

По каким признакам можно разграничить понятия «вычислительная система» и «вычислительная машина»?
Какой уровень детализации вычислительной машины позволяет определить, можно ли данную ВМ причислить к фон-неймановским?
По каким признакам выделяют поколения вычислительных машин?
Какой из принципов фон-неймановской концепции вычислительной машины можно рассматривать в качестве наиболее существенного?
Оцените достоинства и недостатки архитектур вычислительных машин с непосредственными связями и общей шиной.
ГЛАВА 2. Архитектура системы команд
2.1. Понятие архитектуры системы команд

Системой команд вычислительной машины называют полный перечень команд, которые способна выполнять данная ВМ. В свою очередь, под архитектурой системы команд (АСК) принято определять те средства вычислительной машины, которые видны и доступны программисту. АСК можно рассматривать как линию согласования нужд разработчиков программного обеспечения с возможностями создателей аппаратуры вычислительной машины (рис. 7).



Рис. 7. Архитектура системы команд как интерфейс между программным и аппаратным обеспечением.

В конечном итоге, цель тех и других реализация вычислений наиболее эффективным образом, то есть за минимальное время, и здесь важнейшую роль играет правильный выбор архитектуры системы команд.
В упрощенной трактовке время выполнения программы (Tвыч) можно определить через число команд в программе (NKOM), среднее количество тактов процессора, приходящихся на одну команду (CPI), и длительность тактового периода тпр:
Tвыч= Nком * CPI *
·пр

Каждая из составляющих выражения зависит от одних аспектов архитектуры системы команд и, в свою очередь, влияет на другие (рис. 8), что свидетельствует о необходимости чрезвычайно ответственного подхода к выбору АСК.


Рис. 8. Взаимосвязь между системой команд и факторами, определяющими эффективность вычислений.

Общая характеристика архитектуры системы команд вычислительной машины складывается из ответов на следующие вопросы:
Какого вида данные будут представлены в вычислительной машине и в какой форме?
Где эти данные могут храниться помимо основной памяти?
Каким образом будет осуществляться доступ к данным?
Какие операции могут быть выполнены над данными?
Сколько операндов может присутствовать в команде?
Как будет определяться адрес очередной команды?
Каким образом будут закодированы команды?

2.2. Классификация архитектур системы команд

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


Рис. 9. Хронология развития архитектур системы команд.


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

2.2.1. Классификация по составу и сложности команд

Современная технология программирования ориентирована на языки высокого уровня (ЯВУ), главная цель которых облегчить процесс программирования. Переход к ЯВУ, однако, породил серьезную проблему: сложные операторы, характерные для ЯВУ, существенно отличаются от простых машинных операций, реализуемых в большинстве вычислительных машин. Проблема получила название семантического разрыва, а ее следствием становится недостаточно эффективное выполнение программ на ВМ. Пытаясь преодолеть семантический разрыв, разработчики вычислительных машин в настоящее время выбирают один из трех подходов и, соответственно, один из трех типов АСК:
архитектуру с полным набором команд: CISC (Complex Instruction Set Computer);
архитектуру с сокращенным набором команд: RISC (Reduced Instruction Set Computer);
архитектуру с командными словами сверхбольшой длины: VLIW (Very Long Instruction Word).
В вычислительных машинах типа CISC проблема семантического разрыва решается за счет расширения системы команд, дополнения ее сложными командами, семантически аналогичными операторам ЯВУ. Основоположником CISC-архитектуры считается компания IBM, которая начала применять данный подход с семейства машин IBM 360 и продолжает его в своих мощных современных универсальных ВМ, таких как IBM ES/9000. Аналогичный подход характерен и для компании Intel в ее микропроцессорах серии 8086 и Pentium. Для CISC-архитектуры типичны:
наличие в процессоре сравнительно небольшого числа регистров общего назначения;
большое количество машинных команд, некоторые из них аппаратно реализуют сложные операторы ЯВУ;
разнообразие способов адресации операндов; множество форматов команд различной разрядности;
наличие команд, где обработка совмещается с обращением к памяти.
К типу CISC можно отнести практически все ВМ, выпускавшиеся до середины 1980-х годов, и значительную часть производящихся в настоящее время.
Рассмотренный способ решения проблемы семантического разрыва вместе с тем ведет к усложнению аппаратуры ВМ, главным образом устройства управления, что, в свою очередь, негативно сказывается на производительности ВМ в целом. Это заставило более внимательно проанализировать программы, получаемые после компиляции с ЯВУ. Был предпринят комплекс исследований, в результате которых обнаружилось, что доля дополнительных команд, эквивалентных операторам ЯВУ, в общем объеме программ не превышает 10-20%, а для некоторых наиболее сложных команд даже 0,2%. В то же время объем аппаратных средств, требуемых для реализации дополнительных команд, возрастает весьма существенно. Так, емкость микропрограммной памяти при поддержании сложных команд может увеличиваться на 60%.
Детальный анализ результатов упомянутых исследований привел к серьезному пересмотру традиционных решений, следствием чего стало появление RISC-архитектуры. Термин RISC впервые был использован Д. Паттерсоном и Д. Дитцелем в 1980 году. Идея заключается в ограничении списка команд ВМ наиболее часто используемыми простейшими командами, оперирующими данными, размещенными только в регистрах процессорах. Обращение к памяти допускается лишь с помощью специальных команд чтения и записи. Резко уменьшено количество форматов команд и способов указания адресов операндов. Сокращение числа форматов команд и их простота, использование ограниченного количества способов адресации, отделение операций обработки данных от операций обращения к памяти позволяет существенно упростить аппаратные средства ВМ и повысить их быстродействие. RISC-архитектура разрабатывалась таким образом, чтобы уменьшить Твыч за счет сокращения CPI и
·пр. Как следствие, реализация сложных команд за счет последовательности из простых, но быстрых RISC-команд оказывается не менее эффективной, чем аппаратный вариант сложных команд в CISC-архитектуре.
Элементы RISC-архитектуры впервые появились в вычислительных машинах CDC 6600 и суперЭВМ компании Cray Research. Достаточно успешно реализуется RISC-архитектура и в современных ВМ, например в процессорах Alpha фирмы DEC, серии РА фирмы Hewlett-Packard, семействе PowerPC и т. п.
Отметим, что в последних микропроцессорах фирмы Intel и AMD широко используются идеи, свойственные RISC-архитектуре, так что многие различия между CISC и RISC постепенно стираются.
Помимо CISC- и RISC-архитектур в общей классификации был упомянут еще один тип АСК архитектура с командными словами сверхбольшой длины (VLIW). Концепция VLIW базируется на RISC-архитектуре, где несколько простых RISC-команд объединяются в одну сверхдлинную команду и выполняются параллельно. В плане АСК архитектура VLIW сравнительно мало отличается от RISC. Появился лишь дополнительный уровень параллелизма вычислений, в силу чего архитектуру VLIW логичнее адресовать не к вычислительным машинам, а к вычислительным системам.

Таблица 2

Характеристика
CISC
RISC
VLIW

Длина команды
Варьируется
Единая
Единая

Расположение полей в команде
Варьируется
Неизменное
Неизменное

Количество регистров
Несколько (часто специализированных)
Много регистров общего назначения
Много регистров общего назначения

Доступ к памяти
Может выполняться как часть команд различных типов
Выполняется только специальными командами
Выполняется только специальными командами


2.2.2. Классификация по месту хранения операндов

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

Стековая архитектура

Стеком называется память, по своей структурной организации отличная от основной памяти ВМ. Принципы построения стековой памяти детально рассматриваются позже, здесь же выделим только те аспекты, которые требуются для пояснения особенностей АСК на базе стека.
Стек образует множество логически взаимосвязанных ячеек (рис. 10), взаимодействующих по принципу «последним вошел, первым вышел» (LIFO, Last In First Out).


Рис. 10. Принцип действия стековой памяти.

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


Рис. 11. Архитектура вычислительной машины на базе стека.
Основные узлы и информационные тракты одного из возможных вариантов ВМ на основе стековой АСК показаны на рис. 11.
Информация может быть занесена в вершину стека из памяти или из АЛУ. Для записи в стек содержимого ячейки памяти с адресом х выполняется команда push x, по которой информация считывается из ячейки памяти, заносится в регистр данных, а затем проталкивается в стек. Результат операции из АЛУ заносится в вершину стека автоматически.
Сохранение содержимого вершины стека в ячейке памяти с адресом х производится командой pop х. По этой команде содержимое верхней ячейки стека подается на шину, с которой и производится запись в ячейку х, после чего вся находящаяся в стеке информация проталкивается на одну позицию вверх.
Для выполнения арифметической или логической операции на вход АЛУ подается информация, считанная из двух верхних ячеек стека (при этом содержимое стека продвигается на две позиции вверх, то есть операнды из стека удаляются). Результат операции заталкивается в вершину стека. Возможен вариант, когда результат сразу же переписывается в память с помощью автоматически выполняемой операции pop х.
Верхние ячейки стековой памяти, где хранятся операнды и куда заносится результат операции, как правило, делаются более быстродействующими и размещаются в процессоре, в то время как остальная часть стека может располагаться в основной памяти и частично даже на магнитном диске.
К достоинствам АСК на базе стека следует отнести возможность сокращения адресной части команд, поскольку все операции производятся через вершину стека, то есть адреса операндов и результата в командах арифметической и логической обработки информации указывать не нужно. Код программы получается компактным. Достаточно просто реализуется декодирование команд.
С другой стороны, стековая АСК по определению не предполагает произвольного доступа к памяти, из-за чего компилятору трудно создать эффективный программный код, хотя создание самих компиляторов упрощается. Кроме того, стек становится «узким местом» ВМ в плане повышения производительности. В силу упомянутых причин, данный вид АСК долгое время считался неперспективным и встречался, главным образом, в вычислительных машинах 1960-х годов, например в ВМ фирмы Burroughs (B5500, В6500) или фирмы Hewlett-Packard (HP2116В, HP 3000/70).
Последние события в области вычислительной техники свидетельствуют о возрождении интереса к стековой архитектуре ВМ. Связано это с популярностью языка Java и расширением сферы применения языка Forth, семантике которых наиболее близка именно стековая архитектура. Среди современных ВМ со стековой АСК можно упомянуть машины JEM 1 и JEM 2 компании ajile Systems и Clip фирмы Imsys. Особо следует отметить стековую машину IGNITE компании Patriot Scientist, которую ее авторы считают представителем нового вида АСК архитектурой с безоперандным набором команд. Для обозначения таких ВМ они предлагают аббревиатуру ROSC (Removed Operand Set Computer). ROSC-архитектура заложена и в некоторые российские проекты, например разработки ИТФ «Технофорт». Строго говоря, по своей сути ROSC мало отличается от традиционной архитектуры на базе стека, и выделение ее в отдельный вид представляется не вполне обоснованным.

Аккумуляторная архитектура

Архитектура на базе аккумулятора исторически возникла одной из первых. В ней для хранения одного из операндов арифметической или логической операции в процессоре имеется выделенный регистр аккумулятор. В этот же регистр заносится и результат операции. Поскольку адрес одного из операндов предопределен, в командах обработки достаточно явно указать местоположение только второго операнда. Изначально оба операнда хранятся в основной памяти, и до выполнения операции один из них нужно загрузить в аккумулятор. После выполнения команды обработки результат находится в аккумуляторе и, если он не является операндом для последующей команды, его требуется сохранить в ячейке памяти.
Типичная архитектура ВМ на базе аккумулятора показана на рис. 12.
Для загрузки в аккумулятор содержимого ячейки х предусмотрена команда загрузки load x. По этой команде информация считывается из ячейки памяти х, выход памяти подключается к входам аккумулятора и происходит занесение считанных данных в аккумулятор.
Запись содержимого аккумулятора в ячейку х осуществляется командой сохранения store х, при выполнении которой выходы аккумулятора подключаются к шине, после чего информация с шины записывается в память.
Для выполнения операции в АЛУ производится считывание одного из операндов из памяти в регистр данных. Второй операнд находится в аккумуляторе. Выходы регистра данных и аккумулятора подключаются к соответствующим входам АЛУ. По окончании предписанной операции результат с выхода АЛУ заносится в аккумулятор.
Достоинствами аккумуляторной АСК можно считать короткие команды и простоту декодирования команд. Однако наличие всего одного регистра порождает многократные обращения к основной памяти.


Рис. 12. Архитектура вычислительной машины на базе аккумулятора.

АСК на базе аккумулятора была популярна в ранних ВМ, таких, например, как IBM 7090, DEC PDP-8, MOS 6502.

Регистровая архитектура

В машинах данного типа процессор включает в себя массив регистров (регистровый файл), известных как регистры общего назначения (РОН). Эти регистры, в каком-то смысле, можно рассматривать как явно управляемый кэш для хранения недавно использовавшихся данных.
Размер регистров обычно фиксирован и совпадает с размером машинного слова. К любому регистру можно обратиться, указав его номер. Количество РОН в архитектурах типа CISC обычно невелико (от 8 до 32), и для представления номера конкретного регистра необходимо не более пяти разрядов, благодаря чему в адресной части команд обработки допустимо одновременно указать номера двух, а зачастую и трех регистров (двух регистров операндов и регистра результата). RISC-архитектура предполагает использование существенно большего числа РОН (до нескольких сотен), однако типичная для таких ВМ длина команды (обычно 32 разряда) позволяет определить в команде до трех регистров.
Регистровая архитектура допускает расположение операндов в одной из двух запоминающих сред: основной памяти или регистрах. С учетом возможного размещения операндов в рамках регистровых АСК выделяют три подвида команд обработки:
регистр-регистр;
регистр-память;
память-память.
В варианте «регистр-регистр» операнды могут находиться только в регистрах. В них же засылается и результат. Подтип «регистр-память» предполагает, что один из операндов размещается в регистре, а второй в основной памяти. Результат обычно замещает один из операндов. В командах типа «память-память» оба операнда хранятся в основной памяти. Результат заносится в память. Каждому из вариантов свойственны свои достоинства и недостатки (табл. 3).

Таблица 3

Вариант
Достоинства
Недостатки

Регистр-регистр
(0,3)
Простота реализации, фиксированная длина команд, простая модель формирования объектного кода при компиляции программ, возможность выполнения всех команд за одинаковое количество тактов
Большая длина объектного кода, из-за фиксированной длины команд часть разрядов в коротких командах не используется

Регистр-память
(1,2)
Данные могут быть доступны без загрузки в регистры процессора, простота кодирования команд, объектный код получается достаточно компактным
Потеря одного из операндов при записи результата, длинное поле адреса памяти в коде команды сокращает место под номер регистра, что ограничивает общее число РОН. CPI зависит от места размещения операнда

Память-память
(3,3)
Компактность объектного кода, малая потребность в регистрах для хранения промежуточных данных
Разнообразие форматов команд и времени их исполнения, низкое быстродействие из-за обращения к памяти


В выражениях вида (m, n), приведенных в первом столбце таблицы, m означает количество операндов, хранящихся в основной памяти, а n общее число операндов в команде арифметической или логической обработки.
Вариант «регистр-регистр» является основным в вычислительных машинах типа RISC. Команды типа «регистр-память» характерны для CISC-машин. Наконец, вариант «память-память» считается неэффективным, хотя и остается в наиболее сложных моделях машин класса CISC.
Возможную структуру и информационные тракты вычислительной машины с регистровой архитектурой системы команд иллюстрирует рис. 13.
Операции загрузки регистров из памяти и сохранения содержимого регистров в памяти идентичны таким же операциям с аккумулятором. Отличие состоит в этапе выбора нужного регистра, обеспечиваемого соответствующими селекторами.
Выполнение операции в АЛУ включает в себя:
выбор регистра первого операнда;
определение расположения второго операнда (память или регистр);
подачу на вход АЛУ операндов и выполнение операции;
выбор регистра результата и занесение в него результата операции из АЛУ.
Обратим внимание на то, что между АЛУ и регистровым файлом должны быть по крайней мере три шины.



Рис. 13. Архитектура вычислительной машины на базе регистров общего назначения.

К достоинствам регистровых АСК следует отнести: компактность получаемого кода, высокую скорость вычислений за счет замены обращений к основной памяти на обращения к быстрым регистрам. С другой стороны, данная архитектура требует более длинных инструкций по сравнению с аккумуляторной архитектурой.
Примерами машин на базе РОН могут служить CDC 6600, IBM 360/3/0, PDP-11, все современные персональные компьютеры. Правомочно утверждать, что в наши дни этот вид архитектуры системы команд является преобладающим.

Архитектура с выделенным доступом к памяти

В архитектуре с выделенным доступом к памяти обращение к основной памяти возможно только с помощью двух специальных команд: load и store. В английской транскрипции данную архитектуру называют Load/Store architecture. Команда load (загрузка) обеспечивает считывание значения из основной памяти и занесение его в регистр процессора (в команде обычно указывается адрес ячейки памяти и номер регистра). Пересылка информации в противоположном направлении производится командой store (сохранение). Операнды во всех командах обработки информации могут находиться только в регистрах процессора (чаще всего в регистрах общего назначения). Результат операции также заносится в регистр. В архитектуре отсутствуют команды обработки, допускающие прямое обращение к основной памяти. Допускается наличие в АСК ограниченного числа команд, где операнд является частью кода команды.
Состав и информационные тракты ВМ с выделенным доступом к памяти показаны на рис. 14. Две из трех шин, расположенных между массивом РОН и АЛУ, обеспечивают передачу в арифметико-логическое устройство операндов, хранящихся в двух регистрах общего назначения. Третья служит для занесения результата в выделенный для этого регистр. Эти же шины позволяют загрузить в регистры содержимое ячеек основной памяти и сохранить в ОП информацию, находящуюся в РОН.


Рис. 14. Архитектура вычислительной машины с выделенным доступом к памяти.

АСК с выделенным доступом к памяти характерна для всех вычислительных машин с RISC-архитектурой. Команды в таких ВМ, как правило, имеют длину 32 бита и трехадресный формат. В качестве примеров вычислительных машин с выделенным доступом к памяти можно отметить HP PA-RISC, IBM RS/6000, Sun SPARC, MIPS R4000, DEC Alpha и т. д. К достоинствам АСК следует отнести простоту декодирования и исполнения команды.

2.3. Форматы команд

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

2.3.1. Длина команды

Это важнейшее обстоятельство, влияющее на организацию и емкость памяти, структуру шин, сложность и быстродействие ЦП. С одной стороны, удобно иметь в распоряжении мощный набор команд, то есть как можно больше кодов операций, операндов, способов адресации, и максимальное адресное пространство. Однако все это требует выделения большего количества разрядов под каждое поле команды, что приводит к увеличению ее длины. Вместе с тем, для ускорения выборки из памяти желательно, чтобы команда была как можно короче, а ее длина была равна или кратна ширине шины данных. Для упрощения аппаратуры и повышения быстродействия ВМ длину команды обычно выбирают кратной байту, поскольку в большинстве ВМ основная память организована в виде 8-битовых ячеек. В рамках системы команд одной ВМ могут использоваться разные форматы команд. Обычно это связано с применением различных способов адресации. В таком случае в состав кода команды вводится поле для задания способа адресации (СА), и обобщенный формат команды приобретает вид, показанный на рис. 15.


Рис. 15. Непосредственная адресация.

Общая длина команды Rк может быть описана следующим соотношением:
13 EMBED Equation.3 1415,
где i количество адресов в команде; RA количество разрядов для записи i-го адреса; RKOп, разрядность поля кода операции; RСА разрядность поля способа адресации.
В большинстве ВМ одновременно уживаются несколько различных форматов команд.
2.3.2. Разрядность полей команды

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

Разрядность поля кода операции

Количество двоичных разрядов, отводимых под код операции, выбирается так, чтобы можно было представить любую из операций. Если система команд предполагает NKOп различных операций, то минимальная разрядность поля кода операции RКОп определяется следующим образом:
13 EMBED Equation.3 1415 RКоп = int( log2 NKOп ),
где int означает округление в большую сторону до целого числа.
При заданной длине кода команды приходится искать компромисс между разрядностью поля кода операции и адресного поля. Большее количество возможных операций предполагает длинное поле кода операции, что ведет к сокращению адресного поля, то есть к сужению адресного пространства. Для устранения этого противоречия иногда длину поля кода операции варьируют. Изначально под код операции отводится некое фиксированное число разрядов, однако для отдельных команд это поле расширяется за счет нескольких битов, отнимаемых у адресного поля. Так, например, может быть увеличено число различных команд пересылки данных. Необходимо отметить, что «урезание» части адресного поля ведет к сокращению возможностей адресации, и подобный прием рекомендуется только в тех командах, где подобное сокращение может быть оправданным.

Разрядность адресной части

В адресной части команды содержится информация о местонахождении исходных данных и месте сохранения результата операции. Обычно местонахождение каждого из операндов и результата задается в команде путем указания адреса соответствующей ячейки основной памяти или номера регистра процессора. Принципы использования информации из адресной части команды определяет система адресации. Система адресации задает число адресов в команде команды и принятые способы адресации.
Разрядности полей RAi и RСА рассчитываются по формулам:
13 EMBED Equation.3 1415 RAi = int( log2 Ni )
13 EMBED Equation.3 1415 RСА = int( log2 NCA )
где Ni, количество ячеек памяти, к которому можно обратиться с помощью i-го адреса; NCA количество способов адресации (int означает округление в большую сторону до целого числа).

2.3.3. Количество адресов в команде

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


Рис. 16. Четырёхадресный формат команды.

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


Рис. 17. Трехадресный формат команды.

К сожалению, и в трехадресном формате длина команды может оказаться весьма большой. Так, если адрес ячейки основной памяти имеет длину 32 бита, а длина кода операции 8 бит, то длина команды составит 104 бита (13 байт).
Если по умолчанию взять в качестве адреса результата адрес одного из операндов (обычно второго), то можно обойтись без третьего адреса, и в итоге получаем двухадресный формат команды (рис. 18). Естественно, что в этом случае соответствующий операнд после выполнения операции теряется.


Рис. 18. Двухадресный формат команды.

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


Рис. 19. Одноадресный формат команды.

Применение единственного регистра для хранения одного из операндов и результата является ограничивающим фактором, поэтому помимо аккумулятора часто используют и другие регистры ЦП. Так как число регистров в ЦП невелико, для указания одного из них в команде достаточно иметь сравнительно короткое адресное поле. Соответствующий формат носит название полутораадресного или регистрового формата (рис. 20).


Рис. 20. Полутораадресный формат команды.

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


Рис. 21. Нульадресный формат команды.

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

2.4. Выбор адресности команд

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

2.4.1. Адресность и емкость запоминающего устройства

Емкость запоминающего устройства для хранения программы ЕА можно оценить из соотношения
ЕА=NA * RKA
где NA количество программ в программе; RK разрядность команды, определяемая в соответствии с формулой (2.1); А индекс, указывающий адресность команд программы. С этих позиций оптимальная адресность команды определяется путем решения уравнения 13 EMBED Equation.3 1415 при условии, что найденное значение обеспечивает минимум ЕА. При выборе количества адресов по критерию «емкость ЗУ» предпочтение следует отдавать одноадресным командам.

2.4.2. Адресность и время выполнения программы

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

2.4.3. Адресность и эффективность использования памяти

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

2.5. Способы адресации операндов

Вопрос о том, каким образом в адресном поле команды может быть указано местоположение операндов, считается одним из центральных при разработке архитектуры ВМ. С точки зрения сокращения аппаратурных затрат очевидно стремление разработчиков уменьшить длину адресного поля при сохранении возможностей доступа ко всему адресному пространству. С другой стороны, способ задания адресов должен способствовать максимальному сближению конструктов языков программирования высокого уровня и машинных команд. Все это привело к тому, что в архитектуре системы команд любой ВМ предусмотрены различные способы адресации операндов.
Приступая к рассмотрению способов адресации, вначале определим понятия «исполнительный» и «адресный код».
Исполнительным адресом операнда (Лисп) называется двоичный код номера ячейки памяти, служащей источником или приемником операнда. Этот код подается на адресные входы запоминающего устройства (ЗУ), и по нему происходит фактическое обращение к указанной ячейке. Если операнд хранится не в основной памяти, а в регистре процессора, его исполнительным адресом будет номер регистра.
Адресный код команды (Лк) это двоичный код в адресном поле команды, из которого необходимо сформировать исполнительный адрес операнда.
В современных ВМ исполнительный адрес и адресный код, как правило, не совпадают, и для доступа к данным требуется соответствующее преобразование. Способ адресации это способ формирования исполнительного адреса операнда по адресному коду команды. Способ адресации существенно влияет на параметры процесса обработки информации. Одни способы позволяют увеличить емкость адресуемой памяти без удлинения команды, но снижают скорость выполнения операции, другие ускоряют операции над массивами данных, третьи упрощают работу с подпрограммами и т. д. В сегодняшних ВМ обычно имеется возможность приложения нескольких различных способов адресации операндов к одной и той же операции.
Чтобы устройство управления вычислительной машины могло определить, какой именно способ адресации принят в данной команде, в разных ВМ используются различные приемы. Часто разным способам адресации соответствуют и разные коды операции.
Другой подход это добавление в состав команды специального поля способа адресации, содержимое которого определяет, какой из способов адресации должен быть применен. Иногда в команде имеется нескольких полей по одному на каждый адрес. Отметим, что возможен также вариант, когда в команде вообще отсутствует адресная информация, то есть имеет место неявная адресация. При неявной адресации адресного поля либо просто нет, либо оно содержит не все необходимые адреса отсутствующий адрес подразумевается кодом операции. Так, при исключении из команды адреса результата подразумевается, что результат помещается на место второго операнда. Неявная адресация применяется достаточно широко, поскольку позволяет сократить длину команды.
Выбор способов адресации является одним из важнейших вопросов разработки системы команд и всей ВМ в целом, при этом существенное значение имеет не только удобство программирования, но и эффективность способа. Эффективность способа адресации можно характеризовать двумя показателями: затратами оборудования С и затратами времени Т на доступ к адресуемым данным. Затраты оборудование определяются суммой ,
C = СВА + СЗУ
где СВА затраты аппаратных средств, обеспечивающих вычисление исполнительных адресов; СЗУ затраты памяти на хранение адресных кодов команд. Обычная СЗУ >>CВА, поэтому при оценке затрат оборудования ограничиваются учетом величины СЗУ. Затраты времени Т определяются суммой времени tФИА формирования исполнительного адреса и времени tЗУ выборки или записи операнда:
Т = tФИА + tЗУ
В настоящее время используются различные виды адресации, наиболее распространенные из которых рассматриваются ниже.

2.5.1. Непосредственная адресация

При непосредственной адресации (НА) в адресном поле команды вместо адреса содержится непосредственно сам операнд (рис. 15). Этот способ может применяться при выполнении арифметических операций, операций сравнения, а также для загрузки констант в регистры.
Когда операндом является число, оно обычно представляется в дополнительном коде. При записи в регистр, имеющий разрядность, превышающую длину непосредственного операнда, операнд размещается в младшей части регистра, а оставшиеся свободными позиции заполняются значением знакового бита операнда
Помимо того, что в адресном поле могут быть указаны только константы, еще одним недостатком данного способа адресации является то, что размер непосредственного операнда ограничен длиной адресного поля команды, которое в большинстве случаев меньше длины машинного слова.
В 50-60% команд с непосредственной адресацией длина операнда не превышает 8 бит, а в 75-80% 16 бит. Таким образом, в подавляющем числе случаев шестнадцати разрядов вполне достаточно, хотя для вычисления адресов могут потребоваться и более длинные константы.
Непосредственная адресация сокращает время выполнения команды, так как не требуется обращение к памяти за операндом. Кроме того, экономится память, поскольку отпадает необходимость в ячейке для хранения операнда. В плане эффективности этот способ можно считать «идеальным» (СНА = 0, ТНА = 0), и его можно рекомендовать к использованию во всех ситуациях, когда тому не препятствуют вышеупомянутые ограничения.

2.5.2. Прямая адресация

При прямой или абсолютной адресации (ПА) адресный код прямо указывает номер ячейки памяти, к которой производится обращение (рис. 22), то есть адресный код совпадает с исполнительным адресом.


Рис. 22. Прямая адресация.

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

2.5.3. Косвенная адресация

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

Рис. 23. Косвенная адресация.

Недостатком косвенной адресации является необходимость в двухкратном обращении к памяти: сначала для извлечения адреса операнда, а затем для обращения к операнду (ТКА = 2 tЗУ). Сверх того задействуется лишняя ячейка памяти для хранения исполнительного адреса операнда. Способу свойственны следующие затраты оборудования:
ска = Rяч + int(log2NA) = int(log2(NA + Ni),
где RЯЧ разрядность ячейки памяти, хранящей исполнительный адрес; NA количество ячеек для хранения исполнительных адресов; Nt количество адресуемых операндов. Здесь выражение int(log2NA) определяет разрядность сокращенного адресного поля команды (обычно NA << Ni).
В качестве варианта косвенной адресации, правда, достаточно редко используемого, можно упомянуть многоуровневую или каскадную косвенную адресацию, когда к исполнительному адресу ведет цепочка косвенных адресов. В этом случае один из битов в каждом адресе служит признаком косвенной адресации. Состояние бита указывает, является ли содержимое ячейки очередным адресом в цепочке адресов или это уже исполнительный адрес операнда. Особых преимуществ у такого подхода нет, но в некоторых специфических ситуациях он оказывается весьма удобным, например при обработке многомерных массивов. В то же время очевиден и его недостаток для доступа к операнду требуется три и более обращений к памяти.

2.5.4. Регистровая адресация

Регистровая адресация (РА) напоминает прямую адресацию. Различие состоит в том, что адресное поле инструкции указывает не на ячейку памяти, а на регистр процессора (рис. 24). Идентификатор регистра в дальнейшем будем обозначать буквой R. Обычно размер адресного поля в данном случае составляет три или четыре бита, что позволяет указать соответственно на один из 8 или 16 регистров общего назначения (РОН).
Двумя основными преимуществами регистровой адресации являются: короткое адресное поле в команде и исключение обращений к памяти. Малое число РОН позволяет сократить длину адресного поля команды, то есть СРА << СПА. Кроме того, ТРА = tРОН, где tРОН время выборки операнда из регистра общего назначения, при чем tРОН << 2tЗУ. К сожалению, возможности по использованию регистровой адресации ограничены малым числом РОН в составе процессора.


Рис. 24. Регистровая адресация.

2.5.5. Косвенная регистровая адресация

Косвенная регистровая адресация (КРА) представляет собой косвенную адресацию, где исполнительный адрес операнда хранится не в ячейке основной памяти, а в регистре процессора. Соответственно, адресное поле команды указывает не на ячейку памяти, а на регистр (рис. 25).


Рис. 25. Косвенная регистровая адресация.


Достоинства и ограничения косвенной регистровой адресации те же, что и у обычной косвенной адресации, но благодаря тому, что косвенный адрес хранится не в памяти, а в регистре, для доступа к операнду требуется на одно обращение к памяти меньше. Эффективность косвенной регистровой адресации можно оценить по формулам:
Tкра = tрон + tзу; скра = rpoh + int(log2 NA) = int(log2(Ni + NA)), где rpoh разрядность регистров общего назначения.

2.5.6. Адресация со смещением

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



Рис. 26. Адресация со смещением.

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

2.5.7. Относительная адресация

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



Рис. 27. Относительная адресация.

Адресация относительно счетчика команд базируется на свойстве локальности, выражающемся в том, что большая часть обращений происходит к ячейкам, расположенным в непосредственной близости от выполняемой команды. Это позволяет сэкономить на длине адресной части команды, поскольку разрядность подполя Ак может быть небольшой. Главное достоинство данного способа адресации состоит в том, что он делает программу перемещаемой в памяти: независимо от текущего расположения программы в адресном пространстве взаимное положение команды и операнда остается неизменным, поэтому адресация операнда остается корректной.
Эффективность данного способа адресации можно описать выражениями:
TСА = tРОН + tСЛ + tЗУ; ССА = int ( log2 Ni – RСК)
где tCЛ время сложения составляющих исполнительного адреса; RCK разрядность счетчика команд.

2.5.8. Базовая регистровая адресация

В случае базовой регистровой адресации (БРА) регистр, называемый базовым, содержит полноразрядный адрес, а подполе Ас смещение относительно этого адреса. Ссылка на базовый регистр может быть явной или неявной. В некоторых ВМ имеется специальный базовый регистр и его использование является неявным, то есть подполе R в команде отсутствует (рис. 28).



Рис. 28. Базовая регистровая адресация с базовым регистром.

Более типичен случай, когда в роли базового регистра выступает один из регистров общего назначения (РОН), тогда его номер явно указывается в подполе R команды (рис. 29).
Базовую регистровую адресацию обычно используют для доступа к элементам массива, положение которого в памяти в процессе вычислений может меняться. В базовый регистр заносится начальный адрес массива, а адрес элемента массива указывается в подполе Ас команды в виде смещения относительно начального адреса массива. Достоинство данного способа адресации в том, что смещение имеет меньшую длину, чем полный адрес, и это позволяет сократить длину адресного поля команды. Короткое смещение расширяется до полной длины исполнительного адреса путем добавления слева битов, совпадающих со значением знакового разряда смещения.



Рис. 29. Базовая регистровая адресация с использованием одного из РОН.

Разрядность смещения RCM и, соответственно, затраты оборудования определяются из условия RCM = СБРА = int(log2(max(Non ))), где Non, количество операндов i-й программы.
Затраты времени составляют: ГБРА = tPOH + tСЛ + tЗУ.

2.5.9. Индексная адресация

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



Рис. 30. Индексная адресация с индексным регистром.



Рис. 31. Индексная адресация с использованием одного из РОН.

Индексная адресация предоставляет удобный механизм для организации итеративных вычислений. Пусть, например, имеется массив чисел, расположенных в памяти последовательно, начиная с адреса N, и мы хотим увеличить на единицу все элементы данного массива. Для этого требуется извлечь каждое число из памяти, прибавить к нему 1 и вернуть обратно, а последовательность исполнительных адресов будет следующей: N,N+1,N+2 и т.д., вплоть до последней ячейки, занимаемой рассматриваемым массивом. Значение N берется из подполя Ас команды, а в выбранный регистр, называемый индексным регистром, сначала заносится 0. После каждой операции содержимое индексного регистра увеличивается на 1.
Так как это довольно типичный случай, в большинстве ВМ увеличение или уменьшение содержимого индексного регистра до или после обращения к нему осуществляется автоматически как часть машинного цикла. Такой прием называется автоиндексированием. Если для индексной адресации используются специально выделенные регистры, автоиндексирование может производиться неявно и автоматически. При задействовании для хранения индексов регистров общего назначения необходимость операции автоиндексирования должна указываться в команде специальным битом.
Автоиндексирование с увеличением содержимого индексного регистра носит название автоинкрементной адресации.
Интересным и весьма полезным является еще один вариант индексной адресации индексная адресация с масштабированием и смещением: содержимое индексного регистра умножается на масштабный коэффициент и суммируется с Лс. Масштабный коэффициент может принимать значения 1,2,4 или 8, для чего в адресной части команды выделяется дополнительное поле. Описанный способ адресации реализован, например, в микропроцессорах фирмы Intel.
Следует особо отметить, что система команд многих ВМ предоставляет возможность различным образом сочетать базовую и индексную адресации в качестве дополнительных способов адресации.

2.5.10. Страничная адресация

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



Рис. 32. Страничная адресация.

Показатели эффективности страничной адресации имеют вид:
ССТА = int(log2 Ni. - log2M), TСТА = TРОН + TЗУ, где М количество страниц в памяти.

2.6. Цикл команды

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

Использование конкретной вычислительной машины имеет смысл, если ее показатели соответствуют показателям, определяемым требованиями к реализации заданных алгоритмов. В качестве основных показателей ВМ обычно рассматривают: емкость памяти, быстродействие и производительность, стоимость и надежность. Остановимся только на показателях быстродействия и производительности, обычно представляющих основной интерес для пользователей.
Целесообразно рассматривать два вида быстродействия: номинальное и среднее. Номинальное быстродействие характеризует возможности ВМ при выполнении стандартной операции. В качестве стандартной обычно выбирают короткую операцию сложения. Если обозначить через
·сл время сложения, то номинальное быстродействие определится из выражения
13 EMBED Equation.3 1415оп/с.
Среднее быстродействие характеризует скорость вычислений при выполнении эталонного алгоритма или некоторого класса алгоритмов. Величина среднего быстродействия зависит как от параметров ВМ, так и от параметров алгоритма и определяется соотношением
13 EMBED Equation.3 1415,
где Тэ время выполнения эталонного алгоритма; N количество операций, содержащихся в эталонном алгоритме.
Обозначим через пi число операций i-го типа; l количество типов операций в алгоритме (n = 1, 2,..., l);
·i, время выполнения операции i-ro типа.
Время выполнения эталонного алгоритма рассчитывается по формуле:
13 EMBED Equation.3 1415
Подставив в выражение для Vcp, получим:
13 EMBED Equation.3 1415.
Разделим числитель и знаменатель на N:
13 EMBED Equation.3 1415.
Обозначив частоту появления операции i-го типа через qi =ni/N , запишем окончательную формулу для расчета среднего быстродействия:

13 EMBED Equation.3 1415

В выражении вектор {
·} характеризует систему команд ВМ, а вектор {q}, называемый частотным вектором операций, характеризует алгоритм.
Очевидно, что для эффективной реализации алгоритма необходимо стремиться к увеличению Vcp. Если VHOM главным образом отталкивается от быстродействия элементной базы, то Vср очень сильно зависит от оптимальности выбора команд ВМ.
Формула позволяет определить среднее быстродействие машины при реализации одного алгоритма.
Рассмотрим более общий случай, когда полный алгоритм состоит из нескольких частных, периодически повторяемых алгоритмов. Среднее быстродействие при решении полной задачи рассчитывается по формуле:
13 EMBED Equation.3 1415 оп/с,
где т количество частных алгоритмов;
·j частота появления операций j-ro частного алгоритма в полном алгоритме; qij частота операций i-го типа в j-м частном алгоритме.
Обозначим через Nj и Тj количество операции и период повторения j-го частного алгоритма; Tmах =mах(T1; ..., Tj, ..., Тт) период повторения полного алгоритма;
13 EMBED Equation.3 1415- цикличность включения j-ro частного алгоритма в полном алгоритме.
Тогда за время Tmах в ВМ будет выполнено 13 EMBED Equation.3 1415операций, а частоту появления операции j-го частного алгоритма в полном алгоритме можно определить из выражения
13 EMBED Equation.3 1415.

Для расчета по этим формулам необходимо знать параметры ВМ, представленные вектором {
·}, параметры каждого j-го частного алгоритма вектор {q} и параметры полного алгоритма вектор {
·}
Производительность ВМ оценивается количеством эталонных алгоритмов выполняемых в единицу времени:
13 EMBED Equation.3 1415 задач/с.
Производительность при выполнении полного алгоритма оценивается по формуле
13 EMBED Equation.3 1415.
Производительность является более универсальным показателем, чем среднее быстродействие, поскольку в явном виде зависит от порядка прохождения задач через ВМ.

Контрольные вопросы

Какие характеристики вычислительной машины охватывает понятие «архитектура системы команд»?
Какие особенности аккумуляторной архитектуры можно считать ее достоинствами и недостатками?
Какие доводы можно привести за и против увеличения числа регистров общего назначения в ВМ с регистровой архитектурой системы команд?
Какие факторы определяют выбор формата команд?
Какая особенность фон-неймановской архитектуры позволяет отказаться от указания в команде адреса очередной команды?
С какими ограничениями связано использование непосредственной адресации?
В каких случаях может быть удобна многоуровневая косвенная адресация?
В чем проявляются сходства и различия между базовой и индексной адресацией?
Каким образом можно охарактеризовать производительность вычислительной машины?
Что понимается под номинальным и средним быстродействием ВМ?
ГЛАВА 3. Программная модель процессора на примере Intel i8086
3.1. Программная архитектура х86

Одним из наиболее распространенных процессоров общего назначения на данный момент являются процессоры с архитектурой x86 (Intel IA-32). Родоначальником семейства этих процессоров явился ЦП i8086. И по сей день современные x86-совместимые процессоры могут исполнять код, который мог выполняться на ЦП i8086. Обеспечивается это за счёт обратной совместимости на уровне программной модели.
Совокупность архитектурных решений, архитектуру команд и правила написания программ на низкоуровневом языке принято называть программной моделью процессора. Поскольку, написание в машинных командах представляется крайне трудоёмкой задачей, вместо машинного языка при написании программ используют язык ассемблера. Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Также язык ассемблера обеспечивает базовые программные абстракции: связывание частей программы и данных через метки с символьными именами (при ассемблировании для каждой метки высчитывается адрес, после чего каждое вхождение метки заменяется на этот адрес) и директивы. Каждая модель процессора, в принципе, имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера. В дальнейшем условимся язык ассемблера также рассматривать как часть программной модели ЦП.
При выполнении любой программы в любой момент времени можно выделить несколько участков памяти (сегментов), с которыми происходит работа микропроцессора. Использование сегментов является отличительной особенностью микропроцессоров семейства I80х86 и преследовало несколько целей. Во-первых, использование сегментов является попыткой защитить или, по крайней мере, изолировать несвязные участки памяти в самой программе или между программами. Во-вторых, программа будет выполняться, если изменить только адрес начала сегмента (перенося его в памяти в другое место) и не менять относительное смещение в нем. Это позволяет, при необходимости, переносить программу в памяти даже в процессе ее выполнения. Возможности сегментации памяти существенно превышают возможный размер физической памяти, используемой в микропроцессоре. В некоторых ситуациях использовать сегментацию памяти нецелесообразно, поэтому в старших моделях микропроцессора (начиная с I80386) можно работать с сегментами памяти длиной до 4 Гбайт, т.е. вся доступная физическая память рассматривается как один сегмент. В реальном режиме работы микропроцессора любая программа, оперирует с четырьмя сегментами:
Сегмент кода.
Сегмент данных.
Сегмент стека.
Сегмент дополнительных данных.
Эти сегменты могут располагаться в памяти по отношению друг к другу как угодно, никаких ограничений на их расположение не вводятся. Например, все сегменты могут начинаться с одного и того же адреса, и таким образом они перекрываются друг с другом. Сегменты могут располагаться непосредственно друг за другом в памяти без перекрытия или же между ними могут быть пустые промежутки.

Сегмент кода.

В сегменте кода обычно записываются команды микропроцессора, которые выполняются последовательно друг за другом. Для определения адреса следующей команды после выполнения предыдущей используются два регистра – CS (регистр сегмента кода, содержит начальный адрес этого сегмента) и IР (регистр указателя команд, содержит смещение текущей команды относительно начала этого сегмента). Начальные значения регистров CS и IP загружаются операционной системой в начале выполнения программы, в процессе выполнения команд содержимое IP автоматически изменяется. Если изменить содержимое CS и/или IP, то выполнение программы продолжится с нового адреса. Однако изменить эти регистры явным образом невозможно, это можно сделать при выполнении некоторых команд (например, команды безусловного перехода или вызова подпрограммы).
В сегменте кода можно также описывать данные, однако это целесообразно делать в обоснованных случаях, например, в программах обработки прерываний.

Переменные в программе.

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

Сегмент данных.

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

Сегмент стека.

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

3.2. Микропроцессор 8086

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

Микропроцессор 8086:
Все внутренние регистры микропроцессоров являются шестнадцатиразрядными и позволяют хранить 2 байта. Они подразделяются на:
Регистры данных.
Регистры указателей и индексов.
Сегментные регистры.
Регистр флагов.

Регистры данных предназначены для временного хранения переменных и результатов различных операций над ними. В состав регистров данных входят следующие регистры:
АХ – Регистр-аккумулятор.
ВХ – Базовый регистр.
СХ – Регистр-счетчик.
DX – Регистр дополнительных данных.
Такое название регистры данных получили потому, что, кроме функций хранения данных, они имеют дополнительные функции при выполнении тех или иных команд.
Регистр-аккумулятор представляет собой регистр, в котором хранится один из операндов перед некоторой операцией и в который попадает результат такой операции.
Базовый регистр может использоваться дня формирования адреса (базы) любых переменных в памяти.
Регистр-счетчик в командах организации цикла неявно (по умолчанию) используется как счетчик циклов.
Регистр дополнительных данных в некоторых операциях, в которых результат операции может превысить 2 байта, хранит старшие разряды результата, которые не помещаются в аккумулятор. Кроме того, в командах ввода/вывода этот регистр содержит адрес соответствующего внешнего порта.
В отличие от всех других регистров все регистры АХ, ВХ, СХ, DX могут быть разбиты на два однобайтных регистра:
АХ – АН и АL
ВХ – ВН и ВL
СХ – СН и СL
DX – DH и DL
Символ Н (сокращение слова High) означает старшую половину (старший байт) шестнадцатиразрядного числа, символ L (сокращение слова Low - младшую часть (младший байт). Некоторые из этих восьмиразрядных регистров также неявно используются в некоторых командах микропроцессора.

Группу индексных регистров образуют следующие регистры:
ВР – Указатель базы (Вase pointer).
SI – Индекс источника (Source index).
DI – Индекс приемника (Destination index).
SP – Указатель стека (Stack pointer).

Размерность всех регистров – 2 байта, 16 бит, причем в таких регистрах невозможно иметь доступ к только старшему или только младшему байту. Первые три регистра используются или при формировании адресов переменных, или как регистры для хранения временных данных.
Стек обычно неявно используется в командах передачи управления например, при вызове или возврате из подпрограммы или прерываниях микропроцессора для временного хранения адресов, по которым необходимо вернутся после того, как выполнится процедура обработки прерывания или вызова подпрограммы. Кроме того, с помощью стека можно обеспечить временное хранение значения любого из регистров (например, если при вызове некоторой стандартной подпрограммы известно, что его содержимое может измениться). И, наконец, с помощью стека легко организуется передача параметров в вызываемую функцию и организация локальных переменных внутри подпрограммы (такой подход используется практически во всех языках программирования высокого уровня и его необходимо поэтому обязательно применять при написании программ на смешанных языках).
Как уже отмечалось, все программы состоят из нескольких сегментов (частей), поэтому в состав микропроцессора входят специальные регистры для хранения информации о начальных адресах этих сегментов. Состав этой группы 16-разрядных регистров следующий:
CS – регистр сегмента команд (сегмент кода программы).
SS – регистр сегмента стека.
DS – регистр сегмента данных.
ES – регистр сегмента дополнительных данных.
Регистр CS совместно с регистром указателя команд используется для вычисления адреса следующей исполняемой команды в программе. В этом сегменте хранится код программы.
Регистр SS совместно с указателем стека SP используется для определения адреса области памяти для хранения временных данных. При вычислении адресов параметров и локальных переменных подпрограмм обычно совместно с регистром SS используется регистр указателя базы ВР.
В сегмент данных, определяемый регистром DS, обычно помещаются переменные, используемые в программе. Адрес этих переменных определяется с использованием регистров ВХ, SI и DI.
Сегмент дополнительных данных используется как еще один сегмент при операциях над строками. Его можно использовать не только для формирования дополнительного сегмента при доступе к некоторым областям памяти компьютера, но и как еще один регистр для хранения некоторых значений.
В обычных микропроцессорах всегда есть регистр, называемый Счетчиком Команд (РС, Program Counter), определяющий, какую команду выполнять следующей. После чтения текущей команды и всех ее параметров содержимое Счетчика Команд автоматически увеличивается для того, что бы он указывал на следующую команду в программе.
Однако во всех микропроцессорах семейства I80х86 роль такого регистра выполняет регистр с другим названием – регистр Указателя Команд (IP, Instruction pointer).В системе команд микропроцессора отсутствуют команды явного (непосредственного) изменения значения такого регистра (его значения изменяется автоматически в зависимости от логики выполнения программы). Размерность Указателя Команд – 2 байта, 16 бит.
Так как в формировании адреса следующей выполняемой команды совместно с сегментным регистром CS (начальный адрес сегмента) участвует регистр IР (смещение в сегменте), то размерности этих регистров определяют максимальный размер сегмента кода. Максимально возможное смещение в сегменте кода может быть 216 байт, т.е. максимальная длина сегмента кода равна 64 Кбайт.
Для написания программ, принимающих решения в зависимости от тех или иных условий, необходимо знать результат выполнения предыдущих команд (например, при сравнении двух переменных, при арифметических или логических командах и т.д.). Традиционно во всех микропроцессорах для этого используется так называемый регистр флагов, сохраняющий информацию о результате выполнения некоторой команды). Этот регистр представляет собой набор из 16 битов (не все из 16 битов в данном регистре используются), показывающий текущее состояние результата команды программы и текущее состояние микропроцессора.

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 Кбайт.
Следует отметить, что использование ближнего адреса для доступа к некоторой ячейке памяти происходит быстрее, чем с помощью дальней адресации, так как изменяется только одна из компонент адреса.

3.4. Команды микропроцессора

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

Инструкция микропроцессора может содержать следующие поля (рис. 34):


Рис. 34. Формат команды микропроцессора архитектуры IA-32.


Префикс – необязательная часть инструкции, которая позволяет изменить некоторые особенности ее выполнения. В команде может быть использовано сразу несколько префиксов разного типа. Типы префиксов: командные префиксы (префиксы повторения) REP, REPE/REPZ, REPNE/REPNZ; префикс блокировки шины LOCK; префиксы размера; префиксы замены сегмента.
КОП – код операции.
Байт "Mod R/M" определяет режим адресации, а также иногда дополнительный код операции. Необходимость байта "Mod R/M" зависит от типа инструкции.
Байт SIB (Scale-Index-Base) определяет способ адресации при обращении к памяти в 32-битном режиме. Необходимость байта SIB зависит от режима адресации, задаваемого полем "Mod R/M".
Кроме того, инструкция может содержать непосредственный операнд и/или смещение операнда в сегменте данных.
На размер инструкции накладывается ограничение в 15 байт. Инструкция большего размера может получиться при некорректном использовании большого количества префиксов. В IA-32 в таком случае генерируют исключение #13. Если инструкция микропроцессора требует операнды, то они могут задаваться следующими способами: непосредственно в коде инструкции (только операнд-источник); в одном из регистров; через порт ввода-вывода; в памяти.
Для совместимости с 16-битными процессорами архитектура IA-32 использует одинаковые коды для инструкций, оперирующих как с 16-битными, так и 32-битными операндами. Новая архитектура предусматривает также новые возможности при указании адреса для операнда в памяти. Как процессор будет считать операнд или его адрес, зависит от эффективного размера операнда и эффективного размера адреса для данной команды. Эти значения определяются на основе режима работы, бита D дескриптора используемого сегмента и наличия в инструкции определенных префиксов.
Непосредственный режим адресации подразумевает включение операнда-источника в код инструкции. Операнд может быть 8-битовым или 16-битовым, если значение эффективного размера операнда - 16. Операнд может быть 8-битовым или 32-битовым, если значение эффективного размера операнда - 32. Обычно непосредственные операнды используются в арифметических инструкциях.
Регистровый режим адресации определят операнд-источник или операнд-приемник в одном из регистров процессора или сопроцессора.
В некоторых случаях, (например, в инструкциях DIV и MUL) могут использоваться пары 32-битных регистров (например, EDX:EAX), образуя 64-битный операнд.
Адресация через порт ввода-вывода подразумевает получение операнда или сохранение операнда через пространство портов ввода-вывода. Адрес порта ввода-вывода либо непосредственно включается в код инструкции, либо берется из регистра DX.

3.5. Основные группы команд и их краткая характеристика

Для упрощения процесса программирования на языке ассемблера используется мнемоническая запись команд микропроцессора (обычно в виде сокращений английских слов, описывающих действия в этой команде, например, команда jcxz является сокращением от слов Jump if СХ is Zero). Понятно, что запомнить такую мнемонику проще, чем байт Е3, соответствующий коду этой команды в программе. Формирование двоичных байтов, соответствующих тем или иным командам и данным, используемых в программе, осуществляется с помощью программы ассемблера.
Все команды микропроцессоров семейства I80х86 можно разбить на следующие группы:
Команды пересылки данных.
Арифметические команды.
Команды сдвига.
Логические команды.
Команды передачи управления.
Команды ввода/вывода.
Команды работы со строками.
Дополнительные команды.
Команды пересылки данных наиболее широко применяются в микропроцессорах и позволяют пересылать данные из/в регистры микропроцессора/ячейки памяти.
Арифметические команды позволяют проводить арифметические действия (сложение, вычитание, деление и умножение) над данными, представленными в различном формате. Для выполнения более сложных математических действий нужно или использовать математический сопроцессор, или написать соответствующие подпрограммы, использующие эти элементарные математические действия.
Команды сдвига оперируют с данными в виде набора битов и позволяют сдвигать или циклически вращать эти наборы битов, оставляя их взаимное расположение неизменным.
Логические команды так же рассматривают свои операнды в качестве набора битов и позволяют выполнять над ними различные логические (булевы) операции.
С помощью команд передачи управления можно изменять порядок выполнения команд в программе для организации ветвлений в программе, циклов, вызова подпрограмм и т.д.
Команды ввода/вывода осуществляют обмен информацией между программой и внешними устройствами.
Команды работы со строками могут выполнять ряд элементарных действий (пересылка, сравнение и т.п.) с массивами данных..

3.6. Способы адресации в архитектуре x86

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

Регистровая адресация
В качестве операндов (как приемников, так и источников) можно использовать внутренние регистры микропроцессора. Во всех микропроцессорах в качестве таких регистров можно использовать 8-ми разрядные регистры данных (АН, AL, ВН, BL, СН, CL, DH, DL), 16-ти разряде регистры данных и индексные регистры (АХ, ВХ, СХ, DX, SP, ВР, SI, DI). Кроме этих регистров в операциях пересылки можно использовать сегментные регистры – CS, SS, DS, ES.

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

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

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

Косвенная адресация
При косвенной адресации смещение соответствующего операнда в сегменте содержится в одном из регистров микропроцессора. Таким образом, текущее содержимое регистра микропроцессора определяет исполнительный адрес того операнда который будет использоваться в команде.
Косвенная адресация (и ее разновидности) позволяет легко организовывать доступ к сложным элементам дынных, используемых в языках программирования высокого уровня. Например, косвенную адресацию удобно использовать для обеспечения последовательного доступа к массиву данных. В этом случае в регистр записывается, например, начальный адрес массива байт. Затем, изменяя этот адрес, можно получать доступ к следующему элементу этого массива и т.д. Другие варианты косвенной адресации описаны ниже.
Для того, чтобы отличить косвенную адресацию от регистровой мнемоническое обозначение регистра заключается в квадратные скобки (например, использование записи ВХ обозначает использование соответствующего регистра в качестве операнда запись [ВХ] – использование содержимого регистра в качестве смещения при вычислении адреса операнда).
При косвенной адресации использование того или иного регистра данных или индексного регистра неявно определяет соответствующий сегмент, однако сегментный регистр можно явно переопределить. В качестве регистра косвенной адресации для микропроцессора i8086 (и, естественно, всех остальных микропроцессоров этого семейства) можно использовать только регистры [ВХ], [SI], [DI], [ВР]. Для первых трех регистров их содержимое является смещением по отношению к сегменту данных (т.е. текущее значение сегментного регистра DS определяет вторую составляющую адреса). Для регистра [ВР] используется сегмент стека (текущее содержимое сегментного регистра SS) при вычислении адреса.



Косвенная адресация по базе
При использовании косвенной адресации к содержимому регистра можно добавлять Константу. В этом случае исполнительный адрес вычисляется как сумма содержимого соответствующего регистра и этой константы. Константа рассматривается как число со знаком, т.е. самый старший бит определяет знак числа по стандартным правилам – 0 для положительного числа 1 – для отрицательного. Сегментный регистр определяется по тем же правилам, что и для простой косвенной адресации (см. выше) и его можно переопределить.
Такая адресация характерна для доступа к полям структуры, начальный адрес которой находится в регистре, а смещение соответствующего поля задается константой, записываемой непосредственно в команде.
В микропроцессорах i8086 в качестве базовых регистров используются только два, регистра – [ВХ] и [ВР]. При использовании регистра [ВХ] по умолчанию используется сегмент данных (сегментный регистр DX), а для регистра [ВР] – сегмент стека (сегментный регистр SS). Размерность добавляемой константы может быть или байтом, или словом.

Косвенно индексная адресация
По сути, косвенно индексная адресация эквивалентна косвенной адресации по базе, т.к. правила получения исполнительного адреса такие же – к содержимому регистра также добавляется некоторая константа записываемая непосредственно в команде, и полученная сумма определяет смещение операнда в памяти.
В микропроцессорах i8086 в качестве индексных регистров используются только два, регистра – [SI] и [DI]

Адресация по базе с индексированием
В микропроцессоре i8086 можно использовать также комбинацию косвенной индексной адресации и адресации по базе. Исполнительный адрес операнда определяется как сумма трех составляющих – содержимого двух регистров и константы, задаваемой непосредственно в команде.
Такой способ адресации подходит при обеспечении доступа к полю структуры в случае, если из таких структур организован массив – константа заедает начало массива, индексный регистр определяет номер элемента в массиве, а базовый регистр – смещение поля внутри структуры.
В стандартной адресации по базе с индексированием в качестве регистров базы используются регистры ВХ и ВР, в качестве индексных – регистры SI и DI. Константа, записываемая в команде, рассматривается как число со знаком (или байт, или слово). Всего возможно 4 варианта использования регистров в такой команде – [ВХ + SI], [ВХ + ВI], [ВР + SI], [ВР + DI]. В первых двух считается, что операнд находится в стандартном сегменте данных, в двух последних – в сегменте стека.


Лабораторная работа №1. Программная архитектура процессора i8086

На языке ассемблера процессора i8086 с использованием любого удобного пакета (рекомендуется TASM) реализуйте следующие задачи:

1. Протабулировать функцию у = а(х+b) а=3; b=1; 1 < x < 10; Шаг изменения x=1
2. Найти max(A), если массив А состоит из целых чисел.
3. Для заданного массива Х, вычислить:
у(x) = ax , если 0 < x <= 5
у(x) = ах + а , если 5 < x <= 10
у(x) = 0 , если x > 10
4. Протабулировать функцию, заданную в виде:
у(n) = 0 , если n < 1
у(n) = 1 , если n нечетно
у(n) = 0 , если n четно
1 < n < 10: Шаг изменения n=1
5. Найти min(B), если массив В состоит из целых чисел.
6. Отсортировать заданный массив целых чисел А в порядке убывания их значений.
7. Отсортировать заданный массив целых чисел А в порядке возрастания их значений.
8. Подсчитать количество нулей и единиц в заданном шестнадцатеричном числе.
9. Вычислить количество элементов массива А эквивалентных заданному значению. А состоит из десяти шестнадцатеричных чисел.
10. Вычислить количество элементов массива, лежащих в следующих диапазонах: n1=(0..10); n2=(11..20); n3=(21..255). А состоит из 10 целых чисел.
11. Вычислить квадраты чисел от 1 до 10.
12. Удалить элементы массива А имеющие одинаковые значения. Определить количество оставшихся элементов.
13. Добавить новый элемент массива, если его значение не равно значениям элементов заданного массива А. Размерность массива А – 10. Добавляемые числа находятся в массиве B. Размерность массива В – 5.
14. Удалить элемент массива А, если его значение равно заданному шестнадцатеричному числу. Определить количество оставшихся элементов.
15. Определить, попадает ли точка с координатами XO, УО в круг радиусом R. Уравнение окружности: R2 = x2 + у2 ( R = 100 ).

Примечания:
Размерность массивов равна 10, если явно не указано иное.
Все действия выполняются над целыми положительными числами от 1 до 100, если явно не указано иное.
Табулирование функции – это вычисление значений функции при изменении аргумента от некоторого начального значения до некоторого конечного значения с определенным шагом.
Ввод и вывод результатов достаточно производить в/из оперативной памяти. Работа с консолью не обязательна.
ГЛАВА 4. Интерфейсы и шины в вычислительной системе
4.1. Структура взаимосвязей вычислительной машины

Совокупность трактов, объединяющих между собой основные устройства ВМ (центральный процессор, память и модули ввода/вывода), образует структуру взаимосвязей вычислительной машины. Структура взаимосвязей должна обеспечивать обмен информацией между:
центральным процессором и памятью;
центральным процессором и модулями ввода/вывода;
памятью и модулями ввода/вывода.
Информационные потоки, характерные для основных устройств ВМ, показаны на рис. 35.



Рис. 35. Информационные потоки в вычислительной машине.

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


Рис. 36. Эволюция структур взаимосвязей. ЦП – центральный процессор, МВВ – модуль ввода-вывода, ПАМ – модуль основной памяти.

Интерфейс - это аппаратное и программное обеспечение (элементы соединения и вспомогательные схемы управления, их физические, электрические и логические параметры), предназначенное для сопряжения систем или частей системы (программ или устройств). Под сопряжением подразумеваются следующие функции:
выдача и прием информации;
управление передачей данных;
согласование источника и приемника информации.
В связи с понятием интерфейса рассматривают также понятие шина (магистраль) - это среда передачи сигналов, к которой может параллельно подключаться несколько компонентов вычислительной системы и через которую осуществляется обмен данными. Очевидно, для аппаратных составляющих большинства интерфейсов применим термин шина, поэтому зачастую эти два обозначения выступают как синонимы, хотя интерфейс - понятие более широкое.
Для интерфейсов, обеспечивающих соединение «точка-точка» (в отличие от шинных интерфейсов), возможны следующие реализации режимов обмена: дуплексный, полудуплексный и симплексный. К дуплексным относят интерфейсы, обеспечивающие возможность одновременной передачи данных между двумя устройствами в обоих направлениях. В случае, когда канал связи между устройствами поддерживает двунаправленный обмен, но в каждый момент времени передача информации может производиться только в одном направлении, режим обмена называется полудуплексным. Важной характеристикой полудуплексного соединения является время реверсирования режима - то время, за которое производится переход от передачи сообщения к приему и наоборот. Если же интерфейс реализует передачу данных только в одном направлении и движение потока данных в противоположном направлении невозможно, такой интерфейс называют симплексным.
Важное значение имеют также следующие технические характеристики интерфейсов:
вместимость (максимально возможное количество абонентов, одновременно подключаемых к контроллеру интерфейса без расширителей);
пропускная способность или скорость передачи (длительность выполнения операций установления и разъединения связи и степень совмещения процессов передачи данных);
максимальная длина линии связи;
разрядность;
топология соединения.
Взаимосвязь частей ВМ и ее «общение» с внешним миром обеспечиваются системой шин. Большинство машин содержат несколько различных шин, каждая из которых оптимизирована под определенный вид коммуникаций. Часть шин скрыта внутри интегральных микросхем или доступна только в пределах печатной платы. Некоторые шины имеют доступные извне точки, с тем чтобы к ним легко можно было подключить дополнительные устройства, причем большинство таких шин не просто доступны, но и отвечают определенным стандартам, что позволяет подсоединять к шине устройства различных производителей.
Чтобы охарактеризовать конкретную шину, нужно описать:
совокупность сигнальных линий;
физические, механические и электрические характеристики шины;
используемые сигналы арбитража, состояния, управления и синхронизации;
правила взаимодействия подключенных к шине устройств (протокол шины).
Шину образует набор коммуникационных линий, каждая из которых способна передавать сигналы, представляющие двоичные цифры 1 и 0. По линии может пересылаться развернутая во времени последовательность таких сигналов. При совместном использовании несколько линий могут обеспечить одновременную (параллельную) передачу двоичных чисел. Физически линии шины реализуются в виде отдельных проводников, как полоски проводящего материала на монтажной плате либо как алюминиевые или медные проводящие дорожки на кристалле микросхемы.
Операции на шине называют транзакциями. Основные виды транзакций транзакции чтения и транзакции записи. Если в обмене участвует устройство ввода/вывода, можно говорить о транзакциях ввода и вывода, по сути эквивалентных транзакциям чтения и записи соответственно. Шинная транзакция включает в себя две части: посылку адреса и прием (или посылку) данных.
Когда два устройства обмениваются информацией по шине, одно из них должно инициировать обмен и управлять им. Такого рода устройства называют ведущими (bus master). В компьютерной терминологии «ведущий» это любое устройство, способное взять на себя владение шиной и управлять пересылкой данных. Ведущий не обязательно использует данные сам. Он, например, может захватить управление шиной в интересах другого устройства. Устройства, не обладающие возможностями инициирования транзакции, носят название ведомых (bus slave). В принципе к шине может быть подключено несколько потенциальных ведущих, но в любой момент времени активным может быть только один из них: если несколько устройств передают информацию одновременно, их сигналы перекрываются и искажаются. Для предотвращения одновременной активности нескольких ведущих в любой шине предусматривается процедура допуска к управлению шиной только одного из претендентов (арбитраж). В то же время некоторые шины допускают широковещательный режим записи, когда информация одного ведущего передается сразу нескольким ведомым (здесь арбитраж не требуется). Сигнал, направленный одним устройством, доступен всем остальным устройствам, подключенным к шине.
Английский эквивалент термина «шина» «bus» восходит к латинскому слову omnibus, означающему «для всего». Этим стремятся подчеркнуть, что шина ведет себя как магистраль, способная обеспечить всевозможные виды трафика.

4.2. Типы шин

Важным критерием, определяющим характеристики шины, может служить ее целевое назначение. По этому критерию можно выделить:
шины «процессор-память»;
шины ввода/вывода;
системные шины.

4.2.1. Шина «процессор-память»

Шина «процессор-память» обеспечивает непосредственную связь между центральным процессором (ЦП) вычислительной машины и основной памятью (ОП). В современных микропроцессорах такую шину часто называют шиной переднего плана и обозначают аббревиатурой FSB (Front-Side Bus). Интенсивный трафик между процессором и памятью требует, чтобы полоса пропускания шины, то есть количество информации, проходящей по шине в единицу времени, была наибольшей. Роль этой шины иногда выполняет системная шина (см. ниже), однако в плане эффективности значительно выгоднее, если обмен между ЦП и ОП ведется по отдельной шине. К рассматриваемому виду можно отнести также шину, связывающую процессор с кэш-памятью второго уровня, известную как шина заднего плана BSB (Back-Side Bus). BSB позволяет вести обмен с большей скоростью, чем FSB, и полностью реализовать возможности более скоростной кэш-памяти.
Поскольку в фон-неймановских машинах именно обмен между процессором и памятью во многом определяет быстродействие ВМ, разработчики уделяют связи ЦП с памятью особое внимание. Для обеспечения максимальной пропускной способности шины «процессор-память» всегда проектируются с учетом особенностей организации системы памяти, а длина шины делается по возможности минимальной.

4.2.2. Шина ввода/вывода

Шина ввода/вывода служит для соединения процессора (памяти) с устройствами ввода/вывода (УВВ). Учитывая разнообразие таких устройств, шины ввода/вывода унифицируются и стандартизируются. Связи с большинством УВВ (но не с видеосистемами) не требуют от шины высокой пропускной способности. При проектировании шин ввода/вывода в учет берутся стоимость конструктива и соединительных разъемов. Такие шины содержат меньше линий по сравнению с вариантом «процессор-память», но длина линий может быть весьма большой. Типичными примерами подобных шин могут служить шины PCI и SCSI.

4.2.3. Системная шина

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



Рис. 37. Структура системной шины.

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

4.3. Иерархия шин

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

4.3.1. Вычислительная машина с одной шиной

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



Рис. 38. Структура взаимосвязей с одной шиной.

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

4.3.2. Вычислительная машина с двумя видами шин

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


Рис. 39. Структура взаимосвязей с двумя видами шин.

Подобная схема существенно снижает нагрузку на скоростную шину «процессор-память» и способствует повышению общей производительности ВМ. В качестве примера можно привести вычислительную машину Apple Macintosh II, где роль шины «процессор-память» играет шина NuBus. Кроме процессора и памяти к ней подключаются некоторые УВВ. Прочие устройства ввода/вывода подключается к шине SCSI Bus.

4.3.3. Вычислительная машина с тремя видами шин

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



Рис. 40. Структура взаимосвязей с тремя видами шин.

Шины ввода/вывода подключаются к шине расширения, а уже с нее через адаптер к шине «процессор-память». Схема еще более снижает нагрузку на шину «процессор-память». Такую организацию шин называют архитектурой с «пристройкой» (mezzanine architecture).

4.4. Физическая реализация шин

Кратко остановимся на различных аспектах физической реализации шин в вычислительных машинах и системах.

4.4.1. Механические аспекты

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

4.4.2. Электрические аспекты

Все устройства, использующие шину, электрически подсоединены к ее сигнальным линиям, представляющим собой электрические проводники. Меняя уровни напряжения на сигнальных линиях, ведущее устройство формирует на них информационные или управляющие сигналы. Когда ведущее устройство выставляет на сигнальной шине какой-то уровень напряжения, этот уровень может быть воспринят приемниками в любой точке линии. Такое описание дает лишь идеализированную картину происходящих на шине процессов реальные процессы значительно сложнее.
Схему, меняющую напряжение на сигнальной шине, обычно называют драйвером или возбудителем шины. В принципе драйвером может быть любая цифровая схема, поскольку на ее цифровом выходе всегда присутствует один из двух возможных уровней напряжения.
При реализации шины необходимо предусмотреть возможность отключения драйвера от сигнальной линии на период, когда он не использует шину. Один из возможных способов обеспечения подобного режима применение драйвера, выход которого может находиться в одном из трех состояний: «высокий уровень напряжения» (high), «низкий уровень напряжения» (low) и «отключен» (off). Для перевода в состояние «off», эквивалентное отключению выхода драйвера от сигнальной линии, используется специальный вход драйвера. Режим «off» необходим для исключения возможности одновременного управления шиной двумя или более устройствами, в противном случае на линиях могут возникать пиковые выбросы напряжения или искаженные сигналы, которые кроме некорректной передачи информации могут привести к преждевременному отказу электронных компонентов.
Совместное использование линии шины несколькими устройствами возможно также за счет подключения этой линии к выходу драйвера через резистор, соединенный с источником питания. В зависимости от полупроводниковой технологии, примененной в выходных каскадах драйвера, подобную возможность обеспечивают схемы с открытым коллектором (ТТЛ), открытым стоком (МОП) или открытым эмиттером (ЭСЛ). Данный способ не только исключает электрические конфликты на шине, но и позволяет реализовать очень полезный вид логической операции, известный как «монтажное ИЛИ» или «монтажное И» (трактовка зависит от соответствия между уровнями напряжения и логическими значениями 1 и 0). Если к линии одновременно подключается несколько драйверов, то сигнал на линии представляет собой результат логического сложения (операция ИЛИ) всех поступивших на линию сигналов. Это оказывается весьма полезным при решении задачи арбитража, которая рассматривается позже. В некоторых шинах «монтажное ИЛИ» используется лишь в отдельных сигнальных линиях, но иногда эту операцию допускают по отношению ко всем линиям шины.
Приемниками в операциях на шинах называют схемы, сравнивающие уровень сигнала на входе со стандартными значениями, формируемыми внутренними цепями приемников. По итогам сравнения приемник генерирует выходной сигнал, уровень которого соответствует одному из двух возможных логических значений – 1 или 0. Трансивер (приемопередатчик) содержит приемник и драйвер, причем выход драйвера и вход приемника сводятся в общую точку.
Рассматривая процесс распространения сигнала по сигнальной линии, необходимо учитывать четыре основных фактора:
скорость распространения;
отражение;
перекос;
эффекты перекрестного влияния.
Теоретическая граница скорости распространения сигнала скорость света в свободном пространстве, то есть около 300 мм/нс. Реальная скорость, определяемая физическими характеристиками сигнальных линий и нагрузкой, не может превысить 70% от скорости света.
Процессы в линии рассмотрим на примере сигнальной линии, которая через резистор, соединенный с источником питания, удерживается на уровне напряжения, соответствующем логической единице. Сигнал драйвера «подтягивает» линию к своему уровню напряжения. Изменение напряжения распространяется от точки подключения драйвера в обоих направлениях, пока на всей линии не установится уровень сигнала драйвера. Характер распространения сигнала определяют емкость, индуктивность и характеристическое сопротивление линии, локальные значения которых по длине линии зависят от локальных свойств проводника и его окружения.
По мере распространения по реальной линии сигнал преодолевает области с различным сопротивлением. Там, где оно меняется, сигнал не может оставаться постоянным, поскольку меняется соотношение между током и напряжением. Часть сигнала продолжает продвижение, а часть отражается в противоположную сторону. Прямой и отраженный сигналы могут повторно отражаться, в результате чего на линии формируется сложный результирующий сигнал. В конце линии сигнал отражается назад, если только он не поглощен правильно подобранным согласующим резистором. Если на конце линии имеется согласующий резистор, с сопротивлением, идентичным импедансу линии, сигнал будет поглощен без отражения. Такие резисторы должны размещаться по обоим концам сигнальной линии. К сожалению, точное значение импеданса реальной линии никогда не известно, из-за чего номиналы резисторов невозможно точно согласовать с линией, и отражение всегда имеет место.
При параллельной передаче по линиям шины битов адреса или данных сигналы на разных линиях достигают соответствующих приемников совсем не одновременно. Это явление известно как перекос сигналов.
Распространяясь по линии, сигнал создает вокруг нее электростатическое и магнитное поля. Сигнальные линии в шине располагаются параллельно и в непосредственной близости одна от другой. Поля от близко расположенных линий перекрываются, приводя к тому, что сигнал на одной линии влияет на сигнал в другой. Этот эффект называют перекрестной или переходной помехой.
Наиболее очевидный способ уменьшения перекрестной помехи эффекта – пространственно разнести линии шины так, чтобы их поля не влияли на «соседей», – для печатной платы ограниченного размера не подходит. К снижению эффектов перекрестного влияния ведет уменьшение взаимных емкости и индуктивности линий, чего можно добиться, разместив вблизи сигнальных линий «земляные» линии или включив в многослойную печатную плату «земляные» слои. Это, однако, приводит к нежелательному эффекту увеличения собственной емкости линий. Наиболее распространенный подход к снижению перекрестной помехи состоит в разделении линий изолятором с малой диэлектрической постоянной. В целом, при проектировании шин обычно используется комбинация перечисленных методов борьбы с перекрестной помехой.
Из-за несовершенства физической реализации сигнальных линий фронты импульсов по мере распространения сигналов меняются, соответственно, меняется и форма сигнала. Для каждой шины существует некое минимальное значение ширины импульса, при которой он еще способен дойти от одного конца к другому так, что его еще можно распознать. Эта ширина выступает в качестве основного ограничения на полосу пропускания данной шины, то есть на число импульсов, которые могут быть переданы по шине в единицу времени.
Поскольку драйвер одновременно «видит» две линии, передающие информацию в противоположных направлениях, он должен поддерживать двойную по сравнению с одной линией величину тока. Для типичных линий импеданс не превышает 20 Ом, а сигналы имеют уровень порядка 3 В, что выражается в величине тока около 150 мА. Приведенные цифры для современных драйверов не составляют проблемы, поскольку применяемые в настоящее время схемы способны приспособиться к гораздо худшим параметрам сигналов.
Порождаемый сигналом ток замыкается через «земляной» контакт драйвера. Когда одновременно активны все сигнальные линии, ток возврата через «землю» может быть весьма большим. Положение осложняет то, что ток этот не является постоянным и в моменты подключения и отключения драйвера содержит высокочастотные составляющие. Кроме того, из-за сопротивления и индуктивности «земляного» слоя печатной платы потенциалы на «земляных» выводах дочерних плат могут различаться. Это может приводить к неверной оценке сигналов приемниками, следствием чего становится некорректное срабатывание логических схем. С «земляным» шумом легче бороться на стадии проектирования шины. Прежде всего, необходимо улучшать характеристики «земляных» слоев на материнской и дочерних платах. Между системами заземления материнской и дочерних плат должно быть много хорошо распределенных надежных контактов. Для высокоскоростных шин на каждые четыре сигнальных шины следует иметь отдельный «земляной» контакт. Кроме того, дочерняя плата должна быть спроектирована так, чтобы «земляной» ток от данного драйвера протекал к тому «земляному» контакту, который расположен как можно ближе к сигнальным выводам. «Земля» материнской платы обычно реализуется в виде внутреннего медного слоя в многослойной печатной плате; отверстия с зазором вокруг сигнальных выводов предотвращают короткое замыкание сигнального вывода с этим слоем. Разъем должен быть достаточно широким, чтобы на дочерней плате трансиверы можно было разместить по возможности ближе к нему, что позволяет сократить длину тех участков шины, где нарушается ее неразрывность.
В целом ряде известных шин многие из рассмотренных положений игнорируются. По практическим соображениям используются линии с высоким импедансом. Надежность работы с такими «плохими» шинами достигается за счет их замедления: затягивание перехода сигналов от одного уровня напряжения к другому приводит к уменьшению отражений. Снижается также влияние перекрестных помех.
Высокое быстродействие драйверов шины имеет и отрицательную сторону: они оказываются слишком быстрыми для управляемых ими шин, при этом сигналы на линиях сильно искажаются. Эта проблема обычно преодолевается за счет введения задержки, часто называемой временем установления сигнала (временем успокоения). Задержка выбирается так, что сигналы стабилизируются до момента их использования. Зачастую достаточно задержки, принципиально присущей используемым схемам, но иногда приходится вводить и явную задержку.
В синхронных шинах, где для синхронизации транзакций используется единая система тактовых импульсов (ТИ), такая задержка может быть добавлена весьма просто путем замедления тактирования. Так, можно разрешить всем сигналам изменяться только по одному из фронтов ТИ, что создает достаточную заминку для распространения сигналов и их стабилизации.
В асинхронных шинах проблема должна быть решена либо в самом драйвере. либо за счет введения искусственной приостановки, компенсирующей излишнее быстродействие драйвера. Еще одна возможность – замедление цепей приемника.

4.5. Распределение линий шины

Любая транзакция на шине начинается с выставления ведущим устройством адресной информации. Адрес позволяет выбрать ведомое устройство и установить соединение между ним и ведущим. Для передачи адреса используется часть сигнальных линий шины, совокупность которых часто называют шиной адреса (ША).
На ША могут выдаваться адреса ячеек памяти, номера регистров ЦП, адреса портов ввода/вывода и т. п. Многообразие видов адресов предполагает наличие дополнительной информации, уточняющей вид, используемый в данной транзакции. Такая информация может косвенно содержаться в самом адресе, но чаще передается по специальным управляющим линиям шины.
Разнообразной может быть и структура адреса. Так, в адресе может конкретизироваться лишь определенная часть ведомого, например, старшие биты адреса могут указывать на один из модулей основной памяти, в то время как младшие биты определяют ячейку внутри этого модуля.
В некоторых шинах предусмотрены адреса специального вида, обеспечивающие одновременный выбор определенной группы ведомых либо всех ведомых сразу (broadcast). Такая возможность обычно практикуется в транзакциях записи (от ведущего к ведомым), однако существует также специальный вид транзакции чтения (одновременно от нескольких ведомых общему ведущему). Английское название такой транзакции чтения broadcall можно перевести как «широковещательный опрос». Информация, возвращаемая ведущему, представляет собой результат побитового логического сложения данных, поступивших от всех адресуемых ведомых.
Число сигнальных линий, выделенных для передачи адреса (ширина шины адреса), определяет максимально возможный размер адресного пространства. Это одна из базовых характеристик шины, поскольку от нее зависит потенциальная емкость адресуемой памяти и число обслуживаемых портов ввода/вывода.
Совокупность линий, служащих для пересылки данных между модулями системы, называют шиной данных (ШД). Важнейшие характеристики шины данных – ширина и пропускная способность.
Ширина шины данных определяется количеством битов информации, которое может быть передано по шине за одну транзакцию (цикл шины). Цикл шины следует отличать от периода тактовых импульсов одна транзакция на шине может занимать несколько тактовых периодов. В середине 1970-х годов типовая ширина шины данных составляла 8 бит. В наше время это обычно 32, 64 или 128 бит. В любом случае ширину шины данных выбирают кратной целому числу байтов, причем это число, как правило, представляет собой целую степень числа 2.
Элемент данных, задействующий всю ширину ШД, принято называть словом, хотя в архитектуре некоторых ВМ понятие «слово» трактуется по-другому, то есть слово может иметь разрядность, не совпадающую с шириной ШД.
В большинстве шин используются адреса, позволяющие указать отдельный байт слова. Это свойство оказывается полезным, когда желательно изменить в памяти лишь часть полного слова.
При передаче по ШД части слова пересылка обычно производится по тем же сигнальным линиям, что и в случае пересылки полного слова, однако в ряде шин «обрезанное» слово передается по младшим линиям ШД. Последний вариант может оказаться более удобным при последующем расширении шины данных, поскольку в этом случае сохраняется преемственность со «старой» шиной.
Ширина шины данных существенно влияет на производительность ВМ. Так, если шина данных имеет ширину вдвое меньшую чем длина команды, ЦП в течение каждого цикла команды вынужден осуществлять доступ к памяти дважды.
Пропускная способность шины характеризуется количеством единиц информации (байтов), которые допускается передать по шине за единицу времени (секунду), а определяется физическим построением шины и природой подключаемых к ней устройств. Очевидно, что чем шире шина, тем выше ее пропускная способность.
Некоторые шины содержат дополнительные линии, используемые для обнаружения ошибок, возникших в процессе передачи. Выделение по одной дополнительной линии на каждый отдельный байт данных позволяет контролировать любой байт по паритету, причем и в случае пересылки по ШД лишь части слова. Возможен и иной вариант контроля ошибок. В этом случае упомянутые дополнительные линии используются совместно. По ним передается корректирующий код, благодаря которому ошибка может быть не только обнаружена, но и откорректирована. Такой метод удобен лишь при пересылке по шине полных слов.
Если адрес и данные в шине передаются по независимым (выделенным) сигнальным линиям, то ширина ША и ШД обычно выбирается независимо. Наиболее частые комбинации: 16-8, 16-16, 20-8, 20-16, 24-32 и 32-32. Во многих шинах адрес и данные пересылаются по одним и тем же линиям, но в разных тактах цикла шины. Этот прием называется временным мультиплексированием и будет рассмотрен позже. Здесь же отметим, что в случае мультиплексирования ширина ША и ширина ШД должны быть взаимоувязаны.
Применение раздельных шин адреса и данных позволяет повысить эффективность использования шины, особенно в транзакциях записи, поскольку адрес ячейки памяти и записываемые данные могут передаваться одновременно.
Помимо трактов пересылки адреса и данных, неотъемлемым атрибутом любой шины являются линии, по которым передается управляющая информации и информация о состоянии участвующих в транзакции устройств. Совокупность таких линий принято называть шиной управления (ШУ), хотя такое название представляется не совсем точным. Сигнальные линии, входящие в ШУ, можно условно разделить на несколько групп.
Первую группу образуют линии, по которым пересылаются сигналы управления транзакциями, то есть сигналы, определяющие:
тип выполняемой транзакции (чтение или запись);
количество байтов, передаваемых по шине данных, и, если пересылается часть слова, то какие байты;
какой тип адреса выдан на шину адреса;
какой протокол передачи должен быть применен.
На перечисленные цели обычно отводится от двух до восьми сигнальных линий.
Ко второй группе отнесем линии передачи информации состояния (статуса). В эту группу входят от одной до четырех линий, по которым ведомое устройство может информировать ведущего о своем состоянии или передать код возникшей ошибки.
Третья группа – линии арбитража. Вопросы арбитража рассматриваются несколько позже. Пока отметим лишь, что арбитраж необходим для выбора одного из нескольких ведущих, одновременно претендующих на доступ к шине. Число линий арбитража в разных шинах варьируется от 3 до 11.
Четвертую группу образуют линии прерывания. По этим линиям передаются запросы на обслуживание, посылаемые от ведомых устройств к ведущему. Под собственно запросы обычно отводятся одна или две линии, однако при одновременном возникновении запросов от нескольких ведомых возникает проблема арбитража, для чего могут понадобиться дополнительные линии, если только с этой целью не используются линии третьей группы.
Пятая группа линии для организации последовательных локальных сетей. Наличие от 1 до 4 таких линий стало общепринятой практикой в современных шинах. Обусловлено это тем, что последовательная передача данных протекает значительно медленнее, чем параллельная, и сети значительно выгоднее строить, не загружая быстрые линии основных шин адреса и данных. Кроме того, шины этой группы могут быть использованы как полноценный, хотя и медленный, избыточный тракт для замены ША и ШД в случае их отказа. Иногда шины пятой группы назначаются для реализации специальных функций, таких, например, как обработка прерываний или сортировка приоритетов задач.
В некоторых ШУ имеется шестая группа сигнальных линий от 4 до 5 линий позиционного кода, подсоединяемых к специальным выводам разъема. С помощью перемычек на этих выводах можно задать уникальный позиционный код разъема на материнской плате или вставленной в этот разъем дочерней платы. Такой код может быть использован для индивидуальной инициализации каждой отдельной платы при включении или перезапуске системы.
Наконец, в каждой шине обязательно присутствуют линии, которые в нашей классификации входят в седьмую группу, которая по сути является одной из важнейших. Это группа линий тактирования и синхронизации. При проектировании шины таким линиям уделяется особое внимание. В состав группы, в зависимости от протокола шины (синхронный или асинхронный), входят от двух до шести линий.
В довершение необходимо упомянуть линии для подвода питающего напряжения и линии заземления.
Большое количество линий в шине предполагает использование разъемов со значительным числом контактов. В некоторых шинах разъемы имеют сотни контактов, где предусмотрены подключение вспомогательных шин специального назначения, свободные линии для локального обмена между дочерними платами, множественные параллельно расположенные контакты для «размножения» питания и «земли»

4.6. Выделенные и мультиплексируемые линии

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

4.7. Арбитраж шин

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


4.7.1. Схемы приоритетов

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

4.7.2. Схемы арбитража

Арбитраж запросов на управление шиной может быть организован по централизованной или децентрализованной схеме. Выбор конкретной схемы зависит от требований к производительности и стоимостных ограничений.
При централизованном арбитраже в системе имеется специальное устройство – центральный арбитр, – ответственное за предоставление доступа к шине только одному из запросивших ведущих. Это устройство, называемое иногда центральным контроллером шины, может быть самостоятельным модулем или частью ЦП. Наличие на шине только одного арбитра означает, что в централизованной схеме имеется единственная точка отказа. В зависимости от того, каким образом ведущие устройства подключены к центральному арбитру, возможные схемы централизованного арбитража можно подразделить на параллельные и последовательные.
В параллельном варианте центральный арбитр связан с каждым потенциальным ведущим индивидуальными двухпроводными трактами. Поскольку запросы к центральному арбитру могут поступать независимо и параллельно, данный вид арбитража называют централизованным параллельным арбитражем или централизованным арбитражем независимых запросов.
Второй вид централизованного арбитража известен как централизованный последовательный арбитраж. В последовательных схемах для выделения запроса с наивысшим приоритетом используется один из сигналов, поочередно проходящий через цепочку ведущих, чем и объясняется другое название цепочечный или гирляндный арбитраж. В дальнейшем будем полагать, что уровни приоритета ведущих устройств в цепочке понижаются слева направо.
В зависимости от того, какой из сигналов используется для целей арбитража, различают три основных типа схем цепочечного арбитража: с цепочкой для сигнала предоставления шины (ПШ), с цепочкой для сигнала запроса шины (ЗШ) и с цепочкой для дополнительного сигнала разрешения (РШ). Наиболее распространена схема цепочки для сигнала ПШ.
При децентрализованном или распределенном арбитраже единый арбитр отсутствует. Вместо этого каждый ведущий содержит блок управления доступом к шине, и при совместном использовании шины такие блоки взаимодействуют друг с другом, разделяя между собой ответственность за доступ к шине. По сравнению с централизованной схемой децентрализованный арбитраж менее чувствителен к отказам претендующих на шину устройств.
Вне зависимости от принятой модели арбитража должна быть также продумана стратегия ограничения времени контроля над шиной. Одним из вариантов может быть разрешение ведущему занимать шину в течение одного цикла шины, с предоставлением ему возможности конкуренции за шину в последующих циклах. Другим вариантом является принудительный захват контроля над шиной устройством с более высоким уровнем приоритета, при сохранении восприимчивости текущего ведущего к запросам на освобождение шины от устройств с меньшим уровнем приоритета.

4.8. Основные интерфейсы современных ВМ на базе архитектуры IA-32
4.8.1. Интерфейс PCI

Доминирующее положение на рынке ПК достаточное длительное время занимали системы на основе шины PCI (Peripheral Component Interconnect – Взаимодействие периферийных компонентов). Этот интерфейс был предложен фирмой Intel в 1992 году (стандарт PCI 2.0 – в 1993) в качестве альтернативы локальной шине VLB/VLB2. Следует отметить, что разработчики этого интерфейса позиционируют PCI не как локальную, а как промежуточную шину (mezzanine bus), т.к. она не является шиной процессора. Поскольку шина PCI не ориентирована на определенный процессор, ее можно использовать для других процессоров. Шина PCI была адаптирована к таким процессорам, как Alpha, MIPS, PowerPC и SPARC. Именно PCI сменила NuBus на платформе Apple Macintosh.
Шины ISA, EISA или MCA могут управляться шиной PCI с помощью моста сопряжения (рис. 41), что позволяет устанавливать в ПК платы устройств ввода-вывода с различными системными интерфейсами. Например, в чипсете Intel Triton использовалась микросхема PIIX, помимо контроллера IDE предоставляющая мост для шины ISA.
[ Cкачайте файл, чтобы посмотреть картинку ] Рис. 41.  Система на основе PCI.

Существуют три варианта плат PCI: с уровнями сигналов 3,3 В, с уровнями сигналов 5 В и универсальные. Ключ в разъеме гарантирует, что платы с одним уровнем сигнала и невзаимозаменяемые не будут по ошибке вставлены в разъем с другим уровнем сигнала. Платы с пониженным напряжением питания в основном используются в мобильных компьютерах.
Существует 32-разрядная и 64-разрядная реализация шины PCI. В 64-разрядной реализации используется разъем с дополнительной секцией. 32-разрядные и 64-разрядные платы можно устанавливать в 64-разрядные и 32-разрядные разъемы и наоборот. Платы и шина определяют тип разъема и работают должным образом. При установке 64-разрядной платы в 32-разрядный разъем остальные выводы не задействуются и просто выступают за пределы разъема.
На шине PCI сигналы адреса и данных мультиплексированы, поэтому для передачи каждых 32 или 64 разрядов требуется два шинных цикла: один - для пересылки адреса, а второй - для пересылки данных. Однако возможен также пакетный режим, при котором вслед за одним циклом передачи адреса разрешается осуществить до четырех циклов передачи данных (до 16 байт в PCI-32). После этого устройство должно подать новый запрос на обслуживание и снова получить управление над шиной (и выполнить адресный цикл). Поэтому шина PCI-32 с тактовой частотой 33 МГц имеет пиковую скорость обычной передачи около 66 Мбайт/с (два шинных цикла для передачи 4 байт) и пиковую скорость пакетной передачи около 105 Мбайт/с.
PCI поддерживает процедуру прямого доступа к памяти ведущего устройства на шине (bus mastering DMA), хотя некоторые реализации PCI могут и не предоставлять такую возможность для всех разъемов PCI. Процессор может функционировать параллельно с периферийными устройствами, являющимися ведущими на шине.
Кроме того, платы PCI поддерживают:
автоматическую конфигурацию Plug&Play (не требуют назначения адресов расширений BIOS вручную);
совместное использование прерываний (когда один и тот же номер прерывания может использоваться разными устройствами);
контроль четности сигналов шины данных и адресной шины;
конфигурационную память от 64 до 256 байт (код производителя, код устройства, код класса (функции) устройства и др.).
Персональные компьютеры могут иметь две или больше шин PCI. Каждой шиной управляет свой мост PCI, что позволяет устанавливать в компьютер больше плат PCI (вплоть до 16 – ограничение адресации). Если управление второй шиной PCI осуществляется с первой шины, то это называется каскадной или иерархической схемой. В этом случае первая шина будет также нести нагрузку второй шины. Если управление каждой шиной PCI осуществляется непосредственно с шины процессора, это называется равноправной схемой. Обычно мост PCI выполняет также функции контроллера внешней кэш-памяти, контроллера основной памяти и обеспечивает сопряжение с процессором. В системах на основе Pentium II/III эти функции распределены между двумя мостами: "северным" (North Bridge) и "южным" (South Bridge), что связано с наличием дополнительного высокоскоростного системного интерфейса для подключения видеокарты (AGP).
В 1995 году был выпущена улучшенная версия интерфейса – PCI 2.1, которая предоставила следующие возможности:
поддержка тактовой частоты шины 66 МГц;
таймер обработки множественных запросов MTT (Multi-Transaction Timer) позволяет устройствам, осуществляющим прямой доступ к памяти, удерживать шину для "прерывистой" передачи пакетов, при этом не требуется повторно добиваться права управления шиной, что особенно полезно при передаче видеоданных;
пассивное разъединение (Passive Release) позволяет устройствам, осуществляющим прямой доступ к памяти по шине PCI, передавать данные в то время, когда ведется передача данных по шине ISA (обычно это приводило к блокированию передачи по шине PCI, поскольку она использовалась для подключения центрального процессора к шине ISA);
задержанные транзакции PCI позволяют передаваемым данным ведущего устройства на шине PCI получать приоритет над ожидающими в очереди данными для передачи с PCI на ISA (которые будут переданы позже);
повышение производительности записи благодаря оснащению PCI-чипсета буферами большего объема, поэтому транзакции могут выстраиваться в очередь, когда шина PCI занята, и происходит сбор байтов, слов и двойных слов, которые могут объединяться в единую 8-байтную операцию записи.
C 2005 года в ПК на основе Pentium 4 вместо PCI используют новый системный интерфейс – PCI Express.

4.8.2. Порт AGP

С повсеместным внедрением технологий мультимедиа пропускной способности шины PCI стало не хватать для производительной работы видеокарты. Чтобы не менять сложившийся стандарт на шину PCI, но, в то же время, ускорить ввод-вывод данных в видеокарту и увеличить производительность обработки трехмерных изображений, в 1996 году фирмой Intel был предложен выделенный интерфейс для подключения видеокарты - AGP (Accelerated Graphics Port - высокоскоростной графический порт). Впервые порт AGP был представлен в системах на основе Pentium II. В таких системах чипсет был разделен на два моста: "северный" (North Bridge) и "южный" (South Bridge). Северный мост связывал ЦП, память и видеокарту - три устройства в системе, между которыми курсируют наибольшие потоки данных. Таким образом, на северный мост возлагаются функции контроллера основной памяти, моста AGP и устройства сопряжения с фасадной шиной процессора FSB (Front-Side Bus). Собственно мост PCI, обслуживающий остальные устройства ввода-вывода в системе, в том числе контроллер IDE (PIIX), реализован на основе южного моста.
Одной из целей разработчиков AGP было уменьшение стоимости видеокарты, за счет уменьшения количества встроенной видеопамяти. По замыслу Intel, большие объемы видеопамяти для AGP-карт были бы не нужны, поскольку технология предусматривала высокоскоростной доступ к общей памяти.
Интерфейс AGP по топологии не является шиной, т.к. обеспечивает только двухточечное соединение, т.е. один порт AGP поддерживает только одну видеокарту. В то же время, порт AGP построен на основе PCI 2.1 с тактовой частотой 66 МГц, 32-разрядной шиной данных и питанием 3,3 В. Поскольку порт AGP и основная шина PCI независимы и обслуживаются разными мостами, это позволяет существенно разгрузить последнюю, освобождая пропускную способность, например, для потоков данных с каналов IDE. В то же время, поскольку AGP-порт всегда один, в интерфейсе нет возможностей арбитража, что существенно упрощает его и положительно сказывается на быстродействии. Для повышения пропускной способности AGP предусмотрена возможность передавать данные с помощью специальных сигналов, используемых как стробы, вместо сигнала тактовой частоты 66 МГц (табл. 4). Например, в режиме AGP 2x данные передаются как по переднему, так и по заднему фронту тактового сигнала, что позволяет достичь пропускной способности 533 Мбайт/с.


Таблица 4. Режимы работы AGP

Режим
AGP 1x
AGP 2x
AGP 4x
AGP 8x

Спецификация
AGP 1.0-1997
AGP 1.0-1997
AGP 2.0-1998
AGP 3.0-2000

Уровни напряжений
3,3 В
3,3 В
1,5 В
0,8 В

Макс. скорость
266 Мбайт/с
533 Мбайт/с
1066 Мбайт/с
2133 Мбайт/с


В AGP существует возможность отмены механизма мультиплексирования шины адреса и данных - режим адресации по боковой полосе SBA (Side-Band Addressing). При использовании SBA задействуются 8 дополнительных линий, по которым передается новый адрес, в то время как по 32-битной шине данных передается пакет от предыдущего запроса. Альтернативный способ повышения эффективности использования пропускной способности AGP - с помощью конвейеризации. На PCI по выставленному адресу после задержки появляются данные. На AGP сначала выставляется пакет адресов, на которые следует ответ пакетом данных (рис. 42).

[ Cкачайте файл, чтобы посмотреть картинку ]
Рис. 42.  Конвейеризация AGP

Главная обработка трехмерных изображений выполняется в основной памяти компьютера как центральным процессором, так и процессором видеокарты. AGP обеспечивает два механизма доступа процессора видеокарты к памяти:
DMA (Direct Memory Access) – обычный прямой доступ к памяти. В этом режиме основной памятью считается встроенная видеопамять на карте, текстуры копируются туда из системной памяти компьютера перед использованием их процессором видеокарты;
DIME (Direct In Memory Execute) – непосредственное выполнение в памяти. В этом режиме основная и видеопамять находятся как бы в общем адресном пространстве. Общее пространство эмулируется с помощью таблицы отображения адресов GART (Graphic Address Remapping Table) блоками по 4 Кбайт. Таким образом, процессор видеокарты способен непосредственно работать с текстурами в основной памяти без необходимости их копирования в видеопамять. Этот процесс называется AGP-текстурированием.
Чтобы извлечь выгоду из применения порта AGP, помимо требуемой аппаратной поддержки (т.е. графического адаптера AGP и системной платы), необходимую поддержку должны обеспечивать операционная система и драйвер видеоадаптера, а в прикладной программе должны быть использованы новые возможности порта AGP (например, трехмерное проецирование текстур).
Существуют модификации порта AGP:
спецификация AGP Pro для видеокарт с большой потребляемой мощностью (до 110 Вт), включающая дополнительные разъемы питания;
64-битный порт AGP, используемый для профессиональных графических адаптеров;
интерфейс AGP Express, представляющий собой эмуляцию порта AGP при помощи сдвоенного слота PCI в форм-факторе AGP. Применяется на некоторых материнских платах на основе PCI Express для поддержки AGP-видеокарт.
В настоящее время порт AGP практически исчерпал свои возможности и активно вытесняется системным интерфейсом PCI Express.
4.8.3. PCI Express

Интерфейс PCI Express (первоначальное название - 3GIO) использует концепцию PCI, однако физическая их реализация кардинально отличается. На физическом уровне PCI Express представляет собой не шину, а некое подобие сетевого взаимодействия на основе последовательного протокола. Высокое быстродействие PCI Express позволяет отказаться от других системных интерфейсов (AGP, PCI), что дает возможность также отказаться от деления системного чипсета на северный и южный мосты в пользу единого контроллера PCI Express.
Одна из концептуальных особенностей интерфейса PCI Express, позволяющая существенно повысить производительность системы – использование топологии «звезда». В топологии "шина" (рис. 43, левая схема) устройствам приходится разделять пропускную способность PCI между собой. При топологии «звезда» (рис. 43, правая схема) каждое устройство монопольно использует канал, связывающий его с концентратором (switch) PCI Express, не деля ни с кем пропускную способность этого канала.

[ Cкачайте файл, чтобы посмотреть картинку ] Рис. 43.  Сравнение топологий PCI и PCI Express

Канал (link), связывающий устройство с концентратором PCI Express, представляет собой совокупность дуплексных последовательных (однобитных) линий связи, называемых полосами (lane). Дуплексный характер полос также контрастирует с архитектурой PCI, в которой шина данных - полудуплексная (в один момент времени передача выполняется только в определенном направлении). На электрическом уровне каждая полоса соответствует двум парам проводников с дифференциальным кодированием сигналов. Одна пара используется для приема, другая - для передачи. PCI Express первого поколения декларирует скорость передачи одной полосы 2,5 Гбит/с в каждом направлении. В будущем планируется увеличить скорость до 5 и 10 Гбит/с.
Канал может состоять из нескольких полос: одной (x1 link), двух (x2 link), четырех (x4 link), восьми (x8 link), шестнадцати (x16 link) или тридцати двух (x32 link). Все устройства должны поддерживать работу с однополосным каналом. Аналогично, различают слоты: x1, x2, x4, x8, x16, x32. Однако слот может быть "шире", чем подведенный к нему канал, т.е. на слот x16 фактически может быть выведен канал x8 link и т.п. Карта PCI Express должна физически подходить и корректно работать в слоте, который по размерам не меньше разъема на карте, т.е. карта x4 будет работать в слотах x4, x8, x16, даже если реально к ним подведен однополосный канал. Процедура согласования канала PCI Express обеспечивает выбор максимального количества полос, поддерживаемого обеими сторонами.
При передаче данных по многополосным каналам используется принцип чередования или "разборки данных" (data stripping): каждый последующий байт передается по другой полосе. В случае канала x2 это означает, что все четные байты передаются по одной полосе, а нечетные - по другой.
Как и большинство других высокоскоростных последовательных протоколов, PCI Express использует схему кодирования данных, встраивающую тактирующий сигнал в закодированные данные, т.е. обеспечивающую самосинхронизацию. Применяемый в PCI Express алгоритм 8B / 10B (8 бит в 10 бит) обеспечивает разбиение длинных последовательностей нулей или единиц так, чтобы приемная сторона не потеряла границы битов. С учетом кодирования 8B/10B пропускную способность однополосного канала PCI Express можно оценить, как 2500 Мбит/с / 10 бит/байт = 250 мегабайт/с (238 Мбайт/с).
PCI Express обеспечивает передачу управляющих сообщений, в том числе прерываний, по тем же линиям данных. Последовательный протокол не предусматривает блокирование, поэтому легко обеспечивается латентность, сопоставимая с PCI, где имеются выделенные линии для прерываний.

Лабораторная работа №2. Мультиплексоры и демультиплексоры

Назначение мультиплексоров (от английского multiplex многократный) – коммутировать в заданном порядке сигналы, поступающие с нескольких входных шин на одну выходную. У мультиплексора может быть, например, 16 входов и 1 выход. Это означает, что если к этим входам присоединены 16 источников цифровых сигналов - генераторов последовательных цифровых слов, то байты от любого из них можно передавать на единственный выход. Для выбора любого из 16 каналов необходимо иметь 4 входа селекции, на которые подается двоичный адрес канала. Так, для передачи данных от канала номер 9 на входах селекции необходимо установить код 1001.

Рис. 44. Схема восьмивходового мультиплексора.

Например, подав на входы A B C мультиплексора на рис. 44 двоичное число 011, мы обеспечим появление на выходе F сигнала со входа D3. В силу этого мультиплексоры часто называют селекторами или селекторами-мультиплексорами.
Мультиплексоры применяются, например, в МП i8088 для выдачи на одни и те же выводы МП адреса и данных, что позволяет существенно сократить общее количество выводов микросхемы; в микропроцессорных системах управления мультиплексоры устанавливают на удаленных объектах для возможности передачи информации по одной линии от нескольких установленных на них датчиков.
Демультиплексоры в функциональном отношении противоположны мультиплексорам. С их помощью сигналы с одного информационного входа распределяются в требуемой последовательности по нескольким выходам. Выбор нужной выходной шины, как и в мультиплексоре, обеспечивается установкой соответствующего кода на адресных входах. При m адресных входах демультиплексор может иметь до 2m выходов.
Мультиплексоры и демультиплексоры присутствуют в составе микросхем 74 серии в библиотеке цифровых элементов EWB (Electronics Worbench).
Примером может служить микросхема 74153. это сдвоенный четырёхканальный мультиплексор, имеющий 2 адресных входа, входы разрешения первого и второго мультиплексоров и их непосредственные выходы и входы.
Шифраторы (кодеры) используются чаще всего для преобразования десятичных чисел в двоичный или двоично-десятичный код, например, в микрокалькуляторах, в которых нажатие десятичной клавиши соответствует генерации соответствующего двоичного кода. Поскольку возможно нажатие сразу нескольких клавиш, в шифраторах используется принцип приоритета старшего разряда, т.е. при нажатии клавиш 9, 5 и 2 на выходе шифратора будет генерироваться код 1001, соответствующий цифре 9. Следует отметить, что шифраторы как отдельный класс функциональных устройств представлены в наиболее богатой ТТЛ-серии всего двумя ИМС 74147 и 74148, причем последняя ИМС имеется и в библиотеке программы EWB.
Дешифратор (декодер) устройство с несколькими входами и выходами, у которого определенным комбинациям входных сигналов соответствует активное состояние одного из выходов, т.е. дешифратор является обращенным по входам де-мультиплексором, у которого адресные входы стали информационными, а бывший информационный вход стал входом разрешения. Поэтому часто дешифраторы называют дешифраторами-демультиплексорами и наоборот.
Дешифраторы и демультиплексоры в виде серийных ИМС средней степени интеграции широко используются в информационно-измерительной технике и микропроцессорных системах управления, в частности, в качестве коммутаторов-распределителей информационных сигналов и синхроимпульсов, для демультиплексирования данных и адресной логики в запоминающих устройствах, а также для преобразования двоично-десятичного кода в десятичный с целью управления индикаторными и печатающими устройствами.

Рис. 45. Схема дешифратора-демультиплексора с тремя входами и восемью выходами.

Дешифраторы как самостоятельные изделия электронной техники имеют 4, 8 или 16 выходов. Если требуется большее число выходов, дешифраторы наращиваются в систему.
Имеющийся в библиотеке EWB дешифратор ИМС 74154 имеет четыре адресных входа А, В, С, D, два входа разрешения G1, G2 и шестнадцать выходов 0...15 (выходы не прямые, как ошибочно обозначено в EWB, а инверсные, т.е. в исходном состоянии на выходах сигнал логической единицы). В режиме дешифратора с генератора слова на входы G1, G2 подается 0, а на адресные входы код в диапазоне 0000...1111. В режиме демультиплексора один из разрешающих входов, например G1, используется в качестве информационного. Информационный сигнал в виде логического 0 с этого выхода распределяется по выходам 0...15 в соответствии с состоянием адресных входов, т.е. режимы дешифратора и демультиплексора практически неразличимы.
Используя программу Electronics workbench (или любой другой пакет схемотехнического моделирования), выполните следующие задания:
1–5: Используется микросхема 74148 (шифратор), три светодиода (подключены к выходам A0-A2, нумерация соответственная) и генератор слова; собрать схему осуществляющую:
Включение светодиодов в последовательности «0; 1; 2».
Включение светодиодов в последовательности «0; 0+1; 0+1+2»
Включение светодиодов в последовательности «0; 0+1; 1+2; 2»
Включение светодиодов в последовательности «2; 0; 1; 1+2+3 »
Включение светодиодов в последовательности «0; 0+1; 1+2; 2»

5–15: Используется микросхема 74154 (дешифратор-демультиплексор), генератор слова и светодиоды. Исследовать микросхему и определить уровень сигнала на выходах микросхемы в исходном состоянии. Собрать схему, осуществляющую:
Последовательное гашение светодиодов по возрастанию номеров. (эффект бегущего огня)
Последовательное гашение светодиодов по убыванию номеров.
Последовательное гашение сначала чётных, а затем нечётных светодиодов по убыванию номеров.
Последовательное гашение сначала чётных, а затем нечётных светодиодов по возрастанию номеров.
Последовательное гашение светодиодов от краёв диапазона к центру.
Последовательное зажигание светодиодов по возрастанию номеров. (использовать инвертер)
Последовательное зажигание светодиодов по убыванию номеров.
Последовательное зажигание сначала чётных, а затем нечётных светодиодов по убыванию номеров.
Последовательное зажигание сначала нечётных, а затем чётных светодиодов по возрастанию номеров.
Последовательное зажигание светодиодов от краёв диапазона к центру.

ГЛАВА 5. Системы ввода/вывода. Организация обмена в вычислительной системе

5.1. Основные функции модуля ввода-вывода

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

5.1.1. Локализация данных

Под локализацией данных будем понимать возможность обращения к одному из ВУ, а также адресации данных на нем.
Адрес ВУ обычно содержится в адресной части команд ввода/вывода. Как уже отмечалось, в состав СВВ могут входить несколько модулей ввода/вывода. Каждому модулю назначается определенный диапазон адресов, независимо от того, является ли пространство адресов совмещенным или раздельным. Старшие разряды в адресах диапазона, выделенного модулю, обычно одинаковы и обеспечивают выбор одного из МВВ в рамках системы ввода/вывода. Младшие разряды адреса представляют собой уникальные адреса регистров Данного модуля или подключенных к нему ВУ.
Одной из функций МВВ является проверка вхождения поступившего по шине адреса в выделенный данному модулю диапазон адресов. При положительном ответе модуль должен обеспечить дешифровку поступившего адреса и перенаправление информации к адресуемому объекту или от него.
Для простейших внешних устройств (клавиатура, принтер и т. п.) адрес ВУ однозначно определяет и расположение данных на этом устройстве. Для более сложных ВУ, таких как внешние запоминающие устройства, информация о местонахождении данных требует детализации. Так, для ЗУ на магнитной ленте необходимо указать номер записи, а для магнитного диска – номер цилиндра, сектора и т. п. Эта часть адресной информации передается в МВВ не по шине адреса, а в виде служебных сообщений, пересылаемых по шине данных. Обработка такой информации в модуле, естественно, сложнее, чем выбор нужного регистра или ВУ. В частности, она может требовать от МВВ организации процедуры поиска на носителе информации.

5.1.2. Управление и синхронизация

Функция управления и синхронизации заключается в том, что МВВ должен координировать перемещение данных между внутренними ресурсами ВМ и внешними устройствами. При разработке системы управления и синхронизации модуля ввода/вывода необходимо учитывать целый ряд факторов.
Прежде всего, нужно принимать во внимание, что ЦП может взаимодействовать одновременно с несколькими ВУ, причем быстродействие подключаемых к МВВ внешних устройств варьируется в очень широких пределах от нескольких байтов в секунду в терминалах до десятков миллионов байтов в секунду при обмене с магнитными дисками. Если в системе используются шины, каждое взаимодействие между ЦП и МВВ включает в себя одну или несколько процедур арбитража.
В отличие от обмена с памятью процессы ввода/вывода и работа ЦП протекают не синхронно. Очередная порция информация может быть выдана на устройство вывода лишь тогда, когда это устройство готово их принять. Аналогично, ввод от устройства ввода допустим только в случае доступности информации на устройстве ввода. Несинхронный характер процессов ввода/вывода предполагает обмен сигналами, аналогичный процедуре «рукопожатия» (handshake).

5.1.3. Обмен информацией

Основной функцией МВВ является обеспечение обмена информацией. Со стороны «большого» интерфейса это обмен с ЦП, а со стороны «малого» интерфейса обмен с ВУ. В таком плане требования к МВВ непосредственно проистекают из типовой последовательности операций, выполняемых процессором при вводе выводе.
Выбор требуемого внешнего устройства.
Определение состояния МВВ и ВУ.
Выдача указания модулю ввода/вывода на подключение нужного ВУ к процессору.
Получение от МВВ подтверждения о подключении затребованного ВУ к процессору.
Распознавание сигнала готовности устройства к передаче очередной порции информации.
Прием (передача) порции информации.
Циклическое повторение двух предшествующих пунктов до завершения передачи информации в полном объеме.
Логическое отсоединение ВУ от процессора.
С учетом описанной процедуры функция обмена информацией с ЦП включает в себя:
дешифровку команды: МВВ получает команды из ЦП в виде сигналов на шине управления;
пересылку данных между МВВ и ЦП по шине данных;
извещение о состоянии: из-за того, что ВУ медленные устройства, важно знать состояние модуля ввода/вывода. Так, в момент получения запроса на пересылку данных в центральный процессор МВВ может быть не готов выполнить эту пересылку, поскольку еще не завершил предыдущую команду. Этот факт должен быть сообщен процессору с помощью соответствующего сигнала. Возможны также сигналы, уведомляющие о возникших ошибках;
распознавание адреса: МВВ обязан распознавать адрес каждого ВУ, которым он управляет.
Наряду с обеспечением обмена с процессором МВВ должен выполнять функцию обмена информацией с ВУ. Такой обмен также включает в себя передачу данных, команд и информации о состоянии.

5.2. Методы управления вводом/выводом

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

5.3. Система прерываний и исключений в архитектуре IA-32

Прерывания и исключения - это события, которые указывают на возникновение в системе или в выполняемой в данный момент задаче определенных условий, требующих вмешательства процессора. Возникновение таких событий вынуждает процессор прервать выполнение текущей задачи и передать управление специальной процедуре либо задаче, называемой обработчиком прерывания или обработчиком исключения. Различные синхронные и асинхронные события в системе на основе ЦП IA-32 можно классифицировать следующим образом (рис. 46):



Рис. 46. Классификация событий в системе на основе архитектуры IA-32.

Прерывания обычно возникают в произвольный момент времени. Прерывания бывают аппаратные (или внешние) и программные.
Внешние прерывания генерируются по аппаратному сигналу, поступающему от периферийного оборудования, когда оно требует обслуживания. Процессор определяет необходимость обработки внешнего прерывания по наличию сигнала на одном из контактов INTR# или NMI#. При появлении сигнала на линии INTR# внешний контроллер прерываний (например, 8259A) должен предоставить процессору вектор (номер) прерывания. С линией NMI# всегда связано прерывание #2.
В процессорах Pentium, P6 и Pentium 4 эти линии могут быть сконфигурированы на использование встроенным контроллером прерываний - APIC (Advanced Programmable Interrupt Controller), тогда они называются LINT0 и LINT1 и их назначение определяется настройками APIC.
Прерывания, которые генерируются при поступлении сигнала на вход INTR#, называют маскируемыми аппаратными прерываниями. Бит IF в регистре флагов позволяет заблокировать (замаскировать) обработку таких прерываний.
Прерывания, генерируемые сигналом NMI#, называют немаскируемыми аппаратными прерываниями. Немаскируемые прерывания не блокируются флагом IF. Пока выполняется обработчик немаскируемого прерывания, процессор блокирует получение немаскируемых прерываний до выполнения инструкции IRET, чтобы исключить одновременную обработку нескольких немаскируемых прерываний.
Прерывания всегда обрабатываются на границе инструкций, т.е. при появлении сигнала на контакте INTR# или NMI# процессор сначала завершит выполняемую в данный момент инструкцию (или итерацию при наличии префикса повторения), а только потом начнет обрабатывать прерывание. Помещаемый в стек обработчика адрес очередной инструкции позволяет корректно возобновить выполнение прерванной программы.
С помощью инструкции INT n (n - номер прерывания) можно сгенерировать прерывание с любым номером 0...255. Такие прерывания называют программными. Состояние бита IF в регистре флагов не влияет на возможность генерации программных прерываний. Программные прерывания могут использоваться для доступа к сервисам операционной системы (например, INT $21 - сервисы DOS, INT $80 - сервисы Linux), функциям драйверов устройств (например, INT $33 - драйвер мыши) или специальным сервисам (INT $10 - видео-сервис BIOS, INT $31 - DPMI-сервис), INT $67 - сервис EMS). Список основных источников аппаратных прерываний приведён в таблице 5.

Таблица 5. Источники аппаратных прерываний

Запрос
Источник
Приоритет
Номер вектора

NMI
Ошибка памяти или другая неисправимая ошибка в системе

02h

IRQ0
Системный таймер
1
08h

IRQ1
Клавиатура
2
09h

IRQ8
Часы реального времени
3
70h

IRQ9
Устройство на шине ISA
4
71h

IRQ10
Устройство на шине ISA
5
72h

IRQ11
Устройство на шине ISA
6
73h

IRQ12
Устройство на шине ISA
7
74h

IRQ13
Ошибка сопроцессора
9
75h

IRQ14
IDE контроллер
9
76h

IRQ15
Устройство на шине ISA
10
77h

IRQ3
Последовательный порт (COM2 или COM4)
11
0Bh

IRQ4
Последовательный порт (COM1 или COM3)
12
0Ch

IRQ5
Параллельный порт (LPT2) или IDE контроллер (вторичный)
13
0Dh

IRQ6
Контроллер дисковода
14
0Eh

IRQ7
Параллельный порт (LPT1)
15
0Fh

Хотя номер прерывания в этой инструкции может быть любым, следует отметить, что, например, при использовании вектора #2 для вызова обработчика немаскируемого прерывания внутреннее состояние процессора будет отличаться от того, которое бывает при обработке аппаратного немаскируемого прерывания. Аналогично, попытка вызвать обработчик исключения с помощью этой инструкции может оказаться неудачной, т.к. при возникновении большинства исключений в стек включается код ошибки, а при генерации программного прерывания этого не происходит. Обработчик исключения извлекает из стека код ошибки, а в случае программного прерывания из стека будет ошибочно извлечен адрес возврата, что нарушит целостность стека и, в конечном итоге, скорее всего, приведет к исключению #13 или более тяжелому.
Исключения являются для процессора внутренними событиями и сигнализируют о каких-либо ошибочных условиях при выполнении той или иной инструкции. Источниками исключений являются три типа событий:
генерируемые программой исключения, позволяющие программе контролировать определенные условия в заданных точках программы (INTO - проверка на переполнение, INT3 - контрольная точка, BOUND - проверка границ массива);
исключения машинного контроля (#18), возникающие в процессе контроля операций внутри чипа и транзакций на шине процессора (Pentium, P6 и Pentium 4);
обнаруженные процессором ошибки в программе (деление на ноль, нарушение правил защиты, отсутствие страницы и т.п.)
Исключения процессора, в зависимости от способа генерации и возможности рестарта вызвавшей исключение команды, подразделяются на нарушения, ловушки и аварии.
Нарушение (отказ) - это исключение, которое обнаруживается либо перед исполнением, либо во время исполнения команды. При этом процессор переходит в состояние, позволяющее осуществить рестарт команды. В качестве адреса возврата в стек обработчика заносится адрес вызвавшей исключение команды.
Ловушка возникает на границе команд сразу же после команды, вызвавшей это исключение. Значения регистров CS и EIP, заносимые в стек обработчика, указывают на очередную команду. Например, если ловушка сработала на команде JMP, то в стеке запоминаются значения регистров CS и EIP, указывающие на ссылку команды JMP.
В некоторых случаях для ловушек и нарушений невозможен рестарт команды, например, если один из операндов расположен ниже текущего указателя стека, т.е. по адресу памяти меньшему, чем вершина стека.
Авария не позволяет осуществить рестарт программы, и зачастую нельзя точно локализовать команду, вызвавшую это исключение. Исключения типа "авария" генерируются при обнаружении серьезных ошибок, таких как неразрешенные или несовместимые значения в системных таблицах или аппаратные сбои.
Типичным случаем аварии является исключение #8 "двойная ошибка". Двойная ошибка происходит, когда процессор пытается обработать исключение, а его обработчик генерирует еще одно исключение. Для некоторых исключений процессор не генерирует двойную ошибку, такие исключения называют "легкими". Только ошибки деления (исключение #0) и сегментные исключения (#10, #11, #12, #13), называемые "тяжелыми", могут вызвать двойную ошибку. Таким образом, получение исключения "неприсутствие сегмента" во время обработки исключения отладки не приведет к двойной ошибке, в то время как ошибка сегмента, происходящая во время обработки ошибки деления на нуль, приведет к исключению #8.
Если при попытке вызвать обработчик исключения #8 возникает ошибка, процессор переходит в режим отключения (shutdown mode). Вывести из этого режима процессор могут только аппаратные сигналы: NMI#, SMI#, RESET# или INIT#. Обычно чипсет, обнаружив на шине процессора цикл отключения, инициирует аппаратный сброс.
Если на границе инструкции обнаруживается, что требуется обработка более одного прерывания или исключения, процессор обрабатывает прерывание или исключение с наивысшим приоритетом. Исключения с низким приоритетом снимаются, а прерывания с низким приоритетом откладываются. Снятые исключения могут быть потом снова сгенерированы при возврате из обработчика.
Архитектура IA-32 предоставляет механизм обработки прерываний и исключений, прозрачный для прикладного и системного программного обеспечения. При возникновении прерывания или исключения текущая выполняемая задача автоматически приостанавливается на время действий обработчика, после чего ее выполнение возобновляется без потери непрерывности, кроме случаев, когда обработка прерывания или исключения вынуждает завершить программу.
Все прерывания и исключения имеют номер (иногда именуемый вектором) в диапазоне от 0 до 255. Номера 0...31 зарезервированы фирмой Intel для исключений.

5.4. Расширенный программируемый контроллер прерываний (APIC)

Микропроцессоры IA-32, начиная с модели Pentium, содержат встроенный расширенный программируемый контроллер прерываний (APIC). Встроенный APIC предназначен для регистрирования прерываний от источников внутри процессора (например, блок температурного контроля у Pentium 4) или от внешнего контроллера прерываний и передачи их ядру процессора на обработку. Особо важная роль возлагается на встроенный APIC в многопроцессорных системах, где APIC принимает и генерирует сообщения о межпроцессорных прерываниях (IPI - InterProcessor Interrupt). Такие сообщения могут использоваться для распределения обработки прерываний между процессорами или для выполнения системных функций (первоначальная загрузка, диспетчеризация задач и т.п.).
Встроенный APIC различает следующие источники прерываний.
От локальных устройств. Прерывания, генерируемые по фронту или уровню сигнала, который поступает от устройства, непосредственно подключенного к сигналам LINT0 и LINT1 (например, контроллер прерываний типа 8259A).
От внешних устройств. Прерывания, генерируемые по фронту или уровню сигнала, который поступает от устройства, подключенного к внешнему контроллеру прерываний. Такое прерывание передается в виде сообщения по шине APIC (или системной шине в Pentium 4).
Межпроцессорные (IPI). В многопроцессорных системах один из процессоров может прервать другой при помощи сообщения IPI на шине APIC (или системной шине в Pentium 4).
От таймера APIC. Встроенный APIC содержит таймер, который можно запрограммировать на генерацию прерывания по достижении определенного отсчета.
От таймера монитора производительности. Процессоры P6 и Pentium 4 содержат блок мониторинга производительности. Этот блок можно запрограммировать таким образом, чтобы связанный с ним таймер при достижении определенного отсчета генерировал прерывание.
От термодатчика. Процессоры Pentium 4 содержат встроенный блок температурного контроля, который можно запрограммировать на генерацию прерываний.
Внутренние ошибки APIC. Встроенный APIC может генерировать прерывания при возникновении внутренних ошибочных ситуаций (например, при попытке обратиться к несуществующему регистру APIC).
Источники 1, 4, 5, 6, 7 считаются локальными источниками прерываний и обслуживаются специальным набором регистров APIC, называемым таблицей локальных векторов (LVT – local vector table). Два других источника обрабатываются APIC через механизм сообщений. Эти сообщения в Pentium и P6 передаются по выделенной трехпроводной шине APIC (рис. 47). В Pentium 4 для передачи APIC-сообщений используется системная шина, поэтому контроллер прерываний может быть подключен непосредственно к обычному системному интерфейсу (например, PCI).

[ Cкачайте файл, чтобы посмотреть картинку ] Рис. 47.  Взаимодействие встроенного APIC и внешнего контроллера прерываний.

Структура встроенного APIC является архитектурным подмножеством микросхемы контроллера прерываний Intel 82489DX. Регистры APIC отображаются на 4К-байтный блок оперативной памяти по адресу FEE00000h (может быть изменен через MSR регистры процессора).
Наличие встроенного APIC в процессоре обнаруживается при помощи инструкции CPUID(1). После RESET встроенный APIC включен, однако впоследствии он может быть отключен, тогда процессор будет работать с прерываниями как Intel-386/486 (линии LINT0 и LINT1 будут использоваться как NMI# и INTR#, к которым может быть подключен контроллер прерываний типа 8259A).
Таблица локальных векторов (LVT) состоит из шести 32-битных регистров (в P6 – 5, в Pentium – 4):
регистр вектора прерывания от таймера;
регистр вектора прерывания от термодатчика (только в Pentium 4);
регистр вектора прерывания от монитора производительности (P6 и Pentium 4);
регистр вектора прерывания LINT0;
регистр вектора прерывания LINT1;
регистр вектора прерывания ошибки.
Значения в этих регистрах определяют:
номер вектора прерывания;
тип прерывания (fixed – с указанным вектором, SMI - переход в режим системного управления, NMI – немаскируемое, INIT – сброс, ExtINT – внешнее: процессор генерирует цикл INTA и ожидает номер вектора прерывания от внешнего контроллера);
активный уровень сигнала (низкий или высокий) или триггерный режим (прерывание по фронту или по уровню);
маску прерывания (прерывание может быть замаскировано).
Эти регистры также отражают состояние прерывания (доставляется ли это прерывание ядру процессора в данный момент).
Кроме того, APIC содержит регистры управления таймером APIC, регистр версии, регистр ошибки, регистры, связанные с обслуживанием прерываний (регистр приоритета, регистр запроса IRR, регистр обслуживания ISR), и регистры, связанные с передачей и приемом IPI.

Лабораторная работа №3. Прерывания и работа с монитором

Прерывание int 10h обеспечивает управление всем экраном. В регистре AH устанавливается код, определяющий функцию прерывания.
Функция 02h. Установить позицию курсора.
На входе:
AH – 02h
BH – номер страницы
DH – строка
DL – столбец
Эта процедура может позиционировать курсор, как на активной, так и на пассивной видеостранице. Чтобы сделать курсор невидимым, спозиционируйте его в 25-ую строку.
Функция 05h. Установить активную страницу
На входе:
AH – 05h
AL – номер страницы
Содержимое видеостраницы не уничтожается, когда происходит замена текущей видеостраницы. Фактически, Вы можете писать в пассивную страницу, затем сделать ее активной, тем самым обеспечить быстрый вывод на экран.
Функция 0Ah. Записать символ(ы).
На входе:
AX – 09h
AL – ASCII-код символа
BH – номер видеостраницы (в текстовом режиме)
CX – количество раз
Символы записываются от положения курсора по направлениям вправо и вниз, но сам курсор при этом не перемещается.
Пример программы на языке ассемблер:

;Программа вывода на экран движущейся по диагонали группы символов.
cseg1 SEGMENT 'code1'
face PROC far
assume cs:cseg1
push ds ;Сохранение регистров для выхода.
sub ax,ax ;
push ax;
mov ah,5 ;Задание активной страницы.
mov al,0 ;
int 10h ;
mov cx,3 ;Задание числа символов.
mov dx,0 ;Столбец и строка по 0 (dh -номер
; строки, dl -номер колонки).
crsr: mov ah,2 ;Функция установки позиции курсора.
int 10h
mov al,4 ;Задание ASCII-кода символа.
mov ah,10 ;Функция вывода символа.
int 10h
push cx ;Количество символов - в стек.
mov cx,4 ;Временная задержка внешнего цикла
ps1: push cx ; около 0.5 сек.
mov cx,0ffffh
ps2: loop ps2 ;
pop cx ;
loop ps1 ;
pop cx
sub al,al ;Для гашения символа.
mov ah,10 ;
int 10h ;
inc dl ;Смена столбца.
inc dl ;
inc dl ;
inc dh ;Смена строки.
cmp dh,25 ;Дошли до нижней строки ?
jne crsr ;Если нет - переход на новую.
retf
face ENDP
cseg1 ENDS
END face

Выполните следующие задания:
Задать вывод строки символов и ее перемещение сверху вниз.
Задать вывод строки символов и ее перемещение снизу вверх.
Задать вывод колонки символов с 0 позиции, и ее перемещение слева направо по экрану.
Задать вывод колонки символов в правой части экрана и ее перемещения справа налево.
Задать линию символов с левого верхнего угла экрана в правый нижний угол.
Задать линию символов с верхнего правого угла экрана в левый нижний угол.
Задать три строки символов и их перемещение сверху вниз по экрану.
Изобразить в центре экрана квадрат со сторонами 10 на 10 символов.
Задать последовательное перемещение символа по строке расположенной в середине экрана.
Задать перемещающуюся группу символов (5 символов) по строке экрана.
Задать в центре экрана квадрат с изменяющимися сторонами.
Задать диагональную линию символов, перемещающуюся по экрану.
Задать перемещение символа по экрану с образованием треугольника.
Задать три колонки символов в левой части экрана и обеспечить их перемещение в правую часть экрана.
Задать три колонки символов в правой части экрана и задать их перемещение в левую часть экрана.



ГЛАВА 6. Основные направления в архитектуре процессоров

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

6.1. Конвейеризация вычислений

Совершенствование элементной базы уже не приводит к кардинальному росту производительности ВМ. Более перспективными в этом плане представляются архитектурные приемы, среди которых один из наиболее значимых конвейеризация.
Для пояснения идеи конвейера сначала обратимся к рис. 48, а, где показан отдельный функциональный блок (ФБ). Исходные данные помещаются во входной регистр Ргвх, обрабатываются в функциональном блоке, а результат обработки фиксируется в выходном регистре Ргвых. Если максимальное время обработки в ФБ равно Tmax, то новые данные могут быть занесены во входной регистр Рвх не ранее, чем спустя Tmах.


Рис. 48. Обработка информации. а – в одиночном блоке, б – в конвейере с регистрами, в – в конвейере с буферной памятью.

Теперь распределим функции, выполняемые в функциональном блоке ФБ (см. рис. 48, а), между тремя последовательными независимыми блоками: ФБ1, ФБ2 и ФБ3, причем так, чтобы максимальное время обработки в каждом ФБ, было одинаковым и равнялось Tmах/3. Между блоками разместим буферные регистры Рг (рис. 48, б), предназначенные для хранения результата обработки в ФБ(, на случай, если следующий за ним функциональный блок еще не готов использовать этот результат. В рассмотренной схеме данные на вход конвейера могут подаваться с интервалом Tmах /3 (втрое чаще), и хотя задержка от момента поступления первой единицы данных в Ргвх до момента появления результата ее обработки на выходе Ргвых по-прежнему составляет Tmах, последующие результаты появляются на выходе Ргвых уже с интервалом Tmах /3.
На практике редко удается добиться того, чтобы задержки в каждом ФБi были одинаковыми. Как следствие, производительность конвейера снижается, поскольку период поступления входных данных определяется максимальным временем их обработки в каждом функциональном блоке. Для устранения этого недостатка или, по крайней мере, частичной его компенсации каждый буферный регистр Рг, следует заменить буферной памятью БП„ способной хранить множество данных и организованной по принципу FIFO «первым вошел первым вышел» (рис. 48, в). Обработав элемент данных, ФБi заносит результат в БПi, извлекает из БПi-1 новый элемент данных и приступает к очередному циклу обработки, причем эта последовательность осуществляется каждым функциональным блоком независимо от других блоков. Обработка в каждом блоке может продолжаться до тех пор, пока не ликвидируется предыдущая очередь или пока не переполнится следующая очередь. Если емкость буферной памяти достаточно велика, различия во времени обработки не сказываются на производительности, тем не менее желательно, чтобы средняя длительность обработки во всех ФБ, была одинаковой.
В архитектуре вычислительных машин можно найти множество объектов, где конвейеризация обеспечивает ощутимый прирост производительности ВМ. Ранее уже рассматривались два таких объекта операционные устройства и память, однако наиболее ощутимый эффект достигается при конвейеризации этапов машинного цикла.
По способу синхронизации работы ступеней конвейеры могут быть синхронными и асинхронными. Для традиционных ВМ характерны синхронные конвейеры. Связано это, прежде всего, с синхронным характером работы процессоров. Ступени конвейеров в процессоре обычно располагаются близко друг от друга, благодаря чему тракты распространения сигналов синхронизации получаются достаточно короткими и фактор «перекоса» сигналов становится не столь существенным. Асинхронные конвейеры оказываются полезными, если связь между ступенями не столь сильна, а длина сигнальных трактов между разными ступенями сильно рознится. Примером асинхронных конвейеров могут служить систолические массивы (систолическая обработка будет рассмотрена в последующих разделах).

6.1.1. Синхронные линейные конвейеры

Эффективность синхронного конвейера во многом зависит от правильного выбора длительности тактового периода Тк. Минимально допустимую Тк можно определить как сумму наибольшего из времен обработки на отдельной ступени кон вейера TСМАХ и времени записи результатов обработки в буферные регистры между ступенями конвейера TБР:
13 EMBED Equation.3 1415.
Из-за вероятного «перекоса» в поступлении тактирующего сигнала в разные ступени конвейера предыдущую формулу следует дополнить еще одним элементом максимальной величиной «перекоса» Тпк:
13 EMBED Equation.3 1415.
Каждая ступень может содержать множество логических трактов обработки. Тк определяется наиболее длинными трактами во всех ступенях конвейера. При разработке конвейера необходимо учитывать, что для двух последовательных элементов, обрабатываемых одной и той же ступенью, обработка первого элемента может проходить по тракту максимальной длины, а второго элемента по минимальному тракту. В итоге результат обработки второго элемента может появиться на выходе ступени прежде, чем в выходном регистре ступени будет запомнен предыдущий результат. Чтобы избежать подобной ситуации, сумма ТБР + Тпк должна быть меньше минимального времени обработки в ступени ТСМIN откуда:
13 EMBED Equation.3 1415.
Выбор длительности тактового периода для конвейера должен осуществляться с соблюдением соотношения:
13 EMBED Equation.3 1415.
Несмотря на очевидные преимущества выбора Тк равным нижнему пределу, проектировщики ВМ обычно ориентируются на среднее значение между нижним и верхним пределами.

6.1.2. Метрики эффективности конвейеров

Чтобы охарактеризовать эффект, достигаемый за счет конвейеризации вычислений, обычно используют три метрики: ускорение, эффективность и производительность.
Под ускорением понимается отношение времени обработки без конвейера и при его наличии. Теоретически наилучшее время обработки входного потока из N значений TNK на конвейере с К ступенями и тактовым периодом TK можно определить выражением:
13 EMBED Equation.3 1415.
Формула отражает тот факт, что до появления на выходе конвейера результата обработки первого элемента должно пройти K тактов, а последующие результаты будут следовать в каждом такте.
В процессоре без конвейера общее время выполнения составляет NKTK. Таким образом, ускорение вычислений 5 за счет конвейеризации вычислений можно описать формулой:
13 EMBED Equation.3 1415.
При 13 EMBED Equation.3 1415 ускорение стремится к величине, равной количеству ступеней в конвейере.
Еще одной метрикой, характеризующей конвейерный процессор, является эффективность Е доля ускорения, приходящаяся на одну ступень конвейера:
13 EMBED Equation.3 1415.
В качестве третьей метрики часто выступает пропускная способность или производительность Р эффективность, деленная на длительность тактового периода:
13 EMBED Equation.3 1415.
При 13 EMBED Equation.3 1415 эффективность стремится к единице, а производительность – к частоте тактирования конвейера:
13 EMBED Equation.3 1415.

6.1.3. Нелинейные конвейеры

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


Рис. 49. Нелинейный конвейер.

6.2. Конвейер команд

Идея конвейера команд была предложена в 1956 году академиком С. А. Лебедевым. Как известно, цикл команды представляет собой последовательность этапов. Возложив реализацию каждого из них на самостоятельное устройство и последовательно соединив такие устройства, мы получим классическую схему конвейера команд. Выделим в цикле команды шесть этапов:
Выборка команды (ВК). Чтение очередной команды из памяти и занесение ее в регистр команды.
Декодирование команды (ДК). Определение кода операции и способов адресации операндов.
Вычисление адресов операндов (ВА). Вычисление исполнительных адресов каждого из операндов в соответствии с указанным в команде способом их адресации.
Выборка операндов (ВО). Извлечение операндов из памяти. Эта операция не нужна для операндов, находящихся в регистрах.
Исполнение команды (ИК). Исполнение указанной операции.
Запись результата (ЗР). Занесение результата в память.


Рис. 50. Логика работы конвейера команд.

На рис. 50 показан конвейер с шестью ступенями, соответствующими шести этапам цикла команды. В диаграмме предполагается, что каждая команда обязательно проходит все шесть ступеней, хотя этот случай не совсем типичен. Так, команда загрузки регистра не требует этапа ЗР. Кроме того, здесь принято, что все этапы могут выполняться одновременно. Без конвейеризации выполнение девяти команд заняло бы 9 х 6 = 54 единицы времени. Использование конвейера позволяет сократить время обработки до 14 единиц.

6.3. Конфликты в конвейере команд

Полученное в примере число 14 характеризует лишь потенциальную производительность конвейера команд, На практике в силу возникающих в конвейере конфликтных ситуаций достичь такой производительности не удается. Конфликтные ситуации в конвейере принято обозначать термином риск (hazard), а обусловлены они могут быть тремя причинами:
попыткой нескольких команд одновременно обратиться к одному и тому же ресурсу ВМ (структурный риск);
взаимосвязью команд по данным (риск по данным);
неоднозначностью при выборке следующей команды в случае команд перехода (риск по управлению).
Структурный риск (конфликт по ресурсам) имеет место, когда несколько команд, находящихся на разных ступенях конвейера, пытаются одновременно пользовать один и тот же ресурс, чаще всего память. Так, в типовом цикле команды сразу три этапа (ВК, ВО и ЗР) связаны с обращением к памяти. Диаграмма (см. рис. 50) показывает, что все три обращения могут производиться одновременно, однако на практике это не всегда возможно. Подобных конфликтов частично удается избежать за счет модульного построения памяти и использования кэш-памяти имеется вероятность того, что команды будут обращаться либо к разные модулям ОП, либо одна из них станет обращаться к основной памяти, а другая к кэш-памяти. С этих позиций выгоднее разделять кэш-память команд и кэш-память данных. Конфликты из-за одновременного обращения к памяти могут и не возникать, поскольку для многих команд ступени выборки операнда и записи результата часто не требуются. В целом, влияние структурного риска на производительность конвейера по сравнению с другими видами рисков сравнительно невелико.
Риск по данным, в противоположность структурному риску – типичная и регулярно возникающая ситуация. Для пояснения сущности взаимосвязи команд по данным положим, что две команды в конвейере (i и j) предусматривают обращение к одной и той же переменной X, причем команда i предшествует команде j. В общем случае между i и j ожидаемы три типа конфликтов по данным:
«Чтение после записи» (ЧПЗ): команда) читает X до того, как команда i успеет записать новое значение X, то есть j ошибочно получит старое значение X вместо нового.
«Запись после чтения» (ЗПЧ): команда j записывает новое значение X до того как команда i успела прочитать X, то есть команда i ошибочно получит новое значение X вместо старого.
«Запись после записи» (ЗПЗ): команда j записывает новое значение X прежде, чем команда i успела записать в качестве X свое значение, то есть X ошибочно содержит i-е значение X вместо j-го.
Возможен и четвертый случай, когда команда j читает X прежде команды i. Этот случай не вызывает никаких конфликтов, поскольку как i, так и j получат верное значение X.
Наибольшие проблемы при создании эффективного конвейера обусловлены командами, изменяющими естественный порядок вычислений. Простейший конвейер ориентирован на линейные программы. В нем ступень выборки извлекает команды из последовательных ячеек памяти, используя для этого счетчик команд (СК). Адрес очередной команды в линейной программе формируется автоматически, за счет прибавления к содержимому СК числа, равного длине текущей команды в байтах. Реальные программы практически никогда не бывают линейными. В них обязательно присутствуют команды управления, изменяющие последовательность вычислений: безусловный и условный переход, вызов процедуры, возврат из процедуры и т. п. Доля подобных команд в программе оценивается как 10-20% (по некоторым источникам она существенно больше). Выполнение команд, изменяющих последовательность вычислений (в дальнейшем будем их называть командами перехода), может приводить к приостановке конвейера на несколько тактов, из-за чего производительность процессора снижается. Приостановки конвейера при выполнении команд перехода обусловлены двумя факторами.
Первый фактор характерен для любой команды перехода и связан с выборкой команды из точки перехода (по адресу, указанному в команде перехода). То, что текущая команда относится к командам перехода, становится ясным только после декодирования (после прохождения ступени декодирования), то есть спустя два такта от момента поступления команды на конвейер. За это время на первые ступени конвейера уже поступят новые команды, извлеченные в предположении, что естественный порядок вычислений не будет нарушен. В случае перехода эти ступени нужно очистить и загрузить в конвейер команду, расположенную по адресу перехода, для чего нужен исполнительный адрес последней. Поскольку в командах перехода обычно указаны лишь способ адресации и адресный код, исполнительный адрес предварительно должен быть вычислен, что и делается на третьей ступени конвейера. Таким образом, реализация перехода в конвейере требует определенных дополнительных операций, выполнение которых равносильно остановке конвейера как минимум на два такта.
Вторая причина нарушения ритмичности работы конвейера имеет отношение только к командам условного перехода. Для пояснения сути проблемы воспользуемся ранее приведенной условной программой (рис. 50), несколько изменив постановку задачи (рис. 51).

Рис. 51. Влияние условного перехода на работу конвейера команд.

Пусть команда 3 – это условный переход к команде 15. До завершения команды 3 невозможно определить, какая из команд (4-я или 15-я) должна выполняться следующей, поэтому конвейер просто загружает следующую команду в последовательности (команду 4) и продолжает свою работу. В варианте, показанном на рис. 50, переход не произошел и получена максимально возможная производительность. На рис. 50 переход имеет место, о чем неизвестно до 7-го шага. В этой точке конвейер должен быть очищен от ненужных команд, выполнявшихся до данного момента. Лишь на шаге 8 на конвейер поступает нужная команда 15, из-за чего в течение тактов от 9 до 12 не будет завершена ни одна другая команда. Это и есть издержки из-за невозможности предвидения исхода команды условного перехода. Как видно, они либо существенно больше, чем для прочих команда перехода (если переход происходит), либо отсутствуют вовсе (если переход не происходит).
Для сокращения задержек, обусловленных выборкой команды из точки перехода, применяются несколько подходов:
вычисление исполнительного адреса перехода на ступени декодирования команды;
использование буфера адресов перехода;
использование кэш-памяти для хранения команд, расположенных в точке перехода;
использование буфера цикла.
В результате декодирования команды выясняется не только ее принадлежность к командам перехода, но также способ адресации и адресный код точки перехода. Это позволяет сразу же приступить к вычислению исполнительного адреса перехода, не дожидаясь передачи команды на третью ступень конвейера, и тем самым сократить время остановки конвейера с двух тактов до одного. Для реализации этой идеи в состав ступени декодирования вводятся дополнительные сумматоры, с помощью которых и вычисляется исполнительный адрес точки перехода.
Буфер адресов перехода (ВТВ, Branch Target Buffer) представляет собой кэш-память небольшой емкости, в которой хранятся исполнительные адреса точек перехода нескольких последних команд, для которых переход имел место. В роли тегов выступают адреса соответствующих команд. Перед выборкой очередной команды ее адрес (содержимое счетчика команд) сравнивается с адресами команд, представленных в ВТВ. Для команды, найденной в буфере адресов перехода, исполнительный адрес точки перехода не вычисляется, а берется из ВТВ, благодаря чему выборка команды из точки перехода может быть начата на один такт раньше. Команда, ссылка на которую в ВТВ отсутствует, обрабатывается стандартным образом. Если это команда перехода, то полученный при ее выполнении исполнительный адрес точки перехода заносится в ВТВ, при условии, что команда завершилась переходом. При замещении информации в ВТВ обычно применяется алгоритм LRU.
Применение ВТВ дает наибольший эффект, когда отдельные команды перехода в программе выполняются многократно, что типично для циклов. Обычно ВТВ используется не самостоятельно, а в составе других, более сложных схем компенсации конфликтов по управлению.
Кэш-память команд, расположенных в точке перехода (BTIC, Branch Target Instruction Cache), это усовершенствованный вариант ВТВ, где в кэш-память помимо исполнительного адреса команды в точке перехода записывается также и код этой команды. За счет увеличения емкости кэш-памяти BTIC позволяет при повторном выполнении команды перехода исключить не только этап вычисления исполнительного адреса точки перехода, но и этап выборки расположенной там команды. Преимущества данного подхода в наибольшей степени проявляются при многократном исполнении одних и тех же команд перехода, главным образом при реализации программных циклов.
Буфер цикла представляет собой маленькую быстродействующую память, входящую в состав первой ступени конвейера, где производится выборка команд.
В буфере сохраняются коды N последних команд в той последовательности, в которой они выбирались. Когда имеет место переход, аппаратура сначала проверяет, нет ли нужной команды в буфере, и если это так, то команда извлекается из буфера. Стратегия наиболее эффективна при реализации циклов и итераций, чем и объясняется название буфера. Если буфер достаточно велик, чтобы охватить все тело цикла, выборку команд из памяти достаточно выполнить только один раз в первой итерации, поскольку необходимые для последующих итераций команды уже находятся в буфере.
По принципу использования буфер цикла похож на BTIC, с той разницей, что в нем сохраняется последовательность выполнения команд, а сам буфер меньше по емкости и дешевле.
Среди ВМ, где реализован буфер цикла, можно упомянуть некоторые вычислительные машины фирмы CDC (Star 100,6600,7600) и суперЭВМ CRAY-1. Специализированная версия буфера цикла имеется и в микропроцессоре Motorola 68010, где он используется для особых циклов, включающих в себя команду «Уменьшение и переход по условию».

6.4. Методы решения проблемы условного перехода

Несмотря на важность аспекта вычисления исполнительного адреса точки перехода, основные усилия проектировщиков ВМ направлены на решение проблемы условных переходов, поскольку именно последние приводят к наибольшим издержкам в работе конвейера. Для устранения или частичного сокращения этих издержек были предложены различные способы, которые условно можно разделить на четыре группы:
буферы предвыборки;
множественные потоки;
задержанный переход;
предсказание перехода.
Равномерность поступления команд на вход конвейера часто нарушается, например из-за занятости памяти или при выборке команд, состоящих из нескольких слов. Чтобы добиться ритмичности подачи команд на вход конвейера, между ступенью выборки команды и остальной частью конвейера часто размещают буферную память, организованную по принципу очереди (FIFO) и называемую буфером предвыборки. Буфер предвыборки можно рассматривать как несколько дополнительных ступеней конвейера. Подобное удлинение конвейера не сказывается на его производительности (при заданной тактовой частоте); оно лишь приводит к увеличению времени прохождения команды через конвейер. Типичные буферы предвыборки в известных процессорах рассчитаны на 2-8 команд.
Чтобы одновременно с обеспечением ритмичной работы конвейера решить и проблему условных переходов, в конвейер включают два таких буфера (рис. 52).

Рис. 52. Конвейер с буферами предвыборки команд.

Каждая извлеченная из памяти и помещенная в основной буфер команда анализируется блоком перехода. При обнаружении команды условного перехода (УП) блок перехода вычисляет исполнительный адрес точки перехода и параллельно с продолжением последовательной выборки в основной буфер организует выборку в дополнительный буфер команд, начиная с точки УП. Далее блок перехода определяет исход команды УП, в зависимости от которого подключает к остатку конвейера нужный буфер, при этом содержимое другого буфера сбрасывается. Упрощенный вариант подобного подхода применен в IBM 360/91, где дополнительный буфер рассчитан на одну команду, то есть выигрыш достигается за счет исключения времени на выборку команды из точки перехода.
Помимо необходимости дублирования части оборудования, у метода имеется еще один недостаток. Так, если в потоке команд несколько команд УП следуют одна за другой или находятся достаточно близко, количество возможных ветвлений увеличивается и, соответственно, должно быть увеличено и число буферов предвыборки.
Другим решением проблемы переходов служит дублирование начальных ступеней конвейера и создание тем самым двух параллельных потоков команд (рис. 53).


Рис. 53. Конвейер с множественными потоками.

В одной из ветвей такого «раздвоенного» конвейера последовательность выборки и выполнения команд соответствует случаю, когда условие перехода не выполнилось, во второй ветви – случаю выполнения этого условия. Для ранее рассмотренного примера (см. рис. 53) в одном из потоков может обрабатываться последовательность команд 4-6, а в другом – 15-17. Оба потока сходятся в точке, где итог проверки условия перехода становится очевидным. Дальнейшее продвижение по конвейеру продолжает только «правильный» поток. Основной недостаток метода состоит в том, что на конвейер или в поток может поступить новая команда УП до того, как будет принято окончательное решение по текущей команде перехода. Каждая такая команда требует дополнительного потока. Несмотря на это, стратегия позволяет улучшить производительность конвейера. Примерами ВМ, где используются два или более конвейерных потоков, служат IBM 370/168 и IBM 3033.
Стратегия задержанного перехода предполагает продолжение выполнения команд, следующих за командой УП, вне зависимости от ее исхода. Естественно, что это имеет смысл, лишь когда последующие команды являются «полезными», то есть такими, которые все равно должны быть когда-то выполнены, независимо от того, происходит переход или нет, и если команда перехода никак не влияет на результат их выполнения.
Для реализации этой идеи на этапе компиляции программы после каждой команды перехода вставляется команда «Нет операции». Затем на стадии оптимизации программы производятся попытки «перемешать» команды таким образом, чтобы по возможности большее количество команд «Нет операции» заменить «полезными» командами программы. Разумеется, замещать команду «Нет операции» можно лишь на такую, которая не влияет на условие выполняемого перехода, иначе полученная последовательность команд не будет функционально эквивалентной исходной. В оптимизированной программе удается заменить более 20% команд «Нет операции».


6.5. Предсказание переходов

Предсказание переходов на сегодняшний день рассматривается как один из наиболее эффективных способов борьбы с конфликтами по управлению. Идея заключается в том, что еще до момента выполнения команды условного перехода или сразу же после ее поступления на конвейер делается предположение о наиболее вероятном исходе такой команды (переход произойдет или не произойдет). Последующие команды подаются на конвейер в соответствии с предсказанием. Для иллюстрации вернемся к примеру (см. рис. 51), где команда 3 является командой УП. Пусть для команды 3 предсказано, что переход не произойдет. Тогда вслед за командой 3 на конвейер будут поданы команды 4-6 и т. д. Если предсказан переход, то после команды 3 на конвейер подаются команды 15-17,... При ошибочном предсказании конвейер необходимо вернуть к состоянию, с которого началась выборка «ненужных» команд (очистить начальные ступени конвейера), и приступить к загрузке, начиная с «правильной» точки, что по эффекту эквивалентно приостановке конвейера. Цена ошибки может оказаться достаточно высокой, но при правильных предсказаниях крупен и выигрыш конвейер функционирует ритмично без остановок и задержек, причем выигрыш тем больше, чем выше точность предсказания. Термин «точность предсказания» в дальнейшем будем трактовать как процентное отношение числа правильных предсказаний к их общему количеству. Чтобы снижение производительности конвейера из-за его остановок по причине конфликтов по управлению не превысило 10%, точность предсказания переходов должна быть выше 97,7%.
К настоящему моменту известно более двух десятков различных способов реализации идеи предсказания переходов, отличающихся друг от друга исходной информацией, на основании которой делается прогноз, сложностью реализации и, главное, точностью предсказания. При классификации схем предсказания переходов обычно выделяют два подхода: статический и динамический, в зависимости от того, когда и на базе какой информации делается предсказание.

6.5.1. Статическое предсказание переходов

Статическое предсказание переходов осуществляется на основе некоторой априорной информации о подлежащей выполнению программе. Предсказание делается на этапе компиляции программы и в процессе вычислений уже не меняется. Главное различие между известными механизмами статического прогнозирования заключается в виде информации, используемой для предсказания, и ее трактовке. Исходная информация может быть получена двумя путями: на основе анализа кода программы или в результате ее профилирования (термин «профилирование» поясняется ниже).
Известные стратегии статического предсказания для команд УП можно классифицировать следующим образом:
переход происходит всегда (ПВ);
переход не происходит никогда (ПН);
предсказание определяется по результатам профилирования;
предсказание определяется кодом операции команды перехода;
предсказание зависит от направления перехода;
при первом выполнении команды переход имеет место всегда.
В первом из перечисленных вариантов предполагается, что каждая команда условного перехода в программе обязательно завершится переходом, и, с учетом такого предсказания, дальнейшая выборка команд производится, начиная с адреса перехода. В основе второй стратегии лежит прямо противоположный подход: ни одна из команд условного перехода в программе никогда не завершается переходом, поэтому выборка команд продолжается в естественной последовательности.
Интуитивное представление, что обе стратегии должны приводить к верному предсказанию в среднем в 50% случаев, на практике не подтверждается. Так, по результатам тестирования, предсказание об обязательном переходе оказалось правильным в среднем для 76% команд УП.
Аналогичный показатель, полученный на ином наборе тестовых программ, составил 68%.
Тесты свидетельствуют, что успешность стратегии ПВ существенно зависит от характера программы и методов программирования, что, естественно, можно рассматривать как недостаток. Тем не менее, стратегия все же используется в ряде ВМ, в частности MIPS-X, SuperSPARC, микропроцессорах i486 фирмы Intel. Связано это, скорее всего, с простотой реализации и с тем, что для определенного класса программ стратегию можно считать достаточно эффективной.
Схожая ситуация характерна и для стратегии ПН, где предполагается, что ни одна из команд УП в программе никогда не завершается переходом. Несмотря на схожесть с ПВ, процент правильных исходов здесь обычно ниже, особенно в программах с большим количеством циклов.
Стратегия ПН реализована в конвейерах микропроцессоров М68020 и МС88000, вычислительной машине VAX 11/780.
В третьем из перечисленных способов статического предсказания назначение командам УП наиболее вероятного исхода производится по результатам профилирования подлежащих выполнению программ. Под профилированием подразумевается выполнение программы при некотором эталонном наборе исходных данных, сопровождающееся сбором информации об исходах каждой команды условного перехода. Тем командам, которые чаще завершались переходом, назначается стратегия ПВ, а всем остальным ПН. Выбор фиксируется в специальном бите кода операции. Некоторые компиляторы самостоятельно проводят профилирование программы и по его результатам устанавливают этот бит в формируемом объектном коде. При выполнении программы поведение конвейера команд определяется после выборки команды по состоянию упомянутого бита в коде операции. Основной недостаток этого образа действий связан с тем, что изменение набора исходных данных для профилирования может существенно менять поведение одних и тех же команд условного перехода.
Средняя вероятность правильного предсказания, полученная на программах тестового набора SPEC_92, составила 75%. Стратегия используется в процессорах MIPS 4x00 и PowerPC 603.
При предсказании на основе кода операции команды перехода для одних команд предполагается, что переход произойдет, для других его не случится. Например, для команды перехода по переполнению логично предположить, что перехода не будет. На практике назначение разным видам команд УП наиболее вероятного исхода чаще производится по результатам профилирования программ.
Достаточно логичным представляется предсказание исходя из направления перехода. Если указанный в команде адрес перехода меньше содержимого счетчика команд, говорят о переходе «назад», и для такой команды назначается стратегия ПВ. Переход к адресу, превышающему адрес команды перехода, считается переходом «вперед», и такой команде назначается стратегия ПН. В основе рассматриваемого подхода лежит статистика по множеству программ, согласно которой большинство команд УП в программах используются для организации циклов, причем, как правило, переходы происходят к началу цикла (переходы «назад»). Таким образом, для команд условного перехода «назад» логично принять, что переход происходит всегда. Рассматриваемую стратегию иногда называют «Переход назад происходит всегда».

6.5.2. Динамическое предсказание переходов

В динамических стратегиях решение о наиболее вероятном исходе команды УП принимается в ходе вычислений, исходя из информации о предшествующих переходах (истории переходов), собираемой в процессе выполнения программы. В целом, динамические стратегии по сравнению со статическими обеспечивают более высокую точность предсказания. Прежде чем приступить к рассмотрению конкретных динамических механизмов предсказания переходов, остановимся на некоторых положениях, общих для всех динамических подходов.
Идея динамического предсказания переходов предполагает накопление информации об исходе предшествующих команд УП. История переходов фиксируется в форме таблицы, каждый элемент которой состоит из m битов. Нужный элемент таблицы указывается с помощью k-разрядной двоичной комбинации – шаблона (pattern). Этим объясняется общепринятое название таблицы предыстории переходов – таблица истории для шаблонов (РНТ, Pattern History Table).
При описании динамических схем предсказания переходов их часто расценивают как один из видов автоматов Мура, при этом содержимое элементов РНТ трактуется как информация, отображающая текущее состояние автомата.

6.6. Суперконвейерные процессоры

Эффективность конвейера находится в прямой зависимости от того, с какой частотой на его вход подаются объекты обработки. Добиться n-кратного увеличения темпа работы конвейера можно двумя путями:
разбиением каждой ступени конвейера на п «подступеней» при одновременном повышении тактовой частоты внутри конвейера также в п раз;
включением в состав процессора п конвейеров, работающих с перекрытием.
В данном разделе рассматривается первый из этих подходов, известный как суперконвейеризация (термин впервые был применен в 1988 году). Иллюстрацией эффекта суперконвейеризации может служить диаграмма, приведенная на рис. 54, где рассмотрен ранее обсуждавшийся пример (см. рис. 50). Каждая из шести ступеней стандартного конвейера разбита на две более простые подступени, обозначенные индексами 1 и 2. Выполнение операции в подступенях занимает половину тактового периода. Тактирование операций внутри конвейера производится с частотой, вдвое превышающей частоту «внешнего» тактирования конвейера, благодаря чему на каждой ступени конвейера можно в пределах одного «внешнего» тактового периода выполнить две команды.
В сущности, суперконвейеризация сводится к увеличению количества ступеней конвейера как за счет добавления новых ступеней, так и путем дробления имеющихся ступеней на несколько простых подступеней. Главное требование возможность реализации операции в каждой подступени наиболее простыми техническими средствами, а значит, с минимальными затратами времени. Вторым, не менее важным, условием является одинаковость задержки во всех подступенях.
Критерием для причисления процессора к суперконвейерным служит число ступеней в конвейере команд. К суперконвейерным относят процессоры, где таких ступеней больше шести. Первым серийным суперконвейерным процессором считается MIPS R4000, конвейер команд которого включает в себя восемь ступеней. Суперконвейеризация здесь стала следствием разбиения этапов выборки команды и выборки операнда, а также введения в конвейер дополнительного этапа проверки тега, появление которой обусловлено архитектурой системы команд машины.


Рис. 54. Традиционная и суперконвейерная обработка команд.

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

6.7. Архитектуры с полным и сокращенным набором команд

Современная технология программирования ориентирована на языки высокого уровня (ЯВУ), главная задача которых облегчить процесс написания программ. Более 90% всего процесса программирования осуществляют на ЯВУ. К сожалению, операции, характерные для ЯВУ, отличаются от операций, реализуемых машинными командами. Эта проблема получила название семантического разрыва и ведет она к недостаточно эффективному выполнению программ. Пытаясь преодолеть семантический разрыв, разработчики ВМ расширяют систему команд, дополняя ее командами, реализующими сложные операторы ЯВУ на аппаратурном уровне, вводят дополнительные виды адресации и т. п. Вычислительные машины, где реализованы эти средства, принято называть ВМ с полным набором команд (CISC – Complex Instruction Set Computer). К типу CISC можно отнести практически все ВМ, выпускавшиеся до середины 80-х годов и значительную часть из выпускаемых в настоящее время.
Характерные для CISC способы решения проблемы семантического разрыва, вместе с тем ведут к усложнению архитектуры ВМ, главным образом устройства управления, что, в свою очередь, негативно сказывается на производительности в целом. Кроме того, в CISC очень сложно организовать эффективный конвейер команд, который, как уже отмечалось, является одним из наиболее перспективных путей повышения производительности ВМ. Все это заставило более внимательно проанализировать программы, получаемые после компиляции с ЯВУ. Был предпринят комплекс исследований, в результате которых обнаружились интересные закономерности:
Реализация сложных команд, эквивалентных операторам ЯВУ, требует увеличения емкости управляющей памяти в микропрограммном УУ. Микропрограммы сложных команд могут занимать до 60% управляющей памяти, в то время как их доля в общем объеме программы зачастую не превышает 0,2%.
В откомпилированной программе операторы ЯВУ реализуются в виде процедур (подпрограмм), поэтому на операции вызова процедуры и возврата из нее приходится от 15 до 45% вычислительной нагрузки.
При вызове процедуры вызывающая программа передает этой процедуре некоторое количество аргументов. В 98% случаев число передаваемых аргументов не превышает шести. Примерно такое же положение сложилось и с параметрами, которые процедура возвращает вызывающей программе. Более 80% переменных, используемых программой, являются локальными, то есть создаются при входе в процедуру и уничтожаются при выходе из нее. Количество локальных переменных, создаваемых отдельной процедурой, в 92% случаев не превышает шести.
Почти половину операций в ходе вычислений составляет операция присваивания, сводящаяся к пересылке данных между регистрами, ячейками памяти или регистрами и памятью.
Детальный анализ результатов исследований привел к серьезному пересмотру традиционных архитектурных решений, следствием чего стало появление архитектуры с сокращенным, набором команд (RISC Reduced Instruction Set Computer). Термин «RISC» впервые был использован Паттерсоном и Дитцелем в 1980 году.

6.8. Основные черты RISC-архитектуры

Главные усилия в архитектуре RISC направлены на построение максимально эффективного конвейера команд, то есть такого, где все команды извлекаются из памяти и поступают в ЦП на обработку в виде равномерного потока, причем ни одна команда не должна находиться в состоянии ожидания, а ЦП должен оставаться загруженным на протяжении всего времени. Кроме того, идеальным будет вариант, когда любой этап цикла команды выполняется в течение одного тактового периода.
Последнее условие относительно просто можно реализовать для этапа выборки. Необходимо лишь, чтобы все команды имели стандартную длину, равную ширине шины данных, соединяющей ЦП и память. Унификация времени исполнения для различных команд значительно более сложная задача, поскольку наряду с регистровыми существуют также команды с обращением к памяти.
Помимо одинаковой длины команд, важно иметь относительно простую подсистему декодирования и управления: сложное устройство управления (УУ) будет вносить дополнительные задержки в формирование сигналов управления. Очевидный путь существенного упрощения УУ сокращение числа выполняемых команд, форматов команд и данных, а также видов адресации.
Излишне напоминать, что в сокращенном списке команд должны оставаться те, которые используются наиболее часто. Исследования показали, что 80-90% времени выполнения типовых программ приходится на относительно малую часть команд (10-20%). К наиболее часто востребуемым действиям относятся пересылка данных, арифметические и логические операции. Основная причина, препятствующая сведению всех этапов цикла команды к одному тактовому периоду, потенциальная необходимость доступа к памяти для выборки операндов и/или записи результатов. Следует максимально сократить число команд, имеющих доступ к памяти. Это соображение добавляет к ранее упомянутым принципам RISC еще два:
доступ к памяти во время исполнения осуществляется только командами «Чтение» и «Запись»;
все операции, кроме «Чтение» и «Запись», имеют тип «регистр-регистр».
Для упрощения выполнения большинства команд и приведения их к типу «регистр-регистр» требуется снабдить ЦП значительным числом регистров общего назначения. Большое число регистров в регистровом файле ЦП позволяет обеспечить временное хранение промежуточных результатов, используемых как операнды в последующих операциях, и ведет к уменьшению числа обращений к памяти, ускоряя выполнение операций. Минимальное число регистров, равное 32, принято как стандарт де-факто большинством производителей RISC-компьютеров.
Суммируя сказанное, концепцию RISC-компьютера можно свести к следующим положениям:
выполнение всех (или, по крайней мере, 75% команд) за один цикл;
стандартная однословная длина всех команд, равная естественной длине слова и ширине шины данных и допускающая унифицированную поточную обработку всех команд;
малое число команд (не более 128);
малое количество форматов команд (не более 4);
малое число способов адресации (не более 4);
доступ к памяти только посредством команд «Чтение» и «Запись»;
все команды, за исключением «Чтения» и «Записи», используют внутрипроцессорные межрегистровые пересылки;
устройство управления «жесткой» логикой;
относительно большой (не менее 32) процессорный файл регистров общего назначения.

6.9. Преимущества и недостатки RISC

Сравнивая достоинства и недостатки CISC и RISC, невозможно сделать однозначный вывод о неоспоримом преимуществе одной архитектуры над другой. Для отдельных сфер использования ВМ лучшей оказывается та или иная. Тем не менее ниже приводится основная аргументация «за» и «против» RISC-архитектуры.
Для технологии RISC характерна сравнительно простая структура устройства управления. Площадь, выделяемая на кристалле микросхемы для реализации УУ, существенно меньше. Так, в RISC I она составляет 6%, а в RISC II – 10%. Как следствие, появляется возможность разместить на кристалле большое число регистров ЦП (138 в RISC II). Кроме того, остается больше места для других узлов ЦП и для дополнительных устройств: кэш-памяти, блока арифметики с плавающей запятой, части основной памяти, блока управления памятью, портов ввода/вывода.
Унификация набора команд, ориентация на потоковую конвейерную обработку, унификация размера команд и длительности их выполнения, устранение периодов ожидания в конвейере – все эти факторы положительно сказываются на общем быстродействии. Простое устройство управления имеет немного вентилей и, следовательно, короткие линии связи для прохождения сигналов управления. Малое число команд, форматов и режимов приводит к упрощению схемы декодирования, и оно происходит быстрее. Применяемое в RISC УУ с «жесткой» логикой быстрее микропрограммного. Высокой производительности способствует и упрощение передачи параметров между процедурами. Таким образом, применение RISC ведет к сокращению времени выполнения программы или увеличению скорости, за счет сокращения числа циклов на команду.
Простота УУ, сопровождаемая снижением стоимости и повышением надежности, также говорит в пользу RISC. Разработка УУ занимает меньше времени. Простое УУ будет содержать меньше конструктивных ошибок и поэтому более надежно.
Многие современные CISC-машины, такие как VAX 11/780, VAX-8600, имеют много средств для прямой поддержки функций ЯВУ, наиболее частых в этих языках (управление процедурами, операции с массивами, проверка индексов массивов, защита информации, управление памятью и т. д.). RISC также обладает рядом средств для непосредственной поддержки ЯВУ и упрощения разработки компиляторов ЯВУ, благодаря чему эта архитектура в плане поддержки ЯВУ ни в чем не уступает CISC.
Недостатки RISC прямо связаны с некоторыми преимуществами этой архитектуры. Принципиальный недостаток сокращенное число команд: на выполнение ряда функций приходится тратить несколько команд вместо одной в CISC. Это удлиняет код программы, увеличивает загрузку памяти и трафик команд между памятью и ЦП. Недавние исследования показали, что RISC-программа в среднем на 30% длиннее CISC-программы, реализующей те же функции.
Хотя большое число регистров дает существенные преимущества, само по себе оно усложняет схему декодирования номера регистра, тем самым увеличивается время доступа к регистрам.
УУ с «жесткой» логикой, реализованное в большинстве RISC-систем, менее гибко, более склонно к ошибкам, затрудняет поиск и исправление ошибок, уступает при выполнении сложных команд.
Однословная команда исключает прямую адресацию для полного 32-битового адреса. Поэтому ряд производителей допускают небольшую часть команд двойной длины, например в Intel 80960.

6.10. Суперскалярные процессоры

Поскольку возможности по совершенствованию элементной базы уже практически исчерпаны, дальнейшее повышение производительности ВМ лежит в плоскости архитектурных решений. Как уже отмечалось, один из наиболее эффективных подходов в этом плане – введение в вычислительный процесс различных уровней параллелизма. Ранее рассмотренный конвейер команд – типичный пример такого подхода. Тем же целям служат и арифметические конвейеры, где конвейеризации подвергается процесс выполнения арифметических операций. Дополнительный уровень параллелизма реализуется в векторных и матричных процессорах, но только при обработке многокомпонентных операндов типа векторов и массивов. Здесь высокое быстродействие достигается за счет одновременной обработки всех компонентов вектора или массива, однако подобные операнды характерны лишь для достаточно узкого круга решаемых задач. Основной объем вычислительной нагрузки обычно приходится на скалярные вычисления, то есть на обработку одиночных операндов, таких, например, как целые числа. Для подобных вычислений дополнительный параллелизм реализуется значительно сложнее, но тем не менее возможен и примером могут служить суперскалярные процессоры.
Суперскалярным (этот термин впервые был использован в 1987 году) называется центральный процессор (ЦП), который одновременно выполняет более чем одну скалярную команду. Это достигается за счет включения в состав ЦП нескольких самостоятельных функциональных (исполнительных) блоков, каждый из которых отвечает за свой класс операций и может присутствовать в процессоре в нескольких экземплярах. Так, в микропроцессоре Pentium III блоки целочисленной арифметики и операций с плавающей точкой дублированы, а в микропроцессорах Pentium 4 и Athlon – троированы. Структура типичного суперскалярного процессора показана на рис. 55. Процессор включает в себя шесть блоков: выборки команд, декодирования команд, диспетчеризации команд, распределения команд по функциональным блокам, блок исполнения и блок обновления состояния.



Рис. 55. Архитектура суперскалярного процессора.

Блок выборки команд извлекает команды из основной памяти через кэш-память команд. Этот блок хранит несколько значений счетчика команд и обрабатывает команды условного перехода.
Блок декодирования расшифровывает код операции, содержащийся в извлеченных из кэш-памяти командах. В некоторых суперскалярных процессорах, например в микропроцессорах фирмы Intel, блоки выборки и декодирования совмещены.
Блоки диспетчеризации и распределения взаимодействуют между собой и в совокупности играют в суперскалярном процессоре роль контроллера трафика. Оба блока хранят очереди декодированных команд. Очередь блока распределения часто рассредоточивается по несколько самостоятельным буферам – накопителям команд или схемам резервирования (reservation station), – предназначенным для хранения команд, которые уже декодированы, но еще не выполнены. Каждый накопитель команд связан со своим функциональным блоком (ФБ), поэтому число накопителей обычно равно числу ФБ, но если в процессоре используется несколько однотипных ФБ, то им придается общий накопитель. По отношению к блоку диспетчеризации накопители команд выступают в роли виртуальных функциональных устройств.
В дополнение к очереди, блок диспетчеризации хранит также список свободных функциональных блоков, называемый табло (scoreboard). Табло используется для отслеживания состояния очереди распределения. Один раз за цикл блок диспетчеризации извлекает команды из своей очереди, считывает из памяти или регистров операнды этих команд, после чего, в зависимости от состояния табло, помещает команды и значения операндов в очередь распределения. Эта операция называется выдачей команд. Блок распределения в каждом цикле проверяет каждую команду в своих очередях на наличие всех необходимых для ее выполнения операндов и при положительном ответе начинает выполнение таких команд в соответствующем функциональном блоке.
Блок исполнения состоит из набора функциональных блоков. Примерами ФБ могут служить целочисленные операционные блоки, блоки умножения и сложения с плавающей запятой, блок доступа к памяти. Когда исполнение команды завершается, ее результат записывается и анализируется блоком обновления состояния, который обеспечивает учет полученного результата теми командами в очередях распределения, где этот результат выступает в качестве одного из операндов.
Как было отмечено ранее, суперскалярность предполагает параллельную работу максимального числа исполнительных блоков, что возможно лишь при одновременном выполнении нескольких скалярных команд. Последнее условие хорошо сочетается с конвейерной обработкой, при этом желательно, чтобы в суперскалярном процессоре было несколько конвейеров, например два или три.
Подобный подход реализован в микропроцессоре Intel Pentium, где имеются два конвейера, каждый со своим АЛУ (рис. 56). Отметим, что здесь, в отличие от стандартного конвейера, в каждом цикле необходимо производить выборку более чем одной команды. Соответственно, память ВМ должна допускать одновременное считывание нескольких команд и операндов, что чаще всего обеспечивается за счет ее модульного построения.


Рис. 56. Суперскалярный процессор с двумя конвейерами.

Более интегрированный подход к построению суперскалярного конвейера показан на рис. 57. Здесь блок выборки (ВК) извлекает из памяти более одной команды и передает их через ступени декодирования команды и вычисления адресов операндов в блок выборки операндов (ВО). Когда операнды становятся доступными, команды распределяются по соответствующим исполнительным блокам. Обратим внимание, что операции «Чтение», «Запись» и «Переход» реализуются самостоятельными исполнительными блоками. Подобная форма суперскалярного процессора используется в микропроцессорах Pentium II и Pentium III фирмы Intel, а форма с тремя конвейерами в микропроцессоре Athlon фирмы AMD.


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


Рис. 58. Сравнение суперскалярного и суперконвейерного подхода.

В процессорах некоторых ВМ реализованы как суперскалярность, так и суперконвейеризация (рис. 59). Такое совмещение имеет место в микропроцессорах Athlon и Duron фирмы AMD, причем охватывает оно не только конвейер команд, но и блок обработки чисел в форме с плавающей запятой.


Рис. 59. Сравнение эффективности стандартной суперскалярной и совмещённой схем суперскалярных вычислений.


Лабораторная работа №4. Исполнительные устройства ВМ

Счетчики. Счетчиком называют устройство, сигналы на выходе которого отображают число импульсов, поступивших на счетный вход. JK-триггер может служить примером простейшего счетчика. Такой счетчик считает до двух. Счетчик, образованный цепочкой из m триггеров, может подсчитать в двоичном коде 13 EMBED Equation.3 1415 импульсов. Каждый из триггеров такой цепочки называют разрядом счетчика. Число m определяет количество разрядов двоичного числа, которое может быть записано в счетчик. Число13 EMBED Equation.3 1415 называют коэффициентом (модулем) счета.
Информация снимается с прямых и (или) инверсных выходов всех триггеров. В паузах между входными импульсами триггеры сохраняют свои состояния, т.е. счетчик запоминает число входных импульсов.
Нулевое состояние всех триггеров принимается за нулевое состояние счетчика в целом. Остальные состояния нумеруются по числу поступивших входных импульсов. Когда число входных импульсов 13 EMBED Equation.3 1415, происходит переполнение, после чего счетчик возвращается в нулевое состояние и цикл повторяется. Коэффициент счета, таким образом, характеризует число входных импульсов, необходимое для выполнения одного цикла и возвращения в исходное состояние. Число входных импульсов и состояние счетчика взаимно определены только для первого цикла.
После завершения каждого цикла на выходах последнего триггера возникают перепады напряжения. Это определяет второе назначение счетчиков: деление числа входных импульсов. Если входные сигналы периодичны и следуют с частотой 13 EMBED Equation.3 1415, то частота выходных сигналов равна 13 EMBED Equation.3 1415. В этом случае коэффициент счета называется коэффициентом деления и обозначается как 13 EMBED Equation.3 1415.
У счетчика в режиме деления используется выходной сигнал только последнего триггера, промежуточные состояния остальных триггеров во внимание не принимаются. Всякий счетчик может быть использован как делитель частоты. Поэтому подобное устройство часто называют счетчиком-делителем. Такие делители имеют целочисленный коэффициент деления. Однако элементная база современной микроэлектроники позволяет создавать делители с дробными коэффициентами деления.
Символом счетчиков на схемах служат буквы CT, после символа проставляют число, характеризующее модуль счета (например CT2, CT10).
Основными эксплуатационными показателями счетчика являются емкость и быстродействие. Емкость счетчика, численно равная коэффициенту счета, равна числу импульсов за один цикл.
Быстродействие счетчика определяется двумя параметрами: разрешающей способностью 13 EMBED Equation.3 1415 и временем установки кода счетчика 13 EMBED Equation.3 1415. Под разрешающей способностью подразумевают минимальное время между двумя входными сигналами, в течение которого не возникают сбои в работе. Обратная величина 13 EMBED Equation.3 1415 называется максимальной частотой счета. Время установки кода 13 EMBED Equation.3 1415 равно времени между моментом поступления входного сигнала и переходом счетчика в новое устойчивое состояние. Эти параметры зависят от быстродействия триггеров и способа их соединения между собой.
Счетчики различаются числом и типами триггеров, способами связей между ними, кодом, организацией счета и другими показателями. Цифровые счетчики классифицируются по следующим параметрам:
коэффициент счета – двоичные (бинарные); двоично-десятичные (декадные) или с другим основанием счета; с произвольным постоянным и переменным (программируемым) коэффициентом счета;
направление счета – суммирующие, вычитающие и реверсивные;
способ организации внутренних связей – с последовательным, параллельным или с комбинированным переносом, кольцевые.
Классификационные признаки независимы и могут встречаться в разных сочетаниях: например, суммирующие счетчики бывают как с последовательным, так и с параллельным переносом, они могут иметь двоичный, десятичный или иной коэффициенты счета.
Введением дополнительных логических связей – обратных и прямых – двоичные счетчики преобразуются в недвоичные. Наибольшее распространение получили десятичные (декадные) счетчики, работающие с 13 EMBED Equation.3 1415 в двоично-десятичном коде (двоичный – по коду счета, десятичный – по числу состояний).
Десятичные счетчики организуются из четырехразрядных двоичных счетчиков. Избыточные шесть состояний исключаются введением дополнительных связей. Возможны два варианта построения схем: счет циклически идет от 0000B=0D до 1001B=9D и счет происходит от 0110B=6D до 1111B=15D (B, D – обозначения двоичного и десятичного чисел). Первый вариант на практике применяется чаще.
В суммирующем счетчике каждый входной импульс увеличивает на единицу число, записанное в счетчик, при этом перенос информации из одного разряда в другой, более старший, имеет место, когда происходит смена состояний 1 на 0.
Вычитающий счетчик действует обратным образом: двоичное число, хранящееся в счетчике, с каждым поступающим импульсом уменьшается на единицу. Переполнение вычитающего счетчика происходит после достижения им нулевого состояния. Перенос из младшего разряда в старший здесь имеет место при смене состояния младшего разряда с 0 на 1.
Реверсивный счетчик может работать в качестве суммирующего и вычитающего. Эти счетчики имеют дополнительные входы для задания направления счета. Режим работы определяется управляющими сигналами на этих входах. В программе EWB таки счетчики представлены ИМС 74163 и 74169 (отечественные аналоги К155ИЕ18, ИЕ17).
Счетчики с последовательным переносом представляют собой цепочку триггеров, в которой импульсы, подлежащие счету, поступают на вход первого триггера, а сигнал переноса передается последовательно от одного разряда к другому.
Главное достоинство счетчиков с последовательным переносом – простота схемы. Увеличение разрядности осуществляется подключением дополнительных триггеров к выходу последнего триггера. Основной недостаток счетчиков с последовательным переносом – сравнительно низкое быстродействие, поскольку триггеры срабатывают последовательно, один за другим. Счетчики этого класса в библиотеке EWB не представлены.
Максимальная частота счета определяется режимом работы. Если считывание состояния счетчика должно происходить после каждого входного импульса, как это имеет место, например, при счете до заданного числа, то максимальная частота равна 13 EMBED Equation.3 1415, где m – число разрядов; 13 EMBED Equation.3 1415
· задержка переключения одного триггера; 13 EMBED Equation.3 1415 - время срабатывания внешнего элемента или считывающей схемы.
Счетчики с параллельным переносом состоят из синхронных триггеров. Счетные импульсы подаются одновременно на все тактовые входы, а каждый из триггеров цепочки служит по отношения к последующим только источником информационных сигналов. Срабатывание триггеров параллельного счетчика происходит синхронно, и задержка переключения всего счетчика равна задержке одного триггера. В таких счетчиках используются JK- и D-триггеры. В схемном отношении они сложнее счетчиков с последовательным переносом. Число разрядов у этих счетчиков обычно невелико (46), поскольку с повышением числа разрядов число внутренних логических связей быстро растет.
Счетчики с параллельным переносом применяются в быстродействующих устройствах. Они обладают более высокой помехоустойчивостью, так как в паузах между импульсами триггеры счетчика блокированы. К их недостаткам следует отнести меньшую нагрузочную способность отдельных разрядов из-за дополнительной нагрузки внутренними связями. Каскад, предшествующий счетчику, должен иметь достаточную мощность, чтобы управлять входами нескольких триггеров.
Счетчики с параллельным переносом (их чаще называют синхронными) в библиотеке EWB представлены счетчиками 74160, 74162, 74163, 74169 (аналоги К155ИЕ9, ИЕ11, ИЕ18, ИЕ17 соответственно).
В счетчике с параллельно-последовательным переносом триггеры объединены в группы так, что отдельные группы образуют счетчики с параллельным переносом, а группы соединяются последовательно. В роли групп могут быть и готовые счетчики. Счетчики этого типа, как правило, много разрядные. Общий коэффициент счета равен произведению коэффициентов счета всех групп. По быстродействию они занимают промежуточное положение.
Счетчики-делители, оформленные как самостоятельные изделия, имеются в составе многих серий микросхем. Номенклатуру счетчиков отличает большое разнообразие. Многие из них обладают универсальными свойствами и позволяют управлять коэффициентом и направление счета, вводить до начала цикла исходное число, прекращать счет по команде, наращивать число разрядов и т.п. С помощью готовых счетчиков можно решить большинство практических задач, возникающих перед разработчиком аппаратуры.
В ряде случаев может возникнуть потребность в счетчиках с нетиповыми характеристиками. Они создаются из отдельных триггеров и логических элементов.
Проектирование счетчика сводится к определению числа триггеров и организации связей между ними и логическими элементами, а также вычислению разрешающей способности счетчика (максимальной частоты счета).
На первом шаге проектирования заданный коэффициент счета (деления) преобразуется в двоичный код. Число разрядов двоичного числа показывает, сколько триггеров должен иметь счетчик, а число единиц определяет число входов логического элемента. Входы элемента подключаются к прямым выходам Q тех триггеров, которые соответствуют единицам двоичного числа. Следует только учитывать, что первый, входной триггер отображает младший разряд числа. Выход логического элемента соединяется со входами установки нуля (входы R) всех триггеров, от которых сделаны отводы, а также тех, которые непосредственно за ними следуют.
Результаты проектирования применимы к триггерам разных видов логики, однако реальные схемы при этом могут различаться в деталях. Поскольку принудительная установка в нуль по R-входу у некоторых типов триггеров осуществляется сигналами логического нуля (ТТЛ, ДТЛ), у других – сигналами логической единицы (КМОП), в первом случае дожжен быть применен логический элемент И-НЕ, во втором – И. Кроме того, в суммирующем счетчике опрокидывание каждого последующего триггера должно происходить тогда, когда сигнал на выходе предыдущего триггера изменяется от 1 к 0, поэтому важен порядок соединения триггеров между собой. Если в счетчике применяются триггеры с прямым управлением (по фронту 13 EMBED Equation.3 1415), их входы присоединяются к инверсным выходам предыдущих. В случае триггеров с инверсным управлением входы подключают к прямым выходам. Добавив к исходной схеме несколько дополнительных элементов, можно расширить ее возможности – сделать счетчик с самоостановом (одноразового действия) или обеспечить в режиме деления кратковременный импульс на выходе последнего триггера.
Рассмотрим микросхему 74160 (К155ИЕ9), являющуюся библиотечным компонентом EWB. 74160 – четырехразрядный двоично-десятичный (декадный) синхронный счетчик (рис. 60). Он запускается положительным перепадом тактового импульса и имеет синхронную загрузку (предварительную установку каждого триггера по входам A, B, C, D). Несколько счетчиков ИЕ9 образуют синхронный многодекадный счетчик. Сброс всех триггеров – асинхронный по общему входу сброса CLR’.

Рис. 60. Счетчик 74160

Счетчик содержит внутреннюю логику ускоренного переноса, и все триггеры получают перепад тактового импульса одновременно. Изменения выходных состояний триггеров совпадают по времени, поэтому в выходных импульсных последовательностях нет пиковых помех. Запускающий тактовый фронт импульса – положительный.
Счетчик ИЕ9 полностью программируемый, поскольку на каждом из его выходов можно установить требуемый логический уровень. Такая предварительная установка происходит синхронно с перепадом тактового импульса и не зависит от того, какой уровень присутствует на входах разрешения счета ENP и ENT. Напряжение низкого уровня, поступившее на вход параллельной загрузки LOAD’, останавливает счет и разрешает подготовленным на входах A, B, C, D данным загрузиться в счетчик в момент прихода следующего положительного перепада тактового импульса (от низкого к высокому уровню или при переходе от 0 к 1).
Сброс счетчика ИЕ9 – асинхронный. Если на общий вход сброса CLR поступило напряжение низкого уровня, на выходах всех четырех триггеров устанавливаются низкие уровни независимо от сигналов на входах CLK, LOAD’, ENT, ENP. Внутренняя схема ускоренного переноса необходима для синхронизации многодекадной цепи счетчиков ИЕ9. Специально для синхронного каскадирования микросхема имеет два входа разрешения: ENP (параллельный) и ENT (вспомогательный), а также выход RCO (окончание счета).
Счетчик считает тактовые импульсы, если на обоих его входах ENP и ENT напряжение высокого уровня. Вход ENT последующего счетчика получает разрешение счета в виде напряжения высокого уровня от выхода RCO предыдущего счетчика. Длительность высоких уровней (сигнала логической 1) на выходе RCO примерно соответствует длительности высокого уровня на выходе QA предыдущего счетчика.
Для счетчиков ИЕ9 не допускаются перепады от высокого уровня к низкому на входах ENP и ENT, если на тактовом входе присутствует напряжение низкого уровня. Нельзя подавать положительный перепад на вход LOAD’, если на тактовом входе присутствует напряжение низкого уровня, а на входах ENP и ENT – высокого (во время перепада или перед ним). Сигналы на входах ENP и ENT можно изменять, если на тактовом входе CLK присутствует напряжение низкого уровня. Когда на входе LOAD’ появляется высокий уровень, а входы ENP и ENT неактивны (т.е. на ENP и ENT низкий уровень), то вместе с последующим положительным перепадом тактового импульса на выходах QA, QB, QC, QD появится код от входов A, B, C, D.
Подавая сигналы высокого уровня на входы ENP и ENT при низком уровне сигнала на тактовом входе, получим на выходах наложение кодов загрузки и внутреннего счета. Если при низком уровне тактового сигнала на входы ENP, ENT и LOAD’ поданы положительные перепады, нарастающие от низкого уровня к высокому, тактовый перепад изменит код на выходах QA, QB, QC, QD на последующий.
При входных сигналах высокого уровня счетчик 74160 (К155ИЕ9) потребляет ток питания 94 мА, 74LS160A (К555ИЕ9) – 32 мА; если все выходные сигналы имеют низкий уровень, то 101 и 32 мА соответственно. Максимальная частота счета 25 МГц. Время распространения сигнала от входа CLK до выхода RCO составляет 35 и 27 нс, а время сброса (от входа CLR’ до выходов Q) 38 и 28 нс.
Микросхема 74161 (К155ИЕ10) - четырехразрядный двоичный (бинарный) синхронный счетчик, по своему функционированию аналогичен микросхеме ИЕ9 и отличается от нее тем, что считает в двоичном коде, и его коэффициент пересчета равен 16. В остальном ее работа и правила включения те же.
Микросхема 74162 (К155ИЕ11) - четырехразрядный двоично-десятичный (декадный) синхронный счетчик. Логика его работы соответствует логике работы счетчиков ИЕ9. Отличие лишь в том, что для сброса в состояние 0 счетчика ИЕ9 необходима подача на вход CLR логического 0, а для сброса в состояние 0 счетчика ИЕ11 кроме подачи на вход CLR (разрешение установки 0) логического 0 необходима подача тактового импульса отрицательной полярности на вход CLK, по спаду которого и происходит сброс счетчика. Таким образом, все изменения выходных сигналов этой микросхемы происходят по спаду импульсов отрицательной полярности на входе CLK.
Микросхема 74163 (К155ИЕ18) - четырехразрядный двоичный (бинарный) синхронный счетчик, аналогичен по функционированию микросхеме ИЕ11, но его коэффициент пересчета равен 16.
Микросхема 74168 (К155ИЕ16) - четырехразрядный двоично-десятичный (декадный) реверсивный синхронный счетчик. Разводка совпадает с разводкой микросхемы ИЕ9, за исключением вывода 1, для описываемой микросхемы это вход изменения направления счета D/U’, вход сброса отсутствует. При логической 1 на входе D/U’ счетчик считает вверх, при логическом 0 - вниз.
Микросхема 74169 (К155ИЕ17) - четырехразрядный двоичный (бинарный) реверсивный синхронный счетчик, аналогичен по функционированию микросхеме ИЕ16, но его коэффициент пересчета равен 16.
Регистры. Основное назначение регистров – хранение и преобразование многоразрядных двоичных чисел. Регистры наряду со счетчиками и запоминающими устройствами являются наиболее распространенными устройствами цифровой техники. При сравнительной простоте регистры обладают большими функциональными возможностями. Они используются в качестве запоминающих и управляющих устройств, генераторов и преобразователей кодов, счетчиков, делителей частоты, узлов временной задержки. Элементами структуры регистров являются синхронные триггеры D- или JK-типа с динамическим или статическим управлением. Одиночный триггер может запоминать (регистрировать) один разряд (бит) двоичной информации. Такой триггер можно считать одноразрядным регистром. Занесение информации в регистр называют операцией ввода или записи. Выдача информации к внешним устройствам характеризует операцию вывода или считывания. Запись информации в регистр не требует его предварительного обнуления.
Понятие «весовой коэффициент» к разрядам регистра в отличие от счетчика не применимо, поскольку весовая зависимость между отдельными разрядами целиком определяется записанной в регистр информацией.
Все регистры в зависимости от функциональных свойств подразделяются на две категории – накопительные (регистры памяти, хранения) и сдвигающие. В свою очередь, сдвигающие регистры делятся по способу ввода и вывода информации на параллельные, последовательные и комбинированные (параллельно-последовательные и последовательно-параллельные), по направлению передачи (сдвига) информации – на однонаправленные и реверсивные.
Наиболее простыми являются регистры памяти. Их назначение – хранение двоичной информации небольшого объема в течение короткого промежутка времени. Эти регистры представляют собой набор синхронных триггеров, каждый из которых хранит один разряд двоичного числа. Ввод (запись) и вывод (считывание) информации производится параллельным кодом. Ввод обеспечивается тактовым импульсом, с приходом очередного тактового импульса записанная информация обновляется. Считывание производится в прямом или обратном коде (в последнем случае с инверсных выходов).
Регистры хранения представляют собой наборы триггеров с независимыми информационными входами и обычно общим тактовым выходом. В таком качестве используются синхронные триггеры, составленные из микросхем, содержащих в одном корпусе несколько самостоятельных триггеров, например 74175 (К155ТМ8), 74179 (К155ТМ9) и другие, которые можно рассматривать как 4-6 разрядные регистры памяти. Наращивание разрядности регистров памяти достигается добавлением нужного числа триггеров, тактовые входы которых подсоединяют к шине синхронизации.
Регистр 74173 (К155ИР15) является библиотечным компонентом EWB и может служить примером устройства хранения с тремя выходными состояниями (рис. 61).

Рис. 61. Регистр 74173

Микросхема 74173 – четырехразрядный регистр. Он имеет выходы 1Q4Q с третьим Z-состоянием (при сигнале 1 на выводах G1’, G2’), а его выходы 1D4D снабжены логическими элементами разрешения записи путем подачи логического 0 на входы M, N (в EWB ошибочно показаны прямыми). Используется регистр как четырехразрядный источник кода, способный обслуживать непосредственно шину данных цифровой системы.
Загрузка информации в регистр производится синхронно с положительным перепадом тактового импульса, если на входах M, N присутствуют напряжения низкого уровня. Если на одном из этих входов напряжение высокого уровня, после прихода положительного тактового перепада в регистре должны остаться прежние данные. Вход сброса CLR имеет высокий активный уровень. Если на входы G1’, G2’ подано напряжение активного низкого уровня, данные, содержащиеся в регистре, отображаются на выходах 1Q4Q, присутствие хотя бы одного напряжения высокого уровня на входах разрешения G1’, G2’ вызывает Z-состояние (размыкание) для выходных линий. При этом данные из регистра в шину данных систем не проходят, выходы регистра не влияют на работу других аналогичных выходов, присоединенных к проводникам шины. На работу входов сброса CLR и тактового CLK смена уровней на входах разрешения влияния не оказывает.
Регистр 74173 (К155ИР15) потребляет ток 72 мА и имеет тактовую частоту до 25 МГц; вариант 74LL173 потребляет ток 30 мА, его тактовая частота 30 МГц.
Вторым наиболее распространенным классом регистров являются регистры сдвига, которые отличаются большим разнообразием как в функциональном отношении, так в отношении схемных решений и характеристик. Регистры сдвига, помимо операции хранения, осуществляют преобразование последовательного двоичного кода в параллельный, а параллельного – в последовательный, выполняют арифметические и логические операции, служат в качестве элементов временной задержки. Своим названием они обязаны характерной для этих устройств операции сдвига. С приходом каждого тактового импульса происходит перезапись (сдвиг) содержимого триггера каждого разряда в соседний разряд без изменения порядка следования единиц и нулей. При сдвиге информации вправо после каждого тактового импульса бит из более старшего разряда сдвигается в младший, а при сдвиге влево – наоборот.
На отечественных схемах символом регистра служат буквы RG. Для регистров сдвига указывается также направление сдвига: > - вправо; < - влево; <-> - реверсивный (двунаправленный).
Работу регистра сдвига рассмотрим на примере библиотечного регистра 74195 (К155ИР12) – быстродействующий четырехразрядный регистр для выполнения операций сдвига, счета, накопления и взаимного параллельно-последовательного преобразования цифровых слов (рис. 62).

Рис. 62. Регистр 74195

Через вход SH/LD’ загружаются параллельные данные и производится их сдвиг вправо. Если на этом входе присутствует напряжение высокого уровня, через входы первого триггера J и K’ в регистр вводятся последовательные данные. Вход J имеет высокий активный уровень, вход K’ – низкий; если эти входы соединить, получим простой D-вход. Данные сдвигаются в направлении от QA к QB, QC, а затем к QD после каждого положительного перепада на тактовом входе CLK.
Если на входе SH/LD’ присутствует напряжение низкого (активного) уровня, все четыре триггера регистра запускаются одним тактовым перепадом (от низкого уровня к высокому). Тогда данные от параллельных входов AD передаются на соответствующие выходы QAQD.
Для режима сдвига напряжение на входе SH/LD’ надо зафиксировать на высоком уровне. Имеются следующие режимы сдвига: сдвиг и установка по первому каскаду (JK’=11); сдвиг и сброс по первому каскаду (JK’=00); сдвиг и переключение первого каскада (JK’=10); сдвиг и хранение в первом каскаде (JK’=01).
Из-за того, что все операции в регистре ИР12 строго синхронны и запускается он фронтом импульса, логические уровни на входах J, K’, AD, SH/LD’ можно произвольно менять до прихода фронта запуска. Низким уровнем на входе CLR’ всем выходным сигналам присваивается низкий уровень.
Напряжение низкого уровня на входе CLR’ означает также запрет на действие тактового импульса CLK, для правильного сбора данных надо выбрать момент, когда на входе CLK присутствует напряжение низкого уровня.
Арифметические сумматоры и АЛУ. Арифметические сумматоры являются составной частью так называемых арифметико-логических устройств (АЛУ) микропроцессоров (МП). Они используются также для формирования физического адреса ячеек памяти в МП с сегментной организацией памяти. В программе EWB арифметические сумматоры представлены двумя базовыми устройствами: полусумматором и полным сумматором (рис. 63).

Рис. 63. Полусумматор и полный сумматор

Они имеют следующие назначения выводов: A, B – входы слагаемых, 13 EMBED Equation.3 1415 – результат суммирования, Co – выход переноса, Ci – вход переноса. Много разрядный сумматор создается на базе одного сумматора и n полных сумматоров. В качестве примера на рис. 5. приведена структура трехразрядного сумматора. На входы A1, A2, A3 и B1, B2, B3 подаются первое и второе слагаемое соответственно, а с выходов S1, S2, S3 снимается результат суммирования.

Рис. 64. Трехразрядный сумматор.

В каталоге CIRCUITS программы EWB 5.12 имеется схема включения четырехразрядного АЛУ (файл alu181.ewb) на базе серийной микросхемы 74181 (отечественный аналог К155ИП3). В несколько переработанном виде она показана на рис. 65. ИМС 74181 обеспечивает 32 режима работы АЛЛУ в зависимости от состояния управляющих сигналов на входах M, S0, S1, S2, S3, а также допускает наращивание разрядности (вход CN и выход CN+4 для переносов).



Рис. 65. Схема включения ИМС 74181 в режиме сумматора без переноса.

Значения четырехразрядных операндов A и B на входе задаются с помощью генератора слова и в шестнадцатеричном коде отображаются одноименными алфавитно-цифровыми индикаторами. На выходах F0F3 результат суммирования отображается индикатором F.
Изменяя состояния сигналов на управляющих входах, можно промоделировать большинство функций АЛУ, используемых в МП. Приведем перечень этих функций.
Логические функции (на входе M сигнал 1); выполняются поразрядно, переносы не учитываются.
Код 0000 на входах S3, S2, S1, S0; при этом выполняется логическая функция A’ – данные со входов A передаются на выходы F с инверсией;
0001 – (A+B)’ – поразрядная операция ИЛИ с инверсией над операндами A и B;
0010 – A’B – операция И инвертированного операнда A и операнда B;
0011 – 0 – нет операции;
0100 – (AB)’ – операция И с инверсией;
0101 – B’ – инверсия операнда B;
0110 – A(B – операция Исключающее ИЛИ;
0111 – AB’ – операция И над операндами А и инверсией B;
1000 – A’+B – операция ИЛИ над инверсией А и операндом B;
1001 – (A+B)’ - операция ИЛИ с инверсией;
1010 – B – передача на выход операнда B;
1011 – AB - операция И;
1100 – 1;
1101 – A+B’ - операция ИЛИ над инверсией B и операндом А;
1110 – A+B - операция ИЛИ;
1111 – A - передача на выход операнда А;
Арифметические операции (M=0) без переноса (CN=1) и с переносом (CN=0, данные приводятся в круглых скобках):
0000 – A – передача на выход операнда A (A+1 – суммирование операнда A с 1 переноса);
0001 – A+B – операция суммирования без учета переноса ((A+B)+1 – суммирование с учетом переноса);
0010 – A+B’ – операция суммирования операнда A с инверсией операнда B без учета переноса ((A+B’)+1 – то же, но с учетом переноса);
0011 – -1 (0);
0100 – A+AB’ (A+AB’+1);
0101 – (A+B)+AB’ ((A+B)+AB’+1);
0110 – A-B-1 (A-B);
0111 – AB’-1 (AB’);
1000 – A+AB (A+AB+1);
1001 – A+B (A+B+1);
1010 – (A+B’)+AB ((A+B’)+AB+1);
1011 – AB-1 (AB);
1100 – A+A (A+A+1);
1101 – (A+B)+A ((A+B)+A+1);
1110 – (A+B’)+A ((A+B’)+A+1);
1111 – A-1 (A).

Задания для лабораторной работы:

1. Провести моделирование и описать порядок работы схемы счетчика с коэффициентом счета 6 на JK-триггерах. Устранить ошибку в схеме.


2. С помощью логического преобразователя исследовать внутреннюю структуру библиотечного полусумматора, представить ее логическими элементами.

3. Реализовать при помощи АЛУ операцию суммирования с переносом A+B+1 (см. рис. 66). Проверить правильность функционирования.

4. Провести моделирование регистра 74195 в режиме приема данных.



5. Провести моделирование и описать порядок работы схемы счетчика. Выявить и устранить недостатки.



6. При помощи генератора слова и алфавитно-цифрового индикатора проверить правильность функционирования трехразрядного сумматора на рис. 64.

7. Реализовать при помощи АЛУ операцию вычитания A-B (см. рис. 65). Проверить правильность функционирования.

8. Разработать и провести моделирование схемы счетчика с коэффициентом счета 3 на JK-триггерах (см. схему из варианта №1). Описать порядок работы схемы.

9. Разработать и провести моделирование схемы счетчика с коэффициентом счета 35 (см. схему из варианта №5). Описать порядок работы схемы.

10. Провести моделирование регистра 74195 в режиме сдвига (см. схему из варианта №4). Исследовать режим сдвига и установки по первому каскаду.

11. Реализовать при помощи АЛУ операцию A+B’ (см. рис. 65). Проверить правильность функционирования.

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

13. С помощью логического преобразователя исследовать внутреннюю структуру библиотечного полного сумматора, представить ее логическими элементами.

14. Провести моделирование регистра 74195 в режиме сдвига (см. схему из варианта №4). Исследовать режим сдвига и сброса по первому каскаду.

15. Реализовать при помощи АЛУ операцию AB (см. рис. 65). Проверить правильность функционирования.
ГЛАВА 7. Подсистема памяти

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

7.1. Характеристики систем памяти

Перечень основных характеристик, которые необходимо учитывать, рассматривая конкретный вид ЗУ, включает в себя:
место расположения;
емкость;
единицу пересылки;
метод доступа;
быстродействие;
физический тип;
физические особенности;
стоимость.
По месту расположения ЗУ разделяют на процессорные, внутренние и внешние. Наиболее скоростные виды памяти (регистры, кэш-память первого уровня) обычно размещают на общем кристалле с центральным процессором, а регистры общего назначения вообще считаются частью ЦП. Вторую группу (внутреннюю память) образуют ЗУ, расположенные на системной плате. К внутренней памяти относят основную память, а также кэш-память второго и последующих уровней (кэш-память второго уровня может также размещаться на кристалле процессора). Медленные ЗУ большой емкости (магнитные и оптические диски, магнитные ленты) называют внешней памятью, поскольку к ядру ВМ они подключаются аналогично устройствам ввода/вывода.
Емкость ЗУ характеризуют числом битов либо байтов, которое может храниться в запоминающем устройстве. На практике применяются более крупные единицы, а для их обозначения к словам «бит» или «байт» добавляют приставки: кило, мега, гига, тера, пета, экза (kilo, mega, giga, tera, peta, exa). Стандартно эти приставки означают умножение основной единицы измерений на 103, 106, 109, 1012, 1015 и 1018 соответственно. В вычислительной технике, ориентированной на двоичную систему счисления, они соответствуют значениям достаточно близким к стандартным, но представляющим собой целую степень числа 2, то есть 210, 220, 230, 240, 250, 260.
Важной характеристикой ЗУ является единица пересылки. Для основной памяти (ОП) единица пересылки определяется шириной шины данных, то есть количеством битов, передаваемых по линиям шины параллельно. Обычно единица пересылки равна длине слова, но не обязательно. Применительно к внешней памяти данные часто передаются единицами, превышающими размер слова, и такие единицы называются блоками.
При оценке быстродействия необходимо учитывать применяемый в данном типе ЗУ метод доступа к данным. Различают четыре основных метода доступа:
Последовательный доступ. ЗУ с последовательным доступом ориентировано на хранение информации в виде последовательности блоков данных, называемых записями. Для доступа к нужному элементу (слову или байту) необходимо прочитать все предшествующие ему данные. Время доступа зависит от положения требуемой записи в последовательности записей на носителе информации и позиции элемента внутри данной записи. Примером может служить ЗУ на магнитной ленте.
Прямой доступ. Каждая запись имеет уникальный адрес, отражающий ее физическое размещение на носителе информации. Обращение осуществляется как адресный доступ к началу записи, с последующим последовательным доступом к определенной единице информации внутри записи. В результате время доступа к определенной позиции является величиной переменной. Такой режим характерен для магнитных дисков.
Произвольный доступ. Каждая ячейка памяти имеет уникальный физический адрес. Обращение к любой ячейке занимает одно и то же время и может производиться в произвольной очередности. Примером могут служить запоминающие устройства основной памяти.
Ассоциативный доступ. Этот вид доступа позволяет выполнять поиск ячеек, содержащих такую информацию, в которой значение отдельных битов совпадает с состоянием одноименных битов в заданном образце. Сравнение осуществляется параллельно для всех ячеек памяти, независимо от ее емкости. По ассоциативному принципу построены некоторые блоки кэш-памяти.
Быстродействие ЗУ является одним из важнейших его показателей. Для количественной оценки быстродействия обычно используют три параметра:
Время доступа (ТД). Для памяти с произвольным доступом оно соответствует интервалу времени от момента поступления адреса до момента, когда данные заносятся в память или становятся доступными. В ЗУ с подвижным носителем информации это время, затрачиваемое на установку головки записи/считывания (или носителя) в нужную позицию.
Длительность цикла памяти или период обращения (ТЦ). Понятие применяется к памяти с произвольным доступом, для которой оно означает минимальное время между двумя последовательными обращениями к памяти. Период обращения включает в себя время доступа плюс некоторое дополнительное время. Дополнительное время может требоваться для затухания сигналов на линиях, а в некоторых типах ЗУ, где считывание информации приводит к ее разрушению, для восстановления считанной информации.
Скорость передачи. Это скорость, с которой данные могут передаваться в память или из нее. Для памяти с произвольным доступом она равна 1/ТЦ. Для других видов памяти скорость передачи определяется соотношением:
13 EMBED Equation.3 1415,
где TN среднее время считывания или записи N битов; ТА среднее время доступа; R скорость пересылки в битах в секунду.
Говоря о физическом типе запоминающего устройства, необходимо упомянуть три наиболее распространенных технологии ЗУ это полупроводниковая память, память с магнитным носителем информации, используемая в магнитных дисках и лентах, и память с оптическим носителем оптические диски.
В зависимости от примененной технологии следует учитывать и ряд физических особенностей ЗУ, например энергозависимость. В энергозависимой памяти информация может быть искажена или потеряна при отключении источника питания. В энергонезависимых ЗУ записанная информация сохраняется и при отключении питающего напряжения. Магнитная и оптическая память энергонезависимы. Полупроводниковая память может быть как энергозависимой, так и нет, в зависимости от ее типа. Помимо энергозависимости нужно учитывать, приводит ли считывание информации к ее разрушению.
Стоимость ЗУ принято оценивать отношением общей стоимости ЗУ к его емкости в битах, то есть стоимостью хранения одного бита информации.

7.2. Иерархия запоминающих устройств

Память часто называют «узким местом» фон-неймановских ВМ из-за ее серьезного отставания по быстродействию от процессоров, причем разрыв этот неуклонно увеличивается. Так, если производительность процессоров ежегодно возрастает вдвое примерно каждые 1,5 года, то для микросхем памяти прирост быстродействия не превышает 9% в год (удвоение за 10 лет), что выражается в увеличении разрыва в быстродействии между процессором и памятью приблизительно на 50% в год.
Если проанализировать используемые в настоящее время типы ЗУ, выявляется следующая закономерность:
чем меньше время доступа, тем выше стоимость хранения бита;
чем больше емкость, тем ниже стоимость хранения бита, но больше время доступа.
При создании системы памяти постоянно приходится решать задачу обеспечения требуемой емкости и высокого быстродействия за приемлемую цену. Наиболее распространенным подходом здесь является построение системы памяти ВМ по иерархическому принципу. Иерархическая память состоит из ЗУ различных типов (рис. 66), которые, в зависимости от характеристик, относят к определенному уровню иерархии. Более высокий уровень меньше по емкости, быстрее и имеет большую стоимость в пересчете на бит, чем более низкий уровень. Уровни иерархии взаимосвязаны: все данные на одном уровне могут быть также найдены на более низком уровне, и все данные на этом более низком уровне могут быть найдены на следующем нижележащем уровне и т. д.



Рис. 66. Иерархия запоминающих устройств.

Четыре верхних уровня иерархии образуют внутреннюю память ВМ, а все нижние уровни это внешняя или вторичная память. По мере движения вниз по иерархической структуре:
1. Уменьшается соотношение «стоимость/бит».
2. Возрастает емкость.
3. Растет время доступа.
4. Уменьшается частота обращения к памяти со стороны центрального процессора.

Если память организована в соответствии с пунктами 1-3, а характер размещения в ней данных и команд удовлетворяет пункту 4, иерархическая организация ведет к уменьшению общей стоимости при заданном уровне производительности.
Справедливость этого утверждения вытекает из принципа локальности по обращению. Если рассмотреть процесс выполнения большинства программ, то можно заметить, что с очень высокой вероятностью адрес очередной команды программы либо следует непосредственно за адресом, по которому была считана текущая команда, либо расположен вблизи него. Такое расположение адресов называется пространственной локальностью программы. Обрабатываемые данные, как правило, структурированы, и такие структуры обычно хранятся в последовательных ячейках памяти. Данная особенность программ называется пространственной локальностью данных. Кроме того, программы содержат множество небольших циклов и подпрограмм. Это означает, что небольшие наборы команд могут многократно повторяться в течение некоторого интервала времени, то есть имеет место временная локальность. Все три вида локальности объединяет понятие локальность по обращению. Принцип локальности часто облекают в численную форму и представляют в виде так называемого правила «90/10»: 90% времени работы программы связано с доступом к 10% адресного пространства этой программы.
Из свойства локальности вытекает, что программу разумно представить в виде последовательно обрабатываемых фрагментов компактных групп команд и данных. Помещая такие фрагменты в более быструю память, можно существенно снизить общие задержки на обращение, поскольку команды и данные, будучи один раз переданы из медленного ЗУ в быстрое, затем могут использоваться многократно, и среднее время доступа к ним в этом случае определяется уже более быстрым ЗУ.
Это позволяет хранить большие программы и массивы данных на медленных, емких, но дешевых ЗУ, а в процессе обработки активно использовать сравнительно небольшую быструю память, увеличение емкости которой сопряжено с высокими затратами.
На каждом уровне иерархии информация разбивается на блоки, выступающие в качестве наименьшей информационной единицы, пересылаемой между двумя соседними уровнями иерархии. Размер блоков может быть фиксированным либо переменным. При фиксированном размере блока емкость памяти обычно кратна его размеру. Размер блоков на каждом уровне иерархии чаще всего различен и увеличивается от верхних уровней к нижним.
При доступе к командам и данным, например, для их считывания, сначала производится поиск в памяти верхнего уровня. Факт обнаружения нужной информации называют попаданием (hit), в противном случае говорят о промахе (miss). При промахе производится поиск в ЗУ следующего более низкого уровня, где также возможны попадание или промах. После обнаружении необходимой информации выполняется последовательная пересылка блока, содержащего искомую информацию, с нижних уровней на верхние. Следует отметить, что независимо от числа уровней иерархии пересылка информации может осуществляться только между двумя соседними уровнями.
При оценке эффективности подобной организации памяти обычно используют следующие характеристики:
коэффициент попаданий (hit rate) – отношение числа обращений к памяти, при которых произошло попадание, к общему числу обращений к ЗУ данного уровня иерархии;
коэффициент промахов (miss rate) – отношение числа обращений к памяти, при которых имел место промах, к общему числу обращений к ЗУ данного уровня иерархии;
время обращения при попадании (hit time) – время, необходимое для поиска нужной информации в памяти верхнего уровня (включая выяснение, является ли обращение попаданием), плюс время на фактическое считывание данных;
потери на промах (miss penalty) – время, требуемое для замены блока в памяти более высокого уровня на блок с нужными данными, расположенный в ЗУ следующего (более низкого) уровня. Потери на промах включают в себя: время доступа (access time) – время обращения к первому слову блока при промахе и время пересылки (transfer time) – дополнительное время для пересылки оставшихся слов блока. Время доступа обусловлено задержкой памяти более низкого уровня, в то время как время пересылки связано с полосой пропускания канала между ЗУ двух смежных уровней.

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

Самый быстрый, но и минимальный по емкости тип памяти это внутренние регистры ЦП, которые иногда объединяют понятием сверхоперативное запоминающее устройство СОЗУ. Как правило, количество регистров невелико, хотя в архитектурах с сокращенным набором команд их число может доходить до нескольких сотен. Основная память (ОП), значительно большей емкости, располагается несколькими уровнями ниже. Между регистрами ЦП и основной памятью часто размещают кэш-память, которая по емкости ощутимо проигрывает ОП, но существенно превосходит последнюю по быстродействию, уступая в то же время СОЗУ. В большинстве современных ВМ имеется несколько уровней кэш-памяти, которые обозначают буквой L и номером уровня кэш-памяти. На рис. 66 показаны два таких уровня. В последних разработках все чаще появляется также третий уровень кэш-памяти (L3), причем разработчики ВМ говорят о целесообразности введения и четвертого уровня L4. Каждый последующий уровень кэш-памяти имеет большую емкость, но одновременно и меньшее быстродействие по сравнению с предыдущим. Как бы то ни было, по «скорости» любой уровень кэш-памяти превосходит основную память. Все виды внутренней памяти реализуются на основе полупроводниковых технологий и в основном являются энергозависимыми.
Долговременное хранение больших объемов информации (программ и данных) обеспечивается внешними ЗУ, среди которых наиболее распространены запоминающие устройства на базе магнитных и оптических дисков, а также магнитоленточные ЗУ.
Наконец, еще один уровень иерархии может быть добавлен между основной памятью и дисками. Этот уровень носит название дисковой кэш-памяти и реализуется в виде самостоятельного ЗУ, включаемого в состав магнитного диска. Дисковая кэш-память существенно улучшает производительность при обмене информацией между дисками и основной памятью.
Иерархия может быть дополнена и другими видами памяти. Так, некоторые модели ВМ фирмы IBM включают в себя так называемую расширенную память (expanded storage), выполненную на основе полупроводниковой технологии, но имеющую меньшее быстродействие и стоимость по сравнению с ОП. Строго говоря, этот вид памяти не входит в иерархию, а представляет собой ответвление от нее, поскольку данные могут передаваться только между расширенной и основной памятью, но не допускается обмен между расширенной и внешней памятью.

7.3. Основная память

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

7.4. Блочная организация основной памяти

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

Рис. 67. Увеличение разрядности памяти

При использовании блочной памяти, состоящей из В банков, адрес ячейки А преобразуется в пару (b, w), где b номер банка, w адрес ячейки внутри банка. Известны три схемы распределения разрядов адреса А между b и w.
блочная (номер банка b определяет старшие разряды адреса);
циклическая (b = A mod В; w = A div В);
блочно-циклическая (комбинация двух предыдущих схем).

7.5. Организация микросхем памяти

Интегральные микросхемы (ИМС) памяти организованы в виде матрицы ячеек, каждая из которых, в зависимости от разрядности ИМС, состоит из одного или более запоминающих элементов (ЗЭ) и имеет свой адрес. Каждый ЗЭ способен хранить один бит информации. Для ЗЭ любой полупроводниковой памяти характерны следующие свойства:
два стабильных состояния, представляющие двоичные 0 и 1;
в ЗЭ (хотя бы однажды) может быть произведена запись информации, посредством перевода его в одно из двух возможных состояний;
для определения текущего состояния ЗЭ его содержимое может быть считано.
При матричной организации ИМС памяти (рис. 68) реализуется координатный принцип адресации ячеек. Адрес ячейки, поступающий по шине адреса ВМ, пропускается через логику выбора, где он разделяется на две составляющие: адрес строки и адрес столбца. Адреса строки и столбца запоминаются соответственно в регистре адреса строки и регистре адреса столбца микросхемы. Регистры соединены каждый со своим дешифратором. Выходы дешифраторов образуют систему горизонтальных и вертикальных линий, к которым подсоединены запоминающие элементы матрицы, при этом каждый ЗЭ расположен на пересечении одной горизонтальной и одной вертикальной линии.
ЗЭ, объединенные общим «горизонтальным» проводом, принято называть строкой (row). Запоминающие элементы, подключенные к общему «вертикальному» проводу, называют столбцом (column). Фактически «вертикальных» проводов в микросхеме должно быть, по крайней мере, вдвое больше, чем это требуется для адресации, поскольку к каждому ЗЭ необходимо подключить линию, по которой будет передаваться считанная и записываемая информация.
Совокупность запоминающих элементов и логических схем, связанных с выбором строк и столбцов, называют ядром микросхемы памяти. Помимо ядра в ИМС имеется еще интерфейсная логика, обеспечивающая взаимодействие ядра с внешним миром. В ее задачи, в частности, входят коммутация нужного столбца на выход при считывании и на вход при записи.
На физическую организацию ядра, как матрицы однобитовых ЗЭ, накладывается логическая организация памяти, под которой понимается разрядность микросхемы, то есть количество линий ввода/вывода. Разрядность микросхемы определяет количество ЗЭ, имеющих один и тот же адрес (такая совокупность запоминающих элементов называется ячейкой), то есть каждый столбец содержит столько разрядов, сколько есть линий ввода/вывода данных.
Для уменьшения числа контактов ИМС адреса строки и столбца в большинстве микросхем подаются в микросхему через одни и те же контакты последовательно во времени (мультиплексируются) и запоминаются соответственно в регистре адреса строки и регистре адреса столбца микросхемы. Мультиплексирование обычно реализуется внешней по отношению к ИМС схемой.

Рис. 68. Структура микросхемы памяти.

Для синхронизации процессов фиксации и обработки адресной информации внутри ИМС адрес строки (RA) сопровождается сигналом RAS (Row Address Strobe строб строки), а адрес столбца (СА) сигналом CAS (Column Address Strobe строб столбца). Вторую букву в аббревиатурах RAS и CAS иногда расшифровывают как Access «доступ», то есть имеется строб доступа к строке и строб доступа к столбцу. Чтобы стробирование было надежным, эти сигналы подаются с задержкой, достаточной для завершения переходных процессов на шине адреса и в адресных цепях микросхемы.
Сигнал выбора микросхемы CS (Crystal Select) разрешает работу ИМС и используется для выбора определенной микросхемы в системах, состоящих из нескольких ИМС. Вход WE (Write Enable разрешение записи) определяет вид выполняемой операции (считывание или запись).
Записываемая информация, поступающая по шине данных, первоначально заносится во входной регистр данных, а затем в выбранную ячейку. При выполнении операции чтения информация из ячейки до ее выдачи на шину данных буферизируется в выходном регистре данных. Обычно роль входного и выходного выполняет один и тот же регистр. Усилители считывания/записи (УСЗ) служат для электрического согласования сигналов на линиях данных и внутренних сигналов ИМС. Обычно число УСЗ равно числу запоминающих элементов в строке матрицы, и все они при обращении к памяти подключаются к выбранной горизонтальной линии. Каждая группа УСЗ, образующая ячейку, подключена к одному из столбцов матрицы, то есть выбор нужной ячейки в строке обеспечивается активизацией одной из вертикальных линий. На все время пока ИМС памяти не использует шину данных, информационные выходы микросхемы переводятся в третье (высокоимпедансное) состояние. Управление переключением в третье состояние обеспечивается сигналом ОЕ (Output Enable разрешение выдачи выходных сигналов). Этот сигнал активизируется при выполнении операции чтения.
Для большинства перечисленных выше управляющих сигналов активным обычно считается их низкий уровень, что и показано на рис. 68.
Управление операциями с основной памятью осуществляется контроллером памяти. Обычно этот контроллер входит в состав центрального процессора либо реализуется в виде внешнего по отношению к памяти устройства. В последних типах ИМС памяти часть функций контроллера возлагается на микросхему памяти. Хотя работа ИМС памяти может быть организована как по синхронной, так и по асинхронной схеме, контроллер памяти устройство синхронное, то есть срабатывающее исключительно по тактовым импульсам. По этой причине операции с памятью принято описывать с привязкой к тактам. В общем случае на каждую такую операцию требуется как минимум пять тактов, которые используются следующим образом:
1. Указание типа операции (чтение или запись) и установка адреса строки.
2. Формирование сигнала RAS.
3. Установка адреса столбца.
4. Формирование сигнала CAS.
5. Возврат сигналов RAS и CAS в неактивное состояние.
Данный перечень учитывает далеко не все необходимые действия, например регенерацию содержимого памяти в динамических ОЗУ.
Типовую процедуру доступа к памяти рассмотрим на примере чтения из ИМ С с мультиплексированием адресов строк и столбцов. Сначала на входе WE устанавливается уровень, соответствующий операции чтения, а на адресные контакты ИМС подается адрес строки, сопровождаемый сигналом RAS. По заднему фронту этого сигнала адрес запоминается в регистре адреса строки микросхемы, после чего дешифрируется. После стабилизации процессов, вызванных сигналом RAS, выбранная строка подключается к УСЗ. Далее на вход ИМС подается адрес столбца, который по заднему фронту сигнала CAS заносится в регистр адреса столбца. Одновременно подготавливается выходной регистр данных, куда после стабилизации сигнала CAS загружается информация с выбранных УСЗ.
Разработчики микросхем памяти тратят значительные усилия на повышение быстродействия ИМС, которое принято характеризовать четырьмя параметрами (численные значения приводятся для типовой микросхемы динамической памяти емкостью 4 Мбит):
tras – минимальное время от перепада сигнала RAS с высокого уровня к низкому до момента появления и стабилизации считанных данных на выходе ИМС. Среди приводившихся в начале главы характеристик быстродействия это соответствует времени доступа ТД
tRC – минимальное время от начала доступа к одной строке микросхемы памяти до начала доступа к следующей строке. Этот параметр также упоминался в начале главы как длительность цикла памяти Tц;
tCAS – минимальное время от перепада сигнала CAS с высокого уровня к низкому до момента появления и стабилизации считанных данных на выходе ИМС;
ТPC минимальное время от начала доступа к одному столбцу микросхемы памяти до начала доступа к следующему столбцу

Возможности «ускорения» ядра микросхемы ЗУ весьма ограничены и связаны в основном с миниатюризацией запоминающих элементов. Наибольшие успехи достигнуты в интерфейсной части ИМС, касаются они, главным образом, операции чтения, то есть способов доставки содержимого ячейки на шину данных. Наибольшее распространение получили следующие шесть фундаментальных подходов:
последовательный;
конвейерный;
регистровый;
страничный;
пакетный;
удвоенной скорости.

7.6. Синхронные и асинхронные запоминающие устройства

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

7.7. Оперативные запоминающие устройства

Большинство из применяемых в настоящее время типов микросхем оперативной памяти не в состоянии сохранять данные без внешнего источника энергии, то есть являются энергозависимыми (volatile memory). Широкое распространение таких устройств связано с рядом их достоинств по сравнению с энергонезависимыми типами ОЗУ (non-volatile memory): большей емкостью, низким энергопотреблением, более высоким быстродействием и невысокой себестоимостью хранения единицы информации.
Энергозависимые ОЗУ можно подразделить на две основные подгруппы: динамическую память (DRAM Dynamic Random Access Memory) и статическую память (SRAM Static Random Access Memory).

7.8 Статическая и динамическая оперативная память

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



Рис. 69. Запоминающий элемент статического ОЗУ.

Запоминающий элемент динамической памяти значительно проще. Он состоит из одного конденсатора и запирающего транзистора (рис.70).



Рис. 70. Запоминающий элемент динамического ОЗУ.

Наличие или отсутствие заряда в конденсаторе интерпретируется как 1 или 0 соответственно. Простота схемы позволяет достичь высокой плотности размещения ЗЭ и, в итоге, снизить стоимость. Главный недостаток подобной технологии связан с тем, что-накапливаемый на конденсаторе заряд со временем теряется. Даже при хорошем диэлектрике с электрическим сопротивлением в несколько тераом (1012 Ом), используемом при изготовлении элементарных конденсаторов ЗЭ, заряд теряется достаточно быстро. Размеры у такого конденсатора микроскопические, а емкость имеет порядок 10Г15Ф. При такой емкости на одном конденсаторе накапливается всего около 40 000 электронов. Среднее время утечки заряда ЗЭ динамической памяти составляет сотни или даже десятки миллисекунд, поэтому заряд необходимо успеть восстановить в течение данного отрезка времени, иначе хранящаяся информация будет утеряна. Периодическое восстановление заряда ЗЭ называемся регенерацией и осуществляется каждые 2-8 мс.
В различных типах ИМС динамической памяти нашли применение три основных метода регенерации:
одним сигналом RAS (ROR – RAS Only Refresh);
сигналом CAS, предваряющим сигнал RAS (CBR – CAS Before RAS);
автоматическая регенерация (SR – Self Refresh).
Регенерация одним RAS использовалась еще в первых микросхемах DRAM. На шину адреса выдается адрес регенерируемой строки, сопровождаемый сигналом RAS. При этом выбирается строка ячеек и хранящиеся там данные поступают на внутренние цепи микросхемы, после чего записываются обратно. Так как сигнал CAS не появляется, цикл чтения/записи не начинается. В следующий раз на шину адреса подается адрес следующей строки и т. д., пока не восстановятся все ячейки, после чего цикл повторяется. К недостаткам метода можно отнести занятость шины адреса в момент регенерации, когда доступ к другим устройствам ВМ блокирован.
Особенность метода CBR в том, что если в обычном цикле чтения/записи сигнал RAS всегда предшествует сигналу CAS, то при появлении сигнала CAS первым начинается специальный цикл регенерации. В этом случае адрес строки не передается, а микросхема использует свой внутренний счетчик, содержимое которого увеличивается на единицу при каждом очередном CBR-цикле. Режим позволяет регенерировать память, не занимая шину адреса, то есть более эффективен.
Автоматическая регенерация памяти связана с энергосбережением, когда система переходит в режим «сна» и тактовый генератор перестает работать. При отсутствии внешних сигналов RAS и CAS обновление содержимого памяти методами ROR или CBR невозможно, и микросхема производит регенерацию самостоятельно, запуская собственный генератор, который тактирует внутренние цепи регенерации.
Область применения статической и динамической памяти определяется скоростью и стоимостью. Главным преимуществом SRAM является более высокое быстродействие (примерно на порядок выше, чем у DRAM). Быстрая синхронная SRAM может работать со временем доступа к информации, равным времени одного тактового импульса процессора. Однако из-за малой емкости микросхем и высокой стоимости применение статической памяти, как правило, ограничено относительно небольшой по емкости кэш-памятью первого (L1), второго (L2) или третьего (L3) уровней. В то же время самые быстрые микросхемы динамической памяти на чтение первого байта пакета все еще требуют от пяти до десяти тактов процессора, что замедляет работу всей ВМ. Тем не менее благодаря высокой плотности упаковки ЗЭ и низкой стоимости именно DRAM используется при построении основной памяти ВМ.

7.9. Статические оперативные запоминающие устройства

Напомним, что роль запоминающего элемента в статическом ОЗУ исполняет триггер. Статические ОЗУ на настоящий момент – наиболее быстрый, правда, и наиболее дорогостоящий вид оперативной памяти. Известно достаточно много раз личных вариантов реализации SRAM, отличающихся по технологии, способа: организации и сфере применения (рис. 71).



Рис. 71. Виды статических ОЗУ.

Асинхронные статические ОЗУ. Асинхронные статические ОЗУ применялись в кэш-памяти второго уровня в течение многих лет, еще с момента появления микропроцессора i80386. Для таких ИМС время доступа составляло 15-20 нс (в лучшем случае – 12 нс), что не позволяло кэш-памяти второго уровня работать в темпе процессора.
Синхронные статические ОЗУ. В рамках данной группы статических ОЗУ выделяют ИМС типа SSRAM и более совершенные РВ SRAM.
Значительно лучшие показатели по сравнению с асинхронными статическими ОЗУ достигнуты в синхронных SRAM (SSRAM). Как и в любой синхронной памяти, все события в SSRAM происходят с поступлением внешних тактовых импульсов. Отличительная особенность SSRAM – входные регистры, где фиксируется входная информация. Рассматриваемый вид памяти обеспечивает работу в пакетном режиме с формулой 3-1-1-1, но лишь до определенных значений тактовой частоты шины. При более высоких частотах формула изменяется на 3-2-2-2.
Последние модификации микропроцессоров Pentium, начиная с Pentium II, взамен SSRAM оснащаются статической оперативной памятью с пакетным конвейерным доступом (РВ SRAM – Pipelined Burst SRAM). В этой разновидности SRAM реализована внутренняя конвейеризация, за счет которой скорость обмена пакетами данных возрастает примерно вдвое. Память данного типа хорошо работает при повышенных частотах системной шины. Время доступа к РВ SRAM составляет от 4,5 до 8 нс, при этом формула 3-1-1-1 сохраняется даже при частоте системной шины 133 МГц.
Особенности записи в статических ОЗУ. Важным моментом, характеризующим SRAM, является технология записи. Известны два варианта записи: стандартная и запаздывающая. В стандартном режиме адрес и данные выставляются на соответствующие шины в одном и том же такте. В режиме запаздывающей записи данные для нее передаются в следующем такте после выбора адреса нужной ячейки, что напоминает режим конвейерного чтения, когда данные появляются на шине в следующем такте. Оба рассматриваемых варианта позволяют производить запись данных с частотой системной шины. Различия сказываются только при переключении между операциями чтения и записи.
Более детально различия режимов записи в SRAM рассмотрим на примере выполнения конвейерного чтения из ячеек с адресами А0, А1 и А2 с последующей записью в ячейку с адресом A3.
В режиме стандартной записи перед выработкой первого импульса синхронизации (ИС) на шину адреса выдается адрес первой ячейки для чтения А0. С приходом первого ИС этот адрес записывается во внутренний регистр микросхемы, и начинается цикл чтения. Перед началом второго ИС на шину адреса выставляется адрес следующей ячейки А1, и начинается второй цикл чтения. В это время данные из ячейки А0 поступают на шину данных. На третьем этапе выставляется адрес А2, а данные из ячейки А1 приходят на шину. В четвертом тактовом периоде предполагается запись, перед началом которой информационные выходы ИМС должны быть переведены в третье (высокоимпедансное) состояние. В результате данные из ячейки А1, появившиеся на шине только в конце третьего тактового периода, будут находиться там недостаточно долго, чтобы их можно было использовать. Таким образом, в третьем тактовом периоде данные не считываются и не записываются, и этот период называют холостым циклом. С началом четвертого такта данные, выставленные на шине данных, записываются в ячейку с адресом A3. Адрес следующей ячейки для чтения можно выставить только в пятом тактовом периоде, а соответствующие данные будут получены в шестом, то есть происходит еще один холостой цикл. В итоге за четыре такта произведены считывание из ячейки А0 и запись в ячейку A3. Как видно из описания, режим стандартной записи предусматривает потерю нескольких тактов шины при переключении между циклами чтения и записи. Если такая память используется в качестве кэш-памяти, то это не слишком влияет на производительность ВМ, так как запись в кэш-память происходит гораздо реже, чем чтение, и переключения «чтение/запись» и «запись/чтение» возникают относительно редко.
В режиме запаздывающей записи данные, которые должны быть занесены в ячейку, выставляются на шину лишь в следующем тактовом периоде. При этом данные, которые считываются из ячейки А1 в третьем такте, находятся в активном состоянии на протяжении всего тактового периода и могут быть беспрепятственно считаны в то время, когда выставляется адрес A3. Сами данные для записи передаются в четвертом такте, где в режиме стандартной записи имеет место холостой цикл. Как следствие, здесь за те же четыре такта считано содержимое двух ячеек (А0 и А1) и записаны данные по адресу A3.
Как видно из вышеизложенного, в обоих случаях адрес А2 игнорируется. Реально никакой потери адресов и данных не происходит. Контроллер памяти непосредственно перед переключением из режима чтения в режим записи просто не передает адрес на шину, так как «знает», какой тип памяти используется и сколько тактов ожидания нужно ввести перед переходом «чтение/запись» и обратно.
Компания IDT (Integrated Device Technology) в развитие идеи записи с запаздыванием предложила новую технологию, получившую название ZBT SRAM (Zero Bus Turnaround) нулевое время переключения шины. Идея ее состоит в том, чтобы запись с запаздыванием производить с таким же интервалом, какой требуется для чтения. Так, если SRAM с конвейерным чтением требует три тактовых периода для чтения данных из ячейки, то данные для записи нужно передавать с таким же промедлением относительно адреса. В результате перекрывающиеся циклы чтения и записи идут один за другим, позволяя выполнять операции чтения/записи в каждом такте без каких-либо задержек.

7.10. Динамические оперативные запоминающие устройства

Динамической памяти в вычислительной машине значительно больше, чем статической, поскольку именно DRAM используется в качестве основной памяти ВМ. Как и SRAM, динамическая память состоит из ядра (массива ЗЭ) и интерфейсной логики (буферных регистров, усилителей чтения данных, схемы регенерации и др.). Хотя количество видов DRAM уже превысило два десятка, ядро у них организовано практически одинаково. Главные различия связаны с интерфейсной логикой, причем различия эти обусловлены также и областью применения микросхем – помимо основной памяти ВМ, ИМС динамической памяти входят, например, в состав видеоадаптеров. Классификация микросхем динамической памяти показана на рис. 72.
Чтобы оценить различия между видами DRAM, предварительно остановимся на алгоритме работы с динамической памятью. Для этого воспользуемся рис. 68.
В отличие от SRAM адрес ячейки DRAM передается в микросхему за два шага вначале адрес столбца, а затем строки, что позволяет сократить количество выводов шины адреса примерно вдвое, уменьшить размеры корпуса и разместить на материнской плате большее количество микросхем. Это, разумеется, приводит к снижению быстродействия, так как для передачи адреса нужно вдвое больше времени. Для указания, какая именно часть адреса передается в определенный момент, служат два вспомогательных сигнала RAS и CAS. При обращении к ячейке памяти на шину адреса выставляется адрес строки. После стабилизации процессов на шине подается сигнал RAS и адрес записывается во внутренний регистр микросхемы памяти. Затем на шину адреса выставляется адрес столбца и выдается сигнал CAS. В зависимости от состояния линии WE производится чтение данных из ячейки или их запись в ячейку (перед записью данные должны быть помещены на шину данных). Интервал между установкой адреса и выдачей сигнала RAS (или CAS) оговаривается техническими характеристиками микросхемы, но обычно адрес выставляется в одном такте системной шины, а управляющий сигнал в следующем. Таким образом, для чтения или записи одной ячейки динамического ОЗУ требуется пять тактов, в которых происходит соответственно: выдача адреса строки, выдача сигнала RAS, выдача адреса столбца, выдача сигнала CAS, выполнение операции чтения/записи (в статической памяти процедура занимает лишь от двух до трех тактов).



Рис. 72. Классификация динамических ОЗУ: а) – микросхемы для основной памяти; б) – микросхемы для видеоадаптеров.

Следует также помнить о необходимости регенерации данных. Но наряду с естественным разрядом конденсатора ЗЭ со временем к потере заряда приводит также считывание данных из DRAM, поэтому после каждой операции чтения данные должны быть восстановлены. Это достигается за счет повторной записи тех же данных сразу после чтения. При считывании информации из одной ячейки фактически выдаются данные сразу всей выбранной строки, но используются только те, которые находятся в интересующем столбце, а все остальные игнорируются. Таким образом, операция чтения из одной ячейки приводит к разрушению данных всей строки, и их нужно восстанавливать. Регенерация данных после чтения выполняется автоматически интерфейсной логикой микросхемы, и происходит это сразу же после считывания строки.
Теперь рассмотрим различные типы микросхем динамической памяти, начнем с системных DRAM, то есть микросхем, предназначенных для использования в качестве основной памяти. На начальном этапе это были микросхемы асинхронной памяти, работа которых не привязана жестко к тактовым импульсам системной шины.
Асинхронные динамические ОЗУ. Микросхемы асинхронных динамических ОЗУ управляются сигналами RAS и CAS, и их работа в принципе не связана непосредственно тактовыми импульсами шины. Асинхронной памяти свойственны дополнительные затраты времени на взаимодействие микросхем памяти и контроллера. Так, в асинхронной схеме сигнал RAS будет сформирован только после поступления в контроллер тактирующего импульса и будет воспринят микросхемой памяти через некоторое время. После этого память выдаст данные, но контроллер сможет их считать только по приходу следующего тактирующего импульса, так как он должен работать синхронно с остальными устройствами ВМ. Таким образом, на протяжении цикла чтения/записи происходят небольшие задержки из-за ожидания памятью контроллера и контроллером памяти.
Микросхемы DRAM. В первых микросхемах динамической памяти применялся наиболее простой способ обмена данными, часто называемый традиционным (conventional). Он позволял считывать и записывать строку памяти только на каждый пятый такт. Этапы такой процедуры были описаны ранее. Традиционной DRAM соответствует формула 5-5-5-5. Микросхемы данного типа могли работать на частотах до 40 МГц и из-за своей медлительности (время доступа составляло около 120 нс) просуществовали недолго.
Микросхемы FPMDRAM. Микросхемы динамического ОЗУ, реализующие режим FPM, также относятся к ранним типам DRAM. Сущность режима была показана ранее. Схема чтения для FPM DRAM описывается формулой 5-3-3-3 (всего 14 тактов). Применение схемы быстрого страничного доступа позволило сократить время доступа до 60 нс, что, с учетом возможности работать на более высоких частотах шины, привело к увеличению производительности памяти по сравнению с традиционной DRAM приблизительно на 70%. Данный тип микросхем применялся в персональных компьютерах примерно до 1994 года.
Микросхемы EDO DRAM. Следующим этапом в развитии динамических ОЗУ стали ИМС с гиперстраничным режимом доступа (НРМ, Hyper Page Mode), более известные как EDO (Extended Data Output расширенное время удержания данных на выходе). Главная особенность технологии увеличенное по сравнению с FPM DRAM время доступности данных на выходе микросхемы. В микросхемах FPM DRAM выходные данные остаются действительными только при активном сигнале CAS, из-за чего во втором и последующих доступах к строке нужно три такта: такт переключения CAS в активное состояние, такт считывания данных и такт переключения CAS в неактивное состояние. В EDO DRAM по активному (спадающему) фронту сигнала CAS данные запоминаются во внутреннем регистре, где хранятся еще некоторое время после того, как поступит следующий активный фронт сигнала. Это позволяет использовать хранимые данные, когда CAS уже переведен в неактивное состояние. Иными словами, временные параметры улучшаются за счет исключения циклов ожидания момента стабилизации данных на выходе микросхемы.
Схема чтения у EDO DRAM уже 5-2-2-2, что на 20% быстрее, чем у FPM. Время доступа составляет порядка 30-40 нс. Следует отметить, что максимальная частота системной шины для микросхем EDO DRAM не должна была превышать 66 МГц.
Микросхемы BEDO DRAM. Технология EDO была усовершенствована компанией VIA Technologies. Новая модификация EDO известна как BEDO (Burst EDO пакетная EDO). Новизна метода в том, что при первом обращении считывается вся строка микросхемы, в которую входят последовательные слова пакета. За последовательной пересылкой слов (переключением столбцов) автоматически следит внутренний счетчик микросхемы. Это исключает необходимость выдавать адреса для всех ячеек пакета, но требует поддержки со стороны внешней логики. Способ позволяет сократить время считывания второго и последующих слов еще на один такт, благодаря чему формула приобретает вид 5-1-1-1.
Микросхемы EDRAM. Более быстрая версия DRAM была разработана подразделением фирмы Ramtron компанией Enhanced Memory Systems. Технология реализована в вариантах FPM, EDO и BEDO. У микросхемы более быстрое ядро и внутренняя кэш-память. Наличие последней главная особенность технологии. В роли кэш-памяти выступает статическая память (SRAM) емкостью 2048 бит. Ядро EDRAM имеет 2048 столбцов, каждый из которых соединен с внутренней кэш-памятью. При обращении к какой-либо ячейке одновременно считывается целая строка (2048 бит). Считанная строка заносится в SRAM, причем перенос информации в кэш-память практически не сказывается на быстродействии, поскольку происходит за один такт. При дальнейших обращениях к ячейкам, относящимся к той же строке, данные берутся из более быстрой кэш-памяти. Следующее обращение к ядру происходит при доступе к ячейке, не расположенной в строке, хранимой в кэш-памяти микросхемы.
Технология наиболее эффективна при последовательном чтении, то есть когда среднее время доступа для микросхемы приближается к значениям, характерным для статической памяти (порядка 10 нс). Главная сложность состоит в несовместимости с контроллерами, используемыми при работе с другими видами DRAM.
Синхронные динамические ОЗУ. В синхронных DRAM обмен информацией синхронизируется внешними тактовыми сигналами и происходит в строго определенные моменты времени, что позволяет взять все от пропускной способности шины «процессор-память» и избежать циклов ожидания. Адресная и управляющая информация фиксируются в ИМС памяти. После чего ответная реакция микросхемы произойдет через четко определенное число тактовых импульсов, и это время процессор может использовать для других действий, не связанных с обращением к памяти. В случае синхронной динамической памяти вместо продолжительности цикла доступа говорят о минимально допустимом периоде тактовой частоты, и речь уже идет о времени порядка 8-10 нс.
Микросхемы SDRAM. Аббревиатура SDRAM (Synchronous DRAM синхронная DRAM) используется для обозначения микросхем «обычных» синхронных динамических ОЗУ. Кардинальные отличия SDRAM от рассмотренных выше асинхронных динамических ОЗУ можно свести к четырем положениям:
синхронный метод передачи данных на шину;
конвейерный механизм пересылки пакета;
применение нескольких (двух или четырех) внутренних банков памяти;
передача части функций контроллера памяти логике самой микросхемы.
Синхронность памяти позволяет контроллеру памяти «знать» моменты готовности данных, за счет чего снижаются издержки циклов ожидания и поиска данных. Так как данные появляются на выходе ИМС одновременно с тактовыми импульсами, упрощается взаимодействие памяти с другими устройствами ВМ.
В отличие от BEDO конвейер позволяет передавать данные пакета по тактам, благодаря чему ОЗУ может работать бесперебойно на более высоких частотах, чем асинхронные ОЗУ. Преимущества конвейера особенно возрастают при передаче длинных пакетов, но не превышающих длину строки микросхемы.
Значительный эффект дает разбиение всей совокупности ячеек на независимые внутренние массивы (банки). Это позволяет совмещать доступ к ячейке одного банка с подготовкой к следующей операции в остальных банках (перезарядкой управляющих цепей и восстановлением информации). Возможность держать открытыми одновременно несколько строк памяти (из разных банков) также способствует повышению быстродействия памяти. При поочередном доступе к банкам частота обращения к каждому из них в отдельности уменьшается пропорционально числу банков и SDRAM может работать на более высоких частотах. Благодаря встроенному счетчику адресов SDRAM, как и BEDO DRAM, позволяет производить чтение и запись в пакетном режиме, причем в SDRAM длина пакета варьируется и в пакетном режиме есть возможность чтения целой строки памяти. ИМС может быть охарактеризована формулой 5-1-1-1. Несмотря на то, что формула для этого типа динамической памяти такая же, что и у BEDO, способность работать на более высоких частотах приводит к тому, что SDRAM с двумя банками при тактовой частоте шины 100 МГц по производительности может почти вдвое превосходить память типа BEDO.
Микросхемы DDR SDRAM. Важным этапом в дальнейшем развитии технологии SDRAM стала DDR SDRAM (Double Data Rate SDRAM - SDRAM с удвоенной скоростью передачи данных). В отличие от SDRAM новая модификация выдает данные в пакетном режиме по обоим фронтам импульса синхронизации, за счет чего пропускная способность возрастает вдвое. Существует несколько спецификаций DDR SDRAM, в зависимости от тактовой частоты системной шины: DDR266, DDR333, DDR400, DDR533. Так, пиковая пропускная способность микросхемы памяти спецификации DDR333 составляет 2,7 Гбайт/с, а для DDR400 3,2 Гбайт/с. DDR SDRAM в настоящее время является наиболее распространенным типом динамической памяти персональных ВМ.
Микросхемы RDRAM, DRDRAM. Наиболее очевидные способы повышения эффективности работы процессора с памятью увеличение тактовой частоты шины либо ширины выборки (количества одновременно пересылаемых разрядов). К сожалению, попытки совмещения обоих вариантов наталкиваются на существенные технические трудности (с повышением частоты усугубляются проблемы электромагнитной совместимости, труднее становится обеспечить одновременность поступления потребителю всех параллельно пересылаемых битов информации). В большинстве синхронных DRAM (SDRAM, DDR) применяется широкая выборка (64 бита) при ограниченной частоте шины.
Принципиально отличный подход к построению DRAM был предложен компанией Rambus в 1997 году. В нем упор сделан на повышение тактовой частоты до 400 МГц при одновременном уменьшении ширины выборки до 16 бит. Новая память известна как RDRAM (Rambus Direct RAM). Существует несколько разновидностей этой технологии: Base, Concurrent и Direct. Во всех тактирование ведется по обоим фронтам синхросигналов (как в DDR), благодаря чему результирующая частота составляет соответственно 500-600, 600-700 и 800 МГц. Два первых варианта практически идентичны, а вот изменения в технологии Direct Rambus (DRDRAM) весьма значительны.
Сначала остановимся на принципиальных моментах технологии RDRAM, ориентируясь в основном на более современный вариант DRDRAM. Главным отличием от других типов DRAM является оригинальная система обмена данными между ядром и контроллером памяти, в основе которой лежит так называемый «канал Rambus», применяющий асинхронный блочно-ориентированный протокол. На логическом уровне информация между контроллером и памятью передается пакетами.
Различают три вида пакетов: пакеты данных, пакеты строк и пакеты столбцов. Пакеты строк и столбцов служат для передачи от контроллера памяти команд управления соответственно линиями строк и столбцов массива запоминающих элементов. Эти команды заменяют обычную систему управления микросхемой с помощью сигналов RAS, CAS, WE и CS.
Массив ЗЭ разбит на банки. Их число в кристалле емкостью 64 Мбит составляет 8 независимых или 16 сдвоенных банков. В сдвоенных банка^ пара банков использует общие усилители чтения/записи. Внутреннее ядро микросхемы имеет 128-разрядную шину данных, что позволяет по каждому адресу столбца передавать 16 байт. При записи можно использовать маску, в которой каждый бит соответствует одному байту пакета. С помощью маски можно указать, сколько байтов пакета и какие именно должны быть записаны в память.
Линии данных, строк и столбцов в канале полностью независимы, поэтому команды строк, команды столбцов и данные могут передаваться одновременно, причем для разных банков микросхемы. Пакеты столбцов включают в себя по два поля и передаются по пяти линиям. Первое поле задает основную операцию записи или чтения. Во втором поле находится либо указание на использование маски записи (собственно маска передается по линиям данных), либо расширенный код операции, определяющий вариант для основной операции. Пакеты строк подразделяются на пакеты активации, отмены, регенерации и команды переключения режимов энергопотребления. Для передачи пакетов строк выделены три линии.
Операция записи может следовать сразу за чтением нужна лишь задержка на время прохождения сигнала по каналу (от 2,5 до 30 нс в зависимости от длины канала). Чтобы выровнять задержки в передаче отдельных битов передаваемого кода, проводники на плате должны располагаться строго параллельно, иметь одинаковую длину (длина линий не должна превышать 12 см) и отвечать строгим требованиям, определенным разработчиком.
Каждая запись в канале может быть конвейеризирована, причем время задержки первого пакета данных составляет 50 нс, а остальные операции чтения/записи осуществляются непрерывно (задержка вносится только при смене операции с записи на чтение, и наоборот).
В имеющихся публикациях упоминается работа Intel и Rambus над новой версией RDRAM, названной nDRAM, которая будет поддерживать передачу данных с частотами до 1600 МГц.
Микросхемы SLDRAM. Потенциальным конкурентом RDRAM на роль стандарта архитектуры памяти для будущих персональных ВМ выступает новый вид динамического ОЗУ, разработанный консорциумом производителей ВМ SyncLink Consortium и известный под аббревиатурой SLDRAM. В отличие от RDRAM, технология которой является собственностью компаний Rambus и Intel, данный стандарт открытый. На системном уровне технологии очень похожи. Данные и команды от контроллера к памяти и обратно в SLDRAM передаются пакетами по 4 или 8 посылок. Команды, адрес и управляющие сигналы посылаются по однонаправленной 10-разрядной командной шине. Считываемые и записываемые данные передаются по двунаправленной 18-разрядной шине данных. Обе шины работают на одинаковой частоте. Пока что еще эта частота равна 200 МГц, что, благодаря технике DDR, эквивалентно 400 МГц. Следующие поколения SLDRAM должны работать на частотах 400 МГц и выше, то есть обеспечивать эффективную частоту более 800 МГц.
К одному контроллеру можно подключить до 8 микросхем памяти. Чтобы избежать запаздывания сигналов от микросхем, более удаленных от контроллера, временные характеристики для каждой микросхемы определяются и заносятся в ее управляющий регистр при включении питания.
Микросхемы ESDRAM. Это синхронная версия EDRAM, в которой используются те же приемы сокращения времени доступа. Операция записи в отличие от чтения происходит в обход кэш-памяти, что увеличивает производительность ESDRAM при возобновлении чтения из строки, уже находящейся в кэш-памяти. Благодаря наличию в микросхеме двух банков простои из-за подготовки к операциям чтения/записи сводятся к минимуму. Недостатки у рассматриваемой микросхемы те же, что и у EDRAM усложнение контроллера, так как он должен .читывать возможность подготовки к чтению в кэш-память новой строки ядра. Кроме того, при произвольной последовательности адресов кэш-память задействуется неэффективно.
Микросхемы CDRAM. Данный тип ОЗУ разработан в корпорации Mitsubishi, и его можно рассматривать как пересмотренный вариант ESDRAM, свободный от некоторых ее несовершенств. Изменены емкость кэш-памяти и принцип размещения в ней данных. Емкость одного блока, помещаемого в кэш-память, уменьшена до 128 бит, таким образом, в 16-килобитовом кэше можно одновременно хранить копии из 128 участков памяти, что позволяет эффективнее использовать кэш-память. Замена первого помещенного в кэш участка памяти начинается только после заполнения последнего (128-го) блока. Изменению подверглись и средства доступа. Так, в микросхеме используются раздельные адресные шины для статического кэша и динамического ядра. Перенос данных из динамического ядра в кэш-память совмещен с выдачей данных на шину, поэтому частые, но короткие пересылки не снижают производительности ИМС при считывании из памяти больших объемов информации и уравнивают CDRAM с ESDRAM, а при чтении по выборочным адресам CDRAM явно выигрывает. Необходимо, однако, отметить, что вышеперечисленные изменения привели к еще большему усложнению контроллера памяти.

Лабораторная работа №5. Расширенная работа с памятью и передача управления в программе

Реализуйте на языке ассемблера микропроцессора i8086 следующие программы, используя команды передачи управления call и ret:

Определить результативность стрельбы (n/n1) в круглую мишень радиусом R=10, где n - количество попаданий; n1 - количество выстрелов. Координаты встречи пули с плоскостью мишени заданы в виде двух массивов Х(I) и У(I). Определение попадания снаряда в мишень оформить в виде подпрограммы.
Даны два множества заданные в виде массивов А(I) и В(I); I=1,2,..,10. Найти сумму (об’единение) множеств. C(J) - сумма двух множеств есть множество всех элементов принадлежащих А или В. Например, {1,2,3} U {2,3,4} = {1,2,3,4}. Задачу добавления нового элемента массива оформить в виде подпрограммы.

Даны два массива А(I) и В(I). Найти max(A(I)), max(B(D)), min(A(D), min(B(I)). Задачу нахождения max и min оформить в виде подпрограмм. I=1,2,...5.
Даны два множества А и В. Найти произведение (пересечение) двух множеств. C(J) - произведение есть множество всех элементов, принадлежащих как к А, так и к В. Например, {1,2,3} n {2,3,4} = {2,3}. Задачу удаления элементов массива имеющих одинаковые значения оформить в виде подпрограммы.
Протабулировать функцию у(x), заданную в виде: y(x) = ах + b , если 1 < x <= 5; y(x) = bx + а , если 5 < x <= 10, где а - max(A(I)), а в - max(B(I)); I=1,2,...,5 Нахождение max оформить в виде подпрограммы Шаг табуляции x=1.
Количество сочетаний С вычисляется выражением: Cnm = n!/((n-m)! m!)Найти C53, C64. Вычисление факториала оформить в виде подпрограммы.
Вычислить функцию у(x) = ах + в, где а и в – количество элементов массива А(I) лежащих в диапазоне (0,...,15) и (40,...,120) соответственно. Нахождение количества элементов массива, лежащих в заданном диапазоне оформить в виде подпрограммы I=1,2,..,10. 1<= x <= 10, шаг 1.
Вычислить функцию заданную в виде: y(x) = а , если 1 < x <= 5; y(x) = b , если 5 < x <= 10, где а и в - элементы массивов А(I), В(I), стоящие в третьей позиции после сортировки в порядке возрастания. Сортировку массива в порядке возрастания оформить в виде подпрограммы.
Найти произведения сумм трех одномерных массивов А(I), В(I), C(I). Вычисление сумм оформить в виде подпрограммы.
Подсчитать количество четных чисел в каждой строке матрицы A(I,J), I, J = 1,2,..,5. Подсчет количества четных чисел в строке оформить в виде подпрограммы.
Найти отношение следа матрицы A(I,J) к следу матрицы В(I,J), при I,J = 1,2,..,5. След матрицы - сумму диагональных элементов матрицы А(I,I), вычислить с помощью подпрограммы.
Определить среднее значение элементов массива А(I) и В(I). Определение среднего значения оформить в виде подпрограммы.
Найти сумму положительных элементов строк матрицы А(I,J). Подсчет суммы положительных элементов одной строки матрицы оформить в виде подпрограммы. I, J = 1,2,...5.
Отсортировать элементы строк матрицы A(I,J) в порядки уменьшения их значений. Сортировку строк оформить в виде подпрограммы I,J=1,2,..,5.
Найти минимальное значение из максимальных значений строк матрицы А(I,J). Нахождение максимального значения строки матрицы оформить в виде подпрограммы. I, J=1,2,...,5.

ГЛАВА 8. Внешние накопители

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

8.1. Магнитные диски

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

8.1.1. Организация данных и форматирование

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



Рис. 73. Порядок размещения информации на магнитном диске.

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

8.1.2. Внутреннее устройство дисковых систем

В ЗУ с фиксированными головками приходится по одной головке считывания/ записи на каждую дорожку. Головки смонтированы на жестком рычаге, пересекающем все дорожки диска. В дисковом ЗУ с подвижными головками имеется только одна головка, также установленная на рычаге, однако рычаг способен перемещаться в радиальном направлении над поверхностью диска, обеспечивая возможность позиционирования головки на любую дорожку.
Диски с магнитным носителем устанавливаются в дисковод, состоящий из рычага, шпинделя, вращающего диск, и электронных схем, требуемых для ввода и вывода двоичных данных. Несъемный диск зафиксирован на дисководе. Съемный диск может быть вынут из дисковода и заменен на другой аналогичный диск. Преимущество системы со съемными дисками возможность хранения неограниченного объема данных при ограниченном числе дисковых устройств. Кроме того, такой диск может быть перенесен с одной ВМ на другую.
Большинство дисков имеет магнитное покрытие с обеих сторон. В этом случае говорят о двусторонних (double-sided) дисках. Односторонние (single-sided) диски в наше время встречаются достаточно редко.
На оси может располагаться один или несколько дисков. В последнем случае используют термин дисковый пакет.
В зависимости от применяемой головки считывания/записи можно выделить три типа дисковых ЗУ. В первом варианте головка устанавливается на фиксированной дистанции от поверхности так, чтобы между ними оставался воздушный промежуток. Второй вариант это когда в процессе чтения и записи головка и диск находятся в физическом контакте. Такой способ используется, например, в накопителях на гибких магнитных дисках (дискетах).
Для правильной записи и считывания головка должна генерировать и воспринимать магнитное поле определенной интенсивности, поэтому чем уже головка, тем ближе должна она размещаться к поверхности диска (более узкая головка означает и более узкие дорожки, а значит, и большую емкость диска). Однако приближение головки к диску означает и больший риск ошибки за счет загрязнения и дефектов. В процессе решения этой проблемы был создан диск типа «винчестер».
В винчестерах используются круглые диски, называемые пластинами, они покрыты с обеих сторон специальным материалом, разработанным для хранения информации в виде намагниченных цепочек. Пластины крепятся на шпиндель. Они вращаются на большой скорости, приводимые от специального шпиндельного мотора. Специальные электромагнитные читающие/пишущие устройства, называемые головками, используются для записи и чтения информации с поверхности пластин (рис. 74).

Рис. 74. Внутреннее строение накопителя типа «винчестер».

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

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

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

По сравнению с оксидным материалом, тонкопленочный материал более однороден и гладок. Он также имеет намного лучшие магнитные свойства, позволяющие хранить намного больше данных на единицу поверхности. Кроме того, этот материал намного устойчивее к физическим воздействиям. Пластины после нанесения магнитного материала покрываются тонким защитным слоем, состоящим из карбона.
Поверхностная плотность записи, иногда называемая битовой плотностью, показывает, какое количество информации может храниться на единицу поверхности пластины. Она обычно считается в битах на квадратный дюйм BPSI bits per square inch.
Поверхностная плотность записи двухмерная величина, она вычисляется как продукт двух одномерных величин:
Трековая плотность: Она показывает, как много треков может поместиться на каждый дюйм радиуса диска. Пусть, например мы имеем пластины диаметром 3,74 дюйма, или радиусом в 1,87 дюйма. Естественно, в силу того, что пластина надевается на шпиндель, реально рабочий участок будет, например, равен 1,2 дюйма. Пусть мы имеем 22000 треков на пластину, тогда трековая плотность будет примерно равна 18333 треков на дюйм TPI tracks per inch.
Линейная плотность или плотность записи: Эта величина показывает, сколько бит информации может поместиться на одном треке. Если на треке может поместиться 300000 бит, то мы можем говорить, что линейная плотность записи составляет 300000 бит на трек BPI bits per inch.
Беря продукт умножения этих двух величин можно получить поверхностную плотность записи. В приведенном выше примере она будет составлять величину порядка 5,5 Гигабит на квадратный дюйм. Современные жесткие диски имеют плотности порядка сотен гигабит на квадратный дюйм, в то же время первые жесткие диски для ПК имели плотности, порядка 0,004 Гигабит на квадратный дюйм.
Линейная плотность записи диска не постоянна для всей поверхности пластины. Причиной, по которой эта величина не постоянна, служит увеличение длины трека от центра к краям пластины. Таким образом, внешние треки хранят большее количество информации, чем внутренние. С изобретением зонной записи, винчестеры начали хранить больше информации на внешних треках, чем на внутренних, но, тем не менее, линейная плотность записи у внутренних треков больше, чем у внешних.
Существует два пути для увеличения поверхностной плотности записи:
увеличение линейной плотности записи, увеличивая при этом количество информации хранимой на треке;
увеличение трековой плотности, увеличивая при этом количество треков на пластину.

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

8.2. Массивы магнитных дисков с избыточностью

8.2.1. Концепция массива с избыточностью

Магнитные диски, будучи основой внешней памяти любой ВМ, одновременно остаются и одним из «узких мест» из-за сравнительно высокой стоимости, недостаточной производительности и отказоустойчивости. Характерно, что если в плане стоимости и надежности ситуация улучшается, то разрыв в производительности между МД и ядром ВМ постоянно растет. Так, при удвоении быстродействия процессоров примерно каждые два года для М Д такое удвоение было достигнуто лишь спустя десять лет. Ясно, что уже с самого начала использования подсистем памяти на базе МД не прекращаются попытки улучшить их характеристики. Одно из наиболее интересных и универсальных усовершенствований было предложено в 1987 году учеными университета Беркли (Калифорния). Проект известен под аббревиатурой RAID (Redundant Array of Independent (or Inexpensive) Disks) массив независимых (или недорогих) дисков с избыточностью. В основе концепции RAID лежит переход от одного физического МД большой емкости к массиву недорогих, независимо и параллельно работающих физических дисковых ЗУ, рассматриваемых операционной системой как одно большое логическое дисковое запоминающее устройство. Такой подход позволяет повысить производительность дисковой памяти за счет возможности параллельного обслуживания запросов на считывание и запись, при условии, что данные находятся на разных дисках. Повышенная надежность достигается тем, что в массиве дисков хранится избыточная информация, позволяющая обнаружить и исправить возможные ошибки. На период, когда концепция RAID была впервые предложена, определенный выигрыш достигался и в плане стоимости. В настоящее время, с развитием технологии производства МД, утверждение об экономичности массивов RAID становится проблематичным, что, однако, вполне компенсируется их повышенными быстродействием и отказоустойчивостью.
Существуют пять основных схем организации данных и способов введения избыточности, названные авторами уровнями RAID: RAID 1, RAID 2,..., RAID 5. В настоящее время производители RAID-систем, объединившиеся в ассоциацию RAB (RAID Advisory Board), договорились о единой классификации RAID, включающей в себя шесть уровней (добавлен уровень RAID 0). Известны также еще несколько схем RAID, не включенных в эту классификацию, поскольку по сути они представляют собой различные комбинации стандартных уровней. Хотя ни одна из схем массива МД не может быть признана идеальной для всех случаев, каждая из них позволяет существенно улучшить какой-то из показателей (производительность, отказоустойчивость) либо добиться наиболее подходящего сочетания этих показателей. Для всех уровней RAID характерны три общих свойства:
RAID представляет собой набор физических дисковых ЗУ, управляемых операционной системой и рассматриваемых как один логический диск;
данные распределены по физическим дискам массива;
избыточное дисковое пространство используется для хранения дополнительной информации, гарантирующей восстановление данных в случае отказа диска.

8.2.2. Повышение производительности дисковой подсистемы

Повышение производительности дисковой подсистемы в RAID достигается с помощью приема, называемого расслоением или расщеплением (striping). В его основе лежит разбиение данных и дискового пространства на сегменты, так называемые полосы, (strip узкая полоса). Полосы распределяются по различным дискам массива, в соответствии с определенной системой. Это позволяет производить параллельное считывание или запись сразу нескольких полос, если они расположены на разных дисках. В идеальном случае производительность дисковой подсистемы может быть увеличена в число раз, равное количеству дисков в массиве. Размер (ширина) полосы выбирается исходя из особенностей каждого уровня RAID и может быть равен биту, байту, размеру физического сектора МД (обычно 512 байт) или размеру дорожки.
Чаще всего логически последовательные полосы распределяются по последовательным дискам массива. Так, в n-дисковом массиве n первых логических полос физически расположены как первые полосы на каждом из n дисков, следующие n полос как вторые полосы на каждом физическом диске и т. д. Набор логически последовательных полос, одинаково расположенных на каждом ЗУ массива, называют поясом (stripe – широкая полоса).
Как уже упоминалось, минимальный объем информации, считываемый с МД или записываемый на него за один раз, равен размеру физического сектора диска. Это приводит к определенным проблемам при меньшей ширине полосы, которые в RAID обычно решаются за счет усложнения контроллера МД.

8.2.3. Повышение отказоустойчивости дисковой подсистемы

Одной из целей концепции RAID была возможность обнаружения и коррекции ошибок, возникающих при отказах дисков или в результате сбоев. Достигается это за счет избыточного дискового пространства, которое задействуется для хранения дополнительной информации, позволяющей восстановить искаженные или утерянные данные. В RAID предусмотрены три вида такой информации:
дублирование
код Хэмминга;
биты паритета.
Первый из вариантов заключается в дублировании всех данных, при условии, что экземпляры одних и тех же данных расположены на разных дисках массива. Это позволяет при отказе одного из дисков воспользоваться соответствующей информацией, хранящейся на исправных МД. В принципе распределение информации по дискам массива может быть произвольным, но для сокращения издержек, связанных с поиском копии, обычно применяется разбиение массива на пары МД, где в каждой паре дисков информация идентична и одинаково расположена. При таком дублировании для управления парой дисков может использоваться общий или раздельные контроллеры. Избыточность дискового массива здесь составляет 100%.
Второй способ формирования корректирующей информации основан на вычислении кода Хэмминга для каждой группы полос, одинаково расположенных на всех дисках массива (пояса). Корректирующие биты хранятся на специально выделенных для этой цели дополнительных дисках (по одному диску на каждый бит). Так, для массива из десяти МД требуются четыре таких дополнительных диска, и избыточность в данном случае близка к 30%.
В третьем случае вместо кода Хэмминга для каждого набора полос, расположенных в идентичной позиции на всех дисках массива, вычисляется контрольная полоса, состоящая из битов паритета. В ней значение отдельного бита формируется как сумма по модулю два для одноименных битов во всех контролируемых полосах. Для хранения полос паритета требуется только один дополнительный диск. В случае отказа какого-либо из дисков массива производится обращение к диску паритета, и данные восстанавливаются по битам паритета и данным от остальных дисков массива. Реконструкция данных достаточно проста. Рассмотрим массив из пяти дисковых ЗУ, где диски Х0–Х3 содержат данные, а Х4 – это диск паритета. Паритет для i-го бита вычисляется как
13 EMBED Equation.3 1415.
Предположим, что дисковод Х1 отказал. Если мы добавим 13 EMBED Equation.3 1415, к обеим частям предыдущего выражения, то получим:
13 EMBED Equation.3 1415.
Таким образом, содержимое каждой полосы данных на любом диске массива может быть восстановлено по содержимому соответствующих полос на остальных дисках массива. Избыточность при таком способе в среднем близка к 20%.

8.2.4. RAID уровня 0

RAID уровня 0, строго говоря, не является полноценным членом семейства RAID, поскольку данная схема не содержит избыточности и нацелена только на повышение производительности в ущерб надежности.
В основе RAID 0 лежит расслоение данных. Полосы распределены по всем дискам массива дисковых ЗУ по циклической схеме (рис. 75). Преимущество такого распределения в том, что если требуется записать или прочитать логически последовательные полосы, то несколько таких полос (вплоть до n) могут обрабатываться параллельно, за счет чего существенно снижается общее время ввода/вывода. Ширина полос в RAID 0 варьируется в зависимости от применения, но в любом случае она не менее размера физического сектора МД.


Рис. 75. RAID уровня 0.

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

8.2.5. RAID уровня 1

В RAID 1 избыточность достигается с помощью дублирования данных. В принципе исходные данные и их копии могут размещаться по дисковому массиву произвольно, главное чтобы они находились на разных дисках. В плане быстродействия и простоты реализации выгоднее, когда данные и копии располагаются идентично на одинаковых дисках. Рисунок 76 показывает, что, как и в RAID 0, здесь имеет место разбиение данных на полосы. Однако в этом случае каждая логическая полоса отображается на два отдельных физических диска, так что каждый диск в массиве имеет так называемый «зеркальный» диск, содержащий идентичные данные. Для управления каждой парой дисков может быть использован общий контроллер, тогда данные сначала записываются на основной диск, а затем на «зеркальный» («зеркалирование»). Более эффективно применение самостоятельных контроллеров для каждого диска, что позволяет производить одновременную запись на оба диска.


Рис. 76. RAID уровня 1.

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

8.2.6. RAID уровня 2

В системах RAID 2 используется техника параллельного доступа, где в выполнении каждого запроса на В/ВЫВ одновременно участвуют все диски. Обычно шпиндели всех дисков синхронизированы так, что головки каждого ЗУ в каждый момент времени находятся в одинаковых позициях. Данные разбиваются на полосы длиной в 1 бит и распределены по дискам массива таким образом, что полное машинное слово представляется поясом, то есть число дисков равно длине машинного слова в битах. Для каждого слова вычисляется корректирующий код (обычно это код Хэмминга, способный корректировать одиночные и обнаруживать двойные ошибки), который, также побитово, хранится на дополнительных дисках (рис. 77). Например, для массива, ориентированного на 32-разрядные слова (32 основных диска) требуется семь дополнительных дисковых ЗУ (корректирующий код состоит из 7 разрядов).
При записи вычисляется корректирующий код, который заносится на отведенные для него диски. При каждом чтении производится доступ ко всем дискам массива, включая дополнительные. Считанные данные вместе с корректирующим кодом подаются на контроллер дискового массива, где происходит повторное вычисление корректирующего кода и его сравнение с хранившимся на избыточных дисках. Если присутствует одиночная ошибка, контроллер способен ее мгновенно распознать и исправить, так что время считывания не увеличивается.
RAID 2 позволяет достичь высокой скорости В/ВЫВ при работе с большими последовательными записями, но становится неэффективным при обслуживании записей небольшой длины. Основное преимущество RAID 2 состоит в высокой степени защиты информации, однако предлагаемый в этой схеме метод коррекции уже встроен в каждое из современных дисковых ЗУ.


Рис. 77. RAID уровня 2.

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

8.2.7. RAID уровня 3

RAID 3 организован сходно с RAID2. Отличие в том, что RAID 3 требует только одного дополнительного диска диска паритета, вне зависимости от того, насколько велик массив дисков (рис. 78). В RAID 3 используется параллельный доступ к данным, разбитым на полосы длиной в бит или байт. Все диски массива синхронизированы. Вместо кода Хэмминга для набора полос идентичной позиции на всех дисках массива (пояса) вычисляется полоса, состоящая из битов паритета. В случае отказа дискового ЗУ производится обращение к диску паритета, и данные восстанавливаются по битам паритета и данным от остальных дисков массива.


Рис. 78. RAID уровня 3.

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

8.2.8. RAID уровня 4

По своей идее и технике формирования избыточной информации RAID 4 идентичен RAID 3, только размер полос в RAID 4 значительно больше (обычно один-два физических блока на диске). Главное отличие состоит в том, что в RAID 4 используется техника независимого доступа, когда каждое ЗУ массива в состоянии функционировать независимо, так, что отдельные запросы на ввод/вывод могут удовлетворяться параллельно (рис. 79).


Рис. 79. RAID уровня 4.

Для RAID 4 характерны издержки, обусловленные независимостью дисков. Если в RAID 3 запись производилась одновременно для всех полос одного пояса, в RAID 4 осуществляется запись полос в разные пояса. Это различие ощущается особенно при записи данных малого размера.
Каждый раз для выполнения записи программное обеспечение дискового массива должно обновить не только данные пользователя, но и соответствующие биты паритета. Рассмотрим массив из пяти дисковых ЗУ, где ЗУ X0 ... ХЗ содержат данные, а Х4 диск паритета. Положим, что производится запись, охватывающая только полосу на диске Х1. Первоначально для каждого бита i мы имеем следующее соотношение:
13 EMBED Equation.3 1415.
После обновления для потенциально измененных битов, обозначаемых с помощью апострофа, получаем:
13 EMBED Equation.3 1415.
Для вычисления новой полосы паритета программное обеспечение управления массивом должно прочитать старую полосу пользователя и старую полосу паритета. Затем оно может заменить эти две полосы новой полосой данных и новой вычисленной полосой паритета. Таким образом, запись каждой полосы связана с двумя операциями чтения и двумя операциями записи.
В случае записи большого объема информации, охватывающего полосы на всех дисках, паритет вычисляется достаточно легко путем расчета, в котором участвуют только новые биты данных, то есть содержимое диска Паритета может быть обновлено параллельно с дисками данных и не требует дополнительных операций чтения и записи.
Массивы RAID 4 наиболее подходят для приложений, требующих поддержки высокого темпа поступления запросов ввода/вывода, и уступает RAID 3 там, где приоритетен большой объем пересылок данных.

8.2.9. RAID уровня 5

RAID 5 имеет структуру, напоминающую RAID 4. Различие заключается в том, что RAID 5 не содержит отдельного диска для хранения полос паритета, а разносит их по всем дискам. Типичное распределение осуществляется по циклической схеме, как это показано на рис. 80. В n-дисковом массиве полоса паритета вычисляется для полос п-1 дисков, расположенных в одном поясе, и хранится в том же поясе, но на диске, который не учитывался при вычислении паритета. При переходе от одного пояса к другому эта схема циклически повторяется.


Рис. 80. RAID уровня 5.

Распределение полос паритета по всем дискам предотвращает возникновение проблемы, упоминавшейся для RAID 4.

8.2.10. RAID уровня 6

RAID 6 очень похож на RAID 5. Данные также разбиваются на полосы размером в блок и распределяются по всем дискам массива. Аналогично, полосы паритета распределены по разным дискам. Доступ к полосам независимый и асинхронный. Различие состоит в том, что на каждом диске хранится не одна, а две полосы паритета. Первая из них, как и в RAID 5, содержит контрольную информацию для полос, расположенных на горизонтальном срезе массива (за исключением диска, где эта полоса паритета хранится). В дополнение формируется и записывается вторая полоса паритета, контролирующая все полосы какого-то одного диска массива (вертикальный срез массива), но только не того, где хранится полоса паритета. Сказанное иллюстрируется рис. 81.

Рис. 81. RAID уровня 6.

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

8.2.11. RAID уровня 7

Схема RAID 7, запатентованная Storage Computer Corporation, объединяет массив асинхронно работающих дисков и кэш-память, управляемые встроенной в контроллер массива операционной системой реального времени (рис. 82). Данные разбиты на полосы размером в блок и распределены по дискам массива. Полосы паритета хранятся на специально выделенных для этой цели одном или нескольких дисках.
Схема некритична к виду решаемых задач и при работе с большими файлами не уступает по производительности RAID 3. Вместе с тем RAID 7 может так же эффективно, как и RAID 5, производить одновременно несколько операций чтения и записи для небольших объемов данных. Все это обеспечивается использованием кэш-памяти и собственной операционной системой.


Рис. 82. RAID уровня 7.

8.2.12. RAID уровня 10

Данная схема совпадает с RAID 0, но в отличие от нее роль отдельных дисков выполняют дисковые массивы, построенные по схеме RAID 1 (рис. 83).
Таким образом, в RAID 10 сочетаются расслоение и дублирование. Это позволяет добиться высокой производительности, характерной для RAID 0 при уровне отказоустойчивости RAID 1. Основной недостаток схемы высокая стоимость ее реализации. Кроме того, необходимость синхронизации всех дисков приводит к усложнению контроллера.


Рис. 83. RAID уровня 10.

8.2.13. RAID уровня 53

В этом уровне сочетаются технологии RAID 0 и RAID 3, поэтому его правильнее было бы назвать RAID 30. В целом данная схема соответствует RAID 0, где роль отдельных дисков выполняют дисковые массивы, организованные по схеме RAID 3. Естественно, что в RAID 53 сочетаются все достоинства RAID 0 и RAID 3. Недостатки схемы такие же, что и у RAID 10.

8.2.14. Особенности реализации RAID-систем

Массивы RAID могут быть реализованы программно, аппаратно или как комбинация программных и аппаратных средств.
При программной реализации используются обычные дисковые контроллеры и стандартные команды ввода/вывода. Работа дисковых ЗУ в соответствии с алгоритмами различных уровней RAID обеспечивается программами операционной системы ВМ. Программный режим RAID предусмотрен, например, в операционных системах на основе ядра Windows NT. Это дает возможность программного изменения уровня RAID, в зависимости от особенностей решаемой задачи. Хотя программный способ является наиболее дешевым, он не позволяет добиться высокого уровня производительности, характерного для аппаратурной реализации RAID.
Аппаратурная реализация RAID предполагает возложение всех или большей части функций по управлению массивом дисковых ЗУ на соответствующее оборудование, при этом возможны два подхода. Первый из них заключается в замене стандартных контроллеров дисковых ЗУ на специализированные, устанавливаемые на место стандартных. Базовая ВМ общается с контроллерами на уровне обычных команд ввода/вывода, а режим RAID обеспечивают контроллеры. Как и обычные, специализированные контроллеры/адаптеры ориентированы на определенный вид шины. Поскольку наиболее распространенной шиной для подключения дисковых ЗУ в настоящее время является шина SCSI, большинство производителей RAID-систем ориентируют свои изделия на протокол SCSI, определяемый стандартами ANSI Х3.131 и ISO/IEC. При втором способе аппаратной реализации RAID-система выполняется как автономное устройство, объединяющее в одном корпусе массив дисков и контроллер. Контроллер содержит микропроцессор и работает под управлением собственной операционной системы, полностью реализующей различные RAID-режимы. Такая подсистема подключается к шине базовой ВМ или к ее каналу ввода/вывода как обычное дисковое ЗУ.
При аппаратной реализации RAID-систем обычно предусматривается возможность замены неисправных дисков без потери информации и без остановки работы. Кроме того, многие из таких систем позволяют разбивать отдельные диски на разделы, причем разные разделы дисков могут объединяться в соответствии с различными уровнями RAID.

8.3. Оптическая память

В 1983 году была представлена первая цифровая аудиосистема на базе компакт-дисков (CD compact disk). Компакт-диск это односторонний диск, способный хранить более чем 60-минутную аудиоинформацию. Громадный коммерческий успех CD способствовал развитию технологии дешевых оптических запоминающих устройств для ВМ. За последующие годы были созданы различные системы памяти на оптических дисках, три из которых в прогрессирующей степени приживаются в вычислительных машинах: CD-ROM, WARM и стираемые оптические диски.
Для аудио компакт-дисков и CD-ROM используется идентичная технология. Основное отличие состоит в том, что проигрыватели CD-ROM более прочные и содержат устройства для исправления ошибок, обеспечивающие корректность передачи данных с диска в ВМ. Диск изготавливается из пластмассы, например поликарбоната, и покрыт окрашенным слоем с высокой отражающей способностью, обычно алюминием. Цифровая информация заносится в виде микроскопических углублений в отражающей поверхности. Запись информации производится с помощью сильно сфокусированного луча лазера высокой интенсивности. Так создается так называемый, мастер-диск, с которого затем печатаются копии. Углубления на копии защищаются от пыли и повреждений путем покрытия поверхности диска прозрачным лаком.
Информация с диска считывается маломощным лазером, расположенным в проигрывателе. Лазер освещает поверхность вращающегося диска сквозь прозрачное покрытие. Интенсивность отраженного луча лазера меняется, когда он попадает в углубление на диске. Эти изменения фиксируются фотодетектором и преобразуются в цифровой сигнал.
Углубления, расположенные ближе к центру диска, перемещаются относительно луча лазера медленнее, чем более удаленные. Из-за этого необходимы меры для компенсации различий в скорости так, чтобы лазер мог считывать информацию с постоянной скоростью.
Одно из возможных решений аналогично применяемому в магнитных дисках увеличение расстояния между битами информации, в зависимости от ее расположения на диске. В этом случае диск может вращаться с неизменной скоростью и, соответственно, такие дисковые ЗУ известны как устройства с постоянной угловой скоростью (CAV, Constant Angular Velocity). Ввиду нерационального использования внешней части диска метод постоянной угловой скорости в CD-ROM не поддерживается. Вместо этого информация по диску размещается в секторах одинакового размера, которые сканируются с постоянной скоростью за счет того, что диск вращается с переменной скоростью. В результате углубления считываются лазером с постоянной линейной скоростью (CLV, Constant Linear Velocity). При доступе к информации у внешнего края диска скорость вращения меньше и возрастает при приближении к оси. Емкость дорожки и задержки вращения возрастают по мере смещения от центра к внешнему краю диска.
Выпускаются CD различной емкости. В типовом варианте расстояние между дорожками составляет 1,6 мк, что, с учетом промежутков между дорожками, позволяет обеспечить 20 344 дорожки. Фактически же, вместо множества концентрических дорожек, имеется одна дорожка в виде спирали, длина которой равна 5,27 км. Постоянная линейная скорость CD-ROM 1,2 м/с, то есть для «прохождения» спирали требуется 4391 с или 73,2 мин. Именно эта величина составляет стандартное максимальное время проигрывания аудиодиска. Так как данные считываются с диска со скоростью 176,4 Кбайт/с, емкость CD равна 774,57 Мбайт.
Данные на CD-ROM организованы как последовательность блоков. Типичный формат блока показан на рис. 84. Блок включает в себя следующие поля:
Синхронизация. Это поле идентифицирует начало блока и состоит из нулевого байта, десяти байтов, содержащих только единичные разряды, и вновь байта из всех нулей.
Идентификатор. Заголовок, содержащий адрес блока и байт режима. Режим 0 определяет пустое поле данных; режим 1 отвечает за использование кода, корректирующего ошибки, и наличие 2048 байт данных; режим 2 определяет наличие 2336 байт данных и отсутствие корректирующего кода.
Данные. Данные пользователя.
Корректирующий код (КК). Поле предназначено для хранения дополнительных данных пользователя в режиме 2, а в режиме 1 содержит 288 байт кода с исправлением ошибок.


Рис. 84. Формат блока CD-ROM.

Рисунок 85 иллюстрирует организацию информации на CD-ROM. Как уже отмечалось, данные расположены последовательно по спиралевидной дорожке. Для варианта с постоянной линейной скоростью произвольный доступ к информации становится более сложным.

Рис. 85. Организация диска с постоянной линейной скоростью.

В последнее время наметился переход к новому типу оптических дисков, так называемым DVD-дискам (Digital Video Data). DVD-диски состоят из двух слоев толщиной 0,6 мм, то есть имеют две рабочих поверхности, и обеспечивают хранение по 4,7 Гбайт на каждой. В DVD-технологии используется лазер с меньшей длиной волны (650 нм против 780 нм для стандартных CD-ROM), а также более изощренная схема коррекции. Все это позволяет увеличить число дорожек и повысить плотность записи. Кроме того, при записи применяется метод сжатия информации, известный как MPEG2.

Контрольные вопросы

Перечислите основные компоненты HDD.
Какие две цели достигаются с помощью организации HDD в RAID?
Оцените утилизацию дискового пространства для RAID 1 и 5.
Какие преимущества имеются у составных RAID-массивов?
За счёт чего достигается повышенная отказоустойчивость RAID?
От чего зависит количество секторов на дорожке?
Каким способом можно увеличить плотность записи на пластину HDD?
На чём основан принцип считывания информации с CD?
Почему в CD используется только метод считывания с постоянной линейной скоростью?
За счёт чего увеличена ёмкость DVD по сравнению с CD?
ГЛАВА 9. Основы параллельных вычислений

В основе архитектуры большинства современных ВМ лежит представление алгоритма решения задачи в виде программы последовательных вычислений. Базовые архитектурные идеи ВМ, ориентированной на последовательное исполнение команд программы, были сформулированы Джоном фон Нейманом. В условиях постоянно возрастающих требований к производительности вычислительной техники все очевидней становятся ограничения классической фон-неймановской архитектуры, обусловленные исчерпанием всех основных идей ускорения последовательного счета. Дальнейшее развитие вычислительной техники связано с переходом к параллельным вычислениям как в рамках одной ВМ, так и путем создания многопроцессорных систем и сетей, объединяющих большое количество отдельных процессоров или отдельных вычислительных машин. Для такого подхода вместо термина «вычислительная машина» более подходит термин «вычислительная система» (ВС). Отличительной особенностью вычислительных систем является наличие в них средств, реализующих параллельную обработку, за счет построения параллельных ветвей в вычислениях, что не предусматривалось классической структурой ВМ. Идея параллелизма как средства увеличения быстродействия ЭВМ возникла очень давно еще в XIX веке.

9.1. Уровни параллелизма

Методы и средства реализации параллелизма зависят от того, на каком уровне он должен обеспечиваться. Обычно различают следующие уровни параллелизма:
Уровень заданий. Несколько независимых заданий одновременно выполняются на разных процессорах, практически не взаимодействуя друг с другом. Этот уровень реализуется на ВС с множеством процессоров в многозадачном режиме.
Уровень программ. Части одной задачи выполняются на множестве процессоров. Данный уровень достигается на параллельных ВС.
Уровень команд. Выполнение команды разделяется на фазы, а фазы нескольких последовательных команд могут быть перекрыты за счет конвейеризации. Уровень достижим на ВС с одним процессором.
Уровень битов (арифметический уровень). Биты слова обрабатываются один за другим, это называется бит-последовательной операцией. Если биты слова обрабатываются одновременно, говорят о бит-параллельной операции. Данный уровень реализуется в обычных и суперскалярных процессорах.
К понятию уровня параллелизма тесно примыкает понятие гранулярности. Это мера отношения объема вычислений, выполненных в параллельной задаче, к объему коммуникаций (для обмена сообщениями). Степень гранулярности варьируется от мелкозернистой до крупнозернистой. Определим понятия крупнозернистого (coarse grained), среднезернистого (medium grained) и мелкозернистого (fine grained) параллелизма.
Крупнозернистый параллелизм: каждое параллельное вычисление достаточно независимо от остальных, причем требуется относительно редкий обмен информацией между отдельными вычислениями. Единицами распараллеливания являются большие и независимые программы, включающие тысячи команд. Этот уровень параллелизма обеспечивается операционной системой.
Среднезернистый параллелизм: единицами распараллеливания являются вызываемые процедуры, включающие в себя сотни команд. Обычно организуется как программистом, так и компилятором.
Мелкозернистый параллелизм: каждое параллельное вычисление достаточно мало и элементарно, составляется из десятков команд. Обычно распараллеливаемыми единицами являются элементы выражения или отдельные итерации цикла, имеющие небольшие зависимости по данным. Сам термин «мелкозернистый параллелизм» говорит о простоте и быстроте любого вычислительного действия. Характерная особенность мелкозернистого параллелизма заключается в приблизительном равенстве интенсивности вычислений и обмена данными. Этот уровень параллелизма часто используется распараллеливающим (векторизирующим) компилятором.
Эффективное параллельное исполнение требует искусного баланса между степенью гранулярности программ и величиной коммуникационной задержки, возникающей между разными гранулами. В частности, если коммуникационная задержка минимальна, то наилучшую производительность обещает мелкоструктурное разбиение программы. Это тот случай, когда действует параллелизм данных. Если коммуникационная задержка велика (как в слабосвязанных системах), предпочтительней крупнозернистое разбиение программ.

9.1.1. Параллелизм уровня задания

Параллелизм уровня задания возможен между независимыми заданиями или их фазами. Основным средством реализации параллелизма на уровне заданий служат многопроцессорные и многомашинные вычислительные системы, в которых задания распределяются по отдельным процессорам или машинам. Однако, если трактовать каждое задание как совокупность независимых задач, реализация данного уровня возможна и в рамках однопроцессорной В С. В этом случае несколько заданий могут одновременно находиться в основной памяти ВС, при условии, что в каждый момент выполняется только одно из них. Когда выполняемое задание требует ввода/вывода, такая операция запускается, а до ее завершения остальные ресурсы ВС передаются другому заданию. По завершении ввода/вывода ресурсы ВС возвращаются заданию, инициировавшему эту операцию. Здесь параллелизм обеспечивается за счет того, что центральный процессор и система ввода/вывода работают одновременно, обслуживая разные задания.
В качестве примера рассмотрим вычислительную систему с четырьмя процессорами. ВС обрабатывает задания, классифицируемые как малое (S), среднее (М) и большое (L). Для выполнения малых заданий требуется один, средних два, а больших заданий четыре процессора. Обработка каждого задания занимает одну условную единицу времени. Первоначально существует такая очередь заданий: S M L S S M L L S M M (таблица 6).

Таблица 6

Время
Выполняемые задания
% использования ВС

1
S, M
75

2
L
100

3
S, S, М
100

4
L
100

5
L
100

6
S, М
75

7
М
50


При этом средний уровень использования ресурсов вычислительной системы равен 83,3%; на выполнение всех заданий требуется 7 единиц времени.
Для получения большей степени утилизации ресурсов ВС разрешим заданиям «выплывать» в начало очереди. Тогда можно получить следующую последовательность выполнения заданий: S M S L S M S L L M M (таблица 7).

Таблица 7

Время
Выполняемые задания
% использования ВС

1
S, M, S
100

2
L
100

3
S, М, S
100

4
L
100

5
L
100

6
М, М
100


При этом средний процент использования ресурсов ВС составляет 100%; на выполнение всех заданий требуется 6 единиц времени.
Параллелизм возникает также, когда у независимых заданий, выполняемых в ВС, имеются несколько фаз, например вычисление, запись в графический буфер, В/ВЫВ на диск или ленту, системные вызовы.
Пусть выполняется задание и оно для своего продолжения нуждается в выполнении ввода/вывода. По сравнению с вычислениями он обычно более длителен, поэтому текущее задание приостанавливается и запускается другое задание. Исходное задание активизируется после завершения ввода/вывода. Все это требует специального оборудования: каналов В/ВЫВ или специальных процессоров В/ ВЫВ. За то, как различные задания упорядочиваются и расходуют общие ресурсы, отвечает операционная система.

9.1.2. Параллелизм уровня программ

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

Таблица 8

Задача
Зрение
Манипуляция
Движение

Поиск розетки
X

X

Движение к розетке
X

X

Подключение к розетке
X
X



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

For I:=l to N do A(I):=B(I) + C(I)

Все суммы независимы, то есть вычисление Вi + Сi не зависит от Bj + Cj для любого j < i. Это означает, что вычисления могут производиться в любой последовательности и в вычислительной системе с N процессорами все суммы могут быть вычислены одновременно.
Общая форма параллелизма на уровне программ проистекает из разбиения программируемых данных на подмножества. Это разделение называют декомпозицией области (domain decomposition), а параллелизм, возникающий при этом, носит название параллелизма данных. Подмножества данных назначаются разным вычислительным процессам, и называется этот процесс распределением данных (data distribution). Процессоры выделяются определенным процессам либо по инициативе программы, либо в процессе работы операционной системой. На каждом процессоре может выполняться более чем один процесс.

9.1.3. Параллелизм уровня команд

Параллелизм на уровне команд имеет место, когда обработка нескольких команд или выполнение различных этапов одной и той же команды может перекрываться во времени. Разработчики вычислительной техники издавна прибегали к методам, известным под общим названием «совмещения операций», при котором аппаратура ВМ в любой момент времени выполняет одновременно более одной операции. Этот общий принцип включает в себя два понятия: параллелизм и конвейеризацию. Хотя у них много общего и их зачастую трудно различать на практике, термины эти отражают два принципиально различных подхода.
В первом варианте совмещение операций достигается за счет того, что в составе вычислительной системы отдельные устройства присутствуют в нескольких копиях. Так, в состав процессора может входить несколько АЛУ, и высокая производительность обеспечивается за счет одновременной работы всех этих АЛУ. Второй подход был описан ранее.

9.2. Метрики параллельных вычислений

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



9.2.1. Профиль параллелизма программы

Число процессоров многопроцессорной системы, параллельно участвующих в выполнении программы в каждый момент времени t, определяют понятием степень параллелизма D(t) (DOP, Degree Of Parallelism). Графическое представление параметра D(t) как функции времени называют профилем параллелизма программы. Изменения в уровне загрузки процессоров за время наблюдения зависят от многих факторов (алгоритма, доступных ресурсов, степени оптимизации, обеспечиваемой компилятором и т. д.). Типичный профиль параллелизма для алгоритма декомпозиции (divide-and-conquer algorithm) показан на рис. 86.
В дальнейшем будем исходить из следующих предположений: система состоит из п гомогенных процессоров; максимальный параллелизм в профиле равен т и, в идеальном случае, п >> т. Производительность А одиночного процессора системы выражается в единицах скорости вычислений (количество операций в единицу времени) и не учитывает издержек, связанных с обращением к памяти и пересылкой данных. Если за наблюдаемый период загружены i процессоров, то D = i.



Рис. 86. Профиль параллелизма.

Общий объем вычислительной работы W (команд или вычислений), выполненной начиная со стартового момента ts до момента завершения te, пропорционален площади под кривой профиля параллелизма:
13 EMBED Equation.3 1415.
Интеграл часто заменяют дискретным эквивалентом:
13 EMBED Equation.3 1415,
где 13 EMBED Equation.3 1415– общее время, в течение которого 13 EMBED Equation.3 1415, а 13 EMBED Equation.3 1415– общее затраченное время.
Средний параллелизм А определяется как
13 EMBED Equation.3 1415.
Профиль параллелизма на рисунке за время наблюдения (ts, te) возрастает от 1 до пикового значения т = 8, а затем спадает до 0. Средний параллелизм А = ( 1 х 5 + 2 x 3 + 3 x 4 + 4 x 6 + 5 x 2 + 6 x 2 + 8 x 3) /(5 + 3 + 4 + 6 + 2 + 2 + 3) = 93/25 = 3,72. Фактически общая рабочая нагрузка и А представляют собой нижнюю границу асимптотического ускорения.
Будем говорить, что параллельная программа выполняется в режиме i, если для ее исполнения задействованы i процессоров. Время, на продолжении которого система работает в режиме i, обозначим через ti, а объем работы, выполненной в режиме i, как 13 EMBED Equation.3 1415. Тогда, при наличии п процессоров время исполнения Т(п) для двух экстремальных случаев: п = 1(T(1)) и n =
·(T(
·)) можно записать в виде:
13 EMBED Equation.3 1415 и 13 EMBED Equation.3 1415.
Асимптотическое повышение быстродействия S
· определяется как отношение T(1) к T(
·):
13 EMBED Equation.3 1415.
Сравнивая это выражение и предыдущие уравнения, можно констатировать, что в идеальном варианте S
· = A. В общем случае нужно учитывать коммуникационные задержки и системные издержки. Отметим, что как S
· так и А были определены в предположении, что n >> m.
В прикладных программах имеется широкий диапазон потенциального параллелизма. М. Кумар в своей статье приводил данные, что в вычислительно интенсивных программах в каждом цикле параллельно могут выполняться от 500 до 3500 арифметических операций, если для этого имеется существующая вычислительная среда. Однако даже правильно спроектированный суперскалярный процессор способен поддерживать выполнение от 2 до 5,8 команды за цикл. Эти цифры дают пессимистическую картину возможного параллелизма.

9.2.2. Ускорение, эффективность, загрузка и качество

Рассмотрим параллельное выполнение программы со следующими характеристиками:
О(п) общее число операций (команд), выполненных на п-процессорной системе;
Т(п) время выполнения O(п) операций на «-процессорной системе в виде числа квантов времени.
В общем случае Т(п) < O(п), если в единицу времени п процессорами выполняется более чем одна команда, где п > 2. Примем, что в однопроцессорной системе T(1) = O(1).
Ускорение (speedup), или точнее, среднее ускорение за счет параллельного выполнения программы это отношение времени, требуемого для выполнения наилучшего из последовательных алгоритмов на одном процессоре, и времени параллельного вычисления на п процессорах. Без учета коммуникационных издержек ускорение S(n) определяется как
13 EMBED Equation.3 1415.
Как правило, ускорение удовлетворяет условию S(n) < п.
Эффективность (efficiency) n-процессорной системы это ускорение на один процессор, определяемое выражением
13 EMBED Equation.3 1415.
Эффективность обычно отвечает условию 1/п
· Е(п)
· п. Для более реалистичного описания производительности параллельных вычислений необходимо промоделировать ситуацию, когда параллельный алгоритм может потребовать больше операций, чем его последовательный аналог.
Довольно часто организация вычислений на п процессорах связана с существенными издержками. Поэтому имеет смысл ввести понятие избыточности (redundancy) в виде
13 EMBED Equation.3 1415.
Это отношение отражает степень соответствия между программным и аппаратным параллелизмом. Очевидно, что 1 < R(n) < п.
Определим еще одно понятие, коэффициент полезного использования или утилизации (utilization), как
13 EMBED Equation.3 1415.
Тогда можно утверждать, что
13 EMBED Equation.3 1415 и 13 EMBED Equation.3 1415.
Рассмотрим пример. Пусть наилучший из известных последовательных алгоритмов занимает 8с, а параллельный алгоритм занимает на пяти процессорах 2с. Тогда:
S(n) = 8/2 = 4;
E(n) = 4/5 = 0,8;
R(n) = 1/0,8 – 1 = 0,25.
Собственное ускорение определяется путем реализации параллельного алгоритма на одном процессоре.
Если ускорение, достигнутое на п процессорах, равно п, то говорят, что алгоритм показывает линейное ускорение.
В исключительных ситуациях ускорение S(n) может быть больше, чем п. В этих случаях иногда применяют термин суперлинейное ускорение. Данное явление имеет шансы на возникновение в двух следующих случаях:
Последовательная программа может выполняться в очень маленькой памяти, вызывая свопинги (подкачки), или, что менее очевидно, может приводить к большему числу кэш-промахов, чем параллельная версия, где обычно каждая параллельная часть кода выполняется с использованием много меньшего набора данных.
Другая причина повышенного ускорения иллюстрируется примером. Пусть нам нужно выполнить логическую операцию А1 v А2, где как А1, так и А2 имеют значение «Истина» с вероятностью 50%, причем среднее время вычисления Аi, обозначенное как T(Аi), существенно различается в зависимости от того, является ли результат истинным или ложным.
Пусть T(Аi)= 1c для Аi = 1; T(Аi)= 100c для Аi = 0. Теперь получаем четыре равновероятных случая (Т «истина», F «ложь», таблица 9).

Таблица 9

А1
А2
Последовательный
Параллельный

Т
Т
F
F
Т
F
Т
F
1с + 0
1с + 0
100 с + 1с
100 с +100 с
1 с


100с


·
303/4с
· 76с
103/4с
· 26с


Таким образом, параллельные вычисления на двух процессорах ведут к среднему ускорению:
13 EMBED Equation.3 1415.
Отметим, что суперлинейное ускорение вызвано жесткостью последовательной обработки, так как после вычисления еще нужно проверить A2. К факторам, ограничивающим ускорение, следует отнести:
Программные издержки. Даже если последовательные и параллельные алгоритмы выполняют одни и те же вычисления, параллельным алгоритмам присущи добавочные программные издержки дополнительные индексные вычисления, неизбежно возникающие из-за декомпозиции данных и распределения их по процессорам; различные виды учетных операций, требуемые в параллельных алгоритмах, но отсутствующие в алгоритмах последовательных.
Издержки из-за дисбаланса загрузки процессоров. Между точками синхронизации каждый из процессоров должен быть загружен одинаковым объемом работы, иначе часть процессоров будет ожидать, пока остальные завершат свои операции. Эта ситуация известна как дисбаланс загрузки. Таким образом, ускорение ограничивается наиболее медленным из процессоров.
Коммуникационные издержки. Если принять, что обмен информацией и вычисления могут перекрываться, то любые коммуникации между процессорами снижают ускорение. В плане коммуникационных затрат важен уровень гранулярности, определяющий объем вычислительной работы, выполняемой между коммуникационными фазами алгоритма. Для уменьшения коммуникационных издержек выгоднее, чтобы вычислительные гранулы были достаточно крупными и доля коммуникаций была меньше.
Еще одним показателем параллельных вычислений служит качество параллельного выполнения программ характеристика, объединяющая ускорение, эффективность и избыточность. Качество определяется следующим образом:
13 EMBED Equation.3 1415.
Поскольку как эффективность, так и величина, обратная избыточности, представляют собой дроби, то Q(n) < S(n). Поскольку Е(п) это всегда дробь, a R(n) число между 1 и п, качество Q(n) при любых условиях ограничено сверху величиной ускорения S(n).

9.3. Закон Амдала

Приобретая для решения своей задачи параллельную вычислительную систему, пользователь рассчитывает на значительное повышение скорости вычислений за счет распределения вычислительной нагрузки по множеству параллельно работающих процессоров. В идеальном случае система из п процессоров могла бы ускорить вычисления в п раз. В реальности достичь такого показателя по ряду причин не удается. Главная из этих причин заключается в невозможности полного распараллеливания ни одной из задач. Как правило, в каждой программе имеется фрагмент кода, который принципиально должен выполняться последовательно и только одним из процессоров. Это может быть часть программы, отвечающая за запуск задачи и распределение распараллеленного кода по процессорам, либо фрагмент программы, обеспечивающий операции ввода/вывода. Можно привести и другие примеры, но главное состоит в том, что о полном распараллеливании задачи говорить не приходится. Известные проблемы возникают и с той частью задачи, которая поддается распараллеливанию. Здесь идеальным был бы вариант, когда параллельные ветви программы постоянно загружали бы все процессоры системы, причем так, чтобы нагрузка на каждый процессор была одинакова. К сожалению, оба этих условия на практике трудно реализуемы. Таким образом, ориентируясь на параллельную ВС, необходимо четко сознавать, что добиться прямо пропорционального числу процессоров увеличения производительности не удастся, и, естественно, встает вопрос о том, на какое реальное ускорение можно рассчитывать. Ответ на этот вопрос в какой-то мере дает закон Амдала.
Джин Амдал (Gene Amdahl) один из разработчиков всемирно известной системы IBM 360, в своей работе, опубликованной в 1967 году, предложил формулу, отражающую зависимость ускорения вычислений, достигаемого на многопроцессорной ВС, от числа процессоров и соотношения между последовательной и параллельной частями программы. Показателем сокращения времени вычислений служит такая метрика, как «ускорение».
Напомним, что ускорение S это отношение времени Ts, затрачиваемого на проведение вычислений на однопроцессорной ВС (в варианте наилучшего последовательного алгоритма), ко времени Тр решения той же задачи на параллельной системе (при использовании наилучшего параллельного алгоритма):
13 EMBED Equation.3 1415.
Оговорки относительно алгоритмов решения задачи сделаны, чтобы подчеркнуть тот факт, что для последовательного и параллельного решения лучшими могут оказаться разные реализации, а при оценке ускорения необходимо исходить именно из наилучших алгоритмов.
Проблема рассматривалась Амдалом в следующей постановке (рис. 87). Прежде всего, объем решаемой задачи с изменением числа процессоров, участвующих в ее решении, остается неизменным. Программный код решаемой задачи состоит из двух частей: последовательной и распараллеливаемой. Обозначим долю операций, которые должны выполняться последовательно одним из процессоров, через f, где 0
· f
· 1 (здесь доля понимается не по числу строк кода, а по числу реально выполняемых операций). Отсюда доля, приходящаяся на распараллеливаемую часть программы, составит 1 – f. Крайние случаи в значениях/соответствуют полностью параллельным (f = 0) и полностью последовательным (f = 1) программам. Распараллеливаемая часть программы равномерно распределяется по всем процессорам.

Рис. 87. К постановке задачи в законе Амдала.

С учетом приведенной формулировки имеем:
13 EMBED Equation.3 1415.
В результате получаем формулу Амдала, выражающую ускорение, которое может быть достигнуто на системе из n процессоров:
13 EMBED Equation.3 1415.
Формула выражает простую и обладающую большой общностью зависимость. Если устремить число процессоров к бесконечности, то в пределе получаем:
13 EMBED Equation.3 1415.
Это означает, что если в программе 10% последовательных операций (то есть f=0,1), то, сколько бы процессоров ни использовалось, убыстрения работы программы более чем в десять раз никак ни получить, да и то, 10 это теоретическая верхняя оценка самого лучшего случая, когда никаких других отрицательных факторов нет. Следует отметить, что распараллеливание ведет к определенным издержкам, которых нет при последовательном выполнении программы. В качестве примера таких издержек можно упомянуть дополнительные операции, связанные с распределением программ по процессорам, обмен информацией между процессорами и т. д.

9.4. Закон Густафсона

Известную долю оптимизма в оценку, даваемую законом Амдала, вносят исследования, проведенные уже упоминавшимся Джоном Густафсоном из NASA Ames Research. Решая на вычислительной системе из 1024 процессоров три больших задачи, для которых доля последовательного кода лежала в пределах от 0,4 до 0,8%, он получил значения ускорения по сравнению с однопроцессорным вариантом, равные соответственно 1021,1020 и 1016. Согласно закону Амдала для данного числа процессоров и диапазона f, ускорение не должно было превысить величины порядка 201. Пытаясь объяснить это явление, Густафсон пришел к выводу, что причина кроется в исходной предпосылке, лежащей в основе закона Амдала: увеличение числа процессоров не сопровождается увеличением объема решаемой задачи. Реальное же поведение пользователей существенно отличается от такого представления. Обычно, получая в свое распоряжение более мощную систему, пользователь не стремится сократить время вычислений, а, сохраняя его практически неизменным, старается пропорционально мощности ВС увеличить объем решаемой задачи. И тут оказывается, что наращивание общего объема программы касается главным образом распараллеливаемой части программы. Это ведет к сокращению значения f. Примером может служить решение дифференциального уравнения в частных производных. Если доля последовательного кода составляет 10% для 1000 узловых точек, то для 100 000 точек доля последовательного кода снизится до 0,1%. Сказанное иллюстрирует рис. 88, который отражает тот факт, что, оставаясь практически неизменной, последовательная часть в общем объеме увеличенной программы имеет уже меньший удельный вес.

Рис. 88. К постановке задачи в законе Густафсона.

Было отмечено, что в первом приближении объем работы, которая может быть произведена параллельно, возрастает линейно с ростом числа процессоров в системе. Для того чтобы оценить возможность ускорения вычислений, когда объем последних увеличивается с ростом количества процессоров в системе (при постоянстве общего времени вычислений), Густафсон рекомендует использовать выражение, предложенное Е. Барсисом (Е. Barsis):
13 EMBED Equation.3 1415.
Данное выражение известно как закон масштабируемого ускорения или закон Густафсона (иногда его называют также законом Густафсона-Барсиса). В заключение отметим, что закон Густафсона не противоречит закону Амдала. Различие состоит лишь в форме утилизации дополнительной мощности ВС, возникающей при увеличении числа процессоров.

9.5. Классификация параллельных вычислительных систем. Классификация Флинна

Даже краткое перечисление типов современных параллельных вычислительных систем (ВС) дает понять, что для ориентирования в этом многообразии необходима четкая система классификации. От ответа на главный вопрос что заложить в основу классификации зависит, насколько конкретная система классификации помогает разобраться с тем, что представляет собой архитектура ВС и насколько успешно данная архитектура позволяет решать определенный круг задач. Попытки систематизировать все множество архитектур параллельных вычислительных систем предпринимались достаточно давно и длятся по сей день, но к однозначным выводам пока не привели.
Среди всех рассматриваемых систем классификации ВС наибольшее признание получила классификация, предложенная в 1966 году М. Флинном [99, 100]. В ее основу положено понятие потока, под которым понимается последовательность элементов, команд или данных, обрабатываемая процессором. В зависимости от количества потоков команд и потоков данных Флинн выделяет четыре класса архитектур: SISD, MISD, SIMD, MIMD.

SISD

SISD (Single Instruction Stream/Single Data Stream) одиночный поток команд и одиночный поток данных (рис. 89, а). Представителями этого класса являются, прежде всего, классические фон-неймановские ВМ, где имеется только один поток команд, команды обрабатываются последовательно и каждая команда инициирует одну операцию с одним потоком данных. То, что для увеличения скорости обработки команд и скорости выполнения арифметических операций может применяться конвейерная обработка, не имеет значения, поэтому в класс SISD одновременно попадают как ВМ CDC 6600 со скалярными функциональными устройствами, так и CDC 7600 с конвейерными. Некоторые специалисты считают, что к SISD-системам можно причислить и векторно-конвейерные ВС, если рассматривать вектор как неделимый элемент данных для соответствующей команды.

MISD

MISD (Multiple Instruction Stream/Single Data Stream) множественный поток команд и одиночный поток данных (рис. 89, б). Из определения следует, что в архитектуре ВС присутствует множество процессоров, обрабатывающих один и тот же поток данных. Примером могла бы служить ВС, на процессоры которой подается искаженный сигнал, а каждый из процессоров обрабатывает этот сигнал с помощью своего алгоритма фильтрации. Тем не менее ни Флинн, ни другие специалисты в области архитектуры компьютеров до сих пор не сумели представить убедительный пример реально существующей вычислительной системы, построенной на данном принципе. Ряд исследователей относят к данному классу конвейерные системы, однако это не нашло окончательного признания. Отсюда принято считать, что пока данный класс пуст. Наличие пустого класса не следует считать недостатком классификации Флинна. Такие классы, по мнению некоторых исследователей, могут стать чрезвычайно полезными для разработки принципиально новых концепций в теории и практике построения вычислительных систем.


Рис. 89. Архитектура вычислительных систем по Флинну: а – SISD; б –MISD; в – SIMD; г – MIMD.

SIMD

SIMD (Single Instruction Stream/Multiple Data Stream) одиночный поток команд и множественный поток данных (рис. 89, в). ВМ данной архитектуры позволяют выполнять одну арифметическую операцию сразу над многими данными элементами вектора. Бесспорными представителями класса SIMD считаются матрицы процессоров, где единое управляющее устройство контролирует множество процессорных элементов. Все процессорные элементы получают от устройства управления одинаковую команду и выполняют ее над своими локальными данными. В принципе в этот класс можно включить и векторно-конвейерные ВС, если каждый элемент вектора рассматривать как отдельный элемент потока данных.


MIMD

MIMD (Multiple Instruction Stream/Multiple Data Stream) – множественный поток команд и множественный поток данных (рис. 89, г). Класс предполагает наличие в вычислительной системе множества устройств обработки команд, объединенных в единый комплекс и работающих каждое со своим потоком команд и данных. Класс MIMD чрезвычайно широк, поскольку включает в себя всевозможные мультипроцессорные системы. Кроме того, приобщение к классу MIMD зависит от трактовки. Так, ранее упоминавшиеся векторно-конвейерные ВС можно вполне отнести и к классу MIMD, если конвейерную обработку рассматривать как выполнение множества команд (операций ступеней конвейера) над множественным скалярным потоком.
Схема классификации Флинна вплоть до настоящего времени является наиболее распространенной при первоначальной оценке той или иной ВС, поскольку позволяет сразу оценить базовый принцип работы системы, чего часто бывает достаточно. Однако у классификации Флинна имеются и очевидные недостатки, например неспособность однозначно отнести некоторые архитектуры к тому или иному классу. Другая слабость это чрезмерная насыщенность класса MIMD. Все это породило множественные попытки либо модифицировать классификацию Флинна, либо предложить иную систему классификации.

Контрольные вопросы

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

ЗАКЛЮЧЕНИЕ

Охватить все аспекты строения и организации вычислительных машин в одном издании (да и в рамках одного курса) не представляется возможным. Знания в этой области человеческой деятельности развиваются стремительно, и для поддержания соответствующего профессионального уровня специалист обязан не прекращать самообучение. Тем не менее, авторы надеются, что читатель увидел основные направления и тенденции в развитии вычислительной техники, а также осознал, что рассматривая какое либо техническое или архитектурное решение в области вычислительной техники, необходимо ответить не только на вопрос «как это функционирует?» но и «почему это сделано именно так?». Только такой анализ позволит эффективно применять полученные знания, быстро получать новые знания, и кто знает, может быть даже вписать свою страницу в историю развития информационных технологий.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Авен, О. И. Оценка качества и оптимизации вычислительных систем / О.И. Авен, Н. Я . Турин, А. Я. Коган. – М.: Наука, 1982. – 464 с.
Воеводин, В. В. Параллельные вычисления / В. В. Воеводин, Вл.В. Воеводин. – СПб.: БХВ-Петербург, 2002. – 608 с.
Воеводин, Вл. В. Методы описания и классификации вычислительных систем / Вл. В. Воеводин, А. П. Капитонова. – М.: Изд. МГУ, 1994. – 103 с.
Каган, Б. М. Электронные вычислительные машины и системы / Б. М. Каган. – М.: Энергоатомиздат, 1991. – 592 с.
Кургаев, А. Ф. Об оценке эффективности системы команд ЭВМ / А. Ф. Кургаев, А. В. Писарский. – УСИМ, 1981, № 1.– С. 40-44.
Ларионов, А. М. Вычислительные комплексы, системы и сети / А. М. Ларионов. – М.: Энергоатомиздат, 1987. – 287 с.
Мураховский, В. И. Железо ПК. Новые возможности / В. И. Мураховский. – СПб.: Питер, 2005. – 592с.
Опадчий, Ю. Ф. Аналоговая и цифровая электроника / Ю. Ф. Опадчий, О. П. Глудкин, А. И. Гуров. – М.: Горячая линия Телеком, 2002. – 768 с.
Основы современных компьютерных технологий // Под ред. А. Д. Хомоненко. – СПб: КОРОНА принт, 1998. – 448 с.
Цилькер, Б. Я. Архитектура вычислительных систем / Б. Я. Цилькер, В. П. Пятков. – Рига: TSI, 2001.– 249с.
Цилькер, Б. Я. Организация ЭВМ и систем / Б. Я. Цилькер, С. А. Орлов. – СПб.: Питер, 2007. – 668с.
Юров, В. Assembler / В. Юров. – СПб.: Питер, 2000. – 624с.
Flood J. E. Telecommunications Switching, Traffic and Networks / J.E. Flood Prentice-Hall, 1995.
Flynn, M.J. Parallel Processors Were the Future... and May Yet Be / M. J. Flynn. – IEEE Computer, Vol. 29, №. 12, Dec. 1996, pp. 151-152.
Hwang, K. Scalable parallel computing / K. Hwang, Z. Xu. – McGraw-Hill, 1998. – 356p.










13PAGE 15


13PAGE 14215




Root EntryEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeСистема на основе PCIКонвейеризация AGPСравнение топологий PCI и PCI ExpressВзаимодействие встроенного APIC и внешнего контроллера прерыванийEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native

Приложенные файлы

  • doc 17770364
    Размер файла: 2 MB Загрузок: 1

Добавить комментарий