Как работает операционная система: процессы, память, ядро

Как работает операционная система: процессы, память, ядро Полезное

Операционная система (ОС) — это комплекс программ, который управляет аппаратными ресурсами устройства и предоставляет прикладным программам единый набор служб для доступа к ним. Проще говоря, ОС стоит между вашими приложениями и «железом» и решает, кто, когда и как пользуется процессором, памятью и устройствами. Ниже разберем, из чего состоит ОС, что именно она делает во время работы и чем в подходах различаются Windows, Linux и macOS.

Ядро и ОС: это не одно и то же

Полезно сразу развести два понятия, которые часто путают.

Ядро (kernel) — центральная часть ОС, которая напрямую работает с оборудованием: управляет памятью, процессами, доступом к устройствам. Ядро загружается первым и работает в привилегированном режиме.

Операционная система — более широкое понятие. Это ядро плюс сопутствующие компоненты: драйверы, системные службы, библиотеки, командная оболочка, графический интерфейс, набор утилит. Без ядра ОС не существует, но одно ядро без остального обвеса дает мало пользы обычному пользователю.

Дистрибутивы Linux наглядно показывают разницу: ядро Linux одно, а операционных систем на его основе много, потому что каждая собирает свой набор окружения вокруг общего ядра.

Режимы пользователя и ядра

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

В режиме ядра (kernel mode) код имеет полный доступ к оборудованию и всей памяти. Здесь работает само ядро и драйверы.

В режиме пользователя (user mode) выполняются обычные приложения. Они не могут напрямую обращаться к оборудованию: чтобы прочитать файл или выделить память, программа делает системный вызов (system call) — запрос к ядру. Ядро проверяет запрос и выполняет операцию от своего имени.

Такое разделение нужно ради изоляции: сбой или вредоносный код в пользовательском приложении не должен ронять всю систему. Это упрощенная двухуровневая модель; на деле аппаратных уровней привилегий бывает больше, и не все они задействованы.

Процессы и потоки: в чем разница

Здесь тоже важно не смешивать два понятия.

Процесс — это запущенная программа со своим изолированным адресным пространством памяти, набором открытых файлов и правами. Два процесса по умолчанию не видят память друг друга.

Поток (thread) — это единица выполнения внутри процесса. У процесса есть минимум один поток, но их может быть много, и все потоки одного процесса делят общую память этого процесса. Поэтому потоки внутри процесса общаются между собой проще и дешевле, чем отдельные процессы, но и ошибка в одном потоке способна повредить данные остальных.

Планировщик ОС распределяет процессорное время именно между потоками: решает, какой поток и на каком ядре процессора выполняется прямо сейчас. Когда потоков больше, чем аппаратных ядер, ОС быстро переключает их, создавая эффект одновременной работы. Само переключение (context switch) стоит времени, поэтому бесконечно наращивать число потоков смысла нет.

Управление памятью и виртуальная память

Оперативная память — общий дефицитный ресурс, и ОС раздает его процессам.

Ключевой механизм — виртуальная память. Каждый процесс видит свое непрерывное адресное пространство, как будто память принадлежит только ему. На самом деле ОС вместе с аппаратным блоком MMU переводит виртуальные адреса в физические. Это дает изоляцию процессов и позволяет использовать больше адресуемой памяти, чем реально стоит планок в устройстве.

Память делится на страницы фиксированного размера. Если физической памяти не хватает, редко используемые страницы могут временно вытесняться на диск — в файл подкачки или swap. Обращение к вытесненной странице медленнее обращения к оперативной памяти, поэтому активная подкачка ощутимо тормозит систему.

Разрядность ОС влияет на объем адресуемой памяти. 32-битная система напрямую адресует до 4 ГБ (2 в 32 степени байт), поэтому сегодня почти везде используются 64-битные ОС, у которых практический предел на много порядков выше. Точные лимиты зависят от конкретной версии ОС и издания.

Файловые системы

Данные на накопителе хранятся не «россыпью», а по правилам, которые задает файловая система — способ организации файлов, каталогов и метаданных (имя, размер, права, время изменения).

Разные ОС исторически используют разные файловые системы: NTFS и ReFS в мире Windows, ext4, XFS, Btrfs в Linux, APFS в современных macOS. Поддержка чужой файловой системы не гарантирована и часто требует дополнительных драйверов или утилит.

Отдельная деталь — способ адресации к файлу. В Windows пути разделяются обратным слэшем и начинаются с буквы диска (C:\Users), а сами пути по умолчанию нечувствительны к регистру. В Linux и macOS единое дерево начинается с корня /, а разные тома монтируются как каталоги внутри него.

