8086 бірінші x86 процессоры болды - Intel 4004, 8008, 8080 және 8085 үлгілерін шығарған болатын. Бұл 16 биттік процессор сыртқы 20 биттік адрес шинасында 1 Мбайт жадпен жұмыс істей алады. IBM таңдаған тактілік жиілігі (4,77 МГц) өте төмен болды, ал өз мансабының соңында процессор 10 МГц жиілікте жұмыс істеді.

Алғашқы дербес компьютерлер тек 8 разрядты сыртқы деректер шинасы бар 8088 процессорының туындысын пайдаланды. Бір қызығы, американдық шаттлдардағы басқару жүйелері 8086 процессорды пайдаланады және NASA 2002 жылы eBay арқылы процессорларды сатып алуға мәжбүр болды, өйткені Intel оларды енді жасамайды.

Intel 8086
Код атауы Жоқ
Шығарылған күні 1979
Архитектура 16 бит
Деректер шинасы 16 бит
Мекенжай автобусы 20 бит
Макс. жады сыйымдылығы 1 МБ
L1 кэш Жоқ
L2 кэш Жоқ
Сағат жиілігі 4,77-10 МГц
ФСБ Бірдей процессор жиілігі
FPU 8087
SIMD Жоқ
Техникалық процесс 3000 нм
Транзисторлар саны 29 000
Энергияны тұтыну Жоқ
Вольтаж 5 В
Кристалл аймағы 16 мм²
Розетка 40 пин


1982 жылы шығарылған 80286 процессоры дәл сол сағаттық жылдамдықта 8086 процессорынан 3,6 есе жылдамырақ болды. Ол 16 МБ жадты өңдей алады, бірақ 286 әлі де 16 биттік процессор болды. Ол жадты басқару блогымен (MMU) жабдықталған бірінші x86 процессоры болды, ол онымен жұмыс істеуге мүмкіндік берді виртуалды жад. 8086 сияқты, процессорда қалқымалы нүктелік блок (FPU) жоқ, бірақ x87 сопроцессорлық чипін (80287) пайдалана алады. Intel 80286-ны 12,5 МГц максималды жиілікте шығарды, бірақ бәсекелестер 25 МГц-ке қол жеткізе алды.

Intel 80286
Код атауы Жоқ
Шығарылған күні 1982
Архитектура 16 бит
Деректер шинасы 16 бит
Мекенжай автобусы 24 бит
Макс. жады сыйымдылығы 16 МБ
L1 кэш Жоқ
L2 кэш Жоқ
Сағат жиілігі 6-12 МГц
ФСБ CPU жиілігіне тең
FPU 80287
SIMD Жоқ
Техникалық процесс 1500 нм
Транзисторлар саны 134 000
Энергияны тұтыну Жоқ
Вольтаж 5 В
Кристалл аймағы 49 мм²
Розетка 68 түйреуіш

386: 32 биттік және кэшпен


Intel 80836 32-биттік архитектурасы бар бірінші x86 процессоры болды. Бұл процессордың бірнеше нұсқасы шығарылды. Ең танымал екеуі 16 биттік деректер шинасын пайдаланатын 386 SX (Бір сөзді eXternal) және 32 биттік деректер шинасын пайдаланған 386 DX (Қос сөзді eXternal) болып табылады. Тағы екі нұсқаны атап өтуге болады: SL, кэш қолдауы бар бірінші x86 процессоры (сыртқы) және ғарыш бағдарламасында пайдаланылған 386EX (мысалы, Хаббл телескопы осы процессорды пайдаланады).

Intel 80386 DX
Код атауы P3
Шығарылған күні 1985
Архитектура 32 бит
Деректер шинасы 32 бит
Мекенжай автобусы 32 бит
Макс. жады сыйымдылығы 4096 Мб
L1 кэш 0 КБ (кейде контроллер болады)
L2 кэш Жоқ
Сағат жиілігі 16-33 МГц
ФСБ CPU жиілігіне тең
FPU 80387
SIMD Жоқ
Техникалық процесс 1500-1000 нм
Транзисторлар саны 275 000
Энергияны тұтыну 2 Вт @ 33 МГц
Вольтаж 5 В
Кристалл аймағы 42 мм² @ 1 мкм
Розетка 132 контакт

486 процессоры көптеген адамдар үшін ерекше болды, өйткені ол бүкіл ұрпақтың компьютерлермен тәжірибесінің бастауын белгіледі. Шын мәнінде, әйгілі 486 DX2/66 узақ уақытқаойыншылар үшін ең аз конфигурация болып саналды. 1989 жылы шығарылған бұл процессор микросхемадағы FPU сопроцессоры, деректер кэші сияқты бірқатар қызықты жаңа мүмкіндіктерге ие болды және алғаш рет мультипликаторды енгізді. x87 сопроцессоры 486 DX (SX емес) желісіне салынған. 8 КБ бірінші деңгейлі кэш процессорға біріктірілді (алдымен жазу арқылы, содан кейін сәл жоғары өнімділікпен кері жазумен). L2 кэшін аналық платаға қосу мүмкін болды (шина жиілігінде жұмыс істейді).

486 процессордың екінші буыны процессор мультипликаторын алды, өйткені процессор FSB-ге қарағанда жылдамырақ болды, DX2 (2x мультипликатор) және DX4 (3x мультипликатор) нұсқалары пайда болды. Тағы бір анекдот: 486SX үшін FPU ретінде сатылатын "487SX", шын мәнінде, бастапқы процессорды ажыратып, ауыстыратын толық 486DX процессоры болды.

Intel 80486 DX
Код атауы P4, P24, P24C
Шығарылған күні 1989
Архитектура 32 бит
Деректер шинасы 32 бит
Мекенжай автобусы 32 бит
Макс. жады сыйымдылығы 4096 Мб
L1 кэш 8 кбайт
L2 кэш Қосулы аналық плата(ФСБ жиілігінде)
Сағат жиілігі 16-100 МГц
ФСБ 16-50 МГц
FPU Чипте
SIMD Жоқ
Техникалық процесс 1000-800 нм
Транзисторлар саны 1 185 000
Энергияны тұтыну Жоқ
Вольтаж 5В - 3,3В
Кристалл аймағы 81 - 67 мм²
Розетка 168 контакт

DX4-де 16 КБ кэш және одан да көп транзисторлар болды - 76 мм² өлшенетін 600 нм технологиялық технологиясымен жасалған бұл процессор бастапқы 486 (3,3 В) қарағанда аз қуат тұтынды.


1993 жылы енгізілген Pentium көптеген себептермен қызықты болды. Бұл алғашқы x86 процессоры болды, оның көмегімен дәстүрлі үлгі нөмірлерінен керемет атау пайдасына бас тарту туралы шешім қабылданды, өйткені Intel тек сандар бойынша сауда белгісін жасай алмайды. Сонымен қатар, процессор өзінің қателігімен танымал болды. Бірінші буын Pentium жүйесінде кейбір бөлу операциялары дұрыс емес нәтижеге әкелді. Intel процессорды ауыстырды, бірақ компанияның зияны айтарлықтай болды. Өте сирек кездесетін қате IT-баспасөзде үлкен резонанс тудырды.

Pentium үш түрлі желіде сатылды, біріншісінде процессор мультипликаторы жоқ, екіншісі мультипликатормен (әйгілі Pentium 166-ны қоса) және соңғысы MMX деп аталатын x86 үшін SIMD нұсқауларының жиынтығын алды. Pentium MMX L1 кэш өлшемін ұлғайтты және басқа да кішігірім жақсартуларға ие болды. Pentium процессоры екі команданы параллель орындай алатын Intel компаниясының алғашқы x86 процессоры болды. Бұл процессорлар үшін L2 кэш аналық платада орналасқан (ол FSB жиілігінде жұмыс істейді).

Intel Pentium (MMX)
Код атауы P5, P54
Шығарылған күні 1993 1997
Архитектура 32 бит 32 бит
Деректер шинасы 64 бит 64 бит
Мекенжай автобусы 32 бит 32 бит
Макс. жады сыйымдылығы 4096 Мб 4096 Мб
L1 кэш 8 + 8 кбайт 16 + 16 кбайт
L2 кэш Аналық плата (FSB жиілігінде)
Сағат жиілігі 60-200 МГц 133-300 МГц
ФСБ 50-66 МГц 60-66 МГц
FPU Чипте Чипте
SIMD Жоқ MMX
Техникалық процесс 800-600-350 нм 350 нм
Транзисторлар саны 3,1-3,3 млн 4,5 млн
Энергияны тұтыну 8-16 Вт 4-17 Вт
Вольтаж 5 - 3,3 В 2,8 В
Кристалл аймағы 294-163-90 мм² 141 мм²
Розетка Розетка 4, 5 немесе 7 Розетка 7

Pentium қатесі туралы аздап түсініктеме беруге рұқсат етіңіз: FPU бойынша кейбір есептеулер қате нәтижеге әкелді. Қате сирек пайда болды - әр түрлі дереккөздер қаншалықты сирек екендігі туралы әртүрлі бағалаулар береді - және Intel ақаулы процессорларды тегін ауыстырды. Төменде Pentium қатесінің мысалы келтірілген.

4195835,0/3145727,0 = 1,333 820 449 136 241 002 (дұрыс нәтиже)

4195835,0/3145727,0 = 1,333739068902037589 (ақаулы Pentium бойынша қате нәтиже)


1995 жылы шығарылған Pentium Pro физикалық мекенжай кеңейтімі (PAE), яғни 64 ГБ жедел жадыға мүмкіндік беретін 36 биттік мекенжай кеңістігіне көшу арқасында 4 ГБ-тан астам жадты өңдеуге қабілетті алғашқы x86 процессоры болды. қарастырылуы тиіс. Бір қызығы, бұл процессор P6 архитектурасымен бірінші болды (негізінде Core 2 архитектурасы белгілі бір дәрежеде одан мұраланған) және сонымен қатар аналық платада емес, процессорда L2 кэшін қамтитын алғашқы x86 процессоры болды. Негізінде, 256 КБ-тан 1 МБ-қа дейінгі кэш жады орталық процессордың жанында, бір пакетте орналасқан, бірақ сол қалтада емес және орталық процессормен бірдей жиілікте жұмыс істеді.

