Вътрешната структура на процесор Pentium. Блокове и конвейери.
Важно!! Тези лекции не са предвидени за директен copy-paste на контролното. Прочетете ги внимателно, и ги научете. Хора с еднакви контролни ще бъдат санкционирани! Да не кажете после, че не сте предупредени
страницата се нуждае от дописване/преглеждане
Вътрешна структура на процесора
Процесорите Pentium са с така наречената X86 архитектура. Тези процесори изглеждат външно като CISC , но са реализирани на базата на RISC-процесор (програмистът може да подаде на процесора сложна(CISC) инструкция, а той вътрешно я реализира чрез повече по-прости (RISC) инструкции).
- Шинният интерфейс управлява 64-битова шина за данни и 32 битова адресна шина. Архитектурата х86 е 32 битова, процесора работи само с 32 битови операнди и такива са адресите, но 64 битовата шина ускорява преноса на данни от ОП към процесора.
- Кешовете за данни и инструкции са по 8 килобайта всеки и те правят по-бърза работата на процесора.
- TLB(transfer location block) – това е блок към всеки кеш, който преобразува адресите. Той приема ефективен адрес, преобразува го в линеен и след това във физически. EA -> LA -> PA . Обърнете внимание, че и 2та буфера имат такъв блок, който променя подадените им адреси, към такива, с които може да се адресира в самия кеш (а не в RAM).
- BTB (branch trace block (buffers)) – като постъпи в процесора branch инструкция в този блок се записва дали е изпълнен прехода. В специален буфер се записват преходите с техните адреси и дали са изпълнени (<address> taken / not taken <destination address>). Буферът трасира последните 256 branch инструкции и има брояч, който записва колко пъти са и не са изпълнени. Този брояч натрупва данни. Спрямо статистиката УУ приема инструкцията и залага (спекулира) дали ще има преход или няма да има. Ако не е познал се прекъсва конвейера. Това се прави при допълнителната дешифрация. Нормално влиза branch инструкция и след нея PC ще се обнови със следващата инструкция. Ако все пак по време на изпълнение стане преход се чисти целия конвейер. Статистически има 50% шанс да познае. ВТВ се опитва да натрупва статистика. В този буфер има място за 256 условни прехода (branch-а).Тази схема работи много бързо при цикъл. Ако например правим цикъл на 100 числа ВТВ ще познае 100 пъти и само на 101-вия ще сгреши и изчисти конвейера.
- Буфера за извличане и дешифрация. Буферът трябва предварително да разпознае дали една инструкция за преход е branch или jump.
- Декодиране на инстр: Инструкциите се гледат по 2ки. Има 10 правила, по които УУ решава дали може да ги пусне по двата паралелни конвейера U и V. V е за проста аритметика. В U постъпват всички операции, включително тези работещи с floating point данни (това е основния конвейр). При floating point самото изчисление (execution) ще бъде прехвърлено на FPU. По отношение на изпълнението инструкциите вървят по паралелните конвейери и правят паралелно 1, 2, 3 и 5 стъпка на конвейерната обработка.
- Микрокод ROM – това са микропрограми за управление (тъй като това е CISC архитектура).
Следователно това е супер скаларна схема ( защото има FPU и 2 конвейера )
FPU
това е допълнителна информация
FPU – процесор за аритметика с числа с плаваща запетая
При архитектурата х86 числата с плаваща запетая са 80 битови, като във процесора за обработката на тези числа има 8 80 битови регистъра Всеки регистър съдържа следната информация:
| дължина в битове | 1 | 15 | 64 | 2 |
|---|---|---|---|---|
| съдържание | знак | експонента | мантиса | таг |
tag означава състояние на регистрите, неговите разновидности са
- 00 - валидно съдържание на регистъра
- 01 - стойност 0 в регистъра
- 10 - празен регистър
- 11 - NAN – безкрайност, денормализирана стойност или невалиден формат на числото.
Вторият 16 битов status регистър указва състоянието
- top - указател към върха на стека
- С0 - С3 - съхраняват condition code
- PE – precision error – загуба на точност
- UE – underflow error - препълване отдолу
- OE – overflow error– препълване отгоре
- ZE – zero error – деление на 0
- DE – denormalized error – денормализиран операнд
- IE – instruction error – невалидна операция
C0 - C3 -> 0000 означава валиден положителен денормализиран резултат
всички кодове означават специфични случаи на резултата. Hапример '+безкрайност' - 0101
Регистри (+ флагове)
Регистрите в X86 архитектурата са 32 битови като първи в паметта е най-старшият (31вия; little endian)
- Буквата Е(extended) преди наименованието на регистъра означава, че се работи с целия 32 битов регистър, а когато я няма се работи с младшата 16-битова част. Тя от своя страна може да се раздели на две 8-битови части H(high; старша част), L(low, младша част).
- IP (instruction pointer) – Регистърът, който съдържа програмния брояч //EIP(extended instruction pointer – 32 bit)
- SP/ESP (stack pointer/extended stack pointer) – указател към върха на стека.
- FLAG/EFLAG – флагов регистър. При изпълнение на инструкциите се сформират различни състояния на процесора и те се записват във 32 битовия флагов регистър EFLAG или във младшата му част FLAG. При процесорите Pentium флаговият регистър е със следната структура:
- C - carry flag– пази преноса на резултата от предишна операция навън от разрядната решетка
- P - parity flag– това е флаг за четност, ако резултата има четен брой единици този флаг се вдига. Той не може да се променя в програмна инструкция.
- A -auxiliary flag– флаг за пренос между младшата и старшата тетрада на най младшия байт на резултата. Използва се за десетична корекция.
- Z - zero flag – когато е 1 резултата е 0
- S - sign flag – тук се записва първия бит на резултата(знаковия бит), 1 ако резултатът е отрицателен
- T - trace flag- обикновено е 0. Поставя се в 1 ако сме в режим на трасировка със командите SET T, CLEAR T
- IE - interrupt enable – разрешаване на прекъсване, Има 2 вида прекъсвания – маскируеми и немаскируеми . Когато флагът е вдигнат маскируемите прекъсвания са забранени
- D- direction – указва посоката на низовите операции, дали са отпред назад или отзад напред. Ако е 0 указателите в SI и DI се увеличават, иначе се намаляват,поставя се с SETD и CLEARD
- O – overflow – всяка аритметична операция се следи за препълване и за пренос от старшата и младшата част. Когато има препълване О=1.
- IO-PL – input – output priority level. Ниво на приоритета, което се изисква. Използва се за контрол от операционната система. Има 4 нива на приоритети, като най-високо (нулево) има операционната система
- NT – nested task – ако е 1 се работи със многозадачна операционна система
- RF – resume flag – отговорен за изключенията при дебъгване
- VM – virtual mode – виртуален режим на работа
- AC – alignment check – при 1 процесорът проверява дали операндите са подравнени на граница. При 0 не се проверява
- VI – virtual interrupt flag – виртуално прекъсване (виртуален образ на IE)
- VIP – virtual interrupt pending flag – е 1, ако предстои прекъсване
- ID – идентификация на процесора. Всеки процесор има идентификатор и програмата може да се заключи за работа само с един процесор при 1
- Сегментни регистри – има един сегмент за инструкциите (CS-code segment), един за стека(SS-stack segment) и 4 за данни (DS(data segment),ES,FS,GS). Тези регистри са програмно достъпни.
- GDTR (global description table register) – държи указател към дескрипторните таблици
- А и В са акумулаторни регистри. АН и АL са по 8 бита и образуват АX(А extended), който е 16 битов, а ЕАХ е целия 32 битов регистър. Аналогично е за регистъра ВХ
- C е регистър, в който се държи брояча – използва се за цикли.
- D(data register) е регистър за данни
- SI(source index) DI(destination index) са регистри, които държат адресите при низови операции.
- BP(base pointer)





