Jak mogę zbudować mały system operacyjny na starym komputerze stacjonarnym? [Zamknięte]

111

Może to na próżno, ponieważ wiem, że pisanie systemu operacyjnego jest nieznośnie skomplikowane (zwłaszcza dla siebie).

  • Nie spodziewam się, że będę budował następny Linux lub Windows.

  • Wiem, że to będzie okropne, wadliwe i nie zadziała, ale to w porządku.

Chcę napisać wszystko sam, w asemblerze , C i (trochę) C ++ .

To jest projekt na przyszłość, ponieważ w tej chwili jestem zajęty innymi sprawami i nie mam czasu od razu, ale pomyślałem, że zapytam go teraz, więc może mógłbym uzyskać wiele odpowiedzi na ten temat i mógłby budować i być użytecznym źródłem dla tego rodzaju podejścia (wszystko inne, co widziałem, obejmowało budowanie z minixa, używanie istniejącego bootloadera, budowanie go w wirtualnym programie rozruchowym itp.).

Chcę skonfigurować jeden z moich starszych komputerów stacjonarnych z monitorem, klawiaturą i myszą i rozpocząć pracę na pustym dysku twardym.

Chcę się nauczyć, jak napisać własny bootloader (znalazłem wiele zasobów na ten temat, ale dla kompletności proszę jeszcze dodać kilka dobrych), własny sterownik USB (jeśli to konieczne), sterownik CD (jeśli to konieczne ) itp. Wszystko od podstaw.

  • Jak umieścić kod na komputerze? Czy najlepiej to zrobić za pomocą dyskietki? Czy większość komputerów może to zrobić z pamięci USB?

  • Jakich sterowników potrzebuję i czy możesz zasugerować jakieś odniesienia do ich budowy?

  • Po sekwencji bootowania - co wtedy? Jak przejść do trybu chronionego itp.

  • Jak zarządzać pamięcią bez pomocy systemu operacyjnego? Czy po prostu używam dowolnych adresów? Inicjalizacja nie jest konieczna?

  • Co niewątpliwie napotkam, co mnie zmyli?

  • Jak mogę sprawić, by był to O / S z wiersza poleceń i graficzny?

  • Na czym opiera się graficzny system operacyjny? Na przykład, jak zrobiłbym coś takiego, wiersz poleceń, z czcionką i obrazkiem na górze?

  • Gdzie mogę przeczytać o konfigurowaniu środowiska wielozadaniowego? (tj. mając obok siebie dwa podobne do graficznego wiersze poleceń).

  • Jak ustawić rodzaj systemu okienkowego? Jak wyświetlić grafikę na ekranie po skonfigurowaniu prostej wielozadaniowości?

Uwierz mi, rozumiem, że jest to bardzo skomplikowany projekt i prawdopodobnie nigdy nie dojdę do jego ukończenia ani do napisania na nim czegokolwiek użytecznego.

Jest w tym wiele innych elementów, o których nie wspomniałem, jeśli o czymś pomyślisz, możesz je również dodać.

W każdej odpowiedzi umieść jeden „temat” - na przykład sterowniki USB, a następnie może listę zasobów, rzeczy, na które należy zwrócić uwagę itp.

Ponadto nie sugeruj tworzenia innego systemu operacyjnego lub istniejącego kodu. Wiem, że przeczytam dużo wcześniej istniejącego kodu (takiego jak jądro systemu Linux lub przykładowe zasoby, istniejące sterowniki itp.), Ale ostatecznie chcę napisać cały tekst samodzielnie. Wiem, że powinienem zbudować coś innego, i jest wiele innych pytań dotyczących SO na ten temat, które mogę przeczytać, jeśli zmienię zdanie i pójdę tą drogą. Ale w tym wszystkim chodzi o zrobienie wszystkiego od zera.

Jakieś sugestie, jak uzyskać grafikę? Różne tryby wideo i jak z nimi pracować itp.?