Процессорда кейбір өнімділік мәселелері болды. Ол 32-биттік қолданбалармен жақсы жұмыс істеді, бірақ олармен әлдеқайда баяу болды бағдарламалық қамтамасыз ету, ол 16-биттік кодта жазылған (Windows 95 жүйесінің кейбір бөліктері сияқты). Мұның себебі қарапайым болды: 16-биттік регистрлерге қол жеткізу 32-биттік регистрлерді басқаруда қиындықтар туғызды, бұл Pentium Pro-ның ретсіз архитектурасының артықшылықтарын жойды.

Intel Pentium Pro
Код атауы P6
Шығарылған күні 1995
Архитектура 32 бит
Деректер шинасы 64 бит
Мекенжай автобусы 36 бит
Макс. жады сыйымдылығы 64 ГБ
L1 кэш 8 + 8 кбайт
L2 кэш Сыртқы, 256-1024 КБ (процессор жиілігінде)
Сағат жиілігі 150-200 МГц
ФСБ 60-66 МГц
FPU Кірістірілген
SIMD Жоқ
Техникалық процесс 600-350 нм
Транзисторлар саны 5 500 000 + қолма-қол ақша
Энергияны тұтыну 29-47 Вт
Вольтаж 3.3 В
Кристалл аймағы 306-196 мм² + кэш
Розетка Розетка 8

Кэш бар матрица аумағы 202 мм² (500 нмде 256 КБ), 242 мм 2 (350 нмде 512 КБ) немесе 484 мм 2 (350 нмде 1 МБ) болды. Кэштегі транзисторлар саны 15,5 миллион (256 КБ), 31 миллион (512 КБ) немесе 62 миллион (1 МБ) болды.


1997 жылы шығарылған Pentium II процессоры Pentium Pro-ның бұқаралық нарыққа бейімделуі болды. Ол Pentium Pro-ға өте ұқсас болды, бірақ кэш жады басқаша болды. Кэшті процессормен бірдей жиілікте іске қосудың орнына (бұл қымбат болды), 512 Кбайт L2 кэш жарты жиілікте жұмыс істеді. Сонымен қатар, Pentium II классикалық ұяшықтан бас тартып, процессор мен L2 кэші бар картридж пайдасына шешілді, ол енді аналық платада немесе процессор қаптамасында емес, картриджде орналасқан.

Pentium Pro-мен салыстырғанда жаңа мүмкіндіктер MMX (SIMD) қолдауын және L1 кэш өлшемін екі есе арттыруды қамтиды. Бірінші Pentium III (Katmai) Pentium II-ге өте ұқсас болды. 1999 жылы шығарылған, ол SSE (SIMD) нұсқауларын қолдауды қосты, бірақ басқаша бірдей болды.

Intel Pentium II және III
Код атауы Кламат (Pentium II 0,35 мкм), Дешутес (Pentium II 0,25 мкм), Катмаи (Pentium III)
Шығарылған күні 1997, 1998, 1999
Архитектура 32 бит
Деректер шинасы 64 бит
Мекенжай автобусы 36 бит (P III бойынша 32 бит)
Макс. жады сыйымдылығы 64 ГБ (P III жүйесінде 4 ГБ)
L1 кэш 16 + 16 кбайт
L2 кэш Сыртқы, 512 КБ (1/2 процессор жиілігі)
Сағат жиілігі 233-300 МГц (Кламат), 300-450 МГц (Deschutes), 450-600 МГц (Кламат)
ФСБ 66-100-133 МГц
FPU Кірістірілген
SIMD MMX (SSE)
Техникалық процесс 350 нм (Кламат), 250 нм (Deschutes, Katmai)
Транзисторлар саны 7 500 000 + кэш (Pentium II), 9 500 000 + кэш (Pentium III)
Энергияны тұтыну 25-35 Вт
Вольтаж 2,8 В (0,35 мкм), 2 В (0,25 мкм)
Кристалл аймағы 204 мм² (0,35 мкм), 131 мм 2 (0,25 мкм), 128 мм 2 (PIII) + кэш
Розетка 1-слот

Pentium II және III 512 Кбайт L2 кэшпен (31 миллион транзистор) жабдықталған. Бірақ Pentium II процессорының бір нұсқасы чипте 256 Кбайт L2 кэшпен жабдықталған - Pentium II Mobile Dixon. Ол 180 нм технологиялық технологияны қолданды және жұмыс үстелі нұсқаларына қарағанда айтарлықтай жылдамырақ болды.


90-жылдардың соңында Intel екі танымал процессорлар брендін шығарды: Celeron және Xeon. Біріншісі «бюджеттік» нарыққа, ал екіншісі - серверлер мен жұмыс станцияларына бағытталған. Алғашқы Celeron (Ковингтон) L2 кэшсіз Pentium II болды және де солай болды төмен өнімділік, ал Pentium II Xeon, керісінше, үлкен кэшпен жабдықталған. Екі бренд әлі де бар: бастапқы деңгейдегі нарыққа арналған Celeron (әдетте кішірейтілген кэш өлшемі және баяу FSB) және серверлерге арналған Xeon (жылдам FSB, кейде үлкен кэш және жоғары сағат жылдамдығы бар).

Intel тез арада Mendocino үлгісіндегі Celeron-ға 128 Кбайт L2 кэшін қосты. Celeron 300A өзінің тамаша үдеткіш мүмкіндіктерімен танымал болды, ол қор жиілігімен салыстырғанда жиілікті 50% немесе одан да көп арттыруға мүмкіндік берді - сол кезде өте көп.

Intel Celeron және Intel Xeon
Код атауы Ковингтон, Мендосино Дрейк
Шығарылған күні 1998 1998
Архитектура 32 бит 32 бит
Деректер шинасы 64 бит 64 бит
Мекенжай автобусы 32 бит 36 бит
Макс. жады сыйымдылығы 4 ГБ 64 ГБ
L1 кэш 16 + 16 кбайт 16 + 16 кбайт
L2 кэш 0 кбайт/128 кбайт (кіріктірілген, процессор жылдамдығында) Сыртқы, 512 - 2408 КБ (процессор жиілігінде)
Сағат жиілігі 266-300 МГц/300-533 МГц 400-450 МГц
ФСБ 66 МГц 100 МГц
FPU Кірістірілген Кірістірілген
SIMD MMX MMX
Техникалық процесс 250 нм 250 нм
Транзисторлар саны 7 500 000/19 000 000 7 500 000 + қолма-қол ақша
Энергияны тұтыну 16-28 Вт 30-46 Вт
Вольтаж 2 В 2 В
Кристалл аймағы 131 мм²/154 мм 2 131 мм² + кэш
Розетка Slot1/Socket 370 PPGA 2-слот

Pentium II сияқты, Xeon процессорында процессор картриджінде сыртқы L2 кэш болды. Оның сыйымдылығы 512 кбайттан 2 Мбайтқа дейін, ал транзисторлар саны 31-ден 124 миллионға дейін болды.

Pentium III 1 ГГц жетеді



Үлкейту үшін суретті басыңыз.

Pentium III Coppermine 1 ГГц-ке жеткен алғашқы x86 өндірістік процессоры болды; Тіпті 1,13 ГГц нұсқасы шығарылды, бірақ ол тұрақтылық мәселелеріне байланысты нарықтан тез кетті. Жаңа нұсқа Pentium III жетілдірілген екінші деңгейлі кэшке ие болды - енді ол чипте «орналастырылды». Ол бірінші үлгідегі 512 Кбайт сыртқы кэштен жылдамырақ болды және сол кезде интернет жылдамдығын арттыратын мүмкіндік ретінде жарнамаланған. Процессор тағы үш нұсқада шығарылды: сервер (Xeon), бастапқы деңгей (Celeron) және мобильді (SpeedStep технологиясының бірінші нұсқасымен).

Intel Pentium III
Код атауы Мыс кені
Шығарылған күні 1999
Архитектура 32 бит
Деректер шинасы 64 бит
Мекенжай автобусы 32 бит
Макс. жады сыйымдылығы 4 ГБ
L1 кэш 16 + 16 кбайт
L2 кэш Кірістірілген, 256 КБ (процессор жиілігінде)
Сағат жиілігі 500-1133 МГц
ФСБ 100-133 МГц
FPU Кірістірілген
SIMD MMX (SSE)
Техникалық процесс 180 нм
Транзисторлар саны 28,1 млн
Энергияны тұтыну 25-35 Вт
Вольтаж 1,6 В, 1,8 В
Кристалл аймағы 106 мм²
Розетка 1 ұясы-сокет 370 FCPGA

2002 жылы үлкенірек L2 кэш (512 КБ) және 130 нм технологиялық технологиясы бар Туалатиннің сәл жақсартылған нұсқасы пайда болды. Ол серверлер (PIII-S) және мобильді құрылғылар үшін орналастырылған және тұтынушы деңгейіндегі компьютерлерде сирек кездеседі.

Pentium 4: көп шу, аз пайдалану


Үлкейту үшін суретті басыңыз.

2000 жылдың қарашасында Intel жариялады жаңа процессор Pentium 4. Оның тактілік жиілігі жоғары болды (кем дегенде 1400 МГц), бірақ бір сағаттағы өнімділікті салыстыру кезінде бәсекелес процессорлардан айтарлықтай төмен болды. AMD Athlon(және тіпті Pentium III) бірдей жиілікте жылдамырақ болды. Мәселені одан әрі қиындату үшін Intel Rambus RDRAM-ға (сол кездегі FSB CPU талаптарына сәйкес келетін жалғыз жад стандарты) ауысуға әрекеттенді, бірақ сәтсіз болды. Өте қымбат және ыстық, Pentium 4 көптеген модификациялар мен жақсартулардан кейін бірнеше жыл ішінде бәсекеге қабілетті деңгейге жете алды (L3 кэшінің және Hyper-Threading сияқты технологиялардың қосылуының арқасында).

Intel Pentium 4 32-бит
Код атауы Вилламетт Нортвуд Прескотт
Шығарылған күні 2000 2001 2004
Архитектура 32 бит 32 бит 32 бит
Деректер шинасы 64 бит 64 бит 64 бит
Мекенжай автобусы 32 бит 32 бит 32 бит
Макс. жады сыйымдылығы 4 ГБ 4 ГБ 4 ГБ
L1 кэш 8 кбайт + 12 Кμопс 8 кбайт + 12 Кμопс 16 кбайт + 12 Кμопс
L2 кэш 256 кбайт 512 кбайт 1024 кбайт
Сағат жиілігі 1,3-2 ГГц 1,8-3,4 ГГц 2,4-3,8 ГГц
ФСБ 400 МГц QDR 400, 533, 800 МГц QDR 533, 800 МГц QDR
SIMD MMX, SSE, SSE2 MMX, SSE, SSE2 MMX, SSE, SSE2, SSE3
SMT/SMP Жоқ Hyper-Threading (кейбір нұсқалар) Hyper-threading
Техникалық процесс 180 нм 130 нм 90 нм
Транзисторлар саны 42 млн 55 млн 125 млн
Энергияны тұтыну 66-100 Вт 54-137 Вт 94-151 Вт
Вольтаж 1,7 В 1,55 В 1,25-1,5 В
Кристалл аймағы 217 мм² 146 мм² 112 мм²
Розетка Розетка 423/розетка 478 Розетка 478 Розетка 478/LGA775

Pentium 4 шықты мобильді нұсқалары(айнымалы мультипликаторы бар), Celeron нұсқасы (кішірек L2 кэшпен) және Xeon нұсқасы (L3 кэшпен). Hyper-Threading және L3 кэш серверлерде алғаш пайда болған және кейінірек негізгі процессорларға бейімделген екі технология болды (бірақ L3 кэш тек қымбат EE желісінде қол жетімді болды).

Сондай-ақ, Quad Data Rate (QDR) технологиясын пайдаланудың арқасында тиімді жиілігі номиналды (физикалық) жиіліктен төрт есе жоғары болатын FSB жиілігін атап өту керек: 400-МГц шинасы іс жүзінде 100 МГц, 533 жиілікте жұмыс істейді. -МГц шинасы 133 МГц және т.б. Ақырында, Pentium 4-тің 64-биттік нұсқалары 2005 жылы пайда болды, бірақ олар туралы кейінірек айтатын боламыз.

Pentium M: ноутбуктер қуаттырақ болды


Үлкейту үшін суретті басыңыз.

2003 жылы ноутбук нарығы үлкен қарқынмен өсе бастады, бірақ Intel тек екі процессорды ұсына алды: ескірген Pentium III Tualatin және Pentium 4, олардың қуат тұтынуы оны мобильді сала үшін жарамсыз етті. Бірақ құтқарылу израильдік даму тобынан келді: Баниас (немесе Pentium M). P6 архитектурасына негізделген бұл процессор (Pentium Pro сияқты) қуатты аз тұтынумен жоғары өнімділікті қамтамасыз етті. Ол тіпті аз қуат тұтынған кезде Pentium 4-тен де асып түсті. Бұл процессор 2003 жылы Centrino платформасы үшін ұсынылды және 2004 жылы одан да жылдам Dothan моделі пайда болды. Pentium M өзін жақсы дәлелдеді мобильді әлем, ал Stealey процессоры (A100) әлі күнге дейін Dothan архитектурасын пайдаланады (төменгі жиіліктер және TDP).

Intel Pentium M
Код атауы Баниас Дотан
Шығарылған күні 2003 2004
Архитектура 32 бит 32 бит
Деректер шинасы 64 бит 64 бит
Мекенжай автобусы 32 бит 32 бит
Макс. жады сыйымдылығы 4 ГБ 4 ГБ
L1 кэш 32 + 32 кбайт 32 + 32 кбайт
L2 кэш 1024 кбайт 2048 кбайт
Сағат жиілігі 0,9-1,7 ГГц 1-2,13 ГГц
ФСБ 400 МГц QDR 400, 533 МГц QDR
SIMD MMX, SSE, SSE2 MMX, SSE, SSE2
SMT/SMP Жоқ Жоқ
Техникалық процесс 130 нм 90 нм
Транзисторлар саны 77 млн 140 млн
Энергияны тұтыну 9-30 Вт 6-35 Вт
Вольтаж 0,9-1,5 В 0,9-1,4 В
Кристалл аймағы 82 мм² 87 мм²
Розетка Розетка 479 Розетка 479

Pentium 4 жағдайындағыдай, FSB физикалық жиіліктен (QDR) төрт есе тиімді жиілікте жұмыс істейді. Socket 479 процессор ұясы 478 түйреуіштерді пайдаланады, бірақ оларды Pentium 4 Socket 478-ден ажырату үшін басқаша орналастырылған (адаптерлер бар болса да).

Pentium 4 64 бит және тағы бір ядро ​​алады



Үлкейту үшін суретті басыңыз.

2005 жылы Intel Pentium 4-ті екі рет жетілдірді, алдымен Prescott-2M, содан кейін Smithfield көмегімен. Біріншісі Prescott дизайнына негізделген 64 разрядты процессор, ал екіншісі алғашқы екі ядролы процессор болды. Негізінде, олар өте ұқсас және басқа Pentium 4 процессорларымен ұқсас проблемалары бар: бір сағатта орындалатын нұсқаулардың аз саны (IPC) және көбейту қиындығы. сағаттық жиіліктержоғары жылу генерациясына байланысты. Core 2 Duo-ны күту кезінде компанияның нарықтағы қиын жағдайын қандай да бір жолмен өтеуге арналған бұл екі процессорды сирек мақтады. Pentium D процессорында (Смитфилдтің коммерциялық атауы) екі ядросы болғанымен, олар бір пакеттегі екі Прескотт кристалы болды.

Intel Pentium 4
Код атауы Прескотт-2М Смитфилд
Шығарылған күні 2005 2005
Архитектура 64 бит 64 бит
Деректер шинасы 64 бит 64 бит
Мекенжай автобусы 64 (шын мәнінде 36) бит 64 (шын мәнінде 36) бит
Макс. жады сыйымдылығы 64 ГБ 64 ГБ
L1 кэш 16 кбайт + 12 Кμопс 2 x 16 кбайт + 12 Кμопс
L2 кэш 2048 кбайт 2 x 1024 кбайт
Сағат жиілігі 3-3,6 ГГц 2,8-3,2 ГГц
ФСБ 800 МГц QDR 800 МГц QDR
SIMD MMX, SSE, SSE2, SSE3 MMX, SSE, SSE2, SSE3
SMT/SMP Hyper-threading Екі ядро ​​(кейбір үлгілерде Hyper-Threading)
Техникалық процесс 90 нм 90 нм
Транзисторлар саны 169 млн 230 млн
TDP 84-115 Вт 95-130 Вт
Вольтаж 1,2 В 1,2 В
Кристалл аймағы 135 мм² 206 мм²
Розетка LGA775 LGA775

Бір қызығы, Pentium 4 негізгі процессорлары PAE технологиясын қолдамаса (36 биттік және 32 биттік жадымен жұмыс істеуге мүмкіндік береді) және 4 ГБ жедел жадымен шектелгенімен, бұл модельдер бұл шекті деңгейден асып кетуі мүмкін. Іс жүзінде мекенжай шинасы әлі де 36 битпен шектелді (Xeon-да 40 бит), бірақ PAE (4 ГБ бетті басқару) технологиясы өткен нәрсе болды - 64 биттік бағдарламалар барлық қолжетімді жадты пайдалана алады.

Hyper-Threading, Intel виртуалды көп өңдеу технологиясы (SMT) кейбір үлгілерде (Xeon және Extreme Edition) қол жетімді болды. Соңында, кейінірек 65 нм сызық пайда болды ( модель ауқымы 9x0) Pentium 4, бірақ ол маңызды жақсартуларды қамтымады.

Алғашқы мобильді екі ядролы процессор



Үлкейту үшін суретті басыңыз.

2006 жылы Intel жариялады Негізгі процессор Duo. Бұл бірінші екі ядролы ноутбук процессоры тамаша өнімділікті қамтамасыз етті - Pentium 4-тен әлдеқайда жақсы. Ол сонымен қатар алғашқы «нағыз» екі ядролы x86 процессоры болды. Кэш, мысалы, ортақ пайдаланылды (ал Pentium D бір бумадағы екі кристалдан тұратын жинақ сияқты болды). Процессор жаңа Centrino Duo платформасының бөлігі болды және өте сәтті болды. Жалғыз кемшілігі - ол Pentium 4 сияқты 32 биттік процессор болып қалды.

Intel Core Duo
Код атауы Йона
Шығарылған күні 2006
Архитектура 32 бит
Деректер шинасы 64 бит
Мекенжай автобусы 32 бит
Макс. жады сыйымдылығы 4 ГБ
L1 кэш 32 + 32 кбайт
L2 кэш Барлығы 2048 кбайт
Сағат жиілігі 1,06-2,33 ГГц
ФСБ 667 МГц
SIMD MMX, SSE, SSE2, SSE3
SMT/SMP Екі ядро
Техникалық процесс 65 нм
Транзисторлар саны 151 млн
TDP 9-31 Вт
Вольтаж 0,9-1,3 В
Кристалл аймағы 91 мм²
Розетка Розетка 479

Сондай-ақ бір ядросы бар Core Solo нұсқасы, сондай-ақ 667-МГц-ке қарсы 533-МГц QDR шинасын (133 МГц) пайдаланатын қуатты аз тұтынатын нұсқалары да қолжетімді болды. Бұл процессор серверлерде де қолданыла бастады (код атауы Sossaman), бұл мобильді сектор үшін жасалған процессор үшін бірінші болды. Процессордың Core 2 Duo-мен бірге енгізілген Core архитектурасын қолданбайтынын және ол ноутбуктерде Core 2 Duo (Merom) нұсқасымен тез ауыстырылғанын ескеріңіз. Сонымен қатар, Yonah's Socket 479 басқалардың Socket 479-дан ерекшеленеді Pentium процессорларыМ.

Қазіргі көшбасшы: Core 2 Duo


Үлкейту үшін суретті басыңыз.

2006 жылы Intel тез арада бестселлерге айналған процессорды ұсынды: Core 2 Duo. Оны әзірлеу барысында Pentium M тәжірибесі негізінен алынды, бірақ процессор жаңа Core архитектурасын пайдаланады. Оған дейін Intel екі процессорлар желісін шығарды: стационарлық компьютерлер үшін Pentium 4, ноутбуктер үшін Pentium M және серверлер үшін екі желі. Бірақ қазір, керісінше, Intel барлық сызықтар үшін бірыңғай микроархитектураға ие. 64-биттік Core 2 Duo жұмыс үстелі, ноутбуктер және серверлер үшін төменнен жоғарыға дейін барлық сегменттерде бар.

