Jednotky pro správu paměti (MMU) na mikroprocesorech ARM

22. 5. 2012
Doba čtení: 18 minut

Sdílet

Dnes se budeme zabývat popisem jednotek pro správu paměti (Memory Management Unit – MMU) implementovaných na některých mikroprocesorech s architekturou ARM. MMU je samozřejmě důležitou součástí těchto procesorů, protože zajišťuje ochranu paměti i využití virtuálního adresního prostoru.

Obsah

1. Jednotky pro správu paměti (MMU) na mikroprocesorech ARM

2. Rozdělení virtuální paměti na stránky a sekce

3. Mapování (překlad) mezi virtuálními adresami a adresami fyzické paměti

4. Struktura záznamů v primární překladové tabulce

5. Deskriptory pro sekundární překladové tabulky

6. Překlad virtuální adresy na adresu fyzickou

7. Řídicí registry určené pro konfiguraci MMU

8. Registry c1, c2 a c3

9. Odkazy na Internetu

1. Jednotky pro správu paměti (MMU) na mikroprocesorech ARM

V seriálu o architekturách počítačů jsme si již popsali jak základní programátorský model mikroprocesorů s architekturou ARM, tak i některé moduly, které mohou obohacovat původní čistě RISCové procesorové jádro těchto čipů například o operace s hodnotami reprezentovanými ve formátu plovoucí řádové čárky (FP – Floating Point) či o operace prováděné nad vektory dat a nikoli pouze se skalárními operandy. Ovšem prozatím jsme se jen velmi okrajově zmiňovali o dalším důležitém modulu, kterým jsou některé mikroprocesory ARM vybaveny. Jedná se o modul/jednotku určenou pro správu paměti: Memory Management Unit (MMU). Pod tímto pojmem se u moderních mikroprocesorů skrývají především dvě hardwarově podporované operace: ochrana paměti (například zákaz zápisu do sekce s binárním programovým kódem – jde o kódový či též textový segment) a s ní částečně související virtualizace paměti.

Samotná virtualizace má v praxi taktéž dva významy, protože se s jejím využitím mohou od sebe izolovat adresové prostory jednotlivých procesů (to je využíváno v některých operačních systémech) a současně je umožněno, aby se jednotlivé stránky virtuální paměti mohly odložit například na pevný disk do swapovacího souboru či do swapovacího oddílu. Způsob využití jednotky MMU je do značné míry závislý na použitém operačním systému a většina dnes používaných operačních systémů běžících na mikroprocesorech ARM skutečně tuto jednotku nějakým způsobem využívá (či ji dokonce pro svou činnost přímo vyžaduje), ať již se jedná o Linux (též Android používající linuxové jádro), Symbian či WindowsCE. V některých případech je MMU využita především pro ochranu paměti mezi běžícími procesy a taktéž pro vytvoření izolovaných adresních prostorů pro tyto procesy, v ostatních operačních systémech je implementováno i odkládání paměťových stránek do swapovacího prostoru.

V případě, že je funkce MMU povolena, začne se na hardwarové úrovni s využitím několika tabulek (uložených v operační paměti) a speciálních řídicích registrů provádět mapování (též překlad) virtuálních adres používaných v běžících procesech na adresy fyzické s tím, že je možné – opět na hardwarové úrovni – provádět kontrolu přístupu do jednotlivých oblastí virtuálního adresového prostoru.

2. Rozdělení virtuální paměti na stránky a sekce

Aby bylo použití virtuální paměti po technické stránce vůbec proveditelné, není samozřejmě možné mapovat každou virtuální adresu na libovolnou adresu fyzickou, protože by překladová tabulka musela mít minimálně stejnou velikost, jakou má virtuální adresní prostor. Namísto toho je proto každá virtuální adresa rozdělena na dvě části: horních m bitů je skutečně transformováno (překládáno) na bázovou adresu fyzické stránky (a to různým způsobem – jednou, dvěma a v některých případech dokonce i trojúrovňovou strukturou překladových tabulek), zatímco spodních n bitů představuje offset, který je posléze jednoduše přičten k vypočtené fyzické bázové adrese. Způsobem rozdělení adresy na horních m bitů a spodních n bitů určuje výrobce mikroprocesorů velikost paměťových stránek.

