Hukommelsessegmentering - Memory segmentation
Hukommelse segmentering er et operativsystem hukommelsesadministration teknik af division af en computer 's primære hukommelse i segmenter eller sektioner . I et computersystem, der anvender segmentering, indeholder en reference til en hukommelseslokation en værdi, der identificerer et segment og en forskydning (hukommelsesplacering) inden for det segment. Segmenter eller sektioner bruges også i objektfiler i kompilerede programmer, når de er knyttet sammen til et programbillede, og når billedet indlæses i hukommelsen.
Segmenter svarer normalt til naturlige opdelinger af et program, såsom individuelle rutiner eller datatabeller, så segmentering generelt er mere synlig for programmøren end personsøgning alene. Forskellige segmenter kan oprettes til forskellige program -moduler , eller til forskellige klasser af hukommelsesforbrug såsom kode og data segmenter . Visse segmenter kan deles mellem programmer.
Segmentering blev oprindeligt opfundet som en metode, som systemsoftware kunne isolere forskellige software processer ( opgaver ) og data, de bruger. Det var meningen at øge pålideligheden af de systemer, der kører flere processer samtidigt. I en x86-64 arkitektur betragtes det som ældre, og de fleste x86-64-baserede moderne systemsoftware bruger ikke hukommelsessegmentering. I stedet håndterer de programmer og deres data ved hjælp af hukommelsessøgning, der også fungerer som en måde til beskyttelse af hukommelse. De fleste x86-64-implementeringer understøtter det dog stadig af bagudkompatibilitetsgrunde.
Hardwareimplementering
I et system, der bruger segmentering, består computerhukommelsesadresser af et segment -id og en forskydning inden for segmentet. En hardware hukommelse ledelse enhed (MMU) er ansvarlig for at oversætte det segment og offset ind i en fysisk adresse , og til at udføre kontrol for at sikre, at oversættelsen kan gøres, og at henvisningen til dette segment og offset er tilladt.
Hvert segment har en længde og et sæt tilladelser (f.eks. Læsning , skrivning , eksekvering ). En proces må kun lave en reference til et segment, hvis referencetypen er tilladt af tilladelserne, og hvis forskydningen inden for segmentet er inden for det område, der er angivet af segmentets længde. Ellers rejses en hardware -undtagelse, f.eks. En segmenteringsfejl .
Segmenter kan også bruges til at implementere virtuel hukommelse . I dette tilfælde har hvert segment et tilhørende flag, der angiver, om det er til stede i hovedhukommelsen eller ej. Hvis der tilgås et segment, der ikke findes i hovedhukommelsen, rejses en undtagelse, og operativsystemet læser segmentet ind i hukommelsen fra sekundær lagring.
Segmentering er en metode til implementering af hukommelsesbeskyttelse . Personsøgning er en anden, og de kan kombineres. Størrelsen på et hukommelsessegment er generelt ikke fastlagt og kan være så lille som en enkelt byte .
Segmentering er blevet implementeret på flere forskellige måder på forskellige hardware, med eller uden personsøgning. Intel x86 -hukommelsessegmentering passer ikke til nogen af modellerne og diskuteres separat nedenfor og også mere detaljeret i en separat artikel.
Segmentering uden personsøgning
Til hvert segment er tilknyttet information, der angiver, hvor segmentet er placeret i hukommelsen - segmentbasen . Når et program refererer til en hukommelsesplacering, tilføjes forskydningen til segmentbasen for at generere en fysisk hukommelsesadresse.
En implementering af virtuel hukommelse på et system ved hjælp af segmentering uden personsøgning kræver, at hele segmenter byttes frem og tilbage mellem hovedhukommelse og sekundær lagring. Når et segment byttes ind, skal operativsystemet tildele tilstrækkelig sammenhængende ledig hukommelse til at holde hele segmentet. Ofte resulterer hukommelsesfragmentering, hvis der ikke er tilstrækkelig sammenhængende hukommelse, selvom der i alt kan være nok.
Segmentering med personsøgning
I stedet for en faktisk hukommelsesplacering indeholder segmentoplysningerne adressen på en sidetabel for segmentet. Når et program henviser til en hukommelsesplacering, oversættes forskydningen til en hukommelsesadresse ved hjælp af sidetabellen. Et segment kan udvides ved blot at allokere en anden hukommelsesside og tilføje den til segmentets sidetabel.
En implementering af virtuel hukommelse på et system ved hjælp af segmentering med personsøgning flytter normalt kun individuelle sider frem og tilbage mellem hovedhukommelse og sekundær lagring, svarende til et personsøgt ikke-segmenteret system. Sider i segmentet kan placeres hvor som helst i hovedhukommelsen og behøver ikke være sammenhængende. Dette resulterer normalt i en reduceret mængde input/output mellem primær og sekundær lagring og reduceret hukommelsesfragmentering.
Historie
Den Burroughs Corporation B5000 computer var en af de første til at gennemføre segmentering, og "måske den første kommercielle computer til at give virtuel hukommelse" baseret på segmentering. Den senere B6500 -computer implementerede også segmentering; en version af dens arkitektur er stadig i brug i dag på Unisys ClearPath Libra -servere.
The GE-645 computer, en modifikation af GE-635 med segmentering og personsøgning støtte tilsat, blev designet i 1964 at støtte Multics .
Den Intel iAPX 432 , påbegyndt i 1975, forsøgt at gennemføre en ægte segmenteret arkitektur med hukommelse beskyttelse på en mikroprocessor.
960MX-versionen af Intel i960- processorer understøttede indlæsnings- og lagringsinstruktioner, idet kilden eller destinationen er en "adgangsbeskrivelse" for et objekt og en forskydning i objektet, hvor adgangsbeskrivelsen er i et 32-bit register og med forskydningen beregnet ud fra en basisforskydning i det næste register og fra en yderligere forskydning og eventuelt et indeksregister, der er specificeret i instruktionen. En adgangsbeskrivelse indeholder tilladelsesbit og et 26-bit objektindeks; objektindekset er et indeks i en tabel med objektbeskrivere, der giver en objekttype, en objektlængde og en fysisk adresse til objektets data, en sidetabel for objektet eller sidetabellen på øverste niveau for et to-niveau sidetabel for objektet, afhængigt af objekttypen.
Prime , Stratus , Apollo , IBM System/38 og IBM AS/400 (inklusive IBM i ) computere bruger hukommelsessegmentering.
x86 arkitektur
Den hukommelsessegmentering, der bruges af tidlige x86 -processorer, begyndende med Intel 8086 , yder ingen beskyttelse. Ethvert program, der kører på disse processorer, kan få adgang til ethvert segment uden begrænsninger. Et segment identificeres kun ved dets startsted; der er ingen kontrol af længden. Segmentets startadressegranularitet er 16 bytes, og forskydningen er 16 bit, der understøtter segmentstørrelser op til 64 KiB, så segmenter kan (og ofte gør) overlapning, og hver fysisk adresse kan betegnes med 4096 forskellige segment -offset -par (giver mulighed for adresse offset wrap-around).
Segmentering i Intel 80286 og senere giver beskyttelse: med introduktionen af 80286 navngav Intel med tilbagevirkende kraft den eneste driftstilstand for de tidligere x86 CPU -modeller til " rigtig tilstand " og introducerede en ny " beskyttet tilstand " med beskyttelsesfunktioner. For bagudkompatibilitet starter alle x86-CPU'er i "ægte tilstand" uden hukommelsesbeskyttelse, faste 64 KiB-segmenter og kun 20-bit (1024 KiB) adressering. En 80286 eller nyere processor skal skiftes til en anden tilstand af software for at kunne bruge hele dets adresserum og avancerede MMU -funktioner.
Den Intel 80386 og senere processorer understøtter også personsøgning; i disse processorer indeholder segmenttabellen frem for at pege på en sidetabel for segmentet segmentadressen i lineær hukommelse . Adresser i lineær hukommelse tilknyttes derefter fysiske adresser ved hjælp af en separat sidetabel, hvis personsøgning er aktiveret.
Den x86-64 arkitektur bruger ikke segmentering i lang tilstand (64-bit tilstand). I en x86-64 arkitektur betragtes det som ældre, og de fleste x86-64-baserede moderne systemsoftware bruger ikke hukommelsessegmentering. I stedet håndterer de programmer og deres data ved hjælp af hukommelsessøgning, der også fungerer som en måde til beskyttelse af hukommelse. Selvom de fleste x86-64-implementeringer stadig understøtter det af bagudkompatible årsager. Fire af segmentregistre: CS, SS, DS og ES er tvunget til 0 og grænsen til 2 64 . Segmentregisterne FS og GS kan stadig have en nul -base -adresse. Dette gør det muligt for operativsystemer at bruge disse segmenter til særlige formål.
Se også
- Hukommelsesstyring (operativsystemer)
- Virtuelt adresserum
- Virtuel hukommelse
- Datasegment
- BSS -segment
- x86 hukommelsessegmentering
- Segmenteringsfejl
- Flad hukommelsesmodel
Referencer
eksterne links
- IA-32 Intel Architecture Software Developer's Manual Volume 3A: System Programming Guide. http://www.intel.com/products/processor/manuals/index.htm .
- Operativsystemer: Internals and Design Principles af William Stallings. Udgiver: Prentice Hall. ISBN 0-13-147954-7 . ISBN 978-0-13-147954-8 .