Подтвердить что ты не робот

Как запрограммировать операционную систему?

Мне нравится код, но в настоящее время я занимаюсь только веб-разработкой. Я хотел бы сделать что-то уникальное и интересное и очень отличающееся от веб-программирования.

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

* С чего начать? *Ресурсы * Какой язык я бы использовал?

Я думал что-то простое, как на основе cmd

4b9b3361

Ответ 1

Абсолютная "библия" по дизайну операционной системы - это и был Andrew Tanenbaum Дизайн и реализация операционных систем - книга "Дракон":-)

alt text

Существует множество других ссылок, например. Разработка собственной 32-разрядной операционной системы.

Microsoft Research также имеет проект создания операционной системы в управляемом коде (С#) под названием Singularity - это может обеспечить некоторые идеи/документы и т.д.

Написание полной ОС не является ни тривиальной, ни быстрой задачей, хотя.....

Ответ 2

Переключение с webdev на backend будет довольно неприятным.

Сначала выберите плату/аппаратное обеспечение/архитектуру - возможно, даже пойти с симулятором ОС, который вы можете запустить на своем компьютере. Изучите C и некоторые сборки (intel, MIPS, ARM, coldfire/motorolla 68k) в зависимости от архитектуры ЦП, для которой вы строите свою ОС.

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

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

Некоторые вещи, о которых нужно подумать:

  • карта памяти (где именно в памяти вы загружаете части своей ОС, где она будет находиться)
  • как будет работать ваш планировщик (процесс и/или поток, приоритеты). Возможно, диаграмма с очередями для разных приоритетов; также диаграмму состояний процесса в разных очередях (готовность, блокировка, ожидание msg, запуск, выполнение, прерывание и т.д.)
  • как сделать межпроцессное общение (почтовые ящики, мьютексы, атомарность, синхронные и асинхронные сообщения, формат message envelopes {sender process id, receiver process id, message type, message})
  • как обращаться с режимами ядра и пользователя
  • алгоритмы выделения памяти - вы напишете собственный оператор malloc/free (как вы будете отслеживать, когда пользователь динамически распределяет память?), вы будете использовать связанный со списком список? "и т.д.
  • как обрабатывать прерывания (также здесь используется контекстный переключатель - как вы будете сохранять все регистры и восстанавливать их: у вас есть один стек, который вам нужно отслеживать, где вы на нем)
  • стандартные процессы: процесс клавиатуры, выход монитора, время,
  • как добавить сервисы синхронизации
  • как загрузить пользовательские процессы и запустить их
  • добавить преемственность или нет
  • добавить горячие клавиши (полезно для отладки вашего OS esp. в случае его зависания, вы можете добавить горячие клавиши для проверки памяти)
  • тестирование вашей ОС

РЕДАКТИРОВАТЬ - обновление URL-адреса Разработка собственной 32-разрядной операционной системы выходит из печати, но доступна онлайн: http://www.ipdatacorp.com/mmurtl/mmurtlv1.pdf

Ответ 3

Вот несколько ссылок, которые помогут вам начать:

http://www.brokenthorn.com/Resources

http://wiki.osdev.org/Main_Page/

Вам понадобится GCC и NASM. Я думаю, вы также можете использовать GASM.

Изучите прерывания BIOS.

Кроме того, прежде чем вы начнете захватывать кучу стандартов, таких как: APIC Ворота A20 PCI и PCIEx - Удачи, пытаясь получить один из них. Измените некоторые изменения. Intel и AMD - посмотрите на них, вы получите много информации. VGA ATA и SATA и т.д. Есть много.

Также возьмите эмуляторы вроде: bochs и qemu

Понять, как работает компьютер, то есть как он загружается.

Существует много информации о том, что вы просто должны сделать свое исследование.

Удачи.

Ответ 4

Начните с чтения некоторых книг операционной системы - например, Tanenbaums Современные операционные системы.

Это должно дать вам представление о том, какие проблемы вам необходимо решить, чтобы написать операционную систему.

Ответ 5

Думаю, вам лучше начать изучение работы Андрея С. Таненбаума.

Ответ 6

У вас есть достаточно ресурсов, когда вы их рекламируете, но я бы посоветовал вам не делать этого еще!

Для написания ОС, даже простой, вам нужно хорошее понимание того, как ваш компьютер работает на низком уровне, и вам понадобится хотя бы C или С++ и, предпочтительно, Assembly. Без этих навыков это будет утомительный и неудачный проект. Это сложно и сложно даже для опытных программистов C.

Ответ 7

Написание ОС сложно. Я рекомендую стать разработчиком, прежде чем стать разработчиком ОС. Вам нужно будет знать C/С++ и сборку для создания базовой операционной системы. вам нужно подумать о том, как сделать свою ОС, то есть тип ядра, реальный режим или защищенный режим, карты памяти и многое другое.