Você está na página 1de 7

Sistemas de Arquivos

11.6 – Métodos de alocação

 Existem três métodos para se alocar espaço em disco: contíguo, encadeado e indexado.

11.6.1 – Alocação contígua

 Na alocação contígua, cada arquivo ocupa um conjunto de blocos contíguos


(adjacentes) no disco.
 Os endereços de disco definem uma ordem linear no disco, assim, o número de buscas
de disco necessárias para acessar arquivos alocados de forma contígua é mínimo, assim
como o tempo de busca quando a mesma é necessária.
 A alocação contígua de disco é definida pelo endereço de disco (do primeiro bloco) e
tamanho (em unidades de blocos).
 Acesso a um arquivo é fácil, aceita acesso sequencial e direto
 Para acesso sequencial, o sistema de arquivos lembra o endereço de disco do último
bloco referenciado e, se necessário, lê o próximo bloco
 Uma dificuldade da alocação contígua é encontrar espaço para um novo arquivo.
 Best fit (escolhida a melhor partição, que deixa o menor espaço livre) e first fit
(primeira partição disponível) são as estratégias mais comuns usadas para selecionar um
bloco de memória livre do conjunto de blocos de memória disponíveis.
 Best fit e first fit são semelhantes quanto ao uso de memória, mas first fit é geralmente
mais rápido
 esses algoritmos sofrem do problema de fragmentação externa, conforme arquivos são
alocados e excluídos, o espaço livre é dividido em pequenos pedaços. Torna-se um
problema quando o maior pedaço contíguo é insuficiente para o pedido, o
armazenamento é fragmentado em uma série de blocos livres, nenhum dos quais é
grande o suficiente
 fragmentação externa = entre processos, interna = dentro de um processo
 Para resolver o problema da fragmentação externa, pode-se executar a compactação,
mover os processos cobrindo os buracos, porém o custo é alto devido ao tempo, durante
esse tempo indisponível, a operação normal do sistema normalmente não é permitida
 outro problema é determinar quanto espaço é necessário para um arquivo, se alocarmos
pouco espaço para um arquivo, talvez esse arquivo não possa ser estendido, então
restam duas opções, o programa de usuário pode ser encerrado, com uma mensagem de
erro apropriada, o usuário então deverá alocar mais espaço e executar o programa
novamente, para evitar isso, o usuário deve superestimar o espaço necessário, outra
solução é encontrar um bloco livre maior, para copiar o conteúdo do arquivo para o
novo espaço e liberar o espaço anterior, o processo é demorado e deixa o sistema mais
lento
 pré-alocação pode ser ineficiente, um arquivo que cresce ao longo do tempo deve
receber espaço suficiente para seu tamanho final, embora boa parte do espaço fique sem
uso durante muito tempo, portanto, há uma grande quantidade de fragmentação interna
 para evitar várias dessas desvantagens, alguns sistemas utilizam um esquema de
alocação contígua modificado, onde um espaço contíguo é alocado inicialmente e em
caso de necessidade, há uma extensão
 a fragmentação interna ainda poderá ser um problema caso as extensões sejam muito
grandes e a fragmentação externa poderá ser um problema À medida que as extensões
de tamanho variável são alocadas e desalocadas
11.6.2 - Alocação encadeada

 a alocação encadeada resolve todos os problemas da alocação contígua


 cada arquivo é uma lista encadeada de blocos de disco que podem estar dispersos em
qualquer parte do disco
 o diretório contém um ponteiro ao primeiro e último blocos, cada bloco contém um
ponteiro ao próximo bloco
 cada ponteiro inicial é iniciado com valor e tamanho 0, uma escrita no arquivo faz com
que ele seja encontrado pelo sistema de gerenciamento de espaço livre e esse novo
bloco é então gravado e encadeado no final do arquivo
 para ler um arquivo, seguimos os ponteiros de bloco a bloco
 não existe fragmentação externa
 podemos usar qualquer bloco livre, não é necessário declarar o tamanho do arquivo
quando o mesmo é criado, um arquivo pode continuar a crescer desde que hajam blocos
livres, consequentemente nunca será necessário compactar espaço em disco
 desvantagem: só pode ser usada efetivamente para arquivos de acesso sequencial
 outra desvantagem é o espaço usado pelos ponteiros, cada arquivo requer um pouco
mais de espaço do que seria necessário em outro modo
 solução seria agrupar blocos em múltiplos, chamados clusters, diminui o tamanho usado
pelos ponteiros e o número de buscas, custo: aumento da fragmentação interna, porque
mais espaço será desperdiçado caso um cluster esteja parcialmente cheio do que quando
um bloco estiver parcialmente cheio
 outro problema é confiabilidade, pelo fato dos ponteiros estarem dispersos, soluções:
listas de encadeamento duplo ou armazenar o nome de arquivo e o número de bloco
relativo em cada bloco, porém esses esquemas requerem ainda mais custo
 variação do método de alocação encadeada através de uma tabela de alocação de
arquivos: FAT (file allocation table)
 uma seção de disco no início de cada partição é reservado para a tabela, a tabela tem
uma entrada para cada bloco do disco e é indexada pelo número do bloco
 pode resultar em um número significativo de buscas da cabeça de disco, uma vantagem
é que o tempo de acesso aleatório é melhorado, porque a cabeça de disco pode encontrar
a posição de qualquer bloco lendo as informações na FAT

11.6.3 Alocação indexada.

 por causa da dispersão dos blocos, a não ser por FAT, a alocação encadeada não
pode suportar acesso direto eficiente, a alocação indexada resolve esse
problema reunindo todos os ponteiros em um só local: o bloco de índice
 cada arquivo tem seu próprio bloco de índice, que é um vetor de endereços de
bloco de disco. uma entrada no bloco de índice aponta para determinado bloco
do arquivo, o diretório contém o endereço do bloco de índice, para ler o bloco,
usamos o ponteiro equivalente na entrada do bloco de índice para encontrar e
ler o bloco desejado

 Quando o arquivo é criado, todos os ponteiros no bloco de índice são definidos


como nil. Quando o bloco i é gravado pela primeira vez, um bloco é obtido do
gerenciador de espaço livre e o seu endereço é colocado na entrada i do bloco
de índice.

 não sofre de fragmentação externa porque qualquer bloco livre no disco pode
satisfazer um pedido por mais espaço
 o custo dos ponteiros do bloco de índice é geralmente maior que o dos ponteiros
de alocação encadeada

 todo arquivo deve ter um bloco de índice, por isso esse bloco deve ser o menor
possível, mas se for pequeno demais, poderá não conter ponteiros suficientes
para arquivos grandes, para resolver este problema, temos os seguintes
mecanismos:

o esquema encadeado: um bloco de índice geralmente ocupa um bloco de


disco, assim, ele pode ser lido e gravado diretamente por si só, para
arquivos grandes, vários blocos de índice podem ser ligados entre si
o índice multinível: usa um bloco de índice de primeiro nível para
apontar para um conjunto de blocos de segundo nível, que, por sua vez,
aponta para os blocos do arquivo. podem haver mais níveis de acordo
com o tamanho do arquivo
o esquema combinado: mantém, por exemplo, os 15 primeiros ponteiros
do bloco de índice no bloco de índice do arquivo, os 12 primeiros
apontam para blocos diretos, que contêm endereços de blocos que
contêm dados do arquivos, os 3 ponteiros seguintes apontam para
blocos indiretos

 sofre de alguns dos mesmos problemas da alocação encadeada, os blocos de índice


podem ser armazenados em cache na memória, mas os blocos de dados podem estar
dispersos em toda a partição

11.6.4 – Desempenho

 dois critérios fundamentais na seleção dos métodos adequados para implementação


são: eficiência de armazenamento e tempo de acesso aos blocos de dados

 Um sistema onde prevalece o acesso sequencial deve usar um método diferente de


um sistema com acesso basicamente aleatório. Para qualquer tipo de acesso, a
alocaçâo contígua requer apenas um acesso para obter um bloco de disco.

 na alocação encadeada podemos usar acesso sequencial e direto, porém o acesso


direto não é recomendado pelo alto custo

 Como resultado, alguns sistemas suportam arquivos de acesso direto usando


alocaçâo contígua e acesso sequencial por alocaçâo encadeada

 A alocaçâo indexada é mais complexa. Se o bloco de índice já estiver na memória, o


acesso poderá ser feito diretamente.No entanto, manter o bloco de índice na
memória requer espaço considerável. Se não houver espaço disponível na memória,
talvez seja necessário ler primeiro o bloco de índice e, em seguida, o bloco de dados
desejado.Para um índice de dois níveis, duas leituras de bloco de índice podem ser
necessárias.

 Alguns sistemas combinam a alocação contígua com a indexada usando a alocaçâo


contígua para arquivos pequenos (até três ou quatro blocos), e alternando
automaticamente para a alocação indexada se o arquivo ficar grande.
11.7 – Gerência de espaço livre

 como o espaço é limitado, o espaço de arquivos excluídos deve ser reaproveitado,


então o sistema mantém uma lista de espaço livre, ou seja, todos os blocos que não
estão alocados a algum arquivo ou diretório.

11.7.1 – Vetor de bits

 Frequentemente, a lista de espaço livre é implementada como um mapa de bits ou


um vetor de bits. Cada bloco é representado por 1 bit. Se o bloco estiver livre, o bit
será 1; se o bloco estiver alocado, o bit será 0.
 A principal vantagem dessa abordagem é que é relativamente simples e eficiente
