¿Por qué "Todo es un archivo" exclusivo de los sistemas operativos Unix?


70

A menudo escucho a la gente decir "La filosofía única de Unix es que trata todo como un archivo" o "En Unix, todo es un archivo". Pero nunca escuché a nadie explicar por qué es exclusivo de Unix.

Entonces, ¿por qué es esto exclusivo de Unix? ¿Otros sistemas operativos como Windows y Mac no funcionan con archivos?

¿Y es único en comparación con otros sistemas operativos?


26
nota al margen: macosx se ejecuta encima de un unix.
akira

2
fwiw, mientras que las cosas de nivel superior no usan archivos (al igual que dbus o X en * nix), Windows de bajo nivel se basa en controladores. Puede hacer lo mismo con ellos, ya que puede archivos en * nix (abrir, cerrar, controlar y generalmente enviar / recibir), pero debe ser un programador para ver esa interfaz. Si eso es algo bueno es una cuestión de preferencia.
Mark

1
todo es un archivo, excepto las interfaces de red.
alvin

8
@akira - OSX está certificado Unix y no se ejecuta "encima" de él.
Rob

1
@akira No encima de un Unix. OSX es uno de los pocos sistemas operativos UNIX certificados.
Let_Me_Be

Respuestas:


53

Entonces, ¿por qué es esto exclusivo de Unix?

Los sistemas operativos típicos, antes de Unix, trataban los archivos de una manera y trataban cada dispositivo periférico de acuerdo con las características de ese dispositivo. Es decir, si la salida de un programa se escribió en un archivo en el disco, ese era el único lugar al que podía ir la salida; no pudo enviarlo a la impresora o la unidad de cinta. Cada programa tenía que estar al tanto de cada dispositivo utilizado para la entrada y salida, y tener opciones de comando para manejar dispositivos de E / S alternativos.

Unix trata todos los dispositivos como archivos, pero con atributos especiales. Para simplificar los programas, la entrada estándar y la salida estándar son los dispositivos de entrada y salida predeterminados de un programa. Por lo tanto, la salida del programa normalmente destinada a la pantalla de la consola podría ir a cualquier parte, a un archivo de disco, a una impresora o a un puerto serie. Esto se llama / O redirección I .

¿Otros sistemas operativos como Windows y Mac no funcionan con archivos?

Por supuesto, todos los sistemas operativos modernos admiten varios sistemas de archivos y pueden "operar en archivos", pero la diferencia es cómo se manejan los dispositivos. No sé sobre Mac, pero Windows ofrece alguna redirección de E / S.

Y, en comparación con otros sistemas operativos, ¿es único?

Realmente ya no. Linux tiene la misma característica. Por supuesto, si un sistema operativo adopta la redirección de E / S, entonces tiende a usar otras características de Unix y al final termina siendo similar a Unix.


29
OS X básicamente es Unix, por lo que no hay mucha diferencia.
slhck

66
hay un poco más en todo el modelo de archivo.
artistoex

1
El primer párrafo simplemente no es cierto. Había sistemas operativos antes de Unix, y tenían características que luego se encontraron en Unix, incluida la redirección de E / S.
Patrick Seymour

3
Plan 9 tiene el mismo concepto Todo es un concepto de archivo e incluso se ha llamado "más unix que unix"
William

2
Windows (desde NT) va un poco más lejos. Hay muchos dispositivos que se comportan como archivos, como puertos serie y canalizaciones con nombre. Puedes escribir a todos usando WriteFile. Pero además, hay una categoría aún mayor de "objetos de sincronización" que incluye no solo archivos sino también mutexes.
MSalters

34

La idea de que "todo es un archivo" surgió de Multics. Los diseñadores de Unix basaron gran parte de su trabajo en predecesores, especialmente en Multics. De hecho, muchas cosas en informática se basan en predecesores.

Puedes leer más sobre el trabajo de Dennis Ritchie en el diseño de Unix para obtener más información. Hizo referencia a cosas que "copiaron" de Multics, como el sistema de archivos en forma de árbol, el shell de comandos y la no estructuración de los archivos. No estoy insinuando que la gente de Unix le robó a la gente de Multics. Para todos los efectos, era la misma gente.


66
esta no debería ser la respuesta más votada, no responde la pregunta, solo le ruega a la gente que haga otra pregunta: "¿Por qué 'Todo es un archivo' en Multics?"
Lie Ryan

13
@LieRyan: En realidad, responde la pregunta de por qué es único : no lo es.
Goran Jovic, el

1
La gente de Unix simplemente se llevó sus ideas cuando el proyecto Multics se suspendió y cambió su nombre. Unix es solo un juego de palabras, uno contra muchos.
Fiasco Labs

2
@Lie Ryan: la pregunta no era por qué todo es un archivo, sino por qué es único. Como Goran y yo señalamos, no lo es.
Patrick Seymour

1
La pregunta realmente se refiere al "sistema operativo Unix s ", es decir, la familia. Esa familia incluye razonablemente Multics y Linux.
MSalters

28

¿Único? No. ¿Definiendo? Absolutamente.

Tener todo como un archivo o un dispositivo en una jerarquía conocida significa que puede usar el mismo conjunto de herramientas para todo. Plan 9 de Bell Labs lleva esto más allá, incluso con dispositivos de hardware como archivos.

Más importante aún, esto permite dos conceptos muy simples y poderosos. Utilidades básicas que hacen One Thing Well (tm), que se pueden unir con tuberías según sea necesario. ¿Quieres encontrar algo en un archivo de texto? Úselo catpara mostrarlo, pasarlo grepy está cocinando con gas. Ese es el verdadero poder de la forma 'Unix': aplicaciones especializadas que trabajan juntas para obtener una gran cantidad de flexibilidad.

Mac OS X también sigue la filosofía de Unix, pero está mejor oculto (un paquete de 'aplicación' es realmente un directorio lleno de archivos), y de hecho es un Unix adecuado y certificado, descendiente de NeXT , que utilizaba bits de FreeBSD .

Con Windows, hay algunos componentes binarios como el visor de eventos y el registro desde entonces, y hay algunas ventajas de velocidad allí, en ese escenario particular.


1
Más 1 por mencionar el plan 9. IMHO Fuse acerca el plan 9 a una implementación mediante ad-hoc e iteración.
Danny Staple

2
Bueno, el plan 9 es el plan 9, ya funciona. Fuse solo permite la expansión del sistema de archivos del espacio de usuario de formas interesantes. Me gusta el que IRC se trata como un FS.
Journeyman Geek

Hmm, ya sabes, he tenido la intención de buscarlo durante años desde que lo descubrí a través de un libro de Eric Raymond hace años. el ISO y probándolo.
Danny Staple

2
Creo que también hay una versión más nueva, llamada inferno
Journeyman Geek

1
+1 por notar que Darwin de OS X también es un 'Unix real'.
calum_b

18

Por los archivos especiales. Cuando la gente dice "todo es un archivo en Unix", los archivos y directorios comunes no son lo que tienen en mente. Los archivos especiales son exclusivos de los sistemas operativos tipo Unix, de los cuales hay muchos. Por lo que no es única para el Unix.

Los archivos especiales sirven para muchos propósitos. Hay, por ejemplo, tuberías, enchufes y, sobre todo, archivos de dispositivo. Las tuberías y los enchufes son flujos de comunicación entre procesos. Gran parte de la funcionalidad de los subsistemas está disponible para el espacio del usuario a través de los archivos del dispositivo.

Tuberías y Tomas

Los programas los usan tal como usarían archivos ordinarios. De hecho, la mayoría de las veces ni siquiera les importa qué tipo de archivo usan. Es por eso que los comandos de Unix se pueden combinar de manera tan múltiple para formar nuevos sistemas potentes. (Ver redirección de E / S en la respuesta del aserrín)

Archivos de dispositivo

Como se mencionó anteriormente, estos actúan como interfaces para el espacio de usuario. Por ejemplo, para expulsar la bandeja de CD, un programador al principio abriría el archivo del dispositivo correspondiente. Otro ejemplo: desea que su programa cambie el terminal virtual. Abra / dev / console primero.

Lo que sucede a continuación no está enviando meros personajes de esos archivos, pero la emisión de ioctl () 's en ellos. Los ioctl individuales que puede emitir dependen del dispositivo. Por ejemplo, la consola está documentada en console_ioctl (4)


12

Probablemente me van a criticar por decir esto, pero creo que decir que todo es un archivo en Unix es, de hecho, una falacia. Lo que realmente es son dos cosas.

  1. Los archivos y dispositivos (y muchas otras cosas) son objetos que pueden ser modelados por una interfaz que comprende funciones de abrir, cerrar, leer, escribir y controlar (ioctl).
  2. El espacio de nombres para estos objetos es jerárquico, es decir, estos objetos están organizados en una jerarquía.

Un sistema de archivos implementa este espacio de nombres e implementa el marco que permite el envío de funciones de interfaz a estos objetos. Primero se conceptualizó un sistema de archivos para alojar archivos, pero luego se cooptó para organizar otros objetos en la jerarquía del espacio de nombres. Un ejemplo de polimorfismo de antes orientado a objetos era una cosa.

No hay daño en simplemente llamar a todos los archivos. Pero en realidad, son estos objetos más genéricos (un archivo es uno de esos objetos). Desde esta perspectiva, esta idea no es exclusiva de Unix. Muchos otros sistemas operativos implementan tales jerarquías de objetos polimórficos.


¡Exactamente! En Unix, todo es un descriptor de archivo (¡no necesariamente un archivo!), Es decir, todo (excepto la memoria) es E / S, incluso archivos. Se debe acceder a los archivos como si fueran flujos de E / S (aunque son buscables, de alguna manera accesibles de forma aleatoria, pero el costo extremo de las llamadas adicionales al sistema). (con la excepción de lo poco que se puede hacer, por mmap()supuesto ...)
Greg A. Woods

9

Cuando la gente dice "En Unix, todo es un archivo", lo que quieren decir es que también las cosas que no son archivos se tratan como archivos.

