Care este diferența dintre stiva de apeluri și coada de sarcini?


Răspunsul 1:

Stiva de apeluri este o structură internă de date pe proces care păstrează o înregistrare a lanțului de apeluri funcționale și a variabilelor locale în orice moment al execuției. Trăiește în propria memorie virtuală a procesului și este o stivă, deoarece fiecare apel funcțional îi pune chestii și fiecare returnare a funcției ia lucrurile de pe ea. De asemenea, este adesea folosit pentru evaluarea expresiilor din cadrul funcției. În majoritatea arhitecturilor moderne, acesta crește înapoi de la sfârșitul memoriei virtuale până la datele statice sau de acumulare.

Coada de sarcini (sau cozile, pot exista mai multe) este o structură de date a nucleului (adică nu este accesibilă procesului și nu face parte din memoria sa virtuală) care conține înregistrări ale proceselor care așteaptă să folosească CPU. Poate exista unul separat pe CP pentru sisteme multi-cpu și / sau o coadă separată pentru fiecare nivel de prioritate, în conformitate cu proiectarea planificatorului. Este o coadă, deoarece, în mod normal, înregistrările sunt plasate pe un capăt și scoase de pe celălalt, deși uneori poate fi reordonat dacă programatorul decide să facă acest lucru.


Răspunsul 2:

Unul este o stivă. Celălalt îmi este mai cunoscut ca coadă de evenimente. Stivele sunt în primă oră, mai întâi afară; ca o stivă de hârtie. Codurile sunt ultimele, ultimele iesite; ca o linie.

Când un program apelează o subrutină, care numește o subrutină, aveți o stivă, iar evenimentele se completează în ordine inversă.

Când o serie de întreruperi se adaugă la coada de evenimente, acestea sunt deservite în ordinea în care sunt primite.