Você está na página 1de 11

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 CorporationPDP-7 e
-9 computadores. A segunda versão correu no desprotegidoPDP
-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,
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

Universidade da Califórnia em Berkeley de Volume 17


o ACM número 7
o software mencionado acima pode exigir apenas 50K próprios arquivos; ele também pode criar subdiretórios para conter
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 de não poder ser gravado por programas não privilegiados, de modo que o
cabeça móvel cada uma fornecendo 2,5M bytes em cartuchos de disco 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 qualquer
removível de 40M bytes pacotes. Há também um perfurador de leitor de fita 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 de partida para essas pesquisas geralmente é a raiz. Outro diretório do
dados 201 usada principalmente para impressão em spool para uma sistema contém todos os programas fornecidos para uso geral; ou
impressora de linha comum. Existem também vários 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 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

Universidade da Califórnia em Berkeley de Volume 17


o ACM número 7
estrutura e, mais importante, evitar a separação de em particular, nos diretórios raiz de todos os sistemas de
partes da hierarquia. Se links arbitrários para diretórios arquivos, removíveis ou não, o nome “..” refere-se ao próprio
fossem permitidos, seria muito difícil detectar quando a diretório em vez de seu pai.
última 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 ele é marcado com o usuárioEU IAde seu dono. Também fornecido para novos
lidos e gravados como arquivos de disco comuns, mas as solicitações de arquivos é um conjunto de sete bits de proteção. Seis deles especificam
leitura ou gravação resultam na ativação do dispositivo associado. Uma permissões de leitura, gravação e execução independentes para o
entrada para cada arquivo especial reside no diretório /desenvolvedor, proprietário do arquivo e para todos os outros usuários.
embora um link possa ser feito para um desses arquivos como um Se o sétimo bit estiver ativado, o sistema mudará
arquivo comum. Assim, por exemplo, para furar fita de papel, pode-se temporariamente a identificação do usuário atual para a do criador
escrever no arquivo /desenvolvedor/ppt. Existem arquivos especiais para do arquivo sempre que o arquivo for executado como um
cada linha de comunicação, cada disco, cada unidade de fita e para a programa. Essa mudança de usuárioEU IAsó é eficaz durante a
memória do núcleo físico. Obviamente, os discos ativos e o arquivo execução do programa que o solicita. O conjunto-usuário-EU IA
especial principal são 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
arquivo e dispositivoEU/Osão tão semelhantes quanto possível; nomes de um arquivo de contabilidade que não deve ser lido nem alterado, exceto
arquivos e dispositivos têm a mesma sintaxe e significado, de modo que um pelo próprio programa. Se o bit set-useridentification estiver ativado
programa que espera um nome de arquivo como parâmetro pode receber um para o programa, ele poderá acessar o arquivo, embora esse acesso
nome de dispositivo; finalmente, os arquivos especiais estão sujeitos ao possa ser proibido para outros programas invocados pelo usuário do
mesmo mecanismo de proteção que os arquivos comuns. programa em questão. Como o usuário realEU IAdo invocador de
qualquer programa está sempre disponível, set-user-EU IAos programas
3.4 Sistemas de arquivos removíveis podem tomar quaisquer medidas desejadas para se satisfazerem quanto
Embora a raiz do sistema de arquivos seja sempre armazenada no às credenciais de seus invocadores. Este mecanismo é usado para
mesmo dispositivo, não é necessário que toda a hierarquia do sistema permitir que os usuários executem os comandos cuidadosamente
de arquivos resida nesse dispositivo. Existe ummontarsolicitação do escritos que chamam as entradas privilegiadas do sistema. Por exemplo,
sistema que tem dois argumentos: o nome de um arquivo comum existe uma entrada de sistema que pode ser invocada apenas pelo
existente e o nome de um arquivo especial de acesso direto cujo volume “superusuário” (abaixo) que cria um diretório vazio. Conforme indicado
de armazenamento associado (por exemplo, pacote de disco) deve ter a acima, espera-se que os diretórios tenham entradas para “.” e "..". O
estrutura de um sistema de arquivos independente contendo sua comando que cria um diretório pertence ao superusuário e tem o
própria hierarquia de diretórios. O efeito demontaré fazer com que as conjunto-usuário-EU IAconjunto de bits. Depois de verificar a autorização
referências ao arquivo até então comum se refiram ao diretório raiz do de seu invocador para criar o diretório especificado, ele o cria e faz as
sistema de arquivos no volume removível. Com efeito,montarsubstitui entradas para “.” e "..".
uma folha da árvore hierárquica (o arquivo comum) por uma subárvore
totalmente nova (a hierarquia armazenada no volume removível). Depois Como qualquer um pode definir o set-user-EU IAbit em um de
de montar, praticamente não há distinção entre arquivos no volume seus próprios arquivos, esse mecanismo geralmente está disponível
removível e aqueles no sistema de arquivos permanente. Em nossa sem intervenção administrativa. Por exemplo, este esquema de
instalação, por exemplo, o diretório raiz reside no disco de cabeça fixa e proteção resolve facilmente oMOOproblema contábil proposto em
a unidade de disco grande, que contém os arquivos do usuário, é [7].
montada pelo programa de inicialização do sistema, as quatro unidades O sistema reconhece um determinado usuárioEU IA(o do
de disco menores estão disponíveis para os usuários montarem suas “superusuário”) como isento das restrições usuais de acesso aos
próprias pacotes de disco. Um sistema de arquivos montável é gerado arquivos; assim (por exemplo) os programas podem ser escritos
escrevendo em seu arquivo especial correspondente. Um programa para despejar e recarregar o sistema de arquivos sem interferência
utilitário está disponível para criar um sistema de arquivos vazio ou indesejada do sistema de proteção.
pode-se simplesmente copiar um sistema de arquivos existente.
3.6EU/Ochamadas

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

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 um Atécontarbytes são transmitidos entre o arquivo especificado por
arquivo é necessária ou possível. arquivare a matriz de bytes especificada poramortecedor. O valor
Para ilustrar o essencial deEU/OemUNIX, Algumas das chamadas retornadoné o número de bytes realmente transmitidos. No escrever
básicas são resumidas abaixo em uma linguagem anônima que caso,né o mesmo quecontarexceto em condições excepcionais comoEU/
indicará os parâmetros necessários sem entrar nas complexidades Oerros ou fim de suporte físico em arquivos especiais; em uma leitura,
da programação em linguagem de máquina. Cada chamada ao no entanto,npode sem erro ser menor quecontar. Se o ponteiro de
sistema pode potencialmente resultar em um retorno de erro, que leitura estiver tão próximo do final do arquivo que a leitura de caracteres
para simplificar não é representado na sequência de chamada. de contagem causaria uma leitura além do final, apenas os bytes
suficientes serão transmitidos para alcançar o final do arquivo; além
Para ler ou escrever um arquivo que já existe, ele deve ser disso, dispositivos semelhantes a máquinas de escrever nunca retornam
aberto pela seguinte chamada: mais de uma linha de entrada. Quando umlerchamada retorna comn
igual a zero, indica o fim do arquivo. Para arquivos de disco, isso ocorre
filep = aberto (nome, sinalizador)
quando o ponteiro de leitura se torna igual ao tamanho atual do
Nomeindica o nome do arquivo. Um nome de caminho arbitrário arquivo. É possível gerar um fim de arquivo de uma máquina de escrever
pode ser fornecido. ObandeiraO argumento indica se o arquivo usando uma sequência de escape que depende do dispositivo usado.
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 arquivo
subseqüentes para ler, gravar ou manipulá-lo de outra forma. 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
antigo, existe umcriarchamada de sistema que cria o arquivo fornecido, o ponteiro de leitura ou gravação para o local apropriado no arquivo.
se ele não existir, ou trunca-o para comprimento zero, se existir. Criar
também abre o novo arquivo para escrita e, comoabrir, retorna um
location = seek(filep, base, offset)
descritor de arquivo.
Não há bloqueios visíveis ao usuário no sistema de arquivos, nem O ponteiro associado aarquivaré movido para uma posição
há qualquer restrição sobre o número de usuários que podem ter um desviobytes do início do arquivo, da posição atual do ponteiro
arquivo aberto para leitura ou gravação; embora seja possível que o ou do final do arquivo, dependendobase.Desviopode ser
conteúdo de um arquivo fique embaralhado quando dois usuários negativo. Para alguns dispositivos (por exemplo, fita de papel e
escrevem nele simultaneamente, na prática, as dificuldades não surgem. máquinas de escrever), as chamadas de busca são ignoradas. O
Entendemos que bloqueios não são necessários nem suficientes, em deslocamento real desde o início do arquivo para o qual o
nosso ambiente, para evitar interferências entre usuários de um mesmo ponteiro foi movido é retornado emlocalização.
arquivo. Eles são desnecessários porque não nos deparamos com 3.6.1 OutrosEU/OChamadas.Existem vários sistemas adicionais
grandes bancos de dados de arquivo único mantidos por processos dez entradas relacionadas comEU/Oe com o sistema de arquivos que não
independentes. Eles são insuficientes porque bloqueios no sentido será discutido. Por exemplo: feche um arquivo, obtenha o status de um
comum, por meio dos quais um usuário é impedido de escrever em um arquivo, altere o modo de proteção ou o proprietário de um arquivo, crie
arquivo que outro usuário está lendo, não podem evitar confusão um diretório, crie um link para um arquivo existente, exclua um arquivo.
quando, por exemplo, ambos os usuários estão 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 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