Устройства и драйверы

Клавиатура, видеокарта, диск, принтер — для каждого класса устройств нужен свой код, который умеет с ним общаться. Этот код и есть драйвер.

Драйвер переводит абстрактные запросы ОС в конкретные команды устройства и обратно. Благодаря драйверам приложениям не нужно знать модель конкретной видеокарты: они обращаются к устройству через единый интерфейс, а различия берет на себя драйвер. Часть драйверов работает в режиме ядра, поэтому ошибка в драйвере опаснее ошибки в обычном приложении.

Что делает ОС: короткая сводка

  • Управляет процессами и потоками, распределяет процессорное время через планировщик.
  • Управляет памятью, включая виртуальную память и подкачку.
  • Организует хранение данных через файловые системы.
  • Обеспечивает доступ к устройствам через драйверы и единые интерфейсы.
  • Изолирует приложения друг от друга и разграничивает права через режимы пользователя и ядра.
  • Предоставляет интерфейс: графический (GUI) и командный (CLI).

Windows, Linux, macOS: разница в подходах

Принцип Windows Linux macOS
Тип ядра гибридное (NT) монолитное с загружаемыми модулями гибридное (XNU: Mach + части BSD)
Модель закрытый исходный код открытый исходный код закрытый, ядро XNU частично открыто
Файловые системы NTFS, ReFS ext4, XFS, Btrfs и другие APFS
Структура путей буквы дисков, \, регистр не учитывается единый корень /, / как разделитель единый корень /, / как разделитель
Драйверы в основном от вендоров, отдельно многие в составе ядра и дистрибутива преимущественно от Apple под свое «железо»
Типичное применение ПК, игры, корпоративная среда серверы, разработка, встраиваемые системы рабочие станции в экосистеме Apple

Ни один вариант не «лучший» вообще: выбор зависит от задач. Windows выигрывает по совместимости с прикладным ПО и играми. Linux популярен на серверах и у разработчиков благодаря открытости и гибкости. macOS удобна тем, кто работает внутри экосистемы Apple и ценит связку ОС с фирменным оборудованием.

Термины «монолитное» и «гибридное» ядро описывают, где проходит граница между кодом в режиме ядра и вынесенными компонентами; строгая классификация конкретных ядер — предмет отдельного спора, и деление здесь дано упрощенно.

Выводы

  • ОС — это ядро плюс драйверы, службы и интерфейс; ядро — только центральная часть, работающая с оборудованием напрямую.
  • Процесс имеет изолированную память, поток — единица выполнения внутри процесса; планировщик распределяет время между потоками.
  • Виртуальная память дает каждому процессу свое адресное пространство и изоляцию, а подкачка компенсирует нехватку оперативной памяти ценой скорости.
  • Файловые системы и драйверы отвечают за хранение данных и работу с устройствами; поддержка чужих форматов не гарантирована.
  • Windows, Linux и macOS решают одни и те же задачи разными способами; выбор определяется задачами, а не абстрактным «рейтингом».

Где применяется / связь с практикой

Понимание принципов работы ОС — база для системного и низкоуровневого программирования: без представления о процессах, памяти и системных вызовах трудно писать драйверы, серверные службы или отлаживать утечки памяти и зависания. Эти знания нужны системным администраторам, backend- и embedded-разработчикам.

Освойте тему на практике

Разобрать процессы, память, планировщик и системные вызовы на практике можно на курсе Системный программист. Если хочется сначала оценить формат и глубину, посмотрите записи и расписание бесплатных открытых уроков Otus по системному программированию и смежным темам.

FAQ

Что тяжелее для системы: создать процесс или поток?
Обычно создание потока дешевле, потому что он использует уже выделенные процессу память и ресурсы, тогда как новый процесс требует отдельного адресного пространства. Конкретные затраты зависят от ОС.

Зачем нужен файл подкачки, если можно просто добавить оперативной памяти?
Подкачка позволяет запускать больше задач, чем помещается в физическую память, и переживать пики нагрузки. Но обращение к диску медленнее памяти, поэтому подкачка — страховка, а не замена достаточному объему ОЗУ.

Можно ли запускать программы одной ОС на другой?
Частично: через слои совместимости, виртуальные машины или контейнеры. Результат зависит от конкретной программы и инструмента, полная совместимость не гарантируется.

OTUS Журнал
Скидка 5% 12-19 октября на курсы (popup)
Бесплатные открытые уроки (поп-ап)