Мова програмування складається з граматики/синтаксису та моделі виконання. Модель виконання визначає поведінку елементів мови. Застосувавши модель виконання, можна отримати поведінку програми, написаної на цій мові програмування. Наприклад, коли програміст «читає» код, у своєму розумі він переглядає, що робить кожен рядок коду. По суті, він імітує поведінку всередині свого розуму. Те, що робить програміст, застосування моделі виконання до коду, що призводить до поведінки коду.
Кожна мова програмування має модель виконання, яка визначає спосіб, у який планується виконання одиниць роботи (позначених синтаксисом програми). Детальні приклади специфікації моделей виконання кількох популярних мов включають моделі Python, модель виконання мови програмування Unified Parallel C (UPC), обговорення різних класів моделей виконання, таких як імперативна проти функціональних мов і статтю, в якій обговорюються моделі виконання для вбудованих мов реального часу.
Деталі моделі виконання
Операційна семантика є одним із методів визначення моделі виконання мови. Спостережувана поведінка запущеної програми має відповідати поведінці, отриманій з операційної семантики (яка визначає модель виконання мови).
Модель виконання охоплює такі речі, як неподільна одиниця роботи та обмеження на порядок, у якому ці одиниці роботи можуть виконуватися. Наприклад, операція додавання є неподільною одиницею роботи в багатьох мовах, а в послідовних мовах такі одиниці роботи мають виконуватися одна за одною.
Щоб проілюструвати це, розглянемо мову програмування C, як описано в книзі Кернігана та Річі. C має поняття, яке називається оператором. Специфікація мови визначає інструкцію як фрагмент синтаксису, який закінчується символом ;
. Далі у специфікації мови сказано:
виконання програми виконується один оператор за іншим, послідовно.
Ці слова є частиною моделі виконання C і говорять нам, що оператори є неподільними одиницями роботи; вони виконуються в тому ж порядку, що й їхня синтаксична поява в коді (за винятком випадків, коли оператор керування, такий як IF
або FOR
, змінює порядок). Модель програмування встановила обмеження на порядок виконання одиниць роботи.
Мова C фактично має додатковий рівень у своїй моделі виконання, який є порядком пріоритету. Порядок пріоритету встановлює правила для порядку операцій в одному операторі. Порядок пріоритету можна розглядати як встановлення обмежень на виконання одиниць роботи, які знаходяться в одному операторі. Тому, ;
, IF
і WHILE
охоплюють обмеження на порядок операторів, тоді як порядок пріоритету охоплює обмеження на роботу в операторі. Отже, ці частини специфікації мови C також є частиною моделі виконання мови C.
Моделі виконання також можуть бути незалежно від мов програмування, прикладами яких можуть бути бібліотека POSIX Threads і модель програмування Map-Reduce від Hadoop. Реалізація моделі виконання може відбуватися через компілятор або інтерпретатор і часто містить систему середовища виконання.
Реалізація моделі виконання контролює порядок, у якому відбувається робота під час виконання. Цей порядок може бути обраним заздалегідь, або бути визначеним динамічно під час виконання. Більшість моделей виконання допускають різні ступені обох. Наприклад, мова C фіксує порядок роботи в операторі та порядок усіх операторів, крім тих, які включають оператор IF
або форму оператора циклу. Отже, більшу частину порядку виконання можна вибрати статично, до початку виконання, але невелику частину потрібно вибрати динамічно, під час виконання.
Статичний вибір найчастіше реалізується всередині компілятора, і в цьому випадку порядок роботи представлений порядком, у якому інструкції розміщуються у виконуваному двійковому файлі. Динамічний вибір буде реалізовано в системі часу виконання мови. Система середовища виконання може бути бібліотекою, яка викликається інструкціями, вставленими компілятором, або бути безпосередньо вбудованою у виконуваний файл, наприклад, шляхом вставки інструкцій розгалуження, які роблять динамічний вибір щодо того, яку роботу виконувати далі.
Однак інтерпретатор також може бути створений для будь-якої мови, у цьому випадку всі рішення щодо порядку виконання є динамічними. Інтерпретатор можна розглядати як частину перекладача та частину реалізації моделі виконання.
Модель виконання мови асемблера проти реалізації мікроархітектурами
Мови асемблера також мають моделі виконання, як і будь-яка інша мова. Така модель виконання реалізована мікроархітектурою ЦП. Наприклад, як 5-ступінчастий конвеєр у порядку, так і великий центральний процесор, який не працює, реалізують однакову модель виконання мови асемблера. Модель виконання — це визначення поведінки, тому всі реалізації, будь то впорядковані чи позачергові, чи інтерпретовані, чи JIT тощо, мають давати абсолютно однаковий результат, і цей результат визначається моделлю виконання.
Моделі паралельного виконання
У сучасну епоху паралельне програмування стає все більш важливою темою. Моделі паралельного виконання, як правило, складні, оскільки включають кілька часових шкал. Моделі паралельного виконання обов'язково включають поведінку конструкцій синхронізації. Конструкція синхронізації має ефект встановлення порядку між діями на одній часовій шкалі відносно дій на іншій часовій шкалі.
Наприклад, загальною конструкцією синхронізації є блокування. Розглянемо одну шкалу часу. Часова шкала має точку, в якій виконується конструкція синхронізації «отримати право власності на блокування». У потоках Posix це буде pthread_mutex_lock(&myMutex)
. У Java це буде lock.lock()
. В обох випадках шкала часу називається потоком. Моделі виконання C і Java є послідовними, і вони стверджують, що на часовій шкалі є дії, які відбуваються перед викликом «отримати право власності на блокування», і дії, які відбуваються після виклику. Так само існує операція «відмовитися від власності на замок». У C це буде pthread_mutex_unlock(&myMutex)
. У Java це буде lock.unlock()
. Знову ж таки, моделі виконання C і Java визначають, що одна група операторів виконується до того, як право власності на блокування відмовляється, а інша група операторів виконується після того, як право власності на блокування відмовляється.
Тепер розглянемо випадок двох часових шкал, також відомих як два потоки. Один потік, назвемо його потоком A
, виконує деякі оператори, назвемо їх операторами A-pre-gain-lock
. Потім потік A
виконує «отримати право власності на блокування», потім він виконує оператори A-post-gain-lock
, які надходять після отримання права власності на блокування А. Нарешті, потік A
виконує "відмову від права власності на блокування". Потім потік A
виконує оператори A-post-giveup-lock
.
Другий потік, назвемо його потік B
, виконує деякі оператори, назвемо їх операторами B-pre-lock
. Потім потік B
виконує «отримати право власності на блокування», потім потік B
виконує оператори B-post-lock
, які надходять після того, як B
отримує право власності на блокування.
Тепер ми можемо сказати, що модель паралельного виконання конструкції синхронізації «отримати право власності на блокування» та «відмовитися від права власності на блокування». Модель виконання така:
«У випадку, коли право власності на блокування переходить від потоку A
до потоку B
, оператори A-post-gain-lock
передують операторам B-post-gain-lock
».
Складність виникає через те, що модель виконання не має жодних засобів для виконання «відмовитися від володіння блокуванням», щоб мати будь-який вплив на те, яке виконання «отримання володіння блокуванням» в іншій часовій шкалі (потоці) слідує. Дуже часто лише певні передачі дають дійсні результати. Таким чином, програміст мусить продумати всі можливі комбінації, коли один потік відмовляється від блокування, а інший потік отримує його наступним, і переконатися, що код допускає лише дійсні комбінації.
Єдиним ефектом є те, що оператори A-post-gain-lock
передують операторам B-post-gain-lock
. Ніякого іншого ефекту не відбувається, і на інше відносне впорядкування не можна покладатися. Зокрема, A-post-give-up-lock
і B-post-gain-lock
не мають визначеного відносного порядку, що дивує багатьох людей. Але потік A
міг бути заміненим після відмови від права власності, тому оператори A-post-give-up-lock
можуть виникнути через довгий час після завершення багатьох операторів B-post-gain-lock
. Це одна з можливостей, про яку слід думати під час проектування блокувань, і вона ілюструє, чому багатопотокове програмування складне.
Сучасні паралельні мови мають набагато простіші у використанні моделі виконання. Модель потоку була однією з початкових моделей паралельного виконання, що може пояснити, чому вона зберіглася, незважаючи на те, що її важко використовувати.
Дивіться також
Список літератури
- Python Documentation: Execution Model (англ.).
- UPC Language Features (англ.).
- Cardoso, J.M.P.; Diniz, P.C. (2011). Programming Languages and Execution Models (англ.). Springer US. ISBN .
- PELLIZZONI, R.; BETTI, E.; BAK, S.; YAO, G.; CRISWELL, J.; CACCAMO, M.; KEGLEY, R (2011). (PDF). Real-Time and Embedded Technology and Applications Symposium (англ.). IEEE. Архів оригіналу (PDF) за 12 серпня 2017. Процитовано 14 липня 2022.
- Керніган, Браян; Денніс Рітчі (Лютий 1978). The C Programming Language (англ.) (вид. 1). Енглвуд-Кліффс (Нью-Джерсі): Prentice Hall. ISBN .
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Mova programuvannya skladayetsya z gramatiki sintaksisu ta modeli vikonannya Model vikonannya viznachaye povedinku elementiv movi Zastosuvavshi model vikonannya mozhna otrimati povedinku programi napisanoyi na cij movi programuvannya Napriklad koli programist chitaye kod u svoyemu rozumi vin pereglyadaye sho robit kozhen ryadok kodu Po suti vin imituye povedinku vseredini svogo rozumu Te sho robit programist zastosuvannya modeli vikonannya do kodu sho prizvodit do povedinki kodu Kozhna mova programuvannya maye model vikonannya yaka viznachaye sposib u yakij planuyetsya vikonannya odinic roboti poznachenih sintaksisom programi Detalni prikladi specifikaciyi modelej vikonannya kilkoh populyarnih mov vklyuchayut modeli Python model vikonannya movi programuvannya Unified Parallel C UPC obgovorennya riznih klasiv modelej vikonannya takih yak imperativna proti funkcionalnih mov i stattyu v yakij obgovoryuyutsya modeli vikonannya dlya vbudovanih mov realnogo chasu Detali modeli vikonannyaOperacijna semantika ye odnim iz metodiv viznachennya modeli vikonannya movi Sposterezhuvana povedinka zapushenoyi programi maye vidpovidati povedinci otrimanij z operacijnoyi semantiki yaka viznachaye model vikonannya movi Model vikonannya ohoplyuye taki rechi yak nepodilna odinicya roboti ta obmezhennya na poryadok u yakomu ci odinici roboti mozhut vikonuvatisya Napriklad operaciya dodavannya ye nepodilnoyu odiniceyu roboti v bagatoh movah a v poslidovnih movah taki odinici roboti mayut vikonuvatisya odna za odnoyu Shob proilyustruvati ce rozglyanemo movu programuvannya C yak opisano v knizi Kernigana ta Richi C maye ponyattya yake nazivayetsya operatorom Specifikaciya movi viznachaye instrukciyu yak fragment sintaksisu yakij zakinchuyetsya simvolom Dali u specifikaciyi movi skazano vikonannya programi vikonuyetsya odin operator za inshim poslidovno Ci slova ye chastinoyu modeli vikonannya C i govoryat nam sho operatori ye nepodilnimi odinicyami roboti voni vikonuyutsya v tomu zh poryadku sho j yihnya sintaksichna poyava v kodi za vinyatkom vipadkiv koli operator keruvannya takij yak IF abo FOR zminyuye poryadok Model programuvannya vstanovila obmezhennya na poryadok vikonannya odinic roboti Mova C faktichno maye dodatkovij riven u svoyij modeli vikonannya yakij ye poryadkom prioritetu Poryadok prioritetu vstanovlyuye pravila dlya poryadku operacij v odnomu operatori Poryadok prioritetu mozhna rozglyadati yak vstanovlennya obmezhen na vikonannya odinic roboti yaki znahodyatsya v odnomu operatori Tomu IF i WHILE ohoplyuyut obmezhennya na poryadok operatoriv todi yak poryadok prioritetu ohoplyuye obmezhennya na robotu v operatori Otzhe ci chastini specifikaciyi movi C takozh ye chastinoyu modeli vikonannya movi C Modeli vikonannya takozh mozhut buti nezalezhno vid mov programuvannya prikladami yakih mozhut buti biblioteka POSIX Threads i model programuvannya Map Reduce vid Hadoop Realizaciya modeli vikonannya mozhe vidbuvatisya cherez kompilyator abo interpretator i chasto mistit sistemu seredovisha vikonannya Realizaciya modeli vikonannya kontrolyuye poryadok u yakomu vidbuvayetsya robota pid chas vikonannya Cej poryadok mozhe buti obranim zazdalegid abo buti viznachenim dinamichno pid chas vikonannya Bilshist modelej vikonannya dopuskayut rizni stupeni oboh Napriklad mova C fiksuye poryadok roboti v operatori ta poryadok usih operatoriv krim tih yaki vklyuchayut operator IF abo formu operatora ciklu Otzhe bilshu chastinu poryadku vikonannya mozhna vibrati statichno do pochatku vikonannya ale neveliku chastinu potribno vibrati dinamichno pid chas vikonannya Statichnij vibir najchastishe realizuyetsya vseredini kompilyatora i v comu vipadku poryadok roboti predstavlenij poryadkom u yakomu instrukciyi rozmishuyutsya u vikonuvanomu dvijkovomu fajli Dinamichnij vibir bude realizovano v sistemi chasu vikonannya movi Sistema seredovisha vikonannya mozhe buti bibliotekoyu yaka viklikayetsya instrukciyami vstavlenimi kompilyatorom abo buti bezposeredno vbudovanoyu u vikonuvanij fajl napriklad shlyahom vstavki instrukcij rozgaluzhennya yaki roblyat dinamichnij vibir shodo togo yaku robotu vikonuvati dali Odnak interpretator takozh mozhe buti stvorenij dlya bud yakoyi movi u comu vipadku vsi rishennya shodo poryadku vikonannya ye dinamichnimi Interpretator mozhna rozglyadati yak chastinu perekladacha ta chastinu realizaciyi modeli vikonannya Model vikonannya movi asemblera proti realizaciyi mikroarhitekturamiMovi asemblera takozh mayut modeli vikonannya yak i bud yaka insha mova Taka model vikonannya realizovana mikroarhitekturoyu CP Napriklad yak 5 stupinchastij konveyer u poryadku tak i velikij centralnij procesor yakij ne pracyuye realizuyut odnakovu model vikonannya movi asemblera Model vikonannya ce viznachennya povedinki tomu vsi realizaciyi bud to vporyadkovani chi pozachergovi chi interpretovani chi JIT tosho mayut davati absolyutno odnakovij rezultat i cej rezultat viznachayetsya modellyu vikonannya Modeli paralelnogo vikonannyaU suchasnu epohu paralelne programuvannya staye vse bilsh vazhlivoyu temoyu Modeli paralelnogo vikonannya yak pravilo skladni oskilki vklyuchayut kilka chasovih shkal Modeli paralelnogo vikonannya obov yazkovo vklyuchayut povedinku konstrukcij sinhronizaciyi Konstrukciya sinhronizaciyi maye efekt vstanovlennya poryadku mizh diyami na odnij chasovij shkali vidnosno dij na inshij chasovij shkali Napriklad zagalnoyu konstrukciyeyu sinhronizaciyi ye blokuvannya Rozglyanemo odnu shkalu chasu Chasova shkala maye tochku v yakij vikonuyetsya konstrukciya sinhronizaciyi otrimati pravo vlasnosti na blokuvannya U potokah Posix ce bude pthread mutex lock amp myMutex U Java ce bude lock lock V oboh vipadkah shkala chasu nazivayetsya potokom Modeli vikonannya C i Java ye poslidovnimi i voni stverdzhuyut sho na chasovij shkali ye diyi yaki vidbuvayutsya pered viklikom otrimati pravo vlasnosti na blokuvannya i diyi yaki vidbuvayutsya pislya vikliku Tak samo isnuye operaciya vidmovitisya vid vlasnosti na zamok U C ce bude pthread mutex unlock amp myMutex U Java ce bude lock unlock Znovu zh taki modeli vikonannya C i Java viznachayut sho odna grupa operatoriv vikonuyetsya do togo yak pravo vlasnosti na blokuvannya vidmovlyayetsya a insha grupa operatoriv vikonuyetsya pislya togo yak pravo vlasnosti na blokuvannya vidmovlyayetsya Teper rozglyanemo vipadok dvoh chasovih shkal takozh vidomih yak dva potoki Odin potik nazvemo jogo potokom A vikonuye deyaki operatori nazvemo yih operatorami A pre gain lock Potim potik A vikonuye otrimati pravo vlasnosti na blokuvannya potim vin vikonuye operatori A post gain lock yaki nadhodyat pislya otrimannya prava vlasnosti na blokuvannya A Nareshti potik A vikonuye vidmovu vid prava vlasnosti na blokuvannya Potim potik A vikonuye operatori A post giveup lock Drugij potik nazvemo jogo potik B vikonuye deyaki operatori nazvemo yih operatorami B pre lock Potim potik B vikonuye otrimati pravo vlasnosti na blokuvannya potim potik B vikonuye operatori B post lock yaki nadhodyat pislya togo yak B otrimuye pravo vlasnosti na blokuvannya Teper mi mozhemo skazati sho model paralelnogo vikonannya konstrukciyi sinhronizaciyi otrimati pravo vlasnosti na blokuvannya ta vidmovitisya vid prava vlasnosti na blokuvannya Model vikonannya taka U vipadku koli pravo vlasnosti na blokuvannya perehodit vid potoku A do potoku B operatori A post gain lock pereduyut operatoram B post gain lock Skladnist vinikaye cherez te sho model vikonannya ne maye zhodnih zasobiv dlya vikonannya vidmovitisya vid volodinnya blokuvannyam shob mati bud yakij vpliv na te yake vikonannya otrimannya volodinnya blokuvannyam v inshij chasovij shkali potoci sliduye Duzhe chasto lishe pevni peredachi dayut dijsni rezultati Takim chinom programist musit produmati vsi mozhlivi kombinaciyi koli odin potik vidmovlyayetsya vid blokuvannya a inshij potik otrimuye jogo nastupnim i perekonatisya sho kod dopuskaye lishe dijsni kombinaciyi Yedinim efektom ye te sho operatori A post gain lock pereduyut operatoram B post gain lock Niyakogo inshogo efektu ne vidbuvayetsya i na inshe vidnosne vporyadkuvannya ne mozhna pokladatisya Zokrema A post give up lock i B post gain lock ne mayut viznachenogo vidnosnogo poryadku sho divuye bagatoh lyudej Ale potik A mig buti zaminenim pislya vidmovi vid prava vlasnosti tomu operatori A post give up lock mozhut viniknuti cherez dovgij chas pislya zavershennya bagatoh operatoriv B post gain lock Ce odna z mozhlivostej pro yaku slid dumati pid chas proektuvannya blokuvan i vona ilyustruye chomu bagatopotokove programuvannya skladne Suchasni paralelni movi mayut nabagato prostishi u vikoristanni modeli vikonannya Model potoku bula odniyeyu z pochatkovih modelej paralelnogo vikonannya sho mozhe poyasniti chomu vona zberiglasya nezvazhayuchi na te sho yiyi vazhko vikoristovuvati Divitsya takozhPlanuvannya obchislennya Spisok literaturiPython Documentation Execution Model angl UPC Language Features angl Cardoso J M P Diniz P C 2011 Programming Languages and Execution Models angl Springer US ISBN 9780387096711 PELLIZZONI R BETTI E BAK S YAO G CRISWELL J CACCAMO M KEGLEY R 2011 PDF Real Time and Embedded Technology and Applications Symposium angl IEEE Arhiv originalu PDF za 12 serpnya 2017 Procitovano 14 lipnya 2022 Kernigan Brayan Dennis Ritchi Lyutij 1978 The C Programming Language angl vid 1 Englvud Kliffs Nyu Dzhersi Prentice Hall ISBN 0 13 110163 3