89 votes

Verrouillage des fichiers d’exécution : Fait de Windows, Linux n ' t. Pourquoi ?

J’ai remarqué que quand un fichier est exécuté sous Windows (.exe ou .dll), il est verrouillé et ne peut pas être supprimé, déplacé ou modifié.

Linux, est en revanche, pas de verrouillage de fichiers d’exécution et vous pouvez supprimer, déplacer ou modifiez-les.

Pourquoi Windows se verrouille lorsque Linux ne fonctionne pas ? Y a-t-il un avantage à la fermeture ?

111voto

Oren Shemesh Points 1084

Linux a une référence à nombre de mécanisme, de sorte que vous pouvez supprimer le fichier alors qu'il est en cours d'exécution, et il continuera d'exister aussi longtemps qu'un processus (Qui avait été ouvert, il) a une poignée pour elle. L'entrée de répertoire pour le fichier est supprimé lorsque vous supprimez, de sorte qu'il ne peut plus être ouverte, mais les processus déjà à l'aide de ce fichier, vous pourrez toujours l'utiliser. Une fois que tous les processus à l'aide de ce fichier mettre fin, le fichier est automatiquement supprimé.

Windows n'a pas cette capacité, de sorte qu'il est obligé de verrouiller le fichier jusqu'à ce que tous les processus de l'exécution de l'avoir fini.

Je crois que Linux comportement est préférable. Il y a probablement une des raisons architecturales, mais le premier (et simple) raison pour laquelle je trouve le plus impressionnant, c'est que dans Windows, vous avez parfois impossible de supprimer un fichier, vous n'avez aucune idée de pourquoi, et tout ce que vous savez est que certains processus est de le garder en cours d'utilisation. Sous Linux il n'arrive jamais.

31voto

Neil Williams Points 6446

Autant que je sache, linux ne serrure exécutables lorsqu'ils sont en cours d'exécution, cependant, il verrouille l' inode. Cela signifie que vous pouvez supprimer le "fichier", mais l'inode est encore sur le système de fichiers, intacte et tout ce que vous vraiment supprimer un lien.

Unix programmes utilisent cette façon de penser le système de fichiers de tous les temps, de créer un fichier temporaire, de l'ouvrir, de supprimer le nom. Votre fichier existe toujours, mais le nom est libéré à utiliser pour les autres et personne ne peut le voir.

6voto

Eric Tuttleman Points 942

Je pense que linux / unix ne pas utiliser la même clé de la mécanique, parce qu'ils sont construits à partir du sol en place comme un système multi-utilisateurs - qui pourrait s'attendre à la possibilité de plusieurs utilisateurs utilisent le même fichier, peut-être même à des fins différentes.

Est-il avantageux de verrouillage? Eh bien, il pourrait éventuellement réduire la quantité de pointeurs que l'OS aurait à gérer, mais maintenant quelques jours, le montant de l'épargne est assez négligeable. Le plus grand avantage que je peux penser à de verrouillage est ceci: vous économiser de l'utilisateur-visible de l'ambiguïté. Si un utilisateur est en cours d'exécution d'un fichier binaire, et l'utilisateur b le supprime, le fichier doit rester jusqu'à ce que l'utilisateur A la fin du processus. Pourtant, si l'Utilisateur B ou d'autres utilisateurs de regarder sur le système de fichiers pour elle, ils ne seront pas en mesure de le trouver - mais il va continuer à prendre de la place. Pas vraiment une grande source de préoccupation pour moi.

Je pense qu'en grande partie c'est plus une question sur la compatibilité avec la fenêtre de systèmes de fichiers.

6voto

MSalters Points 74024

Je pense que vous êtes trop absolue au sujet de Windows. Normalement, il n'a pas d'allouer de l'espace de swap pour la partie code d'un fichier exécutable. Au lieu de cela, il garde un verrou sur le excutable et Dll. S'il est éliminé pages de code sont nécessaires, encore une fois, ils sont tout simplement rechargé. Mais avec /SWAPRUN, ces pages sont conservées dans la swap. Ce est utilisé pour les fichiers exécutables sur CD ou lecteurs réseau. Par conséquent, windows n'a pas besoin de verrouiller ces fichiers.

Pour .NET, regarder Shadow Copy.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X