Your AI powered learning assistant

[s1 | 2025] Архитектура ЭВМ, Роман Мельников, лекция 2

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

Записи и ресурсы, размещенные с закрепленными ссылками Записи лекций появятся на VK (C лекциями) и YouTube (Curers), а ссылки на них уже будут закреплены в Telegram. В прикрепленных сообщениях также есть набор слайдов (Prezi) и Google Doc со списком вопросов. Предполагается, что текущая тема будет раскрыта полностью, если позволит время.

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

В начале урока запланированы короткие 20‑минутные викторины Занятия будут периодически открываться короткими тестами. Если сегодняшний план будет выполнен, в начале следующей недели будет проведен примерно 20‑минутный тест в Google Doc. Для этого потребуются некоторые расчеты, размышления и краткие ответы, а объявление об этом будет сделано в классе и на канале.

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

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

Дискретные уровни напряжения требуют тщательного проектирования затвора В цифровых схемах используются дискретные диапазоны напряжений: низкое или близкое к нулю значение для 0, близкое к напряжению питания для 1. На основе двух типов транзисторов создаются простые логические функции. Простое прохождение единицы по каналу N‑типа и нуля по каналу P‑типа приводит к помехам, описанным выше. Такие конструкции снижают уровень сигнала до неопределенного, и их следует избегать.

PN‑переход имел значение только как отправная точка низкого уровня Краткий экскурс в PN-соединение позволил лишь углубиться в тему на низком физическом уровне. Запоминание этих деталей необязательно; основное внимание уделяется созданию логических элементов на этом фундаменте.

Закон Мура стал дорожной картой отрасли Наблюдение Мура начиналось с удвоения каждые 12 месяцев и было пересмотрено до 24 месяцев примерно десять лет спустя. Это стало отраслевым планом, которому следовали производители. Современные процессоры содержат порядка миллиардов транзисторов. Графики с течением времени отслеживают количество транзисторов, производительность одноядера, частоту, энергопотребление и количество ядер.

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

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

Скорость распространения сигнала ограничивает высокие тактовые частоты Скорость распространения сигнала на кристалле ограничена примерно на 60-70% от скорости света. При экстремальных тактах сигнал может не пройти через матрицу в течение одного цикла. Даже до достижения этого жесткого предела ограничение усложняет дальнейший рост частоты.

Производительность перешла на многоядерный параллелизм Производители перешли от увеличения тактовой частоты (вертикальное масштабирование) к добавлению ядер (горизонтальное масштабирование). Pentium 4 был, по сути, последним одноядерным процессором Intel. Ранние многоядерные процессоры, такие как Core 2 Duo, объединяли две матрицы под одним распределителем тепла.

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

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

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

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

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

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

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

Знак‑величина: знаковый бит плюс величина В знаковой величине старший бит содержит знак, а остальные кодируют величину. Нулевой знак обозначает положительное число, единица - отрицательное. Положительные значения отражают натуральную двоичную систему счисления; при переключении знакового бита получается отрицательная копия. При n битах диапазон симметричен относительно нуля, но включает как +0, так и -0.

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

Смещенный код: сдвиг интервала и декодирование путем вычитания смещения Смещенное представление сдвигает беззнаковый интервал влево таким образом, что все нули кодируют наиболее отрицательное значение, а все единицы - наиболее положительное. При 8 битах 00000000 означает -128, а 111111111 - +127. Для декодирования считайте биты как беззнаковые и вычитайте смещение (например, 128).

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

Одно дополнение: отрицание побитовой инверсией В дополнение к этому, положительные числа не отличаются от натуральных двоичных, а отрицательные числа кодируются путем инвертирования каждого бита величины. Это дает симметричный диапазон, но снова вводит как +0, так и -0. Число и его инвертированный аналог суммируются в слово из всех единиц.

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

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

Отрицательные значения в дополнении к Единицам - это чистые инверсии битов Отрицательное значение формируется путем инвертирования каждого бита его положительного аналога. Диапазон симметричен, что приводит как к положительному, так и к отрицательному нулю. Арифметика с отрицательными операндами по-прежнему работает, если включен обратный перенос. Несмотря на то, что эта кодировка работоспособна, сегодня она редко используется.

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

Инвертируйте, Затем Добавьте Единицу, Чтобы Получить Отрицательное Дополнение К Двум Начните с двоичного кода положительной величины, инвертируйте все биты и добавьте единицу. Одно только инвертирование приводит к уменьшению результата на единицу; дополнительная единица исправляет его. Это дает точное аддитивное обратное значение без введения отрицательного нуля. Метод работает одинаково для любой разрядности.

Диапазон Дополнения Two Асимметричен на Единицу Отображаемый интервал простирается от самого отрицательного значения до значения, на единицу меньшего, чем его положительное зеркальное отображение. Восемь битов означают от -128 до 127. Имеется одно дополнительное отрицательное значение и нет дублирующегося нуля. Знак может быть считан непосредственно из верхнего бита.

