Los Macintosh Toolbox implementa muchas de las características de alto nivel del Mac OS Classic , incluyendo un conjunto de interfaces de programación de aplicaciones para el desarrollo de software en la plataforma. La Caja de herramientas consta de varios "administradores", componentes de software como QuickDraw , responsable de dibujar gráficos en pantalla, y el Administrador de menús, que mantienen estructuras de datos que describen la barra de menús. Como el Macintosh original fue diseñado sin memoria virtual o protección de memoria, era importante clasificar el código según cuándo debería cargarse en la memoria o guardarse en el disco y cómo debería accederse a él. La caja de herramientas consta de subrutinas lo suficientemente esenciales como para mantenerse permanentemente en la memoria y ser accesibles mediante una instrucción de máquina de dos bytes ; sin embargo, excluye la funcionalidad del núcleo "kernel", como la gestión de la memoria y el sistema de archivos . Tenga en cuenta que la Caja de herramientas no dibuja el menú en pantalla: los menús se diseñaron para tener una apariencia personalizable, por lo que el código de dibujo se almacenó en un recurso , que podría estar en un disco.
Advenimiento e implementación
En sistemas 68k
La implementación original de la familia Motorola 68000 del sistema operativo Macintosh ejecuta llamadas al sistema utilizando el mecanismo de manejo de excepciones de código de operación ilegal de ese procesador . Motorola especificó que las instrucciones que comienzan con 1111 y 1010 nunca se usarían en los futuros procesadores de la familia 68000, lo que los deja libres para que los utilicen como tales un sistema operativo. Además, cada uno tenía su propio vector de interrupción dedicado , separado del manejador de código de operación ilegal genérico. Como 1111 fue reservado para su uso por co -processors como el 68881 FPU , Apple optó 1010 ( hexadecimal A ) como prefijo para el funcionamiento de las llamadas al sistema. Método para el uso ilegales se conoce como la captura , por lo que estas instrucciones especiales fueron llamados A-trampas . [1] Cuando el procesador encuentra una instrucción de este tipo, transfiere el control al sistema operativo, que busca la tarea adecuada y la ejecuta. Este mecanismo tenía dos ventajas:
- Da como resultado programas compactos. Cada acceso al sistema operativo toma solo dos bytes , en contraste con cuatro o seis cuando se usan instrucciones de salto regulares .
- La tabla utilizada para buscar la función adecuada se almacena en la RAM. Luego, incluso si el código subyacente se almacenó en la ROM, aún podría anularse ( parchearse ) reemplazando la dirección de la memoria ROM con una dirección RAM.
El sistema se optimizó aún más asignando algunos bits de la instrucción A-trap para almacenar parámetros en las funciones más comunes. Por ejemplo, la asignación de memoria es una tarea muy común, por lo que debe expresarse en la menor cantidad posible de bytes de código. A veces, el programador desea borrar el bloque de memoria a ceros, por lo que la función de asignación debe tomar un parámetro booleano o debe haber dos funciones de asignación. Pasar un parámetro requeriría una instrucción adicional de dos bytes, lo que sería ineficiente. Tener dos funciones requeriría al menos cuatro bytes adicionales de RAM utilizados para la dirección en la tabla de búsqueda de funciones. La solución más eficiente es mapear múltiples trampas A a la misma subrutina, que luego usa la trampa A como parámetro. Esto es cierto para las subrutinas más utilizadas. Sin embargo, la caja de herramientas se componía de las subrutinas menos utilizadas. La caja de herramientas se definió como el conjunto de subrutinas que no tomaron parámetros dentro de la trampa A y se indexaron a partir de una tabla de despacho de 1024 entradas y 4 kilobytes . [2] (Las máquinas enviadas con menos de un megabyte de RAM utilizan una única tabla de 512 entradas, que corresponde a la tabla de despacho de SO de 256 entradas de revisiones posteriores de ROM. [3] )
En sistemas PowerPC
En 1994, Apple lanzó Macintosh utilizando la arquitectura PowerPC , que carecía de soporte de hardware para el mecanismo A-trap disponible en los sistemas 68k. Sin embargo, debido a su uso en la aplicación de parches de software, se conservaron las tablas de distribución. El código de la biblioteca API subyacente a cualquier rutina de Toolbox no hace nada más que hacer referencia a la tabla de distribución. La tabla de despacho vinculada solo al código de familia 68000 emulado. Las funciones de la caja de herramientas implementadas en el código PowerPC nativo primero deben deshabilitar el emulador usando el Administrador de modo mixto. En aras de la uniformidad y la extensibilidad, incluso se siguieron agregando nuevas entradas de funciones a la Caja de herramientas después de la transición de PowerPC.
Sin embargo, existía un mecanismo alternativo en el Administrador de fragmentos de código, que se usaba para cargar y vincular dinámicamente programas nativos de PowerPC. La función de llamada del sistema PowerPC, análoga al mecanismo de trampa A, se utilizó para interactuar con el nanokernel de Mac OS , que ofrecía pocos servicios directamente útiles para las aplicaciones.
Funcionalidad
Interfaces de programación
La Caja de herramientas se compone de funciones de uso común, pero no de las funciones de uso más común. Como resultado, se convirtió en una mezcolanza de diferentes bibliotecas API . [3] La caja de herramientas abarca la mayor parte de las funciones básicas que distinguen al Mac OS clásico. Las referencias de Apple “Inside Macintosh: Macintosh Toolbox Essentials” y “Inside Macintosh: More Macintosh Toolbox”, de alcance igualmente vago, también documentan la mayor parte de la Caja de herramientas.
Usar en el arranque
Debido a que gran parte de Toolbox se implementa en ROM, junto con el firmware de la computadora , fue conveniente usarlo como un entorno de cargador de arranque . Junto con los recursos almacenados en el chip ROM, Toolbox puede convertir la pantalla en gris, mostrar un cuadro de diálogo con la firma de saludo "Bienvenido a Macintosh" y mostrar el cursor del mouse. Al usar Toolbox para ayudar a arrancar la máquina, se puede inicializar un entorno rudimentario similar a Mac antes de cargar la maleta del sistema desde el disco (de hecho, antes de que se ejecutaran las ROM en las tarjetas NuBus), que es cuando se toma la decisión de usar 24 bits o 32 -Se debe realizar el direccionamiento de bits. (La compatibilidad de System 7 con direccionamiento de 32 bits requiere ROM limpias de 32 bits , ya que las ROM de Mac más antiguas no son compatibles con esto). La necesidad de diagnósticos como en el BIOS residente para placas compatibles con IBM PC no es necesaria ya que Macintosh tiene la mayoría de sus diagnósticos en POST e informa automáticamente los errores a través de los códigos " Sad Mac ".
Sin embargo, la similitud entre el entorno de arranque y el sistema operativo real no debe confundirse con ser idéntico. Aunque el proceso de arranque "Classic Mac OS" es complicado y en gran parte indocumentado, no es más limitado que un BIOS compatible con IBM PC . Al igual que el registro de arranque maestro de una PC , una Mac basada en ROM lee y ejecuta código de los primeros bloques ("bloques de arranque") de la partición del disco seleccionada como dispositivo de arranque . Luego, los bloques de arranque verifican que existe un entorno rudimentario adecuado y lo utilizan para cargar la maleta del sistema. Un sistema operativo diferente con un sistema de archivos diferente puede arrancar simplemente usando su propio código en los bloques de arranque. [4] Sin embargo, este sistema no se usó para PowerPC Linux porque Open Firmware en máquinas ROM del Nuevo Mundo requiere un cargador de arranque dentro de un sistema de archivos HFS, una razón que no tiene nada que ver con Toolbox o Mac "anticuadas" en general. Más concretamente, el panel de control Disco de inicio en Mac OS clásico y macOS solo permite al usuario seleccionar un sistema de archivos montado con restricciones muy particulares.
Legado
En Mac OS X , Toolbox no se usa en absoluto, aunque Classic Environment carga el archivo ROM de Toolbox en su máquina virtual. Gran parte de Toolbox se reestructuró e implementó como parte de la API de programación Carbon de Apple , lo que permitió a los programadores familiarizados con Toolbox portar su código de programa más fácilmente a Mac OS X.
Ver también
- Gestión de memoria de Mac OS
Referencias
- ^ Apple Inc. (6 de julio de 1996). "Instrucciones de una línea" . Archivado desde el original el 2 de julio de 2004. URL alternativa
- ^ Apple Inc. (6 de julio de 1996). "Sobre el administrador de trampas" . Archivado desde el original el 2 de julio de 2004. URL alternativa
- ^ a b Olson, James H. (4 de septiembre de 1997). "Mac Alamanac II" . Linux / m68k para Macintosh .
- ^ Apple Inc. (6 de julio de 1996). "Bloques de arranque" . Archivado desde el original el 12 de marzo de 2004. URL alternativa
enlaces externos
- (PDF) Apple's Inside Macintosh: Guía para desarrolladores de Macintosh Toolbox Essentials