Як розробити операційну систему для комп'ютера

Операційні системи, складені з сотень тисяч рядків коду, дозволяють користувачам взаємодіяти з комп'ютерною технікою. Вони зазвичай пишуться на мовах програмування C, C++ і асемблер.

Кроки

  1. Для початку навчіться програмуванню. знання асемблера необхідно; настійно рекомендується також мати поняття про інші додаткові мови програмування нижчого рівня, наприклад, С.
  2. Визначтеся, на який пристрій Ви хочете завантажити операційну систему.це може бути CD-диск, DVD-диск, пристрій флеш-пам'яті, жорсткий диск або інший комп'ютер.
  3. Вирішіть, який ви хочете бачити вашу операційну систему.чи повинна це бути повна версія ОС з графічним інтерфейсом користувача (GUI) або, може бути, що-небудь більш мінімалістичне? Вам необхідно знати, в якому напрямку рухатися, ще перед початком процесу.
  4. Уточніть, яку платформу процесора буде підтримувати ваша операційна система.AI-32 і x86_64 є двома найбільш поширеними версіями для персональних комп'ютерів, так що їх можна вважати найкращим вибором.
  5. Визначитеся, чи віддаєте перевагу робити все самостійно з нуля, або ж є ядра, на основі яких ви б хотіли надбудувати систему.Linux з нуля-проект для тих, хто бажає, наприклад, створити свій власний дистрибутив Linux.
  6. Виберіть, чи збираєтеся ви використовувати свій власний завантажувач або попередньо створений уніфікований системний завантажувач Grand Unified Bootloader (GRUB).оскільки кодування своєї власної програми завантаження вимагає великих знань в області комп'ютерного забезпечення і BIOS, це може відсунути графік програмування діючого ядра.
  7. Прийміть рішення з приводу мови програмування, який збираєтеся використовувати.звичайно, цілком можливо розробити ОС на такій мові, як Pascal або BASIC, але краще писати на С або асемблері. Асемблер абсолютно необхідний, тому що деякі важливі частини операційної системи вимагають знання саме цієї мови. C++, з іншого боку, містить ключові слова, необхідні для запуску повної версії ОС.
    • Щоб зібрати ОС за допомогою кодів C або C++, ви, звичайно, будете використовувати то один компілятор, то інший. Це означає, що ви повинні прочитати керівництво/інструкції / документацію для обраного компілятора C / C++, що поставляється в комплекті з програмним забезпеченням або доступно на веб-сайті дистриб'ютора. Вам доведеться дізнатися безліч складних речей про компіляторі, крім того, для вдосконалення C++ належить вивчити його схему і ABI. Ви, як очікується, зрозумієте різні формати виконавчих завдань (ELF, PE, COFF, звичайні бінарні і т.д.) і помітите, що власний формат Windows, PE (.exe) захищений авторським правом.
  8. Виберіть інтерфейс програмування додатків (API).однією з добірок хорошого API є POSIX, так як вона добре документований. Всі системи Unix мають, принаймні, часткову підтримку POSIX, так що було б тривіально пристроювати програми Unix на вашу операційну систему.
  9. Визначтеся з дизайном.існують монолітні ядра і мікроядра. Монолітні ядра виконують всі служби в ядрі, в той час як мікроядра мають маленьке ядро в поєднанні з користувальницької реалізацією сервісів. Загалом, монолітні ядра швидше, але мікроядра мають кращу ізоляцію і захист від можливих несправностей.
  10. Розгляньте питання про розробку та роботу в команді.таким чином, вам буде потрібно менше часу на вирішення великих проблем, що дозволить створити операційну систему кращої якості за більш короткі терміни.
  11. Не стирайте ваш жорсткий диск повністю.Пам'ятайте, форматування диска необоротно очистить всі ваші дані! Використовуйте GRUB або інший менеджер для дубльованого завантаження вашого комп'ютера з іншої ОС, поки ваша версія не буде повністю готова функціонально.
  12. Почніть з малого.зверніть увагу в першу чергу на дрібниці, такі як відображення тексту і переривання, перш ніж переходити до складних елементів, наприклад, до управління пам'яттю і багатозадачності.
  13. Зберігайте резервну копію останньої робочої версії.це дає певний спокій у випадку, якщо щось піде абсолютно неправильно в поточній версії вашої ОС або наступних доповненнях. У разі поломки вашого комп'ютера і неможливості завантаження, як ви і самі розумієте, відмінною можливістю стане наявність другої копії для роботи, так що ви зможете усунути наявні несправності.
  14. Протестуйте вашу нову операційну систему на віртуальній машині.замість перезавантаження комп'ютера кожен раз після внесення змін або передачі файлів з робочого комп'ютера тестовій машині ви можете використовувати додаток для запуску ОС на віртуальній машині, в той час як ваша поточна ОС продовжує працювати. Програми VM включають в себе VMWare (яка також має сервер у вільному доступі), альтернативний відкритий вихідний код, Bochs, Microsoft Virtual PC (не сумісний з Linux), а також XVM VirtualBox.
  15. Випустіть реліз-версію.це дозволить користувачам розповісти вам про можливі недоліки у вашій операційній системі.
  16. Операційна система також повинна бути зручною для Користувача, так що не забудьте додати корисні функції, які стануть невід'ємною частиною вашого дизайну.

Поради

  • Коли розробка буде закінчена, подумайте, чи хочете ви представити код у вільному доступі або ж встановити приватні права на нього.
  • Обов'язково зробіть функції безпеки вашим основним пріоритетом, якщо хочете, щоб ваша система була життєздатною.
  • Не починайте проект розробки операційної системи з метою навчання програмуванню. Якщо ви не знаєте C, C++, Pascal або які-небудь інші відповідні мови і властивості, в тому числі типи покажчика, операції з бітами низького рівня, перемикання бітів, вбудований асемблер і т.д., – значить, ще не готові для створення ОС.
  • Переглядайте такі портали, як OSDev і OSDever, які допоможуть вам поліпшити власну операційну систему. Зверніть особливу увагу на те, що з більшості питань співтовариство OSDev.org воліє, щоб ви самостійно зверталися до змісту сайту, а не приєднувалися до форуму. Якщо ви все ж вирішили приєднатися до лав форумчан, для цього повинні бути певні передумови. Ви зобов'язані досконально знати C або C++ і мову x86. Ви також повинні розуміти загальні і комплексні поняття в програмуванні, такі як Linked Lists, Queues і т. д. Спільнота OSDev в своїх правилах прямо говорить про те, що ніхто не збирається няньчити нових програмістів. Якщо ви намагаєтеся розробити ОС, само собою зрозуміло, що Ви " бог " в області програмування. Від вас також потрібно прочитати керівництво по роботі з процесором щодо його архітектури, обраної вами; наприклад, x86 (Intel), ARM, MIPS, PPC і т.д. такий довідник по структурі процесора можна легко знайти за допомогою пошуку в Google («Intel Manuals», «ARM manuals» і т. д.). Не реєструйтеся на форумі OSDev.org, щоб задавати очевидні питання. Це просто призведе до відповідей на кшталт "Read the f * * * ing Manual". Для початку Ви повинні спробувати почитати Вікіпедію, посібники для різних інструментів, які збираєтеся використовувати.
  • Перевірте наявність потенційних мертвих точок та інших помилок. Недоліки, тупики та інші проблеми можуть вплинути на проект вашої операційної системи.
  • Якщо ви хочете спосіб простіше, уявіть дистрибутиви Linux-типу Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd або SUSE Studio і SUSE KIWI. Тим не менш, створювана ОС належить компанії, яка першою представила цей сервіс (хоча у вас є права на її вільне поширення, зміна і запуск, як вам подобається, під GPL).
  • Хорошим рішенням буде створення абсолютно нового розділу для розроблюваної операційної системи.

Попередження

  • Недбале Переписування ОС на жорсткий диск може пошкодити його повністю. Будьте обережні
  • У вас не вийде повністю готова система за два тижні. Почніть з завантажуваної операційної системи, а потім переходите на більш цікавий матеріал.
  • Якщо ви зробите щось необачне, як, наприклад, напишіть безладні байти в довільних портах I / O, то знищіть вашу ОС і можете (в теорії) спалити ваше обладнання.
  • Не очікуйте, що буде легко побудувати якісну операційну систему. Існує безліч складних взаємозалежностей. Наприклад, для того, щоб ОС була здатна працювати з декількома процесорами, ваш диспетчер пам'яті повинен мати «блокуючі» механізми для запобігання доступу зайвих процесорів в один і той же ресурс одночасно. Використовувані "блоки" передбачають наявність планувальника, щоб переконатися, що тільки один процесор звертається до критичного ресурсу в будь-який момент часу, а всі інші знаходяться в режимі очікування. Проте, робота планувальника залежить від присутності диспетчера пам'яті. Це приклад залежності від взаємоблокування. Немає стандартного способу вирішити подібні проблеми; кожен виробник операційної системи, як очікується, досить кваліфікований, щоб знайти свій власний варіант їх вирішення.

Що вам знадобиться

  • Комп'ютер
  • процесор, на якому збираєтеся будувати
  • достатня Оперативна пам'ять (ОЗП) для віртуальної машини
  • основна ОС (використовується для розробки вихідного коду асемблера (і ін.), а також збірки і упаковки на ранніх стадіях роботи; в кінцевому підсумку ваша власна ОС стане первинною)
  • редактор кольорового коду Syntax (застосовується при відсутності Integrated Development Environment)
  • компілятор
  • CD / DVD привід

Джерела

  1. Довідник:Linux From Scratch
  2. Завантажувач:GRUB
  3. Програми для віртуальної машини: Bochs, VM Ware, XM Virtual Box.
  4. Керівництво по роботі з процесором:Intel manuals
  5. Сайти з розробки ОС: OSDev, OSDever

Ще почитати: