VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:6/94
RoΦnφk:1994
Rubrika/kategorie: TΘma t²dne

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

Ji°φ Peterka

Od von Neumanna ....

Tento Φlßnek vyÜel v tzv. tΘmatu t²dne v CW 6/94, jako druh² ze sΘrie Φlßnk∙ v∞novanΘ prvopoΦßtk∙m v²poΦetnφ techniky.

S Φasov²m odstupem tΘm∞° padesßti let od vzniku von Neumannovy architektury lze konstatovat, ₧e se udr₧ela a₧ dodnes, a ₧e drtivß v∞tÜina dnes existujφcφch a vyrßb∞n²ch poΦφtaΦ∙ vychßzφ prßv∞ z tΘto koncepce. Objevily se samoz°ejm∞ i jinΘ koncepce, zßsadn∞ odliÜnΘ od von Neumannovy, ale ₧ßdnß z nich se neprosadila takov²m zp∙sobem, aby p°etrvßvajφcφ hegemonii von Neumannovy architektury dokßzala v∙bec ohrozit. Ta sice proÜla za dobu svΘ existence urΦit²mi zm∞nami, ale ty z∙staly spφÜe jen na ·rovni kvantitativnφch vylepÜenφ, ne₧ zßsadnφch kvalitativnφch zm∞n.

Nßsledujφcφ Φlßnek se sna₧φ shrnout ty nejzajφmav∞jÜφ momenty v dalÜφm v²voji von Neumannovy architektury, ke kter²m doÜlo nep°φliÜ dlouho po jejφm vzniku.

1951 - mikroprogramovßnφ

Srdcem ka₧dΘho poΦφtaΦe, vytvo°enΘho podle von Neumannovy koncepce, je tzv. °adiΦ. Ten je mo₧nΘ si p°edstavit jako tu Φßst poΦφtaΦe, kterß vÜem ostatnφm Φßstem poΦφtaΦe p°edepisuje, co p°esn∞ majφ d∞lat, a tφm vlastn∞ °φdφ chod celΘho poΦφtaΦe.

Provedenφ ka₧dΘ strojovΘ instrukce se v₧dy sklßdß z urΦitΘho poΦtu dφlΦφch akcφ, kterΘ mohou provßd∞t r∙znΘ Φßsti poΦφtaΦe samy, Φi ve vzßjemnΘ spoluprßci, v₧dy ale za pot°ebnΘ vzßjemnΘ souΦinnosti. Tφm, kdo tuto koordinaci zajiÜ¥uje, kdo jednotliv²m Φßstem poΦφtaΦe vysφlß nezbytnΘ pokyny a kdo dohlφ₧φ na jejich sprßvnou Φinnost, je prßv∞ °adiΦ. On sßm p°itom vychßzφ z prßv∞ provßd∞nΘ strojovΘ instrukce, od kterΘ pak odvozuje sv∙j postup.

Po konstrukΦnφ strßnce byly °adiΦe nejprve °eÜeny jako jedno·ΦelovΘ sekvenΦnφ obvody, "ÜitΘ na mφru" konkrΘtnφmu repertoßru strojov²ch instrukcφ, kter²mi byl poΦφtaΦ vybaven. Jin²mi slovy: vÜechny strojovΘ instrukce byly v °adiΦi "pevn∞ zadrßtovßny".

