Você está na página 1de 12

Traduzido do Inglês para o Português - www.onlinedoctranslator.

com

1. Introdução

Houve três versões deUNIX. A versão mais antiga (por volta de


1969–70) funcionou na Digital Equipment Corporation PDP-7 e -9
computadores. A segunda versão correu no desprotegido PDP -
11/20 computador. Este trabalho descreve apenas oPDPSistema -

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, cerca

Laboratórios Dennis M. Ritchie e de 40 instalações foram colocadas em serviço; eles são geralmente
menores do que o sistema descrito aqui. A maioria deles está
Ken Thompson Bell 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 uso Talvez a conquista mais importante deUNIXé demonstrar que um
geral para a Digital Equipment Corporation PDP-11/40 e 11/45 sistema operacional poderoso para uso interativo não precisa ser caro
computadores. Ele oferece vários recursos raramente encontrados nem em equipamentos nem em esforço humano:UNIXpode ser
mesmo em sistemas operacionais maiores, incluindo: (1) um executado em hardware que custa apenas $ 40.000, e menos de dois
sistema de arquivos hierárquico que incorpora volumes anos-homem foram gastos no software do sistema principal.
desmontáveis; (2) arquivo compatível, dispositivo e AindaUNIXcontém uma série de recursos raramente oferecidos, mesmo
interprocessoEU/O; (3) a capacidade de iniciar processos em sistemas muito maiores. Espera-se, no entanto, que os usuários
assíncronos; (4) linguagem de comando do sistema selecionável deUNIXdescobrirá que as características mais importantes do sistema
por usuário; e (5) mais de 100 subsistemas, incluindo uma dúzia 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 em QED
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),
intérprete para um dialeto deBÁSICO, programa de formatação de
Categorias CR: 4.30, 4.32
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 UNIXeditor e programa de formatação de texto.
deste material é concedida desde que o aviso de direitos autorais da
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.
2. Ambiente de Hardware e Software
Esta é uma versão revisada de um documento apresentado no
Quarto Simpósio ACM sobre Princípios de Sistemas Operacionais, IBM
OPDP-11/45 em que nossoUNIXa instalação implementada é um
Thomas J. Watson Research Center, Yorktown Heights. Nova York, 15
a 17 de outubro de 1973. Endereço dos autores: Bell Laboratories, computador de palavra de 16 bits (byte de 8 bits) com 144 Kbytes
Murray Hill, NJ 07974. de memória principal;UNIXocupa 42 Kbytes. Este sistema, no
A versão eletrônica foi recriada por Eric A. Brewer, da entanto, inclui um número muito grande de drivers de dispositivo e
Universidade da Califórnia em Berkeley,
desfruta de uma alocação generosa de espaço para EU/Obuffers e
brewer@cs.berkeley.edu. Por favor, notifique-me sobre
quaisquer desvios do original; Deixei erros no original tabelas de sistema; um sistema mínimo capaz de executar o
inalterados. Comunicações julho de 1974

de Volume 17
365 Versão eletrônica recriada por Eric A. Brewer o ACM número 7
Universidade da Califórnia em Berkeley
o software mencionado acima pode exigir apenas próprios arquivos; ele também pode criar subdiretórios para conter
50K bytes de núcleo. grupos de arquivos convenientemente tratados juntos. Um diretório se
OPDP-11 tem um disco de cabeça fixa de 1M byte, usado para comporta exatamente como um arquivo comum, exceto pelo fato de
armazenamento e troca de sistema de arquivos, quatro unidades de disco não poder ser gravado por programas não privilegiados, de modo que
de cabeça móvel cada uma fornecendo 2,5M bytes em cartuchos de disco o sistema controla o conteúdo dos diretórios. No entanto, qualquer
removíveis e uma única unidade de disco de cabeça móvel que usa disco pessoa com permissão apropriada pode ler um diretório como
removível de 40M bytes pacotes. Há também um perfurador de leitor de fita qualquer outro arquivo.
de papel de alta velocidade, fita magnética de nove trilhas e fita D (uma O sistema mantém vários diretórios para uso próprio. Um
variedade de instalações de fita magnética em que registros individuais deles é oraizdiretório. Todos os arquivos no sistema podem ser
podem ser endereçados e reescritos). Além da máquina de escrever do encontrados traçando um caminho através de uma cadeia de
console, existem 14 interfaces de comunicação de velocidade variável diretórios até que o arquivo desejado seja encontrado. O ponto de
conectadas a conjuntos de dados da série 100 e uma interface de conjunto partida para essas pesquisas geralmente é a raiz. Outro diretório
de dados 201 usada principalmente para impressão em spool para uma do sistema contém todos os programas fornecidos para uso geral;
impressora de linha comum. Existem também vários ou seja, todos oscomandos. Como será visto no entanto, não é
dispositivos únicos, incluindo um Picturephone ®interface, uma necessário que um programa resida neste diretório para que seja
unidade de resposta de voz, um sintetizador de voz, um executado.
fotocompositor, uma rede de comutação digital e um Os arquivos são nomeados por sequências de 14 ou menos
satélitePDP -11/20 que gera vetores, curvas e caracteres em um caracteres. Quando o nome de um arquivo é especificado para o
monitor de 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 durante pesquisa começará no diretório raiz. O nome /alfa/beta/gama faz com

o verão de 1973, ele foi reescrito em C. O tamanho do novo que o sistema procure na raiz pelo diretórioalfa, em seguida, para
pesquisaralfaparabeta, finalmente encontrargamaembeta. Gamapode
sistema é cerca de um terço maior que o antigo. Como o novo
ser um arquivo comum, um diretório ou um arquivo especial. Como
sistema não é apenas muito mais fácil de entender e modificar,
caso limite, o nome “/” refere-se à própria raiz.
mas também inclui muitas melhorias funcionais, incluindo
Um nome de caminho que não comece com “/” faz com
multiprogramação e a capacidade de compartilhar código
que o sistema inicie a pesquisa no diretório atual do usuário.
reentrante entre vários programas de usuários, consideramos
Assim, o nomealfa/betaespecifica o arquivo chamadobetano
esse aumento de tamanho bastante aceitável.
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
3. O sistema de arquivos
arquivo 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
arquivos. Do ponto de vista do usuário, existem três tipos de arquivos: diretórios com nomes possivelmente diferentes. Este recurso é

arquivos de disco comuns, diretórios e arquivos especiais. chamadoligando; 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.
3.1 Arquivos Comuns Ou seja, um arquivo não existe em um diretório específico; a entrada de
Um arquivo contém qualquer informação que o usuário coloque diretório para um arquivo consiste apenas em seu nome e um ponteiro
nele, por exemplo, programas simbólicos ou binários (objetos). para as informações que realmente descrevem o arquivo. Assim, um
Nenhuma estruturação particular é esperada pelo sistema. Arquivos de arquivo existe independentemente de qualquer entrada de diretório,
texto consistem simplesmente em uma sequência de caracteres, com embora na prática um arquivo seja feito para desaparecer junto com o
linhas demarcadas pelo caractere de nova linha. Programas binários último link para ele.
são sequências de palavras que aparecerão na memória central Cada diretório sempre tem pelo menos duas entradas. O
quando o programa começar a ser executado. Alguns programas de nome em cada diretório refere-se ao próprio diretório. Assim,
usuário manipulam arquivos com mais estrutura: o montador gera e o um programa pode ler o diretório atual sob o nome “.” sem
carregador espera um arquivo objeto em um formato específico. No saber seu nome de caminho completo. O nome “..” por
entanto, a estrutura dos arquivos é controlada pelos programas que os convenção refere-se ao pai do diretório em que aparece, ou
utilizam, não pelo sistema. 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
outro, que é seu pai. A razão para isto é simplificar a escrita de
arquivos como um todo. Cada usuário tem um diretório de seus
programas que visitam subárvores do diretório

