Кіріспе

Жадтың нақты орнына сілтеме

Есептеу техникасында жад адресі – бағдарламалық және аппараттық құралдардың әртүрлі деңгейлерінде қолданылатын жадтың нақты орнына сілтеме. Жад адрестері – әдеттегідей, қолданбалы емес бүтін сандар ретінде көрсетіліп, өңделетін сандардың белгілі бір ұзындығы болып табылады. Мұндай сандық мағынасы процессордың мүмкіндіктеріне (мысалы, командалық тікелей адресі және арттырушы адрес тіркегіштері) және түрлі бағдарламалау тілдері қолдайтын массив сияқты жадты пайдалануға негізделген.

Физикалық мекенжайлар

Цифрлық компьютердің негізгі жады көптеген жад орындарынан тұрады. Әр жад орнының физикалық адресі болады, ол код түрінде ұсынылады. CPU (немесе басқа құрылғы) осы кодты тиісті жад орнына қол жеткізу үшін пайдалана алады. Көбінесе, жүйелік бағдарламалық қамтамасыз ету, яғни BIOS, операциялық жүйелер және кейбір арнайы қосымша бағдарламалар (мысалы, жадты тексеру бағдарламалары) ғана машиналық код операторларын немесе процессор тіркелгіштерін пайдаланып физикалық жадқа тікелей жүгінеді. Олар CPU-ға жад контроллері деп аталатын аппараттық құрылғыны басқаруға, жад шинасын немесе жүйелік шинаны, немесе жеке басқару, адрес және дерек шиналарын пайдалану арқылы бағдарламаның командаларын орындауға нұсқау береді. Жады контроллерінің шинасы бірнеше параллель сызықтардан тұрады, олардың әрқайсысы екілік санмен (бит) көрсетіледі. Шинаның ені, сонымен қатар адрестелетін сақтау бірліктерінің саны және әрбір бірліктегі биттердің саны компьютерлерде әртүрлі болуы мүмкін.

Логикалық адрестер

Компьютерлік бағдарлама машиналық кодты орындау және деректерді сақтау мен алу үшін жад адрестерін пайдаланады. Алғашқы компьютерлерде логикалық және физикалық адрестер сәйкес келді, бірақ виртуалды жад енгізілгеннен бері көптеген қолданба бағдарламалары физикалық адрестер туралы білмейді. Олар компьютердің жад басқару бірлігі мен операциялық жүйенің жад бейнелеуін пайдаланып, логикалық немесе виртуалды адрестерді қолданады; төменде қараңыз.

Адрестің ажырату бірлігі

Қазіргі заманғы компьютерлердің көпшілігі байттық адрестеуге ие. Әрбір адрес сақтаудың бір байтын (сегіз бит) анықтайды. Бір байттан үлкен деректер бір-бірінен кейін келетін адрестер тізбегінде сақталуы мүмкін. Сөздік адрестеуге ие компьютерлер де бар, онда ең кішкентай адрестелетін сақтау бірлігі процессордың сөзімен тең болады. Мысалы, Data General Nova миникомпьютері, Texas Instruments TMS9900 және National Semiconductor IMP 16 микрокомпьютерлері 16 биттік сөздерді қолданды, ал көптеген 36 биттік мейнфрейм компьютерлері (мысалы, PDP 10) 18 биттік сөздік емес, байттық адрестеуді қолданды, бұл 218 36 биттік сөзді, шамамен 1 мегабайт сақтау көлемін қамтамасыз етті. Жадты адрестеудің тиімділігі адрестер үшін қолданылатын шинаның биттік сыйымдылығына байланысты – қаншама көп бит қолданылса, компьютер үшін соғұрлым көп адрестер қолжетімді болады. Мысалы, 20 биттік адрес шинасы бар 8 биттік байттық адрестеуге ие машина (мысалы, Intel 8086) 220 (1,048,576) жад орнын немесе бір МиБ жадты адрестей алады, ал 32 биттік шина (мысалы, Intel 80386) 232 (4,294,967,296) орнын немесе 4 ГиБ адрес кеңістігін адрестей алады. Керісінше, 18 биттік адрес шинасы бар 36 биттік сөздік адрестеуге ие машина тек 218 (262,144) 36 биттік орынды (9,437,184 бит) ғана адрестейді, бұл 1,179,648 8 биттік байтқа тең, немесе 1152 КиБ, немесе 1,125 МиБ – 8086-дан сәл көп. Кейбір ескі компьютерлер (ондық компьютерлер) ондық цифрлармен адрестелетін. Мысалы, IBM 1620 магниттік ядролық жадындағы әрбір адрес бір-бір алты биттік бинарлық кодталған ондық санды анықтайды, ол паритет биті, флаг биті және төрт сандық биттен тұрады. 1620-де 5 таңбалы ондық адрестер қолданылды, сондықтан теориялық тұрғыдан ең жоғары мүмкін адрес 99,999 болды. Іс жүзінде, процессор 20,000 жад орнын қолдады, және екі қосымша сыртқы жад блогы қосылуы мүмкін, әрқайсысы 20,000 адрес қолдайтын, барлығы 60,000 (00000–59999) адрес.

Сөз өлшемі мен мекен-жай өлшемі

