Лекция 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
Коллоквиум 1
Соглашение о вызове функций cdecl, организация рекурсии.
Слайды
Лекция 12
Двоичный интерфейс приложения.
Инициализация окружения Си-программы. Функции _start и main.
Выравнивание границ фреймов. Организация вызова функций стандартной библиотеки языка Си из ассемблерного кода.
Оптимизация и ABI: вызов функций без указателя фрейма.
Соглашения stdcall и fastcall.
Слайды
Лекция 13
Соглашение вызова функции в архитектуре x86-64, ключевые отличия от соглашений вызова IA-32.
Программные дефекты, перехват управления, эксплуатация ошибок.
Слайды
Лекция 14
Переполнение буфера и методы защиты от эксплуатации ошибок данного класса на этапах компиляции и выполнения.
Управление динамической памятью. Пропускная способность и эффективность расходования.
Внутренняя и внешняя фрагментация.
Слайды
Лекция 15
Управление свободными блоками: неявный список.
Управление свободными блоками: явный список, раздельные списки.
Представление чисел с плавающей точкой. Стандарт IEEE 754. Нормализованные числа. Денормализованные и особые числа. Операции над числами с плавающей точкой. Округление чисел.
Слайды
Лекция 16
Стандарт IEEE 754 (окончание) и математические свойства чисел.
Сопроцессор FPU x87: аппаратный стек регистров, управляющий регистр, регистр состояния, регистр тегов. Арифметические операции над числами с плавающей точкой. Исключения при вычислениях и их маскирование.
Слайды
Лекция 17
Числа с плавающей точкой в языке Си: типы, доступ к результатам сравнения чисел.
Числа с плавающей точкой в языке Си: передача в качестве параметров функции, возвращаемое значение.
Система программирования языка Си. Программные инструменты, используемые при разработке Си-программ. Схема работы ассемблера.
Слайды
Лекция 18
Статическая компоновка программы. Схема работы компоновщика: разрешение символов и перемещение кода.
Типы объектных файлов (модулей). Формат ELF.
Обработка компоновщиком нескольких символов с одинаковыми именами: сильные и слабые символы.
Слайды
Лекция 19
Статические библиотеки, компоновка со статическими библиотеками.
Загрузка исполняемого файла в память.
Динамическая компоновка, разделяемые библиотеки.
Позиционно независимый код. Глобальная таблица смещений.
Ленивое связывание в динамической компоновке.
Слайды
Лекция 20
Коллоквиум 2
Организация аппаратного обеспечения компьютера. Логические вентили. Ячейки статической и динамической памяти.
Слайды
Лекция 21
Технологии разработки и производства интегральных схем.
Эмпирические законы развития ЭВМ. Закон Мура. Закон Гроша. Закон Белла. Классы вычислительных систем.
Расслоение оперативной памяти.
Энергонезависимая память.
Шины и адресные пространства.
Организация ввода/вывода через пространство портов и через память.
Пример устройства на шине: WatchDog.
Слайды
Лекция 22
Физические принципы устройства шин, характеристики.
Блокировка шины памяти.
Примеры шин: фронтальная шина, PCI, USB, SATA, …
Устройство НЖМД: организация, емкость, временные характеристики доступа.
Слайды
Лекция 23
Твердотельные диски.
Тенденции в развитии запоминающих устройств. Принципиальные ограничения в развитии электронной вычислительной техники: “Memory Wall” и “Power Wall”.
Локальность в программах.
Иерархическая организация памяти, кэширование. Кэш-память: способы организации. Кэш прямого отображения. N-канальный ассоциативный кэш. Полностью ассоциативный кэш.
Метрики производительности кэша. Способы оценки производительности компьютеров и программ. Аппаратные средства измерения времени. Синтетический тест: оценка производительности памяти современного компьютера.
Слайды
Лекция 24
Конвейерная обработка команд, проблемы конвейерной обработки.
CISC и RISC архитектуры.
RISC-V – архитектура RISC-микропроцессоров с открытым исходным кодом.
Режимы работы современного процессора архитектуры Intel64/AMD64. Начальная загрузка компьютера: BIOS, ACPI, UEFI.
Многозадачная работа компьютера: требования к аппаратуре. Аппарат защиты памяти. Прерывания.
Пользовательский и привилегированный режимы работы ЦПУ. Системные вызовы.
Слайды