Comunicações julho de 1974


366 Versão eletrônica recriada por Eric A. Brewer
Universidade da Califórnia em Berkeley de Volume 17
o ACM número 7
estrutura e, mais importante, evitar a separação de partes em particular, nos diretórios raiz de todos os sistemas de
da hierarquia. Se links arbitrários para diretórios fossem arquivos, removíveis ou não, o nome “..” refere-se ao
permitidos, seria muito difícil detectar quando a última próprio diretório em vez de seu pai.
conexão da raiz para um diretório foi cortada.
3.5 Proteção
3.3 Arquivos Especiais Embora o esquema de controle de acesso emUNIXé bastante simples,
Arquivos especiais constituem a característica mais incomum do tem algumas características incomuns. Cada usuário do sistema recebe um
UNIXsistema de arquivo. CadaEU/Odispositivo suportado porUNIXestá número de identificação de usuário exclusivo. Quando um arquivo é criado,
associado a pelo menos um desses arquivos. Arquivos especiais são lidos e ele é marcado com o usuárioEU IAde seu dono. Também fornecido para
gravados como arquivos de disco comuns, mas as solicitações de leitura ou novos arquivos é um conjunto de sete bits de proteção. Seis deles
gravação resultam na ativação do dispositivo associado. Uma entrada para especificam permissões de leitura, gravação e execução independentes

cada arquivo especial reside no diretório /desenvolvedor, embora um link para o proprietário do arquivo e para todos os outros usuários.

possa ser feito para um desses arquivos como um arquivo comum. Assim, Se o sétimo bit estiver ativado, o sistema mudará
por exemplo, para furar fita de papel, pode-se escrever no temporariamente a identificação do usuário atual para a do
arquivo /desenvolvedor/ppt. Existem arquivos especiais para cada linha de criador do arquivo sempre que o arquivo for executado como um
comunicação, cada disco, cada unidade de fita e para a memória do núcleo programa. Essa mudança de usuárioEU IAsó é eficaz durante a
físico. Obviamente, os discos ativos e o arquivo especial principal são execução do programa que o solicita. O conjunto-usuário- EU IA
protegidos contra acesso indiscriminado. O recurso fornece programas privilegiados que podem usar arquivos
Há uma vantagem tripla no tratamentoEU/Odispositivos desta forma: inacessíveis a outros usuários. Por exemplo, um programa pode manter um

arquivo e dispositivoEU/Osão tão semelhantes quanto possível; nomes de arquivo de contabilidade que não deve ser lido nem alterado, exceto pelo

arquivos e dispositivos têm a mesma sintaxe e significado, de modo que um próprio programa. Se o bit set-useridentification estiver ativado para o

programa que espera um nome de arquivo como parâmetro pode receber um programa, ele poderá acessar o arquivo, embora esse acesso possa ser

nome de dispositivo; finalmente, os arquivos especiais estão sujeitos ao proibido para outros programas invocados pelo usuário do programa em

mesmo mecanismo de proteção que os arquivos comuns. questão. Como o usuário realEU IAdo invocador de qualquer programa está
sempre disponível, set-user-EU IAos programas podem tomar quaisquer
3.4 Sistemas de arquivos removíveis medidas desejadas para se satisfazerem quanto às credenciais de seus
Embora a raiz do sistema de arquivos seja sempre armazenada no invocadores. Este mecanismo é usado para permitir que os usuários
mesmo dispositivo, não é necessário que toda a hierarquia do sistema de executem os comandos cuidadosamente escritos que chamam as entradas
arquivos resida nesse dispositivo. Existe ummontarsolicitação do sistema privilegiadas do sistema. Por exemplo, existe uma entrada de sistema que
que tem dois argumentos: o nome de um arquivo comum existente e o nome pode ser invocada apenas pelo “superusuário” (abaixo) que cria um diretório
de um arquivo especial de acesso direto cujo volume de armazenamento vazio. Conforme indicado acima, espera-se que os diretórios tenham
associado (por exemplo, pacote de disco) deve ter a estrutura de um sistema
entradas para “.” e "..". O comando que cria um diretório pertence ao
de arquivos independente contendo sua própria hierarquia de diretórios. O
superusuário e tem o conjunto-usuário-EU IAconjunto de bits. Depois de
efeito demontaré fazer com que as referências ao arquivo até então comum
verificar a autorização de seu invocador para criar o diretório especificado,
se refiram ao diretório raiz do sistema de arquivos no volume removível.
ele o cria e faz as entradas para “.” e "..".
Com efeito,montarsubstitui uma folha da árvore hierárquica (o arquivo
comum) por uma subárvore totalmente nova (a hierarquia armazenada no
volume removível). Depois de montar, praticamente não há distinção entre Como qualquer um pode definir o set-user- EU IAbit em um de
arquivos no volume removível e aqueles no sistema de arquivos permanente. seus próprios arquivos, esse mecanismo geralmente está
Em nossa instalação, por exemplo, o diretório raiz reside no disco de cabeça disponível sem intervenção administrativa. Por exemplo, este
fixa e a unidade de disco grande, que contém os arquivos do usuário, é esquema de proteção resolve facilmente o MOOproblema contábil
montada pelo programa de inicialização do sistema, as quatro unidades de proposto em [7].
disco menores estão disponíveis para os usuários montarem suas próprias O sistema reconhece um determinado usuário EU IA(o do
pacotes de disco. Um sistema de arquivos montável é gerado escrevendo em “superusuário”) como isento das restrições usuais de acesso aos
seu arquivo especial correspondente. Um programa utilitário está disponível arquivos; assim (por exemplo) os programas podem ser escritos
para criar um sistema de arquivos vazio ou pode-se simplesmente copiar um para despejar e recarregar o sistema de arquivos sem
sistema de arquivos existente.
interferência indesejada do sistema de proteção.

3.6EU/Ochamadas
Há apenas uma exceção à regra de tratamento idêntico de O sistema chama para fazerEU/Osão projetados para eliminar
arquivos em diferentes dispositivos: nenhum link pode existir as diferenças entre os vários dispositivos e estilos de acesso. Não
entre uma hierarquia de sistema de arquivos e outra. Essa há distinção entre “aleatório” e sequencial EU/O, nem nenhum
restrição é aplicada para evitar a contabilidade elaborada que, de tamanho de registro lógico é imposto pelo sistema. O tamanho de
outra forma, seria necessária para garantir a remoção dos links um arquivo comum é determinado pelo
quando o volume removível for finalmente desmontado. Em

Comunicações julho de 1974


367 Versão eletrônica recriada por Eric A. Brewer
Universidade da Califórnia em Berkeley de Volume 17
o ACM número 7
byte mais alto escrito nele; nenhuma predeterminação do tamanho de Atécontarbytes são transmitidos entre o arquivo especificado por arquivare a
um arquivo é necessária ou possível. matriz de bytes especificada poramortecedor. O valor retornadoné o número
Para ilustrar o essencial deEU/OemUNIX, Algumas das chamadas de bytes realmente transmitidos. No escrever caso,né o mesmo
básicas são resumidas abaixo em uma linguagem anônima que indicará quecontarexceto em condições excepcionais comoEU/ Oerros ou fim de
os parâmetros necessários sem entrar nas complexidades da suporte físico em arquivos especiais; em uma leitura, no entanto,npode sem
programação em linguagem de máquina. Cada chamada ao sistema erro ser menor quecontar. Se o ponteiro de leitura estiver tão próximo do

pode potencialmente resultar em um retorno de erro, que para final do arquivo que a leitura de caracteres de contagem causaria uma leitura

simplificar não é representado na sequência de chamada. além do final, apenas os bytes suficientes serão transmitidos para alcançar o
final do arquivo; além disso, dispositivos semelhantes a máquinas de
Para ler ou escrever um arquivo que já existe, ele deve escrever nunca retornam mais de uma linha de entrada. Quando

ser aberto pela seguinte chamada: umlerchamada retorna comn igual a zero, indica o fim do arquivo. Para
arquivos de disco, isso ocorre quando o ponteiro de leitura se torna igual ao
filep = aberto (nome, sinalizador)
tamanho atual do arquivo. É possível gerar um fim de arquivo de uma
Nomeindica o nome do arquivo. Um nome de caminho máquina de escrever usando uma sequência de escape que depende do
arbitrário pode ser fornecido. ObandeiraO argumento indica se dispositivo usado.
o arquivo deve ser lido, gravado ou “atualizado”, ou seja, lido e
gravado simultaneamente. Os bytes gravados em um arquivo afetam apenas aqueles implícitos na
O valor retornadoarquivaré chamado dedescritor de arquivo. É um posição do ponteiro de gravação e na contagem; nenhuma outra parte do
pequeno número inteiro usado para identificar o arquivo em chamadas arquivo é alterada. Se o último byte estiver além do final do arquivo, o
subseqüentes para ler, gravar ou manipulá-lo de outra forma. arquivo será aumentado conforme necessário.
Para criar um novo arquivo ou reescrever completamente um Para fazer aleatório (acesso direto)EU/O, é necessário apenas mover o

antigo, existe umcriarchamada de sistema que cria o arquivo ponteiro de leitura ou gravação para o local apropriado no arquivo.
fornecido, se ele não existir, ou trunca-o para comprimento zero, se
existir. Criar também abre o novo arquivo para escrita e, comoabrir,
location = seek(filep, base, offset)
retorna um descritor de arquivo.
Não há bloqueios visíveis ao usuário no sistema de arquivos, nem há O ponteiro associado aarquivaré movido para uma posição
qualquer restrição sobre o número de usuários que podem ter um arquivo desviobytes do início do arquivo, da posição atual do ponteiro
aberto para leitura ou gravação; embora seja possível que o conteúdo de um ou do final do arquivo, dependendobase.Desviopode ser
arquivo fique embaralhado quando dois usuários escrevem nele negativo. Para alguns dispositivos (por exemplo, fita de papel
simultaneamente, na prática, as dificuldades não surgem. Entendemos que e máquinas de escrever), as chamadas de busca são
bloqueios não são necessários nem suficientes, em nosso ambiente, para ignoradas. O deslocamento real desde o início do arquivo
evitar interferências entre usuários de um mesmo arquivo. Eles são para o qual o ponteiro foi movido é retornado emlocalização.
desnecessários porque não nos deparamos com grandes bancos de dados 3.6.1 OutrosEU/OChamadas.Existem vários sistemas adicionais dez

de arquivo único mantidos por processos independentes. Eles são entradas relacionadas comEU/Oe com o sistema de arquivos que não será

insuficientes porque bloqueios no sentido comum, por meio dos quais um discutido. Por exemplo: feche um arquivo, obtenha o status de um arquivo,

usuário é impedido de escrever em um arquivo que outro usuário está lendo, altere o modo de proteção ou o proprietário de um arquivo, crie um diretório,

não podem evitar confusão quando, por exemplo, ambos os usuários estão crie um link para um arquivo existente, exclua um arquivo.
editando um arquivo com um editor que faz uma cópia do arquivo sendo
editado.

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

inconvenientes como escrever no mesmo arquivo, criar arquivos no contém apenas um nome para o arquivo associado e um ponteiro para o

mesmo diretório ou deletar os arquivos abertos um do outro. próprio arquivo. Este ponteiro é um número inteiro chamado dei-

Exceto conforme indicado abaixo, a leitura e a escrita são número(para número de índice) do arquivo. Quando o arquivo é acessado,

sequenciais. Isso significa que se um determinado byte no seuem númeroé usado como um índice em uma tabela do sistema (oi-list)

arquivo foi o último byte escrito (ou lido), o próximo EU/Ocall armazenado em uma parte conhecida do dispositivo no qual o diretório

refere-se implicitamente ao primeiro byte seguinte. Para cada reside. A entrada assim encontrada (o nome do arquivoi-node) contém a

arquivo aberto existe um ponteiro, mantido pelo sistema, que descrição do arquivo 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.
4. Seu tamanho.
write(filep, buffer, count)

Comunicações julho de 1974


368 Versão eletrônica recriada por Eric A. Brewer
de Volume 17
Universidade da Califórnia em Berkeley
o ACM número 7
5. Hora da última modificação diretório em todos os sistemas de arquivos) e o nome do dispositivo
6. O número de links para o arquivo, ou seja, o número de vezes é substituído pelo valor da tabela.
que ele aparece em um diretório. Para o usuário, tanto a leitura quanto a gravação de arquivos parecem
7. Um bit que indica se o arquivo é um diretório. ser síncronas e sem buffer. Isso é imediatamente após o retorno de

8. Um bit que indica se o arquivo é um arquivo especial. umlerchamada os dados estão disponíveis e, inversamente, após

