Чем процесс отличается от потока?…

В предыдущем посте, я рассказал Вам о понятии процесса в ОС. Сегодня же, я изложу более подробно о потоке, его отличии от процесса, а с помощью своих чудо-рук, ты сможешь создать консольный вариант Диспетчера задач (такой, немного убогий и без функции конечно…ну все-таки).

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

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

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

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

Процессы и потоки

Любой поток состоит из двух компонентов:

объекта ядра, через который операционная система управляет потоком. Там же хранится статистическая информация о потоке(дополнительные потоки создаются также ядром);
стека потока, который содержит параметры всех функций и локальные переменные, необходимые потоку для выполнения кода.

Подводя черту, закрепим: главное отличие процессов от потоков, состоит в том, что процессы изолированы друг от друга, так используют разные адресные пространства, а потоки, могут использовать одно и то же пространство (внутри процесса) при этом, выполняя действия не мешаяя друг другу. В этом и заключается удобство многопоточного программинга: разбив приложение на несколько последовательных потоков, мы можем увеличить производительность, упростить пользовательский интерфейс и добиться масштабируемости (если Ваше приложение установят на многопроцессорную систему, выполняя потоки на разных процах, ваша прога будет работать с аховой скоростью=)).

Я решил не рассказывать о многопоточном программировании сегодня, тем более что есть отличные мануалы по этой теме(ссылка внизу), а просто познакомиться с тем какие средства есть у CSharp для взаимодействия с потоками и процессами. А что рассказывать? Вот вам исходник - http://www.hotfile.ru/26806/ (пароль 123) (с комментами), вот Вам скриншот для затравки - (PID - id процесса(integer), такой же есть и у потока). Так что, MSDN в соседнее от окошка Class1.cs и вперед…=)

Скриншот к программе

Понять пост не читая или для ленивых:

  1. Поток (thread) определяет последовательность исполнения кода в процессе.
  2. Процесс ничего не исполняет, он просто служит контейнером потоков.
  3. Потоки всегда создаются в контексте какого-либо процесса, и вся их жизнь проходит только в его границах.
  4. Потоки могут исполнять один и тот же код и манипулировать одними и теми же данными, а также совместно использовать описатели объектов ядра, поскольку таблица описателей создается не в отдельных потоках, а в процессах.
  5. Так как потоки расходуют существенно меньше ресурсов, чем процессы, старайтесь решать свои задачи за счет использования дополнительных потоков и избегайте создания новых процессов(но подходите к этому с умом).

Ссылка в тему: Основы многопоточного программирования на CSharp: http://www.albahari.com/threading/index.html

А почитать еще теории? Рихтер и Таненбаум…

PS (гимн блоггеру-новичку): на самом деле, песня из сериала Бандитский Петербург начинается словами : Блог и пустота, данные вордпресс…(знакомые ощущения?)

PSS (по следам Горя от оптимизации): Я тут понял. В наш век - бурного развития Интернета и его проникновения во все среды жизни, Бог, стал не только дарить и отбирать жизни, но и следить за PageRank, забанивать в форумах и накручивать hits на блогах :)


Technorati : , , ,

Опубликовано в CSharp, Operating Systems. 3 Comments »

Концепция процесса в теории операционных систем…

Поводом для написания этого поста, послужил тот факт, что сидя на двух разных лекциях, двух разных преподов (а может даже и трёх), я услышал одну и ту же формулировку, объясняющую понятие процессов и их планирования. «Ну это когда Вы вот запускаете Ворд, Аутлук и при этом еще переписываетесь в асе, процессор же их на самом деле не одновременно выполняет, а по очереди, планирует так сказать последовательность исполнения команд» — сказал один. Другой сказал тоже самое, но (вот здесь внимание), когда он перечислял проги, которые Вы запустили, добавил: «…или слушаете музыку в своем эмпэтретьем плеере» =). Кстати о нем я расскажу поподробней, после окончания семестра=) (именно с ним связан пост Ответ учителя…=)). Тут я понял, что мальчики слегка не теме, а самое главное — я тоже. Исправляемся.

Для того, чтобы Вы сразу поняли, что из себя представляет процесс для ОС, приведу пару аналогий из жизни, а потом поговорим «языком книжек»:

  1. Текст книги можно сравнить с текстом компьютерной программы или спецификацией модуля. Операция чтения книги сравнима с выполнением программы процессором.
  2. Два музыканта, читающих одну и ту же партитуру во время исполнения муз. произведения, подобны двум процессам, которые одновременно выполняют одну и ту же программу на двух процессорах. Если музыкантам для синхронной игры нужно одновременно переворачивать страницы, то процессам необходимо согласовать свои действия.
  3. Вы почитали книгу и отложили запомнив страницу. Книгу взял Ваш друг-ботаник и тоже начал читать. В результате Вы оба по очереди дочитали книгу. Это аналогия с 2 процессами, выполняющими программу. В каждый момент времени книгу может читать только один из Вас, а программа может выполняться только одним процессоров.
  4. Вы читаете книгу, звонит телефон, вы отвечаете на звонок и возвращаетесь к прерванному занятию. Таким же образом и процесс может временно оставить выполнение команды, для того чтобы отреагировать на то или иное событие, например, сигнал от дисковода о завершении передачи данных.

Надеюсь у Вас уже сложилось представление. Закрепляем. Процессабстрактное понятие, описывающее работу программы. По стути, процессом является выполняемая программа, включая значения счетчика команд, регистров и переменных. С позиции данной абстрактной модели, у каждого процесса есть собственный виртуальный центральный процессор. На самом деле, конечно процессор один и он переключается с одного процесса на другой, но для лучшего понимания лучше рассматривать набор процессов идущих параллельно(псевдопараллельно), чем пытаться представить себе процессор, переключающийся от программы к программе. Это переключение и есть то самое свойство многозадачности, присущее современным ОС. Чтобы Вы окончательно уловили смысл процесса и отличали его от понятия программы приведу еще пример. Вы решили испечь торт (я себя правда в этой роли смутно представляю, ну а вдруг нас читают девушки=)). У Вас есть рецепт, ингридиенты, кухонная плита. Тогда, по аналогии, рецепт — это программа (то есть алгоритм записанный в заданном виде), Вы — это процессор, а ингридиенты — входные данные. Процессом является следующая последовательность действий: Вы читаете рецепт(ваша программа), смешиваете продукты и печете торт. А теперь представьте на кухню заходит Ваша мама и просит убраться в комнате (я себя в этой роли отлично представляю=)). Тогда, Вы отмечаете на чем остановились (сохраняете текущее состояние процесса) и идете убираться, таким образом наш процессор(то есть Вы) переключается с одного процесса на другой, с более высоким приоритетом (ведь мама попросила=)). У каждого процесса есть своя программа(рецепт и «алгоритм уборки»). После уборки, Вы возвращаетесь к выпечке. Ну а теперь уяснили? Ок, двигаемся снова.

Создаются процессы в ОС посредством следующих событий:

  • Инициализация системы.
  • Выполнение изданного работающим процессом системного запроса на создание процесса.
  • Запрос пользователя на создание процесса
  • Инициирование пакетного задания

Обычно при загрузке системы создаются несколько процессов. Некоторые из них являются высокоприоритетными процессами, то есть обеспечивающими взаимодействие с пользователем и выполняющими заданную работу. Отсальные процессы являются фоновыми - их также называют демоны. Список демонов ты видишь нажимая Ctrl-Alt-Del.

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

  1. Работающий (в этот конкрентный момент использующий процессор).
  2. Готовый к работе (процесс временно приостановлен, чтобы позволить выполняться другому процессу).
  3. Заблокированный (процесс не может быть запущен прежде чем произойдет некое внешнее событие).

proc

 

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

Стоит сказать, что процесс не единственное понятие для ОС или так сказать «неделимое». Существуют более мелкие и крупные модели. На рисунке ты можешь увидеть, «кто в что одет», на примере Windows 2000:

process2

 

  • Задание — набор процессов с общими квотами и лимитами
  • Процесс — контейнер для ресурсов
  • Поток — сущность, планируемая ядром
  • Волокно — облегченный поток, управляемый полностью в пространстве пользователя

Моей целью было объяснить читателю, что такое процесс, при этом я не стал вдаваться в подробности алгоритмов планирования, расстановки приоритета или синхронизации процессов. Если эта тематика Вам интересна или Вы не уловили что-то - для этого существуют комменты.

PS (не в тему): я редко смотрю телек, но сегодня включил около 11 утра НТВ. Оказывается Шнур начал вести программу: «Шнур Вкоруг Света». То есть Серёга путешествует=). И надо сказать, гид из него хоть куда. Сегодня он был на Ямайке — родине Боба Марли. Я запомнил пару фраз, кинутые «ленинградским путешественником»:

— Сколько же выкурков в нашей стране мечтают побывать на этой площади, а я вот не курю, а здесь! (на Ямайке есть целая площадь и улица Боба)

— Интересно, сколько же они выкурили, для того чтобы додуматься начать заниматься бобслеем? (я тоже офигел, когда показали бар посвященный участию сборной Ямайки по бобслею!!! на олимпийских играх :) )

Вообщем, приколов хватает — советую и Вам смотреть=).

PSS: а крокодила он назвал клаббером :) , за то, что тот днем спит, валяется на солнце и пьет воду, а ночью начинает охотиться…