Históricamente, el OS del mac utilizó una forma de gerencia de memoria que ha caído de favor en sistemas modernos. Las críticas de este acercamiento eran uno de los ámbitos fundamentales tratados por el cambio al mac OS x .
El problema original para los diseñadores Macintosh era cómo hacer el uso óptimo del kB 128 del RAM que la máquina fue equipada de. Puesto que en aquel momento la máquina podría funcionar con solamente un programa del uso a la vez, y no había almacenaje secundario permanente, los diseñadores ejecutaron un esquema simple que trabajó bien con esos apremios particulares. Sin embargo, esa opción del diseño no escaló bien con el desarrollo de la máquina, creando las varias dificultades para los programadores y los usuarios.
La principal preocupación de los diseñadores originales aparece haber sido la fragmentación - es decir, la asignación y la desasignación repetidas de la memoria a través de los indicadores lleva a muchas pequeñas áreas aisladas de la memoria que no puedan ser utilizadas porque son demasiado pequeñas, aunque la memoria libre total puede ser suficiente satisfacer un pedido particular la memoria. Para solucionar esto, los diseñadores de Apple utilizaron el concepto de una manija relocable, una referencia a la memoria que permitió los datos reales referidos se mueva sin la invalidación de la manija. El esquema de Apple era simple - una manija era simplemente un indicador en la tabla de a (no relocable) de otros indicadores, que alternadamente señalaron a los datos. Si una petición de la memoria requirió la compactación de la memoria, esto fue hecha y la tabla, llamada el bloque del indicador principal, era actualizada. La máquina sí mismo ejecutó dos áreas en la máquina disponible para este esquema - el montón de sistema (usado para el OS), y el montón de uso. Mientras solamente un uso a la vez fuera funcionado, el sistema trabajó bien. Puesto que el montón de uso entero fue disuelto cuando el uso paró, la fragmentación fue reducida al mínimo.
Sin embargo, en abordar el problema de la fragmentación, el resto de las ediciones fueron pasadas por alto. El montón de sistema no fue protegido contra usos errantes, y ésta era con frecuencia la causa de los problemas de sistema importantes y se estrella. Además, el acercamiento dirigir-basado también abrió una fuente de errores de programación, donde los indicadores a los datos dentro de tales bloques relocables no se podrían garantizar para seguir siendo válidos a través de las llamadas que pudieron hacer memoria moverse. En realidad éste era casi cada API del sistema que existió. Así la responsabilidad estaba en el programador para no crear tales indicadores, o por lo menos manejarlos muy cuidadosamente. Puesto que muchos programadores no eran generalmente familiares con este acercamiento, los programas tempranos del mac sufrieron con frecuencia de las averías que se presentaban de esto - las averías que iban muy a menudo desapercibidas hasta que de largo después del envío.
El Palm OS utiliza un esquema similar para la gerencia de memoria. Sin embargo, la versión de la palma hace error del programador más difícil. Por ejemplo, en el OS del mac para convertir una manija a un indicador, un programa apenas de-references la manija directo. Sin embargo, si la manija no es bloqueada, el indicador puede llegar a ser inválido rápidamente. Las llamadas para trabar y para abrir las manijas no son equilibradas; diez llamadas a HLock son deshechas por una sola llamada a HUnlock. En Palm OS, las manijas son tipo opaco y se deben de-referenced con MemHandleLock. Cuando un uso de la palma se acaba con una manija, llama MemHandleUnlock. Palm OS guarda una cuenta de la cerradura para los bloques; después de que tres llamadas a MemHandleLock, un bloque solamente se abran después de que tres llamadas a MemHandleUnlock.
La situación empeoró con el advenimiento del interruptor, que era una manera para que el mac funcione usos múltiples inmediatamente. Esto era un paso necesario adelante para los usuarios, que encontraron el acercamiento del uno-app-en-uno-tiempo muy el limitar. Sin embargo, porque Apple ahora fue confiado a su modelo de gerencia de memoria, así como compatibilidad con usos existentes, fue forzado a adoptar un esquema donde cada uso fue asignado su propio montón del RAM disponible. La cantidad de RAM real asignada a cada montón fue fijada por un valor cifrado en cada uso, sistema por el programador. Este valor no era invariable bastante para las clases particulares de trabajo, así que el ajuste del valor tuvo que ser expuesto al usuario para permitir que pellizquen el tamaño del montón para adaptarse a sus propios requisitos. Esta exposición de un detalle de puesta en práctica técnico estaba mucho contra el grano de la filosofía del usuario del mac. Aparte de exponer a usuarios a las tecnicidades esotéricas, era ineficaz, puesto que un uso asiría (poco dispuesto) todo su RAM asignado, incluso si él extremo izquierdo de él posteriormente inusitado. Otro uso pudo ser memoria muerta de hambre, pero no podía utilizar el " libre de la memoria; owned" por otro uso.
El interruptor llegó a ser MultiFinder en el sistema 4.2, que se convirtió en el buscador en el sistema 7, y para entonces el esquema era completamente atrincherado. Apple hizo algunas tentativas de trabajar alrededor de las limitaciones obvias - la memoria temporal era una, donde podría un uso " borrow" liberar el RAM que pone fuera de su montón por períodos cortos, pero esto era impopular con los programadores que no pudo tan en gran parte solucionar el problema. Había también un esquema temprano de la memoria virtual, que intentó solucionar la edición poniendo más memoria a disposición paginando porciones inusitadas el disco, pero para la mayoría de los usuarios con 68K Macintoshes, éste no hizo nada sino reduce todo sin solucionar los problemas de memoria ellos mismos. Todas las máquinas tenían los discos duros permanentes y virutas MMU, y así que fueron equipadas para entonces para adoptar un acercamiento lejos mejor. Por alguna razón, Apple nunca hizo esto una prioridad hasta OS X del mac, aunque varios esquemas fueron sugeridos por los reveladores exteriores que conservarían compatibilidad mientras que solucionaban el problema de gerencia total de memoria. Los reemplazos de tercera persona para el encargado de la memoria del OS del mac, tal como Optimem, lo demostraron que podría ser hecho.
Macintosh tenía original kB 128 de RAM, con un límite del kB 512. Esto fue aumentada a MB 4 sobre la introducción Macintosh más . Estas computadoras de Macintosh utilizaron la CPU 68000, un procesador de 32 bits, pero tenían solamente 24 líneas de la dirección física. Las 24 líneas permitieron que el procesador tratara MB hasta 16 de la memoria (octetos 224), que fue considerada como suficiente cantidad en ese entonces. Sin embargo, el límite del RAM en el diseño de Macintosh era MB 4 MB del RAM y 4 de la ROM, debido a la estructura del mapa de memoria.
Porque la memoria era un recurso escaso, los autores del OS del mac decidían aprovecharse del octeto inusitado en cada dirección. El encargado original de la memoria (encima hasta del advenimiento de las banderas colocadas 7) del sistema en los pedacitos del colmo 8 de cada indicador de 32 bits y de la manija . Cada dirección contuvo banderas tales como " locked", " purgeable", o " resource", que fueron almacenadas en la tabla del indicador principal. Cuando estaban utilizadas como dirección real, estas banderas fueron enmascaradas apagado y no hechas caso por la CPU.
Mientras que un buen uso del espacio muy limitado del RAM, este diseño llevó a los problemas una vez que Apple introdujo el Macintosh II, que utilizó la CPU de 32 bits de Motorola 68020 . Los 68020 tenían 32 líneas de la dirección física y podrían tratar hasta 4GB (octetos 232) de la memoria. Las banderas que el encargado de la memoria almacenado en el alto octeto de cada indicador y la manija eran significativos ahora, y podrían llevar a los errores de dirección.
En teoría, los arquitectos del software del sistema de Macintosh estaban libres de cambiar el " banderas en el alto byte" proyectar evitar este problema, e hicieron. Por ejemplo, en Macintosh II, HLock () fue reescrito para ejecutar la manija que se trababa de una manera con excepción de señalar los altos pedacitos por medio de una bandera de manijas. Sin embargo, &mdash de muchos de Macintosh programadores del uso; y mucho del sistema de Macintosh se codifica en software, incluso el código en el &mdash de las ROM (hasta el IIci, que hizo que la ROM de 32 bits limpia); tuvo acceso a las banderas directo algo que usar los APIs, tales como HLock (), que había sido proporcionado para manipularlos. Haciendo esto hicieron sus usos incompatibles con la dirección de 32 bits verdadera, y éste se conocía como no siendo " clean" de 32 bits;.
Para parar los fallos del sistema continuos causados por esta edición, el sistema 6 y el funcionamiento anterior en 68020 o 68030 forzarían la CPU en 24 modos del pedacito, y solamente reconocerían y tratarían los primeros 8 megabytes del RAM, un defecto obvio en las máquinas cuyo hardware fue atado con alambre para aceptar hasta &mdash del RAM 128MB; y cuya literatura del producto hizo publicidad de esta capacidad. Con el sistema 7, el software del sistema del mac finalmente fue hecho limpio de 32 bits, pero todavía había el problema de las ROM sucias. Asombrosamente, la primera solución a este defecto fue publicada por el Connectix de la compañía del programa, cuyo 1991 del producto MODE32 substituyó todos del " de Apple; dirty" las rutinas del software del sistema, haciendo el software del sistema de 32 bits limpian y permitiendo el uso de todo el RAM en la máquina. Apple autorizó el software de Connectix más adelante en 1991 y lo distribuyó para libre. El Macintosh IIci y computadoras posteriores tenía ROM limpias de 32 bits.
Sin embargo era absolutamente un rato antes de que los usos fueran puestos al día para quitar las 24 dependencias del pedacito, y el sistema 7 proporcionó una manera de volver a 24 modos del pedacito si las incompatibilidades del uso fueron encontradas. Antes la migración al PowerPC y al sistema 7.2, la limpieza de 32 bits era obligatoria para crear usos nativos.
La subida de las idiomas orientadas al objeto para programar el mac - primer Pascal, entonces posterior C++ del objeto - problemas también causados para el modelo de memoria adoptado. Al principio, parecería natural que los objetos serían ejecutados vía las manijas, conseguir la ventaja de ser relocable. Sin embargo, estas idiomas, mientras que fueron diseñadas original, utilizaron los indicadores para los objetos, que llevarían a las ediciones de la fragmentación. Una solución, ejecutada por los recopiladores del PENSAMIENTO ( posterior Symantec ) era utilizar las manijas interno para los objetos, pero utiliza un sintaxis del indicador para tenerles acceso. Esto parecía una buena idea al principio, pero los problemas pronto profundos emergieron, puesto que los programadores no podrían decir si se ocupaban de un bloque relocable o fijo, y así que no tenían ninguna manera de saber si adquirir la tarea de trabar objetos o no. Innecesario decir esto llevó a los granes números de insectos y los problemas con éstos se oponen temprano puestas en práctica. Recopiladores posteriores no intentaron hacer esto, sino los indicadores verdaderos usados, ejecutando a menudo sus propios esquemas de asignación de memoria a la solución alternativa el modelo de memoria del OS del mac.
Mientras que el modelo de memoria del OS del mac, con todos sus problemas inherentes, seguía siendo la esta derecha de la manera a través a OS 9 del mac, debido a los apremios severos de la compatibilidad del uso, la disponibilidad cada vez mayor del RAM barato significó que generalmente la mayoría de los usuarios podrían aumentar su salida de una esquina. La memoria no fue utilizada eficientemente, sino que era bastante abundante que la edición nunca llegó a ser crítica. Esto es quizás irónico dado que el propósito del diseño original era maximizar el uso de cantidades muy limitadas de memoria. El mac OS x finalmente elimina el esquema entero, ejecutando un esquema escaso de la memoria virtual moderno. Un subconjunto de los más viejos APIs del modelo de memoria todavía existe para la compatibilidad como parte del carbón, pero el mapa al encargado moderno de la memoria (una puesta en práctica de Malloc del threadsafe) debajo. Apple recomienda que malloc del uso del código del OS X del mac y " libre; casi exclusively" (véase las recomendaciones de la asignación de memoria en OS del mac X).
| Random links: | Eriphyle | Tres príncipes | ¿Por qué los pájaros cantan? | Corredor negro | Barbara Lubomirska (siglo XVII) |