encontrar o primeiro bloco livre, ou n blocos livres consecutivos no disco.

11.7.2 – Lista encadeada

 outra possibilidade é encadear todos os blocos de disco livres, mantendo um ponteiro ao


primeiro bloco livre em uma posição especial no disco e armazenando-o em cache na
memória. esse primeiro bloco contém um ponteiro para o próximo bloco livre e assim
por diante.
 geralmente o SO simplesmente precisa de um bloco livre, assim o primeiro bloco é
usado, para o caso em que a lista deve ser percorrida, o esquema não eficiente, pois para
percorrê-la, é necessário ler cada bloco

11.7.3 – Agrupamento

 Uma modificação da abordagem de lista livre é armazenar os endereços de n blocos


livres no primeiro bloco livre. Os primeiros n - 1 desses blocos estão realmente livres. O
bloco final contém os endereços de outros n blocos livres, e assim por diante. A
importância dessa implementação é que os endereços de um grande número de blocos
livres podem ser rapidamente encontrados, diferentemente da abordagem da lista
encadeada padrão.

11.7.4 – Contadores

 Em geral, vários blocos contíguos podem ser alocados ou liberados simultaneamente,


sobretudo quando o espaço é alocado com o algoritmo de alocação contígua ou
atravésdo clustering. Portanto, em vez de manter uma lista de n endereços de disco
livres, podemos manter o endereço do primeiro bloco livre e o número n de blocos
contíguos livres que seguem esse primeiro bloco. Cada entrada na lista de espaço livre
consiste então em um endereço de disco e um contador.
 Embora cada entrada exija mais espaço do que um endereço de disco simples
precisaria, a lista global seria mais curta, desde que o contador fosse geralmente maior
do que 1.

11.8 – implementação de diretórios

 A Seleção dos algoritmos de alocação e gerência de diretórios tem um grande efeito


na eficiência, desempenho e confiabilidade do sistema de arquivos.

11.8.1 - Lista encadeada: O método mais simples de implementar um diretório é usar


uma lista linear de nomes de arquivos com ponteiros aos blocos de dados. Uma
lista linear de entradas de diretório requer uma pesquisa linear para encontrar
uma determinada entrada. Esse método é simples de programar, mas demorado
de executar.
 A verdadeira desvantagem de uma lista linear de entradas de diretório é a pesquisa
linear para encontrar um arquivo. As informações de diretório são usadas
frequentemente, e uma implementação lenta de acesso a elas seria percebida pelos
usuários. Na verdade, muitos sistemas operacionais implementam um cache de
software para armazenar as informações de diretório usadas mais recentemente. A
busca no cache evita ter de ler constantemente as informações do disco.

11.8.2 – tabelas de hash

 Nesse método, uma lista linear armazena as entradas de diretório, mas uma
estrutura de dados com hash também é usada.
A tabela de hash pega um valor calculado a partir do nome do arquivo e retorna um
ponteiro ao nome de arquivo na lista linear. Portanto, pode diminuir em muito o tempo
de pesquisa no diretório.

 As principais dificuldades com uma tabela de hash são o tamanho fixo da tabela e a
dependência da função de hash do tamanho da tabela.
11.9 – Eficiência e desempenho

 podemos considerar o seu efeito no desempenho e uso eficiente do disco. Os discos


tendem a ser um importante gargalo no desempenho do sistema, já que são o
componente principal mais lento do computador. Nesta seção, discutimos técnicas
que melhoram a eficiência e o desempenho do armazenamento secundário.

11.9.1 - eficiência

 O uso eficiente do espaço em disco depende muito dos algoritmos de alocação de


disco e diretório em uso.
Por exemplo, os inodes (INODE é a identidade de um arquivo ou diretório ) do UNIX
são pré-alocados em uma partição. Mesmo um disco "vazio" tem uma percentagem
do seu espaço perdida para os inodes. No entanto, ao pré-alocar os inodes e dispersá-los
em toda a partição, nós melhoramos o desempenho do sistema de arquivos. Esse
desempenho melhorado é resultado dos algoritmos de espaço livre e alocação do UNIX,
que tentam manter os blocos de dados de um arquivo próximos ao bloco de inode do
arquivo, para reduzir o tempo de busca.

 Como outro exemplo, vamos reconsiderar o esquema de clustering, que ajuda o


desempenho de busca de arquivo e transferência de arquivos ao custo da fragmentação
interna. Para reduzir essa fragmentação, o UNIX BSD varia o tamanho do cluster à
medida que o arquivo cresce. Clusters grandes são usados onde podem ser preenchidos,
e clusters pequenos são usados para arquivos pequenos e o último cluster de um
arquivo.

 Também exigem consideração os tipos de dados normalmente mantidos em uma


entrada de diretório (ou inode) de arquivo. Geralmente, a "data de última escrita" é
registrada para fornecer informações ao usuário e determinar se o arquivo precisa
de backup. Alguns sistemas também mantêm um registro da "data de último
acesso", para que o usuário possa determinar quando o arquivo foi lido pela última vez.
O resultado de manter essas informações é que, sempre que um arquivo é lido, um
campo na estrutura de diretório precisa ser gravado. Essa alteração requer que o bloco
seja lido na memória, que uma seção seja alterada e que o bloco seja gravado de volta
para o disco, porque as operações nos discos ocorrem apenas em partes do bloco (ou
clusters). Portanto, sempre que um arquivo é aberto para leitura, sua entrada de diretório
deve ser lida e gravada também. Essa exigência causa a operação ineficiente para
arquivos acessados com frequência, por isso devemos pesar seus benefícios em relação
ao custo de desempenho quando estivermos projetando um sistema
de arquivos. Em geral, todo item de dados associado a um arquivo precisa ser
considerado para avaliar seu efeito na eficiência e desempenho

11.9.2 – desempenho

 Assim que os métodos de disco básicos forem selecionados, ainda existem várias
formas de melhorar o desempenho

 Alguns sistemas mantêm uma seção separada de memória principal para um cache
de disco, no qual os blocos são mantidos considerando que serão usados novamente
em breve. O LRU é um algoritmo de uso geral razoável para a substituição de
bloco. Outros sistemas (como a versão do UNIX da Sun) tratam toda memória
física não-utilizada como um pool de buffers que é compartilhado pelo sistema de
paginação e o sistema de cache de blocos de disco. Um sistema que realiza muitas
operações de I/O usará boa parte da sua memória como um cache de blocos,
enquanto um sistema que executa muitos programas usará mais memória como
espaço de paginação.

 método de usar a memória principal para melhorar o desempenho é comum em


computadorespessoais. Uma seção de memória é reservada e tratada como um disco
virtual, ou disco de RAM. Nesse caso, um driver de dispositivo de disco de RAM
aceita todas as operações de disco padrão, mas realiza essas operações naquela
seção da memória, em vez de no disco. Todas as operações de disco podem ser
executadas nesse disco de RAM e, exceto pela altíssima velocidade, os usuários não
perceberão a diferença. Infelizmente, os discos de RAM são úteis apenas para
armazenamento temporário, já que uma falha de energia ou reinicialização do
sistema geralmente os apagarão. Em geral, arquivos temporários, como arquivos
intermediários de compilação, são armazenados nesses discos.

 A diferença entre um disco de RAM e um cache de disco é que o conteúdo do disco


de RAM é totalmente controlado pelo usuário, enquanto o conteúdo do cache de
disco está sob controle do sistema operacional. Por exemplo, um disco de RAM
ficará vazio até que o usuário (ou programas sob a direção do usuário) crie arquivos
ali.

11.10 • Recuperação
 Como os arquivos e diretórios são mantidos na memória principal e no disco, devemos
cuidar para garantir que uma falha no sistema não resulte em perda ou inconsistência de
dados.

11.10.1 – verificação de consistência

 A verificação de consistência compara os dados na estrutura de diretório com os blocos


de dados no disco e tenta corrigir quaisquer inconsistências encontradas. Os algoritmos
de alocaçâo e gerência de espaço livre determinam os tipos de problemas que o
verificador poderá encontrar e qual será a taxa de sucesso na correção desses problemas.
Por exemplo, se a alocaçâo encadeada for usada e houver uma ligação de cada bloco
para seu próximo bloco, então o arquivo inteiro pode ser reconstruído a partir dos blocos de
dados e a estrutura de diretório pode ser recriada. A perda de uma entrada de diretório no
sistema de alocaçâo indexada pode ser desastrosa, porque os blocos de dados não têm
conhecimento uns dos outros. Por esse motivo, o UNIX armazena em cache as entradas de
diretório para as operações de leitura, mas qualquer escrita de dados que resulte em alocaçâo de
espaço geralmente faz com que o bloco de inode seja gravado para disco antes que os blocos de
dados correspondentes o sejam.

11.10.2 – backup e restauração

 Como os discos magnéticos às vezes falham, devemos ter certeza que não haja perda de
dados. Para isso, podemos usar os programas do sistema para fazer backup dos dados do
disco para outro dispositivo de armazenamento. A recuperação da perda de um arquivo
individual, ou de um disco inteiro, pode então ser uma questão de restaurar os dados do
backup. Para minimizar a quantidade de cópia necessária, podemos usar informações da
entrada de diretório de cada arquivo. Por exemplo, se o programa de backup souber
quando o último backup de um arquivo foi feito,e a data da última escrita no diretório
indicar que o arquivo não sofreu alterações desde então, o arquivo não precisará ser
copiado novamente.

Você também pode gostar