Состояние процесса сохраняется в печатной плате, а состояние потока — в TCB.

Предположим, что процесс p0 создан. P0 имеет два потока (основной поток) t0 и t1. Итак, где-то есть PCB0 для p0, TCB0 для t0 и TCB1 для t1. (5 состояний выполнения для простоты: создано, готово, выполняется, заблокировано, прекращено)

  1. p0 находится в рабочем состоянии, когда хотя бы один из его потоков находится в рабочем состоянии?

  2. Наверняка в TCB должно быть поле для состояния потока. Если состояние p0 можно рассчитать напрямую из состояния его потоков: есть ли поле состояния выполнения в PCB и почему?

  3. Если ответ в пункте 2 положительный: каждый раз, когда состояние потока изменяется, должны ли мы проверять состояние всех потоков процесса, чтобы поддерживать PCB.state в актуальном состоянии? Это не лишнее?


person marmotas    schedule 06.12.2015    source источник
comment
Зачем процессу нужно состояние выполнения, если он не является единицей выполнения?   -  person Martin James    schedule 07.12.2015
comment
Я мог бы задать ваш вопрос. Это своего рода и гораздо более всеобъемлющим.   -  person marmotas    schedule 07.12.2015


Ответы (1)


p0 находится в рабочем состоянии, когда хотя бы один из его потоков находится в рабочем состоянии?

Не каждый раз. Состояние процесса и состояние потока могут быть разными. Таким образом, нет необходимости, когда поток находится в работе, p0 остается в работе, он может быть в состоянии блокировки или готовности. Некоторые из возможных ситуаций между потоком и процессом:

Процесс находится в состоянии готовности, один из потоков процесса находится в состоянии выполнения.

Процесс заблокирован в заблокированном состоянии, один из потоков процесса находится в состоянии выполнения.

например когда многопоточное приложение запускается как процесс, содержащий один поток. В это время процесс находится в рабочем состоянии. Затем приложение использует библиотеку потоков пользовательского уровня для создания дополнительных потоков. Теперь, когда поток A начнет выполняться, он войдет в состояние выполнения. Предположим, поток A выполняет системный вызов ввода-вывода. В этой ситуации управление передается ядру, которое блокирует процесс. В этом случае поток A все еще выполняется, даже если процесс находится в заблокированном состоянии. Это один из примеров, когда процесс заблокирован, но поток запущен.

Наверняка в TCB должно быть поле для состояния потока.

да, в tcb есть поле для состояния (например, запуск, завершение, готовность, блокировка и т. д.).

Есть ли в печатной плате поле состояния выполнения и почему?

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

Надеюсь, вы удовлетворите мой ответ. Удачи :-)

---› Проверьте эту ссылку для справки

---› проверить ссылку на содержание TCB и PCB

person Punit Vara    schedule 06.12.2015
comment
Могу ли я оставить комментарий, чтобы проголосовать против, чтобы я мог улучшить ответ? - person Punit Vara; 06.12.2015
comment
Я обновляю ответ, пожалуйста, прочитайте ссылку, если вы считаете, что этот ответ неправильный. - person Punit Vara; 06.12.2015
comment
Я ответил только на первый вопрос, а не на каждый. Надеюсь, вы переосмыслите свое решение против голосования. - person Punit Vara; 06.12.2015
comment
Спасибо, что проголосовали против этого ответа. Я очень вам благодарен. :-) - person Punit Vara; 06.12.2015