Carson Myers
źródło
14
To jest mój największy cel. Tak bardzo chcę napisać system operacyjny, tylko dla zabawy i nauki ... Po prostu nie mogłem oszczędzić czasu przez ostatnie kilka lat. Jeśli kiedykolwiek szukasz kogoś do pomocy lub po prostu porozmawiaj z tobą, możesz wysłać do mnie e-mail na schmeling88 pod adresem gmail.com
Max Schmeling
2
@Max i @Tom, też mam błąd. Właściwie przygotowuję się do startu tym razem :)
Giovanni Galbo
2
Po prostu nie myśl teraz o grafice. Unix nigdy nie obsługiwał grafiki bezpośrednio i nie jest tak źle. :-) Ale w zasadzie nie ma łatwego i przenośnego sposobu na wyjście poza 800x600 IIRC.
Bastien Léonard
2
Głosowanie za zamknięciem jako zbyt szerokie. Podobne do: stackoverflow.com/questions/254149/… || stackoverflow.com/questions/2800741/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
Czemu? To pytanie jest starożytne i nie generuje już żadnej aktywności. Kogo to obchodzi?
Carson Myers

Odpowiedzi:

51

Najpierw najważniejsze. Czytaj, czytaj, czytaj, czytaj, czytaj. Musisz dobrze zrozumieć, jak działa system operacyjny, zanim będziesz mieć nadzieję na wdrożenie własnego.

Pobierz jedną z książek Andrew Tanenbauma o systemach operacyjnych. To jest ten, którego używaliśmy na moich zajęciach z systemu operacyjnego na studiach:

Nowoczesne systemy operacyjne PDF

Nowoczesne systemy operacyjne na Amazon

Mimo śmiesznej okładki to fantastyczna lektura, szczególnie jak na podręcznik. Tanenbaum jest naprawdę ekspertem w tej dziedzinie, a jego wyjaśnienia dotyczące działania systemu operacyjnego pod maską są jasne i łatwe do zrozumienia. Ta książka jest głównie teorią, ale wydaje mi się, że ma też książkę, która omawia więcej implementacji. Jednak nigdy tego nie czytałem, więc nie mogę tego komentować.

To powinno pomóc ci w zarządzaniu procesami, zarządzaniu pamięcią, systemach plików i wszystkim innym, co jądro systemu operacyjnego musi zrobić, aby uzyskać stan startowy. Od tego momentu jest to w zasadzie kwestia pisania sterowników urządzeń dla sprzętu, który musisz obsługiwać, i oferowania implementacji funkcji biblioteki C do wykonywania wywołań jądra takich rzeczy, jak otwieranie plików i urządzeń, czytanie i pisanie, przekazywanie wiadomości między procesami itp. .

Przeczytaj więcej o montażu x86 (zakładając, że projektujesz to dla maszyny x86). To powinno odpowiedzieć na wiele pytań dotyczących przechodzenia między trybami pracy procesora.

Jeśli masz jakąkolwiek wiedzę na temat elektroniki, może być łatwiej zacząć od napisania systemu operacyjnego dla urządzenia wbudowanego, które ma obszerną dokumentację, ponieważ generalnie będzie prostszy niż komputer PC x86. Zawsze chciałem również napisać własny system operacyjny i zaczynam od napisania systemu operacyjnego z wbudowanym mikrojądrem dla This Development Board firmy Digilent. Może obsługiwać miękki procesor MicroBlaze firmy Xilinx, który ma bardzo dokładną dokumentację. Ma też trochę pamięci RAM, pamięć flash, diody LED, przełączniki, przyciski, wyjście VGA itp. Mnóstwo rzeczy do zabawy przy pisaniu prostych sterowników.

Jedną z zalet urządzenia wbudowanego jest także to, że można uniknąć pisania sterownika VGA przez długi czas. W moim przypadku płyta rozwojowa Digilent ma wbudowany UART, więc mogę efektywnie wykorzystać wyjście szeregowe jako moją konsolę, aby wszystko uruchomić i uruchomić z wiersza poleceń przy minimalnym zamieszaniu.

Po prostu upewnij się, że cokolwiek wybierzesz, ma do tego łatwo dostępny i dobrze przetestowany kompilator. Zdajesz nie chcą być pisanie OS i kompilator w tym samym czasie.

Bob Somers
źródło
2
+1, ale wolę książkę Tanenbaum Minix (która jest bardziej ukierunkowana na implementację) i naprawdę nie ma potrzeby skupiania się najpierw tylko na teorii. I tak nie napisze systemu operacyjnego za pierwszym razem. Najpierw napisze bootloader, potem przełączy się w tryb chroniony, potem obsłuży I / O i tak dalej.
Bastien Léonard
2
+1 za napisanie systemu operacyjnego dla wbudowanego chipa. Pod koniec dnia poczujesz, że stworzyłeś coś wyjątkowego i jest to po prostu znacznie prostsze niż pisanie jednego dla (powiedzmy) x86, zachowując te same podstawowe koncepcje. Spójrz na przykład na TinyOS (chociaż technicznie nie jest to system operacyjny, są dla niego takie rzeczy, jak harmonogram i moduły zadań ..)
Kristopher Micinski
29

http://www.osdev.org/ i http://www.osdever.net/

witamy w świecie OS Development.

Zobacz także inne linki do dokumentacji x86 w SO tag wiki : podręczniki Intel i AMD, dokumentacja kompilatora / asemblera i różne przewodniki.

Sugeruje również użycie BOCHS lub innego środowiska wirtualnego do debugowania, ponieważ możesz wykonać jeden krok swojego bootloadera i zbadać rejestry.

fnurglewitz
źródło
1
A zwłaszcza wiki.osdev.org !
Matthew Iselin
Nie zapomnij forums.osdever.net :)
Brenden
6
Zdaję sobie sprawę, że są to przydatne zasoby, ale myślę, że może być bardziej pomocne dla przyszłych czytelników, jeśli podasz kontekst, a nie zestaw linków bez wyjaśnienia.
icktoofay,
@icktoofay Wydaje mi się, że pytanie jest zbyt szerokie, aby można było na nie odpowiedzieć.
user253751
15

Sugerowałbym, przynajmniej na początku, popracować nad Bochs lub innej maszynie wirtualnej, ponieważ możesz zabrać ją ze sobą, gdziekolwiek chcesz, łatwiej jest debugować (możesz zobaczyć dokładny stan sprzętu), a jeśli potrzebują pomocy z zewnątrz w debugowaniu, mogą używać dokładnie tego samego „sprzętu” co Ty.

Najbardziej użyteczną radą, jaką mam, jest wprowadzenie się w stan, w którym można uruchomić kod w C tak szybko, jak to możliwe - tj. Uruchomić komputer, skonfigurować tablice deskryptorów i dotrzeć do punktu, w którym można bezpiecznie uruchomić skompilowane C. Większość jeśli nie, całe jądro powinno znajdować się w C, jeśli chcesz pozostać przy zdrowych zmysłach i dalej nad nim pracować. Montaż, choć w niektórych miejscach wymagany, jest żmudny i trudny do debugowania.

hbar
źródło
Na razie przyjrzę się Bochsowi, ale ostatecznie chcę po prostu zbudować to na jakimś komputerze
Carson Myers
Jeśli działa w BOCHS, zwykle będzie działać na prawdziwym komputerze PC, modulo różnice w ich BIOS-ie. Większość twoich błędów będzie prawdopodobnie dotyczyła BOCHS i prawdziwego sprzętu, ale różnica polega na tym, że kiedy twój kod utknie w nieskończonej pętli w BOCHS, możesz użyć wbudowanego debuggera BOCHS, aby dowiedzieć się, gdzie i wykonać jeden krok, aby znaleźć dowiedzieć się, jak / dlaczego. Na prawdziwym sprzęcie wszystko, co możesz zrobić, to dodać wydruki debugowania. Korzystanie z debuggera pozwoli zaoszczędzić godziny i dni drapania się po głowie.
Peter Cordes
14

Na najniższym poziomie minimum, które system operacyjny musi być w stanie zrobić, to w jakiś sposób sterować sprzętem systemu i w jakiś sposób ładować wykonanie pewnego rodzaju „kodu użytkownika”. Jeśli zamierzasz zacząć od komputera, musisz napisać kod, który będzie mógł być przez niego ładowany z takiego lub innego urządzenia. Starsze komputery mają BIOS w oprogramowaniu układowym, który określa sposób wykonywania inicjalizacji przez sprzęt (przynajmniej wideo, klawiaturę i jakąś formę pamięci lub programu ładującego). (Aktualizacja z października 2017 r .: nowsze komputery mają oprogramowanie układowe EFI lub UEFI ... co jest w dużej mierze pedantyczną różnicą; służą tym samym celom w tej dyskusji).