Ji₧ v roce 1951 si ale prof. Maurice V. Wilkes povÜiml znaΦnΘ podobnosti mezi Φinnostφ poΦφtaΦe jako takovΘho, kter² vykonßvß urΦit² program, a Φinnostφ °adiΦe, kter² "vykonßvß" konkrΘtnφ strojovou instrukci. Podobnost spat°oval p°edevÜφm v tom, ₧e oba postupujφ podle p°edem stanovenΘho plßnu (programu), a podle n∞j vykonßvajφ urΦitΘ akce (Φi zadßvajφ jejich provedenφ). P°i podrobn∞jÜφm zkoumßnφ nalezl profesor Wilkes dalÜφ podobnosti - nap°φklad v pot°eb∞ v∞tvenφ podle v²sledku dosavadnφch Φinnostφ, opakovßnφ stejn²ch Φinnostφ (podprogram∙) apod. Jeho celkov² dojem byl takov², jako kdyby °adiΦ byl "poΦφtaΦem v poΦφtaΦi", nebo jako kdyby Ülo o poΦφtaΦ, kter² je v hierarchii stup≥∙ abstrakce "o jedno patro nφ₧e". Na zßklad∞ toho pak profesor Wilkes p°iÜel s myÜlenkou realizovat °adiΦ skuteΦn∞ jako "poΦφtaΦ v malΘm" - jednotlivΘ dφlΦφ akce (mikrooperace, resp. mikroinstrukce), ze kter²ch se sklßdß provedenφ konkrΘtnφ strojovΘ instrukce, navrhl sestavovat do v∞tÜφch celk∙, tzv. mikroprogram∙, kterΘ by byly umφst∞ny v tzv. °φdφcφ pam∞ti (jako analogii operaΦnφ pam∞ti), odkud by byly jednotlivΘ mikroinstrukce pr∙b∞₧n∞ naΦφtßny a "provßd∞ny". Dφky tΘto koncepci tzv. mikroprogramovΘho °adiΦe mohl Wilkes p°evΘst slo₧itost nßvrhu jedno·ΦelovΘho obvodu ("zadrßtovanΘho" °adiΦe) na slo₧itost tvorby mikroprogramu. Podobn∞ jako von Neumann, vychßzel i Wilkes z myÜlenky, ₧e je v²hodn∞jÜφ nem∞nit vnit°nφ strukturu (°adiΦe, resp. poΦφtaΦe), ale p°izp∙sobovat jeho Φinnost konkrΘtnφm po₧adavk∙m programov²mi prost°edky - v p°φpad∞ mikroprogramovΘho °adiΦe tzv. mikroprogramovßnφm (jako analogiφ programovßnφ u poΦφtaΦe jako takovΘho).

Jestli₧e prvnφ skuteΦnΘ poΦφtaΦe pou₧φvaly jeÜt∞ "zadrßtovanΘ" (anglicky: hardwired) °adiΦe, Wilkesovy mikroprogramovΘ °adiΦe ji₧ poΦßtkem Üedesßt²ch let zcela p°evlßdly. V poslednφ dob∞ jsou ovÜem zase na ·stupu - jsou toti₧ p°eci jen pomalejÜφ, ne₧ p∙vodnφ "zadrßtovanΘ" °adiΦe, a v dneÜnφ honb∞ za co mo₧nß nejrychlejÜφmi procesory p°evß₧ilo hledisko rychlosti nad v²hodami snazÜφho nßvrhu.

1956 - p°eruÜenφ a asynchronnφ V/V operace

Jednou z nejvφce kritizovan²ch vlastnostφ von Neumannovy architektury je jejφ Φist∞ sekvenΦnφ charakter (viz tΘ₧: ..vlo₧it odkaz na box o von Neumannov∞ architektu°e), kter² nepoΦφtß s tφm, ₧e by se provßd∞lo vφce Φinnostφ soub∞₧n∞. To ostatn∞ souvisφ i s p°edstavou, ₧e procesor (resp. °adiΦ jako Φßst procesoru) bude bezprost°edn∞ °φdit skuteΦn∞ vÜechny provßd∞nΘ Φinnosti, vΦetn∞ vstupn∞ v²stupnφch operacφ.

ZajφmavΘ je, ₧e toto omezenφ zaΦalo ji₧ velmi brzy vadit. D∙vod byl ten, ₧e rychlost procesoru i v∞tÜiny ostatnφch Φßstφ poΦφtaΦe prakticky od zaΦßtku °ßdov∞ p°evyÜovala rychlost vÜech vstupn∞/v²stupnφ za°φzenφ mechanickΘho charakteru (zejmΘna snφmaΦ∙ d∞rn²ch pßsek a Ütφtk∙, jejich d∞rovaΦ∙, tiskßren). Pokud by ale procesor (resp. °adiΦ) skuteΦn∞ p°φmo °φdil takovßto vstupn∞/v²stupnφ za°φzenφ, musel by se nutn∞ p°izp∙sobovat jejich rychlosti. Efekt by pak byl takov², ₧e drtivou v∞tÜinu Φasu by procesor musel trßvit Φekßnφm na p°ipravenost t∞chto za°φzenφ. A to jist∞ nenφ rozumnΘ.

