OSDev

для всех
Текущее время: 01 июл 2025, 16:57

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 9  След.
Автор Сообщение
СообщениеДобавлено: 29 дек 2010, 21:03 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Я имею в виду что всё будет ровно, все цилиндры одинаковые. Да?

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 дек 2010, 21:10 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Тогда мне этого будет достаточно и остаётся всего три вопроса.

1. Если первый сектор дискеты повреждён, то как я думаю, BIOS будет грузить следующий. Я прав? И до какого сектора он так может дойти, если ему будут попадаться одни с дефектами? То есть если какой-то параметр его попыток (точнее глубины поиска)?

2. Если представим что на диске на каждом цилиндре по 18 секторов, на каждой головке по 80 цилиндров и дискете 2 головке, то как правильно мне нужно будет считывать 20 секторов...

Код:
mov AH,0x02
mov AL,20               ; Количество читаемых секторов
mov CL,2               ; Сектор
mov CH,0               ; Цилиндр
mov DH,0               ; Головка
mov DL,0               ; Диск
mov BX,boot__font
int 0x13


В этом случае BIOS догадается сам что нужно переключить цилиндр (если нужно то и головку) и выдаст мне столько, сколько я запросил? Или же мне выдаст только то, что пойдёт до конца цилиндра и тогда мне нужно делать так:

Код:
mov AH,0x02
mov AL,19               ; Количество читаемых секторов
mov CL,2               ; Сектор
mov CH,0               ; Цилиндр
mov DH,0               ; Головка
mov DL,0               ; Диск
mov BX,boot__font

mov AH,0x02
mov AL,1               ; Количество читаемых секторов
mov CL,1               ; Сектор
mov CH,1               ; Цилиндр
mov DH,0               ; Головка
mov DL,0               ; Диск
mov BX,boot__font
int 0x13


Конечно второй вариант точно правильный, но будет ли так же работать и первый вариант? И как он вообще будет работать?

3. Если представим что на диске на каждом цилиндре по 18 секторов, на каждой головке по 80 цилиндров и дискете 2 головке, то как мне из LBA переводить в CHS?

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 дек 2010, 21:22 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
s3dworld писал(а):
Цитата:
Можешь поддерживать не все форматы. Для начала 2х80х18 будет достаточно. В эмуляторах формат дискеты обычно указывается явно (в конфиг. файлах). В боксе например так: floppya: 1_44="floppy.bin", status=inserted

То есть если дискета 3.5' двойной плотности на 2880 секторов, то на ней 100% будет 2 головки, по 80 цилиндров на каждой головке и по 18 секторов на каждом цилиндре?
Нет. Даже одни и те же дискеты могут форматироваться на разные объемы. Но нужно ориентироваться на определенные значения SPT и Heads, а также на определенный объем (он тоже должен храниться в структурах ФС).

s3dworld писал(а):
Я имею в виду что всё будет ровно, все цилиндры одинаковые. Да?
Не понял. Если речь о кол-ве секторов на каждой дорожке каждого цилиндра, то в пределах диска все будет одинаково.

s3dworld писал(а):
1. Если первый сектор дискеты повреждён, то как я думаю, BIOS будет грузить следующий. Я прав? И до какого сектора он так может дойти, если ему будут попадаться одни с дефектами? То есть если какой-то параметр его попыток (точнее глубины поиска)?
Не прав.

s3dworld писал(а):
2. Если представим что на диске на каждом цилиндре по 18 секторов, на каждой головке по 80 цилиндров и дискете 2 головке, то как правильно мне нужно будет считывать 20 секторов...

Конечно второй вариант точно правильный, но будет ли так же работать и первый вариант? И как он вообще будет работать?

3. Если представим что на диске на каждом цилиндре по 18 секторов, на каждой головке по 80 цилиндров и дискете 2 головке, то как мне из LBA переводить в CHS?
Есть формулы, которые в принципе можно вывести и самому, если знаешь, в каком направлении идет рост линейных номеров. Сначала все секторы "нулевой" дорожки "нулевой" стороны, потом "первой" стороны. Далее аналогично для след. дорожки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 дек 2010, 21:32 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
Вот простой код для двусторонних дискет.
Код:
; ax - linear sector number, cl - SPT
  mov dh,0
  div cl
  mov ch,al
  mov cl,ah
  shr ch,1
  adc dh,dh
  inc cx
  mov ax,0201h
  int 13h


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 дек 2010, 21:38 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
phantom-84
Что-то я запутался. Вообще:
Цитата:
Но нужно ориентироваться на определенные значения SPT и Heads, а также на определенный объем (он тоже должен храниться в структурах ФС).

Что такое SPT?

Интересно, как же программа форматирования format (например в DOS/Windows) определяет сколько на дискете головок, сколько цилиндров на каждой головке (про дорожки не говорю, так как читал что они накладываются 1 в 1 на цилиндры, то есть 1 дорожка на 1 цилиндре) и сколько секторов на каждой головке? Путём проб и ошибок запишется сектор туда или нет?

Цитата:
Не понял. Если речь о кол-ве секторов на каждой дорожке каждого цилиндра, то в пределах диска все будет одинаково.

Что значит в пределах диска?

Я что имею в виду, я собираюсь работать с физическими дискетами, а не только с виртуальными образами. У меня в файловой системе указывается индекс сектора (16-битное значение). И как же я это значение превращу в цилиндр-головка-сектор, если может оказаться что будет на дискете не 2 головки, а 1? Если будет на цилиндре 5 всего 18 секторов, а на цилиндре 6 их будет 17? Если на одной головке будет 79 цилиндров, а на другой 80? Как же тогда быть. Ведь, как Вы мне сказали, на дискете в 3.5' двойной плотности с 2880 секторами не может быть с 100%, что будет именно на каждом цилиндре по 18 секторов, а ка каждой головке по 80 цилиндров, да и ещё 2 головки. Но раз может и не быть, и раз 2880 секторов, то где-то будет меньше чего-то, а где-то больше. То есть нужно определять где чего сколько и вместе с дискетой хранить это в файловой системе?

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2010, 15:46 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Всем доброго дня!

Только что закончил писать спецификацию о своей файловой системе BFSM. Хочу чтобы Вы её оценили и оставили тут свои комментарии.

Ссылка на описание файловой системы: http://dubrovkin.h18.ru/BFSM.htm

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 дек 2010, 01:37 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
Послушай, твое упорство конечно заслуживает уважения (надолго ли его хватит?), но прежде чем учить других, не мешало бы подучиться самому. В твоей титульной статье ты написал, что при передаче управления дисковому загрузчику регистр cs равен нулю. Это не совсем так. Зачем дизинформировать людей? Далее прокомментируй пожалуйста там же приведенный код касательно инициализации регистра ss. Несмотря на то что ты пишешь в статье про регистр sp, мне кажется, ты до конца не понимаешь, как нужно инициализировать указатель стека.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 янв 2011, 00:23 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Всем доброй ночи!

Бегло сейчас пробежался по статье http://www.avprog.narod.ru/progs/fat.html#02h. Появилось несколько вопросов.

Получается что в файловой системе FAT12 каждая папка - это новый кластер. Так? Почему тогда на целые 512 байт всего две записи вносится в папку? И зачем для папки выделяется ещё второй кластер?

Если честно, мне всё равно как там это устроено. Я стал разбирать эту файловую систему из-за того, что хочу понять как в моей файловой системе лучше сделать указание того, к какой папке принадлежит папка/файл.

То есть если мне каждую папку описывать как отдельный сектор, то всё просто. Для подчинённого файла/папки мне достаточно только указывать номер сектора где лежит описание родительской папки. Но в этом случае получается не удобство в выводе информации обо всех папках/файлах данного каталога, так как описание интересующей папки находится в одном месте, а описание её подчинённых файлов/папок - в другом.

Если же делать так, чтобы в описании папки указывался список всех её папок/файлов в виде характеристик этих объектов, а в каждой характеристике чтобы указывался сектор, где будут лежать уже либо части данных для файла, или список прикреплённых папок/файлов для папки, тогда нужно в качестве где располагается их родительская папка, указывать не только номер сектора где их папка описана в списке другой папки, но и индекс папки в списке.

В общем никак не могу определить как сделать так, чтобы по папке/файлу можно было обратно шагать. Думал сделать вообще без того чтобы можно было в обратном направлении идти, но задумался, не просто же так оно нужно, раз в FAT12 сделано.

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 янв 2011, 15:23 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
Для восстановления цепочки кластеров каталога достаточно одной записи ".", т.к. в FAT в записи файла/каталога хранится только одна ссылка - на его первый кластер. Информация о местоположении др. кластеров хранится в таблице размещения файлов - фундаментальной структуре данной ФС - это проходят даже в школе. Описание FAT открыто (можно скачать с сайта Майкрософт). Второй кластер каталогу не нужен, если через него не лежит "путь" к третьему и т.д. кластеру, содержащему файловые записи (низкоинтеллектуальные драйверы ФС могут не уплотнять каталоги, кроме того, это может быть сделано специально с целью упрощения восстановления файлов после их удаления). Запись ".." предназначена для продвижения вверх (перехода в надкаталог). Использование подобной записи практикуется во многих ФС, чтобы не кэшировать ссылки на все промежуточные каталоги, присутствующие в путях открытых каталогов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 янв 2011, 17:03 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
То есть получается что каждая папка описывается в отдельном каталоге. И если у папки есть папки, то в списке объектов этой папки будет лежать не описание папки (имя, атрибуты, ...), а только ссылка на кластер, где будет лежать описание папки вместе со списком объектов в этой папке. Так?

Но тогда получаются лишние нагрузки, ведь прежде чем вывести список объектов папки, нужно загрузить будет все кластеры с ссылками и там уже прочитать имена и атрибуты.

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 9  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB