Architecture et Technologies de Mac Os X
Les couches hautes de Mac OS X
Avant Propos...
Au delà de son héritage Unix, ce qui fait l'esprit de Mac OS X est son interface graphique. Celle-ci est appelée "Aqua". L'ensemble des applications utilisateurs répondent à des règles de développement très striques pour qu’elles s'intégrent le plus uniformément possible à l'environnement globale. Apple ne cesse de faire évoluer son environnement et ses API afin d'optimiser les performances et les capacités de ces applications.
Architecture des couches supérieures du système (10.6) :
Le Système de fenêtrage Quartz
L'affichage et le fenêtrage sous Mac OS X sont assurés par le système "Quartz". Celui-ci a beaucoup évolué au fil des versions du système.
Le rendu d'un objet dans le système (une fenêtre, une vidéo...) est effectué par la librairie graphique que le développeur utilise. La plus native pour les applications (hors vidéo et Jeux 3D) est Quartz2d. L'ancienne génération, appellée QuickDraw, est maintenant largement dépréciée par Apple. Elle a été implantée à l'origine pour simplifier la transition de Mac OS Classic vers Mac OS X. Avec Quartz2D, Les rendus graphiques des fenêtres sont effectués selon les spécifications PDF d'Adobe. Cela permet d'obtenir des résultats d'affichage extrêmements fiables, d'être imprimable sans traitement supplémentaire en obtenant un résultat très fidèle.
Il existe une extension de la librairie Quartz2D, il s'agit de QuartzGL. Elle est encore instable et est désactivée par défaut dans la version 10.5 de Mac OS. Celle-ci a pourtant un avantage de taille : les rendus ne sont plus effectués par le processeur mais par la carte graphique via OpenGL ce qui augmente considérablement les performances des rendus des applications.
L'affichage est découpé en couche (ou Layer) : chacune des fenêtre dispose de sa propre couche. Il est ainsi aisé d'appliquer des effets et animations à chacune d'entre elles (effet de transparence, distortion, etc.). C'est ainsi que Mac OS X gère par exemple les effets de "réduction" des fenêtres dans le dock.
À chaque rafraichissement de l'affichage, il faut que le moteur (composeur) de Quartz fusionne les différentes couches des applications via la carte graphique. Pour cela, le composeur doit attendre que chaque fenêtre termine son rendu et que le résultat soit "rasterisé" (conversion en image bitmap). Au final la scène OpenGL obtenue est renvoyée vers le FrameBuffer pour être affichée à l'écran. On comprend ainsi d'autant mieux l'intérêt de la librairie QuartzGL qui permet à l'ensemble des processus d'affichage d'avoir lieu au niveau de la carte graphique en exploitant sa mémoire et ses capacités de calcul sans être limité par la bande passante des bus entre la memoire centrale et la carte graphique.
Schématisation du processus d'affichage :
Les API
Une des forces de Mac OS X est son abondance d'APIs et de FrameWorks spécialisés issus de son héritage NextStep. L'environnement de développement natif et conseillé est "Cocoa". Celui-ci basé sur le langage Objectiv-C dispose de meilleurs performances et d'une intégration optimale au système en particulier au niveau de l'interface graphique.
Par ailleurs, Cocoa est le seul environnement de programmation qu'Apple à converti en 64-bit pour pousser les développeurs à stopper l'utilisation d'ancienne technologies comme "Carbon" qui avait été mis en place pour simplifier la transition vers Mac OS X.
Les nombreux frameworks spécialisés de Mac OS X en font un système de choix pour les applications professionnelles.
Les FrameWorks multimédias de Mac OS X sont des arguments commerciaux de taille pour Apple :
Remarquons que outre Cocoa et Carbon, d'autres environnements d'execution et API sont disponibles par défaut dans le système tels que Java, Perl, Python, Ruby ou encore OpenGL pour les Jeux.
La Technologie OpenCL
La technologie OpenCL créée à li'nitialtive d'Apple a été ratifiée en tant que standard GPGPU ouvert en décembre 2008.
Celle-ci met a disposition un ensemble d'API en langage C qui permettent aux développeurs de profiter de la puissance de calcul du processeur de la carte graphique. Ainsi, les tâches comprenants des calculs intensifs telles que l'encodage video reçoivent un gain de performance non négligeable sans que l'utilisateur ait besoin de changer de matériel.
OpenCL est indépendant du type de carte graphique contrairement à la technologie CUDA de Nvidia car il utilise un ByteCode intermédiaire qui est compilé pour le matériel au moment de l'exécution. OpenCL peut être utilisé sur tous les niveaux du système.
GrandCentral
Le principe de GrandCentral part d'un constat simple : les machines sont vont devenir massivement multicores. Pourtant les dévellopeurs peinent à optimiser leurs applications pour les prendres en compte. Le seul moyen existant pour exploiter les cores est la création de threads au sein de l'application, de plus la gestion de plus de 4 coeurs devient extrêmement complexe voir irréaliste.
Apple propose alors la technologie GrandCentral dans Mac OS X 10.6 pour simplifier les développements d'applications exploitant l'intégralité des coeurs disponibles sans que les dévellopeurs aient à se soucier de leur nombre.
GrandCentral est une sorte de super Ordonnanceur système associé avec des API que les développeurs doivent utiliser afin de pouvoir l'exploiter. Le principe général est que le développeur utilise des strutures spécifiques avec lesquelles il va faire ses calculs. L'ordonnaceur GrandCentral va alors gérer lui-même la répartition dynamique des calculs (découpés sous forme de paquets) sur les différents coeurs du système cela n'est pas possible avec des threads car ces derniers sont alloués statiquement sur un même coeur durant toute leur exécution. Il est aussi possible de choisir les priorités des calculs afin d'améliorer le rendement.
Schématisation du fonctionnement de GrandCentral :