Тема 1

1. Режими на работа и организация на паметта за IA-32 и Intel-64 архитектура.


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


Тема 2 >>

Характеристики

x86 е общото наименование на микропроцесорна архитектура, първоначално разработена и произвеждана от Intel. Тази архитектура в момента доминира пазара за настолни и преносими компютри, както и за малки и средни сървъри.
Архитектурата е наречена x86, защото първите процесори от тази фамилия са обозначавани с номера, завършващи на 86: 8086, 80186, 80286, 80386 (впоследствие i386) и 486 (i486). Водена от маркетингови съображения и ограничена от невъзможността да защити търговска марка върху число, Intel решава да именува следващите процесори от тази фамилия с имена вместо с числови обозначения (Pentium, Core). В крайна сметка обаче, името x86 остана като име на цялата фамилия.
Архитектурата на два пъти е била разширявана към по-голям размер на машинната дума. Първите процесори от тази фамилия са 16-битови. През 1985 г. Intel пуска 32-битовия процесор 386. Обикновено обозначението x86 се използва за 32-битовата архитектура, като освен него се използва и IA-32 (Intel Architecture 32-bit). През 2003 г. AMD пусна на пазара процесора Athlon 64, който разшири архитектурата до 64 бита. 64-битовата x86 архитектура се обозначава с x86-64, като освен него се използват и други обозначения: AMD64 (от AMD), EM64T или IA-32e (от Intel) и x64 (от Microsoft).
Една от основните черти на x86 архитектурата е пълната софтуерна обратна съвместимост. Това означава, че всеки нов член на фамилията може да изпълнява програмите, които са били създадени за неговите предшественици. Тази съвместимост е една от предпоставките за огромния успех на x86 архитектурата.

Режими на работа

Реален режим

(на английски: real mode)Това е режим на работа на компютърните процесори в архитектурата x86. Всеки x86 процесор влиза в реален режим веднага след включване на захранването му. При реалния режим, максималната адресирана памет е 1 MB (2^20 = 1048576 байта) и няма апаратна защита на достъпа до паметта. В наши дни реалният режим се използва само при стартирането на операционната система, тъй като всеки x86 процесор веднага след включване на захранването автоматично влиза в реален режим. Това налага първите етапи от зареждането на операционната система да стават в този режим. Популярната в миналото операционна система DOS на Microsoft работи почти изцяло в реален режим.

Защитеният режим

Той се характеризира с апаратно предотвратяване на достъпа на дадена програма извън границите на заделената и памет. Първата версия на защитения режим се появи в 16-битовия процесор 80286. Въпреки че някои от тогавашните операционни системи (най-вече OS/2 и Windows 3.0) включваха поддръжка за 16-битовия защитен режим, той не получи широко разпространение заради появата на по-универсалния 32-битов защитен режим с пускането на процесора 80386. От този момент под защитен режим ще се подразбира 32-битовият защитен режим на 80386 и следващите x86 процесори.
В съвременните операционни системи се използва защитеният режим на работа. Освен това сегментирането се използва много ограничено, като защитата и управлението на паметта стават основно с помощта на механизма на страницирането. Именно поради тази причина, в 64-битовото разширение на x86 архитектурата AMD64(x64), сегментирането е "орязано" до минимум.

32-битовият защитен режим дава достъп до същите регистри като реалния режим, но сега всички те са 32-битови вместо 16 битови (с изключение на видимата част на сегментните регистри). Долните 16 бита от всеки регистър са достъпни като 16-битови регистри под същите имена като в реален режим. Целите 32-бита на регистрите са достъпни под имена, които започват с E. 32-битовите регистри с общо предназначение са EAX, EBX, ECX, EDX, ESP, EBP, EDI и ESI, флаговия регистър е EFLAGS, а програмия брояч - EIP. Сегментните регистри си остават 16-битови, като към вече съществуващите CS, DS, SS и ES се прибавят два нови сегментни регистъра, наречени FS и GS.
untitled72.JPG
64-битовият защитен режим дава достъп до същите регистри като 32-битовия режим, но сега всички те са 64-битови вместо 32 битови. Шестнадесет 64-битови регистри с общо предназначение, шест 16-битови сегментени регистри, флаговия регистър е RFLAGS(64-битов), а програмия брояч – RIP(64-битов).
untitled73.JPG

Multi-Media Extensions

