Gestion de la mémoire principale d\'OS de Mac

Historiquement, l'OS de Mac de a employé une forme de la gestion de la mémoire principale qui est tombée hors de la faveur dans les systèmes modernes. La critique de cette approche était l'une des zones clé adressées par le changement au Mac de OS x .

Le problème original pour les concepteurs du Macintosh était comment faire l'utilisation optima du kB 128 de RAM que la machine a été équipée de. Puisque à ce moment-là la machine pourrait seulement lancer un programme de l'application à la fois, et il n'y avait aucun stockage secondaire permanent, les concepteurs ont mis en application un arrangement simple qui a fonctionné bien avec ces contraintes particulières. Cependant, ce choix de conception n'a pas bien mesuré avec le développement de la machine, créant de diverses difficultés pour des programmeurs et des utilisateurs.

Fragmentation

Le souci en chef des concepteurs originaux semble avoir été la fragmentation - c., l'attribution et la désaffectation répétées de la mémoire par les indicateurs mène à beaucoup de petits secteurs d'isolement de mémoire qui ne peuvent pas être employés parce qu'ils sont trop petits, quoique toute la mémoire libre puisse être suffisante pour satisfaire une demande particulière de mémoire. Pour résoudre ceci, les concepteurs d'Apple avaient l'habitude le concept d'une poignée réadressable , une référence de à la mémoire qui a permis les données réelles visées soit déplacée sans infirmer la poignée. L'arrangement d'Apple était simple - une poignée était simplement un indicateur dans la table d'a (non réadressable) d'autres d'indicateurs, qui ont à leur tour indiqué les données. Si une demande de mémoire exigeait le tassement de la mémoire, ceci a été fait et la table, appelée le bloc de pointeur maître, était mise à jour. La machine elle-même a mis en application deux secteurs dans la machine disponible pour cet arrangement - le tas de système (utilisé pour l'OS), et le tas d'application. Tant que seulement une application à la fois a été courue, le système a fonctionné bien. Puisque le tas d'application entier a été dissous quand l'application a stoppé, la fragmentation a été réduite au minimum.

Cependant, en abordant le problème de fragmentation, toutes autres issues ont été négligées. Le tas de système n'a pas été protégé contre des applications errantes, et c'était fréquemment la cause des problèmes de système importants et se brise. En outre, l'approche manipuler-basée a également ouvert une source des erreurs de programmation, où des indicateurs aux données dans de tels blocs réadressables ne pourraient pas être garantis pour rester valides à travers les appels qui pourraient faire déplacer la mémoire. En réalité c'était presque chaque api de système qui a existé. Ainsi la responsabilité était sur le programmeur pour ne pas créer de tels indicateurs, ou les contrôler au moins très soigneusement. Puisque beaucoup de programmeurs n'étaient pas généralement au courant de cette approche, les programmes tôt de Mac ont souffert fréquemment des défauts résultant de ceci - les défauts qui sont très souvent allés non détectés jusqu'à ce que longtemps après expédition.

Le Palm OS emploie un arrangement semblable pour la gestion de la mémoire principale. Cependant, la version de paume rend l'erreur de programmeur plus difficile. Par exemple, dans l'OS de Mac pour convertir une poignée en indicateur, un programme déréférence juste la poignée directement. Cependant, si la poignée n'est pas verrouillée, l'indicateur peut devenir inadmissible rapidement. Les appels pour fermer à clef et ouvrir des poignées ne sont pas équilibrés ; dix appels à HLock sont défaits par un appel simple à HUnlock. Dans Palm OS, les poignées sont type opaque et doivent être déréférencées avec MemHandleLock. Quand une application de paume est finie avec une poignée, elle appelle MemHandleUnlock. Palm OS garde un compte de serrure pour des blocs ; après que trois appels à MemHandleLock, un bloc deviennent seulement débloqués après que trois appels à MemHandleUnlock.

Changeur

La situation a empiré avec l'arrivée du changeur , qui était une manière pour que le Mac coure des applications multiples immédiatement. C'était un pas en avant nécessaire pour les utilisateurs, qui ont trouvé l'approche d'un-$$etAPP-à-un-temps limiter très. Cependant, parce qu'Apple a été maintenant commis à son modèle de gestion de la mémoire principale, aussi bien que la compatibilité avec des applications existantes, il a été forcé d'adopter un arrangement où chaque application a été assignée son propre tas du RAM disponible. La quantité de RAM réel assignée à chaque tas a été placée par une valeur codée dans chaque application, ensemble par le programmeur. Invariablement cette valeur n'était pas assez pour des genres particuliers de travail, ainsi l'arrangement de valeur a dû être exposé à l'utilisateur pour leur permettre de tordre la taille de tas pour satisfaire à leurs propres exigences. Cette exposition d'un détail de l'exécution technique était infiniment contre le grain de la philosophie d'utilisateur de Mac. Indépendamment d'exposer des utilisateurs aux technicités ésotériques, il était inefficace, puisqu'une application saisirait (à contrecoeur) tout son RAM réparti, même si il extrême gauche de lui plus tard inutilisé. Une autre application pourrait être mémoire morte de faim, mais ne pouvait pas utiliser le " libre de mémoire ; owned" ; par une autre application.

