Intereting Posts

Являются ли аппаратные функции или программные функции «режима ядра» и «пользовательского режима»?

Я прочитал, что для обработки процессов есть два режима: «режим ядра» и «пользовательский режим». ( Понимание ядра Linux , 3-е издание.) Является ли это аппаратным переключателем (ядром / пользователем), которым управляет Linux, или программным обеспечением, предоставляемым ядром Linux?

Режим ядра и пользовательский режим – это аппаратная функция, особенно функция процессора. Процессоры, разработанные для систем среднего и высшего класса (ПК, функциональный телефон, смартфон, все, кроме простейших сетевых устройств, …) включают эту функцию. Режим ядра может иметь разные названия: режим супервизора, привилегированный режим и т. Д. На x86 (тип процессора на ПК) он называется «ring 0», а пользовательский режим называется «ring 3».

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

Unix-подобные операционные системы (и большинство других операционных систем с технологической изоляцией) разделены на две части:

  • Ядро запускается в режиме ядра. Ядро может делать все.
  • Процессы запускаются в пользовательском режиме. Процессы не могут получить доступ к оборудованию и не могут получить доступ к памяти других процессов (за исключением случаев, когда они явно разделены).

Таким образом, операционная система использует аппаратные функции (привилегированный режим, MMU) для обеспечения изоляции между процессами.

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

Когда код режима пользователя должен выполнять действия, которые он не может выполнять напрямую (например, доступ к файлу, доступ к периферии, связь с другим процессом, …), он выполняет системный вызов : переход в предопределенное место в коде ядра.

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

дальнейшее чтение

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

«Linux» – это только ядро. Когда мы говорим о «Linux» как о операционной системе, это объединение ядра и всего другого программного обеспечения, которое распространяется вместе с ним в дистрибутиве Linux .

Переключение между режимами пользователя и ядра происходит, когда вы выполняете системный вызов , который является любой из функций, описанных в разделе 2 руководства . То есть, если вы говорите что-то вроде man 2 open и получаете результат или man creat и видите, что есть суффикс (2) в заголовке страницы, вы смотрите на системный вызов, что означает, что он обрабатывается ядром ,

(Различие здесь состоит в ручном разделе 3 , который предназначен для функций, реализованных целиком в пользовательском пространстве, например, в стандартной библиотеке C ).

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

Ядро Linux использует аппаратные функции для обеспечения соблюдения различия между режимом ядра и пользователя на большинстве процессоров, на которых он работает. Схема защиты Intel – один из способов сделать это. Существуют исключения, такие как μCLinux , который работает на небольших процессорах без MMU, в которых также могут отсутствовать защитные кольца. Очень старые версии Unix также работают без защиты ядра / пользователя.

Когда мы говорим о «коде режима пользователя», мы говорим о коде, который в основном работает в пользовательском пространстве, хотя в значительной степени любая программа будет содержать некоторые системные вызовы, и поэтому потратит некоторое время на ядро, которое всегда работает в режиме ядра.