Přidržení programu - multitasking – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Přidržení programu - multitasking – Assembler – Fórum – Programujte.comPřidržení programu - multitasking – Assembler – Fórum – Programujte.com

 

Matěj Andrle+1
Grafoman
23. 12. 2013   #1
-
0
-

Dobrý den,
chtěl bych načíst program a spouštět jej tak, aby pořád vládl kernel a mohl upravovat chování programu. Aby v něm mohly být různé rozšířené funkce atd. Mám jediný problém - nemůžu spustit náhodnou část programu, něco udělat v kernelu a spustit další, jelikož to mohu rozseknout uprostřed úlohy, anebo useknu část instrukce - třeba parametry... Tak se ptám - jak funguje multitasking?
Děkuji.

Nahlásit jako SPAM
IP: 78.136.161.–
Seph
~ Anonymní uživatel
37 příspěvků
23. 12. 2013   #2
-
0
-

Eh ? přesně nechápu otázku, ale možná se ptáš na interrupty. U x86 se koukni na téma IDT.

Nahlásit jako SPAM
IP: 80.188.252.–
Matěj Andrle+1
Grafoman
23. 12. 2013   #3
-
0
-

Ptám se na to, jak se řeší přepínání programů v multitaskingu... Tedy ne int instrukce, ale přepínání - běh více procesů naráz...

Nahlásit jako SPAM
IP: 78.136.161.–
Seph
~ Anonymní uživatel
37 příspěvků
23. 12. 2013   #4
-
0
-

aha, u x86_32: máš task switching mechanismus (koukni do dokumentace). u x86_64 musíš všechno udělat ručně, ale TSS je potřeba furt (pro switch stacku při interruptu == každá úroveň privilegovanosti vyžaduje jinej stack). Při přepnutí kontextu musíš uložit obsah registrů stávající úlohy, nahrát obsahy registrů nové úlohy, vložit novou kořenovou tabulku pro Paging do CR3, nahrát novej TSS do TR a pak skočit na přerušenou adresu. Pro vyvolávání handleru scheduleru použij timer (využij APIC jádra). 

Nahlásit jako SPAM
IP: 80.188.252.–
Matěj Andrle+1
Grafoman
23. 12. 2013   #5
-
0
-

Já se ptám hlavně, jak vykonat část programu, aniž bych jej utnul uprostřed instrukce atp. Neřeším teď přímo multitasking - to je další bod v programu... :D

(Jak píši - chci mít kontrolu nad tím procesem (ne do něj tupě skočit - do adresy v RAM - chci jej vykonávat za pomoci/kontroly kernelu) - z toho pak udělám ten multitasking...)

Nahlásit jako SPAM
IP: 78.136.161.–
Seph
~ Anonymní uživatel
37 příspěvků
23. 12. 2013   #6
-
0
-

Uprostřed instrukce ho prostě neutneš ... furt nechápu tvou otázku, dycky budeš muset tupě skočit na adresu v paměti. Jinak kontrolu asi nebudeš mít takovou jak si přeješ (a co ochrana paměti hmm ...) ... kernel není VM.

Nahlásit jako SPAM
IP: 80.188.252.–
Matěj Andrle+1
Grafoman
23. 12. 2013   #7
-
0
-

#6 Seph
Tak znovu - jak tedy spustit část jednoho programu, část dalšího,...? Na to se ptám - jak to právě nerozseknout uprostřed instrukce... Co píšeš nedává smysl - pokud opustím toho, co mi zařizuje multitasking, tak to přeci neskočí na další program...

Nahlásit jako SPAM
IP: 78.136.161.–
Seph
~ Anonymní uživatel
37 příspěvků
23. 12. 2013   #8
-
0
-

Achjo ... scheduler skočením na požadovanou adresu (místa v úloze kde byla utnuta) sám skončí, za dejme tomu 25 ms vyvolá APIC interrupt (náš scheduler) a vše se opakuje znova. 

Nahlásit jako SPAM
IP: 80.188.252.–
KIIV
~ Moderátor
+43
God of flame
23. 12. 2013   #9
-
0
-

obvykle se to dela casovacem, ktery vyvola preruseni... uprostred instrukce se prerusit neda, ale preruseni muze prerusit cokoliv neatomickeho (obvykle cokoliv, co se neda udelat jednou instrukci, nebo nezakaze preruseni)

a jak se to dela uz je tu zmineny...

dalsi zpusob je mit neco jako stavovy automat a vykonavat pokazde jednu akci (nesmi tam byt nic extremne dlouhyho nebo to aspon zaridit opakovanim stavu)

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Seph
~ Anonymní uživatel
37 příspěvků
23. 12. 2013   #10
-
0
-

místo časovače jde použít třeba určitý počet syscallů, a nebo jeden specifický (něco jako yeld).

Nahlásit jako SPAM
IP: 80.188.252.–
Matěj Andrle+1
Grafoman
23. 12. 2013   #11
-
0
-

#9 KIIV
Ale to právě mám na mysli - jak zařídit, abych nepřerušil věc, co potřebuje více instrukcí? A hlavně si nedovedu představit, jak oddělit od sebe i jen 2/3 programy - když všechny mohou pracovat zrovna na jedné věci. Studuji MenuetOS a rozumím asi tak každé 5. věci... Doufal jsem, že se to dá nějak jednoduše vysvětlit... :D Snad se do toho nějak dostanu... :D

Nahlásit jako SPAM
IP: 78.136.161.–
KIIV
~ Moderátor
+43
God of flame
23. 12. 2013   #12
-
0
-

#11 Matěj Andrle
no jelikoz se task switching dela diky preruseni, ktery jen podvrhne jinou navratovou adresu (dalsi task) (puvodni si samozrejme musi ulozit), tak staci zabranit na ten moment preruseni (nez se vykona cast programu "atomicky")...

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Seph
~ Anonymní uživatel
37 příspěvků
23. 12. 2013   #13
-
0
-

od sdílené paměti sou tady mutexy, kterejma si ji lockuješ. Rada, nepiš OS když neznáš pořádně funkci procesoru. Nastuduj oficiální dokumentaci k použité architektuře (asi x86 -> Intel má moc hezkou dokumentaci), a až pak něco tvoř, pokud bys tak udělal, bylo by ti to jasné.

Opravdu je ti jedno když přerušíš věc na více instrukcí, MÁŠ uloženej kontext procesu, takže můžeš kdykoli navázat znovu.

Pokud robíš na MP systému a máš aktivováno více jader, nastuduj taky paměťové bariéry (lfence,sfence,mfence) krom atomickejch instrukcí (prefix lock).

Nahlásit jako SPAM
IP: 80.188.252.–
Matěj Andrle+1
Grafoman
23. 12. 2013   #14
-
0
-

#13 Seph
Proč bych nemohl psát OS bez multitaskingu? Mám klasický DOS - a funguje lépe, než FreeDOS. Má více funkcí atd. Chci se právě dostat dál - multitasking byl pro mě vždy až moc velký - chci to zkusit zvládnout...

Nahlásit jako SPAM
IP: 78.136.161.–
Sefiros0
Návštěvník
24. 12. 2013   #15
-
0
-

Nenarážel jsem na multitasking ale na to že rozumíš každé 5 věci v menuetOS (což by nenastalo když by jsi nastudoval dokumentaci cílové architektury). Nebylo to myšleno nijak zle.

Nahlásit jako SPAM
IP: 80.188.252.–
Matěj Andrle+1
Grafoman
24. 12. 2013   #16
-
0
-

#15 Sefiros
Rozumím 86% MenuetOS na přijatelné úrovni. (kdybych se měl snažit pochopit každý krok - hledat každou instrukci - to bych u toho zestárl...) Bavil jsem se pouze a jen o multitaskingu... Tedy krom něj neznám moc dobře celkově vymoženosti chráněného režimu... Nemám problém s řadiči - sběrnicí - porty, segmenty/offsety atd. Ale chráněný režim - globální halda, stránkování paměti, swapování, multitasking atd. - to už je jiná káva.

Nahlásit jako SPAM
IP: 78.136.161.–
Sefiros0
Návštěvník
24. 12. 2013   #17
-
0
-

Inu, dokonce i segmentace je ti v 64 bit modu k hovnu. Nepoužívá se již k ochraně paměti. Ochrana paměti se realizuje skrz paging.

Nahlásit jako SPAM
IP: 80.188.252.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 50 hostů

Podobná vlákna

Multitasking c# — založil Michal Š.

Úprava programu — založil Ondřej

Chyba v programu — založil choice_

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý