Хранение и извлечение блока управления процессом - PullRequest
4 голосов
/ 26 марта 2012

Когда процесс выполняется, содержимое PCB (которое находится в области памяти ядра?) Загружается в регистры ЦП, а регистры состояния , указатели стека ядра , указатели стека пользователя и т. д.

Когда происходит переключение контекста на другой процесс, текущий «контекст» сохраняется на печатной плате, и выполняется переключение на новую печатную плату.

Теперь, когда ядро ​​хочет вернуть эту PCB обратно в «контекст», как оно находит эту PCB, которая сейчас находится в памяти? Какая информация помогает ядру находить печатную плату в памяти?

Ответы [ 3 ]

5 голосов
/ 28 марта 2012

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

1 голос
/ 25 мая 2015

Я хотел бы предоставить подробную информацию о битах (и, чтобы ее было легко понять, учитывая, что на процесс приходится ОДИН поток ядра).

Теперь есть контекст потока (eip, ebp, esp, pagedir, kstack, kstacksize) с каждым потоком ядра (kthread).Итак, поскольку мы все знаем жизненный цикл потока / процесса, он проходит через такие состояния, как - «Запуск, выполнение, ожидание, выход» .Когда поток находится в рабочем состоянии, его контекст находится в структуре данных ядра "context_t", хранящейся где-то в адресном пространстве ядра.и стек ядра содержит указатель на эту структуру данных. Когда происходит переключение потока (в более технических словах, мы должны сказать context_switch) (причина может быть - тайм-аут процессора планировщика, завершение операции ввода-вывода и т. д.), поток помещается в очередьструктура данных ядра очереди работоспособности (в ожидании возможности получить процессор).

Когда состояния становятся «работающими», переключение контекста происходит снова, и теперь context_t загружается.который имеет все необходимые указатели для доступа к ранее сохраненным элементам данных, которые теперь будут использоваться для продолжения формирования ранее остановленного состояния.

Все структуры данных ядра хранятся в адресном пространстве ядра (> 0xc0000000), и поток имеетуказатели на эти блоки контекста.(поскольку потоки переключаются, новый поток указывает на свой контекст - снова переключение контекста, следующий поток указывает на свою собственную структуру данных.

1 голос
/ 01 апреля 2015
  1. PCB: это структура данных, которая может быть частью ОС или пользователя.Но так как это чувствительная структура данных, почти везде PCB является частью структуры данных ядра
  2. PCB в основном хранится как стек ядра для каждого процесса, который находится в пространстве ядра, и ядро ​​имеет доступ к нему, который защищен от любыхusers.
  3. Переключение процессов является функцией планировщика и является модулем ядра.Существует много алгоритмов планирования для определения переключения процессов (долгосрочные / краткосрочные / среднесрочные и т. Д.)
  4. Теперь планировщик определяет, какой процесс будет запускаться следующим, а не ядро.Функция ядра состоит в том, чтобы просто предоставлять службу при вызове (системные вызовы / прерывания / прерывания).
  5. Поскольку модуль ядра "scheduler" имеет доступ ко всем структурам данных ядра, он определяет последовательность процесса(это может быть упреждающий или кооперативный планировщик).
  6. Каждый процесс имеет свою PCB, поэтому активный / работающий процесс загружает свою PCB в регистры CPU и другие необходимые секции, используя ранее сохраненную PCB (в основном) передстек ядра.

Всегда имейте в виду: ядро ​​похоже на официанта, который обслуживает то, о чем просят, кто ничего не знает, выполняет все как работа осла (хотя и важнее всего) согласно сказанному.

...