Контексты ядра находятся в пространстве ядра - PullRequest
0 голосов
/ 20 января 2019

Следующий отрывок из книги Роберта Лава по разработке ядра Linux (LKD).

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

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

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

Что я понял выше, так это то, что в Kernel-пространстве существует только два контекста (по словам Любящего, он включающий), то есть контекст процесса и контекст прерывания. Насколько я понимаю, ядро ​​входит в контекст процесса, когда процесс вызывает системный вызов (например, read (), write () и т. Д.), Тогда как контекст прерывания происходит, когда ядро ​​обрабатывает прерывание.

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

Так что мне интересно, почему в тексте говорится, что в ядре всего два контекста ...?

1 Ответ

0 голосов
/ 20 января 2019

Наиболее важными частями контекста являются адресное пространство (или виртуальная память) и состояние процессора (например, значение регистра, счетчик программ и т. Д.).С этой точки зрения должны существовать другие два вида контекстов: контекст ядра и контекст потока ядра.

Само ядро ​​работает в пространстве ядра и не зависит от задач (включая обычный процесс и потоки ядра).Его контекст называется незанятым контекстом или контекстом своппера.

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

На самом деле контекст прерывания в точности совпадает с контекстом ядра и контекстом потоков ядра:они не полагаются на какой-либо нормальный контекст процесса.Прерывание полностью асинхронно, поэтому в его контексте нет предположения о контексте прерванной задачи.Я думаю, именно поэтому Роберт Лав говорит, что есть только два вида контекстов: контекст процесса и другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...