Le changeur est devenu MultiFinder dans le système 4.2, qui est devenu le trouveur dans le système 7 , et d'ici là l'arrangement était tout à fait indélogeable. Apple a fait quelques tentatives de travailler autour des limitations évidentes - la mémoire provisoire était une, où une application pourrait " ; borrow" ; libérer le RAM qui s'étendent en dehors de son tas pendant des périodes courtes, mais c'était inpopulaire avec des programmeurs ainsi qu'il en grande partie n'a pas résolu le problème. Il y avait également un arrangement tôt de la mémoire virtuelle virtuelleee , qui a essayé de résoudre le problème en rendant plus de mémoire disponible en paginant les parties inutilisées au disque, mais pour la plupart des utilisateurs avec 68K Macintoshes, ceci n'a fait rien mais ralentit tout vers le bas sans résoudre les problèmes de mémoire eux-mêmes. À cette heure toutes les machines ont eu les disques durs permanents et les morceaux du MMU , et ainsi ont été équipées pour adopter une approche bien meilleure. Pour quelque raison, Apple n'a jamais fait à ceci une priorité jusqu'à OS X de Mac, quoique plusieurs arrangements aient été suggérés par les réalisateurs extérieurs qui maintiendraient la compatibilité tout en résolvant le problème global de gestion de la mémoire principale. Les tiers remplacements pour le directeur de mémoire d'OS de Mac, tel qu'Optimem, l'ont montré que pourrait être fait.

clean< à 32 bits ! -- Cette section est liée du Macintosh -->

À l'origine Macintosh a eu le kB 128 de RAM, avec une limite du kB 512. Ceci a été grimpé jusqu'au mb 4 sur l'introduction du Macintosh plus . Ces ordinateurs de Macintosh ont utilisé l'unité centrale de traitement du 68000 , un processeur à 32 bits, mais ont seulement eu 24 lignes d'adresse physique. Les 24 lignes ont permis au processeur d'adresser le mb jusqu'à 16 de mémoire (bytes 224), qui a été vue comme quantité suffisante alors. Cependant, la limite de RAM dans la conception de Macintosh était le mb 4 le mb de RAM et 4 de ROM, en raison de la structure de la carte mémoire.

Puisque la mémoire était une ressource rare, les auteurs de l'OS de Mac ont décidé de tirer profit du byte inutilisé dans chaque adresse. Le directeur original de mémoire (vers le haut de jusqu'à l'arrivée des drapeaux placés par 7) de système dans les bits de haute 8 de chaque indicateur à 32 bits et de poignée . Chaque adresse a contenu des drapeaux tels que le " ; locked" ; , " ; purgeable" ; , ou " ; resource" ; , qui ont été stockés dans la table de pointeur maître. Une fois utilisés comme adresse réelle, ces drapeaux ont été masqués au loin et ignorés par l'unité centrale de traitement.

Tandis qu'un bon usage de l'espace très limité de RAM, cette conception menait aux problèmes une fois qu'Apple présentait le Macintosh II , qui a utilisé l'unité centrale de traitement à 32 bits de Motorola 68020 . Les 68020 ont eu 32 lignes d'adresse physique et pourraient adresser jusqu'à 4GB (bytes 232) de mémoire. Les drapeaux qui le directeur de mémoire stocké en byte élevé de chaque indicateur et la poignée étaient significatifs maintenant, et pourraient mener aux erreurs d'adressage.

Dans la théorie, les architectes du logiciel système de Macintosh étaient libres pour changer le " ; drapeaux dans le byte" élevé ; comploter pour éviter ce problème, et ils ont fait. Par exemple, sur Macintosh II, HLock () a été récrit pour mettre en application la poignée fermant à clef d'une manière autre que marquer le peu élevé des poignées. Cependant, &mdash de beaucoup de Macintosh de programmeurs d'application ; et la majeure partie de système de Macintosh s'intègrent dans le logiciel, même le code dans le &mdash de ROM (jusqu'au IIci , qui a rendu la ROM à 32 bits nettoyer) ; a accédé aux drapeaux directement plutôt qu'using les api, tels que HLock (), qui avait été fourni pour les manoeuvrer. En faisant ceci ils ont rendu leurs applications incompatibles avec le véritable adressage à 32 bits, et ceci est devenu notoire en tant que n'étant pas " ; clean" à 32 bits ;.