U některých architektur mikroprocesorů je toto rozdělení konstantní, což má kromě implementační jednoduchosti ale i své nevýhody, protože to nemusí zcela vyhovovat potřebám všech aplikací. Například pro běh virtuálních strojů (ať již se jedná o virtuální stroje programovacích jazyků či o celé virtualizované počítače) je vhodné používat větší stránky, protože virtuální stroj si paměť dokáže spravovat sám a navíc se snižují paměťové nároky překladových tabulek a zlepšuje se i využití TLB – pro více informací o TLB viz další část seriálu. Z tohoto důvodu jsou u mikroprocesorů ARM kromě klasických „malých“ stránek používány i stránky „velké“ a dokonce i takzvané sekce o velikosti 1MB a na některých mikroprocesorech i „supersekce“ o velikosti 16MB.

Zatímco pro překlad mezi virtuální adresou a fyzickou adresou se v případě sekcí a supersekcí používá pouze jednoúrovňová mapovací tabulka, u stránek (nezávisle na velikosti těchto stránek) se využívá struktura tabulek majících dvě úrovně. Použití dvouúrovňových tabulek je nutné především z toho důvodu, aby nebyla jediná mapovací tabulka příliš rozsáhlá. Pod tímto odstavcem jsou vypsány typické velikosti stránek a sekcí u mikroprocesorů ARM. Na tomto místě je vhodné upozornit na to, že ne všechny mikroprocesory ještě podporují tiny stránky a na druhou stranu „supersekce“ jsou dostupné jen u modernějších mikroprocesoro­vých jader:

# Velikost regionu Název (terminologie ARM)
1 1 kB tiny page
2 4 kB small page
3 64 kB large page
4 1 MB sekce (section)
5 16 MB supersekce (supersection)

3. Mapování (překlad) mezi virtuálními adresami a adresami fyzické paměti

V této kapitole si řekneme základní informace o způsobu transformace virtuálních adres, tj. adres používaných v programech, na adresy fyzické, tj. na adresy, které lze zjistit na externí adresové sběrnici mikroprocesoru. V případě, že je jednotka MMU na mikroprocesoru ARM přítomna a její činnost je povolena, je každá virtuální adresa převáděna na adresu fyzickou na základě informací uložených v několika tabulkách. Nejprve je virtuální adresa rozdělena do dvou částí: horní bity s indexy 20 až 31 tvoří index do primární mapovací (překladové) tabulky a význam bitů s indexy 0 až 19 se liší podle toho, zda se pro překlad využívají stránky či sekce. Nejdříve se podívejme na to, co se stane s horními bity s indexy 20 až 31. Tyto bity jsou spojeny s bity 14 až 31 uloženými v řídicím registru c2, jehož plný název je Translation Table Base Register (viz též osmou kapitolu). Způsob vzájemného zkombinování horních bitů virtuální adresy a obsahu registru c2 je zobrazen na následujících schématu:

 
                   31         20 19                   0
                   +------------+---------------------+
                   |   index    |                     | <--- 32bitová virtuální adresa
                   +------------+---------------------+
                          |
                          |
31               14 13    v        0
+------------------+------|--------+
| translation base | 00000|0000000 | <---------------------- řídicí registr c2
+------------------+------|--------+                            (Translation Table Base Register)
         |                |
         |                |
31       v       14 13    v        0
+------------------+-----------+-+-+
| translation base | index     |0|0|
+------------------+-----------+-+-+
                  |
                  |
31                v                0
+----------------------------------+
| deskriptor pro sekce nebo stránky|
+----------------------------------+
 

