Порада амбітного студента щодо створення власного ядра [закрито]


18

Я дуже амбітний студент університету, який хоче дізнатися майже все, що потрібно знати про комп’ютери (лай мене, якщо хочеш, я люблю вчитися). Нещодавно я подумав, що це буде веселий проект (хоч і тривалий) розробити та створити власне ядро.

У мене з’явилася основна інформація, і я зрозумів, що мені потрібно освоїти збірку та C / C ++, щоб справді зробити цю роботу. Хоча я працюю над ними, я хотів би дізнатися, ЯК ядро ​​насправді працює з точки зору програмування. Я витратив години на перегляд коду ядра Linux, але це може зайняти вас лише поки.

Які основні етапи створення ядра? Що потрібно вирішити? Замовляти чи робити речі? Я знаю, що я кусаю багато, але я досить рішучий, щоб впоратися.


12
Не потрібно лаяти вас за те, що хочете дізнатися все. Але якщо ви плануєте насправді намагатися, вам краще продовжити термін життя, надлюдський мозок і жодних інших планів на ваше життя;)

2
Я сподіваюся, що все це буде! Не дуже, хоча у мене просто непосильне бажання вчитися.
n0pe

@delnan Можлива параноїдна шизофренія теж плюс: templeos.org
DanteTheEgregore

@DanteTheEgregore Що?
Panzercrisis

Відповіді:


34

Що вам потрібно зробити - це створити операційну систему. Навіть якщо, наприклад, ви вирішили, що це має бути UNIX-система, все ще потрібно прийняти багато рішень. Наскільки ти схожий на UNIX? Які частини UNIX вам подобаються і які, на вашу думку, потребують вдосконалення?

Якщо ви не налаштовані на те, що він схожий на UNIX, у вас з’являється ще більше запитань, щоб відповісти: чи мають процеси утворювати дерево, чи вони «плоскі»? Які типи міжпроцесового спілкування ви хочете підтримувати? Ви хочете, щоб це було багатокористувацьким або просто багатозадачним (або, можливо, однозадачним)? Ви хочете, щоб це була система в режимі реального часу? Який ступінь ізоляції ви хочете забезпечити між завданнями? Де ви хочете, щоб він потрапляв у масштабі монолітного проти мікроядра? Наскільки ви хочете, щоб він підтримував розподілену операцію?

Як правило, я б радив не вивчати ядро ​​Linux для вашого натхнення. Це не проти самого ядра Linux, а простий факт, що Linux призначений насамперед для виробничого використання, а не для освіти. У ньому багато оптимізації, хакерської сумісності та ін., Які надзвичайно корисні для виробництва, але швидше відволікають, ніж навчають.

Якщо ви зможете знайти його, копія книги Лева (коментар Левів до 6-го видання UNIX , із вихідним кодом , Джоном Левом) є набагато легшою відправною точкою. 6-е видання UNIX було ще невеликим і простим, щоб читати і розуміти досить швидко, не будучи надто спрощеною іграшковою системою.

Якщо ви плануєте орієнтуватися на x86 (принаймні в першу чергу), ви також можете подивитися на MMURTL V 1.0 Річарда Берджеса. Тут представлена ​​система для x86, яка набагато більше використовує апаратне забезпечення x86, як спочатку планували дизайнери процесорів - те, що більшість реальних систем уникає на користь переносимості до інших процесорів. Як ви могли здогадатися, це, як правило, орієнтується набагато сильніше на апаратний кінець речей. Друковані копії здаються дорогими і важкими у пошуку, але ви можете завантажити текст і код безкоштовно.

На щастя, є ще кілька можливостей - Проектування та впровадження операційної системи Ендрю Таненбаума та Альберта Вудхолла, наприклад.


Дякую за приємну відповідь. Я перегляну всі ці книги.
n0pe

