VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:12/93
RoΦnφk:1993
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

Segmentation, paging

"Nenφ na sv∞t∞ poΦφtaΦ, kter² by dokßzal vyhov∞t u₧ivatel∙m vÜem" - tak by asi mohla znφt parafrßze jednoho znßmΘho p°φslovφ. Kdy₧ u₧ivatelΘ zaΦali po₧adovat pro svΘ ·lohy vφce pam∞ti, ne₧ kolik byli ochotni si zaplatit, vymysleli konstruktΘ°i poΦφtaΦ∙ hned n∞kolik zp∙sob∙, jak jim vyjφt vst°φc. VÜechny zp∙soby byly zalo₧eny na stejnΘ myÜlence, kterou jsme se zab²vali v minulΘm vydßnφ tΘto rubriky - na pouhΘm p°edstφrßnφ toho, ₧e u₧ivatel a jeho ·loha pracujφ s velkou pam∞tφ, zatφmco ve skuteΦnosti pracujφ s pam∞tφ mnohem menÜφ. V²sledn²m efektem je pak takov² stav, kdy u₧ivatelskΘ ·lohy "vidφ" n∞co jinΘho (logick² adresov² prostor, dan² rozsahem generovan²ch adres) ne₧ to, co skuteΦn∞ existuje (fyzick² pam∞¥ov² prostor, dan² skuteΦn²m rozsahem osazenΘ pam∞ti), a vlastn∞ tedy pracujφ s pam∞tφ, kterß je ve skuteΦnosti pouze p°edstφrßna (je tzv. virtußlnφ).

Zp∙sob implementace virtußlnφ pam∞ti je v₧dy zalo₧en na obecnΘm postupu, kter² jsme si ji₧ takΘ naznaΦili minule - na tom, ₧e do skuteΦnΘ, reßln∞ existujφcφ pam∞ti (tvo°φcφ pam∞¥ov² prostor) budou p°esouvßny v₧dy jen ty Φßsti ·lohy (z jejφho adresovΘho prostoru), kterΘ jsou v danΘ dob∞ skuteΦn∞ zapot°ebφ, zatφmco ostatnφ Φßsti ·lohy budou mezitφm umφst∞ny na disku (kde je v porovnßnφ s kapacitou pam∞ti mφsta dost a dost). JakΘ jsou ale konkrΘtnφ mo₧nosti, jak tuto strategii implementovat.

Jednou z mo₧nostφ je koncipovat cel² mechanismus tak, aby byl pro vlastnφ ·lohy pln∞ transparentnφ. Tedy aby o n∞m ·lohy nemusely v∙bec v∞d∞t a hlavn∞ aby se mu nemusely nijak p°izp∙sobovat. To je mo₧nΘ za°φdit tak, ₧e se adresov² prostor rozd∞lφ na stejn∞ velkΘ Φßsti (kter²m se °φkß strßnky, anglicky: pages) a ty jsou pak v p°φpad∞ pot°eby p°esouvßny z disku do stejn∞ velk²ch mφst v pam∞ti, kter²m se °φkß strßnkovΘ rßmy (page frames). Cel² mechanismus je p°itom oznaΦovßn jako strßnkovßnφ (anglicky: paging). Nßmi popisovanß varianta odpovφdß tzv. strßnkovßnφ na ₧ßdost (demand paging) strßnka je p°esouvßna do pam∞ti a₧ na zßklad∞ jejφ skuteΦnΘ pot°eby. P°φvlastek "na ₧ßdost" vÜak nenφ p°φliÜ v²sti₧n², proto₧e samotnß ·loha o celΘm mechanismu strßnkovßnφ v∙bec nevφ, a tak ani dost dob°e nem∙₧e o p°enesenφ n∞kterΘ strßnky ₧ßdat. Ve skuteΦnosti je podn∞tem k p°enesenφ urΦitΘ strßnky do pam∞ti situace, kdy prßv∞ b∞₧φcφ ·loha vygeneruje urΦitou adresu a ta spadß do strßnky, kterß se momentßln∞ nenachßzφ v pam∞ti. Tuto skuteΦnost vÜak rozpoznß a₧ procesor (nikoli ·loha sama), interpretuje ji jako tzv. v²padek strßnky (page fault) a reaguje na ni p°eruÜenφm. V rßmci obslu₧nΘho programu p°eruÜenφ pak dochßzφ k naΦtenφ celΘ strßnky z disku a k jejφmu ulo₧enφ do vhodnΘho strßnkovΘho rßmu (bu∩ dosud prßzdnΘho, nebo takovΘho, jeho₧ dosavadnφ obsah je zapsßn zp∞t na disk). PodstatnΘ ovÜem je to, ₧e cel² v²padek strßnky a jeho oÜet°enφ je pro vlastnφ ·lohu, kterß jej zp∙sobila, neviditeln². Viditeln² ale musφ b²t pro operaΦnφ systΘm, nebo¥ ten vede p°esnou evidenci umφst∞nφ jednotliv²ch strßnek v pam∞ti i na disku. TakΘ obslu₧n² program, kter² v rßmci p°eruÜenφ zajiÜ¥uje pot°ebnΘ p°esuny strßnek, je vlastn∞ souΦßstφ operaΦnφho systΘmu.

