Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






УТОЧНЕНИЕ ЗАДАНИЯ ПО ТП




Вот, собственно, текст задания:

МОДЕЛЬ ФАЙЛОВОЙ СИСТЕМЫ ОС РЕАЛЬНОГО ВРЕМЕНИ

Описываемая ниже структура размещения файлов и управляющей ин­формации на носителе (диске, гибком диске и т.д.) называется фай­ловой структурой.

Файлом является совокупность связанных между собой логических записей. Файлы на носителе располагаются в логических блоках, кото­рые имеют фиксированный размер 512 байт. Блоки файла получают пос­ледовательные номера, начиная с 0. Файл размещается в смежных логи­ческих блоках, т.е. является непрерывным.

Информация на носителе распределяется следующим образом:

№ блока Содержание
2-5 6+N+2 Программа первичный загрузчик Блок системной информации Вторичный загрузчик Начало каталога файлов Файлы и свободное место

Блоки 0,1,2,3,4,5 содержат загрузчик или не используются, если носитель не содержит ОС (отсутствуют файлы монитора и драйверов). Блок 1 содержит системную информацию, включающую идентификатор то­ма, имя владельца, таблицу замещения дефектных блоков на резервные и т.д.

Содержимое системного блока:

Байты

0 - 129 - таблица расположения дефектных блоков,

132 - 169 - область сохранения, содержит информацию

для восстановления каталога при ошибоч­ной инициализации,

468 - 469 - номер блока начала каталога,

470 - 471 - версия системы

472 - 483 - имя тома,

484 - 495 - имя владельца,

496 - 507 - название системы.

Остальные байты зарезервированы для использования системными программами.

Информация о каждом имеющемся на носителе файле содержится в таблице, которая называется каталогом. Каталог файлов всегда начи­нается с блока 6 и состоит из сегментов, число которых не может превышать 31. Сегмент занимает два смежных блока (1024 байта). Все остальные блоки носителя (после каталога) используются для хранения файлов. Каждый сегмент каталога имеет заголовок, состоящии из 5 слов:

слово 1 - число сегментов, отведенных под каталог,

слово 2 - номер следующего сегмента. Сегменты каталога образуют

список. В последнем используемом сегменте это слово со­держит 0,

слово 3 - счетчик занятых сегментов. При использовании нового сег­мента данное слово корректируется

слово 4 - число дополнительных байтов в каждой записи о файле в

сегменте (не используется),

слово 5 - номер блока на носителе, с которого размещаются файлы,

описанные в данном сегменте.

Запись о файле состоит из 8 слов и дополнительных байтов (если указано в четвертом слове заголовка сегмента):

слово 1 - тип записи,

слово 2-4 - имя файла

слово 5-6 - тип файла

слово 7 - число блоков, занимаемое файлом,

слово 8 - дата создания файла в формате:

разряды 11-15 - номер месяца (1-12),

разряды 06-010 - день (1-31),

разряды 00-05 - год минус 1980. Дополнительные слова не используются

//Примечание: изначально в задании для даты были указаны другие наборы разрядов, однако в них не помещался год, и поэтому пришлось их изменить

Тип записи может принимать следующие значения:

1- запись о временном файле,

2 - запись о свободной области на носителе. Размер свободной области в блоках содержится в 5-ом слове, остальные слова не используются,

3 - запись о постоянном файле,

4 - запись о постоянном файле, защищенном от операции удаления,

5 - признак конца записей в данном сегменте.

//Примечание: изначально для типов записей в задании были указаны специальные коды( 001000 и т.д. ), но они не все помещались в переменную типа «слово», поэтому их было решено заменить на простые номера 1,2…

 

ПОЯСНЕНИЕ ЗАДАНИЯ

Нам предлагается разработать модель файловой системы. Вся эта система должна быть где-то записана, мы её будем хранить в файле «filesystem.txt». Вся память в системе разбивается на блоки по 512 байт, поэтому удобно будет ввести тип данных «блок» - массив из 512 чаров:

typedef char block[512];

 

и читать\записывать информацию в файл такими блоками. Пример того, как это можно сделать:

#include <fstream>

#include <iostream>

using namespace std;

typedef char block[512];//Объявляем тип данных блок

void main()

{

 

block buf;

for(int i=0;i<512;i++)//Инициализируем буферный блок нулями

buf[i]='0';

//Создание файла и запись в него 10 блоков:

ofstream out;

out.open("filesystem.txt",ios::out|ios::binary);//Открываем файл на двоичный ввод

 

 

for(int i=0;i<10;i++)

{

out.write((char*)&buf,sizeof block);//Пишем в файл

}

out.close();

 

//Произвольный доступ к файлу, забьем 5-й блок буквами x:

fstream inout;

inout.open("filesystem.txt",ios::in|ios::out|ios::binary);//Открываем файл для двоичного ввода\вывода

for(int i=0;i<512;i++)//Инициализируем буферный блок буквами x

buf[i]='x';

 

if(inout.is_open())

{

inout.seekp(4*sizeof block);//Переводим файловый указатель на нужную позицию

inout.write((char*)&buf,sizeof block);//Записываем блок

}

else

{

cout<<"blyaaaa";

}

//Прочитаем первые элементы из блоков:

for(int i=0;i<10;i++)

{ inout.seekg(i*sizeof(block));//Устанавливаем файловый указатель на нужный элемент

inout.read((char*)&buf,sizeof block);//Читаем блок

cout<<buf[0];//Выводим первый элемент

}

inout.close();

cin.get();

 

}

//Примечание: вообще весь процесс ввода/вывода в файл прекрасно описан в книжке С.Праты «Язык программирования C++» в 16 гл.

 

Таким образом, мы можем создать файл нужного размера, прочитать из него блок с нужным номером, отредактировать в нем нужные байты и записать на место.

Согласно заданию, наш файл«filesystem.txt» имеет такое содержимое:

Ø Блоки 0 и 2-5 нам не нужны

Ø В блоке 1 в определенных байтах записана системная информация, в частности, имя владельца, метка тома и номер блока начала каталога

Ø С 6-го блока записывается каталог- таблица с информацией о расположении файлов

Ø Дальше лежат сами файлы

 

Главная часть - каталог(таблица расположения файлов). Он состоит из сегментов- участков по 2 блока. Общее количество сегментов в каталоге устанавливается при форматировании диска (при создании файла «filesystem.txt»), но не превышает 31. У каждого сегмента есть заголовок из 5 слов (слово- это 2 байта):

Ø 1-е слово- количество сегментов в каталоге

Ø 2-е слово- номер следующего сегмента

Ø 3-е слово- количество задействованных сегментов(если в системе мало файлов, то информация о них занимает не все сегменты)

Ø 4-е не используется

Ø 5-е номер блока, с которого начинаются файлы, описанные в данном сегменте

Дальше в сегменте следуют записи о файлах, они состоят из 8-ми слов, в которых записаны имя, тип, размер файла, дата создания и тип записи о файле. Свободные участки памяти в таблице отображаются также как и файлы, но со специальным типом записи.

Как происходит работа с таблицей расположения файлов:

Ø Первоначально, после того как файловая система отформатирована, в 1-м сегменте содержатся 2 записи- запись о всем свободном пространстве на диске(о нераспределенной памяти) и запись-признак конца записей в сегменте. В остальных сегментах содержится 1 запись-признак конца записей.

Ø При добавлении файла в систему в таблицу перед записью о нераспределенной памяти добавляется запись об этом файле, размер нераспределенной памяти уменьшается на размер этого файла. Запись о нераспределенной памяти и запись о конце записей сдвигаются вниз в таблице. По мере добавления файлов запись о нераспределенной памяти доходит до конца 1-го сегмента, затем переходит в следующий сегмент и т. д.

Ø При удалении файла тип записи о нем в таблице изменяется на «запись о свободной области». Позднее на это место в таблице может быть записан другой файл, размер которого меньше размеров этой области. В таком случае записываемый файл займет всю эту область(даже если ему не требуется вся область- иначе придется сдвигать все записи в таблице)

Ø Постепенно, по мере удаления файлов из системы, в таблице образуется много небольших свободных мест, которые затрудняют рациональное использование памяти. Чтобы прекратить это безобразие проводится дефрагментация- все свободные области сдвигаются в старшие адреса памяти, т.е. в конец таблицы, где образуется одна запись о нераспределенной памяти. Эта процедура довольно трудоемкая- приходится много раз сдвигать записи в таблице и переносить файлы на диске на новые места

 

После каталога следуют блоки, занятые файлами, причем файлы занимают непрерывные участки памяти. Записывать реальную информацию в них не требуется, но для реалистичности моделирования нужно пространство, занятое файлом, хотя бы забить единицами.

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных