X86 Speichersegmentation

X86-Speichersegmentation bezieht sich auf die Durchführung der Speichersegmentation auf der x86 Architektur. Gedächtnis wird in Teile geteilt, die durch ein einzelnes Index-Register gerichtet werden können, ohne einen 16-Bit-Segment-Auswählenden zu ändern. In der echten Weise oder V86 Weise ist ein Segment immer 64 Kilobytes in der Größe (16-Bit-Ausgleiche verwendend). In der geschützten Weise kann ein Segment variable Länge haben. Segmente können überlappen.

Echte Weise

In der echten Weise wird der 16-Bit-Segment-Auswählende als die bedeutendsten 16 Bit einer geradlinigen 20-Bit-Adresse, genannt eine Segment-Adresse interpretiert, deren die restlichen vier am wenigsten bedeutenden Bit alle Nullen sind. Die Segment-Adresse wird immer mit einem 16-Bit-Ausgleich hinzugefügt, um eine geradlinige Adresse nachzugeben. Zum Beispiel hat die segmentierte Adresse 06EFh:1234h einen Segment-Auswählenden von 06EFh, eine Segment-Adresse von 06EF0h vertretend, zu dem wir den Ausgleich hinzufügen, die geradlinige Adresse 06EF0h + 1234. = 08124. (vgl hexadecimal) nachgebend.

Wegen des Weges werden die Segment-Adresse und der Ausgleich hinzugefügt, eine einzelne geradlinige Adresse kann 4096 verschiedenen segment:offset Paaren kartografisch dargestellt werden. Zum Beispiel kann die geradlinige 08124. Adresse die segmentierten Adressen 06EFh:1234h, 0812h:0004h, 0000h:8124h usw. haben. Das konnte an einzigartige Wenden-Schemas gewöhnten Programmierern verwirrend sein, aber es kann auch zum Vorteil zum Beispiel verwendet werden, wenn das Wenden multipliziert - hat Datenstrukturen verschachtelt. Während echte Weise-Segmente immer 64 KiB lange sind, besteht die praktische Wirkung nur darin, dass kein Segment länger sein kann als 64 KiB, aber nicht dass jedes Segment 64 KiB lange sein muss. Weil es keinen Schutz oder Vorzug-Beschränkung in der echten Weise gibt, selbst wenn ein Segment definiert werden konnte, um kleiner zu sein, als 64 KiB, würde es noch völlig bis zu den Programmen sein, um zu koordinieren und innerhalb der Grenzen ihrer Segmente zu behalten, weil jedes Programm immer auf jedes Gedächtnis zugreifen kann (da es Segment-Auswählende willkürlich veranlassen kann, Segment-Adressen, mit gar keiner Aufsicht zu ändern). Deshalb kann echte Weise genauso gut vorgestellt werden als, eine variable Länge für jedes Segment, in der Reihe 1 bis 65536 Bytes zu haben, der gerade durch die Zentraleinheit nicht beachtet wird.

(Bemerken Sie, dass die Hauptnullen der geradlinigen Adresse, segmentierten Adressen und des Segmentes und Felder ausgleichen, die gewöhnlich vernachlässigt werden, wurden hier für die Klarheit gezeigt.)

Der wirksame 20-Bit-Adressraum der echten Weise beschränkt das addressable Gedächtnis zu 2 Bytes oder 1,048,576 Bytes. Das hat direkt vom Hardware-Design von Intel 8086 abgestammt (und, nachher, die nah zusammenhängenden 8088), der genau 20 Adressnadeln hatte. (Beide wurden in 40-Nadeln-Paketen des KURZEN BADES paketiert; sogar mit nur 20 Adresslinien wurden die Adresse und Datenbusse gleichzeitig gesandt, um die ganze Adresse und Datenlinien innerhalb der beschränkten Nadel-Zählung zu passen.)

In echter 16-Bit-Weise, Anwendungen ermöglichend, von vielfachen Speichersegmenten Gebrauch zu machen (um auf mehr Gedächtnis zuzugreifen als verfügbar in irgendwelchem 64K-Segment) ist ziemlich kompliziert, aber wurde als ein notwendiges Übel für alle außer den kleinsten Werkzeugen angesehen (der mit weniger Gedächtnis tun konnte). Die Wurzel des Problems ist, dass keine passenden für das flache Wenden der kompletten Speicherreihe passenden Adressrechnungsinstruktionen verfügbar sind. Das flache Wenden ist durch die Verwendung vielfacher Instruktionen möglich, der jedoch zu langsameren Programmen führt.

Geschützte Weise

80286 geschützte Weise

