Lunds Tekniska Högskola Campus Helsingborg Datorarkitekturer med Operativsystem EDT621 Rapport Cacheminneshantering för ARM3-processorer 7 december 2015 Pierre Aupeix dat11pau@student.lu.se
1 Abstract Denna rapport visar hur ARM3-processorns cacheminne är uppbyggt och fungerar. Rapporten redogör för hur den blandade data- och instruktionscachen adresseras med 64-vägs set-associativ mappning och hur write-through används som skrivteknik för att hålla cacheminne och primärminne konsistent. 2 Syfte Syftet med denna rapport var att redovisa för hur cacheminnet i en ARM3- processor fungerar. Mer specifikt: Hur är minnet uppbyggt? Vilken skrivteknik används? Hur adresseras minnesplatset? Vilken ersättningsalgortim används? 3 Inledning ARM3-processorn släpptes år 1989 och var ARMs första processor med ett cacheminne på samma krets (Furber 2000). Cacheminnet var 4 Kbyte stort och var en blandad data- och instruktionscache. Minnet var virtuellt adresserat och 64-vägs associativt mappat. Skrivningar gjordes till cacheminnet men också direkt till primärminnet, såkallat write-through (Furber och Thomas 1990). 3.1 Cacheminnen Cacheminnen används som ett mellanlagringsmedium för data så denna data snabbare kan tillhandahållas vid behov. Data kopieras från andra lagringsmedium, ofta med mycket större kapacitet, till cacheminnet - som däremot tenderar att vara mycket snabbare. All data får inte alltid plats i cacheminnet och därför används olika metoder för att effektivisera platsen i minnet. Temporal- och rumslokalitet är två koncept som menar att data eller instruktioner som har blivit refererade nyligen, eller ligger rent fysiskt i närheten av datan eller instruktionen är sannolika att användas i framtiden. Principerna kan appliceras på cacheminnen enligt följade: Om data eller en instruktion behövs kan cacheminnet spara en kopia av block av närliggande data och instruktioner. Vid behov av data eller en instruktion kontrolleras cacheminnet, innehåller minnet datan eller instruktionen räknas det som en hit och datan eller instruktionen används. Skulle den eftersökta datan eller instruktionen inte återfinnas i cacheminnet räknas det som en miss och datan eller instruktionen kopieras från ett annat minnesmedium in i cacheminnet och används (Furber 2000). 1
4 Cacheminneshantering för ARM3-processorer ARM3-processorns cacheminne har en blandad data- och instruktionscache på 4096 byte, virtuellt adresserad, 64-vägs set-associativt mappad med blockstorlek 4 stycken 32-bitarsord organiserat på 256 cacherader. Skrivtekniken som används är write-through där cachen ignoreras vid skrivmiss, ersättningsalgoritmen som används är slumpmässigt urval (Furber och Thomas 1990). Vad var och en av dessa egenskaper och metoder är och hur de fungerar kommer att redovisas nedan. 4.1 Cacheminnets struktur Cacheminnet för en ARM3 processor har kapaciteten 1024 stycken ord med en ordstorlek på 32 bitar. Dessa ord är fysiskt lagrade i ett minne med 1024 adressplatser. Den specifika adressen till platsen avkodas med hjälp av en tag i de fyra associativa minnena vars kapacitet är 64 stycken av dessa tags (ibid.). En förenklad version av minnestrukturen används för att förklara den associativa mappning i ett senare avsnitt. I Figur 1 visas strukturen för cacheminnet i en ARM3-processor. Figur 1: Cacheminnets struktur De två minst signifikanta bitarna i 26-bitarsadressen ignoreras vid ord-adressering och används endast vid byte-skrivning. Vid en cacheträff kommer de sex minst signifikanta bitarna i tagen att användas tillsammans med bit 2 till och med 5 i 26-bitarsadressen för att utgöra en 10-bitarsadress. Denna 10-bitarsadress kommer att specificera adressplatsen för den eftersökta datan eller instruktionen i cacheminnet (ibid.). ARM3-processorn använder sig av en blandad data- och instruktionscache. Då alla instruktioner för processorn är 32 bitar långa tar en instruktion fyra 2
bytes, eller ett ord, att lagra. Detta medför att en hel instruktion kan hittas vid endast en cacheträff. (Furber 2000). De associativa minnena innehåller förutom tags dels en validitetsbit men också andra bitar för hantering av vland annat skrivskyddade adressområden. Vad dessa bitar gör kommer inte att täckas av rapporten. 4.2 Adressering ARM3-processorn har 27 stycken 32-bitars register där endast 16 av dessa är tillgängliga för användaren. Register 15 innehåller både programräknaren samt statusregistret. Detta ger programräknaren endast 24 bitar plats i registret (Furber och Thomas 1990). Statusregistret tillhandahåller funktionalitet för processorn och ligger utanför rapportens ämnesområde och kommer därför inte att redogöras för. Nedan ses Figur 2 som visar hur programräknarbitarna översätts till en adress. Figur 2: Programräknare till adress Programräknarens 24 bitar vadderas med två minst signifikanta bitar satta till 0 (vid ordadressering). Bit 2 och 3 specificerar vilket ord adressen pekar på. Bit 4 och 5 specificerar vilket set adressen pekar på. De resterande 20 bitarna blir en tag. Denna tag används för att kontrollera att rätt cacherad hittats vid läsning och skrivning. Den totala adresslängden blir då alltså 26 bitar lång. Det medför att adressbussen endast behöver vara 26 bitar bred men också att den maximala adresserbara mängden primärminne endast är 2 26 bytes, eller 64 MB (Alan 2010). 3
4.3 Assosiativ mappning ARM3-processorn använder sig av associativ mappning vid adressering av cacheminnet. Mer specifikt används 64-vägs set-associativ mappning. Det innebär att cacheminnets block är indelade i ett antal set; i detta fall 4 stycken set med 64 cacherader i varje set (Furber och Thomas 1990). Ett exempel på hur en avkodning av en data- eller instruktionsadress sker enligt Figur 3. Figur 3: Adress till cacheplats De två minst signifikanta bitarna ignoreras då ordadressering används. Bit 2 och 3 specificerar vilket ord adressen pekar på. I exemplet ovan avkodas dessa adressbitarna till att peka på det tredje ordet. Bit 4 och 5 specificerar vilket set adressen pekar på. Dessa avkodas till att peka på set 1. Varje set innehåller 64 cacherader vilka alla har samma adress förutom de 20-bitarna som utgör en tag. Adressens tag avkodas och kontrolleras mot de 64 cacheradernas tag. Vid likhet har en cacheträff inträffat. I exemplet ovan avkodas en 26-bitars adress och en cacheträff sker på minnesplatsen för ord 3 i andra cacheraden i set 1. 4
4.4 Write-thorugh Vid läsning av en minnesplats kontrolleras först cacheminnet om samma minnesplats finns sparad där. Finns den efterletade datan eller instruktionen i cacheminnet räknas det som en hit varpå datan eller instruktionen används. Skulle minnesplatsen däremot inte finnas i cacheminnet kommer den eftersökas vidare i primärminnet. Vid skrivning till minne kan olika tekniker användas. Skrivtekniken som används av ARM3-processorn är write-though. Write-through innebär att all skrivning sker direkt i primärminnet samt i vissa fall cacheminnet samtidigt. Vid en skrivning kommer minnesplatsen för skrivningen kontrolleras i cacheminnet. Skulle minnesplatsen finnas i cacheminnet kommer minnesplatserna i både cacheminnet och primärminnet uppdateras för den specifika adressen. Skulle det däremot minnesplatsen inte återfinnas i cacheminnet kommer endast minnesplatsen i primärminnet uppdateras. Vid en skrivmiss kan olika tekniker användas. En teknik kallas allocate on write miss och innebär att blocket i primärminnet, där minnesplatsen för skrivningen befinner sig, kommer att kopieras till cacheminnet. En annan teknik, no-allocate on write miss, kommer inte att kopiera in minnesplatsens block i cacheminnet. Detta är tekniken ARM3-processorn använder sig av (Furber 2000). 4.5 Cacheradsersättning Cacheminnet i ARM3-processorn har plats för 256 block. Då 64-vägs set-associativ mappning används har varje set plats för 64 block (Furber och Thomas 1990). Vid en läsningsmiss i cacheminnet kommer blocket tillhörande eftersökta minnesplatsen att kopieras till cacheminnet. Skulle då adressen avkodas till att placeras i ett set som redan har alla cacherader upptagna kommer en radersättning att ske (Furber 2000). Cacheradersättning kan ske på olika sätt. ARM3-processorn använder sig av slumpmässig ersättning, det betyder att vid en läsningsmiss i cacheminnet kommer blocket tillhörande den eftersökta minnesplatsen att kopieras till cacheminnet. Blockets adress avkodas och skulle det set blocket tillhör vara fullt kommer en slumpmässig cacherad att raderas varpå den nya kopieras in på dess plats (Furber och Thomas 1990). Referenser Alan, R. (2010). Archimedes Hardware. url: https://www.riscosopen.org/ wiki/documentation/show/archimedes%20hardware/ (hämtad 2015-11-30). Furber, S. (2000). ARM System-on-Chip Architecture. 2. utg. Addison-Wesley. Furber, S. och A. Thomas (1990). ARM3 - a study in design for compatibility. I: Microprocessors And Microsystems 14, s. 407 415. 5