Fijet (threads)

Nga Wikipedia, enciklopedia e lirë
Shko te: navigacion, kërko


Fijet(Threads) jane njesia me e vogel qe mundet te organziohen nga sistemi operativ. Keto ne fakt ndodhen brenda nje procesi. Me heret kemi permendur modelin e procesit duke u bazuar ne dy koncepte: grupimi i te resurseve dhe ekzekutimi. Sa i perket te pares e dime se procesi ka fushen e adreses, qe permban te dhena, gjithashtu edhe resurse tjera sic jane fajllat e hapura etj. Ndersa sa i perket konceptit tjeter ka te beje me ekzekutimin e fijeve(threads). Fijet kan program counter, qe tregon se ekzekutimin e ardheshem te nje fije, gjithashtu nje regjishter qe nevojitet per nje variabel.

Modeli i Fijeve te Ekzekutimit[redakto | redakto tekstin burimor]

Threads (fijet).png

Fijet na mundesojne me shume ekzekutime ne nje proces. Duke pasur disa fije qe ekzekutohen paralelisht, kjo eshte e ngjajshme me ate sikur te ekzekutohen me teper procese paralelisht. Per shkak se fijet i kane disa karakteristika te proceseve ato mund te quhen edhe si procese me peshe me te lehte(lightweight). Sa i perket konceptit “multithreading” ka te beje me ate se ne nje proces mund te ndodhen me shum fije. Nga figura me poshte mund te shohim se disa procese kane nga nje fije te vetme, ku cdo process ka fushen e vete te adresimit, qe do te thote se cdo fije qe ndodhet ne process ka fushe te ndryshme te adresimit, ndersa sa i perket figures tjeter ka te beje me ate se ne nje proces ndodhen tri fije, dhe keto fije ndajne fushen e njejte te adresimit. Ne kete rast mundemi te shohim si funksionon multiprogramimi duke kaluar nga nje proces ne tjeter, qe na jep iluzionin qe ekzektutimi i proceseve ndodhen paralelisht, e njejta ndodhen edhe me fijet e ekzekutimit, kalimi nga nje fije ne tjetren.

Cdo fije brenda nje procesi mund te jete mvarur nga fija tjeter, sepse ato kane nje fushe te adresimit, nje variabel te perbashket, dhe cdo fije mund te lexoje, shkruaje apo te fshije nje fije tjeter. Ndersa te proceset nuk mund qe te ndodhe kjo se ato kane fusha te ndryshme te adresimit dhe nuk mund te kene ndonje lidhje ndermjet veti. Eshte e rendesishme te permendet se cdo fije ka stack-un e vet ne te cilat ruan permbajtjet te cdo procedure qe thiret. Ne rastin kur kemi multithreading, procesi ne fakt fillon me nje fije, duke bere thirjen e procedures nga libraria qe eshte create_thread, dhe ne momentin kur fije ka mbaruar procedure apo punen e saj, behet thirja e procedures nga libraria qe eshte thread_exit. Kemi raste edhe kur fija ka mbaruar proceduren e saj, por eshte e bllokuar qe te terhiqet, pasi qe duhet te prese qe mbaroe proceduren edhe ndonje fije tjeter special, ne kete rast thiret procedura nga libraria qe eshte thread_wait. Gjithashtu kemi edhe thirjen thread_yeild, qe ka te beje me ate se fija dorezohet duke i dhene mundesin qe te procedurohet ndonje fije tjeter, pasi qe nuk kemi ndonje sinjal te kllokut(clock) qe te tregoe se ka nderprerje(interrupt).

Perdorimi i Fijeve te Ekzekutimit[redakto | redakto tekstin burimor]

Fijet jane te nevojshme per procesimin paralel, pasi qe i mundesojne perdoruesit qe ne te njejten kohe te kryej me teper gjera. Sa i perket asajt pse nuk i perdorim proceset ne vend te fijeve, pergjigjja eshte se fijet ndajne fushen e njejte te adresimit, nuk kemi nevoje per te menduar per nderprerjet(interrupt-et), nuk kemi nevoje per te menduar per kalimin nga nje proces ne tjeter, dhe fijet na japin mundesi me te mire per te menduar procesimin paralel. Gjithashtu fijet jane lehte per t’u formuar, lehte per t’u shkatruar, dhe jane shume me te shpejta prej proceseve. Gjithashtu fijet nuk ndikojne ne performancen. Te marrim nje shembull nepermjet te cilit me se miri mund te kuptojme fijet. Te marrim “word procesor-in” qe na paraqet dokumentet, ku dhe gjithashtu mund te shkruajm. Ne qofte se duam te skruajm ndonje lbier, nga pikepamja e autorit, me mire do te ishte qe libri te ruhet ne nje fajll te vetem, per kerkim me te lehte. Ndersa kemi edhe alternativen tjeter qe librin mund ta ndajme ne disa fajlle( psh varesisht sa kapituj ka libri). Dhe ne rast kur do te bejme ndonje nryshim te standardit, ne rastin e par qe kemi librin ne nje fajll te vetem, nryshimi qe te behet eshte me lehte, ndersa ne rastin tjeter ndryshimi duhet te behet ne cdo fajll.

Te marrim parasysh cfare do te ndodhe ne qofte se shrytzuesi fshin nje fjali ne faqen 800, dhe pastaj ne qofte se nevojitet te fshihet dicka edhe ne faqen 600, gjate kesaj kohe kur word procesorit i behet thirje qe te fshije edhe ne faqen 600, duhet nje kohe e caktuar qe te kalohet nga faqja 800 ne faqen 600. Tash do t’i kemi ne perdorim fijet. Te supozojme se word procesori ka 2 fije, nje fije qe eshte interaktive me shfrytzuesin dhe nje fije tjeter per riformatimin qe ndodh ne prapavij. Fija interaktive i tregon fijes per riformatim qe te beje riformatimin e librit, ndersa nderkohe fija interaktive i lejon shfrytezuesit apo i pergjigjet shfrytezuesit ne komandat qe ben, sic eshte levizja e faqes me ane te kursorit etj. Ndersa fija tjeter nderkohe do t’a riformatoje librin dhe do t’a paraqese ate. Pra gjithashtu mund te shtojme edhe nje fije te trete qe do te n’a nevojitet per ruatjen e dokumentit qe shkruajme apo bejme dicka, por kjo fije do te beje ruatjen ne cdo kohe te caktuar, qe do te thote periodikisht. Kemi edhe shembull tjeter duke u bazuar ne serveret e faqeve, ku kemi te bejme me kerkimin e faqeve, ne qofte se nje faqe e kemi hapur me shpesh, ate do t’a kemi te vendosur ne kesh(cache memory). Ne rastin kur kemi ndonje kerkese ne server, kemi fijen “dispatcher” qe ben leximin e kerkesave qe vijn. Pastaj kemi edhe fijen tjeter “worker thread”, e cila nxitet nga fija dispatcher qe faqja e kerkuar te lexohet nga keshi(cache memory) dhe ne qofte se nuk eshte aty te lexohet ne disqe dhe blloqe tjera. Tash mund t’a kemi te qarte ate se per cka n’a nevojitet fijet.


Implementimi i Fijeve te Ekezekutimit ne Pjesen e Shfrytezuesit[redakto | redakto tekstin burimor]

