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