Escolar Documentos
Profissional Documentos
Cultura Documentos
com
1. Introdução
O tempo UNIX- -11/40 e /45 [l] por ser mais moderno e muitas das diferenças
entre ele e os mais antigosUNIXos sistemas resultam do
redesenho de recursos considerados deficientes ou ausentes.
Sistema de Compartilhamento
DesdePDP-11UNIXentrou em operação em fevereiro de 1971,
Laboratórios Dennis M. Ritchie e Ken cerca de 40 instalações foram colocadas em serviço; eles são
geralmente menores do que o sistema descrito aqui. A maioria
Thompson Bell
deles está envolvida em aplicativos como a preparação e
formatação de pedidos de patente e outros materiais textuais,
coleta e processamento de dados de problemas de várias máquinas
de comutação dentro do Sistema Bell e registro e verificação de
ordens de serviço telefônico. Nossas instalações próprias são
utilizadas principalmente para pesquisas em sistemas operacionais,
linguagens, redes de computadores e outros temas da informática,
e também para elaboração de documentos.
UNIXé um sistema operacional interativo multiusuário de
Talvez a conquista mais importante deUNIXé demonstrar que
uso geral para a Digital Equipment CorporationPDP-11/40 e 11/45
um sistema operacional poderoso para uso interativo não precisa
computadores. Ele oferece vários recursos raramente
ser caro nem em equipamentos nem em esforço humano:UNIXpode
encontrados mesmo em sistemas operacionais maiores,
ser executado em hardware que custa apenas $ 40.000, e menos de
incluindo: (1) um sistema de arquivos hierárquico que incorpora
dois anos-homem foram gastos no software do sistema principal.
volumes desmontáveis; (2) arquivo compatível, dispositivo e
AindaUNIXcontém uma série de recursos raramente oferecidos,
interprocessoEU/O; (3) a capacidade de iniciar processos
mesmo em sistemas muito maiores. Espera-se, no entanto, que os
assíncronos; (4) linguagem de comando do sistema selecionável
usuários deUNIXdescobrirá que as características mais importantes
por usuário; e (5) mais de 100 subsistemas, incluindo uma dúzia
do sistema são sua simplicidade, elegância e facilidade de uso.
de idiomas. Este artigo discute a natureza e a implementação
do sistema de arquivos e da interface de comando do usuário.
Além do sistema propriamente dito, os principais programas
disponíveis emUNIXsão: montador, editor de texto baseado emQED
Palavras-Chave e Frases: time-sharing, sistema operacional,
[2], carregador de ligação, depurador simbólico, compilador para
sistema de arquivos, linguagem de comando,PDP-11
uma linguagem semelhanteBCPL[3] com tipos e estruturas (C),
Categorias CR: 4.30, 4.32 intérprete para um dialeto deBÁSICO, programa de formatação de
texto, compilador Fortran, interpretador Snobol, compilador top-
down (TMG) [4], compilador-compilador bottom-up (YACC), gerador
de letras de formulário, processador de macro (M6) [5] e programa
de índice permutado.
Há também uma série de programas de manutenção,
utilitários, recreativos e inovadores. Todos esses programas foram
escritos localmente. Vale ressaltar que o sistema é totalmente
autossustentável. TodosUNIXsoftware é mantido sobUNIX; da mesma
Copyright © 1974, Association for Computing Machinery, Inc. A
maneira,UNIXdocumentos são gerados e formatados pelo
permissão geral para republicar, mas sem fins lucrativos, todo ou parte
deste material é concedida desde que o aviso de direitos autorais da UNIXeditor e programa de formatação de texto.
ACM seja fornecido e que seja feita referência à publicação, até a data de
emissão , e ao fato de que os privilégios de reimpressão foram
concedidos com permissão da Association for Computing Machinery.
Esta é uma versão revisada de um documento apresentado no 2. Ambiente de Hardware e Software
Quarto Simpósio ACM sobre Princípios de Sistemas Operacionais, IBM
Thomas J. Watson Research Center, Yorktown Heights. Nova York, 15 a OPDP-11/45 em que nossoUNIXa instalação implementada é um
17 de outubro de 1973. Endereço dos autores: Bell Laboratories, Murray computador de palavra de 16 bits (byte de 8 bits) com 144 Kbytes de
Hill, NJ 07974. memória principal;UNIXocupa 42 Kbytes. Este sistema, no entanto,
A versão eletrônica foi recriada por Eric A. Brewer, da
inclui um número muito grande de drivers de dispositivo e desfruta
Universidade da Califórnia em Berkeley, brewer@cs.berkeley.edu.
Por favor, notifique-me sobre quaisquer desvios do original; Deixei de uma alocação generosa de espaço paraEU/Obuffers e tabelas de
erros no original inalterados. sistema; um sistema mínimo capaz de executar o
365 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
dispositivos únicos, incluindo um Picturephone®interface, uma necessário que um programa resida neste diretório para que seja
fotocompositor, uma rede de comutação digital e um satélitePDP Os arquivos são nomeados por sequências de 14 ou menos
-11/20 que gera vetores, curvas e caracteres em um monitor de caracteres. Quando o nome de um arquivo é especificado para o
tubo de armazenamento Tektronix 611. sistema, ele pode estar na forma de umnome do caminho, que é uma
A maior parte deUNIXsoftware é escrito na linguagem C sequência de nomes de diretório separados por barras “/” e terminando
acima mencionada [6]. As primeiras versões do sistema em um nome de arquivo. Se a sequência começar com uma barra, a
operacional foram escritas em linguagem assembly, mas pesquisa começará no diretório raiz. O nome /alfa/beta/gama faz com
durante o verão de 1973, ele foi reescrito em C. O tamanho do que o sistema procure na raiz pelo diretórioalfa, em seguida, para
novo sistema é cerca de um terço maior que o antigo. Como o pesquisaralfaparabeta, finalmente encontrargamaembeta. Gamapode
novo sistema não é apenas muito mais fácil de entender e ser um arquivo comum, um diretório ou um arquivo especial. Como caso
modificar, mas também inclui muitas melhorias funcionais, limite, o nome “/” refere-se à própria raiz.
incluindo multiprogramação e a capacidade de compartilhar Um nome de caminho que não comece com “/” faz com
código reentrante entre vários programas de usuários, que o sistema inicie a pesquisa no diretório atual do usuário.
consideramos esse aumento de tamanho bastante aceitável. Assim, o nomealfa/betaespecifica o arquivo chamadobetano
subdiretórioalfado diretório atual. O tipo mais simples de
nome, por exemploalfa, refere-se a um arquivo que se encontra
no diretório atual. Como outro caso limite, o nome de arquivo
3. O sistema de arquivos
nulo refere-se ao diretório atual.
O trabalho mais importante deUNIXé fornecer um sistema de O mesmo arquivo não-diretório pode aparecer em vários diretórios
arquivos. Do ponto de vista do usuário, existem três tipos de com nomes possivelmente diferentes. Este recurso é chamadoligando;
arquivos: arquivos de disco comuns, diretórios e arquivos especiais. uma entrada de diretório para um arquivo às vezes é chamada de link.
UNIXdifere de outros sistemas nos quais a vinculação é permitida, pois
todos os links para um arquivo têm o mesmo status. Ou seja, um arquivo
3.1 Arquivos Comuns não existe em um diretório específico; a entrada de diretório para um
Um arquivo contém qualquer informação que o usuário coloque arquivo consiste apenas em seu nome e um ponteiro para as
nele, por exemplo, programas simbólicos ou binários (objetos). informações que realmente descrevem o arquivo. Assim, um arquivo
Nenhuma estruturação particular é esperada pelo sistema. Arquivos de existe independentemente de qualquer entrada de diretório, embora na
texto consistem simplesmente em uma sequência de caracteres, com prática um arquivo seja feito para desaparecer junto com o último link
linhas demarcadas pelo caractere de nova linha. Programas binários são para ele.
sequências de palavras que aparecerão na memória central quando o Cada diretório sempre tem pelo menos duas entradas.
programa começar a ser executado. Alguns programas de usuário O nome em cada diretório refere-se ao próprio diretório.
manipulam arquivos com mais estrutura: o montador gera e o Assim, um programa pode ler o diretório atual sob o nome
carregador espera um arquivo objeto em um formato específico. No “.” sem saber seu nome de caminho completo. O nome “..”
entanto, a estrutura dos arquivos é controlada pelos programas que os por convenção refere-se ao pai do diretório em que
utilizam, não pelo sistema. aparece, ou seja, ao diretório em que foi criado.
A estrutura do diretório é restrita para ter a forma de uma
3.2 Diretórios árvore enraizada. Exceto pelas entradas especiais “.” e “..”, cada
Os diretórios fornecem o mapeamento entre os nomes dos arquivos e
diretório deve aparecer como uma entrada em exatamente um
os próprios arquivos e, assim, induzem uma estrutura no sistema de arquivos
outro, que é seu pai. A razão para isto é simplificar a escrita de
como um todo. Cada usuário tem um diretório de seus programas que visitam subárvores do diretório
366 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
Há apenas uma exceção à regra de tratamento idêntico de O sistema chama para fazerEU/Osão projetados para
arquivos em diferentes dispositivos: nenhum link pode existir entre eliminar as diferenças entre os vários dispositivos e estilos de
uma hierarquia de sistema de arquivos e outra. Essa restrição é acesso. Não há distinção entre “aleatório” e sequencialEU/O,
aplicada para evitar a contabilidade elaborada que, de outra forma, nem nenhum tamanho de registro lógico é imposto pelo
seria necessária para garantir a remoção dos links quando o sistema. O tamanho de um arquivo comum é determinado pelo
volume removível for finalmente desmontado. Em
367 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
Deve-se dizer que o sistema possui intertravamentos internos 4. Implementação do Sistema de Arquivos
suficientes para manter a consistência lógica do sistema de arquivos
quando dois usuários se envolvem simultaneamente em atividades Conforme mencionado em §3.2 acima, uma entrada de diretório contém
inconvenientes como escrever no mesmo arquivo, criar arquivos no apenas um nome para o arquivo associado e um ponteiro para o próprio
mesmo diretório ou deletar os arquivos abertos um do outro. arquivo. Este ponteiro é um número inteiro chamado dei-número(para
Exceto conforme indicado abaixo, a leitura e a escrita são número de índice) do arquivo. Quando o arquivo é acessado, seuem númeroé
sequenciais. Isso significa que se um determinado byte no usado como um índice em uma tabela do sistema (oi-list) armazenado em
arquivo foi o último byte escrito (ou lido), o próximoEU/Ocall uma parte conhecida do dispositivo no qual o diretório reside. A entrada
refere-se implicitamente ao primeiro byte seguinte. Para cada assim encontrada (o nome do arquivoi-node) contém a descrição do arquivo
arquivo aberto existe um ponteiro, mantido pelo sistema, que da seguinte forma.
indica o próximo byte a ser lido ou escrito. Se n bytes forem 1. Seu proprietário.
lidos ou escritos, o ponteiro avança em n bytes. 2. Seus bits de proteção.
Depois que um arquivo é aberto, as seguintes chamadas podem ser usadas:
3. O disco físico ou endereços de fita para o conteúdo do
n = read(filep, buffer, count) n = arquivo.
write(filep, buffer, count) 4. Seu tamanho.
368 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
369 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
Para fornecer uma indicação da eficiência geral do Processos podem se comunicar com processos relacionados usando o
UNIXe do sistema de arquivos em particular, foram feitas as temporizações da mesmo sistemalereescreverchamadas que são usadas para o sistema de
montagem de um programa de 7621 linhas. A montagem foi executada arquivosEU/O. A chamada
sozinha na máquina; o tempo total do relógio foi de 35,9 segundos, para uma
filep = pipe( )
taxa de 212 linhas por segundo. O tempo foi dividido da seguinte forma:
63,5% de tempo de execução do montador, 16,5% de sobrecarga do sistema, retorna um descritor de arquivoarquivare cria um canal
20,0% de tempo de espera do disco. Não tentaremos nenhuma interpretação interprocesso chamadocano. Este canal, como outras moscas
desses números nem qualquer comparação com outros sistemas, mas apenas abertas, é passado do processo pai para filho na imagem pelogarfo
observaremos que geralmente estamos satisfeitos com o desempenho geral chamar. Alerusando um descritor de arquivo pipe espera até que
do sistema. outro processo grave usando o descritor de arquivo para o mesmo
pipe. Neste ponto, os dados são passados entre as imagens dos
dois processos. Nenhum dos processos precisa saber que um pipe,
um novo processo pode surgir apenas pelo uso da chamada faz com que seu chamador suspenda a execução até que um de
de sistema fork: seus filhos conclua a execução. Entãoespereretorna oprocessiddo
processid = garfo (etiqueta) processo encerrado. Um retorno de erro é obtido se o processo de
chamada não tiver descendentes. Determinados status do processo
Quandogarfoé executado por um processo, ele se divide em dois
filho também estão disponíveis.Esperetambém pode apresentar
processos de execução independente. Os dois processos têm cópias
status de neto ou ancestral mais distante; ver §5.5.
independentes da imagem central original e compartilham todos os
arquivos abertos. Os novos processos diferem apenas em que um é 5.5 Rescisão
considerado o processo pai: no pai, o controle retorna diretamente Por último,
370 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
ed
6. A Casca
normalmente entra no editor, que recebe as solicitações do usuário por meio
Para a maioria dos usuários, a comunicação comUNIXé feito com o de sua máquina de escrever. O comando
auxílio de um programa chamado Shell. O Shell é um interpretador de
ed〈roteiro
linha de comando: ele lê linhas digitadas pelo usuário e as interpreta
como requisições para executar outros programas. Na forma mais interpretaroteirocomo um arquivo de comandos do editor; por isso "〈script”
simples, uma linha de comando consiste no nome do comando seguido significa “obter entrada deroteiro.”
de argumentos para o comando, todos separados por espaços: Embora o nome do arquivo após “〈”ou "〉”parece ser um
argumento para o comando, na verdade ele é interpretado
completamente pelo Shell e não é passado para o comando. Assim,
comando arg1arg2⋅ ⋅ ⋅argn
nenhuma codificação especial para lidarEU/Oo redirecionamento é
O Shell divide o nome do comando e os argumentos em strings necessário dentro de cada comando; o comando precisa apenas
separadas. Em seguida, um arquivo com o nomecomandoé usar os descritores de arquivo padrão 0 e 1 quando apropriado.
procurado;comandopode ser um nome de caminho incluindo o
caractere “/” para especificar qualquer arquivo no sistema. Se 6.2 Filtros
comandoé encontrado, é trazido para o núcleo e executado. Os Uma extensão do padrãoEU/OA noção é usada para
argumentos coletados pelo Shell são acessíveis ao comando. direcionar a saída de um comando para a entrada de outro.
Quando o comando é concluído, o Shell retoma sua própria Uma sequência de comandos separados por barras verticais faz
execução e indica sua prontidão para aceitar outro comando com que o Shell execute todos os comandos simultaneamente
digitando um caractere de prompt. e faça com que a saída padrão de cada comando seja entregue
Se arquivocomandonão pode ser encontrado, o Shell prefixa a à entrada padrão do próximo comando na sequência. Assim na
string /lixeira/ para o comando e tenta novamente localizar o arquivo. linha de comando
Diretório /lixeiracontém todos os comandos destinados a serem
ls | pr –2 | opr
geralmente usados.
lslista os nomes dos arquivos no diretório atual; sua saída é passada
6.1 PadrãoEU/O parapr, que pagina sua entrada com cabeçalhos datados. O
A discussão deEU/Oem §3 acima parece implicar que todo arquivo argumento “–2” significa coluna dupla. Da mesma forma, a saída de
usado por um programa deve ser aberto ou criado pelo programa para pré entrada paraopr. Este comando coloca sua entrada em spool
obter um descritor de arquivo para o arquivo. Programas executados em um arquivo para impressão off-line.
pelo Shell, no entanto, começam com dois arquivos abertos que Este processo poderia ter sido realizado de forma mais desajeitada
possuem descritores de arquivo 0 e 1. Como tal programa inicia a por
execução, o arquivo 1 está aberto para gravação e é melhor entendido
ls〉temp1
como o arquivo de saída padrão. Exceto nas circunstâncias indicadas
pr-2〈temp1〉temp2
abaixo, este arquivo é a máquina de escrever do usuário. Assim, os
opr〈temp2
programas que desejam escrever informações informativas ou de
diagnóstico normalmente usam o descritor de arquivo 1. Inversamente, seguido pela remoção dos arquivos temporários. Na ausência da
o arquivo 0 começa aberto para leitura e os programas que desejam ler capacidade de redirecionar saída e entrada, um método ainda mais
mensagens digitadas pelo usuário geralmente leem esse arquivo. desajeitado teria sido exigir olscomando para aceitar solicitações do
usuário para paginar sua saída, para imprimir em formato de várias
O Shell é capaz de alterar as atribuições padrão desses colunas e para providenciar que sua saída seja entregue off-line. Na
descritores de arquivo da impressora e do teclado da máquina de verdade, seria surpreendente e, de fato, imprudente por razões de
escrever do usuário. Se um dos argumentos 'para um comando for eficiência, esperar que autores de comandos comolspara fornecer
prefixado por “〉”,o descritor de arquivo 1 irá, durante o comando, uma variedade tão ampla de opções de saída.
referir-se ao arquivo nomeado após o “〉”.Por exemplo, Um programa comoprque copia sua entrada padrão para
sua saída padrão (com processamento) é chamado defiltro.
Alguns filtros que consideramos úteis executam transliteração
ls
de caracteres, classificação da entrada e criptografia e
normalmente lista, na máquina de escrever, os nomes dos descriptografia.
arquivos no diretório atual. O comando
ls〉lá
371 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
ls; ed
6.5 Implementação da Shell
listará primeiro o conteúdo do diretório atual e, em seguida, entrará no O esboço da operação do Shell pode agora ser entendido.
editor. Na maioria das vezes, o Shell está esperando que o usuário
Um recurso relacionado é mais interessante. Se um comando for digite um comando. Quando o caractere de nova linha que
seguido por “&”, o Shell não aguardará a conclusão do comando antes termina a linha é digitado, o shelllerchamada retorna. O Shell
de solicitar novamente; em vez disso, ele está pronto imediatamente analisa a linha de comando, colocando os argumentos em uma
para aceitar um novo comando. Por exemplo, forma apropriada paraexecutar. Entãogarfoé chamado. O
processo filho, cujo código obviamente ainda é o do Shell, tenta
como fonte〉saída &
executar umaexecutarcom os devidos argumentos. Se for bem-
faz com que a fonte seja montada, com saída de diagnóstico indo sucedido, isso trará e iniciará a execução do programa cujo
para saída; não importa quanto tempo leve a montagem, o Shell nome foi fornecido. Enquanto isso, o outro processo resultante
retorna imediatamente. Quando o Shell não espera a conclusão de dagarfo, que é o processo pai,espera para o processo infantil
um comando, é impressa a identificação do processo que está morrer. Quando isso acontece, o Shell sabe que o comando foi
executando aquele comando. Essa identificação pode ser usada concluído, então ele digita seu prompt e lê a máquina de
para aguardar a conclusão do comando ou para finalizá-lo. O “&” escrever para obter outro comando.
pode ser usado várias vezes em uma linha: Dada essa estrutura, a implementação de processos
em segundo plano é trivial; sempre que uma linha de
como fonte〉saída & ls〉arquivos &
comando contém “&”, o Shell apenas se abstém de
faz a montagem e a listagem em segundo plano. Nos aguardar o processo que criou para executar o comando.
exemplos acima usando “&”, foi fornecido um arquivo de Felizmente, todo esse mecanismo combina muito bem com a
saída diferente da máquina de escrever; se isso não tivesse noção de arquivos padrão de entrada e saída. Quando um processo
sido feito, as saídas dos vários comandos teriam sido é criado pelogarfoprimitivo, ele herda não apenas a imagem
misturadas. principal de seu pai, mas também todos os arquivos atualmente
O Shell também permite parênteses nas operações abertos em seu pai, incluindo aqueles com descritores de arquivo 0
acima. Por exemplo, e 1. O Shell, é claro, usa esses arquivos para ler linhas de comando
e escrever seus prompts e diagnósticos e, no caso comum, seus
(data; ls)〉x &
filhos - os programas de comando - os herdam automaticamente.
imprime a data e hora atuais seguidas por uma lista do Quando um argumento com “〈”ou "〉”é dado no entanto, o
diretório atual no arquivox. O Shell também retorna processo descendente, pouco antes de executarexecutar, torna o
imediatamente para outra solicitação. padrãoEU/Odescritor de arquivo 0 ou 1, respectivamente, referem-
se ao arquivo nomeado. Isso é fácil porque, por acordo, o menor
6.4 O Shell como um comando: arquivos de comando descritor de arquivo não utilizado é atribuído quando um novo
O Shell é em si um comando e pode ser chamado recursivamente. arquivo éabrired (oucriard); basta fechar o arquivo 0 (ou 1) e abrir o
Suponha arquivoexperimentarcontém as linhas arquivo nomeado. Como o processo no qual o programa de
como fonte
comando é executado simplesmente termina quando ele termina, a
372 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
373 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
apenas a economia, mas uma certa elegância de design. Essa plena exploração de um conjunto cuidadosamente selecionado de idéias
pode ser uma versão mal disfarçada da filosofia da “salvação férteis e, especialmente, em mostrar que elas podem ser chaves para a
pelo sofrimento”, mas no nosso caso funcionou. implementação de um sistema operacional pequeno, mas poderoso.
374 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
9.5 Confiabilidade
Nossas estatísticas de confiabilidade são muito mais subjetivas do que
as outras. Os resultados a seguir são verdadeiros para o melhor de nossas
lembranças combinadas. O intervalo de tempo é superior a um ano, com uma
safra muito precoce de 11/45.
Houve uma perda de um sistema de arquivos (um disco em cinco)
causada pela incapacidade do software de lidar com um problema de
hardware que causa repetidas armadilhas de falha de energia. Os arquivos
naquele disco foram copiados por três dias.
Uma “falha” é uma reinicialização ou interrupção não programada do
sistema. Há cerca de um acidente a cada dois dias; cerca de dois terços
375 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974