Разработка операционной системы для x86 [закрытой] архитектуры

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

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

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

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

33
задан SMR 4 May 2016 в 03:50
поделиться

12 ответов

Для моего заключительного проекта года в коллаже я разработал маленькую x86 ОС с диспетчером виртуальной памяти, виртуальной файловой системой и полностью вытесняющей многозадачностью. Я сделал его, открытый исходный код и код в большой степени прокомментированы, проверьте его исходную страницу штамповочного пресса в:

https://github.com/stephenfewer/NoNameOS

На основе моего опыта я могу рекомендовать следующее:

Вы будете потребность x86 ассемблер для различных частей, этого в неизбежном, но можете быть сведены к минимуму. Справедливо быстро Вы получите выполнение C код, который является доказанным выбором для разработки ОС. Как только у Вас есть своего рода диспетчер памяти, доступный, можно войти в C++, если Вам нравится (Вы нуждаетесь в некотором диспетчере памяти для вещей как новый и удаляете).

, Неважно, какой язык Вы выбираете, Вам все еще будет нужен блок & C для обеспечения системы от начальной загрузки, где BIOS оставляет Вас в любую применимую форму.

В конечном счете, основной язык, который Вы выбираете, будет зависеть от типа ОС, которую Вы хотите разработать.

Моя среда разработки была портом Windows средств разработки GNU DJGPP наряду с ассемблер NASM. Для моего IDE я использовал Eclipse IBM с плагин CDT, который обеспечивает среду разработки C/C++ в Eclipse.

Для тестирования я рекомендую BOCHS, эмулятор ПК открытого исходного кода x86. Это позволяет Вам загрузить свою ОС быстро, которая является большой для тестирования и может быть интегрирована в затмение, таким образом, можно создать и выполнить ОС при нажатии кнопки. Я также рекомендовал бы использовать и VMware и физический ПК иногда, поскольку можно взять на некоторых тонких ошибках тот путь.

P.S. разработка ОС является действительно забавой, но очень интенсивна, мой принял большое участие 12 месяцев. Мой совет состоит в том, чтобы запланировать хорошо и Ваш , дизайн является ключевым! наслаждайтесь:)

42
ответ дан 27 November 2019 в 18:03
поделиться

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

существуют материалы там по основным принципам операционной системы. MIT имеет OpenCourseware на предмете . Прочитанный Andrew Tannenbaum серия Operating Systems и взгляд на вещи как Minix.

Понимают для того, что там. Начните переделывать вещи. Одолжите идеи и посмотрите, куда они идут. Можно перестроить колесо, если Вы действительно хотите, но Вы узнаете больше путем построения на работах других.

6
ответ дан 27 November 2019 в 18:03
поделиться

Действительно не имеет значения, какой язык Вы выбираете. Если язык полон по Тьюрингу, то можно записать ОС в нем.

Однако выразительность языка сделает определенные виды проектов очень легкими или очень твердыми реализовать. Например, "живость" и динамизм старого OSs Smalltalk зависят от того, что они реализованы в Smalltalk. Вы могли делать это в C также, но, вероятно, было бы настолько трудно, что Вы не будете даже думать об этом. JavaScript или Ruby OTOH, вероятно, были бы большим соответствием.

Microsoft Research's Singularity является другим примером. Это просто не могло быть реализовано ни в чем кроме Sing#, Spec# и C# (или подобные языки), потому что большая часть архитектуры зависит от статической безопасности типов и статического verifiability тех языков.

Одна вещь иметь в виду: пространство дизайна для OSs, реализованного в C, в значительной степени полностью исследуется. Существуют буквально тысячи из них. На других языках, однако, Вы могли бы на самом деле обнаружить что-то, что никто не обнаружил прежде! Существует только приблизительно приблизительно дюжина OSs, записанных в Java, приблизительно полдюжине в C#, чем-то на порядке двух OSs в Haskell, [только 114] один в Python и ни один в Ruby или JavaScript.

