System Operacyjny

Własne projekty SQra75 17-04-2015 3968 11
17-04-2015 03:49
Od dłuższego czasu "ciśnie mnie", żeby napisać kernela systemu, ale napisanego w stylu "Old School", dopieszczonego do ostatniego bitu i zoptymalizowanego co do jednego cyklu procesora. Dlaczego? bo już się tak nie koduje. Widać to po dzisiejszych programach, które w każdej nowej wersji potrzebują coraz więcej pamięci RAM, zasobów HDD, szybszych kart GFX i MSX - wiadomo, że to jest wbrew logice każdego RetroCodera (programy w każdej swojej wersji powinny działać szybciej i zajmować mniej miejsca). Na początek BootLoader, który wczyta Monitor Pamięci w stylu dos-owego debug-a, ale działającego w trybie chronionym i z obsługą systemu plików. Była by to świetna "platforma" na której można zacząć pisać właściwy kernel. Potrzebni są tu chętni - język programowania jest bez znaczenia - dowolny. Najważniejsza jest chęć, pasja i trochę wolnego czasu. Kto jeszcze nie czuje się na tyle "mocny" aby kodować, może wspierać projekt, np. dobrym słowem, odpowiednią dokumentacją, nowym pomysłem itd. Cel: System Operacyjny - mały, szybki - przeznaczony do symulacji, emulacji i eksperymentów programistycznych.
https://retrodev.miraheze.org - Wiki - Stare Artykuły z różnych nie istniejących już czasopism po polski
17-04-2015 09:58
Przede wszystkim witam na Starepro :)

Nie będę zniechęcał do pisania własnego OSa w ogóle, bo samemu widzi mi się napisanie takowego od pewnego czasu. Natomiast chciałbym wymienić parę kwestii, które powinieneś rozważyć przed zabraniem się do pracy:

* Istnieją już systemy, które spełniają dokładnie te założenia budowy, o których mówisz, czyli racjonalne wykorzystywanie zasobów i w efekcie szybka praca. Przykładem może być np. KolibriOS - mieści się z dużą ilością programów na jednej dyskietce 1.44MB, posiada obsługę TCP/IP, kilka sterowników do kart sieciowych, nawet TinyGL do grafiki. Do systemu możesz wgrać klienta IRC, przeglądarkę WWW (tekstową oczywiście ;)), assembler FASM, prawdopodobnie również jakiś niewielki kompilator C.

* W wypadku KolibriOS nie uruchomisz tego systemu na architekturach przed Pentiumem (czyli tracisz kompatybilność z 486 i niżej). Jeżeli już, najważniejszym celem Twojego systemu powinna być kompatybilność z konkretną starszą architekturą (hipotetycznie 386). Tutaj pojawia się dość istotny problem, o którym powiem w kolejnym podpunkcie.

* Pisząc własny system operacyjny, który miałby działać na więcej niż jednym, testowym komputerze, poświęcisz bardzo dużo czasu na implementację sterowników do wszystkiego. Lecz muszę Cię ostrzec, że prawdopodobnie poświęcisz jeszcze więcej sił na stworzenie kernela kompatybilnego z starszym sprzętem. Nie bez powodu amatorskie systemy (te bardziej rozbudowane) są dostępne na wyższe architektury. Programowanie systemu na starsze platformy jest generalnie cięższe, ponieważ więcej elementów jest nieustandaryzowanych.

* Może dość nieistotna rzecz przy projekcie "Old Schoolowym", ale duża zasobożerność systemów operacyjnych (tych większych oczywiście) bierze się raczej stąd, że muszą obsługiwać na każdej warstwie pewne standardy (spójne API sterowników, I/O, dostęp do systemu plików, API do pisania własnych modułów do kernela [tj. w systemach unixowych]), które są przewidziane tak, aby ujednolicać pewne operacje do tych samych funkcji (chociażby fopen() w C, który działa w rezultacie ze wszystkimi systemami plików), a jednocześnie zapewnić interfejs programistyczny, który będzie ważny przez kilka(naście) lat.