Povšimněte si zejména toho, že vytvořená adresa ukazující do primární překladové tabulky je vždy zarovnána na adresu dělitelnou čtyřmi, protože spodní dva bity vytvořené adresy jsou vždy nulové. To samozřejmě není náhoda, protože každý záznam má v této tabulce velikost právě čtyři bajty (viz též následující kapitoly). Vzhledem k tomu, že indexová část adresy má šířku dvanácti bitů (bity s indexy 20 až 31), může primární překladová tabulka obsahovat maximálně 212=4096 záznamů a její celková velikost tedy nepřesáhne šestnáct kilobajtů, což mj. znamená, že je velká šance na to, aby byla celá tato tabulka umístěna ve vyrovnávací paměti:

 
Translation table base
+---------------+
|  záznam 0     | 4 bajty
+---------------+
|  záznam 1     | 4 bajty
+---------------+
|      ...      |
|      ...      |
|      ...      |
|      ...      |
|      ...      |
|      ...      |
+---------------+
|  záznam 4095  | 4 bajty
+---------------+
 

4. Struktura záznamů v primární překladové tabulce

V závěru předchozí kapitoly jsme si řekli, že primární překladová tabulka může obsahovat až 4096 záznamů, z nichž každý má šířku čtyři bajty. Obsah těchto čtyř bajtů se liší podle toho, jaký typ záznamu – lépe řečeno jaký deskriptor – je zde uložen. Typ deskriptoru lze získat ze spodních dvou bitů každého záznamu:

Bit 1 Bit 0 Typ deskriptoru
0 0 přístup na tento deskriptor vygeneruje výjimku
0 1 deskriptor pro „hrubě“ dělenou stránku (coarse page)
1 0 deskriptor pro sekci (section)
1 1 deskriptor pro „jemně“ dělenou stránku (fine page)

Nejjednodušší je formát záznamu pro deskriptor obsahující v nejspodnějších dvou bitech nulu. Přístup k tomuto typu deskriptoru vyvolá výjimku a samozřejmě se neprovede překlad adresy:

 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+-----------------------------------------------------------------------------------------+--+--+
|                                                                                         | 0| 0|
+-----------------------------------------------------------------------------------------+--+--+
 

Mnohem zajímavější je formát záznamu s deskriptorem pro sekci (section). V tomto případě je 32bitový záznam rozdělen do několika bitových polí, přičemž nejdůležitější je část, v níž je uložena bázová fyzická adresa sekce, která je přidána ke spodním dvaceti bitům adresy virtuální (víme již, že horních dvanáct bitů virtuální adresy je použito pro přístup k deskriptoru). Není těžké vypočítat, že velikost sekce je skutečně rovna 220=1 MB. Další bity deskriptoru určují takzvanou doménu (bude vysvětlena dále), dvojici přístupových bitů AC a bity B a C určující způsob využití vyrovnávací paměti (write-back, write-through atd.):

 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+-----------------------------------+-----------------------+-----+--+-----------+--+--+--+--+--+
|    bázová fyzická adresa sekce    | tyto bity jsou nulové | AC  | 0|  doména   | 1| C| B| 1| 0|
+-----------------------------------+-----------------------+-----+--+-----------+--+--+--+--+--+
 

Další dva typy deskriptorů korespondují se sekundárními překladovými tabulkami adres a budou popsány v navazující kapitole.

5. Deskriptory pro sekundární překladové tabulky

Třetí typ deskriptoru uložený v primární překladové tabulce obsahuje adresu sekundární překladové tabulky s informacemi o „hrubě“ rozdělených stránkách (coarse pages). Tato sekundární tabulka obsahuje 256 záznamů a může být naplněna informacemi o paměťovém regionu o velikosti 1MB, který je rozdělen do bloků/stránek o velikosti čtyři kilobajty (4096×256=1MB), Deskriptor je v tomto případě opět rozdělen do bitových polí, především na informace o doméně (čtyři bity) a informace o bázové adrese sekundární tabulky (22 bitů):

 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+-----------------------------------------------------------------+--+-----------+--+--+--+--+--+
|   bázová adresa tabulky stránek                                 | 0|  doména   | 1| 0| 0| 0| 1|
+-----------------------------------------------------------------+--+-----------+--+--+--+--+--+
 

Tento deskriptor lze použít i pro adresování stránek o velikosti 64 kB, ovšem sekundární tabulka musí v tomto případě obsahovat vždy 16× stejný záznam za sebou.

