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?
unix
operating-systems
Algún estudiante novato
fuente
fuente
Respuestas:
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 .
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.
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.
fuente
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.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.
fuente
¿Ú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
cat
para mostrarlo, pasarlogrep
y 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.
fuente
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)
fuente
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.
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.
fuente
mmap()
supuesto ...)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".
fuente
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.
fuente
Tenga en cuenta que incluso Linus Torvalds no está de acuerdo con que "todo es un archivo". Si busca "
"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 .
fuente
The UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".