Лекция 2. Обзор архитектуры x86. Основы программирования

YOUTUBE · 01.12.2025 04:50

Ключевые темы и таймкоды

Введение в тему

0:00
  • Обсуждение системы команд Intel и языка ассемблера.
  • Напоминание о практических заданиях с недописанной операционной системой.

Задания и автоматизация

0:20
  • Задание: собрать и запустить недописанную операционную систему.
  • Автоматизация заданий с помощью Stepic.
  • Ссылка на задания будет опубликована на GitHub и вики-странице.

Роль ассемблера

1:31
  • Ассемблер не является основным языком, но понимание его команд полезно.
  • Примеры использования ассемблера: переход в защищённый режим.

Архитектура Intel

1:55
  • Сравнение архитектуры Intel с операционной системой.
  • Объяснение различий между архитектурой фон Неймана и гарвардской архитектурой.
  • Описание работы процессора: выбор команды из памяти, декодирование, выполнение вычислений, загрузка результата в память.

Оптимизация и кэш

5:03
  • Важность кэша для ускорения работы процессора.
  • Механизм загрузки кэша и его эффективность.
  • Проблемы с кэшем при плохо оптимизированных программах.

Многоуровневый кэш

6:03
  • Введение трехуровневого кэша.
  • Тиринг: многоуровневая организация доступа к памяти.
  • Различные типы памяти: оперативная, виртуальная, дисковая, удалённая.

Многоядерные процессоры

7:25
  • Организация кэша и памяти вокруг нескольких ядер.
  • Неравномерный доступ к кэшу между ядрами.
  • Роль компиляторов в учёте особенностей кэша.

Архитектура Core

8:21
  • После Pentium появилась архитектура Core, которая стала настолько сложной, что предсказать исполнение команд стало невозможно.
  • Процессор стал включать блок, который «заглядывает вперёд», частично декодируя команды из памяти и кэша.
  • Разные части процессора выполняют различные типы операций, связанные с разными наборами инструкций.

Организация процессора

10:15
  • Процессор имеет структуру, похожую на операционную систему: поток команд, исполнительные узлы, диспетчеризация и тайминг памяти.
  • Внутри процессора с набором команд CISC находится RISC-процессор с микрокодом для диспетчеризации сложных инструкций.

Пример с жёсткими дисками

12:11
  • Жёсткие диски имеют контроллер, который переупорядочивает запросы на чтение, чтобы оптимизировать работу устройства.
  • Оптимизация на уровне операционной системы неэффективна, так как она не знает физической природы диска.
  • Аналогично, интерфейс процессора гарантирует атомарное исполнение команд, но внутреннее исполнение остаётся скрытым.

Определение архитектуры

15:08
  • Архитектура включает набор типов данных, команд и регистров процессора.
  • В архитектуре x86 регистры имеют иерархию: от восьмиразрядных до тридцатидвухразрядных.
  • Регистры делятся на общие, связанные с адресацией и специальные, например, регистр флагов.

Порядок байт в Intel

21:06
  • В Intel используется обратный порядок байт: младший байт находится в начале адреса.
  • При работе с числами в памяти важно учитывать этот порядок.
  • При копировании чисел в регистры порядок байт сохраняется, что важно для корректной работы с данными.

Указатели и их классы

22:46
  • Указатели делятся на ближние и дальние.
  • Ближний указатель размером в слово обозначает смещение от известной базы.
  • Смещение может быть положительным, отрицательным или нулевым.

Работа в реальном режиме

23:33
  • В реальном режиме адресное пространство линейное и совпадает с физической памятью.
  • Адреса растут сверху вниз.
  • Для ближних указателей база может быть любой, например, ноль.

Арифметика указателей

24:31
  • Пример: `*p = &x` означает, что `x` находится в том же сегменте, что и `p`.
  • Указатели хранят смещения от базы.
  • Пример с `pp = &p` иллюстрирует арифметику указателей.

Фар-указатели

27:10
  • Фар-указатели состоят из двух половинок, хранящихся в разных регистрах.
  • Регистр данных DS хранит адрес начала сегмента, сдвинутый влево и умноженный на 16.
  • Реальный адрес вычисляется путём добавления смещения к адресу начала сегмента.

