J'entends souvent les gens dire "la philosophie unique d'Unix est de traiter tout comme un fichier" ou "Sous Unix, tout est un fichier". Mais je n'ai jamais entendu personne expliquer pourquoi c'est unique à Unix.
Alors, pourquoi est-ce unique à Unix? Les autres systèmes d'exploitation tels que Windows et Mac ne fonctionnent-ils pas sur les fichiers?
Et est-ce unique comparé à d'autres systèmes d'exploitation?
unix
operating-systems
Un étudiant Noob
la source
la source
Réponses:
Les systèmes d'exploitation classiques, avant Unix, traitaient les fichiers dans un sens et traitaient chaque périphérique en fonction des caractéristiques de ce dernier. En d’autres termes, si la sortie d’un programme était écrite dans un fichier sur disque, c’était le seul endroit où la sortie pouvait aller; vous ne pouviez pas l'envoyer à l'imprimante ou au lecteur de bande. Chaque programme devait connaître chaque périphérique utilisé pour les entrées et les sorties et disposer d'options de commande permettant de gérer d'autres périphériques d'E / S.
Unix traite tous les périphériques en tant que fichiers, mais avec des attributs spéciaux. Pour simplifier les programmes, l'entrée et la sortie standard sont les périphériques d'entrée et de sortie par défaut d'un programme. Ainsi, les sorties de programme normalement destinées à l’écran de la console peuvent aller n’importe où, dans un fichier disque, une imprimante ou un port série. Ceci est appelé redirection d' E / S .
Bien sûr, tous les systèmes d’exploitation modernes prennent en charge divers systèmes de fichiers et peuvent «fonctionner sur des fichiers», mais la différence est de savoir comment les périphériques sont gérés. Je ne connais pas Mac, mais Windows propose une redirection d’entrée / sortie.
Pas vraiment plus. Linux a la même fonctionnalité. Bien sûr, si un système d'exploitation adopte la redirection E / S, il a tendance à utiliser d'autres fonctionnalités Unix et finit par ressembler à Unix.
la source
WriteFile
. Mais en plus, il existe une catégorie encore plus large d’objets de "synchronisation" qui comprend non seulement des fichiers mais également des mutex.L'idée que "tout est un fichier" est venue de Multics. Les concepteurs d’Unix se sont beaucoup inspirés de leurs prédécesseurs, notamment de Multics. En effet, beaucoup de choses en informatique sont basées sur des prédécesseurs.
Vous pouvez en savoir plus sur le travail de feu Dennis Ritchie dans la conception d'Unix. Il a référencé des éléments qu'ils ont "copiés" à partir de Multics, tels que le système de fichiers en forme d'arborescence, le shell de commande et la non-structuration des fichiers. Je ne veux pas dire que les gens d'Unix ont volé ceux de Multics. À toutes fins utiles, ce sont les mêmes personnes.
la source
Unique? Définir? Absolument.
Tout avoir sous forme de fichier ou de périphérique dans une hiérarchie connue signifie que vous pouvez utiliser le même ensemble d'outils pour tout. Plan 9 de Bell Labs va encore plus loin avec même des périphériques matériels sous forme de fichiers.
Plus important encore, cela permet deux concepts très simples et puissants. Utilitaires de base qui font One Thing Well (tm), qui peuvent être reliés au besoin avec des tuyaux. Vous voulez trouver quelque chose dans un fichier texte? Utilisez-le
cat
pour le montrer, le passergrep
et vous cuisinez au gaz. C'est la vraie puissance de la méthode 'Unix' - des applications spécialisées travaillant ensemble pour une flexibilité énorme.Mac OS X suit également la philosophie Unix, mais il est préférable de le masquer (un bundle 'application' est en réalité un répertoire plein de fichiers) et constitue en fait un véritable Unix certifié, issu de NeXT , qui utilisait des bits de FreeBSD .
Avec Windows, il existe certains composants binaires tels que l'observateur d'événements et le registre, et certains avantages en termes de rapidité s'y trouvent, dans ce scénario particulier.
la source
À cause des fichiers spéciaux. Lorsque les gens disent "tout est un fichier sous Unix", les fichiers et les répertoires courants ne sont pas ce qu'ils ont en tête. Les fichiers spéciaux sont uniques aux systèmes d'exploitation de type Unix, et ils sont nombreux. Il est donc pas unique à l' Unix.
Les fichiers spéciaux servent à plusieurs fins. Il existe par exemple des tuyaux, des sockets et, plus particulièrement, des fichiers de périphérique. Les tuyaux et les sockets sont des flux de communication entre les processus. Une grande partie des fonctionnalités des sous-systèmes est mise à la disposition de l'espace utilisateur via les fichiers de périphérique.
Tuyaux et Douilles
Les programmes les utilisent comme ils utilisaient des fichiers ordinaires. En fait, la plupart du temps, ils ne se soucient même pas du type de fichier qu'ils utilisent. C'est pourquoi les commandes Unix peuvent être combinées de manière si multiple pour former de nouveaux systèmes puissants. (Voir la redirection des E / S dans la réponse de la sciure de bois)
Fichiers de périphérique
Comme mentionné précédemment, ils agissent comme des interfaces pour l’espace utilisateur. Par exemple, pour éjecter le plateau de disque compact, un programmeur doit d’abord ouvrir le fichier de périphérique correspondant. Autre exemple: vous voulez que votre programme bascule le terminal virtuel. Ouvrez / dev / console en premier.
Qu'est - ce qui se passe ensuite n'envoie pas de simples caractères à ces fichiers, mais l' émission ioctl () est sur eux. Les ioctls individuels que vous pouvez émettre dépendent du périphérique. Par exemple, la console est documentée dans console_ioctl (4)
la source
Je vais probablement être enthousiasmé pour avoir dit cela, mais je pense que dire que tout est un fichier sous Unix est en réalité une erreur. Ce que c'est vraiment, c'est deux choses.
Un système de fichiers implémente cet espace de noms, ainsi que le framework permettant l'envoi de fonctions d'interface à ces objets. Un système de fichiers a d'abord été conceptualisé pour héberger des fichiers, mais a ensuite été coopté pour organiser d'autres objets dans la hiérarchie des espaces de noms. Un exemple de polymorphisme avant orienté objet était une chose.
Il n'y a pas de mal à appeler simplement tous les fichiers. Mais en réalité, ce sont ces objets plus génériques (un fichier en est un exemple). De ce point de vue, cette idée n’est pas unique à Unix. Beaucoup d'autres systèmes d'exploitation implémentent de telles hiérarchies d'objets polymorphes.
la source
mmap()
bien sûr ....)Quand les gens disent "Sous Unix, tout est un fichier", cela veut dire que les choses qui ne sont pas des fichiers sont traitées comme des fichiers.
Bien sûr, la plupart des systèmes d'exploitation fonctionnent avec des fichiers. Fichiers texte, fichiers image, fichiers son. Mais tous les systèmes d'exploitation ne traitent pas les périphériques comme des fichiers. C'est une différence importante. Si je liste le contenu de mon dossier / dev / dans mon système d'exploitation Ubuntu (basé sur Unix), je reçois une liste de plus de 200 périphériques. Certains de ces périphériques sont matériels, mais apparaissent dans un dossier. Par exemple, les disques durs, les ports USB, la souris et le clavier, les périphériques audio et les imprimantes. Certains des périphériques sont virtuels, par exemple / dev / urandom, qui se comporte comme un fichier infini plein de nombres aléatoires. Ce n'est pas un vrai fichier sur mon disque dur.
Tous ces périphériques sont traités comme des fichiers. Je peux lire et / ou écrire des données dans ces appareils. Vous trouverez ici des exemples de copie de données de différents périphériques dans le périphérique audio. Cela est possible car ils sont traités comme des fichiers. Le résultat (geek) est la capacité d' écouter le contenu du disque dur, le mouvement de la souris, la mémoire de l'ordinateur ou les pixels d'une image. Cela serait beaucoup plus difficile à réaliser si les périphériques n'étaient pas traités comme des fichiers, car chaque périphérique nécessitait des méthodes différentes pour lire et écrire des données.
Cela étant dit, la signification de "tout" varie d'un système à l'autre. Par exemple, OS X est basé sur Unix, mais n’a pas de périphérique / dev / audio. Il utilise un système audio propriétaire appelé CoreAudio. Donc, dans ce cas, on pourrait dire "presque tout est un fichier". Ensuite, dans des systèmes tels que Windows, où "tout n'est pas un fichier", vous pouvez toujours faire des choses comme copier le contenu d'un fichier sur le port d'imprimante (en tapant quelque chose comme
copy mydocument.txt >lpt1:
), ce qui revient à copier un document sur le périphérique d'impression sous Unix. systèmes.Les autres systèmes d'exploitation tels que Windows et OS X ne fonctionnent-ils pas sur les fichiers? Oui ils le font. Windows et OS X fonctionnent sur des fichiers, mais Windows ne traite pas les périphériques comme des fichiers, ce qui fait partie de ce que "tout est un fichier" signifie.
la source
Je vois Multics cité comme la source de "tout est un fichier", mais je pense que vous devez aller un peu plus loin que les fichiers de périphérique, les pipes nommées, les fichiers normaux, etc. Vous devez regarder la syntaxe de nommage des fichiers. Cela fait une grande différence même lorsque les "noms de fichiers magiques" AUX, CON et LP existent.
Voir " Le nom hideux " de Rob Pike. Il compare la syntaxe de dénomination de fichier Unix à quelques autres syntaxes, notamment VMS. Notez que les systèmes mainframe de la fin des années 60 et du début des années 70, à l’origine de la création d’Unix, avaient ce que l’esprit moderne considérerait comme une syntaxe de nommage des fichiers extraordinairement rococo. Cela fait des années que je n'ai pas utilisé VM / CMS, ou NOS ou NOS / VE, et je n'ai regardé que par-dessus l'épaule de quelqu'un qui utilise un système d'exploitation Univac, mais il suffit de dire que les bizarreries dépassaient les régularités.
Je n'ai même jamais vu Multics fonctionner, mais vous pouvez voir un papier sur son système de fichiers . Il semble que l’Unix original prenne le "tout est un fichier" un peu plus loin que Multics, mais votre kilométrage peut varier.
la source
Veuillez noter que même Linus Torvalds n’est pas d’accord avec le fait que "tout est un fichier". Si vous recherchez "
"vous trouverez des philosophies intéressantes sur le fait que nous voulons dire que tout n'est pas un fichier, par exemple une structure de données abstraite dans la mémoire ou un pointeur n'est sûrement pas un fichier, OK, tout peut être représenté sous forme de fichier mais représenter et être deux actions différentes .
la source
The UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".