Escolar Documentos
Profissional Documentos
Cultura Documentos
com
1. Introdução
O tempo UNIX- 11/40 e /45 [l] por ser mais moderno e muitas das diferenças entre
ele e os mais antigosUNIXos sistemas resultam do redesenho de
recursos considerados deficientes ou ausentes.
Sistema de Compartilhamento
DesdePDP-11UNIXentrou em operação em fevereiro de 1971, 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
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
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)
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
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
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
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á
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
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
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].
374 Versão eletrônica recriada por Eric A. Brewer Comunicações julho de 1974
72 população de usuários
Máximo de 14 usuários simultâneos
300 diretórios
4400 arquivos
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
1,8% montador
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
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.
de Volume 17
o ACM número 7