OSDev

для всех
Текущее время: 29 апр 2024, 14:04

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




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

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

Вчера была бессонница и я долго думал о структуре загрузке операционной системы. До сего времени я планировал загружать свою операционную систему с дискеты 3.5' и размером в 1.44 МБ. Собственно выбрал это я только из-за простоты чтения и записи данных. Однако огляделся я вокруг и нигде не могу найти ни дискет, ни дисководов. Получается что всё что я сделаю, я не проверю на реальном железе. Такая перспектива меня не очень устраивает. Поэтому пришлось мне внимание обратить на два других способа (хотя, видимо, ещё бывает загрузка загрузочного сектора по сети): CD-ROM/DVD-ROM и USB.

Чем будут отличаться в программировании CD-ROM и DVD-ROM я не знаю. Ну и собственно для моих возможностей про DVD-ROM можно забыть (хотя я имею в виду не про приводы, а про размещение операционной системы на DVD-R носителе). С ним хоть дело обстоит чуть проще. Можно на создавать для эмулятора iso-образов, а когда нужно на реальном железе проверить, то раскошелиться и записать на CD-R. Но и тут придётся изучать уже какую файловую систему ISOxxx (xxx - это не помню что там дальше). Хотя, если иметь прямой доступ к CD-ROM может быть можно записать любые комбинации байтов, чтобы записать свою файловую систему?

Теперь что касается USB. Сам по себе это был бы для меня самый идеальный вариант. Можно перезаписывать сколько угодно, можно записать хоть свою файловую систему. Всё удобно, кроме одного - я понятия не имею как USB программировать. Я думаю это таким объёмным, что по сравнению с этим, написание операционной системы для меня покажется задачей по алгебре за 9 класс. Это возможно BIOS имеет функции для чтения и записи данных с USB носителя, но в защищённом режиме я буду беспомощен. Ведь USB - это не просто взял и начал программировать. Там есть какой-то корень, нужно его изучить. Потому что в USB можно тыкать всё что не лень. То есть изучить этот протокол, а потом на этом протоколе обменивать данными с устройством накопления информации USB-Flash. Но честно, там ведь запутаешься. Вот лично на моём компьютере спереди два USB-разъёма, и четыре сзади. Как-то нужно распределять, ведь этот корень USB один на них всех (вроде бы).

Ну и ещё, наверняка эти оба способа уже не работают в режиме CMS (цилиндр-головка-сектор, или как там его). Хотя может и работает в режиме поддержки, но является не основным. Так каким является основной способ считывание.записи информации для тих двух приводов: CD-ROM и USB (хотя USB я бы приводом не назвал).

Вот и думаю какой из вариантов выбрать. Кстати, и как теперь осуществляется чтение и запись данных на магнитных дисках? Слышал там линейная адресация. Это как? Ведь одного регистра не хватит чтобы охватить диапазон, скажем в 300 ГБ.

Про жёсткий диск я спросил пока для познавательных целей. Вначале я не буду его использовать (не буду копировать файлы и создавать загрузочную область на нём). Первым что я хотел, это создать всё на дискете и иметь возможность на ней же фиксировать изменения, то есть сохранять. Если дело будет касаться CD-ROM'а, то будет возможность только чтения данных. А если USB, то и чтение и запись.

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

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


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

Зарегистрирован: 16 фев 2010, 22:03
Сообщения: 101
ATA диски (HD, CD, DVD) на мой взгляд программировать проще всего на уровне портов ввода-вывода.
USB действительно намного сложнее.
Везде кроме Floppy LBA адресация секторов. Хотя некоторые поддерживают устаревшую CHS (это устаревшая модель адресации. про неё лучше вообще забыть как только перестаёте пользоваться функциями BIOS).
При LBA адресации указывается просто номер сектора. Без всяких головок, дорожек etc. Как правило разрядность номера сектора 32 бита (на каких то устройствах может быть больше). Соответственно максимальный объём таких дисков - 2 ТБ. Что в общем то так и есть сейчас.
Если есть лишний HD, то лучше бы тестировать ОС на нём. Поскольку можно сколько угодно перезаписывать, делать какую угодно ФС и программировать очень просто.
Флешки же не советовал бы. Программирование USB действительно очень сложная и запутанная вещь. Поэтому начинать разработку ОС лучше не с неё. Хотя если BIOS умеет загружаться с флешки, то он умеет и работать с ней через int13, как будто с жёстким диском.


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

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
KIV
Спасибо, теперь понятнее стало.

