• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ZNez

linux i-nodes

2 mensagens neste tópico

Não sei se aqui é a secção correcta, mas apesar de relativo a SO se tratar de um problema matemático decidi coloca-lo.

Estava a tentar resolver o seguinte exercício (preparação para exame)

Considere a representação de um file-inode do UNIX onde existem

hipoteticamente 15 ponteiros: 12 ponteiros directos para blocos, um

ponteiro para um bloco de ponteiros, um ponteiro “duplo” indirecto e

um ponteiro “triplo” indirecto. Casa bloco ocupa 8Kbytes e o ponteiro

para cada bloco ocupa 32 bits.

(a) Qual o tamanho máximo de um ficheiro suportado neste sistema?

(:confused: Assumindo que apenas o file-inode se encontra em memória

quantos acessos a disco são necessários para aceder ao offset:

19123345?

© Admitindo que os restantes campos do file-inode ocupam 32

bytes, qual será o espaço total usado pelo inode com file-addresses

se hipoteticamente tivermos um ficheiro com o tamanho máximo?

mas não faço ideia de como se resolve.

Tenho ideia de que a primeira deveria ser 60 (15 * 4bytes(32bits)) *  8kB, o que não vai dar um número muito 'correcto' aka simplificar cálculos.

Alguém me pode dizer se está certo? e se sim, como resolver as restantes alíneas?

Desde já obrigado. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

(a)

Se cada bloco ocupa 8KB e cada ponteiro ocupa 32 bits, então cada bloco guarda 2048 ponteiros.

Como temos 12 ponteiros directos, mais um indirecto, um indirecto duplo e um indirecto triplo, temos:

>>> ((12 + 2048 + pow(2048,2) + pow(2048,3)) * 8192) / pow(1024,3)

65568

Ou seja, cada ficheiro tem no máximo 65568GB.

(:P

Apenas os blocos directos mais o bloco indirecto não chegam:

>>>  ((12 + 2048) * 8192)

16875520

>>>  _ > 19123345

False

Os blocos duplos indirectos já chegam:

>>>  ((12 + 2048 + pow(2048,2)) * 8192)

34376613888L

>>>  _ > 19123345

True

Sendo assim, precisamos de 3 acessos ao disco: um para obter o valor do offset 19123345. Um para o bloco que contém o primeiro nível dos ponteiros indirectos duplos, outro para obter o bloco que contém o segundo nível dos ponteiros indirectos duplos e finalmente um para ler o conteúdo do offset para a memória.

©

>>> (32 + 12 + 8192 + pow(8192,2) + pow(8192,3)) / pow(1024,3)

512

Ou seja, 512GB.


Espero não me ter enganado nos cálculos. Não te fies muito em mim. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora