Открытая операционная система с нуля.
Предлагаю написать операционную систему.
1. Задумка эта не коммерческая.
2. Пишется всё с нуля, без использования сторонних продуктов - на голом железе и собственных мозгах.
3. Все происходит прямо здесь, пока это не перестанет быть возможным.
Существует много проектов, но эта затея для тех кто хочет родить операционную систему и воспитывать ее с пеленок (а не содержать пенсионерку). Вот как раз сейчас мы ее зачали.
Надеюсь многому научиться, найти единомышленников, а также найти предел своих возможностей.
Стартовые условия таковы.
Железо: Процессор пень второй. Оператива 32М. Остальное может быть любым, а может и не быть вовсе.
Направление: Система должна в перспективе поддерживать все что угодно, работать с любым набором железа. Систему можно улучшать и это должна предусматривать ее архитектура.
Другими словами - система пишется с нуля и до бесконечности. При этом она все может но ничего не требует. По крайней мере к этому стремится.
Пишется все по порядку - шаг за шагом. Официальный язык - машинный код или то, что напишем на нем сами. Разумеется в мнемониках ассемблера или чего угодно другого, но без использования КОНКРЕТНОГО компилятора.
Главная идея - понимание каждого байта своей системы.
Я так понимаю, что сначала нужно создать ту часть, которая сидит в памяти и работает. Как она туда попадет - не важно. Не надо привязываться к дискетам, жестким дискам и сидюкам. Носители появятся новые и система не должна от них зависеть.
На этом этапе надо определить основные понятия: устройство, процесс, ... вобщем всё то, что будет ядром системы и в дальнейшем уже не изменится - идеология. Это ядро должно дать минимальную функциональность системе, но при этом не ограничивать возможности дальнейшего развития.
Идея подана.
Если она прижилась, то говорите что делать в первую очередь (разумеется не надо начинать с того, как будет выглядеть окно интернет-браузера и каким будет цвет рабочего стола :).
Что должна уметь система в самом фундаменте?
Наверное она должна запускать процессы и соединять их с ресурсами.
Какие могут быть процессы? Какие ресурсы?
Разумеется, система не имеет права зависнуть ни в каком случае по собственной вине или по вине программы.
Нужно придумать универсальные интерфейсы, чтобы система была модульной (универсальность за счет драйверов и т.п.).
Еще раз скажу, что этот велосипед изобретается в первую очередь для собственного развития участников. Поэтому не надо говорить что все уже кем-то создано.
Бог вот человека создал и ладно (раз работает, то ради бога ничего не трогай!), а тебе так - слабо? (я в том смысле, который тут уместен...)
(И что нового будет в операционках?)
Попробую внести адекватное твоему предложение и предлагаю подождать появления процессоров на ядре с искусственным интеллектом, авось необходимость в ОС вообще отпадет :)
Мой адрес: [EMAIL=phantom-84@mail.ru]phantom-84@mail.ru[/EMAIL]
Под мобильностью же я понимаю способность ОС загружаться со съемных носителей или по сети, а также возможность ее установки с помощью обычного копирования и, если это необходимо, перезаписи первичного загрузчика.
В описанном виде это самоцель, лучшее применение которой - LiveCD. Если имеется в виду тиражируемость конфигураций, ее надо называть именно так.
А это фигня, очень просто доказываемая математически. Пример большой слабосвязанной системы у нас уже есть - Линукс. Вы хотите такую же?
А это фигня, очень просто доказываемая математически. Пример большой слабосвязанной системы у нас уже есть - Линукс. Вы хотите такую же?
что значит слабосвязанная система? применительно к Linux?
Freeman, честно говоря, мне бы хотелось создать нечто большее, чем Линукс :)))
Я понял. Сразу на двух DVD или на трех?
А сообщить про математическое доказательство ты поторопился! Начни с простых фактов, может для меня этого будет достаточно :)
Посмотри на дистрибутивы аналогичных программ для Windows и Linux. Под последнюю, как правило - больше. Думаю, если начать сравнивать по точкам входа, что где реализовано - выигрыш будет еще больше.
Смешно. Что делает эта ОС?
Кто то хвастался новыми идеями - вот и расказуйте , что вы нового (вечного , доброго)придумали и что из этого уже реализовано ? :D
А не заколебало ещё ? ))
Кто то хвастался новыми идеями - вот и расказуйте , что вы нового (вечного , доброго)придумали и что из этого уже реализовано ? :D
Если ты обращаешься ко мне, то отвечаю, что лично меня не заколебало! А рассказывать просто так мне не интересно, ведь я даже не знаю, нужны ли кому-нибудь мои рассказы...
Чем больше я расширяю свою систему, тем все больше и больше мне нравится ее изначально созданная архитектура. Очень приятно развивать систему, когда не приходится каждый раз возвращаться к переработке общей концепции.
Подождем...
Ты сам себе противоречишь. Если ОС создается для пользователей, их совершенно не волнует, отдельная программа оболочка или часть ОС. Главное - чтобы перед глазами окошки рисовались. А администраторам от сохи есть непаханое поле деятельности в виде остальных ОС (не будем показывать пальцем). Твоя делянка, созданная по образу и подобию, ничего не изменит. Пахари будут пахать, им большие поля интересны, а обществу потребления по фигу, лишь бы хлеб на полке был.
Ты - человек думающий, вот и завязался диалог.
Бог миловал. :) В Зелеке я, можно сказать, случайно оказался. И не так давно.
Подумай внимательно - почему потенциально ненадежны все сегодняшние ОС? Все просто - слишком много точек администрирования. Забыл что-то, и - на тебе! Вот и гложет ностальгия по временам DOS.
Соответственно, чем меньше зависимостей в системе, тем больше дублирующегося кода, и тем система потенциально ненадежнее. Один пример с KDE и Gnome чего стоит.
Мой тоже.
Ага, угу. Предварительно угрохав несколько дней на поиск и выбор более-менее приличной программы в каждой номинации из хаоса на 3-х DVD.
Простота, как известно, бывает порой хуже воровства. Если ты хочешь все свести к ядру - пожалуйста. Типа, вот наше вам крутое ядро, давайте писать ОС!
Для современной ОС ядро - далеко не такая важная часть, как пытаются представить многие. Гораздо важнее архитектура системы с точки зрения ее "дистрибутивности". Есть два способа развития ОС:
- закрытая (возможно, коммерческая) разработка цельной по концепциям ОС и базового набора прикладных программ, охватывающих если не все, то большинство прикладных задач
- открытая разработка, по принципу "с миру по нитке"
Если у тебя не завалялся лишний миллион, альтернатив нет. Открытая разработка по сути есть хаос. Сегодня ты один, завтра вас будет двое, потом наберется группа из десяти человек... А при мало-мальски серьезном распространении система начнет расти, как на дрожжах и совершенно бесконтрольно. И криворуким программистам не запретишь писать кривые программы и собирать из них кривые дистрибутивы.
Решение есть: надо заложить будущий хаос в концепцию системы. Т. е. модель должна описывать произвольный набор компонентов, любая комбинация которых остается контролируемой. Если система будет поддерживать собственную целостность без посторонней помощи, количество точек администрирования уменьшится на порядок, как минимум. Концепция контролируемого хаоса - главный критерий надежности современной ОС.
Решение есть: надо заложить будущий хаос в концепцию системы. Т. е. модель должна описывать произвольный набор компонентов, любая комбинация которых остается контролируемой. Если система будет поддерживать собственную целостность без посторонней помощи, количество точек администрирования уменьшится на порядок, как минимум. Концепция контролируемого хаоса - главный критерий надежности современной ОС.
Интересная концепция - избежать проституции и наркомании невозможно , так давайте их узаконим :D ;)
Если чего избежать низя , то это не значит что не надо бороться .:)
Если ты обращаешься ко мне, то отвечаю, что лично меня не заколебало! А рассказывать просто так мне не интересно, ведь я даже не знаю, нужны ли кому-нибудь мои рассказы...
Лучше поэмы :D :D .
Спрашую - значит интересно .:)
Количество зависимостей между модулями в моей системе велико, а вот количество типов зависимостей мало, что и упрощает ее администрирование.
Типов зависимостей достаточно двух.
Я не против выбора, я против ручного выяснения зависимостей методом тыка. Т. е. хочу в процессе выбора руководствоваться не только удобством той или иной программы, но еще и числом библиотек, которые она требует для работы. В идеале - получить зависимости одним запросом и начать изучение с конца списка (от меньших зависимостей).
Я не отрицаю, что систему можно и нужно администрировать. Но просто так культуру администрирования не привьешь. Надо, чтобы система уважала время потенциальных администраторов и их труд.
Почему большинство пользователей не администрирует Windows? А, грит, все равно рано или поздно накроется, придется все заново делать. Переустановка - основной штатный метод решения проблем. Нет уважения к пользователю-администратору.
Линукс (и любой другой Юникс) можно довести до ума администрированием, но потратить на это придется неоправденно много времени. Зачастую настройки программ имеют собственный формат конфига, и т. д. Короче, надо собаку съесть, чтобы начало получаться. Нет уважения к пользователю - не могут все быть администраторами.
При этом, как в Линукс, так и в Винде задача администратора часто сводится к тупому кликанью (или изменению конфигов) плюс запоминанию, что где надо сделать. Фактически - это и есть ручное отслеживание зависимостей. А компьютер на что? Мне подобное администрирование напоминает недалекого бухгалтера, вводящего цифры в столбик в Excel и считающего сумму на калькуляторе. Соответственно, нет и мотивации делать что-то серьезное.
Кстати, ты где обитаешь? Вот с тобой было бы интересно встретиться и поговорить.
koderAlex, рассказываю, что должно быть... защищенная на уровне программ и пользователей многозадачная многопоточная ОС, построенная на базе IA32. А теперь, что есть... некоторое подобие ОС с пока еще очень сырым исходным кодом, но уже обладающее всеми заявленными выше свойствами (если конечно не учитывать возможные баги :) кроме многопоточности (планирование пока ведется лишь по основным потокам процессов). Консоль на данный момент только текстовая. Как можно реализовать графическую оболочку в этой операционной среде, я уже примерно представляю, а остальное - это пока не первоочередная задача. Что касается программной защиты, то здесь все достаточно стандартно. Ядро для своей защиты использует соответствующие возможности микропроцессора, а также многочисленные программные проверки. В межпроцессной защите важную роль играет страничный механизм (подкачка применяет не всегда), на основе которого для каждого процесса строится свое виртуальное адресное пространство, в рамках которого он и существует. К совместно используемым ресурсам организуется поочередный доступ, причем если предполагается изменение состояния ресурса, то предварительно выполняется его блокировка. Для разделения данных между отдельными пользователями системы используется т.н. механизм профилирования, а также некоторые особенности файловой подсистемы. Суть профилирования заключается в том, что во время загрузки системы сначала выполняется общее конфигурирование, затем происходит регистрация пользователя, после чего выполняется персональное конфигурирование и запуск программы-оболочки, имя которой записано в профильном файле прошедшего регистрацию пользователя. В зависимости от типа учетной записи пользователя система может работать либо в обычном режиме, либо в т.н. режиме настройки системы (режиме администрирования). Обычный режим работы не позволяет выполнять некоторые служебные операции, например, изменение системных файлов, настройку даты и времени и т.п. Для защиты от изменений данные отдельно взятого пользователя должны быть полностью скрыты от других пользователей системы. Чтобы это сделать, в процессе загрузки ОС каталоги, содержащие личные данные пользователя, подключаются (монтируются) к единой структуре лишь на этапе персонального конфигурирования, причем только тогда, когда конфигурирование выполняется именно для данного пользователя. Это конечно очень поверхностное описание, поэтому если тебя интересуют подробности, можешь смело обо всем спрашивать. Кстати я все это тебе рассказал не потому, что я такой альтруист. Просто у меня в процессе разработки иногда возникают ситуации, когда мне трудно выбрать оптимальный вариант из нескольких возможных. В этом случае я готов прислушаться к мнению человека, который хорошо понимает, о чем идет речь, если конечно это мнение обосновано и не противоречит моим взглядам на возможное разрешение возникшей ситуации.
Меня больше интересуют обещанные "новые идеи" . Если не секрет , в чём их суть ? и на каком этапе их реализация ?
Типов зависимостей достаточно двух.
И конечно это импорт и экспорт :) Опять прикладной подход :)))
Я не против выбора, я против ручного выяснения зависимостей методом тыка. Т. е. хочу в процессе выбора руководствоваться не только удобством той или иной программы, но еще и числом библиотек, которые она требует для работы. В идеале - получить зависимости одним запросом и начать изучение с конца списка (от меньших зависимостей).
У меня подобной проблемы не существует вообще, правда, это может быть связано с тем, что я еще и не приступал к реализации поддержки динамически подключаемых библиотек :) Когда это сделаю, тогда и поговорим по существу :)))
Линукс (и любой другой Юникс) можно довести до ума администрированием, но потратить на это придется неоправденно много времени. При этом, как в Линукс, так и в Винде задача администратора часто сводится к тупому кликанью (или изменению конфигов) плюс запоминанию, что где надо сделать. Фактически - это и есть ручное отслеживание зависимостей. А компьютер на что?
У меня администрирование выполняется с помощью обычной программы, запущенной в т.н. режиме настройки системы. Важно то, что эта программа предлагает не только построить какую-то конкретную защитную модель путем настройки множества различных параметров, но еще и выбрать одну из предопределенных или ранее созданных и сохраненных моделей, а это очень удобно и позволяет существенно уменьшить количество ошибок, возникающих в процессе администрирования системы и влияющих на ее защищенность!
Кстати, ты где обитаешь? Вот с тобой было бы интересно встретиться и поговорить.
Я обычно обитаю на юге, хотя в общем птица перелетная :) В Зеленограде бываю очень редко, а в столицу летаю на конкретные мероприятия и прибываю там, постоянно поглядывая на часики, от которых отвожу взгляд только во время брачных игр, но тогда, как ты понимаешь, мне не до интеллектуальных бесед :) Если хочешь, мы можем пообщаться через ICQ
И конечно это импорт и экспорт :)
Не угадал.
Практика показывает, что у хороших прикладников мышление более свободно, а вот незакостенелые системщики, похоже, вымирают, как класс - всех сгубил Линукс. Ничего личного.
Кем, как и чем они создаются?
Практика показывает, что у хороших прикладников мышление более свободно, а вот незакостенелые системщики, похоже, вымирают, как класс - всех сгубил Линукс. Ничего личного.
ПРОТЕСТУЮ!!! :D системщиков профессия обязывает мыслить более шаблонно :)
ПРОТЕСТУЮ!!! :D системщиков профессия обязывает мыслить более шаблонно :)
Ну, тем более. Значит, надо системщиков вообще отстранить от проектирования систем. Проектировать должны проектировщики согласно поставленной задаче. И не имеет значения, какие средства при этом будут применены. Вообще, деление программирования на системное и прикладное надуманно.
Ну, тем более. Значит, надо системщиков вообще отстранить от проектирования систем. Проектировать должны проектировщики согласно поставленной задаче. И не имеет значения, какие средства при этом будут применены. Вообще, деление программирования на системное и прикладное надуманно.
ааа... речь об этом? так я двумя руками за. задача системщиков вроде меня - знать как работает от корки до корки. и уметь настроить/отладить/починить за малый промежуток времени. а проектируют пусть умные :)
ааа... речь об этом? так я двумя руками за. задача системщиков вроде меня - знать как работает от корки до корки. и уметь настроить/отладить/починить за малый промежуток времени. а проектируют пусть умные :)
Когда речь идет о разработке, под системщиками подразумеваются системные программисты, а не админы. Вы - потребители.
Когда речь идет о разработке, под системщиками подразумеваются системные программисты, а не админы. Вы - потребители.
любой админ должен разбираться в системе на уровне системного программера. или хотя бы стремиться к этому. пользоваться, не понимая системы изнутри - невозможно.
Не угадал.
Что же тогда?..
Практика показывает, что у хороших прикладников мышление более свободно, а вот незакостенелые системщики, похоже, вымирают, как класс - всех сгубил Линукс. Ничего личного.
Ничего личного.
Я считаю себя универсалом, т.е. в равной степени прикладником и системщиком.
Кем, как и чем они создаются?
Наиболее общие схемы заложены в саму программу. Администратор может выполнить настройку вручную или выбрать одну из предопределенных моделей и изменить лишь некоторые параметры, после чего все сохранить в виде отдельной схемы, которая в дальнейшем может быть многократно использована. Создание защитной модели заключается в указании следующих параметров:
- общие для всех загружаемые драйверы;
- количество пользовательских учетных записей;
- регистрационные имена и пароли для всех пользователей;
- загружаемые драйверы отдельно для каждого пользователя;
- все монтируемые каталоги с общими данными и программами;
- все монтируемые каталоги с персональными данными и программами;
- программа-оболочка отдельно для каждого пользователя;
- и др.
Что же тогда?..
Наследование и владение.
Если это так - поздравляю. Ты на правильном пути. Честно. На сегодня единообразная система-монолит и есть то, что может получить успех. Можно сказать, применение технологий встроенных систем для настольных ПК.
Вопрос только в том, хватит ли у тебя сил разработать все? Если нет - рано или поздно столкнешься с проблемами, названными в первой части поста. Без контролируемых зависимостей систему не построить.
Что вы думаете по этому поводу?
Что вы думаете по этому поводу?
Конгениально! Я даже догадываюсь, кто им будет.
Конгениально! Я даже догадываюсь, кто им будет.
Говорила мне мама, иди в Щукинское, а я, болван, Щуке предпочел дворовую театральную школу! Теперь ни в бизнесе, ни в обычной беседе никого не удается развести, вот и приходится вести дела по-честному, а ведь иногда так хочется схитрить :)
У меня тут возник один вопрос: кто знает, как программно заглушить компьютер в корпусе ATX? Сам не нашел точных сведений по этому вопросу, поэтому буду весьма благодарен, если вы поделитесь своими знаниями или сообщите адреса соответствующих ресурсов сети.
Внимательно прочитал вашу беседу.
Я серьезно настроен на написание новой ОСи,
или корректировку своей старой.
Я считаю, что было бы целесообразным оговорить некоторые тех. тонкости,
из-за которых можно стать в тупик, в частности так случилось у меня...
По поводу тормознутости передачи параметров при обработке шлюза вызова:
этим явлением можно пренебречь, если учесть, что если пойти другим образом
(через шлюз ловушки), то надо будет эти же данные параметров пихать из
памяти в регистры, а это займет еще больше времени, если учесть что проц
в первом случае копирует данные из стека в стек автоматически.
Поэтому я предлагаю сразу использовать дескриптор шлюза вызова в GDT,
а в проге (в служебных объектных файлах, которые автоматом линкуются
к проге) использовать прототип вида
int syscall(int,int,int,int,int,int,int);
И не надо делать никакой трансляции параметров в регистры.
Связи с этим такой вопрос: после вызова шлюза указатель стека не
изменяется ( в смысле в сравнении до и после дальнего call-а )?
То, что прописывается во всех шлюзах вызова и прерываний это
физический адрес или виртуальный? (т.к. в моей ОС пока что все равно -
у меня первые 4Мб памати проецируются в 0x00000000 и 0xf0000000)
Категорически отрицаю возможность использования сегментно-страничной
организации памяти т.к. её можно (и нужно) заменить на страничную.
Для какой цели существует NMI? Зачем существует порт, в котором можно
его замаскировать?
можно остановиться на программном переключении. Как минимум
не придется перегружать LDTR, если LDT вообще используется.
>Если так, то куда записывать дескрипторы сегментов стека
для каждого потока?
>Как правильно (через порты может) узнать объем ОЗУ?
Метод "записал=>проверил=>если равно, то здесь ОЗУ" не канает под
эмулатором Bochs например...
Обещаю выслать исходники APM выключения питания.
Где-то у меня были. Только там прикол в том, что это ОС, кде-то внутри
ядра определяется функция для работы с APM, так что одного сишного
файла, я думаю, будет мало... А основная часть все-таки в одном файле
лежит. Я в исходниках не разобрался - там что-то премудрое, но зато
универсальное, API состоит из множества вызовов, один из них - выключение
всех устройств.
По поводу "хитрого" ребута из "защищенного" "нуля" кто не знает - расскажу.
А вообще это есть в книге изд. Питер "ASSEMBLER Специальный справочник".
>Как правильно перейти в ring0+paging? Какой должен быть порядок настройки
GDT, таблицы страниц и Far Jmp-ов. Если кто желает помочь - могу выслать
исходники загрузчика ядра второго уровня, в котором собственно и глюк.
Закрузчик второго уровня у меня - файл на флопе, который загружается
бутсектором, а сам загружает ядро [в проекте - добавление туда дров на
устройства HDD,FDD,Flash,CD,DVD, а также закрузка вместе с ядром нужных
модулей].
>У меня еще идея появилась - сам придумал. Для доступа к физической
памяти, проецирования страниц можно воспользоваться следующим трюком:
в главном каталоге страниц (первого уровня) в 1024 (последней) ячейке
создается ссылка на страницу как обычно. В этой таблице(странице) в
первой ячейке делается ссылка на саму себя... Благодаря этому без
хитростей в этой странице можно создать еще 1023 дескриптора на нужные
физические страницы.
Если эта идея не нова - скажите, но я все равно рад, что до нее
додумался сам.
>Мое мнение по поводу защиты: надо сначала написать Ось, которая относилась
бы ко всем программам в том числе и драйверам как к очень злобным хакерам,
а потом делать поддержку защиты в ФС, сети, и т.д.
Из первого вытекает, что драйвера не должны быть на "нуле",
из последнего - что FAT не покатит.
Пишу ОС под FreeBSD 5.4, использую NASM(кстати, вещчь!), GCC (Си часть), Bochs
Все бинарники забиваю на образ флопика, ну а потом Bochs запускаю.
По поводу перехода на раздел винта еще не думал, т.к.:
- У меня на винте и так уже 4 раздела.
- Бинарники пока еще достаточно мало весят.
Писать ОСь под форточками как-то не хотелось...
Кстати, кому нужна кучища пакаджей под FreeBSD 5.4,6.0 лезьте
сюда: s28.zp.ua, а именно ftp://s28.zp.ua/pub/...
Там и NASM и Bochs и KDE...
В моей ОС уже русский язык есть :). Путем перепрограммирования знакогенератора.
Думаю сделать еще что-то типа tty, т.к. не удобно менять цвет текста и проч.
параметры через тупые интерфейсы.
Единственно, что качественно(и то вроде бы) написано - так это подсистема
управления памятью (выделение, освобождение для каждого процесса).
Многозадачности пока нет.
Короче, че это тут я. Надо идеи обсуждать, а потом вместе что-то хорошее
слепить...
Я предлагаю такие идеи:
- ввести новый привелегированный режим(доступный только супервайзеру) -
режим полной занятости. Т.е. некая программа может полностью занимать
рабочее время проца, а другие проги пусть стоят. Можно еще добавить
возможность временного отключения прерываний при работе в таком режиме.
Режим будет очень полезен для крупных расчетов, которые редко (а именно,
лучше только в начале и в конце работы) используют ресурсы диска и другие
устройства - таких приложений достаточное количество.
Режим выборочный - т.к. его использование возможно лишь на отдельных
(и от сети в том числе) рабочих станциях. Тут как раз что-то несетевое
предлагали писать...
- Ведение всевозможной статистики во всех "районах" ядра, а тем более в
драйверах устройств. Может быть полезно для мониторинга оптимальности
работы, для оптимизации операций ввода/вывода.
NMI возникает при фатальных ошибках, когда невозможно продолжить нормальный ход вычислительного процесса, например, при ошибке четности ОЗУ. Но в некоторых ситуациях, например при переключении в защищенный режим, НИКАКИЕ прерывания недопустимы, иначе комп зависнет просто между небом и землей, а прерывания все равно не будут обработаны. Поэтому из двух зол выбирают меньшее при переключении в PM запрещают в том числе NMI
Спасибо, а то я думал, если эмулатор не умеет запрещать NMI, и без этого хорошо работает, то
на компе запрещать тоже не надо...
Откуда: ОС под Bochs работает, а на компе - вылетает...
А его надо обратно разрешать после перехода в protected mode?