Cyjon OS

3

Przywróciłem sterownik i wykrywanie kontrolera sieciowego, przy okazji usprawniając kod o doświadczenie.

title

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

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

title

0

Sprawdziłem, jak wygląda komunikacja DNS...
title

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.

title

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.

0

Jest taka wersja Notepad na Linuksa:
http://notepadqq.altervista.org/s/

0

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ś):

dns3.png

1

@Akasei: https://tools.ietf.org/html/rfc2673 ? edit: nie to chyba nie to, ale poszukałbym odpowiedniego rfc.

0
Shalom napisał(a):

@Akasei: https://tools.ietf.org/html/rfc2673 ? edit: nie to chyba nie to, ale poszukałbym odpowiedniego rfc.

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 :)
title

1

Bardzo wartościowa strona: Asembler, porady optymalizacji.

0

Czy projekt skrobiesz sobie dla własnej satysfakcji, czy planujesz z nim gdzieś wystartować po pewnym etapie?

0

Dla własnej satysfakcji.

Dokładnie to chciałbym w przyszłości z tego napisać magisterkę. (mam tylko inżyniera i technika).

0

Nie wiem co jest nie tak z tym kodem:

Procesor AMD Phenom x4 965 3.4 GHz
... taki sam wynik jest na AMD C-60 1 GHz

Zastosowałem kopiowanie po 256 Bajtów na raz, a mimo tego leci jak krew z nosa:

	; http://forum.4programmers.net/Off-Topic/250332-cyjon_os?p=1268711#id1268711
	shr	rcx,	STATIC_DIVIDE_BY_256

.loop:
	prefetchnta	[rsi + 256]
	prefetchnta	[rsi + 288]
	prefetchnta	[rsi + 320]
	prefetchnta	[rsi + 352]
	prefetchnta	[rsi + 384]
	prefetchnta	[rsi + 416]
	prefetchnta	[rsi + 448]
	prefetchnta	[rsi + 480]

	movdqa	xmm0,	[rsi]
	movdqa	xmm1,	[rsi + 0x10]
	movdqa	xmm2,	[rsi + 0x20]
	movdqa	xmm3,	[rsi + 0x30]
	movdqa	xmm4,	[rsi + 0x40]
	movdqa	xmm5,	[rsi + 0x50]
	movdqa	xmm6,	[rsi + 0x60]
	movdqa	xmm7,	[rsi + 0x70]
	movdqa	xmm8,	[rsi + 0x80]
	movdqa	xmm9,	[rsi + 0x90]
	movdqa	xmm10,	[rsi + 0xA0]
	movdqa	xmm11,	[rsi + 0xB0]
	movdqa	xmm12,	[rsi + 0xC0]
	movdqa	xmm13,	[rsi + 0xD0]
	movdqa	xmm14,	[rsi + 0xE0]
	movdqa	xmm15,	[rsi + 0xF0]

	movntdq	[rdi],	xmm0
	movntdq	[rdi + 0x10],	xmm1
	movntdq	[rdi + 0x20],	xmm2
	movntdq	[rdi + 0x30],	xmm3
	movntdq	[rdi + 0x40],	xmm4
	movntdq	[rdi + 0x50],	xmm5
	movntdq	[rdi + 0x60],	xmm6
	movntdq	[rdi + 0x70],	xmm7
	movntdq	[rdi + 0x80],	xmm8
	movntdq	[rdi + 0x90],	xmm9
	movntdq	[rdi + 0xA0],	xmm10
	movntdq	[rdi + 0xB0],	xmm11
	movntdq	[rdi + 0xC0],	xmm12
	movntdq	[rdi + 0xD0],	xmm13
	movntdq	[rdi + 0xE0],	xmm14
	movntdq	[rdi + 0xF0],	xmm15

	add	rsi,	256
	add	rdi,	256
	dec	rcx
	jnz	.loop
0

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

@babubabu: cool'n'quiet nie robi już różnicy :)

6

title

Tak, tak... zaimplementowałem obsługę myszki po porcie PS2, a skoro jestem już w trybie graficznym....

0

Mega! Jesteś mistrzem! Dodałeś obsługę wielu rdzeni CPU? Od pewnego czasu szukam źródła jak to zrobić, niestety bez skutku;)

0

@Nazgul_: Wiem jak to zrobić, ale jądro nie jest jeszcze przystosowane do "złapania" innych wątków procesora.
Przykład masz tu https://github.com/ReturnInfinity/BareMetal-OS/blob/master/os/kernel64.asm
Etykieta ap_clear:

5

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.

title

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.

1

Implementacja tego GUI, http://forum.osdev.org/download/file.php?id=2787&mode=view
może mi przysporzyć nie lada problemu. Najprostszy wydaje się Fluxbox i pokrewne, co sądzicie?

Zapewne będzie tylko jeden schemat kolorów, więc proszę o sugestie lub linki do palet.

0 użytkowników online, w tym zalogowanych: 0, gości: 0