¿Qué es un archivo?

9

Estoy buscando una definición formal de archivo que no solo incluya almacenamiento, sino también abstracciones como procfs o / dev / null (o cualquier archivo basado en fusibles) que no se relacionen con el almacenamiento.

Hasta ahora sé que todos los archivos son abstracciones que

  • puede ser identificado
  • puede tener nombres (generalmente organizados en estructuras jerárquicas)
  • se puede acceder como una secuencia de bytes
  • generalmente proporcionan permisos y otros metadatos (específicos del sistema)

sin embargo, no pude encontrar ninguna definición formal útil en ningún libro de SO que haya leído hasta ahora.

Giacomo Tesio
fuente
¿miraste a los inodes?
Bhaskar
1
Yo diría que cosas como / dev / null no son archivos en absoluto, sino que son hacks que nos permiten acceder a cosas que no son archivos como si fueran archivos. Además, no me queda claro qué quiere decir con "formal". ¿Dentro de qué formalismo?
David Richerby
"¿Un archivo es algo que se puede abrir con fopen"?
adrianN
@DavidRicherby cualquier abstracción de software que se comporte exactamente como un archivo es un archivo: solo podemos definir entidades de software en términos de su comportamiento. En cuanto al formalismo, estoy buscando algo riguroso desde una perspectiva CS. Tenemos una definición formal de máquinas de turing, por ejemplo.
Giacomo Tesio
Los diferentes sistemas operativos atribuyen diferentes operaciones a los archivos, ver por ejemplo * nix vs Windows. Uno puede tratar de encontrar un terreno común, pero no será preciso. Además, en CS rara vez se habla de archivos: creo que esto se hace solo cuando se diseña un sistema operativo, un sistema de archivos, tal vez un DBMS, o en algunos algoritmos en el disco (por ejemplo, ordenar-fusionar). (y algunos otros)
chi

Respuestas:

6

Según Wikipedia, un archivo de computadora es simplemente un recurso para almacenar información. El término parece haberse originado en la era de las tarjetas perforadas, donde un programa de computadora estaba literalmente almacenado en un archivo (como en una caja utilizada para almacenar páginas sueltas, ver imagen a continuación). A medida que se introdujeron otras formas de medios, como los discos, siguió la nomenclatura.

Desde el punto de vista de * nix, todo es un archivo: enchufes, dispositivos, terminales, pantallas / monitores, archivos de datos, tuberías, etc. Microsoft Windows, en cambio, tiende a llamar "archivos" de datos de almacenamiento permanente y recursos volátiles como lo que sean, como tuberías con nombre, enchufes, dispositivos ráster, etc. Otros sistemas pueden tener definiciones similares en algún punto entre estos dos extremos.

Desafortunadamente, como acabo de decir, no existe una definición única de lo que es un archivo, porque son cosas diferentes para diferentes personas, excepto que todos tienden a estar de acuerdo con la definición de la línea base de que un archivo es un recurso con nombre que almacena datos en medios permanentes (permanente no implica que nunca se pueda modificar, simplemente que persiste durante los ciclos de alimentación).

Archivo de tarjeta perforada]( Wikipedia )

phyrfox
fuente
He leído la definición de Wikipedia, pero está demasiado centrada en el almacenamiento. Como se indicó, estoy buscando una definición que cubra archivos como / dev / null, que no almacenen datos.
Giacomo Tesio
@GiacomoTesio Los dos puntos que estaba tratando de hacer son (a) archivo significa cosas diferentes para diferentes autores, aunque (b) los archivos se definen al menos universalmente como recursos. NUL y / dev / null son recursos especiales, porque en realidad no almacenan nada, pero son recursos de todos modos. Un recurso es simplemente algo que puede transmitir o recibir datos (o ambos). La definición de archivo de un libro genérico del sistema operativo dependerá del punto de vista del autor.
phyrfox
2

Pienso en un archivo como una secuencia de bytes. Incluso después de que pierde su nombre (generalmente causado por una llamada a rm, que lo desvincula), todavía existe en el disco hasta que sus partes se sobrescriban con otras cosas. Los formatos de archivo son contextos para leer archivos. Todo se remonta al principio de que la información es bytes más contexto.

El póster anterior dice que los dispositivos, aunque se tratan como archivos, no son realmente archivos. Este es un truco muy útil.

Entonces, mi definición de un archivo: una secuencia de bytes almacenados en la memoria.

ncmathsadist
fuente
2
"Entonces mi definición de un archivo: una secuencia de bytes". es una secuencia de (digamos, UTF-8) bytes. ¿Es un archivo?
reinierpost
Estamos hablando de abstracciones de software, cualquier cosa que se comporte exactamente como un archivo es un archivo. En realidad, no podemos definir ninguna entidad de software excepto su comportamiento.
Giacomo Tesio
"Pienso en un archivo como una secuencia de bytes". Esa no es la única definición de "sistema de archivos". Ver, por ejemplo, en.wikipedia.org/wiki/Record-oriented_filesystem
Pseudónimo el