2011-01-26

Nadrabiając zaległe przedmioty

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

7 komentarzy:

  1. 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ń
  2. 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 :)

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

    OdpowiedzUsuń
  3. Połowę mam za sobą, to jeszcze zostaje spłodzić drzewo :)

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

    OdpowiedzUsuń
  4. @SyncOnGreen: mam kilka książek (w tym po polsku) na ten temat + osdev.org w zakładkach ;-)

    @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ę ;-)

    OdpowiedzUsuń
  5. @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ń
  6. @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ń
  7. 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ń