Por que “Tudo é um arquivo” exclusivo dos sistemas operacionais Unix?

70

Frequentemente ouço as pessoas dizerem que "a filosofia única do Unix é que trata tudo como um arquivo" ou "No Unix, tudo é um arquivo". Mas nunca ouvi ninguém explicar por que é exclusivo do Unix.

Então, por que isso é exclusivo do Unix? Outros sistemas operacionais, como Windows e Macs, não operam em arquivos?

E é único comparado a outros sistemas operacionais?

    
por Some Noob Student 03.12.2011 / 06:12

8 respostas

53

So, why is this unique to Unix?

Os sistemas operacionais típicos, antes do Unix, tratam os arquivos de uma forma e tratam cada dispositivo periférico de acordo com as características desse dispositivo. Isto é, se a saída de um programa foi gravada em um arquivo em disco, esse foi o único local onde a saída poderia ir; você não pode enviá-lo para a impressora ou para a unidade de fita. Cada programa precisava estar ciente de cada dispositivo usado para entrada e saída e ter opções de comando para lidar com dispositivos de E / S alternativos.

O Unix trata todos os dispositivos como arquivos, mas com atributos especiais. Para simplificar os programas, entrada padrão e saída padrão são os dispositivos de entrada e saída padrão de um programa. Assim, a saída do programa normalmente destinada à tela do console poderia ir a qualquer lugar, a um arquivo de disco ou a uma impressora ou a uma porta serial. Isso é chamado de redirecionamento de E / S .

Does other operating systems such as Windows and Macs not operate on files?

É claro que todos os sistemas operacionais modernos suportam vários sistemas de arquivos e podem "operar em arquivos", mas a diferença é como os dispositivos são manipulados? Não sei sobre o Mac, mas o Windows oferece algum redirecionamento de E / S.

And, compared to what other operating systems is it unique?

Não é mais verdade. O Linux tem o mesmo recurso. É claro que, se um sistema operacional adota o redirecionamento de E / S, ele tende a usar outros recursos do Unix e acaba no estilo Unix no final.

    
por 03.12.2011 / 06:30
34

A idéia de que "tudo é um arquivo" veio da Multics. Os designers do Unix basearam muito do seu trabalho em predecessores, especialmente no Multics. De fato, muitas coisas na computação são baseadas em predecessores.

Você pode ler sobre o trabalho do falecido Dennis Ritchie no design do Unix para mais. Ele referenciava as coisas que "copiavam" das Multics, como o sistema de arquivos em forma de árvore, o shell de comando e a não-estruturação de arquivos. Eu não estou insinuando que o pessoal do Unix roubou do pessoal da Multics. Para todos os efeitos, foi o mesmo pessoal.

    
por 03.12.2011 / 06:30
28

Único? Não. Definindo? Absolutamente.

Ter tudo como um arquivo ou um dispositivo em uma hierarquia conhecida significa que você pode usar o mesmo conjunto de ferramentas para tudo. O Plano 9 da Bell Labs leva isso adiante, mesmo com dispositivos de hardware como arquivos.

Mais importante, isso permite dois conceitos muito simples e poderosos. Utilitários básicos que fazem One Thing Well (tm), que podem ser combinados com tubos conforme necessário. Quer encontrar algo em um arquivo de texto? Use cat para mostrar, passar grep e você está cozinhando com gás. Isso é o verdadeiro poder do modo 'Unix' - aplicações especializadas trabalhando juntas para grandes quantidades de flexibilidade.

O Mac OS X também segue a filosofia Unix, mas é mais bem escondido (um pacote 'application' é realmente um diretório cheio de arquivos), e na verdade é um Unix certificado, descendente de NeXT , que usou pedaços de FreeBSD .

No Windows, há alguns componentes binários, como o visualizador de eventos e o registro desde então, e há algumas vantagens de velocidade nesse cenário específico.

    
por 03.12.2011 / 06:22
18

Por causa dos arquivos especiais. Quando as pessoas dizem "tudo é um arquivo no Unix", arquivos e diretórios comuns não são o que eles têm em mente. Arquivos especiais são exclusivos dos sistemas operacionais Unix, dos quais existem muitos. Portanto, não é exclusivo do Unix .

Arquivos especiais servem a muitos propósitos. Existem, e. canos, tomadas e, mais notavelmente, arquivos de dispositivos. Pipes e soquetes são fluxos de comunicação entre processos. Grande parte da funcionalidade dos subsistemas é disponibilizada para o espaço do usuário por meio de arquivos de dispositivos.

Tubos e soquetes

Os programas usam-nos da mesma forma que usariam arquivos comuns. Na verdade, na maioria das vezes eles nem se importam com o tipo de arquivo que usam. É por isso que os comandos Unix podem ser combinados de forma tão diversificada para formar novos sistemas poderosos. (Veja o redirecionamento de E / S na resposta da serragem)

Arquivos do dispositivo

Como mencionado anteriormente, eles agem como interfaces para o espaço do usuário. Por exemplo, para ejetar a bandeja de CD, um programador primeiro abriria o arquivo de dispositivo correspondente. Outro exemplo: você quer que seu programa troque o terminal virtual. Abra / dev / console primeiro.

O que acontece a seguir é não enviar meros caracteres para esses arquivos, mas sim ioctl () 's em eles. O ioctl individual que você pode emitir depende do dispositivo. Por exemplo. o console está documentado em console_ioctl (4)

    
por 04.12.2011 / 14:59
11

Provavelmente vou me preparar para dizer isso, mas acho que dizer que tudo é um arquivo no Unix é, na verdade, uma falácia antiga. O que é realmente é duas coisas.

  1. Arquivos e dispositivos e muitas outras coisas são objetos que podem ser modelados por uma interface composta de funções de abertura, fechamento, leitura, gravação e controle. Nem mesmo faça com que as pessoas comecem a perceber como o ioctl (para funções de controle) é uma pia de cozinha sem tipo. Além disso, as alças para esses objetos (fds) são candidatas a uma classe comum de comportamento relacionado a E / S, como bloqueio / não bloqueio, sinais assíncronos e outros.
  2. O namespace para esses objetos (arquivos, dispositivos, outras coisas) é hierárquico. A implementação passa a ser chamada de sistema de arquivos, porque é isso que a maioria dos objetos é.

Não há problemas em apenas chamar todos os arquivos. Mas, na realidade, os arquivos são esses objetos mais genéricos, como outras coisas (como dispositivos). Dessa perspectiva, essa ideia não é exclusiva do Unix. Muitos outros sistemas operacionais implementam esses objetos com interfaces semelhantes.

    
por 04.12.2011 / 12:59
9

Quando as pessoas dizem "No Unix, tudo é um arquivo", o que elas querem dizer é que também as coisas que não são arquivos são tratadas como arquivos.

É claro que a maioria dos sistemas operacionais trabalha com arquivos. Arquivos de texto, arquivos de imagem, arquivos de som. Mas nem todos os sistemas operacionais tratam dispositivos como arquivos. Essa é uma diferença importante. Se eu listar o conteúdo da minha pasta / dev / no meu sistema operacional Ubuntu (que é baseado no Unix), recebo uma lista de mais de 200 dispositivos. Alguns desses dispositivos são de hardware, mas são mostrados dentro de uma pasta. Por exemplo, discos rígidos, portas USB, mouse e teclado, dispositivos de áudio e impressoras, entre outros. Alguns dos dispositivos são virtuais, por exemplo, / dev / urandom, que se comporta como um arquivo infinito cheio de números aleatórios. Não é um arquivo real no meu disco rígido.

Todos esses dispositivos são tratados como arquivos. Eu posso ler dados e / ou gravar dados nesses dispositivos. Aqui há exemplos de copiar dados de diferentes dispositivos para o dispositivo de áudio. Isso é possível porque eles são tratados como arquivos. O resultado (nerd) é a capacidade de ouvir o conteúdo do disco rígido, o movimento do mouse, a memória do computador ou os pixels de uma imagem. Isso seria muito mais difícil de alcançar se os dispositivos não fossem tratados como arquivos, porque cada dispositivo exigiria métodos diferentes para ler e gravar dados.

Dito isto, o que "tudo" significa varia de sistema para sistema. Por exemplo, o OS X é baseado no Unix, mas não possui um dispositivo / dev / audio. Ele usa um sistema de áudio proprietário chamado CoreAudio. Então, neste caso, pode-se dizer "quase tudo é um arquivo". Então, em sistemas como o Windows, onde "tudo não é um arquivo", você ainda pode fazer coisas como copiar o conteúdo de um arquivo para a porta da impressora (digitando algo como copy mydocument.txt >lpt1: ), que é semelhante a copiar um documento para a impressora dispositivo em sistemas Unix.

Outros sistemas operacionais, como o Windows e o OS X, não operam em arquivos? Sim, eles fazem. O Windows e o OS X operam em arquivos, mas o Windows não trata os dispositivos como arquivos, o que faz parte do que "tudo é um arquivo" significa.

    
por 04.12.2011 / 16:57
8

Eu vejo Multics citado como a fonte de "tudo é um arquivo", mas eu acho que você tem que olhar um pouco mais profundo do que apenas os arquivos de dispositivos, pipes nomeados, arquivos regulares, etc etc Você tem que olhar a sintaxe de nomeação de arquivos . Isso faz uma grande diferença mesmo quando os "nomes de arquivos mágicos" de AUX, CON e LP existem.

Veja " The Hideous Name ", de Rob Pike. Ele compara a sintaxe de nomes de arquivos do Unix com algumas outras sintaxes, mais notavelmente o VMS. Note que os sistemas operacionais de mainframe do final dos anos 60 / início dos anos 70, quando o Unix se originou, tinham o que a mente moderna consideraria a sintaxe de nomenclatura de arquivos extraordinariamente rococós. Faz anos desde que usei VM / CMS, ou NOS ou NOS / VE, e só olhei por cima do ombro de alguém usando um sistema operacional Univac, mas é suficiente dizer que as peculiaridades superaram as regularidades.

Eu nunca vi multicas, mas você pode ver um artigo em seu sistema de arquivos . Parece que o Unix original levou o "tudo é um arquivo" um pouco mais longe do que o Multics, mas sua milhagem pode variar.

    
por 03.12.2011 / 17:29
3

Por favor, note que mesmo Linus Torvalds discorda que "tudo é um arquivo". Se você procurar por "

everything is a bytestream

"você vai encontrar filosofias interessantes como queremos dizer que tudo não é um arquivo por exemplo uma estrutura de dados abstrata na memória ou um ponteiro não é certamente um arquivo, OK certamente qualquer coisa pode ser representada como um arquivo, mas representando e sendo, são duas ações diferentes.

    
por 06.12.2011 / 19:06