Runtime systém - Runtime system

V programování počítače , v runtime systému , také nazývaný runtime prostředí , a to především implementuje prvků z modelu spuštění . To nemá být zaměňována s runtime životního cyklu fáze programu, během kterého runtime systém je v provozu. Při zacházení s runtime systémem odlišným od runtime prostředí (RTE), první může být definován jako specifická část aplikačního softwaru (IDE) používaného pro programování , kus softwaru, který poskytuje programátorovi pohodlnější prostředí pro spouštění programů během jejich výroby ( testování a podobně), zatímco druhý (RTE) by byl samotnou instancí prováděcího modelu aplikovaného na vyvinutý program, který je pak sám spuštěn ve výše uvedeném běhovém systému .

Většina programovacích jazyků má nějakou formu runtime systému, který poskytuje prostředí, ve kterém běží programy. Toto prostředí může řešit řadu problémů, včetně správy paměti aplikace , jak program přistupuje k proměnným , mechanismy pro předávání parametrů mezi procedurami , rozhraní s operačním systémem a další. Tyto kompilátor předpoklady Vyrábí v závislosti na konkrétním runtime systému generovat správný kód. Běhový systém bude mít obvykle určitou odpovědnost za nastavení a správu zásobníku a haldy a může zahrnovat funkce, jako je sběr odpadu , vlákna nebo jiné dynamické funkce integrované do jazyka.

Přehled

Každý programovací jazyk určuje model provádění a mnoho z nich implementuje alespoň část tohoto modelu v běhovém systému. Jednou z možných definic chování runtime systému je mimo jiné „jakékoli chování, které nelze přímo přičíst samotnému programu“. Tato definice zahrnuje vkládání parametrů do zásobníku před voláním funkcí, paralelní provádění souvisejících chování a vstupně -výstupní operace disku .

Podle této definice má v podstatě každý jazyk runtime systém, včetně kompilovaných jazyků , interpretovaných jazyků a vestavěných jazyků specifických pro doménu . Dokonce i samostatné modely spouštění vyvolané API , jako jsou Pthreads ( vlákna POSIX ), mají běhový systém, který implementuje chování modelu spouštění.

Většina odborných článků o runtime systémech se zaměřuje na detaily implementace paralelních runtime systémů. Pozoruhodným příkladem systému paralelního běhu je Cilk , populární model paralelního programování. Sada nástrojů proto-runtime byla vytvořena za účelem zjednodušení vytváření paralelních runtime systémů.

Kromě chování modelu spuštění může runtime systém také provádět služby podpory, jako je kontrola typu , ladění nebo generování a optimalizace kódu .

Vztah k běhovému prostředí

Běhový systém je také bránou, přes kterou běžící program interaguje s běhovým prostředím . Běhové prostředí zahrnuje nejen přístupné hodnoty stavu, ale také aktivní entity, se kterými může program během provádění interagovat. Například proměnné prostředí jsou rysy mnoha operačních systémech, a jsou součástí runtime prostředí; běžící program k nim může přistupovat prostřednictvím runtime systému. Podobně jsou hardwarová zařízení, jako jsou disky nebo jednotky DVD, aktivními entitami, s nimiž může program komunikovat prostřednictvím runtime systému.

Jednou z jedinečných aplikací runtime prostředí je jeho použití v operačním systému, který mu umožňuje pouze spuštění. Jinými slovy, od spuštění až po vypnutí je celý operační systém věnován pouze aplikacím spuštěným v tomto běhovém prostředí. Jakýkoli jiný kód, který se pokusí spustit, nebo jakékoli chyby v aplikacích, přeruší běhové prostředí. Rozbití runtime prostředí zase rozbije OS, zastaví veškeré zpracování a bude vyžadovat restart. Pokud je boot z paměti jen pro čtení, je vytvořen extrémně bezpečný, jednoduchý systém s jednou misí.

Mezi příklady takových přímo spojených balíků runtime systémů patří:

  • V letech 1983 až 1984 společnost Digital Research nabízela několik svých obchodních a vzdělávacích aplikací pro počítač IBM PC na zaváděcích disketách dodávaných s SpeedStart CP/M-86 , zmenšenou verzí CP/M-86 jako runtime prostředí.
  • Některé samostatné verze Ventura Publisher (1986–1993), Artline (1988–1991), Timeworks Publisher (1988–1991) a ViewMAX (1990–1992) obsahovaly jako runtime prostředí speciální běhové verze GEM společnosti Digital Research .
  • Na konci devadesátých let byl procesor JPD 4DOS JP Software volitelně k dispozici ve speciální běhové verzi, která byla propojena s předkompilovanými a šifrovanými dávkovými úlohami BATCOMP, aby bylo možné z dávkových skriptů vytvářet neupravitelné spustitelné soubory a spouštět je v systémech bez nainstalovaného 4DOS .

Příklady

Runtime systém jazyka C je konkrétní sada instrukcí vložená kompilátorem do spustitelného obrazu. Tyto pokyny mimo jiné spravují zásobník procesů, vytvářejí prostor pro místní proměnné a kopírují parametry volání funkcí na začátek zásobníku.

Často neexistují jasná kritéria pro určení, které jazykové chování je součástí samotného runtime systému a které může určit jakýkoli konkrétní zdrojový program. Například v C je nastavení zásobníku součástí runtime systému. Není určována sémantikou jednotlivého programu, protože chování je globálně neměnné: platí pro všechna spuštění. Toto systematické chování implementuje model provádění jazyka, na rozdíl od implementace sémantiky konkrétního programu (ve kterém je text přímo přeložen do kódu, který vypočítává výsledky).