Архитектураның көптеген нұсқалары бар, нәтижесінде әртүрлі ядролар саны (бірден төртке дейін, яғни Solo-дан Quad-қа дейін), кэш жады (512 КБ-ден 12 Мбайтқа дейін) және FSB жиілігі (400-ден 1600 МГц-ке дейін) конфигурациялар пайда болады. QDR). Суретте түпнұсқа Core 2 Duo үлгісі көрсетілген, бірақ жылдамырақ нұсқалары да бар (45 нм).

Intel Core 2 Duo
Код атауы Конро
Шығарылған күні 2006
Архитектура 64 бит
Деректер шинасы 64 бит
Мекенжай автобусы 64 (шын мәнінде 36) бит
Макс. жады сыйымдылығы 64 ГБ
L1 кэш 32 + 32 кбайт
L2 кэш Барлығы 2048 кбайт
Сағат жиілігі 1,8-3 ГГц
ФСБ 800-1066-1333 МГц
SIMD MMX, SSE, SSE2, SSE3, SSSE3
SMT/SMP Екі ядро
Техникалық процесс 65 нм
Транзисторлар саны 291 млн
TDP 65 Вт
Вольтаж 1,5 В
Кристалл аймағы 143 мм²
Розетка LGA 775

Мобильді нұсқалар (Merom) негізінен бірдей (бірақ баяу FSB бар жылдам емес) және Extreme Edition опциялары жылдамырақ. Core 2 Duo бір пакетте екі екі ядролы Conroe кристалдарын пайдаланатын төрт ядролы нұсқада да бар. Core 2 Duo (Penryn) 45 нм нұсқасы үлкен кэш көлеміне және аз жылу генерациясына ие, бірақ негізі бірінші үлгідегідей болып қалады.

Болашақ: Нехалем, Атом, т.б.



Үлкейту үшін суретті басыңыз.

Сіз ойлағандай, бұл сериядағы бірінші мақала ғана. Осыдан кейін AMD процессорларына арналған екінші мақала (соның ішінде AMD бейне карталары ATI). Бірақ тарих Intel процессорлары x86 Core 2 Duo-мен аяқталмайды, болашақта бізді жаңа модельдер күтеді. Nehalem және Atom да x86 процессорлары болып табылады. Бірдеңе бізге Intel-тің Larrabee деп аталатын графикалық нарыққа шығуы да бірнеше x86 ядроларында құрылғанын айтады.

x86 немесе x64: Бұл нені білдіреді?

Әрине, бұл белгілеулер көптеген адамдарды тығырыққа тірейді, біз бүгін одан шығамыз.

Ақиқатында x86, x64- биттермен өлшенген операциялық жүйенің бит тереңдігінің белгіленуі ғана (тиісінше 32 және 64 бит). Айтпақшы, 16 бит бар - бірақ тек осы бит тереңдігін түсінетін процессорларды табу өте қиын. Ол үшін 10 жыл артқа шегінуіміз керек. Қалай болғанда да, оларды «таныстыру». x86 немесе x64жүйелер жұмыс істемейді.

Мұның бәрі не үшін?

Мұның бәрі сіздің ДК процессоры жұмыс істейтін сандардың бит тереңдігін анықтауға мүмкіндік береді. Және осы себепті, астында x86 немесе x64жүйелерде бағдарламалардың, драйверлердің және т.б. өз нұсқалары бар.

Жоғары бит тереңдігі (x64), басқалармен қатар, есептеулердің дәлдігін айтарлықтай жақсартуға мүмкіндік береді. Бірақ қарапайым пайдаланушыда мұндай қажеттілік жоқ және ол 64 биттік жүйені пайдаланудың жалғыз себебі - егер Жедел Жадтау ҚұрылғысыСіздің компьютеріңізде 4 гигабайттан асады.

Өйткені, 32 биттік жүйелер 4 гигабайттан артық жедел жадыны «көрмейді».

Сонымен, соңында: x86 немесе x64?

Егер сізде 4 ГБ немесе одан аз жедел жады болса, сізге 32 биттік (x86) жүйе жеткілікті болады. Әйтпесе x64 пайдаланыңыз.

Мен бір кездері бағдарламалардың сипаттамасында x86 немесе x64-ті көргенде қатты абдырап қалдым және неге 64-бит үшін олар x64-ті көрсетсе, онда x32 емес, 32-биттік x86-ны көрсетсе, түсінбей қалдым. Соңғысы әлдеқайда таныс және логикалық болуы керек, және x86 есте сақтау мүмкін емес, бұл сан логикаға қарсы: математикалық 86 64-тен көп, бірақ шын мәнінде ол екі есе көп болып шығады. Осылайша, сіз тіпті «x86 x64 x32» сандарынан жұмбақ жасай аласыз. Бірақ шын мәнінде...

x86 x32-ге тең, сонымен қатар x64-ке тең

Барлық осы шатасушылықпен шын мәнінде бәрі қарапайым болып шығады және әдеттегідей қате x86 және x64 комбинациясын бірге жазатын авторларға түседі. Барлығы дерлік осылай жазатынына қарамастан, бұл дұрыс емес.

Шындығында, x86 - бұл отыз екі және алпыс төрт биттік бағдарламаларға қолданылатын микропроцессорлық архитектура және аппараттық платформа. x86 атауы бірінші Intel i8086 процессорының және оның соңында 86 саны қосылатын бірқатар кейінгілердің атынан шыққан. Біраз уақыттан кейін жаңа процессорлардың цифрлық белгілері атаулармен ауыстырыла бастады жұртшылық Pentium және Celeron туралы білді, бірақ x86 платформасы осы күнге дейін өзгерген жоқ.

Екі мағына бар, бірақ үш таңба? x86, x32 және x64 - қалай дұрыс жазу керек?

Ал егер x86 процессордың архитектурасы болса, онда x32 және x64 оның разрядтық сыйымдылығы – адрестік кеңістік, сонымен қатар процессор бір тактілік циклде өңдей алатын ақпарат көлемі.

Олар 32 биттік платформаны білдіретін x86 бит тереңдігін көрсету арқылы бағдарлама үйлесімділігі туралы жазғанда, бұл дұрыс емес және тек жаңылыстырады. x86_32bit немесе x86_64bit көрсету дұрыс. Немесе интуитивті қысқартылған x32 немесе x64.

Сонымен, біз қорытындылай аламыз: қазір x86 ескі әдіспен көрсетілген (тіпті бұған Microsoft кінәлі), бұл платформа бірегей болған кезде және 64-битті әлі ешкім білмеген.

x64 платформасы пайда болған кезде, олар оны сол күйінде көрсете бастады, бірақ алдыңғы 32-биттік платформа көп жағдайда x86 ретінде қалды. Ал енді ол өзекті емес, дұрыс емес және мәнін түсінбейтіндерді шатастырады. Ал енді сіз оны түсінесіз. :)

x32 немесе x64? Не таңдау керек? Қайсысы жақсы?
Көбінесе сұрақ туындайды: x32 немесе x64 операциялық жүйесін таңдау керек пе? Яғни, отыз екі бит пе, алпыс төрт бит пе?
Бұл сұрақ риторикалық, теориялық және даулы. Әрине, x64 жақсырақ, бірақ Windows жүйесін пайдалансаңыз, әрқашан емес. Жоқ, кез келген Windows x64 жүйесі Windows x32-ге қарағанда сәл жылдамырақ жұмыс істейді, бірақ сізде 64 биттік жүйеге арналған барлық бағдарламалар мен барлық драйверлер болса ғана. Көбінесе, егер компьютер заманауи болса, онда әдетте оның құрамдас бөліктері үшін барлық жүйелік драйверлер болады. Бірақ мәселе бағдарламаларда, әсіресе бейне және аудио кодектерінде жатыр. Бірдеңе болмайтыны сөзсіз. Ал егер отыз екі разрядты бағдарламалар x64 жүйесінде жұмыс істей алатын болса, онда ол үшін драйверлер мен кодектер де x64 қажет. Жылдан жылға бұл мәселе жойылады, бірақ ол әлі толық жойылған жоқ. x32 жүйелерінде мұндай проблемалар жоқ және үйіңіз үшін біреуін таңдаған дұрыс.

p.s. 2010 жылға дейін шынымен 32 биттік немесе 64 биттік операциялық жүйені таңдау дилеммасы болды. Себептер жоғарыдағы параграфта сипатталған. Содан бері бес жыл өтті, бұл мәселе енді байқалмайды. Әрине, 32-биттіктің пайдасына ерекше маңызды себептер болмаса, 64-битті тіпті ойланбастан орнатқан дұрыс. Қазіргі уақытта ең танымал екі процессор архитектурасы бар. Бұл 80-ші жылдары жасалған және пайдаланылған x86дербес компьютерлер

Екі архитектураның да жақсы және жаман жақтары, сондай-ақ қолдану салалары бар, бірақ ортақ ерекшеліктері де бар. Көптеген сарапшылар ARM – бұл болашақ екенін айтады, бірақ оның әлі де x86 жоқ кемшіліктері бар. Бүгінгі мақалада қол архитектурасы x86-дан қалай ерекшеленетінін қарастырамыз. ARM мен x86 арасындағы іргелі айырмашылықтарды қарастырайық, сонымен қатар қайсысы жақсы екенін анықтауға тырысайық.

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

Қосулы қазірАрхитектураның екі түрі бар: CISC (Күрделі нұсқаулар жиынтығын есептеу) және RISC (қысқартылған нұсқаулар жиынтығын есептеу). Біріншісі процессор барлық жағдайларға арналған нұсқауларды орындайды деп болжайды, екіншісі, RISC, әзірлеушілерге жұмыс үшін қажетті ең аз нұсқаулар жиынтығы бар процессорды құру міндетін қояды. RISC нұсқаулары кішірек және қарапайым.

x86 архитектурасы

