p0 находится в рабочем состоянии, когда хотя бы один из его потоков находится в рабочем состоянии?
Не каждый раз. Состояние процесса и состояние потока могут быть разными. Таким образом, нет необходимости, когда поток находится в работе, p0
остается в работе, он может быть в состоянии блокировки или готовности. Некоторые из возможных ситуаций между потоком и процессом:
Процесс находится в состоянии готовности, один из потоков процесса находится в состоянии выполнения.
Процесс заблокирован в заблокированном состоянии, один из потоков процесса находится в состоянии выполнения.
например когда многопоточное приложение запускается как процесс, содержащий один поток. В это время процесс находится в рабочем состоянии. Затем приложение использует библиотеку потоков пользовательского уровня для создания дополнительных потоков. Теперь, когда поток A начнет выполняться, он войдет в состояние выполнения. Предположим, поток A выполняет системный вызов ввода-вывода. В этой ситуации управление передается ядру, которое блокирует процесс. В этом случае поток A все еще выполняется, даже если процесс находится в заблокированном состоянии. Это один из примеров, когда процесс заблокирован, но поток запущен.
Наверняка в TCB должно быть поле для состояния потока.
да, в tcb есть поле для состояния (например, запуск, завершение, готовность, блокировка и т. д.).
Есть ли в печатной плате поле состояния выполнения и почему?
Да, в печатной плате тоже есть поле состояния. Но он не рассчитывается из состояния tcb, потому что, как я уже сказал, оба состояния могут быть разными. Поток обычно вызывает разные процедуры и, следовательно, другую историю выполнения.
Надеюсь, вы удовлетворите мой ответ. Удачи :-)
---› Проверьте эту ссылку для справки
---› проверить ссылку на содержание TCB и PCB
person
Punit Vara
schedule
06.12.2015