Jeżeli kręci Cię stworzenie systemu i chciałbyś, aby inne osoby cię wspierały/pomagały przy pracy, polecam stworzyć repozytorium na GitHubie (najtrudniejszy element to nazwa projektu - chociaż OldSchoolOS nie byłby zły :D). Będę obserwował jak idą prace, jeżeli znajdę trochę czasu to z przyjemnością pomogę w kodzie na tyle, ile będę potrafił.

Mam nadzieję, że OSDev wiki nie jest ci obce :)
Trochę pfcode'a i technika się gubi.. ~ Aveo, 2015
17-04-2015 11:11
kilka sugestii: bootloader i kernel powinny byc pisane w czystym asm i zoptymalizowane na jak najszybsze dzialanie. moduly dodatkowe mozna poleciec juz w c. nalezalo by tez stworzyc kompilatory c i asm dla tego systemu zeby mozna bylo spokojnie go rozbudowywac. Najwazniejsza bedzie jednak dokumentacja projektu z dokladnym opisem funkcji kernela, przerwan i api systemu dla developerow. to wlasnieslaba dokumentacja jest najczesciej przyczyna porzucania projektow przez osoby dolaczajace do osdev
17-04-2015 17:37
Ja też witam wszystkich :)

Wszystkie Os-y, typu Kolibri-Menuet, Perix, MikeOs itd. robione są po to aby (to tylko moje odczucie) aby się sprawdzić i pokazać, że ja potrafię. Druga sprawa to sprowadzanie kernel-a do monolitu, a w najlepszym przypadku do monolitu z obsługą sterowników w postaci modułów. Nie o to mi chodzi. Chcę napisać bardzo minimalistyczny rdzeń kernela, który inicjuje podstawowe funkcje API do obsługi urządzeń (Device+Sterownik), bibliotek (nie dll) i komend z scheduler-em. Konkretnie rdzeń, pierwsze polecenie np. init.com, pierwsze urządzenie - init.device, i init.library - resztę chciałbym pozostawić dla przyszłych programistów/developerów systemu do popisu.

Jeśli chodzi o OsDev, strona fajna, lecz sekcja w języku polskim szczątkowo - czyli tak jak u mnie znajomość języka angielskiego. Swoją drogą, przydało by się "tu" jakieś wiki, jest forum, blog, irc - jeszcze wiki będzie ok. Celowo też unikam systemów typu GIT, SVN i innych - odstraszają wielu pomysłowych programistów, dokładnie tak samo jak polecenie make. Tylko ci którzy od początku będą pisać ten system będą wiedzieć "o co chodzi" - reszta zanim dojdzie do kodu, będzie musiała rozszyfrować skrypty makefile i nauczyć się SVN lub GIT - nie każdy ma na to czas.

Ale, ale - na początek bootloader, który przełączy maszynę w tryb wirtualny i wgra tymczasowy kernel, z obsługą pamięci, filesystemu i zgłosi się jako monitor pamięci.

Nazwę wymyślimy na końcu :)
https://retrodev.miraheze.org - Wiki - Stare Artykuły z różnych nie istniejących już czasopism po polski
17-04-2015 17:49
Uważaj, byś nie skończył jak Terry Davis ^^

A Gita nie obrażaj, bo wielu pomysłowym programistom bardziej pomógł niż utrudnił.
17-04-2015 18:20
SQra75 napisał(a):
Tylko ci którzy od początku będą pisać ten system będą wiedzieć "o co chodzi" - reszta zanim dojdzie do kodu, będzie musiała rozszyfrować skrypty makefile i nauczyć się SVN lub GIT - nie każdy ma na to czas.


Ale to nie ma sensu. Każdy projekt składający się z wielu plików powinien dostarczać wraz z kodem źródłowym skrypt(y) do kompilacji. Zapewniam cię, że ktoś kto będzie chciał wprowadzić zmianę do kodu Twojego systemu nie będzie czytał Makefile'ów :P

Druga rzecz. Nie bardzo potrafię sobie wyobrazić pracy nad jednym kodem przez wiele osób, które znają się tylko z internetów bez żadnego systemu kontroli wersji, czy czegokolwiek co pozwoliłoby na sprawne zarządzanie zmianami. Zresztą, 95% osób, które będą chciały Cię wspomóc ich własnym kodem, znają GITa (lub cokolwiek innego). Pozostałe 5% albo nie umie napisać nic poza Hello World, lub chodzi do gimnazjum..

Swoją drogą, wiki aka "Staroprogramopedia" już kiedyś istniała, ale ponieważ było to masowe przeklejanie treści z Wikipedii, projekt anulowałem. W ciągu około dwóch tygodni opublikuję na forum plan rozwoju serwisu na najbliższy czas :)
Trochę pfcode'a i technika się gubi.. ~ Aveo, 2015
17-04-2015 19:40
Jeszcze nie ma ani jednej linijki kodu - to po pierwsze, po drugie na tym etapie będzie max. 3 (słownie TRZY) pliki z kodem w asm. Niedługo dostarczę "odpowiednią porcję teorii" dla pozostałych 5%, a wśród gimnazjalistów może znajdzie się ktoś kto ma min 6 z angielskiego - na OsDev jest sporo pozycji do tłumaczenia :) - Każdy jest potrzebny, najważniejsza jest chęć i pasja.
https://retrodev.miraheze.org - Wiki - Stare Artykuły z różnych nie istniejących już czasopism po polski
17-04-2015 20:14
oj słabo to widze...
znajomość angielskiego jest wymagana nie tylko do tutoriali i dokumentacji. narzędzia, składnia poleceń, wszelkie man'y i help'y z reguły są po angielsku bo to jest standart w swiecie informatyki. Podziwiam zapał, mnie by sie po prostu nie chciało pisac os od podstaw.
17-04-2015 22:19
Odrobina teorii - Start Systemu.

Oczywiście wszyscy to wiedzą, ale przypomnę :) że zaraz po włączeniu/zresetowaniu komputera, uruchamiane są z BIOS-u (BIOS - Basic Input Output System), procedury testujące poprawność działania najważniejszych podzespołów, jest to tzw. POST - Power Of Self Test. Gdy wszystko jest ok, BIOS czyta tzw. MBR (MBR - Master Boot Record). Master Boot Record, to pierwszy fizyczny sektor, pod zerową głowicą, na zerowej ścieżce - dysku startowego. Wynosi dokładnie 512 bajtów, gdy bajtach 511 i 512 zapisana jest wartość AA55h to zawartość MBR wczytywana jest pod adres 0000:7C00h i uruchamiana poprzez skok pod ten adres w pamięci. Gdy 511 i 512 nie zawierają wartości AA55h wyświetlany jest komunikat że dysk nie jest dyskiem startowym.
https://retrodev.miraheze.org - Wiki - Stare Artykuły z różnych nie istniejących już czasopism po polski
18-04-2015 21:28
asiekierka napisał(a):
Uważaj, byś nie skończył jak Terry Davis ^^

A Gita nie obrażaj, bo wielu pomysłowym programistom bardziej pomógł niż utrudnił.


Nikogo nie obrażam - sam używam SVN i make, tylko że akurat w tym przypadku jak na razie nie widzę takiej potrzeby. Terry Davis ? - nie instalowałem go - nie wiem :)
https://retrodev.miraheze.org - Wiki - Stare Artykuły z różnych nie istniejących już czasopism po polski
19-04-2015 22:41
Wow, też kiedyś myślałem o stworzeniu swojego systemu. Jednak po tym, jak zobaczyłem jak wiele pracy trzeba w to włożyć, zrezygnowałem. Życzę szczęścia przy tworzeniu projektu, daj znać gdy coś pójdzie do przodu :)
Jestem Krystian :]
01-01-2017 21:59
Życzę powodzenia

Aby móc odpowiedzieć w tym wątku, zaloguj się.