80286's erweitert geschützte Weise den Adressraum des Verarbeiters zu 2 Bytes (16 Megabytes), aber nicht durch die Anpassung des Verschiebungswerts. Statt dessen enthalten die 16-Bit-Segment-Register jetzt einen Index in einen Tisch von Segment-Deskriptoren, die 24-Bit-Grundadressen enthalten, zu denen der Ausgleich hinzugefügt wird. Um alte Software zu unterstützen, springt der Verarbeiter in der "echten Weise", einer Weise auf, in der es das segmentierte Wenden-Modell der 8086 verwendet. Es gibt einen kleinen Unterschied obwohl: Die resultierende physische Adresse ist zu 20 Bit nicht mehr gestutzt, so können sich echte Weise-Zeigestöcke (aber nicht 8086 Zeigestöcke) jetzt auf Adressen zwischen 100000 und 10FFEF beziehen. Dieses ungefähr 64 Kilobytes Gebiet des Gedächtnisses war als der Obere Speicherbereich (HMA) bekannt, und spätere Versionen des MS-DOS konnten es verwenden, um das verfügbare "herkömmliche" Gedächtnis (d. h. innerhalb des ersten Mb) zu vergrößern. Mit der Hinzufügung des HMA ist der Gesamtadressraum etwa 1.06 Mb. Obwohl die 80286 Adressen der echten Weise zu 20 Bit nicht stutzen, kann ein System, das 80286 enthält, so mit der Hardware tun, die zum Verarbeiter, durch gating von der 21. Adresslinie, der A20 Linie äußerlich ist. IBM PC AT hat die Hardware zur Verfügung gestellt, um das (für die volle rückwärts gerichtete Vereinbarkeit mit der Software für ursprünglichen IBM PC und Modelle des PCS-XT) zu tun, und so haben alle nachfolgenden PC-Klone "an der KLASSE" ebenso getan.

Das geschützte Weise-Segmentationssystem, Gegenwart in den 80286 und später x86 Zentraleinheiten, kann verwendet werden, um Trennung von benachteiligten Prozessen geltend zu machen, aber die meisten 32 Bit Betriebssysteme verwenden den Paginierungsmechanismus, der mit den 80386 für diesen Zweck stattdessen eingeführt ist. Solche Systeme veranlassen alle Segment-Register, zu einem Segment-Deskriptor mit offset=0 und limit=2 hinzuweisen, einer Anwendung vollen Zugang zu einem virtuellen flachen 32-Bit-Adressraum durch jedes Segment-Register gebend. Durch diese Methode muss sich normaler Anwendungscode nicht mit Segment-Registern überhaupt befassen. Das war möglich, weil die 80386 die allgemeinen Zweck-Register (d. h. die Ausgleich-Register) zu 32 Bit breiter gemacht haben. Natürlich wurden die Grundadressen in den Deskriptoren auch zu 32 Bit breiter gemacht.

Ausführlicher Segmentationseinheitsarbeitsablauf

Eine logische Adresse besteht aus einem 16-Bit-Segment-Auswählenden (13+1 Adressbit liefernd), und ein 16-Bit-Ausgleich. Der Segment-Auswählende muss in einem der Segment-Register gelegen werden. Dieser Auswählende besteht aus 2-Bit-Requested Privilege Level (RPL), 1-Bit-Table Indicator (TI) und einem 13-Bit-Index.

Der Verarbeiter greift auf die 64-Bit-Segment-Deskriptor-Struktur im Globalen Deskriptor-Tisch zu, wenn TI 0 oder im Lokalen Deskriptor-Tisch ist, wenn TI 1 ist. Es führt dann die Vorzug-Kontrolle durch:

DPL) Adressen, die die Segmentationseinheit durchgehen, die zu überprüfen und in geradlinige 32-Bit-Adressen zu übersetzen ist, bevor sie an die ermöglichte Paginierungseinheit gesandt wird, die sie schließlich in physische Adressen übersetzt (die auch 32 Bit auf den 386 sind, aber kann auf neueren Verarbeitern größer sein, die Physische Adresserweiterung unterstützen).

Die 80386 haben auch zwei neue Mehrzweckdatensegment-Register, FS und GS, zum ursprünglichen Satz von vier Segment-Registern (CS, DS, ES und SS) eingeführt.

Spätere Entwicklungen

Die x86-64 Architektur verwendet Segmentation in der langen Weise (64-Bit-Weise) nicht. Vier der Segment-Register: CS, SS, DS und ES werden zu 0, und die Grenze zu 2 gezwungen. Das Segment schreibt FS ein, und GS kann noch eine Nichtnullgrundadresse haben. Das erlaubt Betriebssystemen, diese Segmente zu speziellen Zwecken zu verwenden.

Zum Beispiel verwendet Windows von Microsoft auf x86-64 das GS Segment, um zum Faden-Umgebungsblock, einer kleinen Datenstruktur für jeden Faden hinzuweisen, der Information über das Ausnahme-Berühren, die mit dem Faden lokalen Variablen und den anderen Staat pro Faden enthält. Ähnlich verwendet der Kern von Linux das GS Segment, um Daten pro Zentraleinheit zu versorgen.

Methoden

Logische Adressen können auf dem x86 Assembler, z.B (AT&T Syntax) ausführlich angegeben werden:

movl 42 $, %fs: (% eax); gleichwertig zur M [fs:eax]). Natürlich, in der echten Weise, gibt es keine Vorzug-Niveaus; alle Programme haben absoluten ungehemmten Zugang zum ganzen Gedächtnis und allen Zentraleinheitsinstruktionen.

Für mehr Information über die Segmentation, sieh die IA-32 Handbücher, die frei auf dem AMD oder den Websites von Intel verfügbar sind.

Zeichen und Verweisungen

Siehe auch

  • Speichermodell, das (rechnet)
  • DAS Mehrprogrammiersystem

Links


Föderalistgesellschaft / Internationaler Lufttransportvereinigungsflughafencode
Impressum & Datenschutz