Memorijska adresa

S Vikipedije, slobodne enciklopedije

U računarstvu, memorijska adresa je koncept podataka korišćen na različitim nivoima softvera i hardvera da bi se pristupilo glavnom skladištu memorije. Memorijske adrese su sekvence brojeva ograničene dužine konvencijalno izložene i izbačene da bi se manipulisalo njima.[1] Takav numerički semantik se bazira na osobinama CPU-a (kao npr. pokazivač instrukcija i inkrementalni adresni registri), a takođe se koristi kao niz podržan od strane raznih programskih jezika.

Tipovi memorijskih adresa[uredi | uredi izvor]

Postoje mnogi tipovi memorijskih adresa. Drugim rečima, računar, čak i jedan program može imati nekoliko različitih memorijskih prostornih adresa.

Memorija digitalnih računara, specifičnije glavna memorije, se sastoji od mnogo memorijskih lokacija, od kojih svaka ima fizičku adresu, kod, koji CPU (ili neki drugi uređaj) može da iskoristi da bi joj pristupio. Uglavnom sistemski softver, npr. BIOS, operativni sistem, i neki specijalizovani korisni programi (npr, testeri memorije), adresiraju fizičku memoriju koristeći mašinski kod operande ili procesorske registre, upućujući CPU direktno do uređaja, koji se zove memorijski kontroler, da bi se koristila memorijska magistrala ili sistemska magistrala, ili odvojena kontrola, adresa i magistrala podataka, da bi se izvršile komande programa. Memorijska kontrola magistrale se sastoji od broja paralelnih linija, koju svaki predstavlja binarni broj (bit). Širina magistrale, takođe i broj adresabilnih jedinica skladišta, i broj bitova po jedinici varira među komponentama.

Računarski program koristi memorijske adrese da izvrši mašinski kod, skladišti i povrati podatke. Mnogi aplikacijski programi nemaju znanje o fizičkoj adresi. Nego se obraćaju logičkim adresama, ili virtualnim adresama, koristeći računarsku jedinicu memorije upravljanja i operativni sistem memorijskog mapiranja; vidi ispod.

Jedinica adresne rezolucije[uredi | uredi izvor]

Mnogi moderni računari subajt-adresabilni, svaka adresa identifikuje jedno osmobitno bajt skadište; podaci koji su preveliki da bi se skladištili u jednom bajtu se nalaze u nekoliko bajtova koji se sastoje od sekvence konsekventnih adresa. Postoje rečima adresabilni računari, gde je minimalna skladišna jedinica procesorska reč. Na primer, Data General Nova minicomputer, i Texas Instruments TMS9900 i National Semiconductor IMP-16 microcomputer su koristili 16 bitne reči, i postojali su mnogi 36 bitni mainframe računari (npr, PDP-10) koji je koristio 18 bitne reči adresiranja, ne bajt adresiranje, davajući adresni prostor od 218 36 bitne reči, prosečno 1MB skladišta. Efikasnost adresiranje memorije zavisi od veličine bita magistrale koripćenog za adrese - što više bitova se koristi više adresa je dostupno računaru. Na primer, 8-bit-bajt-adresabilna mašina sa 20-bitnom adresnom magistralom (npr. Intel 8086) može da adresira 220 (1,048,576) memorijskih lokacija, ili jedan MiB memorije, dok 32-bitna magistrala(npr. Intel 80386) adresira 232 (4,294,967,296) lokacija, ili 4 GiB-a adresnog prostora. U suprotnom, a 36-bitna rečima adresabilna mašina sa 18-bitnu adresnu magistralu adresira samo 218 (262,144) 36-bitnih lokacija (9,437,184 bits), ekvivalentno 1.179.648 8-bit-bajta, ili 1152 KB, ili 1.125 MiB—malo više od 8086.

Neki stariji računari (decimalni računari), su bili decimalno brojno-adresabilni. Na primer, u IBM 1620' magnetnom jezgu memorije identifikuje se jedna 6-bitna decimala binarnog koda brojeva, sastoje se od parnih bitova, flag bitova i 4 numeričkih bitova. 1620 je koristio 5-brojnu decimalnu adresu, tako da u teoriji najveća moguća adresa je bila 99,999. U praksi, CPU je podržavao 20.000 memorijskih lokacija, i do 2 opcionalne ekterne memorijske jedinice se mogu dodati, svaka podržava 20.000 adresa, za ukupno 60.000 (00000–59999).

Veličina reči protiv veličine adrese[uredi | uredi izvor]

Veličina reči je karakteristična u arhitekturi računara. Označava broj cifara koji CPU može da procesuje odjednom. Moderni procesori, uključujući i ugrađene sisteme, obično imaju reč veličine 8, 16, 24, 32 ili 64 bita; mnogi sadašnji računari za svakodnevnu upotrebu koriste 32 ili 64 bita. Mnoge različite veličine su se koristile tokom istorije, uključujući 8, 9, 10, 12, 18, 24, 36, 39, 40, 48 i 60 bita.

Veoma često, kada se pomene veličina reči modernog računara, neki povezuju to sa veličinom adresnog prostora na tom računaru. Na primer, za računar za koji se kaže da je "32-bitan" takođe obično ima 32-bitne memorijske adrese; bajt adresabilni 32-bitni računar može adresirati 232 = 4,294,967,296 bajta memorije, ili 4 gigabajta (GiB). Ovo izgleda logično i korisno, zato što dovoljava jednoj memorijskoj adresi da se skladišti u jednoj reči.

Ali nije uvek ovako. Računari često imaju memorijske adrese manje ili veće nego njihove veličine reči. Na primer, skoro svi 8-bitni procesori, kao što je 6502, podržavaju 16-bitne adrese— jer da ne podržavaju, bili bi ograničeni na 256 bajta memorije. 16-bitni Intel 8088 je imao samo 8-bitnu eksternu memoriju magistrale na ranim IBM računarima, i 16-bitnu Intel 8086 podršku 20-bitnog adresiranja , dozvoljavajući mu da pristupa na 1 MB više nego 64 KiB memorije. Popularni Intel Pentium procesori od predstavljanja Produžene fizičke adrese (PAE) podržavaju 36-bitnu fizičku adresu, dok uglavnom imajju 32-bitnu reč.

Moderni bit adresabilni 64-bitni račuran sa odgovarajućim operativnim sistemom može da adresira 264 bajta (ili 16 exbibytes) što se smatra praktično neograničenim.

Sadržaj svake memorijske lokacije[uredi | uredi izvor]

Svaka memorijska lokacija u skladišnom programskom računaru sadrži binarni broj ili decimalni broj neke vrste. U suštini, kao podaci nekih tipova podataka ili kao instrukcije, i upotreba se determiniše insrukcijom koja je povraća i manipuliše.

Neki programeri su kombinovali podatke i instrukcije u rečima da bi sačuvali na memoriji, kada je bila skupa: Manchester Mark 1 je imao prostor od 40-bita reči da se skladišti malo bitova podataka – procesor je igrnorisao mali deo u sredini reči – i to se smatralo kao višak skadišnih podataka. Samozamenjujući programi kao npr. viruis tretiraju sebe nekad kao instrukcije a nekad kao podatak. Samomodifikujući kod je danas isključen, zato što čini testiranje i održavanje disproporcijalno teškim da se sačuvaju nekoliko bitova, i takođe može da da netačne rezultate zbog kompilatora ili procesorskih slutnji o mašinskom stanju, ali se još uvek ponekad koristi namerno, ali sa velikom pažnjom.

Adresni prostor u aplikacionom programiranju[uredi | uredi izvor]

U modernoj multitasking okolini, aplikacijski proces obično ima u sebi adresni prostor (ili prostore) deliće memorije sledećih tipova:

Neki delovi adresnog prostora možda nisu ni mapirani.

Šeme adresiranja[uredi | uredi izvor]

Računarski program može da pristupi adresi eksplicitno – u programiranju niskog nivoa to se zove apsolutna adresa, ili ponekad specifična adresa, i poznata je kao pokazivač podataka tip u jezicima višeg nivoa. Ali program može takođe koristiti relativne adrese koje određuju lokaciju u relaciji sa negde drugde (adresa baze). Postoji još mnogo indirektnih načina adresiranja.

Mapiranje logičkih adresa sa fizičkom i virtualnom memorijom takođe dodaje nekoliko nivoa indirekcije; vidi ispod.

Modeli memorije[uredi | uredi izvor]

Mnogi programeri smatraju da memorijska adresa nema razliku između prostor koda i prostora podataka (cf. above), tkaođe i za fizičku i virtualnu memoriju (vidi ispod) — drugim rečima, numerički identični pokazivači se smatraju istim bitom na RAM-u.

Međutim, mnogi raniji računari nisu podržavali takav pljosnat model memorije posebno, Harvard arhitekture mašina tera programska skladišta da budu totalno odvojena od skladišta podataka.

Mnogi moderni DSP-oiv (kao što je Motorola 56000) imaju 3 različite oblasti skladišta — programsko skladište, koeficijentno skladište, i skladište podataka. Neke uobičajene instrukcije se dodaju između sve tri oblasti istovremeno — manje skladišnih oblasti bi činile da se te instrukcije izvrše sporije.

Memorijski modeli u x86 arhitekturi[uredi | uredi izvor]

Rani x86 računari su koristili segmente memorijskih modela adresa bazirane na kombinaciji 2 broja: memorijski segment, offset unutar tog segmenta.

Neki segmenti su namerno tretirani kao segmenti kodova, posvećeni za instrukcije, stek segmente, ili za normalne segmente podataka. Iako su upotrebe bile različite, segmenti nisu imali različite memorijske zaštite reflektujući na ovo.

U pljosnatim memorijskim modelima svi segmenti (registri segmenta) su generalno podešeni na 0, i samo su offsets-i varijabilni.

Vidi još[uredi | uredi izvor]

Reference[uredi | uredi izvor]

  1. ^ „Arhivirana kopija” (PDF). Arhivirano iz originala (PDF) 21. 10. 2012. g. Pristupljeno 12. 01. 2014.