Это небольшой эксперимент, над которым я работаю, где я пытаюсь создать ядро ОС на языке программирования GO.
Цель состоит не в том, чтобы создать «полностью» функциональную операционную систему (что бы это ни значило), но узнайте больше о операционных системах и о том, как они сделаны.
Первоначально я планировал внедрить Fat32-Filesystem. Я внедрил один один раз (в C), но я не могу продолжать работать над проектом из -за отсутствия Harware. Конечно, вы можете легко реализовать файловую систему в Linux, но это довольно скучно.
Поэтому вместо этого я начал писать свою собственную ОС для этого проекта. Это также способ начать обучение. Ну, по крайней мере, несколько.
Когда у меня появилась идея написать операционную систему, я знал, что не хочу использовать C, так как у меня уже был опыт написания ОС в C. Я размышлял, использовать ли ржавчину или отправиться на писать мою ОС. В конце концов, решающим фактором было то, что GO будет большей проблемой.
Теперь вы можете подумать, что не очень хорошая идея, чтобы использовать, чтобы написать ядро, и вы были бы правы. Верхование предназначено для использования в пользовательском пространстве операционной системы. Есть много предположений, которые это подразумевает, например, способность вызывать Syscalls и использование динамического распределения памяти. В ядре вы не можете положиться на ОС, чтобы справиться с этим для вас, как и ОС. Тем не менее, с тщательным программированием и отказом от определенных выборов, вы можете сделать это, так почему бы и нет? Это вызов.
Одна цель этого проекта - быстрое достижение вещей, поэтому я не потратил время на разработку ОС. Чтобы ускорить весь процесс, я решил использовать интерфейс Syscall Linux. Таким образом, мне не пришлось бы писать свои собственные библиотеки пользователей, и я мог бы использовать любой язык программирования, который я хотел в своем пользовательском пространстве. У него довольно много недостатков, хотя. Хотя я делаю Syscalls так же, как Linux, это требует, чтобы я также использовал все предположения Linux. Например, запуск процесса переворачивает меня, чтобы настроить свое пространство памяти так же, как и Linux, Syscalls необходимо возвращать значения, которые ожидаются на ядре Linux, а конструкция ядра предполагается, что является монолитным.
Я еще не уверен, что я буду придерживаться этого дизайна. Еще одна идея, которую я имел,-это написать свой собственный ABI, но также написать библиотеку обертки Linux-Syscall, которая будет перехватывать Syscalls Linux и перевести ее в мою ОС.