Následuje poslední typ deskriptoru použitý pro uložení informací o sekundární překladové tabulce obsahující 1024 záznamů, přičemž každý záznam odpovídá paměťovému regionu o velikosti jeden kilobajt: 1024×1024=1MB. Povšimněte si, že v tomto případě má bázová adresa sekundární tabulky šířku pouze 20 bitů:

 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+-----------------------------------------------------------+--+--+--+-----------+--+--+--+--+--+
|   bázová adresa tabulky stránek                           | 0| 0| 0|  doména   | 1| 0| 0| 1| 1|
+-----------------------------------------------------------+--+--+--+-----------+--+--+--+--+--+
 

I tento deskriptor lze použít pro adresování stránek o velikosti 64 kB, ovšem sekundární tabulka musí v tomto případě obsahovat stejný záznam zkopírovaný 64× za sebou.

6. Překlad virtuální adresy na adresu fyzickou

Překlad mezi virtuální adresou a adresou fyzickou se provádí odlišně podle obsahu deskriptorů uložených v primární překladové tabulce. Situace je nejjednodušší v případě sekcí, protože tam je pouze provedena náhrada horních dvaceti bitů adresy za hodnotu uloženou v primární překladové tabulce. Způsob překladu je ukázán na následujícím schématu, s jehož horní částí jsme se seznámili již ve třetí kapitole:

 
                   31         20 19                   0
                   +------------+---------------------+
                   |   index    |        offset       | <--- 32bitová virtuální adresa
                   +------------+---------------------+
                          |                  |
                          |                  |
31               14 13    v        0         |
+------------------+------|--------+         |
| translation base | 00000|0000000 | <-------|----------------- řídicí registr c2
+------------------+------|--------+         |                  (Translation Table Base Register)
         |                |                  |
         |                |                  |
31       v       14 13    v        0         |
+------------------+-----------+-+-+         |
| translation base | index     |0|0|         |
+------------------+-----------+-+-+         |
                  |                          |
                  |                          |
31                v                0         |
+----------------------------------+         |
| deskriptor pro sekce nebo stránky|         |
+----------------------------------+         |
                         |                   |
                         |                   |
                   31    v    20 19          v      0
                   +------------+---------------------+
                   |    báze    |       offset        | <--- 32bitová fyzická adresa
                   +------------+---------------------+
 

V případě, že se namísto sekcí používají stránky (large page, small page, tiny page), je nutné při výpočtu fyzické adresy navíc ještě získat záznam ze sekundární překladové tabulky. Sekundární překladové tabulky jsou navrženy takovým způsobem, aby vždy popisovaly region o velikosti 1MB, ovšem rozdělený na stránky o různé velikosti: 1kB (tiny page), 4kB (small page) či 64kB (large page). Víme již, že lze použít „hrubě rozdělenou“ sekundární tabulku s 256 záznamy popisujícími stránky o velikosti 4KB, nebo „jemně rozdělenou“ sekundární tabulku s 1024 záznamy popisujícími stránky o velikosti 1KB:

Hrubě rozdělená sekundární tabulka stránek:

+---------------+
|  záznam 0     | ----> odkaz na large page (bity adresy 0 až 15, velikost stránky 64kB)
+---------------+ ----> odkaz na small page (bity adresy 0 až 11, velikost stránky 4kB)
|  záznam 1     |
+---------------+
|      ...      |
|      ...      |
|      ...      |
|      ...      |
|      ...      |
|      ...      |
+---------------+
|  záznam 255   |
+---------------+

Jemně rozdělená tabulka stránek:

+---------------+
|  záznam 0     | ----> odkaz na large page (bity adresy 0 až 15, velikost stránky 64kB)
+---------------+ ----> odkaz na small page (bity adresy 0 až 11, velikost stránky 4kB)
|  záznam 1     | ----> odkaz na tiny page (bity adresy 0 až 9, velikost stránky 1kB)
+---------------+
|      ...      |
|      ...      |
|      ...      |
|      ...      |
|      ...      |
|      ...      |
+---------------+
|  záznam 1024  |
+---------------+

Překlad adresy pak vypadá následovně (původní virtuální adresa obsahuje dva indexy a offset):

 
                         31         20 19       12 11       0
                         +------------+-----------+---------+
                         |   index    | 2nd index | offset  | <--- 32bitová virtuální adresa
                         +------------+-----------+---------+
                          |                  |        |
                          |                  |        |
31               14 13    v        0         |        |
+------------------+------|--------+         |        |
| translation base | 00000|0000000 | <-------|--------|--------- řídicí registr c2
+------------------+------|--------+         |        |          (Translation Table Base Register)
         |                |                  |        |
         |                |                  |        |
31       v       14 13    v        0         |        |
+------------------+-----------+-+-+         |        |
| translation base | index     |0|0|         |        |
+------------------+-----------+-+-+         |        |
                  |                          |        |
                  |                          |        |
31                v                0         |        |
+----------------------------------+         |        |
| deskriptor pro sekce nebo stránky|         |        |
+----------------------------------+         |        |
                  |                          |        |
                  |                          |        |
                  |                          |        |
                  |        +---------------+ |        |
                  +--------|  záznam 0     | |        |
                           +---------------+ |        |
                         +-|  záznam 1     |<+        |
                         | +---------------+          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | +---------------+          |
                         | |  záznam 255   |          |
                         | +---------------+          |
                         |                            |
                         |                            |
                         |                            |
                         |                            |
                         |                            |
                         |                            |
                         |                            |
                      31 v                 12 11      v  0
                      +----------------------+-----------+
                      |    báze              |  offset   | <--- 32bitová fyzická adresa
                      +----------------------+-----------+
 

V případě tiny stránek se pouze změní velikost offsetu (má jen 10 bitů pro adresaci v rámci jednoho kilobajtu) a současně se zvětší velikost druhého indexu, který musí mít taktéž šířku 10 bitů pro výběr jednoho z 1024 záznamů ze sekundární tabulky:

 
                         31         20 19       10 9        0
                         +------------+-----------+---------+
                         |   index    | 2nd index | offset  | <--- 32bitová virtuální adresa
                         +------------+-----------+---------+
                          |                  |        |
                          |                  |        |
31               14 13    v        0         |        |
+------------------+------|--------+         |        |
| translation base | 00000|0000000 | <-------|--------|--------- řídicí registr c2
+------------------+------|--------+         |        |          (Translation Table Base Register)
         |                |                  |        |
         |                |                  |        |
31       v       14 13    v        0         |        |
+------------------+-----------+-+-+         |        |
| translation base | index     |0|0|         |        |
+------------------+-----------+-+-+         |        |
                  |                          |        |
                  |                          |        |
31                v                0         |        |
+----------------------------------+         |        |
| deskriptor pro sekce nebo stránky|         |        |
+----------------------------------+         |        |
                  |                          |        |
                  |                          |        |
                  |                          |        |
                  |        +---------------+ |        |
                  +--------|  záznam 0     | |        |
                           +---------------+ |        |
                         +-|  záznam 1     |<+        |
                         | +---------------+          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | |      ...      |          |
                         | +---------------+          |
                         | |  záznam 1023  |          |
                         | +---------------+          |
                         |                            |
                         |                            |
                         |                            |
                         |                            |
                         |                            |
                         |                            |
                         |                            |
                      31 v                 10 9       v  0
                      +----------------------+-----------+
                      |    báze              |  offset   | <--- 32bitová fyzická adresa
                      +----------------------+-----------+
 

7. Řídicí registry určené pro konfiguraci MMU

Konfigurace jednotky pro správu paměti (MMU) je uložena v několika řídicích registrech, z nichž některé jsou určeny pouze pro čtení, jiné pro zápis (například se jedná o registr c8) a u dalších registrů je možné provádět jak jejich čtení, tak i zápis (navíc se chování může měnit v závislosti na použitém adresovacím režimu, to však již zabíháme do příliš velkých podrobností). Pro čtení či zápis dat do řídicích registrů se používají instrukce nazvané MRC a MCR v následujícím tva­ru:

 
; čtení registru c2 - Translation Table Base Register
MRC p15, 0, R0, c2, c0, 0
 
; zápis do registru c2 - Translation Table Base Register
MCR p15, 0, R0, c2, c0, 0
 

V následující tabulce jsou vypsána jména šestnácti řídicích registrů určených pro řízení MMU. Funkce jednotlivých řídicích registrů se může u některých procesorových jader odlišovat, takže níže uvedená tabulka všech řídicích registrů může být rozšířena či naopak zmenšena (resp. některé registry nemusí být vždy využity):

