Speichermanagement von Mac OS

Historisch hat der Mac OS eine Form des Speichermanagements verwendet, das aus der Bevorzugung in modernen Systemen gefallen ist. Die Kritik dieser Annäherung war eines der Schlüsselgebiete, die durch die Änderung Mac OS X. gerichtet sind

Das ursprüngliche Problem für die Ingenieure des Macintoshes bestand darin, wie man optimalen Gebrauch der 128 Kilobytes des RAM macht, mit dem die Maschine ausgestattet wurde. Seitdem damals die Maschine nur ein Anwendungsprogramm auf einmal führen konnte, und es keine feste sekundäre Lagerung gab, haben die Ingenieure ein einfaches Schema durchgeführt, das gut mit jenen besonderen Einschränkungen gearbeitet hat. Jedoch hat diese Designwahl gut mit der Entwicklung der Maschine nicht geklettert, verschiedene Schwierigkeiten sowohl für Programmierer als auch für Benutzer schaffend.

Zersplitterung

Die primäre Sorge der ursprünglichen Ingenieure scheint, Zersplitterung gewesen zu sein - d. h. die wiederholte Zuteilung und deallocation des Gedächtnisses durch Zeigestöcke führen zu vielen kleinen abgelegenen Orten des Gedächtnisses, das nicht verwendet werden kann, weil sie zu klein sind, wenn auch das freie Gesamtgedächtnis genügend sein kann, um eine besondere Bitte um das Gedächtnis zu befriedigen. Um das zu lösen, haben Apfelingenieure das Konzept eines relokatierbaren Griffs, einer Verweisung auf das Gedächtnis verwendet, das den wirklichen Daten erlaubt hat, die verwiesen sind, bewegt zu werden, ohne den Griff ungültig zu machen. Das Schema des Apfels war einfach - ein Griff war einfach ein Zeigestock in (nicht relokatierbar) Tisch von weiteren Zeigestöcken, die der Reihe nach zu den Daten hingewiesen haben.

Wenn eine Speicherbitte compaction des Gedächtnisses verlangt hat, wurde das getan, und der Tisch, genannt den Master-Zeigestock-Block, wurde aktualisiert. Die Maschine selbst hat zwei Gebiete in der Maschine durchgeführt, die für dieses Schema - der Systemhaufen verfügbar ist (verwendet für den OS) und der Anwendungshaufen.

Nicht weniger als nur eine Anwendung wurde auf einmal geführt, das System hat gut gearbeitet. Seitdem der komplette Anwendungshaufen aufgelöst wurde, als die Anwendung aufgehört hat, wurde Zersplitterung minimiert.

Jedoch, im Wenden des Zersplitterungsproblems, wurden alle anderen Probleme überblickt. Der Systemhaufen wurde vor irregeführten Anwendungen nicht geschützt, und das war oft die Ursache von Hauptsystemproblemen und Unfällen.

Außerdem hat die Griff-basierte Annäherung auch eine Quelle geöffnet, Fehler zu programmieren, wo, wie man versichern konnte, Zeigestöcke zu Daten innerhalb solcher relokatierbaren Blöcke gültig über Anrufe nicht geblieben sind, die Gedächtnis veranlassen könnten sich zu bewegen. In Wirklichkeit war das ein Problem in fast jeder System-API, die bestanden hat. So war die Pflicht auf dem Programmierer, um solche Zeigestöcke nicht zu schaffen, oder mindestens sie sehr sorgfältig zu führen. Seitdem viele Programmierer mit dieser Annäherung nicht allgemein vertraut waren, haben frühe Programme von Mac oft unter Schulden gelitten, die daraus - Schulden entstehen, die sehr häufig unentdeckt bis lange nachdem der Sendung gegangen sind.

Palme OS und 16-Bit-Windows verwendet ein ähnliches Schema für das Speichermanagement. Jedoch machen die Palme und Windows-Versionen Programmierer-Fehler schwieriger. Zum Beispiel, in Mac OS, um einen Griff zu einem Zeigestock, ein Programm gerade De-Verweisungen der Griff direkt umzuwandeln. Jedoch, wenn der Griff nicht geschlossen wird, kann der Zeigestock ungültig schnell werden. Anrufe, Griffe sich schließen zu lassen und aufzuschließen, werden nicht erwogen; zehn Anrufe zu HLock werden durch einen einzelnen Anruf zu HUnlock aufgemacht. In der Palme OS und Windows sind Griffe undurchsichtiger Typ und müssen de-referenced mit MemHandleLock auf der Palme OS oder Global/LocalLock auf Windows sein. Wenn eine Palme oder Windows-Anwendung mit einem Griff beendet werden, nennt es MemHandleUnlock oder Global/LocalUnlock. Palme OS und Windows behält ein Schloss-Zählen für Blöcke; nach drei Anrufen zu MemHandleLock wird ein Block nur unverschlossen nach drei Anrufen zu MemHandleUnlock werden.

