Erinevus lehtimise ja segmenteerimise vahel

Mäluhaldus on üks opsüsteemi põhifunktsioone. Kaasaegsed opsüsteemid võimaldavad igal protsessil saada rohkem virtuaalset mälu kui antud arvutisüsteemi tegeliku (füüsilise) mälu kogumaht. Mäluhalduse peamine eesmärk on see, et suure, kuid aeglase mälu ühendamisel väikese, kuid kiire mäluga saavutataks suurema kiire mälu efekt.

Mis on piipar?

Fikseeritud ja muutuva jaotuse eraldamine on mälu kasutamise osas ebaefektiivne, kuna fikseeritud jaotamise tulemuseks on sisemine, samas kui dünaamiline välimine killustatus. Killustatuse probleemi võimalik lahendus on lubada protsessi mitte kirjutada pidevasse mäluplokki. Programmi saab mälus meelevaldselt hajutada. Sel juhul jagatakse töömälu väiksemateks kindla suurusega plokkideks, mida nimetatakse kaadriteks. Programmi loogiline aadressiruum on jagatud ka sama suurusega plokkideks, mida nimetatakse lehtedeks. Programmi sisestamisel mällu kirjutatakse lehed vabadesse mäluraamidesse. Programmide kettalt töömällu üleviimise hõlbustamiseks jaotatakse ketas kaadritesse, mis on sama suured kui mäluraamid. Nii kirjutatakse üks kaader kettalt töömälu ühte kaadrisse. Piiparisüsteem töötab järgmisel viisil: kui programm võetakse täitmiseks vastu, arvutatakse selle suurus, mida väljendatakse vajaliku arvu lehekülgedega. Kui piisav arv kaadreid on vaba, salvestatakse protsess mälulehel ühe lehe kohta. Samal ajal sisestatakse raamtabelisse kaadrite arv, milles iga leht on kirjutatud.

Mis on segmenteerimine?

Kasutajaprogrammi ja sellega seotud andmed saab jagada mitmeks segmendiks. Kõigi programmide segmendid ei pea olema ühesuurused, kuigi segmentide maksimaalne pikkus on olemas. Nagu ka otsimisel, koosneb segmenteerimist kasutav loogiline aadress kahest osast, antud juhul segmentide arvust ja dislokatsioonidest selles segmendis. Erineva suurusega segmentide kasutamise tõttu sarnaneb segmenteerimine dünaamilise eraldamisega. Ülekatteskeemi või virtuaalmälu kasutamise puudumisel on vaja, et kõik programmi segmendid laaditaks mällu täitmiseks. Erinevus võrreldes dünaamilise jaotusega on see, et segmenteerimine võib võtta rohkem kui ühe partitsiooni ja see partitsioon ei pea olema külgnev. Segmenteerimine lahendab sisemise killustatuse probleemi, kuid lisaks dünaamilisele jaotusele püsib ka välise killustatuse probleem. Kuna protsess on jagatud mitmeks väiksemaks osaks, on väline killustatus tavaliselt väiksem. Erinevalt programmeerijale nähtamatutest otsingutest on segmenteerimine tavaliselt nähtav ja sobilik programmide ja andmete korraldamiseks. Moodulprogrammeerimise jaoks saab programmi või andmed jagada mitmeks väiksemaks segmendiks. Selle tehnika miinus on see, et programmeerija peab teadma maksimaalse segmendi suuruse piiranguid. Järgmine mugavus erineva suurusega segmentide kasutamisel on see, et loogiliste ja füüsiliste aadresside vahel puudub eeldatav seos. Sarnaselt otsimisega kasutab lihtne segmentimistehnika iga protsessi jaoks segmentide tabelit ja põhimälus saadaolevate plokkide loendit.

Erinevus lehtimise ja segmenteerimise vahel

1. Leheotsimise ja segmenteerimise kontseptsioon

Piipar annab virtuaalse ja füüsilise aadressiruumi ning sekundaarse mäluruumi võrdse pikkusega plokkidel (lehtedel). See võimaldab eraldada pideva virtuaalse aadressiruumi hajutamisprotsessi jaoks (mitte tingimata pidevalt jaotamata) tegelikus aadressiruumis ja sekundaarmälus. Isegi leht terminina viitab pigem mälule kui loogilistele objektidele, mis on programmi tasemel nähtavad. Segmenteerimine annab virtuaalse aadressiruumi plokkidel (segmentidel), mis vastavad otseselt programmi tasemel olevatele objektidele. Seetõttu pole segmendil fikseeritud pikkust, nii et programmi täitmise ajal saab isegi segmendi suurust muuta. Kaitsmine ja jagamine on seetõttu võimalik objekti tasandil ning segmenteerimisel toimub nähtavaid protsesse.

2. Leheotsimise ja segmenteerimise omadused

Rakenduse arendaja ei ole otsimisest teadlik. Ta kirjutab programme nii, nagu mälu oleks lineaarne, ning opsüsteem ja protsessor tunnevad muret selle eraldamise ja virtuaalaadressideks konverteerimise pärast. Segmenteerimissüsteemide programmeerija loetleb oma programmides aga aadressi, segmendi ja lehe kaks osa. Kõik lehed on ühesuurused, samas kui segmendid on erinevad. Segmenteerimisel on mitu lineaarset aadressiruumi ja ainult üks otsimine. Segmendid võimaldavad rakenduse komponentide loogilist eraldamist ja kaitset ning lehed seda ei võimalda.

3. Leheotsimise ja segmenteerimise eelised

Programmeerija jaoks läbipaistev otsimine välistab välise killustatuse ja tagab seega põhimälu tõhusa kasutamise. Põhimälus sisse ja välja liikuvad tükid on fikseeritud ja ühesuurused, seega on võimalik välja töötada keerukaid mäluhalduse algoritme, mis kasutavad ära programmi käitumist. Segmenteerimine on arendajale nähtav ning sellel on võime hallata andmestruktuuri kasvu, modulaarsust ning vahetamise ja kaitse tuge.

Leheotsimine vs segmenteerimine: võrdlusdiagramm

Paging

Segmenteerimine

fikseeritud lehtede suurus segmentide suurus ei ole fikseeritud
programmeerija jaoks nähtamatu programmeerija jaoks nähtav
üks lineaarne aadressiruum mitu lineaarset aadressiruumi
ei luba loogilist eraldamist ja rakenduse komponentide kaitset lubab

Leheotsimise ja segmenteerimise kokkuvõte

  • Leheotsing põhineb kogu aadressiruumi jaotamisel kindla pikkusega plokkidel, mida käitatakse mälukvantidena. Lisaks on vaja pakkuda vahendeid olemasoleva mälu märgistamiseks, mida saab täita iga lehe pealkirjaga, mis näitab lehe olekut (globaalne lingitud nimekiri, kus iga sõlm osutab järgmisele vabale lehele), või vaba lehe aadressi paigutamine globaalsesse massiivi, mis on tavaliselt halvim lahendus.
  • Segmenteerimine tähendab aadressiruumi jagamist segmentideks, millel on selgelt märgitud MMU protsessori juurdepääsuõigused. Segmendi sees eraldavad protsessid täpselt nii palju mälu, kui vaja, kuid mäluhalduse probleem seisneb selles, kuidas sellist eraldamist pakkuda, kui see suudab säilitada piisavalt suure pideva plokkmälu, mis võib vajada mõnda aega.