Почему ОС требует / поддерживает streamи ядра?

Ниже представлены три модели streamов, с которыми я столкнулся. Основываясь на этих ниже 3-х архитектурах, мне стало понятным, что существует также нечто, называемое streamом ядра, помимо пользовательского streamа, который вводится как часть POSIX.1C

Это модель 1-1

введите описание изображения здесь

Это модель N-1.

введите описание изображения здесь

Это гибридная модель.

введите описание изображения здесь

У меня много вопросов по SO для streamов ядра. Это выглядит более уместной ссылкой для уточнения.

На уровне процесса Для каждого пользовательского процесса, загружаемого загрузчиком Linux (скажем), Kernel не выделяет соответствующий процесс ядра для выполнения машинных инструкций, которые возникли в пользовательском процессе. Запрос пользователя только для выполнения режима ядра, когда для него требуется средство из модуля ядра [например, malloc () / fork ()]. Планирование пользовательского процесса выполняется планировщиком ОС и назначает kernel ​​ЦП.

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

a=a+2;//a is my local variable in a user level C function

Мой вопрос:

1) Итак, Какова цель streamа уровня ядра? Почему ОС необходимо поддерживать stream ядра (дополнительно) для соответствующего пользовательского streamа процесса пользовательского уровня? Имеет ли пользовательский режим программист какой-либо контроль при выборе любой из трех трех моделей streamов для данного пользовательского процесса посредством программирования?

После того, как я понял ответ на первый вопрос,

2) Фактически ли stream ядра запланирован планировщиком ОС, но не пользовательский stream?

Я думаю, что использование слова « stream ядра» немного неверно в этих цифрах. Я знаю цифры из книги об операционной системе (дизайне), и если я правильно помню, они ссылаются на то, как работа запланирована операционной системой. На рисунках каждый процесс имеет по крайней мере один stream ядра, назначенный, который запланирован kernelм.

Модель N-1 показывает многопользовательские streamи, которые вообще не известны ядру, потому что последний планирует процесс (или как он вызывается на рисунке, только один stream ядра ). Таким образом, для ядра каждый процесс представляет собой stream ядра. Когда процессу назначается срез процессорного времени, он сам запускает несколько streamов, планируя их по своему усмотрению.

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

Гибридная модель сочетает в себе оба принципа, когда легкие процессы фактически являются нитями, известными ядру и которые запланированы для его выполнения. Кроме того, они реализуют streamи, которые kernel ​​не знает и не назначает процессор времени в пользовательской зоне.

И теперь, чтобы быть полностью смущенным, на самом деле есть реальный stream ядра в Linux. Но насколько я понимаю концепцию, эти streamи используются только для операций ядра, например, когда модули ядра должны делать что-то параллельно.

Итак, Какова цель streamа уровня ядра?

Предоставить транспортное средство для назначения набора ресурсов, предоставляемых ОС. Набор всегда включает выполнение кода ЦП на ядре. Другие могут включать в себя диск, NIC, КБ, мышь, таймеры, которые могут запрашиваться с помощью системных вызовов из streamа. Ядро управляет доступом к этим ресурсам по мере их появления и разрешает конфликты между конфликтами ресурсов, например. запрос на ввод КБ, когда ни один из них недоступен, удалит выполнение ЦП из streamа до тех пор, пока вход КБ становится доступным.

Зачем нам нужен stream ядра (дополнительно) для соответствующего пользовательского streamа процесса уровня пользователя?

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

Имеет ли пользовательский режим программист какой-либо контроль при выборе любой из трех трех моделей streamов для данного пользовательского процесса посредством программирования?

Нет, не без syscall, что означает выход из режима пользователя.

Фактически ли stream ядра запланирован планировщиком ОС, но не пользовательский stream

Да – это единственное, что может быть выполнено, когда оно может его использовать, выполнить удаление, когда оно не может, и быть подвергнуто превентивному удалению CPU, если планировщик ОС требует его для чего-то другого.