Mine sisu juurde

Mäluaadress

Allikas: Vikipeedia

Mäluaadress ehk aadress (memory address, address) on arv, mis omistatakse igale mälupesale arvuti mälus (tänapäeval tavaliselt igale baidile). Mälupesa on vähim ühik, mida on võimalik adresseerida. Niisugust mälu adresseerimise korraldust, kus iga mäluaadress viitab ühele baidile, nimetatakse baitadresseeritavaks mäluks (byte-addressable memory). Mäluaadressid on harilikult järjestikused arvud, mis algavad nullist.[1] Tavaliselt esitatakse mäluaadresse kuueteistkümnendsüsteemis ehk heksakoodis.

64-bitise operatsioonisüsteemiga arvuti mäluaadresside vahemikud, mis reserveeritud erinevatele seadmetele. Mäluaadressid on esitatud kuueteistkümnedsüsteemis

Mäluaadressi pikkus bittides määrab ära, mitu mäluaadressi saab maksimaalselt arvutis olla. Kui mäluaadressi pikkus on n bitti, siis arvutis on 2n erinevat mäluaadressi. Sel juhul on mäluaadressid järjestikused arvud 0 kuni 2n-1. Näiteks 32-bit operatsioonisüsteemiga arvuti puhul on mäluaadressi pikkus 32 bitti ning arvutis on 232 mäluaadressi. Kuna iga mäluaadress viitab ühele baidile, saab seega 32-bit operatsioonisüsteemiga arvutis olla maksimaalselt 232 baiti (ehk umbes 4,3 GB) mälu.[1] 64-bit operatsioonisüsteemiga arvutis saaks mäluaadressi maksimaalne pikkus olla 64 bitti ning seega adresseeritav ruum 264 baiti, mis on umbes 1,85*1019 baiti ehk 1,85*1010 GB. Tänapäeval ei lähe veel nii suuri mälukoguseid vaja ning 64-bit operatsioonisüsteemiga arvutites jäävad mäluaadresside pikkused harilikult vahemikku 40 kuni 56 bitti, täpne mäluaadressi pikkus sõltub konkreetse protsessori arhitektuurist.[2]

Info paiknemine mälus

[muuda | muuda lähteteksti]

Mälu on sõnade kogum. Sõna on teatud arv bitte, mida protsessor suudab mälust lugeda ühe lugemiskäsu abil või mällu kirjutada ühe kirjutamiskäsu abil. Infot loetakse mälust ja kirjutatakse mällu sõna kaupa. Sõna pikkuse ehk sõna bittide arvu määrab arvuti operatsioonisüsteemi bittide arv. Tänapäeval on enamik tavaarvuteid 64-bit operatsioonisüsteemiga ning sõna pikkuseks on 64 bitti ehk 8 baiti.[1]

Tavaliselt on sõnade aadressid mälus joondatud. Joondatud aadressid tähendavad, et sõnad algavad mäluaadressilt, mis on sõna baitide arvu kordne. Näiteks 64-bit operatsioonisüsteemi korral, milles sõna pikkus on 8 baiti, algab esimene sõna mäluaadressilt 0, teine sõna algab mäluaadressilt 8, kolmas sõna algab mäluaadressilt 16 ja nii edasi. Sõnad võiksid alata ka suvalistelt mäluaadressidelt, mis pole sõna baitide arvu kordsed, aga niisugune süsteem ei ole levinud. Sellisel juhul on sõnadel joondamata aadressid.[1]

Little-endian ja big-endian järjestused

[muuda | muuda lähteteksti]
Big-endian järjestuse korral paiknevad tähtsamad baidid sõnas väiksematel aadressidel, kuid little-endian järjestuse korral paiknevad tähtsamad baidid sõnas suurematel aadressidel.

Sõnades paiknevaid baite saab järjestada kahel viisil: little-endian järjestus ja big-endian järjestus. Little-endian järjestuse korral on sõna vähemtähtsamatel baitidel väiksemad mäluaadressid, seega sõna suurima kaaluga bait (MSByte) on viimane bait. Big-endian järjestuse puhul on sõna tähtsamatel baitidel väiksemad mäluaadressid, seega sõna suurima kaaluga bait on esimene bait.[1]

Näiteks kaheksatäheline sõna „ABCDEFGH“ mahub täpselt ühe 64-bit operatsioonisüsteemiga arvuti kaheksabaidise sõna sisse. Sõnas „ABCDEFGH“ on kõige tähtsam bait „A“ ja kõige vähem tähtsam bait „H“. Big-endian järjestuse korral salvestatakse sõnas esimesele mäluaadressile „A“, aga little-endian järjestuse korral salvestatakse sõnas esimesele mäluaadressile „H“. Big-endian järjestuse korral jääks sõna kujule „ABCDEFGH“, aga little-endian järjestuse korral on sõna kuju „HGFEDCBA“ (vasakpoolsed tähed on väiksematel mäluaadressidel, parempoolsed tähed on suurematel mäluaadressidel).

Täisarvu hoidmiseks mälus on mõeldud neli baiti ehk 32 bitti ning kui esitada täisarv kuueteistkümnendsüsteemis, siis täisarvus oleks kaheksa kohta. Ühte baiti mahub kaks kuueteistkümnendsüsteemi kohta. Ühte kaheksabaidisesse sõnasse mahub kaks täisarvu. Täisarvudes on tähtsamad baidid need, mis hoiavad suurema kuueteistkümne astme kordajat. Olgu näiteks kaks täisarvu kuueteistkümnendsüsteemis 0x12345678 ja 0x9ABCDEF0. Big-endian järjestuses oleks ühes sõnas baitide järjekord „12-34-56-78-9A-BC-DE-F0“ ja little-endian järjestuse korral „F0-DE-BC-9A-78-56-34-12“ (sidekriips märgib ühe baidi asukohta ning vasakpoolsed sümbolid on väiksematel mäluaadressidel ja parempoolsed suurematel mäluaadressidel).

Little-endian järjestust kasutab suurem osa tänapäevaseid arvuteid ja big-endian järjestust kasutavad näiteks võrguprotokollid.[3]

Aadressiruumid

[muuda | muuda lähteteksti]

Eristatakse kahte tüüpi mäluaadresse: füüsilised mäluaadressid ja virtuaalsed mäluaadressid ehk loogilised mäluaadressid. Füüsiline mäluaadress kirjeldab kindlat mälupesa arvuti põhimälus. Virtuaalse mäluaadressi genereerib protsessor programmi täites.[4]   Füüsilised mäluaadressid on arvuti füüsilises aadressiruumis. Arvutis on ka virtuaalne aadressiruum, mis koosneb virtuaalsetest mäluaadressidest. Tavaliselt on arvutis mitu erinevat virtuaalset aadressiruumi.

Füüsiline aadressiruum

[muuda | muuda lähteteksti]

Arvutis on füüsiline aadressiruum, mis koosneb füüsilistest mäluaadressidest. Füüsiline mäluaadress on arvuti põhimälu kindlale mälupesale vastav arv. Füüsilised mäluaadressid füüsilises aadressiruumis algavad nullist ning füüsiliste mäluaadresside suurim aadress sõltub sellest, mitmebitiseid mäluaadresse protsessor toetab. Füüsilisi mäluaadresse kasutatakse arvutis madalal tasemel. Füüsiliste mäluaadressidega puutuvad kokku operatsioonisüsteem, baasvahetussüsteem (BIOS), mäluhaldusüksus, otsemälupöördusega (direct memory access (DMA)) seadmed ja DMA kontrollerid ning sisend-väljundseadmed.[5]

Tänapäeval on kõige levinum arvuti põhimälu tüüp dünaamiline suvapöördusmälu (dynamic random access memory (DRAM)). Dünaamilise suvapöördusmälu üks mälurakk sisaldab ühte transistorit ja ühte kondensaatorit.[6] Ühes mälurakus saab salvestada ühe biti infot. Info on salvestatud kondensaatori laenguna: laetud kondensaator tähendab loogilist ühte ning tühi kondensaator loogilist nulli.[1] Kuna kondensaator tühjeneb aja jooksul, unustab dünaamiline suvapöördusmälu aja jooksul andmed ära ning dünaamilist suvapöördusmälu peab perioodiliselt üle kirjutama, et andmed säiliksid.[6] Kaheksa mälurakku moodustavad ühe mälupesa, mälupesas saab salvestada ühe baidi infot. Kiibil paiknevad mälurakud ridades ja veergudes. Näiteks 32 MiB (32*220 baiti) dünaamiline suvapöördusmälu võib olla organiseeritud 16 Kib x 16 Kib (16*210 bitti = 16 384 bitti) mälurakkude maatriksina. Igas reas moodustavad kaheksa mälurakku ühe mälupesa, seega ühes reas on 2048 mälupesa. Mälukiibil on seega 16 384 rida (214) ja 2048 veergu (211) mälupesi. Antud näites oleks vaja füüsilises mäluaadressis 14 bitti rea kirjeldamiseks ja 11 bitti veeru kirjeldamiseks ning kogu mäluaadressi pikkus oleks 25 bitti.[1]

