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

Лекция 1
Цели курса и его организация.
История вычислительной техники. Архитектура фон Неймана. Основные компоненты компьютера. Машинная команда, адресность ЭВМ, типы операндов. Представление машинной команды, ассемблерная инструкция. Упрощенная схема выполнения инструкции (команды), такт работы.
Слайды

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

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

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

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

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

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

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

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

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

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

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

Оптимизация и ABI: вызов функций без указателя фрейма.

Соглашение stdcall.

Соглашение fastcall.

Соглашение вызова функции в архитектуре x86-64, ключевые отличия от соглашений вызова IA-32.

Вызов листовой функции.

“Красная зона”.

Вызов нелистовой функций.

Модели памяти.

Слайды

Лекция 13
Обзор лекции
Программные дефекты, перехват управления, эксплуатация ошибок.

Пример №1: чтение того, чего нет.

Пример №2: 1+1≠2.

Пример №3: Назад-в-стандартную-библиотеку.

Переполнение буфера и методы защиты от эксплуатации ошибок данного класса на этапах компиляции и выполнения.

Слайды

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

Куча.

Управление динамической памятью.

Пропускная способность и эффективность расходования. Внутренняя и внешняя фрагментация.

Освождение блока динамической памяти.

Управление свободными блоками: неявный список.

Разбор задачи.

Управление свободными блоками: явный список.

Управление свободными блоками: раздельные списки.

Слайды

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

Представление дробных чисел, числа с фиксированной точкой.

Рациональные числа.

Представление чисел с плавающей точкой. Стандарт IEEE 754. Нормализованные числа. Денормализованные и особые числа.

Примеры.

Операции над числами с плавающей точкой. Округление чисел. Стандарт IEEE 754 и математические свойства чисел.

Язык Си и числа с плавающей точкой.

Слайды

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

Сопроцессор FPU x87: аппаратный стек регистров, управляющий регистр, регистр состояния, регистр тегов.

Арифметические операции над числами с плавающей точкой. Исключения при вычислениях и их маскирование.

Числа с плавающей точкой в языке Си: типы, доступ к результатам сравнения чисел. Числа с плавающей точкой в языке Си: передача в качестве параметров функции, возвращаемое значение.

Слайды

Лекция 17

Система программирования языка Си. Программные инструменты, используемые при разработке Си-программ.

Компиляция.

Схема работы ассемблера.

Статическая компоновка программы.

Типы объектных файлов (модулей). Формат ELF.

Разрешение символов. Перемещение кода.

Обработка компоновщиком нескольких символов с одинаковыми именами: сильные и слабые символы, COMMON-символы.

Перебазирование ссылок во время статической компоновки.

Слайды

Лекция 18

Статические библиотеки, компоновка со статическими библиотеками.

Загрузка исполняемого объектного файла.

Динамические разделяемые библиотеки.

Пример с динамической библиотекой.

Позиционно независимый код. Глобальная таблица смещений (GOT).

Генерация ассемблером позиционно независимого кода.

Перебазирование ссылок, обращающихся к данным посредством GOT.

Ленивое связывание функций.

Вызов функции через таблицу связывания (plt).

Загрузка динамически скомпонованного исполняемого файла.

Слайды

Лекция 19

Организация аппаратного обеспечения компьютера. Логические вентили.

Ячейки статической и динамической памяти.

Разработка и производство интегральных схем.

Эмпирические законы развития ЭВМ. Закон Мура. Закон Гроша. Закон Белла.

Классы вычислительных систем.

Основные типы оперативной памяти. Расслоение оперативной памяти.

Энергонезависимая память.

Шины и адресные пространства.

Организация ввода/вывода через пространство портов и через память.

Пример устройства на шине: WatchDog.

Слайды

Лекция 20

Физические принципы устройства шин. Основные характеристики шин.

Примеры шин: фронтальная шина.

Блокировка шины памяти.

Примеры шин: PCI, USB, SATA

Устройство НЖМД: организация, емкость.

Особенности физического доступа к данным, размещенным в НЖМД.

Оценка времени доступа к диску.

Ввод/вывод (блочного) SATA-устройства.

Твердотельные диски.

Слайды

Лекция 21

Тенденции в развитии запоминающих устройств. Принципиальные ограничения в развитии электронной вычислительной техники: “Memory Wall” и “Power Wall”.

Локальность в программах.

Иерархическая организация памяти, кэширование.

Кэш-память: способы организации.

Кэш прямого отображения.

N-канальный ассоциативный кэш. Полностью ассоциативный кэш.

Запись в кэш.

Метрики производительности кэша.

Способы оценки производительности компьютеров и программ. Аппаратные средства измерения времени. Синтетический тест: оценка пропускной способности памяти современного компьютера.

Слайды

Лекция 22
Микроархитектура процессора, ее связь с другими архитектурными уровнями.
Промеры микроархитектурных решений: пропуск тактов, упреждающая выборка данных. Моделезависимые регистры.
Оценка латентности памяти на синтетическом тесте.
Конвейерная обработка команд, проблемы конвейерной обработки.
CISC и RISC архитектуры.
RISC-V – архитектура RISC-микропроцессоров с открытым исходным кодом.
История развития архитектуры x86.
Режимы работы современного процессора архитектуры Intel64/AMD64, загрузка.
Слайды

Лекция 23

Встраиваемое ПО, обеспечивающее начальную загрузку компьютера: BIOS, ACPI, UEFI. Многозадачная работа компьютера: требования к аппаратуре.

Модели памяти. Аппарат защиты памяти.

Страничная виртуальная память. Аппаратные средства ускорения трансляции виртуальных адресов, TLB.

Задача – память модельного компьютера.

Пользовательский и привилегированный режимы работы ЦПУ, уровни привилегий. Прерывания. Системные вызовы.

Слайды