Autor Wątek: C++ && Assembler  (Przeczytany 7968 razy)

Offline Moriturius

  • Użytkownik

# Styczeń 04, 2008, 15:07:27
A co do tematu, to mamy 2007

WTF? Sylwester mi się tylko snił? :P

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

deX(ter)

  • Gość
# Styczeń 04, 2008, 18:34:03
moze tak: ile programow i gier potrafi dzisiaj wykorzystac 4 rdzenie? nawet z 2 sa problemy :) wiec mikrooptymalizacje w assemblerze zostawilbym na koniec (na co na 100% nie bedzie czasu jak juz yarpen wspomnial ;) )
« Ostatnia zmiana: Styczeń 04, 2008, 19:25:50 wysłana przez therealremi »

deX(ter)

  • Gość
# Styczeń 05, 2008, 00:04:40
Ejj.. No trzeba ładnie temat pociągnąć Offtopem ;P. Tak więc co do OS'a, to mnie najbardziej męczyły tablice: GDT i IDT, jakoś nie mogłem ich zrozumieć... ;]. Ale potem to już fajnie ;d.

Aha.. Jaki jest sens pisania PODSTAW (podkreślam to słowo ;]), PODSTAW OS'a w C z plusami?. Jakby samo C nie wystarczyło... Na początek pakowanie w to C++, to tylko niepotrzebne utrudnianie sobie życia ;].

Robiłem kilka podejść do OSdevu (woo.. za pierwszym razem to nie tak łatwo :P), na różne sposoby.. I powiem szczerze, że mi się najfajniej kodziło w czystym asmie ;].

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 05, 2008, 00:20:16
Cytuj
Aha.. Jaki jest sens pisania PODSTAW (podkreślam to słowo ;]), PODSTAW OS'a w C z plusami?. Jakby samo C nie wystarczyło... Na początek pakowanie w to C++, to tylko niepotrzebne utrudnianie sobie życia ;].
A jaki jest sens pisania tego w C, skoro można w C++? Nikt nie każe Ci przecież w C++ zawsze posługiwać się filozofią OOP'u, a w razie czego ten czy tamten bajer z C++ może się przydać. :)

Cytuj
Robiłem kilka podejść do OSdevu (woo.. za pierwszym razem to nie tak łatwo Tongue), na różne sposoby.. I powiem szczerze, że mi się najfajniej kodziło w czystym asmie ;].
Miałem kiedyś zadanie z tym związane na studiach - na podstawie frameworka prostego OS'a w asmie (wejście w tryb chroniony, ustawienie tablic i prosta konsola) trzeba było coś do tego dorobić (z reguły wystarczyło dodać jakieś polecenie do konsoli). Dorobiłem czytanie i odpalanie COM'ów z dyskietki (wykorzystywało to własny banalny system plików) oraz przełączanie się między dwoma zadaniami (tutaj podejście łopatologiczne - jak cyknie zegar, to OS zrzuca wszystko na stos, zmienia segmenty i ładuje ze stosu - bez żadnej ochrony oczywiście). Może trochę sie zagalopowałem z tym zadaniem, ale postawili mi za to 15 na 10 punktów. :)

Offline agent_J

  • Użytkownik

# Styczeń 05, 2008, 00:48:04
Ejj.. No trzeba ładnie temat pociągnąć Offtopem ;P. Tak więc co do OS'a, to mnie najbardziej męczyły tablice: GDT i IDT, jakoś nie mogłem ich zrozumieć... ;]. Ale potem to już fajnie ;d.

GDT i IDT nie należy do końca do systemu operacyjnego - to istnieje tylko na x86. Coś co konfiguruje tryb chroniony to nie OS tylko bootloader. Podział na tryb rzeczywisty/chroniony to też tylko bzdurny wymysł Intela.

