Архитектура компьютера
Все объяснения, задачи и лабораторная в одном месте.
Можно сохранить страницу в PDF через печать браузера. Для печати разборы ответов раскрываются автоматически.
1. Двоичное представление и машинные данные
Объяснение
Бит принимает 0 или 1; байт содержит 8 бит. Беззнаковое n-битное число лежит от 0 до 2ⁿ−1. Знаковые числа обычно используют дополнительный код, а вещественные — приближённую двоичную дробь.
Задача для самостоятельного решения
Каков диапазон uint8 и результат арифметики по модулю 256 для 255+1?
Показать разбор ответа
Диапазон 0…255, результат 0. Это правило беззнаковой арифметики, не универсальное разрешение переполнения любого типа. В C знаковое переполнение имеет другие последствия.
2. ISA, инструкции и ассемблер
Объяснение
ISA определяет видимые программисту инструкции, регистры и способы адресации. Ассемблер — текстовая запись инструкций. Одна операция языка высокого уровня может стать множеством машинных инструкций.
Задача для самостоятельного решения
Разложите x=a+b на шаги машины с регистрами.
Показать разбор ответа
Загрузить a и b в регистры, выполнить сложение, сохранить результат в x. Оптимизатор может исключить загрузку или запись, если значение уже находится в регистре.
3. Конвейер процессора и параллелизм инструкций
Объяснение
Конвейер перекрывает стадии разных инструкций. Зависимость данных и неверное предсказание ветвления мешают этому перекрытию. Пропускная способность и задержка одной инструкции — разные величины.
Задача для самостоятельного решения
Конвейер имеет 5 стадий по такту. Сколько тактов нужно 10 независимым инструкциям в идеале?
Показать разбор ответа
5 тактов до первого результата и 9 до остальных: всего 14. Задержка одной инструкции 5 тактов, установившаяся пропускная способность одна инструкция за такт.
4. Кеши, локальность и виртуальная память
Объяснение
Кеш хранит линии соседних байтов; последовательный обход использует пространственную локальность. Виртуальная память отображает адреса процесса на физические страницы. Ошибка страницы не всегда означает чтение диска.
Задача для самостоятельного решения
Почему обход массива по порядку часто быстрее случайного?
Показать разбор ответа
Одна линия кеша приносит сразу несколько соседних элементов, а предвыборка угадывает последовательность. Случайный доступ чаще ждёт память и хуже использует уже загруженные байты.
5. Прерывания, DMA и устройства
Объяснение
Прерывание уведомляет CPU о событии. DMA позволяет устройству передавать блоки памяти без копирования каждого байта процессором. Драйвер всё равно настраивает буферы и синхронизирует их владение.
Задача для самостоятельного решения
Кто читает буфер, пока сетевое устройство выполняет DMA?
Показать разбор ответа
В корректной схеме устройство владеет буфером до сигнала завершения. Раннее чтение CPU может увидеть частичные данные; после завершения нужны правила согласованности платформы.
6. Профилирование CPU, памяти и узких мест
Объяснение
Профилирование ищет место затрат, а бенчмарк сравнивает определённую нагрузку. Ускорение редкой операции почти не меняет общее время. Закон Амдала ограничивает эффект оптимизации долей ускоряемой работы.
Задача для самостоятельного решения
20% времени ускорили вдвое. Каково общее ускорение?
Показать разбор ответа
Новое время 0,8+0,2/2=0,9 от исходного. Ускорение 1/0,9≈1,11. Улучшение локального участка на 100% не означает удвоение всей программы.
Лабораторная работа
Подготовка
Python 3 для численного опыта; для профилирования нужен компилятор и profiler вашей ОС.
Учебный пример
fraction = 0.2
local_speedup = 2
remaining_time = (1-fraction) + fraction/local_speedup
print(round(1/remaining_time, 3))
print(list((0x1234).to_bytes(2, "little")))
print(list((0x1234).to_bytes(2, "big")))Как работает пример и что ожидать
Ускорение 1.111; little-endian выдаёт [52,18], big-endian — [18,52]. Порядок байтов не меняет само число, а определяет представление в памяти или протоколе. Закон Амдала показывает предел ускорения всей задачи при оптимизации только части.
Итоговая работа
Сравните последовательный и случайный доступ к большому массиву в скомпилированной программе. Укажите размер, повторения, режим сборки и CPU. Объясните отдельно кеш, TLB и шум измерений, а не приписывайте любую разницу одному механизму.
Проверка результата
1. Опишите исходные данные и условия запуска, чтобы другой человек мог повторить работу.
2. Приложите результат обычного сценария и сравните его с ожидаемым.
3. Проверьте неверный вход, граничный случай и отказ зависимости, если она есть.
4. Объясните выбранное решение и известное ограничение.
5. Сохраните исправления после самопроверки вместе с примером, который раньше не работал.
Как оценить работу
По каждому пункту поставьте 0 (не выполнено), 1 (выполнено с пробелами) или 2 (результат воспроизводим и объяснён). Если обязательный сценарий не работает, вернитесь к нему независимо от общей суммы. Это рубрика самопроверки: сайт не исполняет присланный код и не выдаёт автоматическую оценку проекта.