Меморијска адреса

С Википедије, слободне енциклопедије
(преусмерено са Memory addressing)

У рачунарству, меморијска адреса је концепт података коришћен на различитим нивоима софтвера и хардвера да би се приступило главном складишту меморије. Меморијске адресе су секвенце бројева ограничене дужине конвенцијално изложене и избачене да би се манипулисало њима.[1] Такав нумерички семантик се базира на особинама CPU-a (као нпр. показивач инструкција и инкрементални адресни регистри), а такође се користи као низ подржан од стране разних програмских језика.

Типови меморијских адреса[уреди | уреди извор]

Постоје многи типови меморијских адреса. Другим речима, рачунар, чак и један програм може имати неколико различитих меморијских просторних адреса.

Меморија дигиталних рачунара, специфичније главна меморије, се састоји од много меморијских локација, од којих свака има физичку адресу, код, који CPU (или неки други уређај) може да искористи да би јој приступио. Углавном системски софтвер, нпр. BIOS, оперативни систем, и неки специјализовани корисни програми (нпр, тестери меморије), адресирају физичку меморију користећи машински код операнде или процесорске регистре, упућујући CPU директно до уређаја, који се зове меморијски контролер, да би се користила меморијска магистрала или системска магистрала, или одвојена контрола, адреса и магистрала података, да би се извршиле команде програма. Меморијска контрола магистрале се састоји од броја паралелних линија, коју сваки представља бинарни број (бит). Ширина магистрале, такође и број адресабилних јединица складишта, и број битова по јединици варира међу компонентама.

Рачунарски програм користи меморијске адресе да изврши машински код, складишти и поврати податке. Многи апликацијски програми немају знање о физичкој адреси. Него се обраћају логичким адресама, или виртуалним адресама, користећи рачунарску јединицу меморије управљања и оперативни систем меморијског мапирања; види испод.

Јединица адресне резолуције[уреди | уреди извор]

Многи модерни рачунари субајт-адресабилни, свака адреса идентификује једно осмобитно бајт скадиште; подаци који су превелики да би се складиштили у једном бајту се налазе у неколико бајтова који се састоје од секвенце консеквентних адреса. Постоје речима адресабилни рачунари, где је минимална складишна јединица процесорска реч. На пример, Data General Nova minicomputer, и Texas Instruments TMS9900 и National Semiconductor IMP-16 microcomputer су користили 16 битне речи, и постојали су многи 36 битни mainframe рачунари (нпр, PDP-10) који је користио 18 битне речи адресирања, не бајт адресирање, давајући адресни простор од 218 36 битне речи, просечно 1MB складишта. Ефикасност адресирање меморије зависи од величине бита магистрале корипћеног за адресе - што више битова се користи више адреса је доступно рачунару. На пример, 8-бит-бајт-адресабилна машина са 20-битном адресном магистралом (нпр. Intel 8086) може да адресира 220 (1,048,576) меморијских локација, или један MiB меморије, док 32-битна магистрала(нпр. Intel 80386) адресира 232 (4,294,967,296) локација, или 4 GiB-а адресног простора. У супротном, a 36-битна речима адресабилна машина са 18-битну адресну магистралу адресира само 218 (262,144) 36-битних локација (9,437,184 bits), еквивалентно 1.179.648 8-бит-бајта, или 1152 KB, или 1.125 MiB—мало више од 8086.

Неки старији рачунари (децимални рачунари), су били децимално бројно-адресабилни. На пример, у IBM 1620' магнетном језгу меморије идентификује се једна 6-битна децимала бинарног кода бројева, састоје се од парних битова, flag битова и 4 нумеричких битова. 1620 је користио 5-бројну децималну адресу, тако да у теорији највећа могућа адреса је била 99,999. У пракси, CPU је подржавао 20.000 меморијских локација, и до 2 опционалне ектерне меморијске јединице се могу додати, свака подржава 20.000 адреса, за укупно 60.000 (00000–59999).

Величина речи против величине адресе[уреди | уреди извор]

Величина речи је карактеристична у архитектури рачунара. Означава број цифара који CPU може да процесује одједном. Модерни процесори, укључујући и уграђене системе, обично имају реч величине 8, 16, 24, 32 или 64 бита; многи садашњи рачунари за свакодневну употребу користе 32 или 64 бита. Многе различите величине су се користиле током историје, укључујући 8, 9, 10, 12, 18, 24, 36, 39, 40, 48 и 60 бита.

