Windows 8 : au cœur de l'OS controversé de Microsoft

WinRT : Un framework asynchrone

L’une des caractéristiques principales de WinRT est que toutes les API prenant plus de 50 ms à s’exécuter doivent impérativement être asynchrones. Une méthode synchrone rend la main au thread (une tâche) qui l’a appelée à la fin seulement de son exécution. En asynchrone, la méthode renvoie la main immédiatement, permettant au programme de faire autre chose. Le programme est notifié plus tard quand la méthode a terminé son travail. Avec Win32, et bien que des méthodes asynchrones existent depuis longtemps, les méthodes synchrones sont très courantes. WinRT impose l’asynchrone à toutes les applications, les rendant globalement plus réactives. Ce mécanisme est essentiel pour le parallélisme massif et donc les systèmes distribués.

Pour profiter du mode asynchrone, Microsoft a ajouté au sein des langages utilisant WinRT (C#5, C++/CX, WinJS) des mots clés.

Interface

Au niveau de l’interface, le développeur peut utiliser plusieurs technologies :

  • DirectX (C++ seulement)
  • Direct2D et DirectWrite (C++ seulement et non disponibles sur Windows phone 8) introduits sur Windows 7.
  • XAML est aussi disponible pour tous les langages (hormis JavaScript où la projection cache ces API). Les concepts de fonctionnement WPF et Silverlight sont souvent récupérables avec XAML. Pour rappel, XAML crée une séparation entre le code et l’interface en utilisant un fichier XML qui décrit complètement l’interface.
  • JavaScript : l’interface sera en HTML5 en se basant sur le moteur d’Internet Explorer 10 (basé lui-même sur Direct2D)

Notez que la GDI n’est pas disponible dans l’environnement WinRT. Microsoft tient en effet à obtenir une accélération graphique complète, comme nous l’avons expliqué précédemment. Un grand changement puisque la GDI existe depuis le premier Windows.

WinRT et Win32

En plus des nouvelles API WinRT, une application Modern UI peut utiliser un sous-ensemble très restreint d’API Win32/COM+. Les API choisies ont quasiment toutes été introduites sur Vista et Windows 7 et elles sont compatibles avec la sandbox.

Pas de chargement dynamique

Sur WinRT, il n’est pas possible de charger dynamiquement une bibliothèque en dehors du dossier de l’application. De plus, cette dépendance doit être spécifiée dans le manifeste explicitement.

Il n’existe en outre pas d’API équivalente à VirtualAlloc sur WinRT, rendant impossible le développement d’un compilateur JIT. L’emit permettant de générer dynamiquement du code est aussi interdit sur WinRT. Il est intéressant de noter que le projet d’OS Singularity conçu par le MSR interdit totalement le chargement dynamique de code dans un processus. Il ne s’agit probablement pas d’ un simple hasard.

Gestion mémoire et autonomie

Windows laisse l’accès complet aux applications de bureau en permanence. Le processus reste en tâche de fond même quand il est en second plan. Ce mécanisme est totalement incompatible avec le monde mobile qui nécessite une autonomie correcte.

Sur les applications WinRT, il existe trois états.

  • L’état en premier plan qui correspond au mode des applications de bureau : l’application a accès à l’ensemble des ressources mémoire, disque dur, processeur et réseau.
  • L’état suspendu : le processus est totalement retiré de la liste des processus à planifier par l’ordonnanceur. L’application ne consomme plus aucune ressource contrairement à une application de bureau en arrière-plan. À noter que ce mécanisme marche en adéquation avec les nouvelles fonctionnalités du noyau (évoquées précédemment) destinées à augmenter la durée en repos du système.
  • Le troisième état permet aux applications d’exécuter des tâches de fond en arrière-plan mais de manière contrôlée, afin ne pas mettre à mal l’autonomie de la batterie.

winrt

Les tâches de fond doivent être enregistrées sur des déclencheurs. Ce peut être une alarme à certaines dates, à la réception d’une notification, à la réception d’un SMS, au démarrage ou la fermeture d’une session, quand l’internet devient disponible, et ainsi de suite.

winrt

Les applications sont disponibles sur l’écran de verrouillage ont droit à 2 s de temps CPU toutes les quinze minutes. Les autres applications ont droit à seulement 1 s toutes les deux heures.

 - winrt

Le débit réseau est lui aussi limité pour les tâches de fond.

À côté des tâches de fond, il est possible d’effectuer différentes actions en arrière-plan. Dans les différents scénarios possibles, on trouve le téléchargement montant et descendant (le système gère directement cette opération, ce qui permet de suspendre l’application) , la lecture audio, l’impression, la synchronisation d’appareil, la gestion des vignettes dynamiques, le partage avec une autre application.

Il est important de comprendre que le but de tout cela est d’en finir avec les applications en taches de fond sur Windows qui bouffent le CPU mais surtout vide la batterie des portables et tablettes. Il est aussi important de souligner que par son fonctionnement WinRT exclut tout un domaine d’application qui nécessite des ressources CPU en permanence. WinRT ne permet pas non plus le développement d’applications systèmes. Il n’y a pas d’équivalent à l’api DeviceIOControl. Ces applications peuvent toujours être codées avec Win32.

winrt winrt

Quand l’application est en état suspendu et que la mémoire vient à manquer, le système décharge les pages de mémoire de l’application pour les placer dans une liste de pages modifiées du système d’exploitation.

winrt

Ces pages de mémoires gérées par le système sont ensuite déchargées sur le disque dur de façon asynchrone.

winrt

 

Mais même une fois écrites sur le disque dur, ces pages restent en cache un moment. Si l’utilisateur réactive l’application avant que ces pages aient été supprimées en mémoire, le système pourra restaurer directement la plage de travail dans le cache mémoire. Dans le cas contraire, il rechargera du disque dur.

winrt

Enfin, il est possible pour l’utilisateur de fermer des applications, mais une application WinRT n’a normalement pas besoin d’être fermée. 

par Vincent Hermann et Jérôme Bosch Publiée le 27/11/2012 à 14:36