7
Я додав посилання на PDF-файли книги та джерела. Дивовижна річ щодо джерела для v6 UNIX - це те, що вона становить 100 сторінок із 100 рядками на сторінку. А в 10 000 рядків коду у вас є повноцінна багатозадачна операційна система . Якщо ви справді можете зрозуміти код, що оточує відомий коментар у рядку 2238, "від вас не очікується цього зрозуміти", ви можете дати собі Золоту зірку та почесні майстри. Насолоджуйтесь!
Пітер Роуелл

Дякуємо за посилання! Тепер я мушу розібратися, де це надрукувати ....
n0pe

1
Мінікс (книга Танненбаума) призначений для освіти і може бути саме тим, що потрібно тут.

@PeterRowell, dmr заявив, що це помилка в cm.bell-labs.com/who/dmr/odd.html

12

Я б запропонував почати з крихітного, зосередженого завдання: використовуючи складання, написати програму для завантаження іграшок. Це не повинно робити багато. Ви просто хочете, щоб комп'ютер автоматично завантажував програму під час її запуску, роздруковував повідомлення, яке підтверджує, що воно працює, прочитати деякий вхід із клавіатури, надрукувати ще одне повідомлення, а потім вимкнути комп'ютер.

Це матиме кілька переваг:

  1. Зрештою, вам знадобиться процес завантаження для вашого ядра, тому це не буде безглуздою вправою.
  2. Це дасть тобі письмову практику в зборах.
  3. Це додасть вашій практиці написання підпрограм IO з низьким рівнем. Як ви пишете повідомлення на екран чи читаєте натискання клавіші, коли немає ОС, на яку ви могли б зателефонувати?
  4. Це дасть вам досвід дослідження технічних деталей процесора та материнської плати. (Перше питання: як ваша материнська плата / процесор знаходить завантажувальну програму при її запуску?)
  5. Написання ядер стало дуже складним завданням, що має тонку тонкощів. Це завдання дасть вам щось почати і, можливо, убереже вас від забруднення бур’янів, перш ніж ви навіть починаєте.

Як тільки ви зможете це зробити, ви матимете набагато краще уявлення про те, у що потрапляєте.


Дякую за це, я думаю, що саме це я спробую зробити. Більше читання в моєму майбутньому.
n0pe

7

Навчання програмуванню в асемблері - це хороший перший початок, і це можна зробити з MSDOS 6.0, також може бути корисним через відсутність вбудованих функцій.

Читання такої доброї книги, як поняття Операційна система, було б справедливим початком для створення власного ядра. Вам доведеться керувати завантаженням завантаження, керуванням драйверами пристроїв, взаємодією з BIOS, створенням файлової системи та управлінням, плануванням програми, завантаженням та вивантаженням програми, впровадити хоча б якусь оболонку (набагато простіше, ніж побудувати систему вікон).

C / C ++ працюватимуть лише у тому випадку, якщо ваше ядро ​​сумісне зі стандартними бібліотеками для цих мов, інакше потрібно також написати копію цих бібліотек.

Це навіть не починає думати про багатопоточність, безпеку системи, мереж.


7

Minix - це приємний клон Unix (який надихнув Linux), який був написаний для викладання.

Ендрю С. Танненбаум - чудовий письменник і викладач і написав цілу книгу про операційні системи, використовуючи Minix як приклад (і включає вихідний код для подальшого використання): http://en.wikipedia.org/wiki/Operating_Systems:_Design_and_Implementation

Особисто я вважаю, що він дещо кращий письменник, ніж програміст, тому деякі речі не настільки зрозумілі, як я б хотів особисто, але - ей - це працює!

Я настійно рекомендую розглядати це як навчальний ресурс. Це також дасть вам уявлення про кількість роботи, необхідної для того, щоб фактично виготовити щось, що насправді може бути корисним.


Я б порекомендував отримати книгу з фізичних питань. Простіше робити нотатки.

Насправді придумайте це, я думаю, що я побачив книгу на Амазонії за дешевим. Я можу отримати його там. Спасибі
n0pe

Також зауважте, що це третє видання. Я вважаю, що ми використали перше видання ще тоді, коли я пройшов курс.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.