Afin d'arrêter des arrêts du système continuels provoqués par cette issue, le système 6 et le fonctionnement plus tôt sur des 68020 ou des 68030 forceraient l'unité centrale de traitement dans 24 modes de bit, et seulement identifieraient et adresseraient les 8 premiers méga-octets de RAM, une paille évidente dans des machines dont le matériel a été câblé pour accepter jusqu'au &mdash du RAM 128MB ; et dont la littérature de produit a annoncé ces possibilités. Avec le système 7, le logiciel système de Mac a été finalement rendu propre à 32 bits, mais il restaient le problème des ROM sales. Étonnant, la première solution à cette paille a été éditée par le Connectix de compagnie de programme utilitaire, dont le 1991 de produit MODE32 a remplacé chacun du " d'Apple ; dirty" ; les routines de logiciel système, rendant le logiciel système à 32 bits nettoient et permettant l'utilisation de tout le RAM dans la machine. Apple a autorisé le logiciel de Connectix plus tard en 1991 et l'a distribué pour libre. Le Macintosh IIci et ordinateurs postérieurs a eu les ROM propres à 32 bits.

Cependant c'était tout à fait un moment avant que des applications aient été mises à jour pour enlever chacune des 24 dépendances de bit, et le système 7 a fourni une manière de commuter de nouveau à 24 modes de bit si des incompatibilités d'application étaient trouvées. Avant la migration au PowerPC et au système 7.2, la propreté à 32 bits était obligatoire pour créer des applications indigènes.

Orientation d'objet

L'élévation de langues orientées objectivement du pour programmer le Mac - premier Pascal , puis postérieur C++ d'objet - problèmes également posés pour le modèle de mémoire adopté. Au début, il semblerait normal que des objets seraient mis en application par l'intermédiaire des poignées, de gagner l'avantage d'être réadressable. Cependant, ces langues, pendant qu'elles étaient à l'origine conçues, ont employé des indicateurs pour les objets, qui mèneraient aux issues de fragmentation. Une solution, mise en application par les compilateurs de PENSÉE ( postérieur Symantec ) était d'utiliser des poignées intérieurement pour des objets, mais emploie une syntaxe d'indicateur pour leur accéder. Ceci a semblé une bonne idée au début, mais les problèmes bientôt profonds ont émergé, puisque les programmeurs ne pourraient pas indiquer s'ils traitaient un bloc réadressable ou fixe, et ainsi n'ont eu aucune manière de savoir si prendre la tâche de fermer à clef des objets ou pas. Inutile de dire ceci a mené aux nombres importants de bogues et les problèmes avec ces derniers objectent tôt des réalisations. Les compilateurs postérieurs n'ont pas essayé de faire ceci, mais de vrais indicateurs utilisés, mettant en application souvent leurs propres arrangements d'attribution de mémoire au contournement le modèle de mémoire d'OS de Mac.

Tandis que le modèle de mémoire d'OS de Mac, avec tous ses problèmes inhérents, demeurait ce juste de manière à travers à OS 9 de Mac de , dû aux contraintes graves de compatibilité d'application, la disponibilité croissante du RAM bon marché a signifié que généralement la plupart des utilisateurs pourraient améliorer leur sortie d'un coin. La mémoire n'a pas été employée efficacement, mais elle était assez abondante que l'issue n'est jamais devenue critique. C'est peut-être ironique étant donné que le but de la conception originale était de maximiser l'utilisation des quantités très limitées de mémoire. Le Mac de OS x élimine finalement l'arrangement entier, mettant en application un arrangement clairsemé de la mémoire virtuelle virtuelleee moderne. Un sous-ensemble des api plus anciens de modèle de mémoire existent toujours pour la compatibilité en tant qu'élément du carbone , mais pour la carte au directeur moderne de mémoire (une exécution de Malloc de threadsafe) dessous. Apple recommande que malloc d'utilisation de code d'OS X de Mac et " libre ; presque exclusively" ; (voir les recommandations d'attribution de mémoire concernant OS de Mac X).

Random links:Corinthe, Maine | 1903 dans l'aviation | Fischerspooner | Stefan Johansson | Panneau d'école de zone de région de York | Gerencia_de_memoria_del_OS_del_mac