Platt minnesmodell

Platt minnesmodell eller linjär minnesmodell hänvisar till ett minnesadresseringsparadigm där " minnet framstår för programmet som ett enda sammanhängande adressutrymme ." CPU :n kan direkt (och linjärt ) adressera alla tillgängliga minnesplatser utan att behöva tillgripa någon form av minnessegmentering eller personsökningsscheman .

Minneshantering och adressöversättning kan fortfarande implementeras ovanpå en platt minnesmodell för att underlätta operativsystemets funktionalitet, resursskydd, multitasking eller för att öka minneskapaciteten utöver de gränser som processorns fysiska adressutrymme innebär, men nyckelegenskapen hos en platt minnesmodell är att hela minnesutrymmet är linjärt, sekventiellt och sammanhängande.

I en enkel styrenhet, eller i en inbäddad applikation med en enda uppgift , där minneshantering inte behövs eller är önskvärd, är den platta minnesmodellen den mest lämpliga, eftersom den ger det enklaste gränssnittet från programmerarens synvinkel, med direkt tillgång till allt minne platser och minimal designkomplexitet.

I ett allmänt datorsystem, som kräver multitasking, resursallokering och skydd, måste det platta minnessystemet utökas med något minneshanteringsschema, som vanligtvis implementeras genom en kombination av dedikerad hårdvara (inuti eller utanför CPU:n) och mjukvara byggd in i operativsystemet. Den platta minnesmodellen (på den fysiska adresseringsnivån) ger fortfarande den största flexibiliteten för att implementera denna typ av minneshantering.

Majoriteten av processorarkitekturerna implementerar en platt minnesdesign, inklusive alla tidiga 8-bitars processorer, Motorola 68000-serien, etc. Ett undantag var den ursprungliga 8086 , Intels första 16-bitars mikroprocessor, som implementerade en grov segmenterad minnesmodell som tillät åtkomst till mer än 64 KiB minne utan kostnaden för att utöka alla adresser till mer än 16-bitar.

Minnesmodeller

De flesta moderna minnesmodeller delas in i en av tre kategorier:

Platt minnesmodell

  • Enkelt gränssnitt för programmerare, ren design
  • Störst flexibilitet på grund av enhetlig åtkomsthastighet (switchar för segmenterade minnessidor brukar ha varierande latens på grund av längre åtkomst till andra sidor, antingen på grund av extra CPU-logik vid byte av sida eller hårdvarukrav)
  • Minsta hårdvara och CPU-fastigheter för enkla kontrollertillämpningar [ förtydligande behövs ]
  • Maximal exekveringshastighet, det finns helt enkelt ingen latens på grund av CPU eller logik. [ varför? ]
  • Inte lämplig för allmänna datorer eller multitasking-operativsystem om de inte är förbättrade [ varför? ] med ytterligare hårdvara/mjukvara för minneshantering; men detta är nästan alltid fallet i moderna CISC- processorer, som implementerar avancerad minneshantering och skyddsteknik över en platt minnesmodell. Linux använder t.ex. en platt minnesmodell, se x86-minnessegmentering#Practices .

Sidad minnesmodell

  • Lämplig för multitasking, generell operativsystemdesign, resursskydd och allokering
  • Lämplig för implementering av virtuellt minne
  • Mer CPU-fastigheter, något lägre hastighet
  • Mer komplex att programmera
  • Stela sidgränser, inte alltid den mest minneseffektiva
  • Denna minnesmodell krävs när du använder Physical Address Extension (PAE) i Pentium Pro och senare x86-processorer för att stödja 36-bitars fysiska adresser för att adressera mer än 4 GB fysiskt minne.

x86 segmenterad minnesmodell

  • Liknar sökt minne, men personsökning uppnås genom implicit tillägg av två relativt skiftade register: segment:offset
  • Variabla sidgränser, effektivare och mer flexibel än modellen med sidminne
  • Ganska komplext och besvärligt ur en programmerares synvinkel
  • Svårare för kompilatorer
  • Sidor kan överlappa / dåligt resursskydd och isolering
  • Många till en adressöversättningskorrespondens: Många segment:offset -kombinationer löser sig till samma fysiska adress
  • Större risk för programmeringsfel
  • Implementerad i de ursprungliga Intel 8086, 8088 , 80186 , 80286 , och stöds av 80386 och alla efterföljande x86- maskiner fram till dagens Pentium- och Core 2- processorer. Denna minnesmodell har funnits sedan dess i x86-maskinerna, som nu ger flerlägesdrift och sällan fungerar i det kompatibla segmenterade läget. [ förtydligande behövs ] Se x86-minnessegmentering för detaljer.

Inom x86-arkitekturerna, när man arbetar i verkligt läge (eller emulering), beräknas den fysiska adressen som:

Adress = 16 × segment + offset

(Dvs 16-bitars segmentregistret skiftas åt vänster med 4 bitar och läggs till en 16-bitars offset, vilket resulterar i en 20-bitars adress.)

Se även