Попытка, пишущий ОС в Erlang или Io, и видит, как это влияет на Ваши взгляды об Операционных системах!

5
ответ дан 27 November 2019 в 18:03
поделиться

Существует курс ОС, предлагаемый в Университете Мэриленда, который использует GeekOS. Это - маленькое, экстенсивно прокомментировал ОС, разработанную в образовательных целях, которые могут быть выполнены с помощью Boch или эмуляторов QEMU.

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

отличный способ познакомиться с маленькой и простой ОС, которая работает на x86 архитектуре.

4
ответ дан 27 November 2019 в 18:03
поделиться

Вы могли бы хотеть искать XINU., это - крошечная ОС для x86, который действительно не используется ни для чего кроме быть разделенным студентами.

3
ответ дан 27 November 2019 в 18:03
поделиться

Используйте ANSI C и начнитесь с эмулятором. Когда Вы портируете на реальную машину, будет некоторый ассемблерный код. Контекстное переключение и обработку прерываний (например), легче записать в ассемблере.

Andy Tannenbaum записал хорошую книгу по ОС. Существуют много других хороших.

Удачи! нет ничего вполне как haveing, записанный Ваша собственная ОС, однако маленькая.

3
ответ дан 27 November 2019 в 18:03
поделиться

Также проверьте OSDev.org , которые имеют всю информацию, необходимо начать.

3
ответ дан 27 November 2019 в 18:03
поделиться

Я сделал это однажды для 386SX, который был на Плате PCI. Хороший источник о том, как запустить X86 cpu в защищенном режиме, является исходным кодом Linux. Это - всего несколько операторов блока. После этого можно использовать gcc для компиляции кода C. Результатом является объектный код в формате ELF. Я записал моему собственному компоновщику, для создания программы из объектного кода. И да, это работало! Удача.

2
ответ дан 27 November 2019 в 18:03
поделиться

Обязательно проверьте ответы на мой вопрос:

, Как начать в разработке операционной системы

2
ответ дан 27 November 2019 в 18:03
поделиться

При создании полной ОС необходимо будет использовать диапазон языков. Я ожидал бы блок, C и C++ по крайней мере.

я использовал бы Виртуальную машину для большей части тестирования.

1
ответ дан 27 November 2019 в 18:03
поделиться

Без сомнения я использовал бы Ada. Это - лучший системный язык программирования общего назначения, с которым я столкнулся без исключения. Один пример, Ada намного лучше для определения укусила расположение объектов в записи, чем C. Ada также поддерживает накладывающие записи на определенных ячейках памяти. C требует, чтобы Вы играли с указателями для достигания того же эффекта. Это работает, но более подвержено ошибкам. У Ada также есть поддержка языка прерываний.

Другой: Безопасность. Ada принимает значение по умолчанию к связанному присваиванию массива проверки, но позволяет Вам выключать его, когда Вам нужен он. C "значения по умолчанию" к не связанным начинающим работу массивам, таким образом, необходимо сделать это сами вручную каждый раз, когда Вы хотите его. Время показало, что это не правильное значение по умолчанию. Вы забудете тот, где он необходим. Использование переполнения буфера является единственным наиболее распространенным дефектом безопасности, используемым взломщиками. У них есть целые веб-сайты, объясняющие, как найти и использовать их.

Что касается приобретения знаний о выполнении этого, две книги, о которых я знаю, XINU (Unix назад, ничто, чтобы сделать с саентологией), и Oberon Проекта. Первое использовалось в моем курсе выпускника Операционных систем, и второе было записано Nikalus Wirth, создателем Паскаля.

2
ответ дан 27 November 2019 в 18:03
поделиться

Если Вы хотите, пишут ОС тогда, Вам нужны несколько человек. ОС не может записать одиноким людям. Я думаю, что лучше работать над существующими проектами ОС

, Это - только короткий список проектов ОС. Как Вы видите, что существует проект для каждого возможного языка.

-5
ответ дан 27 November 2019 в 18:03
поделиться