x86 процессорының архитектурасы 1978 жылы жасалды және алғаш рет Intel процессорларында пайда болды және CISC типті. Оның атауы осы архитектурасы бар бірінші процессордың үлгісінен алынған - Intel 8086. Уақыт өте келе, жақсы балама болмағандықтан, басқа процессор өндірушілері, мысалы, AMD, бұл архитектураны қолдай бастады. Ол енді стандарт болып табылады жұмыс үстелі компьютерлері, ноутбуктер, нетбуктер, серверлер және басқа ұқсас құрылғылар. Бірақ кейде планшеттерде x86 процессорлары қолданылады, бұл өте кең таралған тәжірибе.

Бірінші Intel 8086 процессоры 16 биттік сыйымдылыққа ие болды, содан кейін 2000 жылы 32 биттік архитектуралық процессор шығарылды, тіпті кейінірек 64 биттік архитектура пайда болды. Біз бұл туралы жеке мақалада егжей-тегжейлі талқыладық. Осы уақыт ішінде архитектура өте жақсы дамыды, бұл процессордың өнімділігін айтарлықтай арттыра алатын жаңа нұсқаулар мен кеңейтімдер қосылды;

x86-де бірнеше бар елеулі кемшіліктер. Біріншіден, бұл командалардың күрделілігі, олардың ұзақ даму тарихына байланысты туындаған шатасуы. Екіншіден, мұндай процессорлар тым көп қуат тұтынады және осыған байланысты көп жылу шығарады. x86 инженерлері бастапқыда алу жолын ұстанды максималды өнімділік, ал жылдамдық ресурстарды қажет етеді. X86 қолының арасындағы айырмашылықтарды қарастырмас бұрын, ARM архитектурасы туралы сөйлесейік.

ARM архитектурасы

Бұл архитектура сәл кейінірек x86-дан кейін енгізілді - 1985 жылы. Оны әйгілі британдық Acorn компаниясы әзірледі, содан кейін бұл архитектура Arcon Risk Machine деп аталды және RISC түріне жататын болды, бірақ кейін оның жетілдірілген нұсқасы Advanted RISC Machine шығарылды, ол қазір ARM деп аталады.

Бұл архитектураны әзірлеу кезінде инженерлер x86-ның барлық кемшіліктерін жоюды және мүлдем жаңа және ең тиімді архитектураны құруды мақсат етіп қойды. ARM чиптерінде ең аз қуат тұтыну және төмен баға, бірақ x86-мен салыстырғанда нашар өнімділікке ие болды, сондықтан олар бастапқыда дербес компьютерлерде көп танымал болмады.

x86-ден айырмашылығы, әзірлеушілер бастапқыда алуға тырысты ең аз шығындарресурстарда оларда процессор нұсқаулары аз, транзисторлар аз, сонымен қатар, тиісінше, барлық түрлері аз. қосымша мүмкіндіктер. Бірақ соңғы жылдары ARM процессорларының өнімділігі жақсарып келеді. Осыны және төмен қуат тұтынуды ескере отырып, олар өте кең қолданыла бастады мобильді құрылғыларпланшеттер мен смартфондар сияқты.

ARM және x86 арасындағы айырмашылықтар

Енді біз осы архитектуралардың даму тарихын және олардың түбегейлі айырмашылықтарын қарастырған соң, қайсысы жақсы екенін анықтау және олардың айырмашылықтары неде екенін дәлірек түсіну үшін олардың әртүрлі сипаттамаларына негізделген ARM және x86-ны егжей-тегжейлі салыстырып көрейік.

Өндіріс

Өндіріс x86 және қол әр түрлі. Тек екі компания x86 процессорларын шығарады: Intel және AMD. Бастапқыда бұл бір компания болды, бірақ бұл мүлдем басқа әңгіме. Мұндай процессорларды шығаруға тек осы компаниялар ғана құқылы, яғни инфрақұрылымның даму бағытын тек солар ғана бақылайды.

ARM мүлдем басқаша жұмыс істейді. ARM әзірлейтін компания ештеңе шығармайды. Олар жай ғана осы архитектураның процессорларын әзірлеуге рұқсат береді, ал өндірушілер өздеріне қажет нәрсені жасай алады, мысалы, өздеріне қажет модульдермен нақты чиптерді шығара алады.

Нұсқаулар саны

Бұл arm және x86 архитектурасы арасындағы негізгі айырмашылықтар. x86 процессорлары күштірек және өнімдірек болғандықтан тез дамыды. Әзірлеушілер процессор нұсқауларының үлкен санын қосты және мұнда қарапайым жиынтық емес, онсыз да орындауға болатын көптеген пәрмендер бар. Бастапқыда бұл дискідегі бағдарламалар алатын жад көлемін азайту үшін жасалды. Сондай-ақ қорғау және виртуалдандыру, оңтайландыру және т.б. үшін көптеген опциялар әзірленді. Мұның бәрі қосымша транзисторлар мен энергияны қажет етеді.

ARM оңайырақ. Мұнда процессор нұсқаулары әлдеқайда аз, тек амалдық жүйеге қажет және нақты қолданылатын нұсқаулар. Егер x86-ны салыстырсақ, онда барлығының 30% ғана пайдаланылады мүмкін нұсқаулар. Бағдарламаларды қолмен жазуды шешсеңіз, оларды үйрену оңайырақ, сонымен қатар оларды жүзеге асыру үшін аз транзисторлар қажет.

Энергияны тұтыну

Алдыңғы абзацтан тағы бір қорытынды шығады. Тақтадағы транзисторлар неғұрлым көп болса, оның ауданы мен энергияны тұтынуы соғұрлым үлкен болады, керісінше де дұрыс.

x86 процессорлары ARM қарағанда әлдеқайда көп қуат тұтынады. Бірақ қуатты тұтыну транзистордың өлшеміне де әсер етеді. Мысалы, Intel i7 процессоры 47 Вт тұтынады, ал кез келген ARM смартфон процессоры 3 Вттан аспайды. Бұрын бір элементтің өлшемі 80 нм болатын тақталар шығарылды, содан кейін Intel 22 нм-ге дейін қысқартуға қол жеткізді, ал биыл ғалымдар 1 нанометр элементінің өлшемі бар тақтаны жасай алды. Бұл өнімділікті жоғалтпай қуат тұтынуды айтарлықтай азайтады.

Соңғы жылдары x86 процессорларының қуат тұтынуы айтарлықтай төмендеді, мысалы, жаңа Intel Haswell процессорлары батареяда ұзағырақ жұмыс істей алады. Енді қол мен x86 арасындағы айырмашылық бірте-бірте жойылуда.

Жылудың таралуы

Транзисторлардың саны басқа параметрге әсер етеді - жылу генерациясы. Қазіргі заманғы құрылғылар барлық энергияны тиімді әрекетке айналдыра алмайды, оның бір бөлігі жылу түрінде бөлінеді. Тақталардың тиімділігі бірдей, яғни транзисторлар аз және олардың өлшемі неғұрлым аз болса, процессор соғұрлым аз жылу шығарады. Бұл жерде енді ARM немесе x86 аз жылу шығарады ма деген сұрақ туындамайды.

Процессор өнімділігі

ARM бастапқыда максималды өнімділікке арналмаған, мұнда x86 керемет. Бұл ішінара транзисторлар санының аздығына байланысты. Бірақ жақында ARM процессорларының өнімділігі артып келеді және оларды ноутбуктерде немесе серверлерде толығымен пайдалануға болады.

Қорытындылар

Бұл мақалада біз ARM-тің x86-дан айырмашылығын қарастырдық. Айырмашылықтар өте маңызды. Бірақ соңғы уақытта екі архитектураның арасындағы сызық бұлыңғыр болды. ARM процессорлары өнімдірек және жылдамырақ болып келеді, ал x86 процессорлары тақтаның құрылымдық элементінің көлемінің кішіреюінің арқасында қуатты аз тұтынады және аз жылу шығара бастайды. Сіз ARM процессорларын серверлер мен ноутбуктерде, ал x86 планшеттер мен смартфондарда таба аласыз.

Бұл x86 және ARM туралы не ойлайсыз? Сіздің ойыңызша, болашақ қандай технология? Пікірлерде жазыңыз! Айтпақшы, .

ARM архитектурасының дамуы туралы бейнені қорытындылау:

x86-64 - AMD әзірлеген x86 архитектурасына арналған 64 биттік кеңейтім, ол бағдарламаларға 64 биттік режимде жұмыс істеуге мүмкіндік береді.

Әңгіме

Түпнұсқа спецификацияны 2000 жылы AMD әзірледі. Архитектураны енгізген бірінші процессор AMD K8 болды (2003 жылы шығарылған).

Сол жылдары (тоқсаныншы жылдардың соңы мен 2000 жылдардың басы) HP мен Intel өздерінің 64 биттік IA-64 (Intel Itanium) архитектурасын әзірледі. Бірақ ол VLIW (өте ұзақ нұсқау сөзі) принципіне негізделген түбегейлі басқаша болды және 32-биттік x86 архитектурасымен үйлеспейді. Бұрын жазылған бағдарламалық қамтамасыз етудің үлкен көлемі IA-64-те жұмыс істемегендіктен, бұл архитектура танымал бола алмады. 2001 жылдың соңында IA-64 үшін IA-64 үшін Windows XP 64-биттік арнайы нұсқасы шығарылды.

x86 архитектурасы 1978 жылдан басталады, 16 биттен басталып, 1985 жылы 32 биттікке айналды. Архитектурада кері үйлесімділік үшін көптеген балдақтар бар. Ол 32-биттік есептеулермен бірге өледі деп болжанған. Дегенмен, x86-64 пайда болуы оған жаңа өмір берді.

Атау

Бұл технологияның бірнеше түрлі атаулары бар, олар кейде шатасуға әкеледі.

  • x86-64- түпнұсқа нұсқасы. Дәл осы атаумен AMD алғашқы алдын ала сипаттаманы жариялады.
  • x64- операциялық нұсқалардың ресми атауы Windows жүйелері, сонымен қатар Microsoft және Oracle архитектура атауы ретінде пайдаланылады.
  • AMD64- бірінші Clawhammer және Sledgehammer процессорлары шыққаннан кейін сәулет атауында AMD әзірлеуші ​​компаниясының атауы пайда болды. Қазір AMD енгізу үшін ресми.
  • EM64T- Intel іске асырудың алғашқы ресми атауы. Ол кеңейтілген жад 64 технологиясын білдіреді.
  • Intel 64 Intel архитектурасының қазіргі ресми атауы.

