Процессы и потоки windows
Процесс (process)- представляет собой объект, обладающий собственным независимым виртуальным адресным пространством, в котором могут размещаться код и данные, защищенные от других процессов. В свою очередь, внутри каждого процесса могут независимо выполняться одна или несколько потоков (threads).
С точки зрения программиста каждому процессу принадлежат ресурсы, представленные следующими компонентами:
· один или несколько потоков.
· виртуальное адресное пространство, отличное от адресных пространств других процессов, если не считать областей памяти, распределенных явным образом для совместного использования (разделения) несколькими процессами.
· один или несколько сегментов кода, включая код DLL.
· один или несколько сегментов данных, содержащих глобальные переменные.
· строки, содержащие информацию об окружении, например, информацию о текущем пути доступа к файлам.
· куча процесса.
· различного рода ресурсы, например, дескрипторы открытых файлов и другие кучи.
Поток разделяет вместе с процессом код, глобальные переменные, строки окружения и другие ресурсы. Каждый поток планируется независимо от других и располагает следующими элементами:
· стек, используемый для вызова процедур, прерываний и обработчиков исключений, а также хранения автоматических переменных.
· локальные области хранения потока (Thread Local Storage) — массивы указателей, используя которые каждый поток может создавать собственную уникальную информационную среду.
· аргумент в стеке, получаемый от создающего потока, который обычно является уникальным для каждого потока.
· структура контекста, поддерживаемая ядром системы и содержащая значения машинных регистров.
Процесс и его потоки (Windows)
Ресурсы
Ресурс – объект, который запрашивается, используется и освобождается процессами в период их активности.
Делимые ресурсы – ресурсы, которые несколько процессов могут использовать одновременно.
Используемые параллельно – в течение некоторого интервала времени процессы используют попеременно.
Unix
Создание нового процесса
Когда возникает необходимость создания нового процесса , текущий процесс выполняет системный вызов fork. При этом создаётся новый процесс, представляющий собой копию исходного процесса и его контекста. Новый процесс отличается тем, что у него другой PID, а родителем для него является запустивший процесс. Далее дочерний процесс с помощью системного вызова exec запускает вместо себя другую программу, заново проинициализировав свои код и данные.
Контекст процесса
Каждому процессу соответствует контекст, в котором он выполняется. Этот контекст включает пользовательский контекст (т. е. содержимое виртуального адресного пространства, сегментов программного кода, данных, стека, разделяемых сегментов и сегментов файлов, отображаемых в виртуальную память), содержимое аппаратных регистров — регистровый контекст (регистр счетчика команд, регистр состояния процессора, регистр указателя стека и регистры общего назначения), а также структуры данных ядра (контекст системного уровня), связанные с этим процессом. Контекст процесса системного уровня в ОС UNIX состоит из «статической» и «динамических» частей. Для каждого процесса имеется одна статическая часть контекста системного уровня и переменное число динамических частей.
Статическая часть контекста процесса системного уровня включает следующее:
1. Идентификатор процесса (PID)- уникальный номер, идентифицирующий процесс. По сути, это номер строки в таблице процессов — специальной внутренней структуре ядра операционной системы, хранящей информацию о процессах.
В любой момент времени ни у каких двух процессов номера не могут совпадать, однако после завершения процесса его номер освобождается и может быть в дальнейшем использован для идентификации любого вновь запущенного процесса.
2. Идентификатор родительского процесса (PPID) - в операционной системе UNIX процессы выстраиваются в иерархию — новый процесс может быть создан только одним из уже существующих процессов, который выступает для него родительским.
Очевидно, что в такой схеме должен присутствовать один процесс с особым статусом: он должен быть порожден ядром операционной системы и будет являться родительским для всех остальных процессов в системе. В UNIX такой процесс имеет собственное имя — init.
Состояние процесса
Каждый процесс в любой момент времени находится в одном из нескольких определенных состояний: инициализация, исполнение, приостановка, ожидание ввода-вывода, завершение и т. п.
Большинство этих состояний совпадает с классическим набором состояний процессов в многозадачных операционных системах. Для операционной системы UNIX характерно особое состояние процесса — зомби. Процесс получает это состояние, если он завершился раньше, чем этого ожидал его родительский процесс. В UNIX перевод процессов в состояние зомби служит для корректного завершения группы процессов, освобождения ресурсов и т. п.
Дата добавления: 2017-01-26; просмотров: 2974;