P°itom bezprost°ednφ °φzenφ jednotliv²ch periferiφ je vesm∞s natolik jednoduchΘ, ₧e je lze sv∞°it nep°φliÜ slo₧itΘmu jedno·ΦelovΘmu obvodu. A tak se stalo, ₧e k jednotliv²m perifernφm za°φzenφm se zaΦaly p°idßvat samostatnΘ °adiΦe (nejΦast∞ji oznaΦovanΘ jako tzv. °φdφcφ jednotky), kterΘ p°evzaly na svß bedra ·lohu bezprost°ednφho °φzenφ vlastnφch za°φzenφ. Procesor t∞mto °φdφcφm jednotkßm v₧dy zaÜle explicitnφ pokyn k zahßjenφ urΦitΘ vstupn∞/v²stupnφ operace Φi jejφ dφlΦφ Φßsti, a °φdφcφ jednotka pak urΦitou dobu pracuje samostatn∞ (mφn∞no: nezßvisle na procesoru), dokud zadan² pokyn nedokonΦφ. Jeliko₧ p°itom °φdφcφ jednotka pracuje "sv²m tempem" (tj. nezßvisle na rychlosti procesoru), hovo°φ se v tΘto souvislosti takΘ a asynchronnφm pr∙b∞hu vstupn∞/v²stupnφch operacφ

Jak ale vy°eÜit otßzku zp∞tnΘ vazby? Jak se mß °φdφcφ jednotka zachovat v okam₧iku, kdy dokonΦφ d°φve zadan² ·kol, a chce oznßmit, ₧e je schopna p°evzφt nov² ·kol? A jak °eÜit situaci, kdy dojde k n∞jakΘ nestandardnφ situaci, a °φdφcφ jednotka nem∙₧e pokraΦovat ve svΘ prßci? Nebo co kdy₧ pot°ebuje spoluprßci procesoru k tomu, aby p°enesla n∞jakß data z/do operaΦnφ pam∞ti? ProblΘm je o to t∞₧Üφ, ₧e vzhledem k asynchronnφmu pr∙b∞hu vstupn∞/v²stupnφch operacφ nemß procesor mo₧nost p°edem p°esn∞ urΦit okam₧ik, kdy budou dokonΦeny.

Jednou z mo₧nostφ by bylo, aby se procesor sßm pr∙b∞₧n∞ dotazoval °φdφcφ jednotky na jejφ stav - tedy aby iniciativa byla na stran∞ procesoru. To je samoz°ejm∞ mo₧nΘ, ale zcela to neguje v²sledn² efekt samostatnΘ prßce °φdφcφ jednotky: procesor sice ji₧ nemusφ bezprost°edn∞ °φdit pr∙b∞h vstupn∞/v²stupnφ operace, ale mφsto toho se musφ neustßle ptßt °φdφcφ jednotky, zda u₧ je hotova. P°itom ovÜem ji₧ t∞₧ko stihne d∞lat n∞co u₧iteΦnΘho.

Ve snaze odstranit tento zaΦarovan² kruh tv∙rci poΦφtaΦ∙ nakonec dosp∞li k zßv∞ru, ₧e iniciativa by m∞la p°ejφt na stranu °φdφcφ jednotky p°φsluÜnΘ periferie. Äe procesor m∙₧e starost o pr∙b∞h operace "hodit za hlavu" a poΦφtat s tφm, ₧e to bude °φdφcφ jednotka, kterß se sama ozve, jakmile bude n∞co pot°ebovat.

Aby tak °φdφcφ jednotka mohla ud∞lat, pot°ebuje mφt k dispozici vhodn² mechanismus. Takov², kter² jφ umo₧nφ p°ihlßsit se procesoru a vynutit si jeho pozornost - p°inutit jej p°eruÜit provßd∞nφ prßv∞ probφhajφcφho programu, a mφsto toho vyvolat jin² program (tzv. obslu₧n² program), kter² zjistφ p°φΦinu, zajistφ vÜe pot°ebnΘ, a pak zase vrßtφ °φzenφ zp∞t p∙vodn∞ p°eruÜenΘmu programu.

Takto koncipovan² mechanismus p°eruÜenφ, bez kterΘho by se dneÜnφ poΦφtaΦe u₧ v∙bec neobeÜly, byl poprvΘ pou₧it v roce 1956 v poΦφtaΦφch UNIVAC firmy Remington Rand.

1956 - kanßly a p°φm² p°φstup do pam∞ti

Mechanismus p°eruÜenφ spolu s asynchronnφmi vstupn∞/v²stupnφmi operacemi znaΦn∞ odlehΦil procesoru, a umo₧nil mu v∞novat se jin²m, u₧iteΦn²m v∞cem (provßd∞nφm jin²ch program∙). Stßle vÜak procesoru zb²valo mnoho povinnostφ, spojen²ch s pr∙b∞hem vstupn∞/v²stupnφch operacφ. Nap°φklad veÜker² p°esun dat mezi pam∞tφ a vstupn∞/v²stupnφm za°φzenφm musel zajiÜ¥ovat prßv∞ procesor, kter² m∞l jako jedin² p°φstup k operaΦnφ pam∞ti. ╚inil tak p°itom na explicitnφ popud periferie, resp. jejφ °φdφcφ jednotky, v rßmci obslu₧n²ch program∙ p°eruÜenφ.

Pokud byly obsluhovanΘ periferie relativn∞ pomalΘ, a p°enßÜen²ch dat pom∞rn∞ mßlo - jako nap°φklad p°i tisku na tiskßrn∞ - procesor to nijak zvlßÜ¥ nezat∞₧ovalo. OvÜem v p°φpad∞ rychl²ch periferiφ, kterΘ vy₧adujφ p°enosy relativn∞ velk²ch objem∙ dat (jako nap°φklad disky) doÜlo k zajφmavΘ situaci: procesor byl velmi Φasto p°eruÜovßn (za ·Φelem p°enosu dat z/do periferie), a mφra jeho schopnosti vykonßvat vedle toho jeÜt∞ i jin² program byla tudφ₧ znaΦn∞ omezenß. Dokonce se mohlo stßt i to, ₧e procesor jednoduÜe "nestφhal" p°enßÜet data z/do periferie pot°ebnou rychlostφ.

Ve snaze jeÜt∞ vφce odlehΦit procesoru se p°iÜlo na zajφmavΘ °eÜenφ: zabudovat do poΦφtaΦe specializovan² subsystΘm, tzv. kanßl, urΦen² v²hradn∞ k zajiÜ¥ovßnφ p°enos∙ dat mezi operaΦnφ pam∞tφ a perifernφmi za°φzenφmi (resp. jejich °φdφcφmi jednotkami). Periferie se pak se sv²mi ₧ßdostmi o jednotlivΘ p°enosy dat nemusφ obracet p°φmo na procesor (prost°ednictvφm p°eruÜenφ), ale mφsto toho se obracφ na kanßl.

Aby ovÜem kanßl mohl plnit svou funkci a p°enßÜet data mezi pam∞tφ a perifernφmi za°φzenφmi, musφ se um∞t nejprve "poprat" s procesorem o prßvo p°φstupu k operaΦnφ pam∞ti. Do tΘ doby byl procesor "jedin²m pßnem" v celΘm poΦφtaΦi, a nikdo jin² ne₧ on neusiloval o p°φstup k pam∞ti. S p°φchodem kanßlu vÜak tuto svou v²luΦnost ztratil, proto₧e i kanßl ke svΘ funkci vy₧aduje schopnost toho, Φemu se dnes °φkß p°φm² p°φstup do pam∞ti (Direct Memory Access).

Kanßl tedy musφ b²t relativn∞ inteligentnφm za°φzenφm, kterΘ dokß₧e korektn∞ sout∞₧it s procesorem o zφskßnφ p°φstupu k pam∞ti. V zßjmu dosa₧enφ maximßlnφ autonomie kanßl∙ jsou tyto vybavovßny vlastnφm programem (tzv. kanßlov²m programem), na jeho₧ zßklad∞ jim mohly b²t p°edepsßny rozsßhlejÜφ vstupn∞/v²stupnφ operace, sekvence takov²chto operacφ apod. Na procesor se pak kanßl obracφ jen v okam₧iku, kdy dokonΦil provßd∞nφ celΘho kanßlovΘho programu, nebo v okam₧iku v²skytu n∞jakΘ nestandardnφ situace (chyby a pod.).

Prvnφ kanßl ve v²Üe naznaΦenΘm smyslu byl pou₧it v roce 1956, op∞t v poΦφtaΦφch UNIVAC firmy Remington Rand. Koncepce kanßl∙ pak dlouhou dobu dominovala p°edevÜφm v oblasti tzv. st°ediskov²ch poΦφtaΦ∙ (mainframes). U "menÜφ" v²poΦetnφ techniky se prosadilo jinΘ °eÜenφ: u minipoΦφtaΦ∙ se schopnostφ p°φmΘho p°φstupu do pam∞ti vybavily p°φmo °φdφcφ jednotky jednotliv²ch perifernφch za°φzenφ, zatφmco u souΦasnΘ mikroprocesorovΘ techniky se zaΦaly pou₧φvat samostatnΘ specißlnφ obvody, vybavenΘ schopnostφ p°φmΘho p°φstupu do pam∞ti, ale bez mo₧nosti pou₧φvßnφ kanßlov²ch program∙ (jsou °φzeny ·daji, zapisovan²mi p°φmo do jejich internφch registr∙). Tyto tzv. DMA °adiΦe pak mohou zajiÜ¥ovat pot°ebnΘ p°enosy dat z/do pam∞ti pro vφce jednotliv²ch periferiφ.

1957 - programovacφ jazyk vyÜÜφ ·rovn∞

Ka₧d² poΦφtaΦ mß v₧dy definovßn urΦit² repertoßr strojov²ch instrukcφ, kterΘ je schopen provßd∞t (neboli tzv. instrukΦnφ soubor). Programy, kterΘ je takov²to poΦφtaΦ schopen p°φmo vykonßvat, pak musφ b²t sestaveny prßv∞ a pouze z t∞chto strojov²ch instrukcφ. P°itom ka₧d² poΦφtaΦ mß obecn∞ jin² instrukΦnφ soubor, jin² repertoßr registr∙, se kter²mi tyto instrukce pracujφ, jinΘ zp∙soby adresovßnφ atd.

Programßtor, kter² sv∙j program, sestavuje p°φmo z jednotliv²ch strojov²ch instrukcφ (zapisovan²ch symbolicky v tzv. jazyku symbolick²ch adres neboli asembleru, nedej bo₧e p°φmo v ΦφselnΘm tvaru), samoz°ejm∞ musφ tyto strojovΘ instrukce znßt, a s nimi musφ dosti podrobn∞ znßt i dalÜφ vφce Φi mΘn∞ detaily, jako skladbu registr∙, zp∙soby adresovßnφ, v²znamy p°φznak∙ apod. Programßtor, kter² programuje na ·rovni strojovΘho k≤du, si tedy musφ b²t v∞dom, ₧e pracuje na urΦitΘm konkrΘtnφm poΦφtaΦi, a musφ respektovat jeho specifika.

Dnes z°ejm∞ ji₧ nelze zjistit, koho poprvΘ napadla myÜlenka tuto nep°φjemnou situaci zm∞nit. Koho napadlo vytvo°it takov² programovacφ jazyk, kter² bude nezßvisl² na konkrΘtnφm instrukΦnφm souboru, a nebude od programßtora oΦekßvat znalost konkrΘtnφho poΦφtaΦe, pro kter² bude program psßt. Dnes takΘ ji₧ t∞₧ko zjistφme, kdy a v jakΘ fßzi ·vah o strojov∞ nezßvislΘm programovacφm jazyku se p°iÜlo na to, ₧e elementßrnφ operace (instrukce), kterΘ se v takovΘmto jazyku budou pou₧φvat, mohou b²t mnohem obecn∞jÜφ, ne₧ jednotlivΘ strojovΘ instrukce - ₧e jedna instrukce strojov∞ nezßvislΘho jazyka bude odpovφdat takovΘ Φinnosti, kterou dokß₧e zajistit nap°φklad jen celß posloupnost strojov²ch instrukcφ. Z tohoto pohledu tedy strojov∞ nezßvisl² jazyk m∙₧e b²t jazykem vyÜÜφ ·rovn∞, ne₧ strojov∞ zßvisl² jazyk. Dokonce se zjistilo, ₧e tomu tak b²t musφ, proto₧e p°φkazy strojov∞ nezßvislΘho jazyka dost dob°e nemohou odpovφdat jednotliv²m strojov²m instrukcφm konkrΘtnφch poΦφtaΦ∙ (jako je tomu u asembleru jako strojov∞ zßvislΘho jazyka). Strojov∞ nezßvisl² jazyk pak ovÜem bude vy₧adovat bu∩ existenci kompilßtoru, kter² v n∞m zapsanΘ programy "p°elo₧φ" do proveditelnΘho tvaru (tedy do tvaru programu, sestavenΘho ze strojov²ch instrukcφ konkrΘtnφho poΦφtaΦe), nebo bude vy₧adovat alespo≥ tzv. interpret, kter² bude postupn∞ brßt jednotlivΘ p°φkazy strojov∞ nezßvislΘho jazyka, a bude pr∙b∞₧n∞ zajiÜ¥ovat jejich provßd∞nφ (bude interpretovat, co jednotlivΘ p°φkazy po₧adujφ, a p°φsluÜnΘ Φinnosti provede sßm).

JistΘ je pouze to, ₧e ·kol vytvo°it strojov∞ nezßvisl² jazyk si poprvΘ p°edsevzala v roce 1954 skupina v∞dc∙ od firmy IBM, vedenß Johnem Backusem. Jejich cφlem bylo vytvo°it strojov∞-nezßvisl² programovacφ jazyk vysokΘ ·rovn∞, urΦen² p°edevÜφm pro v∞deckotechnickΘ v²poΦty a °eÜenφ nejr∙zn∞jÜφ matematick²ch a in₧en²rsk²ch problΘm∙.

V²sledek svΘ prßce mohla skupina v Φele s Johnem Backusem p°edstavit sv∞tu v roce 1957. Byl jφm programovacφ jazyk, kter² nazvali FORTRAN (od: FORmula TRANslation). V pom∞rn∞ rychlΘm sledu za nφm pak nßsledovaly dalÜφ strojov∞-nezßvislΘ programovacφ jazyky: v roce 1958 jazyk LIPS (LISt Processor) pro um∞lou inteligenci, v roce 1960 jazyk COBOL (COmmon Business Oriented Language), a v tΘm₧e roce univerzßlnφ programovacφ jazyk ALGOL (Algorithmic Language, jeho₧ prvnφ verze pochßzφ z roku 1958, ale praktickΘho vyu₧itφ se doΦkala a₧ verze, pochßzejφcφ z roku 1960). Z roku 1961 pochßzφ prvnφ programovacφ jazyk, urΦen² pro poΦφtaΦovΘ simulace (jazyk GPSS, neboli General Purpose Systems Simulator). Pedagogy tolik zatracovan² jazyk BASIC (Beginner's All-purpose Symbolic Instruction Code) pochßzφ z roku 1964, zatφmco tolik vychvalovan² jazyk Pascal pochßzφ a₧ z roku 1971. V roce 1974 pak vylepÜenφm nep°φliÜ znßmΘho programovacφho jazyka B vznikß mnohem znßm∞jÜφ jazyk C, a v roce 1979 se objevuje programovacφ jazyk Ada. Tφm ovÜem nenφ v²voj programovacφch jazyk∙ zdaleka vyΦerpßn.

1958 - virtußlnφ pam∞¥

RychlΘ pokroky, ke kter²m dochßzelo v nejr∙zn∞jÜφch technologiφch, umo₧≥ovaly konstruovat stßle dokonalejÜφ a rychlejÜφ poΦφtaΦe, s v∞tÜφm objemem pam∞ti, a se stßle v∞tÜφmi schopnostmi. OvÜem po₧adavky u₧ivatel∙ rostly jeÜt∞ rychleji, ne₧ technologickΘ mo₧nosti v²robc∙.

Nejmarkantn∞jÜφ byl rozpor mezi po₧adavky u₧ivatel∙ a aktußlnφmi mo₧nostmi v²robnφch technologiφ v oblasti pam∞tφ: u₧ivatelΘ, zlßkßni mo₧nostmi poΦφtaΦ∙, po₧adovali stßle v∞tÜφ a v∞tÜφ objemy operaΦnφch pam∞tφ. To bylo v principu mo₧nΘ °eÜit p°idßvßnφm dalÜφch a dalÜφch pam∞¥ov²ch modul∙ (dokud se nenarazilo na p°φpadnß konstrukΦnφ omezenφ, danß voln²m mφstem pro jejich umφst∞nφ, kapacitou napßjenφ, mo₧nostmi chlazenφ atd.). No ale pak se ukßzalo, ₧e u₧ivatelΘ sice vehementn∞ uplat≥ujφ svΘ po₧adavky, ale na druhΘ stran∞ nejsou ochotni za v∞tÜφ pam∞¥ adekvßtn∞ zaplatit (zde si ovÜem musφme uv∞domit, ₧e to bylo v dob∞, kdy poΦφtaΦe i jejich pam∞ti byly nepom∞rn∞ dra₧Üφ, ne₧ jsou dnes). I p°esto se ale v²robci velmi sna₧ili vyjφt u₧ivatel∙m vst°φc.

Se zajφmav²m nßpadem p°iÜla kolem roku 1958 v∞dc∙ z univerzity v anglickΘm Manchesteru (p°i prßci na poΦφtaΦi Atlas). V²sledn² efekt jejich nßpadu by snad nejlΘpe vystihlo starΘ p°φslovφ o nasycenφ vlka a zachovßnφ celistvosti kozy: p°iÜli na zp∙sob, jak u₧ivatel∙m pouze p°edstφrat, ₧e majφ k dispozici v∞tÜφ objem operaΦnφ pam∞ti, zatφmco skuteΦn² objem tΘto pam∞ti v∞tÜφ nenφ.

Podstata °eÜenφ spoΦφvß v odd∞lenφ toho, co u₧ivatelΘ a jejich programy "vnφmajφ" (tj. toho, co si uv∞domujφ, resp. s Φφm si myslφ, ₧e pracujφ), od toho, s Φφm pracujφ doopravdy. Vedle skuteΦnΘ a reßln∞ existujφcφ pam∞ti se tedy zavedla jeÜt∞ dalÜφ pam∞¥, kterß je pouze iluzφ, p°edklßdanou u₧ivatel∙m a jejich program∙m (a kterß reßln∞ neexistuje, a je pouze p°edstφrßna - proto se jφ takΘ °φkß virtußlnφ). Pokud se vÜe Üikovn∞ za°φdφ, m∙₧e b²t virtußlnφ pam∞¥ v²razn∞ v∞tÜφ, ne₧ reßln∞ existujφcφ pam∞¥. U₧ivatel, jeho₧ programy "vnφmajφ" pouze tuto virtußlnφ pam∞¥, si pak m∙₧e myslet, ₧e pracuje s velmi velkou pam∞tφ, zatφmco ve skuteΦnosti pracuje s pam∞tφ mnohem menÜφ.

Ptßte se, jak je to mo₧nΘ? VÜe vychßzφ z pozorovßnφ, ₧e "sluÜnΘ programy se chovajφ sluÜn∞" - statistick²m sledovßnφm mnoha program∙ se zjistilo, ₧e tyto "nesahajφ" do operaΦnφ pam∞ti zcela "na p°eskßΦku" (v tom smyslu, ₧e by jejich p°φstupy do pam∞ti i v malΘm ΦasovΘm intervalu rovnom∞rn∞ pokr²valy cel² rozsah dostupnΘ pam∞ti). Naopak se zjistilo, ₧e rozumn∞ napsan² program v₧dy po jistou dobu vystaΦφ s pom∞rn∞ malou Φßstφ operaΦnφ pam∞ti (nebo s n∞kolika mßlo takov²mito Φßstmi, ze kter²ch Φte a do kter²ch zapisuje). No a cel² "fφgl" je pak v tom, ₧e do skuteΦn∞ existujφcφ pam∞ti se pr∙b∞₧n∞ p°esouvajφ prßv∞ jen tyto menÜφ Φßsti, se kter²mi program v danou chvφli pracuje, zatφmco zb²vajφcφ Φßsti mohou b²t ulo₧eny nap°φklad na disku. Rozsah virtußlnφ pam∞ti (se kterou si u₧ivatel myslφ, ₧e pracuje), je pak dßn kapacitnφmi mo₧nostmi disku, a nikoli skuteΦn²m objemem reßln∞ existujφcφ pam∞ti.

VÜe samoz°ejm∞ musφ b²t za°φzeno tak, aby veÜkerΘ p°esouvßnφ dat a program∙ mezi operaΦnφ pam∞tφ a diskem bylo pro u₧ivatelskΘ programy pln∞ transparentnφ (tj. neviditelnΘ) - co₧ ale nenφ principißlnφ problΘm zajistit.

Existuje dokonce vφce r∙zn²ch technik pro realizaci virtußlnφ pam∞ti: nejpou₧φvan∞jÜφ z nich je tzv. strßnkovßnφ (paging), kterΘ mezi operaΦnφ pam∞tφ a diskem p°esouvß celΘ tzv. strßnky (v₧dy stejn∞ velkΘ, nap°. 1 kB, 2 kB, 4 kB apod.). DalÜφ pou₧φvanou technikou pro realizaci virtußlnφ pam∞ti je tzv. segmentace (segmentation).


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