Архитектура аппаратных средств
Лекция · 4 академических часа
Тема: «Архитектура и принципы работы основных логических блоков системы». Часть 1: Логические основы ЭВМ, элементы и узлы. Часть 2: Принципы организации ЭВМ.
В предыдущей лекции мы говорили о классах вычислительных машин — от калькулятора до суперкомпьютера. Но мы ещё не разбирались, как именно машина выполняет вычисления. Ответ кроется в двух вещах: в логических элементах, из которых собраны все цифровые схемы, и в принципах организации, которые связывают эти элементы в единую систему. Именно этому и посвящена наша сегодняшняя лекция.
Лекция состоит из двух больших частей. Сначала мы спускаемся на самый нижний уровень — к отдельным логическим элементам, а затем поднимаемся вверх, к архитектуре компьютера. Такая последовательность не случайна: понять, как работает процессор, невозможно, не понимая, из чего он собран.
Цель лекции: понять, как из простейших логических элементов строится процессор, память и весь компьютер. К концу лекции вы должны уметь объяснить путь от транзистора до работающей программы.
В цифровой технике используются два устойчивых уровня напряжения. Они обозначают логический 0 и логическую 1. Почему именно два уровня, а не десять? Потому что два состояния гораздо проще надёжно различать в условиях помех. Любое промежуточное значение можно однозначно отнести к нулю или единице, если задать пороги.
Важно: цифровая схема «видит» только два состояния. Всё, что между ними, — неопределённость, которая может привести к сбою. Именно поэтому в цифровой технике так тщательно нормируются уровни и помехоустойчивость.
Существует два основных способа представления двоичной информации электрическими сигналами. Выбор способа зависит от того, нужно ли хранить информацию или передавать её.
В потенциальном коде сигнал как бы «застывает» на одном уровне, и схема может его считывать в любой момент. В импульсном коде важна именно динамика: переход из 0 в 1 (фронт) или из 1 в 0 (срез). Многие устройства синхронизируются именно по фронту тактового сигнала.
Булева алгебра — это математический аппарат, созданный Джорджем Булем в XIX веке для описания логических высказываний. Спустя сто лет Клод Шеннон заметил, что её можно применить к электрическим схемам: замкнутый контакт — это 1, разомкнутый — 0. Так родилась цифровая схемотехника.
Булева алгебра оперирует двумя значениями: 0 и 1. Основные аксиомы:
A · 1 = A — умножение на 1 не меняетA · 0 = 0 — умножение на 0 даёт 0A · A = A — идемпотентностьA · ¬A = 0 — противоречие невозможноA + 1 = 1 — сложение с 1 даёт 1A + 0 = A — сложение с 0 не меняетA + A = A — идемпотентностьA + ¬A = 1 — исключённое третьеПринцип двойственности: если в формуле заменить И на ИЛИ, ИЛИ на И, 0 на 1 и 1 на 0, получится также верная формула. Это позволяет получать новые законы бесплатно — просто «отражая» уже известные.
A · 0 = 0 по двойственности получаем A + 1 = 1.
Законы позволяют упрощать логические выражения и строить оптимальные схемы. Чем проще выражение — тем меньше элементов, тем дешевле и надёжнее устройство.
A + B = B + A, A · B = B · A — порядок операндов не важен.(A + B) + C = A + (B + C) — порядок группировки не важен.A · (B + C) = A·B + A·C — аналог раскрытия скобок в обычной алгебре.A + A·B = A, A · (A + B) = A — «лишний» член поглощается.A·B + A·¬B = A — два члена, различающиеся одним множителем, склеиваются.¬(A·B) = ¬A + ¬B, ¬(A+B) = ¬A · ¬B — инверсия «переворачивает» операцию.A·B + A·¬B = A·(B + ¬B) = A·1 = A. Схема упростилась с трёх элементов (два И, одно ИЛИ) до одного элемента И. Экономия транзисторов, площади кристалла и потребления.
Конъюнкция — логическое умножение. Обозначения: AND, И, &, ·. Это одна из двух базовых операций булевой алгебры.
Результат равен 1, только если все входы равны 1. Если хотя бы один вход равен 0, результат тоже 0.
Аналогия: два последовательных выключателя в цепи. Ток пойдёт, только если оба замкнуты. Разомкнут хотя бы один — цепь разорвана.
Дизъюнкция — логическое сложение. Обозначения: OR, ИЛИ, |, +. Вторая базовая операция булевой алгебры.
Результат равен 1, если хотя бы один вход равен 1. Результат 0 — только если все входы равны 0.
Аналогия: два параллельных выключателя. Ток пойдёт, если замкнут хотя бы один из них. Чтобы цепь была разорвана, нужно разомкнуть оба.
Инверсия — логическое отрицание. Обозначения: NOT, НЕ, ¬, ~.
Результат противоположен входу. Это единственная унарная операция из базовых — она работает с одним входом.
Аналогия: перекидной выключатель. Вход «включено» — выход «выключено». Инверсия — самый простой логический элемент, но без неё невозможно построить ни одну сложную схему.
XOR — сложение по модулю 2. Обозначения: XOR, ⊕. Эта операция не входит в число базовых, но чрезвычайно важна в цифровой технике.
Результат равен 1, если входы различны. Если входы одинаковы — результат 0.
Свойства: A ⊕ 0 = A (не меняет), A ⊕ 1 = ¬A (инвертирует), A ⊕ A = 0 (гасит), A ⊕ B = B ⊕ A (переместительность). XOR — основа сумматора и контроля чётности.
NAND = AND + NOT. Результат равен 0, только если все входы равны 1. Во всех остальных случаях — 1.
Это инвертированная конъюнкция. Именно NAND чаще всего используется в реальных микросхемах, потому что его проще всего изготовить в КМОП-технологии.
Универсальность: из NAND можно собрать И, ИЛИ и НЕ. Это значит, что любая логическая схема может быть построена только на элементах NAND. Именно поэтому в микросхемах часто используют именно NAND — не нужно изготавливать разные типы элементов.
NOT A = A NAND A; A AND B = NOT(A NAND B); A OR B = (NOT A) NAND (NOT B). Три формулы — и любая схема становится реализуемой на одном типе элемента.
NOR = OR + NOT. Результат равен 1, только если все входы равны 0. Во всех остальных случаях — 0.
Это инвертированная дизъюнкция. Второй универсальный элемент цифровой схемотехники.
Универсальность: как и NAND, NOR является универсальным элементом. Из него можно собрать любую логическую схему. В КМОП-технологии NOR также очень удобен для изготовления.
NOT A = A NOR A; A OR B = NOT(A NOR B); A AND B = (NOT A) NOR (NOT B). Используя только NOR, можно реализовать и сумматор, и триггер, и весь процессор.
Таблица истинности — таблица, показывающая выход функции для всех возможных комбинаций входов. Это универсальный способ описания логической функции, не требующий знания её формулы.
n входов — 2ⁿ строк. Один вход — 2 строки, два — 4, три — 8, четыре — 16.F = 1 при (0,0), (1,0), (1,1). Это можно записать как F = ¬A¬B + A¬B + AB и упростить до F = ¬B + A. Проверьте: при B=0 результат всегда 1, при B=1 результат равен A.
Две канонические формы записи логической функции. Они позволяют механически, без размышлений, записать функцию по её таблице истинности.
F = ¬A¬B + AB.F = (A + ¬B) · (¬A + B).СДНФ и СКНФ — отправные точки для минимизации логических функций. Они всегда верны, но почти всегда избыточны: содержат лишние члены, которые можно убрать.
F = ¬A¬B + A¬B + AB в СДНФ содержит три минтерма. После упрощения остаётся F = ¬B + A — всего два члена. Экономия очевидна.
Карта Карно — графический метод минимизации логических функций. Позволяет находить минимальные ДНФ и КНФ, не прибегая к громоздким алгебраическим преобразованиям.
F = ¬A¬B + A¬B + AB карта Карно даёт группу из двух единиц (¬B) и одну единицу (A). Итог: F = ¬B + A. То же самое, что мы получили алгебраически, но быстрее и нагляднее.
Для функций с числом переменных больше 4 карты Карно становятся громоздкими, и применяют другие методы (Квайна — Мак-Класки, алгоритмы на ЭВМ).
Логический элемент — электронная схема, реализующая одну логическую операцию. Это базовый «кирпичик» цифровых устройств, аналог транзистора в аналоговой технике.
NAND и NOR называются универсальными — из них можно собрать любую схему. Это важно для производства: не нужно изготавливать разные типы элементов, достаточно одного.
Логические элементы выпускаются в виде интегральных микросхем. Основные серии отличаются технологией изготовления и, соответственно, характеристиками.
При выборе элемента важно учитывать его характеристики. Эти параметры определяют, подходит ли элемент для конкретной задачи.
Комбинационная схема — схема, выход которой зависит только от текущих входов (без памяти). Противоположность — последовательностная схема, у которой есть память.
Этапы синтеза:
Цель синтеза — получить схему с минимальным числом элементов и минимальной задержкой. Иногда эти критерии противоречат друг другу, и приходится искать компромисс.
Полусумматор — комбинационная схема для сложения двух одноразрядных чисел. Даёт сумму S и перенос C. Это простейший арифметический узел.
Формулы: S = A ⊕ B (сумма — это XOR), C = A · B (перенос — это AND). Полусумматор не учитывает перенос от младшего разряда, поэтому для многоразрядного сложения он не годится.
Полный сумматор складывает три бита: A, B и перенос Pin от предыдущего разряда. Даёт сумму S и перенос Pout. Это основной узел многоразрядного сумматора.
Формулы: S = A ⊕ B ⊕ Pin, Pout = A·B + A·Pin + B·Pin. Перенос формируется, если хотя бы два из трёх входов равны 1 — это «правило большинства».
Из полных сумматоров строится многоразрядный сумматор — основа АЛУ. Он складывает числа целиком, а не по битам.
Дешифратор преобразует двоичный код в унитарный: активирует один из 2ⁿ выходов. На всех остальных выходах — 0.
Применение: выборка ячейки памяти по адресу, выбор устройства на шине, декодирование команд процессора. Дешифратор — «переводчик» с двоичного языка на язык «один из многих».
Шифратор — устройство, обратное дешифратору: 2ⁿ входов → n выходов. Преобразует номер активного входа в двоичный код.
Приоритетный шифратор — если активны несколько входов, на выходе код старшего. Это важно в системах прерываний: если пришли два прерывания, обрабатывается более важное.
Мультиплексор — устройство, которое выбирает один из n входов и передаёт его на выход. Как коммутатор в телефонной сети.
n информационных входов, log₂n управляющих.Демультиплексор — обратная мультиплексору операция: один вход распределяется по одному из 2ⁿ выходов.
n управляющих входов.2ⁿ выходов.Мультиплексор и демультиплексор часто работают в паре: один собирает данные в один поток, другой распределяет обратно. Это основа временного уплотнения каналов связи.
Компаратор сравнивает два двоичных числа и выдаёт результат: равно, больше, меньше.
A = B, A > B, A < B.Формулы (одноразрядный): A=B = ¬(A ⊕ B); A>B = A·¬B; A<B = ¬A·B. Компаратор — «судья», решающий, какое из чисел больше.
CMP в процессоре использует компаратор для установки флагов. Потом команда JE (jump if equal) проверяет флаг равенства и выполняет переход, если числа равны.
АЛУ — комбинационный узел, выполняющий арифметические и логические операции над данными. Это «вычислительное сердце» процессора.
ADD АЛУ складывает два операнда и выставляет флаг переноса, если результат не поместился в разрядную сетку. Флаги потом используются для условных переходов.
Комбинационные схемы не имеют памяти. Их выход зависит только от текущих входов. Это «мгновенные» устройства: подали вход — сразу получили выход.
Из этих узлов строятся более сложные устройства: процессоры, контроллеры, память. Но для хранения данных нужны схемы с памятью — их мы рассмотрим дальше.
RS-триггер — простейший триггер с входами установки (S — Set) и сброса (R — Reset). Первая схема с памятью.
Триггер хранит один бит: после установки или сброса он остаётся в этом состоянии, пока не придёт новый сигнал. Это и есть память.
Проблема: комбинация S=1, R=1 запрещена — состояние не определено. Это ограничение обходят в других типах триггеров (D, JK).
D-триггер — триггер задержки. Запоминает вход D по фронту тактового сигнала C. Самый распространённый тип триггера в цифровых устройствах.
D-триггер — основа регистров, памяти, сдвиговых устройств. Он назван «задержкой» потому, что выход Q повторяет вход D, но с задержкой на один такт.
JK-триггер назван по именам изобретателей (Jack Kilby). Это самый универсальный триггер: из него можно получить любой другой тип.
Регистр — набор триггеров для хранения и обработки многоразрядных чисел. Это «быстрая память» внутри процессора.
В процессоре x86 есть регистры RAX, RBX, RCX — 64-битные регистры общего назначения. Они используются для временного хранения операндов при вычислениях.
ADD RAX, RBX процессор складывает содержимое двух регистров и записывает результат в RAX. Операция выполняется за один такт — это быстрее, чем обращаться к памяти.
Счётчик — регистр, который изменяет своё значение по тактовому сигналу. Это «шагомер» цифровых схем.
Счётчики используются в таймерах, делителях частоты, измерителях времени, адресных устройствах памяти.
SRAM (Static RAM) — статическая память на триггерах. Быстрая, но дорогая. «Статическая» — потому что не требует регенерации.
DRAM (Dynamic RAM) — динамическая память на конденсаторах. Дешевле, но требует регенерации (конденсатор разряжается). Используется как оперативная память.
Энергонезависимая память для хранения прошивок и постоянных данных. Данные сохраняются после отключения питания.
Flash-память используется в SSD, USB-флешках, картах памяти. Она сочетает энергонезависимость ROM с возможностью перезаписи.
ПЛМ — микросхема, которую можно запрограммировать на реализацию логической функции. Не нужно собирать схему из отдельных элементов — достаточно «залить» конфигурацию.
FPGA — это «пластилин» цифровой схемотехники: из одного и того же кристалла можно сделать и процессор, и видеоускоритель, и систему управления.
Мы рассмотрели:
Из этих элементов и узлов строятся все цифровые устройства: процессоры, память, контроллеры. Теперь, зная «кирпичики», перейдём к тому, как из них собирается компьютер.
Часть 2. Принципы организации ЭВМ
Теперь, когда мы знаем, из чего строятся цифровые устройства, разберём, как из них собирается компьютер. От отдельных элементов переходим к архитектуре.
Архитектура ЭВМ отвечает на вопросы: как связаны между собой процессор, память и устройства ввода-вывода? Как передаются данные? Как процессор понимает, что делать? Как программа превращается в последовательность электрических сигналов?
Часть 2 опирается на часть 1: без логических элементов и узлов невозможно понять работу процессора и памяти.
В 1945 году Джон фон Нейман сформулировал принципы, по которым работают почти все современные компьютеры. Эти принципы были изложены в отчёте о машине EDVAC и стали фундаментом вычислительной техники.
Ключевая идея фон Неймана: программа хранится в той же памяти, что и данные. Это кажется очевидным сегодня, но в 1940-е это была революция.
Следствие: компьютер стал универсальным. Одна машина решает разные задачи при смене программы. Без этого принципа не было бы ни операционных систем, ни компиляторов, ни интернета.
Гарвардская архитектура — альтернатива фон Нейману: команды и данные в разных памятях и на разных шинах. Названа по имени гарвардского Mark I, где впервые была применена.
Современные ПК используют фон Неймана, но с раздельными кэшами команд и данных — гибридный подход. Это позволяет совместить гибкость с производительностью.
Современные компьютеры строятся по магистрально-модульному принципу. Это означает, что компьютер состоит из отдельных блоков (модулей), соединённых общей шиной (магистралью).
Три шины магистрали:
Преимущества: модульность, лёгкая замена и расширение, упрощение проектирования. Именно поэтому можно заменить видеокарту, не меняя весь компьютер.
Процессор — центральный блок ЭВМ, выполняющий команды программы. Это «мозг» компьютера, собранный из миллионов логических элементов.
ADD УУ декодирует команду, АЛУ складывает числа, результат идёт в регистр. Все эти блоки работают синхронно, по тактовому сигналу.
Процессор выполняет команды циклически. Каждая команда проходит одни и те же этапы, независимо от её типа.
Этот цикл повторяется для каждой команды. Миллиарды раз в секунду. Именно поэтому компьютер кажется «мгновенным».
ADD RAX, RBX процессор выбирает команду из памяти, декодирует её, читает RAX и RBX, складывает их в АЛУ, записывает результат в RAX.
Конвейер — параллельное выполнение разных этапов разных команд. Это способ ускорить процессор без роста тактовой частоты.
Система команд — набор операций, выполняемых процессором. Это «словарь» языка, на котором программа общается с процессором.
Система команд определяет архитектуру процессора. CISC — много сложных команд, RISC — мало простых. Об этом дальше.
MOV RAX, 5 — загрузить 5 в регистр; ADD RAX, RBX — сложить; JMP label — перейти на метку. Эти команды выполняются миллионы раз в секунду.
Адресация — способ указания, где находятся данные. От режима адресации зависит гибкость процессора.
Чем больше режимов адресации, тем гибче процессор, но тем сложнее его декодер команд.
Кэш-память — быстрая память между процессором и оперативной памятью. Хранит часто используемые данные, чтобы не ждать медленную RAM.
Попадание — данные найдены в кэше. Промах — нужно читать из оперативной памяти, это медленно. Чем выше процент попаданий, тем быстрее работает процессор.
Иерархия памяти — уровни памяти с разной скоростью и объёмом. Чем быстрее память, тем она дороже и меньше по объёму.
Принцип локальности: процессор чаще обращается к недавним данным. Кэш хранит их, чтобы не ждать медленную память. Без этого принципа иерархия памяти не работала бы.
Виртуальная память — механизм, позволяющий программам использовать больше памяти, чем установлено физически. Это «обманка», которая делает жизнь программиста проще.
Прерывание — сигнал, заставляющий процессор временно перейти к обработке события. Это механизм реакции на внешние события в реальном времени.
Зачем нужны: позволяют реагировать на события в реальном времени, не тратя время на постоянную проверку устройств. Без прерываний процессор должен был бы опрашивать все устройства по очереди.
DMA — механизм обмена данными между устройством и памятью без участия процессора. Это «разгрузка» процессора от рутинной работы.
Без DMA процессор должен был бы сам пересылать каждый байт, что отнимало бы всё его время. С DMA процессор только отдаёт команду и получает прерывание о завершении.
УВВ — обеспечивают обмен информацией между ЭВМ и внешним миром. Без них компьютер был бы бесполезен: он не знал бы, что делать, и не мог бы показать результат.
Некоторые устройства выполняют обе функции: сетевые карты, модемы, сенсорные экраны, внешние диски.
Устройства подключаются к компьютеру через интерфейсы. От интерфейса зависит скорость обмена и удобство подключения.
Два принципиально разных подхода к построению системы команд.
Многоядерный процессор — несколько ядер на одном кристалле. Каждое ядро — полноценный процессор со своим АЛУ и регистрами.
Закон Мура: число транзисторов удваивается каждые 2 года. Частота перестала расти — стали увеличивать число ядер. Но не все задачи распараллеливаются, поэтому 8 ядер не всегда в 8 раз быстрее 1.
Гетерогенные вычисления — совместное использование разных типов процессоров. Каждый тип решает свою задачу лучше остальных.
Гетерогенные вычисления — главный тренд современной архитектуры. Один универсальный процессор уже не справляется с разнообразием задач.
Современный ПК — сложная система из множества компонентов, связанных шинами.
Северный мост — связь CPU с памятью и GPU. Южный мост — с медленными устройствами. В современных процессорах северный мост часто встроен в CPU.
Мобильные устройства используют System-on-Chip (SoC) — все компоненты на одном кристалле. Это позволяет уменьшить размер и энергопотребление.
Архитектура ЭВМ продолжает развиваться. Главные направления:
Как выбрать подходящую архитектуру для задачи? Универсального ответа нет — всё зависит от приоритетов.
Мы рассмотрели:
Понимание логических основ и принципов организации ЭВМ позволяет понять, как работает любой компьютер — от микроконтроллера до суперкомпьютера. Мы прошли путь от транзистора до программы.
Вопросы?
Следующая лекция — архитектура процессоров и вычислительных систем.