Jedną rzeczą, którą zawsze chciałem zrobić, jest stworzenie własnego systemu operacyjnego (niekoniecznie wymyślnego jak Linux lub Windows, ale lepszy niż zwykły program ładujący, który już zrobiłem).
Trudno mi znaleźć zasoby / przewodniki, które zabiorą cię do napisania prostego systemu operacyjnego „Hello World”.
Wiem, że wiele osób prawdopodobnie poleci mi spojrzenie na Linuksa lub BSD; ale podstawa kodu dla takich systemów jest (prawdopodobnie) tak duża, że nie wiedziałbym od czego zacząć.
Jakieś sugestie?
Aktualizacja: Aby ułatwić osobom, które trafiły do tego postu za pośrednictwem Google, oto niektóre zasoby programistyczne systemu operacyjnego:
Pisanie własnego systemu operacyjnego (Dzięki Adam)
Linux od podstaw (dzięki John)
SharpOS (system operacyjny C #) (Dzięki lomaxx)
OS Dev Wiki i fora (Dzięki Steve)
BonaFide (Dzięki Steve)
Bran (Dzięki Steve)
Rzuć własną zabawkę Klonowany system operacyjny UNIX (Dzięki Steve)
Inne zasoby:
Znalazłem fajny zasób o nazwie MikeOS : „MikeOS to narzędzie edukacyjne, które pokazuje, jak proste systemy operacyjne działają. Używa 16-bitowego trybu rzeczywistego do dostępu do BIOS-u, aby nie wymagało skomplikowanych sterowników”
Zaktualizowano 11/14/08
Znalazłem trochę zasobów w Przewodniku Freebyte po ... Wolnych i niewolnych systemach operacyjnych, które prowadzą do zestawów takich jak OSKit i biblioteka ExOS. Wydają się one bardzo przydatne w rozpoczynaniu tworzenia systemu operacyjnego.
Zaktualizowano 23.02.09
Ric Tokyo zalecił nanoos w tym pytaniu . Nanoos to system operacyjny napisany w C ++.
Zaktualizowano 3/9/09
Dinah przedstawiła użyteczną dyskusję dotyczącą przepełnienia stosu aspirujących programistów systemów operacyjnych: przeszkody w tworzeniu niestandardowego systemu operacyjnego omawiają pułapki, które możesz napotkać podczas opracowywania systemu operacyjnego i rozwoju systemu operacyjnego .
Zaktualizowano 7/9/09
LB dostarczyło link do projektu Pintos , edukacyjnego systemu operacyjnego zaprojektowanego dla studentów uczących się rozwoju systemu operacyjnego.
Zaktualizowano 7/27/09 (Wciąż silna!)
Natknąłem się na internetowy kurs systemu operacyjnego z Berkley z 23 wykładami.
TomOS to rozwidlenie systemu MikeOS, które zawiera mały menedżer pamięci i obsługę myszy. Jako MikeOS ma być projektem edukacyjnym. Jest napisany w asemblerze NASM.
Zaktualizowano 8/4/09
Znalazłem slajdy i inne materiały, które pasują do internetowych wykładów Berkeley wymienionych powyżej.
Zaktualizowano 8/23/09
Wszystkie pytania oznaczone osdev na stosie przepływu
OS / 161 to akademicki system operacyjny napisany w c, który działa na symulowanym sprzęcie. Ten system operacyjny jest podobny w Nachos. Dzięki Novelocrat!
tangurena zaleca http://en.wikipedia.org/wiki/MicroC/OS-II , system operacyjny zaprojektowany dla systemów wbudowanych. Jest też książka towarzysząca .
Opracowanie jądra Linux przez Roberta Love'a jest sugerowane przez Andersa. Jest to „powszechnie uznany wgląd w jądro Linuksa”.
Zaktualizowano 9/18/2009
Dzięki Tim S. Van Haren za poinformowanie nas o Cosmos , systemie operacyjnym napisanym całkowicie w języku c #.
tgiphil mówi nam o strukturze Managed Operating System Alliance (MOSA) , „zestawie narzędzi, specyfikacji i kodu źródłowego w celu wspierania rozwoju zarządzanych systemów operacyjnych opartych na wspólnym języku pośrednim”.
Aktualizacja 24.09.2009
Steve znalazł kilka zasobów do programowania w systemie Windows za pomocą programu Visual Studio, zapoznaj się z instrukcją instalacji BrokenThorn z VS 2005 lub sekcją VS OSDev .
Zaktualizowano 9/5/2012
kerneltrap.org nie jest już dostępny. Jądro linux v0.01 jest dostępne na kernel.org
Zaktualizowano 12/21/2012 Podstawowy samouczek programowania systemu operacyjnego zaprojektowany jako projekt semestralny. Pomaga Ci zbudować system operacyjny z podstawowymi komponentami. Bardzo dobry początek dla początkujących. Powiązany papier . Dzięki Srujan!
Zaktualizowano 11/15/2013
Pisanie prostego systemu operacyjnego od zera . Dzięki James Moore!
Zaktualizowano 12.08.2013
Jak zrobić system operacyjny komputera Dzięki ddtoni!
Zaktualizowano 18.03.2014
ToAruOS to system operacyjny zbudowany głównie od zera, w tym GUI
Zaktualizowano 12 września 2016 r
Pisanie własnego zabawkowego systemu operacyjnego
Zaktualizowano 10 grudnia 2016 r
Pisanie prostego systemu operacyjnego - od podstaw (dziękuję @Tyler C)
źródło
Odpowiedzi:
Po tym krótkim przeglądzie dotyczącym pisania systemu operacyjnego na platformę X86 znajduje się wiele linków .
Link, który wydaje się najbardziej obiecujący (www.nondot.org/sabre/os/articles), nie jest już dostępny, więc musisz go przejrzeć w wersji Archive.org, aby go przeczytać.
Pod koniec dnia bootloader pobiera kod maszynowy jądra, zapisuje go w pamięci i przeskakuje do niego. Możesz umieścić dowolny kod maszynowy w jądrze, który chcesz, ale większość programów w C oczekuje systemu operacyjnego, więc musisz powiedzieć kompilatorowi, że nie będzie miał tego wszystkiego, albo bootloader musi go utworzyć.
Jądro wykonuje wtedy wszystkie ciężkie zadania i podejrzewam, że jest to przykładowe jądro, którego chcesz. Ale jest długa droga do przejścia między posiadaniem jądra z napisem „Witaj świecie” a posiadaniem jądra, które ładuje interpreter poleceń, zapewnia usługi dyskowe oraz ładuje i zarządza programami.
Możesz rozważyć zapisanie się na ACM, aby uzyskać dostęp do ich starszej literatury - na przełomie lat 80. i 90. we wczesnych magazynach komputerowych pojawiło się wiele artykułów na temat tworzenia alternatywnych systemów operacyjnych . Są też prawdopodobnie książki, które nie są już drukowane z tej epoki. Możesz uzyskać te same informacje za darmo, przeglądając indeksy tych czasopism (które są dostępne na tej stronie - kliknij „indeks” obok nazwy magazynu), a następnie pytając o osoby z kopią.
Wreszcie wiem, że usenet nie żyje (bo tak twierdzą prorocy z Internetu), ale przekonasz się, że wielu starych, chudych ekspertów z tamtej epoki wciąż tam mieszka. Powinieneś przeszukać grupy google (mają stare repozytorium dejanews) i spodziewam się, że wiele osób zadaje te same pytania dekadę lub 1,5 roku temu, które zadajesz teraz. Możesz nawet natknąć się na wiele zapytań Linusa Torvaldsa o pomoc, ponieważ początkowo rozwijał Linuksa. Jeśli wyszukiwania niczego nie poruszają, zapytaj w odpowiedniej grupie dyskusyjnej (prawdopodobnie zaczyna się od comp.arch, ale wyszukaj te z OS w nazwie).
źródło
Minix jest znacznie mniejszy i przeznaczony do celów edukacyjnych, a książka do niego jest również dobra.
Aktualizacja: Myślę, że Minix 3 ma nieco inny cel, ale Minix 2 (i oczywiście pierwsza wersja) służył do celów dydaktycznych.
źródło
Tanenbaum book and minix3
wystarczającej liczby zmian w minix3 pomoże mi w końcu przyczynić się do jądra Linuksa?Jako ktoś, kto napisał od podstaw wielozadaniowy system operacyjny w czasie rzeczywistym ...
procedura usuwania klawiatury, sterownik klawiatury, sterownik dysku, sterownik wideo, system plików, a na końcu program ładujący - i to po prostu uruchomić go po raz pierwszy bez żadnego działania!
... Nie mogę wystarczająco podkreślić, jak ważne jest zapoznanie się ze sprzętem! Jest to szczególnie ważne, jeśli naprawdę chcesz zrobić to wszystko sam, zamiast po prostu wybrać prymitywny system, który ktoś już dla ciebie przygotował. Na przykład skontaktuj się z firmą Intel i poproś o kartę procesora dla swojego typu procesora! To przygotuje dla Ciebie - „pin-out”, przerywa, opcodes, nazwij to!
Pamiętaj, że sprzęt umożliwia to wszystko. Przestudiuj sprzęt. Nie pożałujesz.
.
źródło
Napisz system operacyjny mikrokontrolera. Polecam mikrokontroler oparty na x86. Nowoczesny system operacyjny jest po prostu ogromny . Najpierw naucz się podstaw.
źródło
Chciałbym mieć jedno miejsce, aby uzyskać wszystkie informacje na temat tworzenia własnego systemu operacyjnego. Najbliżej tego jest OS Dev Wiki i fora . Oferują mnóstwo dobrych informacji dotyczących konfiguracji, rozwoju i informacji o sprzęcie.
W BoneFide jest też kilka świetnych samouczków , skorzystałem z samouczka dla początkujących autorstwa Brana , a teraz patrzę na nowszy oparty na jego nazwie „ Rzuć własną zabawkową wersją systemu operacyjnego UNIX” .
Po drugie sprawdzam: „Systemy operacyjne: projektowanie i wdrażanie”
A jeśli chcesz rozwijać się w systemie Windows, sprawdź post na blogu jolsona.Edycja: W przypadku programowania w systemie Windows za pomocą programu Visual Studio sprawdź przewodnik BrokenThorn lub wiki OSDev .
źródło
Doskonałym zasobem jest materiał kursu MIT 6.828: Inżynieria systemu operacyjnego.
XV6 - prosty system nauczania oparty na Uniksie, napisany w ANSI C dla x86 http://pdos.csail.mit.edu/6.828/2012/xv6.html
Źródło XV6 - w formie drukowanej broszury z numerami wierszy http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf
Książka XV6 - objaśnia główne pomysły projektu OS http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf
Materiał jest zwarty: 92-stronicowe źródło i 96-stronicowy komentarz.
Lubię to bardziej niż książkę Minix! To prawdziwy klejnot!
źródło
możesz także rzucić okiem na SharpOS, który jest systemem operacyjnym, który piszą w języku c #.
źródło
W książkach znajdują się dobre zasoby dotyczące podstaw systemu operacyjnego. Ponieważ nie ma potrzeby, aby tworzyć nowe systemy operacyjne od zera, w Internecie nie znajdziesz mnóstwo informacji typu hobbystów.
Polecam standardowy podręcznik „Nowoczesne systemy operacyjne” Tanenbauma. Może okazać się też przydatne „Elementy systemu operacyjnego” Calingaert - jest to krótki przegląd książki, który daje przybliżony szkic tego, czym jest system operacyjny z punktu widzenia projektanta.
Jeśli interesujesz się systemami czasu rzeczywistego (i powinieneś przynajmniej zrozumieć różnice i powody dla systemów operacyjnych w czasie rzeczywistym), polecam również „MicroC / OS-II” firmy Labrosse.
Edytować:
Czy możesz sprecyzować, co rozumiesz przez „bardziej techniczny”? Te książki zawierają szczegółowe informacje na temat implementacji pseudokodu, ale szukasz przykładowego systemu operacyjnego lub fragmentów kodu dla określonej maszyny / języka?
-Adam
źródło
Właśnie pochodzi z innego pytania. Chciałbym wspomnieć o Pintos ... Pamiętam mój kurs OS z Nachos, a Pintos wydaje się być tym samym rodzajem rzeczy, które można uruchomić na x86.
źródło
Uważam, że Linux Kernel Development Roberta Love'a jest dość interesujący. Mówi ci o tym, jak różne podsystemy w jądrze Linuksa działają w bardzo przyziemny sposób. Ponieważ źródło jest dostępne, Linux jest głównym kandydatem na coś do włamania.
źródło
Oto kilka innych stron przepełnienia stosu, które warto uwzględnić w tej dyskusji:
Przeszkody w tworzeniu niestandardowego systemu operacyjnego
Opracowywanie systemu operacyjnego dla architektury x86
źródło
Mój kurs systemów operacyjnych w undergrad kazał nam zbudować wiele podsystemów dla OS / 161 , prostego jądra podobnego do BSD, które zapewnia pewne podstawy, pozostawiając swobodę badania różnych decyzji dotyczących przestrzeni projektowej przy wdrażaniu usług wyższego poziomu.
źródło
Zacznij hakować w Minix. Jest znacznie mniejszy niż Linux (oczywiście) i został zaprojektowany z myślą o celach dydaktycznych (przynajmniej niektórych). Ale nie Minix 3, to zupełnie inna historia.
źródło
Już odpowiedziałem, ale kiedy zacząłem studiować systemy operacyjne w college'u, zaczęliśmy od wczesnego jądra systemu Linux i dodaliśmy uproszczone nowoczesne funkcje (podstawowe systemy plików, pamięć wirtualna, wielozadaniowość, muteksy). Dobra zabawa. Możesz pominąć niektóre z NAPRAWDĘ szalonych rzeczy tylko na niskim poziomie dla mucking w / chronionych trybów i tabel stron, podczas gdy nadal nauczyłeś się kilku odwag.
http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2
źródło
Możesz spojrzeć na linuxfromscratch .
źródło
Prosty i podstawowy samouczek programowania systemu operacyjnego zaprojektowany jako projekt semestralny. Pomaga Ci zbudować system operacyjny z podstawowymi komponentami. Bardzo dobry początek dla początkujących. Powiązany papier jest tutaj .
źródło
Chciałbym załączyć to repozytorium How-to-Make-a-Computer-Operating-System autorstwa Samy Pesse. Jest w toku. Bardzo interesujące.
źródło
Jednym z dość prostych systemów operacyjnych do zbadania byłoby µC / OS. Książka ma dyskietkę ze źródłem.
http://en.wikipedia.org/wiki/MicroC/OS-II
źródło
Sprawdź projekt Managed Operating System Alliance (MOSA) na stronie www.mosa-project.org . Projektują kompilator AOT / JIT oraz w pełni zarządzany system operacyjny w języku C #. Niektórzy deweloperzy pochodzą z nieaktywnego projektu SharpOS.
źródło
Grałem w Cosmos , który jest „projektem systemu operacyjnego zaimplementowanym całkowicie w językach zgodnych z CIL”. Jest napisany w C #, więc to było tuż przy mojej alei. Dla kogoś takiego jak ja, który nigdy nie próbował zbudować systemu operacyjnego, naprawdę fajnie było móc uruchomić system operacyjny „Hello World” w krótkim czasie.
źródło
Sprawdź tę stronę: http://osix.net/modules/article/?id=359
źródło
Jak wspomniano powyżej, Wiki OSDev jest (jak dotąd) najlepszym źródłem do tworzenia systemów operacyjnych. Dla tych z Was, którzy mówią po niemiecku, lowlevel.eu Wiki jest również świetna. Coś stosunkowo nieznanego Incitatus OS , proste jądro z niewielkim zestawem aplikacji przestrzeni użytkownika. Świetnie nadaje się do wchodzenia w skomplikowany temat rozwoju systemu operacyjnego.
źródło
Movitz to środowisko Lisp napisane w Common Lisp i działające „na metalu”. Niestety niektóre linki na stronie głównej Movitz odmawiają dostępu, ale można znaleźć instrukcje dotyczące pobierania i kompilowania kodu źródłowego ze strony trac . Gotowy obraz można również znaleźć w archiwum tej strony .
IMHO jest to niezwykle interesujące, ponieważ przywraca koncepcję maszyny Lisp na aktualnie dostępnym sprzęcie. Nie udało się komercyjnie, ale nie dowodzi to, że pomysł był zły.
Podręcznik nienawiści do Uniksa to zabawna książka, która na pół poważnie krytykuje koncepcję Uniksa i jego pochodnych. Wiele sekcji spiera się o to, jak lepsza była koncepcja maszyny Lisp.
źródło
Oto artykuł zatytułowany „ Pisanie prostego systemu operacyjnego od zera ”. Obejmuje pisanie bootloadera, wejście w tryb chroniony x86-32 i pisanie podstawowego jądra w C. Wydaje się, że dobrze wykonuje objaśnienie wszystkiego szczegółowo.
źródło
X86 JS symulator i symulator ARM może być również bardzo przydatna do zrozumienia w jaki sposób różne dzieła sztuki i testów sprzętowych make bez wychodzenia swoją ulubioną przeglądarkę.
źródło
Interesujące pytanie dla programistów. Zobacz, jak długo zajmie zbudowanie systemu operacyjnego takiego jak Windows lub Mac, ale jeśli chcesz zbudować proste, możesz spróbować jak najlepiej
Teraz zdobyłeś tytuł magistra (nie do końca jeszcze trochę więcej) w tworzeniu systemu operacyjnego. Teraz przekaż tę wiedzę swoim znajomym i z ich pomocą spróbuj stworzyć system operacyjny tak potężny jak Mac, Linux lub Windows.
źródło
Po stworzeniu podstawowego systemu operacyjnego kontynuacja jest trudna, ponieważ nie ma wielu zasobów dotyczących tworzenia interfejsów graficznych lub przenoszenia bibliotek. Ale myślę, że spojrzenie na ToAruOS bardzo by pomogło!
Kod pod powierzchnią tego systemu operacyjnego jest taki cholernie prosty! ale jednocześnie przeniósł takie rzeczy jak Cairo, Python, (jeszcze nie, ale wkrótce) sdl, udostępnił pamięć współdzieloną, a także stworzył własny zestaw narzędzi do widgetów. Wszystko jest napisane w C.
Innym interesującym systemem operacyjnym byłby rodowód . Został stworzony przez JamesM (człowieka stojącego za samouczkiem jądra Jamesa . Chociaż ma więcej funkcji niż ToaruOS, jest również większy i bardziej zagmatwany.
Ale w każdym razie te 2 systemy operacyjne bardzo ci pomogą, szczególnie ToAruOS.
źródło
Kiedy zacząłem pracować na moich podstawowych systemach operacyjnych, potrzebowałem podstawowego przewodnika, takiego jak Stepping stones dla podstawowego systemu operacyjnego . Pomogło mi to nie stracić głowy.
Że jeśli chcesz zrobić to z absolutnie nic (czysty kod asemblera)
źródło