Sidtabell

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 3 juli 2021; kontroller kräver 2 redigeringar .

En sidtabell är en datastruktur som används av det virtuella minnessystemet i en dators operativsystem för att lagra mappningen mellan en virtuell adress och en fysisk adress . Virtuella adresser används av den pågående processen , medan fysiska adresser används av hårdvaran , eller mer specifikt RAM -undersystemet . Sidtabellen är en nyckelkomponent i virtuell adressöversättning , som krävs för att komma åt data i minnet.

Rollen för sidtabellen

I operativsystem som använder virtuellt minne skapas illusionen att vilken process som helst har tillgång till linjärt minne av samma storlek som processens adressutrymme [1] . Fysiskt är minnet för varje process uppdelat i sidor (i ett system med personsökning ) eller segment (i ett system med segmenterat virtuellt minne), som kan vara utspridda över olika områden av fysiskt minne eller kan flyttas till en annan lagring, vanligtvis till en hårddisk eller SSD-enhet .

Moderna processorer använder begreppen fysiskt minne och virtuellt minne : körande processer använder virtuella adresser och när en instruktion begär minnesåtkomst, översätter processorn den virtuella adressen till en fysisk adress med hjälp av den associativa översättningsbufferten (TLB) och/eller sidtabellen.

När en process kommer åt data i minnet måste operativsystemet mappa den virtuella adressen som används av processen till den fysiska minnesadressen där data lagras. I en process sidtabell lagrar operativsystemet en mappning av virtuella adresser till fysiska adresser. Varje tabellpost kallas också en "sidtabellpost" (PTE) [2] .

Översättningsprocessen

CPU:ns minneshanteringsenhet (MMU) lagrar en cache över nyligen använda mappningar från operativsystemets sidtabell. Detta kallas översättningsassocieringsbufferten ( TLB ), som är en associationscache.

När en virtuell adress behöver konverteras till en fysisk adress, slås TLB upp först. Om en matchning hittas (kallad " TLB-träff " ) returneras den fysiska adressen och minnesåtkomsten kan fortsätta. Men om det inte finns någon matchning (kallad " TLB-miss "), så söker antingen minneshanteringsmodulen eller operativsystemets TLB-misshanterare upp en adressmatchning i sidtabellen för att se om en matchning finns (kallad " page walk " ). Om mappningen finns skrivs den tillbaka till TLB (detta måste göras eftersom hårdvaran kommer åt minnet via TLB i det virtuella minnessystemet), och den aktuella instruktionen startas om (vilket också kan ske parallellt).

Översättningsfel

Sökningar i sidtabeller kan misslyckas av två anledningar:

När det fysiska minnet inte är fullt är detta en enkel operation: sidan skrivs tillbaka till det fysiska minnet, sidtabellen och TLB uppdateras och instruktionen startas om. Men när det fysiska minnet är fullt måste en eller flera sidor i det fysiska minnet bläddras ut för att ge plats åt den begärda sidan. Sidtabellen måste uppdateras till 1) notera att sidorna som tidigare fanns i fysiskt minne inte längre finns där, och 2) notera att sidan som fanns på disken nu finns i fysiskt minne. Du måste också uppdatera TLB, inklusive att ta bort den avlastade sidan från den och starta om instruktionen.

Sidtabellsdata

De enklaste sidtabellsystemen har ofta en ramtabell och en sidtabell. Ramtabellen innehåller information om vilka ramar som visas. I mer avancerade system kan ramtabellen även innehålla information om vilket adressutrymme sidan tillhör, statistisk information eller annan referensinformation.

Sidtabellen innehåller en mappning mellan en virtuell sidadress och en fysisk ramadress. Det finns också tilläggsinformation om sidan, såsom den aktuella biten, smutsig eller modifierad bit, adressutrymme eller process-ID, till exempel.

Sekundär lagring som en hårddisk kan användas för att öka det fysiska minnet. Sidor kan bläddras ut ur fysiskt minne och disk. Den aktuella biten kan indikera vilka sidor som för närvarande finns i det fysiska minnet eller på disken, och kan indikera hur dessa olika sidor ska hanteras, d.v.s. om en sida ska laddas från disken och om en annan sida ska bläddras ut i det fysiska minnet.

Den smutsiga biten låter dig optimera prestandan. En sida på disk som läses in i det fysiska minnet och sedan läses igen behöver inte skrivas tillbaka till disken eftersom sidan inte har ändrats. Men om en sida har skrivits efter att den har bytts ut kommer dess smutsiga bit att ställas in, vilket indikerar att sidan ska skrivas tillbaka till backing store. Denna strategi kräver att stödarkivet behåller en kopia av sidan efter att den har flyttats till minnet. När den smutsiga biten inte används, bör underlagslagringen endast vara lika med den momentana totala storleken på alla sidor som bläddras ut samtidigt. När den smutsiga biten används kommer vissa sidor alltid att finnas både i det fysiska minnet och i backuplagringen.

Operativsystem som inte är operativsystem för ett enda adressutrymme behöver adressutrymme eller process-ID-information så att det virtuella minneshanteringssystemet vet vilka sidor som är associerade med vilken process. Två processer kan använda två identiska virtuella adresser för olika ändamål. Sidtabellen måste tillhandahålla olika virtuella minnesmappningar för de två processerna. Detta kan göras genom att tilldela olika adressmapps-ID:n till de två processerna, eller genom att använda process-ID:n. Att associera process-ID:n med virtuella minnessidor kan också hjälpa till att välja vilka sidor som ska visas per sida, eftersom sidor som är associerade med inaktiva processer, i synnerhet processer vars huvudkodsida har bytts ut, är mindre sannolikt att behövas omedelbart än sidor som ägs av aktiva processer. .

