Как запрограммировать операционную систему?
Мне нравится код, но в настоящее время я занимаюсь только веб-разработкой. Я хотел бы сделать что-то уникальное и интересное и очень отличающееся от веб-программирования.
Да, это может быть глупый вопрос, но я думаю, было бы здорово создать действительно простую операционную систему. Поэтому, пожалуйста, не говорите ничего грубого. Я просто хочу знать следующее:
* С чего начать?
*Ресурсы
* Какой язык я бы использовал?
Я думал что-то простое, как на основе cmd
Ответы
Ответ 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/С++ и сборку для создания базовой операционной системы. вам нужно подумать о том, как сделать свою ОС, то есть тип ядра, реальный режим или защищенный режим, карты памяти и многое другое.