Mis on virnaregister?

Seoses arvutitega on pinuregister mälukoht – tavaliselt keskprotsessoris (CPU) või sellega seotud töötlemisriistvaras –, mis sisaldab eraldi arvutimälu piirkonna ülaosa praegust aadressi, mida nimetatakse virnaks. Pinuregister on oluline, sest ilma selleta peaks arvuti rakendama aeglasema ja veaohtlikuma meetodi programmi täitmise voo jälgimiseks. Enamikus süsteemiarhitektuurides on virnaregister spetsiaalne register, nii et sellele ei pääseta teiste mäluregistritega töötades kogemata juurde. Harvemini võib virnaregister olla üldregister, mis on tavaliselt programmile juurdepääsetav, kuid mida ei kasutata tahtlikult, kuna selle kasutamise on määratlenud tootja. Kui arvutisüsteem sisaldab kahte või enamat virnaregistrit, mis tähendab, et seal võib olla rohkem kui üks virn, nimetatakse seda arhitektuuri pinu masinaks.

Arvutiprogrammeerimise madalaimal tasemel on virn mälupiirkond – tavaliselt muutmälus (RAM) –, millel on täpselt määratletud tüüpi käitumine. Pinnale võib lisada teavet protsessis, mida nimetatakse tõukamiseks, või sealt võib teavet hankida, mida nimetatakse hüppamiseks. Virna mudel on esimene sisse, viimane välja, mis tähendab, et kui virna lükatakse mitu informatsiooni, siis esimesena sisse lükatud element hüppab välja viimasena, viimane aga sisse lükatud element. olge esimene, kes pop-käsuga alla laaditakse. Virna register jälgib virna ülaosa, mis on alati viimane üksus, mis sinna lükatakse.

Kui arvutiprogramm töötab, on igal käivitataval käsul konkreetne mäluaadress, kuhu see ajutiselt programmi ajaks salvestatakse. Kui programm kutsub välja alamprogrammi – või protseduuri, funktsiooni või meetodi, olenevalt programmeerimiskeelest –, peab programm selle käivitamiseks hüppama alamprogrammi koodi mäluaadressile. Aadress, kus programmi juhtimise voog katkeb, et hargneda alamprogrammini, lükatakse pinu, et see jääb meelde. Kui alamprogramm on täitmise lõpetanud, teab programm, kuhu see põhikoodis tagasi peaks jõudma, hüppab koodi aadressi pinu ülaosast, kuhu pinu register osutab.

Kuigi on ka teisi meetodeid, mida saab kasutada samade tulemuste saavutamiseks, võimaldab virna ja virnaregistri kasutamine olulist programmeerimiskontseptsiooni, mida nimetatakse rekursiooniks. Rekursiivne funktsioon on funktsioon, mis oma koodi sees kutsub ennast ise. Seda protsessi kasutatakse tavaliselt sorteerimisalgoritmides ja teatud matemaatiliste funktsioonide jaoks. Pinu register jälgib kõiki viimaseid aadresse, kus täitmine hargneb, nii et funktsioon saab rekursiooni ohutult rakendada teadmisega, et lõpuks naaseb juhtimine lähtepunkti. Üks tüsistus tekib siis, kui kogu pinu saab täis ja mällu enam ruumi ei jää, sel juhul tekib pinu ületäitumine, mis peatab programmi täitmise.