Zacznij więc od zapoznania się z niskopoziomowymi szczegółami dotyczącymi korzystania z systemu BIOS lub innego oprogramowania układowego w systemie docelowym. To znaczy, dowiedz się, jak napisać program, który BIOS może załadować i wykonać. To ostatecznie przekształci się w program ładujący. Zacznij od czegoś małego. Po prostu weź program, który drukuje: „Hello, Linus” bezpośrednio z procesu uruchamiania oprogramowania sprzętowego (na dyskietce lub pendrive'ie byłoby dobrym początkiem ... lub na dysku twardym, jeśli chcesz).

Stamtąd poleciłbym napisanie bardzo prostego sterownika szeregowego ... zaktualizuj program ładujący, aby zainicjować port szeregowy i rozpocznij pobieranie z tego portu. Następnie może wykonać kod, przez który przeciąga. Stamtąd napisz trochę bootstrapu, który może zapisywać do innego zestawu bloków (nie wdrożyliśmy jeszcze systemu plików ... nawet analizowania tabeli partycji; więc najpierw zajmowalibyśmy się surowymi zakresami bloków na dysku ).

W tym momencie twój program ładujący powinien być w stanie pobrać nowy kod przez linię szeregową, zrzucić go na partycję (tak, zaimplementować obsługę tablicy partycji ... czy będzie ona zgodna ze standardowymi konwencjami PC, zależy od ciebie ) i wykonaj go.

Stamtąd powinieneś być w stanie pracować nad znacznie bardziej wyrafinowanymi funkcjami. Z tej bazy możesz napisać i skompilować nowe "jądro" ... zrestartuj swoje środowisko testowe i umieść na nim nowe jądro.

(Twój bootloader powinien pobrać jakiś sygnał, taki jak BREAK przez szeregowe linie uzgadniania, jako polecenie pominięcia pobierania i po prostu załadowania istniejącego obrazu; iw ten sposób powinien również obsłużyć pewien limit czasu).

Stamtąd napisać bardzo prostą warstwę terminala i powłokę poleceń? System plików? Implementuj polecenia, aby pobrać nową zawartość wykonywalną inną niż jądro (pliki lub obiekty pewnego rodzaju). I tak dalej.

Oczywiście mogłeś zacząć od sterownika konsoli używając klawiatury PC i wideo (odpowiednio BIOS INT 0x16h i INT 0x10H, jeśli dobrze pamiętam). Jednak sugerowałbym rozpoczęcie od sterownika szeregowego, ponieważ można następnie zautomatyzować cykl kompilacji / wdrażania / testowania z dowolnego innego istniejącego (funkcjonalnego) systemu. Ponieważ twój nowy system operacyjny zacznie się jako projekt skompilowany krzyżowo, niezbędne będzie posiadanie usprawnionego sposobu obsługi tego.

Nie wiem, jak daleko chcesz posunąć się ze swoim projektem. Dość imponującym celem byłoby osiągnięcie „samodzielnego hostingu”. Jeśli możesz stworzyć prosty asembler / kompilator, który pozwoli ci użyć twojego nowego systemu operacyjnego do (ponownego) kompilowania, łączenia i uruchamiania działającej wersji twojego nowego systemu operacyjnego ... to osiągnąłeś ten cel. (Zauważ, że nie jest to wymagane. Wiele systemów wbudowanych nigdy nie będzie samoobsługowych i nie ma w tym nic złego).

Jim Dennis
źródło
Na nowoczesnym sprzęcie może być trudniej uruchomić sterownik szeregowy niż napisać sterowniki konsoli (wideo / klawiatury). W ciągu kilku lat, odkąd to napisałem, zwykłe stare złącza szeregowe praktycznie przestały istnieć na nowoczesnych komputerach stacjonarnych i laptopach. Niektóre urządzenia wbudowane i „hobbystyczne” nadal mają staromodne interfejsy RS-232C bez konieczności emulacji USB. Na przykład: wydaje się, że mpl.ch/t2600.html ma to.
Jim Dennis
12

Jeśli nie masz nic przeciwko wirtualizacji sprzętu, istnieje kurs (książka + wykłady + oprogramowanie), który zabierze Cię „Od Nand do Tetris”. Cały system komputerowy tworzysz całkowicie samodzielnie, od (w tym celu atomowej i podanej) elektrycznej bramki NAND, aż do zbudowania systemu operacyjnego, języka i wreszcie kodowania prostej gry na osobistym komputerze.

Myślę, że to świetny pomysł i zamierzam wkrótce w to wpaść. Książka jest zaskakująco tania i uważam, że kurs jest prowadzony na MIT. Nie mogę sobie wyobrazić większego uczucia niż posiadanie pełnej, kompletnej wiedzy o całym systemie, który sam zbudowałeś od podstaw.

Link: http://www1.idc.ac.il/tecs/

Sam
źródło
Myślę, że ten link jest martwy. Czy ktoś zna inny sposób, aby uzyskać do tego dostęp?
Koray Tugay
1
@KorayTugay nand2tetris.org
user253751
10

Zacząłbym od małego i kupiłbym wbudowany zestaw programistyczny 8086 i opracowałbym na nim wielozadaniowy system operacyjny. Gdy masz już jądro i zaznajomisz się z pracą na poziomie sprzętowym, będziesz gotowy do zrobienia czegoś bardziej wymagającego.

Zbudowanie nawet klonu DOS z wyświetlaczem VGA jest dość trudnym zadaniem. Szczegóły są ogromne. :-)

konkretne tematy.

Jak umieścić kod na komputerze? Czy najlepiej to zrobić za pomocą dyskietki? Czy większość komputerów może to zrobić z pamięci USB?

BIOS wykona elementarne ładowanie początkowe.


Jakich sterowników potrzebuję i czy możesz zasugerować jakieś odniesienia do ich budowy?

wszystko, co nie jest bezpośrednimi operacjami na procesorze / pamięci. Wszystko, czego nie ma bezpośrednio w instrukcji obsługi procesora.


Po sekwencji bootowania - co wtedy? Jak przejść do trybu chronionego itp.

Tryb chroniony będzie częścią sekwencji rozruchowej.

następnie zaczynasz wielozadaniowość i zastanawiasz się, jak rozpocząć procesy.


Jak zarządzać pamięcią bez pomocy systemu operacyjnego? Czy po prostu używam dowolnych adresów? Inicjalizacja nie jest konieczna?

Poprawny. Prawdopodobnie będziesz chciał w końcu uporządkować system pamięci wirtualnej.


Co niewątpliwie napotkam, co mnie zmyli?

brak narzędzi do debugowania, brak IO


Jak mogę sprawić, by był to O / S z wiersza poleceń i graficzny?

Z żalem. Wyszukaj Windows 3.1 i Linux, w szczególności X windows.


Na czym opiera się graficzny system operacyjny? Na przykład, jak zrobiłbym coś takiego, wiersz poleceń, z czcionką i obrazkiem na górze?

Wyszukaj X okien.


ostatnia rada: przestudiuj windowsa linux / x. Nie jest doskonałe, ale pozwala zrozumieć jedno podejście. Przestudiuj także systemy wbudowane.

Paul Nathan
źródło
świetna odpowiedź, jądro Linuksa jest już pod ręką i na pewno zajrzę do Windows 3.1.
Carson Myers,
8

Widzę wiele dobrych odniesień do witryn programistycznych dla systemów operacyjnych, więc opiszę inne podejście:

Jeśli chcesz mieć doświadczenie we wdrażaniu systemu operacyjnego z samego metalu, są o wiele lepsze opcje sprzętowe niż stary komputer. Dzięki architekturze PC spędzisz nadmierną ilość czasu na kodowaniu nieciekawych artefaktów z 30-letniej historii projektowania. Na przykład tylko część projektu bootloadera wypaliła prawdopodobnie niejednego odważnego programistę.

Na przykład, będziesz potrzebować jednego zestawu sterowników, aby odczytać jądro z dysku i / lub sieci. Wtedy będziesz potrzebować kodu, aby przejść do trybu chronionego. W tym momencie potrzebujesz innego zestawu sterowników! Bardzo niewiele pracy, którą wykonujesz, aby wprowadzić chip w tryb chroniony, będzie można przenieść po tym momencie. Chcesz uruchomić go na innym komputerze + - 4 lata i będziesz potrzebować jeszcze jednego zestawu sterowników.

Przyjrzyj się ładowaniu ARM lub innego 32-bitowego "osadzonego" układu. Dostępne są niedrogie płytki programistyczne lub możesz wlutować własne! Niektóre mają wbudowane złącze Ethernet i USB. Myślę, że praca nad rozsądną, nieskalaną architekturą sprawi ci więcej radości i być może zdobędziesz kilka umiejętności wielokrotnego użytku.

Marsh Ray
źródło
nie dokładnie to, o co prosiłem, ale +1 za wysłanie mnie na styczną lekturę
Carson Myers
Marsh daje ci dobrą radę. Niskopoziomowe szczegóły architektury x86 / BIOS są złożone. Prawdopodobnie ugrzęzniesz w tych szczegółach, przez co nie będziesz mógł skupić się na większych problemach, takich jak zarządzanie pamięcią i planowanie procesów. Wybierz „czystszą” architekturę z portem szeregowym. Na dłuższą metę będziesz szczęśliwszy.
Barry Brown
8

Bardziej niż cokolwiek innego, jeśli chcesz, aby działało to na prawdziwym sprzęcie, absolutnie potrzebujesz kopii instrukcji obsługi procesora. Podręczniki firmy Intel ( http://www.intel.com/products/processor/manuals/ ) są nieocenione. Przechodzą przez wszystko, od przełączania trybów (rzeczywistych / chronionych) po zarządzanie pamięcią wirtualną (jeśli zdecydujesz się posunąć tak daleko) do wykonywania wywołań systemowych (jeśli kiedykolwiek przejdziesz do trybu użytkownika). Co najważniejsze , wyjaśniają bardzo szczegółowo wiele rzeczy, które muszą być skonfigurowane, aby rzeczy działały, takie jak TSS i rejestry segmentowe, których większość tekstów OS nie omawia, ponieważ są bardziej zainteresowani koncepcjami wyższego poziomu niż procesorem. szczegółowe informacje.

csgordon
źródło
Możesz też bezpłatnie otrzymać papierowe kopie za pośrednictwem firmy Intel.
Matthew Iselin
8

Seria Rozwój OS @ BrokenThorn mogą Cię zainteresować.

tomzx
źródło
Ich kod jest zepsuty. Ale sam tutorial jest świetny.
Szewczyk
8

Spróbuj przeczytać kod małego, podstawowego systemu operacyjnego typu open source, takiego jak MikeOS.

Alternatywnie proponuję następujące kroki (powinno być zabawne!):

  1. Napisz maszynę wirtualną. Zdefiniuj wszystkie instrukcje procesora, aby poznać swój system od wewnątrz i na zewnątrz. Połącz go z SDL dla klawiatury, myszy, ekranu, dostępu audio. Zachowaj prostotę, aby od razu zmieścić wszystko w głowie. Nie musi to być najnowocześniejsza maszyna wirtualna, wystarczy taka, która może naśladować funkcję „prawdziwego” komputera.
  2. Napisz asembler dla procesora maszyny wirtualnej. Pamiętaj, że ten assembler nie musi być programem napisanym w języku maszyny wirtualnej, ale czymkolwiek, co może przekształcić twój język asemblera w kod maszynowy.
  3. Zdefiniuj format wykonywalny i napisz prosty konsolidator.
  4. Masz już wszystkie części do napisania swojego systemu operacyjnego! Napisz to w języku asemblera, skompiluj ... itd. Nie potrzebujesz tak skomplikowanego procesu ładowania, po prostu uruchom najpierw swój komputer.

Powyższe kroki mogą wydawać się głupie przy pisaniu prostego systemu operacyjnego, ale hej, to cholerna zabawa.

ouiliame
źródło
6

sprawdź MikeOS . Jest to dość prosty system operacyjny, który można odczytać (jak w komentarzu). Mimo że jest dość prosty, ma GUI i obsługuje niektóre sieci i multimedia.

edycja : MenuetOS jest graficzne. Jest również napisany prosto jako asm, ale jest bardziej wyrafinowany niż MikeOS

Alex
źródło
6

Masz ambitny cel. Ale wykonanie jest kluczowe.

Większość ustrukturyzowanych podejść (podręcznik lub zajęcia w college'u) poprowadzi Cię przez ten proces, ale dostarczają wielu drobiazgowego kodu, który błyszczy tajemnymi szczegółami wybranej platformy i pozwala skupić się na ogólnych pomysłach: planowanie procesów, zarządzanie pamięcią, zapobieganie zakleszczeniom, operacje we / wy i tak dalej.

Moja rada jest następująca: ogranicz swoje oczekiwania i zacznij od podstawowego pytania.

Co to jest system operacyjny?

Informatyk (miejmy nadzieję) nigdy nie powie, że system operacyjny jest graficznym interfejsem użytkownika, przeglądarką internetową, sposobem na podłączenie urządzeń USB lub czymkolwiek, co użytkownik może zobaczyć lub dotknąć. Zamiast tego system operacyjny na najbardziej podstawowym poziomie to te, o których wspomniałem powyżej. Wszystkie mieszczą się pod jednym wielkim parasolem: zarządzaniem zasobami.

System operacyjny to nic innego jak program zarządzający zasobami sprzętowymi komputera: pamięcią, procesorem i urządzeniami peryferyjnymi.

Oto prosty system operacyjny: program umożliwia użytkownikowi wpisanie programu (szesnastkowo lub binarnie) przy użyciu połączenia szeregowego. Po wpisaniu programu uruchamia program. Po zakończeniu programu kontrola jest zwracana do użytkownika, gdzie może ponownie uruchomić program lub wpisać nowy.

Zrób to na „czystej” architekturze, takiej jak wbudowany procesor ARM z około 64 KB pamięci. Możesz to zakodować w assemblerze po kilku dniach nauki tajników ARM. I voila! masz sobie system operacyjny.

Robi wszystko, co powinien robić system operacyjny:

  • Zarządza pamięcią, nie pozwalając użytkownikowi nadpisać samego systemu operacyjnego.
  • Planuje uruchomienie pojedynczego procesu.
  • Obsługuje I / O do pojedynczego szeregowego urządzenia peryferyjnego.

Daje to element konstrukcyjny, od którego można zacząć. Masz teraz wiele możliwości wyboru. Być może jednym z nich byłoby zezwolenie na załadowanie dwóch programów do pamięci i pozwolenie użytkownikowi zdecydować, który z nich uruchomić jako następny.

Możesz też pozwolić użytkownikowi zawiesić wykonywanie jednego programu, przełączyć się na inny, zawiesić i przełączyć z powrotem. Jest to podstawowa wielozadaniowość, mimo że jest całkowicie ręczna.

Twoje wybory są nieograniczone, ale każdy jest o krok od tego, co miałeś wcześniej.

To zabawne, jeśli nie ustawisz zbyt wysoko!

Barry Brown
źródło
4

Wiele szkół ma klasy systemu operacyjnego, które wykonują wiele z tego, co opisujesz. Moja szkoła (CMU) uczyła systemu operacyjnego w C, napisaliśmy jądro, system plików i powłokę oraz otrzymaliśmy kod do programu ładującego.

Niestety, nie udało mi się znaleźć w sieci żadnego ostatecznego źródła informacji na temat tego kursu (15-412) i z czasem ewoluowało. Ale być może ludzie mogliby zamieścić linki do źródeł i zadań dla szkół, które mają dobre zasoby w sieci.

Drew Hoskins
źródło
3

Może spodobał Ci się ten samouczek zatytułowany „Stwórz własny klon systemu UNIX-zabawki”, jest on bardzo wnikliwy i powinien pomóc ci w drodze.

Powodzenia.

czarny
źródło
1
Chociaż posiadanie tak dogłębnego samouczka jest genialne, jest w nim wiele błędów, na które ciągle napotykają początkujący. Samouczek jest świetny wtedy i tylko wtedy , gdy chcesz mieć również otwarte rzeczy takie jak podręczniki Intel i myśleć o tym, co robisz (tj. Nie kopiuj i wklejaj!).
Matthew Iselin
3

Przestudiuj system A2 (dawniej nazywany systemem Oberon ), aby znaleźć pomysły, które możesz ukraść. Jest to graficzny system operacyjny zbudowany tylko przez dwie osoby, choć trzeba przyznać, że jedną z nich jest Niklaus Wirth. Wydany po raz pierwszy około 1990 roku, a prędkość jest zadziwiająco dobra. Jest książka autorstwa Gutknechta.

Norman Ramsey
źródło
3

O programowaniu grafiki niskiego poziomu, to dostarczy Ci wielu informacji: http://www.osdever.net/FreeVGA/home.htm . (Jest to również bardzo interesujące w trybie tekstowym).

Co niewątpliwie napotkam, co mnie zmyli?

Zrozumiesz, że na PC jest bardzo dużo rzeczy, które są niejasne: sam zestaw instrukcji x86 jest skomplikowany, a kiedy uzyskasz bezpośredni dostęp do sprzętu, może minąć trochę czasu, zanim zrozumiesz, jak napisać pojedynczy znak na ekranie .

Nie martw się o dyskietkę i tym podobne, przez większość czasu będziesz używać emulatora, takiego jak Bochs lub QEmu.

Bastien Léonard
źródło
3

Możesz rozważyć przyjrzenie się pojęciom systemów operacyjnych autorstwa Abrahama Silberschatza - Zrozumienie koncepcji programowania systemów jest podstawowym wymaganiem, zajrzyj do jądra F / OSS systemów operacyjnych linux * BSD i GNU / Linux , zwłaszcza wcześniejszych wersji, które są prawdopodobnie nieco bardziej udokumentowane.tekst alternatywny tekst alternatywny

amaterasu
źródło
1
Silbershatz jest naprawdę niezły, ale na bardzo wysokim poziomie.
Paul Nathan,
Zgoda; Powiedziałbym jednak, że jest to zasadniczo niezbędne. Dokumentacja z nowoczesnymi systemami operacyjnymi autorstwa Tanenbauma (wspomniana wcześniej)
amaterasu
2

Spójrz na Minix . Zapoznaj się z kodem źródłowym wraz z częścią „ Projektowanie i wdrażanie systemów operacyjnych ”. Rozważ wniesienie wkładu w projekt. Myślę, że Minix to naprawdę dobry i obiecujący system operacyjny w trakcie tworzenia. Jest to również projekt dobrze finansowany. Oznacza to, że możesz nawet otrzymać zapłatę za swoje składki!

Vijay Mathew
źródło
1

Jest to bardzo proste dzięki temu, że BIOS ma już wbudowanych wiele funkcji wejścia / wyjścia do zmiany trybu ekranu, zmiany koloru pikseli, pisania tekstu na ekranie i wielu innych rzeczy. Jednak nie obejmuje obsługi systemów plików, jest to jedna z niewielu rzeczy, które musisz włączyć do swojego systemu operacyjnego.

BIOS ładuje pierwszy sektor na dysku twardym i stamtąd rozpoczyna wykonywanie kodu, więc system operacyjny musi być umieszczony z pierwszą instrukcją w pierwszym sektorze na dysku twardym.

Ten artykuł w Wikipedii powinien pomóc Ci zapoznać się z przerwaniami BIOS-u do pisania tekstu na ekranie, odbierania klawiszy z klawiatury i innych rzeczy. https://en.wikipedia.org/wiki/BIOS_interrupt_call

Nawet jeśli planujesz używać c ++, zdecydowanie polecam przeczytanie o programowaniu w asemblerze, ponieważ jest to niezbędne, aby zrozumieć, jak działa sprzęt.

Alpha_Pi
źródło