Кейде AMD туралы ескерту пайдаланушыларды адастырып, олар AMD нұсқасы олардың Intel процессорында жұмыс істемейтініне сілтеме жасай отырып, операциялық жүйенің жергілікті нұсқаларының дистрибутивтерін пайдаланудан бас тартады. Шын мәнінде, бағдарламалық қамтамасыз етуді таратушылар amd64 атауын тек AMD осы технологияны дамытуда пионер болғандықтан ғана пайдаланады.

Пайдаланушылар жиі x86-64 архитектурасын IA-64-пен шатастырады. Мұндай қателерді болдырмау үшін Intel 64 және IA-64 бір-бірімен үйлеспейтін мүлдем басқа микропроцессорлық архитектуралар екенін есте ұстаған жөн. 2017 жылы IA-64 (Itanium) архитектуралық процессорын кез келген жерден табу екіталай.

Таралуы

Суперкомпьютерлер

ТОП-500 суперкомпьютерлер тізімінде x86-64 архитектурасы бұрын танымал болған RISC архитектурасы мен 32-биттік нұсқаларын ауыстырды. Intel өзінің Itanium-ды (максималды үлес 2004 жылы жеткен) алға жылжытуға тырысты, бірақ нәтиже болмады.

Деректер орталықтары

x86 чиптерін пайдаланатын серверлер әлі де нарықтың 90 пайыздан астам үлесін сақтайды. http://www.common.org/servers/x86-servers-data-center/

Барлық Google деректер орталықтары қазір белгілі x86 архитектурасы бар Intel процессорларын пайдаланады. Дегенмен, Google балама шешімдерді қолдануды жоспарлап отыр. https://habrahabr.ru/company/ibm/blog/282820/

2017 жылы көптеген жағдайларда үлкен көлемдегі ақпаратты өңдеу алгоритмдері x86-64 архитектурасында орындалады, сондықтан біз оны AiSOBOI магистратурасында қарастырамыз.

Тіркеулер

x86-64 архитектурасында:

  • 16 64 разрядты бүтін регистрлер жалпы мақсат(RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15);
  • 8 80-разрядты өзгермелі нүкте регистрлері (ST0 - ST7);
  • 8 64-разрядты MMX регистрлері (MM0 - MM7, ST0 - ST7 регистрлерімен кеңістікті бөлісу);
  • 16 128-биттік SSE регистрлері (XMM0 - XMM15);
  • 64-биттік RIP көрсеткіші және 64-биттік RFLAGS жалау регистрі.

64-разрядты регистрлердегі амалдар (қосу, алу және т.б.) 32-разрядты регистрлердегі операциялар сияқты уақытты алады.

Бұл таңқаларлық болып көрінуі мүмкін, бірақ регистрлердің төменгі 32 биттік жартыларындағы әрекеттер жоғарырақ 32 биттерді қалпына келтіреді. Мысалы,

mov eax, ebx

rax ішіндегі ең маңызды биттерді автоматты түрде қалпына келтіреді.

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

Қазіргі заманғы процессор өте күрделі. Архитектура нұсқаулығында сипатталған процессор үлгісі қазіргі ядроның нақты жұмыс механизмін барабар сипаттамайды. Атап айтқанда, процессор регистрлері туралы түсінік дұрыс емес аппараттық құралда eax немесе rax регистрлері жоқ; Процессорлық регистрлер концепциясы виртуализацияланған. Бұл технология деп аталады регистрлердің атын өзгерту(тіркеу атын өзгерту). Нұсқаулық декодер регистрлердің үлкен банкінен регистрді бөледі. Нұсқау аяқталған кезде, осы динамикалық түрде бөлінген регистрдің мәні қазіргі уақытта мәнді ұстап тұрған кез келген регистрге қайта жазылады, айталық rax. Бұл жұмысты тиімді орындау және бір уақытта бірнеше нұсқауларды орындау үшін операциялардың өзара тәуелділігінің болмауы өте маңызды. Регистрдің мәні басқа нұсқауларға байланысты болса, бұл жаман.

Нұсқаулар

x86-64 түріне жатады CISC(күрделі нұсқаулар жиынтығын есептеу). Бұл дерлік жалғыз заманауи CISC архитектурасы. Басқа танымал архитектуралар принципке негізделген RISC(қысқартылған нұсқаулар жинағы компьютер).

Сонымен бірге қазіргі заманғы x86 процессорлары CISC-үйлесімді болса да, RISC ядросы бар процессорлар болып табылады және ресми мағынада гибридті болып саналады. Мұндай гибридті CISC процессорларында CISC нұсқаулары ішкі RISC нұсқауларының жиынтығына түрлендіріледі, ал бір x86 нұсқауы бірнеше RISC нұсқауларын құра алады, ал нұсқаулар суперскалярлық конвейерде бір уақытта бірнеше орындалады. Шағын нұсқауларды бір уақытта орындау оңай.

Нұсқаулар практикада 1-ден 15 байтқа дейінгі айнымалы ұзындықтағы байттардың тізбегі ретінде кодталады.

Жойылған мүмкіндіктер

x86-64 нұсқаларында x86-мен салыстырғанда кейбір ескірген нұсқаулар жойылды. Бұл BCD арифметикалық және aam (ASCII көбейту үшін реттеу) нұсқаулары. Дегенмен, ескірген нұсқаулардың көпшілігі қалады.

Режимдер

Бұл архитектураның процессорлары екі жұмыс режимін қолдайды: ұзақ режим және бұрынғы режим (32-биттік x86-мен үйлесімді).

Ұзақ режим

«Ұзын» режимі x86-64 процессорлары үшін «туған». Бұл режим архитектура ұсынатын барлық қосымша артықшылықтарды пайдалануға мүмкіндік береді. Бұл режимді пайдалану үшін 64 биттік операциялық жүйе қажет.

Бұл режим 64 биттік бағдарламаларды іске қосуға мүмкіндік береді; сонымен қатар (кері үйлесімділік үшін) қолдау 32 биттік қолданбалар сияқты 32 биттік кодты іске қосу үшін қамтамасыз етіледі, бірақ 32 биттік бағдарламалар 64 биттік жүйелік кітапханаларды пайдалана алмайды және керісінше. Бұл мәселені шешу үшін 64 биттік операциялық жүйелердің көпшілігі екі қажетті жиынтықты қамтамасыз етеді жүйелік файлдар: біреуі 64 биттік жергілікті қолданбаларға, екіншісі 32 биттік бағдарламаларға арналған.

Бұрынғы режим

Бұл «бұрынғы» режим процессорға x86 процессорларына арналған нұсқауларды орындауға мүмкіндік береді және 32-биттік кодпен және операциялық жүйелермен толық үйлесімділікті қамтамасыз етеді. Бұл режимде процессор дәл Athlon немесе Pentium III сияқты x86 процессоры сияқты әрекет етеді және x86-64 архитектурасы қамтамасыз ететін қосымша мүмкіндіктер (мысалы, қосымша регистрлер) қол жетімді емес. Бұл режимде 64-биттік бағдарламалар және операциялық жүйелержұмыс істемейді.

Бұл режим ішкі режимдерді қамтиды:

  • Нақты режим
  • Қорғалған режим
  • Виртуалды 8086 режимі

MS-DOS жүйесінде нақты режим қолданылды, нақты режимде компьютер жүктелген кезде BIOS коды орындалды. Қорғалған режим қазіргі көп тапсырмалы операциялық жүйелердің 32 разрядты нұсқаларында қолданылады. Виртуалды 8086 режимі негізінен деп аталатындарды жасауға арналған қорғалған қосалқы режим болып табылады. «виртуалды DOS машиналары». Егер 32 биттен бастап Windows нұсқаларыЕгер сіз 16-биттік DOS қолданбасын іске қоссаңыз, онда осы процессор режимін пайдаланатын NTVDM эмуляторы жұмыс істейді. Басқа эмулятор, DOSBox, бұл V86 режимін пайдаланбайды, бірақ толық эмуляцияны орындайды.

Режимдер арасында ауысу

Қайта жүктеусіз ұзақ режимнен нақты немесе виртуалды 8086 режиміне өту мүмкін емес. Сондықтан NTVDM Windows жүйесінің 64 биттік нұсқаларында жұмыс істемейді және 16 биттік бағдарламаларды іске қосу мүмкін емес.

Ең заманауи x86-64 процессоры нақты режимді толығымен қолдайды. Егер жүктеу BIOS арқылы орындалса, жүктеуші коды (№0 сектордан) нақты режимде орындалады. Алайда, егер BIOS орнына UEFI пайдаланылса, онда Ұзақ режимге көшу одан да ертерек жүреді және нақты режимде ешқандай код орындалмайды. Солай деп санауға болады заманауи компьютербірден 64 биттік ұзақ режимде жұмыс істей бастайды.

Жадтағы адрестерді аудару

Қарапайым тілмен айтқанда, процессор жадқа автобус арқылы қол жеткізеді. Шинада алмасатын жад адрестері физикалық адрестер болып табылады, яғни нөлден қол жетімділіктің жоғарғы шегіне дейінгі өңделмеген сандар. физикалық жады(мысалы, 8 ГБ жедел жады орнатылған болса, 2 33 дейін). Бұрын солтүстік көпір процессор мен жад микросхемаларының арасында орналасқан, бірақ Intel іске асыруда Sandy Bridge-тен бастап, ол процессор қалыбына біріктірілген.

Физикалық мекенжайлар нақты және түпкілікті болып табылады - аудармасыз, айырбастаусыз, артықшылықты тексеру жоқ. Сіз оларды автобусқа отырғызасыз, сонда болды. Дегенмен, бағдарламалар логикалық жады мекенжайларын пайдаланады, олар жадқа қол жеткізу алдында физикалық адрестерге аударылуы керек. Тұжырымдама бойынша хабар келесідей көрінеді:

Бұл физикалық диаграмма емес, тек мекенжайды аудару процесінің сипаттамасы.

Аудару процессор жад мекенжайына сілтеме жасайтын нұсқауды орындаған кезде басталады. Бірінші қадам – бұл логикалық адресті сызықтық адреске аудару. Бірақ, сұрақ туындайды, неге бұл бағдарламада сызықтық адрестерді тікелей пайдаланудың орнына жасайды? Бұл эволюцияның нәтижесі. X86 сегментациясының мәнін шынымен түсіну үшін 1978 жылға оралу керек.