Füüsilise mäluaadressi ja konkreetse mälupesa seab omavahel vastavusse mälukontroller. Mälukontroller on spetsiaalne riistavaraüksus, mis edastab mälukiibile vajalikud aadressid ja lugemise/kirjutamise signaali ning genereerib mälukiibile vajalikud juhtsignaalid. Füüsiline mäluaadress koosneb rea aadressist ja veeru aadressist. Füüsiline mäluaadress eraldatakse rea ja veeru aadressideks multipleksimise abil mälukontrolleris. Mälukontroller edastab mälukiibile esimesena rea aadressi ja genereerib mälukiibi jaoks rea aadressi saatmise juhtsignaali ning mälukiip aktiveerib vastava rea. Järgmisena saadab mälukontroller veeru aadressi ja genereerib veeru aadressi saatmise juhtsignaali ning mälukiip valib vastavast veerust aktiveeritud reas asuva mälupesa. Valitud mälupesas on vastava füüsilise aadressi viidatud andmed (üks bait). Lisaks vastutab mälukontroller ka andmete perioodilise värskendamise eest arvuti põhimälus.[1]

Virtuaalne aadressiruum

[muuda | muuda lähteteksti]
Rakendusprogrammile eraldatud virtuaalne aadressiruum võib paikneda osaliselt arvuti põhimälus ning osaliselt arvuti salvestusseadmel, kusjuures põhimälus paiknev osa ei pea paiknema järjestikustel mäluaadressidel

Virtuaalset aadressiruumi nimetatakse ka loogiliseks aadressiruumiks. Arvuti operatsioonisüsteem määrab programmile kasutamiseks virtuaalsete mäluaadresside vahemiku, mida nimetatakse virtuaalseks aadressiruumiks. Oma virtuaalses aadressiruumis saab programm salvestada enda jaoks käske ning andmeid. Virtuaalsed mäluaadressid algavad nullist ning lõppevad suurima mäluaadressiga olenevalt sellest, kui palju mälu operatsioonisüsteem programmile kasutamiseks andis.[7] Virtuaalsed mäluaadressid on vajalikud, sest operatsioonisüsteem kaitseb erinevate virtuaalsete aadressiruumide abil programme, nii et erinevad programmid üksteise infot põhimälus üle ei kirjutaks.[4] Lisaks saab virtuaalsete aadressiruumide abil arvuti põhimälu näiliselt suuremaks muuta.[1]

Virtuaalse mäluaadressi tõlkimine füüsiliseks mäluaadressiks

[muuda | muuda lähteteksti]
Virtuaalse mäluaadressi tõlkimine füüsiliseks mäluaadressiks leheküljetabeli abil

Protsessor genereerib programmi täites virtuaalseid mäluaadresse, mis tõlgitakse füüsilisteks mäluaadressideks[4] nii riistvaraliste kui ka tarkvaraliste protsesside abil[1]. Virtuaalse mäluaadressi tõlgib füüsiliseks mäluaadressiks mäluhaldusüksus (memory management unit (MMU)), mis on spetsiaalne riistvaraüksus. Mäluhaldusüksus kasutab mäluaadresside tõlkimiseks leheküljetabelit (page table).[4]

Virtuaalne aadressiruum jagatakse fikseeritud suurusega osadeks, mida nimetatakse lehekülgedeks (page), ning füüsiline aadressiruum jagatakse sama suurteks fikseeritud osadeks, mida nimetatakse leheküljeraamideks (frame, page frame).[8] Lehekülgede pikkus on enamasti 2048 kuni 16384 baiti[1], aga tänapäeval toetavad erinevad protsessori arhitektuurid ka palju pikemaid lehekülgi, näiteks 2 MiB (2*220 baiti) või 1 GiB (230 baiti)[9]. Virtuaalsele leheküljele vastav füüsiline mäluaadress ehk leheküljeraam on kirjas leheküljetabelis.[8] Lisaks on leheküljetabelis kontrollbitid, mis näitavad lehekülje staatust. Lehekülje staatuses on kirjas, kas vastav lehekülg on salvestatud arvuti põhimällu või salvestusseadmele ning kas vastavat lehekülge on arvuti põhimälus olles muudetud ja kas on vajalik see lehekülg salvestusseadmel üle kirjutada. Lisaks näitavad kontrollbitid, missugused õigused on antud leheküljele ligipääsemiseks, näiteks kas mingisugune rakendusprogramm saab antud leheküljelt infot ainult lugeda või on sellel rakendusprogrammil ka info muutmisõigus.[1]

Virtuaalne aadress koosneb virtuaalsest leheküljenumbrist ja nihkest. Nihe määrab, missugust baiti või sõna antud leheküljel adresseeritakse. Leheküljetabeli algusaadressile liidetakse virtuaalne leheküljenumber ning selle tulemusena saadakse mäluaadress,[1] mida nimetatakse leheküljetabeli kirjeks[8]. Sellel mäluaadressil hoitakse vastava leheküljeraami algusaadressi. Leheküljeraami algusaadressile liidetakse nihe ning saadakse füüsiline mäluaadress.[1]