През 1996 г. Intel въведе ново разширение на x86 архитектурата с пускането на процесора Pentium MMX. MMX означава Matrix Math Extensions (разширения за математически матрици), но по-късно съкращението започна да се дешифрира като Multi-Media Extensions (мултимедийни разширения).
MMX разширенията позволяват да се изпълни една и съща математическа операция (например събиране, изваждане и т.н.) едновременно върху няколко цели числа, пакетирани в някои от MMX регистрите.
Въпреки широката рекламна кампания от страна на Intel, MMX инструкциите дълго време не бяха използвани в приложните програми, а когато такава поддръжка все пак се появи, резултатите не бяха особено впечатляващи. Някои от причините за този скромен успех са:
За да не се налагат промени в операционните системи, MMX регистрите всъщност са преименуваните x87 регистри за работа с числа с плаваща запетая. Това не позволява да се използват едновременно MMX и x87 инструкции, а бавното превключване между двата режима допълнително влошава нещата.
MMX инструкциите дълго време можеха да бъдат използвани само на асемблер. Поддръжката в програмните езици от високо ниво бе ограничена.
MMX инструкциите оперират само върху цели числа. Повечето съвременни мултимедийни приложения изискват работа с числа с плаваща запетая.
Все пак, MMX инструкциите станаха част от x86 архитектурата и се поддържат от всички съвременни реализации на тази архитектура.

Модели на паметта

untitled74.JPG
Интел x86 архитектурата има два (ама май три ;)) модела на паметта от които може да се избира.”Flat” модел и сегментен модел. "Flat" моделът е като цяло единствен сегмент. Един сегмент може да адресира до 4Gb от паметта (2^32). Сегментният модел може да съдържа 16,383 сегмента.
Физическата памет на интелските x86 процесори е организирана като последователност от 8-битови байтове. Всеки байт има уникален адрес който се простира от нула до максимум от 2^(32) -1.
Интел x86 програмите са отделени от физическото адресно пространство. Това означава, че програмите могат да бъдат написани без знание колко физическа памет остава и без знание къде точно във физическата памет се намират инструкциите и информацията.

"Flat" и сегментният модел могат да осигурят защита на паметта (за "Real-Address Mode" не знам, но е логично и той да може, иначе кой ли щеше да го използва). Различните задачи могат да изискват различни модели на организация на паметта.

"Flat" моделът

При "flat" моделът на организация на паметта, програмистът вижда един масив от до 2^(32) байта (4 GB). Физическата памет може да съдържа до 4GB, но обикновено е много по-малка. Процесорът изобразява 4-те GB flat пространство върху физическото адресно пространство чрез транслации, които ще описваме във някоя тема по-нататък. Програмистът не се нуждае от детайлите по това изобразяване.
Pointer-ът на това flat адресно пространство е 32-битово число, което може да варира от 0 до 2^(32) -1.

Сегментният модел

При сегментния модел на организация на паметта, адресното пространство се разглежда като логическо адресно пространство където то е с големина до 2^(46) байта (64 TB). Процесорът изобразява 64 TB-овото логическо адресно пространство на физическото адресно пространство (до 4GB) посредством механизми за транслация на адреси, които ще разгледаме в някоя от темите по-нататък. Програмистът не е нужно да знае как се изобразяват.
Програмистът вижда логическото адресно пространство на x86 архитектурата като колекция от до 16,383 едно- измерни подпространства, всяко от които със определена дължина. Всяко от тези линейни подпространства е наречено сегмент. Големината на един сегмент може да варира от един байт до 2^(32) байта (4 Gb).
Пълен pointer в това адресно пространство се състои от две части:
# сегментен селектор, който е 16-битово поле, което идентифицира сегмента.
# Отместване(offset), който е 32-битово число, което адресира байт нивото в сегмента.

"Real-Address Mode" моделът

При Real-Address Mode Model цялата памет се разделя на равни по размер сегменти. В CPU за всеки един от тези от тези сегменти има по един регистър, който сочи началото на съответния сегмент. Програмистът има достъп и може да променя съдържанието на кой да е от тези регистри. Промяната на съдържанието автоматично води до преместване на съответния сегмент в друга начална точка. Съществуват и други регистри с общо предназначение, които също са програмно достъпни. Те служат за задаване на отместването на адресната клетка от началото. За останалите три сегмента може да се използва кой да е от останалите регистри. Следователно адресът на клетката се задава винаги чрез двойка регистри – сегментен регистър и регистър-отместване.

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