Систем извршавања

Рантајм систем, или систем извршавања, примарно спроводи делове једног модела извршења. Ово је у супротности са животним циклусом система извршавања, током које је он у употреби. Већина језика поседује неку врсту система извршавања, који контролише редослед по којем ће се назначени послови обављати у складу са условима језика који се користи. Након неколико година, значење термина "систем извршавања" се проширио и у њега се данас убрајају скоро сва динамички одређена понашања у току извршења операције.

Преглед уреди

Сваки програмски језик посебно наводи одређени модел извршења, а много њих спроводи барем део тог модела кроз цео систем извршења. Дискутабилно, један од начина да се дефинише систем извршавања је следећи: свако понашање које није дело програма јесте понашање за које је одговоран систем извршавања. У ову дефиницију се убрајају операције као што су стављање параметара на стек пре коориштења одређене функције, начин рада диска за улаз/излаз, начин рада везан за паралелно извршавање операција.

По овој дефиницији, у бити сваки језик има систем извршавања, укључујући превођене језике; интерпретиране језике; и предметно оријентисне програмске језике. Чак и АПИ захтева самоодржавајуће моделе извршавања, као што Pthreads поседује систем извршавања који спроводи начин рада извршног модела.

Постоје многи примери расправа на тему систтема извршавања.[1][2][3]

Као додатак начину рада извршног модела, извршни систем такође употребљава услуге као што су провера куцања , отклањање грешака, стварање кода и оптимизација. [4]

Систем извршавања је такође и мрежни пролаз помоћу којег су програми у употреби у интеракцији са окружењем извршног система, који не садржи само установљене вредности које су доступне током извршавања програма, већ и активна језгра која су, помоћу тастатуре у интеракцији са разним врстама извршитеља, као што су нпр, дискови и људи, помоћу тастатуре. На пример, променљиве у окружењу су учесници многих оперативних система, и оне су део окружења система извршења; програм који је тренутно у употреби може да их користи кроз систем извршења. Исто тако, уређаји као што је ДВД резач су активна тела са којима програм може да се повезује преко система извршења.

Примери уреди

Једноставан пример основног система извршења, систем извршења програмског језика C је посебан сет инструкција убачен у извршне слике помоћу програмског преводиоца. Између осталог, ове инструкције организују податке који улазе у процесор, стварају места за локалне променљиве и копирају параметре надолазећих функција у стек. Често нема одређених критеријума по којима се одлучује који начин рада програмског језика се сматра делом система извршења, а који начин рада је "преведен". У овом случају, разлог зашто је начин рада C стека део система извршења, а не део кључне речи језика, је тај што је систематичан, одржава стање свих стекова  у току извршавања пограма. Овај систематични начин рада имплементира извршни модел језика, супротно од имплементирања семантике одређених кључних речи које су директно преведене у код који рачуна резултат.

Још један пример, који објашњава природу система извршавања, је случај коришћења апликацијоног програмског интерфејса (АПИ) да би се остварила интеракција са системом извршавања. Команде за АПИ изгледају исто као и за софтверску библиотеку, али у неком тренутку извршења извршни модел се мења. Систем извршавања примењује извршни модел који се разликује од већ раније уписаних услова. Особа која чита код нормалне библиотеке може да разуме начин рада библиотеке ако зна у ком језику је та библиотека написана. Али, ако особа чита код АПИ-а који захтева систем извршења не би могла да разуме начин рада АПИ команди ако само зна језик на коме су те команде написане. У неком тренутку, помоћу неког механизма, извршни модел престаје да обавља команде написане на задатом програмском језику и постаје модел рада извршног система. На пример, команда филтрирања података је једна од метода мењања извршног модела. Разлика је у томе што се онда из уобичајене софтверске библиотеке издвајају извршни модели које захтева АПИ, нпр POSIX. У оба случаја команде се задају преко АПИ, али POSIX-ов начин рада се не може разумети помоћу језика у коме је комада написана. Боље је да се POSIX-ове команде пребаце у екстерни извршни модел, који је имплементирао POSIX-ов систем извршавања (овај систем извршавања је често главна компонента оперативног система рачунара).