Som ett alternativ till att tagga sidtabellposter med unika process-ID:n, kan sidtabellen själv uppta olika sidor av virtuellt minne för varje process, så att sidtabellen blir en del av processkontexten. I en sådan implementering kan en process sidtabell bläddras ut närhelst processen inte längre finns i minnet.

Sidtabellsflaggor

Adressen som används i maskinkoden, dvs pekarens värde, kallas den "virtuella adressen".

Adressen som processorn lägger på bussen kallas den "linjära adressen" (som senare omvandlas till en fysisk adress).

Sidtabellsposten innehåller vanligtvis följande information:

Antalet poster i en tabell är begränsat och beror på poststorleken och sidstorleken. En flernivåorganisation av tabeller används, ofta 2 eller 3 nivåer, ibland 4 nivåer (för 64-bitars arkitekturer).

I fallet med 2 nivåer används en "katalog" med sidor, som lagrar poster som pekar på sidtabellernas fysiska adresser. Tabellerna innehåller poster som pekar på sidor med data.

När du använder 3-nivåorganisation läggs en superkatalog till som innehåller poster som pekar på flera kataloger.

De övre bitarna i den virtuella adressen anger numret på posten i katalogen, de mellersta anger numret på posten i tabellen, de nedre bitarna (adressen inuti sidan) går till den fysiska adressen utan översättning.

Formatet på tabellposter, deras storlek, sidstorlek och organisation av tabeller beror på typen av processor och ibland även på dess funktionssätt.

Historiskt sett har x86 använt 32-bitars PTE:er, 32-bitars virtuella adresser, 4-KB-sidor, 1024 tabellposter, tvånivåtabeller. De övre 10 bitarna av den virtuella adressen är numret på posten i katalogen, de nästa 10 är numret på posten i tabellen, de nedre 12 är adressen på sidan.

Från och med Pentium Pro stöder processorn 4 MB sidor. Men för att systemet och programmen som körs på det ska kunna använda sidor av denna storlek måste sidtekniken på 4 MB (hugepages) vara korrekt aktiverad och applikationen måste konfigureras för att använda sidor av denna storlek.

x86-processorn i PAE -läge (Physical Address Extension) och i x86_64-läge (långt läge) använder 64-bitars PTE (av vilka inte alla fysiska adressbitar faktiskt används, från 36 i PAE till 48 i vissa x86_64), 32-bitars virtuella adresser, 4-KB-sidor, 512 tabellposter, trenivåtabeller med fyra kataloger och fyra superkatalogposter. De övre 2 bitarna i den virtuella adressen är numret på posten i superkatalogen, de nästa 9 bitarna finns i katalogen, de nästa 9 bitarna finns i tabellen. Den fysiska adressen till katalogen eller superkatalogen laddas in i ett av processorns kontrollregister .

När PAE används används 2MB-sidor istället för 4MB stora sidor. Se även PSE .

På x86_64-arkitekturen är det möjligt att använda sidor på 4 kilobyte (4096 byte), 2 megabyte och (i vissa AMD64) 1 gigabyte.

Om minnesåtkomsten inte kan översättas genom TLB, kommer processormikrokoden åt sidtabellerna och försöker ladda PTE därifrån till TLB. Om problemen kvarstår efter ett sådant försök, utför processorn ett speciellt avbrott som kallas " sidfel " (sidfel). Hanteraren för detta avbrott finns i det virtuella minnesundersystemet i OS-kärnan.

Vissa processorer (MIPS) har inte mikrokod som kommer åt tabellen och genererar ett sidfel omedelbart efter en misslyckad uppslagning i TLB, åtkomst till tabellen och dess tolkning är redan tilldelad sidfelshanteraren. Detta tar bort kravet på att sidtabeller ska överensstämma med ett hårdkodat format på hårdvarunivå.

Orsaker till att sidan misslyckades

Orsaker till sidfel ( sidfel ):

Kärnfelshanteraren kan ladda den önskade sidan från en fil eller från växlingsområdet (se växlingsområdet ), kan skapa en skrivskyddad kopia av sidan som är tillgänglig för skrivning, eller kan skapa ett undantag (i UNIX-termer - SIGSEGV- signalen ) i denna process.

Varje process har sin egen uppsättning sidtabeller. Sidkatalogregistret laddas om på varje processkontextväxel . Det är också nödvändigt att återställa den del av TLB som gäller för denna process.

I de flesta fall placeras OS-kärnan i samma adressutrymme som processerna, och de översta 1-2 gigabytena av 32-bitars adressutrymmet för varje process är reserverade för det. Detta görs för att undvika att byta sidtabell när du går in i och lämnar kärnan. Kärnsidor är markerade som otillgängliga för användarlägeskod.

Minnesregionen som innehåller kärnan är ofta identisk för alla processer, men vissa av dess underregioner (till exempel Windows-kärnregionen som innehåller grafikundersystemet och videodrivrutinen) kan vara olika för olika grupper av processer (sessioner).

Eftersom kärnminnet är detsamma för alla processer, behöver motsvarande TLB:er inte laddas om efter en processväxling. För denna optimering stöder x86 den "globala" flaggan på PTE.

Se även

Anteckningar

  1. E. Tannenbaum. Datorarkitektur = Strukturerad datororganisation. - 5:e uppl. - St Petersburg. : Peter, 2013. - S. 478. - 884 sid. - ISBN 978-5-469-01274-0 .
  2. Hantering av sidtabell  . kernel.org . Hämtad 28 september 2015. Arkiverad från originalet 3 augusti 2020.