9. Um bit que indica se o arquivo é “grande” ou “pequeno”. umescrevero espaço de trabalho do usuário pode ser reutilizado. Na
verdade, o sistema mantém um mecanismo de buffer bastante complicado
A finalidade de umabriroucriarchamada de sistema é transformar o nome do
que reduz bastante o número deEU/Ooperações necessárias para acessar
caminho fornecido pelo usuário em um número i, pesquisando os diretórios
um arquivo. Suponha que umescreverchamada é feita especificando a
nomeados explícita ou implicitamente. Depois que um arquivo é aberto, seu
transmissão de um único byte.
dispositivo, i-number e ponteiro de leitura/gravação são armazenados em
UNIXprocurará seus buffers para ver se o bloco de disco
uma tabela do sistema indexada pelo descritor de arquivo retornado
afetado reside atualmente na memória principal; caso contrário,
peloabrir oucriar. Assim, o descritor de arquivo fornecido durante uma
será lido a partir do dispositivo. Em seguida, o byte afetado é
chamada subseqüente para ler ou escrever o arquivo pode ser facilmente
substituído no buffer e uma entrada é feita em uma lista de blocos
relacionado com as informações necessárias para acessar o arquivo.
a serem gravados. O retorno doescreverchamada pode então
Quando um novo arquivo é criado, um i-node é alocado para
ocorrer, embora o realEU/Opode não ser concluído até um
ele e uma entrada de diretório é feita contendo o nome do arquivo
momento posterior. Por outro lado, se um único byte for lido, o
e o número do i-node. Fazer um link para um arquivo existente
sistema determina se o bloco de armazenamento secundário no
envolve criar uma entrada de diretório com o novo nome, copiar o
qual o byte está localizado já está em um dos buffers do sistema;
i-number da entrada do arquivo original e incrementar o campo de
se assim for, o byte pode ser devolvido imediatamente. Caso
contagem de links do i-node. A remoção (exclusão) de um arquivo
contrário, o bloco é lido em um buffer e o byte selecionado.
é feita diminuindo a contagem de links do i-node especificado por
Um programa que lê ou escreve arquivos em unidades de 512
sua entrada de diretório e apagando a entrada de diretório. Se a
bytes tem uma vantagem sobre um programa que lê ou escreve
contagem de links cair para 0, todos os blocos de disco no arquivo
um único byte por vez, mas o ganho não é imenso; vem
serão liberados e o i-node será desalocado.
principalmente da prevenção da sobrecarga do sistema. Um
O espaço em todos os discos fixos ou removíveis que contêm um
programa que raramente é usado ou que não faz grande volume
sistema de arquivos é dividido em um número de blocos de 512 bytes
deEU/Opode razoavelmente ler e escrever em unidades tão
logicamente endereçados de 0 até um limite que depende do
pequenas quanto desejar.
dispositivo. Há espaço no i-node de cada arquivo para oito endereços
A noção de i-list é uma característica incomum deUNIX. Na prática, esse método de
de dispositivo. Apequeno(arquivo não especial) cabe em oito ou menos
organização do sistema de arquivos tem se mostrado bastante confiável e fácil de
blocos; neste caso, os endereços dos próprios blocos são
manusear. Para o próprio sistema, um de seus pontos fortes é o fato de cada arquivo ter
armazenados. Paragrande(não especiais), cada um dos oito endereços
um nome curto e inequívoco, relacionado de forma simples à proteção, endereçamento e
de dispositivo pode apontar para um bloco indireto de 256 endereços
outras informações necessárias para acessar o arquivo. Também permite um algoritmo
de blocos que constituem o próprio arquivo.
bastante simples e rápido para verificar a consistência de um sistema de arquivos, por
Esses arquivos podem ter até 8⋅256⋅512, ou l.048.576 exemplo, verificar se as partes de cada dispositivo contendo informações úteis e as livres
(220) bytes. para serem alocadas são disjuntas e juntas esgotam o espaço no dispositivo. Este
A discussão anterior se aplica a arquivos comuns. quando
algoritmo é independente da hierarquia de diretórios, uma vez que precisa apenas varrer a
umEU/Oa solicitação é feita a um arquivo cujo i-node indica que é
i-list organizada linearmente. Ao mesmo tempo, a noção de i-list induz certas
especial, as últimas sete palavras de endereço do dispositivo são
peculiaridades não encontradas em outras organizações de sistemas de arquivos. Por
imateriais e a lista é interpretada como um par de bytes que constituem
exemplo, há a questão de quem deve ser cobrado pelo espaço que um arquivo ocupa, uma
umdispositivonome. Esses bytes especificam, respectivamente, um
vez que todas as entradas de diretório para um arquivo têm o mesmo status. Cobrar o
tipo de dispositivo e um número de subdispositivo. O tipo de
proprietário de um arquivo
dispositivo indica com qual rotina do sistema irá lidar EU/
é injusto, em geral, já que um usuário pode criar um arquivo, outro pode criar um
Onesse dispositivo; o número do subdispositivo seleciona, por exemplo,
link para ele e o primeiro usuário pode deletar o arquivo. O primeiro usuário ainda é
uma unidade de disco conectada a um controlador específico ou uma das
o proprietário do arquivo, mas deve ser cobrado do segundo usuário. O algoritmo
várias interfaces de máquina de escrever semelhantes.
razoavelmente justo mais simples parece ser distribuir as cobranças igualmente
Nesse ambiente, a implantação domontar chamada de sistema
entre os usuários que possuem links para um arquivo. A versão atual do mas deve
(§3.4) é bastante direta.montarmantém uma tabela de sistema cujo
ser cobrado do segundo usuário. O algoritmo razoavelmente justo mais simples
argumento é o número i e o nome do dispositivo do arquivo comum
parece ser distribuir as cobranças igualmente entre os usuários que possuem links
especificado durante amontar, e cujo valor correspondente é o nome
para um arquivo. A versão atual do mas deve ser cobrado do segundo usuário. O
do dispositivo do arquivo especial indicado. Esta tabela é pesquisada
algoritmo razoavelmente justo mais simples parece ser distribuir as cobranças
para cada par (número i, dispositivo) que aparece enquanto um nome
igualmente entre os usuários que possuem links para um arquivo. A versão atual do
de caminho está sendo verificado durante uma abriroucriar; se for
UNIXevita o problema ao não cobrar nenhuma taxa.
encontrada uma correspondência, o número i é substituído por 1 (que é
o número i da raiz

369 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974

Universidade da Califórnia em Berkeley de Volume 17


o ACM número 7
4.1 Eficiência do Sistema de Arquivos 5.2 Tubulações

Para fornecer uma indicação da eficiência geral do Processos podem se comunicar com processos relacionados
UNIXe do sistema de arquivos em particular, foram feitas as temporizações usando o mesmo sistemalereescreverchamadas que são usadas para o
da montagem de um programa de 7621 linhas. A montagem foi executada sistema de 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 interprocesso

20,0% de tempo de espera do disco. Não tentaremos nenhuma interpretação chamadocano. Este canal, como outras moscas abertas, é passado do

desses números nem qualquer comparação com outros sistemas, mas processo pai para filho na imagem pelogarfo chamar. Alerusando um

apenas observaremos que geralmente estamos satisfeitos com o descritor de arquivo pipe espera até que outro processo grave usando

desempenho geral do sistema. 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, em vez de um arquivo comum,
está envolvido.
5. Processos e Imagens
Embora a comunicação entre processos via pipes seja uma
Umimagemé um ambiente de execução de computador. Ele ferramenta bastante valiosa (ver §6.2), não é um mecanismo
inclui uma imagem principal, valores gerais de registro, status de completamente geral, pois o pipe deve ser configurado por um
arquivos abertos, diretório atual e assim por diante. Uma imagem é o
ancestral comum dos processos envolvidos.
estado atual de um pseudocomputador.
Aprocessoé a execução de uma imagem. Enquanto o 5.3 Execução dos Programas
processador está executando em nome de um processo, a Outra primitiva importante do sistema é invocada por
imagem deve residir no núcleo; durante a execução de outros
execute(arquivo, arg1, argumento2, ..., argumenton)
processos, ele permanece no núcleo, a menos que o
aparecimento de um processo ativo de prioridade mais alta o que solicita ao sistema que leia e execute o programa nomeado
force a ser trocado para o disco de cabeça fixa. porarquivo, passando argumentos de stringarg1,arg2,
A parte central do usuário de uma imagem é dividida em três
. . . ,argn. Normalmente,arg1deve ser a mesma string quearquivo,
segmentos lógicos. O segmento de texto do programa começa no local 0 no
para que o programa possa determinar o nome pelo qual foi invocado.
espaço de endereço virtual. Durante a execução, esse segmento é protegido
Todo o código e dados no processo usandoexecutaré substituído do
contra gravação e uma única cópia dele é compartilhada entre todos os
arquivo, mas os arquivos abertos, o diretório atual e os
processos que executam o mesmo programa. No primeiro limite de 8 Kbytes
relacionamentos entre processos permanecem inalterados. Somente se
acima do segmento de texto do programa no espaço de endereço virtual
a chamada falhar, por exemplo porquearquivonão pôde ser encontrado
começa um segmento de dados gravável não compartilhado, cujo tamanho
ou porque seu bit de permissão de execução não foi definido, ocorre
pode ser estendido por uma chamada do sistema. Começando no endereço
um retorno do executarprimitivo; assemelha-se a uma instrução de
mais alto no espaço de endereço virtual está um segmento de pilha, que
máquina de “salto” em vez de uma chamada de sub-rotina.
cresce automaticamente para baixo à medida que o ponteiro da pilha do
hardware flutua. 5.4 Sincronização de processos Outra chamada do
sistema de controle de processo
5.1 Processos
Exceto enquantoUNIXestá se inicializando em processid = espera ( )

operação, um novo processo pode surgir apenas pelo uso faz com que seu chamador suspenda a execução até que um de
da chamada 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
Quandogarfoé executado por um processo, ele se divide em dois
processo filho também estão disponíveis.Esperetambém pode
processos de execução independente. Os dois processos têm
apresentar status de neto ou ancestral mais distante; ver §5.5.
cópias independentes da imagem central original e compartilham
todos os arquivos abertos. Os novos processos diferem apenas
5.5 Rescisão
em que um é considerado o processo pai: no pai, o controle
Por último,
retorna diretamente dogarfo, enquanto na criança, o controle é
passado para o local rótulo. Oprocessiddevolvido sair (estado)
pelogarfochamada é a identificação do outro processo.
encerra um processo, destrói sua imagem, fecha seus
Como os pontos de retorno no processo pai e filho arquivos abertos e geralmente os oblitera. Quando o pai é
não são os mesmos, cada imagem existente após notificado através doespereprimitivo, o indicadostatusestá
umgarfopode determinar se é o processo pai ou filho. disponível para o pai; se o pai já tiver rescindido, o status
estará disponível para o avô e assim por diante. Processos

Comunicações
370 Versão eletrônica recriada por Eric A. Brewer
julho de 1974

Universidade da Califórnia em Berkeley de Volume 17


o ACM número 7
também pode terminar como resultado de várias ações ilegais ou cria um arquivo chamadoláe coloca a listagem lá.
sinais gerados pelo usuário (§7 abaixo). Assim, o argumento “〉lá” significa “colocar a saída
emlá.” Por outro lado,
ed
6. A Casca
normalmente entra no editor, que recebe as solicitações do usuário por
Para a maioria dos usuários, a comunicação comUNIXé feito com o meio de sua máquina de escrever. O comando
auxílio de um programa chamado Shell. O Shell é um interpretador de linha ed〈roteiro
de comando: ele lê linhas digitadas pelo usuário e as interpreta como
requisições para executar outros programas. Na forma mais simples, uma interpretaroteirocomo um arquivo de comandos do editor; por isso "〈script”

linha de comando consiste no nome do comando seguido de argumentos significa “obter entrada deroteiro.”

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 usar
separadas. Em seguida, um arquivo com o nomecomandoé 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
Uma extensão do padrãoEU/OA noção é usada para direcionar
comandoé encontrado, é trazido para o núcleo e executado. Os
a saída de um comando para a entrada de outro. Uma sequência
argumentos coletados pelo Shell são acessíveis ao comando.
de comandos separados por barras verticais faz com que o Shell
Quando o comando é concluído, o Shell retoma sua própria
execute todos os comandos simultaneamente e faça com que a
execução e indica sua prontidão para aceitar outro comando
saída padrão de cada comando seja entregue
digitando um caractere de prompt.
à entrada padrão do próximo comando na sequência. Assim na
Se arquivocomandonão pode ser encontrado, o Shell prefixa a
string /lixeira/ para o comando e tenta novamente localizar o linha de comando
arquivo. Diretório /lixeiracontém todos os comandos destinados a ls | pr –2 | opr
serem geralmente usados.
lslista os nomes dos arquivos no diretório atual; sua saída é

6.1 PadrãoEU/O passada parapr, que pagina sua entrada com cabeçalhos datados.
A discussão deEU/Oem §3 acima parece implicar que todo arquivo O argumento “–2” significa coluna dupla. Da mesma forma, a saída
usado por um programa deve ser aberto ou criado pelo programa para de pré entrada paraopr. Este comando coloca sua entrada em
obter um descritor de arquivo para o arquivo. Programas executados pelo spool em um arquivo para impressão off-line.
Shell, no entanto, começam com dois arquivos abertos que possuem Este processo poderia ter sido realizado de forma mais

descritores de arquivo 0 e 1. Como tal programa inicia a execução, o desajeitada por

arquivo 1 está aberto para gravação e é melhor entendido como o arquivo ls〉temp1
de saída padrão. Exceto nas circunstâncias indicadas abaixo, este arquivo
pr-2〈temp1〉temp2
é a máquina de escrever do usuário. Assim, os programas que desejam
opr〈temp2
escrever informações informativas ou de diagnóstico normalmente usam o
seguido pela remoção dos arquivos temporários. Na ausência da
descritor de arquivo 1. Inversamente, o arquivo 0 começa aberto para
capacidade de redirecionar saída e entrada, um método ainda mais
leitura e os programas que desejam ler mensagens digitadas pelo usuário
desajeitado teria sido exigir olscomando para aceitar solicitações
geralmente leem esse arquivo.
do usuário para paginar sua saída, para imprimir em formato de
várias colunas e para providenciar que sua saída seja entregue off-
O Shell é capaz de alterar as atribuições padrão desses
line. Na verdade, seria surpreendente e, de fato, imprudente por
descritores de arquivo da impressora e do teclado da máquina de
razões de eficiência, esperar que autores de comandos
escrever do usuário. Se um dos argumentos 'para um comando for
comolspara fornecer uma variedade tão ampla de opções de saída.
prefixado por “〉”,o descritor de arquivo 1 irá, durante o comando,
Um programa comoprque copia sua entrada padrão
referir-se ao arquivo nomeado após o “〉”.Por exemplo,
para sua saída padrão (com processamento) é chamado
defiltro. Alguns filtros que consideramos úteis executam
ls
transliteração de caracteres, classificação da entrada e
normalmente lista, na máquina de escrever, os nomes criptografia e descriptografia.
dos arquivos no diretório atual. O comando
ls〉lá

Comunicações julho de 1974


371 Versão eletrônica recriada por Eric A. Brewer
de Volume 17
Universidade da Califórnia em Berkeley
o ACM número 7
6.3 Separadores de Comando: Multitarefa também é possível executar comandos condicionalmente em
Outro recurso fornecido pelo Shell é relativamente direto. comparações de strings de caracteres ou na existência de
Os comandos não precisam estar em linhas diferentes; em vez determinados arquivos e realizar transferências de controle dentro de
disso, eles podem ser separados por ponto e vírgula. sequências de comando arquivadas.

ls; ed
6.5 Implementação da Shell
listará primeiro o conteúdo do diretório atual e, em seguida, entrará O esboço da operação do Shell pode agora ser entendido. Na
no editor. maioria das vezes, o Shell está esperando que o usuário digite um
Um recurso relacionado é mais interessante. Se um comando comando. Quando o caractere de nova linha que termina a linha é
for seguido por “&”, o Shell não aguardará a conclusão do comando digitado, o shelllerchamada retorna. O Shell analisa a linha de
antes de solicitar novamente; em vez disso, ele está pronto comando, colocando os argumentos em uma forma apropriada
imediatamente para aceitar um novo comando. Por exemplo, paraexecutar. Entãogarfoé chamado. O processo filho, cujo

como fonte〉saída & código obviamente ainda é o do Shell, tenta executar


umaexecutarcom os devidos argumentos. Se for bem-sucedido,
faz com que a fonte seja montada, com saída de diagnóstico indo isso trará e iniciará a execução do programa cujo nome foi
para saída; não importa quanto tempo leve a montagem, o Shell fornecido. Enquanto isso, o outro processo resultante dagarfo,
retorna imediatamente. Quando o Shell não espera a conclusão que é o processo pai,espera para o processo infantil morrer.
de um comando, é impressa a identificação do processo que está Quando isso acontece, o Shell sabe que o comando foi concluído,
executando aquele comando. Essa identificação pode ser usada então ele digita seu prompt e lê a máquina de escrever para obter

para aguardar a conclusão do comando ou para finalizá-lo. O “&” outro comando.

pode ser usado várias vezes em uma linha: Dada essa estrutura, a implementação de processos
como fonte〉saída & ls〉arquivos & em segundo plano é trivial; sempre que uma linha de
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 noção de arquivos padrão de entrada e saída. Quando um processo
tivesse sido feito, as saídas dos vários comandos teriam é criado pelogarfoprimitivo, ele herda não apenas a imagem principal
sido misturadas. de seu pai, mas também todos os arquivos atualmente abertos em seu
O Shell também permite parênteses nas pai, incluindo aqueles com descritores de arquivo 0 e 1. O Shell, é
operações acima. Por exemplo, claro, usa esses arquivos para ler linhas de comando e escrever seus

(data; ls)〉x & prompts e diagnósticos e, no caso comum, seus

filhos - os programas de comando - os herdam automaticamente.


imprime a data e hora atuais seguidas por uma lista Quando um argumento com “〈”ou "〉”é dado no entanto, o
do diretório atual no arquivox. O Shell também processo descendente, pouco antes de executarexecutar, torna o
retorna 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
arquivo éabrired (oucriard); basta fechar o arquivo 0 (ou 1) e abrir
recursivamente. Suponha arquivoexperimentarcontém as linhas o arquivo nomeado. Como o processo no qual o programa de
como fonte comando é executado simplesmente termina quando ele termina,
mv a.out testprog a associação entre um arquivo especificado após “ 〈”ou "〉”e o
testprog descritor de arquivo 0 ou 1 é encerrado automaticamente quando
o processo é encerrado. Portanto, o Shell não precisa saber os
Omvcomando faz com que o arquivoa.foraser renomeado
nomes reais dos arquivos que são sua própria entrada e saída
testprog.a.foraé a saída (binária) do montador, pronta para
padrão, pois nunca precisa reabri-los.
ser executada. Assim, se as três linhas acima forem digitadas
no console,fonteseria montado, o programa resultante Os filtros são extensões diretas do padrãoEU/O
chamado testprog, etestprogexecutado. Quando as linhas redirecionamento com pipes usados em vez de arquivos.
estão em experimentar, o comando Em circunstâncias normais, o loop principal do Shell nunca
sh〈experimentar termina. (O loop principal inclui aquela ramificação do retorno
degarfopertencente ao processo pai; ou seja, o ramo que faz
causaria a Shellshpara executar os
umaespere, então lê outra linha de comando.) A única coisa que
comandos sequencialmente.
causa o encerramento do Shell é descobrir uma condição de fim
O Shell possui recursos adicionais, incluindo a capacidade de
de arquivo em seu arquivo de entrada. Por isso,
substituir parâmetros e construir listas de argumentos a partir de um

subconjunto especificado de nomes de arquivo em um diretório. Isso é

Comunicações julho de 1974


372 Versão eletrônica recriada por Eric A. Brewer
Universidade da Califórnia em Berkeley de Volume 17
o ACM número 7
quando o Shell é executado como um comando com um determinado arquivo de usado em vez do Shell. Assim, ao efetuar login, os usuários do sistema de
entrada, como em edição estão dentro do editor e podem começar a trabalhar

sh〈comfile imediatamente; também, eles podem ser impedidos de invocar UNIX

programas não destinados a seu uso. Na prática, tem se


os comandos emcomfileserá executado até o final de mostrado desejável permitir uma saída temporária do editor
comfileé atingido; então a instância do Shell invocada por para executar o programa de formatação e outros utilitários.
shterminará. Como esse processo Shell é filho de outra Vários dos jogos (por exemplo, xadrez, blackjack, tic-
instância do Shell, oespereexecutado neste último tactoe 3D) disponíveis noUNIXilustram um ambiente muito mais
retornará e outro comando poderá ser processado. severamente restrito. Para cada um deles, existe uma entrada
no arquivo de senha especificando que o programa de jogo
6.6 Inicialização apropriado deve ser invocado em vez do Shell. As pessoas
As instâncias do Shell nas quais os usuários digitam comandos
que fazem login como jogador de um dos jogos ficam
são filhas de outro processo. A última etapa da inicialização do UNIXé a
limitadas ao jogo e incapazes de investigar as ofertas
criação de um único processo e a invocação (viaexecutar) de um
presumivelmente mais interessantes deUNIXcomo um todo.
programa chamado iniciar. O papel deiniciaré criar um processo para
cada canal da máquina de escrever que pode ser discado por um
usuário. As várias subinstâncias deiniciarabra as máquinas de
7. Armadilhas
escrever apropriadas para entrada e saída. Desde quandoiniciarfoi
chamado não havia arquivos abertos, em cada processo o teclado da OPDPO hardware -11 detecta várias falhas de programa, como
máquina de escrever receberá o descritor de arquivo 0 e o descritor de referências a memória inexistente, instruções não implementadas
arquivo de impressora 1. Cada processo digita uma mensagem e endereços ímpares usados onde um endereço par é necessário.
solicitando que o usuário faça login e aguarde, lendo a máquina de Essas falhas fazem com que o processador trafegue para uma
escrever, uma resposta. No início, ninguém está logado, então cada rotina do sistema. Quando uma ação ilegal é detectada, a menos
processo simplesmente trava. Finalmente alguém digita seu nome ou que outras providências tenham sido tomadas, o sistema encerra
outra identificação. A instância apropriada deiniciaracorda, recebe a o processo e grava a imagem do usuário no arquivoessencialno
linha de login e lê um arquivo de senha. Se o nome de usuário for diretório atual. Um depurador pode ser usado para determinar o
encontrado e ele for capaz de fornecer a senha estado do programa no momento da falha.
correta,iniciaralterações no diretório atual padrão do usuário, define o Programas que estão em loop, que produzem saída indesejada ou
usuário do processo sobre os quais o usuário tem dúvidas podem ser interrompidos pelo
EU IAao da pessoa que fez o login e executa umaexecutar uso dointerrompersinal, que é gerado digitando o caractere “delete”. A
da Concha. Neste ponto, o Shell está pronto para receber menos que uma ação especial tenha sido tomada, esse sinal
comandos e o protocolo de login está concluído. simplesmente faz com que o programa interrompa a execução sem
Enquanto isso, o caminho principal deiniciar(o pai de todas as produzir um arquivo de imagem central.
subinstâncias de si mesmo que mais tarde se tornarão Shells) faz um Há também umdesistirsinal que é usado para forçar a produção
espere. Se um dos processos filho for encerrado, seja porque um Shell de uma imagem central. Assim, os programas que entram em loop
encontrou o fim do arquivo ou porque um usuário digitou um nome ou inesperadamente podem ser interrompidos e a imagem central
senha incorretos, esse caminho deiniciarsimplesmente recria o examinada sem pré-arranjo.
processo extinto, que por sua vez reabre os arquivos de entrada e As falhas geradas por hardware e os sinais de interrupção e saída
saída apropriados e digita outra mensagem de login. Assim, um podem, por solicitação, ser ignorados ou capturados pelo processo. Por
usuário pode efetuar logout simplesmente digitando a sequência de exemplo, o Shell ignora os encerramentos para evitar que um encerramento
fim de arquivo no lugar de um comando para o Shell. faça o logoff do usuário. O editor detecta as interrupções e retorna ao seu
nível de comando. Isso é útil para interromper impressões longas sem
6.7 Outros Programas como Shell
perder o trabalho em andamento (o editor manipula uma cópia do arquivo
O Shell, conforme descrito acima, foi projetado para permitir aos
que está editando). Em sistemas sem hardware de ponto flutuante, as
usuários acesso total às facilidades do sistema, uma vez que invocará a
instruções não implementadas são capturadas e as instruções de ponto
execução de qualquer programa com o modo de proteção apropriado.
flutuante são interpretadas.
Às vezes, no entanto, uma interface diferente para o sistema é
desejável e esse recurso é facilmente organizado.
Lembre-se de que, após um usuário ter feito login com sucesso
fornecendo seu nome e senha,iniciarnormalmente invoca o Shell
8. Perspectiva
para interpretar as linhas de comando. A entrada do usuário no
arquivo de senha do bloco pode conter o nome de um programa a Talvez paradoxalmente, o sucesso deUNIXdeve-se em grande
ser invocado após o login, em vez do Shell. Este programa é livre parte ao fato de não ter sido projetado para atender a nenhum
para interpretar as mensagens do usuário da maneira que desejar. objetivo predefinido. A primeira versão foi escrita quando um de nós
Por exemplo, as entradas do arquivo de senha para usuários de um
(Thompson), insatisfeito com o computador disponível
sistema de edição de secretariado especificam que o editoredé para ser

Comunicações julho de 1974


373 Versão eletrônica recriada por Eric A. Brewer
Universidade da Califórnia em Berkeley de Volume 17
o ACM número 7
instalações, descobriu um sistema pouco utilizadoPDP-7 e Outro aspecto importante da conveniência da programação é
partiu para criar um ambiente mais hospitaleiro. Este esforço que não há “blocos de controle” com uma estrutura complicada
essencialmente pessoal teve êxito suficiente para suscitar o parcialmente mantida e dependente do sistema de arquivos ou
interesse do restante autor e outros, e posteriormente outras chamadas do sistema. De um modo geral, o conteúdo do
justificar a aquisição doPDP-11/20, especificamente para espaço de endereço de um programa é propriedade do programa e
suportar um sistema de edição e formatação de texto. Então, tentamos evitar colocar restrições nas estruturas de dados dentro
por sua vez, o 11/20 foi superado,UNIXprovou ser útil o desse espaço de endereço.
suficiente para persuadir a administração a investir noPDP- Dado o requisito de que todos os programas possam ser
11/45. Nossos objetivos ao longo do esforço, quando usados com qualquer arquivo ou dispositivo como entrada ou
articulados, sempre se preocuparam em construir um saída, também é desejável, do ponto de vista da eficiência de
relacionamento confortável com a máquina e em explorar espaço, inserir considerações dependentes do dispositivo no
ideias e invenções em sistemas operacionais. Não nos próprio sistema operacional. As únicas alternativas parecem ser
deparamos com a necessidade de satisfazer os requisitos de carregar rotinas para lidar com cada dispositivo com todos os
outra pessoa, e por essa liberdade somos gratos. programas, o que é caro em espaço, ou depender de algum meio
Três considerações que influenciaram o projeto de de vinculação dinâmica à rotina apropriada para cada dispositivo
UNIXsão visíveis em retrospecto. quando realmente necessário, o que é caro também em
Primeiro, como somos programadores, naturalmente sobrecarga ou em hardware.
projetamos o sistema para facilitar a escrita, o teste e a execução Da mesma forma, o esquema de controle de processo e a
de programas. A expressão mais importante do nosso desejo de interface de comando provaram ser convenientes e eficientes. Uma vez
conveniência de programação foi que o sistema foi organizado que o Shell opera como um programa de usuário comum e trocável, ele
para uso interativo, embora a versão original suportasse apenas não consome nenhum espaço conectado no sistema propriamente dito
um usuário. Acreditamos que um sistema interativo projetado e pode ser tão poderoso quanto desejado a um custo baixo, em
adequadamente é muito mais produtivo e satisfatório de usar do particular, dada a estrutura na qual o Shell é executado como um
que um sistema “batch”. Além disso, tal sistema é facilmente processo que gera outros processos para executar comandos, as
adaptável ao uso não interativo, enquanto o inverso não é noções deEU/O redirecionamento, processos em segundo plano,
verdadeiro. arquivos de comando e interfaces de sistema selecionáveis pelo
Em segundo lugar, sempre houve restrições de tamanho usuário tornam-se essencialmente triviais de implementar.
bastante severas no sistema e em seu software. Dado os
desejos antagônicos de parcialidade por eficiência razoável e 8.1 Influências
poder expressivo, a restrição de tamanho incentivou não o sucesso deUNIXreside não tanto em novas invenções, mas sim na

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.
Em terceiro lugar, quase desde o início, o sistema foi capaz de se
manter e se manteve. Este fato é mais importante do que parece. Se os Ogarfooperação, essencialmente como a
projetistas de um sistema são forçados a usá-lo, eles rapidamente se implementamos, estava presente no sistema de
conscientizam de suas deficiências funcionais e superficiais e são compartilhamento de tempo de Berkeley [8]. Em
fortemente motivados a corrigi-los antes que seja tarde demais. Como vários pontos fomos influenciados pelo Multics,
todos os programas-fonte estavam sempre disponíveis e facilmente que sugeria a forma particular doEU/Ochamadas de
modificados on-line, estávamos dispostos a revisar e reescrever o sistema [9] e tanto o nome do Shell quanto suas
sistema e seu software quando novas ideias eram inventadas, funções gerais. razões de eficiência. Um esquema
descobertas ou sugeridas por outros. semelhante é usado porTENEX[10].

os aspectos deUNIXdiscutidos neste artigo exibem claramente


pelo menos as duas primeiras dessas considerações de projeto. A
interface para o sistema de arquivos, por exemplo, é 9. Estatísticas
extremamente conveniente do ponto de vista da programação. O
As seguintes estatísticas deUNIXsão apresentados para mostrar
nível de interface mais baixo possível é projetado para eliminar
a escala do sistema e para mostrar como um sistema dessa escala é
distinções entre os vários dispositivos e arquivos e entre acesso
usado. Aqueles de nossos usuários não envolvidos na preparação
direto e sequencial. Nenhuma grande rotina de "método de
de documentos tendem a usar o sistema para o desenvolvimento de
acesso" é necessária para isolar o programador das chamadas do
programas, especialmente o trabalho de idiomas. Existem poucos
sistema; na verdade, todos os programas de usuário chamam o
programas “aplicativos” importantes.
sistema diretamente ou usam um pequeno programa de biblioteca,
com apenas dezenas de instruções, que armazena em buffer
vários caracteres e os lê ou escreve todos de uma vez.

374 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974

Universidade da Califórnia em Berkeley de Volume 17


o ACM número 7
9.1 Geral Universidade da Califórnia em Berkeley

72 população de usuários
Máximo de 14 usuários simultâneos
300 diretórios
4400 arquivos

34.000 blocos de armazenamento secundário de 512 bytes usados

9.2 Por dia (24 horas por dia, 7 dias por semana)
Existe um processo de “segundo plano” que é executado com
a prioridade mais baixa possível; é usado para absorver qualquer
ociosidadeCPUtempo. Ele tem sido usado para produzir uma
aproximação de milhões de dígitos para a constantee–2, e agora
está gerando pseudoprimos compostos (base 2).

1800 comandos
4.3CPUhoras (além do plano de fundo)
70 horas de conexão
30 usuários diferentes
75 logins

9.3 Uso da CPU de comando (corte em 1%)

15,7% compilador C 1,7% Compilador Fortran


15,2% programas de usuários 1,6% remover arquivo

11,7% editor 1,6% arquivo de fita


5,8% Shell (usado como um 1,6% verificação de consistência do sistema de

comando, incluindo arquivos

tempos de mando) 1,4% mantenedor da biblioteca

5,3% xadrez 1,3% concatenar/imprimir arquivos

3,3% diretório de lista 1,3% paginar e imprimir arquivo

3,1% formatador de documentos 1,1% imprimir uso do disco

1,6% dumper reserva 1,0% copiar arquivo

1,8% montador

9.4 Acessos de comando (corte em 1%)

15,3% editor 1,6% depurador


9,6% diretório de lista 1,6% Shell (usado como um comando)

6,3% remover arquivo 1,5% imprime processos de lista de

6,3% compilador C 1,4% disponibilidade de disco executando

6,0% concatenar/imprimir arquivo 1,4% montador

6,0% programas de usuários 1,4% imprimir argumentos

3,3% listar pessoas logadas no 1,2% copiar arquivo

sistema 1,1% paginar e imprimir arquivo

3,2% renomear/mover arquivo 1,1% imprimir data/hora atual

3,1% status do arquivo 1,1% verificação de consistência do

1,8% mantenedor da biblioteca sistema de arquivos

1,8% formatador de documentos 1,0% arquivo de fita

1,6% executar outra com-


mando condicionalmente

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


deles são causados por dificuldades relacionadas ao hardware, como
quedas de energia e interrupções inexplicáveis do processador em
locais aleatórios. O restante são falhas de software. O tempo
ininterrupto mais longo foi de cerca de duas semanas. Chamadas de
serviço em média uma a cada três semanas, mas são fortemente
agrupadas. O tempo total de atividade foi de cerca de 98% de nossa
programação de 24 horas e 365 dias.

Agradecimentos. Agradecemos a RH Canaday,


LLCherry e LE McMahon por suas contribuições para
UNIX. Agradecemos especialmente a inventividade, as
críticas ponderadas e o apoio constante de R. Morris,
MD McIlroy e JF Ossanna.

Referências
1.Corporação de Equipamentos Digitais. Manual do processador PDP-
11/40, 1972 ePDP-Manual do processador 11/45. 1971.
2.Deutsch, LP e Lampson, BW Um editor online.com. ACM 10, 12
(dezembro de 1967) 793–799, 803.
3.Richards, M. BCPL: Uma ferramenta para escrita de compiladores e
programação de sistemas. Proc. AFIPS 1969 SJCC, vol. 34, AFIPS
Press, Montvale, NJ, pp. 557–566.
4.McClure, RM TMG—Um compilador direcionado à sintaxe.
Proc. ACM 20º Nat. Conf., ACM, 1965, Nova York, pp. 262–274.
5.Salão. AD O macroprocessador M6. Tecnologia de Ciência da
Computação. Rep. #2, Bell Telephone Laboratories, 1969.
6.Ritchie, manual de referência DM C. Memorando não
publicado, Bell Telephone Laboratories, 1973.
7.Aleph-nulo. Recreações de computador.Prática e experiência em
software 1, 2 (abril a junho de 1971), pp. 201–204.
8.Deutsch, LP e Lampson, BW SDS 930 manual de referência preliminar
do sistema de compartilhamento de tempo. Doc. 30.10.10, Projeto GENIE,
U of California em Berkeley, abril de 1965.
9.Feiertag. RJ, e Organick, EI O sistema de entrada-saída Multics.
Proc. Terceiro Simp. na Ópera. Sist. Princ., 18–20 de outubro de 1971,
ACM, Nova York, pp. 35–41.
10.Bobrow, DC, Burchfiel, JD, Murphy, DL e Tomlinson, RS
TENEX, um sistema de compartilhamento de tempo paginado
para o PDP-10.com. ACM 15, 3 (março de 1972) 135–143.

Comunicações julho de 1974

de Volume 17
o ACM número 7

Você também pode gostar