Додатне карактеристике уреди

Неки од преводиоца програмског језика имају интерфејс који омогућава директну интеракцију кода апликације са системом извршења. Пример за то је  Thread класа Јава програмског језика, која коду којег покреће дозвољава операције као што су заустављање и покретање другог thread-а. Наравно, основни аспекти начина рада програмског језика као што су распоређивање задатака и управљање ресурсима нису могући у овом случају. 

Захтевнији начин рада имплементиран од стране система извршења може да садржи опције као што је писање текста на екрану или остваривање интернет конекције. Чест је случај да и оперативни системи омогућавају овакав начин рада, а када је то доступно, систем извршавања се имплементира као апстрактни слој који преводи позивање система извршавања у позивање оперативног система. Ово сакрива комплексност варијација услуга које нуде различити оперативни системи. Ово такође подразумева да главну компоненту оперативног система можемо гледати и као врсту извршног система и да њен сет команди због којих ОС ради утиче и на рад рунтиме система.

До неке границе систем извршавања може да се понаша као машина за прогрмско кодирање или виртуелна машина, која чак може и да сакрије скуп инструкција процесора. Овај приступ користе интерпретирани језици као што је АWК, или неки језици као Јава, који су намењени да се убацују у неке машнски независне псеудокодове (бајткодове). Овакво решење увелико поједностављује задатак да се језик имплементира и адаптира на одређене машине, и да повећава ефикасност софистициранијих карактеристика језика као што је рефлексија. То такође омогућава истом програму да управља било којом машином без додатног прерађивања, ова карактеристика која је постала веома битна након ширења Интернета. Како би убрзали извршење операција, неке извршне системе карактеришу и just-in-time компилације машинских кодова.

На другом крају, сам физички процесор може се посматрати као имплементација система извршавања одређеног асембли језика. У том погледу, извршни модел је спроведен од стране физичких процесора и система меморије. Аналогно томе, системи извршења за језике високог нивоа су и сами спроведени користећи неке друге језике. То ствара хијерархију система извршења, са самим процесором- или заправо његовим унутрашњим дигиталним логичким структурама које одређују ствари као што су програмски бројач и распоред инструкција- као најнижим нивоом система извршавања.

Модерни аспект система извршавања јесте паралелно извршење операција, чији је начин рада показао Pthreads и паралелна секција израде у OpenMP-у. Извршни систем са таквим начином рада може бити модуларизован према прото-извршном прступу.    

Историја уреди

Значајни ранији примери система извршавања су преводиоци за БЕЈСИК и Lisp. Ова окружења такође укључују и сакупљаче смећа. Форт је рани пример језика који је дизајниран да буде израђен у псеудокоду; његов систем извршења је била виртуелна машина која преводи тај псеудокод. Још један популаран, условно теоретски, пример је MiX рачунар Доналда Кнута.

У C и каснијим језицима који су подржали динамичко додељивање меморије, систем извршења такође укључује и библиотеку која управља базеном меморије тог програма.

У објектно-оријентисаним програмским језицима, систем извршења је често одговоран за динамичку проверу типа и за решавање референци метода.

Види још уреди

Референце уреди

  1. ^ Sorber, Jacob; et al. (2007). „CEon: a language and runtime system for perpetual systems” (PDF). ACM. 
  2. ^ Bodin, François; et al. (1993). „Implementing a parallel C++ runtime system for scalable parallel systems”. IEEE. CiteSeerX: 10.1.1.40.5356. 
  3. ^ Blumofe, Robert D.; et al. (1995). „Cilk: An efficient multithreaded runtime system”. ACM. 
  4. ^ Appel, Andrew W. (1989). „A Runtime System” (PDF). Princeton University. Приступљено 30. 12. 2013. [мртва веза]