Costumo ouvir pessoas dizerem "A filosofia única do Unix é que ele trata tudo como um arquivo" ou "No Unix, tudo é um arquivo". Mas nunca ouvi ninguém explicar por que ele é único no Unix.
Então, por que isso é exclusivo do Unix? Outros sistemas operacionais, como Windows e Macs, não operam em arquivos?
E é único se comparado a outros sistemas operacionais?
unix
operating-systems
Algum estudante de Noob
fonte
fonte
Respostas:
Os sistemas operacionais típicos, anteriores ao Unix, tratavam os arquivos de uma maneira e tratavam cada dispositivo periférico de acordo com as características desse dispositivo. Ou seja, se a saída de um programa foi gravada em um arquivo em disco, esse foi o único local em que a saída poderia ir; você não pode enviá-lo para a impressora ou 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 e saída padrão são os dispositivos de entrada e saída padrão de um programa. Portanto, a saída do programa normalmente destinada à tela do console pode ir a qualquer lugar, para um arquivo de disco, impressora ou porta serial. Isso é chamado de I / O redirecionamento .
É claro que todos os sistemas operacionais modernos suportam vários sistemas de arquivos e podem "operar em arquivos", mas a distinção é como os dispositivos são manipulados? Não conhece o Mac, mas o Windows oferece algum redirecionamento de E / S.
Realmente não mais. Linux tem o mesmo recurso. Obviamente, se um SO adota o redirecionamento de E / S, ele tende a usar outros recursos do Unix e acaba como o Unix no final.
fonte
WriteFile
. Além disso, há uma categoria ainda maior de "objetos de sincronização" que inclui não apenas arquivos, mas também mutexes.A idéia de que "tudo é um arquivo" veio da Multics. Os designers do Unix basearam muito do seu trabalho em antecessores, especialmente no Multics. De fato, muitas coisas na computação são baseadas em antecessores.
Você pode ler o trabalho do falecido Dennis Ritchie no design do Unix para obter mais. Ele referenciou coisas que eles "copiaram" do Multics, como o sistema de arquivos em forma de árvore, o shell de comando e a não estruturação de arquivos. Não estou sugerindo que o pessoal do Unix roubou o pessoal do Multics. Para todos os efeitos, eram as mesmas pessoas.
fonte
Único? Não. Definindo? Absolutamente.
Ter tudo como arquivo ou dispositivo em uma hierarquia conhecida significa que você pode usar o mesmo conjunto de ferramentas para tudo. O plano 9 do Bell Labs leva isso adiante, inclusive com dispositivos de hardware como arquivos.
Mais importante, isso permite dois conceitos muito simples e poderosos. Utilitários básicos que executam o One Thing Well (tm), que podem ser amarrados com tubos conforme necessário. Deseja encontrar algo em um arquivo de texto? Use
cat
para mostrar, passargrep
e você está cozinhando com gás. Esse é o verdadeiro poder da maneira 'Unix' - aplicativos especializados trabalhando juntos para uma enorme quantidade de flexibilidade.O Mac OS X também segue a filosofia do Unix, mas é melhor oculto (um pacote de 'aplicativos' é realmente um diretório cheio de arquivos) e, de fato, é um Unix certificado e adequado, descendente do NeXT , que utilizava bits do FreeBSD .
Com o Windows, existem alguns componentes binários, como o visualizador de eventos e o registro, e existem algumas vantagens de velocidade nesse cenário específico.
fonte
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 para sistemas operacionais semelhantes ao Unix, dos quais existem muitos. Portanto, não é exclusivo do Unix.
Arquivos especiais servem a muitos propósitos. Existem, por exemplo, canos, soquetes e, principalmente, arquivos de dispositivos. Tubos e soquetes são fluxos de comunicação entre processos. Grande parte da funcionalidade dos subsistemas é disponibilizada ao espaço do usuário por meio de arquivos do dispositivo.
Tubos e soquetes
Os programas os usam da mesma maneira que usariam arquivos comuns. De fato, na maioria das vezes eles nem se importam com o tipo de arquivo que usam. É por isso que os comandos do Unix podem ser combinados de maneira tão múltipla para formar novos sistemas poderosos. (Veja o redirecionamento de E / S na resposta da serragem)
Arquivos de dispositivo
Como mencionado anteriormente, eles funcionam como interfaces para o espaço do usuário. Por exemplo, para ejetar a bandeja do CD, um programador abriria primeiro o arquivo do dispositivo correspondente. Outro exemplo: você deseja que seu programa mude o terminal virtual. Abra o / dev / console primeiro.
O que acontece a seguir não está enviando meros caracteres para esses arquivos, mas a emissão de ioctl () 's sobre eles. Os ioctl individuais que você pode emitir dependem do dispositivo. Por exemplo, o console está documentado em console_ioctl (4)
fonte
Provavelmente, vou me entusiasmar por dizer isso, mas acho que dizer que tudo é um arquivo no Unix é de fato uma falácia. O que é realmente é duas coisas.
Um sistema de arquivos implementa esse espaço para nome e implementa a estrutura que permite o envio de funções da interface para esses objetos. Um sistema de arquivos foi conceitualizado para abrigar arquivos, mas foi cooptado para organizar outros objetos na hierarquia de namespace. Um exemplo de polimorfismo anterior à orientação a objetos era uma coisa.
Não há mal em apenas chamar todos os arquivos. Mas, na realidade, são esses objetos mais genéricos (um arquivo é um desses objetos). Nessa perspectiva, essa ideia não é exclusiva do Unix. Muitos outros sistemas operacionais implementam essas hierarquias de objetos polimórficos.
fonte
mmap()
, naturalmente ....)Quando as pessoas dizem "No Unix, tudo é um arquivo", o que elas querem dizer é que também coisas que não são arquivos são tratadas como arquivos.
Obviamente, a maioria dos sistemas operacionais trabalha com arquivos. Arquivos de texto, arquivos de imagem, arquivos de som. Mas nem todos os sistemas operacionais tratam os 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 em Unix), receberei 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. Posso ler dados e / ou gravar dados nesses dispositivos. Aqui há exemplos de cópia de dados de diferentes dispositivos no 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 conseguir 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. Portanto, neste caso, pode-se dizer "quase tudo é um arquivo". Então, em sistemas como o Windows, onde "nem tudo é 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 o dispositivo da impressora no Unix sistemas.Outros sistemas operacionais, como Windows e 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 significa "tudo é um arquivo".
fonte
Eu vejo Multics citado como a fonte de "tudo é um arquivo", mas acho que você precisa parecer um pouco mais profundo do que apenas arquivos de dispositivos, pipes nomeados, arquivos regulares, etc. etc. Isso faz uma grande diferença mesmo quando existem "nomes de arquivos mágicos" AUX, CON e LP.
Veja " O nome hediondo " de Rob Pike. Ele compara a sintaxe de nomeação de arquivos do Unix com algumas outras sintaxes, principalmente o VMS. Observe 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 extraordinariamente sintaxe de nomeação de arquivos rococó. Faz anos desde que eu usei VM / CMS, ou NOS ou NOS / VE, e só olhei por cima de alguém usando um sistema operacional Univac, mas basta dizer que as peculiaridades superam as regularidades.
Eu nunca vi o Multics rodar, 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 Multics, mas sua milhagem pode variar.
fonte
Observe que mesmo Linus Torvalds discorda de que "tudo é um arquivo". Se você procurar por "
"você encontrará filosofias interessantes como queremos dizer que nem tudo é um arquivo, por exemplo, uma estrutura de dados abstrata na memória ou um ponteiro certamente não é um arquivo. OK, com certeza qualquer coisa pode ser representada como um arquivo, mas representar e ser são duas ações diferentes .
fonte
The UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".