# Registr Plné jméno Poznámka
1 c0 ID Code, Cache Type, and TCM Status Registers obsahuje kód architektury, číslo revize čipu, kód výrobce čipu, …
2 c1 Control Register viz kapitolu číslo 8
3 c2 Translation Table Base Register viz kapitolu číslo 8
4 c3 Domain Access Control Register viz kapitolu číslo 8
5 c4 Register c4 nevyužito
6 c5 Fault Status Registers obsahuje číslo domény D0-D15 a typ výjimky při přístupu do paměti (použito při zjišťování příčiny výjimky)
7 c6 Fault Address Register obsahuje virtuální adresu, kde došlo k výjimce při přístupu do paměti (použito při zjišťování příčiny výjimky)
8 c7 Cache Operations Register řízení vyrovnávací paměti a zápisového bufferu
9 c8 TLB Operations Register řízení zneplatnění vybrané části TLB či pouze jednoho záznamu (viz navazující článek)
10 c9 Cache Lockdown and TCM Region Registers řízení způsobu využití obou částí TBL (viz navazující článek)
11 c10 TLB Lockdown Register řízení způsobu využití obou částí TBL (viz navazující článek)
12 c11 Register c11 nevyužito
13 c12 Register c12 nevyužito
14 c13 Process ID Register použit pro dva účely: rychlé přepnutí kontextu a změnu kontextu
15 c14 Register c14 nevyužito
16 c15 Test and Debug Register použit pro testování, rozdílné chování pro různá jádra

8. Registry c1, c2 a c3

Registr c1 má prostý název Control Register. Tento 32bitový registr obsahuje několik řídicích bitů umístěných do registru c1 následujícím způsobem:

 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+--------------------------------------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|              vynulováno              | 1| 0| 1|L4|RR| V| I| 0| 0| R| S| B| 1| 1| 1| 1| C| A| M|
+--------------------------------------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 

Význam jednotlivých bitů registru c1:

Bit Označení Význam
0 M globální povolení či zákaz funkce MMU
1 A povolení či zákaz kontroly zarovnání dat
2 C povolení či zákaz datové vyrovnávací paměti
7 B přepínání little endian/big endian
8 S zapnutí/vypnutí ochrany systému (bude vysvětleno příště)
9 R zapnutí/vypnutí ochrany ROM (bude vysvětleno příště)
12 I povolení či zákaz instrukční vyrovnávací paměti
13 V řídí umístění vektorů výjimek
14 RR řízení funkce datové i instrukční vyrovnávací paměti
15 L4 změna funkce T-bitu

Plné jméno řídicího registru c2 je Translation Table Base Register. S tímto registrem jsme se vlastně již seznámili ve třetí kapitole, protože tento registr je použit pro uložení počáteční adresy primární překladové tabulky. Adresa je ve skutečnosti uložena pouze v horních osmnácti bitech, protože spodních 14 bitů má být nulových. Důvod je jednoduchý – bázovou adresu není nutné sčítat s indexem do primární tabulky, ale lze namísto toho použít mnohem rychlejší skládání bitů:

bitcoin_skoleni

 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+-----------------------------------------------------+-----------------------------------------+
|            translation table base                   |                vynulováno               |
+-----------------------------------------------------+-----------------------------------------+
 

Řídicí registr c3 s plným názvem Domain Access Control Register je rozdělen do šestnácti dvoubitových polí. Každé z těchto bitových polí slouží k nastavení přístupových práv pro jednu ze šestnácti domén d0d15:

 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| d15 | d14 | d13 | d12 | d11 | d10 | d9  | d8  | d7  | d6  | d5  | d4  | d3  | d2  | d1  | d0  |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
 

Význam všech čtyř možných bitových kombinací je vypsán v následující tabulce:

bit 1 bit 0 Význam
0 0 zákaz přístupu do stránek s touto nastavenou doménou
0 1 přístup do stránek/sekcí s touto doménou je testován podle jejich AC bitů
1 0 rezervováno (podobně jako kombinace 00)
1 1 přístup do stránek/sekcí s touto doménou není testován na základě jejich AC bitů