Das Wenden des Problems von verschachtelten Schlössern und schließt auf kann (obwohl langweilig) durch die Beschäftigung verschiedener Methoden aufrichtig sein, aber diese drängen sich auf die Lesbarkeit des verbundenen Codes ein blockieren und verlangen Bewusstsein und Disziplin seitens des Codierers.

Gedächtnis leckt und alte Verweisungen

Bewusstsein und Disziplin sind auch notwendig, um Gedächtnis "Leckstellen" (Misserfolg zu deallocate im Rahmen der Zuteilung) zu vermeiden und Verweisungen auf alte Griffe nach der Ausgabe zu vermeiden.

Schalter

Die Situation hat sich mit dem Advent des Schalters verschlechtert, der ein Weg für Mac war, um vielfache Anwendungen sofort zu führen. Das war ein notwendiger Schritt vorwärts für Benutzer, die gefunden haben, dass sich ein app auf einmal sehr beschränkend nähert. Jedoch, weil Apfel jetzt zu seinem Speicherverwaltungsmodell, sowie Vereinbarkeit mit vorhandenen Anwendungen verpflichtet wurde, wurde es gezwungen, ein Schema anzunehmen, wo jede Anwendung sein eigener Haufen vom verfügbaren RAM zugeteilt wurde.

Der Betrag des wirklichen jedem Haufen zugeteilten RAM wurde durch einen Wert gesetzt, der in jede Anwendung codiert ist, die vom Programmierer gesetzt ist. Unveränderlich war dieser Wert nicht genug für besondere Arten der Arbeit, so musste die Werteinstellung dem Benutzer ausgestellt werden, um ihnen zu erlauben, die Haufen-Größe zu zwicken, um ihren eigenen Voraussetzungen anzupassen. Diese Aussetzung eines technischen Durchführungsdetails war sehr viel gegen das Korn der Benutzerphilosophie von Mac. Abgesondert vom Herausstellen von Benutzern zu esoterischen Fachausdrücken war es ineffizient, da eine Anwendung (widerwillig) ganzen seinen zugeteilten RAM ergreifen würde, selbst wenn es den grössten Teil davon nachher unbenutzt verließe. Eine andere Anwendung könnte Gedächtnis sein hat gehungert, aber war unfähig, das freie durch eine andere Anwendung "besessene" Gedächtnis zu verwerten.

Während eine Anwendung keinen Schwester-Anwendungshaufen vorteilhaft verwerten konnte, konnte sie es am meisten sicher normalerweise durch das unachtsame Schreiben einer Quatsch-Adresse zerstören. Eine Anwendung, die ein Bruchstück des Textes oder Images oder einer unbestimmten Position als eine Adresse behandelt, konnte den Code oder die Daten anderer Anwendungen oder sogar des OS leicht überschreiben, "lurkers" sogar abreisend, nachdem über das Programm geherrscht wurde. Solche Probleme konnten äußerst schwierig sein, zu analysieren und zu korrigieren.

Schalter ist MultiFinder im System 4.2 geworden, der der Prozess-Betriebsleiter im System 7 geworden ist, und bis dahin das Schema äußerst verschanzt wurde. Apfel hat einige Versuche gemacht, um die offensichtlichen Beschränkungen zu arbeiten - vorläufiges Gedächtnis war ein, wo eine Anwendung freien RAM "leihen" konnte, die außerhalb seines Haufens seit kurzen Perioden liegen, aber das war mit Programmierern unpopulär, so hat es größtenteils gescheitert, das Problem zu beheben. Es gab auch ein frühes virtuelles Speicherschema, das versucht hat, das Problem durch das Bereitstellen von mehr Gedächtnis durch die Paginierung unbenutzte Teile zur Platte zu lösen, aber für die meisten Benutzer mit 68K Regenmänteln hat das wirklich nichts als alles verlangsamt, ohne die Speicherprobleme selbst zu beheben. Zu diesem Zeitpunkt hatten alle Maschinen dauerhafte Festplatten und MMU Chips, und wurden so ausgestattet, um eine viel bessere Annäherung anzunehmen. Aus irgendeinem Grund hat Apfel nie das einen Vorrang bis zu Mac OS X gemacht, wenn auch mehrere Schemas von Außenentwicklern angedeutet wurden, die Vereinbarkeit behalten würden, während sie das gesamte Speicherverwaltungsproblem beheben. Der Drittersatz für den Speicherbetriebsleiter von Mac OS, wie Optimem, hat gezeigt, dass er getan werden konnte.

