L'éjection d'un disque verrouille l'utilitaire de disque

0

J'ai deux lecteurs USB externes connectés à mon mac. Si j'utilise l'utilitaire de disque pour en éjecter un, l'utilitaire de disque se bloque jusqu'à ce que le lecteur externe sorte de l'hibernation (unparks, accélère). Pourquoi?

Ceci est particulièrement gênant si je souhaite démonter plus d’un lecteur externe en veille, car je dois attendre qu’il se réveille avant de pouvoir cliquer sur Éjecter pour l’autre périphérique.

Ram
la source

Réponses:

0

Lorsque vous démontez proprement (par exemple, éjectez un lecteur plutôt que de le débrancher à chaud), vous laissez le système d'exploitation nettoyer toute activité sur le lecteur (ce qui empêche la boîte de dialogue de réparation que vous voyez parfois lorsque vous connectez un lecteur).

Dans ce cas, les lecteurs sont probablement en train de tourner pour fermer les descripteurs de fichiers, écrire des données de journalisation si nécessaire, garer les têtes, vider le cache en écriture, etc.

En ce qui concerne la raison pour laquelle l'Utilitaire de disque se verrouille en même temps, c'est une question à laquelle seuls les concepteurs / implémenteurs du programme peuvent répondre. Ma meilleure hypothèse serait qu'ils ont fait de la mise à jour de l'interface utilisateur une opération atomique par rapport au disque, de sorte qu'un état précis soit toujours reflété dans l'interface utilisateur. S'ils sont à l'origine de ce type d'opération, l'interface utilisateur est indéterminée par rapport à l'état réel du disque.

Cela nécessiterait également de deviner quelles opérations sont sûres et quelles ne le sont pas.

ernie
la source
Oui c'est très bien et totalement compris. Ma question est la suivante: pourquoi DiskUtility se bloque-t-il? Par lock-up, je veux dire que le programme Utilitaire de disque ne répond à aucune entrée d'utilisateur jusqu'à ce que le lecteur soit allumé (disons 3 secondes) - pendant ce temps, si vous essayez de cliquer sur un menu, d'éjecter un autre lecteur ou d'exécuter une opération de l'interface graphique avec DiskUtility vous ignore complètement.
Ram
1
@Ram Disk Utility ne sait pas que le lecteur est en veille. Il envoie simplement une demande de lecture au disque. Chaque fois qu'une application envoie une demande à un disque, le système d'exploitation bloque ce thread jusqu'à ce qu'elle puisse répondre à la demande ou la rejeter. Dans ce cas, elle doit attendre que le disque se retourne avant de savoir si elle le peut. La situation idéale serait que l'Utilitaire de disque le fasse sur un thread d'arrière-plan, mais je suppose que ce n'est pas le cas si l'interface graphique se fige. Vous ne pouvez pas faire grand chose à ce sujet.
Darth Android
@ DarthAndroid ouais c'est ce que je pensais ne pas comprendre pourquoi - pourquoi auraient-ils décidé d'implémenter une requête de blocage dans le thread principal; J'espérais apprendre le rationnel en demandant ici. Une situation similaire, et encore plus, se produit lorsque Finder décide d’interroger les disques et que l’un d’eux est endormi en tant que Finder.
Ram
@Ram a mis à jour avec mes meilleures hypothèses, mais je ne pense pas que vous obtiendrez une réponse définitive à moins que quelqu'un qui a réellement travaillé sur Utilitaire de disque ne passe. . .
ernie
Il y a des interfaces graphiques qui gèrent ce genre de situation - je pense avoir déjà vu quelques effets de masquage différents (gaufres?) Pour indiquer qu'un objet était en mutation ou dans un état inconnu pour le moment. Dans tous les cas, il apparaît à d’autres endroits dans OSX - plus que ce à quoi j’attendais est nécessaire, il est nécessaire de verrouiller (blocage simultané).
Ram