/MagneticDiskSimulator

Simulação de Disco Magnético Rígido

Primary LanguageC

magneticDiskSimulator

Simulação de Disco Magnético Rígido

1. Objetivos

O objetivo deste trabalho é que o aluno aprenda a estrutura do disco magnético e como são organizados os arquivos dentro dele.

2. Especificação

2.1 Ambiente:

Crie uma estrutura de dados para emular um disco magnético rígido (HD) com as seguintes características:

  • Trilhas por cilindro: 5
  • Setores por trilha: 60
  • Trilhas por superfície: 10
  • Tamanho do setor: 512 bytes
  • Tamanho do cluster: 4 setores
  • Tempo médio de seek: 4 ms
  • Tempo mínimo de seek: 1ms
  • Tempo media de latência: 6ms
  • Tempo de transferência: 12ms/trilha

Para isso no programa principal deve ser utilizado um ponteiro para indicar os cilindros e alocar a quantidade de cilindros necessária.

track_array *cylinder;

Devem ser definidas como tipos globais, as seguintes estruturas:

typedef struct block { unsigned char bytes_s[512]; } block; 
typedef struct sector_array { block sector[60]; } sector_array;
typedef struct track_array { sector_array track[5]; } track_array;

Deve ser criada também uma tabela FAT. A tabela FAT deve ser feita a partir de dois arrays de registros. O primeiro array deve conter uma lista com os nomes dos arquivos e o indicador do primeiro setor onde o arquivo esta armazenado no HD.

typedef struct fatlist_s{ 
char file_name[100]; 
unsigned int first_sector; 
} fatlist;

O segundo array deve ser uma lista com uma entrada por cada setor do HD.

typedef struct fatent_s{ 
unsigned int used; 
unsigned int eof; 
unsigned int next;
} fatent;

Sendo que o elemento 0 do array representa o primeiro setor da primeira trilha do primeiro cilindro. O elemento 1 é o segundo setor da primeira trilha do primeiro cilindro. O elemento 60 é o primeiro setor da segunda trilha do primeiro cilindro. O elemento 300 é primeiro setor da primeira trilha do segundo cilindro.

O campo 'used' indica se o setor esta livre ou sendo utilizado. O campo 'eof' indica se é o último setor do arquivo. O campo 'next' indica o próximo setor do arquivo.

2.2 Software:

O programa deve ter como nome: 'my_drive.cpp'. E assim que for executado deve mostrar o seguinte menu:

  • 1 - Escrever Arquivo
  • 2 - Ler Arquivo
  • 3 - Apagar Arquivo
  • 4 - Mostrar Tabela FAT
  • 5 - Sair

Opção 1

O programa deve pedir ao usuário o nome do arquivo (o qual deve ser um arquivo de TEXTO (.TXT) na mesma pasta onde está sendo executado o programa). O arquivo deve ser lido à memória principal, dividido em um número inteiro de clusters, e salvo do HD fictício. Da seguinte forma:

    • Achar o primeiro cluster disponível na primeira trilha do primeiro cilindro. Se não houver nenhum cluster disponível, passar para a primeira trilha do próximo cilindro. Caso, todas as primeiras trilhas de todos os cilindros estiverem cheias, então passar para a segunda trilha do primeiro cilindro, e assim por diante.
    • Uma vez que achou um cluster disponível, gravar o primeiro cluster do arquivo nesse local, inserir o mesmo na FAT na lista de nomes. O próximo cluster no arquivo deve ser gravado na mesma posição na próxima trilha do cilindro (a partir do mesmo número de setor da trilha seguinte) . Caso essa posição esteja sendo usada passar para a próxima trilha, e assim por diante. Caso todas as outras posições do cilindro estejam sendo usadas, passar para o próximo cluster. Desta forma, estamos emulando a escrita em paralelo de um cilindro.
    • A cada cluster gravado deve-se atualizar a lista de setores utilizados da FAT. Indicando que esta em uso (colocando '1' no indicador 'used').
    • No final deve indicar a quantidade de tempo utilizado para gravar o arquivo (assumir seek médio para achar o primeiro cilindro).

Opção 2

O programa deve pedir um nome de arquivo (TXT) e procurar pelo mesmo na tabela FAT. Se não encontrar indicar arquivo inválido. Senão deve ler o arquivo, o que significa juntar os cluster e escrever o arquivo no HD REAL com o nome: SAIDA.TXT. Indicar o tempo de leitura (assumir seek médio para achar o primeiro cilindro).

Opção 3

Deve indicar em cada setor do arquivo na lista de setores da FAT, que esse setor esta livre (colocando '0' no indicador 'used'). E retirar o arquivo da lista de nomes da FAT.

Opção 4

Mostrar a tabela FAT