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

Ji°φ Peterka

von Neumannova architektura

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

Na myÜlenku, ₧e poΦφtaΦe by mohly b²t °φzeny programem, p°iÜel vφce ne₧ sto let p°ed Johnem von Neumannem angliΦan Charles Babbage. KonkrΘtnφ zp∙sob realizace tΘto myÜlenky se ovÜem vyvφjel postupn∞: prvnφ p°edstava byla takovß, ₧e poΦφtaΦ mß sv∙j program zaznamenßn na n∞jakΘm vn∞jÜφm zßznamovΘm mΘdiu (d∞rnΘ pßsce Φi d∞rn²ch Ütφtcφch), postupn∞ jej naΦφtß a ihned provßdφ. To ale sebou p°inßÜφ n∞kterΘ nep°φjemnΘ komplikace - nap°φklad provedenφ skoku znamenß p°emotßnφ d∞rnΘ pßsky na po₧adovanΘ mφsto (analogicky pro Ütφtky), co₧ trvß nezanedbatelnou dobu. ZdlouhavΘ a problematickΘ je pak i volßnφ podprogram∙, eventuelnφ rekurze p°i takovΘmto volßnφ apod. Hlavnφ vinu na tom mß p°edevÜφm sekvenΦnφ charakter pam∞ti, pou₧φvanΘ pro uchovßvßnφ programu, a s tφm souvisejφ postupnΘ naΦφtßnφ tΘ Φßsti programu, kterß je zapot°ebφ. Proto John von Neumann navrhl uchovßvat program takov²m zp∙sobem, aby byl cel² trvale k dispozici (tj. aby se nemusel postupn∞ naΦφtat), a aby bylo mo₧nΘ v n∞m libovoln∞ (a hlavn∞ "okam₧it∞") skßkat - navrhl tedy uchovßvßnφ celΘho programu v pam∞ti poΦφtaΦe, a navφc v takovΘ pam∞ti, kterß nemß sekvenΦnφ charakter, ale chovß se jako pam∞¥ s tzv. p°φm²m p°φstupem.

Velmi zajφmav²m momentem bylo takΘ zpochybn∞nφ dosud zastßvanΘ p°edstavy o tom, ₧e program a data jsou principißln∞ odliÜnΘ objekty, kterΘ v zßsad∞ nenφ mo₧nΘ jakkoli mφchat (a tudφ₧ ani uchovßvat spoleΦn∞). Snad nejv²znamn∞jÜφ myÜlenkou celΘ von Neumannovy architektury je prßv∞ zßsada, ₧e program i data jsou ve svΘ podstat∞ jedno a totΘ₧ (a to posloupnost bit∙), a o jejich povaze rozhoduje pouze zp∙sob, jak²m je interpretuje ten, kdo s nimi pracuje. Tato zßsada pak von Neumannovi umo₧nila navrhnout, aby poΦφtaΦ m∞l jedinou pam∞¥ (tzv. operaΦnφ pam∞¥), ve kterΘ by se spoleΦn∞ uchovßvaly jak data, tak i celΘ programy.

Rozeberme si pon∞kud podrobn∞ji tento klφΦov² prvek v celΘ soustav∞ nßzor∙, kterΘ tvo°φ von Neumannovu architekturu: pokud se p°ijme zßsada, ₧e programy a data jsou principißln∞ odliÜnΘ objekty, je nutnΘ je uchovßvat odd∞len∞ v r∙zn²ch pam∞tech. To mß jist∞ svΘ v²hody (nap°φklad tu, ₧e programßto°i nebudou z principu moci psßt samomodifikujφcφ se programy), ale takΘ ΦetnΘ nev²hody. Uv∞domme si nap°φklad, jak pracujφ dneÜnφ p°ekladaΦe a tzv. linkery (sestavujφcφ programy): p°elo₧en² program generujφ jako svß v²stupnφ data (tedy jako objekt charakteru dat), ale tato samß data mohou b²t zßhy spuÜt∞na jako program (tj. mohou b²t interpretovßna jako program). Pokud bychom trvali na tom, ₧e data a program jsou n∞co v principu jinΘho, musel by p°ekladaΦ a sestavujφcφ program vygenerovat p°elo₧en² program do pam∞ti pro data, a odsud by pak musel b²t tento program explicitn∞ p°enesen do pam∞ti pro programy, odkud by teprve mohl b²t spuÜt∞n. Dovedete si p°edstavit, jak by na takovΘmto poΦφtaΦi fungovaly vÜechny ty dneÜnφ integrovanΘ p°ekladaΦe typu compile&go (tj. "p°elo₧ a ihned spus¥")! A co teprve nejr∙zn∞jÜφ ladφcφ programy (debuggery), kterΘ se chvφli dφvajφ na jednu a tutΘ₧ posloupnost bit∙ jako na program, a chvφli se k nim zase chovajφ jako k dat∙m?