Cytuj
Aha.. Jaki jest sens pisania PODSTAW (podkreślam to słowo ;]), PODSTAW OS'a w C z plusami?. Jakby samo C nie wystarczyło... Na początek pakowanie w to C++, to tylko niepotrzebne utrudnianie sobie życia ;].

Np. Symbian ? Praktycznie wszystko pisane w C++, sprawuje się bardzo dobrze. Obiekty z przestrzeni użytkownika bardzo ładnie łączą się z obiektami po stronie jądra. (się ma dostęp do źródeł ]:) )

Cytuj
Robiłem kilka podejść do OSdevu (woo.. za pierwszym razem to nie tak łatwo :P), na różne sposoby.. I powiem szczerze, że mi się najfajniej kodziło w czystym asmie ;].

Taaa, drivery, cały kernel, stos TCP/IP, obsługa różnych systemów plików, GUI i do tego jakieś usługi wszystko w asmie ? :) Te wszystkie superzoptymalizowane OSy pisane w asmie (w innych językach też) oraz z szumnymi hasłami (typu - piszemy windowsa, tylko lepszego, bo w asemblerze) się w 99% kończyły na etapie bootsectora i "jądra" wyświetlającego hello world. Żeby nie było to napisałem własnego OSa (dość rozbudowany kernel, GUI - API wzorowane na BeOSie, TCP/IP, pare przeportowanych programow z GNU), ale stwierdziłem że ciągnięcie tego dalej się nie opłaca - tworzenie OSa posłużyło mi do nauki. Co z tego że się napisze nawet super system, jeśli nie będzie driverów do żadnego nowego sprzętu.

----
Wiadomo, że można napisać całą grę łącznie z silnikiem w asmie. Jeśli grę w "nieoptymalnym" c++ można robić kilka lat, to strach pomyśleć ile to zajmie w asemblerze.

----
IA32 mnie tylko wkurza - mało rejestrów, duża liczba bezużytecznych rozkazów (które pewnie i tak lecą na mikrokodzie). Poza tym syf typu A20, tryb rzeczywisty oraz parę innych rzeczy, których nawet programiści systemów nie używają, bo po co. BIOS powinien odejść na śmietnik historii na rzecz EFI.

« Ostatnia zmiana: Styczeń 05, 2008, 00:51:07 wysłana przez agent_J »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 05, 2008, 04:23:28
Cytuj
IA32 mnie tylko wkurza - mało rejestrów, duża liczba bezużytecznych rozkazów (które pewnie i tak lecą na mikrokodzie).
Obecnie procesory już od pewnego czasu mają więcej rejestrów, niż to by wynikało z listy rozkazów, tylko po prostu same je mapują i optymalizują kod na bieżąco tak, żeby wykorzystać potokowość, powielone ALU i tym podobne, dzięki czemu dzisiejszy procesor potrafi w każdym cyklu wykonać kilka instrukcji. :)

Offline agent_J

  • Użytkownik

# Styczeń 05, 2008, 11:25:45
Cytuj
IA32 mnie tylko wkurza - mało rejestrów, duża liczba bezużytecznych rozkazów (które pewnie i tak lecą na mikrokodzie).
Obecnie procesory już od pewnego czasu mają więcej rejestrów, niż to by wynikało z listy rozkazów, tylko po prostu same je mapują i optymalizują kod na bieżąco tak, żeby wykorzystać potokowość, powielone ALU i tym podobne, dzięki czemu dzisiejszy procesor potrafi w każdym cyklu wykonać kilka instrukcji. :)

