От «что такое CPU?» до Intel SDM
Учебный материал, который постепенно погружает тебя в устройство процессоров Intel, память, сегментацию, привилегии, прерывания и системное программирование.
Обзор системной архитектуры
Что такое процессор?
Процессор (CPU) — это устройство, которое выполняет инструкции программы.
Например, когда программа говорит: «сложи два числа», процессор получает соответствующую инструкцию и выполняет её.
Что такое архитектура процессора?
Архитектура — это правила, по которым программное обеспечение взаимодействует с процессором.
Она определяет, какие инструкции существуют, какие есть регистры, как работает память, какие режимы работы поддерживаются и многое другое.
Intel Software Developer's Manual описывает архитектуру процессоров Intel и правила взаимодействия программного обеспечения с процессором.
Какие режимы работы существуют?
Архитектура IA-32 поддерживает несколько режимов работы процессора:
- Реальный режим
- Защищённый режим
- Виртуальный режим 8086
- Режим управления системой
Архитектура Intel 64 расширяет возможности IA-32 и добавляет режим IA-32e.
IA-32e имеет два основных подрежима:
- 64-bit mode — работа с 64-битными ОС и приложениями.
- Compatibility mode — возможность запускать многие старые 32-битные приложения.
| Режим | Назначение |
|---|---|
| Real Mode | Исторический режим, в который CPU попадает после сброса. |
| Protected Mode | Защищённый режим IA-32. |
| Virtual 8086 | Запуск старого 8086-кода внутри защищённого режима. |
| IA-32e | Режим Intel 64. |
Основные возможности системной архитектуры
Системная архитектура IA-32 содержит механизмы, необходимые операционной системе для управления процессором и программами.
- Управление памятью
- Защита программных модулей
- Многозадачность
- Обработка исключений
- Обработка прерываний
- Многопроцессорность
- Управление аппаратными ресурсами
- Управление питанием
- Отладка
- Мониторинг производительности
Что происходит после включения компьютера?
После включения питания или перезагрузки процессоры Intel 64 и IA-32 начинают работу в режиме реальной адресации.
Затем программное обеспечение может инициализировать переход в защищённый режим.
Если необходим 64-битный режим, выполняется дальнейшее переключение в IA-32e.
Power On
↓
Real Mode
↓
Protected Mode
↓
IA-32e
↓
64-bit Mode
2.1.1 Global and Local Descriptor Tables
Теперь начинается настоящая низкоуровневая часть.
В защищённом режиме обращения к памяти могут проходить через специальные таблицы: GDT и LDT.
Представь, что память компьютера — это огромный город.
Процессору нужно понимать:
- куда можно заходить;
- что находится по адресу;
- какие права доступа есть;
- какие области принадлежат коду или данным.
GDT — Global Descriptor Table.
Это таблица дескрипторов, содержащая информацию о сегментах.
LDT — Local Descriptor Table.
Это локальная таблица дескрипторов.
Что такое сегментный дескриптор?
Сегментный дескриптор содержит информацию о сегменте.
В частности, он может содержать:
- базовый адрес;
- предел сегмента;
- права доступа;
- тип сегмента;
- другие атрибуты.
Селектор сегмента
У каждого дескриптора существует связанный с ним селектор сегмента.
Селектор позволяет процессору определить, какой дескриптор нужно использовать.
Упрощённо селектор можно представить как указатель на запись в GDT или LDT.
Segment Selector
↓
GDT / LDT
↓
Segment Descriptor
↓
Base Address
+
Offset
↓
Linear Address
Для доступа к байту в сегменте необходимо указать селектор сегмента и смещение.
Процессор использует селектор для получения соответствующего дескриптора из GDT или LDT.
Из дескриптора получается базовый адрес сегмента в линейном адресном пространстве.
После этого к базовому адресу добавляется смещение.
Linear Address =
Segment Base + Offset
Но процессор не просто вычисляет адрес.
Он также проверяет права доступа.
Один из важных механизмов — CPL (Current Privilege Level).
CPL определяет уровень привилегий текущего выполняемого кода.
Процессор должен знать, где находятся таблицы дескрипторов.
Для этого используются специальные регистры:
- GDTR — Global Descriptor Table Register
- LDTR — Local Descriptor Table Register
В режиме IA-32e регистры GDTR и LDTR расширяются до 64 бит.
В 64-битном режиме некоторые системные дескрипторы также расширяются.
Например, дескриптор LDT может использовать 64-битный базовый адрес.
2.1.2 System Segments, Segment Descriptors, and Gates
Кроме обычных сегментов кода, данных и стека, архитектура Intel определяет специальные системные сегменты.
К двум важным системным сегментам относятся:
- TSS — Task State Segment
- LDT — Local Descriptor Table
Gates — шлюзы
Архитектура также определяет специальные дескрипторы, называемые шлюзами.
- Call Gates
- Interrupt Gates
- Trap Gates
- Task Gates
Шлюзы позволяют организовать защищённый переход к специальным процедурам и обработчикам.
Например, приложение может попытаться обратиться к более привилегированной процедуре.
Процессор проверит права доступа перед тем, как разрешить такой переход.
При вызове через Call Gate вызывающая процедура предоставляет селектор шлюза.
Процессор проверяет:
- CPL текущего кода;
- уровень привилегий шлюза;
- уровень привилегий целевого сегмента.
Если переход разрешён, процессор получает селектор целевого сегмента и смещение из Call Gate.
Если переход требует изменения уровня привилегий, процессор может переключить стек.
Информация о новом стеке может быть получена из TSS текущей задачи.
Application
│
│ Call Gate
↓
Privilege Check
│
├── DENIED
│
└── ALLOWED
│
↓
Target Code
│
↓
New Stack
В IA-32e некоторые дескрипторы становятся 16-байтовыми.
К ним относятся:
- LDT descriptors
- 64-bit TSS descriptors
- Call gates
- Interrupt gates
- Trap gates
Task Gates в режиме IA-32e не поддерживаются.
🧠 Проверка знаний
Перед переходом дальше попробуй ответить на эти вопросы без подсказки:
- Что такое CPU?
- Что такое архитектура процессора?
- Чем IA-32 отличается от Intel 64?
- В каком режиме CPU начинает работу после сброса?
- Что такое GDT?
- Что такое LDT?
- Что находится внутри сегментного дескриптора?
- Зачем нужен сегментный селектор?
- Что такое GDTR?
- Что такое CPL?
- Для чего нужны шлюзы?
- Что происходит при изменении уровня привилегий?
Если ты понял предыдущие уровни, можно переходить к настоящему тексту Intel SDM.
Здесь уже не нужно упрощать каждое предложение. Теперь задача — научиться читать документацию процессора и самостоятельно разбирать определения, таблицы и алгоритмы.
Именно здесь начинается настоящий системный уровень программирования.