Материалы лекций 2021

Лекция 1
Обзор лекции

Цели курса.

Зачем нужно знать устройство компьютера и язык ассемблера?

История вычислительной техники.

Архитектура фон Неймана. Основные компоненты компьютера.

Упрощенная схема выполнения инструкции (команды), такт работы.

Основные термины и понятия: машинная команда, адресность ЭВМ, типы операндов…

Слайды

Лекция 2
Архитектура IA-32: основные регистры, форматы команд. IA-32 и ее связь с архитектурами 8086 и Intel64. Выполнение простейших ассемблерных инструкций: пересылка данных и арифметические операции. Формат команды.
Слайды

Лекция 3
Ассемблер nasm. Организация ассемблерной программы, секции кода и данных. Упрощенный процесс построения программы. Основные команды арифметических операций.
Слайды

Лекция 4
Регистр флагов, беззнаковое и знаковое переполнения.
Условная и безусловная передача управления. Коды условий.
Разбор задачи на восстановление управляющих операторов языка Си.
Слайды

Лекция 5
Проблемы организации вызова функций. Аппаратная поддержка стека. Пример ассемблерной программы: отображение вызова функции языка Си в язык ассемблера.
Слайды

Лекция 6
Различные группы команд в архитектуре IA-32. Команды «быстрой» арифметики.
Побитовые логические инструкции. Инструкции сдвига и вращения.
Разбор задачи на восстановление выражения языка Си.
Реализация арифметических операций над 64-разрядными целыми в архитектуре IA-32.
Слайды

Лекция 7
Операции над данными типа _Bool.
Реализация управляющих операторов языка Си. goto-форма представления ветвлений и циклов. Условная передача данных, конвейерные вычисление, опустошение конвейера.
Слайды

Лекция 8
Особенности реализации операторов цикла на языке ассемблера.
Организация цикла с помощью инструкции LOOP.
Различные способы отображения оператора switch в язык ассемблера: последовательность if-else, таблица переходов, дерево выбора.
Слайды

Лекция 9
Отображение операторов разыменования указателя и взятия адреса из языка Си в язык ассемблера. Пример работы с указателями.
Одномерные массивы и указатели. Адресная арифметика.
Массивы: одномерные, многомерные, многоуровневые. Расположение в памяти, способы работы с отдельными элементами.
Особенности работы компилятора с двумерными массивами: примеры простых оптимизаций: примеры машинно-независимой и машинно-зависимой оптимизации.
Слайды

Лекция 10
Структуры, расположение в памяти, доступ к отдельным полям. Выравнивание полей. Объединения. Задачи на вычисление размера типа данных.
Слайды

Лекция 11
Соглашение о вызове функций cdecl, организация рекурсии.
Двоичный интерфейс приложения.
Инициализация окружения Си-программы. Функции _start и main.
Выравнивание границ фреймов. Организация вызова функций стандартной библиотеки языка Си из ассемблерного кода.
Слайды

Лекция 12
Оптимизация и ABI: вызов функций без указателя фрейма.
Соглашение stdcall.
Соглашение fastcall.
Соглашение вызова функции в архитектуре x86-64, ключевые отличия от соглашений вызова IA-32.
Вызов листовой функции.
“Красная зона”.
Вызов нелистовой функций.
Модели памяти.
Слайды
“Сырое” видео teach-in

Лекция 13
Программные дефекты, перехват управления, эксплуатация ошибок.
Пример №1: чтение того, чего нет.
Пример №2: 1+1≠2.
Пример №3: Назад-в-стандартную-библиотеку.
Переполнение буфера и методы защиты от эксплуатации ошибок данного класса на этапах компиляции и выполнения.
Слайды
“Сырое” видео teach-in

Лекция 14
Куча. Управление динамической памятью.
Пропускная способность и эффективность расходования. Внутренняя и внешняя фрагментация.
Освобождение блока динамической памяти.
Управление свободными блоками: неявный список.
Управление свободными блоками: явный список.
Управление свободными блоками: раздельные списки.
Слайды
“Сырое” видео teach-in
Видео консультации

Лекция 15
Представление дробных чисел, числа с фиксированной точкой.
Рациональные числа.
Представление чисел с плавающей точкой. Стандарт IEEE 754. Нормализованные числа. Денормализованные и особые числа.
Операции над числами с плавающей точкой. Округление чисел. Стандарт IEEE 754 и математические свойства чисел.
Язык Си и числа с плавающей точкой.
Сопроцессор FPU x87: аппаратный стек регистров.
Слайды
“Сырое” видео teach-in