Universidade da Califórnia em Berkeley de Volume 17


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

5. Processos e Imagens em vez de um arquivo comum, está envolvido.


Embora a comunicação entre processos via pipes seja uma
Umimagemé um ambiente de execução de computador. Ele inclui ferramenta bastante valiosa (ver §6.2), não é um mecanismo
uma imagem principal, valores gerais de registro, status de arquivos completamente geral, pois o pipe deve ser configurado por um
abertos, diretório atual e assim por diante. Uma imagem é o estado ancestral comum dos processos envolvidos.
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 imagem Outra primitiva importante do sistema é invocada por
deve residir no núcleo; durante a execução de outros processos, ele
execute(arquivo, arg1, argumento2, ..., argumenton)
permanece no núcleo, a menos que o aparecimento de um
processo ativo de prioridade mais alta o force a ser trocado para o que solicita ao sistema que leia e execute o programa nomeado
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
para que o programa possa determinar o nome pelo qual foi invocado.
no espaço de endereço virtual. Durante a execução, esse segmento é
Todo o código e dados no processo usandoexecutaré substituído do
protegido contra gravação e uma única cópia dele é compartilhada entre
arquivo, mas os arquivos abertos, o diretório atual e os relacionamentos
todos os processos que executam o mesmo programa. No primeiro
entre processos permanecem inalterados. Somente se a chamada falhar,
limite de 8 Kbytes acima do segmento de texto do programa no espaço
por exemplo porquearquivonão pôde ser encontrado ou porque seu bit
de endereço virtual começa um segmento de dados gravável não
de permissão de execução não foi definido, ocorre um retorno do
compartilhado, cujo tamanho pode ser estendido por uma chamada do
executarprimitivo; assemelha-se a uma instrução de máquina de “salto”
sistema. Começando no endereço mais alto no espaço de endereço
em vez de uma chamada de sub-rotina.
virtual está um segmento de pilha, que 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 operação, processid = espera ( )

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,

dogarfo, enquanto na criança, o controle é passado para o local


sair (estado)
rótulo. Oprocessiddevolvido 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 não arquivos abertos e geralmente os oblitera. Quando o pai é
são os mesmos, cada imagem existente após umgarfopode notificado através doespereprimitivo, o indicadostatusestá
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

370 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
também pode terminar como resultado de várias ações ilegais ou sinais cria um arquivo chamadoláe coloca a listagem lá. Assim,
gerados pelo usuário (§7 abaixo). 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 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

Universidade da Califórnia em Berkeley de Volume 17


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. Os comparações de strings de caracteres ou na existência de determinados
comandos não precisam estar em linhas diferentes; em vez disso, arquivos e realizar transferências de controle dentro de sequências de
eles podem ser separados por ponto e vírgula. comando arquivadas.

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

mv a.out testprog 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 nomes
Omvcomando faz com que o arquivoa.foraser renomeado reais dos arquivos que são sua própria entrada e saída padrão, pois
testprog.a.foraé a saída (binária) do montador, pronta para ser nunca precisa reabri-los.
executada. Assim, se as três linhas acima forem digitadas no
console,fonteseria montado, o programa resultante chamado Os filtros são extensões diretas do padrãoEU/O
testprog, etestprogexecutado. Quando as linhas estão em redirecionamento com pipes usados em vez de arquivos.
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 comandos umaespere, então lê outra linha de comando.) A única coisa
sequencialmente. que causa o encerramento do Shell é descobrir uma condição
O Shell possui recursos adicionais, incluindo a capacidade de
de fim 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 é

372 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
quando o Shell é executado como um comando com um determinado arquivo de entrada, usado em vez do Shell. Assim, ao efetuar login, os usuários do sistema
como em de edição estão dentro do editor e podem começar a trabalhar
imediatamente; também, eles podem ser impedidos de invocarUNIX
sh〈comfile
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-tactoe
instância do Shell, oespereexecutado neste último retornará 3D) disponíveis noUNIXilustram um ambiente muito mais
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 que
As instâncias do Shell nas quais os usuários digitam comandos fazem login como jogador de um dos jogos ficam limitadas ao
são filhas de outro processo. A última etapa da inicialização doUNIXé jogo e incapazes de investigar as ofertas presumivelmente mais
a criação de um único processo e a invocação (viaexecutar) de um 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 OPDPO hardware -11 detecta várias falhas de programa, como
da máquina de escrever receberá o descritor de arquivo 0 e o referências a memória inexistente, instruções não implementadas e
descritor de arquivo de impressora 1. Cada processo digita uma endereços ímpares usados onde um endereço par é necessário.
mensagem solicitando que o usuário faça login e aguarde, lendo a Essas falhas fazem com que o processador trafegue para uma
máquina de escrever, uma resposta. No início, ninguém está rotina do sistema. Quando uma ação ilegal é detectada, a menos
logado, então cada processo simplesmente trava. Finalmente que outras providências tenham sido tomadas, o sistema encerra o
alguém digita seu nome ou outra identificação. A instância processo e grava a imagem do usuário no arquivoessencialno
apropriada deiniciaracorda, recebe a linha de login e lê um arquivo diretório atual. Um depurador pode ser usado para determinar o
de senha. Se o nome de usuário for encontrado e ele for capaz de estado do programa no momento da falha.
fornecer a senha correta,iniciaralterações no diretório atual padrão Programas que estão em loop, que produzem saída indesejada ou
do usuário, define o usuário do processo sobre os quais o usuário tem dúvidas podem ser interrompidos pelo uso
EU IAao da pessoa que fez o login e executa umaexecutar da dointerrompersinal, que é gerado digitando o caractere “delete”. A
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 de
espere. Se um dos processos filho for encerrado, seja porque um Shell 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 processo examinada sem pré-arranjo.
extinto, que por sua vez reabre os arquivos de entrada e saída As falhas geradas por hardware e os sinais de interrupção e saída
apropriados e digita outra mensagem de login. Assim, um usuário pode podem, por solicitação, ser ignorados ou capturados pelo processo. Por
efetuar logout simplesmente digitando a sequência de fim de arquivo no exemplo, o Shell ignora os encerramentos para evitar que um
lugar de um comando para o Shell. encerramento 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
6.7 Outros Programas como Shell impressões longas sem perder o trabalho em andamento (o editor
O Shell, conforme descrito acima, foi projetado para permitir aos manipula uma cópia do arquivo que está editando). Em sistemas sem
usuários acesso total às facilidades do sistema, uma vez que invocará a hardware de ponto flutuante, as instruções não implementadas são
execução de qualquer programa com o modo de proteção apropriado. capturadas e as instruções de ponto 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 para
8. Perspectiva
interpretar as linhas de comando. A entrada do usuário no arquivo de
senha do bloco pode conter o nome de um programa a ser invocado Talvez paradoxalmente, o sucesso deUNIXdeve-se em grande
após o login, em vez do Shell. Este programa é livre para interpretar as parte ao fato de não ter sido projetado para atender a nenhum
mensagens do usuário da maneira que desejar. objetivo predefinido. A primeira versão foi escrita quando um de
Por exemplo, as entradas do arquivo de senha para usuários de um nós (Thompson), insatisfeito com o computador disponível
sistema de edição de secretariado especificam que o editoredé para ser

373 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
instalações, descobriu um sistema pouco utilizadoPDP-7 e partiu Outro aspecto importante da conveniência da programação é
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 justificar outras chamadas do sistema. De um modo geral, o conteúdo do
a aquisição doPDP-11/20, especificamente para suportar um espaço de endereço de um programa é propriedade do programa e
sistema de edição e formatação de texto. Então, por sua vez, o tentamos evitar colocar restrições nas estruturas de dados dentro
11/20 foi superado,UNIXprovou ser útil o suficiente para desse espaço de endereço.
persuadir a administração a investir noPDP-11/45. Nossos Dado o requisito de que todos os programas possam ser
objetivos ao longo do esforço, quando articulados, sempre se usados com qualquer arquivo ou dispositivo como entrada ou
preocuparam em construir um relacionamento confortável com saída, também é desejável, do ponto de vista da eficiência de
a máquina e em explorar ideias e invenções em sistemas espaço, inserir considerações dependentes do dispositivo no
operacionais. Não nos deparamos com a necessidade de próprio sistema operacional. As únicas alternativas parecem ser
satisfazer os requisitos de outra pessoa, e por essa liberdade carregar rotinas para lidar com cada dispositivo com todos os
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 sobrecarga
Primeiro, como somos programadores, naturalmente ou em hardware.
projetamos o sistema para facilitar a escrita, o teste e a execução de Da mesma forma, o esquema de controle de processo e a interface
programas. A expressão mais importante do nosso desejo de de comando provaram ser convenientes e eficientes. Uma vez que o
conveniência de programação foi que o sistema foi organizado para Shell opera como um programa de usuário comum e trocável, ele não
uso interativo, embora a versão original suportasse apenas um consome nenhum espaço conectado no sistema propriamente dito e
usuário. Acreditamos que um sistema interativo projetado pode ser tão poderoso quanto desejado a um custo baixo, em particular,
adequadamente é muito mais produtivo e satisfatório de usar do dada a estrutura na qual o Shell é executado como um processo que
que um sistema “batch”. Além disso, tal sistema é facilmente gera outros processos para executar comandos, as noções deEU/O
adaptável ao uso não interativo, enquanto o inverso não é redirecionamento, processos em segundo plano, arquivos de comando e
verdadeiro. interfaces de sistema selecionáveis pelo usuário tornam-se
Em segundo lugar, sempre houve restrições de tamanho 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. Ogarfooperação, essencialmente como a
Se os projetistas de um sistema são forçados a usá-lo, eles implementamos, estava presente no sistema de
rapidamente se conscientizam de suas deficiências funcionais e compartilhamento de tempo de Berkeley [8]. Em
superficiais e são fortemente motivados a corrigi-los antes que seja vários pontos fomos influenciados pelo Multics, que
tarde demais. Como todos os programas-fonte estavam sempre sugeria a forma particular doEU/Ochamadas de
disponíveis e facilmente modificados on-line, estávamos dispostos a sistema [9] e tanto o nome do Shell quanto suas
revisar e reescrever o sistema e seu software quando novas ideias funções gerais. razões de eficiência. Um esquema
eram inventadas, 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, é extremamente 9. Estatísticas
conveniente do ponto de vista da programação. O nível de interface
As seguintes estatísticas deUNIXsão apresentados para mostrar a
mais baixo possível é projetado para eliminar distinções entre os
escala do sistema e para mostrar como um sistema dessa escala é
vários dispositivos e arquivos e entre acesso direto e sequencial.
usado. Aqueles de nossos usuários não envolvidos na preparação de
Nenhuma grande rotina de "método de acesso" é necessária para
documentos tendem a usar o sistema para o desenvolvimento de
isolar o programador das chamadas do sistema; na verdade, todos
programas, especialmente o trabalho de idiomas. Existem poucos
os programas de usuário chamam o sistema diretamente ou usam
programas “aplicativos” importantes.
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 deles são causados por dificuldades relacionadas ao hardware, como
quedas de energia e interrupções inexplicáveis do processador em
72 população de usuários
locais aleatórios. O restante são falhas de software. O tempo
Máximo de 14 usuários simultâneos
ininterrupto mais longo foi de cerca de duas semanas. Chamadas de
300 diretórios
serviço em média uma a cada três semanas, mas são fortemente
4400 arquivos

