Diskussion:Speicherverwaltung

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Revert "Löschung 'Direkte Speicherverwaltung'"[Bearbeiten]

Mir ist nicht klar, warum ein ganzer Abschnitt ersatzlos gestrichen wurde (Direkte Speicherverwaltung). Deshalb von mir ein Revert. --Friese 17:18, 7. Okt 2004 (CEST)

Die Verwaltung ist nicht nur Teil des Betriebssystems[Bearbeiten]

Die Speicherverwaltung wird zu großen Teilen von Hardware wie z.B. MMU, Prozessor, Chipsatz übernommen. Das Betriebsystem initialisiert die Speicherverwaltungshardware, stellt Dinge Segmentgrößen ein und übernimmt die Ein- und Auslagerung von Speicherseiten. Die "Drecksarbeit", wie z.B. bei jedem Speicherzugriff zu prüfen ob er im erlaubten Segment liegt, übernimmt aber die Hardware.

Anfangs[Bearbeiten]

Bis zu welcher Version? Bis 3.11? --SonniWP2 06:29, 31. Jul. 2007 (CEST)

Segmentierung[Bearbeiten]

  • "Diese Art der Speicherverwaltung war in den Anfängen der Entwicklung von Computern weit verbreitet."
So weit ok.
  • "Das Betriebssystem MS-DOS nutzte anfangs ausschließlich die Segmentierung."
Jein, für das auszuführende Programm werden sog. Segmentregister gesetzt; da wurde aber niemals etwas "ausgelagert" o.ä., es war mehr ein Weg, 20-Bit Adressraum mit 16-Bit-Registern zu verwenden.
Der Kernaapekt an Segmentierung ist nicht die Auslagerung (das ist eine Anwendungsmöglichkeit) der Kernaspekt ist die fehlende Möglcihkeit der zugreifbarkeit parallel auf alle Speciherbereiche sondern immer nur innerhalb auf eines Bereich frei und unlimitiert (64kB), innerhalb eines Segments. Um auf andere Bereich (die restlichen 640kb-64kb) zuzugreifen muss etwas umgeschaltet werden (eine Limitierung der freien Zugreifbarkeit, man kann also zB kein überlappendes memcopy aus bereich 1 in bereich 2 machen), ein Segment-Register. Also ein klares JA bei DOS bzw dem real mode. (Wenn man noch XMS und EMS hinzunimmt ein weiteres JA). Shaddim (Diskussion) 19:03, 11. Jul. 2012 (CEST)
Da es für eine Anwendung nicht das geringste Hindernis gibt, in CS/DS/ES/SS einfach einen anderen Wert zu schreiben, neige ich stark dazu, das nicht als "Speicherverwaltung mit Segmentierung" aufzufassen, sondern einfach als einen verkorksten Weg, 20 Bit Adressraum mit 16 Bit Registern anzusprechen. Dass mache Maschineninstruktion auch nur 16-Bit-fähig ist, ist bei einem 16-Bit-Chip jetzt nicht soooo verwunderlich.
Wenn zu mir jemand etwas von "Segmentierung bei x86-Chips" sagt, denke ich nur an PAE; die Register CS/DS/ES/SS haben einfach so wenig mit Segmentierter Speicherverwaltung zu tun, dass es ein Witz ist, das hier einzuordnen.
Nenn' mir bitte eine andere Möglichkeit, einen 16-Bit-Prozessor mehr als 2^16 Byte Ram adressieren zu lassen (mit 16-Bit-Registern), als irgendwie 2 Register zu kombinieren à la xxxx:yyyy . Es gibt Legionen an 8-Bit-Microkontrollern, die genau so 64k Ram ansprechen, und niemand kommt auf die Idee, diesen eine "Speicherverwaltung mit Segmentierung" anzudichten.
--arilou (Diskussion) 10:35, 12. Jul. 2012 (CEST)
hmm, ich glaueb ich verstehe deinen Segmentierungbegriff nicht ganz, meinem Verständnis nach ist genau dies die Essenz von Segmentierung. feste (hier 16bit grosse) bereiche (Segmente) die frei zugreifbar sind, grössere nur über hässliche Erweiterungsmechanismen mit einschränkungen (z.B. memcopy oder allokierung). Shaddim (Diskussion) 11:36, 12. Jul. 2012 (CEST)
Es gab in MS-DOS auch nicht "mehrere aktive Prozesse", allenfalls kann man damit Treibern u.ä. ermöglichen, "ihren Adressraum" (ihr 64k-Segment) "lokal" zu adressieren.
TSR-Programm (pseudo-parallel)
Das meinte ich mit "Treiber u.ä.". --arilou (Diskussion) 10:35, 12. Jul. 2012 (CEST)
Ab dem 80386 hat "Segmentierung" bzgl. Arbeitsspeicher aber eine andere Bedeutung, und wird nur von einer Handvoll Win32-Server-Versionen tatsächlich für einen größeren Adressraum verwendet (siehe Physical Address Extension), allen anderen geht's nur um das NX-Bit.
Extended Memory Specification und XMS, ebenfalls segment basierend. Shaddim (Diskussion) 19:03, 11. Jul. 2012 (CEST)
Hab' mir das mal angeschaut, v.a. Unreal mode, da wird auch nicht sauber getrennt zwischen "CS/DS/ES/SS"-Registern (deren 32-Bit-Versionen), und der PAE. Was du jetzt mit "segment basierend" meinst, ist mir daher ebenfalls unklar. --arilou (Diskussion) 10:35, 12. Jul. 2012 (CEST)
nein ich meine bei XMS und EMS wird speicher jenseits 1MB wird über Fenster segmentweise in den 1MB bereich eingeblendet, eine Segmentierung. gruesse Shaddim (Diskussion) 11:36, 12. Jul. 2012 (CEST)
  • "Bei heutigen Prozessoren wird im Allgemeinen die Segmentierung mit der Seitenadressierung kombiniert und wird dann als Paging bezeichnet."
Wie zuvor: PAE wird von heutigen (64Bit-)Betriebssystemen nur noch für das NX-Bit verwendet, mit der Speicherverwaltung, welcher Prozess welche Pages bekommt, hat das ganze eigentlich nichts mehr zu tun. Auf jeden Fall wird nicht "für jeden Prozess ein PAE-Segment" verwendet, wie man es aus dem Artikel verstehen könnte.

--arilou (Diskussion) 13:59, 11. Jul. 2012 (CEST)

Der Abschnitt scheint mir generell zu Desktop und x86 zentriert. Meines Wissens nach war Segmentierung nur bei x86 und Microsoft verbreitet. Bei MS-DOS wurde die Segmentierung für den Speicherschutz und zur Vereinfachung der Speicherverwaltung und teilweise zur Vergrößerung des nutzbaren Speichers verwendet. Es ist möglich, aber nicht notwendig, Paging mit Segmentierung zu kombinieren. Viele Prozessorfamilien können überhaupt keine Segmentierung. Bei Linux wurde auch auf x86 nie klassische Segmentierung verwendet sondern nur Paging. Das NX-Bit hat nichts mit Segmentierung zu tun sondern dient gerade dazu auf x86 auch bei reinem Paging einen Speicherschutz zu realisieren. Damit viel der letzte Vorteil der klassischen Segmentierung weg.--Trockennasenaffe (Diskussion) 14:47, 11. Jul. 2012 (CEST)
1. "[...] war Segmentierung nur bei x86 und Microsoft verbreitet" - mitnichten. Segmentierung war weit verbreitet bei Großrechnern, schon lange vor Microsoft. (Man muss dabei ziemlich aufpassen, dass man nicht die x86-"Segmentregister" mit der 80386ff-PAE-Segmentierung des Ram vermischt. Die frühen Großrechner waren da durchaus mit zweiterem und entsprechenden MMUs ausgestattet.)
Ob der heutige Betrieb von virtuellen Maschinen auf einem Host auch als "Segmentieren" gilt, wenn man den virt.Maschinen jeweils eine feste Ram-Größe zuordnet, weis ich nicht.
2. "Bei MS-DOS wurde die Segmentierung für den Speicherschutz und zur Vereinfachung der Speicherverwaltung und teilweise zur Vergrößerung des nutzbaren Speichers verwendet."
  • MS-DOS kennt keinen Speicherschutz. Ist bei Singletasking auch nicht wirklich relevant.
  • Eine "Vereinfachung der Speicherverwaltung", hm, möglich. So genau kenn' ich MS-DOS' Speicherverwaltungs-Algorithmen nicht, aber eine Vereinfachung bezweifel ich eher.
  • "Vergrößerung des nutzbaren Speichers" - da hätt' ich gerne eine Erklärung, was damit gemeint sein soll.
Es gab (EMM386.exe, HiMem.sys) DOS-Hilfen, um bei 286/386ern das Ram über 1MB anzusprechen. Und da mehrere "Programme" (RamDrive.sys, SmartDrv.exe, Anwendungsprog.) "gleichzeitig" Teile davon ansprechen konnten, muss es auch eine gewisse Verwaltung davon gegeben haben, ja. Ob dabei die Segmentierungsfähigkeiten des 386-Prozessors (PAE) eingesetzt wurden, müsst' man mir erst belegen, bevor ich das glaube. (In Unreal mode wird nicht sauber getrennt, es ist unklar, ob dabei nur mit (32-Bit) CS/DS/ES/SS gearbeitet wird, oder Einstellungen von PAE gesetzt werden.)
PAE wurde erst am Ende der DOS-ära als Hardwaremöglichkeit eingeführt, bei Pentium Pro, d.h. aus abwärtskompatiblitätsgründen wurde es vermieden zu verwenden. PAE war deswegen auch später in der Praxis auch selten bis nie im Einsatz auch am Ende der 32bit Ära wo es drängend wurde, die meistens setzten dann gleich auf 64bit. Shaddim (Diskussion) 11:44, 12. Jul. 2012 (CEST)
3. "Das NX-Bit hat nichts mit Segmentierung zu tun" - Jein. Man muss auf Intel-/AMD-Chips PAE einschalten (auch wenn man dann das ganze Ram nur als 1 großes Segment angibt, also die Segmentierung eigentlich nicht verwendet), um die NX-Bit-Behandlung mit einzuschalten.
--arilou (Diskussion) 10:03, 12. Jul. 2012 (CEST)
Irgendwie verstehe ich das nicht. PAE gibt es ab Intel Pentium Pro und ist eine Erweiterung der Paging-Einheit, die es erlaubt durch eine veränderte Hierarchie von Seitentabellen mehr Speicher zu adressieren. Es stimmt auch, das man oft erst damit das das NX-bit bei einem Tabelleneintrag setzen kann. Aber was hat das mit Segmentierung zu tun? Unter Segmentierung verstehe ich, dass man spezielle Segmentregister hat mit deren Hilfe man den Speicher in Segmente einteilt denen gewisse Atribute zugeordnet werden und man dadurch den Speicher Segmentrelativ adressieren kann. Diese Segmentregister verwendet aber heute praktisch niemand mehr und bei ARM PowerPC und vielen anderen gibt es sie überhaupt nicht.--Trockennasenaffe (Diskussion) 10:49, 12. Jul. 2012 (CEST)

Strategien[Bearbeiten]

Eigentlich sollte man/ich den Abschnitt Virtuelle Speicherverwaltung#Platzierungsstrategien von Betriebssystemen hierher, in diesen Artikel hier, verschieben. Geht ja schließlich um allgemeine Strategien, die nicht von "virtuell" abhängig sind (z.B. beim alten Amiga gab's Multitasking, aber keinen Speicherschutz/virtuellen Adressraum. Da muss das OS auch "strategieren", ganz ohne "virtuell".) --arilou (Diskussion) 14:11, 11. Jul. 2012 (CEST)

finde ich eine gute Idee. gruesseShaddim (Diskussion) 19:05, 11. Jul. 2012 (CEST)