Co z tego, że mają więcej, jak i tak ich nie możesz ani ty ani kompilator wykorzystać. Jeśli robisz dużo obliczeń na dużej liczbie zmiennych to i tak musisz mieszać bez przerwy z przesyłaniem pamięć <-> rejestry zamiast załadować więcej danych do rejestrów i na rejestrach pracować. Mnie się podobają procesory SPARC v9 - 128 rejestrów ;) Ciekawym projektem jest OpenSPARC (http://opensparc-t1.sunsource.net/download_hw.html), 32 rdzenie - niestety jego synteza nawet w układ FPGA jest na razie za droga :( (http://www.xilinx.com/products/devkits/HW-V4-ML410-UNI-G.htm - zestaw potrzebny od odpalenia tego to 3000$ :( )
« Ostatnia zmiana: Styczeń 05, 2008, 11:35:46 wysłana przez agent_J »

deX(ter)

  • Gość
# Styczeń 05, 2008, 14:46:35
Cytat: agent_J
Cytat: deX(ter)
Robiłem kilka podejść do OSdevu (woo.. za pierwszym razem to nie tak łatwo Tongue), na różne sposoby.. I powiem szczerze, że mi się najfajniej kodziło w czystym asmie ;].

Taaa, drivery, cały kernel, stos TCP/IP, obsługa różnych systemów plików, GUI i do tego jakieś usługi wszystko w asmie ?


Hehe.. Aż tak daleko to nie doszedłem ;P. Za chudy w uszach jeszcze jestem.. Teraz będę szedł do liceum Staszica w Wawie (o ile się dostanę ;)), to będę przynajmniej otoczony ludźmi, których kręci to samo, co mnie, więc się poprawię ;].

Offline agent_J

  • Użytkownik

# Styczeń 05, 2008, 15:29:09
(...) to będę przynajmniej otoczony ludźmi, których kręci to samo, co mnie, (...)

Pobożne życzenia.

----------
Wracając do tematu: IMO łączenie kodu obiektowego z asmem niewiele da, ponieważ byś musiał pisać wersję praktycznie pod każde ABI - wiele lepszego kodu i tak nie napiszesz, ponieważ i tak musisz trzymać konwencję wywołań metod oraz przekazywania argumentów.

Offline Demon

  • Użytkownik

# Styczeń 05, 2008, 15:42:18
Widzę że nie tylko ja przechodziłem fascynację OSDev'em, najlepsze jest to że w momencie kiedy mnie ten temat zaciekawił w ogóle nie znałem assemblera(poza instrukcją mov :P) i tylko z powodu OSDev'u nauczyłem się trochę assemblera, a co do deskryptorów GDT i LDT nadal męczy mnie fakt iż deskryptorów GDT jest max 8192 i nie wiem czy współczesne systemy operacyjne stosują jakiś trik aby rozszerzyć tą liczbę, czy taka liczba im całkowicie wystarcza.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 05, 2008, 17:55:32
Cytuj
Co z tego, że mają więcej, jak i tak ich nie możesz ani ty ani kompilator wykorzystać.
Od tego masz z kolei cache, chociaż możliwe, że procesor potrafi również te rejestry mapować jako pamięć. :)

Offline agent_J

  • Użytkownik

# Styczeń 05, 2008, 20:28:36
Widzę że nie tylko ja przechodziłem fascynację OSDev'em, najlepsze jest to że w momencie kiedy mnie ten temat zaciekawił w ogóle nie znałem assemblera(poza instrukcją mov :P) i tylko z powodu OSDev'u nauczyłem się trochę assemblera, a co do deskryptorów GDT i LDT nadal męczy mnie fakt iż deskryptorów GDT jest max 8192 i nie wiem czy współczesne systemy operacyjne stosują jakiś trik aby rozszerzyć tą liczbę, czy taka liczba im całkowicie wystarcza.

GDT żaden popularny OS na IA32 nie używa aktywnie (jest inicjalizowane przez bootloader i potem leży nieużywane przez jądro -  wiadomo, że procesor używa). Przełącza się tylko przestrzeń adresową ładując nowy katalog stron. Jądra systemu pisane z zamierzeniem portowania na różne procesory rzeczy specyficznych dla danej architektury używają tylko, gdy to jest niezbędne.
« Ostatnia zmiana: Styczeń 05, 2008, 20:30:25 wysłana przez agent_J »