System operacyjny pozwala użytkownikowi na interakcję ze sprzętem komputerowym. System składa się z setek tysięcy linijek kodu. Zazwyczaj system operacyjny jest tworzony przy użyciu języków programowania C#, C, C++ i asemblera. System operacyjny umożliwia przeglądanie komputera podczas zapisywania i wykonywania poleceń. Nie myśl, że tworzenie systemu operacyjnego jest łatwe. Aby to zrobić, potrzeba dużo wiedzy.
Krok
Krok 1. Przede wszystkim poznaj programowanie
Język asemblera jest bardzo ważny; zdecydowanie zaleca się naukę innego uzupełniającego języka wysokiego poziomu, takiego jak język C.
Krok 2. Zdecyduj, jakiego nośnika chcesz użyć do załadowania systemu operacyjnego
Może to być napęd CD, napęd DVD, dysk flash, dysk twardy, dyskietka lub inny komputer.
Krok 3. Zdefiniuj podstawową ideę SO
Na przykład w systemie Windows podstawową ideą jest łatwy w użyciu interfejs graficzny i mnóstwo zabezpieczeń.
Krok 4. Określ, jaką platformę procesorową obsługuje Twój system operacyjny
IA-32, ARM i x86_64 to najpopularniejsze platformy dla komputerów osobistych. Więc wszystkie z nich są najlepszym wyborem.
Krok 5. Zdecyduj, czy wolisz robić wszystko sam od zera, czy jest już dostępne jądro, na którym chciałbyś zbudować
Na przykład Linux od podstaw to projekt dla osób, które chcą zbudować własną dystrybucję Linuksa.
Krok 6. Zdecyduj, czy użyjesz własnego programu ładującego, czy gotowego, takiego jak Grand Unified Bootloader (GRUB)
Samodzielne kodowanie bootloadera będzie wymagało rozległej wiedzy o sprzęcie i systemie BIOS. W rezultacie ten krok może utrudnić rzeczywisty harmonogram programowania jądra.
Krok 7. Zdecyduj, jakiego języka programowania użyć
Dobrze jest mieć system operacyjny w języku takim jak Pascal lub BASIC, ale powinieneś używać C lub Assemblera. Montaż jest bardzo potrzebny, ponieważ wymagają tego niektóre ważne części systemu operacyjnego. Z drugiej strony język C++ zawiera słowa kluczowe, które wymagają innego pełnego SO do uruchomienia.
Aby skompilować system operacyjny z kodu C lub C++, oczywiście użyjesz jednego lub drugiego kompilatora. Dlatego dobrym pomysłem jest zapoznanie się z podręcznikiem użytkownika/podręcznikiem/dokumentacją wybranego kompilatora C/C++, zawartego w oprogramowaniu lub dostępnego na stronie internetowej dystrybutora. Musisz wiedzieć wiele skomplikowanych rzeczy o kompilatorze, a do programowania w C++ musisz wiedzieć o schemacie kompilacji i jego ABI. Oczekuje się, że rozumiesz różne formaty wykonywalne (ELF, PE, COFF, podstawowy plik binarny itp.) i rozumiesz, że wyłączny format Windows, PE (.exe), jest chroniony prawem autorskim
Krok 8. Zdefiniuj interfejs programowania aplikacji (API)
Jednym z dobrych API do wyboru jest POSIX, ponieważ jest dobrze udokumentowany. Wszystkie systemy Unix mają przynajmniej częściową obsługę POSIX. Dlatego podłączanie programów uniksowych do systemu operacyjnego powinno być łatwe.
Krok 9. Zdecyduj się na swój projekt
Istnieje coś takiego jak monolityczne jądro i mikrojądro. Jądra monolityczne implementują wszystkie usługi w jądrze, podczas gdy jądra mikro mają małe jądra w pakiecie z usługami wdrażania demonów użytkownika. Ogólnie rzecz biorąc, jądra monolityczne są szybsze, ale mikrojądra mają lepszą izolację błędów i niezawodność.
Krok 10. Rozważ rozwój i pracę w zespole
W ten sposób rozwiązanie większej liczby problemów zajmuje mniej czasu, co prawdopodobnie przyspieszy tworzenie lepszego systemu operacyjnego.
Krok 11. Nie wyczyść całkowicie dysku twardego
Pamiętaj, że usunięcie dysku spowoduje nieodwracalne usunięcie wszystkich danych! Użyj GRUB lub innego menedżera rozruchu, aby dwukrotnie uruchomić system z innym systemem operacyjnym, aż system operacyjny będzie w pełni funkcjonalny.
Krok 12. Zacznij od małych
Zacznij od drobnych rzeczy, takich jak wyświetlanie tekstu, i wstrzymaj, zanim przejdziesz do takich rzeczy, jak zarządzanie pamięcią i praca złożona. Upewnij się również, że tworzysz wersje 32-bitową i 64-bitową.
Krok 13. Zachowaj kopię zapasową ostatniego działającego kodu źródłowego
Ten krok jest przydatny jako zabezpieczenie na wypadek, gdyby coś poszło nie tak z obecną wersją SO lub rozwojem. Jeśli komputer ulega awarii i nie chce się uruchomić, dobrze jest mieć drugą kopię, z którą można pracować, aby rozwiązać problem.
Krok 14. Rozważ przetestowanie nowego systemu operacyjnego na maszynie wirtualnej
Zamiast ponownie uruchamiać komputer za każdym razem, gdy wprowadzasz zmiany lub po wysłaniu plików z komputera deweloperskiego na maszynę testową, możesz użyć aplikacji maszyny wirtualnej do uruchomienia systemu operacyjnego, gdy bieżący system operacyjny jest uruchomiony. Obecne aplikacje VM obejmują: VMWare (który ma również produkt serwerowy dostępny za darmo), alternatywy open source, Bochs, Microsoft Virtual PC (niezgodny z systemem Linux) i Oracle VirtualBox.
Krok 15. Uruchom "kandydat do wydania" lub wersję Beta
Ten krok pozwoli użytkownikowi powiadomić Cię o potencjalnych problemach z Twoim systemem operacyjnym.
Krok 16. System operacyjny powinien być również przyjazny dla użytkownika
Upewnij się, że dodajesz przyjazne dla użytkownika funkcje, aby były one integralną częścią Twojego projektu.
Porady
- Sprawdź, czy nie ma potencjalnych zakleszczeń i innych błędów. Błędy, zakleszczenia i inne problemy będą miały wpływ na projekt kompilacji systemu operacyjnego.
- Upewnij się, że zaimplementowałeś funkcje bezpieczeństwa jako najwyższy priorytet, jeśli chcesz, aby system działał poprawnie.
- Korzystaj ze stron internetowych, takich jak OSDev i OSDever, aby pomóc w stworzeniu własnego systemu operacyjnego. Uprzejmie proszę pamiętać, że w większości przypadków społeczność OSDev.org będzie bardziej niż szczęśliwa, jeśli użyjesz ich wiki i nie dołączysz do forum. Jeśli zdecydujesz się dołączyć do forum, jest warunek wstępny: musisz naprawdę wiedzieć o C lub C++ i języku asemblera x86. Powinieneś także rozumieć ogólne i złożone koncepcje programowania, takie jak listy połączone, kolejki itp. Społeczność OSDev w swoich regulaminach wyraźnie stwierdza, że jej społeczność nie jest tworzona po to, by wychowywać nowych programistów.
- Nie dołączaj z forum OSDev.org, a następnie zadaj oczywiste pytanie. Zostaniesz poproszony tylko o przeczytanie przewodnika. Przeczytaj Wikipedię i instrukcje dotyczące sprzętu, którego chcesz użyć.
- Jeśli próbujesz stworzyć system operacyjny, zdecydowanie jesteś uważany za „boga” programowania.
- Powinieneś także przeczytać instrukcję obsługi procesora dla wybranej architektury procesora; czy x86 (Intel), ARM, MIPS, PPC itp. Instrukcje dotyczące architektur procesorów można łatwo znaleźć za pomocą wyszukiwarki Google („instrukcja Intel”, „instrukcja ARM” itp.).
- Po zakończeniu wszystkich prac programistycznych zdecyduj, czy chcesz wydać kod jako kod otwarty, czy z zachowaniem praw autorskich.
- Nie zaczynaj projekt systemu operacyjnego, aby rozpocząć naukę programowania. Jeśli nie wiesz od środka i na zewnątrz o C, C++, Pascalu lub innym odpowiednim języku, w tym manipulacji wskaźnikami, manipulacji bitami niskiego poziomu, przesunięciu bitów, wbudowanych językach asemblerowych itp., nie jesteś gotowy na system operacyjny rozwój.
- Utworzenie całkowicie nowej partycji w celu „rozszerzenia” SO może być dobrą opcją.
- Jeśli szukasz łatwego sposobu, rozważ dystrybucje Linuksa, takie jak Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS Mk LiveCD lub SUSE Studio i SUSE KIWI. Jednak system operacyjny, który tworzysz, należy do firmy, która jako pierwsza uruchomiła usługę (choć masz prawo do swobodnego jej rozpowszechniania, modyfikowania i uruchamiania według własnego uznania na licencji GPL).
Ostrzeżenie
- W ciągu dwóch tygodni nie otrzymasz pełnego systemu operacyjnego. Zacznij od bootowalnego SO, a następnie przejdź do fajniejszych rzeczy.
- Nieostrożne pisanie systemu operacyjnego na dysku twardym może go całkowicie uszkodzić. Bądź ostrożny.
- Jeśli zrobisz coś, co nie jest zalecane, na przykład zapisujesz losowe bajty na losowych portach I/O, spowodujesz awarię systemu operacyjnego i (teoretycznie) spalisz sprzęt.
- Nie oczekuj, że system operacyjny jest łatwy do zbudowania. Istnieje wiele skomplikowanych współzależności. Na przykład, aby utworzyć system operacyjny zdolny do obsługi wielu procesorów, Menedżer pamięci musi mieć mechanizm „blokujący”, aby uniemożliwić wielu procesorom dostęp do tego samego zasobu w tym samym czasie. Stosowana do tego „blokada” wymagałaby od planisty zapewnienia, że tylko jeden procesor ma dostęp do krytycznych zasobów w danym momencie, a wszystkie inne będą musiały czekać. W rzeczywistości harmonogram zależy od obecności Menedżera Pamięci. To jest przykład ślepej zależności. Nie ma standardowego sposobu rozwiązania tego rodzaju problemu; od każdego programisty systemu operacyjnego oczekuje się umiejętności na tyle, aby znać swój własny sposób radzenia sobie z tym problemem.
Dodatkowe zasoby
- Wskazówki: Linux od podstaw
- Bootloader: GRUB
- Aplikacje maszyn wirtualnych: Bochs, VM Ware, XM Virtual Box.
- Instrukcja procesora: instrukcja Intel
- Witryny programistyczne SO: OSDev, OSDever