Pređi na sadržaj

Sistem izvršavanja

S Vikipedije, slobodne enciklopedije

Rantajm sistem, ili sistem izvršavanja, primarno sprovodi delove jednog modela izvršenja. Ovo je u suprotnosti sa životnim ciklusom sistema izvršavanja, tokom koje je on u upotrebi. Većina jezika poseduje neku vrstu sistema izvršavanja, koji kontroliše redosled po kojem će se naznačeni poslovi obavljati u skladu sa uslovima jezika koji se koristi. Nakon nekoliko godina, značenje termina "sistem izvršavanja" se proširio i u njega se danas ubrajaju skoro sva dinamički određena ponašanja u toku izvršenja operacije.

Pregled[uredi | uredi izvor]

Svaki programski jezik posebno navodi određeni model izvršenja, a mnogo njih sprovodi barem deo tog modela kroz ceo sistem izvršenja. Diskutabilno, jedan od načina da se definiše sistem izvršavanja je sledeći: svako ponašanje koje nije delo programa jeste ponašanje za koje je odgovoran sistem izvršavanja. U ovu definiciju se ubrajaju operacije kao što su stavljanje parametara na stek pre koorištenja određene funkcije, način rada diska za ulaz/izlaz, način rada vezan za paralelno izvršavanje operacija.

Po ovoj definiciji, u biti svaki jezik ima sistem izvršavanja, uključujući prevođene jezike; interpretirane jezike; i predmetno orijentisne programske jezike. Čak i API zahteva samoodržavajuće modele izvršavanja, kao što Pthreads poseduje sistem izvršavanja koji sprovodi način rada izvršnog modela.

Postoje mnogi primeri rasprava na temu sisttema izvršavanja.[1][2][3]

Kao dodatak načinu rada izvršnog modela, izvršni sistem takođe upotrebljava usluge kao što su provera kucanja , otklanjanje grešaka, stvaranje koda i optimizacija. [4]

Sistem izvršavanja je takođe i mrežni prolaz pomoću kojeg su programi u upotrebi u interakciji sa okruženjem izvršnog sistema, koji ne sadrži samo ustanovljene vrednosti koje su dostupne tokom izvršavanja programa, već i aktivna jezgra koja su, pomoću tastature u interakciji sa raznim vrstama izvršitelja, kao što su npr, diskovi i ljudi, pomoću tastature. Na primer, promenljive u okruženju su učesnici mnogih operativnih sistema, i one su deo okruženja sistema izvršenja; program koji je trenutno u upotrebi može da ih koristi kroz sistem izvršenja. Isto tako, uređaji kao što je DVD rezač su aktivna tela sa kojima program može da se povezuje preko sistema izvršenja.

Primeri[uredi | uredi izvor]

Jednostavan primer osnovnog sistema izvršenja, sistem izvršenja programskog jezika C je poseban set instrukcija ubačen u izvršne slike pomoću programskog prevodioca. Između ostalog, ove instrukcije organizuju podatke koji ulaze u procesor, stvaraju mesta za lokalne promenljive i kopiraju parametre nadolazećih funkcija u stek. Često nema određenih kriterijuma po kojima se odlučuje koji način rada programskog jezika se smatra delom sistema izvršenja, a koji način rada je "preveden". U ovom slučaju, razlog zašto je način rada C steka deo sistema izvršenja, a ne deo ključne reči jezika, je taj što je sistematičan, održava stanje svih stekova  u toku izvršavanja pograma. Ovaj sistematični način rada implementira izvršni model jezika, suprotno od implementiranja semantike određenih ključnih reči koje su direktno prevedene u kod koji računa rezultat.

Još jedan primer, koji objašnjava prirodu sistema izvršavanja, je slučaj korišćenja aplikacijonog programskog interfejsa (API) da bi se ostvarila interakcija sa sistemom izvršavanja. Komande za API izgledaju isto kao i za softversku biblioteku, ali u nekom trenutku izvršenja izvršni model se menja. Sistem izvršavanja primenjuje izvršni model koji se razlikuje od već ranije upisanih uslova. Osoba koja čita kod normalne biblioteke može da razume način rada biblioteke ako zna u kom jeziku je ta biblioteka napisana. Ali, ako osoba čita kod API-a koji zahteva sistem izvršenja ne bi mogla da razume način rada API komandi ako samo zna jezik na kome su te komande napisane. U nekom trenutku, pomoću nekog mehanizma, izvršni model prestaje da obavlja komande napisane na zadatom programskom jeziku i postaje model rada izvršnog sistema. Na primer, komanda filtriranja podataka je jedna od metoda menjanja izvršnog modela. Razlika je u tome što se onda iz uobičajene softverske biblioteke izdvajaju izvršni modeli koje zahteva API, npr POSIX. U oba slučaja komande se zadaju preko API, ali POSIX-ov način rada se ne može razumeti pomoću jezika u kome je komada napisana. Bolje je da se POSIX-ove komande prebace u eksterni izvršni model, koji je implementirao POSIX-ov sistem izvršavanja (ovaj sistem izvršavanja je često glavna komponenta operativnog sistema računara).

