Ilustrată tutorial pe teoria sistemelor de operare privind punerea în aplicare a multitasking

multitasking

Toate acestea ne aduce la ideea de a cauza ThreadSwitch nu din programul de utilizator, și în alt mod. De exemplu, instrui un apel de funcție de întrerupere timer de sistem. Atunci vom obține următoarea schemă.

  • Fiecare fir este alocat interval de timp.
  • Dacă firul nu a lansat procesorul pentru cuantumul acesteia, acesta este îndepărtat și repoziționată la capătul cozii. În acest caz, toate gata pentru execuție firul mai mult sau mai puțin uniform primi de control.

Acest mecanism, numit felierea timp sau de partajare a timpului. implementat în Transputer microcod și aproape toate sistemele de operare moderne. Un nume comun pentru toate metodele filamentele sistem de comutare este inițiată prin deplasarea termenului (preemptiv) multitask. Astfel, multitasking se opune unei cooperative, în care are loc comutarea numai la inițiativa problemei. Timpul de partajare este un caz special de multitasking. În sistemele cu prioritățile deplasării curente a problemei este nu numai semnalele de timer-ul, dar în cazul în care, indiferent de motiv (cel mai adesea din cauza unui eveniment extern) este activat printr-un proces cu o prioritate mai mare decât cea actuală.

Problema momentului cuantei nu este o problemă banală. Pe de o parte, plumb cuantic excesiv de scurt la faptul că cele mai multe ori, sistemul se va ocupa de fire de comutare. Pe de altă parte, sistemele interactive sau în timp real sisteme cuantice prea mari vor duce la prelungirea timpului de răspuns inacceptabil de mare.

Sistemul în timp real, putem declara firul, care este necesar să se reacționeze rapid, cu prioritate și lăsați-l la asta. Dar nu putem face acest lucru cu programe interactive într-un sistem de operare multi-utilizator multi-utilizator sau este posibil ca UNIX pe masina x86 desktop sau Sun.

Din psihologia perceptive cunoscut faptul că omul începe să simtă întârzierea răspunsului la valoarea de întârziere de aproximativ 100 ms. Prin urmare, în sistemele divizate în timp, concepute pentru operare interactive, quant de obicei selectată să fie egal cu zeci de milisecunde. În sistemele mai vechi, o activități de calcul orientate lot de prelucrare, cum ar fi DISPAK sistem de operare pe BESM-6, Quant ar putea ajunge la câteva zecimi de secundă, sau chiar secunde. Acest lucru crește eficiența sistemului, dar face imposibilă, sau cel puțin incomod - lucru interactiv. Multe sisteme moderne selectate în mod dinamic interval de timp pentru diferite clase de planificare și procesul de prioritizare.

Sistemele în timp real, de obicei, au două clase de programare - în timp real și divizat. clasa de planificare, de regulă, nu este dat benzile individuale, precum și întregul proces. procese în timp real nu sunt întrerupte de semnalele de contorul de timp și poate fi condus numai intensificarea o prioritate mai mare firului în timp real. fire în timp real de cea mai mare prioritate sunt de fapt lucrează în modul de multitasking cooperativ. Dar timpul divizat firului și procesele sunt deplasate reciproc, prin procese semnalelor de timer și în timp real, deoarece acestea sunt activate.

multitasking are multe avantaje, dar dacă suntem aproximativ o sută va suna așa cum este descris în secțiunea anterioară ThreadSwitch întrerupe temporizator sau alt dispozitiv extern, un astfel de comutator va fi perturba iremediabil firul întrerupt.

Într-adevăr, programul utilizator poate folosi oricare din registrele T, care nu este stocat sub apeluri normale. Prin urmare, de exemplu, stivuitoare întrerupere hardware sunt stocate într-o stivă toate registrele utilizate de acestea. Prin modul în care, în cazul în care funcția ThreadSwitch nostru va salva toate registrele pe stivă, nu va fi exact ceea ce ne dorim. ThreadSwitch cauzate de întrerupere, își păstrează registrele de fire de curent pentru stiva de curent, stiva este trecut la un nou fir, se recuperează din registrele sale stiva, și un fir nou devine control, astfel încât, dacă nu ar fi pierdut.

Exemplul 8.3. context, funcția de comutare în Linux / kernel x86.

PROIECTE