Arquivo de bloco de controle - File Control Block

Um bloco de controle de arquivo ( FCB ) é uma estrutura de sistema de arquivos em que o estado de um aberto arquivo é mantido. A FCB é gerido pelo sistema operacional, mas reside na memória do programa que usa o arquivo, e não na memória do sistema operacional. Isso permite que um processo tem tantos arquivos abertos ao mesmo tempo que quiser, desde que possa poupar memória suficiente para um FCB por arquivo.

O FCB se origina a partir de CP / M e está também presente na maior parte dos variantes de DOS , embora apenas como medida de compatibilidade para trás em MS-DOS versão 2.0 e posteriores. Um FCB completo é de 36 bytes; em versões iniciais de CP / M, foi 33 bytes. Este tamanho fixo, o que não poderia ser aumentada sem quebrar a compatibilidade de aplicativos, levar a eventual extinção do FCB como o método padrão de acesso a arquivos.

Os significados de vários dos campos no FCB diferem entre CP / M e DOS, e também dependendo de qual operação está sendo realizada. Os seguintes campos têm significados consistentes:

compensar byte
tamanho
Conteúdo
0x00 1 Unidade número - 0 para padrão, 1 para A :, 2 para B :, ...
0x01 8 O nome do arquivo e extensão - conjunto, estes formam um nome de arquivo 8.3 .
0x09 3
0x0C 20 Implementação dependentes - deve ser inicializado a zero antes do FCB é aberto.
0x20 1 Número recorde na seção atual do arquivo - usado quando executar acesso sequencial .
0x21 3 Número recorde de usar ao realizar acesso aleatório .

A 20 bytes de comprimento campo começando no deslocamento 0x0C continha campos que (entre outros) fornecidas mais informações sobre o arquivo:

compensar byte
tamanho
Conteúdo
0x0E 2 comprimento de registro do arquivo em bytes.
0x10 4 tamanho total do arquivo em bytes.
0x14 2 Data da última modificação ao conteúdo do arquivo.

Uso

Na CP / M, 86-DOS e PC DOS 1.x / MS-DOS 1.xx, o FCB era o único método de acesso aos arquivos. Quando, com o MS-DOS 2, os preparativos foram feitos para suportar múltiplos processos ou usuários, utilizar outros sistemas de arquivos de FAT ou para compartilhar arquivos através de redes no futuro, FCBs foram sentidos para ser muito pequeno para lidar com os dados adicionais necessários para tais características e portanto FCB foram vistos como inadequados para vários caminhos de expansão futura. Além disso, eles não fornecem um campo para especificar sub-diretórios. Expondo sistema de arquivos de dados relacionadas com o espaço do usuário também foi visto como um risco de segurança. FCBs foram assim substituída por identificadores de arquivo , como usado em UNIX e seus derivados. Identificadores de arquivo são simplesmente números inteiros consecutivos associados com arquivos abertos específicos.

Se um programa utiliza a mais recente identificador de arquivo API para abrir um arquivo, o sistema operacional irá gerir a sua estrutura interna de dados associado a esse arquivo na sua própria área de memória. Isso tem a grande vantagem de que estas estruturas podem crescer em tamanho em versões posteriores do sistema operacional sem quebrar a compatibilidade com programas de aplicação; a sua desvantagem é que, dado o bastante simplista de gerenciamento de memória do DOS, espaço para o maior número dessas estruturas como o programa mais "file-fome" é provável que o uso tem de ser reservado no momento da inicialização e não pode ser usado para qualquer outra finalidade, enquanto o computador está executando. Tal reserva memória é feito usando o FILES = directiva no CONFIG.SYS arquivo. Este problema não ocorre com FCBs em DOS 1 ou no CP / M, desde que o sistema operacional armazena todos que precisa de saber sobre um arquivo aberto no interior do FCB e, portanto, não precisa usar qualquer memória por arquivo na memória do sistema operacional espaço. Ao usar FCBs em MS-DOS 3 ou posterior, o formato FCB depende se Share.exe é carregado e se o FCB refere-se a um arquivo local ou remoto e muitas vezes referem-se a uma entrada SFT. Devido a isso, o número de FCB que pode ser mantida aberta de uma só vez no DOS 3 ou superior é limitada, bem como, geralmente a 4; usando o FCBS = directiva no arquivo CONFIG.SYS, pode ser superior a esse número, se necessário. Sob DR-DOS , arquivos e FCBS vêm da mesma piscina interna das estruturas de alças disponíveis e são atribuídos dinamicamente conforme necessário.

FCBs foram apoiados em todas as versões do MS-DOS e do Windows até à introdução do FAT32 sistema de arquivos. Windows 95 , Windows 98 e Windows Me não suportam o uso de FCBs em unidades FAT32 devido a seus números de cluster de 32 bits, exceto para ler o rótulo de volume. Isso fez com que alguns aplicativos DOS antigos, incluindo Wordstar , a falhar sob estas versões do Windows.

A interface FCB não funciona corretamente no Windows NT , 2000 , etc., quer - se WordStar não funcionar corretamente nesses sistemas operacionais. DOS emuladores DOSEMU e DOSBox implementar a interface FCB corretamente, assim, eles são uma maneira de executar mais velhos programas DOS que precisam FCBs em sistemas operacionais modernos.

Área de transferência do disco

Uma estrutura de dados acompanhante usado em conjunto com o FCB foi a área de transferência de disco (DTA). Este é o nome dado para o buffer onde o conteúdo do arquivo (registros) seria lido em / por escrito da. Arquivo funções de acesso em DOS que usou o FCB assumido num local fixo para o DTA, inicialmente apontando para uma parte da PSP (ver secção seguinte); este local pode ser alterada chamando uma função DOS, com o arquivo posterior acessos implicitamente usando a nova localização.

Com a depreciação do método FCB, as novas funções de acesso a arquivos que utilizavam arquivo também manipula forneceu um meio para especificar um buffer de memória para o conteúdo do arquivo com cada chamada de função, tais que a manutenção simultâneos, buffers independentes (quer para diferentes arquivos ou para o mesmo arquivo) tornou-se muito mais prático.

Segmento programa Prefixo & programa de Inicialização

Cada executável DOS iniciado a partir do shell ( COMMAND.COM ) foi dotado de uma estrutura de dados longo de 256 bytes pré-cheia chamada de segmento de programa prefixo (PSP). Campos relevantes dentro desta estrutura incluem:

compensar byte
tamanho
Conteúdo
0x02 2 memória disponível para o programa em pedaços de 16 bytes.
0x2C 2 endereço de segmento que contém variáveis ​​de ambiente do programa.
0x5C 16 FCB preparado para argumento linha de comando primeiro (fechado).
0x6C 20 FCB preparado por segundo argumento linha de comando (fechado).
0x80 1 Comprimento da linha de comando.
0x81 127 conteúdos linha de comando.

Esta estrutura de dados pode ser encontrado no início do segmento de dados cujo endereço foi fornecido pelo DOS no início do programa nos registos do segmento DS e ES. Além de fornecer linha de comando do programa na íntegra no endereço 0x81, DOS também tentou construir dois do FCB correspondente às duas primeiras palavras na linha de comando, sendo a salvar o trabalho para o programador no caso comum onde essas palavras eram nomes de arquivos para operar no propósito . Uma vez que estes FCB do permaneceu fechado, não há problema se seguiria mesmo que estas palavras de linha de comando não se referiu aos arquivos.

O endereço inicial para o DTA foi criado para cobrir a área no PSP (pelo 0x80 endereço) onde os argumentos de linha de comando foram armazenados, de tal forma que um programa necessário para analisar esta área para argumentos de linha de comando antes de invocar funções DOS que fizeram uso da DTA (como a leitura em um registro de arquivo), a menos que o programa teve o cuidado de mudar o endereço do DTA para alguma outra região de memória (ou não utilizar as funções de DTA / FCB completamente, que logo se tornou obsoleto em favor de identificadores de arquivo).

Veja também

Referências

Outras leituras