Språk :
SWEWE Medlem :Inloggning |Registrering
Sök
Encyclopedia gemenskap |Encyclopedia Svar |Submit fråga |Ordförråd Kunskap |Överför kunskap
Föregående 1 Nästa Välj Sidor

Skyddat läge

Skyddat läge, (skyddat läge, eller ibland förkortat PMODE) är x86-kompatibel driftläge CPU och efter en serie 80286. Skyddat läge har några nya funktioner som utformats för att förbättra multi-tasking och stabiliteten i systemet, till exempel minnesskydd, personsökarsystem, och hårdvarustöd för virtuellt minne. De flesta av dagens x86-operativsystem körs i skyddat läge, inklusive Linux, FreeBSD och Microsoft Windows 2.0 och senare versioner.

Översikt

Skyddat läge och verkliga läge motsvarar. I tidigare 80286, CPU enda verkliga läget, är adressbussen 20, och minnesadressen är 16, vilket kan komma åt upp till 2 ^ 20 = 1M av minnesutrymme. I 80286 och senare, minnesadress till den 16 eller 32, åtminstone kan du få tillgång till 2 ^ 32 = 4G minne. Men för att säkerställa uppföljning processor som kan köra den gamla processorn, bara kan behålla bakåtkompatibilitet. Således, den första processorn 80286 och senare i verkliga läge till skyddat läge och sedan in genom kopplingsmekanismen.Jämfört med skyddat läge och verkliga läge, två huvudsakliga skillnader: För det första, för att ge en skyddsmekanism mellan segmenten för att förhindra inter-programmet ta itu med de problem som orsakas av random access, och andra, större minne tillgång, se föregående beskrivning.

8086/8088 gånger, det finns bara en drifts processorn (driftläge), så eftersom det inte finns något annat driftläge, så det här läget är att inte namnges. Sedan början av 80.286-80.386, processorn tillkommer ytterligare två lägen - skyddat läge PM (skyddat läge) och System Management Mode SMM (System Management Mode), därför, var 8086/8088 modell som heter som den verkliga adressläge RM ( Real-adressläge).

PM är processorns enhetligt läge, i det här läget, stödjer processorn alla kommandon och alla strukturella egenskaper av systemet, vilket ger högsta prestanda och kompatibilitet. För alla nya applikationer och operativsystem, den föreslagna användningen här läget. För att säkerställa kompatibilitet PM, gör RM processor programkörning i en skyddad, multitasking miljö. Denna funktion kallas virtuellt 8086-läge (virtuella -8086 läge), även om det inte är en riktig processorläge. Virtual-8086-läget är faktiskt ett PM egendom, kan alla uppgifter använda den.

RM ger Intel 8086-processor programmeringsmiljö, medan det finns några utökningar (till exempel möjligheten att byta till PM eller SMM). När värden är Power-up eller Reset, är processorn i RM.

SMM är en standard struktur kännetecknande för alla Intel-processorer är enhetligt system. Fanns med i Intel386 SL chips. Detta läge anges genomförande plattform OS-funktioner (t.ex. strömhantering eller systemsäkerhet) ger en öppen mekanism. När en extern SMM avbrottsstift (SMI #) är aktiverad eller SMI emot från APIC (Advanced Programmering Interrupt Controller), kommer processorn att träda SMM. I SMM, det program som körs när du sparar en hel sammanhang (kontext), växlar processorn till en separat adressutrymmen. SMM-kod kan sedan tilldelas en transparent avrättades. När du återvänder från SMM kommer processorn återgår till staten av den systemansvariga avbrott innan.

Eftersom maskinen efter Power-up eller Reset, är processorn RM staten, och för Intel 80386 och efterföljande chips, endast använda PM för att spela den största rollen. Så vi står inför en övergång från RM till PM frågor.

Denna artikel behandlar inte de SMM, det här avsnittet fokuserar på hur man växlar Starta scenen från RM till PM är diskussionen här inte alltför mycket detaljer PM eftersom "Intel Architecture Software Developer Handbok Volume 3: Systemprogrammering" på ett mycket detaljerat och korrekt beskrivning.

Global Descriptor Table (GDT Global Descriptor Table): I skyddat läge, är en viktig datastrukturen nödvändig GDT (Global Descriptor Table).

Varför ska GDT? Vi anser först under verkliga programmeringsmodell Läge:

I Real-läge, åt vi en minnesadress per segment: Offset synen på vilken Segment Base-adress är ett segment, den maximala längden på ett segment är 64 KB, vilket är en 16-bitars system kan representeras maximal längd. Den Offset är i förhållande till detta segment Base Adress offset. Base Address Offset är en absolut minnesadress. Vi kan alltså se ett segment med två faktorer: Base Adress och Limit (maximal längd segment), tillgång till en minnesadress, är det noteras: Vilken avdelning? Samt i förhållande till detta segment av Base Adress Offset, Offset bör vara mindre än detta segment Limit. Naturligtvis, för 16-bitars system, inte gränsvärden som anges, standard är den maximala längden på 64 KB, medan 16-bitars offset aldrig kan vara större än gränsen. Vår faktiska programmering, användningen av 16-bitars segmentet registrerar CS (Code Segment), DS (Data Segment), SS (Stack segment) för att ange Segment, CPU kommer att kompenseras till vänster segmentet registervärden i 4 bitar, lägg 20-bitars adress 20-bitars på nätet har blivit basadressen.

För Skyddat läge är minnesmodell delas in i två typer, segment läge och sida-läge, sid-läge som också är baserad segmentmodell. Med andra ord är skyddat läge minneshantering modell faktiskt: ren segmentet mode och stycket på sidan. Vidare är modellen segmentet väsentligt, och sida-läge är valfria - om du använder sidan läget är stycket på sidan, annars är detta ren läge segment.

Som sådan, anser vi inte att den första sidan läget. För segmentmodell i form av tillgång till en minnesadress fortfarande använda Segment: Offset vägen, detta är mycket naturligt. På grund av två faktorer Skyddat läge körs på 32-bitarssystem, segmentets: Base adress och Limit är också 32-bitars. IA-32 låter Base adress är satt till ett värde av ett segment kan representeras av 32 bitar (Limit kan ställas in på en 32-bitars värde som kan uttryckas i satser om 2 ^ 12), till skillnad från Real-läge under, Bas-adress endast ett segment är en multipel av 16 (på grund av dess låga 4-bitars vänster skift har kommit igenom, bara till 0, för att använda registren för 16-bitars segmentet, säger 20-bitars Base Adress syfte), samt ett segment Limit är ett fast värde endast 64 kB. Dessutom Skyddat läge, som namnet antyder, det ger skydd för segmentet mode, sade också ett segment deskriptor måste ge sin egen åtkomst (Access). Därför, under Skyddat läge, en beskrivning av ett segment innefattar tre faktorer: [Base Adress, Limit, Tillgång], tillsammans de placeras i en 64-bitars längd datastruktur, kallad segmentet deskriptor . I detta fall, om vi direkt genom ett 64-bitars segmentet deskriptor att hänvisa till en del av tiden, måste du använda en 64-bitars segmentet registren är laddade med det långa segmentet deskriptor. Men Intel att bibehålla bakåtkompatibilitet, är registren segmentet fortfarande anges som 16-bitars (trots att det finns en per registersegment 64-bitars-långa avsnitt är inte synlig, men för programmerare, är registersegmentet en 16-bitars ), då är det uppenbart att vi inte kan passera längden av segmentet registrera 16-bitars till 64-bitars direkt hänvisning till segmentet deskriptom.

Hur göra? Lösningen är att dessa längder till 64-bitars segmentet deskriptor i en matris, och värdet på segmentregistren som en nedsänkt index indirekt referens (i själva verket är segmentregistren i den höga 13-bitars innehåll som ett index). Denna globala array är GDT. I själva verket inte bara lagras i GDT deskriptorer, samt andra deskriptorer, som är 64-bitars lång följde vi diskussionen.

GDT kan placeras på valfri plats i minnet, sedan när programmeraren genom segmentet registren för att hänvisa till ett segment deskriptor tid, CPU GDT måste veta ingången, vilket är basen adress var att sätta, så Intels designers gate ger ett register Efter GDTR används för att lagra GDT post adress, programmeraren kommer GDT ange en plats i minnet, kan du montera detta GDT posten adressregister från LGDT instruktion, sedan dess, CPU-register i enlighet med detta innehåll som GDT Ingången för att komma åt GDT.

GDT är skyddat läge nödvändiga datastrukturer, den enda - bör inte, och kan inte ha mer än en. Vidare, precis som namnet (Global Descriptor Table) visade att det är globalt synlig, för ändamålet är sådana att någon uppgift.

Förutom den GDT, IA-32 möjliggör också programmeraren att bygga en datastruktur liknande den GDT, kallas de LDT (Local Descriptor Table), men skillnaden är GDT kan LDT existera i flera system och från LDT Namnet kan läras, är LDT inte globalt synliga, de är bara synliga hänvisning till sina uppgifter, och varje uppgift kan ha upp till en LDT. Dessutom, varje segment LDT sig som en present, placeras de i segmentet deskriptor i GDT.

IA-32 för LDT posten adress ger också ett register LDTR, eftersom när som helst bara en uppgift körs, så det LDT också bara ha ett globalt register. Om en aktivitet har sin egen LDT, sedan när den behöver referera till sin egen LDT, måste det vara av LLDT LDT segment deskriptor montera detta register. LLDT kommando och LGDT instruktion är annorlunda, LGDT instruktion operand är en 32-bitars minnesadress, den minnesadress lagras i ett 32-bitars GDT ingångsadress, såväl som en 16-bitars GDT Limit. Den LLDT instruktion operand är ett 16-bitars under val, det huvudsakliga innehållet i denna välj under: LDT segment deskriptor laddas i indexvärdena i GDT in - och detta är register segmentet just diskuterat med hänvisning till mönstersegment är desamma.

LDT är bara en valfri datastruktur, kan du göra det. Använd den kan få lite bekvämlighet, men också ger komplexitet, om du vill att ditt OS-kärnan för att bibehålla enkelhet och portabilitet, är det bäst att inte använda den.

GDT och LDT etapper referenser i segmentet deskriptor beskriver, genom ett 16-bitars datastruktur för att uppnå, kallas denna datastruktur Segment Selector - segmentväljare. Dess höga 13 som refereras segment deskriptor i GDT / LDT index index, bit 2 används för att ange den refererade segmentet deskriptor placeras i GDT eller LDT i, bit 0 och bit 1 är RPL- - Begär behörighetsnivå, användes för att göra skyddsändamål, behöver vi inte diskutera det i detalj här.

Ladda segmentregistren som diskuterats tidigare GDT / LDT index Segment Selector, när du behöver för att referera till en minnesadress, är fortfarande Segment bruk: Offset läge, är den specifika verksamheten: i motsvarande register segmentet laddas Segment Selector, Enligt denna Segment Selector kan hittas i GDT eller LDT motsvarande Segment Descriptor, Segment Descriptor registrerats i detta avsnitt av Base adress, lägg sedan till Offset, få den sista minnesadress.

Installation Beskrivning

Från föregående avsnitt diskuterade det, GDT är skyddat läge nödvändig datastrukturer, så innan vi går in i skyddat läge, måste du ställa in GDT, och genom LGDT laddas i motsvarande register.

Även om GDT tillåter minnet placeras på valfri plats, men elementen i GDT - Descriptor - både 64-bitars längd, är det 8 byte, så att åtkomst till processorhastighet GDT Det snabbaste, bör vi sätta GDT posten adress till 8-byte linje, är det en multipel av 8 adress plats.

GDT första deskriptor måste vara en tom deskriptor, vilket är allt innehåll ska vara 0. Om du refererar till denna deskriptor minnesåtkomst genereras undantag General Protection.

Om ett OS inte använder virtuell modell minnessegment skulle vara ett bra val. Men ingen modern OS inte använder virtuellt minne, virtuellt minne och mer bekväm och effektiv minneshantering är en sida management. Men i IA-32 om man vill använda sidan hantering, vi kan bara använda stycket på sidan - inget sätt att läget segment helt förbjuda. Men vi kan försöka göra effekten av att sänka minimisegmentet.

IA-32 ger vad som kallas "Basic Flat Model" segmenterad läge kan uppnå denna effekt. Detta läge kräver minst definieras i GDT två deskriptorer, som används för att referera till datasegment, en annan för att citera kod Segment. Detta 2 Segment innehåller hela linjärt rum, nämligen Segment Limit = 4 GB, även om den faktiska fysiska minnet är långt inte så mycket, men för framtiden för detta utrymme definieras av sidan ledningen att implementera virtuellt minne.

Efter här, vi är bara på Starta skede, så vi behöver bara början inställd på GDT och andra verkligen gå in Skyddat läge, starta OS Kernel, specifikt operativsystem avser att inrätta GDT, användning av minneshantering läget fastställs av Kernel själv, data och kod segment Uppstart Kernel inställningar bara ge all den linjära utrymme på den.


Föregående 1 Nästa Välj Sidor
Användare Omdöme
Inga kommentarer
Jag vill kommentera [Besökare (34.206.*.*) | Inloggning ]

Språk :
| Kontrollera kod :


Sök

版权申明 | 隐私权政策 | Copyright @2018 World uppslagsverk kunskap