Wielowątkowość!!!

0

Potrzebuję pilnie jakiegoś sposobu na zrobienie wielowątkowości. Chodzi mianowicie o to że piszę mały system operacyjny na potrzeby własne na bazie linuksa i potrzebuję instrukcji nie używających żadnego systemu operacyjnego które spełniały by następujące podpunkty.

  1. Urchamianie wieluprogramów jednocześnie;
  2. Przydzielenie mocy, lub ew ilości kolejek w używaniu procesora zgodnie z priorytetem procesu
  3. Przydzielanie bloku pamięci na wyłączność dla każdego procesu

W moim chorym umyśle zrodził się pomysł żeby rozwiązać to w taki sposób:

  1. Program ustala kolejność wykonywania zadań
  2. Przydziela pamięć
    3 Wczytuje jedną instrukcję danego procesu i zwraca wynik do poamięci

...

i tak ze wszytskimi procesami aż do końca listy a później od nowa tzn. następna instrukcja i zwrot do pamięci.
...

Z góry dzięki za pomoc i ew. sugestie

0

Lepiej nieco większymi porcjami, ale to faktycznie tak działa. Jeśli w komputerze jest jeden procesor, to jakakolwiek wielowątkowość jest tylko "udawana" bo polega na przełączaniu a nie pracy jednoczesnej. Co prawda dla normalnego człowieka to bez znaczenia, po przełączeń może być pół miliona na sekundę. Ale twórca systemu operacyjnego musi wziąć to pod uwagę. Przy przełączaniu między procesami wszystkie rejestry muszą wylądować na stosie (albo lepiej: zmienić wskaźnik stosu, żeby był osobny dla każdego procesu), wtedy procesy nie będą w stanie wykryć że są przełączane (chyba że mierząc czas, ale przełączenia są zbyt krótkie na szybkich procesorach). I spokojnie możesz brać więcej danych za jednym razem, byle nie bezmyślnie, najlepiej ciąć przy instrukcjach przeskoku dalszych niż 512 bajtów czy coś koło tego, powinno zmniejszyć ryzyko błędu (a jednocześnie zapobiec cięciu przy prostym warunku z przeskokiem o kilka bajtów wstecz, np. przy małej pętli).

0

Rozumiem o co ci chodzi ale przydałby mi się do tego jakiś kod w asmie, bo szczeże mówiąc na tym etapie utknołem i moje powyższe wypociny są tylko teorytyczne bez poparcia ze strony proaktycznej.

0

Najlepiej zrobić to na semaforach. Poczytaj sobie "Programowanie ort!" Ben Ari tam <ort>wszysko </ort>jest ładnie opisane.

[cya]

0

Czy jest przerwanie wywoływane po każdej instrukcji?

0

to sie podajze w praktyce robi na jakis strukturach TSS gdzie sa zawarte informacje o procesie. a calosc (przelaczanie procesow) podajze nazwya sie sheulding czy jakos tak, poszukaj w necie ale po polsku nic nie znajdziesz. najwiecej teori jest odczywiscie w Intel Architecture Software Developer's Manual

// sheduling - ŁF

0

Czy jest przerwanie wywoływane po każdej instrukcji?

int 1, int 3 to przerwania ktore sluza do debugowania, wywoływane po każdej instrukcji.

0

Czy jest przerwanie wywoływane po każdej instrukcji?

int 1, int 3 to przerwania ktore sluza do debugowania, wywoływane po każdej instrukcji.

Tylko w trybie debuggowania.
Dla systemu operacyjnego bardziej nadaje sie przerwanie wywolywane przez zegar (alg. round robin).

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