Хранение и извлечение блока управления процессом

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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

Таблица процессов состоит из PID и ссылки на соответствующую плату в памяти.

поэтому всякий раз, когда ОС выполняет переключение контекста, она просматривает таблицу процессов, чтобы найти ссылку на плату с помощью соответствующего PID.

проверьте это изображение, чтобы визуализировать эту концепцию

Другие вопросы по тегам