Нақты режимдегі жадты сегменттеу

16-разрядты 8086 процессоры 16-разрядты регистрлерді қолданды және тек 2-16 байт жадты тікелей адрестей алады. Инженерлер оны регистрдің сыйымдылығын кеңейтпестен үлкен жадымен қалай жұмыс істеуге болатынын анықтады.

Сегменттік регистрлер ойлап табылды, олар берілген 16 разрядты адрестің 64 килобайттық жад бөлігіне жататынын анықтауы керек еді.

Шешім қисынды болып көрінеді: алдымен сегменттік регистрді орнатыңыз, ол «жарайды, мен X мекенжайынан басталатын жад бөлігімен жұмыс істегім келеді» деп айтасыз; онда 16-биттік мекенжай осы бөлікте офсет ретінде бұрыннан пайдаланылады.

Барлығы төрт 16 разрядты сегменттік регистрлер бастапқыда қамтамасыз етілді, содан кейін тағы екеуі қосылды:

  • CS = Код сегменті
  • DS = Деректер сегменті
  • ES = Destination Segment
  • SS = Стек сегменті

Жад ұяшығының сызықтық мекенжайын есептеу үшін процессор сегменттің басының физикалық мекенжайын есептейді - виртуалды мекенжайдың сегменттік бөлігін 16 санына көбейтеді (немесе ол бірдей, оны солға 4-ке жылжытады) бит), содан кейін алынған санды сегменттің басынан ығысуымен қосады. Осылайша, сегменттер ішінара қабаттасып, барлығы шамамен 1 Мбайт физикалық жадты шешуге болады. Сұрақ туындайды: неге бірден сегменттік регистрдің мәнін 65536-ға көбейтпеске, өйткені сонда 4 ГБ жадты адрестеу мүмкін болар еді. Содан кейін бұл қажет емес және тек чиптің құнын арттырды.

Нақты режимде жадты қорғау немесе кіру құқығы жоқ.

Бағдарламалар шағын болды, сондықтан олардың стекі мен коды толығымен 64 Кбайтқа сәйкес келеді, ешқандай проблемалар болмады. Сол көне дәуірдегі Си тілінде қалыпты көрсеткіш 16 разрядты болды және әдепкі сегментке қатысты бағытталған, бірақ сегмент регистрінің мәнін қамтитын алыс көрсеткіштер де болды.

#қосу int main() ( char far * p = (char far * ) 0x55550005 ; char far * q = (char far * ) 0x53332225 ; * p = 80 ; (* p)++; printf («%d» ,* q ) қайтару ;

Мұнда екі көрсеткіш бірдей физикалық 0x55555 мекенжайын көрсетеді.

Қорғалған режим

32-биттік қорғалған режимде сегменттелген жады моделі де қолданылады, бірақ басқа принцип бойынша ұйымдастырылған: сегменттердің орналасуы жедел жадта орналасқан арнайы құрылымдармен (дескриптор кестелері) сипатталады.

Жад сегменттері де сол сегменттік регистрлер арқылы таңдалады. Сегмент регистрінің мәні (сегмент селекторы) енді өңделмеген мекенжай емес, оның орнына келесідей құрылым болып табылады:

Дескриптор кестелерінің екі түрі бар: ғаламдық (GDT) және жергілікті (LDT). Ғаламдық кесте операциялық жүйе сегменттерін және ортақ деректер құрылымдарын сипаттайды, әрбір ядро ​​​​өзіне тән. Жергілікті кесте әрбір нақты тапсырма (процесс) үшін анықталуы мүмкін. TI биті GDT үшін 0 және LDT үшін 1. Индекс сегмент дескрипторлар кестесіндегі дескриптор нөмірін көрсетеді. RPL өрісі Сұралған артықшылық деңгейін білдіреді.

Кестенің өзі жай ғана 8 байт жазбалары бар массив (сегмент дескрипторлары), мұнда әрбір жазба бір сегментті сипаттайды және келесідей көрінеді:

Сегменттің негізгі мекенжайынан басқа, дескрипторлар сегменттің өлшемін (дәлірек айтқанда, максималды қол жетімді ығысу) және жадты қорғау және сегментке қол жеткізу құқықтарын анықтау үшін қолданылатын әртүрлі сегмент атрибуттарын қамтиды. бағдарламалық модульдер. Негізгі мекенжай сегменттің басын көрсететін 32 биттік сызықтық адрес болып табылады, ал шек сегменттің қаншалықты үлкен екенін анықтайды. Логикалық жады мекенжайына негізгі мекенжайды қосу сызықтық адрес береді (енді 16-ға көбейту болмайды). DPL (Descriptor Privilege Level) – дескриптордың артықшылық деңгейі; бұл сегментке кіруді басқаратын 0-ден (ең артықшылықты, ядро ​​режимі) 3-ке (ең аз артықшылықты, пайдаланушы режимі) дейінгі сан.

Орталық процессор 32-биттік режимдерде болғанда, регистрлер мен нұсқаулар бәрібір бүкіл сызықтық мекенжай кеңістігін шеше алады. Неліктен негізгі мекенжайды нөлге қойып, логикалық мекенжайлар сызықтық адрестермен бірдей болсын? Intel мұны «жалпақ модель» деп атайды және дәл қазіргі заманғы x86 ядролары дәл осылай жасайды. Бұл сегменттеуді өшіруге тең.

Ұзақ режим

X86-64 архитектурасында ұзын (64 бит) режим сегменттеуді пайдаланбайды. Төрт сегменттік регистрлер (CS, SS, DS және ES) 0 негізгі мекенжайына ие болуға мәжбүр. FS және GS сегменттік регистрлер әлі де нөлдік емес базалық мекенжайға ие болуы мүмкін. Бұл операциялық жүйеге оларды қызмет көрсету мақсатында пайдалануға мүмкіндік береді.

Мысалы, Microsoft Windows x86-64 жүйесінде ерекше жағдайларды өңдеу, ағынның жергілікті айнымалы мәндері және әр ағындағы басқа ақпарат туралы ақпаратты қамтитын әрбір ағынға арналған шағын құрылымды ағын ортасының блогына көрсету үшін GS пайдаланады. Сол сияқты, Linux ядросы әр CPU деректерін сақтау үшін GS сегментін пайдаланады.

Тәжірибе: Регистрлерді қарау

(gdb) info the Rax 0x40052D 4195629 RBX 0x400 0 rbx 0x0 0 rbx 0x0 0 rcx 0x 0x0 0 rdx 0x 0x0 0x 0x7737488346728 RDE 0x7737488346728 RDI 0X7FFFF DD80 0x7FFFFDD80 r SP 0x7fffffffer80 r8 0x7fffff7ddd4e80 1407373535186333737351863936 r9 0x7ffff7dea700 140737351952128 R10 0x7fffffDC10737374883 46128 R11 ₸ 225-00 Бағалаусыз 608 R12 0x400440 4195392 R13 0x7ffffffde60 140737488346720 R14 0x0 0 r15 0x0 0 rip 0x400531 0x400531 flags 0x246 [ PF ZF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0

Қорғаныс сақиналары

Intel x86 компьютерлерінде қолданбалардың шектеулі рұқсаттары бар екенін және тек операциялық жүйе коды белгілі бір тапсырмаларды орындай алатынын интуитивті түрде білетін шығарсыз. Бұл қалай жұмыс істейді? x86 артықшылық деңгейлері - бұл ОЖ мен орталық процессордың пайдаланушы режимі бағдарламаларының мүмкіндіктерін шектейтін механизм. Төрт артықшылық деңгейі бар, олар 0-ден (ең артықшылықты) 3-ке дейін (ең аз артықшылықтар) және үш негізгі ресурстар: жад, енгізу/шығару порттары және нақты машина нұсқауларын орындау мүмкіндігі. Кез келген уақытта x86 процессоры белгілі бір артықшылық деңгейінде жұмыс істейді, ол қандай кодты орындай алатынын және жасай алмайтынын анықтайды. Бұл артықшылық деңгейлері көбінесе қорғаныс сақиналары ретінде сипатталады, ішкі сақина ең жоғары артықшылықтарға сәйкес келеді. Көптеген заманауи x86 ядролары тек Ring 0 және Ring 3 пайдаланады.

Виртуалды мекенжай кеңістігі

Виртуалды мекенжайлардың ені 64 бит болса да, ағымдағы іске асырулар (және дизайндағы барлық чиптер) бүкіл 2 64 байт (16 экзабайт) виртуалды мекенжай кеңістігін пайдалануға мүмкіндік бермейді. Бұл 32-биттік машиналардағы виртуалды мекенжай кеңістігінен шамамен төрт миллиард есе көп болар еді. Жақын болашақта операциялық жүйелер мен қосымшалардың көпшілігі мұндай үлкен мекенжай кеңістігін қажет етпейді, сондықтан мұндай кең виртуалды мекенжайларды енгізу ешқандай нақты пайдасыз мекенжай аудармасының күрделілігі мен құнын арттырады. Сондықтан, AMD архитектураның алғашқы іске асыруларында мекенжайларды аудару кезінде виртуалды мекенжайдың тек төменгі 48 биті ғана пайдаланылады деп шешті.

Сонымен қатар, AMD спецификациясы кез келген виртуалды мекенжайдың ең маңызды 16 биті, 48-ден 63-ке дейінгі бит 47 биттің көшірмелері болуы керек (белгіні кеңейту принципін пайдалана отырып). Егер бұл талап орындалмаса, процессор ерекше жағдайды шығарады. Осы ережеге бағынатын адрестер «канондық форма» деп аталады. Канондық мекенжайлардың барлығы 256 терабайт қолданылатын виртуалды мекенжай кеңістігі. Бұл әлі де 32 биттік машиналардағы 4 ГБ виртуалды мекенжай кеңістігінен 65536 есе үлкен.

Бұл конвенция қажет болған жағдайда шынайы 64 биттік адрестеу үшін масштабтауға мүмкіндік береді. Көптеген операциялық жүйелер (соның ішінде Windows NT отбасы және GNU/Linux) мекенжай кеңістігінің жоғары жартысын (ядро кеңістігі) алады және қолданба коды, пайдаланушы режимі стегі, үйме және басқа деректер үшін төменгі жартысын (пайдаланушы кеңістігі) қалдырады. аймақтар. «Канондық мекенжай» дизайны әрбір AMD64-үйлесімді іске асырудың екі жарты жадқа ие болуын қамтамасыз етеді: төменгі жартысы виртуалды мекенжай биттері қолжетімді болған сайын «өседі», ал жоғарғы жартысы керісінше мекенжай кеңістігінің жоғарғы жағында және төмендейді. .

Windows жүйесінің алғашқы x64 нұсқалары тіпті барлық 256 ТБ-ны пайдаланбады; олар тек 8 ТБ пайдаланушы кеңістігімен және 8 ТБ ядро ​​кеңістігімен шектелді. Бүкіл 48 биттік мекенжай кеңістігі 2013 жылдың қазан айында шыққан Windows 8.1 жүйесінде қолдау тапты.

Бет кестесінің құрылымы

32-биттік x86 жүйелері пайдаланатын екі деңгейлі беттік кесте жүйесінің орнына ұзақ режимді жүйелер бет кестелерінің төрт деңгейін пайдаланады.

Ықтимал бет өлшемдері:

  • 4 КБ (2 12 байт) - ең жиі пайдаланылады (x86 сияқты)
  • 2 МБ (2 21 байт)
  • 1 ГБ (2 30 байт)

Бүкіл 48 биттік кеңістікке арналған толық 4 КБ бетті салыстыру иерархиясы 512 ГБ жедел жадтан сәл асады (256 ТБ виртуалды кеңістіктің шамамен 0,195%).

Тәжірибе: ол қаншалықты тез құлайды?

Бұл код стандартқа сәйкес дұрыс емес екені анық, оның құрамында Undefined Behavior бар, ал егер солай болса, компилятор кез келген нәрсені жасай алады, мысалы, мүлде бұзылмайды. Бірақ соған қарамастан, егер сіз оны x86-64 жүйесінде іске қоссаңыз, ол белгілі бір сәтте бұзылады ...

#қосу #қосу char buf[1]; #define PAGE_SIZE 4096 int main() ( char * ptr = buf; үшін (;; ) ( int офсет = (intptr_t ) ptr % PAGE_SIZE; printf ("%p: офсет = %d\n" , ptr, ығысу);* ptr = "a" ;

// Сегменттеу қатесі күтілуде!

++ptr;

) 0 қайтарады;

)