Лекция 16
Сопроцессор FPU x87: управляющий регистр, регистр состояния, регистр тегов.
Арифметические операции над числами с плавающей точкой. Исключения при вычислениях и их маскирование.
Числа с плавающей точкой в языке Си: типы, доступ к результатам сравнения чисел. Числа с плавающей точкой в языке Си: передача в качестве параметров функции, возвращаемое значение.
Слайды
“Сырое” видео teach-in

Лекция 17
Система программирования языка Си. Программные инструменты, используемые при разработке Си-программ.
Компиляция.
Схема работы ассемблера.
Статическая компоновка программы.
Типы объектных файлов (модулей). Формат ELF.
Разрешение символов. Перемещение кода.
Слайды
“Сырое” видео teach-in

Лекция 18
Обработка компоновщиком нескольких символов с одинаковыми именами: сильные и слабые символы, COMMON-символы.
Перебазирование ссылок во время статической компоновки.
Статические библиотеки, компоновка со статическими библиотеками.
Загрузка исполняемого объектного файла.
Слайды
“Сырое” видео teach-in

Лекция 19
Динамические разделяемые библиотеки.
Позиционно независимый код. Глобальная таблица смещений (GOT).
Генерация ассемблером позиционно независимого кода.
Перебазирование ссылок, обращающихся к данным посредством GOT.
Ленивое связывание функций.
Вызов функции через таблицу связывания (plt).
Загрузка динамически скомпонованного исполняемого файла.
Слайды
“Сырое” видео teach-in

Лекция 20
Организация аппаратного обеспечения компьютера. Логические вентили.
Ячейки статической и динамической памяти.
Разработка и производство интегральных схем.
Эмпирические законы развития ЭВМ. Закон Мура. Закон Гроша. Закон Белла.
Классы вычислительных систем.
Основные типы оперативной памяти. Расслоение оперативной памяти.
Энергонезависимая память.
Слайды
“Сырое” видео teach-in

Лекция 21
Шины и адресные пространства.
Организация ввода/вывода через пространство портов и через память.
Пример устройства на шине: WatchDog.
Физические принципы устройства шин. Основные характеристики шин.
Примеры шин: фронтальная шина.
Блокировка шины памяти.
Примеры шин: PCI.
Слайды
“Сырое” видео teach-in

Лекция 22
Примеры шин: AGP, USB, SATA.
Устройство НЖМД: организация, емкость.
Особенности физического доступа к данным, размещенным в НЖМД.
Оценка времени доступа к диску.
Ввод/вывод (блочного) SATA-устройства.
Твердотельные диски.
Тенденции в развитии запоминающих устройств. Принципиальные ограничения в развитии электронной вычислительной техники: “Memory Wall” и “Power Wall”.
Локальность в программах.
Иерархическая организация памяти, кэширование.
Кэш-память: способы организации.
Кэш прямого отображения.
N-канальный ассоциативный кэш. Полностью ассоциативный кэш.
Слайды
“Сырое” видео teach-in

Лекция 23
Запись в кэш.
Метрики производительности кэша.
Способы оценки производительности компьютеров и программ. Аппаратные средства измерения времени. Синтетический тест: оценка пропускной способности памяти современного компьютера.
Микроархитектура процессора, ее связь с другими архитектурными уровнями.
Промеры микроархитектурных решений: пропуск тактов, упреждающая выборка данных. Моделезависимые регистры.
Оценка латентности памяти на синтетическом тесте.
Конвейерная обработка команд, проблемы конвейерной обработки.
CISC и RISC архитектуры.
RISC-V – архитектура RISC-микропроцессоров с открытым исходным кодом.
Слайды
“Сырое” видео Часть 1 и Часть 2

Лекция 24
История развития архитектуры x86.
Режимы работы современного процессора архитектуры Intel64/AMD64, загрузка.
Встраиваемое ПО, обеспечивающее начальную загрузку компьютера: BIOS, ACPI, UEFI. Многозадачная работа компьютера: требования к аппаратуре.
Модели памяти. Аппарат защиты памяти.
Страничная виртуальная память. Аппаратные средства ускорения трансляции виртуальных адресов, TLB.
Пользовательский и привилегированный режимы работы ЦПУ, уровни привилегий. Прерывания. Системные вызовы.
Слайды
“Сырое” видео teach-in