Тема 8

Вътрешната структура на процесор Pentium. Блокове и конвейери.


Важно!! Тези лекции не са предвидени за директен copy-paste на контролното. Прочетете ги внимателно, и ги научете. Хора с еднакви контролни ще бъдат санкционирани! Да не кажете после, че не сте предупредени



страницата се нуждае от дописване/преглеждане


Вътрешна структура на процесора

Процесорите Pentium са с така наречената X86 архитектура. Тези процесори изглеждат външно като CISC , но са реализирани на базата на RISC-процесор (програмистът може да подаде на процесора сложна(CISC) инструкция, а той вътрешно я реализира чрез повече по-прости (RISC) инструкции).

t08_overall
  • Шинният интерфейс управлява 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
съдържание знак експонента мантиса таг
t08_fpuregs

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

Регистри (+ флагове)

t08_regtbl

Регистрите в 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 флаговият регистър е със следната структура: t08_flags
    • 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)

Допълнителни четива

Малко инфо за BTB устройството

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License