Kemi dy lloje te implementimeve sa i perket fijeve, ate ne pjesen e perdoruesit(user space) dhe ne pjesen e kernel-it. Gjithashtu kemi te mundshem edhe implementimin hibrid. Metoda e implementimit te fijeve ne pjesen e perdoruesit ka te beje me paketat e fijeve qe vendosen brenda saj. Ne kete rast kernel-i nuk din asgje se cka ndodhet ne pjesen e perdoruesit, dhe gjithashtu ne kete rast keto fije munden te implementohen edhe ne sistemet operative qe nuk permbajne ato fije. Fijet menaxhohen ne pjesen e perdoruesit, dhe cdo process ka tabelen private per cdo fije, per te mbajtur nje rend per fijet qe ekzekutohen. Kur nje fije ben dicka ajo edhe mund qe te bllokohet lokalisht, psh duke pritur per ndodnje fije tjeter, dhe ne kete menyre ben thirje te procedures run-time sistemin, dhe ky sistem kontrollon ate se a duhet qe ajo fije te bllokohet, dhe ne qofte se duhet e vendos ate ne tabelen e fijeve, ku dhe merr fijen tjeter qe eshte gati per te ekzekutuar. Gjithashtu pjesa e perdoruesit(user space) ka nje perparesi tjeter sepse ajo i lejon cdo procesi te beje rradhitjen e fijeve se kur do te ekzekutohen(scheduling). Nje nder problemet qe e ka pjesa perdoruesit ka te beje me implentimin e sistemit te thirjeve te bllokuara. Kodi per kontrollimin e thirjeve sistemore jane te vendosura ne te ashtuquajturen “jacket” ose “wrapper”. Nje problem tjeter ne pjesen e perdoruesit(user space) e kemi se perderisa ekzekutohet nje fije, nuk mund te ekzekutohet fije tjeter deri sa ajo fije qe ekzekutohet te dorezohet vet. Gjithashtu nje dizavantazh tjeter eshte se progameret tentojne qe fijet ti bejne sa me te sakta ne aplikacionet, ku fijet bllokohen shpesh, si psh ne serveret e faqeve.

Implementimi i Fijeve te Ekezekutimit ne Pjesen e Kernel-it[redakto | redakto tekstin burimor]

Ne implementimin e fijeve ne kernel nuk kemi tabele te fijeve(thread table) per cdo process, por kemi tabele per gjitha fijet ne sistem, ku fijet mund te krijohen, shkatrohen etj. Tabela e fijeve ne kernel permban regjistrat, gjendjen dhe informacione tjera. Kur nje fije bllokohet ne kernel, kernel ka opcionin e vet qe mundet te zgjedhe fije tjeter per ekzekutim nga i njejti proces ose ndonje proces tjeter.

Implementimi Hibrid[redakto | redakto tekstin burimor]

Jane bere disa perpjekje per te pasur nje implementim me te mire te fijeve duke marre perparsit te implementimit ne zonen e perdoruesit(user space) dhe perparesit ne nivelin e kernelit. Nje menyre eshte duke marre fijet nga kernel-i, pastaj fijet qe jane ne pjesen e perdoruesit te multipleksohen me te gjitha fijet qe jane ne kernel apo me disa prej tyre.

Sipas ketij dizajni kernel mund te radhise ekzekutimet vetem per ato fije qe ndodhen ne kernel. Disa nga keto mund te kene edhe fije nga pjesa e perdoruesit. Ne kete model cdo fije nga zona e kernel-it ka nje grup te fijeve nga zona e perdoruesit qe i perdor ato.

Fijet e Ekzekutimit Pop-Up[redakto | redakto tekstin burimor]

Fijet gjithashtu jane te nevojshme edhe per sistemet distributive. Sa i perket pop-up fijeve mund t’i sqarojme duke marrur nje shembull per ardhjen e nje mesazhi. Gjate ardhjes se nje mesazhi sistemi krijon nje fije tjeter qe e mban ate mesazh, dhe kjo fie quhet pop-up thread(fije).


Referencat[redakto | redakto tekstin burimor]

[1]Bekim Fetaji, Majlinda Fetaji (2011) Sistemet Operative

[2]Andrew S. Tanenbaum (2004) “Modern Operating Systems, 4/E” Prentice Hall