Você está na página 1de 58

Machine Translated by Google

UNIVERSIDADE NACIONAL AUTÔNOMA DO MÉXICO Dr.


José Narro Robles Reitor Dr. Eduardo
Bárzana García Secretário Geral
Eng. Leopoldo Silva Gutiérrez Secretário
Administrativo Dr. Estela Morales Campos
Coordenadora de Humanidades

INSTITUTO DE PESQUISA ECONÔMICA Dra. Verónica


Villarespe Reyes Diretora Mtra. Berenice
Ramírez López Secretária
Acadêmica Aristeo Tovías García

Secretário técnico
Maria Soledad Simon Pinero
Chefe do Departamento Editorial

FACULDADE DE ENGENHARIA
Dr. Carlos Agustín Escalante Sandoval
Diretor
Eng. Gonzalo López de Haro
Secretário Geral Dr.
Boris Escalante Ramírez
Chefe da Divisão de Engenharia Elétrica
Mtra. María Cuairán Ruidíaz Chefe
da Unidade de Apoio Editorial
Machine Translated by Google

Capítulo 1

Ponto de partida

1.1. O que é um Sistema Operativo?


O sistema operacional é o principal programa que roda em qualquer
computador de uso geral.
Existem todos os tipos deles, de muito simples a terrivelmente complexos, e
quanto mais casos de uso houver para computação na vida cotidiana, mais
variedade haverá neles.
Ao longo deste texto, não há referência ao sistema operacional como visto ou
usado pelo usuário final, ou como vendido pelo marketing — o ambiente gráfico,
os programas que rodam nele, as linguagens de programação em que são
desenvolvidos e o que pode mais facilmente desenvolvido para eles, e até mesmo
o conjunto básico de funções que as bibliotecas básicas oferecem são
principalmente clientes do sistema operacional — eles rodam em cima dele e
oferecem suas interfaces aos usuários (incluindo, é claro, desenvolvedores).
A diferença de uso são apenas – na melhor das hipóteses – consequências do
design de um sistema operacional. Além disso, com o mesmo sistema operacional
– como você pode ver comparando duas distribuições Linux, ou mesmo a forma
como dois usuários trabalham no mesmo computador – é possível ter ambientes
operacionais completamente diferentes.

1.1.1. Por que estudar sistemas operacionais?


A importância de estudar este tópico está não só em entender os mecanismos
utilizados pelos sistemas operacionais para realizar suas tarefas, mas também em
entendê-los para evitar os erros mais comuns na programação, que podem resultar
de baixo desempenho até perda de informações.
Como desenvolvedores, entendam o funcionamento básico dos sistemas
operacionais e as principais alternativas que eles oferecem em muitos de seus
pontos, ou saibam projetar algoritmos e processos que melhor se adequem ao sistema

17
Machine Translated by Google

18 CAPÍTULO 1. PONTO DE PARTIDA

em que serão executados, pode resultar em uma diferença qualitativa decisiva no


produto final.
Parte das tarefas diárias dos administradores de sistemas inclui lidar com
situações de baixo desempenho, conflitos entre aplicativos,
atrasos na execução, etc. Para fazer isso, é essencial entender o que está
acontecendo nos bastidores. Os sistemas de arquivos são
área de interesse especial para administradores de sistema: como comparar o
virtudes e desvantagens de tantos sistemas existentes, por que pode ser
conveniente misturar sistemas diferentes no mesmo servidor, como evitar
corrupção ou perda de informações? Além do mais, como recuperar informações de
um disco danificado?
Na área de segurança informática, a relação é óbvia. Desde o
Do ponto de vista do invasor, se você estiver interessado em localizar vulnerabilidades
que permitam elevar seu nível de privilégio, como poderia fazê-lo sem entender como
Como os vários componentes de um sistema se mesclam? O número de tarefas
que um sistema operacional deve cobrir é enorme, e você verá exemplos de lugares
onde esse invasor pode concentrar suas energias. Da mesma forma, para
quem procura defender um sistema (ou uma rede), é fundamental compreender
quais são os vetores de ataque mais comuns e –novamente– a relação entre os
componentes envolvidos para remediar ou, melhor ainda, prevenir
esses ataques.
E, claro, o mundo em geral, fora do ambiente computacional, pode ser visto como
uma série de modelos interativos. Muitos dos métodos e alguns ritmos discutidos
neste trabalho podem ser usados fora do ambiente da
Cálculo; uma vez que os problemas de concorrência, competição por recursos ou
proteção e separação tenham sido resolvidos no
campo de sistemas operacionais, essas soluções podem ser extrapoladas para
outros campos.
A estrada à frente é longa e pode ser interessante e divertida.

1.2. Funções e objetivos do sistema operacional


O sistema operacional é o único programa que interage diretamente com
o hardware do computador. Suas funções primárias são:

Os Programas de Abstração não devem se preocupar com os detalhes de


acesso ao hardware ou a configuração específica de um computador.
O sistema operacional é responsável por fornecer uma série de abstrações
para que os programadores possam se concentrar em resolver as necessidades
particulares de seus usuários. Um exemplo dessas abstrações
é que as informações estão organizadas em arquivos e diretórios (em um ou
muitos dispositivos de armazenamento).
Machine Translated by Google

1.3. EVOLUÇÃO DOS SISTEMAS OPERACIONAIS 19

Gerenciamento de recursos Um sistema computacional pode ter uma grande quantidade de


recursos à sua disposição (memória, espaço de armazenamento, tempo de
processamento, etc.)
correr nele competir por eles. Ao gerenciar toda a alocação de recursos, o sistema
operacional pode implementar políticas que alocam recursos
de forma eficaz e de acordo com as necessidades estabelecidas para o referido sistema.

Isolamento Em um sistema multiusuário e multitarefa, cada processo e cada


o usuário não terá que se preocupar com outros usando o mesmo sistema - Idealmente,
sua experiência será a mesma como se o sistema
foi exclusivamente dedicado à sua atenção (mesmo que fosse um sistema menos
poderoso).

Para implementar corretamente as funções de isolamento, é necessário


que o sistema operacional usa hardware específico para tal proteção.

1.3. Evolução dos sistemas operacionais


Não se pode começar a abordar o assunto dos sistemas operacionais sem revisar
brevemente seu desenvolvimento histórico. Isso não só nos permitirá entender por que
quais certas características e padrões de design estavam aparecendo que
ainda estão em uso décadas depois, mas (como é particularmente
bem exemplificado no discurso de aceitação do Prêmio Turing de Fernando
Corbató, Sobre a construção de sistemas que falharão, (Corbató 2007)), adaptar um sistema
a um ambiente em mudança, por mais bem projetado que seja, quase inevitavelmente leva à
abertura de espaços para comportamentos imprevistos
— o espaço mais propício para o florescimento dos fracassos. Conheça os fatores
que motivaram os diferentes desenvolvimentos podem ajudar a antecipar e prevenir
problemas.

1.3.1. Processamento em lote


Os antecedentes do que hoje é conhecido como sistema operacional podem
pode ser encontrada na automatização inicial do processamento de diferentes programas, que
surgiu nos primeiros centros de informática: quando surgiram os dispositivos de perfuração/
leitura de cartões de papel, na década de 1950,
o tempo que um computador ficou ocioso esperando que uma tarefa estivesse pronta (como
uma execução de cada tarefa foi chamada)
programa) para poder executá-lo diminuiu drasticamente à medida que os programadores
entregavam seus lotes de cartões perfurados aos operadores, que os alimentavam nos
dispositivos de leitura, que os carregavam
na memória em um período de tempo razoável, iniciar e monitorar a execução e
produziu os resultados.
Machine Translated by Google

vinte CAPÍTULO 1. PONTO DE PARTIDA

Nesta época inicial, quando computadores especializados em tarefas


computacionalmente intensivas e dispositivos que interagiam com mídia externa eram
praticamente desconhecidos, o papel do sistema de monitoramento ou controle era
basicamente auxiliar o operador no carregamento dos programas e bibliotecas
necessários. , notificação de resultados e contabilidade dos recursos utilizados para a
cobrança.
Os sistemas de monitoramento tornaram-se mais sofisticados com a implementação
de proteções que impedem que outros trabalhos sejam corrompidos (por exemplo, emitir
erroneamente a instrução de leitura do próximo cartão faria com que o próximo trabalho
na fila perdesse seus primeiros caracteres, corrompendo-o e impedindo-o de ser
executado) ou de entrando em erro, um ciclo infinito, estabelecendo alarmes (timers)
que interromperiam a execução de um processo se este durasse além do tempo estipulado.
Esses monitores implicavam a modificação do hardware para considerar essas
características de segurança — e aí já podemos falar da característica básica de
gerenciamento de recursos que identifica os sistemas operacionais.
Deve-se acrescentar que o tempo de carregamento e configuração de uma tarefa
ainda representava uma parte significativa do tempo que o computador gastava
processando: um leitor de fita rápido processava na ordem de centenas de caracteres
por minuto, e apesar da relativa lentidão dos anos 1950 computadores para os padrões
de hoje (medidos por milhares de instruções por segundo, KHz, em vez de bilhões como
é hoje, GHz), esperar cinco ou dez minutos com o sistema completamente parado pela
carga de um programa moderadamente longo é claramente um desperdício.

1.3.2. Sistemas de lote com dispositivos de carregamento (carretel)

Uma melhoria natural neste último ponto foi a invenção do carretel: um mecanismo
de entrada/saída que permitia que um computador de propósito específico muito mais
barato e limitado lesse os cartões e os convertesse em fita magnética, um meio muito
necessário. pronto para o computador central carregar quando terminar o trabalho
anterior. Da mesma forma, o computador central salvaria seus resultados em fita para
equipamento especializado ler e imprimir para o usuário solicitante.

A palavra carretel (bobina) foi tomada como um acrônimo reverso para Simultaneous
Operações de Periféricos On-Line, operação simultânea de periféricos online.

1.3.3. Sistemas multiprogramados

Ao longo de sua execução, um programa normalmente passa por etapas com


características muito diferentes: durante um ciclo fortemente dedicado ao cálculo
numérico, o sistema opera limitado pela CPU (CPU-bound), enquanto ao ler
Machine Translated by Google

1.3. EVOLUÇÃO DOS SISTEMAS OPERACIONAIS vinte e um

ou gravar resultados em mídia externa (mesmo via spools) o limite é imposto pelos
dispositivos, ou seja, opera IO vinculado.
Os sistemas de escalonamento multitarefa ou multiprogramação buscavam maximizar
o tempo de uso efetivo do processador executando vários processos ao mesmo tempo.
mesmo tempo.
O hardware necessário mudou muito. Embora fosse esperado que cada
usuário fosse responsável pelo uso dos recursos, era necessário que a infraestrutura
de proteção de recursos aparecesse: um processo não deve sobrescrever o espaço de
memória de outro (nem o código nem os dados), muito menos
monitorar o espaço. Essa proteção está localizada na Unidade de Manejo da
Memory (MMU), presente em todos os computadores de uso genérico desde o
anos noventa.
Certos dispositivos requerem bloqueio para fornecer acesso exclusivo/exclusivo:
fitas e impressoras, por exemplo, são de acesso estritamente sequencial, e
se dois usuários tentassem usá-los ao mesmo tempo, o resultado para ambos seria
corromperia. Para esses dispositivos, o sistema deve implementar outros spools
e mecanismos de travamento.

1.3.4. sistemas de compartilhamento de tempo

A forma de interagir com os computadores mudou drasticamente


durante os anos sessenta, quando a multitarefa se espalhou para se tornar sistemas
interativos e multiusuários, bastante diferenciados dos anteriores pelo aparecimento de
terminais (primeiros teletipos seriais, depois
computadores com tela cheia como conhecido até hoje).
Em primeiro lugar, a tarefa de programação e depuração do código é
bastante simplificado por ser capaz de fazer o programador mudar diretamente e
colocar o programa em execução imediata. Em segundo lugar, o computador não
estaria mais simplesmente esperando que um programa ficasse pronto: enquanto um
programador estivesse editando ou compilando seu programa, o computador ainda estava
calcular quais outros processos são necessários.
Uma mudança fundamental entre a multiprogramação e o modelo de tempo
compartilhado é o tipo de controle sobre multitarefa (será visto em detalhes no
Capítulo 3).

Multitarefa cooperativa ou não preemptiva (multitarefa cooperativa). Foi implementado


por sistemas de multiprogramação: cada processo tinha o controle da
CPU até fazer uma chamada de sistema (ou indicar sua prontidão
cooperar através do chamado rendimento: ceder).
Um cálculo longo não foi interrompido pelo sistema operacional, portanto, um
erro do programador poderia congelar todo o computador.

Multitarefa preemptiva ou preemptiva . em sistemas


Machine Translated by Google

22 CAPÍTULO 1. PONTO DE PARTIDA

compartilhamento de tempo, o relógio do sistema interrompe periodicamente


os vários processos, transferindo forçosamente o controle de volta para o
sistema operativo. Ele pode então escolher outro processo para continuar
a execução.

Além disso, as abstrações nasceram de forma natural e gradual.


que são conhecidos hoje, como os conceitos de arquivos e diretórios, e o código
necessário para utilizá-los estava sendo enviado para as bibliotecas do sistema e,
cada vez mais (por causa de sua centralidade) em direção ao próprio núcleo do, agora sim, sistema
operativo.
Uma grande mudança entre sistemas multiprogramados e de tempo
compartilhado é que a velocidade de mudança de uma tarefa para outra é muito
mais rápido: embora em um sistema multiprogramado uma troca de contexto possa
ocorrer apenas quando a tarefa mudou de um modo de execução para outro, em
um sistema interativo, para dar a ilusão de uso exclusivo do computador,
o hardware periodicamente emitiu interrupções (sinais) para o sistema operacional
que disse para alterar o processo ativo (como um processo agora é chamado)
instância de um programa em execução).
Diferentes tipos de processo podem ter diferentes níveis de importância - seja
seja por serem mais relevantes para o funcionamento do próprio computador (processos
do sistema), por possuírem maior carga de interatividade (por
experiência do usuário) ou por várias categorias de usuários (sistemas com
contabilidade por tipo de atendimento). Isso requer a implementação de diferentes
prioridades para cada um deles.

1.4. E do lado dos computadores pessoais


Enquanto a discussão até agora assume um computador central
com operadores dedicados e múltiplos usuários, na década de 1970
começaram a aparecer computadores pessoais, sistemas que inicialmente eram
realmente reduzidos em desempenho e a um nível de preço que os colocava no
alcance, primeiro, dos amadores entusiastas e, depois, de qualquer
ra.

1.4.1. Primeiros Sistemas Entusiasta


Os primeiros computadores pessoais foram lançados sem sistemas operacionais ou
linguagens de programação; a interface primária para programar as teclas era através de
chaves (switches), e para receber seus resultados, elas eram utilizadas
bancos de LED . Claro, isso exigia conhecimento especializado, e a
os computadores pessoais ainda eram vistos apenas como brinquedos caros.
Machine Translated by Google

1.4. E DO LADO DOS COMPUTADORES PESSOAIS 23

Figura 1.1: O microcomputador Altair 8800, o primeiro computador pessoal


distribuído em massa, à venda a partir de 1975 (imagem da Wikipédia: Altair 8800).

1.4.2. A revolução de 8 bits

A verdadeira revolução veio quando, pouco tempo depois, computadores pessoais com
saída de vídeo (normalmente
por meio de uma televisão) e entrada por um teclado. esses computadores
popularizou a linguagem BASIC, projetada para usuários iniciantes na década de 1960, e
para permitir que os usuários gerenciem seus recursos (drives de fita,
tela posicionável, unidades de disco, impressoras, modem, etc.)
um software de sistema mínimo - novamente, um sistema operacional proto.

Figura 1.2: O Commodore Pet 2001, no mercado desde 1977, um dos primeiros
com intérprete BASIC (imagem da Wikipedia: Commodore PET).

1.4.3. O computador para fins “sérios”: a família PC

O surgimento de computadores pessoais “sérios”, voltados para o escritório


mais do que o hobby, no início dos anos oitenta (particularmente representado
pelo IBM PC, 1981), seus sistemas operacionais começaram a diferir daqueles
computadores anteriores separando o ambiente de desenvolvimento em alguma linguagem
de programação do ambiente de execução. O principal papel do sistema operacional antes do
usuário era gerenciar os arquivos das diversas aplicações através de um
Machine Translated by Google

24 CAPÍTULO 1. PONTO DE PARTIDA

interface de linha de comando simples e inicie os aplicativos que o usuário


selecionado.
O IBM PC foi a primeira arquitetura de computador pessoal em
desenvolver uma ampla família de clones, computadores compatíveis projetados
para trabalhar com o mesmo sistema operacional, e que eventualmente capturou
quase 100% do mercado. Praticamente todos os computadores desktop e
Os laptops no mercado hoje derivam da arquitetura do IBM PC.

Figura 1.3: O computador IBM PC Modelo 5150 (1981), pioneiro da arquitetura


predominantemente em uso até hoje (imagem da Wikipedia: IBM
Computador Pessoal).

Antes dos aplicativos, o sistema operacional (PC-DOS, nas versões distribuídas


diretamente pela IBM, ou o que se popularizou, o MS-DOS, no
clones) oferecia o conjunto familiar de interfaces e abstrações para gerenciar arquivos e
entrada/saída por meio de suas portas. Cabe ressaltar que,
Particularmente em seus primeiros anos, muitos programas rodavam diretamente no
hardware, inicializando a partir do BIOS e não usando o sistema.
operativo.

1.4.4. O impacto do ambiente gráfico (WIMP)


Em meados da década de 1980, os computadores com
interfaces gráficas de usuário (interfaces gráficas de usuário, textcguis) baseadas no
Paradigma WIMP (Windows, Icons, Menus, Pointer; Windows, Icons, Menus,
Prompter), o que permitiu a interação com vários programas ao mesmo tempo. Isso não
significa necessariamente que sejam sistemas multitarefas: por exemplo,
a primeira interface do macOS permitia visualizar várias janelas abertas simultaneamente,
mas apenas o processo ativo estava em execução.
Isso começou, no entanto, a aumentar inevitavelmente as necessidades de
concordância com os programadores. Programas não tinham mais acesso direto
Machine Translated by Google

1.4. E DO LADO DOS COMPUTADORES PESSOAIS 25

Figura 1.4: Apple Macintosh (1984), popularizou a interface gráfica do usuário (GUI)
(Imagem da Wikipedia: Macintosh).

à tela para manipular como quisesse, mas a uma abstração (a janela) que poderia variar suas
medidas, e que exigia que toda a saída fosse
estritamente por chamadas para bibliotecas de primitivas gráficas que
eles começaram a ser vistos como parte integrante do sistema operacional.
Além disso, os problemas de proteção e separação entre processos simultâneos
começaram a se tornar aparentes: os programadores agora tinham que
programação com a consciência de que compartilhariam recursos, com a limitação
(que não tinham nas máquinas profissionais) de não terem hardware especializado para essa
proteção. Processadores em uso comercial no
oitenta não lidava com anéis ou níveis de execução ou unidade de gerenciamento
memória (MMU), portanto, um programa mal-intencionado ou com falha pode corromper
o funcionamento completo do equipamento. E embora os ambientes mais bem-sucedidos
(Apple MacOS e Microsoft Windows) não implementassem a verdadeira multitarefa, eles o fizeram.
havia desde o início sistemas como o Commodore Amiga ou o Atari ST que
eles fizeram uma verdadeira multitarefa preventiva.
Naturalmente, dado o uso comum de um ambiente Windows, os programas que rodavam
sem exigir o carregamento do sistema operacional falhavam.
lentamente no esquecimento.

1.4.5. Convergência dos dois grandes mercados


Como CPUs com recursos suficientes apareceram no
mercado para oferecer a proteção e isolamento necessários (particularmente,
Machine Translated by Google

26 CAPÍTULO 1. PONTO DE PARTIDA

Figura 1.5: Commodore Amiga 500 (1987), o computador mais popular da


família Amiga, com amplos recursos multimídia e multitarefa preventiva; uma
verdadeira maravilha para a época (imagem da Wikipedia: Amiga).

Intel 80386 e Motorola 68030), a lacuna de funcionalidade entre computadores pessoais e


estações de trabalho e mainframes estava diminuindo.
No início da década de 1990, a maioria das arquiteturas alternativas de computador
estava cedendo às pressões do mercado e
Em meados da década, apenas duas arquiteturas principais permaneciam: o spinoff da IBM
e o spinoff do Apple Macintosh.
Os principais sistemas operacionais para ambas as plataformas estavam respondendo
aos novos recursos de hardware: nas IBMs, a presença de
Microsoft Windows (originalmente um ambiente operacional desde sua primeira edição em
1985, evoluindo para um sistema operacional completo rodando
em uma base MS-DOS em 1995) tornou-se predominante até que foi o
regra. O Windows deixou de ser um sistema meramente de seus próprios aplicativos e
que operou unicamente pela substituição do aplicativo ativo para ser um sistema
de multitarefa cooperativa e, por fim, um sistema que exigia proteção em
hardware (80386) e multitarefa preemptiva implementada.
A partir de 2003, o kernel do Windows mais usado foi substituído pelo desenvolvimento
feito do zero como um sistema operacional completo.
e não mais como um programa em MS-DOS: a nova tecnologia kernel (Windows NT), que,
sem quebrar a compatibilidade com as APIs históricas do Windows ,
oferecia uma estabilidade muito maior.
Do lado da Apple, a evolução foi muito paralela: diante de um sistema
já esgotado e obsoleto, o MacOS 9, em 2001 anunciou uma nova versão de seu
sistema operacional que na verdade foi um relançamento completo: o MacOS X é
um sistema baseado em um kernel Unix BSD, em cima do microkernel Mach.
E outro jogador importante que entrou em cena durante os anos noventa
era software livre, através de várias implementações diferentes de sistemas
do tipo Unix, principalmente Linux e os *BSDs (FreeBSD, NetBSD, OpenBSD).
Estes sistemas implementados, de forma colaborativa e sob um esquema de desenvolvimento,
Machine Translated by Google

1.5. DISPOSITIVOS MÓVEIS 27

Desenvolvimento geograficamente distribuído, software compatível com PCs e estações


de trabalho em grande escala, com alta confiabilidade e, finalmente, fechando a
divergência da árvore de desenvolvimento da computação em grandes e pequenos
ferros.
Até hoje, a arquitetura derivada da Intel (e o PC) é a clara vencedora desse processo
de 35 anos, tendo conquistado quase todos os casos de uso, incluindo máquinas Apple.
Hoje, a arquitetura Intel executa tudo, desde subportáteis a supercomputadores e data
centers; o sistema operacional específico varia de acordo com o uso, indo principalmente
para o Windows, com os diferentes Unixes concentrados nas máquinas servidoras.

Na frente de dispositivos embarcados (os menores computadores, de


microcontroladores a telefones e tablets), a arquitetura ARM é a norma, também em
versões específicas dos sistemas operacionais Unix e Windows (nessa ordem).

1.5. Dispositivos móveis


Nos últimos anos, grande parte do desenvolvimento no mundo da computação se
voltou para o modelo computacional representado, genericamente, por dispositivos
móveis. Dado o interesse que estas plataformas têm despertado, torna-se necessário
abordar a questão, ainda que seja mais para notar semelhanças do que diferenças com
os restantes equipamentos informáticos. Para isso, porém, é preciso primeiro abordar a
definição: o que é um dispositivo móvel, quais são os limites de sua definição, quais
fronteiras podem ser definidas?
É difícil encontrar limites claros e rígidos para o que esse conceito abrange; No
decorrer desta seção, as características dos computadores projetados não apenas no
nível do hardware, mas também no nível da interface do usuário, para que seu
proprietário os carregue consigo e os transforme em um assistente para suas atividades
diárias, para a organização de sua vida diária. Com base nessa definição, um smartphone
será tratado como um dispositivo móvel, mas um laptop não, pois sua interface é a
mesma de um computador padrão.

Claro que esta definição – reconhecidamente rápida e imperfeita – deixa uma grande
área cinzenta e permite alguma ambiguidade. Por exemplo, as versões mais recentes
de alguns ambientes de usuário (notadamente, a interface primária do Windows 8, ou
os ambientes GNOME e Unity do Linux) buscam unificar a experiência, incorporando
conceitos multitoque aos desktops e aproximando os casos de uso. . Tome, então,
essas diretrizes como meramente indicativas.

1.5.1. Revisão historica


Ter uma plataforma de computação móvel tem sido um dos desejos mais repetidos
da computação; já em 1975, antes do aparecimento de todos os sistemas
Machine Translated by Google

28 CAPÍTULO 1. PONTO DE PARTIDA

revisado na seção 1.4 (com exceção do Altair 8800) IBM lançou


seu primeiro laptop: o IBM 5100, pesando 25 kg e com tela de 5 polegadas (equivalente
a um grande celular hoje).
Esse computador teve um sucesso muito limitado em grande parte por causa de seu
preço: US$ 9.000 em sua configuração mais básica claramente o colocaram fora do mercado.
do alcance de mercado dos entusiastas da época, e o desconforto de
sua pequena tela levou o ambiente corporativo a preferir continuar usando o
minicomputadores com terminais padrão para a época.
Este mercado também registou uma convergência significativa, neste caso de
abaixo: a miniautorização vivida na década de 70 foi, afinal,
Alimentado pelo CPU Intel 4004 , projetado expressamente para calculadoras Busicom.
Naquela época, as calculadoras portáteis nasceram. Eles começaram implementando
apenas as operações aritméticas básicas, mas com
Com o tempo, surgiram calculadoras científicas, incluindo operações trigonométricas.
Em 1974, a Hewlett-Packard lançou o HP-65 .
Primeira calculadora de bolso totalmente programável.
Em 1984, já diante da franca popularização dos aplicativos de escritório,
a empresa britânica Psion lançou o Psion Organizer, que foi anunciado como o
primeiro computador de bolso prático do mundo: era vendido com relógio, calculadora,
banco de dados simples e cartuchos de expansão com aplicativos
exemplo (ciência, matemática e finanças), além de um ambiente de programação para o
usuário desenvolver suas próprias aplicações.

Figura 1.6: Psion Organizer, anunciado como o primeiro computador de bolso prático
do mundo em 1984. Na imagem, um aparelho de sua segunda geração (imagem
da Wikipedia: Organizador Psion).

O hardware do Organizer original era, é claro, muito limitado. com apenas 4


KB de ROM e 2 KB de memória não incluíam um sistema operacional, e o idioma de
programação disponível para o usuário era apenas um montador. Não ter
um sistema operacional significa que, em vez de fazer as chamadas de sistema
necessárias para realizar transferências (como você verá na Seção 2.7 e Cap. 7), o
programador teve que ir em frente e transferir byte por byte. Dois anos depois,
Machine Translated by Google

1.5. DISPOSITIVOS MÓVEIS 29

a segunda geração do Organizer foi lançada com sistema operacional


monotarefa e muito mais espaço de armazenamento. várias gerações
mais tarde, este sistema operacional é o que por volta de 1998 se tornou Symbian,
que foi o mercado de telefonia celular dominante durante a maior parte do
anos 2000.

Figura 1.7: Sharp ZQ-770, projetado em um dos formatos PDA (Personal


Digital Assistant) mais populares da década de 1990 (imagem da Wikipédia:
Sharp Wizard).

Seguindo os passos do Organizador, muitas outras empresas criaram


pequenos computadores com aproximadamente a mesma funcionalidade básica
(lista de contatos, notas e calendário) e interface do usuário, definindo o termo
Assistente Digital Pessoal ( PDA). Houve vários marcos
durante a década de 1990, embora a plataforma Palm se destaque em particular.
Esta foi a primeira plataforma de sucesso a incorporar uma interface
usuário de toque com escrita baseada no reconhecimento de letras (que foi traçada
por meio de uma caneta especial, ou stylus, na tela).
O próximo passo natural foi casar a funcionalidade do celular cada vez mais
popular com a do PDA. Desde 1996 os equipamentos são comercializados
oferecendo a funcionalidade integrada, e o termo smartphone foi usado pela primeira
vez em 1998. Como será visto na seção 1.5.2, o
O desafio de manter a sinalização estável fez com que muitos desses telefones
fossem uma espécie de Frankenstein, com duas personalidades distintas.
diferenciado.
Em 2007, a Apple lançou seu agora icônico iPhone. De um ponto de
tecnicamente, a principal inovação dessa equipe foi uma nova interface
gráfico chamado multitouch (multitouch), que permite ao usuário interagir
diretamente com os dedos (através de toques ou gestos mistos e não mais
exigindo uma caneta) e até mesmo inclinando o dispositivo. E embora ele
telefone em si não representou um salto nas capacidades de hardware, a Apple
conseguiu projetar uma interface inovadora – como já havia feito em 1984 com o
Macintosh – que rapidamente se tornou o padrão para todo um mercado.
Até o momento, praticamente todos os aparelhos do segmento
reconhecidos como móveis eram reconhecíveis por seu tamanho: quase todos os dispositivos
Machine Translated by Google

30 CAPÍTULO 1. PONTO DE PARTIDA

Figura 1.8: O iPhone da Apple introduziu a primeira interface de usuário multitoque


e despertou a popularidade dos smartphones – e com ela, a computação móvel
(imagem da Wikipédia: iPhone 2).

Os itens mencionados nesta seção são feitos para caber no bolso da camisa. No
entanto, os tablets devem ser adicionados a este segmento. A história de seu
desenvolvimento e adoção se assemelha à apresentada aqui para a interface do
smartphone (e até levada ao extremo): é possível encontrar antecedentes desde
1915,1 inúmeras descrições literárias na ficção científica em todo o mundo. do século
XX, e várias implementações funcionais desde o início dos anos 1990. No entanto,
os tablets pareciam destinados há anos a nunca conquistar o mercado, até 2010,
quando a Apple lançou um aparelho com a mesma interface de seu iPhone, mas do
tamanho de um laptop padrão.

Todos os sistemas disponíveis hoje, é claro, são muito mais complexos que o
Psion Organizer, e existem várias famílias de sistemas operacionais de uso comum;
Apenas alguns dos sistemas em uso serão descritos abaixo, de forma muito
grosseira. Nesta seção eles são listados apenas com suas informações gerais, e na
seção seguinte algumas de suas características técnicas são mencionadas.

iOS Sistema operacional da Apple, e projetado exclusivamente para hardware


produzido por essa empresa. Foi o primeiro a implementar a interface de
usuário multitoque e, em grande medida, pode ser visto como o responsável
pela explosão e universalização no uso de dispositivos móveis. Assim como o
sistema operacional que eles usam para seus computadores desktop, o MacOS
X, o iOS é baseado no kernel Darwin, derivado do FreeBSD, um sistema
gratuito semelhante ao Unix.

Android Projetado pela empresa Google, baseia a maior parte de sua operação em
software livre (um kernel Linux, uma máquina virtual Java e muitas das
bibliotecas de sistema comuns aos sistemas Linux), agregando um
1 O registro de patente 1 117 184 dos Estados Unidos (Goldberg 1914) refere-se a uma máquina
para reconhecer os caracteres escritos em uma página.
Machine Translated by Google

1.5. DISPOSITIVOS MÓVEIS 31

camada de serviço proprietária. A estratégia do Google foi inversa


ao da Apple: em vez de fabricar seus próprios dispositivos, concede licenças de
uso desse sistema operacional a praticamente todos os fabricantes de hardware,
com os quais a grande maioria dos modelos de dispositivos
smartphones e tablets rodam no Android.

Windows Phone A Microsoft oferece uma versão de seu sistema operacional


compatível com a API do Windows desktop, mas compilada para o processador
ARM. Este sistema operacional não conseguiu alcançar grande popularidade,
em claro contraste com sua dominação na computação tradicional.
Área de Trabalho; o principal fabricante que vende equipamentos Windows
Phone é a Nokia (que, depois de ter sido a principal empresa de telefonia,
foi adquirido pela própria Microsoft).

Symbian Embora este sistema operacional já esteja declarado como oficialmente


morto, seu efeito no desenvolvimento inicial do segmento foi fundamental e não
pode ser ignorado. Symbian foi a principal plataforma para
Nokia em seus dias de glória, assim como para muitos outros fabricantes.
Quase todas as empresas que costumavam operar com Symbian têm
mudou sua oferta para sistemas Android.

Firefox OS A fundação Mozilla, responsável pelo navegador Firefox (e herdeira do


histórico Netscape) tenta entrar no mercado móvel com
este sistema, baseado (como o Android) no kernel Linux, mas
orientado a oferecer uma interface de programação seguindo completamente
os padrões e linguagens para uso na Web. esta plataforma
faz uma aposta muito mais agressiva do que os outros para um esquema de
conexão permanente com a rede de dados.

1.5.2. Características diferenciais


Ficará claro pelos sistemas recém-introduzidos, bem como pela grande
maioria dos sistemas operacionais usados para dispositivos móveis, que
a diferenciação entre o segmento móvel e a computação tradicional não está no
próprio sistema operacional, mas em camadas mais altas. No entanto, a diferença
Vai muito além de uma mudança na interface do usuário; as características de
esses dispositivos, sem dúvida, determinam problemas subjacentes. Abaixo estão
algumas das características mais notáveis.

armazenamento de estado sólido

O primeiro recurso notável ao manusear um telefone ou tablet é


o que já não se faz com a noção de fragilidade que sempre acompanhou a
computação: os discos rígidos são dispositivos da mais alta precisão mecânica, e um
pequeno solavanco pode significar sua falha absoluta e definitiva. Os dispositivos
Machine Translated by Google

32 CAPÍTULO 1. PONTO DE PARTIDA

os celulares operam com armazenamento em estado sólido, ou seja, em


componentes eletrônicos sem partes móveis. A evolução e as características do
armazenamento em estado sólido serão abordadas na seção C.1.2.
Sendo principalmente orientados para este meio de armazenamento, em geral,
os sistemas operacionais móveis não utilizam memória virtual, tópico que será
abordado na seção 5.5. Eles não podem, portanto, continuar executando programas
que excedam o espaço de memória real disponível no sistema — e isso tem
importantes considerações de design.

Multitarefa, mas monocontexto

A forma de utilização dos computadores deu um salto qualitativo, tanto no


mundo corporativo na década de 1960 quanto no mundo pessoal no início da
década de 1990, com a introdução de sistemas com capacidade multitarefa (ver
seção 1.3.3). Os usuários se acostumaram a seus computadores fazendo muitas
coisas (aparentemente) ao mesmo tempo, e agora é uma expectativa comum poder
ter um número arbitrário, às vezes até excessivo, de programas em execução, na
medida em que praticamente usuários de computador médios bem reconhecer o
thrashing (que será descrito na Seção 5.5.5) a partir de seus sintomas.

A popularização da computação móvel levou, no entanto, a uma redução


acentuada nas expectativas de multitarefa. Isso principalmente por dois motivos; A
primeira é que, como os dispositivos móveis carecem de memória virtual, a memória
disponível torna-se novamente uma mercadoria escassa, e o sistema operacional é
forçado a limitar o número de processos interativos em execução.2
Essa distinção também pode ser explicada pelo padrão de uso desses
dispositivos: em comparação com as telas de desktop, onde as telas mais usadas
são de 17 polegadas,3 os telefones normalmente variam de 3,5 polegadas a 5
polegadas. Uma interface de usuário projetada para um tipo de tela pode não ser
satisfatória em outro.
As interfaces de usuário utilizadas pelos sistemas móveis abandonam o modelo
de interação WIMP apresentado na seção 1.4.4, bem como a metáfora do desktop,
para retornar à de um único programa visível a todo momento.
Buscando atender às necessidades de um mercado muito mais amplo e muito
menos versado nos detalhes da computação, todas essas interfaces vêm com
significativas simplificações. Um dos mais notórios é que os usuários
2Formalmente, não é o próprio sistema operacional, mas o software do sistema, que monitora
o uso e o desempenho e toma decisões em um nível superior. Em todas as plataformas
mencionadas, há uma forte distinção entre programas que operam como serviços e estão ativos
em segundo plano e aqueles que operam em primeiro plano, com interface gráfica e interação
direta com o usuário.
3A medida mais comum para telas são polegadas medidas na diagonal. Depois de muitos
anos, quando a proporção de dimensão vertical para horizontal ou proporção de tela era de 3:4,
esse formato foi gradualmente substituído por 9:16, de modo que a medida em polegadas sozinha
agora carrega um fardo de ambiguidade.
Machine Translated by Google

1.5. DISPOSITIVOS MÓVEIS 33

eles não solicitam mais o encerramento de um programa: os programas são lançados


(e usados um a um) e, se couberem na memória, são mantidos abertos
para evitar atrasos na reinicialização. O sistema define políticas por
pelo qual esses programas serão encerrados e evacuados da memória ao atingir
certos limites.

Consumo elétrico

Uma das áreas mais visíveis tem sido o desenvolvimento qualitativo durante
últimos anos é a otimização do consumo elétrico do
Cálculo. E embora a importância de economizar eletricidade no
escritórios e data centers, onde o trabalho diário depende cada vez mais da
informática, a importância de popularizar o
laptops. E adicionando alguns padrões particulares a esses
dispositivos, a popularização da computação móvel levou a uma verdadeira
revolução nesse sentido.
A economia de consumo de energia elétrica tem duas vertentes principais: por
um lado, o desenvolvimento de hardware mais eficiente energeticamente,
independentemente da forma como opera e, por outro, a criação de mecanismos através de
dos quais um computador pode detectar mudanças no padrão de
atividade (ou o operador pode indicar uma mudança na resposta esperada),
e reage reduzindo sua demanda (que normalmente é obtida pela redução da
velocidade de determinados componentes do equipamento).
O primeiro esquema de economia de energia amplamente apoiado, tanto por
de hardware de vários fabricantes, bem como de praticamente todos os sistemas
sistemas operacionais amplamente utilizados, foi APM (Advanced Power
Management). Depois de algum tempo, foi substituído por ACPI
(Configuração Avançada e Interface de Energia, Configuração Avançada e Interface
de Energia); a principal diferença entre os dois é que, enquanto sob
APM os diferentes níveis de potência foram implementados no firmware do
computador ou cada um de seus dispositivos, na ACPI a responsabilidade é
no sistema operacional; isso dá muito mais flexibilidade à implementação, ao custo
de mais complexidade para os desenvolvedores.
Mas a diferença real no tópico que esta seção aborda é a frequência das
mudanças de estado: um servidor ou desktop
tem apenas um evento constante (a frequência do processador se ajusta dependendo
da carga, potencialmente até dezenas de vezes por segundo); uma
laptop deve adotar perfis diferentes dependendo se é
conectado à rede elétrica ou operando por bateria, ou se tiver a tampa (tela)
aberto ou fechado. Os usuários de laptop normalmente procuram
trabalhe conectado à rede elétrica o máximo possível, pois é vox
populi que isso irá melhorar a vida útil da sua bateria. E enquanto essas mudanças
ambiente são apresentados (e têm uma complexidade inegável), sua ocorrência é
muito baixa.
Machine Translated by Google

3. 4 CAPÍTULO 1. PONTO DE PARTIDA

Na computação móvel, os eventos são muitos e muito diferentes. Primeiro


Em vez disso, os dispositivos móveis operam sob uma filosofia sempre ativa:
Embora o usuário não esteja atento ao seu dispositivo, ele deve ser
ligado e ciente do ambiente - alguns exemplos quase óbvios:

No caso de uma chamada telefônica, você deve responder imediatamente


alertando o usuário. A interface de usuário do telefone pode parecer monótona,
mas sua lógica (e em particular sua sinalização para os vários
redes às quais está conectado) permanece ativo.

A equipe deve estar sempre atenta às mudanças nas condições


rede (tanto de telefone quanto de dados), medindo o sinal das antenas de
celular mais próximas; permanecer associado a uma antena remota requer
mais energia do que um próximo.

Uma vez que esses equipamentos são projetados para se movimentarem junto
com o usuário, tornando-se um auxiliar ou uma extensão de suas atividades
diariamente, otimizar sua operação para operar via de regra a partir de sua
bateria, não conectado à rede elétrica. Nesse caso, a comparação vale a pena:
um telefone que oferece menos de um dia de funcionamento autônomo seria,
sem dúvida, avaliado como extremamente inconveniente e impraticável, em
Portanto, um laptop é considerado muito eficiente se permitir que o
operação autônoma por seis horas.

A economia de energia que esses padrões de uso permitem não se deve apenas à
hardware cada vez mais eficiente usado por dispositivos móveis, mas
do que a programação de aplicativos em que os desenvolvedores procuram
explicitamente padrões eficientes, sono fácil e minimizando a necessidade de ativar o
hardware.

ambiente em mudança

Data centers, desktops e até laptops


têm uma forma de operação bastante estável: durante o curso de um
sessão de trabalho (e mesmo durante toda a vida útil do equipamento, no caso de
servidores) sua visão de mundo não está sujeita a grandes mudanças. Um usuário
pode manter suas configurações de consumo de energia por longos períodos. As
As interfaces e os endereços de rede são normalmente estáveis e, se houvesse um
problema de sinal, o reparo ou a realocação seriam feitos na infraestrutura de rede,
não no computador cliente. O formato da tela, é claro, também é estável.
Uma das mudanças mais difíceis de implementar no software do sistema
foi justamente fornecer a plasticidade necessária nesses diferentes aspectos: o
dispositivo móvel deve ser mais enérgico em suas mudanças de perfil
energia, respondendo a um ambiente em mudança. pode aumentar ou diminuir
o brilho da tela dependendo do brilho ao redor, ou
Machine Translated by Google

1.6. SEGURANÇA INFORMÁTICA 35

desative determinada funcionalidade se ela já estiver em níveis de carga críticos.


Em relação à rede, você deve poder aproveitar as conexões fugazes enquanto
o usuário rola, iniciando eventos como sincronização. E tomando o cuidado de parar
(o mais limpo possível) os processos que vão
pare de responder. Finalmente, é claro, a interface do usuário: os dispositivos
Os telefones celulares não têm uma orientação natural e única como os computadores.
As interfaces do usuário devem ser projetadas para que possam ser reconfiguradas
agilmente antes da rotação da tela.

o jardim murado

Uma consequência indireta (e não técnica) do nascimento das plataformas móveis


é a popularização de um modelo de distribuição de software
conhecido como jardim murado ou, o que é o mesmo, plataforma fechada.
Supondo que os smartphones, a princípio, e
tablets e similares mais tarde, procuram satisfazer um mercado
muito maior do que a dos entusiastas de computadores,4 a Apple anunciou em julho
2008 (um ano após o lançamento do iPhone) sua loja de aplicativos ou
loja de aplicativos. A peculiaridade disso em relação ao modelo de computação que
historicamente prevaleceu é que, enquanto qualquer desenvolvedor pode criar
um aplicativo e enviá-lo, a Apple se reserva o direito de aprová-lo ou removê-lo a
qualquer momento. Ou seja, esse modelo permite que ele se estabeleça como juiz,
determinar o que um usuário pode ou não executar.
Esse mesmo modelo foi adotado pelo Google para seu sistema Android, em
inicialmente sob o nome de Mercado Android, e desde 2012 como Google Play.
A Microsoft fez o mesmo com sua Windows Phone Store.
Esse modelo de autorização e distribuição de software, no entanto, rompe com o
que Jonathan Zittrain (2008) define como a generatividade dos equipamentos de
informática e da rede em geral. Para ampliar o debate a esse respeito,
O livro de Zittrain tornou-se referência obrigatória e está disponível na íntegra
em linha.

1.6. Segurança informática


A importância da segurança informática não pode ser perdida de vista. O efeito
deste conceito pode ser visto em praticamente todos os componentes
que compõem um sistema operacional. Para não ir mais longe, as principais funções
apresentadas na seção 1.2 necessariamente atravessam critérios de
segurança. Algumas considerações podem ser, por exemplo:

4E também em resposta a alguns usuários descobriram como quebrar a proteção e


poder desenvolver e instalar aplicativos não oficiais nesta plataforma, originalmente projetada
para executar apenas software da Apple.
Machine Translated by Google

36 CAPÍTULO 1. PONTO DE PARTIDA

Abstração O sistema operacional deve garantir não apenas que forneça as abstrações
necessárias, mas também que nenhum de seus usuários possa contornar essas
abstrações. Por exemplo, o fato de um usuário ter o direito de modificar um arquivo
que está hospedado em uma determinada unidade de
disco, você não deve poder gravar diretamente no disco; seu acesso deve ser
limitado à interface que o sistema lhe oferece.

Gerenciamento de recursos Se o sistema operacional definiu certas políticas de alocação


de recursos, ele deve evitar que o usuário exceda o
atribuições aceitáveis, seja no curso de uso normal, ou mesmo antes
padrões de uso oportunista — Ou seja, conhecendo os mecanismos e as políticas,
um usuário não deve conseguir que o sistema permita que ele use
acima do definido.

Isolamento Se o sistema operacional fornece separação entre dados, processos


e recursos de seus diferentes usuários, nenhum deles deve -acidentalmente ou
intencionalmente – ter acesso a informações que outra pessoa marcou como privadas.
Além disso, voltando ao parágrafo anterior, nenhuma das
os usuários devem ser capazes de garantir que, por suas ações, o sistema penalize
outros além do que a política de alocação de recursos estipula.

Obviamente, essas três seções são apresentadas apenas como exemplo; uma
Ao longo do trabalho, vários casos relacionados às diferentes
temas que são abordados.
Naturalmente, qualquer problema relacionado à segurança informática pode ser abordado
(pelo menos) a partir de dois pontos de vista antagônicos: o da proteção, que busca definir e
proteger os aspectos em que
segurança intervém para um determinado problema, e a do ataque, que busca a
fraquezas ou vulnerabilidades em uma determinada implementação de um esquema
que permitem a qualquer um que os conheça violar os limites que o administrador do sistema
procura impor. E, claro, embora o tipo de análise para
esses pontos de vista é muito diferente, entender ambos não é apenas legítimo, mas também
necessário para uma formação profissional completa.
Todas as áreas abordadas neste trabalho possuem aspectos que podem ser
analisados a partir da segurança informática, e mais do que dedicar um capítulo
particular a esta questão, o compromisso é abordar a segurança de forma transversal.

1.6.1. Código malicioso


Os sistemas operacionais, como qualquer programa de computador, têm
imperfeições, erros ou omissões, tanto na sua concepção como na sua implementação. O
código malicioso (também conhecido como malware) consiste em programas projetados
para explorar essas vulnerabilidades para adquirir privilégios
de execução ou acesso a dados que de outra forma não teriam alcançado.
Machine Translated by Google

1.7. ORGANIZAÇÃO DE SISTEMAS OPERACIONAIS 37

Se a vulnerabilidade explorada pelo código malicioso for o resultado de um


erro de implementação, o desenvolvedor do sistema operacional normalmente
você pode corrigi-lo e colocar essa correção (coloquialmente chamada de patch) para
fornecimento de usuários; em sistemas operacionais modernos, instalando
dessas correções é feita automaticamente. Por outro lado, se o
vulnerabilidade é consequência de uma fraqueza no projeto, sua correção
pode ser muito mais complexo, pode até ser impossível de resolver, como
5
o caso apresentado na seção 5.6.1.
Vale ressaltar que uma grande quantidade de códigos maliciosos ataca um
camada particularmente fraca de qualquer sistema de computação: o usuário. Um
aspecto frequente (e muito difícil de resolver) desses programas é que eles enganam os
usuário apresentando-se como um código legítimo, e se ele reagir conforme o código
malicioso busca, ele permitirá que ele seja executado no sistema com seus privilégios.
O código malicioso tende a ser agrupado e classificado de acordo com seu
comportamento, principalmente em relação ao usuário: vírus, worms, cavalos de Tróia,
explorações e muito mais. No entanto, e dado que as suas diferenças residem sobretudo
nos seus múltiplos comportamentos perante o utilizador ou enquanto programa
rodando (e eles se comportam em geral da mesma maneira antes do sistema
operacional), foi determinado que entrar em detalhes sobre isso estaria fora de questão.
o escopo deste trabalho.

1.7. Organização de sistemas operacionais


A complexidade do tema dos sistemas operacionais exige que seja feito
uma forma modular. Este texto não busca ensinar como usar um sistema operacional
específico, nem mesmo comparar o uso de um com outro (fora do
fazê-lo com o propósito de explicar diferentes implementações).
No nível a ser estudado, um sistema operacional é mais um programa grande,
executando outros programas e fornecendo-lhes um conjunto de interfaces para
que podem tirar proveito dos recursos de computação. Existem duas formas principais de
organização interna do sistema operacional: sistemas monolíticos e sistemas de
microkernel. E embora uma linha clara não possa ser traçada ao pé da letra
indicando em qual classificação cada sistema se enquadra, não é difícil encontrar linhas
bases.

Monolítico A maioria dos sistemas operacionais tem sido historicamente monolítico:


isso significa que existe apenas um processo privilegiado (apenas
5O caso de estouro de buffer não se deve diretamente ao projeto de nenhum sistema
operacional específico. A sua existência, bem como a sua presença generalizada há mais de 40 anos
depois de descrito, pode ser explicado pela impossibilidade de resolver este problema
sem o consumo repetido de recursos computacionais com operações muito frequentes. Neste
caso específico, o estouro só pode ser evitado usando linguagens com gerenciamento
memória automática, muito mais lenta do que linguagens de baixo nível, ou alertando os usuários
desenvolvedores de práticas de programação responsáveis.
Machine Translated by Google

38 CAPÍTULO 1. PONTO DE PARTIDA

cuidado com o sistema operacional) operando no modo supervisor e dentro do


que são todas as rotinas para as diversas tarefas desempenhadas pelo
sistema operativo.

Figura 1.9: Diagrama dos componentes de um sistema monolítico.

Microkernel O kernel do sistema operacional é mantido com um mínimo de


funcionalidade, baixando em processos especiais sem privilégios os
tarefas que implementam o acesso ao dispositivo e várias políticas
de uso do sistema.

Figura 1.10: Diagrama dos componentes em um sistema de microkernel.

A principal vantagem de projetar um sistema seguindo um esquema monolítico


é a simplificação de um grande número de mecanismos de comunicação,
que leva a uma maior velocidade de execução (por exigir menos alterações de
Machine Translated by Google

1.8. TREINAMENTO 39

contexto para quaisquer operações realizadas). Além disso, quando a comunicação direta é
tratada como uma passagem de estruturas na memória, o maior acoplamento
permite mais flexibilidade adaptando-se a novos requisitos (por não ter que
modificar não apenas o kernel e os processos especiais, mas também a interface
público entre eles).
Por outro lado, sistemas de microkernel seguem esquemas lógicos mais limpos,
permitem implementações mais elegantes e são mais fáceis de entender por
separado de cada uma de suas peças. Eles podem se auto-reparar mais facilmente,
dado que em caso de falha de um dos componentes (por mais que pareça ser
nível muito baixo), o kernel pode reiniciá-lo ou até substituí-lo.

Sistemas com concepções híbridas Não é possível falar de concepções únicas ou de


verdades absolutas. Ao longo do livro, você verá exemplos de
concepções híbridas nesse sentido: sistemas que são em sua maioria monolíticos,
mas que gerenciam alguns processos que parecem centrais por meio de processos
em nível de usuário, como microkernels (por exemplo,
sistemas de arquivos no espaço do usuário, FUSE, no Linux).

Figura 1.11: Diagrama dos componentes em um sistema híbrido.

1.8. Treinamento
1.8.1. Perguntas de autoavaliação
1. Como a multitarefa preemptiva é diferente da cooperativa? Por
todas as opções, leia: “Ao contrário de multitarefa cooperativa, multitarefa
apropriado . . " (Escolha pelo menos uma resposta.)

a) É imune a um cálculo muito longo ou um loop infinito deixando


para o computador efetivamente congelado.

b) É o mais usado atualmente.

c) Ocorre apenas quando o processo faz uma chamada de sistema.


Machine Translated by Google

40 CAPÍTULO 1. PONTO DE PARTIDA

d) É usado principalmente em sistemas multiusuário.


e) Requer suporte de hardware.

2. Um sistema operacional oferece uma série de recursos ou características


principais, tanto para seus usuários quanto para seus programadores. Estes podem
ser agrupados em isolamento, gerenciamento de recursos e abstração.
Das afirmações a seguir, qual responde a cada um desses conceitos e qual não
corresponde a uma função do sistema operacional?

Implementar políticas que distribuam a atenção do sistema de forma


eficaz e de acordo com as necessidades estabelecidas entre os diferentes
processos ou usuários.
Cada processo e cada usuário não terá que se preocupar com os outros
que estão usando o mesmo sistema; Idealmente, sua experiência será
como se o sistema fosse exclusivamente dedicado ao seu
atenção. Requer que o sistema operacional tenha a ajuda do
hardware.

Apresentar uma interface consistente para o usuário (pode ser gráfica ou


textual), eliminando as diferenças que viriam do manuseio de diferentes
tipos de hardware.
Os programadores não devem se preocupar com os detalhes de acesso ao
hardware ou a configuração específica de um
computador. O programador deve ser capaz de se concentrar em resolver o problema
problemas ou necessidades particulares de seus usuários.

3. Alguns dispositivos requerem um bloqueio para conceder acesso exclusivo a um


programa. Qual dos seguintes se encaixaria nessa posição?

um teclado.
b) Unidade de fita.
c) Discos.
e) Impressora.

4. Um programa normalmente passa por vários estágios em sua execução, alguns


dos quais são limitados pelo processador, enquanto os outros
eles estão pela entrada/saída. Os componentes do sistema que
ocupados em cada caso são diferentes.
Que tipo de sistemas nasceram para responder a esta necessidade?

5. Foi apresentado que os sistemas de microkernel são baseados na simplificação de


mecanismos de comunicação e um esquema mais claro de comunicação entre
os componentes. No entanto, os sistemas monolíticos sempre
Machine Translated by Google

Capítulo 7

sistemas de arquivos

7.1. Capturando a estrutura no dispositivo


Ao longo do Capítulo 6, os elementos do sistema de arquivos foram abordados à medida
que são apresentados ao usuário final, sem entrar em detalhes sobre eles.
a como o sistema operacional organiza todas essas informações em um dispositivo
persistente—nós mencionamos algumas estruturas básicas, mas as deixamos explicitamente
pendentes de definição. Este capítulo abordará os principais
estruturas e mecanismos usados para que um sistema de arquivos já seja
não apenas uma estrutura formal ideal, mas uma entidade armazenada em
um dispositivo.
Ao longo da história da computação, o armazenamento nem sempre foi
realizada em discos (dispositivos de acesso aleatório rotativos). Durante várias décadas, os
principais meios de armazenamento foram de acesso estritamente sequencial (cartões
perfurados, fitas de papel, fitas magnéticas); por mais que
30 anos, o principal meio de armazenamento tem sido os diferentes tipos de
discos magnéticos e, há alguns anos, temos visto uma migração para
armazenamento em estado sólido, para dispositivos sem partes móveis que armazenam o
informações em um tipo particular de memória (a ser discutido na Seção C.1.2). Voltando
às categorias apresentadas na seção 2.8, a mídia
dispositivos de acesso sequencial são dispositivos de caracteres, e ambos os discos e drives
O estado sólido são dispositivos de bloco.

7.1.1. Conceitos para a organização


Os sistemas de arquivos geralmente são desenvolvidos com discos em mente.
e ao longo deste capítulo, o meio de armazenamento persistente no qual o sistema de
arquivos está incorporado será chamado de disco. Dentro
O Apêndice C abordará alguns dos aspectos que devemos considerar quando
falar sobre sistemas de arquivos com backup em mídia diferente do disco.

263
Machine Translated by Google

264 CAPÍTULO 7. SISTEMAS DE ARQUIVO

Entretanto, é aconselhável manter uma visão ainda bastante idealizada e


resumo: um disco visto da perspectiva do sistema operacional será apresentado ao
longo deste capítulo1 como um grande conjunto de blocos
tamanho fixo, cada um diretamente endereçável; Isso significa que
o sistema operacional pode se referir igualmente a qualquer um dos blocos do
disco por um endereço físico e inequívoco em todo o disco. A partir disso, os
seguintes conceitos são usados para armazenar, localizar ou
recupere as informações:

partição Uma subdivisão de um disco, pela qual o administrador


o usuário do sistema pode definir como o espaço é usado
do disco, segmentando-o conforme necessário.
Um disco pode ter várias partições e cada partição pode ter
um sistema de arquivos separado.

Volume Uma coleção de blocos inicializados com um sistema de arquivos que


eles podem ser apresentados ao usuário como uma unidade. Normalmente,
um volume coincide com uma partição (mas nem sempre é o caso, como será
descrito nas seções C.2 e C.3).
O volume é descrito para o sistema operacional no bloco de controle de volume.
volume, também conhecido como superblock no Unix, ou master table of
arquivos (tabela de arquivos mestre) em NTFS.

Sistema de arquivos Esquema de organização que segue um determinado volume.


Dependendo do sistema de arquivos escolhido, cada um dos
componentes aqui apresentados ocuparão um lugar diferente no disco,
apresentando sua própria semântica.
Para ter acesso às informações armazenadas em determinados
volume, o sistema operacional deve ter suporte para o sistema de arquivos
específico no qual está estruturado.

Diretório raiz A estrutura que relaciona cada nome de arquivo a seus números de i-
node. Ele normalmente armazena apenas os arquivos que estão no
primeiro nível hierárquico do sistema, e os diretórios derivados são referenciados
apenas a partir dele.

Em sistemas de arquivos modernos, o diretório geralmente inclui apenas o


nome de cada arquivo e o número do i-node que o contém.
descreve, todos os metadados adicionais estão nos respectivos i-nodes.

Metadados Este nome recebe todas as informações sobre um arquivo que não
é o conteúdo do próprio arquivo. Por exemplo, o nome, tamanho ou tipo
do arquivo, seu proprietário, controle de acesso, suas datas de criação,
último acesso e modificação, localização no disco, etc.
1Para uma visão mais rigorosa de como o sistema operacional se relaciona com os discos
e outros mecanismos de armazenamento, consulte o Apêndice C.
Machine Translated by Google

7.1. INCORPORANDO A ESTRUTURA NO DISPOSITIVO 265

I-node Do inglês i-node, nó de informação (nó de informação); em sistemas do tipo


Windows, geralmente é chamado de bloco de controle de arquivos (FCB). É a
estrutura do disco que armazena os metadados de cada
dos arquivos, fornecendo um link entre a entrada no diretório
e os dados que o compõem.
As informações armazenadas incluem todos os metadados relacionados
com o arquivo, exceto pelo nome (que está apenas em
o diretório): as permissões e proprietários do arquivo, suas datas de criação,
última modificação e último acesso, e a lista de blocos que ocupa no disco.
Alguns dos esquemas mais comuns serão discutidos posteriormente.
comum apresentar essa relação de blocos.
Essa separação entre diretório e i-node permite que um mesmo arquivo faça
parte de diretórios diferentes, conforme explicado na seção 6.3.1.

Bitmap de espaço livre A função do bitmap é poder gerenciar o espaço livre no disco.
Lembre-se que o disco é atribuído por
blocos, normalmente 4096 bytes — no bitmap cada bloco é representado por um
bit, para que possa ser encontrado de forma compacta aqui
o espaço ocupado e disponível, bem como o lugar certo para criar
um novo arquivo.

O bitmap para um disco de 100 GB pode ser representado 100×109


tar em 23 MB ( ), uma quantia que você pode manter razoavelmente
4.096 memória em um sistema desktop médio hoje.2
Mais adiante veremos algumas estruturas avançadas que permitem uma maior
eficiência neste sentido.

7.1.2. diferentes sistemas de arquivos

Um sistema operacional pode suportar vários sistemas de arquivos diferentes; um


administrador do sistema pode ter motivos muito diferentes do que
influenciar você a escolher qual sistema de arquivos usar para suas informações;
Algumas razões para escolher um ou outro são que o desempenho de cada
pode ser ajustado para diferentes padrões de carregamento, precisa empregar um
dispositivo portátil para trocar dados com diferentes sistemas, e até mesmo
restrições de hardware.3
Ao longo desta seção, revisaremos como os principais conceitos a serem abordados
foram implementados em diferentes sistemas de arquivos; será referenciado

2Isso explica por que, mesmo sem trabalhar ativamente com nenhum arquivo contido em
isso, o simples fato de montar um volume com grande quantidade de dados obriga o sistema a reservar
uma quantidade de memória.
3Por exemplo, os carregadores de inicialização em algumas plataformas exigem a capacidade de ler o volume
onde a imagem do sistema operacional está alojada - o que a obriga a estar em um sistema de
arquivos nativos da plataforma.
Machine Translated by Google

266 CAPÍTULO 7. SISTEMAS DE ARQUIVO

principalmente a uma família de sistemas de arquivos simples de entender, mas


mostrando claramente sua idade: o sistema FAT. O motivo da escolha do sistema de
arquivos FAT é a simplicidade de suas estruturas, que nos permitem entender a
organização geral das informações. Sempre que pertinente, serão mencionados em
quais pontos principais a diferença com os principais sistemas de hoje está guardada.

O sistema FAT foi criado no final dos anos setenta, e seu design mostra evidências
claras de ter sido concebido para disquetes. No entanto, por meio de várias extensões
que foram introduzidas ao longo dos anos (algumas com compatibilidade com versões
anteriores,4 outras não), ainda é um dos sistemas mais usados atualmente, embora não
seja mais recomendado como sistema principal por qualquer desktop operacional.
sistema.
Embora o FAT tenha sido mais amplamente utilizado com a família de sistemas
operacionais MS-DOS , ele é um sistema de arquivos nativo para um grande número de
outras plataformas (muitas delas no mercado embarcado), o que se torna óbvio ao
revisar o suporte para atributos estendidos que ele lida.

7.1.3. O volume
A primeira coisa que o sistema operacional precisa saber para montar um volume é
sua estrutura geral: primeiro, que tipo de sistema de arquivos é e depois sua descrição
básica: sua extensão, o tamanho dos blocos lógicos que gerencia, se possui algum
rótulo que descreva sua função para o usuário, etc. Essas informações estão contidas
no bloco de controle de volume, também conhecido como superbloco ou tabela de
arquivos mestre. 5 Depois de ler as informações do superbloco, o sistema operacional
primeiro determina se pode prosseguir — se não souber como trabalhar com o sistema
de arquivos em questão, por exemplo, não poderá apresentar nenhuma informação
útil ao usuário ( e até arriscaria destruí-lo).

Já foi mencionado que o tamanho do bloco (historicamente 512 bytes; o padrão


Advanced Format em março de 2010 introduziu blocos de 4096 bytes) é definido pelo
hardware. É muito comum que, tanto por questões de eficiência quanto para endereçar
mais espaço, o sistema de arquivos agrupe vários blocos físicos em um bloco lógico.
Na seção 7.1.4, revisaremos quais fatores determinam o tamanho dos blocos em cada
sistema de arquivos.
Como descrever o volume é a operação mais fundamental a ser executada, muitos
sistemas de arquivos mantêm cópias extras do superbloco, às vezes espalhadas por
todo o sistema de arquivos, para que possam ser recuperados caso sejam corrompidos.

4A compatibilidade com versões anteriores refere-se às alterações que permitem a interoperabilidade


transparente com as versões anteriores.
5E aqui é necessário esclarecer: este bloco não contém os arquivos, nem mesmo as estruturas que
apontam para eles, apenas descreve o volume para que possa ser montado.
Machine Translated by Google

7.1. INCORPORANDO A ESTRUTURA NO DISPOSITIVO 267

No caso do FAT, o volume indica não apenas a geração do


arquivos sendo usados (FAT12, FAT16 ou FAT32, em todos os três casos nomeados pelo
número de bits para se referir a cada um dos blocos
lógicos ou clusters), mas o tamanho dos clusters, que pode variar de dois e
até 32 KB.

volumes brutos

Embora uma das principais tarefas de um sistema operacional seja a organização do


espaço de armazenamento em sistemas de arquivos e seu gerenciamento para
ser compartilhado entre vários usuários e processos, há alguns casos em que um
Um dispositivo orientado a blocos pode ser disponibilizado para um processo específico para
gerenciamento direto. Este modo de uso é
chamados de dispositivos brutos ou dispositivos brutos.
Dois casos de uso principais podem ser encontrados hoje para dispositivos
orientado a blocos não gerenciados por abstração de sistemas
de arquivos:

Swap Space Como visto na Seção 5.5.2, o gerenciamento da parte da memória virtual que
está no disco é muito mais eficiente quando feito sem atravessar a abstração do
sistema operacional — ou seja,
quando feito em um volume em bruto. E enquanto o gerenciador de memória
virtual é inegavelmente parte do sistema operacional, em um sistema microkernel
ele pode estar sendo executado como um processo de usuário.

Bancos de dados Os bancos de dados relacionais podem incluir volumes muito grandes.
big data estritamente estruturado. Alguns gerenciadores de banco de dados
bancos de dados, como Oracle, MaxDB ou DB2, recomendam que seus usuários usem
de volumes brutos, para otimizar os acessos ao disco sem ter que
atravessar tantas camadas do sistema operacional.

A maioria dos gerenciadores de banco de dados por vários anos


não lidam com esta modalidade, devido à complexidade adicional envolvida
para o administrador do sistema e a vantagem de desempenho limitada que ele traz
hoje, embora certamente seja um problema a ser considerado.
se presta à discussão e à pesquisa.

7.1.4. O diretório e os i-nodes


O diretório é a estrutura que relaciona os arquivos à medida que são apresentados ao
usuário –identificados por um caminho e um nome– com as estruturas
que os descrevem para o sistema operacional — os i-nodes.
Ao longo da história dos sistemas de arquivos, eles foram implementados
esquemas organizacionais muito diferentes. A estrutura básica da popular família de sistemas
de arquivos FAT é apresentada abaixo.
Machine Translated by Google

268 CAPÍTULO 7. SISTEMAS DE ARQUIVO

o diretório raiz

Uma vez que o sistema de arquivos esteja montado (veja 6.3.3), todas as referências
aos arquivos dentro dele devem passar pelo diretório. O diretório raiz está sempre em um
local conhecido no sistema.
arquivos — normalmente no início do volume, nos primeiros setores.6 A
disquete tinha 80 faixas (normalmente chamadas de cilindros quando se fala em
discos rígidos), de modo que ao localizar o diretório na trilha 40, o tempo médio de
movimentação da cabeça para alcançá-lo foi reduzido pela metade. Eu cai
operações para abrir um arquivo têm que passar pelo diretório, isso resultou em uma
melhoria muito significativa.
O diretório é a estrutura que determina o formato que o arquivo deve seguir.
nome de cada um dos arquivos e diretórios: é comum que em um sistema
Nos tempos modernos, um nome de arquivo pode ter até 256 caracteres, incluindo
espaços, caracteres internacionais, etc. Alguns sistemas de arquivos são
diferencia maiúsculas de minúsculas, como é o caso em sistemas Unix nativos (o arquivo
example.txt é diferente de Example.TXT), enquanto outros não são,
como é o caso com NTFS e VFAT (example.txt e Example.TXT são idênticos
antes do sistema operacional).
Todas as versões do FAT seguem um esquema de nomenclatura de arquivos.
claramente arcaico: os nomes dos arquivos podem ter até oito caracteres, com uma
extensão opcional de mais três caracteres, para um total de 11.
Não só o sistema não diferencia maiúsculas de minúsculas, mas todos os
nomes devem ser mantidos em letras maiúsculas, e permite apenas
determinados caracteres não alfanuméricos. Este sistema de arquivos não implementa
a separação entre diretório e i-node, que é a norma hoje, para que cada
uma das entradas no diretório tem exatamente 32 bytes. como é de
esperado em um formato que viveu tanto e atravessou tantas gerações quanto o FAT,
alguns desses campos mudaram substancialmente
Os significados deles. A Figura 7.1 mostra os campos de uma entrada de diretório
sob FAT32.

Figura 7.1: Formato da entrada do diretório em FAT (Mohammed, 2007).

6Uma exceção a essa lógica ocorreu na década de 1980, quando os projetistas do


sistema AmigaOS, eles decidiram colocar o diretório no setor central dos volumes, para reduzir
metade do tempo médio de acesso à parte do disco mais frequentemente referida.
Machine Translated by Google

7.1. INCORPORANDO A ESTRUTURA NO DISPOSITIVO 269

A extensão VFAT foi adicionada com o lançamento do Windows 95. Essa extensão
permitiu que, embora o nome real de um arquivo ainda estivesse limitado ao formato
apresentado, entradas adicionais pudessem ser adicionadas ao diretório usando o atributo
de rótulo de volume de maneira que um usuário não pôde usar. O sistema MS-DOS deve
ignorar.7
Isso apresenta uma complicação adicional quando se trata do diretório raiz de uma
unidade: embora os diretórios derivados não tenham esse limite, já que o diretório raiz está
localizado em uma seção fixa do disco, ele tem um limite máximo de comprimento: em um
disquete ( que até hoje, devido à sua baixa capacidade, está formatado em FAT12), do
bloco 20 ao 33, ou seja, 14 blocos. Com um tamanho de setor de 512 bytes, o diretório
raiz é 512×14 = 7168 bytes, = 224 entradas no máximo. E embora isso possa não parecer
7 168
isto é 32 muito limitado, ter quatro entradas por arquivo quando, usando VFAT, você
tem um nome médio-longo reduz muito a imagem.

O problema não é tão grave quanto parece: para FAT32, o diretório raiz não está mais
localizado em um espaço reservado, mas como parte do espaço de dados, portanto, é
extensível, se necessário.
Os primeiros sistemas de arquivos destinavam-se a unidades de capacidade muito
baixa; Por muito tempo, as implementações de diretório eram simplesmente listas lineares
dos arquivos que estavam hospedados no volume. Em muitos desses primeiros sistemas,
os diretórios não eram considerados hierárquicos, mas apresentavam um único namespace
plano; À medida que esses sistemas evoluíram para suportar diretórios aninhados, para
compatibilidade com versões anteriores (e para considerações de desempenho discutidas
abaixo), eles continuaram a armazenar apenas o diretório raiz nessa posição privilegiada,
tratando todos os diretórios derivados dele como se fossem diretórios raiz. O disco.

Em um sistema que implementa diretórios como listas lineares, quanto mais arquivos
houver, o tempo que leva para quase qualquer operação aumenta linearmente (já que
você potencialmente precisa ler o diretório inteiro para encontrar um arquivo). E as listas
lineares apresentam um segundo problema: como reagir quando seu espaço alocado é
preenchido.
Como já foi apresentado, o FAT aloca uma quantidade fixa de espaço para o diretório
raiz, mas os subdiretórios podem crescer livremente. Um subdiretório é basicamente uma
entrada com um tipo especial de arquivo – se o décimo segundo byte de uma entrada de
diretório, indicando os atributos do arquivo (veja a Figura 7.1 e a Tabela 7.1), tiver o bit
quatro definido, a região de dados correspondente a esse arquivo será ser interpretado
como um subdiretório.

7O rótulo do volume foi definido para ser usado exclusivamente no cabeçalho do


diretório, dando um rótulo global a todo o sistema de arquivos; o significado de uma
entrada de diretório com este atributo não foi definido até antes da adição de VFAT .
Machine Translated by Google

270 CAPÍTULO 7. SISTEMAS DE ARQUIVO

Figura 7.2: Entradas representando arquivos com (e sem) nomes longos em VFAT.

A tabela de alocação de arquivos

É claro que o FAT é um sistema legado e que exibe muitas práticas que foram
abandonadas em projetos modernos de sistemas de arquivos. Foi visto que dentro da
entrada do diretório de cada arquivo há praticamente seu i-node completo: as
informações sobre permissões, atributos, datas de criação e muito particularmente, o
ponteiro para o cluster inicial (bytes 26-28, mais os 20 - 22 para FAT32). Isso resulta em
uma das grandes fragilidades do FAT: a tendência à fragmentação.

A família FAT recebe seu nome da tabela de alocação de arquivos, que aparece
antes do diretório, nos primeiros setores do disco.8 Cada byte do FAT representa um
cluster na área de dados; cada entrada no diretório indica, em seu campo correspondente,
qual é o primeiro cluster do arquivo. Agora, à medida que um disco é usado, e os
arquivos crescem e são excluídos, e preenchem os espaços vazios que deixam para
trás, o FAT vai

8Esta tabela é tão importante que, dependendo da versão do FAT, ela é salva em duplicata,
ou mesmo em triplicado.
Machine Translated by Google

7.1. INCORPORANDO A ESTRUTURA NO DISPOSITIVO 271

Tabela 7.1: Significado de cada um dos bits do byte de atributo de arquivo no


Diretório FAT . As semânticas apresentadas são as utilizadas pelos sistemas MS
DOS e Windows; outros sistemas podem apresentar comportamentos adicionais.

Nome do Bit Descrição


0 Somente leitura O sistema não permitirá que seja modificado.
1 escondido Não aparece nas listagens de diretórios.
2 Sistema O arquivo pertence ao sistema e não deve
mover de seus clusters (usado, por
por exemplo, para os componentes a serem carregados para
inicializar no sistema operacional).
3 rótulo Indica o nome do volume, não um arquivo.
Em VFAT, expressa a continuação de uma
nome longo.
4 Subdiretório Os clusters que compõem este arquivo
são interpretados como um subdiretório,
não como um arquivo.
5 Arquivado Empregado por alguns sistemas de backup
para indicar se um arquivo foi modificado
desde sua última cópia.
6 Dispositivo Para uso interno do sistema operacional, não
foi adotado para os arquivos.
7 Reservado Reservado, não deve ser manipulado.

alocando espaço à medida que encontra novos clusters livres, sem se importar que seja
espaço contínuo. Os ponteiros para o próximo cluster são marcados no
tabela, cluster por cluster, e o último de cada arquivo recebe o valor especial
(dependendo da versão FAT) 0xFFF, 0xFFFF ou 0xFFFFFFFF.
Agora, se os diretórios são simplesmente arquivos que recebem um
tratamento especial, estes também são suscetíveis à fragmentação. Dentro de
de um sistema Windows 95 ou superior (usando as extensões VFAT), com
diretórios aninhados em quatro ou cinco níveis, conforme estabelecido por sua hierarquia
standard,9 a simples tarefa de passar por eles para encontrar um determinado arquivo
pode ser fortemente penalizado pela fragmentação.

Excluindo entradas de diretório

Apenas alguns sistemas de arquivos mantêm seus diretórios ordenados


— embora isso facilite as operações mais frequentes realizadas neles (em particular, a
pesquisa: cada vez que um diretório é percorrido
9Por exemplo, C:\Documents and Settings\User\Start Menu\Program
Example\Example Program.lnk
Machine Translated by Google

272 CAPÍTULO 7. SISTEMAS DE ARQUIVO

até que um arquivo seja encontrado, ele potencialmente deve ser lido em sua totalidade),
mantê-lo organizado contra qualquer modificação seria muito mais caro, dado que
que todo o diretório teria que ser reescrito ao criar ou excluir um
arquivo dentro dele, e o que é mais importante, mais perigoso, pois
aumentaria o tempo em que os dados do diretório estão em um estado inconsistente,
aumentando a probabilidade de que, diante de uma interrupção repentina
(falha do sistema, corte de energia, desconexão do dispositivo, etc.) ocorre corrupção de
informações, levando à perda de dados. ao armazenar
entradas de diretório não ordenadas, scripts modificando esta revisão
estrutura permanece atômica: um único setor de 512 bytes pode armazenar
16 entradas FAT básicas, 32 bytes cada.10
Classifique as entradas do diretório com seu conteúdo já na memória
e, em geral, adiar modificações no diretório é muito mais conveniente no caso geral. Isso
também é verdade para excluir arquivos
—A seguir , será abordada a estratégia seguida pelo FAT. Deve-se lembrar que
O FAT foi projetado quando o meio de armazenamento primário era o disco.
flexível, dezenas de vezes mais lento que o disco rígido e com muito menos
confiabilidade.

Quando um sistema de arquivos FAT é solicitado a excluir um arquivo, ele


ele não é excluído do diretório, nem suas informações são liberadas da tabela de
alocação de arquivos, mas sim marcada para ser ignorada, substituindo o primeiro
caractere de seu nome por 0xE5. Nem a entrada de diretório nem a string
clusters correspondentes nas tabelas de alocação,11 são eliminados - apenas
estão marcados como disponíveis. O espaço de armazenamento que o arquivo
as ocupações removidas devem ser adicionadas ao espaço livre que o volume possui. É
somente quando um novo arquivo é criado usando essa mesma entrada,
ou quando outro arquivo ocupa o espaço físico que estava ocupado pelo que foi excluído,
que o sistema operacional realmente marca os clusters em
a tabela de mapeamento.
É por isso que, desde os primeiros dias dos PCs , existem tantas ferramentas de
recuperação de arquivos (ou de exclusão, recuperação de exclusão): sempre
A menos que tenha sido criado um novo que ocupe a entrada do diretório em questão,
recuperar um arquivo é tão simples quanto substituir o primeiro caractere em seu nome.

Este é um exemplo de mecanismo preguiçoso (em oposição a mecanismos ansiosos,


como os discutidos na Seção 5.5.1). A exclusão de um arquivo requer
de um trabalho mínimo, que é diferido no momento da reutilização do
entrada de diretório.

10Embora no caso de VFAT, as diferentes entradas que compõem um único nome de arquivo
Eles podem ser separados em diferentes setores.
11Este tópico será abordado brevemente, na seção 7.2.4, ao falar sobre as tabelas de alocação de
registros.
Machine Translated by Google

7.1. INCORPORANDO A ESTRUTURA NO DISPOSITIVO 273

7.1.5. Compressão e desduplicação


Arquivos armazenados em uma determinada área do disco tendem a ter
padrões comuns. Algumas situações de exemplo que levariam a esses padrões
comuns são:

Dentro do diretório de trabalho de cada um dos usuários, normalmente há


arquivos criados com os mesmos programas, compartilhando o cabeçalho, a
estrutura e, ocasionalmente, até partes importantes dos arquivos.
dados.

Dentro dos diretórios binários do sistema, haverá muitos arquivos


executáveis que compartilham o mesmo formato binário.

Também é muito comum que um usuário armazene diferentes versões do


mesmo documento.

Dentro de um mesmo documento, é comum o autor repetir em inúmeras ocasiões


as palavras que descrevem seus principais conceitos.

À medida que os computadores aumentaram seu poder computacional, desde o


final da década de 1980 foram introduzidos diversos mecanismos que permitiam aproveitar
as regularidades nos dados armazenados no disco para comprimir o espaço utilizável
no mesmo meio. A compressão geralmente é feita por
meio de mecanismos de estimativa derivados da análise de conteúdo,12 que
resultar em um nível variável de compactação: com tipos de conteúdo
altamente regular (como texto, código-fonte ou áudio e imagens
petróleo bruto), um volume muitas vezes pode armazenar muito mais do que 200%
do seu espaço real.
Com conteúdo imprevisível ou com redundância muito baixa (como a maioria dos
formatos de imagem e áudio, que já incluem uma fase de compactação ou usando
qualquer esquema de criptografia), a compactação não ajuda,
e reduz o desempenho geral do sistema em que é usado.

Compressão de volume total

O primeiro sistema de arquivos a se tornar popular foi o Stacker, comercializado


de 1990 pela Stac Electronics. Empilhador operado em MS-DOS, criando um
dispositivo de bloco virtual hospedado em um disco padrão.13 Várias implementações
subsequentes dessa época foram baseadas nesse mesmo princípio.
12Um dos algoritmos mais usados e fáceis de entender é o Coding
Huffmann; este e a família de algoritmos Lempel-Ziv servem como base para praticamente todos
das implementações.
13Isso significa que, quando solicitado a criar uma unidade compactada de 30 MB no
volume C (disco rígido principal), ele aparecerá disponível como um volume adicional. O novo
volume exigia o carregamento de um driver especial para ser montado pelo sistema operacional.
Machine Translated by Google

274 CAPÍTULO 7. SISTEMAS DE ARQUIVO

Agora, adicionando a variabilidade derivada da abordagem probabilística ao uso


do espaço com o posicionamento de uma compressão orientada para todo o volume,
é natural encontrar uma das dificuldades decorrentes do uso dessas ferramentas: uma
vez que o sistema operacional estrutura as operações de leitura
e escrita por blocos de dimensões regulares (por exemplo, o tamanho típico do setor de
hardware de 512 bytes), pois podem ser traduzidos em mais ou menos
blocos reais depois de passar por uma camada de compactação, o sistema de arquivos
pode ter que reorganizar constantemente as informações à medida que crescem
qualquer um dos blocos anteriores. Quanto maior o tempo de uso de um
unidade compactada pelo Stacker, observou-se maior degradação no desempenho.
Além disso, uma vez que neste esquema o sistema de arquivos foi usado
padrão, as tabelas de diretório e alocação de espaço também foram
comprimido. Essas tabelas, como já dito, contêm as informações
sistema de arquivos fundamental; ao comprimi-los e reescrevê-los constantemente, a
probabilidade de serem danificados em alguma falha (elétrica ou
lógica) aumenta. E enquanto os discos compactados pelo Stacker e outras ferramentas
eram populares, principalmente durante a primeira metade da década de 1990, à medida
que a capacidade dos discos rígidos aumentava, sua popularidade diminuía.
utilização.

Compressão arquivo por arquivo

Dado o sucesso do Stacker em seus primeiros anos, a Microsoft anunciou como parte
dos recursos da versão 6.0 do MS-DOS (publicado
em 1993) que incluiria o DoubleSpace, uma tecnologia muito semelhante à do Stacker.
A Microsoft incluiu suporte para DoubleSpace em seus sistemas operacionais.
por sete anos, cobrindo as últimas versões do MS-DOS e as do Windows
95, 98 e Millenium, mas como você já viu, compressão de volume total
apresentava inconvenientes significativos.
Para os novos sistemas de arquivos NTFS , a Microsoft decidiu incluir
um recurso diferente, mais seguro e mais modular: manter o sistema
arquivos rodando normalmente, sem compressão, e habilitar a compressão arquivo por
arquivo de forma transparente para o usuário.
Este esquema permite ao administrador do sistema escolher, por arquivos ou
pastas, quais áreas do sistema de arquivos você deseja armazenar compactado; Está
recurso vem como parte de todos os sistemas operacionais Windows
da versão XP, lançada em 2003.
Embora a compactação transparente por arquivo se mostre muito mais
atraente do que o volume completo, não é uma panacéia e é comum encontrar
recomendações para desativá-lo em fóruns online. Em primeiro lugar,
compactar um arquivo significa que uma pequena alteração pode ter um efeito
muito maior: modificar um bloco pode implicar que o tamanho final do
alteração de dados, o que resultaria na reescrita do arquivo a partir desse ponto
em diante; isso poderia ser mitigado pela inserção de espaços para preservar o espaço
Machine Translated by Google

7.1. INCORPORANDO A ESTRUTURA NO DISPOSITIVO 275

espaço já ocupado, mas adiciona complexidade ao processo (e compensa


compressão). Arquivos compactados também são muito mais sensíveis a
corrupção de dados, principalmente em casos de falha de sistema ou energia: uma vez que
uma pequena alteração pode resultar na necessidade de reescrever
para todo o arquivo, a janela de tempo para a ocorrência de uma falha é
aumenta.
Em arquivos estruturados para permitir acesso aleatório, como
sejam as tabelas do banco de dados, a compactação implicaria que os registros não são
já estará alinhado ao tamanho que o programa gestor espera, o que levará a
necessariamente uma penalidade de desempenho e confiabilidade.
Por outro lado, são expressos os formatos nativos em que os dados que normalmente
ocupam mais espaço no armazenamento dos usuários finais já implicam um alto grau de
compactação: arquivos de foto, áudio ou vídeo.
eles são codificados sob vários esquemas de compressão adequados às suas particularidades.
E compactar um arquivo que já está compactado não só não informa
nenhum benefício, mas resulta em trabalho desperdiçado para o esforço
investido em descompactá-lo cada vez que é usado.
A compressão transparente, arquivo por arquivo, tem vantagens inegáveis,
no entanto, devido às desvantagens que implica, não pode ser tomado como o
operação padrão.

desduplicação

Existe uma estratégia fundamentalmente diferente para otimizar o uso de


espaço de armazenamento, alcançando níveis muito altos de uso excessivo: economize
apenas uma cópia de cada coisa.
Desde o final da década de 1980, foram propostos sistemas implementando diferentes
tipos de desduplicação, embora sua eficácia fosse muito limitada e, portanto,
Portanto, seu nível de adoção permaneceu muito baixo até recentemente.
O retorno à desduplicação deve-se, em grande parte, à consolidação dos servidores
diante da adoção em larga escala de mecanismos de virtualização (ver apêndice B e, em
particular, seção B.5). Desde um mesmo
servidor pode estar hospedando dezenas ou centenas de máquinas virtuais, muitas delas com
o mesmo sistema operacional e programas básicos, o mesmo
os arquivos são repetidos muitas vezes; se o sistema de arquivos pode determinar
que um determinado arquivo ou bloco já está armazenado, ele poderia salvar apenas um
cópia de.

A principal diferença entre a desduplicação e os links físicos mencionados na seção 6.3.1


é que, caso algum desses arquivos (ou
blocks) for modificado, o sistema de arquivos ocupará o espaço necessário
para representar essas alterações e impedirá que isso afete outros arquivos.
Além disso, se dois arquivos inicialmente diferentes se tornarem iguais, o arquivo será liberado.
espaço usado por um deles automaticamente.
Machine Translated by Google

276 CAPÍTULO 7. SISTEMAS DE ARQUIVO

Para identificar quais dados estão duplicados, o mecanismo mais utilizado é


calcular o hash criptográfico dos dados;14 esse mecanismo permite uma busca rápida
e confiável de correspondências, seja por arquivo ou por bloco.
A desduplicação pode ser realizada on-line ou off-line — ou seja, verificando os
dados em busca de duplicatas à medida que chegam ao sistema ou (porque é intensivo
do processador e do computador)
entrada/saída) executá-lo como uma tarefa de manutenção posterior, em um
momento de menor ocupação do sistema.
A desduplicação por arquivo é muito mais leve no sistema do que por bloco, embora
devido às estruturas comuns compartilhadas por muitos
arquivos, a desduplicação por bloco normalmente leva a uma otimização muito maior
do uso do espaço.
Até o momento, o principal sistema de arquivos que implementa a desduplicação 15
ção é ZFS, desenvolvido pela Sun Microsystems (hoje Oracle). No Linux, isso
Esse recurso faz parte do BTRFS, embora não tenha atingido os níveis de estabilidade
a serem recomendados para uso em ambientes de produção.
No Windows, essa funcionalidade é conhecida como armazenamento de instância
única. Esse recurso apareceu, implementado em
userspace e, portanto, operando apenas por arquivo, como um
das características do servidor de correio Exchange Server entre os anos 2000
e 2010. A partir do Windows Server 2003, a funcionalidade de desduplicação
ele existe diretamente para NTFS, embora seu uso seja raro.
O uso de desduplicação, principalmente quando realizado em bloco,
tem um alto custo em memória: para manter bons níveis de desempenho,
a tabela que relaciona o hash de dados ao setor em que está armazenado deve ser
mantida na memória. No caso da implementação do ZFS em
FreeBSD, a documentação sugere dedicar 5 GB de memória para cada TB de
armazenamento (0,5% da capacidade total) (Rhodes et al. 1995-2014).

7.1.6. sistemas de arquivos virtuais

Os sistemas de arquivos nasceram para facilitar o uso de dispositivos de armazenamento.


armazenamento de informações que devem persistir a longo prazo. No entanto, como
a abstração para seu uso é tão natural para representar
todo tipo de informação, desde a década de 1980 vários
Implementações de disco RAM : programas projetados para ocupar espaço
de memória e dar-lhe a semântica de um disco, permitindo que seu conteúdo seja
manipulado como se fosse qualquer outro disco. Ou seja, tem armazenamento
volátil, mas de alta velocidade.

14Por exemplo, usando o algoritmo SHA-256, que fornece uma probabilidade de colisão de
1 em 2256, confiável o suficiente para que a perda de dados seja muito menos provável do que
falha de disco.
15Os recursos básicos do ZFS serão apresentados na seção C.3.2.
Machine Translated by Google

7.1. INCORPORANDO A ESTRUTURA NO DISPOSITIVO 277

Esses esquemas gozaram de relativa popularidade ao longo das décadas de 1980 e


1990; Foi, no entanto, com a popularização dos sistemas que implementam memória
virtual que este esquema se tornou verdadeiramente popular.
Em sistemas Linux modernos, o uso de sistemas de arquivos virtuais para o espaço de
armazenamento temporário /tmp é a norma, e até mesmo outros espaços tradicionalmente
persistentes (como o diretório com arquivos de dispositivo, /dev) tornaram-se virtuais.

Uma janela para o núcleo

O artigo intitulado Processos como arquivos (Killian 1984), apresentado na


conferência de desenvolvedores de sistemas Unix do grupo USENIX , apresenta a
implementação de um sistema de arquivos virtual a ser montado no diretório /proc do
sistema. Esse sistema de arquivos, em vez de representar um mapa de blocos em um
dispositivo físico, apresentava uma janela para a lista de processos em execução no
sistema. O uso de /proc foi construído em praticamente todos os sistemas do tipo Unix.

Essa ideia avançou e amadureceu, e hoje é uma ferramenta fundamental para a


administração do sistema. Enquanto a proposta original de Killian visava principalmente
facilitar a implementação de depuradores apresentando o espaço de memória dos
processos, /proc hoje é uma espécie de janela para as estruturas internas do sistema:
uma árvore de diretórios com um grande número de arquivos através da qual você pode
monitorar o estado do sistema (memória livre, número de processos, consumo do
processador, etc.), e ainda modificar a configuração do sistema em execução.

Por exemplo, no Linux, a leitura de /proc/sys/vm/swappiness terá como padrão um


valor de 60. Gravar o valor 100 nesse arquivo resultará imediatamente em um sistema
mais agressivo com a paginação de memória. virtual, procurando deixar mais espaço de
memória física disponível (consulte a seção 5.5) do que normalmente faria. Por outro
lado, escrever o valor um fará com que o sistema operacional execute a paginação
somente se não houver outra alternativa. Um valor de zero terá o efeito de desabilitar
completamente a paginação. Este arquivo, como todos os que compõem o /proc, é
apresentado aos processos em execução como um arquivo de tipo normal — a
peculiaridade está no sistema de arquivos em que está localizado.

É claro que, por mais simples que possa parecer a leitura de um arquivo, ler ou
modificar um valor dentro de /proc também atravessa uma série de chamadas de
sistema; que a configuração da memória virtual seja disponibilizada através de algo que
parece ser um arquivo (mas não é) é justamente um caso de abstração para uma
interface consistente e conhecida.
Machine Translated by Google

278 CAPÍTULO 7. SISTEMAS DE ARQUIVO

7.2. Esquemas de alocação de espaço


Até este ponto, o envio de entradas de diretório foi limitado a
indicar que tem um ponteiro para o local onde começa o espaço usado
para o arquivo. Não foi detalhado como é implementada a alocação e administração do
referido espaço. Nesta seção, uma breve visão geral do
três mecanismos principais, para então explicar como a implementação
do FAT, abordando seus principais pontos fortes e fracos.

7.2.1. atribuição contígua


Os primeiros sistemas de arquivos em disco usavam um esquema de alocação
contígua. Para implementar tal sistema de arquivos, eu não faria
falta de uma tabela de alocação de arquivos: a informação seria suficiente
que faz parte do diretório FAT — a extensão e o endereço do arquivo
do seu primeiro cluster.

Figura 7.3: Mapeamento de arquivos contíguos: diretório com início e comprimento.

A principal vantagem desse mecanismo de atribuição, é claro, é a simplicidade de


sua implementação. Ele também fornece a melhor velocidade de transferência de
arquivos, pois cada um dos arquivos está no espaço
contígua no disco, o movimento da cabeça é reduzido ao mínimo. Sem
No entanto, esse mecanismo torna-se extremamente inconveniente em mídias que
apoiar a leitura e a escrita: é muito sensível à fragmentação externa; se um arquivo
precisa crescer, ele deve ser movido em sua totalidade para um bloco maior
(o que leva muito tempo) e o espaço que um arquivo libera caso
se sua necessidade de espaço for reduzida, ele ficará preso entre os blocos alocados.
Podemos ter muito mais espaço disponível do que podemos alocar para
um novo arquivo.
Esquemas de alocação contígua são usados hoje principalmente em sistemas de
arquivos somente leitura, por exemplo, é usado pelo sistema
usado por CD-ROMs, ISO-9660, projetado para aproveitar ao máximo
Machine Translated by Google

7.2. ESQUEMAS DE ALOCAÇÃO DE ESPAÇO 279

ximo um espaço que, uma vez salvo, só pode ser aberto em modo somente leitura.
Isso explica porque, ao contrário de qualquer outro meio de armazenamento, ao
gravar um CD-ROM é necessário primeiro preparar uma imagem na qual os arquivos
ocupem suas posições finais, e essa imagem deve ser gravada no disco em uma
única operação.

7.2.2. atribuição vinculada


Uma abordagem completamente diferente seria a atribuição vinculada. Este
esquema dá muito mais flexibilidade ao usuário, sacrificando a simplicidade e a
velocidade: cada entrada no diretório aponta para um primeiro grupo de setores (ou
cluster), e este contém um ponteiro para o próximo.
Para isso, existem dois mecanismos: o primeiro é reservar um espaço no final de
cada cluster para armazenar o ponteiro, e o segundo é criar uma tabela separada que
armazena apenas os ponteiros.
No primeiro caso, se forem tratados clusters de 2048 bytes, e reservados os
quatro bytes finais (32 bits) de cada um, o resultado seria de grande inconveniência
para os programadores, pois frequentemente procuram alinhar suas operações com
os limites do estruturas subjacentes, para otimizar os acessos (por exemplo, para
evitar que um único registro de banco de dados precise ser lido de dois blocos
diferentes no disco). O programador teria que projetar suas estruturas para caber na
quantidade pouco ortodoxa de 2044 bytes.
E além desse inconveniente, salvar os ponteiros no final de cada cluster torna o
manuseio de todos os arquivos muito mais lento: por não ter a lista de clusters que
compõem um arquivo em um único local, todas as transferências se tornam
sequenciais: para chegar diretamente a um determinado bloco no arquivo, você terá
que percorrer todos os blocos anteriores para encontrar sua localização.

Particularmente por causa desse segundo ponto, o uso de uma tabela de alocação
de arquivos é muito mais comum – e é exatamente assim que o FAT funciona (na
verdade, essa tabela é o que lhe dá o nome). A tabela de alocação é um mapa dos
clusters, representando cada um deles pelo espaço necessário para armazenar um
ponteiro.
A principal vantagem de usar a atribuição vinculada é que a fragmentação interna
desaparece. 16 Não exigindo mais espaço contíguo para ser pré-alocado, cada arquivo
pode aumentar ou diminuir conforme necessário.
Agora, a alocação vinculada não é apenas mais lenta do que a alocação contígua,
mas também introduz mais sobrecarga administrativa: espaço desperdiçado para

16A fragmentação interna refere-se aqui ao conceito apresentado na seção 5.2.1. O fenômeno
geralmente conhecido como fragmentação refere-se à necessidade de compactação; é muito
diferente, e é apresentado neste esquema: cada arquivo é separado em pequenos fragmentos que
podem acabar espalhados por todo o disco, afetando fortemente o desempenho do
sistema.
Machine Translated by Google

280 CAPÍTULO 7. SISTEMAS DE ARQUIVO

Figura 7.4: Atribuição de arquivos vinculados: diretório com ponteiro apenas para o primeiro
cluster.

armazenar ponteiros é normalmente próximo a 1% da mídia disponível.

Este esquema também introduz a fragilidade dos metadados: se algum dos


ponteiros for perdido ou corrompido, isso fará com que todo o arquivo seja perdido
daquele ponto até o final (e abre a porta para a corrupção de outro arquivo, se o
ponteiro continuar faltando). a um bloco usado por ele; falha e recuperação sob esses
esquemas serão abordados na seção 7.3).
Hay dos mecanismos de mitigación para este problema: el empleado por los
sistemas FAT es guardar una (o, bajo FAT12, dos) copias adicionales de la tabla de
asignación, entre las cuales el sistema puede verificar que se manten gan consistentes
y buscar corregirlas en caso contrário. Por outro lado, pode-se utilizar uma estrutura
de lista duplamente encadeada (em vez de uma simples lista encadeada) em que
cada elemento aponta tanto para o próximo quanto para o anterior, com o qual, caso
seja detectada uma inconsistência na informação, pode ser rolado para frente e para
trás para confirmar os dados corretos. Em ambos os casos, no entanto, a sobrecarga
administrativa é duplicada.

7.2.3. alocação indexada


O terceiro modelo é a alocação indexada, o mecanismo usado por quase todos
os sistemas de arquivos modernos. Nesse esquema, é criada uma estrutura
intermediária entre o diretório e os dados, única para cada arquivo: o i-node (ou nó de
informação). Cada um salva os metadados e a lista de bloqueio do arquivo, reduzindo
a probabilidade de corrupção do ponteiro mencionada na seção anterior.

A sobrecarga administrativa sob este esquema é potencialmente muito


Machine Translated by Google

7.2. ESQUEMAS DE ALOCAÇÃO DE ESPAÇO 281

Figura 7.5: Alocação de arquivos indexados: diretório com ponteiro de i-node


(exemplificado com um i-node de tamanho extremamente ineficiente).

maior: ao atribuir o i-node, ele é criado ocupando pelo menos um cluster completo. No
caso de um arquivo pequeno, que cabe em um único cluster, isso representa um
desperdício de 100% de espaço (um cluster para o i-node e outro para os dados);17
para arquivos maiores, o overhead relativo diminui, mas ele sempre permanece mais
alto que o da atribuição vinculada.
Um esquema de alocação indexada fornece maior eficiência de cache do que a
alocação vinculada: embora neste caso seja comum manter uma cópia da tabela de
alocação na memória para maior agilidade, com a alocação indexada será suficiente
armazenar em cache apenas as informações importantes, ou seja, , apenas os arquivos
que são usados em um determinado momento. O mapa de alocação para arquivos e
diretórios que não foram usados recentemente não precisará estar na memória.

É claro que, enquanto nos esquemas acima a tabela central de alocação de


arquivos pode ser usada diretamente como bitmap do volume, em sistemas de arquivos
de alocação indexada torna-se necessário ter um bitmap separado - mas exigindo
apenas representar se cada cluster está vazio ou ocupado ( e não apontar mais para o
próximo), resulta em um tamanho muito menor.

Agora, o que acontece quando a lista de clusters em um arquivo não cabe em um i-


node? Este exemplo é ilustrado no terceiro arquivo da Figura 7.6: neste caso, cada i-
node pode conter apenas três ponteiros.18 Ter um arquivo

17Alguns sistemas de arquivos, como Reiser, BTRFS ou UFS, possuem esquemas de alocação
de subcluster. Essas chamadas enfileiram (caudas) para arquivos muito pequenos e podem localizá-
los dentro de seu mesmo i-node ou compartilhando o mesmo cluster com um deslocamento dentro dele.
Essa prática não foi adotada pelos sistemas de arquivos mais usados devido à sua complexidade.
relativo.
18Esse é um limite muito baixo e foi escolhido apenas para ilustrar o ponto atual.
Machine Translated by Google

282 CAPÍTULO 7. SISTEMAS DE ARQUIVO

Figura 7.6: Estrutura típica de um i-node em Unix, mostrando também o número de


acessos ao disco necessários para chegar a cada cluster (com apenas três clusters
por lista).

com quatro clusters, torna-se necessário estender o i-node com uma lista adicional.
A implementação mais comum desse mecanismo é que, dependendo do tamanho
do arquivo, são usados ponteiros com os níveis de indireção necessários.

Qual seria o tamanho máximo do arquivo endereçável sob este esquema e


apenas três indireções? Assumindo tamanhos típicos hoje (clusters de 4 KB e
endereços de 32 bits), 128 ponteiros podem caber em um cluster vazio (para 100
4 096
ponteiros:32 ). Se os metadados ocupam 224 bytes no i-node, deixando espaço

Um arquivo de até (100 ÿ 3) × 4 KB = 388 KB pode ser totalmente referenciado


diretamente no i-node, sendo necessário um único acesso ao disco para obter
sua lista de clusters.

Um arquivo de até (100 ÿ 3 + 128) × 4 KB = 900 KB pode ser representado


Machine Translated by Google

7.2. ESQUEMAS DE ALOCAÇÃO DE ESPAÇO 283

com o bloco de indireção simples, e obter sua lista de clusters significa dois
acessos adicionais ao disco.

Com o bloco de dupla indireção, arquivos muito maiores podem ser referenciados:
(100 ÿ 3 + 128 + (128 × 128)) × 4 KB = 66 436 KB ÿ 65 MB . para acessar esses
65 MB, é necessário realizar até 131 acessos ao disco. A partir deste ponto, é
importante que o sistema operacional aloque clusters próximos para os
metadados (e, se possível, para os dados), pois a diferença de tempo de acesso
pode ser muito grande.

Usando a indireção tripla, podemos chegar a: (100 ÿ 3 +


128 + (128 × 128) + (128 × 128 × 128)) × 2 KB = 8.455.044 ÿ kbÿ ÿ 8 GB

Isso já é mais do que pode ser representado em um sistema de 32 bits.


O número de blocos a serem lidos, porém, para encontrar todos os clusters
significaria até 16.516 acessos ao disco (pior caso).

7.2.4. Tabelas em FAT


Voltando ao caso apresentado como exemplo, para o sistema de arquivos FAT,
cada entrada de diretório aponta para o primeiro cluster que cada arquivo ocupa, e é
utilizado um esquema de alocação vinculado. O diretório também possui um campo
que indica o comprimento total do arquivo, mas este não é utilizado para ler as
informações, mas para poder apresentá-las mais rapidamente ao usuário (e para que
o sistema operacional saiba onde indicar o fim do arquivo). o arquivo ao ler o último
cluster que compõe um determinado arquivo).
A estrutura fundamental desse sistema de arquivos é a tabela de alocação de
arquivos - tanto que leva seu nome, FAT.

Cada entrada do FAT mede qual o comprimento correspondente à sua versão (12,
16 ou 32 bits), e armazena ou o próximo cluster do arquivo, ou um dos valores
especiais descritos na Tabela 7.2.
Vale ressaltar que existe um valor especial para indicar que um cluster possui
setores defeituosos. Isso remonta ao momento histórico da criação da família FAT:
com o meio de armazenamento predominante sendo o disquete, os erros na superfície
eram muito mais frequentes do que são hoje.

Uma característica notável do FAT é que ele parece permitir a fragmentação de


arquivos por design: como cada descritor de cluster deve apontar para o próximo,
pode-se supor que o caso comum é que
Machine Translated by Google

284 CAPÍTULO 7. SISTEMAS DE ARQUIVO

Tabela 7.2: Valores especiais que podem ser armazenados pelo FAT; qualquer outro valor indica
o endereço do próximo cluster que faz parte do arquivo ao qual o arquivo pertence
registro em questão.

FAT12 FAT16 FAT32 Significado


0x000 0x0000 0x00000000 Disponível, pode ser atribuído.
0xFF7 0xFFF7 0xFFFFFF7 Cluster danificado, não deve ser usado.
0xFFF 0xFFFF 0xFFFFFFFF Último cluster de um arquivo.

clusters não ocuparão contíguos no disco. Claro, a tabela pode apontar


para vários clusters adjacentes, mas o próprio sistema de arquivos não faz nada
para que assim seja.

Figura 7.7: Exemplo de entradas na tabela de alocação de arquivos em FAT32.

Na seção 7.1.4, ao introduzir o formato de diretório FAT, foi mencionado que os subdiretórios
são na verdade arquivos de um tipo especial: a
tipo de arquivos estruturados (ver seção 6.2.5), gerenciados pelo sistema operacional. A única
coisa que distingue um diretório de um arquivo normal
é que, na entrada que o descreve em seu diretório pai, o décimo segundo byte de
a entrada (que indica os atributos do arquivo, veja a figura 7.1 e a tabela
7.1) tem o bit quatro definido.
Um diretório é armazenado no disco exatamente como qualquer outro arquivo. Se apenas
um cluster for atribuído e o tamanho do cluster for pequeno
2.048
(2 KB), você pode armazenar apenas 64 entradas ( 32 ) e cada cluster adicional fornecerá
mais 64 bilhetes. E como é tratado como se fosse um arquivo normal,
também estará sujeito à fragmentação: à medida que as entradas são adicionadas ao
diretório, ele vai crescer. Quando chegar a hora, serão necessários clusters adicionais. S
Machine Translated by Google

7.3. FALHAS E RECUPERAÇÃO 285

se um diretório acabar espalhado por todo o disco, isso resultará - como qualquer
outro arquivo – mais lento para ler e trabalhar. Sempre que um arquivo é aberto
dentro de um diretório grande, ou sendo percorrido para abrir algum arquivo em
um subdiretório seu, o sistema terá que procurar todos os seus fragmentos
comprimento do disco.
Diante desses dois aspectos, não se pode perder de vista a idade do sistema FAT.
Outros sistemas de arquivos mais recentes resolveram esse problema usando grupos de
alocação: os diretórios do sistema estão espalhados
em todo o volume, e tentativas são feitas para colocar arquivos perto dos diretórios
de onde são encaminhados.19 Isso tem como consequência que os arquivos
que apresentem proximidade temática (que pertençam ao mesmo usuário ou projeto,
ou que por algum motivo estão na mesma parte da hierarquia do sistema)
eles estão localizados no disco próximos uns dos outros (e próximos de seus diretórios). S
Como eles provavelmente serão empregados mais ou menos ao mesmo tempo, isso
reduz as distâncias que os cabeçotes percorrerão. Além disso, ao divulgar
os arquivos, o espaço livre também é melhor distribuído, então o efeito
de alterações de tamanho de arquivo em termos de fragmentação
limita aqueles que fazem parte do mesmo bloco de alocação.
Sistemas de arquivos estruturados seguindo essa lógica de
grupos de alocação não impedem a fragmentação, mas a maioria
suas consequências negativas. Para manter esse esquema funcionando de maneira
confiável, eles exigem disponibilidade de espaço — quando ocorre a saturação, essa
estratégia perde eficácia. Para evitar que isso aconteça, é
muito comum em sistemas Unix que haja uma certa porcentagem (normalmente perto de
5%) do disco disponível apenas para o administrador — em
Se o sistema de arquivos exceder 95%, os usuários não poderão gravar nele, mas o
administrador poderá realizar tarefas de manutenção para
retornar ao alcance operacional.

7.3. Falhas e recuperação


O sistema de arquivos FAT é relativamente frágil: não é difícil introduzir
uma situação de corrupção de metadados e, muito particularmente, que isso afeta a
estrutura das tabelas de alocação. Usuários de sistemas baseados
em FAT no Windows você certamente conhece CHKDSK e SCANDISK, dois programas
que implementam a mesma funcionalidade básica e diferem principalmente em
sua interface de usuário: CHKDSK existe desde os primeiros anos do MS-DOS e destina-
se ao uso interativo na linha de comando; scandisk é executado
do ambiente gráfico, e tem a particularidade de não exigir (embora recomende fortemente)
acesso exclusivo ao sistema de arquivos enquanto
É executado.

19É claro que, no caso de arquivos que são links físicos de vários diretórios, você pode
den estar localizado apenas perto de um deles.
Machine Translated by Google

286 CAPÍTULO 7. SISTEMAS DE ARQUIVO

Como funcionam esses programas?


Ao longo da vida de um sistema de arquivos, à medida que os arquivos são
eles são alocados e liberados, mudam de tamanho e, à medida que o sistema de arquivos
é montado e desmontado, podem aparecer inconsistências em sua estrutura. Em sistemas
do tipo FAT, as principais inconsistências20 são:

Arquivos com links cruzados Lembre- se de que a entrada no diretório


de um arquivo inclui um ponteiro para o primeiro cluster de uma cadeia. Cada
cadeia deve ser única, ou seja, nenhum cluster deve pertencer a mais de
um arquivo. Se dois arquivos incluirem o mesmo cluster, isso indica uma
inconsistência e a única maneira de resolvê-lo é truncar um dos arquivos.
no ponto imediatamente anterior a esta interseção.

Cadeias perdidas ou órfãs (clusters perdidos) Quando há espaço marcado como ocupado
na tabela de alocação, mas não há entrada de
ao fazer referência a ele, o espaço é efetivamente bloqueado e, do ponto de vista
do usuário, inutilizável; além disso, essas strings podem ser um arquivo que o
usuário ainda precisa.
Este problema era tão prevalente nas versões históricas do Unix que
ainda hoje é muito comum ter um diretório chamado lost+found in
a raiz de todos os sistemas de arquivos, onde fsck (o equivalente em
CHKDSK Unix) criou links para arquivos perdidos devido à corrupção de arquivos.
metadados.

Cada sistema de arquivos pode ter um conjunto diferente de inconsistências,


dependendo de suas estruturas básicas e da forma como cada
sistema operacional lida com eles.
Os controladores de disco começaram a ser vendidos na década de 1980.
inteligentes, e em menos de 10 anos já dominavam o mercado. Esses controladores, com
interfaces físicas tão diferentes quanto SCSI, IDE ou as mais modernas,
SAS e SATA, introduziu muitas mudanças que foram dissociando cada vez mais
ao sistema operacional do gerenciamento físico direto dos dispositivos; no apêndice C é
apresentado com maior profundidade o que isso significou para o
desenvolvimento de sistemas de arquivos e algoritmos relacionados. No entanto, para o
tema em discussão, os controladores inteligentes são relevantes porque,
Embora anteriormente o sistema operacional pudesse determinar com certeza se um
operação foi realizada ou não, hoje os controladores dão um reconhecimento de
Recebo as informações no momento em que são colocadas no cache interno do dispositivo
- em caso de falha de energia, essas informações podem
não foram completamente gravados no disco.
É importante lembrar que as operações nos metadados que compõem o sistema de
arquivos não são atômicas. Por exemplo, crie um
arquivo em um volume FAT requer:

20Não os únicos. Estes e mais são descritos brevemente na página de manual para
dosfsck (ver seção 7.4.3).
Machine Translated by Google

7.3. FALHAS E RECUPERAÇÃO 287

Figura 7.8: Inconsistências em um sistema de arquivos do tipo FAT .

1. Encontre uma lista de clusters disponíveis suficientes para armazenar o


informações que irão compor o arquivo.

2. Localize o próximo espaço disponível no diretório.

3. Marque na tabela de alocação a sequência de clusters que ocupará o


Arquivo, arquivo.

4. Crie no espaço encontrado uma entrada com o nome do arquivo,


apontando para o primeiro de seus clusters.

5. Armazene os dados do arquivo em questão nos clusters determinados


na etapa 1.

Qualquer falha após a terceira passagem (após a primeira modificação) resultará na


corrupção do arquivo e, muito provavelmente, tudo no sistema de arquivos ficará inconsistente
ou em um estado inconsistente.

7.3.1. Dados e metadados


No exemplo que acabamos de apresentar, o sistema de arquivos estará em um estado
consistente enquanto as etapas 3 e 4 forem concluídas — a consistência do sistema de arquivos
é independente da validade dos dados no arquivo. O que o sistema de arquivos busca, mais do
que garantir a integridade dos dados de um dos arquivos, é garantir a integridade dos
metadados: os dados que descrevem o
estrutura.
Machine Translated by Google

288 CAPÍTULO 7. SISTEMAS DE ARQUIVO

No caso de um usuário desconectar uma unidade no meio da operação, é


É muito provável que haja perda de informações, mas o sistema de arquivos deve
procurar não apresentar nenhum problema que coloque em risco as operações.
arquivos subseqüentes ou não relacionados. Corrupção e recuperação de dados em
arquivos corrompidos e truncados, embora também de grande importância, cai
em vez disso, no domínio dos aplicativos do usuário.

7.3.2. Verificação de integridade

Todo sistema operacional inclui programas para realizar a verificação (e, em


se aplicável, correção) da integridade de seus sistemas de arquivos. No caso de MS-
DOS e Windows, como já vimos, esses programas são CHKDSK e
SCANDISCO; em sistemas Unix, o programa geral é chamado fsck, e normalmente
emprega assistentes dependendo do tipo de sistema a ser verificado —
fsck.vfat, fsck.ext2 e assim por diante.
Esses programas verificam o sistema de arquivos, procurando evidências de
inconsistências. Eles fazem isso, em geral:

Seguindo todas as cadeias de clusters de arquivos ou tabelas de i-node e


verificando arquivos cruzados (compartilhando erroneamente
blocos).

Verificando se todas as cadeias de clusters, bem como todos os diretórios, são


alcançáveis e seguem uma estrutura válida.

Recalculando a correspondência entre as estruturas encontradas e o


diferentes bitmaps e totais de espaço vazio.

