[asm]budowa systemu

0

Chcę zbudować system ale mam mały problem z komunikacją między programami i sterownikami, a mianowicie nie wiem jakie bufory dać, miałem zamiar dać 64KB i komunikacja miała by się odbywać na zasadzie zapisu i odczytu z wirtualnego pliku urządzenia/programu, ale cy to nie za dużo tego bufora? bo dane by miały postać nie pakietu np dla karty sieciowej ale postać rozkazów jakie ma wykonać sterownik.

I jeszcze jedno jak zrobić wywołanie funkcji systemowych? przez przerywania czy lepiej inaczej? jak inaczej to opowiadać :D wiem że windows ma np robione poprzez zapis w pamieci sterownika, ale jak to zrobić żeby sterownik wiedział że są nowe dane bo przecieŻ nie może współliniowo sprawdzać.

Wiecie może jaki można największy skoko wykonac w architekturze 64 bitowej?

0
Kurczak napisał(a)

I jeszcze jedno jak zrobić wywołanie funkcji systemowych? przez przerywania czy lepiej inaczej? jak inaczej to opowiadać :D

Na przerwaniach programowych najlatwiej, a najlepiej na syscall, sysenter/sysexit ale nie wszystkie procesory to obsluguja, wiec musisz jakos to sprawdzic. sys* troche ci ulatwiaja bo o ile wiem nie musisz korzystac z tssow do zmiany uprzywilejowania.

Co do odczytu wiadomosci, coz w Windowsie na przyklad robimy petle glowna w ktorej odczytujemy wiadomosci, jak to zrobisz zalezy od ciebie, mozesz np pomyslec o rodzaju callbackow, cos jak event, przychodzi komunikat i uruchamia sie jakas procedura w programie ... kwestia wyobrazni.

A tak w ogole to dziwnie gadasz, z checia bym zobaczyl co do tej pory wykonales.

0

Ja aktualnie jestem w fazie projektowania ale już mam zaczątki osa dla archichtektury 16 i 32 bitowej ale zmieniłem podejście i robię jajko dla 64 bitowców.

Znasz może jakieś linki z opisem tych wywołań co podałeś?

Ja bym chetnie zrobił przez przerywania ale czy to nie za mocno spowolni system?

Mi głównie chodzi o rozwiązanie dla sterowników.

0
Kurczak napisał(a)

Ja bym chetnie zrobił przez przerywania ale czy to nie za mocno spowolni system?

Zalezy, jakich funkcji to beda wywolania, czy beda one wymagaly dostepu do calej pamieci czy wystarczy im kernel ktory gdzies tam se zmapujesz, na jakim uprzywilejowaniu bedzie dzialal proces i czy funkcja wymaga wyzszego uprzywilejowania niz proces. Poza tym roznica miedzy 32 bitami a 64 jest dosyc duza, wiec powinienes sie zdecydowac na konkretna platforme i wg tego sie edukowac.

0

Wiem że architektura 64 bitowa jest przyszłościowa dlatego ort! 32 bity ale w okresie kiedy pracowałem na 32 bitach to nie było żadnych dobrych źródeł informacji dla 64 bitów.

Bym ort! przerywania tylko do wewalania danych do buforów jądra. Szukam o tym syscalu czegos właśnie.

Mam jakieś dziwne pytanie:

Można stworzyć binarie które będzie miało np 3KB ale będzie zajmować 3 MB w pamięci bo 'zmienne' były stworzone jako nie zajmujące miejsca w pliku ale jak wyczajić ile będzie zajmowac plik w pamięci przed jego załadowaniem?

0

Zmienne tworzysz na stercie po urchomieniu programu, jaka duza zrobisz sama sterte to zalezy od ciebie, mozesz obslugiwac np page faulta i dynamicznie ja powiekszac, mozesz tez zrobic jakis okreslony rozmiar, albo jakiegos syscalla co bedzie zmienial jej wielkosc - twoj wybor.

0

Wcześniejsze systemy co robiłem to były systemy jednozadaniowe bo nie wiedziałem jednej rzeczy a mianowicie:

Jak odczytać po skoku skąd przyszedł proc, chodzi mi o sheluderka.

0
Kaczka napisał(a)

Jak odczytać po skoku skąd przyszedł proc, chodzi mi o sheluderka.

nie da sie, musi byc call i odczytasz ze stosu.

0
Kaczka napisał(a)

Jak odczytać po skoku skąd przyszedł proc, chodzi mi o sheluderka.

To nie jest takie hop siup, skok czy call i juz. Zalezy czy chcesz aby twoj os zapewnial ochrone, jesli nie to mozna po prostu w przerwaniu timera zamienic stosy i ew cr3 (jesli chcesz uzywac stronicowania) i moze ldt, jesli nie chcesz zeby program majacy kilka bajtow mogl posypac system to musisz juz zabawic sie TSSami (mowa o 386, 32 bity). A tak w ogole to polecam manuala Intela volume 3, tam duzo sie dowiesz.

0

Fajną zagmatwana rzeczą jest planista :D

Można zmusić syscalla by pod koniec swojego działania wywołał podplaniste jeśli planista nie mógł wykonać przełaczenia kontekstu bo trwał proces syscall?

Podplanista jak planista tylko bez paru rzeczy.

0
Kurczak napisał(a)

Fajną zagmatwana rzeczą jest planista :D

Tu nie chodzi o samego schedulera tylko o calego osa, scheduler w zasadzie wybiera tylko kontekst (wlasciwie to "tylko").

Kurczak napisał(a)

Można zmusić syscalla by pod koniec swojego działania wywołał podplaniste jeśli planista nie mógł wykonać przełaczenia kontekstu bo trwał proces syscall?

Nie bardzo rozumiem, moglbys sprecyzowac co masz na mysli mowiac "podplanista"?

0

Podplanista przełancza też kontekst ale nie robi paru rzeczy co robi planista właściwy np nie liczy czasu systemowego itp.

Mi chodzi o to żeby zablokować możliwość przełączenia kontekstu jeśli jest wywołany jakiś syscall ale po jego wykonaniu zawsze sprawdzać czy nie było próby przełączenia kontekstu i jak była to go przełączyć za pomoca podplanisty.

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