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 komentarze:

  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ń na zawsze
  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ń na zawsze
  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ń na zawsze
  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ń na zawsze
  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ń na zawsze
  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ń na zawsze
  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ń na zawsze