Toto oddělení mezi sémantikou konkrétního programu a běhovým prostředím se odráží v různých způsobech kompilace programu: kompilace zdrojového kódu do objektového souboru, který obsahuje všechny funkce, oproti kompilaci celého programu do spustitelného binárního souboru. Soubor objektu bude obsahovat pouze kód sestavy relevantní pro zahrnuté funkce, zatímco spustitelný binární soubor bude obsahovat další kód, který implementuje prostředí runtime. V souboru objektu mohou na jedné straně chybět informace z runtime prostředí, které budou vyřešeny propojením . Na druhé straně kód v souboru objektu stále závisí na předpokladech v běhovém systému; například funkce může číst parametry z konkrétního registru nebo umístění zásobníku, v závislosti na konvence volání používané v běhovém prostředí.

Dalším příkladem je případ použití aplikačního programovacího rozhraní (API) pro interakci s runtime systémem. Volání tohoto rozhraní API vypadají stejně jako volání běžné softwarové knihovny , ale v určitém okamžiku během hovoru se změní model provádění. Runtime systém implementuje model provádění odlišný od jazyka, ve kterém je knihovna napsána. Osoba, která čte kód normální knihovny, by byla schopná porozumět chování knihovny pouhou znalostí jazyka, ve kterém byla knihovna napsána. Osoba, která čte kód rozhraní API, které vyvolává běhový systém, by však nerozuměla chování volání API pouhou znalostí jazyka, ve kterém bylo volání napsáno. V určitém okamžiku, prostřednictvím nějakého mechanismu, model provádění přestane být jazykem, ve kterém je volání napsáno, a přepne na model provádění implementovaný modulem runtime Systém. Instrukce pasti je například jednou z metod přepínání prováděcích modelů. Tento rozdíl je to, co odlišuje model spuštění vyvolaný API, jako je Pthreads, od běžné softwarové knihovny. Volání Pthreads i volání softwarové knihovny jsou vyvolána prostřednictvím API, ale chování Pthreads nelze chápat z hlediska jazyka volání. Volání Pthreads spíše přináší do hry model vnějšího provádění, který je implementován runtime systémem Pthreads (tento runtime systém je často jádro OS).

Jako extrémní příklad lze na fyzický procesor CPU pohlížet jako na implementaci runtime systému konkrétního jazyka sestavení. V tomto pohledu je implementační model implementován fyzickým CPU a paměťovými systémy. Analogicky jsou runtime systémy pro jazyky vyšší úrovně implementovány pomocí některých dalších jazyků. To vytváří hierarchii runtime systémů, přičemž samotný CPU-nebo vlastně jeho logika ve vrstvě mikrokódu nebo níže-funguje jako runtime systém nejnižší úrovně.

Pokročilé funkce

Některé kompilované nebo interpretované jazyky poskytují rozhraní, které umožňuje interakci kódu aplikace přímo s runtime systémem. Příkladem je Threadtřída v jazyce Java . Třída umožňuje kódu (který je animován jedním vláknem) provádět například spouštění a zastavování jiných vláken. Obvykle nejsou tímto způsobem přístupné základní aspekty chování jazyka, jako je plánování úkolů a správa zdrojů .

Chování vyšší úrovně implementované běhovým systémem může zahrnovat úkoly, jako je kreslení textu na obrazovku nebo vytváření připojení k internetu. Často se stává, že operační systémy také poskytují tyto druhy chování, a pokud jsou k dispozici, je runtime systém implementován jako abstrakční vrstva, která převádí vyvolání runtime systému na vyvolání operačního systému. To skrývá složitost nebo variace služeb nabízených různými operačními systémy. Z toho také vyplývá, že na samotné jádro OS lze pohlížet jako na runtime systém a na sadu volání OS, která vyvolávají chování OS, lze pohlížet jako na interakce s runtime systémem.

V limitu může runtime systém poskytovat služby, jako je stroj s kódem P nebo virtuální počítač , které skrývají dokonce i sadu instrukcí procesoru . Toto je přístup, který používá mnoho interpretovaných jazyků, jako je AWK , a některé jazyky jako Java , které mají být kompilovány do nějakého meziproduktu reprezentačního kódu nezávislého na stroji (například bytecode ). Toto uspořádání zjednodušuje úlohu jazykové implementace a její přizpůsobení různým strojům a zlepšuje efektivitu sofistikovaných jazykových funkcí, jako je reflexe . Umožňuje také spuštění stejného programu na jakémkoli počítači bez výslovného kroku překompilování, což je funkce, která se stala velmi důležitou od šíření World Wide Web . Aby se urychlilo provádění, některé runtime systémy obsahují kompilaci just-in-time do strojového kódu.

Moderním aspektem běhových systémů je chování při paralelním provádění, jako je chování vykazované konstrukty mutex v Pthreads a konstrukty paralelních sekcí v OpenMP . Runtime systém s takovýmto paralelním chováním spouštění může být modularizován podle proto-runtime přístupu.

Dějiny

Pozoruhodnými ranými příklady runtime systémů jsou tlumočníci pro BASIC a Lisp . Tato prostředí také obsahovala popelář . Forth je raný příklad jazyka navrženého tak, aby byl kompilován do kódu střední reprezentace; jeho runtime systém byl virtuální stroj, který interpretoval tento kód. Další populární, jestliže teoretický, příkladem je Donald Knuth ‚s MIX počítač.

V jazycích C a novějších, které podporovaly dynamickou alokaci paměti, runtime systém obsahoval také knihovnu, která spravovala fond paměti programu.

V objektově orientovaných programovacích jazycích byl runtime systém často také zodpovědný za dynamickou kontrolu typů a řešení odkazů na metody.

Viz také

Reference

Další čtení