Сөз өлшемі – компьютерлік архитектураның процессордың бір уақытта өңдей алатын биттер санын көрсететін сипаттамасы. Қазіргі заманғы процессорлар, оның ішінде кіріктірілген жүйелер, әдетте 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) адрестей алады. Бұл бір жад адресін бір сөзбен тиімді сақтауға мүмкіндік береді. Дегенмен, бұл әрқашан да дұрыс болмайды. Компьютерде сөз өлшемінен үлкен немесе кішкентай жад адрестері болуы мүмкін. Мысалы, MOS Technology 6502 сияқты көптеген 8 биттік процессорлар 16 биттік адрестерді қолдады, әйтпесе олардың жад адрестеуі тек 256 байтпен ғана шектелетін еді. 16 биттік Intel 8088 және Intel 8086 сегментация арқылы 20 биттік адрестеуді қолдайды, бұл оларға 64 КиБ емес, 1 МиБ жадқа қол жеткізуге мүмкіндік берді. Pentium Pro-дан бастап барлық Intel Pentium процессорлары физикалық адрестік кеңейтімдерді (PAE) қамтиды, олар 36 биттік физикалық адрестерді 32 биттік виртуалды адрестерге шамамен келтіруді қолдайды. Көптеген ертедегі процессорлар бір сөз үшін 2 адресті сақтады, мысалы 36 биттік процессорлар. Теориялық тұрғыдан алғанда, қазіргі 64 биттік компьютерлер 264 байтқа (16 эксибайт) дейін адрестей алады, бірақ практикада жадтың мөлшері процессордың, жад контроллерінің немесе баспалы схемалық тақтаның дизайнымен (мысалы, физикалық жад қосылымдарының саны немесе тікелей дәнекерленген жадтың мөлшері) шектеледі.

Әр жад орнының мазмұны

Сақталған бағдарламалық компьютердегі әрбір жад орны қандай да бір екілік немесе ондық санды қамтиды. Оның дерек түрі ретінде немесе нұсқау ретінде түсіндірілуі және қолданылуы оны алуға және өңдеуге арналған нұсқаулармен анықталады. Кейбір ерте бағдарламашылар жадыны үнемдеу үшін, ол қымбат болған кезде, нұсқаулар мен деректерді бір сөзге біріктірген: Манчестер Марк 1 машинасының 40 биттік сөздерінде шағын деректерді сақтауға орын болды – оның процессоры сөздің ортасындағы кішкентай бөлігін назарға алмайтын, және бұл көбінесе қосымша дерек сақтау үшін пайдаланылды. Вирустар сияқты өзін-өзі көбейтуге қабілетті бағдарламалар кейде өздерін дерек, кейде нұсқау ретінде қарастырады. Өзін-өзі өзгерту коды қазіргі таңда көбінесе қолданылмайды, себебі ол бірнеше байтты сақтау үшін сынақтан өткізуді және техникалық қызмет көрсетуді пропорционалды түрде қиындатады, сондай-ақ компилятор немесе процессордың машина күйі туралы болжамдарынан қате нәтижелер тудыруы мүмкін, бірақ кейде әдейі, ерекше сақтықпен қолданылады.

Атаулы схемалар

Компьютерлік бағдарлама нақты көрсетілген мекенжайға қол жеткізе алады – төменгі деңгейдегі бағдарламалауда бұл әдетте абсолюттік мекенжай немесе кейде белгілі бір мекенжай деп аталады, ал жоғары деңгейдегі тілдерде көрсеткіш дерек типі ретінде танылады. Бірақ бағдарлама басқа бір орынға қатысты орналасуын анықтайтын салыстырмалы мекенжайды да пайдалана алады (базалық мекенжай). Тағы да көптеген жанама адрестеу режимдері бар. Логикалық мекенжайларды физикалық және виртуалды жадқа бейімдеу де бірнеше деңгейдегі жанамалықты қосады; төменде қараңыз.

Жад үлгілері

Көптеген бағдарламашылар жадты осылай ұйымдастыруды ұнатады: код кеңістігі мен деректер кеңістігі арасында ешқандай айырмашылық болмайды (жоғарыда қараңыз), сондай-ақ физикалық және виртуалды жадтан (жоғарыда қараңыз) да ешқандай айырмашылық жоқ. Яғни, сандық жағынан бірдей көрсеткіштер RAM-ның нақты бір байтына сілтеме жасайды. Дегенмен, көптеген ерте компьютерлер мұндай жазық жад моделін қолдамады. Атап айтқанда, Гарвард архитектурасы машиналары бағдарлама сақтауды дерек сақтаудан толығымен бөлек етуге мәжбүрлейді. Көптеген қазіргі заманғы DSP-лерде (мысалы, Motorola 56000) үш жеке сақтау аймағы бар: бағдарлама сақтау, коэффициенттер сақтау және дерек сақтау. Кейбір жиі қолданылатын командалар бір уақытта үш аймақтан да мәлімет алады. Сақтау аймақтарының саны азайса (жалпы сақтау көлемі бірдей болса да), бұл командалар баяу орындалады.

x86 архитектурасындағы жад үлгілері

Ертедегі x86 процессорлары сегменттелген жад моделінде адрестеуді екі санның комбинациясы арқылы жүзеге асырады: жад сегменті және сол сегмент ішіндегі ығысу (офсет). Кейбір сегменттер автоматты түрде код сегменттері (нұсқаулар үшін), стек сегменттері немесе жалпы дерек сегменттері ретінде қарастырылады. Олардың қолданылуы әртүрлі болғанымен, бұл айырмашылықты көрсететін жадты қорғау деңгейлері сегменттерде қарастырылмаған. Флат жад моделінде барлық сегменттер (сегменттік тіркелгілер) көбінесе нөлге орнатылады және тек ығысулар (офсеттер) өзгеріп отырады.