Witamy na unix.stackexchange.com!
Nie ma łatwej odpowiedzi na twoje pytanie, a znacznie lepsi ludzie niż ja napisali całe książki na temat jądra Linuksa i ogólnie systemów operacyjnych.
O zakresie projektu: napisanie systemu operacyjnego nie jest prostym zadaniem! Nawet celowo minimalny system operacyjny, taki jak Minix, jest dość złożoną rzeczą! Aby dać ci wyobrażenie o systemie Linux, pomyśl o programach C, które napisałeś do tej pory. Przeciętny kurs uniwersytecki to najwyżej kilka tysięcy linii C. Myślę, że mój projekt z ostatniego roku obejmował około 30–35 000 linii C ++. Jądro Linux zawiera około 13 000 000 linii kodu C.
Dlaczego to wszystko w osobnych plikach? Duże projekty są przechowywane w osobnych plikach ze względów logistycznych i praktycznych. Zastanów się nad załadowaniem pliku edytora o wartości 13 000 000! Przed zajęciem się tak dużym projektem, jak Linux, zdecydowanie powinieneś doskonalić swoje umiejętności w języku C do tego stopnia, że pytanie „dlaczego wiele plików” odpowiada samo. Powinieneś także być w stanie odczytać kod C , a nie tylko go napisać. (trudniejsze niż się wydaje na początku)
Zdecydowanie powinieneś być bardzo biegły w C. Jądro jest utrzymywane przez tysiące ludzi i będziesz wezwany do zrozumienia osobistych idiomów C każdego z nich (przyznane, w ramach dość sztywnych standardów kodowania jądra, ale nadal - każdy ma własny styl rozwiązywania problemów).
Po zdobyciu C fu upewnij się, że rozumiesz systemy operacyjne. Pomoże to zrozumieć kod. Nie cały Linux jest niezbędny. Właściwe jądro jest dość małe! Co to jest wzdęcia:
- Tysiące sterowników sprzętowych dla różnych urządzeń.
- Warstwy abstrakcji dla różnych klas urządzeń w celu uproszczenia interfejsów API i pisania sterowników. Np. Mamy VFS dla systemów plików, warstwę zdarzeń dla urządzeń wejściowych i tak dalej.
- Szokujące ilości warunkowo skompilowanego kodu i plików odpowiadających różnym architekturom działającym pod Linuksem (nie każda maszyna z Linuksem jest komputerem Intela, a niektóre są niesamowicie różne od tego, czego można się spodziewać). Jądro musi poradzić sobie z tymi różnicami, a to oznacza więcej kodu.
Jednym z problemów, który natychmiast znajdziesz, jest to, że te elementy nie są tak łatwe do odłączenia, zmiany i ponownego podłączenia. Istnieje wiele wzajemnych powiązań. Krótko mówiąc, zmiana bitów jądra jest trudna.
Powód, dla którego ludzie sugerowali, że Minix jest prosty: jest to pełny system operacyjny, ale nie jest obciążony potrzebami systemu tak złożonego jak Linux. Kod jest mały, ale nadal zapewnia pełną funkcjonalność. W końcu pierwsze wersje Linuksa zostały zainspirowane przez Minix.
Jasne, Minix ma obecnie mniej wsparcia sprzętowego. Więc co? To jest dobrodziejstwo! Nowoczesne komputery wirtualizują się bardzo dobrze. Wykorzystaj to na swoją korzyść: maszyna wirtualna do uruchomienia Minix jest tak lekka, że sprawi, że rozwój stanie się leniwy.
Jeśli twoim projektem jest zbudowanie systemu operacyjnego, możesz zrobić coś gorszego niż zacząć od nauki Minix. Możesz także kupić i przeczytać książkę, którą napisał Minix, „ Nowoczesne systemy operacyjne Andrew Tanenbauma ”.
Powinieneś także wyznaczyć cele i precyzyjnie zdefiniować warunki . Jeśli twoja własna definicja systemu operacyjnego to Microsoft (system operacyjny z graficznym interfejsem użytkownika i pełnym pakietem oprogramowania), być może czeka cię bardzo długi projekt! W końcu setki tysięcy ludzi pracowały od lat 60. XX wieku, aby w końcu zabrać nas tam, gdzie jesteśmy.
Na koniec pamiętaj okrzyk bojowy informatyka: „ nigdy nie wymyślaj koła na nowo! „(lubimy robić wyjątki podczas nauki, oczywiście. I dla zabawy :))