Izvršni modul

S Vikipedije, slobodne enciklopedije
Heksadecimalani prikaz izvršnog modula realnog učitavanja.

U programiranju, izvršni fajl ili izvršni program, ili ponekad jednostavno izvršni modul, nalaže računaru da "obavi određene zadatke prema kodiranim instrukcijama",[1] za razliku od podatka koji se mora prvo raščlaniti da bi imao ikakvog značaja. Te instrukcije su najčešće kodirane u mašinskom jeziku i namenjene su procesoru. Ipak u opštem smislu, fajl koji sadrži instrukcije (kao što je bajtkod) za prevodioca softvera mogu biti prihvaćene kao izvršne; čak bi se i fajlovi skriptnih jezika mogli smatrati kao izvršni u ovom slučaju. Tačna interpretacija zavisi od upotrebe; iako se ovaj termin koristi samo za fajlove kodirane u mašinskom jeziku, da bi se zaštitili od računarskih virusa, svi fajlovi čije se izvršenje smatra rizičnim, uključujući i skriptne, su spojeni zajedno.

Izvršni kod se koristi da bi se opisale sekvence izvršnih naredbi koje ne moraju nužno činiti jednu izvršnu datoteku; npr, deo u programu.

Generacije izvršnih fajlova[uredi | uredi izvor]

Dok se neki izvršni fajlovi mogu kodirati u mašinskom jeziku, češće će se razvijati softver kao izvorni kod u programskom jeziku visokog nivoa koji ljudi lako razumeju, ili u nekim slučajevima u asemblerskom jeziku koji je mnogo komplikovaniji ljudima ali je mnogo bliže povezan sa instrukcijama na mašinskom jeziku. Programski jezik visokog nivoa je preveden u izvršni ili neizvršni mašinski kod koji je smešten u neku vrstu objektne datoteke; ekvivalentan proces kodiranja asemblerskim jezikom se naziva asembli. Nekoliko objektnih datoteka je povezano da bi stvorili izvršnu datoteku. Objektne datoteke, bilo da su izvršne ili ne, su uglavnom u zatvorenom formatu, kao što je izvršni i link format (ILF). Ovo je sastav generisanog mašinskog koda, kao što je npr, deljenje na sekcije kao što su .text (izvršni kod), .data (statičke promenljive), i .rodata (statički sadržaj).

Da bi ga sistem izvršio (kao operativni sistem, Firmver, ili pokretač) , izvršni fajl mora da podleže sistemu aplikacije binarni interfejs (ABI). Jednostavno, fajl se izvršava tako što se unosi u memoriju i prosto prelazi direktno na adresu pozicije i tamo se izvršava, ali u mnogo komlikovanijim sčučajevima izvršni fajlovi imaju dodatnu metadatu, koja zahteva posebnu tačku ulaza. Npr, u ELF-u, ulazne tačke su unesene u zaglavlju  e_entry polja, gde se stvaraju virtualne adrese na koje počinje izvršavanje. U GNU kolekciji kompajlera se to polje se dobije pomoću povezivača baziranog na _start simbolu.

Izvršni fajlovi takođe obično sadrže sistem izvršavanja, koji je zadužen za karakteristike pisane u rantajmu programskog jezika (raspored zadataka, izuzeci, stvaranje i rušenje kodova, itd.) i povezan je sa operativnim sistemom, prolazeći kroz argumente, okruženje i vraćajući status izlaz, zajedno sa drugim sistemima podizanja i gašenja kao što je oslobađanje resursa kao rukovođenja datotekom. Za C programski jezik, to je urađeno preko objekta crt0, koji sadrži stvarnu ulaznu tačku, obavlja podešavanja i isključenje pomoću komandi u biblioteci izvršavanja.

Na ovaj način izvršni fajlovi najčešće sadrže značajan broj dodatnih mašinskih kodova koji su direktno generisani iz izvornog koda. U nekim je slučajevima poželjno to izostaviti, npr, za ugrađivanje razvoja sistema ili samo da bismo razumeli slaganje, povezivanje ili unošenje podataka. U C-u se ovo može izvesti izostavljanjem uobičajenog sistema izvršavanja, i umesto njega ubaciti odgovarajući skriptni povezivač, koji sam generiše ulaznu tačku i podržava uključenje i isključenje, npr. pozivanjem  main na startu i vraćanje izlaznog statusa na kraju.[2]

