Como o FileStream é anexado fisicamente funciona?

0

Eu estava lidando com um problema anterior e de repente me leva a pensar sobre essa questão ....

Talvez não esteja relacionado apenas ao FileStream, mas quero saber como realmente acrescentamos o binário em um arquivo que funciona fisicamente.

Acho que minha pergunta leva a duas perguntas:

  1. Como a memória do disco rígido está estruturada?
  2. Como o arquivo grava na memória física?

Digamos que eu tenha um arquivo de texto, contenha "ABCDEF", portanto, na memória física (no disco rígido), a memória deve conter o binário das letras "ABCDEF" com cabeçalho de arquivo binário etc (na verdade, nenhum cabeçalho para arquivo de texto simples ?) ....

Assim será algo assim em fisicamente 6 bytes, ordens dependem do tipo de processador:

A        B        C        D        E        F
01000001 01000010 01000011 01000100 01000101 01000110

Diga quando queremos anexar uma letra 'G' no arquivo, para que o arquivo contenha 7 bytes:

A        B        C        D        E        F        G

01000001 01000010 01000011 01000100 01000101 01000110 01000111

O tamanho do arquivo fisicamente no disco deve ser 4.00 KB.

Porque quando escrevemos a letra G, ainda não há excesso de 4.00 KB, então temos espaço para escrever no espaço de memória de 4.00 KB.

Mas quando vamos acrescentar mais coisas no arquivo, quando for necessário, os 4.00KB estarão usando 8.00KB.

Como o binário que o excesso de 4.00KB escreve na memória do disco?

Ele escreve um ponteiro ou algo assim em algum lugar e declara um índice na memória do disco e escreve o binário em excesso no novo endereço de memória?

    
por King Chan 21.12.2012 / 16:00

1 resposta

4

Problemas como este são o motivo pelo qual usamos sistemas operacionais, ele fornece uma camada de abstração para que você não precise se preocupar no nível do aplicativo sobre coisas como a forma como a memória é armazenada no nível do hardware.

As camadas são semelhantes a esta (para unidades HDD), cada camada mostra ao lado dela quem é responsável por essa camada.

        File (File system)
               |
               v
         Bitstream (OS)
               |
               v
    Sectors (Hardware Driver)
               |
               V
     Bits (Hard disk controller)
               |
               V
Magnetic flux (Hard disk controller)

Cada camada não se importa com o que as camadas acima ou abaixo dela estão fazendo, a única coisa importante é que ela expõe uma API conhecida para direcionar a camada acima dela e usa uma API conhecida na camada direta abaixo dela.

Ao escrever aplicativos quase nunca abaixo da camada Bitstream ( System.IO.Stream ) quando você grava seus dados no fluxo, ele os transfere para o driver e o driver os divide, no entanto, a próxima camada abaixo precisa deles para ser dividido (pedaços de 4k para HDDs modernos).

Para como o motorista rastreia "o que vai para onde?" isso depende da implementação do driver.

Para realmente responder à sua pergunta, Anexar trabalhos pelo seu programa solicita o Bitstream para um arquivo. Uma vez que tenha o fluxo de bits, adiciona mais dados ao final do fluxo de bits. O que o OS / Driver faz a esse fluxo de bits depois que você escreve nele é uma caixa preta (você não sabe os detalhes) e será totalmente diferente se você estiver trabalhando com um FileStream , MemoryStream ou uma NetworkStream . A grande coisa sobre esta estrutura em camadas é que você não precisa se importar! A responsabilidade é a próxima camada abaixo e essa camada lida com ela.

    
por 21.12.2012 / 17:03