Стек ұйымдастыру және функциялық шақырулар

x86-64-те, x86-мен салыстырғанда, жалпы мақсаттағы регистрлердің саны айтарлықтай өсті (екі есе), бұл жақсы жаңалық. Сондықтан функцияларға аргументтерді беру үшін көбірек регистрлерді пайдалануға болады, бұл ретте стек жадын аз пайдалана отырып, функция шақыруларын жылдамдатады.

x86 ішіндегі стек

Стек төмен қарай өседі. Стектің жоғарғы жағында ең төменгі мекенжай бар.

Арнайы регистр rsp (Stack Pointer) қолданылады.

x86-64-те, x86-мен салыстырғанда, жалпы мақсаттағы регистрлердің саны айтарлықтай өсті (екі есе), бұл жақсы жаңалық. Сондықтан функцияларға аргументтерді беру үшін көбірек регистрлерді пайдалануға болады, бұл ретте стек жадын аз пайдалана отырып, функция шақыруларын жылдамдатады.

Стек төмен қарай өседі. Стектің жоғарғы жағында ең төменгі мекенжай бар.

Нұсқаулар

Раксты итеріңіз

эквивалент

Sub rsp, 8 mov, rax

Mov rax, rsp қосыңыз, 8

Linux шақыру конвенциясы

Linux және басқа операциялық жүйелер System V AMD64 ABI конвенциясын пайдаланады.

Қарапайымдылық үшін біз бүтін аргументтер мен көрсеткіштермен шектелеміз.

Алғашқы алты аргумент регистрлер арқылы беріледі:

Егер бұл жеткіліксіз болса, жетінші аргумент стек арқылы өтіп қойған.

Егер функция rbx, rbp және r12–r15 регистрлерін пайдаланғысы келсе, ол шығу алдында оларды бастапқы күйіне қайтаруы керек.

64 битке дейінгі қайтарылатын мән rax-та, 128 битке дейін - rax және rdx-де сақталады.

Стек жақтауы

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

Бұл оңтайландыру. RSP азайту және арттыру қазірдің өзінде екі нұсқау болып табылады, оларды сақтауға болады.

Мысалы:

long utilfunc(ұзын a, long b, long c) ( ұзын xx = a + 2; ұзын yy = b + 3; ұзын zz = c + 4; ұзын қосынды = xx + yy + zz; қайтару xx * yy * zz + сомасы)

Жақтаудың негізгі көрсеткішін сақтау

rbp көрсеткіші (және x86-дағы оның ізашары ebp) функцияны орындау кезінде стек кадрының басына тұрақты «зәкір» бола отырып, қолмен бағдарламалау және жөндеу үшін өте ыңғайлы. Дегенмен, біраз уақыт бұрын компилятор жасайтын кодқа rbp қажет емес екені байқалды (компилятор rsp-тен ығысуларды оңай бақылай алады).

Сондықтан кейбір компиляторлар агрессивті оңтайландырулар кезінде негізгі көрсеткішті өткізіп жібере бастады, осылайша функцияның прологы мен эпилогын қысқартады және жалпы мақсаттар үшін қосымша регистрді қамтамасыз етеді.

gcc әдепкі негізгі көрсеткішті x86-де сақтайды, бірақ -fomit-frame-pointer компиляция жалауымен оңтайландыруға мүмкіндік береді.

Қалай болғанда да, AMD64 ABI ұсынған тағы бір «жаңа нәрсе» негізгі көрсеткішті анық түрде міндетті емес етеді. gcc осы ұсынысты орындайды және оңтайландырумен құрастырылған кезде әдепкі бойынша x64 кадр көрсеткішін өткізбейді. Ол -fno-omit-frame-көрсеткіш жалаушасын көрсету арқылы оны сақтау мүмкіндігін береді.

Windows шақыру шарты

Сәлем, енді cdecl/stdcall/fastcall/thiscall/register/safecall жоқ, тек бір ғана шақыру шарты қалды! Бірақ жоқ, Microsot векторлық қоңырауды әзірледі...

Алғашқы төрт аргумент регистрлер арқылы беріледі: rcx, rdx, r8, r9.

Функция rbx, rbp, rdi, rsi, rsp, r12, r13, r14 және r15 регистрлерін бастапқы күйіне қайтаруы керек.

Тәжірибе: сандардың қосындысы 3 : c3 рет

Жүйелік қоңыраулар

Жүйелік шақыруды орындау механизмдері

C функциялары

Open() , write() , getpid() сияқты кез келген жүйе функциясын C кодынан шақырғанда, сіз жүйенің өзін тікелей шақырмайсыз. Функцияны шақыру арқылы сіз жай ғана ядро ​​режиміне (қоңырау 0) пайдаланушы режимінен (3 қоңырау) ауыса алмайсыз. Ішкі орындалатын әдеттегі функциялар деп аталады стандартты кітапхана, және ішінде олар бір немесе басқа әдісті пайдаланып жүйелік қоңырау жасайды:

  • бағдарламалық қамтамасыз етуді үзу арқылы,
  • жүйелік нұсқау арқылы,
  • sysenter нұсқаулары арқылы.

Бағдарламалық қамтамасыз етудің үзілуі

Үзілістер процессорға ағымдағы кодтың орындалуын үзу (сондықтан да олар үзілістер деп аталды) және өңдегіште көрсетілген нәрсені шұғыл орындау қажет екендігі туралы сигнал сияқты.

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

Бағдарламалық үзіліс – бұл бағдарлама арнайы нұсқау арқылы жүзеге асыра алатын синхронды үзу.

x86 процессорларында синхронды үзуді анық шақыру үшін дәлелі үзу нөмірі болып табылатын int нұсқауы бар (0-ден 255-ке дейін). Қорғалған және ұзақ режимде тұрақты бағдарламаларқызмет үзулері мүмкін емес, бұл функция тек жүйелік кодта (операциялық жүйе) қол жетімді.

Linux ОЖ-де жүйелік қоңырауларды орындау үшін 0x80 үзу нөмірі пайдаланылады. 0x80 үзу өңдеушісі Linux ядросы болып табылады. Үзуді орындау алдында программа орындалатын жүйелік шақырудың нөмірін eax регистріне орналастырады. Басқару 0 қоңырауына ауысқанда, ядро ​​бұл нөмірді оқиды және қажетті функцияны шақырады.

Бұл әдіс 32-биттік жүйелерде кеңінен қолданылған, ол ескірген болып саналады және пайдаланылмайды, бірақ ол бірқатар шектеулермен (мысалы, сіз) жұмыс істейді (дәрісте мысал келтірілген); 64 биттік көрсеткішті параметр ретінде өткізе алмайды).

  • Жүйелік қоңырау нөмірін eax жүйесіне қойыңыз.
  • Аргументтерді ebx, ecx, edx, esi, edi, ebp регистрлеріне орналастырыңыз.
  • int 0x80 нұсқаулығын шақырыңыз.
  • Нәтижені eax сайтынан алыңыз.

Ассемблер тілінде mygetpid() іске асыру мысалы (ағымдағы процестің PID алу) (20 саны getpid жүйесін шақыру үшін пайдаланылады):

Intel_синтаксистік префиксі. globl mygetpid .text mygetpid: mov eax , 20 int 0x80 ret

жүйелік нұсқау

Бұл 64 биттік Linux жүйесінде қолданылатын заманауи әдіс және жылдамырақ жұмыс істейді.

  • Жүйелік қоңырау нөмірі rax қойылады.
  • Аргументтер rdi, rsi, rdx, r10, r8 және r9-ға жазылады.
  • Содан кейін жүйе шақырылады.
  • Нәтиже ракста.

Ассемблерде mygetpid() іске асыру мысалы (ағымдағы процестің PID алу) (кестеден getpid жүйесін шақыру үшін 39 нөмірі пайдаланылады):

Intel_синтаксистік префиксі. globl mygetpid .text mygetpid: mov rax , 39 syscall ret

Жүйелік қоңырауларды қадағалау

Linux жүйесінде пайдаланушы режимі құралының сызбасы берілген бағдарлама жасайтын жүйелік қоңырауларды қадағалауға мүмкіндік береді.