DalÜφ zßsadnφ myÜlenkou celΘ von Neumannovy koncepce je Φist∞ sekvenΦnφ zp∙sob fungovßnφ poΦφtaΦe. Tato p°edstava poΦφtß s tφm, ₧e jednotlivΘ strojovΘ instrukce, tvo°φcφ program, se budou provßd∞t postupn∞ tak, jak jsou umφst∞ny za sebou (a₧ na p°φpadnΘ skoky, volßnφ a nßvraty z podprogram∙). Ve svΘ podstat∞ tento p°φstup znamenß, ₧e ·kol, kter² mß b²t spln∞n, je rozd∞len na posloupnost krok∙, a tyto se provßdφ postupn∞ - nikoli soub∞₧n∞. Pro Φlov∞ka, kter² takov²to program pφÜe, je jeho dekompozice do posloupnosti sekvenΦn∞ provßd∞n²ch krok∙ mnohem p°irozen∞jÜφ a jednoduÜÜφ, ne₧ rozklad do takov²ch Φinnostφ, kterΘ se mohou provßd∞t soub∞₧n∞, mohou se prolφnat v Φase, a je nutnΘ dbßt na jejich sprßvnou nßvaznost.

╚ist∞ sekvenΦnφ charakter je dnes tφm, co je von Neumannov∞ architektu°e snad nejvφce vyΦφtßno. D∙vodem je skuteΦnost, ₧e sekvenΦnφ charakter v²poΦt∙ nedßvß tΘm∞° ₧ßdn² prostor pro jejich zßsadnφ zrychlenφ, kterΘ by naopak bylo mo₧nΘ, kdyby n∞kterΘ Φinnosti bylo mo₧nΘ provßd∞t soub∞₧n∞ (paraleln∞). Objevily se samoz°ejm∞ i r∙znΘ alternativnφ architektury (tzv. ne-von NeumannovskΘ), kterΘ s mo₧nostφ paralelism∙ p°edem poΦφtajφ. OvÜem skuteΦnost, ₧e se prosadily jen v dosti specißlnφch aplikacφch, naznaΦuje zajφmavou souvislost: ₧e nenφ ani tak t∞₧kΘ zkonstruovat paralelnφ poΦφtaΦ, jako jeho paralelismus vyu₧φt. ProblΘm je tedy spφÜe v samotnΘm Φlov∞ku, kter² musφ stßle jeÜt∞ zajiÜ¥ovat algoritmizaci °eÜen²ch ·kol∙, neboli jejich vhodnΘ naprogramovßnφ. LidskΘmu myÜlenφ je skuteΦn∞ blφ₧e sekvenΦnφ postup, ne₧ velkß mφra paralelismu.

Velmi d∙le₧itou myÜlenkou, kterß se prosadila v rßmci von Neumannovy architektura, je nßsledujφcφ zßsada: poΦφtaΦ by se nem∞l p°izp∙sobovat pot°ebßm konkrΘtnφ aplikace svou vnit°nφ strukturou, ale pouze programem. Jin²mi slovy: vnit°nφ struktura poΦφtaΦe by se nem∞la m∞nit, a m∞la by b²t maximßln∞ univerzßlnφ, tak aby vychßzela vst°φc pot°ebßm co mo₧nß nejÜirÜφho okruhu aplikacφ. "èitΘ na mφru" by naopak m∞ly b²t programy.

Tato zßsada mß jednu obrovskou v²hodu: veÜkerou slo₧itost, spojenou s °eÜenφm urΦitΘho zadßnφ, p°evßdφ pouze na slo₧itost nßvrhu programu (a nikoli na slo₧itost nßvrhu vnit°nφ struktury poΦφtaΦe) - °eÜφ ji tedy jen v softwaru, a nikoli v hardwaru. I v oblasti nßvrhu hardwaru samoz°ejm∞ existujφ r∙znΘ metody a nßstroje, umo₧≥ujφcφ vyrovnat se s velkou slo₧itostφ °eÜenΘho ·kolu, ale na poli softwaru jsou analogickΘ metody a nßstroje mnohem v²konn∞jÜφ, lacin∞jÜφ i rychlejÜφ, a v d∙sledku toho umo₧≥ujφ zvlßdnout i slo₧it∞jÜφ a nßroΦn∞jÜφ ·koly.

Jinou otßzkou je ovÜem efektivnost tohoto °eÜenφ. PoΦφtaΦ von Neumannovy koncepce je zcela zßm∞rn∞ navr₧en tak, aby na n∞m Ülo naprogramovat prakticky cokoli. Na druhΘ stran∞ hardware, kter² je "Üit na mφru" pot°ebßm n∞jakΘho ·zce vymezenΘho okruhu aplikacφ, bude zcela zßkonit∞ efektivn∞jÜφ. P°φkladem m∙₧e b²t skuteΦnost, ₧e ·sp∞ÜnΘ ÜachovΘ poΦφtaΦe nejsou univerzßlnφmi poΦφtaΦi, ale poΦφtaΦi ·zce specializovan²mi.


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φ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