В следующих нескольких уроках рассматриваются более теоретические концепции. Если вы предпочитаете практические занятия, не стесняйтесь пропустить их и вернуться к этим темам позже.
Фундаментальным аспектом архитектуры Linux является разделение между пространством пользователя и ядром. Но почему бы нам не объединить их возможности в один уровень? Причина кроется в безопасности и стабильности, которые достигаются за счет их работы в разных режимах.
В чем разница между режимом ядра и режимом пользователя
Система работает в двух различных режимах: режиме ядра и режиме пользователя. Это разделение имеет решающее значение для защиты оборудования и ресурсов системы от прямого, неконтролируемого доступа приложений.
В режиме ядра ядро имеет полный и неограниченный доступ к оборудованию; оно всем управляет. Это наивысший уровень привилегий.
В режиме пользователя приложения имеют очень ограниченный доступ к небольшой, безопасной части памяти и ресурсов ЦП.
Когда пользовательскому приложению необходимо выполнить действие, связанное с оборудованием — например, чтение с диска, отправка данных по сети или доступ к периферийному устройству — оно не может сделать это напрямую. Эти операции должны обрабатываться ядром в режиме ядра. Такая конструкция не позволяет неисправной или вредоносной программе скомпрометировать всю систему. Например, вы бы не хотели, чтобы шпионское ПО имело прямой доступ к оборудованию, так как оно могло бы прочитать все ваши данные или управлять вашей веб-камерой.
Защитные кольца и привилегированный доступ
Эти различные режимы часто описываются как уровни привилегий или защитные кольца. Представьте себе крепость с концентрическими стенами: самая внутренняя область является самой безопасной и обладает наивысшим авторитетом. Защитные кольца в компьютере работают аналогично, где самое внутреннее кольцо соответствует наивысшему уровню привилегий.
В стандартной архитектуре компьютера x86 существует два основных уровня:
- Кольцо 0: Здесь работает ядро. Оно обладает наивысшим уровнем привилегий ядра, может выполнять любые системные инструкции и имеет полное доверие для управления оборудованием. Это ядро привилегированного доступа.
- Кольцо 3: Это уровень, на котором работают приложения пользовательского режима. Это кольцо с наименьшими привилегиями, и оно не имеет прямого доступа к оборудованию.
Эта модель безопасности на основе колец гарантирует, что пользовательские приложения изолированы от критически важных системных компонентов. Но если приложения всегда находятся в другом режиме, чем ядро, как они могут выполнять необходимые аппаратные операции?
Системные вызовы и привилегии ядра
Связующим звеном между режимом пользователя и режимом ядра является системный вызов. Когда пользовательскому приложению необходимо выполнить привилегированную задачу, оно делает системный вызов с просьбой к ядру выполнить это действие от его имени.
Этот процесс позволяет приложению временно и безопасно переходить из режима пользователя в режим ядра для выполнения определенной контролируемой инструкции. После завершения задачи система переключается обратно в режим пользователя. Этот механизм гарантирует, что приложения могут получать необходимые им услуги, не получая опасного прямого привилегированного доступа к оборудованию.