Модель потока

Модель процесса, которую мы рассматривали ранее, базируется на двух независимых концепциях: группировании ресурсов и выполнении программы. Иногда полезно их разделять, и тут появляется понятие потока.

Процесс можно рассматривать как поток исполняемых команд или просто поток. У потока есть счетчик команд, отслеживающий порядок выполнения действий. У него есть регистры, в которых хранятся текущие переменные. У него есть стек, содержащий протокол выполнения процесса, где на каждую процедуру, вызванную, но еще не вернувшуюся, отведен отдельный фрейм. Хотя поток должен исполняться внутри процесса, следует различать концепции потока и процесса. Процессы используются для группирования ресурсов, а потоки являются объектами, поочередно исполняющимися на центральном процессоре.

Несколько потоков, работающих параллельно в одном процессе, аналогичны нескольким процессам, идущим параллельно на одном компьютере. В первом случае потоки разделяют адресное пространство, открытые файлы и другие ресурсы. Во втором случае процессы совместно пользуются физической памятью, дисками, принтерами и другими ресурсами. Потоки обладают некоторыми свойствами процессов, поэтому их иногда называют упрощенными процесса­ми.

фкн модель процесса

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

В обоих случаях мы имеем три потока, но на рис. а) каждый из них имеет собственное адресное пространство, а на рис. б) потоки разделяют единое адресное пространство.

-------------
#Элементы совместно используемые всеми потоками процесса(элементы процесса)=

  1. Адресное пространство
  2. Глобальные переменные
  3. Открытые файлы
  4. Дочерние процессы
  5. Необработанные аварийные сигналы
  6. Сигналы и их обработчики
  7. Информация об использовании ресурсов

#Элементы индивидуальные для каждого потока(элементы потока)=

  1. Счётчик команд
  2. Регистры
  3. Стек
  4. Состояние

Как показано в двух списках выше, потоки разделяют не толь­ко адресное пространство, но и открытые файлы, дочерние процессы, сигналы и т. п. Таким образом -

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

стэк фкн
Важно понимать, что у каждого потока свой собственный стек, как показано на рисунке.
Стек каждого потока содержит по одному фрейму для каждой процедуры, вызванной, но еще не вернувшей управления.
Каждый поток может вызывать различные процедуры и, соответственно, иметь различный протокол выполнения процесса — именно поэтому каждому потоку необходим собственный стек.