Категории компьютерных программ

Завершено

Компьютерная программа включает в себя вычислительный алгоритм, объявления переменных, присваивания переменных, выражения и операторы управления потоком, которые обычно выражаются на высокоуровневом языке программирования, таком как Java или C++. Перед выполнением программы обычно компилируются и затем преобразуются в машинные инструкции или коды, которые центральный процессор (ЦП) может выполнять как последовательно, так и одновременно. Последовательная программа выполняется в запрограммированном порядке (т. е. в исходной последовательности инструкций, заданной программистом).

Параллельная программа, напротив, является набором последовательных программ, которые во время выполнения совместно используют один или несколько ЦП. Благодаря такому разделению времени несколько программ могут по очереди использовать один вычислительный ресурс. Например, учитывая, что на ЦП можно запускать только одну программу за раз, для выполнения нескольких последовательных программ на одном процессоре требуется, чтобы операционная система (ОС) могла использовать стратегию планирования, такую как циклический перебор, для выделения ресурса каждой программе в течение заданного интервала.

Our taxonomy of programs.

Рис. 1. Наша таксономия программ

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

Другим термином, распространенным в параллельном или распределенном программировании, является многозадачность, под которой понимается перекрытие вычислений одной программы вычислениями другой. Эта концепция является ключевой для всех современных операционных систем и описывает механизм планирования, позволяющий операционной системе одновременно использовать несколько программ. Многозадачность стала настолько эффективной, что практически все современные языки программирования теперь поддерживают ее через конструкции многопоточности.

Термин "поток" был популяризирован в рамках Pthreads (потоков POSIX)1, спецификации конструкций параллелизма, которая была широко принята, особенно в системах UNIX2. Поток выполнения — это наименьшая последовательность инструкций, которыми операционная система может управлять с помощью планировщика. Потоки тесно связаны с процессами: поток выполняется в адресном пространстве процесса, а процесс — в своем собственном адресном пространстве. Таким образом, процесс может содержать один или несколько потоков, и эти потоки не являются автономными рабочими единицами. В принципе, разные процессы не используют общую память, в то время как все потоки внутри процесса делят родительское адресное пространство.

Задача — это еще один термин, который относится к небольшой единице работы, и в этой единице он используется в значении "процесс". Кроме того, мы совокупно обозначаем задачи (возможно, только одну), принадлежащие одной программе/приложению, как задание. Приложение может содержать несколько заданий. Например, приложение по гидродинамике обычно состоит из трех заданий, каждое из которых индивидуально отвечает за структурный, жидкостный и термический анализ. Кроме того, каждое задание может выполнять свою работу с помощью нескольких задач. На следующем рисунке показаны основные понятия процессов, потоков, задач, заданий и приложений.

A demonstration of the concepts of processes, threads, tasks, jobs, and applications.

Рис. 2. Демонстрация концепций процессов, потоков, задач, заданий и приложений


Ссылки

  1. Barney, Blaise (last updated 07/2019). POSIX Threads Programming Lawrence Livermore National Laboratory
  2. M. Ben-Ari (March 6, 2006). Principles of Concurrent and Distributed Programming Addison-Wesley

Проверьте свои знания

1.

Чтобы извлечь информацию, сценарий оболочки UNIX использует grep и awk для последовательной обработки обычных текстовых файлов. Эта программа выполняется одновременно с другими в ОС UNIX. К какой категории программ ее можно отнести?

2.

Программа робота-секретаря работает под управлением ОС Linux и состоит из нескольких функциональных модулей, запущенных одновременно для выполнения нескольких задач, таких как генерация речи и мимики. Эти функциональные модули разработаны как независимые процессы, которые могут совместно использовать время на одном процессоре или ядре. К какой категории программ ее можно отнести?

3.

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

4.

Folding@Home является крупномасштабным вычислительным проектом, использующим время простоя компьютеров разработчиков-добровольцев для выполнения сложных имитаций процесса сворачивания белка через Интернет. К какому типу программ относится Folding@Home?

5.

Какое из следующих утверждений верно для распределенных программ?