9. Odkazy na Internetu

  1. The VFP architecture
    http://infocen­ter.arm.com/hel­p/index.jsp?to­pic=/com.arm.doc­.dui0056d/Bcfib­fha.html
  2. NEON
    http://www.ar­m.com/products/pro­cessors/techno­logies/neon.php
  3. ARM Floating Point Accelerator (ARM FPA)
    http://vswww.ka­ist.ac.kr/ver4­.0/index.php/re­search/past-research/arm-fpa.html
  4. Coding for NEON – Part 1: Load and Stores
    http://blogs.ar­m.com/software-enablement/161-coding-for-neon-part-1-load-and-stores/
  5. Coding for NEON – Part 2: Dealing With Leftovers
    http://blogs.ar­m.com/software-enablement/196-coding-for-neon-part-2-dealing-with-leftovers/
  6. Coding for NEON – Part 3: Matrix Multiplication
    http://blogs.ar­m.com/software-enablement/241-coding-for-neon-part-3-matrix-multiplication/
  7. Coding for NEON – Part 4: Shifting Left and Right
    http://blogs.ar­m.com/software-enablement/277-coding-for-neon-part-4-shifting-left-and-right/
  8. DSP & SIMD
    http://www.ar­m.com/products/pro­cessors/techno­logies/dsp-simd.php
  9. Improving ARM Code Density and Performance
    New Thumb Extensions to the ARM Architecture Richard Phelan
  10. The ARM Processor Architecture
    http://www.ar­m.com/products/pro­cessors/techno­logies/instruc­tion-set-architectures.php
  11. Thumb-2 instruction set
    http://infocen­ter.arm.com/hel­p/index.jsp?to­pic=/com.arm.doc­.ddi0344c/Bei­iegaf.html
  12. Introduction to ARM thumb
    http://www.ee­times.com/dis­cussion/other/4024632/­Introduction-to-ARM-thumb
  13. ARM, Thumb, and ThumbEE instruction sets
    http://www.ke­il.com/suppor­t/man/docs/ar­masm/armasm_CEG­BEIJB.htm
  14. An Introduction to ARM Assembly Language
    http://dev.em­celettronica.com/in­troduction-to-arm-assembly-language
  15. Processors – ARM
    http://www.ar­m.com/products/pro­cessors/index­.php
  16. The ARM Instruction Set
    http://simple­machines.it/doc/ar­m_inst.pdf
  17. ARM Architecture (Wikipedia)
    http://en.wiki­pedia.org/wiki/AR­M_architecture
  18. BBC BASIC
    http://www.bbcba­sic.co.uk/bbcba­sic.html
  19. BBC BASIC
    http://mdfs.net/Sof­tware/BBCBasic/
  20. BBC BASIC (Z80) for the ZX Spectrum
    http://mdfs.net/Sof­tware/BBCBasic/Spec­trum/
  21. BBC BASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/BBC_BA­SIC
  22. MIPS-3D® ASE
    http://www.mip­s.com/products/ar­chitectures/mips-3d-ase/
  23. An introduction to SPARC's SIMD offerings
    http://mikebu­rrell.wordpres­s.com/2007/12­/14/an-introduction-to-sparcs-simd-offerings/
  24. MIPS64TM Architecture for Programmers Volume IV-c: The MIPS-3DTM Application-Specific Extension to the MIPS64TM
    http://www.we­blearn.hs-bremen.de/ris­se/RST/docs/MIP­S/MD00099–2B-MIPS3D64-AFP-01.11.pdf
  25. Visual Instruction Set
    http://www.eno­tes.com/topic/Vi­sual_Instructi­on_Set
  26. NEON
    http://www.ar­m.com/products/pro­cessors/techno­logies/neon.php
  27. Architecture and Implementation of the ARM Cortex-A8 Microprocessor
    http://www.design-reuse.com/arti­cles/11580/ar­chitecture-and-implementation-of-the-arm-cortex-a8-microprocessor­.html
  28. Multimedia Acceleration eXtensions (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mul­timedia_Accele­ration_eXtensi­ons
  29. AltiVec (Wikipedia)
    http://en.wiki­pedia.org/wiki/Al­tiVec
  30. Visual Instruction Set (Wikipedia)
    http://en.wiki­pedia.org/wiki/Vi­sual_Instructi­on_Set
  31. MAJC (Wikipedia)
    http://en.wiki­pedia.org/wiki/MAJC
  32. MDMX (Wikipedia)
    http://en.wiki­pedia.org/wiki/MDMX
  33. MIPS Multiply Unit
    http://program­medlessons.or­g/AssemblyTuto­rial/Chapter-14/ass14_3.html
  34. Silicon Graphics Introduces Enhanced MIPS Architecture
    http://bwrc.e­ecs.berkeley.e­du/CIC/otherpr/en­hanced_mips.html
  35. MIPS-3D (Wikipedia)
    http://en.wiki­pedia.org/wiki/MIPS-3D
  36. MIPS Technologies, Inc. announces new MIPS-3D technology to provide silicon-efficient 3D graphics acceleration
    http://www.design-reuse.com/new­s/2057/mips-mips-3d-technology-silicon-efficient-3d-graphics-acceleration.html
  37. MIPS-3D Built-in Function (gcc.gnu.org)
    http://gcc.gnu­.org/onlinedoc­s/gcc/MIPS_002d3D-Built_002din-Functions.html
  38. Baha Guclu Dundar:
    Intel MMX, SSE, SSE2, SSE3/SSSE3/SSE4 Architectures
  39. SSE (Streaming SIMD Extentions)
    http://www.son­gho.ca/misc/sse/sse­.html
  40. Timothy A. Chagnon: SSE and SSE2
    http://www.cs­.drexel.edu/~tc365/mpi-wht/sse.pdf
  41. Intel corporation: Extending the Worldr's Most Popular Processor Architecture
    http://downlo­ad.intel.com/techno­logy/architec­ture/new-instructions-paper.pdf
  42. SIMD architectures:
    http://arstechni­ca.com/old/con­tent/2000/03/sim­d.ars/
  43. Intel MMXTM Technology Overview
    Intel corporation, 1996
  44. MultiMedia eXtensions
    http://softpi­xel.com/~cwrig­ht/programmin­g/simd/mmx.php
  45. AMD K5 („K5“ / „5k86“)
    http://www.pcgu­ide.com/ref/cpu­/fam/g5K5-c.html
  46. Sixth Generation Processors
    http://www.pcgu­ide.com/ref/cpu­/fam/g6.htm
  47. Great Microprocessors of the Past and Present
    http://www.cpushac­k.com/CPU/cpu­1.html
  48. Very long instruction word (Wikipedia)
    http://en.wiki­pedia.org/wiki/Ve­ry_long_instruc­tion_word
  49. Tour of the Black Holes of Computing!: Floating Point
    http://www.cs­.hmc.edu/~geof­f/classes/hmc­.cs105…/slides/clas­s02_floats.ppt
  50. 3Dnow! Technology Manual
    AMD Inc., 2000
  51. CPU design (Wikipedia)
    http://en.wiki­pedia.org/wiki/CPU_de­sign
  52. Control unit (Wikipedia)
    http://en.wiki­pedia.org/wiki/Con­trol_unit
  53. Cray History
    http://www.cra­y.com/About/His­tory.aspx?404;http:­//www.cray.com:80/a­bout_cray/his­tory.html
  54. Cray Historical Timeline
    http://www.cra­y.com/Assets/PDF/a­bout/CrayTime­line.pdf
  55. Computer Speed Claims 1980 to 1996
    http://homepa­ge.virgin.net/ro­y.longbottom/mip­s.htm
  56. Superpočítače Cray
    http://www.ro­ot.cz/clanky/su­perpocitace-cray/
  57. Superpočítače Cray (druhá část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-druha-cast/
  58. Superpočítače Cray (třetí část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-treti-cast/
  59. Superpočítače Cray (čtvrtá část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-ctvrta-cast/
  60. Superpočítače Cray (pátá část): architektura Cray X-MP
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-pata-cast-architektura-pocitace-cray-x-mp-a-jeho-pouziti-ve-filmovem-prumyslu/

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.