Essas operações são sempre processos intensivos e complexos. Como eles exigem
uma revisão detalhada de todo o volume, geralmente duram de dezenas de minutos a
horas. Além disso, para cumprir sua missão
eles devem ser executados com acesso exclusivo ao volume a ser verificado, o que
normalmente significa colocar todo o sistema em modo de manutenção.
Dado o alto custo de verificação de todo o volume, na década
Na década de 1990, surgiram vários esquemas com o objetivo de evitar a necessidade de
invocar estes programas de verificação: atualizações suaves, sistemas
sistemas de arquivos de log e sistemas de arquivos estruturados em log.

7.3.3. atualizações suaves

O esquema de atualizações suaves é aparentemente o mais


simples das que são apresentadas, mas sua implementação foi muito mais
complexo do que inicialmente estimado e, em grande medida, por esta razão
tem sido usado mais amplamente. A ideia básica por trás deste esquema é
Machine Translated by Google

7.3. FALHAS E RECUPERAÇÃO 289

estruturar o sistema de arquivos de maneira mais simples e organizar as gravações do


sistema de arquivos de modo que o estado resultante não possa ser inconsistente,
nem mesmo em caso de falha, e exigem que todas as operações sejam atualizadas 21
ção de metadados são realizadas de forma síncrona.
Diante da impossibilidade de se ter um sistema sempre consistente, essa exigência
relaxado para permitir inconsistências não destrutivas: strings ausentes podem ocorrer,
pois isso não coloca nenhum arquivo em risco, apenas diminui
o espaço total disponível.
Isso, juntamente com uma reestruturação do programa de verificação (fsck)
como uma tarefa executável em segundo plano22 e em uma tarefa do coletor de lixo, que
não requer intervenção humana (já que inconsistências destrutivas não podem ocorrer),
permite que um sistema de arquivos que não foi desmontado corretamente seja montado
e usado imediatamente, sem perigo de
perda ou corrupção de dados.
Ao exigir que todas as operações sejam síncronas, parece que o desempenho geral
do sistema de arquivos teria que ser afetado, mas para
certos padrões de acesso muito frequentes, é até benéfico. Ao manter uma ordem lógica
entre as dependências de todas as operações pendentes, o sistema operacional pode
combinar muitas delas e reduzir
grava em disco globalmente.
Como exemplos: se vários arquivos forem criados no mesmo diretório
consecutivamente, cada um deles através de uma chamada open() independente, o
sistema operacional combinará todos esses acessos em um,
reduzindo o número de chamadas. Por outro lado, um padrão frequente em sistemas Unix
é que, para criar um arquivo de uso temporário, reforçando a confidencialidade de seu
conteúdo, o processo solicita que o sistema crie um arquivo.
arquivo, abra o arquivo recém-criado e tendo o descritor de arquivo,
delete — neste caso, com essas três operações seguidas, as atualizações suaves podem
salvar completamente a gravação no disco.
Essa estratégia foi afetada por controladores inteligentes: se um disco
estiver sob carga pesada, não há garantia para o sistema operacional do
ordem que seus pedidos realmente seguirão, que são formados no próprio cache
do disco. Como as atualizações suaves dependem muito de
de confiar no pedido, isso quebra completamente a confiabilidade do pedido.
processo.
Atualizações suaves foram implementadas por volta de 2002 no sistema
sistema operacional FreeBSD , e foram adotados pelos principais sistemas da família
BSD, embora o NetBSD o tenha retirado em 2012, preferindo utilizar sistemas com
blog, tema que será discutido a seguir. Lógica mais provável
por trás desta decisão está o número de sistemas que usam este segundo

21Ou seja, o sucesso de alguma operação de arquivo não é reportado ao usuário até que seja
Concluído e gravado em disco.
22 Uma tarefa que não requer intervenção manual do operador e é realizada
automaticamente como parte das tarefas de manutenção do sistema.
Machine Translated by Google

290 CAPÍTULO 7. SISTEMAS DE ARQUIVO

estratégia, e quão complexo é manter dentro do núcleo


Duas estratégias muito diferentes.

7.3.4. Sistemas de arquivos de log

Este esquema tem sua origem no campo de bancos de dados distribuídos. Consiste
em separar uma área do volume e dedicá-la a manter um log
(diário) com todas as transações de metadados.23 Uma transação é um conjunto de
operações que devem aparecer como atômicas.
O log geralmente é implementado como uma lista circular encadeada, com
um ponteiro indicando a última operação bem-sucedida.
Periodicamente, ou quando a carga de transferência de dados diminui, o sistema
verifica quais operações estavam pendentes e avança no log,
marcando cada uma das transações à medida que você as faz.

No caso de ter que se recuperar de uma condição de falha, o sistema operacional


só precisa ler o log, descobrir qual foi a última operação
realizado e aplique o restante.
Uma restrição deste esquema é que as transações salvas no
log deve ser idempotente - isto é, se um deles for executado duas vezes, o efeito deve
ser exatamente o mesmo que se tivesse sido executado duas vezes.
uma vez. Por exemplo, não seria válido para uma transação indicar
“adicione ao diretório x um arquivo chamado y”, pois se a falha ocorrer após o
processamento desta transação, mas antes de avançar para o ponteiro
do log, o diretório x ficaria com dois arquivos y — uma situação inconsistente. De
qualquer forma, teríamos que indicar “registrar no arquivo e no
posição z do diretório x”; desta forma, mesmo que o arquivo já tenha sido
registrado, pode ser feito novamente com segurança.
Este esquema é o mais utilizado atualmente, e está presente em quase todos os
sistemas de arquivos modernos. Embora com um sistema com logbook não
faltando a verificação de todo o sistema de arquivos após uma parada abrupta, isso
Não dispensa que, de tempos em tempos, o sistema de arquivos seja verificado:
É altamente recomendável realizar uma verificação periódica em caso de qualquer
corrupção, seja devido a um bug na implementação, falhas no
ambiente físico, ou fatores igualmente raros.
A maioria dos sistemas de arquivos inclui contadores de quantidade.
de montagens e data da última montagem, que permitem que o sistema operacional
determinar, automaticamente, se é apropriado realizar uma verificação preventiva.

23Existem implementações que também registram os dados no log, mas tanto pelo tamanho
que requer quanto ao efeito na velocidade que significa, são pouco utilizados. Seção 7.3.5
apresenta uma ideia que ele elabora em um blog que armazena dados e metadados.
Machine Translated by Google

7.3. FALHAS E RECUPERAÇÃO 291

Figura 7.9: Sistema de arquivos com log.

7.3.5. Sistemas de arquivos estruturados em log

Se você levar o conceito de sistema de arquivos de log ao seu limite e


todo o espaço no volume é chamado de log, o resultado é um sistema de
arquivos estruturado em log.
Obviamente, esse tipo de sistema de arquivos apresenta uma organização
completa radicalmente diferente dos sistemas de arquivos tradicionais.
As idéias básicas por trás da primeira implementação de um sistema de
arquivos desta natureza (Ousterhut e Rosenblum, 1992) apontam para o uso
cache agressivo de grande capacidade e com um forte mecanismo de coleta
de lixo, reorganizando as informações que estão mais próximas da fila do
log (e liberando tudo o que é redundante).
Este tipo de sistema de arquivos facilita as gravações, tornando-as sempre
sequenciais, e pesquisam –através do uso do cache mencionado anteriormente–
evitar que as cabeças tenham que se mover com muita frequência para
recuperar fragmentos de arquivos.
Uma consequência direta disso é que os sistemas de arquivos estruturados
em log foram os primeiros a oferecer instantâneos do sistema.
de arquivos: é possível apontar para um momento no tempo, e –com o sistema
sistema de arquivos ainda em operação – monte uma cópia somente leitura
com informações completas do sistema de arquivos (incluindo dados de arquivo).
Os sistemas de arquivos estruturados em log, no entanto, não são
Otimizado para qualquer carga de trabalho. Por exemplo, um banco de dados
relacional, no qual cada um dos registros é normalmente atualizado
independente dos outros, ocupando apenas frações de um quarteirão, seria
grosseiramente ineficiente. A implementação de referência de Ousterhut e
Rosenblum fazia parte dos sistemas BSD, mas dada a sua tendência a
fragmentação, foi removido deles.
Machine Translated by Google

292 CAPÍTULO 7. SISTEMAS DE ARQUIVO

Este tipo de sistema de arquivos oferece recursos muito interessantes,


embora seja um campo que ainda requer muita pesquisa e implementações de exemplo.
Muitas das implementações em sistemas livres atingiram níveis de funcionalidade aceitáveis,
mas por vários motivos foram
perdendo o interesse ou o impulso de seus desenvolvedores, e sua taxa de desenvolvimento
diminuiu. No entanto, vários conceitos muito importantes nasceram
sob este tipo de sistemas de arquivos, alguns dos quais (como o
fotografias) foram aplicadas a sistemas de arquivos padrão.
Por outro lado, dado o forte crescimento registrado pela mídia
armazenamento em estado sólido (na seção C.1.2 abordaremos alguns
das suas particularidades), e dado que estes sistemas conseguem tirar melhor partido
várias de suas características, é provável que o interesse por esses sistemas de
os arquivos ressurgem.

7.4. Treinamento
7.4.1. Perguntas de autoavaliação
1. Suponha o seguinte sistema de arquivos baseado em alocação indexada.
Cada cluster tem 4096 bytes de comprimento e o ponteiro para um bloco requer 32 bytes.
bits (4 bytes). Dados os metadados a serem armazenados no i-node
do arquivo, dentro do i-node principal você pode armazenar 24 ponteiros
direto, e está considerando permitir a indireção simples e dupla.

Qual é o tamanho máximo de arquivo que este sistema será capaz de lidar
de arquivos?

2. O sistema de arquivos Reiser é baseado na alocação de índice, mas


introduz um novo conceito: caudas. Eles permitem que diferentes arquivos pequenos,
de até 4 KB, sejam armazenados em um
mesmo aglomerado. Isso permite que Reiser economize espaço em disco (estimado
que atinge uma eficiência até 5% superior aos sistemas que não utilizam
esta técnica), e também reduz o tempo necessário para recuperar esses
arquivos, uma vez que os dados podem ser armazenados no mesmo i-node que
qualquer uma de suas bibliotecas, sem exigir a leitura de nenhum bloco adicional.

Reiser tornou-se popular por volta de 2001, mas seu desenvolvimento parou, e esse
recurso específico só foi adotado por
alguns sistemas de arquivos (UFS2 e BTRFS). Que problemas você encontra com a
abordagem pigtail?

3. Descreva a operação de um sistema de arquivos de diário. Como você garante que o


sistema permanecerá consistente após uma queda abrupta de energia?
Machine Translated by Google

7.4. TREINAMENTO 293

7.4.2. Tópicos de pesquisa sugeridos

Desduplicação Um dos recursos oferecidos por vários sistemas operacionais de última


geração é a desduplicação, apresentada na seção
7.1.5: a detecção de setores idênticos pertencentes a mais de um arquivo, para evitar
repeti-los várias vezes no disco (é um fenômeno que
Acontece muito mais do que esperávamos). Essa detecção geralmente é feita por
meio de hashes criptográficos.

Como esse mecanismo funciona com um pouco mais de detalhes, quão confiável é?
(ou seja, é recomendado para uso já em sistemas de produção?)
resultados eficientes com os dados normalmente encontrados, o que acontece
com o espaço livre informado ao sistema, não há risco de overcommit? Em relação ao
seu modo de operação, o que
diferenças têm a desduplicação online e a desduplicação offline
(desduplicação online, desduplicação offline), como funciona o hash criptográfico?
E, em geral, há momentos em que esse mecanismo é insuficiente,
que alternativas existem?

Para referência informal sobre isso, leia o seguinte tópico de discussão


sobre isso na lista DebConf (Debian Congress):
http://lists.debconf.org/lurker/message/
20130813.100610.f38cd67f.en.html

7.4.3. Leitura relacionada

Domingos Giampaolo (1999). Projeto prático de sistema de arquivos com o sistema


de arquivos Be. Morgan Kaufmann Publishers Inc. ISBN: 1-55860-497-9. URL:
http: // www. nobius. org / ~dbg / prático - arquivo - sistema -
projeto.pdf. O autor fez parte da equipe que implementou o sistema
Sistema operacional BeOS , um sistema de alto desempenho projetado para rodar
em estações de alto desempenho, especialmente focadas em vídeo. o
O projeto acabou falhando e o BeOS (assim como o BeFS, o sistema que ele
descreve) não é mais usado. Este livro, disponível para download no site de sua
autor, tem uma descrição muito boa de vários sistemas de arquivos,
e trata em profundidade com técnicas que há 15 anos eram verdadeiramente
inovadores e hoje fazem parte de quase todos os sistemas de arquivos com
ampla utilização, e mesmo alguns que não foram implementados e que
O BeFS ofereceu.

T. J. Killian (1984). Processos como Arquivos. In: Associação USENIX. Salt Lake City.
URL: http://lucasvr.gobolinux.org/etc/Killian84-
Procfs-USENIX.pdf

David A. Huffman (1952). «Um método para a construção de Códigos de Redundância


Mínima». Em: v. 40. URL do IRE : http://compressão.
Machine Translated by Google

294 CAPÍTULO 7. SISTEMAS DE ARQUIVO

gráfico. ru/download/articles/huff/huffman Minimum-redundancy-codes.pdf _ 1952 _

Mufti Mohammad (2007). Estrutura de diretório raiz FAT no disquete e


Informações do arquivo. Codeguru. URL: http://www.codeguru.com/cpp/
cpp/cpp_mfc/files/article.php/c13831

Peter Clark (2001). Começando a ver a luz - FAT16, Tabela de alocação de arquivos:
16 bits. URL: http://www.beginningtoseethelight.org/fat16)

Marshall K. McKusick et al. (agosto de 1984). “Um sistema de arquivos rápido para
Unix". In: ACM Trans. Computar. Sistema 2.3, pág. 181-197. ISSN: 0734-2071.
DOI: 10.1145/989.990. URL: http://doi.acm.org/10.1145/
989.990

Marshall Kirk McKusick (setembro de 2012). Discos da Perspectiva de um


Sistema de arquivo". Em: Fila ACM 10.9. URL: https://queue.acm.org/
detail.cfm?id=2367378

• Tradução espanhola: César Yáñez (2013). Discos da perspectiva de um sistema de


arquivos. URL: http://cyanezfdz.me/
2013/07/04/disks-from-a -file-system-perspective-en.html

Mendel Rosenblum (junho de 1992). «O Desenho e Implementação de um


Sistema de arquivos estruturado em log”. tese de doutorado Departamento EECS, Universidade de
Califórnia, Berkeley. URL: http://www.eecs.berkeley.edu/Pubs/
TechRpts/1992/6267.html

Dave Poirier (2001-2011). O Segundo Sistema de Arquivo Estendido: Layout Interno.


URL: http://www.nongnu.org/ext2-doc/

César Yanez (2012). NILFS2 no Linux. URL: http://cyanezfdz.me/


2012/08/30/nilfs2-on-linux-pt.html

Jonathan Corbet (2012a). Um ataque DoS baseado em hash no Btrfs. URL: http:
//lwn.net/Articles/529077/,

Christopher Berg. O padrão /etc/apache2/mods-available/disk_cache.conf é incompatível


com ext3. Projeto Debian. URL: bugs.debian.org/682840. Relatório de bug do Debian
ilustrando limites no número de arquivos
para Ext3.

John S. Heidemann e Gerald J. Popek (fevereiro de 1994). «Desenvolvimento de


sistema de arquivos com camadas empilháveis». In: ACM Trans. Computar. Sistema 12.1,
pág. 58-89. ISSN: 0734-2071. DOI: 10 . 1145/174613. 174616. URL:
http://doi.acm.org/10.1145/174613.174616
Machine Translated by Google

7.4. TREINAMENTO 295

Thomas E. Anderson et ai. (fevereiro de 1996). "Sistemas de arquivos de rede sem


servidor". In: ACM Trans. Computar. Sistema 14.1, pág. 41-79. ISSN: 0734-2071.
DOI: 10.1145/225535.225537. URL: http://doi.acm.org/10.
1145/225535.225537

Valéria Aurora (2009). Sistemas de arquivos estruturados em log: há um em cada SSD.


URL: https://lwn.net/Articles/353411/

Você também pode gostar