Dodatne karakteristike[uredi | uredi izvor]

Neki od prevodioca programskog jezika imaju interfejs koji omogućava direktnu interakciju koda aplikacije sa sistemom izvršenja. Primer za to je  Thread klasa Java programskog jezika, koja kodu kojeg pokreće dozvoljava operacije kao što su zaustavljanje i pokretanje drugog thread-a. Naravno, osnovni aspekti načina rada programskog jezika kao što su raspoređivanje zadataka i upravljanje resursima nisu mogući u ovom slučaju. 

Zahtevniji način rada implementiran od strane sistema izvršenja može da sadrži opcije kao što je pisanje teksta na ekranu ili ostvarivanje internet konekcije. Čest je slučaj da i operativni sistemi omogućavaju ovakav način rada, a kada je to dostupno, sistem izvršavanja se implementira kao apstraktni sloj koji prevodi pozivanje sistema izvršavanja u pozivanje operativnog sistema. Ovo sakriva kompleksnost varijacija usluga koje nude različiti operativni sistemi. Ovo takođe podrazumeva da glavnu komponentu operativnog sistema možemo gledati i kao vrstu izvršnog sistema i da njen set komandi zbog kojih OS radi utiče i na rad runtime sistema.

Do neke granice sistem izvršavanja može da se ponaša kao mašina za progrmsko kodiranje ili virtuelna mašina, koja čak može i da sakrije skup instrukcija procesora. Ovaj pristup koriste interpretirani jezici kao što je AWK, ili neki jezici kao Java, koji su namenjeni da se ubacuju u neke mašnski nezavisne pseudokodove (bajtkodove). Ovakvo rešenje uveliko pojednostavljuje zadatak da se jezik implementira i adaptira na određene mašine, i da povećava efikasnost sofisticiranijih karakteristika jezika kao što je refleksija. To takođe omogućava istom programu da upravlja bilo kojom mašinom bez dodatnog prerađivanja, ova karakteristika koja je postala veoma bitna nakon širenja Interneta. Kako bi ubrzali izvršenje operacija, neke izvršne sisteme karakterišu i just-in-time kompilacije mašinskih kodova.

Na drugom kraju, sam fizički procesor može se posmatrati kao implementacija sistema izvršavanja određenog asembli jezika. U tom pogledu, izvršni model je sproveden od strane fizičkih procesora i sistema memorije. Analogno tome, sistemi izvršenja za jezike visokog nivoa su i sami sprovedeni koristeći neke druge jezike. To stvara hijerarhiju sistema izvršenja, sa samim procesorom- ili zapravo njegovim unutrašnjim digitalnim logičkim strukturama koje određuju stvari kao što su programski brojač i raspored instrukcija- kao najnižim nivoom sistema izvršavanja.

Moderni aspekt sistema izvršavanja jeste paralelno izvršenje operacija, čiji je način rada pokazao Pthreads i paralelna sekcija izrade u OpenMP-u. Izvršni sistem sa takvim načinom rada može biti modularizovan prema proto-izvršnom prstupu.    

Istorija[uredi | uredi izvor]

Značajni raniji primeri sistema izvršavanja su prevodioci za BEJSIK i Lisp. Ova okruženja takođe uključuju i sakupljače smeća. Fort je rani primer jezika koji je dizajniran da bude izrađen u pseudokodu; njegov sistem izvršenja je bila virtuelna mašina koja prevodi taj pseudokod. Još jedan popularan, uslovno teoretski, primer je MiX računar Donalda Knuta.

U C i kasnijim jezicima koji su podržali dinamičko dodeljivanje memorije, sistem izvršenja takođe uključuje i biblioteku koja upravlja bazenom memorije tog programa.

U objektno-orijentisanim programskim jezicima, sistem izvršenja je često odgovoran za dinamičku proveru tipa i za rešavanje referenci metoda.

Vidi još[uredi | uredi izvor]

Reference[uredi | uredi izvor]

  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. Pristupljeno 30. 12. 2013. [mrtva veza]