Por supuesto, la mayoría de los sistemas operativos funcionan con archivos. Archivos de texto, archivos de imagen, archivos de sonido. Pero no todos los sistemas operativos tratan los dispositivos como archivos. Esa es una diferencia importante. Si enumero el contenido de mi carpeta / dev / en mi sistema operativo Ubuntu (que está basado en Unix), obtengo una lista de más de 200 dispositivos. Algunos de esos dispositivos son hardware, pero se muestran dentro de una carpeta. Por ejemplo, discos duros, puertos USB, mouse y teclado, dispositivos de audio e impresoras, entre otros. Algunos de los dispositivos son virtuales, por ejemplo / dev / urandom, que se comporta como un archivo infinito lleno de números aleatorios. No es un archivo real en mi disco duro.

Todos esos dispositivos se tratan como archivos. Puedo leer datos y / o escribir datos en esos dispositivos. Aquí hay ejemplos de copia de datos de diferentes dispositivos en el dispositivo de audio. Esto es posible porque se tratan como archivos. El resultado (geek) es la capacidad de escuchar el contenido del disco duro, el movimiento del mouse, la memoria de la computadora o los píxeles de una imagen. Esto sería mucho más difícil de lograr si los dispositivos no se trataran como archivos, porque cada dispositivo requeriría diferentes métodos para leer y escribir datos.

Dicho esto, lo que significa "todo" varía de un sistema a otro. Por ejemplo, OS X se basa en Unix, pero no tiene un dispositivo / dev / audio. Utiliza un sistema de audio patentado llamado CoreAudio. Entonces, en este caso, uno podría decir "casi todo es un archivo". Luego, en sistemas como Windows, donde "todo no es un archivo", aún podría hacer cosas como copiar el contenido de un archivo al puerto de la impresora (escribir algo como copy mydocument.txt >lpt1:), que es similar a copiar un documento en el dispositivo de la impresora en Unix sistemas.

¿Otros sistemas operativos como Windows y OS X no funcionan con archivos? Ellos si. Windows y OS X funcionan con archivos, pero Windows no trata los dispositivos como archivos, lo cual es parte de lo que significa "todo es un archivo".


8

Veo a Multics citado como la fuente de "todo es un archivo", pero creo que hay que mirar un poco más allá de los archivos del dispositivo, las canalizaciones con nombre, los archivos normales, etc. Hay que mirar la sintaxis de nombres de archivos. Eso hace una gran diferencia incluso cuando existen "nombres de archivos mágicos" AUX, CON y LP.

Ver " El horrible nombre " de Rob Pike. Compara la sintaxis de denominación de archivos de Unix con otras sintaxis, especialmente VMS. Tenga en cuenta que los sistemas operativos de mainframe de finales de los 60 / principios de los 70, cuando se originó Unix, tenían lo que la mente moderna consideraría una sintaxis de nombres de archivos extraordinariamente rococó. Han pasado años desde que utilicé VM / CMS, o NOS o NOS / VE, y solo he mirado por encima del hombro de alguien que usa un sistema operativo Univac, pero es suficiente para decir que las peculiaridades superaron en número a las regularidades.

Nunca he visto ejecutar Multics, pero puedes ver un artículo en su sistema de archivos . Parece que el Unix original llevó el "todo es un archivo" un poco más lejos que Multics, pero su kilometraje puede variar.


1
Bueno, en Multics todo es memoria, excepto E / S (aunque eso también se puede asignar a la memoria). En Unix todo (excepto la memoria) es un descriptor de archivo , incluidos los archivos. Es decir, en Unix todo es E / S.
Greg A. Woods, el

1
Por cierto, ahora existe un emulador que arrancará y ejecutará Multics.
Greg A. Woods, el

3

Tenga en cuenta que incluso Linus Torvalds no está de acuerdo con que "todo es un archivo". Si busca "

todo es un sueño

"encontrará filosofías interesantes sobre cómo queremos decir que no todo es un archivo, por ejemplo, una estructura de datos abstractos en la memoria o un puntero seguramente no es un archivo, OK, seguramente cualquier cosa puede ser representada como un archivo, pero representar y ser son 2 acciones diferentes .


1
No proporcionaste un enlace. En algunas búsquedas, encontré yarchive.net/comp/linux/everything_is_file.html , citando las respuestas de Torvald en un hilo de correo electrónico, en el que afirma implícitamente que el modelo debería ser "todo es un archivo".
bgvaughan

1
En realidad, @bgvaughan es lo contrario: yarchive.net/comp/linux/everything_is_file.html da la citaThe UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".
Little Little Forest Kami el

1
@LIttleAncientForestKami: y Unix trata tradicionalmente los archivos como simples secuencias de bytes, en oposición a los sistemas que tratan los archivos como secuencias de registros (o tenían tanto secuencias de bytes como secuencias de registros), como colecciones de secuencias (o bifurcaciones de recursos), o tenían modelos más complejos, donde había varias formas diferentes de acceder a varios tipos diferentes de objetos.
ninjalj
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.