То есть получается, что устройства HDD, CD-ROM и DVD-ROM так же работают с секторами (что значит, что минимум считать/записать можно 512 байт), только теперь нет ни головок, ни цилиндров с дорожками, только лишь огромный 32-битный массив секторов. Так?

Подскажите в какой книжке лучше почитать про программирование CD-ROM через такой режим линейной адресации секторов. А то я столько книг накачал про это, что даже не знаю с какой начать читать чтобы не загубить общее положение дел (нужно с правильной начать).

Ну и хотелось спросить про файловую систему. Какую Вы сами используете и какую можно использовать для CD-R дисков. Моя тупая BFS уже не подходит для этого дела. Придётся придумывать что-то новое. Я просто считаю что изучать уже готовое будет для меня сложнее чем реализовать своё. Тем более что в тех же FAT мне не нравится что там не учитывается регистр.

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


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
По моему мнению порядок загрузки не должен сильно зависеть от типа загрузочного устройства. Если ты выполняешь загрузку исключительно посредством BIOS, то это можно делать практически с любого пригодного для загрузки устройства. Если ты планируешь догружать систему и в дальнейшем работать с устройством посредством собственных драйверов, то USB - более трудоемкий вариант - я к примеру за поддержку USB еще не брался. Для загрузки можешь использовать grub и Multiboot Spec. Если нужно грузить модульное ядро в реальном режиме (около 600 кб вместе с еще одним файлом), в том числе и без использования вторичного загрузчика, можешь воспользоваться спецификацией загрузки моей оси - Secondary Loader Boot Spec. Загрузчики для FAT12/Floppy 2x80x18 only, ISO9660 минуя структуру ФС (посредством ФС, включая Джульет, в ближайшее время тоже) раздаю всем желающим при условии, что имена загружаемых файлов будут отличаться (изменены) от используемых в наших проектах. В CD/DVD помимо ISO9660 с простыми расширениями также часто используется UDF. ...массив секторов с 28/48-битными номерами.


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

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Решил использовать CD-ROM для загрузки образа операционной системы и файлов. Но так же и хочу использовать HDD. Не очень хочется вникать в чужую файловую систему, поэтому думаю создать свою. Но смущает меня вот что.

Существует IDE (ATA, PATA) и SATA. Например у меня на компьютере DVD-ROM подключен к IDE, а HDD - к SATA. Конечно обращение к секторам будет осуществляться по LBA, но всё же ведь это разные интерфейсы. Да и разрядность для обращения к секторам бывает разная: 28-битная, 32-битная и 48-битная.

Меня интересует разница программирования в защищённом режиме устройств HDD и CD-ROM/DVD-ROM в интерфейсах IDE и SATA. Что нужно конкретно про это знать? Есть ли золотая серединка или для каждого интерфейса свой подход? Как определять какие на компьютере есть интерфейсы (IDE, SATA) и подключены ли к ним устройства и какие если подключены?

Ещё интересует способ получения и записи данных на эти устройства. Как это осуществляется? Да я через регистры будут читать статусы и посылать команды. Вроде бы есть регистр данных. Но как вытягиваются данные? Нужно мне считать сектор (512 байт), и откуда эти 512 байт мне попадут в память (не через 1-2 байтный регистр же?!)?

Вроде бы есть какой-то DMA, но как я понимаю, он нужен только если есть многозадачность. Так? Можно про это всё по подробнее и про DMA. Вроде бы DMA - это передача данными без процессора. Стоит ли её всегда использовать?

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 дек 2010, 22:52 
Аватара пользователя

Зарегистрирован: 16 апр 2010, 10:10
Сообщения: 320
Откуда: Псковская обл.
Более универсальной будет загрузка системы с помощью сервиса BIOS int 13. Потом пиши драйвер для защищённого режима для каждого устройства свой. По любому система должна стартовать на как можно большем числе машин.


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
s3dworld писал(а):
Решил использовать CD-ROM для загрузки образа операционной системы и файлов. Но так же и хочу использовать HDD. Не очень хочется вникать в чужую файловую систему, поэтому думаю создать свою. Но смущает меня вот что.
Ну-ну. А ты уверен, что кто-то захочет вникать в твою ФС, когда практически все используют вполне конкретные и хорошо известные ФС.

s3dworld писал(а):
Существует IDE (ATA, PATA) и SATA. Например у меня на компьютере DVD-ROM подключен к IDE, а HDD - к SATA. Конечно обращение к секторам будет осуществляться по LBA, но всё же ведь это разные интерфейсы. Да и разрядность для обращения к секторам бывает разная: 28-битная, 32-битная и 48-битная.
Про 32-битную можно поподробнее?..

s3dworld писал(а):
Меня интересует разница программирования в защищённом режиме устройств HDD и CD-ROM/DVD-ROM в интерфейсах IDE и SATA. Что нужно конкретно про это знать? Есть ли золотая серединка или для каждого интерфейса свой подход? Как определять какие на компьютере есть интерфейсы (IDE, SATA) и подключены ли к ним устройства и какие если подключены?
Золотая середина есть. Методы детекта устройств тоже существуют.

s3dworld писал(а):
Ещё интересует способ получения и записи данных на эти устройства. Как это осуществляется? Да я через регистры будут читать статусы и посылать команды. Вроде бы есть регистр данных. Но как вытягиваются данные? Нужно мне считать сектор (512 байт), и откуда эти 512 байт мне попадут в память (не через 1-2 байтный регистр же?!)?
Именно через регистр, а как еще?

s3dworld писал(а):
Вроде бы есть какой-то DMA, но как я понимаю, он нужен только если есть многозадачность. Так? Можно про это всё по подробнее и про DMA. Вроде бы DMA - это передача данными без процессора. Стоит ли её всегда использовать?
Необязательно при многозадачности. Однако даже самые простые программы, работающие с дисками, требуют механизмов, схожих с многозадачными, поэтому лучше сразу начинать делать это правильно.

P.S. Мне кажется, что ты пытаешь разобраться во всех темах одновременно. В деталях вникать сразу во все очень сложно. К тому же все, о чем ты спрашиваешь, было уже неоднократно озвучено, в том числе и на страницах этого и других форумов.


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

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Так как я хочу грузить операционную систему не с дискеты, а с диска CD-R, то мне более интересна стала адресация LBA. Если я не ошибаюсь, то и BIOS её поддерживает.

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

Поэтому меня интересует, как через BIOS грузить в режиме LBA.

Можно ли это и если можно, то как?

Лично я сразу открыл описание всех функций прерывания 0x10. Ничего не нашёл такого, что бы упоминало об LBA (хотя возможно у меня очень древнее описание). Нашёл только какую-то:

Цитата:
INT 13 - прерывание жесткого диска ESDI - TRANSLATE RBA TO ABA
- преобразовать RBA в ABA
AX = 1C0Eh
CH = младшие 8 бит номера цилиндра
CL = номер сектора,старшие 2 бита номера цилиндра в битах 6 и 7
DH = номер головки
DL = номер диска
ES:BX -> номер ABA
Возвращает: CF установленный при ошибке
AH = состояние
Примечание: ABA (абсолютный адрес блока) формат можно найти в техническом
руководстве по IBM ESDI адаптеру в описании блока конфигурации
устройства


Что это и для чего?

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


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

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
С тут решил разобраться с файловой системой CD-диска. А их оказывается несколько. Я нашёл: ISO 9660, HFS и Universal Disk Format. Вот и не знаю какой использовать.

Можете кратко рассказать о плюсах и минусах каждого из них, и какой используете именно Вы и почему.

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


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

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Решил узнать о точном размере дисков в байтах. Нашёл:

Изображение

И ничего тут не понял. Что за размер CD-DA и что за размер без CD-DA. И сколько же байт в одном секторе? У меня ничего не сходится.

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


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

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


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

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


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

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