- 55 -
торы (как правило, просто номера). В дальнейшем каждый контекст
может породить новые контексты, однако они уже не получат нового
адреса в сети межпроцессорной передачи данных, их адрес будет сов-
падать с адресом, присвоенном их родителю. Виртуальный процессор,
таким образом, объединят родительский контекст и порожденные им
контексты. Поскольку с точки зрения программиста нет разницы ме-
жду реальным и виртуальным процессором, в дальнейшем мы будем
использовать термин процессор, имея в виду виртуальный процессор.
Важным свойством контекста является возможность поро-
ждения нитей (иначе называемых thread – тред, процесс, поток,
ветвь). Нить - это процесс, который всегда входит в состав одного из
контекстов и имеет свободный, непосредственный доступ ко всей
оперативной памяти, доступной данному контексту. Нить является
частью программного кода, выполняемой параллельно или конку-
рентно с любыми другими процессами, в том числе с основным про -
цессом контекста или с другими нитями этого контекста. Контекст
может породить произвольное, допускаемое конкретной системой
число нитей, все они будут иметь доступ к общей памяти контекста.
В ряде систем программирования, например в MPI, не предусмотрено
возможности явного запуска нитей, однако неявно нити используются
самой библиотекой MPI, например, при организации операций пере-
дачи данных по каналам.
В системах с одним процессором нити выполняются конку-
рентно, и контексты, порожденные в ходе выполнения задачи тоже.
Так же конкурентно выполняются контексты, запущенные в разных
виртуальных процессорах на одном физическом процессоре.
Между собой процессы, расположенные на разных процес-
сорах, могут взаимодействовать с помощью обмена сообщениями по
специальным каналам обмена данными. В простейшем случае мы бу-
дем рассматривать так называемые двухточечные каналы передачи
данных. Каждый такой канал соединяет между собой два процесса на
одном или на разных процессорах. Вообще говоря, каналы являются
однонаправленными, это означает, что для обмена данными между
процессами A и B необходимо создать два канала – от A к B, и от B к
A, но мы не будем акцентировать на этом внимание, считая каналы
двунаправленными, допускающими одновременную передачу инфор-
мации в обе стороны. Будем полагать, что это так, даже если исполь-
зуемые физические каналы межпроцессорной связи такими свойства-
ми не обладают, перекладывая функции по их обеспечению на соот-
ветствующее системное программное обеспечение. С точки зрения
программиста, каналы могут быть синхронные и асинхронные, буфе-
ризованные и нет, соотв етствующие свойст ва буду т рассмотрены позже.