Различия между системными процессами и пользовательскими процессами, путями управления ядрами и потоком ядра

Я понимаю, что

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

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

  • Командная строка только ОС UNIX / Linux
  • Как добавить дополнительное устройство фреймбуфера в Linux?
  • Ядро Linux 3.3 регрессия мощности
  • Не удалось экспортировать FUSE через NFS
  • Могу ли я переназначить SHIFT + CAPS LOCK в консоли Linux?
  • Узнайте, какое устройство / dev / root представляет в Linux?
    1. В Linux Kernel Architecture от Maurer термины «системный процесс» и «пользовательский процесс» используются без определений, например, при введении разделения виртуального адресного пространства на пространство ядра и пространство пользователя :

      Каждый пользовательский процесс в системе имеет свой собственный диапазон виртуальных адресов, который простирается от 0 до TASK_SIZE. Область выше (от TASK_SIZE до 2 32 или 2 64) зарезервирована исключительно для ядра – и не может быть доступна для пользовательских процессов. TASK_SIZE – это константа, специфичная для архитектуры, которая делит адресное пространство в данном соотношении – в системах IA-32, например, адресное пространство делится на 3 гигабайта, так что виртуальное адресное пространство для каждого процесса составляет 3 гигабайта; 1 GiB доступен для ядра, поскольку общий размер виртуального адресного пространства составляет 4 гигабайта. Хотя фактические цифры различаются в зависимости от архитектуры, общих концепций нет. Поэтому я использую эти примеры в наших дальнейших обсуждениях.

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

      … Ядро делит виртуальное адресное пространство на две части, чтобы он мог защищать отдельные системные процессы друг от друга.

      Вы можете прочитать больше примеров, выполнив поиск в «пользовательском процессе» или «системном процессе» в книге.

      Являются ли процессы пользователя и системные процессы процессами, в отличие от ядра?

      Каковы их определения? Различаются ли они их владельцами (обычным пользователем или root?), Пользователем, который их запускал, или чем-то еще?

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

    2. В разделе «Понимание ядра Linux от Bovet» есть понятия « путь управления ядрами » и « поток ядра ».

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

      … Традиционные Unix-системы делегируют некоторые критические задачи для прерывисто запущенных процессов, включая очистку кэшей дисков, замену неиспользуемых страниц, обслуживание сетевых подключений и т. Д. Действительно, неэффективно выполнять эти задачи строго линейно; как их функции, так и процессы конечных пользователей получают лучший ответ, если они запланированы в фоновом режиме. Поскольку некоторые из системных процессов выполняются только в режиме ядра, современные операционные системы делегируют свои функции потокам ядра , которые не обременены ненужным контекстом пользовательского режима. В Linux потоки ядра отличаются от обычных процессов следующими способами:

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

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

      Вы можете узнать больше, выполнив поиск в Google Книгах .

      Являются ли «системный процесс» в книге Маурера и в книге Бовета той же концепцией?

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

      Является ли «системный процесс» отличным от пути управления ядрами и потока ядра?

  • Файловая система, которая никогда не ломается (приемлемая потеря данных)
  • Проблема Dnsmasq с сетевым пространством имен Linux
  • Необъяснимые файлы, найденные в домашней папке
  • Предотвращение создания определенного каталога
  • Nand Flash; MTD; UBI; Общая площадь
  • Клавиатура Remap на консоли Linux
  • 2 Solutions collect form web for “Различия между системными процессами и пользовательскими процессами, путями управления ядрами и потоком ядра”

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

    То, что процесс является «системным процессом» или обычный пользовательский процесс, совершенно не имеет отношения к Unix, они обрабатываются одинаково. В случае Linux некоторые задачи запускаются в ядре для обработки разных заданий. Однако это рабочие места ядра, а не «системные процессы».

    Одно большое предостережение: текстовые книги по сложным программным продуктам (составители и операционные системы являются особенно вопиющими примерами) имеют тенденцию объяснять упрощенные алгоритмы (часто те, которые не использовались всерьез в течение полувека), поскольку реальные машины и требования пользователей слишком сложный, чтобы его можно было обработать каким-либо образом, который можно описать структурированным, простым способом. Большая часть компилятора – это специальные настройки (особенно в области оптимизации кода, преобразования в основном представляют собой подмножество возможностей, которые появляются в практическом использовании). В случае с Linux большая часть кода – это драйверы устройств (упомянутые в процессе работы как зависимые от устройства в текстах операционной системы), а из этого кода массивный срез обрабатывает устройства с неправильной эксплуатацией, которые не соответствуют их собственным спецификациям или что ведут себя по-разному между версиями «того же устройства». Часто то, что объясняется в мельчайших подробностях, – это всего лишь часть работы, которая может быть сведена к некоторой хорошей теории, оставляя беспорядочную, нерегулярную часть (почти) полностью нарушенной. Например, Крис Фрейзер и Дэвид Хэнсон в своей книге, описывающей компилятор LCC, утверждают, что типичные тексты компилятора содержат в основном объяснения по лексическому анализу и разбору и очень мало для генерации кода. Эти задачи составляют около 5% от кода их (спроектированного, чтобы быть простым!) Компилятором и имели незначительную частоту ошибок. Сложная часть компилятора просто не рассматривается в стандартных текстах.

    Q: Процессы процессов и процессов ядра, в отличие от ядра?

    Я не уверен, есть ли один правильный ответ, но я попробую.
    Цитируя «Разработка и внедрение операционных систем» (A. Tanenbaum), 3-е издание, глава 2.1 гласит:

    2.1. Введение в процессы

    Все современные компьютеры могут делать несколько вещей одновременно. При запуске пользовательской программы компьютер также может считывать с диска и выводить текст на экран или принтер. В системе мультипрограммирования ЦП также переключается с программы на программу, запуская каждую в течение десятков или сотен миллисекунд. Хотя, строго говоря, в любой момент времени процессор работает только с одной программой, в течение 1 секунды он может работать на нескольких программах, что дает пользователям иллюзию параллелизма. Иногда люди говорят о псевдопараллельности в этом контексте, чтобы противопоставить ему истинный аппаратный параллелизм многопроцессорных систем (которые имеют два или более ЦП, разделяющих одну и ту же физическую память). Следить за несколькими параллельными действиями трудно для людей. Таким образом, разработчики операционной системы на протяжении многих лет разработали концептуальную модель (последовательные процессы), которая облегчает параллелизм. Эта модель, ее использование и некоторые ее последствия являются предметом этой главы.

    2.1.1. Модель процесса

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

    (акцент мой)

    Пока я еще не закончил читать книгу, в соответствии с этим объяснением «процесс» – это блок работы, который выполняется на процессоре и содержит все необходимые ресурсы (изображение, состояние, регистры, счетчики …).

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

    ядро всегда работает в режиме ядра и использует только пространство ядра.

    Это зависит от типа ядра. Монолитическое ядро ​​запускает свой материал в одном адресном пространстве (пространстве ядра), в то время как микроядра могут запускать свои процессы ядра в пользовательском пространстве.

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

    См. Выше, системный процесс может работать в обоих режимах, в зависимости от типа ядра.

    Являются ли процессы пользователя и системные процессы процессами, в отличие от ядра?

    Да, оба процесса пользователя и системные процессы – это процессы – следовательно, именование 😉 Я не понимаю часть после запятой.

    Является ли «системный процесс» отличным от пути управления ядрами и потока ядра?

    Да. Процесс (пользователь или система = ядро) – это нечто другое.

    Путь управления ядром представляет собой последовательность инструкций, поток ядра (aka LWP – легкий процесс) – это поток, который создается и назначается непосредственно ядром (в отличие от пользовательских потоков, создаваемых потоковой lib).

    Вывод

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

    Linux и Unix - лучшая ОС в мире.