Strßnkovßnφ jako jeden z mo₧n²ch zp∙sob∙ implementace virtußlnφ pam∞ti mß svΘ v²hody a svΘ nev²hody. Mezi hlavnφ v²hody pat°φ to, ₧e dφky pevnΘ velikosti strßnek (nejΦast∞ji 1, 2 Φi 4 KB) je lze velmi snadno a efektivn∞ umφstit do stejn∞ velk²ch strßnkov²ch rßm∙. Nev²hodou je pak to, ₧e d∞lenφ adresovΘho prostoru ·lohy na strßnky probφhß bez jejφho v∞domφ - samotnß ·loha nap°φklad nemß mo₧nost °φci, ₧e n∞co logicky "pat°φ k sob∞", a m∞lo by se to tudφ₧ p°esouvat do pam∞ti spoleΦn∞. D∞lenφ adresovΘho prostoru na jednotlivΘ strßnky je tedy d∞lenφm "na tvrdo", kterΘ nijak nerespektuje logickou strukturu ·lohy, a v d∙sledku toho pak dochßzφ k Φast∞jÜφm v²padk∙m strßnek, ne₧ by bylo nutnΘ.

Prßv∞ tuto nev²hodu se sna₧φ odstranit alternativnφ mechanimus implementace virtußlnφ pam∞ti, oznaΦovan² jako segmentace (segmentation). Ten je zalo₧en na myÜlence, ₧e o vlastnφm Φlen∞nφ na logicky souvisejφcφ Φßsti si nejlΘpe rozhoduje ·loha sama. Ta si tedy nynφ sama urΦuje, co tvo°φ logick² celek - tzv. segment, kter² se p°enßÜφ do pam∞ti v₧dy cel². Na rozdφl od strßnkovßnφ je pak cel² mechanismus segmentace pro vlastnφ ·lohu pln∞ viditeln². Zatφmco p°i strßnkovßnφ m∙₧e ·loha vychßzet z p°edstavy, ₧e mß k dispozici souvisl² lineßrnφ adresov² prostor, p°i segmentaci ji₧ musφ poΦφtat s nesouvisl²m adresov²m prostorem, Φlen∞n²m na jednotlivΘ disjunktnφ segmenty.

Z°ejmou v²hodou segmentace oproti strßnkovßnφ je minimalizace poΦtu v²padk∙ (nynφ ji₧ segment∙). Nev²hodou je ztrßta pru₧nosti a efektivnosti p°i umis¥ovßnφ jednotliv²ch segment∙ do pam∞ti - na rozdφl od strßnek toti₧ segmenty nemajφ pevnou velikost, a tak se nemusφ v₧dy vejφt do volnΘho mφsta, kterΘ je prßv∞ k dispozici, nebo se naopak vejdou, ale zanechajφ po sob∞ jen obtφ₧n∞ vyu₧itelnΘ "kousky" volnΘ pam∞ti (zp∙sobujφ tzv. fragmentaci).

Tuto nev²hodu segmentace lze odstranit vhodn²m zkombinovßnφm obou mechanism∙: segmentacφ se strßnkovßnφm. JednotlivΘ segmenty (p°edstavujφcφ logickΘ celky) jsou pak pro pot°eby umis¥ovßnφ do pam∞ti Φlen∞ny na stejn∞ velkΘ strßnky a tyto strßnky jsou skuteΦn∞ p°esouvßny z pam∞ti a do nφ. Segment pak ovÜem nemusφ b²t umφst∞n v pam∞ti cel², ale mohou tam b²t nap°φklad jen n∞kterΘ jeho strßnky. Otßzkou ovÜem je, zda je toto °eÜenφ smysluplnΘ, kdy₧ se p°i n∞m ztrßcφ hlavnφ v²hoda segmentace - p°esouvßnφ cel²ch logick²ch Φßstφ (segment∙) z pam∞ti a do nφ, a v d∙sledku toho pak minimalizace v²padk∙. Odpov∞∩ je samoz°ejm∞ kladnß a vychßzφ ze skuteΦnosti, ₧e se mezitφm zm∞nil ·Φel, pro kter² se virtußlnφ pam∞¥ pou₧φvß. Ale o tom a₧ p°φÜt∞.


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