~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 4FC71D5D40E4E32F0BC073F3A773BE1A__1651112040 ✰
Заголовок документа оригинал.:
✰ Concurrent Pascal - Wikipedia ✰
Заголовок документа перевод.:
✰ Параллельный Паскаль — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Concurrent_Pascal ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/4f/1a/4fc71d5d40e4e32f0bc073f3a773be1a.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/4f/1a/4fc71d5d40e4e32f0bc073f3a773be1a__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 17:07:07 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 28 April 2022, at 05:14 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Параллельный Паскаль — Википедия 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 операторы, поскольку переменные экземпляра класса и монитора не могут использоваться в качестве параметров процедуры.

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

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

тип 
     «Монитор ограниченного буфера» 
     buffer   =   Монитор 
         var 
             сохранен           :   Integer  ;     «сохраненный элемент является целым числом» 
             fullq  ,   пустойq   :   Queue  ;       «используется только двумя процессами» 
             full            :   Boolean  ;     "истина, если элемент сохранен:" 

         "Помещает элемент в буфер" 
         процедуры   Запись   put  (  item   :   Integer  ); 
              начать 
                , если   заполнено,   затем 
                    задержать  (  fullq  );         «блокировать, если заполнено» 
                сохранено   :  =   item  ;            «сохранить элемент» 
                full   :  =   true  ;             «отметить как заполненный» 
                continue  (  emptyq  )         «разблокировать потребителя» 
             end  ; 

         «Получает элемент из буфера» 
         процедуры    Запись   get  (  var   item   :   Integer  ); 
              начать 
                , если   не   заполнено   , то 
                    задержать  (  emptyq  );       «блокировать, если пуст» 
                 элемент   :  =   сохранено  ;            «получить предмет» 
                полностью   :  =   false  ;            «отметить как незаполненный» 
                continue  (  fullq  )          «разблокировать производителя» 
             end  ; 

          «Инициализация монитора» 
         start 
             full   :  =   false 
         end  ; 

      «Производитель использует буфер» 
     Producer   =   Process  (  pass   :   Buffer  ); 
         var    элемент   :   целое число  ; 
          начать 
             цикл                       «выполнять в цикле вечно» 
                 «создать элемент» 
                 pass  .   put  (  item  )          «передать элемент на монитор» 
             end 
         end  ; 

      «Потребитель использует буфер» 
     потребитель   =   процесс  (  pass   :   Buffer  ); 
         var    элемент   :   целое число  ; 
          начать 
             цикл 
                 пройти  .   получить  (  предмет  );          "получить предмет с монитора" 
                 "потребить предмет" 
             end 
         end  ; 

  "объявить экземпляры монитора, производителя и потребителя" 
 "предоставить производителю и потребителю доступ к монитору" 
вар 
    проход   :   Буфер  ; 
     Продюсер   :   Продюсер  ; 
     минусы   :   потребительский  ; 
  начало 
    инициализации   прохода  ,          «инициализация монитора» 
         prod  (  проход  ),    «запуск процесса производителя» 
         cons  (  проход  )     «запуск процесса потребителя» 
 end  . 

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

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