E-post: salg@linmag.no



22.5.2012 - 23:26
 • Nyheter
 • Om Linux
 • Linuxskolen
 • Spørrespalte
 • Vitsespalte
 • LINUXmagasinet
 • Spill
 • WEBSHOP
 • Diskusjonsforum
 • Linker
 • For annonsører
 • English
 • Om oss
developer.ez.no
www.online4u.no

0

skalprogram og binærprogram


Kva er skilnaden mellom skalprogram (skript) og vanlege binærprogram? Kvifor kan ein ikkje rett og slett gjere alle program om til skal (sh,bash,csh,zsh osv. -skript)?

(Eg tenkjer her altså ikkje på open kildekode eller slikt.)
Eg skjønar at dei vanlege programma køyrer som binær/maskinkode, medan dei for skalet køyrer som opne filer, medan ein tilskriv 'int', 'float','double' og 'char' -verdiar i dei binærskrevne programma. Likeeins at ein kan tilordne 'peikarar', 'operatorar' o.l. og dermed detaljstyre ting. Men er dette grunnen?

Er det avgrensingane i skal-programma som gjer at ein må bruke binær-kode og den særskilde kompileringa? Er det fordi prosessoren kan køyre bin-programma "direkte" eller noko slikt? Korleis kan ein forklare dette enklast?

Helsing Sigbjørn S.



Hei Sigbjørn,
du er inne på hovedgrunnen. Når en prosessor skal utføre en "handlig", så må den vite hva den skal gjøre. Prosessoren snakker et eget språk, maskinkode. Maskinkode er bygd opp av veldig enkle og grunnleggende nøkkelord og tall og brukes for å gi prosessoren banalt enkle instrukser for hva den skal utføre. Følgede operasjon krever 2-3 maskinkode operasjoner: "Legg et tall i en minnebank, legg et annet tall i en annen minnebank, summer disse og legg summen i en trede minnebank", er en typisk liten bit av et maskinkode program. Som du sikkert skjønner så er dette ganske vanskelig å bruke dersom man vil lage for eksempel et videoredigeringsprogram eller andre "high-end" programmer. Derfor har man laget programerings språk som genererer maskinkode for oss. Programmerings-språkene gjør det enkelt for oss å vite hva som blir utført i ethvert program og gjør det enkelt for oss å gjøre endringer uten å tenke på å flytte bit's & bytes. Når vi er fornøyde kompilerer vi koden og får binærprogrammer som vi kan kjøre. MEN, dersom vi skulle måtte kompilere koden hver gang vi vil kjøre programmet vårt, ville prosessoren bruke mer tid på å konvertere koden til maskinkode, enn den ville bruke på å faktisk kjøre koden vår. Derfor er shell-programmering å foretrekker bare når det er små, avgrensede oppgaver som skal utføres, da shellprogrammet på et eller annet tidspunkt må kompileres før det kan kjøres. Binærprogram er derfor definitivt å foretrekke. Dersom man for eksempel skulle kjøre Openoffice som et shell-program ville man sannsynligvis bruke en hel dag bare på å få opp velkomstskjermen og åpne et dokument. Det ville være totalt ubrukelig.

Skriver man ut 20 linjer med tekst fra et shellprogram bruker jeg på min maskin ca 0.012s (real). Gjør jeg det samme med et kompilert c-programm, bruker jeg bare 0.006s (real). Og forskjellen i tid øker proporsjonalt med størrelsen på programmet.

Når det gjelder å detaljstyre ting så er det en avveining man må ta som programmerer. Programmeringsspråk på de laveste nivåer gir størst muligheter for detaljstyring men tar lengst tid å utvikle på, mens høynivå språkene er kjappe å utvikle på men gir minst muligheter.



Håper dette forklarte en del for deg :)



0







0 0