Jak wspominałem wcześniej, studiów informatycznych nie ukończyłem. Z tego też powodu zauważam od dłuższego czasu pewne braki w edukacji programistycznej, które wypadałoby w końcu uzupełnić. Jako że studia są drogie i bardzo czasochłonne, postanowiłem zebrać się w sobie, zrobić listę potrzebnych mi tematów i ułożyć plan nauki. Z moich obserwacji wynika, że publiczne dzielenie się postanowieniami jest dużo lepsze, niż po prostu postanowienie czegoś - znacznie silniej motywuje do działania. Oto więc plan "przedmiotów" i "zaliczeń", które poddane zostaną waszej ocenie:
Kompilatory
Zadanie: napisać parser/interpreter prostego, C-podobnego języka obiektowego, konwertujący kod źródłowy do postaci bytecode. Napisać maszynę JIT, przekształcającą bytecode w natywny kod procesora, zarządzającą pamięcią i uruchamiającą tak przekształcony kod. Platforma docelowa: x86/x86-64 (do wyboru).
Języki funkcyjne
Zadanie: korzystając z F# zaimplementować wyszukiwanie, analizę i podmianę tekstu na potrzeby przeszukiwania bazy danych serwisu w ASP.NET. Algorytm ma być możliwy do zintegrowania z istniejącym kodem i napisany w całości zgodnie z założeniami języków funkcyjnych.
Systemy operacyjne
Zadanie: napisać samodzielny system operacyjny z trybem wiersza polecenia, obsługą dysku, klawiatury, myszy i wielozadaniowością (wątki/procesy, priorytety, zatrzymywanie procesów). Uwaga: wielozadaniowość musi mieć możliwość uruchamiania kodu innego niż aktualny (brak funkcjonalności fork() ).
Grafika komputerowa
Zadanie: napisać - korzystający wyłącznie z podstawowego API 3D - kompletny renderer implementujący podstawowe efekty graficzne używane w popularnych open-source silnikach grafiki.
W mojej ocenie rozsądnym czasem na wykonanie tego wszystkiego będzie jeden pełny rok akademicki - czyli termin zaliczeń ustalam na koniec czerwca 2012 roku. Pozostaje wydrukować sobie indeks ;-)
Powodzonka - zwłaszcza zadanie numer 3 nie będzie łatwe :) A limit czasowy jest dość... hmm, srogi. No chyba że w 2012 jednak odwrócą się bieguny i doba się wydłuży :)
OdpowiedzUsuńXion - W czasach, kiedy każdy ma dostęp do Internetu i nie ma problemu ze znalezieniem dokumentacji/manuali/tutoriali/sth to pisanie OSa wcale nie jest takie trudne. Sam podjąłem się takiego zadania. Z początku wszystko jest czarną magią, ale z czasem poznaje się takie pojęcia jak GDT, IDT, PIC, PIT, IRQ, umie się je oprogramować i zmusić do działania ;) Fajne jest to, że nie musimy się babrać w Assemblerze (no, kilka wyjątków). Zamiast własnego bootloadera można wykorzystać GRUBa, który wczyta plik .elf naszego kernela, wejdzie w tryb chroniony, odblokuje linie A20, itd, a my wylądujemy w funkcji main kernela :)
OdpowiedzUsuńhttp://wiki.osdev.org/Main_Page - skarbnica wiedzy, dokumentacja o sprzęcie i przykłady w kodzie jak z niego korzystać.
http://www.jamesmolloy.co.uk/tutorial_html/ - Tutorial "jak napisać system operacyjny". Pokazuje od czego zacząć, jak za to się zabrać.
Połowę mam za sobą, to jeszcze zostaje spłodzić drzewo :)
OdpowiedzUsuńAle na OS bym się nie porywał. Co prawda metodą tutoriale + kopiuj-wklej pewnie da się to zrobić bez problemu, ale żeby samemu od zera napisać obsługę USB, ACPI czy TCP/IP? Może na emeryturze ;)
@SyncOnGreen: mam kilka książek (w tym po polsku) na ten temat + osdev.org w zakładkach ;-)
OdpowiedzUsuń@Dab: USB, ACPI i TCP/IP nawet nie dotykam. Chcę zrobić same podstawy. Zresztą mój obecny pomysł zakłada raczej wbudowanie w OS kompilatora+runtime Bartok i zrobienie większości managed. Singularity działa w ten sposób, a ja się czegoś nauczę ;-)
@SyncOnGreen: Pewnie masz rację. Moje wątpliwości co do OS-a wynikają zapewne głównie z tego, że sam nie tknąłem tej tematyki nigdy nawet małym palcem :)
OdpowiedzUsuń@Bogumił Wiatrowski: Możesz podać jakieś tytuły tych książek? Jedyną książką jaką mam na na ten temat na dysku to "Understanding the Linux Kernel" (której nawet nie przeczytałem).
OdpowiedzUsuńAbraham Silberschatz - Podstawy Systemów Operacyjnych, zebrane w książkę artykuły z MS Research dotyczące Singularity (jakoś przed świętami rozdawali w MS Polska) i skrypty AGHowskie.
OdpowiedzUsuń