Подтвердить что ты не робот

Что является реентерабельным ядром

Что такое реентерабельное ядро?

4b9b3361

Ответ 1

Более простой ответ:

Повторный вход ядра

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

Ядро re-entrant позволяет обрабатывать процессоры (или, точнее, их соответствующие потоки ядра), в режиме ядра. Они не мешают другим процессам также войти в режим ядра. Типичным вариантом использования является ожидание ввода-вывода. Процесс хочет прочитать файл. Он вызывает для этого функцию ядра. Внутри функции ядра контроллер диска запрашивает данные. Получение данных займет некоторое время, и функция будет заблокирована в течение этого времени. С ядром повторного входа планировщик назначит CPU другому процессу (поток ядра) до тех пор, пока прерывание от контроллера диска не покажет, что данные доступны, и наш поток можно возобновить. Этот процесс может по-прежнему обращаться к IO (которому нужны функции ядра), например, к пользовательскому вводу. Система остается отзывчивой, а потери времени процессора из-за ожидания ввода-вывода уменьшаются.

Это довольно стандартно для настольных операционных систем сегодня.

Упреждение ядра

Предотвращение ядра не помогает в общей пропускной способности системы. Вместо этого он стремится к лучшей реакции.

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

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

Примите мое объяснение упреждающего использования с солью. Я рад за любые исправления.

Ответ 2

Все ядра Unix являются реентерабельными. Это означает, что в одномерном режиме могут выполняться несколько процессов. Конечно, в однопроцессорных системах может прогрессировать только один процесс, но многие могут быть заблокированы в режиме ядра при ожидании CPU или завершении некоторых операций ввода-вывода. Например, после выдачи чтения на диск от имени процесса ядро ​​позволяет контроллеру диска обрабатывать его и возобновляет выполнение других процессов. Прерывание уведомляет ядро, когда устройство удовлетворило чтение, поэтому предыдущий процесс может возобновить выполнение.

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

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

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

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

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

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

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

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

Эта информация доступна на http://jno.glas.net/data/prog_books/lin_kern_2.6/0596005652/understandlk-CHP-1-SECT-6.html

Подробнее On http://linux.omnipotent.net/article.php?article_id=12496&page=-1

Ответ 3

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

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

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

Ответ 4

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

Повторная функция:

Does not hold static data over successive calls
Does not return a pointer to static data; all data is provided by the caller of the function
Uses local data or ensures protection of global data by making a local copy of it
Must not call any non-reentrant functions