Сегменты памяти

29:03
  • Обычно программа имеет минимум три сегмента: данных, кода и стека.
  • Аппаратная архитектура не требует разделения сегментов, но это желательно для оптимизации.
  • В DOS были стратегии линковки, при которых все сегменты указывали на одно и то же место в памяти.

Проблемы с адресами

31:47
  • Адреса переменных и функций могут совпадать из-за одинаковых смещений, но разных сегментов.
  • Это может привести к ошибкам при работе с адресами.
  • Идея разделения кода и данных считается здравой.

Защищённый режим и сегменты памяти

33:15
  • В защищённом режиме память разделена на сегменты с разными уровнями привилегий.
  • Сегменты имеют конкретные границы и атрибуты, такие как уровень привилегий.

Физическое и логическое адресные пространства

33:59
  • Физическое адресное пространство соответствует реальной памяти компьютера.
  • Логическое адресное пространство используется программами для работы с виртуальными адресами.

Роль операционной системы

34:35
  • Операционная система создаёт иллюзию полноправного владения компьютером для каждого процесса.
  • Это позволяет одновременно выполнять множество процессов.

Селектор и сегментация памяти

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

Виртуальная память и пейджинг

41:57
  • Виртуальная память основана на страничной организации памяти пейджинге.
  • Операционная система управляет выделением памяти, используя дополнительную память на диске.

Взаимодействие указателей и страниц

43:24
  • Указатели в программе не связаны с физическими страницами памяти.
  • Один и тот же указатель может обращаться к разным физическим страницам в течение жизни программы.

Структура виртуального адреса

45:22
  • Виртуальный адрес состоит из смещения внутри страницы, номера страницы в каталоге страниц и других полей.
  • Операционная система определяет реальное расположение страницы в памяти или на диске.

Роль операционной системы в управлении памятью

47:19
  • Операционная система отвечает за таблицы трансляции адресов и управление памятью.
  • Процессы используют виртуальные адреса, но реальное расположение данных определяется ОС.

Переход в защищённый режим

47:38
  • Процессор переходит из реального режима в защищённый после загрузки операционной системы.
  • Загрузчик создаёт глобальную таблицу дескрипторов GDT и загружает регистр GDTR.
  • После переключения в защищённый режим операционная система использует только GDT для доступа к памяти.

Создание процесса и его память

49:26
  • Операционная система создаёт локальную таблицу дескрипторов для каждого процесса.
  • Контекст процесса инициализируется с указанием на записи в его таблице дескрипторов.
  • Процесс имеет доступ только к памяти, указанной в его таблице дескрипторов.

Пейджинг и адресное пространство

50:37
  • Пейджинг позволяет процессу видеть больше памяти, чем доступно физически.
  • Адресное пространство процесса определяется набором его мемори-дескрипторов в таблицах LDT и GDT.
  • Страницы внутри адресного пространства мапятся на физическую память.

Ограничения доступа к памяти

52:41
  • Процесс может читать, но не записывать в сегменты GDT и LDT.
  • Для изменения мемори-лоя процесса необходимо взаимодействие с операционной системой.
  • Выделение памяти возможно через специальные операции, например, BRK.

Синтаксис ассемблера

54:15
  • Существуют два типа синтаксиса: Intel и другой, который используется по умолчанию в GCC.
  • Ассемблер переводит текст в машинные коды, используя регистры общего назначения и регистры флагов.
  • Команды ассемблера начинаются с точки и не известны процессору.

Ограничения архитектуры Intel

57:30
  • Архитектура Intel не позволяет обращаться к памяти дважды в одной команде из-за ограничений шины памяти.
  • Секции исполняемого файла в Linux: текст — код, дейта — данные.

Отладка с GCC

58:28
  • GCC поддерживает флажки для отладки, включая максимальный уровень отладочной информации и минимальный уровень оптимизации.
  • Для корректной работы отладчика в GDB необходимо использовать ключи -g3 и -O0.