Урок 10: Что происходит, когда вы запускаете программу: процесс, память и ОС
Мы добрались до последнего урока — до момента, где всё соединяется воедино. Мы собрали исполняемый файл — но что именно происходит, когда вы нажимаете, чтобы его запустить? Загрузчик ОС создаёт процесс: работающий экземпляр программы со своим собственным закрытым пространством памяти. Мы рассмотрим
Когда вы запускаете программу, ОС создаёт для неё «процесс» — живую копию в памяти с собственным местом. У него есть стек для вызовов функций и куча для памяти, запрашиваемой на ходу. Когда программа хочет обратиться к оборудованию, она просит ОС сделать это.
- Процесс
- Работающий экземпляр программы со своим собственным закрытым адресным пространством и состоянием, которым управляет ОС.
- Загрузчик
- Часть ОС, которая копирует исполняемый файл в память и создаёт из него процесс.
- Адресное пространство
- Диапазон адресов памяти, который процесс видит как свой собственный; каждый процесс получает закрытый диапазон благодаря виртуальной памяти.
- Сегмент кода и сегмент данных
- Сегмент кода хранит инструкции (обычно только для чтения); сегмент данных хранит глобальные переменные и константы.
- Стек
- Область памяти для кадров вызовов функций — локальных переменных и адресов возврата; растёт вниз.
- Куча
- Область памяти для динамического выделения во время выполнения (malloc/new); растёт вверх по мере необходимости.
- Кадр стека
- Запись, помещаемая в стек при каждом вызове функции: её локальные переменные и адрес возврата.
- Системный вызов
- Запрос, который программа направляет ОС для выполнения действия, требующего доступа к оборудованию, например вывода или ввода.
- Виртуальная память
- Механизм, при котором каждый процесс получает закрытое адресное пространство, как будто вся память принадлежит ему, отображаемое на физическую память.
- Переключение контекста
- Сохранение состояния работающего процесса и загрузка состояния другого, чтобы один процессор мог обслуживать множество процессов.