Jump to content

Параллельный Паскаль

Параллельный Паскаль
Парадигмы Императивный , структурированный , параллельный
Семья Вирт Паскаль
Разработано Пер Бринч Хансен
Впервые появился апрель 1974 г .; 50 лет назад ( 1974-04 )
Дисциплина набора текста Статический и динамичный , сильный , безопасный
Платформа Декабрьский ПРП 11
Под влиянием
Алгол 60 , Симула 67, Паскаль

Concurrent Pascal — это язык программирования, разработанный Пером Бринчом Хансеном для написания программ параллельных вычислений , таких как операционные системы и системы мониторинга вычислений в реальном времени на компьютерах с общей памятью . [1]

Отдельный язык Sequential Pascal используется в качестве языка прикладных программ, запускаемых операционными системами, написанными на Concurrent Pascal. Оба языка являются расширениями языка Никлауса Вирта и Паскаль используют общий интерпретатор многопоточного кода . [2] Ниже описывается, чем Concurrent Pascal отличается от Pascal Вирта.

Описание языка [ править ]

Некоторые конструкции Паскаля были удалены из Concurrent Pascal для простоты и безопасности: [2]

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

Concurrent Pascal включает типы данных класса, монитора и процесса. Экземпляры этих типов объявляются как переменные и инициализируются в init заявление.

Классы и мониторы схожи: как частные переменные, так и процедуры упаковываются в общедоступные процедуры (называемые записями процедур). Экземпляр класса может использоваться только одним процессом, тогда как экземпляр монитора может совместно использоваться процессами. Мониторы предоставляют единственный механизм межпроцессного взаимодействия в программе Concurrent Pascal.

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

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

Конфигурация процессов, мониторов и классов в программе Concurrent Pascal обычно устанавливается в начале выполнения и в дальнейшем не изменяется. Пути связи между этими компонентами устанавливаются переменными, передаваемыми в init операторы, поскольку переменные экземпляра класса и монитора не могут использоваться в качестве параметров процедуры.

Пример [ править ]

В следующем примере показано объявление простого монитора и его использование двумя взаимодействующими процессами.

type
    "Bounded buffer monitor"
    buffer = Monitor
        var
            saved         : Integer;  "saved item is an integer"
            fullq, emptyq : Queue;    "used by only two processes"
            full          : Boolean;  "true if an item is saved:"

        "Puts item in buffer"
        procedure entry put(item : Integer);
            begin
               if full then
                   delay(fullq);      "block if full"
               saved := item;         "save the item"
               full := true;          "mark as full"
               continue(emptyq)       "unblock consumer"
            end;

        "Gets item from the buffer"
        procedure entry get(var item : Integer);
            begin
               if not full then
                   delay(emptyq);     "block if empty"
               item := saved;         "get the item"
               full := false;         "mark as not full"
               continue(fullq)        "unblock producer"
            end;

        "Initialize the monitor"
        begin
            full := false
        end;

    "Producer uses a buffer"
    producer = process(pass : Buffer);
        var item : Integer;
        begin
            cycle                     "execute in a loop forever"
                "produce an item"
                pass.put(item)        "pass an item to the monitor"
            end
        end;

    "Consumer uses a buffer"
    consumer = process(pass : Buffer);
        var item : Integer;
        begin
            cycle
                pass.get(item);       "get an item from the monitor"
                "consume the item"
            end
        end;

"declare instances of the monitor, producer, and consumer"
"give the producer and consumer access to the monitor"
var
   pass : Buffer;
   prod : Producer;
   cons : Consumer;
begin
   init pass,        "initialize the monitor"
        prod(pass),  "start the producer process"
        cons(pass)   "start the consumer process"
end.

Ссылки [ править ]

  1. ^ Бринч Хансен, Пер (июнь 1975 г.). «Язык программирования Concurrent Pascal» (PDF) . Транзакции IEEE по разработке программного обеспечения (2): 199–207. дои : 10.1109/tse.1975.6312840 .
  2. ^ Jump up to: Перейти обратно: а б Бринч Хансен, Пер (1977). Архитектура параллельных программ . Прентис Холл. ISBN  978-0-13-044628-2 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4fc71d5d40e4e32f0bc073f3a773be1a__1651112040
URL1:https://arc.ask3.ru/arc/aa/4f/1a/4fc71d5d40e4e32f0bc073f3a773be1a.html
Заголовок, (Title) документа по адресу, URL1:
Concurrent Pascal - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)