Generalno isti osnovni kod se može prevesti da radi na drugačijim računarima i operativnim sistemima. Ponekad to ne zahteva nikakvo menjanje osnovnog koda, već se samo treba ubaciti mašinski kod (cilja se na drugačiji skup instrukcija) kako bi se povezali na neki drugi sistem (zavisno od operativnog sistema koji je u upotrebi). U ostalim slučajevima potrebno je menjati osnovni kod, ili se mora obaviti dodatno prevođenje (uslovno prevođenje), ili se mora proveriti sistem izvršavanja (proveravanjem okruženja u izvršnom sistemu). Pretvaranje postojećeg osnovnog koda u drugačiju platformu se naziva portiranje.

Interakcija sa računarskim platformama[uredi | uredi izvor]

Hardver[uredi | uredi izvor]

Izvršni sastav mašinskih kodova za određen procesor ili familije procesora. Mašinski kodirane instrukcije za različite familije procesora su potpuno drugačije, a izvršne naredbe su potpuno nekompatibilne. Procesori unutar familija mogu biti obrnuto kompatibilni; npr, procesor iz familije x86-64 iz 2014 godine može da izvrši većinu kodova procesora iz familije x86 iz 1978 godine, ali se obruno ne može reći.

Neke zavisnosti o određenom hardveru, kao što je to da određena grafička kartica može biti kodirana u izvršnim naredbama. Uobičajeno je ako je moguće odstraniti takve zavisnosti iz izvršnih programa koji su dizajnirani da rade na više različitih hardvera, umesto instaliranja drajvera povezanih sa hardverom, sa kojim program ima standardnu interakciju.

Operativni sistem[uredi | uredi izvor]

Neki operativni sistemi određuju izvršne fajlove po ekstenziji (npr. .exe) ili označavanjem pored fajla u njegovim metapodacima (npr. označavanjem dozvole "izvršavanje" na Uniks-like operativnim sistemima). Većina takođe proveri da li je fajl u prihvatljivom formatu i zaštiti ga od nenamernog uključivanja. Moderni operativni sistemi imaju kontrolu nad celim računarom, imaju pojedinačne programe koji izdaju sistemsku naredbu za sistemski poziv privilegovanihm sredstvima. Kako je svaka vrsta operativnog sistema graditelj sopstvenih sistemskih komandi, izvršni fajlovi su generalno povezani sa određenim operativnim sistemom ili familijom operativnih sistema.

Postoje mnoga sredstva koja prepravljaju izvršni fajl koji je radio na jednom operativnom sistemu da  bi radio savršeno i na drugom operativnom sistemu, implementiranjem sličnog ili kompatibilnog API-a. Npr, Vajn, koji implemetnira Win-32 kompatibilnu biblioteku za x86 procesor. U nekim slučajevima se više izvršnih fajlova povezuje i pakuje u jedan debeli binarni.

Binarni interfejs hardvera čiji izvršni fajlovi miruju se razlikuje od binarnog interfejsa koji koristi svoje izvršne fajlove, pa im treba prevodilac. Taj progam koji obavlja ovo prevođenje se naziva Emulator. Određeni fajlovi mogu biti izvršeni, ali ne moraju svi biti odgovarajući određenom hardverskom biarnom interfejsu, ili skupu instrukcija, oni mogu biti ili zastupljeni u bajtkodu za just-in-time kompilaciji, ili u izvornom kodu za upotrebu u skript jeziku. (vidi Shebang (Unix))

Reference[uredi | uredi izvor]

  1. ^ „executable”. Merriam-Webster's Online Dictionary. Merriam-Webster. Pristupljeno 19. 07. 2008. 
  2. ^ Jessica McKellar (16. 3. 2010). „Hello from a libc-free world! (Part 1)”. Arhivirano iz originala 17. 11. 2016. g. Pristupljeno 22. 11. 2015. 

Spoljašnje veze[uredi | uredi izvor]