В чем разница между пространством ядра и пространством пользователя? - PullRequest
129 голосов
/ 11 мая 2011

В чем разница между пространством ядра и пространством пользователя? Означает ли пространство ядра, потоки ядра, процессы ядра и стек ядра одно и то же? Кроме того, зачем нам эта дифференциация?

Ответы [ 16 ]

2 голосов
/ 28 июля 2013

По Сунил Ядав, на Quora:

Ядро Linux относится ко всему, что работает в режиме ядра и состоит из нескольких отдельных слоев.На самом нижнем уровне Ядро взаимодействует с оборудованием через HAL.На среднем уровне ядро ​​UNIX разделено на 4 отдельные области.Первая из четырех областей обрабатывает символьные устройства, сырой и приготовленный TTY и обработку терминала.Вторая область управляет драйверами сетевых устройств, протоколами маршрутизации и сокетами.Третья область предназначена для драйверов дисковых устройств, кэшей страниц и буферов, файловой системы, виртуальной памяти, именования и отображения файлов.Четвертая и последняя область управляет диспетчеризацией, планированием, созданием и завершением процессов, а также обработкой сигналов.Помимо всего этого у нас есть верхний уровень ядра, который включает системные вызовы, прерывания и прерывания.Этот уровень служит интерфейсом для каждой из функций нижнего уровня.Программист использует различные системные вызовы и прерывания для взаимодействия с функциями операционной системы.

1 голос
/ 07 марта 2014

Попытка дать очень упрощенное объяснение

Виртуальная память делится на пространство ядра и пространство пользователя. Пространство ядра - это та область виртуальной памяти, где будут выполняться процессы ядра, а пространство пользователя - это та область виртуальной памяти, где будут выполняться пользовательские процессы.

Это разделение требуется для защиты доступа к памяти.

Всякий раз, когда загрузчик запускает ядро ​​после загрузки его в определенное место в ОЗУ (обычно на контроллере на основе ARM), он должен убедиться, что контроллер находится в режиме супервизора с отключенными FIQ и IRQ.

0 голосов
/ 11 апреля 2019

Получение памяти разделено на две отдельные области:

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

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

0 голосов
/ 26 апреля 2018

Пространство ядра и Пространство пользователя являются логическими пространствами.

Большинство современных процессоров предназначены для работы в разных привилегированных режимах. Машины x86 могут работать в 4 различных привилегированных режимах. enter image description here

И конкретная машинная инструкция может быть выполнена, когда в / выше определенного привилегированного режима.

Из-за этого дизайна вы предоставляете системную защиту или песочницу для среды исполнения.

Ядро - это фрагмент кода, который управляет вашим оборудованием и обеспечивает системную абстракцию. Таким образом, он должен иметь доступ ко всем инструкциям машины. И это самая надежная часть программного обеспечения. Так что я должен быть казнен с высшей привилегией. И Уровень звонка 0 является наиболее привилегированным режимом. Так Уровень звонка 0 также называется Режим ядра .

Пользовательское приложение - это часть программного обеспечения от сторонних поставщиков, и вы не можете им полностью доверять. Кто-то со злым умыслом может написать код для сбоя вашей системы, если у него был полный доступ ко всем инструкциям машины. Поэтому приложение должно иметь доступ к ограниченному набору инструкций. И Уровень звонка 3 является наименее привилегированным режимом. Таким образом, все ваше приложение работает в этом режиме. Следовательно, Уровень звонка 3 также называется Режим пользователя .

Примечание: я не получаю Кольцевые Уровни 1 и 2. В основном это режимы с промежуточными привилегиями. Так может быть код драйвера устройства выполняется с этой привилегией. AFAIK, linux использует только Ring Level 0 и 3 для выполнения кода ядра и пользовательского приложения соответственно.

Таким образом, любая операция, происходящая в режиме ядра, может рассматриваться как пространство ядра. И любая операция, происходящая в пользовательском режиме, может рассматриваться как пространство пользователя.

0 голосов
/ 09 ноября 2017

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

Код ядра имеет привилегии наивысшего уровня, а код пользователя - наименьший.Это предотвращает сбой в работе пользовательского кода, изменение других программ и т. Д.

Обычно код ядра хранится в карте памяти, отличной от кода пользователя (точно так же, как пользовательские пространства хранятся в картах памяти, отличных друг от друга).Отсюда и термины «пространство ядра» и «пространство пользователя».Но это не жесткое и быстрое правило.Например, поскольку x86 косвенно требует, чтобы его обработчики прерываний / прерываний постоянно отображались, часть (или все некоторые ОС) ядра должна отображаться в пространство пользователя.Опять же, это не означает, что такой код имеет пользовательские привилегии.

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

0 голосов
/ 15 апреля 2012

В Linux есть два пробела, 1-й - это пространство пользователя, а другой - кернал. Пользовательское пространство состоит только из пользовательского приложения, которое вы хотите запустить. в качестве ядра службы присутствуют управление процессами, управление файлами, обработка сигналов, управление памятью, управление потоками и так много других служб. Если вы запускаете приложение из пользовательского пространства, это приложение взаимодействует только с сервисом Kernal. и эта служба взаимодействует с драйвером устройства, который присутствует между оборудованием и ядром. Основное преимущество пространства ядра и разделения пространства пользователя заключается в том, что мы можем обеспечить защиту с помощью virus.bcaz всех пользовательских приложений, находящихся в пространстве пользователя, а служба присутствует в пространстве ядра Вот почему Linux не влияет на вирус.

...