20-lekciya_paradigma_qq
.pdf20-lekciya. Programmanıń orınlanıwı waqtında basqarıw. Virtual mashinalar.
Jobası:
1.Orınlanıw ortalıǵı (Runtime Environment) túsinigi hám wazıypaları.
2.Virtual mashinalardıń (VM) túrleri: Sistemalıq hám Processli VM-lar.
3.Bayt-kod (Bytecode) hám JIT (Just-In-Time) kompilyaciya texnologiyası.
4.Yadtı avtomat basqarıw (Garbage Collection) hám onıń islew principi.
Orınlanıw ortalıǵı hám basqarıw
Programmanıń orınlanıw waqtında basqarıw (Runtime Management) – bul kodtıń jumıs islep turǵan waqıttaǵı (execution time) minez-qulqın, resurslarǵa qatnasın hám qáwipsizligin támiyinlewshi mexanizmler jıynaǵı. Dástúrli kompilyaciyalanatuǵın tillerde (C, C++) orınlanıw ortalıǵı minimal boladı; programma tikkeley operaciyalıq sistema (OS) menen baylanısadı. Biraq zamanagóy tillerde (Java, Python, C#, JavaScript) kod tikkeley processorǵa emes, al arnawlı "Orınlanıw ortalıǵına" (Runtime Environment - RTE) júklenedi. RTE – bul programmanıń "jasaw ortalıǵı" bolıp, ol kodtıń orınlanıwın qadaǵalaydı, qátelerdi (exceptions) uslaydı hám yadtı basqaradı.
Orınlanıw ortalıǵınıń tiykarǵı wazıypalarınan biri – bul "Abstrakciya". Programmist kod jazǵanda, ol qaysı operaciyalıq sistemada (Windows, Linux) yamasa qanday processorda (Intel, ARM) isleytuǵının oylap otırmawı kerek. RTE bul fizikalıq detallardı jasırıp, programmaǵa standartlastırılǵan "Virtual interfeys"ti usınadı. Mısalı, Java-da fayldı oqıw buyrıǵı jazılǵanda, JVM (Java Virtual Machine) onı sol konkret OS-tıń tiyisli sistemalıq shaqırıwına (system call) aylandırıp beredi.
Runtime basqarıwdıń jáne bir áhmiyetli bólegi – bul "Qáwipsizlik hám Izolaciya". RTE programmaǵa kompyuterdiń barlıq resurslarına erkin kiriwge ruqsat bermeydi. Ol "Sandbox" (Qum qutısı) principin qollanıwı múmkin, yaǵnıy programma tek ózine ajıratılǵan shegarada ǵana háreketlene aladı. Eger programma ruqsat etilmegen yadtı oqıwǵa yamasa qáwipli operaciyanı orınlawǵa háreket etse, orınlanıw ortalıǵı onı toqtatadı hám qáte (exception) shıǵaradı. Bul viruslardan hám sistemalıq qulawlardan qorǵawdıń tiykarı bolıp tabıladı.
Orınlanıw waqtında basqarıw sonıń menen birge "Refleksiya" (Reflection) hám "Dinamikalıq júklew" (Dynamic Loading) sıyaqlı múmkinshiliklerdi beredi. Programma jumıs islep turǵan waqıtta jańa kod bóleklerin (klaslardı, kitapxanalardı) diskten yamasa tarmaqtan júkley aladı. Mısalı, plaginlerge (plugins) tiykarlanǵan sistemalarda tiykarǵı programma toqtatılmastan, jańa funkcional qosıwǵa boladı. RTE jańa kodtıń dúzilisin tekserip, onı ulıwma sistemaǵa qáwipsiz túrde biriktiredi.
Virtual mashinalar hám Bayt-kod
"Virtual mashina" (VM) – bul haqıyqıy kompyuterdiń (processordıń) programmalıq emulyaciyası. Virtual mashinalar eki úlken túrge bólinedi: "Sistemalıq VM" hám "Processli VM". Sistemalıq VM (mısalı, VMware, VirtualBox) pútin bir operaciyalıq sistemanı (Guest OS) basqa bir OS-tıń ishinde isletiw ushın arnalǵan. Al biz úyrenip atırǵan programmalastırıw paradigmaları ushın "Processli VM" (Application VM) áhmiyetli. Processli VM (JVM, CLR, Python VM) tek bir ǵana programmanı isletiw ushın jaratıladı hám programma jabılǵanda ol da óshiriledi.
Processli virtual mashinalar ádette "Bayt-kod" (Bytecode) dep atalatuǵın aralıq kodtı orınlaydı. Bayt-kod – bul mashina kodına (0 hám 1 lerge) uqsas, biraq ol anıq bir fizikalıq processorǵa emes, al "Virtual processorǵa" arnalǵan buyrıqlar jıynaǵı. Mısalı, Java tili dáslep javac kompilyatorı arqalı .class fayllarına (baytkodqa) aylandırıladı. Bul bayt-kod platformaǵa ǵárezsiz boladı. Keyin, bul baytkodtı qálegen kompyuterdegi JVM oqıp, sol jerdegi real processordıń tiline awdarıp orınlaydı. Bul "WORA" (Write Once, Run Anywhere - Bir ret jaz, hár jerde isley ber) principin támiyinleydi.
Bayt-kodtı orınlawdıń eki usılı bar: "Interpretaciya" hám "JIT Kompilyaciya". Dáslepki virtual mashinalar bayt-kodtı tek interpretaciya qılatuǵın edi (qatarma-qatar oqıp orınlaw), bul ádewir áste bolatuǵın. Zamanagóy VM-lar (HotSpot JVM, V8 Engine) "JIT" (Just-In-Time) texnologiyasın qollanadı. JIT kompilyator programma islep turǵan waqıtta, eń kóp qollanılatuǵın kod bóleklerin ("qızıq noqatlar" - hot spots) tabadı hám olardı tikkeley mashina kodına aylandırıp, yadda saqlap qoyadı. Keyingi ret usı kod shaqırılǵanda, ol interpretaciya qılınbastan, maksimal tezlikte orınlanadı.
JIT texnologiyası virtual mashinalarǵa dástúrli C++ sıyaqlı tiller menen básekilesiwge múmkinshilik berdi. JIT kompilyator orınlanıw waqtındaǵı statistikanı (profiling information) paydalanıp, kodtı optimallastıra aladı. Mısalı, eger if shárti 99% jaǵdayda true bolsa, JIT kodtı sol jaǵdayǵa beyimlep qayta qura
aladı. Statikalıq kompilyatorlar (AOT - Ahead Of Time) bunday dinamikalıq maǵlıwmatqa iye emes, sol sebepli geybir jaǵdaylarda JIT kodı statikalıq kodtan da tezirek islewi múmkin.
Yadtı avtomat basqarıw (Garbage Collection)
Virtual mashinalardıń hám orınlanıw ortalıǵınıń eń úlken jeńislerinen biri – bul "Yadtı avtomat basqarıw" (Automatic Memory Management) yamasa "Qoqım jıynaw" (Garbage Collection - GC). C hám C++ sıyaqlı tillerde programmist yadtı malloc arqalı alıp, free arqalı ózi bosatıwı kerek. Eger umıtıp ketse – yad aǵıp ketedi (memory leak), eger erte bosatıp jiberse – programma qulaydı (segmentation fault). Virtual mashinalar bul juwapkershilikti óz moynına aladı.
GC – bul orınlanıw ortalıǵındaǵı fonovı process bolıp, ol yadtıń qaysı bólekleri (obyektleri) endi kerek emes ekenin turaqlı qadaǵalap baradı. Tiykarǵı princip – "Qol jetimlilik" (Reachability). GC "tamır" (root) obyektlerden (mısalı, stektegi aktiv ózgeriwshiler, statikalıq maydanlar) baslap, siltemeler (references) arqalı qaysı obyektlerge barıwǵa bolatuǵının tekseredi. Eger qandayda bir obyektke heshqanday silteme bolmasa, yaǵnıy programma oǵan endi qol jetkize almasa, ol "qoqım" (garbage) dep esaplanadı hám GC onı yaddan óshirip, orının bosatadı.
Qoqım jıynawdıń túrli algoritmleri bar. "Mark and Sweep" (Belgile hám Sıpır) – eń klassikalıq usıl: dáslep kerekli obyektler belgilenedi, keyin belgilengenler óshiriledi. Zamanagóy "Generaciyalıq GC" (Generational GC) algoritmleri obyektlerdi jaratıw waqtına qaray bóledi: "Jas" (Young) hám "Ǵarrı" (Old) generaciyalar. Statistika boyınsha, kóp obyektler jaratılǵannan keyin tez arada kerek emes bolıp qaladı (mısalı, cikl ishindegi waqıtsha ózgeriwshiler). Sol sebepli GC "jas" bólimde jiyi-jiyi hám tez tazalaw jumısların júrgizedi, al "ǵarrı" bólimge siyrek tiyedi. Bul programmanıń ónimliligin arttıradı.
GC programmisttiń jumısın ańsatlastırǵanı menen, onıń "tólemi" de bar. GC jumıs islep atırǵanda, ol geyde programmanıń barlıq aǵımların qısqa waqıtqa toqtatıp qoyıwı múmkin ("Stop the World" pauzası). Real waqıt rejiminde isleytuǵın (Real-time) sistemalar ushın bul qolaysız bolıwı múmkin. Biraq zamanagóy GC-lar (mısalı, Java-daǵı ZGC, Shenandoah) bul pauzalardı millisekundtıń úleslerine shekem azaytıp, paydalanıwshı sezbeytuǵın dárejege jetti. Solay etip, virtual mashinalar hám GC texnologiyası programmalastırıwdı qáwipsizirek hám ónimli etti.
BAQLAW SORAWLARÍ:
1.Orınlanıw ortalıǵı (Runtime Environment) programmanıń qáwipsizligin qalay támiyinleydi?
2.Virtual mashinanıń "Processli VM" túri (JVM, Python VM) ne ushın kerek?
3.Bayt-kod (Bytecode) hám JIT (Just-In-Time) kompilyaciya arasındaǵı baylanıs qanday?
4."Qoqım jıynawshı" (Garbage Collector) qaysı princip (algoritm) boyınsha kerek emes obyektlerdi anıqlaydı?
5.Yadtı avtomat basqarıwdıń qol menen basqarıwǵa (C++) qaraǵanda artıqmashılıqları hám kemshilikleri qanday?
