Jakie zasoby są potrzebne do rozpoczęcia tworzenia systemu operacyjnego? [Zamknięte]

589

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:

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)

Giovanni Galbo
źródło
5
Nie zapomnij forums.osdever.net
Brenden
15
Dlaczego tego rodzaju pytania ogólnego przeznaczenia są zawsze zamknięte na SO?
Pratik Singhal
30
To pytanie ma 370 głosów pozytywnych, zostało ocenione 422 razy i było dostępne od pierwszego uruchomienia StackOverflow. Wydaje się, że społeczność jej się podobała, ale z jakiegoś powodu garstka ludzi musi ją zniszczyć dla wszystkich.
Właśnie
1
Istnieje bardzo ciekawy trend w Unikernels (zrób tylko jedną rzecz i zrób to dobrze), gdzie te wysiłki są bardzo istotne. Zwykle można na zimno uruchomić unikernel na maszynie wirtualnej i uruchomić kod użytkownika w niecałą sekundę. Widziałem rozwiązanie, w którym po prostu wyszukiwanie DNS takiej usługi powoduje, że serwer DNS wyzwala „rozruchową maszynę wirtualną”, więc jest gotowy, gdy pojawi się rzeczywiste żądanie usługi.
Thorbjørn Ravn Andersen

Odpowiedzi:

95

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).

Adam Davis
źródło
hej, czy COSMOS jest dobrym narzędziem do opracowania systemu operacyjnego?
Vikas Verma
@VikasVerma Nie korzystałem z niego, więc nie wiem.
Adam Davis,
@AdamDavis Pierwszy link jest uszkodzony (a inne wydają się być). Napraw je!
nbro 14.04.16
35

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.

Mike Stone
źródło
Mam najnowszą książkę Tanenbaum, ale kod źródłowy minix3 wygląda na cholernie ogromny! Mam podobny cel jak OP, chociaż nie chcę budować jądra od zera, naprawdę chcę zrozumieć, jak działa jądro i co robi. Czy przestrzeganie Tanenbaum book and minix3wystarczającej liczby zmian w minix3 pomoże mi w końcu przyczynić się do jądra Linuksa?
gideon
32

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.

.

Richard T.
źródło
18

Napisz system operacyjny mikrokontrolera. Polecam mikrokontroler oparty na x86. Nowoczesny system operacyjny jest po prostu ogromny . Najpierw naucz się podstaw.

Paul Nathan
źródło
2
jakieś pomysły, od czego zacząć? jestem bardzo zainteresowany? jaki zestaw kupić .. książki na początek itp.
Julio
@Uncle: Do tej pory nie spotkałem się z książką o systemach wbudowanych na najwyższym poziomie. Albo są na zbyt wysokim poziomie i zakładają system operacyjny, albo są nastawieni na inżyniera elektryka i ignorują kod. Jeśli chodzi o zestawy, Google znajduje „ bifferos.bizhat.com ”. Istnieją również zestawy ARM. Osobiście nie lubię architektów Harvarda, więc nie jestem zainteresowany arduino, ale jest ono najbardziej popularne. Dla bardziej egzotycznej pracy, XC-1A jest również miły.
Paul Nathan
@Paul byłby wdzięczny, gdybyś mógł rozwinąć swoją odpowiedź. Zajrzałem do AVR i Arduino, ale ostatnio widziałem .NET micro. Jestem zbyt dużym facetem z LOBu o wyższej abstrakcji, ale chcę zacząć schodzić ze stosu. Gdzie polecasz zacząć?
gideon
@giddy: AVR są obecną modą. Są małe i tanie, ale nie podoba mi się architektura. Poleciłbym zakup zestawu deweloperskiego ARM (szacunkowy koszt ~ 100). Są popularne w zastosowaniach komercyjnych.
Paul Nathan
@Paul dzięki! Niewiele słyszałem o ARM. Co z .net micro? Martwię się trochę o spalenie czegoś. Większość zestawów zawiera instrukcje, prawda? dzięki jeszcze raz.
gideon
16

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 .

Steve Tranby
źródło
1
Powiązane: Wiki tagu x86 SO zawiera linki do instrukcji Intel / AMD i wiele dobrych rzeczy.
Peter Cordes,
15

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!

Jens A. Koch
źródło
11

możesz także rzucić okiem na SharpOS, który jest systemem operacyjnym, który piszą w języku c #.

lomaxx
źródło
9

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

Adam Davis
źródło
7

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.

LB40
źródło
7

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.

Anders Rune Jensen
źródło
6

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.

Phil Miller
źródło
6

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.

Michael Foukarakis
źródło
5

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

basszero
źródło
4

Możesz spojrzeć na linuxfromscratch .

Linux From Scratch (LFS) to projekt, który zawiera instrukcje krok po kroku dotyczące budowania własnego niestandardowego systemu Linux, całkowicie z kodu źródłowego.

jfs
źródło
32
Kompilacja systemu operacyjnego jest daleka od napisania.
duskwuff -inactive-
7
@duskwuff Masz rację, ale wiele się z tego nauczysz. Następnie możesz napisać własny.
jfs
4

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 .

Srujan
źródło
Świetne zasoby. Artykuł odnosi się do Nachos (2500 linii kodu), OS / 161 (11000), MINIX (30000), GeekOS. Przejdź do każdej oficjalnej strony uniwersytetu, a znajdziesz kod źródłowy, symulator i narzędzia, a także zadania rocznie.
limitcracker
4

Chciałbym załączyć to repozytorium How-to-Make-a-Computer-Operating-System autorstwa Samy Pesse. Jest w toku. Bardzo interesujące.

ddetoni
źródło
Dzięki, chciałem dodać to do listy po tym, jak natknąłem się na nią na Reddit, ale zupełnie zapomniałem.
Giovanni Galbo
3

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.

tgiphil
źródło
3

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.

Tim S. Van Haren
źródło
3

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.

nr 92
źródło
2

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.

Halabardnik
źródło
2

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.

James James Moore
źródło
Postępowałem zgodnie z tą książką i opracowałem na podstawie jej kodu. To niesamowite, zacząć od takiej książki.
user3405291
2

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ę.

Earizon
źródło
1

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

  1. Musisz skupić się na asemblerze, C i C ++. Powinieneś być ekspertem w tych językach.
  2. Najpierw przeczytaj dobrą książkę o tym, jak działa system operacyjny [Google it], a następnie przeczytaj wszystkie informacje z Wiki OS
  3. Wyszukaj w youtube „Jak stworzyć własny system operacyjny w asemblerze”. Obejrzyj wideo, np. Wideo
  4. Pobierz kod źródłowy Linux OS i skompiluj go sam i spróbuj samodzielnie zmodyfikować kod
  5. Teraz jesteś doświadczonym edytorem systemu operacyjnego, teraz pobieraj Minix i QNX i zacznij z nimi programować i pobierać ich dokumenty stąd Minix Doc i QNX Doc

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.

BharatKhanna
źródło
Redaktorzy Zedytuj moja odpowiedź i przestrzeń usuń betweern http: www i jak jestem nowy przybysz tak, Nie mam tak wysoką RepU, plz zrobić te rzeczy dla mnie
BharatKhanna
1

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.

wersje user69969
źródło