Rozpoczęcie pracy
On 2 października, 2021 by adminPo pierwsze, stworzenie systemu operacyjnego jest prawdopodobnie jedną z najtrudniejszych rzeczy, jakie możesz zrobić na komputerze (zaraz obok zabicia finałowego bossa w Doomie na poziomie trudności Nightmare). Komponowanie systemu operacyjnego wymaga dużej wiedzy z kilku złożonych dziedzin informatyki. Musisz rozumieć, jak działa sprzęt i być w stanie czytać i pisać skomplikowany język asemblera, jak również język wyższego poziomu (taki jak C, C++ lub Pascal). Twój umysł musi być w stanie owijać się wokół abstrakcyjnej teorii i utrzymywać niezliczoną ilość myśli. Czujesz się jeszcze zniechęcony? Nie obawiaj się! Ponieważ wszystkie te rzeczy są również tymi, które sprawiają, że programowanie OS jest zabawne i rozrywkowe.
Nie ma to jak uczucie spełnienia, kiedy w końcu, po godzinach zmagań, rozwiązujesz problem. A po pewnym czasie jesteś w stanie spojrzeć wstecz i zobaczyć wszystkie rzeczy, które stworzyłeś od podstaw. Twój ręcznie napisane system jest w stanie uruchomić, wykonuje magię wobec sprzętu, i daje użytkownikowi interfejs użytkownika i programy do gry z.
Nie ma absolutnej ścieżki trzeba podjąć podczas tworzenia OS. Po uzyskaniu początkowego systemu i uruchomieniu (a robisz to poprzez znalezienie odpowiednich tutoriali), wybierasz ścieżkę, którą chcesz podążać dalej. Twój OS jest dokładnie taki – Twój. Masz ostateczną kontrolę, a niebo jest limitem!
Spis treści
- 1 Twarda prawda
- 2 Odpowiedzialność
- 3 Wymagana wiedza
- 4 Zorganizuj swoje plany
- 5 Wybór środowiska programistycznego
- 5.1 GNU/Linux
- 5.2 Windows
- 5.3 MacOS
- 6 Testowanie systemu operacyjnego
- 7 Ochrona kodu
- 8 Wspólne punkty startowe
- 9 Uzyskiwanie dalszej wiedzy
- 10 Zobacz także
- 10.1 Artykuły
- 10.2 Wątki
- 10.3 Linki zewnętrzne
Twarda prawda
Miejmy nadzieję, że podstawowy fakt, iż rozwój systemu operacyjnego jest skomplikowanym i ciągłym procesem, nie zniechęca Cię. Prawda jest taka, że rozwój systemu operacyjnego jest naprawdę niezrównany, ponieważ wymaga największej ilości cierpliwości i starannego projektowania kodu, i zwraca bardzo mało lub nie „natychmiastową gratyfikację”, którą dostajesz od rozwoju takich rzeczy jak gry i skryptów internetowych.
Zostałeś słusznie ostrzeżony o ciężkiej pracy naprzód, ale jeśli nadal jesteś zainteresowany, a następnie przejść do przodu do królestwa programisty systemu operacyjnego. Przygotuj się na sporadyczne ataki zamieszania, zniechęcenia, a dla niektórych z nas… chwilowe szaleństwo. Z czasem, przy odpowiednim zaangażowaniu, znajdziesz się wśród elitarnej garstki, która przyczyniła się do powstania działającego systemu operacyjnego. Jeśli po drodze dopadnie Cię zniechęcenie, odśwież sobie zawartość tej książki. Mam nadzieję, że przypomni ci ona, dlaczego w ogóle rozpocząłeś tak szaloną podróż.
Na tym etapie opłaca się również przeczytać stronę Błędy początkujących. Użytkownicy na forum zauważyli, że wiele z tych błędów powtarza się z czasem, a unikanie ich jest świetnym sposobem, aby nie zrobić z siebie głupca.
Odpowiedzialność
Ludzie mają tendencję do twierdzenia, że pisanie nieefektywnego oprogramowania jest w porządku, twierdząc, że systemy komputerowe są dziś tak szybkie, że nie widać ich wpływu. Ten typ mentalności jest niebezpieczny w projektowaniu systemów operacyjnych. Może być w porządku pisanie niechlujnego kodu podczas tworzenia prostej aplikacji, ale gdy chodzi o krytyczny kod, który może być wywoływany tysiące razy na sekundę, musisz usunąć wszystkie koszty ogólne, jakie tylko możesz. System operacyjny powinien dostarczać komputer jako podstawowy zasób dla działających aplikacji, z jak najmniejszą komplikacją, abstrakcją i narzutem, jak to tylko możliwe.
Ludzie, którzy projektują systemy operacyjne w tym dniu i wieku mają tendencję do posiadania mentalności „wszystko oprócz zlewu kuchennego”. Biorą na siebie odpowiedzialność za wszystko, co oczywiście jest dobre, ale nie powinno się tego robić kosztem pozwolenia na rozkwit źle napisanych programów. Jest wiele rzeczy, które dzieją się „pod maską”, gdy pojawiają się błędy w programach. Źle napisane programy kosztują cenny czas wykonania i wymagają przełączania zadań, które są kosztowne zarówno pod względem pamięci, jak i częstotliwości. Zachęcamy do zniechęcania do źle napisanego oprogramowania.
Wymagana wiedza
Główny artykuł: Required Knowledge
Jeśli uważasz, że możesz to pominąć, to ten rozdział jest właśnie dla Ciebie.
Ta sekcja została przeniesiona na osobną stronę, ponieważ jest tak często przywoływana w dyskusjach na forum.
Uporządkuj swoje plany
Przed przystąpieniem do pracy zastanów się, co to jest, co chcesz uzyskać z pisania systemu operacyjnego. Jakie są twoje motywacje do podjęcia się tego projektu? Istnieje wiele możliwych powodów podjęcia hobbystycznego projektu OS, a większość os-devers ma więcej niż jeden. Nawet samo powiedzenie „Po prostu chcę” może być wystarczające, choć im więcej rozważasz i wyjaśniasz swoje cele i motywy, tym bardziej możesz skupić się na tym, czego naprawdę chcesz.
Bądź też szczery wobec siebie. Nie ma wstydu w posiadaniu większych ambicji dla swojego projektu, nawet (lub szczególnie) jeśli nie są one głównym celem. Staraj się uznać wszystkie swoje cele, nie tylko ten, który uważasz za swój główny cel.
Postaraj się rozstrzygnąć, które aspekty projektowania OS jesteś najbardziej zainteresowany lub zobaczyć potrzebę pracy nad. Większość z tego, co idzie do OS dev, zwłaszcza na początku, jest projektowanie i rozwój jądra, ale samo jądro jest tylko niewielką częścią większości systemów operacyjnych; jeśli głównym zainteresowaniem jest w UX, lub sieci, lub programowania sterowników, należy pomyśleć o tym, czy naprawdę trzeba (teraz lub w przyszłości), aby napisać własny system operacyjny w ogóle lub jeśli będzie tak samo zadowolony rozwijając te rzeczy na istniejącym jądrze. Więcej niż kilka osób poszło do OS dev, kiedy naprawdę chciał zaprojektować środowisko graficzne, więc jest to bardzo ważne pytanie, aby zadać sobie.
Postaraj się myśleć o wszelkich nie-OS projektów można chcieć podjąć na pierwszy, lub w tym samym czasie, zwłaszcza te, które mogą służyć jako praktyki lub przygotowanie do projektu OS. Zazwyczaj nie ma potrzeby, aby pracować nad projektem OS już teraz, a im więcej masz przygotowanych z wyprzedzeniem, tym lepiej będzie (przynajmniej do pewnego momentu – przygotowanie to jedno, zwlekanie to coś innego).
Podobnie, jeśli masz zamiar pracować nad rozwidleniem istniejącego projektu do eksperymentowania z, lub do modyfikacji dla jakiegoś konkretnego celu, skup się na tym, a nie na ogólnych kwestiach rozwoju. Zastanów się, które części istniejącej bazy kodu będą ci potrzebne, a które chcesz zmienić.
Postaraj się opracować niektóre z twoich konkretnych celów projektowych, i bądź przygotowany do zaplanowania oddzielnych projektów, jeśli to pomoże. Jeśli zamierzasz po prostu rozejrzeć się i zobaczyć, dokąd cię to zaprowadzi, to dobrze; jeśli twoim zamiarem jest obalenie Microsoftu, to też dobrze (choć prawdopodobnie nierealistycznie). Kiedy już wiesz, co chcesz zrobić, możesz podzielić szczegóły tego na konkretne cele i opracować, co będzie potrzebne, aby je osiągnąć. Nie próbuj wcisnąć zbyt wielu rozbieżnych celów do jednego projektu – jeśli masz różne rzeczy, które chcesz wypróbować ze sprzecznymi celami, podziel je na różne projekty.
Może pomóc, jeśli napiszesz przegląd swojego planowanego projektu OS, z jakimikolwiek specyficznymi wymaganiami lub szczegółami, które uważasz za godne uwagi lub które mogłyby wyjaśnić, z czym potrzebujesz pomocy, i dodaj je do swojego publicznego repozytorium, jeśli możesz. To nie tylko ułatwi innym pomóc, ale pomoże zorganizować i ustabilizować swoje plany, podobnie jak pisanie konspektu dla historii lub papieru. Bądź przygotowany do utrzymania go, jak twoje cele i plany się zmieniają, ale zachować kopię starszych wersji (lub jeszcze lepiej, zachować dokument pod kontrolą wersji), dzięki czemu można zobaczyć, jak twoja praca rozwija się w czasie.
Wreszcie, przegląd czasu i zasobów, które projekt będzie wymagać, i zdecydować, czy są one wykonalne. Jeśli wiesz, że masz tylko pewną ilość czasu, aby poświęcić się projektowi, wziąć to pod uwagę, i cokolwiek robisz, nie zobowiązują się do zewnętrznego terminu, nawet jeśli jesteś pewien, że można go osiągnąć. OS dev wymaga czasu – dużo czasu – i próba ukończenia pełnego projektu OS w semestrze nie jest realistyczna.
Wybór środowiska programistycznego
Potrzebujesz platformy, na której będziesz rozwijać swój nowy system. Podążając za trendami w informatyce ogólnej, najbardziej popularny jest GNU/Linux, ale wielu używa też Windowsa. Programiści używający systemu GNU/Linux mają niewielką przewagę w dostępności narzędzi, ale można to rozwiązać na Windowsie używając systemu takiego jak Cygwin lub MinGW.
- Binutils: Fundamentalne narzędzia do manipulacji plikami obiektowymi.
- GCC: The GNU Compiler Collection. GCC zawiera kompilatory między innymi dla C, C++, Fortranu i Ady.
- Make: Do automatyzacji procesu budowania, co staje się naprawdę pomocne, gdy masz więcej niż garść plików.
- Grep i sed: Do wykonywania bardziej zaawansowanych wyszukiwań oraz wyszukiwania i zastępowania (pomocne przy wypełnianiu tabel danymi).
- Diffutils: Niewiarygodnie przydatny do pokazywania różnic między dwoma plikami.
- Perl lub Python: Jeden z tych dwóch języków skryptowych powinien być zainstalowany. Przydatne między innymi do manipulacji ciągami znaków. Perl był kiedyś zalecany, ale Python jest teraz dość dojrzały i prawdopodobnie łatwiejszy do nauczenia. Oba mają setki pakietów/modułów dostępnych do wykonywania różnych zadań.
- Asembler: Na przykład NASM lub GAS. Różni się to w zależności od docelowej architektury procesora.
- Edytor: Do pisania plików Assembly, C i innych (kodu).
Możesz nie używać wszystkich tych narzędzi, ale najlepiej mieć je pod ręką „na wszelki wypadek” i wiedzieć, jak z nich korzystać, nawet na poziomie podstawowym. Ale jeśli zdecydowałeś się na użycie innego języka, to narzędzia zależą głównie od Ciebie i być może powyższa lista nie pomoże Ci w żaden sposób. Poniżej znajdują się informacje związane głównie z programistami C/C++ lub Assembly.
GNU/Linux
Najbardziej zalecanym systemem do tworzenia systemów operacyjnych jest GNU/Linux. Gdy używasz GNU/Linux, większość narzędzi programistycznych GNU jest już prawdopodobnie obecna. Jeżeli nie, użyjcie narzędzi do zarządzania pakietami w waszej dystrybucji (APT, RPM, Portage, Pacman, Apk, itd.) aby zainstalować je w razie potrzeby. Ponownie, wymagane jest stworzenie kompilatora krzyżowego, aby nie łączyć się z plikami runtime systemu deweloperskiego.
Wspólne edytory to Vim, Emacs, KDevelop, Komodo Edit, itp. Niektórzy wolą lekkie edytory zamiast IDE, takie jak gedit, Geany i SciTE. Wielu lubi Midnight Commander, który ma Text UI i wbudowany edytor (mcedit) i dlatego jest niezwykle lekki i szybki.
W kwestii tego, jakich dystrybucji powinieneś używać, zapoznaj się z listą dystrybucji Linuksa. Są one w każdym kształcie i rozmiarze, i nie wszystkie nadają się do rozwijania jądra. Nie używaj dystrybucji, które mają konkretny cel, jak bezpieczeństwo (Kali, Qubes, BackTrack, Parrot itp.), aplikacje naukowe (np. Scientific), zapory ogniowe i routing (np. DD-WRT), odzyskiwanie systemu lub środowiska wbudowane (Knoppix, Rescatux, TinyCore) lub specjalnie skierowane do początkujących (jak Linux Mint, Nitrux itp.) Chociaż Linux przyjazny dla początkujących mógłby się nadać, wybierz taką, która jest distro ogólnego przeznaczenia. Użyj także distro, które posiada aktualne pakiety, najlepiej wybierz takie, które używa rolling-release. Debian jest łatwy w użyciu, ale często dostarcza starożytne i załatane wersje (narzędzia mogą nie zachowywać się zgodnie z opisem). Wielu początkujących lubi Ubuntu, które jest w porządku, ale podobno ma problemy z niektórymi toolchainami i środowiskami kompilacji (jeśli skompilujesz swój własny cross-kompilator zamiast używać zainstalowanego, nie jest to problemem).
Najlepsze distro do rozwoju jądra to (ale pamiętaj, że jest to także kwestia osobistego gustu, więc te distro nie są wymagane, raczej sugerowane, i zazwyczaj wymagają pewnego doświadczenia): Arch, Gentoo, Solus, Slackware, void itp. nawet Puppy.
Jeśli nie jesteś pewien, spróbuj Ubuntu lub Manjaro.
Windows
Aby uzyskać niezbędne narzędzia, powinieneś zainstalować środowisko Cygwin. MinGW lub DJGPP to alternatywy, ale MSYS2 jest zdecydowanie sugerowane, ponieważ jest to najbardziej kompletne i kompatybilne środowisko, a także zawiera menedżera pakietów do instalacji bibliotek i narzędzi.
Microsoft niedawno (w momencie pisania) wydał Windows Subsystem for Linux jako opcjonalną funkcję dla Windows 10. Jest to w zasadzie prawdziwa dystrybucja wiersza poleceń Ubuntu działająca na wierzchu systemu Windows BEZ użycia maszyny wirtualnej. Najnowsze GCC i Binutils (6.1.0 i 2.27 w chwili pisania) kompilują się i działają poprawnie w tym środowisku. Używając powłoki Bash, można uzyskać dostęp do dysków twardych Windows poprzez /mnt/<drive letter>. Zaletą tego rozwiązania jest to, że możesz pracować z dowolnymi narzędziami Windows lub Linuksa, których potrzebujesz, bez konieczności sprawdzania, czy działają one w Cygwinie. Wiele z potrzebnych narzędzi można zainstalować za pomocą „apt-get”.
Dla wszystkich powyższych, mocno sugerowane jest zbudowanie kompilatora krzyżowego, nie tylko dlatego, że domyślne kompilatory celują w różne formaty plików wykonywalnych, ale dlatego, że jest to ogólnie dobry pomysł. Sprawdź stronę GCC Cross-Compiler po szczegóły i instrukcje.
Będziesz także potrzebował edytora. Używanie Notepada zadziała, ale łatwiej będzie jeśli będziesz miał bardziej kompletny edytor. Na przykład, Notepad++ lub Notepad2 są używane przez wielu ludzi. Jeśli dobrze czujesz się z edytorami uniksowymi, możesz wybrać jeden z dostępnych w Cygwin (w tym np. Vim i Emacs, które wymagają przyzwyczajenia, ale są bardzo wydajne).
Możliwe jest także użycie Visual Studio lub dostępnego za darmo Visual C++ Express Edition do napisania i skompilowania systemu operacyjnego. Będziesz potrzebował specjalnego pliku konfiguracyjnego i z pewnością będziesz w mniejszości, ale działa to całkiem dobrze. Możesz nawet zainstalować Windows SDK na wierzchu, umożliwiając 64-bitowy rozwój. Jedyną pułapką jest to, że nie obsługuje on Inline Assembly.
Inne narzędzia, takie jak Watcom czy Borland, również mogą być użyte, ale każde z nich ma specyficzne wymagania i nie są powszechnie używane do tego rodzaju pracy.
MacOS
Ponieważ pod maską używa on userland FreeBSD, jest on w pełni kompatybilny z POSIX. Wszystkie typowe narzędzia są dostępne (vi, bash, dd, cat, sed, tar, cpio, itd.) Prawie każdy samouczek działa od razu. Brakujące narzędzia są głównie związane z systemem plików: nie ma loopback device, nie ma fdisk, nie ma mkfs.vfat ani mtools. Ale można użyć diskutil do tych celów, lub użyć brew lub macports do zainstalowania tych brakujących narzędzi.
Aby uzyskać gcc, trzeba było mieć mpkg na 2. instalacyjnej płycie DVD dla starszych wersji. Nowsze wersje MacOS (10.13 i nowsze) mogą zainstalować XCode z wiersza poleceń (nie IDE, tylko toolchain), uruchamiając „xcode-select –install” z Terminala. Spowoduje to zainstalowanie gcc, binutils i make. Ten gcc jest właściwie masquaraded CLang, ale wystarczająco funkcjonalny, aby bez problemów zbudować swój własny kompilator krzyżowy. Preferowane jest używanie oficjalnego kompilatora do bootowania gcc niż instalowanie go z brew lub macports.
Testowanie systemu operacyjnego
Główny artykuł: Testowanie
Powyższy artykuł zagłębia się bardzo głęboko w temat wyboru sposobu testowania systemu operacyjnego i tego, jak zintegrować to z procesem rozwoju. Omówione są zarówno fizyczne, jak i emulowane środowiska testowe.
Ochrona kodu
Podczas tworzenia kodu napiszesz setki, a nawet tysiące linii kodu. Spędzisz niewyobrażalną liczbę godzin i będziesz siedział do późna w nocy kodując, kiedy naprawdę powinieneś iść spać. Ostatnią rzeczą, jakiej potrzebujesz, jest awaria dysku lub źle napisana komenda 'rm’ lub 'format’ wyrzucająca całą twoją pracę.
To, czego potrzebujesz, to system kontroli wersji. CVS jest używany od wielu lat, ale ostatnio dostał dużo konkurencji od Subversion, Bazaar, Mercurial i Git. Jeśli możesz, powinieneś skonfigurować zdalny komputer lub serwer jako serwer kontroli wersji, ale jeśli nie masz takiej maszyny, możesz również umieścić system kontroli wersji na swoim lokalnym komputerze. Pamiętaj tylko, aby raz na jakiś czas zrobić kopię zapasową swojego kodu na CD lub FTP.
Nie możemy podkreślić tego punktu wystarczająco mocno: jeśli jeszcze nie używasz kontroli źródeł, powinieneś zacząć to robić natychmiast. Wystarczy raz popełnić poważny błąd w swoim kodzie, aby zdać sobie sprawę z wagi posiadania kodu bezpiecznie zweryfikowanego i łatwego do odzyskania. Chociaż może się to wydawać przesadą dla małego, prywatnego projektu hobbystycznego, kiedy już nabierzesz nawyku używania kontroli wersji, będziesz się zastanawiał, jak kiedykolwiek się bez niej obywałeś.
Dla Git możesz stworzyć swój projekt na GitHub. Bitbucket jest również dobrą alternatywą, ponieważ obsługuje zarówno Git, jak i Mercurial. Oba są dostępne z darmowymi, prywatnymi repozytoriami.
Dodatkową korzyścią z używania kontroli wersji na repozytorium dostępnym z sieci jest to, że znacznie ułatwia współpracę i uzyskanie pomocy od innych. Może to być całkiem przydatne, szczególnie na forach, ponieważ pozwala uniknąć konieczności ciągłego umieszczania uaktualnionych wersji kodu w wątku wiadomości – po prostu kierujesz rozmowę w stronę swojego repozytorium, a inni w wątku będą mieli bezpośredni dostęp do twoich najbardziej aktualnych zmian. Jest to również istotne, jeśli w miarę rozwoju projektu zaczynasz współpracować z innymi programistami w ramach projektu (tylko nie oczekuj, że stanie się to z dnia na dzień).
Wspólne punkty startowe
Najprostszym sposobem na uruchomienie jądra „hello world” jest samouczek Bare Bones. Innym podejściem byłoby nauczenie się, jak uruchamia się sam komputer, na stronie Boot Sequence.
Dostępnych jest również wiele innych samouczków.
Zdobywanie dalszej wiedzy
W Internecie dostępna jest obecnie niesamowita ilość wiedzy na temat tworzenia systemów operacyjnych. To tylko kwestia znalezienia jej. Przede wszystkim, jest tu sama wiki. Mamy tu między innymi wiele tutoriali. Skoro tu jesteś, to pewnie już je znalazłeś. Również na tej stronie znajduje się forum, gdzie wielu programistów przesiaduje i może ci pomóc (ale upewnij się, że najpierw przeczytasz How To Ask Questions). Napisano całkiem sporo książek na temat rozwoju systemu operacyjnego. Kilka z nich znajduje się na naszej stronie Books, a więcej na osdever.net, jak również.
Zobacz także
Artykuły
.
Dodaj komentarz