Saubere 32 Bit

Ursprünglich hatte der Macintosh 128 Kilobytes des RAM mit einer Grenze von 512 Kilobytes. Das wurde zu 4 Mb auf die Einführung des Macintoshes Plus vergrößert. Diese Computer von Macintosh haben die 68000 Zentraleinheit, einen 32-Bit-Verarbeiter verwendet, aber hatten nur 24 physische Adresslinien. Die 24 Linien haben dem Verarbeiter erlaubt, bis zu 16 Mb des Gedächtnisses (2 Bytes) zu richten, der als ein genügend Betrag zurzeit gesehen wurde. Jedoch war die RAM-Grenze im Design von Macintosh 4 Mb des RAM und 4 Mb des ROMs wegen der Struktur der Speicherkarte. Das wurde durch das Ändern der Speicherkarte mit dem Macintosh II und dem Tragbaren Macintosh, das Erlauben von bis zu 8 Mb des RAM befestigt.

Weil Gedächtnis eine knappe Quelle war, haben sich die Autoren des Mac OS dafür entschieden, das unbenutzte Byte in jeder Adresse auszunutzen. Der ursprüngliche Speicherbetriebsleiter (herauf bis das Advent des Systems 7) hat Fahnen in die hohen 8 Bit jedes 32-Bit-Zeigestocks und Griffs gelegt. Jede Adresse hat Fahnen solcher, wie "geschlossen", "purgeable", oder "Quelle" enthalten, die im Master-Zeigestock-Tisch versorgt wurden. Wenn verwendet, als eine wirkliche Adresse wurden diese Fahnen davon maskiert und durch die Zentraleinheit ignoriert.

Während ein guter Gebrauch des sehr beschränkten RAM-Raums, dieses Design zu Problemen geführt hat, sobald Apfel den Macintosh II vorgestellt hat, der 32-Bit-Motorola 68020 Zentraleinheit verwendet hat. Die 68020 hatten 32 physische Adresslinien und konnten bis zu 4 GB (2 Bytes) des Gedächtnisses richten. Die Fahnen, dass der Speicherbetriebsleiter, der im hohen Byte jedes Zeigestocks und Griffs versorgt ist, jetzt bedeutend war, und zu Adressierungsfehlern führen konnte.

In der Theorie waren die Architekten der Systemsoftware von Macintosh frei, die "Fahnen im hohen Byte" Schema zu ändern, dieses Problem zu vermeiden, und sie haben getan. Zum Beispiel, auf dem Macintosh II, wurde HLock umgeschrieben, um Griff durchzuführen, der sich in einem Weg außer Platten der hohen Bit von Griffen schließen lässt. Jedoch haben viele Anwendungsprogrammierer von Macintosh - und sehr viel vom Systemsoftwarecode von Macintosh selbst, sogar dem Code im ROMs (bis der IIci, der das ROM saubere 32 Bit gemacht hat) - auf die Fahnen direkt zugegriffen, anstatt den APIs wie HLock zu verwenden , der zur Verfügung gestellt worden war, um sie zu manipulieren. Auf diese Weise haben sie ihre Anwendungen gemacht, die mit dem wahren 32-Bit-Wenden unvereinbar sind, und das ist bekannt als nicht geworden, "saubere 32 Bit" seiend.

