VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:8/95
RoΦnφk:1995
Rubrika/kategorie: Co (ne)najdete ve slovnφku

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek

Ji°φ Peterka

Loader

M∙₧e b²t na sv∞t∞ n∞co jednoduÜÜφho, ne₧ spuÜt∞nφ programu? ZvlßÜt∞ pak v dneÜnφ dob∞, plnΘ grafick²ch u₧ivatelsk²ch rozhranφ, ikon a slogan∙ o tom, ₧e cel² sv∞t je na dosah jedinΘho kliknutφ?

Pro u₧ivatele mo₧nß nic jednoduÜÜφho skuteΦn∞ neexistuje, ale operaΦnφ systΘm asi bude mφt na v∞c pon∞kud jin² nßzor. Pro n∞j toti₧ m∙₧e spuÜt∞nφ urΦitΘho programu p°edstavovat nemal² kus prßce. ProΦ?

Mß-li b²t urΦit² program spuÜt∞n, je nutnΘ jej nejprve umφstit do operaΦnφ pam∞ti, a pak mu p°edat °φzenφ. A zde m∙₧e b²t prvnφ kßmen ·razu - je v okam₧iku spouÜt∞nφ k dispozici dostateΦn∞ velk² objem volnΘ pam∞ti? Pokud ano, je vÜe v po°ßdku. Pokud ne, jeÜt∞ nemusφ b²t vÜe ztraceno. OperaΦnφ systΘm toti₧ m∙₧e pou₧φvat i takovΘ techniky prßce s pam∞tφ, kterΘ mu umo₧≥ujφ existenci dostateΦn∞ velkΘho objemu volnΘ pam∞ti pouze p°edstφrat - p°φkladem m∙₧e b²t tzv. strßnkovßnφ na ₧ßdost (demand paging), Φi jinΘ techniky, realizujφcφ tzv. virtußlnφ pam∞¥.

Mnohem v∞tÜφ problΘm vÜak m∙₧e zp∙sobovat jinß skuteΦnost - i kdy₧ operaΦnφ systΘm v okam₧iku spouÜt∞nφ programu najde dostateΦn∞ velk² objem volnΘ pam∞ti, nem∙₧e nikdy dop°edu zaruΦit, na jakΘm mφst∞, resp. ve kterΘ Φßsti existujφcφ operaΦnφ pam∞ti to bude. V p°φpad∞ vφce·lohov²ch operaΦnφch systΘm∙ toti₧ zßle₧φ na tom, kolik jin²ch ·loh prßv∞ b∞₧φ, resp. je umφst∞no v pam∞ti. Stejn∞ tak tomu m∙₧e b²t i v p°φpad∞ jednou₧ivatelsk²ch a jedno·lohov²ch operaΦnφch systΘm∙, nap°φklad starΘho znßmΘho MS DOSu - takΘ tento operaΦnφ systΘm nem∙₧e nikdy dop°edu v∞d∞t, kolik rezidentnφch program∙ si jeho u₧ivatel nainstaluje, a tudφ₧ nem∙₧e dop°edu v∞d∞t ani to, kde najde dostateΦn∞ velkΘ volnΘ mφsto.

Te∩ se ale na celou v∞c podφvejme z pon∞kud jinΘho pohledu: vadφ n∞komu Φi n∞Φemu, kdy₧ nelze p°edem stanovit, do kterΘho mφsta operaΦnφ pam∞ti bude program p°i svΘm spouÜt∞nφ zaveden? Tedy kdy₧ nelze p°edem, pevn∞ a jednoznaΦn∞ stanovit, na kter²ch adresßch bude takov²to program äpoΦφtat"? Odpov∞∩ znφ nßsledovn∞: nemusφ to vadit tehdy, je-li program napsßn tak, aby se nikdy neodkazoval na ₧ßdnou adresu p°φmo, p°esn∞ji jako na tzv. absolutnφ adresu, stylem äskoΦ na adresu 1234", ale v₧dy pou₧φval jen tzv. nep°φmΘ odkazy, typu äskoΦ dop°edu o 8 byt∙". Nenφ jist∞ t∞₧kΘ nahlΘdnout, ₧e p°i d∙slednΘm pou₧itφ sam²ch relativnφch odkaz∙ lze v²sledn² program umφstit na kterΘkoli mφsto do operaΦnφ pam∞ti, a zde jej spustit. Otßzkou ovÜem je, zda vÜechny programy mohou b²t psßny tφmto zp∙sobem.

Odpov∞∩ na tuto otßzku je v rukou lidφ, kte°φ navrhujφ nov² mikroprocesor, jeho instrukΦnφ soubor a p°edevÜφm mo₧nΘ zp∙soby adresovßnφ. Pokud sv∙j mikroprocesor navrhnou Üikovn∞, je v principu mo₧nΘ pro n∞j psßt takovΘ programy, kterΘ neobsahujφ ₧ßdnΘ absolutnφ odkazy do pam∞ti, ale jen samΘ odkazy relativnφ. O takov²chto programech se pak takΘ °φkß, ₧e jsou tzv. relokovatelnΘ - ₧e je mo₧nΘ je umφstit do libovolnΘho mφsta pam∞ti. RelokovatelnΘ programy je dokonce mo₧nΘ v operaΦnφ pam∞ti p°emis¥ovat, a p°i ka₧dΘm p°esunu staΦφ sprßvn∞ zm∞nit jen zßklad, ke kterΘmu jsou vÜechny relativnφ odkazy vzta₧eny. ProblΘm je ovÜem v tom, ₧e velkß v∞tÜina dneÜnφch procesor∙ takto Üikovn∞ navr₧ena nenφ.

Platφ to bohu₧el i pro procesory Intel °ady 80x86, pou₧φvanΘ v poΦφtaΦφch PC. V∞tÜina jejich strojov²ch instrukcφ sice m∙₧e pou₧φvat relativnφ adresy a umo₧≥ovala by tedy psßt snadno relokovatelnΘ programy. Bohu₧el ale v repertoßru strojov²ch instrukcφ procesor∙ 80x86 existujφ i takovΘ instrukce, kterΘ pou₧φvajφ absolutnφ adresy. Jsou to nap°φklad instrukce pro tzv. vzdßlenΘ skoky Φi vzdßlenß volßnφ, jejich₧ pou₧itφ se prakticky nelze vyhnout, je-li pot°eba napsat program v∞tÜφ jako 64 kbyt∙. Co to ale znamenß?

V²sledn² efekt je ten, ₧e ani programy, sestavenΘ pro prost°edφ MS DOSu sestavujφcφmi programy (linkery) z tzv. objektov²ch modul∙ (vznikl²ch p°ekladem zdrojov²ch modul∙, viz minulΘ a p°edminulΘ vydßnφ rubriky), nejsou jeÜt∞ p°φmo spustitelnΘ. Alespo≥ ne v tom smyslu, ₧e by je bylo mo₧nΘ jednoduÜe vzφt, umφstit do prßv∞ volnΘho mφsta pam∞ti, z p°edat jim °φzenφ. Mφsto toho je nutnΘ nejprve sprßvn∞ pozm∞nit ty jejich Φßsti, kterΘ odpovφdajφ absolutnφm odkaz∙m do pam∞ti, a kterΘ jsou tudφ₧ zßvislΘ na konkrΘtnφm umφst∞nφ spouÜt∞nΘho programu. Toto tvrzenφ se p°itom t²kß jak soubor∙ s p°φponou COM, tak i soubor∙ s p°φponou EXE, kterΘ jsou v prost°edφ MS DOSu b∞₧n∞ oznaΦovßny jako spustitelnΘ. Jestli₧e tedy u₧ivatel zadß operaΦnφmu systΘmu MS DOS p°φkaz ke spuÜt∞nφ urΦitΘho souboru COM Φi EXE, musφ jej MS DOS vzφt, a podle momentßlnφho stavu pam∞ti sprßvn∞ ädopoΦφtat". Mφra tohoto ädopoΦφtßnφ", p°edstavujφcφho p°edevÜφm sprßvnΘ nastavenφ absolutnφch odkaz∙ do pam∞ti, je u obou druh∙ soubor∙ r∙znß. U soubor∙ COM, kterΘ mohou mφt jen omezenou velikost (do 64 KB), jde v podstat∞ jen o jednoduchΘ dosazenφ ΦφselnΘ konstanty na urΦitß mφsta v k≤du programu. V p°φpad∞ soubor∙ s p°φponou EXE, jejich₧ velikost nenφ apriorn∞ omezena, je ädopoΦφtßvßnφ" v²razn∞ji slo₧it∞jÜφ. SouΦßstφ soubor∙ EXE proto musφ b²t nejen k≤d samotnΘho programu, ale jeÜt∞ takΘ dopl≥ujφcφ informace, podle kter²ch toto ädopoΦφtßvßnφ" probφhß.

Vra¥me se ale zp∞t od jednoho konkrΘtnφho operaΦnφho systΘmu (MS DOSu) do obecnΘ roviny. Z toho, co jsme si naznaΦili, by m∞lo b²t snadnΘ nahlΘdnout, ₧e ka₧d² operaΦnφ systΘm musφ p°i spouÜt∞nφ program∙ provßd∞t urΦitΘ, mnohdy i dosti netrivißlnφ akce. KonkrΘtnφ Φßst operaΦnφho systΘmu, kterß toto zajiÜ¥uje, se oznaΦuje jako tzv. zavßd∞cφ program Φi zavßd∞Φ, anglicky loader.


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm