ОС с нуля - PullRequest
       30

ОС с нуля

4 голосов
/ 07 декабря 2010

Хотя название является частью моего вопроса, вторая часть не будет такой простой.Первая часть: допустим, я хочу создать свою собственную операционную систему.Как мне вообще это делать?Я понимаю, что я должен создать загрузчик.Но куда мне идти оттуда?Мне нужно было бы отправить его в другую программу, но для этого эта программа уже должна быть там, и я должен точно знать, где она находится в пространстве памяти.Любые советы / учебники?

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

PS: Кроме того, я должен был бы написать свою собственную файловую систему?

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

Ответы [ 9 ]

5 голосов
/ 07 декабря 2010

Уф. Теперь это довольно вопрос! Я не думаю, что любой ответ, который вы получите здесь, охватит такую ​​огромную почву (если кто-то не сядет, чтобы написать и пересмотреть в течение часа или двух).

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

Вы можете использовать GRUB в качестве загрузчика - это должно упростить вещи.

3 голосов
/ 07 декабря 2010

Возможно, вы захотите рассмотреть моделирование (полностью или частично) операционной системы, а не ее написание.В зависимости от модели, он может извлечь из этого больше пользы, затрачивая меньше усилий.

Я знаю, что в моем старшекурснике мы писали алгоритмы сканирования диска на Java;это была вся Java с несколькими классами и интерфейсами.На самом деле он не сканировал диск, но сделал достаточно приличную работу, чтобы мы могли измерить, протестировать и настроить алгоритм, чтобы увидеть, как он изменился.

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

В качестве альтернативы, игра с существующей (UNIX / Linux) ОС может потребовать меньше усилий, чем писать что-то новое с нуля.

3 голосов
/ 07 декабря 2010

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

1 голос
/ 07 декабря 2010

Большинство компонентов, которые вы описали (диспетчер памяти, FS), могут быть реализованы, протестированы и использованы без написания для них операционной системы.

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

Кажется, вы недооцениваете объем работы (и знания!), Требуемый для этого.Лучшее, что вы можете сделать, - это найти друга, который хочет вам это объяснить, и поболтать с ним часом.

1 голос
/ 07 декабря 2010

Это не простое начинание, а то, в котором вы многому научитесь. Я рекомендую перейти на http://wiki.osdev.org/Main_Page, так как на этом сайте много учебников, и вы наверняка начнете.

0 голосов
/ 01 июля 2019

Pritam Zope и theMike97 имеют потрясающие учебники на Youtube по написанию ОС с нуля. В theMike97 есть серия статей о написании вашего собственного загрузчика, а Pritam zope научит вас писать собственное ядро ​​в asm и c. Вот мой нынешний загрузчик, если вы хотите что-то начать с. это просто печатает привет мир.

org 0x7c00
mov si, message       ;The message location *you can change this*
call print            ;CALL tells the pc to jump back here when done
jmp $
print:
  mov ah, 0Eh         ;Set function

.run:
  lodsb               ;Get the char
; cmp al, 0x00        ;I would use this but ya know u dont so use:
  cmp al, 0           ;0 has a HEX code of 0x48 so its not 0x00
  je .done            ;Jump to done if ending code is found
  int 10h             ;Else print
  jmp .run            ; and jump back to .run

.done:
  ret                 ;Return

message           db  'Hello, world', 0 ;IF you use 0x00
;message          db  'Hello, world', 0x00


times 510-($-$$) db 0
dw 0xaa55
~

сохранить этот код в файле с именем main.asm скомпилируйте это с nasm -fbin main.asm -o main.bin запустить его с qemu-system-x86_64 main.bin

0 голосов
/ 07 декабря 2010

Изучите Linux, и лучшие моменты Minix, и если вы собираетесь использовать готовый загрузчик, как некоторые из них предложили здесь, я бы пошел с LILO над GRUB (это, конечно, только личные настройки).

0 голосов
/ 07 декабря 2010

Еще один хороший справочник, который вы, возможно, захотите рассмотреть, является:

Удачи в этом деле.Я имею в виду, удачи.

0 голосов
/ 07 декабря 2010

Теоретическая книга по операционным системам Концепции операционной системы действительно поможет вам. Любой ОС потребуется планировщик, который будет обрабатывать переключение задач, переключение контекста, прерывания и тому подобное.

...