Leheküljetabelit hoitakse arvuti põhimälus. Leheküljetabel on tavaliselt üsna suur ning kogu tabel vajaks nii palju mälu, et see ei mahuks mäluhaldusüksuse juurde protsessori sisse füüsiliselt ära. Selletõttu on mäluhaldusüksuses kiire ja väike vahemälu, mida nimetatakse leheküljetabeli kirjete puhvriks (translation lookaside buffer (TLB)). Selles vahemälus hoitakse väikest hulka hiljuti kasutatud virtuaalseid leheküljenumbreid ja neile vastavaid leheküljeraame. Kui on vaja virtuaalset mäluaadressi füüsiliseks aadressiks tõlkida, siis esimesena otsitakse vastavat virtuaalset leheküljenumbrit leheküljetabeli kirjete puhvrist. Kui vastavat lehekülge puhvris ei olnud, siis leitakse vastav leheküljeraami aadress põhimälus asuvast leheküljetabelist ning vastav virtuaalne leheküljenumber ja leheküljeraami aadress kirjutatakse leheküljetabeli kirjete puhvrisse.[1]

Mäluvastendusega sisend-väljundseadmed

[muuda | muuda lähteteksti]

Protsessoril on vaja suhelda sisend-väljundseadmetega: sisendseadmetest on vaja infot küsida ning väljundseadmetesse on vaja infot saata. Vajalik info on sisend-väljundseadmete mälus ja registrites.[10] Protsessor saab sisend-väljundseadmetega suhelda ka aadresside abil, samamoodi nagu käib protsessori suhtlus mäluga.[1] Sisend-väljundseadmete aadressid võivad paikneda ühises aadressiruumis arvuti põhimäluga või olla eraldi aadressiruumis, neid variante nimetatakse vastavalt mäluvastendusega sisend-väljundseadmed (memory-mapped I/O devices) ja portvastendusega sisend-väljundseadmed (port-mapped I/O devices).[10]

Mäluvastendusega sisend-väljundseadmetest saab infot küsida ja saata samasuguste masinkoodi käskudega, mis on mõeldud mäluga suhtlemiseks.[1] Kuna spetsiaalseid käske sisend-väljundseadmetega suhtlemiseks ei ole vaja, siis kõik protsessorid toetavad mäluvastendusega sisend-väljundseadmeid. Aga kõik protsessorid ei toeta portvastendusega sisend-väljundseadmeid, sest portvastendusega sisend-väljundseadmed asuvad eraldi sisend-väljund aadressiruumis. Sisend-väljund aadressiruumis paiknevate sisend-väljundseadmete kättesaamiseks on vajalikud spetsiaalsed masinkoodi käsud.[11] Paljud sisend-väljundseadmed toetavad nii mäluvastendust kui ka portvastendust.  

Mäluvastendusega sisend-väljundseadmete jaoks peab olema osa füüsilisest aadressiruumist reserveeritud sisend-väljundseadmete aadressideks. See osa füüsilisest aadressiruumist ei tohi olla arvuti põhimälu jaoks kättesaadav. Sisend-väljundseadmetele mõeldud mäluaadresside vahemik sõltub riistvarast.[10]

  1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Hamacher, Karl, toim (2012). Computer organization and embedded systems (6. ed trükk). New York, NY: McGraw-Hill. ISBN 978-0-07-108900-5.
  2. "64-bit computing", Wikipedia (inglise), 22. aprill 2026, vaadatud 3. mail 2026
  3. "What is Endianness? Big-Endian & Little-Endian". GeeksforGeeks (inglise). 16. juuli 2009. Vaadatud 2. mail 2026.
  4. 1 2 3 4 "Logical and Physical Address in Operating System". GeeksforGeeks (inglise). 30. detsember 2018. Vaadatud 3. mail 2026.
  5. "Memory address", Wikipedia (inglise), 6. jaanuar 2026, vaadatud 4. mail 2026
  6. 1 2 "Sissejuhatus digitaaltehnikasse: Pooljuhtmäluseadmetega seotud mõisteid". www.tud.ttu.ee. Vaadatud 4. mail 2026.
  7. "What is an address space?". www.ibm.com (Ameerika inglise). Vaadatud 3. mail 2026.
  8. 1 2 3 "Paging". GeeksforGeeks (inglise). 14. jaanuar 2016. Vaadatud 3. mail 2026.
  9. "Page (computer memory)", Wikipedia (inglise), 13. oktoober 2025, vaadatud 3. mail 2026
  10. 1 2 3 "Memory-mapped I/O and port-mapped I/O", Wikipedia (inglise), 30. märts 2026, vaadatud 3. mail 2026
  11. Dandamudi, Sivarama P. (2006). "Chapter 19 Input/Output Organization" (PDF). Vaadatud 3. mail 2026.

Välislingid

[muuda | muuda lähteteksti]

Logical and Physical Address in Operating System. GeeksforGeeks