Веома често, када се помене величина речи модерног рачунара, неки повезују то са величином адресног простора на том рачунару. На пример, за рачунар за који се каже да је "32-битан" такође обично има 32-битне меморијске адресе; бајт адресабилни 32-битни рачунар може адресирати 232 = 4,294,967,296 бајта меморије, или 4 гигабајта (GiB). Ово изгледа логично и корисно, зато што довољава једној меморијској адреси да се складишти у једној речи.

Али није увек овако. Рачунари често имају меморијске адресе мање или веће него њихове величине речи. На пример, скоро сви 8-битни процесори, као што је 6502, подржавају 16-битне адресе— јер да не подржавају, били би ограничени на 256 бајта меморије. 16-битни Intel 8088 је имао само 8-битну екстерну меморију магистрале на раним IBM рачунарима, и 16-битну Intel 8086 подршку 20-битног адресирања , дозвољавајући му да приступа на 1 MB више него 64 KiB меморије. Популарни Intel Pentium процесори од представљања Продужене физичке адресе (PAE) подржавају 36-битну физичку адресу, док углавном имајју 32-битну реч.

Модерни бит адресабилни 64-битни рачуран са одговарајућим оперативним системом може да адресира 264 бајта (или 16 exbibytes) што се сматра практично неограниченим.

Садржај сваке меморијске локације[уреди | уреди извор]

Свака меморијска локација у складишном програмском рачунару садржи бинарни број или децимални број неке врсте. У суштини, као подаци неких типова података или као инструкције, и употреба се детерминише инсрукцијом која је повраћа и манипулише.

Неки програмери су комбиновали податке и инструкције у речима да би сачували на меморији, када је била скупа: Manchester Mark 1 је имао простор од 40-бита речи да се складишти мало битова података – процесор је игрнорисао мали део у средини речи – и то се сматрало као вишак скадишних података. Самозамењујући програми као нпр. вируис третирају себе некад као инструкције а некад као податак. Самомодификујући код је данас искључен, зато што чини тестирање и одржавање диспропорцијално тешким да се сачувају неколико битова, и такође може да да нетачне резултате због компилатора или процесорских слутњи о машинском стању, али се још увек понекад користи намерно, али са великом пажњом.

Адресни простор у апликационом програмирању[уреди | уреди извор]

У модерној мултитаскинг околини, апликацијски процес обично има у себи адресни простор (или просторе) делиће меморије следећих типова:

Неки делови адресног простора можда нису ни мапирани.

Шеме адресирања[уреди | уреди извор]

Рачунарски програм може да приступи адреси експлицитно – у програмирању ниског нивоа то се зове апсолутна адреса, или понекад специфична адреса, и позната је као показивач података тип у језицима вишег нивоа. Али програм може такође користити релативне адресе које одређују локацију у релацији са негде другде (адреса базе). Постоји још много индиректних начина адресирања.

Мапирање логичких адреса са физичком и виртуалном меморијом такође додаје неколико нивоа индирекције; види испод.

Модели меморије[уреди | уреди извор]

Многи програмери сматрају да меморијска адреса нема разлику између простор кода и простора података (cf. above), ткаође и за физичку и виртуалну меморију (види испод) — другим речима, нумерички идентични показивачи се сматрају истим битом на RAM-у.

Међутим, многи ранији рачунари нису подржавали такав пљоснат модел меморије посебно, Harvard архитектуре машина тера програмска складишта да буду тотално одвојена од складишта података.

Многи модерни DSP-оив (као што је Motorola 56000) имају 3 различите области складишта — програмско складиште, коефицијентно складиште, и складиште података. Неке уобичајене инструкције се додају између све три области истовремено — мање складишних области би чиниле да се те инструкције изврше спорије.

Меморијски модели у x86 архитектури[уреди | уреди извор]

Рани x86 рачунари су користили сегменте меморијских модела адреса базиране на комбинацији 2 броја: меморијски сегмент, offset унутар тог сегмента.

Неки сегменти су намерно третирани као сегменти кодова, посвећени за инструкције, стек сегменте, или за нормалне сегменте података. Иако су употребе биле различите, сегменти нису имали различите меморијске заштите рефлектујући на ово.

У пљоснатим меморијским моделима сви сегменти (регистри сегмента) су генерално подешени на 0, и само су offsets-и варијабилни.

Види још[уреди | уреди извор]

Референце[уреди | уреди извор]

  1. ^ „Архивирана копија” (PDF). Архивирано из оригинала (PDF) 21. 10. 2012. г. Приступљено 12. 01. 2014.