Question Pourquoi "Everything est un fichier" est-il unique aux systèmes d'exploitation Unix?


J'entends souvent les gens dire "la philosophie unique d'Unix est de traiter tout comme un fichier" ou "Dans Unix, tout est un fichier". Mais je n'ai jamais entendu personne expliquer pourquoi il est unique à Unix.

Alors, pourquoi est-ce unique pour Unix? Est-ce que d'autres systèmes d'exploitation tels que Windows et Mac ne fonctionnent pas sur les fichiers?

Et est-ce unique par rapport aux autres systèmes d'exploitation?


70
2017-12-03 05:12


origine


Note sidenote: Macosx s'exécute sur un unix. - akira
fwiw, alors que les éléments de plus haut niveau n'utilisent pas les fichiers (comme dbus ou X dans * nix), Windows de bas niveau est construit autour des poignées. Vous pouvez faire la même chose avec eux que vous pouvez les fichiers sur * nix (ouvrir, fermer, contrôler et généralement envoyer / recevoir), mais vous devez être un programmeur pour voir cette interface. Que ce soit une bonne chose est une question de préférence. - Mark
tout est un fichier, sauf les interfaces réseau. - alvin
@akira - OSX est certifié Unix et ne l’exécute pas. - Rob
@akira Pas sur un Unix. OSX est l'un des rares systèmes d'exploitation UNIX certifiés. - Let_Me_Be


Réponses:


Alors, pourquoi est-ce unique pour Unix?

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 périphérique. C'est-à-dire que si la sortie d'un programme était écrite dans un fichier sur le 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 pour 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, entrée standard et sortie standard sont les périphériques d'entrée et de sortie par défaut d'un programme. Ainsi, la sortie de programme normalement destinée à l'écran de la console peut aller n'importe où sur un fichier de disque, une imprimante ou un port série. C'est appelé Redirection d'E / S.

Est-ce que d'autres systèmes d'exploitation tels que Windows et Mac ne fonctionnent pas sur les fichiers?

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 réside dans la manière dont les périphériques sont gérés. Je ne connais pas Mac, mais Windows offre une redirection d'E / S.

Et, comparé à d'autres systèmes d'exploitation, est-ce unique?

Pas vraiment plus. Linux a la même fonctionnalité. Bien sûr, si un système d'exploitation adopte une redirection d'E / S, il a tendance à utiliser d'autres fonctionnalités Unix et finit par ressembler à Unix.


53
2017-12-03 05:30



OS X est essentiellement Unix, donc il n'y a pas beaucoup de différence. - slhck
il y a un peu plus à tout un modèle de fichier. - artistoex
Le premier paragraphe n'est tout simplement pas vrai. Il y avait des systèmes d'exploitation avant Unix, et des fonctionnalités ont été trouvées par la suite dans Unix, y compris la redirection d'E / S. - Patrick Seymour
Plan 9 a le même concept Tout est un concept de fichier et a même été appelé "plus unix alors unix" - William
Windows (depuis NT) va un peu plus loin. De nombreux périphériques se comportent comme des fichiers, tels que les ports série et les canaux nommés. Vous pouvez écrire à tous en utilisant WriteFile. Mais en plus, il y a une catégorie encore plus grande d'objets de synchronisation qui inclut non seulement les fichiers mais aussi les mutex. - MSalters


L'idée que "tout est un fichier" est venue de Multics. Les concepteurs d'Unix ont basé beaucoup de leurs travaux sur les prédécesseurs, notamment Multics. En effet, beaucoup de choses en informatique sont basées sur les prédécesseurs.

Vous pouvez lire plus sur le travail de Dennis Ritchie dans le design d'Unix pour plus. Il a référencé des éléments "copiés" de Multics, tels que le système de fichiers arborescents, le shell de commandes et la non-structuration des fichiers. Je ne veux pas dire que les employés d'Unix ont volé les gens de Multics. À toutes fins utiles, ce sont les mêmes gens.


34
2017-12-03 05:30



cela ne devrait pas être la réponse la plus élevée, cela ne répond pas à la question, il suffit de demander aux gens de poser une autre question: "Pourquoi est-ce que tout est un fichier dans Multics?" - Lie Ryan
@LieRyan: En fait, cela répond à la question de savoir pourquoi unique: ce n'est pas - Goran Jovic
Les employés d'Unix ont simplement pris leurs idées avec eux lorsque le projet Multics a été interrompu et l'ont renommé. Unix est juste un jeu de mots - un VS plusieurs. - Fiasco Labs
@Lie Ryan - La question n'était pas pourquoi tout est un fichier, c'est pourquoi il est unique. Comme Goran et moi l'avons souligné, ce n'est pas le cas. - Patrick Seymour
La question fait vraiment référence au "système d'exploitation Unixs", c’est-à-dire la famille. Cette famille comprend raisonnablement Multics et Linux. - MSalters


Unique? Non? Définir? Absolument.

Tout comme un fichier ou un périphérique dans une hiérarchie connue signifie que vous pouvez utiliser le même ensemble d'outils pour tout. Plan 9 des laboratoires Bell prend cela plus loin, même avec des périphériques matériels en tant que 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 assemblés avec des tuyaux au besoin. Vous voulez trouver quelque chose dans un fichier texte? Utilisation cat pour le montrer, le passer grepet vous cuisinez avec du gaz. C'est le véritable pouvoir de la méthode «Unix» - des applications spécialisées fonctionnant ensemble pour une grande quantité de flexibilité.

Mac OS X suit également la philosophie Unix, mais elle est mieux cachée (un bundle "application" est en réalité un répertoire plein de fichiers) et est en fait un Unix certifié, issu de Prochain, qui utilisait des morceaux de FreeBSD.

Avec Windows, il existe certains composants binaires, tels que l’observateur d’événements et le registre, et des avantages de vitesse dans ce scénario particulier.


28
2017-12-03 05:22



Plus 1 pour mentionner le plan 9. IMHO Fuse rapproche le plan 9 d'une implémentation par ad-hoc et itération. - Danny Staple
Eh bien, le plan 9 est le plan 9, cela fonctionne déjà. Fusible permet simplement l'expansion du système de fichiers en espace utilisateur de différentes manières. J'aime celui où IRC est traité comme un FS. - Journeyman Geek♦
Hmm - vous savez, j'ai eu l’intention de le regarder depuis des années depuis qu’il a été découvert par le biais d’un livre d’Eric Raymond il ya des années… Vous avez fini par me remettre en question. l'ISO et l'essayer. - Danny Staple
Je crois qu'il existe une version plus récente, appelée Inferno - Journeyman Geek♦
+1 pour noter que Darwin d'OS X est aussi un «vrai Unix». - calum_b


A cause des fichiers spéciaux Lorsque les gens disent "tout est un fichier sous Unix", les fichiers et répertoires communs ne sont pas ce qu’ils ont en tête. Les fichiers spéciaux sont uniques aux systèmes d'exploitation de type Unix, dont ils sont nombreux. Donc, ce n'est pas unique à la Unix.

Les fichiers spéciaux servent à plusieurs fins. Il y a par ex. pipes, sockets et, surtout, fichiers de périphérique. Les tuyaux et les prises 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 des fichiers de périphériques.

Pipes et Sockets

Les programmes les utilisent comme ils utilisent 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 aussi complexe pour former de nouveaux systèmes puissants. (Voir la redirection d'E / S dans la réponse de sciure de bois)

Fichiers de périphériques

Comme mentionné précédemment, ils agissent comme des interfaces pour l'espace utilisateur. Par exemple, pour éjecter le plateau de cd, un programmeur ouvre d'abord le fichier de périphérique correspondant. Autre exemple: vous voulez que votre programme change de terminal virtuel. Ouvrez d'abord / dev / console.

Qu'est-ce qui se passe ensuite n'envoie pas de simples personnages à ces fichiers, mais délivrant ioctl ()'s sur leur. Les différents ioctl que vous pouvez émettre dépendent de l'appareil. Par exemple. la console est documentée dans console_ioctl (4)


18
2017-12-04 11:59





Je vais probablement me faire dire ça, mais je pense que dire que tout est un fichier dans Unix est en fait une erreur de longue date. Qu'est-ce que c'est vraiment deux choses.

  1. Les fichiers et les périphériques, ainsi que de nombreux autres composants, sont des objets pouvant être modélisés par une interface comprenant des fonctions d’ouverture, de fermeture, de lecture, d’écriture et de contrôle. Ne lancez même pas les gens sur la façon dont ioctl (pour les fonctions de contrôle) est un évier de cuisine non typé. De plus, les descripteurs de ces objets (fds) sont candidats à une classe commune de comportement lié aux E / S, tels que le blocage / non-blocage, l’async, les signaux et autres.
  2. L'espace de noms pour ces objets (fichiers, périphériques, autres éléments) est hiérarchique. L'implémentation s'appelle le système de fichiers, car c'est ce que sont la majorité des objets.

Il n'y a, bien sûr, aucun mal à tout appeler les fichiers. Mais en réalité, les fichiers sont ces objets plus génériques, comme d’autres choses (comme les périphériques). De ce point de vue, cette idée n'est pas unique à Unix. Beaucoup d'autres systèmes d'exploitation implémentent de tels objets avec des interfaces similaires.


11
2017-12-04 15:57



Exactement! Dans Unix tout est un fichier descripteur (pas nécessairement un fichier!), c’est-à-dire que tout (sauf la mémoire) est des E / S, même des fichiers. Les fichiers doivent être accessibles comme s'ils étaient des flux d'E / S (bien qu'ils soient accessibles, si peu accessibles au hasard, mais que le coût des appels système supplémentaires est extrême). (à l'exception de ce que l'on peut faire avec mmap() bien sûr....) - Greg A. Woods


Quand les gens disent "Dans Unix, tout est un fichier", ils veulent 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 audio. 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), j'obtiens une liste de plus de 200 périphériques. Certains de ces périphériques sont du matériel, mais sont affichés dans un dossier. Par exemple, les disques durs, les ports USB, la souris et le clavier, les périphériques audio et les imprimantes, entre autres. Certains périphériques sont virtuels, par exemple / dev / urandom, qui se comporte comme un fichier infini rempli de nombres aléatoires. Ce n'est pas un fichier réel sur mon disque dur.

Tous ces appareils sont traités comme des fichiers. Je peux lire des données depuis et / ou écrire des données sur ces appareils. Voici des exemples de copier des données de différents appareils dans le périphérique audio. Ceci est possible car ils sont traités comme des fichiers. Le résultat (geek) est la capacité de écoute au contenu du disque dur, au mouvement de la souris, à la mémoire de l'ordinateur ou aux pixels d'une image. Ce serait beaucoup plus difficile à réaliser si les appareils n'étaient pas traités comme des fichiers, car chaque appareil nécessiterait des méthodes différentes pour lire et écrire des données.

Cela étant dit, ce que tout "signifie" varie d'un système à l'autre. Par exemple, OS X est basé sur Unix, mais ne possède 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 comme Windows, où «tout n’est pas un fichier», vous pouvez toujours faire des choses comme copier le contenu d’un fichier sur le port de l’imprimante (en tapant quelque chose comme: copy mydocument.txt >lpt1:), ce qui est similaire à la copie d’un document sur l’imprimante dans les systèmes Unix.

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 signifie que «tout est un fichier».


9
2017-12-03 16:29





Je vois Multics cité comme source de "tout est un fichier", mais je pense que vous devez regarder un peu plus loin que les fichiers de périphériques, les canaux nommés, les fichiers normaux, etc. Cela fait une grande différence même lorsque les «noms de fichiers magiques» AUX, CON et LP existent.

Voir "Le nom hideux"par Rob Pike. Il compare la syntaxe de dénomination de fichiers Unix avec quelques autres syntaxes, notamment VMS. Notez que les systèmes d’ordinateurs centraux de la fin des années 60 et du début des années 70 Il y a des années que j'ai utilisé VM / CMS, NOS ou NOS / VE, et j'ai seulement regardé par-dessus l'épaule de quelqu'un utilisant un OS Univac, mais il suffit de dire que les bizarreries étaient plus nombreuses que les régularités.

Je n'ai jamais vu Multics courir, mais vous pouvez voir un papier sur son système de fichiers. Il semble que l’Unix d’origine ait pris le «tout est un fichier» un peu plus loin que Multics, mais votre kilométrage peut varier.


8
2017-12-06 18:06



Eh bien, dans Multics, tout est mémoire, sauf E / S (bien que cela puisse aussi être mappé sur la mémoire). Dans Unix tout (sauf la mémoire) est un fichier descripteur, y compris les fichiers. C'est à dire. dans Unix, tout est I / O. - Greg A. Woods
BTW, il existe maintenant un émulateur qui démarrera et exécutera Multics. - Greg A. Woods


Veuillez noter que même Linus Torvalds n'est pas d'accord avec le fait que "tout est un fichier". Si vous recherchez "

tout est un bytestream

"vous trouverez des philosophies intéressantes sur la façon dont 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, bien sûr, tout peut être représentée en tant que fichier mais représentant et être sont deux actions différentes.


3



Vous n'avez pas fourni de lien. Sur certaines recherches, j'ai trouvé yarchive.net/comp/linux/everything_is_file.html, en citant les réponses de Torvald dans un fil d’email, dans lequel il affirme implicitement que le modèle devrait être "tout est un fichier". - bgvaughan
En fait @bgvaughan c'est le contraire: yarchive.net/comp/linux/everything_is_file.html donne la citation The UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes". - LIttle Ancient Forest Kami
@LIttleAncientForestKami: et Unix traite traditionnellement les fichiers simplement comme des flux d'octets, par opposition aux systèmes qui traitaient les fichiers comme des flux d'enregistrements (ou contenaient à la fois des flux d'octets et des flux d'enregistrements), des modèles plus complexes, où il existe plusieurs manières différentes d'accéder à plusieurs types d'objets. - ninjalj