Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
Przywróciłem sterownik i wykrywanie kontrolera sieciowego, przy okazji usprawniając kod o doświadczenie.
W pierwszej kolejności przywrócę obsługę ARP, IP i ICMP. Następnie skupię się na serwerach DHCP i DNS. DHCP nie będzie stanowił problemu - szybki rzut oka i wygląda jak proste zapytania na protokole IP.
Staram się jak najszybciej sprawić by Cyjon wykonywał poważne zadania w sieci.
Serwer HTTP poczeka, obsługa stosu TCP musi zostać bardzo dobrze zaprojektowana.
Mając to wszystko, dodam sterownik kontrolera sieciowego Realtek 8169 i sprawdzę w praniu na prawdziwym sprzęcie :)
Było by dobrze znaleźć optymalne rozmiary buforów Ethernet, TCP/IP.
4
Przepisanie na nowo obsługi protokołów Ethernet i ICMP poskutkowało bardzo dobrym czasem reakcji.
Jestem pewien, jeśli poprawię kolejkę procesów będą same <1ms :)
0
Sprawdziłem, jak wygląda komunikacja DNS...
Prościej się nie dało :) Bez problemu zaimplementuje, więcej czasu poświęce serwerowi (aplikacji) do tego.
Zastanawia mnie jednak co innego, w jaki sposób DNS lub PING dowiaduje się, że adres ip np. 10.0.0.3 ma nazwę "m68mt-d3"?
Tak zwane automatyczne uzupełnianie tablicy nazw serwera DNS. Ktoś wie?
0
Stało się, program Geany przestał mi wystarczać...
Problem z jakim się borykam.. Geany nie otwiera plików z prawidłowym kodowaniem (nie wykrywa) - wymusza na nich UTF-8 - przez co widzę krzaczki.
PS: notepad++ też nie wykrywa poprawnie kodowania.
Propozycje?
Dodano wsparcie dla znaków diakrytycznych kodowania ISO-8859-2.
0
ręcznie wybierać kodowanie
0
Tak zgadza się, otworzę plik -> krzaki, ręcznie zmienię kodowanie -> krzaki zostają (musisz je ręcznie wszystkie poprawić :D
Za każdym razem, to traci sens.
W notepad może to i działa, ale czy jest wersja na linuksa?
Jedyna opcja w tym momencie to korzystanie z dwóch edytorów i każdy skonfigurowany na inne kodowanie domyślne.
W Geany po zmianie kodowania wciśnij ctrl+R aby przeładować plik
0
Spotkałem się dziś z wyjątkowo dziwnym błędem symulatora Bochs, gdy na jednej jednostce (host) błąd był ignorowany (brak symptomów) to na drugiej jednostce (host) ewidentnie pakiety przestały przychodzić już po pierwszym obsłużonym pakiecie.
Cały czas chodzi o wirtualizacje(symulacje).
Problemem było zapisywanie błędnego wskaźnika do bufora pakietów przychodzących w deskryptorze RX karty sieciowej i8254x. Zamiast załadować do deskryptora wskaźnik gdzie znajduje się bufor, zmieniałem miejsce (adres) przechowywanych deskryptorów.
0
Bardzo proszę o wytłumaczenie czym są te informacje i od czego zależne (oznaczone czerwonym czymś):
Już wiem :) tak sobie spoglądam na zapytania DNS i ot tak policzyłem ilość słów w nazwie domeny....
Label Count 3: icons.duckduck.go
Label Count 2: wataha.net
Label Count 1: localhost
Natomiast komórka (Bajt) to ilość znaków w pierwszym słowie.... analiza wykonana :D
7
4 godziny stracone na przeszukiwaniu jądra systemu za bardzo poważnym bugiem.
Zapowiadało się prosto, ot nowa aplikacja dodana do systemu sprawiła, że stare ls i ps przestały działać, a Bochs wywalał się zanim złapałem wyjątek procesora...
Wyłączenie nowej aplikacji z systemu naprawiało problem, więc wniosek czyżby cały system się nie załadował i ucieło kawałek na końcu?
Przeczesanie bootloadera nie przyniosło jakichkolwiek rezultatów, wszystko było na tip - top.
No to analizujemy w którym miejscu wywalał się np. process ls... drugie wywołanie przerwania (jakiegokolwiek) WTF?
Przeglądam logi Bochsa, a tam: wektor przerwania nie istnieje albo nieprawidłowy segment kodu... zaczyna się pięknie.
Uruchamiam jeszcze raz proces ls i zatrzymuje przez wywołaniem drugiego przerwania, sprawdzam tablicę przerwań: jest na miejscu. Sprawdzam tablicę GDT... fuck, gdzie się podziały rekordy CS i DS dla jądra? Ktoś je nadpisał śmiećmi...
Raz jeszcze uruchamiam proces, tym razem przed wywołaniem pierwszego przerwania... GDT prawidłowe. Czyli, gdzieś w tej procedurze obsługi przerwania (przesyłanie argumentów do procesu)... jedziemy z tym... Przy wertowaniu tony linii kodu stronicującej przestrzeń dla przesyłanych argumentów, nagle otrzymuę na moje żądanie adres nowej strony/ramki... której adres dziwnie znajomy.. FUCKx2 to adres tablicy binarnej mapy pamięci... jakim cudem proces dostał ten adres? Sprawdzam binarną mapę pamięci w pamięci, a tam... kolejne śmieci... (idę po tabletki uspokajające).
No dobra, teraz uruchamiam system raz jeszcze, tylko zastawiam pułapkę na próbę nadpisania cokolwiek to tablicy binarnej mapy pamięci... ciach, prach... złapała się na nią procedura inicjalizacji nowego procesu, wywołana przez process shell (no w porządku, powłoka uruchamia ls)... ale dlaczego wkłada tam ARGUMENTY do cholery....?
Znowu analiza... tym razem od początku inicjalizacji procesu ls. Binarna mapa pamięci jeszcze jest prawidłowa, ale coś mało w niej opisanych stron: 0xFE (czyli 8 wolnych stron), że jak?? Czyżby kończyła się pamięć RAM? Sprawdzam co dzieje się dalej... i wszystko jasne... pamięć się skończyła i nie wykonałem testu czy otrzymałem prawidłowy adres wolnej strony (Flaga CF) - zarazem jako wynik wypluło adres binarnej mapy pamięci.
Suma sumarum... system Cyjon... przekroczył magiczną barierę 1 MiB wykorzystania pamięci RAM...
Teraz muszę poświęcić się systemowi obsługi wszelakich błędów, nie mam w przyszłości tyle czasu na szukanie tak... prostego powodu błedu.
1
Małe potworki podczas przepisywania trybu tekstowego do graficznego :)
U... chyba mam odpowiedź z OSDev przez "Octocontrabass" forum.osdev.org/viewtopic.php?f=1&t=31361&p=271666
Reading from video memory is very slow. You'll have to find a way to scroll the screen without ever reading video memory.
One easy option is to store an entire copy of the screen in main memory, and then copy it to video memory whenever you update it.
1
Poczyniłem następujące kroki:
dla przestrzeni pamięci karty graficznej ustawiłem typ na Write-Combine (rekord MTRR),
w tablicach stronicowania, które opisują przestrzeń pamięci karty graficznej wyłączyłem flagę Write-Back (podobno nie zaleca się tego typu, więc pozostaje Write-Through),
czcionkę przekonwertowałem (podczas inicjalizacji jądra) na gotowe do skopiowania matryce z ustawionym kolorem i tłem (pa pa kolory),
dodałem bufor dla karty graficznej w pamięci RAM, wszystkie procedury tam drukują/rysują/przewijają, na koniec przestrzeń jest kopiowana do pamięci karty graficznej,
do kopiowania wykorzystuję "szybką" procedurę z wykorzystaniem SSE jw. pare postów.
Efekt, znaczna poprawa, ale dalej nie to samo jak w przypadku Kolibri OS, gdzie powiedziałbym masterpiece.
Poprawa jest na tyle dobra, że można pracować na wirtualce :) Raz na dwa odświeżenia widać rysowanie.
Wiem, że nie mi się porównywać z Kolibri, gdzie nad jądrem pracuje ~25 osób, ~50 przy aplikacjach, a reszta do ~100 to testerzy i dokumentacja.
0
Sprawdziłem z powrotem na procku AMD Phenom X4 965 3.4 GHz, działa idealnie :) brak rysowania :)
Myszka podpięta na przejściówkę USB>PS2.
Wersja tylko podglądowa, w tym momencie przy każdym ruchu jest czyszczony ekran, wyświetlany biały prostokąt i nakładana matryca kursora z kanałem alfa.
Rozdzielczość 800x600@32
Testowane na prawdziwym sprzęcie.
6
Ekhm, mam już protoplaste...
Teraz musze cały kod poskładać do kupy. I można brać się za optymalizacje.
4
Wszem i wobec ogłaszam uzyskanie rewolucji :)
Sprawność rysowania... jest (prawdopodobnie) lepsza niż na Menuet OS i Kolibri OS :D I nie zastosowałem jeszcze optymalizacji, ani trochę...
Wykorzystałem mały trick ^^ (doświadczenie popłaca)
Jeśli zastosuję jeszcze dodatkowo optymalizację, którą mam w planie... to uzyskam wydajność na poziomie Windows XP i 7 lub Xów (GNU Linux) bez sterowników.
Fanfary!
0
Dlaczego zrezygnowałeś z publikacji kodu?
1
"wolna myśl": Rosjanie nie śpią.Nie chcę aby forki mojej pracy rozbestwiały się po świecie.