34.000 blocos de armazenamento secundário de 512 bytes usados


agrupadas. O tempo total de atividade foi de cerca de 98% de nossa
programação de 24 horas e 365 dias.
9.2 Por dia (24 horas por dia, 7 dias por semana)
Existe um processo de “segundo plano” que é executado com a Agradecimentos. Agradecemos a RH Canaday,
prioridade mais baixa possível; é usado para absorver qualquer LL Cherry e LE McMahon por suas contribuições para
ociosidadeCPUtempo. Ele tem sido usado para produzir uma UNIX. Agradecemos especialmente a inventividade, as
aproximação de milhões de dígitos para a constantee–2, e agora está críticas ponderadas e o apoio constante de R. Morris,
gerando pseudoprimos compostos (base 2). MD McIlroy e JF Ossanna.
1800 comandos
4.3CPUhoras (além do plano de fundo) 70 Referências
horas de conexão 1.Corporação de Equipamentos Digitais. Manual do processador
30 usuários diferentes
PDP-11/40, 1972 ePDP-Manual do processador 11/45. 1971.
75 logins 2.Deutsch, LP e Lampson, BW Um editor online.com. ACM 10, 12
(dezembro de 1967) 793–799, 803.
9.3 Uso da CPU de comando (corte em 1%) 3.Richards, M. BCPL: Uma ferramenta para escrita de compiladores e
programação de sistemas. Proc. AFIPS 1969 SJCC, vol. 34, AFIPS Press,
15,7% compilador C 1,7% Compilador Fortran
Montvale, NJ, pp. 557–566.
15,2% programas de usuários 1,6% remover arquivo
4.McClure, RM TMG—Um compilador direcionado à sintaxe.
11,7% editor 1,6% arquivo de fita
Proc. ACM 20º Nat. Conf., ACM, 1965, Nova York, pp. 262–274.
5,8% Shell (usado como um 1,6% verificação de consistência do sistema de
5.Salão. AD O macroprocessador M6. Tecnologia de Ciência da
comando, incluindo arquivos

tempos de mando) 1,4% mantenedor da biblioteca


Computação. Rep. #2, Bell Telephone Laboratories, 1969.
5,3% xadrez 1,3% concatenar/imprimir arquivos 6.Ritchie, manual de referência DM C. Memorando
3,3% diretório de lista 1,3% paginar e imprimir arquivo não publicado, Bell Telephone Laboratories, 1973.
3,1% formatador de documentos 1,1% imprimir uso do disco 7.Aleph-nulo. Recreações de computador.Prática e experiência em
1,6% dumper reserva 1,0% copiar arquivo software 1, 2 (abril a junho de 1971), pp. 201–204.
1,8% montador 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,
9.4 Acessos de comando (corte em 1%) U of California em Berkeley, abril de 1965.
9.Feiertag. RJ, e Organick, EI O sistema de entrada-saída Multics. Proc.
15,3% editor 1,6% depurador Terceiro Simp. na Ópera. Sist. Princ., 18–20 de outubro de 1971, ACM,
9,6% diretório de lista 1,6% Shell (usado como um comando)
Nova York, pp. 35–41.
6,3% remover arquivo 1,5% imprime processos de lista de
10.Bobrow, DC, Burchfiel, JD, Murphy, DL e Tomlinson, RS TENEX,
6,3% compilador C 1,4% disponibilidade de disco executando
um sistema de compartilhamento de tempo paginado para o
6,0% concatenar/imprimir arquivo 1,4% montador
6,0% programas de usuários 1,4% imprimir argumentos
PDP-10.com. ACM 15, 3 (março de 1972) 135–143.
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 Comunicações julho de 1974

Universidade da Califórnia em Berkeley de Volume 17


o ACM número 7

Você também pode gostar