Процесс в пользовательском режиме переключиться в режим ядра. Тогда процесс будет иметь привилегии root?

Процесс в пользовательском режиме переключиться в режим ядра. Тогда процесс будет иметь привилегии root?

В соответствии сhttp://www.linfo.org/kernel_mode.htmlв пункте 7:

Когда пользовательский процесс запускает часть кода ядра через системный вызов, процесс временно становится процессом ядра и находится в режиме ядра. Находясь в режиме ядра, процесс будет иметь привилегии root (т. е. административные) и доступ к ключевым системным ресурсам. Все ядро, которое не является процессом, а контроллером процессов, выполняется только в режиме ядра. Когда ядро ​​удовлетворило запрос процесса, оно возвращает процесс в пользовательский режим.

Мне совершенно неясно, что это за строка,

В режиме ядра процесс будет иметь привилегии root (т. е. административные) и доступ к ключевым системным ресурсам.

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

решение1

Привилегии root и non-root — это все вещи, связанные с пространством пользователя. Например, пользователь root может установить приложение, а обычный пользователь — нет.

Однако даже у пользователя root есть некоторые ограничения. Эти ограничения накладываются конструкцией операционной системы и различают пространство пользователя и пространство ядра. Например, даже если вы пользователь root, вы не можете изменить скорость вращения жесткого диска, если эта опция не предоставлена ​​вам через драйвер (вы можете написать драйвер, который будет разрешать эту функцию, но даже в этом случае вы не получаете доступ к оборудованию напрямую, а через драйвер).

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

Отвечая на ваш вопрос, это не процесс получает привилегии root, это переключение в режим ядра, которое обеспечивает неограниченный доступ ко всем системным ресурсам. Однако этот неограниченный доступ доступен только коду, работающему в режиме ядра, поэтому ваш процесс его не имеет. Он использует только вызовы кода ядра.

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

решение2

(Постараюсь быть кратким.)

Теоретически существует два измерения привилегий:

  • Компьютерыархитектура набора инструкций(ISA), который защищает определенную информацию и/или функции машины.

  • TheОперационная система(ОС) создание экосистемы для приложений и коммуникаций. В ее основе лежит ядро, программа, которая может работать на ISA без каких-либо зависимостей.

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

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

Иерархия привилегий в ISA предоставляет инструменты, которые ядро ​​использует для своих целей. Конкретные детали сильно различаются, но в целом есть режим ядра, в котором программы, выполняемые ЦП, очень свободны в выполнении ввода-вывода и использовании инструкций, предлагаемых ISA, и режим пользователя, в котором ввод-вывод и инструкции ограничены.

Например, при чтении инструкции для записи данных в определенный адрес памяти, ЦП в режиме ядра может просто записать данные в определенный адрес памяти, в то время как в пользовательском режиме он сначала выполняет несколько проверок, чтобы увидеть, находится ли адрес памяти в диапазоне разрешенных адресов, в которые могут быть записаны данные. Если определяется, что адрес не может быть записан, обычно ISA переключается в режим ядра и начинает выполнять другой поток инструкций, который является частью ядра, и он сделает правильное дело(TM).

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

Обратите внимание, что в режиме ядра больше ничего не запускается для обеспечения правильного действия, предполагается, что программа, работающая в режиме ядра, делает правильное действие. Вот почему в режиме ядра ничто не может заставить программу придерживаться абстрактных правил и концепций экосистемы ОС. Вот почему программы, работающие в режиме ядра, сравнительно мощны, как и пользователь root.

Технически режим ядра гораздо мощнее, чем просто права root-пользователя в вашей ОС.

Связанный контент