Сложение С Экстремумами Приводит К Тому, Что Все Единицы Равны -1 Сложение минимального и максимального значений дает слово, состоящее из всех единиц. Интерпретируемое как дополнение к двоичному, оно равно -1. Сложение двух положительных операндов ведет себя как обычное двоичное сложение, пока не произойдет переполнение. Такое объединение является ожидаемым следствием ограниченной ширины.

Добавление Двух Негативов Работает Без Особых Правил Суммирование отрицательных операндов в дополнении two - это обычное двоичное сложение, выполняемое по битам. Окончательное выполнение отбрасывается. Результирующий битовый набор декодируется до правильной отрицательной суммы. Примеры, такие как -6 плюс -8, корректно вычисляются в пределах диапазона.

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

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

Считывание Знака Со Старшего Значащего Бита Верхний бит определяет знак целого числа, дополняющего двойку. Единица обозначает отрицательное число, а ноль - неотрицательное. Этот быстрый тест является надежным для интерпретации сохраненных значений. Он лежит в основе многих управляющих решений в низкоуровневом коде.

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

Безопасное Сравнение С Помощью Проверки Знаков И Переполнения Сначала проверьте знаки операндов: если они отличаются, отрицательное значение будет меньше. Если знаки совпадают, вычитание может определить соотношение при условии учета переполнения. Правильное сравнение должно включать обнаружение переполнения, а не только знак различия. Простые комбинации соответствующих флагов позволяют избежать ошибок.

Отрицательная Двоичная Система Использует Базу -2 С Чередующимися Весами Знаковая система может быть сформирована с основанием -2, где значения в знаке чередуются. Она поддерживает представление целых чисел без отдельного знакового бита. Преобразование и арифметика возможны, но неудобны. Такой подход скорее любопытен, чем практичен.

Зигзагообразное кодирование Эффективно упаковывает небольшие значения Преобразование 0, 1, -1, 2, -2, 3, -3, ... в 0, 1, 2, 3, 4, 5, 6, ... преобразует значения со знаком в небольшие беззнаковые коды. Небольшие абсолютные значения, включая отрицательные, занимают несколько бит. Преобразование осуществляется с помощью простых побитовых операций. Оно используется в буферах протоколов для компактной сериализации целых чисел, в отличие от форматов, в которых по умолчанию используются числа с плавающей запятой.

Двоичные дроби Отражают значение десятичного знака Биты, расположенные слева от точки, имеют вес 2^0, 2^1, 2^2, и так далее. Биты, расположенные справа, имеют вес 2^-1, 2^-2, 2^-3, и т.д. Дробная часть 0,875 отображается как 1/2 + 1/4 + 1/8. Механизм действия идентичен десятичным дробям, но в базовой два.

Функция Умножения на Два Преобразует Десятичные Дроби в Двоичные Чтобы преобразовать десятичную дробь, многократно умножьте ее дробный остаток на два и запишите целые части. Последовательность для 0,875 дает 1, затем 1, затем 1 и затем нули, что дает 0,111₂. Многие десятичные дроби, такие как 0,1, образуют повторяющиеся последовательности, а не заканчиваются. В результате получается двоичная дробь с периодическим значением.

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

Фиксированная Точка Разделяет Биты На Целые И Дробные Части В формате с фиксированной запятой некоторые биты относятся к целой части, а некоторые - к дробной. Отрицательные значения могут дополняться одним или двумя знаковыми битами по всему слову. Имена типов, такие как FX16Q16T и FX5Q27T, указывают, сколько битов получает каждая сторона. При выполнении арифметических операций операнды должны иметь одинаковую позицию двоичной точки.

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

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

Пример: 13.875 Как 32-Разрядное Значение С плавающей запятой 13,875 равно 1101,111₂ и нормализуется к 1,101111 × 2^3. При добавлении смещения показатель степени кодируется как двоичный для 130. В поле дробь записано число 101111, за которым следуют нули, при этом начальная 1 опущена. Знаковый бит равен нулю.

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

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

Нули, Бесконечности И NAN Имеют Зарезервированные Шаблоны В Zero используется как полностью нулевой показатель степени, так и полностью нулевая дробь, допуская значения +0 и -0. Бесконечности имеют полностью нулевой показатель степени с нулевой дробью и возникают в результате таких операций, как деление на ноль. Значения NAN имеют однозначный показатель степени с ненулевой дробью и являются результатом недопустимых операций, таких как 0/0 или извлечение квадратного корня из отрицательного значения. Эти кодировки явно обрабатывают исключительные случаи.

Сюрпризы с Плавающей Запятой: Потеря Точности И Равенство При больших показателях степени остается мало значимых дробных разрядов, поэтому операции могут привести к потере важной информации. Классические примеры показывают, что 0,1 плюс 0,2 не равны 0,3 в точности. При тестировании на равенство следует использовать допуск, а не строгое равенство. Стабильные вычисления часто нормализуют шкалы так, чтобы они были близки к нулю, а затем повторно применяют экспоненты.

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