Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Составить программу, моделирующую заполнение гибкого магнитного диска.  (Прочитано 11236 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Nastenka
Гость
« : 02-05-2008 11:55 » 

Ребят)очень нужна ваша помощь))) Улыбаюсь
можете помочь в написании проги :
составить программу, моделирующую заполнение гибкого магнитного диска.
Объем памяти на диске 360 Кбайт. Файлы имеют произвольную длину от 18 байт до 32 Кбайт. В процессе работы файлы либо записываются на диск, либо удаляются с него.
В начале работы файлы записываются подряд друг за другом. После удаления файла на диске образуется свободный участок памяти, и вновь записываемый файл либо размещается на свободном участке, либо, если файл не вмещается в свободный участок, размещается после последнего записываемого файла.
В случае когда файл превосходит длину самого большого свободного участка, выдается аварийное сообщение. Требование на запись или удаление файла задаётся в командной строке, которая содержит имя файла, его длину в байтах, признак записи или удаления. Программа должна выдавать по запросу сведения о занятых и свободных участках памяти на диске)))
« Последнее редактирование: 02-05-2008 12:29 от Sel » Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #1 : 02-05-2008 12:43 » 

Думаю придется тебе FAT поэмулировать )) А язык программирования какой?
Записан
Nastenka
Гость
« Ответ #2 : 02-05-2008 13:16 » 

Думаю придется тебе FAT поэмулировать )) А язык программирования какой?
Язык C++
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 02-05-2008 14:11 » 

Запись на диск производится блоками (сектор). Меньше сектора записать или считать нельзя. Длина сектора стандартно выбрана 512 байт. Хотя могут быть и другие значения. Например 128 байт, 256 байт, 1024 байта.
Для экономии места при разметке, несколько секторов объединяются в кластер. Объедены могут быть от 1 и до 64 секторов в один кластер. Это определеятся при форматировании диска. Чтобы измени это значение, нужно по новой разметить диск. Получается, что если файл будет иметь длину скажем 10 байт, или 100 байт это не имеет значение. Все равно на диске будет занят один кластер.
В стандарте FAT диск разделен на несколько областей.
  • Сектор начальной загрузки. Также в этом секторе хранится информация о физике и разметке диска.
  • Таблици FAT (File access table) В этой таблице просто даны состояния кластеров. Если состояние 0 то кластер свободен. Если состояние равно 0xFFFB (Точно не помню, надо просто посмотреть в справочнике), то кластер битый, и его нельзя использовать. Если 0xFFFF То это терминальный (последний кластер в файле) кластер, дальше не нужно читать файл. Другие значения, это ссылки на следуюший кластер для чтения.
  • Область каталога. Тут даны данные по самому файлу и приводится список файлов. Данные по файлу такие: Имя и суфикс файла, атрибуты доступа, длина файла, время и дата создания, и ссылка на первый кластер. Список каталогов также приводится в этом списке. Это считается как бы особым файлом, только помечается атрибутом directory. Тогда система может это распознавать как каталог и соответственно отрабатывать его. Сам список находится в области данных.
    Каждая запись занимает 32 байта, получается что в один сектор может содержать список из 16 файлов. Головной каталог ограничен по длине списка. Для файлов которые были стерты, удаляется цепочка кластеров из области FAT. Вся цепочка помечается как свободная, т.е. обнуляется. Также первый символ имени файла заменяется на байт 225. Если первый символ в имени файла 0, система считает, что это конец списка и дальше не просматривает, в поисках других файлов.
  • Оставшаяся область данных. Тут собственно и объяснять нечего
« Последнее редактирование: 02-05-2008 14:30 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Hammurapi
Участник

ru
Offline Offline

« Ответ #4 : 02-05-2008 18:21 » 

Хм... хорошая задачка...(для обучения полезно).... Если тебе придется эммулировать запись на дискету на самом низком уровне, это сложнее там уже идет точность записи до полубита(именно бита) в прочем у меня есть программка (в смысле исходник, когдато давно нам такое задание давали) на ассме она нестандартно форматирует дискету... если поможет могу кинуть...
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #5 : 02-05-2008 18:55 » 

Hammurapi, Думаю на самом низком не прийдется, потому как ето уже попахивает драйверами )) Полагаю тут все обойдется файлом(файлами) и основная задача будет правильно организовать логику работы с файлами, которые помещаются на "дискету" а также корректно читать/писать из файла, который будет ету самую дискету представлять.(Ето конечно если я правильно понял задание)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines