OSDev

для всех
Текущее время: 21 окт 2018, 02:23

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




Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: 29 окт 2007, 14:58 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1346
Откуда: Зеленоград
Почитал я идущие на форуме обсуждения и решил немного пофилософствовать на тему “С чего начать разработку ОС” :)

Думается, одна из важнейших ошибок самодеятельных разработчиков ОСей заключается в крайне расплывчатой формулировке самой задачи. Нередко хотят разработать систему, “чтоб была быстрой, надёжной и с красивым графическим интерфейсом”. Естественно, что такое “техническое задание” не слишком подходит для проектирования даже “Тетриса”. Отсюда мораль: конкретизируйте свои пожелания, отделите главное от второстепенного, определитесь с модулями системы, порядком их разработки.

Вторая проблема тесно связана с первой: новички в осеписании, даже если они являются довольно опытными программистами-“прикладниками”, нередко плохо себе представляют функции ОС и, как следствие, испытывают затруднения с “отделением мух от котлет”. К примеру, упомянутые пожелания к “красивому графическому интерфейсу” не имеют к созданию ОС практически никакого отношения! Думаю, всем известно, что в Linux есть как интерфейс командной строки (shell в разных вариантах), так и графический интерфейс (даже несколько, из коих наиболее распространёнными являются KDE и Gnome). Меньшее число людей знает, что и Windows может благополучно обойтись без графического рабочего стола, хотя для этого надо малость поизвращаться (рабочий стол Windows – это программа пользовательского режима, а отнюдь не какой-то компонент ядра, и поменять её труда не составляет). Но, наверное, в наше время мало кто представляет себе ОС, вообще лишённую с нынешней точки зрения пользовательского интерфейса :) А между тем таковые вполне могут существовать. Например, в 1960-е годы нередко использовался такой способ ввода заданий в машину: оператор помещает в устройство ввода с перфокарт колоду этих самых перфокарт, содержащих текст задания (операторы на языке управления заданиями плюс необходимые данные), нажимает на устройстве кнопку “Внимание”, после чего ОС, получив прерывание, считывает колоду и запускает задание на выполнение. Результаты, как правило, выводятся на печать. Тем не менее, на функциональности ядра системы пользовательский интерфейс не оказывает никакого влияния (точнее, лишь выдвигает к нему некие минимальные требования): все современные “фичи”, за исключением разве что PnP и сбережения электроэнергии, существовали уже в тех самых 1960-х годах (у ним относятся и многопроцессорные системы, и виртуальная память, и кэши для команд и данных, не говоря о более простых вещах вроде прерываний или прямого доступа к памяти – DMA). Выход здесь только один: знакомиться достаточно глубоко как с историей ОС, так и с современными системами. Например, совсем нелишне будет почитать “Внутреннее устройство Microsoft Windows”: по крайней мере, станет ясно, как некоторые важные вещи могут быть реализованы на практике.

Ещё одна загвоздка – слабое знакомство с аппаратной платформой. Чтобы создать ОС, недостаточно выучить ассемблер – необходимо достаточно хорошо понимать, как работает “железо” и как его программировать. Информации по этому вопросу много, но зачастую она не слишком хорошо структурирована или представлена фрагментарно. Например, весьма сложно добыть полные спецификации PCI, поскольку они являются платными (мне, например, официальная спецификация не попадалась ни разу). Здесь остаётся только читать, что есть (часто на английском), спрашивать на форумах и экспериментировать самому. (Кстати, вопрос навскидку для самопроверки: какая из многочисленных спецификаций описывает, как узнать объём и расположение областей памяти на обычном современном ПК? Лично я был несколько удивлён, когда докопался-таки до правильного ответа :) )

Ну и последнее. Разработка ОС – задача вполне посильная для одиночки, причём за разумное время (не больше одного-двух лет при условии посвящения этому одного-двух часов каждый день), но только в том случае, если этот одиночка не распыляется и обладает достаточной настойчивостью и терпением. Поэтому – ограничиваем круг задач и не пытаемся объять необъятное (можно вспомнить про поддержку периферии в Linux – хотя над этой системой работает толпа народу, поддержка по-прежнему иногда оставляет желать лучшего). В частности, если нет особых причин, нет смысла пытаться поддерживать старые процессоры (80386, к примеру) и древнюю периферию (не поддерживающие LBA жёсткие диски).

Если что упустил – жду кирпичей в свой адрес :)

Пы.Сы. Несмотря на несколько менторский тон, я не пытаюсь кого-то учить или выставлять себя особо умным -- у меня просто манера рассуждений такая :)


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

Зарегистрирован: 04 ноя 2007, 14:48
Сообщения: 113
Здорово написал! Я прям рад за то, что есть ещё люди, понимающие, что операционки не сложно пишутся, даже если и одним человеком :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 ноя 2007, 19:29 

Зарегистрирован: 08 май 2007, 07:25
Сообщения: 22
Dragon
Жжошь! ;)
Действиетлно, что нам стоит дом построить - нарисуем, будем жить!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 ноя 2007, 19:41 

Зарегистрирован: 04 ноя 2007, 14:48
Сообщения: 113
Не нарисуешь - не качественно построишь :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 ноя 2007, 15:43 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
Что нам стоит дом построить нарисуем будем жить!!!
ОС- операционная система. Два слова "cистема" и "операции".
Как помне:
ядро - этот система управеления ресурсами.
А сама ОС это набор системных библеотек для облегчения функционирования программ. Сюда относятся драйвера, GUI, прочии. Собственно ядро это тоже библеотека для облегчения работы других программ.



Цитата:
Например, весьма сложно добыть полные спецификации PCI
Да платная. Но на халяву можно найти. А в гугле искали? Там и самая последняя спецификация лежит на первой странице. А если еще и по лучше поискать, то и перевод на русский язык можно найти.

Цитата:
Кстати, вопрос навскидку для самопроверки: какая из многочисленных спецификаций описывает, как узнать объём и расположение областей памяти на обычном современном ПК?
Такой спецификации нет вернее их много.

Если имеется ввиду основная память компьютера, то это не описанно. Есть прерывание BIOS int 15 eax,e820h(и др) - которое описывается в PhoenixBIOS 4.0 Programmer’s Guide.
В спецификации ACPI эта функция биос также упоминается.

Есть еще спецификация PCI которая тоже опичывает как узнать диапозоны памяти устройств и их порты ввода/вывода отоброженные в память.
Можно узнать как напрямую через порты так и через PCI BIOS.

Есть еще ISA шина она тоже регламентирует диапозоны. Шина старая так что я на нее спецификацию не рыл. Просто знаю что есть некоторые диаозоны.
Тут есть спецификация PnP ISA она тоже регламентирует диаозоны устройств.

PnP - собственно PnP ISA как то мне не поподалось(или всетаки это теперь Super I/O ?!)
Поэтому используем спецификацию PnP BIOS для определения диапозонов PnP устройств.


А вообще качаем дашеты на материнки и изучаем.
Так как помимо прочего есть много о чем не упомянуто.


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

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1346
Откуда: Зеленоград
Pavia

Цитата:
Да платная. Но на халяву можно найти. А в гугле искали? Там и самая последняя спецификация лежит на первой странице. А если еще и по лучше поискать, то и перевод на русский язык можно найти


Я не сказал, что нельзя найти ;) Просто официально некоторые спецификации простым смертным не очень-то доступны. Ну а русские переводы зачастую кривые или неполные, так что лучше учить английский :)

Такой спецификации нет вернее их много.

Если имеется ввиду основная память компьютера, то это не описанно. Есть прерывание BIOS int 15 eax,e820h(и др) - которое описывается в PhoenixBIOS 4.0 Programmer’s Guide.
В спецификации ACPI эта функция биос также упоминается''

В спецификации ACPI эта функция не просто
упоминается'' -- именно спецификация ACPI ''вводит'' эту функцию как обязательную для BIOS'а. Так что распределение адресного пространства памяти на современных ПК необходимо определять как раз с помощью механизма ACPI, а именно этого самого прерывания INT 15h, функция E820h.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 ноя 2007, 16:15 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
Тогда уж давайте смотреть в корень. Microsoft раз в несколько лет выдвигает требования компьютеров к своей ос. Описывает эти требования в руководствах "pc97", "pc2001v10" и др.
Так вот в этих руководствах одно из требований к компьютеру это присутствие ACPI.
ACPI вводит эту функцию потому что она необходима для нее, а не для биоса и темболее компьютера. Так что никто тебя не застовляет использовать эту функцию. Ты можешь и другими методами определять диапозоны. Просто через нее удобнее.


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

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1346
Откуда: Зеленоград
Pavia

Цитата:
Microsoft раз в несколько лет выдвигает требования компьютеров к своей ос. Описывает эти требования в руководствах "pc97", "pc2001v10" и др. Так вот в этих руководствах одно из требований к компьютеру это присутствие ACPI


Угу. Во всяком случае, Виста работать на компутере, не поддерживающем ACPI, не будет, а NT 4 -- будет (2000, хрюшу и 2003 не проверял).

Цитата:
ACPI вводит эту функцию потому что она необходима для нее, а не для биоса и темболее компьютера


Верно ровно наполовину: БИОСу или компутеру эта функция действительно не нужна. Но и ACPI в ней тоже не нуждается. Эта функция нужна осям, поскольку обеспечивает им единообразный и гарантированный механизм определения объёма ОЗУ и карты его использования.

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


Других стандартизированных способов определения имеющихся диапазонов ОЗУ нет. Конечно, общий объём памяти узнать другими способами можно, но как ты узнаешь, какие области для чего используются? В частности, как узнаешь, сколько ACPI забирает памяти под свои нужды и по каким адресам, а также какую область памяти ты должен обязательно сохранять при переходе в спящий режим? Всякие конфигурационные пространства PCI здесь не помогут (они сообщат лишь об использовании адресного пространства памяти для нужд различной периферии), не помогут и другие стандартные функции BIOS.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 ноя 2007, 19:24 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
Там много других функций у биоса. Раз ты используешь ACPI то и используй его. А нехочешь ну так и надо пронего совсем забыть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 ноя 2007, 20:12 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1346
Откуда: Зеленоград
Pavia

Другие функции не дадут карту распределения памяти, и строить её придётся на определённых предположениях. Фактически ясность с использованием будет только для нижних 640 Кб (сколько занято снизу, всем известно, сколько занято сверху, можно спросить у BIOS). Так что даже без поддержки остальных функций ACPI толком разобраться с оперативкой без сей спецификации не удастся (ну а поскольку все современные ПК её поддерживают, то и нет особого смысла пытаться обойтись другими средствами -- разве что если очень хочется заставить свою ось работать на 386-й или 486-й машине или раннем "пне").


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

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


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

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


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

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