Um dauernde Abstürze aufzuhören, die durch dieses Problem, System 6 und das frühere Laufen auf 68020 verursacht sind, oder 68030 die Zentraleinheit in 24-Bit-Weise zwingen würden, und nur anerkennen und die ersten 8 Megabytes des RAM, eines offensichtlichen Fehlers in Maschinen richten würden, deren Hardware angeschlossen wurde, um RAM von bis zu 128 Mb zu akzeptieren - und dessen Produktliteratur diese Fähigkeit angekündigt hat. Mit dem System 7 wurde die Systemsoftware von Mac schließlich 32 Bit sauber gemacht, aber es gab noch das Problem von schmutzigem ROMs. Das Problem bestand darin, dass die Entscheidung, das 24-bit- oder 32-Bit-Wenden zu verwenden, sehr früh im Stiefelprozess getroffen werden muss, als die ROM-Routinen den Speicherbetriebsleiter initialisiert haben, um eine grundlegende Umgebung von Mac aufzustellen, wo NuBus ROMs und Plattenfahrer geladen und durchgeführt werden. Älterer ROMs hatte diese Unterstützung nicht und war so nicht möglich, in 32-Bit-Weise zu starten. Überraschend wurde die erste Lösung dieses Fehlers von der Softwaredienstprogramm-Gesellschaft Connectix veröffentlicht, dessen 1991-Produkt MODE32 den Speicherbetriebsleiter wiederinitialisiert hat und frühe Teile des Stiefelprozesses von Mac wiederholt hat, dem System erlaubend, in 32-Bit-Weise zu starten und den Gebrauch des ganzen RAM in der Maschine ermöglichend. Apfel hat die Software von Connectix später 1991 lizenziert und hat es umsonst verteilt. Der Macintosh IIci und die gestützten Computer von Macintosh des späteren Motorola hatten sauberen ROMs von 32 Bit. (Noch später haben Modelle auf dem 64-Bit-ZIEL Verarbeiter von PowerPC und das Verwenden Neuen Welt-ROMs basiert. Die neusten Modelle verwenden 32-Bit-Intel x86-686 oder 64-Bit-Verarbeiter von Intel x86-64, die mit einem EFI verbunden sind.)

Jedoch war es längere Zeit, bevor Anwendungen aktualisiert wurden, um alle 24-Bit-Abhängigkeiten zu entfernen, und System 7 eine Weise zur Verfügung gestellt hat, zurück auf 24-Bit-Weise umzuschalten, wenn Anwendungsinkompatibilitäten gefunden wurden. Zurzeit der Wanderung zu PowerPC und System 7.1.2 war 32-Bit-Reinheit obligatorisch, um heimische Anwendungen zu schaffen.

Gegenstand-Orientierung

Der Anstieg von objektorientierten Sprachen, für Mac - den ersten Object Pascal, dann später C ++ zu programmieren - hat auch Probleme für das angenommene Speichermodell verursacht. Zuerst würde es natürlich scheinen, dass Gegenstände über Griffe durchgeführt würden, um den Vorteil zu gewinnen, relokatierbar zu sein. Jedoch, diese Sprachen, weil sie, verwendete Zeigestöcke für Gegenstände ursprünglich entworfen wurden, die zu Zersplitterungsproblemen führen würden. Eine Lösung, die durch das DENKEN (später Symantec) Bearbeiter durchgeführt ist, sollte Griffe innerlich für Gegenstände verwenden, aber eine Zeigestock-Syntax verwenden, um auf sie zuzugreifen. Das ist eine gute Idee zuerst geschienen, aber bald sind tiefe Probleme erschienen, seitdem Programmierer nicht erzählen konnten, ob sie sich mit einem relokatierbaren oder festen Block, und so keine Weise befassten zu wissen, ob man die Aufgabe übernimmt, Gegenstände zu schließen, oder nicht. Selbstverständlich hat das zu riesigen Zahlen von Programmfehlern und Problemen mit diesen frühen Gegenstand-Durchführungen geführt. Spätere Bearbeiter haben nicht versucht, das zu tun, aber haben echte Zeigestöcke verwendet, häufig ihre eigenen Speicherzuteilungspläne durchführend, um das Speichermodell von Mac OS zu arbeiten.

Während das Speichermodell von Mac OS, mit allen seinen innewohnenden Problemen, dieser Weg direkt durch Mac OS 9, wegen strenger Anwendungsvereinbarkeitseinschränkungen geblieben ist, hat die zunehmende Verfügbarkeit des preiswerten RAM bedeutet, dass im Großen und Ganzen die meisten Benutzer ihren Ausweg aus einer Ecke befördern konnten. Das Gedächtnis wurde effizient nicht verwendet, aber es war reichlich genug, dass das Problem nie kritisch geworden ist. Das ist vielleicht ironisch vorausgesetzt, dass der Zweck des ursprünglichen Designs war, den Gebrauch sehr beschränkter Beträge des Gedächtnisses zu maximieren. Mac OS X beseitigt schließlich das ganze Schema, ein modernes spärliches virtuelles Speicherschema durchführend. Eine Teilmenge des älteren Speichermodells APIs besteht noch für die Vereinbarkeit als ein Teil von Kohlenstoff, aber Karte dem modernen Speicherbetriebsleiter (ein threadsafe malloc Durchführung) unten.

Apfel empfiehlt, dass Code von Mac OS X malloc und frei "fast exklusiv" verwendet.

Außenverbindungen


Nationalversammlung Frankreichs / Ketogenesis
Impressum & Datenschutz