Anda di halaman 1dari 550

KAPITULLI

HYRJE

Nj sistem modern kompjuteri prbehet nga nj ose me shume proesore, memorje qendrore, disqe, printera, nj tastjere, nj monitor, nderfaqe network dhe pajisje t tjera hyrese/dalese (input/output). E thene ndryshe nj sistem sht shume i komplikuar. Pr t shkruar programe qe ndjekin dhe prdorin t gjitha keto komponent sht vertet nj pune shume e veshtire. Pr ket arsye komjuterat jane t pajisur me nj shtrese software-i qe quhet sistem operativ, detyra e t cilit sht t menaxhoje t gjitha keto pajisje (device) dhe t siguroj programeve t prdoruesit nj nderfaqe me t thjesht me hardware-in. Pra subjekti i ketij libri jane pikerisht keto sisteme. Ne fig.1.1 tregohet menyra e vendosjes ne nj sistem operativ. Ne fund kemi hardwarein, i cili ne shumicen e rasteve ka dy ose me shume nivele (shtresa). Ne nivelin me t ulet jane pajisjet fizike, t cilat prbehen nga qarqe t integruara chip-esh, tela (wires), tuba me reze katodike dhe pajisje t tjera t ngjashme me keto. Menyra e konstruktimit dhe e punimit t tyre sht pune e inxhinierit elektrik. Ne nivelin pasardhes kemi mikro arkitekturen, ne t cilen pajisjet fizike grupohen pr t formuar njsi funksionale. Ky nivel prmban disa regjistra brenda ne CPU dhe nj rruge kalimi t dhenash (data path) qe prfshin nj njsi arithmetike llogjike (ALUArithmetic Logic Unit). Ne do cikel clock-u merren dy operanda nga regjistrat dhe me to kryhen veprime ne ALU. Rezultati ruhet ne nj ose me shume regjistra. Ne disa makina, menyra e operimit t data path-it kontrollohet nga nj software i quajtur mikroprogram. Ne makina t tjera kontrollohet nga qarqe hardware-ike.

A p lik im e t S is t. B a n k a r S is t. K o n tro ll W e b B ro w s e r

K o m p ilu e s i U s er m o d e

E d ito ri U s er m o d e

In te r. k o m a n d . (s h e ll) U s er m o d e

P ro g ra m e t S is te m

S is te m i O p e ra tiv (k e rn e l m o d e )

G ju h a M a k in e -IS A le v e l (5 0 - 3 0 0 in s tr-s p e c ia l d e v ic e re g is te r) H a rd w a re M ik ro A rk ite k tu ra (R re g jis tra t d h e d a ta p a th )[S w a n d H W c o n tro lle r]

P a jis je t F iz ik e (M ik ro c h ip , p o w e r s u p p ly , te l e tj)

( Figure 1.1.Nj system llogarits)

Qellimi i data path-it sht t ekzekutoje disa bashkesi instruksionesh. Disa nga keto mund t behen ne nj cikel t vetm data path, t tjerat kerkojne me shume cikle data -path. Keto instruksione mund t prdorin regjistrat ose pajisje t tjera hardware-ike. Hardware-i dhe instruksionet t para sebashku nga nj programues i gjuhes assembler formojne nivelin ISA (Instruction Set Architecture). Shpesh ky nivel quhet gjuhe makine. Gjuha makine ka 50 deri ne 300 instruksione, shumica prdoren pr levizur t dhena ne makine, pr veprime arithmetike dhe pr t krahasuar vlera. Ne ket nivel pajisjet I/O kontrollohen duke ngarkuar vlera ne regjistra special t pajisjeve (device register). Pr shembull, nj disk mund t komandohet t lexoje duke ngarkuar ne regjistrat e tij vlerat e adreses se diskut, adreses se memories qendrore, numrin e byte-ve dhe veprimin (lexim ose shkrim). Praktikisht nevojiten me shume parametra dhe statusi qe kthehet nga drive-ri pas nj operacioni t caktuar sht vertet shume kompleks. Vec kesaj, ne shume pajisje I/O kohezimi (timing) luan nj rol t rendsishem ne programim. Pr t mos patur kete kompleksitet sigurohet nj sistem operativ. Ky prbehet nga nj shtrese software qe pjeserisht fsheh hardware-n dhe i jep programuesit pr t punuar me nj bashkesi instruksionesh me t prshtatshem. Ne krye t sistemit operativ kemi software-t e sistemeve. Ketu kemi interpretuesin e komandave (shell), sistemet dritare (window systems), kompiluesit, editoret dhe programe t varura nga aplikacione t tilla. sht e rendesishme t kuptojme se keto programe nuk jane pjese e sistemit operativ, edhe pse ato sigurohen nga prodhuesit e kompjuterave. Kjo sht nj ceshtje kritike dhe delikate. Zakonisht sistemi operativ sht ajo pjese e software-it qe vepron ne kernel mode ose supervisor mode. Ky mbrohet nga nderhyrjet e prdoruesit neprmjet hardware-it (duke injoruar pr momentin disa mikroproesore qe nuk kane fare mbrojtje hardware-ike). Kompiluesit dhe editoret veprojne ne user mode. Ne qoft se nj prdorues nuk pelqen nj kompilues, ai mund t shkruaje vet nj tjetr t tille, por ai nuk mund t shkruaje nj manovrues clocku t interrupteve (clock interrupt handler), i cili sht pjese e sistemit operativ dhe qe normalisht mbrohet nga hardware ne menyre qe prdoruesi t mos e modifikoje at. Disa here, ky dallim ne sistemet e futura (mund t mos kene kernel mode) apo ne sistemet e interpretuara (sistemet operuese t bazuar ne Java t cilt prdorin interpretimin pr t ndare komponentt dhe jo hardware-in) mund t zbehet. Pr kompjuterat tradicional sistemi operativ sht akoma ai qe vepron ne kernel mode. Ne shume sisteme ka programe t cilt veprojne ne user mode, por qe ndihmojne sistemin operativ ose prformojne funksione t privilegjuara. Pr shembull, shpesh kemi nj program qe i lejon prdoruesit t ndryshoje fjalekalimin. Ky program nuk vepron ne kernel mode dhe nuk sht pjese e sistemit operativ, por kryen nj funksion t tille qe ne nj fare menyre duhet jet i mbrojtur. Ne disa sisteme, kjo ide merret ne nj forme shume ekstreme dhe pjeset e atij qe tradicionalisht quhet sistem operativ veprojne ne nj hapesire pr prdoruesin (user space). Ne sisteme t tilla sht shume e veshtire t vendosesh nj kufi t qart. do gje qe vepron ne kernel mode sht qartsisht pjese e sistemit operativ, por disa programe qe veprojne jasht kesaj jane pjese t diskutueshme t tij, ose t paktn jane t lidhur ngusht me t. Me ne fund, sipr programeve sistem kemi programet aplikative. Keto programe jane marre ose jane shkruar nga prdoruesi pr t bere t mundur zgjidhjen e problemeve

t ndryshme, si operim me fjalet, llogaritjet inxhinierike apo grumbullimin e informacionit ne nj database.

1.1.

CFARE SHT NJ SISTEM OPERATIV?

Shumica e prdoruesve t kompjuterit kane pasur eksperience me ndonj sistem operativ, por sht shume e veshtire t fiksosh se cfare bn saktsisht nj sistem operativ. Pjese e problemit sht edhe fakti qe sistemi operativ kryen dy funksione qe rrenjsisht nuk kane lidhje me njri tjetrin, zgjerimin e makines (extending the machine) dhe menaxhimin e burimeve (managing the recourses). Prgjithesisht duhet t keni degjuar vetm pr njren nga keto dy funksione. Le ti shohim t dy funksionet me ne detaje. 1.1.1. SISTEMI OPERATIV SI NJ EXTENDED MACHINE Sic kemi prmendur, arkitektura (bashkesia e instruksioneve, organizimi i memorjes, I/O dhe struktura e bus-eve) e shume kompjuterave ne nivelin e gjuhes makine sht e thjesht dhe e njohur nga programi, vecanerisht pr pajisjet I/O. Pr ta konkretizuar me shume ket le t shohim se si behet nj floppy disc I/O duke prdorur chips kontrollues t prshtatshem NEC PD765, t cilt prdoren ne shumicen e kompjuterave personal Intel-based.(Prgjat librit ne do t prdorim termat floppy disk dhe diskret ne vend t njri-tjetrit). PD765 ka 16 komanda, secila e specifikuar me nj ngarkese mes 1 dhe 9 byte-sh ne nj device regjistr. Keto komanda jane pr t lexuar dhe shkruajtur t dhena, pr t levizur krahun e diskut (disc arm) dhe pr t formatuar track-et, si dhe pr t filluar, ndjere, rifilluar, rikalibruar kontrolluesin dhe drive-rat. Komandat me themelore jane lexim dhe shkrim, secila prej tyre kerkon 13 parametra, t paketuar ne 9 bite. Keto parametra specifikojne terma t tille si adresa e bllokut t diskut pr tu lexuar, numri i sektoreve pr track, menyra e regjistrimit ne mediumin fizik dhe cfare t beje me shenjn e adreses se t dhenave t fshira (deleteddata-address-mark). Mos u merzisni ne se nuke kuptoni ket ngatrrese fjalesh, kjo sht pikerisht ceshtja paksa konfidenciale. Kur operacioni prmbushet, chip-i kontrollues rikthen 23 statuse dhe fusha gabimi t paketuara ne 7 byte. Sikur kjo t mos mjaftonte programuesi i floppy diskut duhet gjithashtu t jet vazhdimisht i vemendshem ne se motori sht i ndezur apo i fikur. Ne se motori sht i fikur, ai duhet t ndizet (me nj vonese t gjat startup-i) para se t dhenat t mund t lexohen apo t shkruhen. Motori nuk duhet lene ndezur pr nj kohe t gjat sepse floppy disk demtohet. Ne ket menyre programuesit i duhet t merret me kombinimin me t mire t vonesave t gjata t startupit kundrejt demtimit t floppy disk-ut (dhe t humbase t dhena ne to). Duke mos u futur ne detaje, duhet t jet e qart se nj pjese e mire e programueseve nuk pelqejne t futen thelle ne programimin e floppy disqeve ( ose hard disks, t cilt jane po aq kompleks dhe shume t ndryshem). Ajo cfare do nj programues sht e thjesht, t merret me abstraktsion t nivelit t lart. Ne rastin e disqeve, abstraksion tipik do t ishte prmbajtja e nj bashkesie file-sh me emra ne disk. Secila file hapet pr lexim ose shkrim, pastaj lexohet ose shkruhet dhe ne fund mbyllet. Programi, i cili fsheh t vertetn e hardware-it nga programuesi dhe shfaq nj paraqitje t kendshme dhe t thjesht t file-ve t emeruara, t cilat mund t lexohen apo t

shkruhen sht sistemi operativ. Sistemi operativ ashtu sic fsheh hardware-in nga programuesi dhe jep nj paraqitje t thjesht t orientuar nga file-t, gjithashtu zhduk shume problem si; interrupt-et, kohezusat, menaxhimin e memorjes dhe dukuri t tjera t nivelit t ulet. Ne raste t tilla, sistemi operativ ofron nj abstraksion me t thjesht dhe me t leht pr tu prdoruar se sa ai i ofruar nga hardware-i prkats. Ne ket kendveshtrim, funksioni i nj sistemi operativ sht t prezantoje programuesin me ekulivalenten e nj extended machine ose nj makine virtuale qe sht me e leht pr tu programuar se hardware-i prkats. Menyra se si sistemi operativ arrin ket qellim sht nj histori e gjat, t cilen do ta shohim ne detaja ne vazhdimin e librit. Sa pr ta prmbledhur, sistemi operativ siguron nj shumellojshmeri sherbimesh t cilt merren nga programet duke prdorur instruksione speciale t quajtura thirrje t sistemit (system calls). Me tej ne ket kapitull do t shohim disa nga thirrjet e sistemeve me t zakonshme. 1.1.2. SISTEMI OPERATIV SI NJ RECOURSE MANAGER Koncepti i sistemit operativ si nj sigurim t nj nderfaqeje t thjesht pr prdoruesit e tij sht nj veshtrim top-down. Nj alternative, veshtrimi bottom-up konsiston ne faktin qe sistemi operativ sht pr t menaxhuar t gjitha pjeset e nj sistemi kompleks. Kompjuterat modem prbehen nga proesoret, memoriet, kohuesat, disqet, mous-et, nderfaqesit e network-ut, printerat dhe nj shumllojshmeri e njsive t tjera. Ne pamjen alternative, puna e sistemit operativ sht pr t siguruar nj lokalizim t kontrolluar dhe t rradhitur t proesoreve, memorieve dhe njsive I/O prgjat njsive t programeve t ndryshem konkurues me ta. Imagjinoni se cfare do t ndodhte ne se 3 programe qe veprojne (running) ne t njjtin kompjuter t mund t printonim outputin e tyre ne menyre t njpasnjshme ne t njjtin printer. Rreshtat e pare mund t ishin nga programi i pare, pasardhesit nga program i dyt, pr t vazhduar me ato t programit t tret e keshtu me rradhe.Rezultati do t ishte nj kaos. Sistemi operativ mund t sjelle rregull ne t tilla raste duke cuar t gjithe outputin e destinuar pr ne printer, ne buffer. Kur nj program mbaron, sistemi operativ mund t kopjoje outputin e tij nga disku ku ai ishte ruajtur pr ne printer, nderkohe qe ne t njjtn kohe programi tjetr mund t vazhdoje t gjeneroje me shume output, duke mos marre ne konsiderate faktin qe output nuk po shkon realisht ne printer (akoma). Kur nj kompjuter (ose network) ka prdorues t shumfisht, nevoja pr t menaxhuar dhe mbrojtur memorien, njsite I/O dhe burimet e tjera sht akoma me e madhe, prderisa prdoruesit mund t interferojne t njri-tjetri. Pr me tepr, prdoruesit shpesh kane nevoje t ndajne jo vetm hardware-in por edhe informacionin (file-t, database, etj), gjithashtu. Ne menyre t prmbledhur kjo pamje e sistemit operativ tregon qe detyra e tij kryesore sht t ruaj gjurmet e atij qe po prdor secilin burim, t plotsoj kerkesat e burimeve dhe t nderhyje ne kerkesat konfliktuale nga programe dhe prdorues t ndryshem. Menaxhimi i burimeve prfshin burimet e multipleksuara (sharing) ne dy menyra: ne kohe dhe ne hapesire. Kur nj burim sht i multipleksuar ne kohe programe ose prdorues t ndryshem zene rradhe ne prdorimin e tij. Fillimisht nj prej tyre e prdor burimin, pastaj nj tjetr, e keshtu me rradhe. Pr shembull, vetm me nj CPU dhe

programe qe duan t veprojne, sistemi operativ fillimisht lokalizon CPU ne nj program, dhe pasi ai t ket vepruar pr nj kohe t gjat, nj tjetr merr prdorimin e CPU, pastaj nj tjetr dhe me vone prseri i pari. Prcaktimi se si burimi sht i multipleksuar ne kohe, kush e ka rradhen dhe sa do t zgjase sht detyra e sistemit operativ. Nj shembull tjetr i multipleksimit ne kohe sht ndarja e printerit. Kur pune shumefishe t printerit rradhiten pr nj printer t vetm, duhet marre nj vendim se cfare do t printohet pastaj. Lloji tjetr i multipleksimit sht multipleksimi ne hapesire, ne vend qe konsumatoret t zene rradhe, secili merr nj pjese t burimit. Pr shembull, memorja kryesore normalisht ndahet ndermjet disa programeve vepruese ne menyre qe secili t jet resident ne t njjtn kohe (pr shembull, ne menyre qe t zene rradhe pr prdorimin e CPU). Duke supozuar qe ka memorje t mjaftueshme pr t mbajtur programe t shumefishta sht me eficente t mbash disa programe ne memorie njeheresh se sa nj prej tyre, vecanerisht ne se ai ka nevoje vetm pr nj sasi t vogel t totalit. Sigurisht qe kjo i rrit principet e ndershmerise, mbrojtjes e keshtu me rradhe, gje e cila sht ne dore t sistemit operativ pr ti zgjidhur. Nj burim tjetr i multipleksuar ne hapesire sht hard disku. Ne shume sisteme nj disk i vetm mund t mbaje file nga shume prdorues ne t njjtn kohe. Lokalizimi i hapesires se diskut dhe ruajtja e gjurmeve t atij qe po prdor secilin disk sht nj detyre tipike e menaxhimit t burimeve nga sistemi operativ. 1.2. HISTORIA E SISTEMEVE OPERATIVE

Sistemet operative kane qene ne zhvillim prgjat ketyre viteve. Ne seksionet e meposhtme do t shohim shkurtimisht disa nga me kryesoret. Meqe sistemet operative historikisht kane qene t lidhur ngusht me arkitekturen e kompjuterit ne t cilin veprojne, ne do t shohim ne gjeneratat e sukseshme t kompjuterave, ne menyre qe t shohim se si kane qene sistemet operative. Menyra e t parit t gjeneratave t sistemit operativ ne gjeneratat e kompjuterit sht e patakt, por gjithsesi na krijon disa struktura ku prndryshe nuk do t kishim asnj. Kompjuteri i pare dixhital sht dizenjuar nga matematicieni anglez Charles Babbage (1792 1871). Edhe pse Babbage harxhoi shumicen e jets se tij duke u munduar t ndertoje motorrin analitik (analytical engine) ai nuk mundi kurre t punoje ne t pasi ky ishte shume i varfer mekanikisht dhe teknologjia e ditve t tij nuk mund t prodhonte gomat, mekanizmat dhe rrotat e nivelit qe ai kishte nevoje. E panevojshme t thuhet, motorri analitik nuk k ishte nj sistem operativ. Si nj ane interesante historike, Babbage kuptoi qe do t mund ti duhej nj software pr motorrin e tij analitik, keshtu ai pajtoi ne pune nj grua t re qe quhej Ada Lovelace, e cila ishte e bija e poetit t madh anglez Lord Byron, si programuesen e pare ne bot. Gjuha e programimt Ada, quhet keshtu ne respekt t emrit t saj. 1.2.1. GJENERATA E PARE. VACCUM TUBES DHE PLUGBOARDS Pas prpjekjeve pa sukses t Babbage, sht bere nj progres shume i vogel pr konstruktimin e kompjuterave dixhital deri pas lufts se dyt botrore. Rreth viteve 1940, Howard Aiken ne Harvard, John von Neumann ne institutin e studimeve t avancuar ne Princeton, J. Prespr Eckert dhe William Mauehley ne universitetin e Pennsylvannia dhe Konrad Zuse ne gjermani, ndryshe nga t tjeret t gjithe patn sukses ne ndertimin e

makinave llogaritse. T parat prdoren prforcues mekanike por ishin shume t ngadalta, me cikle kohe t matur ne sekonda. Prforcuesit me vone u zevendesuan me vaccum tubes. Keto makina ishin t medha, duke mbushur dhoma t tra me dhjetra mijera vaccum tubes, por ato ishin akoma miliona here me t ngadalt se kompjuterat personal me t lire ne ditt e sotme. Ne ato dit, nj grup i vetm njerzish dizenjuan, ndertuan, programuan, operuan dhe ruajtn secilen makine. do programim behej ne gjuhe makine, shpesh duke lidhur plugboard-e pr t kontrolluar funksionet kryesore t makines. Gjuhet e programimit ishin t panjohura (edhe gjuha assembly ishte e tille). Sistemet operative ishin t padegjuar. Operimi i zakonshem nga nj prdorues ishte t hynt pr block t kohes, pastaj shkon posht ne dhomen e makines, vendos plugboard-in tij ne kompjuter dhe kalon disa ore duke shpresuar qe asnj nga 20000 apo dicka e tille vaccum tubes t mos digjen gjat veprimit. Virtualisht t gjithe problemet ishin t drejtuara nga llogaritje numerike si studimi i tabelave t sinusit, kosinusit dhe logaritmeve. Ne fillimet e para t 1950, rutina kishte zbuluar dicka me prezantimin epunched cards. Tani ishte e mundur t shkruaje programe ne card dhe t lexoje ato ne vend t prdorimit t plugboard-eve, prndryshe procedura ishte e njjt. 1.2.2. GJENERATA E DYT (1955-65). TRANZISTORET DHE BATCH SYSTEMS Prezantimi i tranzistoreve ne mes t viteve 1950 ndryshoi pamjen rrenjsisht. Kompjuterat u bne t besueshem aq sa mund t prodhoheshin dhe tu shiteshin klientve duke pritur qe t punonin aq gjat sa t kryenin nj pune ne menyre t suksesshme. Fillimisht k ishte nj ndarje shume t qart midis dizenjuesve, ndertuesve, operuesve, programueseve dhe personelitt mirembajts. Keto makina, tani t quajtura mainframe, ishin t mbyllura ne dhoma kompjuterash me ajer t kondicionuar, me staf operatoresh profesional qe i drejtonin. Vetm koorporata t medha si agjensite qeveritare ose universitetet mund t prballonin cmimin multimilion dollaresh. Pr t bere nj pune (job), (pr shembull, nj program ose nj bashkesi programesh), nj programuesi i duhet fillimisht ta shkruaje programin ne nj letr (ne FORTRAN ose ne assembler), pastaj ta shenoje (punch) at ne card. Pastaj ai duhet t sjelle card deck-un ne dhomen e inputeve dhe tia dorezoje nj operatori dhe t shkoje t pije nj kafe derisa outputi t jet gati. Kur kompjuteri mbaron cfaredo lloj pune pr t cilen ishte aktualisht duke punuar, nj operator duhet t shkoje t printeri dhe t nxjerre outputin dhe ta coj at ne dhomen e outputeve, keshtu qe programuesi mund ti mbledh me vone. Pastaj ai duhet t marre nj nga deck cards qe i jane cuar nga dhoma e inputeve dhe t lexoje ne t. Ne qoft se duhet kompiluesi FORTRAN, operatorit i duhet ta marre at ne nj kabinet filesh dhe t lexoje ne t. Shumica e kohes harxhohet nga operatoret duke levizur ne dhomat e makines. Duke patur parasysh cmimin e lart t pajisjes, nuk sht pr tu cuditur qe shume shpejt njerezit kerkuan menyra pr t ulur (zevendesuar) kohen e humbur. Zakonisht zgjidhja me e pranueshme ishte Batch systems. Ideja e kesaj ishte t mblidheshin shume pune ne dhomen e inputeve dhe pastaj t lexoheshin ne nj tape magnetik duke prdorur kompjuter relativisht t vogel, t pakushtueshem, si IBM 1401, i cili ishte shume

i mire ne leximin e cards, ne t kopjuarin e tape-ve dhe ne printimine outputeve, por jo aq i mire ne llogaritjet numerike. T tjera makina me t kushtueshme, si IBM 7094, prdoreshin pr llogaritjet reale. Kjo situat tregohet ne figuren 1.2.

fig 1.2 (nj batch sistem i hershem) Pas nj ore apo dicka e tille grumbullimi punesh, tape-i kthehet ne fillim dhe cohet ne dhomen e makines, ku vendoset ne nj tape drive. Me pas operatori merre nj program special (strgjyshi i sistemit t sotm operativ), i cili lexonte nga tape punen e pare dhe e kryente at. Outputi ne vend qe t printohej shkruhej ne nj tape t dyt. Pas do pune t mbaruar, sistemi operativ lexonte automatikisht punen tjetr nga tape dhe fillonte ta kryente at. Kur t gjithe punet e grumbulluara mbaroheshin, operatori hiqte tape-t input dhe output, ne tape-in input vendoste punet e reja dhe tape-in output e conte ne nj 1401 pr printim offline (jo i lidhur me kompjuterin qendror). Struktura e nj pune tipike input tregohet ne figuren 1.3. Filloi me SJOB card, qe specifikont maksimumin e kohes se veprimit (max run time) ne minuta, numrin qe duhej ngarkuar dhe emrin e programuesit. Pastaj vjen $FORTRAN card, qe i tregon sistemit operativ t marre kompiluesin FORTRAN nga tape-i. Me pas vijonte programi qe duhej t kompilohej dhe pastaj nj SLOAD card, qe drejtonte sistemin operativ t merrte programin objekt t sapo kompiluar.(Programet e kompiluara shpesh shkruheshin ne tape t gervishtura dhe duhet t merreshin sakt). Me pas vjen $RUN card, qe i tregon sistemit operativ t veproje (run) ne program t ndjekur nga t dhenat. Ne fund, $END card shenjon fundin e punes. Keto cards primitive kontrolli ishin paraprijesit e gjuheve moderne t kontrollit t puneve dhe interpretuesve t komandave. Shume kompjutera t gjenerates se dyt prdoreshim shume pr llogarritje inxhinierike dhe shkencore, si zgjidhja e ekuacioneve diferenciale me pjese qe shpesh gjenden ne fizike dhe inxhinieri. Ato programoheshin shume ne FORTRAN dhe ne gjuhen assembly. T tille sisteme operative ishin FMS (The Fortran Monitor System), Sistemi operativ IMB pr 7094.

fig.1.3. Struktura e nj pune tipike FMS

1.2.3. GJENERATA E TRET (1965-1980). ICs DHE MULTIPROGRAMIMI Ne fillim t viteve 1960, shumica e kompjuterave prodhoheshin ne dy linja prodhimi t vecuara dhe t papajtueshme. Ne njren ane kishim kompjutera shkencore t nj shkalle t lart dhe word-oriented, sic sht 7094, t cilt prdoreshin pr llogaritje numerike ne shkence dhe inxhinieri. Ne anen tjetr, kishim kompjuterat komercial, character-oriented, sic sht 1401, t cilt ishin gjeresisht t prdorur pr klasifikimin e tape-ve (shiritit) dhe pr printimin nga bankat dhe kompanit e sigurimit. Zhvillimi dhe mirembajtja e dy linjave plotsisht t ndryshme t prodhimi t ishte shume e kushtueshme pr prodhuesit. Pr me tepr, shume klient t rinj t kompjuterave fillimisht donin nj makine t vogel por me vone kerkonin nj makine me t madhe ne t cilen t mund t vepronin t gjithe programet e meparshem por me shpejt. IBM tentoi ti zgjidhte t dy problemet ne nj t vetm duke prezantuar keshtu System/360. 360 ishte nj seri makinash t pajtueshme ne software duke filluar nga ato ne madhesi 1401 deri ne ato me t fuqishem se 7094. Makinat ndryshonin ne cmim dhe ne performance (memorje maksimale, shpejtsi proesori, numri i pajisjeve I/O t lejuara dhe keshtu). Teorikisht, prderisa shumica e makinave kane t njjtn arkitekture dhe bashkesi instruksionesh, programet e shkruara pr nj makine duhet t veprojne edhe ne makinat e tjera. Vec kesaj, 360 sht dizenjuar ne menyre qe t merret me t dy llogaritjet shkencore dhe komerciale. Nj familje e vetme makinash mund t kenaqe nevojat e t gjithe klientve. Ne vitet ne vazhdim, duke prdorur teknologji me moderne IBM pati sukses t pajtueshme me at t linjs 360, t njohur si serit 370, 4300, 3080 dhe 3090. 360 ishte linja e pare kompjuterike e madhe qe prdori qarqe t integruara (JCs), keshtu qe krijon nj avantazh ne cmim dhe ne performance kundrejt makinave t gjenerates se dyt, t cilt ishin t ndertuar nga transistore individuale. Kjo ishte nj sukses i menjehershem dhe shume shpejt ndertues t tjere t fuqishem adoptuan idene e krijimit t nj familjeje kompjuterash t tille. Pasardhesit e ketyre kompjuterave jane akoma ne ditt e sotme ne prdorim nepr qendra t kompjuterit. Ne ditt e sotme jane

shume t prdorur pr menaxhimin e database-ve t medha (pr shembull, sistemet e rezervimit t linjave ajrore) ose prdoren si servera faqet World Wide Web qe duhet t veprojne me mijera kerkesa pr sekonde. Fuqia me e madhe e idese nj familje papritur u be dobesia me e madhe e tij. Qelimi ishte qe t gjithe software-t, duke prfshire ketu edhe sistemin operativ, OS/360 duhet t punonin ne t gjitha modelet. Duhet t vepronte ne sisteme t vogla, qe shpesh zevendesonin 1401 pr kopjimin e card-ave ne tape dhe ne sisteme t medha, qe shpesh zevendesonte 7094 pr parashikimin e motit dhe llogaritje t tjera t medha. Duhet t ishte mire ne sistemet me pak pjese periferike dhe ne sistemet me shume pjese periferike. Duhej t punonte ne mjedise komerciale dhe shkencore. Mbi t gjitha, duhet t ishte eficente pr gjithe keto prdorime t ndyshme. Nuk k ishte asnj lloj menyre qe IBM (apo ndonj tjetr) t mund t shkruanin nj software pr rrefimin e t gjithe ketyre nevojave konfliktuale. Rezultati ishte nj sistem operativ jashtzakonisht shume kompleks dhe gjigand, me shume mundesi 2 ose 3 here magnitude (madhesi) me t madhe se FMS. Prbehej nga miliona rreshta t shkruar ne gjuhe assembly nga mijera programues dhe prmbante mijera viruse nga mijera lloje t ndryshme virusesh, t cilt kishin nevoje pr nj rrjedhe t vazhdueshme t shkarkimeve t reja ne nj prpjekje pr ti korrigjuar ato. do shkarkim i ri korrigjonte disa viruse dhe sillte t tjere t rinj, keshtu qe numri me shume mundesi qendronte po i njjt. Nj nga dizenjuesit e OS/360, Fred Brooks, me pas shkroi nj liber t mpreht (Brooks, 1996) qe prshkruante eksperiencat e tij me OS/360. Meqe do t ishte e pamundur t prmblidhnim librin ketu, t mjaftohemi duke thene qe kapaku tregon nj tufe bishash kryelarta prehistorike n nj grope t erret. Vec madhesise dhe problemeve gjigant t tij, OS/360 dhe sisteme operative t prodhuar nga prodhues kompjuterash t tjere t ngjashem me keto aktualisht, prmbushen nevojat e arsyeshme t shumices se bleresve. Ato gjithashtu popullarizuan mungesa teknike primare ne sistemet operative t gjenerates se dyt. Me shum mundesi, me e rendesishme nga keto ishte multiprogramimi. Ne 7094, kur puna nderpritej pr t pritur pr kompletimin e operimit t nj tape apo pajisjeve I/O, CPU rri kot deri kur I/O t mbaroje. Me llogaritjet e medha shkencore t lidhura me CPU, I/O sht e rralle, keshtu qe kjo marreveshje e humbur nuk sht domethene se. Me proesimin e t dhenave komerciale, koha e pritjes se I/O shpesh mund t jet 80% ose 90% e kohes totale, keshtu qe duhet t behej dicka qe t shmangt t ndenjurit kot t CPU. Zgjidhje e gjetur ishte ndarja e memories ne disa pjese me nj pune t ndryshme pr secilen pjese, sic tregohet ne figuren 1.4. Nderkohe qe nj pune po pret qe t mbaroje I/O, nj tjetr pune mund t prdore CPU. Ne qoft se mund t mbaheshin pune mjaftueshem ne memorien kryesore ne t njjtn kohe, CPU mund t qendronte e zene pothuajse 100% t kohes. Pr t ruajtur ne memorie shume pune menjehere, kerkon hardware special pr t mbrojtur do pune nga nderhyrjet dhe demtimet e t tjereve, por 360 dhe sisteme t tjere t gjenerates se tret ishin pajisur me ket hardware.

Fig.1.4. nj sistem multiprogramming me tre pune ne memorie. Nj vecori tjetr e rendesishme e sistemeve operative t gjenerates se tret ishte aftsia e leximit t puneve nga karta ne disk sapo ato t arrinin ne dhomen e kompjuterave. Sapo t mbaronte se vepruari nj pune, sistemi operativ mund t marre nj pune t re nga disku ne pjesen qe tani sht bosh dhe kjo pune mund t filloje veprimin. Kjo teknike njihet si spooling (nga operimi i menjehershem periferik ne linj) dhe ishte e prdorur pr output, gjithashtu. Me spooling, 1401 nuk nevojiteshin me dhe mbajtja e tape-ve pothuajse u zhduk. Megjithat sistemet operative t gjenerates se tret ishin t prshtatshem pr llogaritje t medha shkencore dhe veprime me t dhenat komerciale masive, thellesisht ato akoma ishin sisteme batch. Shume prdorues kerkonin akoma ditt e gjenerates se pare kur ato e kishin t gjithe makinen pr vet pr disa ore dhe mund t rregullonin programet e tyre shume shpejt. Me sistemet e gjenerates se tret, koha mes paraqitjes se punes dhe marrjes me pas t outputit ishte disa ore, keshtu vendosja keq e nj presjeje t vetme mund t shkaktoje nj komplikim t tille sa mund t deshtoje dhe programuesi t humbase nj gjysem dit. Kjo deshire pr kohe t shpejt responce (prgjigjeje) hapi rrugen pr timesharing (ndarje kohe), variant i multiprogramimit, ku do prdorues ka nj terminal online. Ne nj sistem timesharing, ne qoft se jane 20 prdorues logged in dhe 17 prej tyre po mendojne, flasin apo po pijne kafe, CPU mund t alokohet vetm pr tre punet qe duan sherbim. Pr derisa njerezit pr rregullimin e programeve zakonisht prdorin komanda t shkurtra (pr shembull, kompilimi i nj procedure pese faqeshe) me shume se komandat e gjata (pr shembull, renditja e nj file me miliona rekorde), kompjuteri mund t siguroje sherbim t shpejt dhe interaktiv (bashkepunues) nj numri prdoruesish dhe mbase mund t punoje ne pune grupi (batch job) ne background kur CPU po rri kot. Sistemi i pare serioz timesharing, CTSS (Compatible Time Sharing System), u zhvillua ne M.I.T. ne nj 7094 t modifikuar. Megjithat timesharing nuk u be vertet e popullarizuar derisa nevojat pr mbrojtje hardware u prhapen shume gjat gjenerates se tret. Pas suksesit t sistemit CTSS, MIT, Bell Labs dhe elektrikut t prgjithshem, pastaj nj prodhues i madh kompjuterash vendosi t nise me zhvillimin e computer utility (leverdi e kompjuterit), nj makine qe do t prballonte qindra prdorues timesharing t menjehershem. Modeli i tyre ishte sistemi elektrik i shprndare, kur nevojitet fuqi elektrike, vendoset nj prize ne mur dhe ne t do t gjendet aq fuqi sa t nevojitet. Dizenjuesit e ketij sistemi, t njohur si MULTICS (Multiplexed Information

and Computing Service), parashikuan nj makine super t madhe qe siguronte fuqi llogaritse pr do kend ne zonen Boston. Ideja qe makinat shume me t fuqishme se mainframe GE-645 do t shiteshin pr mijera dollare, 30 vjet me vone ishte nj trillim shkencor. MULTICS ishte nj sukses i vogel. Kjo ishte e dizenjuar pr t suportuar qindra prdorues ne nj makine pak me shume t fuqishme se nj Intel 386-based PC, ndone se grumbullont shume me shume kapacitet I/O. Kjo nuk sht aq e cmendur sa mund t duket, prderisa njerezit e asaj kohe dinin t shkruanin programe t vogla dhe eficente, aftsi qe me pas sht humbur. Kishte shume arsye qe MULTICS nuk pushtuan botn, arsye jo pak e vogel ishte se ishte shkruar ne PL/1, dhe kompiluesi PL/1 ishte shume vite vone dhe kur ne fund arrinte mezi punonte. Pr me tepr, MULTICS ishte jashtzakonisht ambicioz pr kohen e tij, me shume si motorri analitik i Charles Babbage ne shekullin e nentmbedhjet. Pr t bere t shkurtr nj histori t gjat, MULTICS prezantoi shume ide baze ne literaturen kompjuterike, por kthimi i saj ne nj produkt serioz dhe ne nj sukses komercial ishte shume me e veshtire nga cmund ta priste donjri. Laboratori Bell braktisi projektin dhe elektriku i prgjithshem la tresisht biznesin e kompjuterave. Megjithat, M.I.T. kembnguli dhe prfundimisht mori MULTICS pr t punuar. Ne fund u shit si nj produkt komercial nga kompania qe bleu biznesin e kompjuterave t GEs dhe e instaloi ne rreth 80 kompani t medha dhe universitete ne t gjithe botn. Nderkohe qe numrat e tyre ishin t vegjel, prdoruesat MULTICS ishin shume besnik. Pr shembull, General Motors, Ford dhe agjensia nacionale e sigurimit t shteteve t bashkuara, ne fund t viteve 1990 vetm fiknin sistemet MULTICS, 30 vjet pasi MULTICS ishte shkarkuar (released) Pr momentin, koncepti i nj utiliteti kompjuteri ka deshtuar por ai shume mire mund t kthehet ne formen e servera interneti masivisht t centralizuar me t cilt jane lidhur makinat user dumb (memec, t heshtur), me shumicen e punes qe ndodh ne serverat e medhenj. Motivimi ketu sht qe shumica e njerezve nuk duan t administrojne nj sistem kompjuterik nazeli dhe me nj kompleksitet rrits dhe do t preferonin qe at pune t behej nga nj skuader profesionistsh pr kompanine qe drejton serverin. Ecommerce akoma po zhvillohet ne ket drejtim, me kompani t ndryshme qe drejtojne emaile ne servera mikroproesore me t cilat lidhen makinat e thjeshta t klientve. Prvec mungeses se suksesit komercial, MULTICS pati nj influence t madhe ne sistemet operativ pasues. Ajo sht prshkruar ne (Corbato, 1972; Corbato and Vyssotsky,1965; Daley and Dennis, 1968; Organick, 1972; dhe Saltzer,1974). Ajo akoma ka nj faqe Web aktive www.mulriciaris.org ne t cilen ka shume informacion pr sistemin, dizenjuesit e tij dhe pr prdoruesit e tij. Nj zhvillim tjetr i madhe gjat gjenerates se tret ishte rritje e jashtzakonshme e minikompjuterave, duke filluar me DEC PDP-1 ne 1961.PDP-1 kishte 4K fjale 18biteshe, por pr 5120000 pr makine (me pak se pese prqind e cmimit t nj 7094) shiteshin si hotcakes (shiteshin shume). Pr lloje t vecanta punesh jonumerike, ky ishte pothuaj aq i shpejt sa 7094 dhe i dha fillimin nj industrie t plot t re. Ajo shume shpejt u ndoq nga nj seri PDP-sh t tjera (ndryshe nga familja IBJvTs) duke arritur kulmin ne PDP-11. Nj nga shkencetaret e kompjuterave ne laboratorin Bell qe kishte punuar ne projektin MULTICS.Ken Thompson, me pas gjeti nj minikompjuter PDP-7 qe nuk po

prdorej nga asnj dhe kishte si qellim t shkruant nj version t MULTICS strippeddown dhe me nj prdorues. Kjo pune me vone u zhvillua ne sistemin operativ UNIX, i cili u be i populluar ne botn akademike, me agjensite qeveritare dhe me shume kompani. Historia e UNIX tregohet tjetrkund (pr shembull, Salus, 1994).Ne kapitullin 10 do t japim pjese nga kjo histori.Tani mjaftohuni duke ju thene se ngaqe kodi burim ishte gjeresisht i prdorshem, organizata t ndryshme zhvilluan versionet e tyre t pakonkurueshem qe t conin ne nj kaos. Dy nga versionet e medha t zhvilluara jane System V nga AT&T dhe BSD (Berkeley Software Distribution) nga universiteti i Californise ne Berkeley. Keto gjithashtu kishin variante t vegjel t tyre. Pr t bere t mundur shkrimin e nj programi qe mund t veproje ne do sistem UNIX, IEEE zhvilloi nj standart pr UNIX, t quajtur POSIX, qe suportohet nga shumica e versioneve UNIX. POSIX prcakton nj nderhyrje minimale t thirrjeve sistem qe duhet t prkrahet nga sistemet UNIX konformant. Ne fakt, edhe disa sisteme t tjere operativ tashme suportojne (prkrahin) nderhyrjen POSIX. Si me tutje, sht mire t prmendet qe ne 1987, autori leshoi nj klonim t vogel t UNIX, t quajtur MINIX, qe prfshint suportimin e POSIX. sht i prdorshem nj liber i cili prshkruan oprimet e brendeshme t tij dhe liston kodet burim ne nj appendix (Tanenbaum and Woodhull, 1997), MINIX gjendet free (duke prfshire kodet burim) ne internet ne URL www.cs.vu.nl/-ast/minix.html Deshira pr prodhimin e nj versioni free t MINIX beri qe studenti Finlandez, Linus Torvalds, t shkruant LINUX. Ky sistem u zhvillua ne MINIX dhe fillimisht suportont disa dukuri t ndryshme t MINIX (pr shembull, sistemi i filave MINIX).Edhe pse pas shume shtrirjesh ne shume menyra ai akoma ruan nj pjese t madhe t struktures themelore si MINIX dhe UNIX. Shumica e atyre cfare do t thuhet pr UNIX, prgjigjet edhe pr System V, BSD, MINIX, Linux dhe versioneve t tjera, gjithashtu edhe klonimeve t UNIX.

1.2.4. GJENERATA E KATRT (1980-SOT) PERSONAL COMPUTERS Me zhvillimin e qarqeve LSI (Large Scale Intgratin), chipe qe prmbajne mijera tranzistore ne nj centimetr katror silikoni, linden PC (personal computers). Ne terma arkitekturore, personal computers (fillimisht t quajtur microcomputers), nuk ishin shume t ndryshem nga minikompjuterat e klases PDP-11, por ne terma t cmimit ishin plotsisht t ndryshem. Ne nj departament, ne nj kompani apo universitet ku mundesia pr t pasur nj minikompjuter sht h, chipi mikroproesor beri t mundur qe pr n individ t kishin h prej tyre nj personal computer t tyrin. Ne vitin 1974, kur doli Intel me 8080, CPU i pare 8-bitesh pr qellime t prgjithshme, duhej nj sistem operativ pr 8080 ne menyre qe t jet i mundur testimi i tij. Intel ia kerkoi qe t shkruant nj t tille, njrit prej konsulentve t tij, Gary Kildall.Fillimisht Kildall dhe nj shok i tij ndertuan nj kontrollues pr floppy disqet e rinj, Shugarl Associats 8-inch dhe bashkuan floppy disk-un me 8080, duke krijuar keshtu mikrokompjuterin e pare me disk. Me pas Kildall shkroi pr t nj sistem operativ disk-based t quajtur CP/M (Control Program for Microcomputers). Intel duke mos menduar se keta mikrokompjutera kishin shume t ardhme, kur Kildall kerkoi pr t

drejtat e CP/M, Intel pranoi kerkesen e tij. Me pas Kildall formoi nj kompani t tijen pr t ndihmuar pr zhvillimin dhe shitjen e CP/M, Digital research. Ne 1977, Digital Research rishkruan CP/M t tille qe ishte e prshtatshme t vepronte (run) ne shume minikompjutera qe prdornin 8080, Zilog Z80h dhe t tjere chipe CPU. Shume programe aplikative u shkruan qe t vepronin ne CP/M duke bere keshtu t dominont botn mikrollogaritse pr rreth 5 vjet. Ne fillim t viteve 1980, IBM dizenjoi PC IMB dhe kerkoi pr software qe t vepronte ne t. Njerez t IBM kontaktuan Bill Gats pr licensen e interpretuesit BASIC t tij. Gjithashtu i kerkuan atij ne se njiht ndonj sistem operativ qe t vepronte ne PC, Bill Gats u sugjeroi atyre t kontaktonin Digital Research, kompanine dominuese t sistemeve operative t asaj kohe. Kildall, duke bere sigurisht qe t ishte vendimi me i gabuar ne biznes qe njihet ne histori, refuzoi t takohej me IBM duke i derguar nj varts madje. Pr me keq, avokati i tij nuk pranoi as t firmost marreveshjen e mbyllur t IBM, duke mbuluar PC akoma t paprezantuar. Si pasoje, IBM i kerkoi prseri Gats ne se ai mund ti siguronte nj sistem operativ. Ne kohen qe IBM u kthye prseri tek Bill Gats, ky i fundit mori vesh qe nj ndertues lokal kompjuterash, Seattle Computer Products, kishte nj sistem operativ t prshtatshem, DOS (Disk Operating System). Ai iu drejtua atyre dhe u kerkoi ta blint (gjoja 50000 $), t cilen ata e pranuan leht. Pastaj Gats i ofroi IBM paketn DOS/BASIC t cilen IBM e pranoi. IBM dont disa modifikime t caktuara, keshtu Gats punesoi personin qe shkroi DOS, Tim Palerson si nj nenpunes t ri t kompanise t tij, Microsoft, qe ti bnte keto modifikime. Sistemi i korrigjuar mori emer tjetr, MS-DOS (Microsoft Disk Operating System) dhe shume shpejt dominoi tregun e PC IBM. Nj faktor kryesor ishte vendimi i Gats (ne prapaveshtrim, shume i zgjuar) pr t shitur MSDOS kompanive kompjuterike pr tu lidhur me hardware-in e tyre, krahasuar kjo me prpjekjen e Kildall pr t shitur CP/M prdoruesve t fundit (end users). Ne vitin 1983 IBM PC/AT doli me CPU Intel 80286. MS-DOS ishte prhapur tashme dhe CP/M ishte ne ditt e fundit. Me vone MS-DOS u prdor gjeresisht ne 80386 dhe 80486. Megjithese versioni fillestar i MS-DOS ishte i thjesht, versionet pasues prfshine dukuri me t avancuara duke prfshire shume t marra nga UNIX. (Microsoft ishte i informuar pr UNIX, madje gjat viteve t para t kompanise shist versione t tij pr mikrokompjutera, t quajtura XENI). CP/M, MS-DOS dhe sisteme t tjera operative pr mikrokompjuterat e hershem ishin t gjithe t bazuar ne shtypjen e komandave nga tastjera. Kjo prfundimish ndryshoi ne saj t kerkimit t bere nga Doug Engelbart, ne institutin e kerkimeve ne Stanford ne vitet 1960. Engelbart krijoi GUI (Graphical User Inteface), qe plotsoi me windows, icons, menus dhe mouse. Keto ide ishin t adoptuara nga kerkues ne Xerox PARC dhe t prfshira ne makinat qe ndertonin. Nj dit, Steve Jobs qe shpiku kompjuterin Apple ne garazhin e tij, vizitoi PARC, pa nj GUI, dhe menjehere kuptoi vlerat e tij potnciale, dicka qe menaxhimi i famshem i Xerox se beri (Smith dhe Alexander, 1988). Pastaj Jobs bashkoi nj GUI me nj Apple. Ky projekt na coi tek Lisa, qe ishte shume e shtrenjt dhe nga ana tregetare deshtoi. Prpjekja e dyt e Jobs, Macintosh i Apple-it, ishte nj sukses i madh jo vetm se ishte me i lire se Lisa, por ishte gjithashtu nj user shoqeror (user friendly), qe do t thot qe ishte jo vetm pr prdorues qe nuk dinin fare rreth kompjuterave, por edhe pr ata qe nuk kishin ndermend t mesonin dicka.

Kur Microsoft vendosi t ndertont nj pasues t MS-DOS, u influencua shume nga suksesi i Macintosh-it. Ai prodhoi nj sistem t GUI-based t quajtur Windows, qe fillimisht veproi ne deget e MS-DOS. Pr rreth 10 vjet, nga 1985-1993, windows ishte nj mjedis grafik ne krye t MS-DOS. Sidoqoft, duke filluar qe ne 1995 doli nj version i lire (freestanding) i Windows, Windows 95, qe prfshint shume dukuri t sistemit operativ ne t, duke prdorur bazat e sistemit MS-DOS vetm qe programet e vjetra MSDOS t boot-oheshin dhe t vepronin (run). Ne 1998 doli nj version pak i modifikuar i ketij sistemi, i quajtur Windows 98. Sidoqoft, Windows 95 dhe Windows 98 se bashku, akoma prmbajne nj sasi t madhe t Intel 16-bit gjuhe assembly. Nj sistem tjetr operativ Microsoft sht Windows NT (New tchnology), i cili sht i pajtueshem me Windows 95 ne nj nivel t caktuar. Dizenjuesi kryesor i Windows NT ishte David Cuttr, qe ishte gjithashtu nj prej dizenjuesve t sistemit operativ VAX/VMS, keshtu qe disa ide t VMS jane t pranishme edhe ne NT. Microsoft priste qe versioni i pare i NT t shfarost MS-DOS dhe t gjitha versionet e tjera t Windows meqe ai ishte nj sistem superior me rendesi, por nuk e beri nj gje t tille.Vetm me Windows NT 4.0 me ne fund ia doli ne nj menyre t mire, vecanerisht ne network-un e koorporatave.Versioni i 5 i Windows NT u quajt Windows 2000, i cili doli ne fillim t vitit 1999.U krijua me qellimin qe t ishte pasuesi i Windows 98 dhe Windows NT 4.0. Ky gjithashtu nuk ia doli mbane plotsisht keshtu qe Microsoft doli akoma me nj version tjetr t Windows 98 t quajtur Windows Me (Millenium edition). Nj tjetr pretndues kryesor ne botn e personal computers ishte UNIX (dhe derivatt e tij t ndryshme). Unix sht me i fuqishmi ne workstations dhe ne kompjuterat e tjere high-end si network servers. Ky sht popullarizuar vecanerisht ne makinat e fuqizuara nga chip-e RISC me performance t lart. Ne kompjuterat pentium-based, Linux po behet nj alternative e populluar e Windows pr studentat dhe pr shume prdorues korporatash. (Prgjat librit do t prdorim termin Pentium pr tiu referuar Pentium I, II, III dhe IV). Megjithese shume prdorues UNIX, vecanerisht programues me eksperience, preferojne nj nderfaqe command-based se nj GUI, pothuajse t gjithe sistemet UNIX suporojne sistem me n window i quajtur sistem X Windows, i prodhuar nga MIT. Ky sistem trajton menaxhimin baze window, duke lejuar prdoruesit t krijojne, fshijne, levizin dhe t rivendose dritaret (windows) me nj mouse. Shpesh nj GUI i kompletuar, sic sht Motif, sht i prdorshem pr veprimin e tij ne krye t sistemit X Windows duke i dhene UNIX nj paraqitje pak a shume si Machintosh apo Microsoft Windows, pr ata prdorues t tij qe duan nj gje t tille. Nj zhvillim intresant qe filloi ne mes t viteve 1980 ishte rritja e network-eve (rrjetve) t personal computers ku vepronte sistemi operativ, network operating systems dhe ai distributed systems (sistemet e shprndara) (Tanenbaum dhe Van Sten, 2002). Ne nj sistem operativ network, prdoruesit jane ne dijeni pr ekzistencn e shume kompjuterave dhe mund t futen (log in) pr t levizur dhe kopjuar file-t nga njra makine t tjetra. Ne nj grup makinash vepron nj sistem operativ lokal i ketij grupi dhe ka gjithashtu prdoruesin (prdoruesat) e vet lokal. Sistemet operativ network thellesisht nuk jane t ndryshem nga sistemet operativ single - proessor (proesor t vetm). Duket qart qe ato kane nevoje pr nj kontrollues t nderfaqes se networkut dhe disa software t nivelit t ulet qe ta drejtojne at, aq mire sa

programet t arrijne login dhe aksesimin e fileve, por keto gjera shtese nuk e ndryshojne strukturen baze t sistemit operativ. Nj sistem operativ i shprndare, ne dallim sht i tille qe shfaqet t prdoruesit e tij si nj sistem tradicional uniproessor, edhe pse ai aktualisht sht i prbere nga shume proesore.Prdoruesit nuk kane pse t jene ne dijeni se ku veprojne (run) programet e tyre dhe se ku jane t vendosur file e tyre, t gjitha keto do t behen automatikisht dhe ne menyre eficente nga sistemi operativ. Sistemet operative e verteta t shprndara kerkojne me shume se thjesht shtimin e nj kodi t vogel ne sistemin operativ uniproessor, sepse sistemet e shprndara dhe t centralizuara ndyshojne ne rruge kritike. Sistemet e shprndare, pr shembull, shpesh lejojne aplikime qe t veprojne ne disa proesor ne t njjtn kohe, keshtu duke kerkuar algoritma skedulimi proesoresh me shume kompleks, ne menyre qe t optimizojne masen e paralelizmit. Vonesat e komunikimit ne network shpesh do t thone qe keto (dhe t tjere) algoritma duhet t veprojne me informacion t pakompletuar, t vjetruar madje dhe jokorrekt. Kjo situat thellesisht sht e ndryshme nga nj sistem single-proessor ne t cilin sitemi operativ ka informacion t kompletuar pr gjendjen e sistemin.

1.2.5

ONTOGENY RECAPITULATES PHYLOGENY

Pas botimit t librit t Charles Darvin Origjina e Specieve, zoologjisti gjerman Ernst Haeckel konstatoi se Ontogeny rikapitulon Phylogeny. Me ket ai dont t thosht se zhvillimi i nj embrioni (ontogeny) prserit (recapitulats) evoluimin e species (phylogeny). Me fjele t tjera, pas fertilizimit, nj veze njriu shkon nepr etapa pr tu bere peshk, nj derr dhe keshtu me rradhe prpara se t kthehet ne nj bebe njri. Biologe modern e konsideruan ket si nj simplifikim t madh, por ajo akoma ka nj fare t vertet ne t. Dicka analoge me ket ka ndodhur edhe ne industrine kompjuterike. do specie e re (mainframe, minicompjutr, personal computer, embedded computers, smart cards etj) duket sikur po shkon drejt zhvillimit qe kane bere paraardhesit e tyre. Mainframet e pare ishin programuar plotsisht ne gjuhe assembly. Edhe programet shume komplekse, sic jane kompilatoret dhe sistemet operative, ishin shkruar ne assembler. Ne at kohe dolen ne skene minikompjuterat. FORTRAN, COBOL dhe gjuhe t tjera programimi t nivelit t lart zakonisht prdoreshin nepr mainframe, por asnj nga minikompjuterat e rinj nuk programoheshin ne assembler (pr shkak t memories). Fillimisht kur u shpiken mikrokompjuterat (personal computers t hershem), ato gjithashtu programoheshin ne assembler edhe pse ne at kohe minikompjuterat programoheshin ne gjuhe programimi t nivelit t lart. Edhe kompjuterat palmtop gjithashtu filluan me kode assembly por shume shpejt levizen ne gjuhe programimi t nivelit t lart (prgjithesisht sepse punet zhvilluese beheshin ne makina t medha). E njjta gje sht e vertet pr smart cards. Tani le t shohim sistemet operative. Mainframet e pare nuk kishin mbrojtje hardware-ike dhe nuk suportonin multiprogramimin, keshtu qe ne to vepronin sisteme operative t thjesht qe merrej vetm me nj program manualisht t ngarkuar ne nj kohe t caktuar. Me vone me sigurimin e hardware-it, sistemet operative suportonin t merreshin me shume programe njeheresh, dhe me vone kishin aftsi t plota timesharing.

Ne fillimet e shfaqjes se minikompjuterave, ato gjithashtu nuk kishin mbrojtje hardware-ike dhe ne to vepronte nj program manualisht i ngarkuar ne nj kohe t caktuar, edhe pse ne at kohe multiprogramimi ishte i vendosur mire ne botn e mainframeve. Gradualisht ato siguruan mbrojtje hardware-ike dhe aftsi qe dy ose me shume programe t vepronin ne t njjtn kohe. Gjithashtu edhe mikrokompjuterat e pare ishin t aft qe ne to t vepronte nj program i vetm ne nj kohe t caktuar, por me vone edhe keto siguruan aftsi t multiprogramimit. Ne t njjtn menyre ndodhi edhe me smart cards dhe kompjuterat palmtop. Disqet fillimisht u shfaqen ne mainframet e medha, pastaj ne minikompjutera, mikrokompjutera dhe keshtu me rradhe. Edhe ne ditt e sotme smart cards nuk kane harddisk, por me ardhjen e flash ROM, ato se shpejti do t kene t njjtn ekuivalence me t. Kur u shfaqen disqet ne fillim u zhvilluan shpejt sistemet e thjeshta file. Ne CDC 6600, mainframe me i fuqishem ne bot gjat viteve 1960, userat e sistemeve file kane aftsi pr krijimin e fileve dhe me pas e deklarojne at t prhershme, qe do t thot qe ai qendron ne disk edhe pas mbylljes se programit t krijuar. Pr aksesimin e nj file t tille me vone, nj program duhet t lidhet me nj komande speciale dhe t jape passwordin e tij (e plotsuar kur file u be i prheshem). Ne fakt, ishte nj direktori e vetme e ndare nga t gjithe prdoruesit. Kjo ishte pr t evituar konfliktet e emrave t fileve. Sistemet e fileve t minikompjuterave t hershem kishin nj direktori t vetme t ndare nga t gjithe prdoruesit dhe keshtu edhe me sistemet file t hershem mikrokompjuter. Memorja virtuale (aftsia pr veprimin e me shume programeve se ne memorien fizike) pati nj zhvillim t ngjashem. Fillimisht u shfaq ne mainframe, minikompjutera, mikrokompjutera dhe gradualisht filloi ne sisteme t vogla e me t vogla. Networking kishte nj histori t ngjashme. Ne t gjitha rastet, zhvillimi i software u diktua nga teknologjia. Mikrokompjuterat e pare, pr shembull kishin pak a shume 4KB memorie dhe skishin mbrojtje hardware-ike.Gjuhet e nivelit t lart dhe multiprogramimi ishin shume, qe nj sistem i vogel, i tille t merrej me to. Meqe mikrokompjuterat u shnderruan ne personal computers modern, ato siguruan hardware-in e nevojshem dhe me vone software-in e nevojshem t merret me dukuri me t avancuara. Duket se ky zhvillim edhe prvitet tjera qe vijne.Gjithashtu fusha t tjera mund t kene t njjtn rrjedhe rimisherimi, por ne industrine e kompjuterave duket se ndodh me shpejt. 1.3. LLOJET E SISTEMEVE OPERATIVE E gjitha kjo histori dhe ky zhvillim na kane lene nj shumellojshmeri t gjere sistemesh operative, prej t cileve jo t gjithe jane gjeresisht t njohur.Ne ket seksion do t prekim shkurtimisht shtat prej tyre. Me vone gjat librit do t shohim disa prej ketyre llojeve t ndryshme t sistemeve operative. 1.3.1. SISTEMET OPERATIVE MAINFRAME Ne skajin me t lart sht sistemi operativ pr mainframe, ato kompjutera me madhesi sa nj dhome qe akoma gjenden ne koorporatat kryesore t qendrave t t dhenave. Keto kompjutera e dallojne veten e tyre nga personal computers ne terma t kapacitetit t tyre I/O. Nj mainframe me 1000 disqe dhe mijera gigabyte t dhena nuk

sht i pazakonte. Nj personal kompjuter me keto t dhena me t vertet qe do t ishte i vjetr.Mainframe gjithashtu po bejne dicka ne prgjigje t serverave Web, servera pr faqe tregetare elektronike t nj shkalle t lart dhe servera pr transaksionet biznes-me biznes. Sistemet operative pr mainframe jane veshtiresisht t orientuar drejt proesimit t shume puneve njeheresh, shumica e t cilave duan madhesi t madhe I/O. Ato ne menyre tipike ofrojne tre lloje t ndryshme sherbimesh: batch (grumbull, tufe), transaction proessing (prpunimet transaksion) dhe timesharing. Nj sistem batch sht nj sistem qe prpunon punet rutine. Prpunimi claims ne nj kompani sigurimi behet ne menyre tipike nga sistemet batch. Sistemet e prpunimit transaksion merren me numra t medhenj t kerkesave t vogla, pr shembull, prpunimi check (kontrollo) ne nj banke apo rezervimet e linjave ajrore. do njsi pune sht e vogel, por sistemi duhet t merret me qindra ose mijera pr sekonde. Sistemet timesharing lejojne shume prdorues qe t kryejne pune ne nj kompjuter njeheresh, si ndertimin e nj database t madhe. Keto funksione jane t lidhur ngusht: Sistemet operative mainframe shpesh i bejne t gjitha keto. Nj shembull i sistemit operativ mainframe sht OS/390, pasardhes i OS/360. 1.3.2. SISTEMET OPERATIVE SERVER Nj nivel me posht jane sistemet operative server.Ato veprojne ne servera, t cilt prdorin shume personal computers, workstations, ose mainframe.Ato i sherbejne shume prdoruesve ne t njjtn kohe mbi nj rrjet dhe lejojne prdoruesit t ndajne burimet e hardware-it dhe software-it.Serverat mund t sigurojne sherbim print, sherbim file, apo sherbim Web.Krijuesit e internetit kane shume makina server qe t suportojne klientt e tyre dhe Web site prdorin servera pr mbledhjen e faqeve Web (Web pages) dhe t merren me kerkesat qe vijne. Sistem operativ tipik server sht UNIX dhe Windows 2000. Gjithashtu edhe Linux po fiton vend pr servera. 1.3.3. SISTEMET OPERATIV MULTIPROESSOR Nj menyre e zakonshme pr t marre fuqi llogaritse t lart sht t lidhim shume CPU ne nj sistem t vetm. Duke u varur saktsisht se me cfare jane lidhur dhe cfare ndajne, keto sisteme quhen kompjutera paralel, multikompjutera ose multiproesor. Ata duan sisteme operative speciale, por shpesh keto jane variacione ne sistemet operative server, me dukuri speciale komunikimi dhe lidhjeje. 1.3.4. SISTEMET OPERATIVE PERSONAL COMPUTERS Kategoria tjetr sht sistemet operative personal computers. Puna e tyre sht krijimi i nj nderfaqeje pr nj prdorues t vetm. Ato jane gjeresisht t prdorur pr prpunimin e fjales (word proessing), spreadsheets dhe aksesim interneti. Shembull pr ket jane windows 98, Windows 2000, sistemi operativ Macintish, dhe Linux. Sistemet operative Personal computers jane gjeresisht t njohur, keshtu qe duhet nj prezantim shume i shkurtr i tyre. Ne fakt, shume njerez nuk jane ne dijeni t ekzistnces t sistemeve t tjere.

1.3.5. SISTEMET OPERATIV REAL-TIME (KOHE REALE) Nj lloj tjetr i sistemeve operativ sht ai real-time. Keto sisteme jane karakterizuar duke pasur kohen si parametr kyc. Pr shembull, ne sistemet e kontrollit t proesit industrial, kompjuterat real-time duhet t mbledhin t dhena rrethe proesit t prodhimit dhe ta prdore at pr t kontrolluar makinat ne fabrike. Shpesh takohen deadline (viza qe nuk duhet t kalohen). Pr shembull, ne qoftse nj makine leviz posht nj rresht assembly, veprime t caktuara ndodhin ne momente t caktuara, ne qoft se nj robot saldimi, saldon shume heret apo shume vone, makina do t shkatrrohet. Ne qoft se veprimi duhet absolutisht t ndodhe ne nj kohe t caktuar, kemi nj sistem real-time hard. Nj tjetr lloj sistemi real-time sht sistemi real-time soft, ne t cilin mungesa e nj deadline rastesor sht e pranueshme. Audio dixhitale apo sistemet multimedia bien ne ket kategori. Sisteme t njohur real-time jane: VxWorks dhe QNX.

1.3.6. SISTEMET OPERATIV EMBEDDED (TE NDERFUTURA) Duke vazhduar posht ne sisteme t vogla e akoma me t vogla, vijme ne kompjuterat Palmtop dhe ne sistemet embedded. Nj kompjuter Palmtop ose ndryshe nj PDA (Personal Digital Assistant) sht nj kompjuter i vogel qe mund t qendroje ne nj xhep kemishe dhe kryen nj numer t vogel funksionesh, si nj liber elektronik adresash. Sisteme embedded veprojne ne kompjutera ku pajisjet kontrolluese prgjithesisht nuk mendohen si kompjutera, si pr shembull, TV sets, furre mikrovale, dhe telefonat mobile. Keto shpesh kane karakteristika t sistemeve real-time por gjithashtu kane madhesi, memorie dhe frenim fuqie (power restriction) qe i bejne ato speciale. Shembuj pr sisteme operative t tille kemi PalmOS dhe WindowsCE (Consumer Electronics)

1.3.7. SISTEMET OPERATIVE SMART CARD Sistemi me i vogel operativ vepron ne smart cards, t cilt jane pajisje me madhesine e nj karte krediti qe prmbajne nj chip CPU. Ata kane nj fuqi prpunimi shume t ashpr dhe shtrengese memorieje. Disa prej tyre mund t kryejne vetm nj funksion, si pagesat elektronike, por t tjere mund t kryejne shume funksione ne t njjtn smart card. Shpesh keto jane sisteme proprietar. Disa smart cards jane t orientuar ne Java. Ajo cfare kjo do t thot sht qe ROM ne smart card ka nj interpretues pr makinen virtuale Java (Java Virtual Machine, JVM). Programe t vogla ne Java downloadohen ne card dhe me pas interpretohen nga JVM. Disa nga keto card mund t merren me shume programe ne Java ne t njjtn kohe, duke cuar keshtu ne multiprogramim dhe ne nevojen pr skedulim. Menaxhimi dhe mbrojtja e burimeve gjithashtu behet nj problem kur dy ose me shume programe jane prezent ne t njjtn kohe. Me keto probleme duhet t merret sistemi operativ prezent ne card.

1.4.

RISHIKIMI I HARDWARE KOMPJUTERIK

Nj sistem operativ sht i lidhur ngusht me hardware-in e kompjuterit ku ai vepron. Ai tregon bashkesine e instruksioneve t kompjuterit dhe menaxhon burimet e tij. Qe t punoje, ai duhet t dije nj pjese t madhe t hardware-it, t paktn si shfaqet hardware te programuesi. Konceptualisht, nj personal computer i thjesht mund t konspektohet ne nj model t ngjashem me at t Fig.1.5.CPU, memoria, pajisjet I/O jane t gjithe t lidhur nga nj bus sistem dhe komunikojne me njri-tjetrin me anen e ketij bus-i. Personal computers modern kane nj strukture me komplekse, duke prfshire ketu edhe shume bus-e, t cilt do ti shohim me vone. Sa pr tani ky model sht i mjaftueshem. Ne seksionet e ardhshme ne do t rishikojme shkurtimisht keta komponent dhe do t ekzaminojme disa prej tyre, ata t cilt projektuesit e sistemeve operative jane t interesuar.

1.4.1. PROESORET CPU sht truri i kompjuterit. Ai merre instruksione nga memoria dhe i ekzekuton ata. Cikli baze i do CPU sht marrja e instruksionit t pare nga memoria, t dekodoje at pr t prcaktuar tipin dhe operandet e tij, t ekzekutoje at dhe pastaj marrja, dekodimi, ekzekutimi i instruksioneve pasues. Ne ket menyre kryhen programet. do CPU ka nj bashkesi specifike instruksionesh qe ai mund t ekzekutoje. Keshtu nj Pentium nuk mund t ekzekutoje programet SPARC dhe nj SPARC nuk mund t ekzekutoje programet Pentium. Ngaqe aksesimi i memorjes, pr t marre nj instruksion apo nj fjale data zgjat me shume se ekzekutimi i nj instruksioni, t gjithe CPU prmbajne disa regjistra ne brendesi t tyre, pr t mbajtur variablat kryesore dhe rezultatet paraprake. Keshtu bashkesia e instruksioneve prgjithesisht ka instruksione pr

t marre nj fjale nga memoria ne regjistr, dhe pr t ruajtur nj fjale nga regjistri ne memorie. Instruksione t tjere kombinojne dy operanda nga regjistrat, memoria apo t dy ne nj rezultat, si mbledhja e dy fjaleve dhe ruajtja e rezultatit ne nj regjistr apo ne memorie. Vec regjistrave t prgjithshem t prdorur pr t mbajtur variablat dhe rezultatet paraprake, shumica e kompjuterave kane disa regjistra speciale qe jane t dallueshem pr programuesin. Nj nga keto sht numeruesi i programeve (program counter), qe mban adresen e memories t instruksionit pasardhes qe do t merret. Pasi ai instruksion sht marre, program counter shenjon pasardhesin e tij. Nj tjetr regjistr sht stack pointer, qe shenjon ne krye t stack-ut aktual ne memorie. Stack prmban nj frame pr do procedure qe ka hyre por akoma nuk ka dale. Nj frame stack i procedures mban keto parametra input, variabla lokale, variabla temporan qe nuk mbahen ne regjistr. Akoma nj tjetr regjistr sht PSW (Program Status Word). Ky regjistr prmban bitin e kodit kusht, qe vendosen instruksione krahasimi, prioritet i CPU, mode (user apo kernel), dhe disa bite t tjere kontrolli. Programet user mund t lexojne t plot PSW, por ne menyre tipike mund t shkruajne vetm disa nga fushat e tij. PSW luan nj rol t rendesishem n thirrjet sistem dhe I/O. Sistemi operativ duhet t jet ne dijeni t t gjithe regjistrave. Kur multipleksohet ne kohe CPU, sistemi opeartiv shpesh do t ndaloje programin vepruese pr t restartuar nj tjetr. do here qe ndalon nj program veprues, sistemi operativ duhet t save-je t gjithe regjistrat keshtu qe ata mund t ruhen kur programi t veproje prseri me vone. Pr t rritur performancen, projektuesit e CPU kane lene modelin e thjesht t marrjes, dekodimit dhe ekzekutimit t nj instruksioni ne nj kohe. Shume CPU moderne kane aftsi pr ekzekutimin e me shume se nj instruksioni ne t njjtn kohe. Pr shembull, nj CPU mund t ket t ndare njsite e marrjes, dekodimit dhe ekzekutimit keshtu qe nderkohe qe po ekzekutohet instruksioni n, mund t dekodoje instruksionin n+1 dhe t marre instruksionin n+2. Nj organizim i tille quhet pipeline dhe ilustrohet ne fig.1.6(a) pr nj pipeline me tre stade. Pipeline me t gjat jane t zakonshem, ne shumice e projektimeve pipeline, menjehere qe pipeline merret ne pipeline, ai duhet t ekzekutohet. Pipeline u shkakton shkruesve t kompiluesit dhe shkruesve t sistemit operative dhimbje koke sepse ato u tregojne atyre kompleksitett e makines ne t cilen ndodhen.

Nj projektim akoma me i avancaur se pipeline sht nj CPU superscalar, e treguar ne fig 1.6 (b). Ne ket projektim, shume njsi ekzekutimi jane prezent, pr shembull, nj pr arithmetik integer, nj pr arithmetike me presje notuese dhe nj pr opracionet Booleane. Dy ose me shume instruksione merren njeheresh, dekodohen dhe hidhen ne nj buffer mbajts deri sa t ekzekutohen. Kur nj execution unit sht i lire sheh ne bufferin mbajts ne se ka ndonj instruksion qe ai mund ta marre, dhe ne qoft se ka e merr instruksionin nga bufferi dhe e ekzekuton at.Nj implikim i ketij projektimi sht se instruksionet e programit shpesh nuk ekzekutohen sipas rradhes.Pr pjesen me t madhe, i takon hardware t siguroje qe rezultati i prodhuar sht i njjt me at qe do t kishte bere implementimi sekuencial, por, sic mund t shohim, nj sasi e merzitshme e kompleksitetit sht ngecur ne sitemin operativ. Shumica e CPU, duke prjashtuar ato me t thjeshtat, t prdorura ne sistemet embedded kane dy mode, moden kernel dhe at user, sic sht prmendur dhe me pare. Zakonisht nj bit ne PSW kontrollon moden. Gjat veprimit t moden kernel, CPU mund t ekzekutoje do instruksion ne bashkesine e tij t instruksioneve dhe t prdore do njsi hardware-ik. Sistemi operativ vepron ne mode kernel, duke i dhene t drejt pr t gjithe hardware-in. Ne ndryshim, programet user veprojne ne mode user, qe lejon vetm nj nenbashkesi t instruksioneve t ekzekutohen dhe nj nenbashkesi t njsive t prdoren. Prgjithesisht, t gjithe instruksionet duke prfshire mbrojtjen I/O dhe t memories jane t palejuara ne mode user. Gjithashtu edhe vendosja e bitit t PSW ne kernel mode sht e ndaluar. Pr t marre sherbime nga sistemi operativ, nj progarm user duhet t beje nj thirrje sistemi (system call), e cila si t themi ze ne gracke kernelin dhe kerkon sistemin operativ. Instruksioni TRAP ndryshon nga moda user ne at kernel dhe fillon sistemin operativ. Kur puna prfundon, kontrolli kthehet t programi user t instruksioni qe vjen pas thirrjes sistem. Detajet e proesit t thirrjeve sistem do ti shpjegojme me vone ne ket kapitull. Si nj shenim ne tipografi, ne do t prdorim fontin Helvetica me shkronja t vogla pr t dalluar thirrjet sistem ne tekstin veprues, si kjo: sht e rendesishme t themi se ka trape t tjera vec atyre t instruksioneve pr ekzekutimin e nj thirrjeje sistem. Shumica e trapeve t tjere shkaktohen nga hardware

pr t lajmeruar situata prjashtuese si prpjekjen pr t pjestuar me 0 apo nj underflow t presjes notuese. Ne do rast sistemi operativ merr kontrollin dhe duhet t vendose cfare t beje. Disa here programi duhet t prfundoje me nj error. Here t tjera error-i mund t injorohet (nj numer i nenrrjedhur mund t vendoset 0). Ne fund, kur programi ka shpallur ne advancim se kerkon t merret me kondicione t llojeve t caktuara, kontrolli i kalon prseri programit duke e lene at t merret me problemin. 1.4.2. MEMORIA Komponenti i dyt kryesor ne do kompjuter sht memoria. Idealisht, nj memorie duhet t jet shume e shpejt (me i shpejt se ekzekutimi i nj instruksioni keshtu qe CPU nuk varet nga memoria), shume e madhe dhe shume e lire. Asnj teknologji aktuale nuk i prmbush t gjitha keto synime, keshtu qe sht ndjekur nj rruge tjetr. Sistemi i memories sht i konstruktuar si nj hierarki shtresash, sic tregohet ne fig 1.7. Shtresa e siprme prbehet nga regjistrat e brendshem ne CPU. Ato prbehen nga i njjti material si ai i CPU dhe jane po ashtu po aq t shpejt sa CPU. Si pasoje, nuk ka asnj vone se ne aksesimin e tyre. Kapaciteti i disponueshem i ruajtjes ne menyre tipike sht 32x32-bit ne nj

CPU 32-bit dhe 64x64-bit ne nj CPU 64-bit. Me pak se 1KB ne t dy rastet. Programet duhet t menaxhojne regjistrat (t vendosin se cfare duhet t mbahet ne to), ne software. Me pas vjen memoria Chace, e cila ne prgjithesi sht e kontrolluar nga hardware. Memoria kryesore ndahet ne linja chace, ne menyre tipike 64 byte, me adresa 0 deri ne 63 ne linjn chace 0, adresat 64 deri ne 127 ne linjn chaces 1 dhe keshtu me rradhe. Linjat chace me t prdorura mbahen ne nj chace me shpejtsi t lart e vendosur brenda ose shume afer CPU. Kur programi duhet t lexoje nj fjale memorieje, hardware chace kontrollon ne se rreshti i nevojitur sht ne chache ose jo. Ne qoft se sht, qe quhet chace hit, kerkesa plotsohet nga chace dhe ne memorie nuk dergohet asnj kerkese me ane t busit t memories kryesore. Chace hit normalisht kerkon dy cikle clocku. Chace misses (deshtim) duhet t shkoje ne memorie me nj penalitet t konsiderueshem kohe. Memoria chace sht e limituar ne madhesi qe prkon me koston e saj t lart. Disa makina kane dy, madje edhe tre nivele chace, secila me e ngadalt dhe me e madhe se ajo para saj.

Me pas vjen memoria kryesore. Kjo sht ajo qe bn punet me t renda ne sistemin e memories. Memoria kryesore shpesh quhet RAM (Random Access Memory), me t vjetrit e quajne at edhe core memory. Aktualisht, memoriet jane dhjet ne qindra megabytes dhe duke u rritur ne menyre t shpejt. T gjitha kerkesat e CPU qe nuk mund t prmbushen ne chace shkojne ne memorien kryesore. Me pas ne hierarki jane disqet magnetike (hard disks). Ruajtja ne disk sht dy here me pak e kushtueshme se RAM pr bit dhe shpesh dy here me e madhe gjithashtu. Problemi i vetm sht se koha e aksesimit t t dhenave ne t sht rreth tre here me e ngadalt. Kjo shpejtsi e ulet sht nga fakti se nj disk sht nj pajisje mekanike, sic tregohet ne fig 1.8. Nj disk prbehet nga nj ose me shume pajisje metalike ne forme pjat qe rrotullohen ne 5400, 7200 ose 10800 rpm. Gjithashtu kane edhe bosht t nj krahu mekanik, mbi pjata nga qoshet, t ngjashme me krahun pickup ne nj fonograf t vjetr 33 rpm. Informacioni shkruhet ne disk ne nj seri qarqesh t koncentruar. Ne do pozicion krahu t dhene, secila nga kokat mund t lexoje nj pjese unazore e quajtur track. T gjithe tracks sebashku pr nj pozicion krahu t dhene formojne nj cilinder. do track sht e ndare ne disa numra sektoresh, ne menyre tipike 512 byte pr sektor. Ne disqet moderne, cilindrat e jashtm prmbajne me shume sektore se ata t brendeshmit. Pr t levizur krahun nga nj cilinder ne cilindrin me pas kerkon rreth 1msec. Pr ta levizur at ne nj cilinder t rastesishem kerken 5 deri ne 10 msec, duke u varur nga drive-i. Sapo krahu t jet ne

krahun e duhur, drive-i duhet t prese pr sektorin e nevojitur qe t rotullohet posht kokes, nj vone se shtese prej 5 deri ne 10 msec qe varet nga rpm i drive-it. Sapo sektori t jet posht kokes, leximi ose shkrimi behet ne ne rate prej 5MB/sec ne disqet e ngadalta deri ne 160MB/sec ne ata t shpejtt. Shtresa e fundit ne hierarkine e memories sht tape-i magnetik (shiriti magnetik). Ky mjet shpesh prdoret si nj rezerve i ruajtjes ne disk dhe pr mbajtjen e bashkesive t t dhenave shume t medha. Pr aksesimin e nj tape, fillimisht duhet t vendoset ne nj

lexues tape, nga nj person ose nga nj robot (marrja e automatizuar e tape sht e zakonshme ne instalimet me database t madhe). Pastaj tape mund t duhet t rrotullohet prpara pr t arritur ne bllokun e kerkuar. Kjo mund t kerkoje disa minuta. Plus i madh i tape sht jashtzakonisht pak i kushtueshem pr bit dhe i levizshem, qe sht e rendesishme pr tape rezerve qe duhet t ruhen jasht ne menyre qe t rezistojne nga zjarret, prmbytjet, termetet, etj. Hierarkia e memories qe kemi diskutuar sht tipike, por disa instalime nuk i kane t gjitha shtresat ose kane t tjera pak t ndryshme (si nj disk optik). Gjithesesi akoma ne t gjitha prej tyre, kur nj ulet posht ne hierarki, koha e aksesimit t rastesishem rritet dramatikisht, kapaciteti rritet ne t njjtn menyre dramatike dhe kosto pr bit ulet pamase. Si pasoje, hierarkit e memories do t jene edhe ne vitet qe vijne. Vec llojeve t memorieve t diskutuara me sipr, shume kompjutera kane nj sasi t vogel t qendrueshme memorie me aksesim t rastesishem (random access memory). Ndryshe nga RAM, memoriet e qendrueshme nuk e humbasin prmbajtjen e tyre kur nderpritet energjia. ROM (Read Only Memory) programohet ne fabrike dhe me pas nuk mund t ndryshohet. sht e shpejt dhe jo e kushtueshme. Ne disa kompjutera, ngarkuesi bootstrap, qe prdoret pr t filluar kompjuterin, ndodhet ne ROM. Gjithashtu, disa karta I/O me ROM-in merren me kontrollin e pajisjeve t nivelit t ulet. EEPROM (Electrically Erasable ROM) dhe flash RAM jane gjithashtu t qendrueshem, por ne ndryshim nga ROM mund t fshihet dhe t rishkruhet. Sidoqoft, pr ti shkruar ato kerkon me shume se t shkruash RAM, keshtu ato prdoren ne t njjtn menyre si ROM, vetm me nj dukuri shtese qe tani bn t mundur t korrigjosh viruset ne programet qe mbajne duke i rishkruar ata ne fushe. Akoma nj tjetr lloj memorieje sht CMOS, qe sht e paqendrueshme. Shume kompjutera prdorin memorien CMOS pr t mbajtur kohen dhe datn aktuale. Memoria CMOS dhe qarku i ores qe inkrementon kohen ne t, jane t fuqizuar nga nj bateri t vogel, keshtu qe koha update-et (freskohet) ne menyre t sakt, edhe kur kompjuteri sht i pavene ne prize. Memorja CMOS gjithashtu mund t mbaje parametrat e konfigurimit, se nga cili disk t boot-oje. CMOS prdoret sepse harxhon pak power saqe bateria e vendosur qe ne fabrike mund t zgjase pr disa vjet. Gjithsesi, kur fillon t deshtoje, kompjuteri mund t filloje t ket semundjen Alzheimer, qe harron gjerat qe i ka njohur pr vite me rradhe, si pr shembull, nga cili disk t boot-oje. Le t fokusohemi ne memorien kryesore pr pak. Shpesh sht e pelqyeshme t mbash shume programe ne memorie njeheresh. Ne qoft se nj program bllokohet duke pritur qe nj lexim disku t kompletohet, nj program tjetr mund t prdore CPU, duke i dhene nj shfrytzim me t mire CPU. Gjithesesi, me dy ose me shume programe njeheresh ne CPU, duhet t zgjidhen dy probleme: 1. Si t mbrojme programet nga njri-tjetri dhe tjetrin nga t gjithe ata 2. Si t merret me zhvendosjen Shume zgjidhje jane t mundeshme. Megjithat t gjitha prej tyre prfshijne pajisjen e CPU me hardware special. Problemi i pare sht i dukshem, por i dyti sht pak me delikat. Kur nj program kompilohet dhe linkohet (bashkohet), kompiluesi dhe linkuesi nuk e dine se ne cvend t memories fizike do t ngarkohet kur programi sht ekzekutuar. Pr ket arsye, ato

zakonisht supozojne qe do t filloje ne adresen 0 dhe aty do t vendoset instruksioni i pare. Supozojme se instruksioni i pare merre nj fjale nga memorja ne adresen 10000. Tani supozojme se programi i plot dhe t dhenat jane ngarkuar ne adresen 60000. Kur ekzekutohet instruksioni i pare, do t deshtoje sepse do ti referohet fjales ne 10000 ne vend t fjales ne 60000. Pr t zgjidhur ket problem, duhet ose t zhvendosim programin ne kohen e ngarkimit, t gjejme t gjitha adresat dhe ti modifikojme ato, gje e cila mund t behet por sht e kushtueshme, ose t (skanim i keq) Zgjidhja me e thjesht tregohet ne fig 1.9(a). Ne ket figure shohim nj kompjuter t pajisur me dy regjistra special, regjistri baze dhe regjistri limit (Vini re qe ne ket liber, numrat qe fillojne me Ox jane ne hexadecimal). Kur nj program sht run, regjistri baze vendoset t shenjoje fillimin e tekstit t programit, dhe regjistri limit tregon sa t medhenj jane kombinimet e teksitit t programeve dhe t dhenave. Kur nj instruksion duhet t merret, hardware kontrollon ne se program counter sht me pak se regjistri limit, dhe ne qoft se sht, e shton at ne regjistrin baze dhe shumen e dergon ne memorie. Ne menyre t ngjashme kur programi kerkon t marre nj fjale t dhenash (pr shembull, nga adresa 10000), hardware automatikisht shton prmbajtjen e regjistrit baze me at t adreses dhe shumen e dergon ne memorie. Regjistri baze e bn t pamundur pr nj program ti referohet nj pjese memorieje posht tij. Pr me tepr, regjistri limit e bn t pamundur ti referohet nj pjese t memories sipr tij. Keshtu kjo skeme zgjidh qe t dy problemet, at t mbrojtjes dhe at t zhvendosjes ne saj t dy regjistrave t rinj dhe nj rritje t vogel t ciklit t kohes (pr t prformuar kontrollin dhe shtimin limit (limit check and addition))

Rezultati i kontrolluar dhe i hartuar sht ne konvertimin e nj adrese t gjeneruar nga programi, e quajtur adrese virtuale, ne nj adrese t prdorur nga memoria, e quajtur adrese fizike. Ajo qe bn kontrollin dhe hartimin quhet MMU (Memory Management Unit). sht e vendosur mes CPU-se dhe memories. Nj MMU me e sofistikuar tregohet ne fig 1.9(b). Ketu ne kemi nj MMU me dy cift regjistrash baze dhe limit, nj pr tekstin e programit dhe nj pr t dhenat. Program counter-i dhe t gjitha referencat e tjera t tekstit t programit prdorin ciftin e I-re dhe ato t t dhenave prdorin ciftin II-t. Si rrjedhim, tani sht e mundur t kesh shume prdorues qe ndajne t njjtin program me nj kopje t vetme ne tij ne memorie, gje jo e mundur me skemen e pare. Kur programi 1 po vepron, katr regjistrat jane t vendosur t shenuar me shigjeta ne t majt t fig 1.9(b). Kur po vepron programi 2, ato jane vendosur t shenuar me shigjeta ne t djatht t figures. Ekzistojne MMU akoma me t sofistikuara. Disa prej tyre do ti shohim me vone ne ket liber. Ajo qe duhet t veme re ketu sht qe menaxhimi i MMU-se duhet t jet nj funksion i sistemit operativ, prderisa prdoruesit nuk mund t jene t besuar se e bejne ne menyre korrekte. Dy aspekte t sistemit memorie kane efekt kryesor ne performance. Se pari, chace-t fshehin shpejtsine relativisht t ulet t memories. Kur nj program ka qene ne

veprim pr pak kohe, chace sht plot me linjat chace t ketij programi, duke dhene nj performance t mire. Sidoqoft, kur sistemi operativ ndryshon nga njri tek tjetri, chace mbetet plot me linjat chace t programit t pare. Ato qe duhen nga programi i pare duhet t merren nj e nga nj nga memoria fizike. Se dyti, kur behet ndryshimi nga nj program t tjetri, regjistrat MMU duhet t ndryshohen. Ne fig 1.9(b), duhet t risetohen vetm 4 regjistra, qe nuk sht shume problem, por ne MMU t verteta, duhet t ringarkohen shume regjistra, ne menyre dinamike apo ne menyre eksplicite, sipas nevojes. Secila rruge qe duhet ndermarre kerkon kohe. Morali i kesaj sht se ndryshimi nga njri program t tjetri, sic quhet context switch, sht nj biznes me t vertet shume i kushtueshem. 1.4.3. PAJISJET I/O

Memorja nuk sht i vetmi burim qe duhet t menaxhohet nga sistemi operativ.Pajisjet I/O gjithashtu bashkeveprojne ngusht me sistemin operativ. Sic e pame ne fig 1.5, pajisjet I/O prgjithesisht prbehen nga dy pjese: kontrolleri dhe pajisja vet. Kontrolleri sht nj chip ose nj bashkesi chipesh ne nj plugboard qe fizikisht kontrollon pajisjen. Ai pranon komanda nga sistemi operativ, pr shembull, t lexoje t dhena nga pajisja dhe ti marre ato. Ne shume raste, kontrolli aktual i pajisjes sht shume i komplikuar dhe i detajuar, keshtu qe sht puna e kontrollerit ti paraqese nj nderfaqe me t thjesht sistemit operativ. Pr shembull, nj kontroller disku mund t pranoje nj komande leximi pr sektorin 11206 nga disk 2. Pastaj kontrolleri duhet t konvertoje ket numer linear sektori ne nj cilinder, sektor dhe koke (head). Ky konvertim mund t jet i komplikuar nga fakti qe cilindrat e jashtm kane me shume sektor se ato t brendeshmit dhe disa sektor t demtuar jane hartuar ne t tjere t rinj. Pastaj kontrolleri duhet t prcaktoje se kraku i diskut ne cilin cilinder sht dhe ti jap atij nj sekuence pulsesh pr t levizur brenda apo jasht numerit t kerkuar t cilindrave. Atij i duhet t prese deri kur sektori i duhur t rrotullohet posht kokes dhe pastaj t filloje leximin dhe ruajtjen e biteve, ashtu sic ato vijne nga drive, t heqe paraardhesit dhe t llogarise checksum-in. Se fundmi, ai duhet t grumbulloj bitet hyrese ne fjale dhe ti ruaj ne memorie. Pr t bere gjithe ket pune, kontrollerat shpesh prmbajne kompjutera embedded qe programohen pr t bere punen e tyre. Pjesa tjetr sht pajisja aktuale vet. Pajisjet kane nderfaqe t thjeshta, sepse nuk mund t bejne shume dhe ti bejne ato standarte. Kjo e fundit duhet sepse pr shembull do kontroller disk IDE mund t merret me do disk IDE.IDE qe sht Integrated Drive Electronics, sht tipi standart i diskut ne Pentium dhe disa kompjuterave t tjere. Prderisa nderfaqja aktuale e pajisjes sht e fshehur pas kontrollerit, gjithe ajo cka sheh sistemi operativ sht nderfaqa t kontrolleri qe mund t jet shume e ndyshme nga nderfaqja e pajisjes. Meqe do lloj kontrolleri sht i ndryshem, duhen software t ndryshme pr t kontrolluar secilin nga ato. Software qe merret me kontrollerin, duke i dhene atij komanda dhe duke pranuar prgjigjet, quhet driveri i pajisjes (device driver). Ndertuesit e kontrollerave batch duhet t pajisin nj driver pr secilin sistem operativ qe suportojne. Keshtu pr shembull, nj skaner mund t shkoje me nj driver pr Windows 98, Windows 2000 dhe UNIX.

Driveri, qe t veproje ne moden kernel, duhet t vendoset ne sistemin operativ. Teorikisht, driverat mund t veprojne edhe jasht modes kernel, por pak sisteme aktuale e suportojne ket mundesi sepse ai kerkon aftsine pr t lejuar nj driver pr hapesiren e prdoruesit, pr t mund t aksesuar pajisjen ne nj menyre t kontrollueshme, dukuri e suportuar rralle. Ka tre menyra qe driveri mund t vendoset ne kernel. Menyra e pare sht t rilidhesh (relink) kernelin me nj driver t ri dhe pastaj ta reboot-osh sistemin.T shumt jane sistemet UNIX qe punojne ne ket menyre. Menyre e dyt sht qe t bejme nj hyrje (entry) ne nj file t sistemit operativ duke i treguar qe i duhet nj driver dhe pastaj reboot-ojme sistemin. Ne kohen e boot-imit, sistemi operativ shkon dhe gjen driverat qe i duheshim dhe i merr ato. Ne ket menyre punon Windows. Menyra e tret sht qe sistemi operativ t jet ne gjendje t pranoje drivera t rinj gjat veprimit dhe ti instaloje ata pa patur nevojen qe ti boot-oje. Kjo menyre ka pasur prdorim t pakt por ne ditt e sotme po gjen me shume shtrirje pr prdorim. Pajisje t tilla si USB apo IBEB 1394 (t diskutuara me pare) gjithmone duan drivera t ngarkuara ne menyre dinamike. do kontroller ka nj numer t vogel regjistrash qe prdoren pr t bere t mundur komunikimin me t. Pr shembull, nj kontroller disku minimal mund t ket regjistra pr t specifikuar adresen e diskut, adresen e memories, numrin e sektoreve dhe drejtimin (lexim apo shkrim). Pr aktivizimin e kontrollerit, driveri merr nj komande nga sistemi operativ dhe me pas e prkthen at ne vlerat e duhura pr t shkruar ne regjistrat e pajisjes. Ne disa kompjutera, regjistrat e pajisjes jane hartuar ne hapesiren e adresave t sistemit operativ, keshtu ato mund t lexohen apo shkruhen si fjale t zakonshme t memories. Ne kompjutera t tille nuk nevojitet asnj instruksion special I/O dhe programet user mund t mbahen larg nga hardware-i duke mos vendosur keto adresa memorjeje ne shtrirje t tyre (pr shembull, duke prdorur regjistrat baze dhe regjistrat limit). Ne kompjutera t tjere, regjistrat e pajisjes jane ne nj hapesire speciale t portave I/O, ku secili regjistr ka nj adrese port. Ne keto makina, instruksione speciale IN dhe OUT jane t disponueshem ne moden kernel pr t lejuar driverat t lexojne apo t shruajne regjistrat. Skema e meparshme eliminon nevojen e instruksioneve speciale I/O por prdor nj pjese t hapesires se adresave. Kjo e fundit nuk prdor fare hapesire t adresave por kerkon instruksione speciale. Qe t dy keto sisteme jane gjeresisht t prdorshem. Inputi dhe outputi mund t behen ne tre menyra t ndryshme. Ne metoden me t thjesht, nj program user leshon (kryen) nj thirrje t sistemit, t cilen kerneli e shnderron me pas ne nj thirrje procedure pr driverin e duhur. Me pas driveri fillon I/O dhe qendron ne nj right loop dhe ne menyre t vazhdueshme duke i bere sondazh pajisjes t shoh ne se sht bere (zakonisht ka disa bit qe tregojne se pajisja sht akoma e zene). Kur I/O ka prfunduar, driveri vendos t dhenat aty ku ato nevojiten (ne qoft se ka t tille) dhe kthehet. Me pas sistemi operativ i kthen kontrollin thirresit. Kjo metode quhet busy waiting. Metoda e dyt sht qe driveri t startoje pajisjen dhe ti kerkoje atij ti jape nj interrupt kur t mbaroje. Ne at pike driveri kthehet. Pastaj sistemi operativ, ne qoft se nevojitet, bllokon thirresin dhe sheh pr ndonj pune tjetr pr t bere. Kur kontrolleri hap fundin e transferimit, pr t sinjalizuar kompletimin gjeneron nj interrupt. Interruptet jane shume t rendesishme ne sistemin operativ, keshtu qe le t ekzaminojme me afer ket ide. Ne fig 1.10(a). shohim nj proes tre-hapash pr I/O. Ne

hapin e pare, driveri i tregon kontrollerit duke shkruar ne regjistrat e pajisjes se tij se cfare t beje. Me pas kontrolleri starton pajisjen. Kur kontrolleri ka mbaruar shkrimin ose leximin e numrave t byteve qe i sht caktuar t transferoje, sinjalizon chip kontrollerin e interruptit duke prdorur linja busi t caktuara ne hapin e dyt. Ne qoft se kontrolleri i interruptit sht i prgatitur pr t pranuar interruptin (i cili mund t mos jet ne qoft se sht i zene me nj tjetr me prioritet me t lart), ai shpall nj pin chipin CPU-se duke e informuar at, ne hapin tret. Ne hapin e katrt, kontrolleri interruptit vendos numrin e pajisjes ne bus ne menyre qe CPU mund ta lexoje at dhe t dije se cila pajisje ka mbaruar (shume pajisje mund t jene ne veprim ne t njjtn kohe).

Sapo CPU ka vendosur t marre interruptin, program counter-i dhe pastaj PSW, ne menyre tipike shtyhen ne stack-un aktual dhe CPU ndryshon ne kernel mode. Numri i pajisjes mund t prdoret si nj index ne pjese t memories pr t gjetur adresen e mbajtsit t interruptit pr pajisjen. Kjo pjese e memories quhet interrupt vector. Sapo mbajtsi i interruptit (pjese e driverit pr pajisjen qe sinjalizon interrupt) t ket startuar, ai heq stacked program counter dhe PSW dhe i ruan ato, pastaj pyet pajisjen pr t mesuar statusin e saj. Kur mbajtsi i interruptit ka prfunduar, ai kthehet ne programin user qe me pare ishte ne veprim, ne instruksionin e pare qe akoma nuk ishte ekzekutuar. Keto hapa tregohen ne fig.1.10(b). Metoda e tret pr t bere punet I/O prdor nj chip special DMA (Direct Memory Access) qe mund t kontrolloje rrjedhen e biteve mes memories dhe disa kontrollerave pa nderhyrjen konstant t CPU. CPU e nderton chipin e DMA, duke i treguar sa byte t transferoje, duke prfshire adresat e pajisjes dhe memories dhe drejtimin, dhe e le t vazhdoje. Kur behet chipi i DMA, ai shkakton nj interrupt, i cili trajtohet sic thame me

sipr. Hardware-i DMA dhe I/O ne prgjithesi do t prshkruhet me shume ne detaje ne kapitullin 5. Shpesh interruptet mund t ndodhin ne momente t paprshtatshme, pr shembull, kur nj tjetr mbajts interrupti (interrupt handler) sht ne veprim. Pr ket arsye, CPU ka nj menyre qe t beje t paaft interruptet dhe pastaj ti aftsoje prseri me vone. Nderkohe qe interruptet jane joaktive, do pajisje mund t gjeneroje interrupte, por CPU nuk nderpritet deri sa t aktivizoje prseri interruptet. Ne qoft se, pajisje t shumta mbarojne qe interruptet jane t caktivizuar, kontrolleri i interruptit vendos se cilin t lere t parin, zakonisht bazuar ne prioritetin statik i shenuar t do pajisje. Pajisja me prioritet me t lart fiton. 1.4.4. BUSET

Organizimi i figures 1.5. ishte i prdorur pr vite me rradhe ne minikompjutera dhe gjithashtu ne personal computer IBM. Gjithesesi, me arritjen e proesoreve dhe memories me t shpejt, aftsia e nj busi t vetm (dhe sigurisht busi IBM PC) pr tu marre me t gjithe trafikun ishte sforcuar deri ne piken me t fundit. Dicka duhet t behej. Si rezultat i kesaj, u shtuan buse shtese, pr t pajisje I/O me t shpejta dhe gjithashtu pr t minimizuar trafikun CPU-memorie. Si pasoje e ketij evoluimi, nj sistem i madh Pentium aktualisht Jooks, dicka si ne fig.1.11.

Sistemi ka te buse (chace, local, memory, PCI, SCSI, USB, IDE dhe ISA), ku secili ka rate (shkalle) transferimi dhe funksion t ndyshem. Sistemi operativ duhet t jet ne dijeni t t gjithe ketyre pr konfigurimin dhe menaxhimin. Dy buset kryesore jane origjinalet e IBM PC busi ISA (Industry Standart Architcture) dhe pasuesi i tij, PCI (Pripherical Component Intrconnect). Busi ISA, qe fillimisht ishte busi IBM PC/AT, vepron ne 8.33MHz dhe mund t transferoje dy byte njeheresh, ne nj maksimum prej 16.67 Mb/sec. Ai sht i prfshire pr pajtueshmeri t prapambetur t kartave I/O t vjetra dhe t ngadalta. Busi PCI u krijua nga Intel si nj pasardhes i busit ISA. Ai mund t veproje ne 66Mhz dhe t transferoje 8 byte ne t njjtn kohe, pr nj data rate prej 528 MB/sec. Shumica e pajisjeve I/O me shpejtsi t lart tani prdorin busin PCI. Edhe dida compjutra jo-Intel gjithashtu prdorin busin PCI ne saj t numrit t madh t kartave I/O t prdorshme pr t. Ne ket konfigurim, CPU bashke bisedon me uren e chipit PCI neprmjet busit lokal (local bus), dhe ura e chipit PCI bashke bisedon me memorien neprmjet nj busi t dedikuar memories, shpesh qe vepron ne 100MHz. Sistemet pentium kane ne chip nj chace nivel i I-re dhe jasht chipit nj chace shume me e madhe niveli i II-t, t lidhur me CPU me busin e chace-se. Pr me tepr, ky sistem prmban tre buse t specializuar: IDE, USB dhe SCSI. Busi IDE sht pr t lidhur pajisjet periferike si, disqet dhe CD-ROM me sistemin. Busi IDE sht nj dege e nderfaqes se kontrollerit t diskut ne PC/AT dhe tani sht standarte ne afersisht t t gjithe sistemet Pentium-based pr hard diskun dhe shpesh pr CD-ROM. Busi USB (Universal Serial Bus) u krijua pr t lidhur t gjitha pajisjet e ngadalta I/O, si tastjeren dhe mouse-in, me kompjuterin. Ai prdor nj lidhes 4 fijesh, dy nga t cilat sigurojne fuqi elektrike pr pajisjen USB. USB sht nj bus i centralizuar ne t cilin nj pajisje rrenj u bn sondazh pajisjeve I/O do 1 msec ne qoft se ka trafik apo jo. Ai mund t manovroje nj shume totale ngarkimesh prej 1.5 MB/sec. T gjithe pajisjet USB ndajne nj driver t vetm pajisjesh USB, duke e bere t panevojshme instalimin e nj driveri t ri pr do pajisje t re USB. Pr pasoje, pajisjet USB mund t shtohen ne kompjuter pa patur nevoje t reboot-ohen. Busi SCSI (Small Computer System Intrface) sht nj bus me performance t lart i caktuar pr disqe t shpejta, skanera dhe pajisje t tjera qe duan gjeresi brezi t konsiderueshme. Ai mund t veproje deri ne 160 MB/sec. Ai ka qene prezent ne sistemet Macintosh qe ne fillimet e krijimit t tyre dhe gjithshtu sht i populluar ne UNIX, dhe ne disa sisteme Intel-based. Akoma nj bus tjetr (qe nuk sht treguar ne fig 1.11.) sht IEEE 1394. Ndonjehere ky quhet FireWire. Apple e prdor pr implementimin e tij t 1394. Ashtu si USB, IEEE 1394 sht nj serial bitesh por sht projektuar pr transfertn e paketave me shpejtsi deri ne 50 MB/sec, duke e bere at t prdorshem pr lidhjen e cacorderave dixhitale dhe pajisje multimedia t ngjashme me nj kompjuter. Ndryshe nga USB, IEEE 1394 nuk ka nj kontroller qendror. SCSI dhe IEEE 1394 hasin konkurence nga versionet e shpejta qe jane zhvilluar t USB. Pr t punuar ne nj sistem si ai i fig.1.11, sistemi operativ duhet t dije se cfare sht aty dhe ta konfiguroje at. Kjo nevoje coi Intelin dhe Mirosoftin t projektojne nj sistem pr PC i quajtur plug and play, qe bazohet ne nj koncept t ngjashem t implementuar fillimisht ne Apple Machintosh. Para plug and play, do kart I/O kishte nj nivel fiks t kerkesave pr interrupt dhe adresa fikse pr regjistrat I/O. Pr shembull,

tastiera ishte interrupt 1 dhe prdort adresat 0x60 deri 0x64, kontrolluesi i floppy disk-ut ishte interrupt 6 dhe prdort adresat 0xF0 deri ne 0xF7 dhe printeri ishte interrupt 7 dhe prdort adresat 0x378 deri ne 0x37A, dhe keshtu me rradhe. Deri ketu do gje ishte ne rregull. Shqetsimet erdhen kur prdoruesi bleu nj kart zeri dhe nj kart modem dhe duhet t prdoreshin t dyja, le t themi interrupt 4. Ato ishin konfliktuale mes njra tjetres dhe dhe nuk mund t punonin se bashku. Zgjidhja ishte prfshirja e celesave DIP ne do kart I/O, dhe instruktimi i prdoruesit qe ti vendose ato ne menyre qe t zgjedhin nj nivel interrupt-i dhe adresa t pajisjeve I/O qe nuk jane konfliktuale me ndonj tjetr ne sistemin e prdoruesit. Adoleshentt t cilt dedikuan jetn e tyre ne ngatrresat e hardware-it t PC ndonjehere mund ta bnin ket pa gabime. Fatkeqesisht, asnj tjetr nuk mundi, gje e cila coi ne kaos. Ajo cfare plug and play bn sht t pasurit e nj sistemi qe automatikisht t mbledhe informacion rreth pajisjeve I/O, kryesisht t prcaktoje nivelet e interrupt-eve dhe adresat I/O dhe me pas ti tregoje seciles kart se cilt jane numrat e saj. Shkurtimisht, kjo punon sic tregohet ne Pentium. do Pentium ka nj parentboard (formalisht i quajtur me pare motherboard prpara se korrektesia politike t godist industrine kompjuterike). Ne parentboard ndodhet nj program i quajtur BIOS (Basic Input Output System). BIOS-i ka software I/O t nivelit t ulet, prfshire ketu edhe procedurat e leximit t tastieres, shkrimit ne screen, berja e disk I/O. Ne ditt e sotme, ai mbahet ne nj RAM t shpejt, qe sht i qendrueshem por mund t update-ohet nga sistemi operativ kur gjenden viruse ne BIOS. Kur kompjuteri boot-ohet, fillon BIOS-i. Fillimisht sheh se sa RAM sht instaluar dhe ne se tastiera apo pajisje t tjera kryesore jane instaluar dhe veprojne ne menyre korrekte. Ai fillon me skanimin e bus-eve ISA dhe PCI pr t zbuluar t gjitha pajisjet e lidhura. Disa nga keto pajisje ne menyre tipike jane trashegime (legacy) (t projektuar para krijim t plug and play) dhe kane nivele fikse t interrupt-eve dhe adresash I/O (me shume mundesi jane t vendosur nga celesa ne kartn I/O, por jo t modifikueshme nga sistemi operativ). Keto pajisje jane t regjistruara. Gjithashtu edhe pajisjet plug and play jane t regjistruara. Ne qoft se pajisjet qe jane prezent jane t ndryshme nga ato pajisje t boot-imit t fundit t sistemit, ato konfigurohen. BIOS-i me pas prcakton pajisjen e boot-imit duke provuar nj list t pajisjeve t ruajtur ne memorjen CMOS. Prdoruesi mund ta ndryshoje ket list duke hyre ne programin e konfigurimit BIOS direkt pas boot-imit. Ne menyre tipike, behet nj prpjekje pr t boot-uar nga floppy disk. Ne qoft se kjo deshton provohet CD-ROM. Ne qoft se as floppy dhe as CD-ROM nuk jane prezent sistemi boot-ohet nga hard disku. Sektori i pare nga pajisja e boot-imit lexohen ne memorje dhe ekzekutohet. Ky sektor prmban nj program qe normalisht ekzaminon tabelen e pjeseve ne fund t sektorit t bootimit pr t prcaktuar se cila pjese sht aktive. Me pas lexohet nj ngarkues bootimi sekondar nga ajo pjese. Ky ngarkues lexon ne sistemin operativ nga pjesa aktive dhe fillon. Me pas sistemi operativ i kerkon BIOS-it t marre informacionin konfigurues. Pr do pajisje, ai kontrollon ne se secila prej tyre ka driver-in e pajisjes. Ne qoft se jo, i kerkon prdoruesit t vendose nj floppy disk apo CD-ROM qe prmban driver-in (i siguruar nga prodhuesit e pajisjes). Sapo ai t ket t gjithe driver-at e pajisjeve, sistemi operativ i ngarkon ato ne Kernel. Me pas ai inicializon tabelat e tij, krijon do lloj background-i qe u nevojitet proeseve dhe starton nj login program ose GUI ne do

terminal. T paktn kjo sht menyra qe supozohet t funksionoje. Ne jetn e prditshme plug and play sht tepr e pabesueshme saqe njerezit e quajne plug and pray.

1.5.

KONCEPTET E SISTEMIT OPERATIV

T gjithe sistemet operative kane koncepte baze t caktuara si proeset, memorja dhe file-t t cilat jane kryesore ne kuptimin e tyre. Ne pjeset e meposhtme ne do t shohim disa prej ketyre koncepteve baze edhe pse shkurtimisht, si nj prezantim. Do ti shohim me t detajuara secilen prej tyre me vone ne ket liber. Pr t ilustruar keto koncepte here pas here do t shohim shembuj t ndryshem, zakonisht t marre nga UNIX. Ne menyre tipike shembuj t ngjashem ekzistojne edhe ne sisteme t tjere gjithashtu. 1.5.1. PROESET Nj koncept kryesor ne t gjithe sistemet operative sht proesi. Ne menyre paresore nj proes sht nj program ne ekzekutim. Me do proes shoqerohet hapesira e adresave t tij (address space), qe sht nj list e vendndodhjeve t memorjes nga nj minimum (zakonisht zero) ne nj maksimum, t cilen proesi mund ta lexoje dhe shkruaje. Hapesira e adresave prmban programin e ekzekutueshem, t dhenat e programit dhe stack-un e tij. Gjithashtu me do proes shoqerohen disa bashkesi regjistrash, duke prfshire ketu program counter, stack pointer dhe regjistra t tjere hardware, dhe t gjithe informacionin tjetr t nevojitur pr veprimin e programit. Ne me shume detaje do t vijme prseri t proeset ne kapikullin II, por tani pr tani menyra me e leht pr t marre nj ndjesi t mire intuit pr nj proes sht t mendojme rreth sistemeve timesharing. Ne menyre periodik, sistemi operativ vendos t ndaloje se vepruari nj parogram dhe t filloje nj tjetr, sepse i pari ka patur me shume se koha e tij e ndarjes se CPU-se ne sekondin paraardhes. Kur nj proes pezullohet prkohesisht si ky, duhet t restart-ohet me vone ekzaktsisht ne t njjtin stil qe kishte para se t nderpritej. Kjo nenkupton qe i gjithe informacioni rreth proesit duhet ne menyre eksplicit t ruhet diku gjat pezullimit. Pr shembull, proesi mund t ket disa file t hapura pr lexim ne t njjtn kohe. Pr secilen nga keto shoqerohet nj pointer qe jep pozicionin aktual (numrin e byte-ve apo record-eve qe duhet t lexohen me pas). Kur nj proes sht prkohesisht i pezulluar, t gjithe keto pointer-a duhet t ruhen ne menyre qe nj thirrje leximi qe ekzekutohet pas ristartimit t proesit t lexoje t dhenat e duhura. Ne shume sisteme operative, do informacion rreth secilit proes, vec prmbajtjeve t hapesires se adresave t veta, ruhet ne nj tabele sistemi operativ e quajtur tabela proes (proccess table), e cila sht nj grup strukturash, nj pr do proes aktualisht ekzistnt. Keshtu, nj proes i pezulluar vec t tjerash prbehet nga hapesira e adreses se tij, zakonisht e quajtur core image (ne nder t memorieve core magnetike t prdorura ne ditt e meparshme), tabelen e tij t hyrjeve t proesit (proess table entry), qe vet kjo prmban regjistrat e tij. Thirrjet sistem kryesore t menaxhimit t proesit jane ato merren me krijimin dhe mbarimin e proeseve. Konsideroni nj shembull tipik. Nj proes i quajtur

interpretuesi i komandave (command intrpretr) ose shell lexon komandat nga nj terminal. Prdoruesi sapo ka shkruar nj komande duke kerkuar qe nj program t kompilohet. Shelli tani duhet t krijoje nj proes t ri ne menyre qe kompiluesi t veproje. Kur proesi ka mbaruar kompilimin, ai ekzekuton nj thirrje sistem qe t mbaroje edhe vet ai. Ne qoft se nj proes mund t krijoje nj apo me shume proese t tjera (t referuara si proese femije) dhe keto proese gjithashtu t mund t krijojne proese femije, shume shpejt do t arrijme ne strukturen e pemes proes (proess tree structure) t figures 1.12. Proeset e lidhura, qe bashkepunojne pr t bere disa pune, shpesh kane nevoje pr t komunikuar me njri-tjetrin dhe t sinkronizojne aktivitett e tyre. Ky komunikim quhet komunikimi intrproes dhe do t jet me i detajuar ne kapitullin e dyt.

fig 1.12. Nj peme proes, proesi A ke krijuar dy proese femije, B dhe C.Proesi B ka krijuar tre proese femije, D, E, dhe F.

T tjera thirrje sistemi t proesit jane t prdorshme pr t kerkuar me shume memorie (apo t le memorien e paprdorur), pr t pritur pr prfundimin e nj proesi femije dhe pr t vendosur programin e tij mbi nj tjetr t ndryshem. Here pas here, nevojitet t transportohet informacion ne nj proes veprues i cili nuk sht duke pritur pr ket informacion. Pr shembull, nj proes i cili po komunikon me nj proes tjetr ne nj kompjuter tjetr e bn ket duke derguar mesazhe ne proesin tjetr neprmjet nj rrjeti kompjuterik. Pr tu ruajtur nga mundesia qe nj mesazh mund t jet ose prgjigja e tij mund t jet humbur, derguesi mund t kerkoj qe sistemi i tij operativ ta informoje at pas nj numri t caktuar sekondash, keshtu qe ai mund t ritransmetoje mesazhin prseri ne qoft se akoma nuk ka marre nj pranim (acknowledge). Pas vendosjes se ketij kohuesi, programi mund t vazhoje t beje pune t tjera. Pasi kalon numri i caktuar i sekondave, sistemi operativ i dergon proesit nj sinjal alarm. Ky sinjal shkakton t proesi pezullimin, prkohesisht, e cfaredoqoft t atij qe po bn, ruan regjistat e tij ne stack dhe fillon t ekzekutoje nj procedure t vecant t manovrimit t sinjalit, pr shembull, t ritransmetoje nj mesazh qe ka mundesi t jet humbur. Pasi prfundon manovrimi i ketij sinjali, proesi veprues kthehet ne gjendjen e tij qe ishte para sinjalit. Sinjalet jane software analoge t interrupteve hardware-ike dhe vec mbarimit t kohes mund t jene t gjeneruara nga nj shumellojshmeri shkaqesh.

Shume trape t zbuluara nga hardware, si ekzekutimi i nj instruksioni ilegal ose prdorimi i nj adrese t gabuar, gjithashtu konvertohen ne sinjale pr proesin fajtor. do personi t autorizuar pr t prdorur nj sistem i caktohet nj UID (User IDentification) nga administratori i sistemit. Secili proes i filluar ka UID-in e personit, i cili e filloi ket proes. Nj proes femije ka po t njjtin UID si proesi i tij prind. Prdoruesit mund t jene pjesetare t grupeve, tek secili nga t cilt ka nj GID (Group IDentification) Nj UID, (ne UNIX) i quajtur superuser, ka fuqi speciale dhe mund t shkel shume nga rregullat e mbrojtjes. Ne instalime t medha, vetm administratori i sistemit e di fjalekalimin e nevojshem pr tu bere nj superuser, por shume nga prdoruesit e zakonshem (vecanerisht studenta) kushtojne nj prpjekje t konsiderueshme duke provuar pr t gjetur ndonj t met t sistemit qe i lejon ata t superusera pa patur nevoje pr fjalekalim. Proeset, Komunikimin Nderproesorial dhe tma t lidhura me keto do t studiohen ne kapitullin e dyt.

1.5.2. DEADLOCKS (SITUATA PA RRUGE DALJE) Kur dy ose me shume sisteme bashkeveprojne, ata disa here mund t gjenden ne situata pr t cilat nuk mund t ket nj rrugedalje. Nj situat e tille quhet nj deadlock. Deadlocket mund t shpjegohen mire me nj shembull t jets reale, me t cilin dokush sht i familiarizuar; deadlock-u ne trafik. Shikoni figuren 1.13(a). Ketu 4 autobuse po afrohen ne nj kryqezim. Pas ketyre katr autobuseve ka edhe autobuse t tjere por nuk jane t treguar ne figure. Me shume pak fat t keq, katr t paret mund t arrijne ne kryqezim njkohesisht, duke na cuar ne situatn si ne figuren 1.13(b), ne t cilen nuk ka rrugezgjidhje sepse asnjri nga ato nuk mund t vazhdoje prpara. Secili ka bllokuar nj nga t tjeret. Gjithashtu nuk mund t shkojne as mbrapa ngaqe ka autobusa t tjere pas tyre. Nuk ka asnj rruge t leht daljeje.

Fig.1.13.(a) Nj rrezik deadlock (b)Nj deadlock

Proeset ne nj kompjuter mund t ndodhen ne situata anologe ne t cilat nuk mund t bejne asgje ne progres. Pr shembull, imagjinoni nj kompjuter me nj tape drive dhe nj Cd-recorder.Tani imagjinoni dy proese ku qe t dy duan t bejne nj CD-ROM nga t dhenat ne nj tape. Proesi 1 kerkon dhe i jepet ne prdorim tape drive. Ndersa proesi 2 kerkon dhe i jepet ne prdorim CD-recorderi. Me pas proesi 1 kerkon pr CDrecorder dhe kjo kerkese pezullohet derisa t ta ktheje proesi 2. Ne fund, proesi 2 kerkon pr tape drive dhe gjithashtu kjo kerkese pezullohet, sepse tashme ket e ka proesi 1. Ketu kemi nj deadlock nga i cili nuk ka asnj dalje. Deadlocket dhe cfare mund t behet me to do ti shohim ne detaje ne kapitullin e tret.

1.5.3. MENAXHIMI I MEMORIES do kompjuter ka nj memorie kryesore t cilen e prdor pr t mbajtur programet ekzekutuese. Ne nj sistem operativ shume t thjesht, vetm nj program sht ne memorie ne nj kohe t caktuar.Pr t ekzekutuar nj program t dyt, programi i pare duhet t hiqet nga memoria dhe aty t vendoset i dyti. Sisteme operative me t sofistikuara lejojne shume programe t jene ne memorie ne t njjtn kohe.Qe ato t mos intrferrojne me njri-tjetrin (dhe me sistemin operativ), nevojitet disa lloj mekanizmi mbrojts. Nderkohe qe ky mekanizem duhet t jet ne hardware, ai kontrollohet nga sistemi operativ. Kendveshtrimi i mesiprm ka lidhje me menaxhimin dhe mbrojtjen e memories kryesore. Nj ceshtje ne lidhje me memorien e ndryshme por po aq e remdesishme sht menaxhimi i hapesires se adresave t proeseve. Normalisht, do proes ka disa bashkesi adresash qe mund ti prdore, ne menyre tipike duke filluar nga 0 deri ne nj maksimum. Ne rastin me t thjesht, vlera maksimale e hapesires se adresave t nj proesi sht me e vogel se memoria kryesore. Ne ket menyre, nj proes mund t mbushe hapesiren e adresave t tij dhe mund t mbahet i gjithi ne memorien kryesore. Gjithesesi, ne shume kompjutera adresat jane 32 ose 64 biteshe, duke dhene nj hapesire adresash prktsisht prej 232 apo 264 bytes.Cfare do t ndodhte ne qoft se nj proes ka me shume hapesire adresash se sa ka kompjuteri memorie kryesore dhe proesi do ta prdor at t gjithen? Ne kompjuterat e pare nj proes i tille ishte thjesht nj pafat. Ne ditt e sotme egziston nj teknike qe quhet memorie virtuale, ne t cilen sistemi operativ mban pjese t hapesires se adresave ne memorien kryesore dhe disa pjese ne disk dhe i con keto pjese sa andej kendej ndermjet tyre ashtu sic nevojiten. Ky funksion i rendesishem i sistemit operativ dhe funksione t tjera t lidhura me menaxhimin e memories do t shihen ne kapitullin e katrt.

1.5.4. INPUT/OUTPUT T gjithe kompjuterat kane pajisje fizike pr marrjen e inputit dhe pr nxjerrjen e outputit. Mbi t gjitha sa i mire do t ishte nj kompjuter ne qoft se prdoruesit nuk mund ti tregojne atij cfare t bej dhe t mos mund t marrin rezultatet pas prfundimit t punes se kerkuar. Ekzistojne shume lloje pajisjesh inputi dhe outputi, duke prfshire tastjeren, monitoret, printerat dhe keshtu me rradhe. Menaxhimi i ketyre pajisjeve i sht lene sistemit operativ. Pr pasoje, do sistem operativ ka nj nensistem I/O pr menaxhimin e pajisjeve t tij I/O. Disa nga software-et I/O jane t pavarur nga pajisjet, qe do t thot, veprojne me shume apo me t gjitha pajisjet me menyre shume t mire. Pjese t tjera t tij, si driverat e pajisjes, jane specifike pr pajisje I/O t vecanta. Ne kapitullin e pest do t shohim software-et I/O.

1.5.5. FILE-ET Nj koncept tjetr kryesor i suportuar virtualisht nga t gjithe sistemet operativ sht sistemi file. Sic sht thene me pare, nj funksion kryesor i sistemit operativ sht fshehja e karakteristikave t disqeve dhe pajisjeve t tjera I/O dhe ti prezantoje programuesit nj model abstrakt t kendshem, t qart t fileve t pavarura nga pajisja. Ne menyre t dukshme nevojiten thirrjet sistem pr krijim e file-ve, levizjen e file-ve, leximin e file-ve dhe shkrimin e file-ve. Prpara se nj fjale mund t lexohet, ajo duhet t vendoset ne disk dhe t hapet, dhe pasi si lexohet ajo duhet t mbyllet, keshtu thirrjet jane krijuar pr t bere keto gjera. Pr sigurimin e nj vendi pr t mbajtur file-et, shumica e sistemeve operative kane konceptin e direktorive si nj menyre e grupimit t fileve sebashku. Nj student, pr shembull, mund t ket nj direktori pr do kurs qe po ndjek (pr programet e nevojitur pr ato kurse), nj tjetr direktori pr pjesen e tij elektronike dhe akoma nj tjetr direktori pr faqen e tij World Wide Web. Thirrjet sistem jane t nevojshem pr t krijuar dhe hequr direktorit. Thirrjet gjithashtu jane krijuar pr t vendosur nj file ekzistues ne nj direktori dhe pr t hequr nj file nga nj direktori. Hyrjet ne direktori nuk t jene file apo mbase edhe direktori. Ky model gjithashtu ndikon ne rritjen e nj hierarkie-sistemi file- sic sht treguar ne figuren 1.14.

Fig. 1.14. Nj sistem file pr departamentin e nj univertsiteti Hierarkit e proeseve dhe t file-eve se bashku jane t organizuar si peme, por ngjashmeria ndalon ketu. Hierarkit e proeseve zakonisht nuk jane shume t thella ( me shume se tre nivele sht e pazakonte) ndersa hierarkit e file-eve jane ne prgjithesi katr, pese, apo edhe me me shume nivele t thella. Hierarkit e proeseve ne menyre tipike kane jet t shkurtra, prgjithesisht t shumtn disa minuta, ndersa hierarkit e direktorive mund t ekzistojne prviteme rradhe. Pronesia dhe mbrojtja gjithashtu ndryshojne pr proeset dhe file-t. Ne menyre tipike, vetm nj proes prind mund t kontrolloje apo edhe t aksesoje nj proes femije, por pothuajse gjithmone ekzistojne mekanizma qe lejojne file-t dhe direktorit t lexohen nga nj grup me i gjere se vetm t zott e tyre. do file brenda hierarkise se direktorive mund t specifikohet duke i dhene emrin e tij t rruges (path name) qe ne krye t hierarkise se direktorise, direktoria rrenj. Path name t tille absolute prbehen nga lista e direktorive qe duhen kaluar nga direktoria rrenj pr t arritur ne file, me slashe qe ndajne komponentt. Ne Fig 1.14. rruga pr filein CS101 sht /Faculty/Prof.Brown/Courses/CS101. Slashi i pare tregon qe rruga sht absolute, qe sht duke filluar nga direktoria rrenj. Ne MS-DOS dhe Windows karakteri backslash (\) prdoret si ndares ne vend t karakterit slash (/), keshtu qe rruga e file-it e dhene me sipr do t shkruhej si; \Faculty\Prof.Brown\Courses\CS101. Prgjat ketij libri ne prgjithesisht do t prdorim marreveshjen UNIX pr pathet. Ne do cast, secili proes ka nj direktori punimi aktuale, ne t cilen kerkohen path names qe nuk fillojne me slash. Pr shembull, ne fig,1.14, ne qoft se

/Faculty/Prof.Brown ishin direktorit e punimit, prdorimi i rruges me emer /Courses/CS101 do t na jept t njjtin file si rruga absolute e dhene me sipr. Proeset mund t ndryshojne direktorine e tyre t punimit neprmjet nj thirrjeje sistem qe specifikon direktorine e re t punimit. Prpara se nj file t lexohet apo t shkruhet, ajo duhet t hapet, ne t cilen kohe kontrollohen autorizimet. Ne qoft se aksesimi sht i lejueshem, sistemi kthen nj integer t vogel t quajtur prshkruesi i file-it (file discriptor) qe ta prdore ne oprime pasuese. Ne qoft se aksesimi sht i ndaluar kthehet nj kod error. Nj koncept tjetr i rendesishem ne UNIX sht sistemi file mount. Pothuajse t gjithe personal computers kane nj ose me shume drive floppy disk ne t cilat mund t vendosen dhe hiqen floppy disk. Pr sigurim e nj menyre me elegant qe t merret me media t levizshme (duke prfshire ketu CD-ROMs), UNIX lejon sistemin file ne nj floppy disk t lidhet ne pemen kryesore. Merrni ne konsiderate situatn ne figuren 1.15.(a). Para thirrjes mount, sistemi file rrenj, ne hard disk dhe nj sistem i dyt file, ne nj floppy disk , jane t ndara dhe t palidhura.

Fig.1.15. (a).para mounting, file-et ne drive 0 jane t paaksesueshme (b) pas mounting, ata jane pjese e hierarkise se fileve Sidoqoft, sistemi file ne floppy nuk mund t prdoret, sepse nuk ka asnj menyre pr t specifikuar path names ne t, UNIX nuk lejon path names t jene t parashtsuara (prefixed) nga nj numer apo emer drive-i; ajo do t ishte saktsisht lloji i varesise se pajisjes qe sistemi operativ duhet t eliminoje. Ne vend t kesaj, thirrja sistem mount lejon sistemin file ne floppy t lidhet me sistemin file rrenj kudo qe sistemi e do at t jet. Ne fig.1.15(b) sistemi file ne floppy sht kaluar ne direktorine b, duke lejuar keshtu aksesimin /b/x dhe /b/y. Ne qoft se direktoria do t kishte ndonj file ata do t ishin t paaksesueshem nderkohe qe floppy sht kaluar, prderisa /b do t referoje direktorine rrenj t floppy. (T qenurit jo t aft pr t aksesuar keto file nuk sht nj problem aq serioz sa mund t duket ne fillim; sistemet file jane pothuajse gjithmone t kaluara ne direktori boshe). Ne qoft se nj sistem prmban shume hard disqe, ata mund t kalohen shume mire t gjithe ne nj peme t vetme. Nj tjetr koncept i rendesishem ne UNIX sht file-i special. File-t speciale jane krijuar ne menyre qe t bejne pajisjet I/O t duken si file. Ne ket menyre, ata mund t lexohen dhe t shkruhen duke prdorur t njjtat thirrje sistem qe jane prdorur pr leximin dhe shkrimin e file-ve. Ekzistojne dy lloje t file-ve speciale: file speciale block dhe file speciale character. Filet speciale block jane prdorur ne pajisjet model qe

prbehen nga nj bashkesi e rastesishme blloqesh t adresueshem, si disqet. Me hapjen e nj file special block dhe me leximin, say, block 4, nj program ne menyre direkt mund t aksesoje bllokun e katrt ne device, pa vemendjen e struktures t sistemit file qe prmbahet ne t. Ne menyre t ngjashme, filet special karakter jane t prdorur ne printerat model, modemat model dhe pajisje t tjera model qe pranojne apo nxjerrin nj rrjedhe karakteresh. Me marreveshje, filet speciale mbahen ne direktorine /dev. Pr shembull, /dev/lp mund t jet line printer. Dukuria e fundit pr t cilen do t diskutojme ne ket prmbledhje sht dicka qe lidhet me proeset dhe me filet gjithashtu: pipes. Nj pipe sht nj renditje e pseudofile qe mund t prdoren pr t lidhur dy proese sic tregohet ne figuren 1.16. Ne qoft se proeset A dhe B duan t bisedojne duke prdorur nj pipe, ata duhet ta vendosin at ne avancim. Kur proesi A do t dergoje t dhena proesit B, ai shkruan ne pipe sikur ai t ishte nj file output. Proesi B mund t lexoje t dhenat duke lexuar nga pipe si t ishte nj file input. Keshtu, komunikimi ndermjet proeseve ne UNIX ngjan shume me leximin dhe shkrimin e file t zakonshem. Menyra e vetme qe nj proes mund t zbuloje se file-i output t cilit po i shkruan nuk sht ne t vertet nj file, por nj pipe sht duke bere nj thirrje speciale sistem. Sistemet file jane shume t rendesishem. Do t kemi me shume pr t thene rreth ketyre ne kapitullin 6 dhe gjithashtu ne kapitujt 10 dhe 11.

Fig.1.16.Dy proese t lidhur nga nj pipe.

1.5.6. SIGURIA Kompjuterat prmbajne sasi t medha informacioni qe proruesit shpesh duan ta mbajne konfidenciale. Ky informacion mund t prfshije postn elektronike, planet e biznesit, kthimet e taksave dhe shume me tepr. I lihet sistemit operativ t menaxhoje sigurimin e sistemit ne menyre qe filet, pr shembull jane t aksesueshme vetm nga prdorues t autorizuar. Si nj shembull i thjesht, sa pr t pasur nj ide se si mund t funksionoje siguria, konsideroni UNIX. File-t ne UNIX jane t mbrojtura duke u caktuar seciles nj kod mbrojts binar 9-bitesh. Kodi mbrojts prbehet nga tre fusha 3-biteshe, nj pr pronarin, nj pr pjesetare t tjere t grupit t pronarit (prdoruesit jane t ndare ne grupe nga administratori i sistemit) dhe nj tjetr pr dokend tjetr. do fushe ka nj bit pr akses leximi, nj bit pr akses shkrimi dhe nj bit pr akses ekzekutimi. Keto tre bite njihen si bitet rwx. Pr shembull, kodi mbrojts rwxr-x--x do t thot qe pronari mund t lexoje, shkruaje apo t ekzekutoje file-in, pjesetare t tjere t grupit mund t lexojne apo t ekzekutojne (por jo t shkruajne), dhe dokush tjetr mund t ekzekutoje (por jo t lexoje dhe t shkruaje) file-in. Pr nj direktori, x tregon autorizim t kerkimit. Nj dash do t thot qe autorizimi korrespondues mungon.

Vec mbrojtjes se file-s, ka edhe shume probleme t tjera sigurie. Mbrojtja e sistemit nga t nderhyrjet e padeshiruara, human dhe johuman (pr shembull, viruset) sht nj prej tyre. Do t shohim disa prej tyre ne kapitullin e nent.

1.5.7. SHELL-I Sistemi operativ sht kodi qe kryen thirrjet sistem. Editoret, kompilatoret, assembluesit, linkeruesit dhe interpretuesit e komandave kategorisht nuk jane pjese t sistemit operativ, edhe pse ato jane shume t rendesishem dhe t prdorshem. Pr t mos ngatrruar gjerat, ne ket seksion do t shohim shkurtimisht interpretuesin e komandave, t quajtur shell. Edhe pse nuk sht pjese e sistemit operativ, ka prdorim t gjere ne shume dukuri t sistemit operativ dhe keshtu sherbn si nj shembull i mire se si mund t prdoren thirrjet sistem. Gjithashtu sht nderfaqja primare ndermjet prdoruesit dhe sistemit operativ, vec ne se prdoruesi sht duke prdorur nj nderfaqe grafike. Ekzistojne shume shell-e, duke prfshire sh, csh, ksh dhe bash. T gjitha keto suportojne funksionalittin e prshkruar me posht, qe burojne nga shelli origjinal (sh). Kur nj prdorues logs in, starton nj shell. Shelli ka terminalin si input dhe output standart. Ai fillon me shtypjen e prompt, nj karakter si ai i shenjs se dollarit, qe tregon prdoruesit qe shelli sht duke pritur pr t marre nj komande. Ne qoft se tani prdoruesi shtyp dat pr shembull, shelli krijon nj proes femije qe ekzekuton proesin dat si nj femije. Gjat veprimit t proesit femije, shelli pret pr prfundimin e tij. Kur proesi femije prfundon, shelli shtyp prompt prseri dhe mundohet t lexoje rreshtat pasardhes t inputit Prdoruesi mund t specifikoje qe outputi standart t ridrejtohet tek nj file, pr shembull, dat >file Ne menyre t ngjashme, inputi standart mund t jet i ridrejtuar, si ne sort <file1 >file2 qe i kerkon programit rendits me inputin e marre nga file1 dhe outputin e derguar ne file2. Outputi i nj programi mund t prdoret si nj input pr nj program tjetr duke i lidhur ata me nj pipe. Keshtu cat file1 file2 file3 | sort >/dev/lp

kerkon qe programi cat t lidhe tre file dhe t dergoje outputin ne sort pr t rregulluar t gjithe rreshtat ne rend alfabetik. Outputi i sort sht ridrejtuar ne file /dev/lp, ne menyre tipike nga printeri. Ne qoft se nj prdorues vendos nj amprsand pas komandes, shelli nuk pret pr kompletimin e tij. Ne vend t kesaj ai menjehere i jep nj prompt. Pr pasoje, cat file1 file2 file3 | sort >/dev/lp & fillon renditja si nj pune background, duke lejuar prdoruesin t vazhdoje normalisht t punoje nderkohe qe renditja vazhdon. Shelli ka nj numer dukurish t tjera interesante, pr t cilat nuk kemi kohe pr ti diskutuar ketu. Shumica e librave ne UNIX diskutojne pr shell (pr shembull, Kernighan and Pike, 1984; Kochan and Wood 1990; Medinets, 1999; Newham and Rosenblatt, 1998: dhe Robbins, 1999).

1.5.8. RICIKLIMI I KONCEPTEVE Shkencat kompjuterike, si shume fusha t tjera jane t udhehequra shume nga teknologjia. Arsyeja qe romanet antike kishin mungesa makinash nuk sht se atyre u pelqent t ecnin ne kembe kaq shume. Arsyeja ishte se ato nuk dinin se si ti ndertonin makinat. Personal computers ekzistojne jo sepse shume njerez kishin deshira t mbajtura prbrenda gjat pr t pasur nj kompjuter t tyrin, por sepse tani sht e mundur t prodhohen shume lire. Shpesh ne harrojme se sa shume ndikon teknologjia ne veshtrimin tone t sistemeve dhe sht me vlere t reflektojme rreth kesaj, here pas here. Ne vecanti, shpesh ndodh qe nj ndryshim ne teknologji bie nj ide t vjetruar dhe zhduket shpejt. Gjithesesi, nj tjetr ndyshim ne teknologji mund ta riktheje at ide prseri. Kjo sht e vertet vecanerisht kur ndyshimi ka t beje me performancen relative t pjeseve t ndryshme t sistemit. Pr shembull, kur CPU-t u bne me t shpejta se memoriet, chace-t u bne me t rendesishme pr prshpejtimin e memories t ngadalt. Ne qoft se ndonj dit memoriet neprmjet nj teknologjie do t beheshin me t shpejta se CPU-t, chace-t do t zhdukeshin. Dhe ne qoft se nj teknologji CPU i bn prseri me t shpejta se memoriet, chace-t do t rishfaqeshin. Ne biologji, zhdukja sht e prhershme, por ne shkencat kompjuterike, disa here sht vetm pr disa vjet. Si nj pasoje e kesaj prkohshmerie, ne ket liber here pas here do t shohim konceptet e vjetruara, sic jane, idet qe nuk jane t pajtueshme me teknologjine aktuale. Sidoqoft, ndryshimet ne teknologji mund t risillnin disa nga t keshtu quajturit koncepte t vjetruara. Pr ket arsye, sht e rendesishme t kuptojme pse nj koncept sht i vjetruar dhe cfare ndryshimesh ne mjedis mund ta risillnin prseri. Pr t qartsuar me shume ket pike, le t konsiderojme disa shembuj. Kompjuterat e hershem kishin bashkesi instruksionesh hardwired. Instruksionet ekzekutoheshin direkt nga hardware-i dhe nuk mund t ndryshoheshin. Me pas vjen mikroprogramimi, ne t cilin nj interpretues qe ndodhet ne t i beri instruksionet ne software. Ekzekutimi hardwired u be i vjetruar. Me pas u krijuan kompjuterat RISC dhe keshtu mikroprogrami (ekzekutimi i intrpretuar) u be i vjetruar sepse ekzekutimi direkt ishte me i shpejt. Tani jemi duke pare rishfaqjen e intrpretimit ne formen apletve Java qe dergohen neprmjet internetit dhe t interpretuara ne ardhje. Shpejtsia e ekzekutimit

nuk sht gjithemone vendimtare sepse vonesat e rrjetit jane shume t medha sa tentojn t dominojne. Por edhe kjo, ndonj dit mund t ndyshoje. Sisteme t hershme operative i shprndanin file-t ne disk thjesht duke i vendosur ato ne sektore t afert, njri pas tjetrit. Megjithese kjo skeme sht e leht pr tu implementuar, nuk sht fleksibel sepse me rritjen e nj file nuk ka vend mjaftueshem pr ta mbajtur at. Keshtu koncepti i fileve t shprndare afer u be nj koncept i vjetruar. Akoma kemi prreth CD-ROM. Ketu problemi i rritjes se file-s nuk ekziston. Papritur, gjithe thjeshtsia e shprndarjes se filet afer u pa si nj ide e madhe dhe tani sistemet file CD-ROM bazohen ne t. Si ide prfundimtare, konsideroni lidhjen dinamike. Sistemi MULTICS ishte projektuar pr t vepruar dit e nat pa ndaluar asnjehere. Pr t sistemuar viruset ne software ishte e nevojesheme t kishte nj menyre pr t zevendesuar procedurat library, nderkohe qe ato ishin duke u prdorur. Koncepti i lidhjes dinamike u krijua me ket qellim. Pas vdekjes se MULTICS, koncepti u harrua pr pak. Sidoqoft, ai u rizbulua kur sitemet moderne operative kishin nevoje pr nj menyre pr t lejuar shume programe pr t ndare t njjtat procedura library pa pasur kopjet e tyre private (sepse librarit grafike ishin rritur shume). Shumica e sistemeve tani suportojne edhe njehere disa forma t lidhjes dinamike. Lista vazhdon, por keto shembuj mund t japin shume mire idene; nj ide qe sot sht e vjetruar, ne ser mund t jet ylli i mbremjes. Teknologjia nuk sht i vetmi faktor qe udheheq sistemet dhe software. Gjithashtu ekonomia luan nj rol t rendesishem. Ne vitet 1960 dhe 1970, me shume terminale ishin terminale mekanike printimi ose CTR t orientuara nga 25 x 80 nga karakteret, se terminale grafike bitmap. Kjo zgjedhje nuk ishte ceshtje e teknologjise. Terminalet grafike bit-map ishin ne prdorim prpara 1960, por sht thjesht se ata kushtojne dhjetra mijera dollare secila.Vetm kur Cmimi u ul ne menyre t hatashme njerezit (vec ushtarakeve) mund t mendonin pr nj terminal pr nj prdorues individual.

1.6.

THIRRJET SISTEM

Nderfaqa ndermjet sistemit operativ dhe programeve user prcaktohet nga nj bashkesi thirrjesh sistem qe sigurohen nga sistemi operativ. Pr t kuptuar se cfare bn sistemi operativ ne t vertet, duhet ta ekzaminojme ket nderfaqe me afer. Thirrjet sistem t prdorshme ne sistem ndyshojne nga nj sistem operativ ne nj tjetr sistem operativ (edhe pse konceptet ne to tentojn t jene t ngjashem) Keshtu jemi t detyruar t bejme nj zgjedhje mes (1) prgjithesimeve t paqarta (sisteme operative kane thirrjet sistem pr t lexuar file) dhe (2) nj sistemi specifik (UNIX ka nj thirrje sistem me tre parametra: Nj pr t specifikuar file-in, nj pr t treguar se ku duhet t vendosen t dhenat dhe nj pr t treguar sa byte t lexohen) Ne kemi zgjedhur rrugen e dyt. Kjo menyre ka me shume pune, por na jep me shume deprtim ne at se cfare bn sistemi operativ ne t vertet. Megjithese ky diskutim i referohet ne menyre t vecant POSIX (Intrnational Standart 9945-1), por tani edhe UNIX, System V, BSD, Linux, MINIX,etj, shume sisteme moderne operative t tjere kane thirrje sistem pr prformimin e t njjtve funksione, edhe pse detajet ndryshojne. Prderisa mekaniket ne nxjerrjen e thirrjeve sistem jane t varur shume nga

makina dhe shpesh duhet t shprehen ne kode assembly, sigurohet nj procedure library pr t bere t mundur berjen e thirrjeve sistem nga programe ne C dhe shpesh nga programe ne gjuhe t tjera gjithashtu. sht e dobishme t mbajme ne mendje keto t meposhtmet. do kompjuter me nj CPU t vetme mund t ekzekutoje vetm nj instruksion ne nj kohe. Ne qoft se nj proes po ekzekuton nj program user ne mode user dhe ka nevoje pr nj sherbim t sistemit, si leximi i t dhenave nga file, atij i duhet t ekzekutoje nj instruksion trap ose thirrje sistem pr t transferuar kontrollin sistemit operativ. Me pas sistemi operativ gjen se cfare kerkon proesi thirres duke shqyrtuar parametrat. Me pas ai kryen thirrjen sistem dhe i kthen kontrollin instruksionit pas atij qe shkaktoi thirrjen sistem. Ne nj kuptim, t berit e nj thirrjeje sistem sht si t berit e nj lloji t vecant thirrjeje procedure, vetm thirrjet sistem hyjne ne kernel dhe thirrjet procedure jo. Pr t qartsuar mekanizmin e thirrjes sistem, le ti hedhim nj sy t shpejt thirrjes lexim t sistemit. Sic prmendem me sipr, ai ka tre parametra; i pari pr t specifikuar file-in, i dyti pr t shenuar bufferin dhe i treti pr t dhene numrin e byteve qe duhen lexuar. Pothuajse si t gjithe thirrjet sistem, kerkohet nga programe ne C duke thirrur nj procedure library me t njjtin emer si ai i thirrjes sistem: read. Nj thirrje nga nj program ne gjuhen C mund t ngjaje me dicka t tille: count = read(fd, buffer, nbytes); Thirrja sistem (dhe procedura library) kthejne numrin e byteve aktualisht t lexuare ne count. Kjo vlere normalisht sht sa nbytes, por mund t jet me i vogel, ne qoft se, pr shembull, fundi i file-s sht takuar befasisht gjat leximit. Ne qoft se thirrja sistem nuk mund t kryhet, ose pr shkak t nj parametri t gabuar apo nj errori t diskut, count vendoset -1, dhe numri error vendoset ne nj variabel global, errno. programet duhet gjithmone t kontrollojne rezultatet e thirrjes sistem pr t pare ne se ka patur ndonj error. Thirrjet sistem kryhen ne nj seri hapash. Pr t qartsuar ket koncept, le t ekzaminojme thirrjen lexim t pare me sipr. Gjat prgatitjes pr thirrjen e procedures library read, qe aktualisht bn thirrjen lexim t sistemit, programi thirres fillimisht fut parametrat ne stack, sic tregohet ne hapat 1-3 ne figuren 1.17. Kompilatoret C dhe C++ fusin parametrat ne stack me renditje mbrapr shembullt (reverse) pr arsye historike (duke iu dashur t bejne prametrin e pare ne print, stringa format, shfaqet ne krye t stackout). Parametrat e pare dhe t tret thirren me vlera, por parametri i dyt me reference, qe do t thot, qe kalohet adresa e bufferit (e prcaktuar me &), jo prmbajtja e bufferit. Me pas vjen thirrja aktuale ne proceduren library (hapi 4). Ky instruksion sht instruksioni i thirrjes normale procedure i prdorur pr t kryer thirrjen e t gjithe procedurave. Procedura library, me shume mundesi e shkruajtn ne gjuhen assembly, ne menyre tipike vendos numrin e thirrjes sistem ne nj vend ku sistemi operativ po e pret at, si ne nj regjistr (hapi 5). Me pas ekzekuton nj instruksion TRAP pr t ndryshuar nga mode user ne at kernel dhe fillon ekzekutimin ne nj adrese t caktuar ne kernel (hapi 6). Kodi kernel qe fillon kontrollon numrin e thirrjes sistem dhe me pas e dergon ne manovruesin e thirrjeve korrigjim t sistemit, zakonisht neprmjet nj tabele pointerash drejt manovruesit t thirrjeve sistem t indeksuara ne numrin e thirrjes sistem (hapi 7). Ne

ket pike manovruesi i thirrjeve sistem fillon se vepruari (hapi 8). Sapo manovruesi i thirrjes sistem prfundon punen e tij, kontrolli mund t kthehet ne hapesiren e prdoruesit t procedures library tek instruksioni pasardhes i instruksionit TRAP (hapi 9). Kjo procedure me pas kthehet ne programin user ne menyre t zakonshme sic kthehen thirrjet e procedures (hapi 10). Pr t mbaruar punen, programi user duhet t pastroje stck-un, sic bn pas do thirrjeje procedure (hapi 11).Duke supozuar se stack sht ne rrenie, si ndodh shpesh, kodi i kompiluar inkrementon pointerin e stack-ut mjaftueshem pr t hequr parametrat e futur para thirrjes read. Programi tani sht i lire t beje cfare t doje.

Fig.1.17. 11 hapat pr t bere nj thirrje sistem read (id, buffer, nbytes) Ne hapin 9 me sipr thame mund t kthehet ne hapesire e prdoruesit t procedures library... pr arsye t mire.Thirrja sistem mund t bllokoje thirresin, duke e ndaluar at nga numerimi. Pr shembull, ne qoft se po mundohet t lexoje nga tastjera dhe asgje nuk sht shtypur akoma, thirresi duhet t bllokohet. Ne ket rast, sistemi operativ do t shohe ne se mund t ekzekutohet ndonj proes tjetr. Me vone, kur inputi i deshiruar sht

sht i gatshem, ky proes do t marre vemendjen e sistemit dhe do t ndodhin hapat 911. Ne paragrafet e meposhtm, do t shqyrtojme disa nga thirrjet sistem POSIX me prdorim me t gjere ose ne menyre me specifike, procedurat library qe bejne keto thirrje sistem. POSIX ka rreth 100 thirrje procedura. Disa nga me t rendesishmet jane t listuara ne figuren 1.18, t prpunuara me marreveshje ne katr kategori. Ne tekst do t shqyrtojme shkurtimisht do thirrje pr t pare se cfare bn ajo. Ne nj shtirje t madhe, sherbimet e ofruara nga keto thirrje prcakojne shumicen e atyre cfare duhet t beje sistemi operativ, prderisa menaxhimi i burimeve ne personal computers sht minimal (t paktn i krahasuar me makina t medha me shume prdorues). Sherbimet prfshijne gjera si krijimin dhe prfundimin e proeseve, krijimin, fshirjen, leximin dhe shkrimin e fileve, menaxhimin e direktorive, kryerjen e inputit dhe outputit.

Fig 1.18. Disa nga thirrjet sistem kryesore t POSIX.Kodi i kthimit s sht -1 ne qoft se ndodh ndonj gabim.Kodet e kthimin jane si ne vijim: pid sht nj proes id, fd sht nj deskriptor file, n sht nj numer bytesh, position sht nj offset ne file, dhe seconds sht nj kohe e kaluar. Parametrat shpjegohen ne tekst. sht e rendesishme t theksojme se paraqitje e thirrjeve procedura POSIX ne thirrjet sistem nuk sht nj ne nj. Standartet POSIX specifikojne nj numer procedurash qe nj sistem i prshtatshem duhet t siguroje, por nuk specifikon ne se ato jane thirrje sistem, thirrje library apo dicka tjetr. Ne qoft se nj procedure mund t kryhet pa kerkuar nj thirrje sistem (pa trapping ne kernel), ajo pegjithesisht do t jet bere ne hapesiren user pr arsye t performancs. Sidoqoft, shumica e procedurave POSIX kerkojne thirrjet sistem, zakonisht me nj grafike (mapping) procedure direkt ne nj thirrje sistem. Ne pak raste, vecanerisht ku disa procedura t nevojshme jane vetm variante t nj tjetri, nj thirrje sistem manovron me shume se nj thirrje library.

1.6.1. THIRRJET SISTEM PR MENAXHIM E PROESIT Grupi i pare i thirrjeve ne fiuren 1.18. merret me menaxhimin e proeseve. Fork sht sht ne menyre tipike shume mire pr t filluar diskutimin. Fork sht menyra e vetme pr krijim e nj proesi t ri ne UNIX. Ai krijon nj kopje identike me proesin origjinal, duke prfshire t gjithe deskriptoret e fileve, regjistrat-do gje. Pas forkut, proesi origjinal dhe kopja e tij (prindi dhe femija) vazhdojne ne rruge t ndara. T gjithe variablat kane vlera identike ne kohen e forkut, por prderisa t dhenat e prindit jane kopjuar pr t krijuar femijen, ndryshimet pasuese ne njrin nuk kane efekt ne tjetrin. (Teksti program, qe sht i pandryshueshem ndahet mes prindit dhe femijes).Thirrja fork kthen nj vlere, e cila sht 0 tek femija dhe e barabart me identifikuesin e proesit femije ose PID tek prindi. Duke prdorur PID-in e kthyer, dy proeset mund t shohin se kush sht proesi prind dhe kush sht proesi femije. Ne shumicen e rasteve, pas nj fork-u, femija do t ket nevoje pr t ekzekutuar nj kod t ndyshem nga prindi. Konsideroni rastin e shell-it. Ai lexon nj komande nga terminali, krijon nj proes femije, pret qe femija t ekzekutoje komanden dhe me pas lexon komanden pasardhese kur prfundon femija. Pr t pritur qe t mbaroje femija, prindi ekzekuton nj thirrje sistem waitpid, e cila thjesht pret derisa t prfundoje femija (do njri femije ne se ekzistojne me shume se nj). Waitpid mund t prese pr nj femije specifik ose pr do njrin femije t vjetr duke vendosur parametrin e pare ne -1. Kur nj waitpid prfundon, adresa e shenjuar nga parametri i dyt, statloc, do t evndoset ne

statusin exit t femijes (prfundim normal apo jonormal dhe vlera exit). Jane krijuar gjithashtu opsione t ndryshme, t specifikuar nga parametri i tret. Tani konsideroni se si sht prdorur fork ne shell. Kur shtypet nj komande, shell-i formon nj proes t ri. Ky proes femije duhet t ekzekutoje komanden e prdoruesit. Ai e bn ket duke prdorur thirrjen sistem execve, i cili shkakton qe imazhi i tij thelbesor i plot t zevendesohet nga file i emeruar ne parametrin e pare. (Aktualisht, thirrja sistem vet sht exec, por disa proceduar library t ndryshme e therrasin at me parametra t ndryshem dhe pak a shume me emra t ndryshem. Keto do ti trajtojme si thirrje sistem ketu). Ne figuren 1.19. tregohet nj sheet shume i thjeshtsuar i cili ilustron prdorimin e fork-ut, waitpid, dhe gjithashtu execve. Ne rastet me t prgjithshme, execve ka tre parametra; emrin e file-s qe do t ekzekutohet, nj pointer ne grupin e argumentit dhe nj pointer ne grupin e ambjentit. Keto do t prshkruhen shkurtimisht. Rutina t ndryshme library, duke prfshire execl, execv, execle, dhe execve jane t krijuare pr t lejuar parametrat t jene harruar apo specifikuar ne menyra t ndryshme. Prgjat ketij libri ne do t prdorim emrin exec pr t paraqitur thirrjen sistem t kerkuar nga t gjithe keto. Le t konsiderojme rastin e komandes si cp file1 file2 e prdorur pr t kopjuar file 1 ne file 2. Pas si shelli ka bere fork (degezim), proesi femije vendoset dhe ekzekuton file-n cp dhe i kalon asaj emrat e burimeve dhe file-t target.

Fig 1.19.Nj shell stripped-down.Prgjat librit, TRUE pranohet t merret si 1.

Programi kryesor i cp (dhe programi kryesor i shumices se programeve t tjere ne C) prmbajne deklarimin main(argc, argv, envp) ku argc sht nj numerimi i numrave t fjaleve ne rreshtin e komandes, duke prfshire edhe emrin e programit. Pr shembull sipr argc sht 3. Parametri i dyt, argv, sht nj pointer ne nj grup. Elementi i i ketij grupi sht nj pointer i stringes se i-t ne rreshtin komande.Ne shembullin tone, argv[0] do t shenont ne stringen cp dhe argv[1] do t shenont ne stringen file1 dhe argv[2] do t shenont ne stringen file2. Parametri i tret i main, envp, sht nj pointer i mjedisit, nj grup stringash qe prmbajne funksione t formes name=value t prdorur pr t kaluar informacion ne nj program si lloji i terminalit dhe emri i direktorise home. Ne figuren 1.19., nuk kalohet asnj mjedis tek femija, keshtu parametri i tret i execve sht zero. Ne qoft se exec duket i komplikuar, mos u deshproni; ai sht (nga ana kuptimore) me kompleksi i t gjithe thirrjeve sistem POSIX. T gjithe t tjerat jane me t thjeshta. Si shembull t nj me thjesht, konsideroni exit, t cilen proeset do ta prdorin kur kane mbaruar ekzekutimin. Ka nj parametr, statusin exit (0 deri ne 255), i cili i kthehet prindit neprmjet stattoc ne thirrjen sistem waitpid. Proeset ne UNIX kane memorien e tyre t ndare ne tre segment: segmenti tekst (kodi programit), segmenti t dhenave (variablat) dhe segmenti stack. Segmenti i t dhenave rritet ne drejtimin upward (lart) dhe stack rritet ne drejtimin downward (posht) sic tregohet ne figuren 1.20. Ndermjet tyre ndodhet nj hapesire pr hapesiren e paprdorur t adresave. Stack-u rritet automatikisht ne hapesire, sic mund t nevojitet, por zgjerimi i segmentit t t dhenave behet ne menyre eksplicit duke prdorur nj thirrje sistem brk, qe specifikon adresen e re ku duhet t prfundoje segmenti i t dhenave. Kjo thirrje, sidoqoft, nuk prcaktohet nga standarti POSIX meqene se programuesit jane t inkurajuar t prdorin proceduren library malloc pr ruajtjet e alokuara dinamikisht, dhe implementimi ne t i malloc nuk ishte menduar t ishte subjekt i prshtatshem pr standardizimin prderisa shume pak prdorues e prdorin at ne menyre direkt.

Fig.1.20. Proeset kane tre segment: tekst, t dhena, she stack

1.6.2

THIRRJET SISTEM PR MENAXHIMIN E FILE-VE

Shume thirrje sistem lidhen me sistemin file. Ne ket pjese ne do t shohim thirrjet qe operojne ne file individuale; ne at pasardhesin ne do t shqyrtojme ato qe prfshijne direktorit ose sistemin file si nj t plot. Pr t lexuar apo pr t shkruar nj file, file fillimisht duhet t hapet duke prdorur open. Kjo thirrje specifikon emrin e file-s qe duhet t hapet, si nj path name absolut ose relative me direktorine e punimit dhe nj kod O_RDONLY, O_WRONLY, or O_RDWR, qe do t thot hape pr t lexuar, shkruar apo t dyja se bashku. Pr krijimin e nj file t re prdoret O_CREAT. Descriptori file i kthyer me pas mund t prdoret pr lexim dhe shkrim. Pr ndryshe, file mund t mbyllet me close, qe bn descriptorin file t aft pr riprdorim ne nj hapje pasuese. Thirrjet me shume t prdorura jane padyshim lexim dhe shkrim. Leximin e pame me pare. Shkrimi ka t njjtat parametra. Megjithese shumica e programeve lexojne dhe shkruajne file ne menyre t vazhdueshme, pr disa aplikime programet duhet t jene t aft pr t aksesuar cilendo pjese t rastesishme t file-s. Me do file shoqerohet nj pointer qe tregon pozicionin aktual ne file. Kur lexohet (shkruhet) vazhdimisht, normalisht ai shenon byte0in pasardhes qe do t lexohet (shkruhet). Thirrja Iseek ndryshon vleren e pointerit t pozicionit, ne menyre qe thirrjet pasuese lexim apo shkrim mund t fillojne kudo ne file. Iseek ka tre parametra: i pari sht deskriptori file pr file-in, i dyti sht pozicioni file-s dhe i treti tregon ne se pozicioni file-s sht afer me fillimin e file-s, pozicionin aktual, ose fundin e file-s. Vlera e kthyer nga Iseek sht pozicioni absolut ne file pas ndryshimit t pointerit. Pr secilen file, UNIX mban gjurme t modes file (file normale, file speciale, direktori, dhe keshtu me rradhe), madhesine, kohen e modifikimit t fundit dhe informacion tjetr. Programet mund t kerkojne t shohin ket informacion neprmjet thirrjes sistem stat. Parametri i pare specifikon file-in qe do t inspektohet; i dyti sht nj pointer ne nj strukture ku duhet t vendoset informacioni.

1.6.3

THIRRJET SISTEM PR MENAXHIMIN E DIREKTORIVE

Ne ket pjese do t shohim disa thirrje sistem qe kane kane t bejne me direktorit ose sistemet file si nj t plot, me shume se thjesht nj file specifik si ne paragrafin paraardhes. Dy thirrjet e para, kmdir dhe rmdir, prkatsisht krijojne dhe heqin direktori boshe. Thirrja tjetr sht link. Qellimi i kesaj sht t lejoje t njjtn file t shfaqet me dy ose me shume emra, shpesh ne direktori t ndryshme. Nj prdorim tipik sht t lejuarit e disa pjesetareve t t njjtit grup programimi t ndajne t njjtn file, ku secili prej tyre t ket file-in t shfaqur ne direktorit e tyre, mundesisht me emra t ndryshem. T ndarit e nj file nuk sht e njjta me dhenien e nj kopjeje private do pjestari t

grupit, sepse t paturit e nj file t ndare do t thot qe ndryshimet t bera nga cilido pjesetare i grupit jane menjehere t dukshme tek pjesetaret e tjere-ka vetm nj file.Kur behen kopje t nj file, ndryshimet pasuese t bera ne nj prej kopjeve nuk ndikon ne t tjerat. Pr t pare se si punon link, konsideroni situatn e figures 1.21(a). Ketu ka dy prdorues ast dhe jim, secili ka direktorit e tija me disa file. Ne qoft se ast tani ekzekuton nj program qe prmban thirrjen sistem link("/usr/jim/memo", "/usr/ast/not"); file-i memo ne direktorine e jim tani sht futur ne direktorine e ast me emrin not. Pas kesaj /usr/jim/memo dhe /usr/ast/not i referohen t njjts file. Ne se direktorit e prdoruesve mbahen ne /usr, /user, /home, apo diku tjetr sht nj vendim i thjesht i marre nga administratori i sistemit lokal.

Fig.1.21.(a) Dy direktori para linking /usr/jim/memo ne direktorie e ast.(b)T njjtat direktori pas linking

T kuptuarit se si funksionon link me shume mundesi do t na qartsoje se cfare bn ai. do file ne UNIX ka nj numer unik, qe e prcakton at, numrin e tij i. Ky numri i sht nj index ne tabelen e i-nodes, nj pr file, duke treguar se kush e ka file-in ku ndodhen bloqet disk t tij, dhe keshtu me rradhe. Nj direktori sht thjesht nj file qe prmban nj bashkesi (i-number, emrin ASCII) ciftsh. Ne versionet e para t UNIX, secila hyrje e direktorise ishte 16 byte - 2 byte pr i-number dhe 14 byte pr emrin. Tani nevojitet nj strukture me e komplikuar pr suportimin e emrave t gjat t file-ve, por ne koncept nj direktori sht akoma nj bashkesi (i-number, emrin ASCII) ciftsh. Ne figuren 1.21. mail ka i-number 16 dhe keshtu me rradhe. Ajo cfare bn link sht thjesht krijimi i nj hyrje direktorie t re me nj emer (mundesisht t ri), duke prdorur i-number t files ekzistuese. Ne fig 1.21.(b), dy hyrje kane t njjtin i-number (70) dhe keshtu i referohen t njjts file. Ne qoft se me vone do njra prej tyre fshihet, duke prdorur thirrjen sistem unlink, tjetra mbetet. Ne qoft se fshihen t dyja, UNIX shikon qe nuk ekziston asnj hyrje ne file (nj fushe ne i-node mban gjurme t numrit t hyrjeve direktori duke shenuar file-in), keshtu qe file-i fshihet nga disku. Sic e kemi prmendur me pare, thirrja sistem mount lejon dy thirrje sistem t bashkohen ne nj. Nj situat e zakonshme sht t kemi file-n sistem rrenj qe prfshin versionet binare (t ekzekutueshme) t komandave t zakonshme dhe t fileve t tjera t

prdorura gjeresisht, ne nj hard disk. Me pas prdoruesi mund t vendose nj floppy disk me file qe duhet t lexohen ne drive-in e floppy disk-ut. Me ekzekutimin e thirrjes sistem mount, sistemi file i floppy disk mund t lidhet me sistemin file rrenj, sic tregohet ne figuren 1.22. Nj paraqitje tipike ne C pr t prformuar mount sht mount("/dev/fd0", "/mnt", 0); ku parametri i pare sht emri i nj file-i special block pr drive 0, parametri i dyt sht nj vend ne peme ku duhet t kalohet (mountd) dhe parametri i tret tregon ne se sistemi file duhet t caktohet lxim-shkrim apo vetm lexim.

Fig.1.22.(a)sistemi file para mount.(b)Sistemi file pas mount. Pas thirrjes mount, nj file ne drive 0 mund t aksesohet thjesht duke prdorur rrugen e saj nga direktoria rrenj ose nga direktoria e punimit, duke mos i prkitur drivet ne t cilin ndhodhet. Ne fakt, drive-t e dyt, tret, dhe t katrt mund t kalohen kudo ne peme. Thirrja mount bn t mundur intgrimin e medias t levizshme ne nj hierarki file t integruar t vetme, duke mos qene nevoja e shqetsimit se ne cilen pajisje ndodhet file. Megjithese ky shembull prfshin floppy disks, hard disks apo pjese t hard disks (shpesh t quajtura particione ose pajisje minore) gjithashtu mund t kalohet ne ket menyre. Kur nj sistem file nuk nevojitet me, ajo mund t behet unmountd neprmjet thirrjes sistem unmount.

1.6.4 THIRRJET SISTEM T PRZIERA. Gjithashtu ekziston nj shumllojshmeri thirrjesh t tjera sistem. Ketu do t shohim vetm katr prej tyre. Thirrja chdir ndryshon direktorine aktuale t punimit. Pas thirrjes chdir("/usr/ast/test"); nj open ne file-in xyz do t hape /ttsr/ast/test/xyz. Koncepti i nj direktorie punimi eliminon nevojen e shtypjes gjat gjithe kohes t path names absolute (t gjat). Ne UNIX do file ka nj mode t prdorur pr mbrojtje. Mode-a prfshin bitet read-write-execute pr pronarin, grupin dhe t tjeret. Thirrja sistem chmod bn t mundur ndryshimin e mode-s se file-it. Pr shembull, pr t bere nj file vetm t lexueshme nga do njri vec pronarit, do t ekzekutohej

chmod("file", 0644); Thirrja sistem kill sht menyre qe prdoruesit dhe proeset user dergojne sinjale, ne qoft se nj proes sht pregatitur t kape nj sinjal t vecant, me pas kur mberrin, ekzekutohet nj monovrues sinjali. Ne qoft se proesi nuk sht i prgatitur pr manovrimin e sinjalit, me pas ardhja e tij vret proesin. POSIX cakton disa procedura qe t merren me kohimin. Pr shembull, koha thjesht kthen kohen aktuale ne sekonda, me 0 qe i korrespondon 1 Jan, ne mesnat t 1970 (sapdita t ket filluar dhe jo mbaruar). Ne kompjuterat ne fjale 32-bit, vlera maksimale qe time mund t ktheje sht 232-1 sekonda (duke supozuar qe prdoret nj intrger pa shenj). Kjo vlere korrespondon me pak me shume se 136 vit. Keshtu ne vitin 2106, sistemet UNIX 32-bit do t trbohen, duke imituar problemin e famshem Y2K. Ne qoft se ju aktualisht keni nj sistem UNIX 32-bit, ju keshillohet ta ndryshoni at pr nj 64-bit para vitit 2106.

1.6.5. WINDOWS WIN32 API Me pare jemi fokusuar kryesisht ne UNIX. Tani sht koha t shohim shkurtimisht tek Windows. Windows dhe UNIX ndryshojne ne menyre thelbesore ne modelet prkatse t programimit. Nj program UNIX prbehet nga kodi qe bn nj gje apo nj tjetr, duke bere thirrje sistem pr t pasur prformimin e sherbimeve t caktuara. Ne ndryshim nga kjo, nj program Windows sht normalisht i drejtuar nga ngjarja. Programi kryesor pret qe t ndodhe nj ngjarje, me pas therret nj procedure qe t monovroje at. Ngjarje tipike jane goditja e butonave, levizja e mousit, shtypja e nj butoni t mousit apo futja e nj floppy disk-u. Me pas thirren manovruesit pr t proesuar ngjarjen, pr freskimin e screen-it dhe freskimin e gjendjes se programit t brendshem. E gjithe kjo t con ne dicka me stil t ndryshem programimi nga ai UNIX, por meqene se fokusimi i ketij libri sht ne funksionet dhe strukturat e sistemit operativ, keto modele t ndryshme programimi nuk do t na duhen shume. Sigurisht, Windows gjithashtu ka thirrje sistemi. Me UNIX, pothuajse ka nj marredhenie 1-me-1 ndermjet thirrjeve sistem (pr shembull, lexim) dhe procedurave library (Pr shembull, lexim) t prdorura pr t kerkuar thirrjet sistem. Me fjale t tjera, pr secilen thirrje sistem, ka afersisht nj procedure library qe thirret pr ta kerkuar at, sic tregohet ne figuren 1.17. Pr me tepr, POSIX ka vetm rreth 100 thirrje procedura. Me Windows, situata sht ne menyre thelbesore e ndryshme. Si fillim, thirrjet library dhe thirrjet aktuale sistem jane t ciftzuara fort. Microsft ka caktuar nj bashkesi procedurash, t quajtura Win32 API (Application Program Intrface) qe pritn t prdoren nga programuesit pr t marre sherbimet e sistemit operativ. Kjo nderfaqe sht (pjeserisht) e suportuar ne t gjithe versionet e Windows qe ne Windows 95. Me ciftimin e nderfaqes nga thirrjet aktuale sistem, Mircrosoft ruan aftsine e ndryshimit ne kohe t thirrjeve aktuale t sistemit duke mos shfuqizuar programet ekzistuese. Ajo cfare aktualisht prbn Win32 sht pak ambicioze meqene se Windows 2000 ka shume thirrje t reja qe me pare nuk ishin t disponueshme. Ne ket pjese, Win32 nenkupton nderfaqen e suportuar nga t gjithe versionet e Windows.

Numri i thirrjeve Win32 API sht jashtzakonisht shume i madh, duke numeruar me mijera. Pr me tepr, nderkohe qe shume prej tyre bejne kerkesen pr thirrje sistem, nj numer i dukshem cohet plotsisht ne hapesiren user. Si pasoje, me Windows sht e mundur t shihet se cfare sht nj thirrje sistem (e prformuar nga kernel) dhe cfare sht thjesht nj thirrje library e hapesires user. Ne fakt, ajo cfare sht thirrje sistem ne nj version t Windows mund t behet ne hapesiren user ne nj version tjetr dhe anasjelltas. Kur t diskutojme thirrjet sistem t Windows-it ne ket liber, do t prdorim procedurat Win32 (aty ku sht i duhur) meqene se Microsoft na garanton se keto do t jene t qendrueshme pr shume kohe. Por sht e rendesishme qe jo t gjitha prej tyre jane thirrje t verteta sistem (qe sht, trap ne kernel) Nj tjetr komplikim sht se ne UNIX, GUI (pr shembull, X Windows dhe Motif) vepron plotsisht ne hapesiren user, keshtu t vetmet thirrje sistem t nevojitura pr shkrimin ne nj screen jane write dhe shume pak shume pak t tjera t parendesishme. Sigurisht, ka nj numer t madhe thirrjesh pr X Windows dhe GUI, por ne nj fare kuptimi, keto nuk jane thirrje sistem. Ne ndryshim, Win32 API ka nj numer t madh thirrjesh pr menaxhimin e dritareve, figurave gjeometrike, tekstit, font-it, scrollbars, dialog boxes, menut dhe dukuri t tjera t GUI. Ne siprfaqen qe nensistemi grafik vepron ne kernel (e vertet pr disa versione t Windows por jo pr t gjitha), jane thirrjet sistem, pr ndryshe ata jane thjesht thirrje library. A duhet ti trajtojme keto thirrje ne ket liber apo jo? Meqene se ato nuk jane ne t vertet t lidhura me funksuionet e nj sistemi operativ, kemi vendosur t mos i trajtojme edhe pse ato mund t krijohen nga kerneli. Lexuesit e interesuar pr Win32 API mund t konsultohen nga shume libra pr ket teme si pr shembull, (Hart, 1997; Rector dhe Newcomer, 1997; dhe Simon, 1997). Prezantimi i thirrjeve Win32 API ketu sht jasht temes, por ne jemi kufizuar ne keto thirrje qe afersisht korrespondojne me funksionalittin e thirrjeve UNIX t listuara ne figuren 1.18. Keto jane t listuara ne figuren 1.23. Le t shohim shkurtimisht listn e figure 1.23.Create proes krijon nj proes t ri. Kjo bn kombinimin e fork dhe execve ne sistemin UNIX. Ajo ka shume parametra qe specifikojne karakteristikat a proeseve t rinj qe jane krijuar. Windows nuk ka nj hierarki proesesh sic ka UNIX, keshtu qe nuk ekziston koncepti proestit femije dhe atij prind. Pas krijimit t nj proesi krijuesi dhe i krijuari jane t njjt. WaitForSingleObject prdoret pr t pritur nj ngjarje. Mund t pritet pr shume ngjarje t mundeshme. Ne qoft se parametri specifikon nj proes, me pas thirresi pret qe proesi i specifikuar t dale, gje e cila behet duke prdorur ExitProess. Gjasht thirrjet e tjera operojne ne file dhe jane funksionalisht t ngjashem me homologet e tyre ne UNIX, edhe pse ndyshojne ne parametra dhe ne detaje. File-t mund t hapen, mbyllen, lexohen, shkruhen shume mire si ne UNIX. Thirrjet SetFilePointer dhe GetFileAttributs vendosin pozicionin e file-s dhe marrin disa veti t file-s. Windows ka direktori dhe keto direktori jane t krijuara nga CreateDirectory dhe RemoveDirectory, respektivisht. Kjo sht gjithashtu nj ide e direktorise aktuale, e vendosur nga SetCurrentDirectory. Koha aktuale sigurohet duke prdorur GetLocalTime.

Nderfaqa Win32 nuk ka marredhenie me file-t, sistemet file mountd, sigurimin ose sinjalet, keshtu qe thirrjet korresponduese me ata t UNIX nuk ekzistojne. Sigurisht, Win32 ka nj numer t madh thirrjesh qe nuk ekzistojne ne UNIX, vecanerisht pr menaxhimin e GUI. Windows 2000 ka nj sistem t nderlikuar sigurimi dhe gjithashtu suporton linkimet me file. sht e rendesishme qe t theksojme dicka t fundit rreth Win32. Win32 nuk sht nj uniform e tmerrshme apo0 nj nderfaqe e qendrueshme. Fajtori kryesor pr ket sht nevoja e t qenurit t krahasueshem me nderfaqen e meparshme 16-bit e prdorur ne Windows 3.x.

1.7. STRUKTURA E SISTEMEVE OPERATIVE Tani qe kemi pare se si duket sistemi operativ nga jasht (nderfaqa e programuesit), sht koha t shohim nga brenda. Ne paragrafet e meposhtme, do t shqyrtojme pese struktura t ndryshme qe jane provuar pr t marre ndonj ide pr spektrin e mundesive. Keto ne asnj menyre nuk jane shtrues, por japin nj idet t disa projektve t provuara ne praktike. Prse projektimet jane sisteme njbllokeshe (monolithic), sisteme me shtresa (layered), makina virtiale, exokernels dhe sistemet klient-server.

1.7.1

SISTEMET MONOLITIKE

Ne organizatat me t zakonshme t hershme, kjo arritje shume mire do t nentitullohej The big mess (rremuje e madhe). Struktura sht qe nuk ka asnj strukture. Sistemi operativ shkruhet si nj bashkesi procedurash, ku secila prej tyre mund t therrase ndonj tjetr sa here t jet e nevojshme. Kur prdoret kjo teknike, do procedure ne sistem ka nj nderfaqe t mire prcaktuar ne baze t parametrave dhe rezultateve, dhe donjra sht e lire t therrase ndonj tjetr, ne qoft se kjo e fundit siguron disa llogaritje qe i duhen t parit. Pr t ndertuar programin objekt aktual t sistemit operativ kur prdoret kjo arritje, fillimisht kompilohen t gjithe procedurat individuale ose file-t qe prmbajne procedurat, dhe me pas i lidh ata se bashku ne nj file objekt t vetm duke prdorur linker-in e files. Ne terma t fshehjes se informacionit, thellesisht nuk ka asnj- do prcedure sht e dukshme tek do procedure tjetr (e kundervene me strukturen qe prmban module apo paketime, ne t cilin shume informacione fshihen brenda moduleve dhe vetm pikat hyrese zyrtarisht t prcaktuara mund t thirren nga jasht modulit). Sidoqoft, edhe ne sistemet monolitike sht e mundur t kemi t paktn nj strukture t vogel. Sherbimet (thirrjet sistem) t siguruara nga sistemi operativ kerkohen neprmjet vendosjes se parametrave ne nj vend t mire prcaktuar (pr shembull, ne stack) dhe me pas me ekzekutimin e nj instruksioni trap. Ky instruksion ndryshon makinen nga mode user ne at kernel dhe transferon kontrollin tek sistemi operativ, e treguar si hapi 6 ne figuren 1.17. Me pas sistemi operativ merr parametrat dhe prcakton se cila thirrje sistem do t kryhet. Pas kesaj, ajo indeksohet ne nj tabele qe prmban ne nj vend t caktuar (slot) k nj pointer tek procedura qe kryen thirrjen sistem k (hapi 7 ne figuren 1.17). Ky organizim na sugjeron nj strukture baze pr sistemin operativ: 1. Nj program kryesor qe kerkon ne proceduren e sherbimit t kerkuar. 2. Nj bashkesi procedurash sherbimi qe kryejne thirrjet sistem 3. Nj bashkesi procedurash t dobishme qe ndihmojne procedurat sherbim. Ne ket model, pr do thirrje sistem ka nj procedure sherbimi qe kujdeset pr t. Procedurat e dobishme bejne gjera t nevojshme nga procedura sherbimi t ndryshme, si marrja e t dhenave nga programet user. Kjo ndarje e procedurave ne tre shtresa tregohet ne figuren 1.24.

Fig.1.24.Nj model i thjesht pr sistemet monilitike.

1.7.2. SISTEMET ME SHTRESA (LAYERED) Nj prgjithesim i trajtimit t figures 1.24 sht organizimi i sistemit operativ si nj hierarki shtresash, ku donjra sht ndertuar mbi tjetren posht tij. Sistemi i pare i ndertuar ne ket menyre ishte sistemi THE i ndertuar ne Tchnische Hogeschool Eindhoven ne Hollande nga E.W.Dijkstra (1968) dhe studentt e tij. Sistemi THE ishte nj sistem i thjesht batch pr nj kompjuter hollandez, ElectroJogica X8, i cili kishte 32K fjale 27-bit. Sistemi kishte 6 shtresa, sic tregohen ne figuren 1.25. Shtresa 0 merrej me alokimin e proesoreve, ndyshimin mes proeseve kur ndodhnin interrupte apo skadime t kohes. Sipr shtreses 0, sistemi prbehej nga proese vijues ku secili prej tyre mund t lidht programe duke mos u shqetsuar rreth faktit se shume proese po vepronin ne nj proesor t vetm. Me fjale t tjera, shtresa 0 siguroi multiprogramimin baze t CPU.

Shtresa 5 4 3 2 1 0

Funksionet Operatori Programet User Menaxhimi input/output Komunikimi Operator-proes Menaxhimi i memories dhe drum-it Alokimi i proesorit dhe multiprogramimit

Shtresa 1 bnte menaxhimin e memories. Ajo alokont hapesire pr proeset ne memorien kryesore dhe ne 512K drum fjale t prdorur pr mbajtjen e pjeseve t proeseve (faqeve) pr t cilat nuk kishte vend ne memorien kryesore. Sipr shtres 1, Proeset nuk kishin pse t shqetsoheshin ne se ato ishin ne memorie apo ne drum; software-i i shtreses 1 u kujdes pr t bere t sigurt qe faqet t silleshin ne memorie kurdo qe ata mund t nevojiteshin. Shtresa 2 bnte t mundur komunikimin ndermjet secilit proes dhe konsolit t operatorit. Mbi ket shtrese secili proes ne menyre efektive kishte konsolin e tij t operatorit. Shtresa 3 kujdesej pr menaxhimin e pajisjeve I/O dhe buffer-imin e rrjedhave t informacionit ne dhe jasht tyre. Sipr shtreses 3 secili proes mund t merrej me pajisjet abstrakte I/O me karakteristika t kendshme, ne vend t pajisjeve reale me shume karakteristika. Shtresa 4 ishte aty ku gjendeshin programet user. Ato nuk kishin pse t shqetsoheshin rreth proesit, memories, konsolit ose menaxhimit I/O. Proesi sistem operator ishte i vendosur ne shtresen 5. Nj prgjithesim me i metejshem se ai i konceptit t shtresave ishte prezent ne sistemin MULTICS. Ne vend t shtresave, MULTICS ishte i prshkruar duke pasur nj seri hallakash bashkeqendrore, ku ato me t brendeshmet ishin me t privilegjuara se ato t jashtmet (qe sht efektivisht e njjta gje). Kur nj procedure ne nj hallke (ring) t

jashtme dont t therrist nj procedure ne nj hallke t brendeshme, ajo duhet t bnte ekulivalenten e nj thirrjeje sistem, qe sht nj instruksion TRAP, parametrat e t cilit ishin t kontrolluara me kujdes pr vlefshmeri para se thirrja t lejohej t procedont. Megjithese sistemi operativ i tri ishte pjese e hapesires se adresave t secilit proes user ne MULTICS, hardware-i beri t mundur t prcaktont procedurat individuale (aktualisht segmentt e memories) si t mbrojtura kundrejt leximit, shkrimit ose ekzekutimit. Skema e shtresuar THE ishte me t vertet vetm nj ndihme projektimi, sepse t gjithe pjeset e sistemit se fundmi ishin t lidhura se bashku ne nj program objekt t vetm, ne MULTICS, mekanizmi ring ishte me t vertet shume prezent ne kohen e ekzekutimit nga hardware-i. Avantazhi i mekanizmit ring sht se ai shume thjesht mund t shtrihet ne strukturen e nensistemeve user. Pr shembull, nj profesor mund t shkruant nj program pr t testuar dhe kategorizoje programet student dhe t ekzekutoje ket program ne ring n , me programet student qe veprojne ne ring-un n+1, keshtu qe ata nuk mund t ndyshojne kategorine e tyre.

1.7.3. MAKINAT VIRTUALE Nxjerrjet e para t OS/360 ishin pikerisht sistemet batch.Megjithat, shume prdorues 360 donin t kishin timesharing (ndarjt t kohes), keshtu IBM vendosi t shkruaje sisteme timesharing pr t. Sistemi zyrtar IBM timesharing, TSS/360 u shprnda vone dhe kur me ne fund arriti, ai ishte kaq i madh dhe kaq i ngadalt sa qe pak site ktheheshin t ai. Ai u braktis prfundimisht pasi pr zhvillimin e tij ishin harxhuar 50 milion $ (Graham, 1970). Por nj grup i qendres shkencore t IBM ne Cambridge, Massachusetts, prodhuan sistem rrenjsisht t ndyshem qe IBM prfundimisht e pranoi si produkt, dhe qe tani sht gjeresisht i prdorur ne mainframet e tij t mbetur. Ky sistem, fillimisht i quajtur CP/CMS dhe me vone i riquajtur VM/370 (Seawright and MacKinnon, 1979), ishte i bazuar ne nj vrojtim t mpreht; nj sistem timesharing siguron (1) multiprogramimin dhe (2)nj makine t zgjeruar me nj nderfaqe me t prshtatshme se hardware-i minimal(bare).Thelbi i VM/370 sht ndarja e plot e ketyre dy funksioneve. Zemra e sistemit, e njohur si monitori i makines virtuale, vepron ne hardware-in bare dhe bn multiprogramimin, duke i siguruar jo vetm nj por me shume makina virtuale shtreses se mepasme t siprme, sic tregohet ne figuren 1.26. Sidoqoft, ndryshe nga t gjithe sistemet e tjera operative, keto makina virtuale nuk jane makina t zgjeruara, me file-a dhe dukuri t tjera t kendshme. Ne t vertet, ata jane kopje identike t hardware-it bare, duke prfshire mode-n user/kernel, I/O, interruptet dhe do gje tjetr qe kane makinat reale.

Fig.1.26. Struktura e VM/370 me CMS

Ngaqe do makine virtuale sht identike me hardware-in e vertet, do njra mund t ekzekutoje cilido sistem operativ qe do t ekzekutohet direkt ne hardware-in bare. Makina virtuale t ndryshme mund t ekzekutojne sisteme operative t ndryshme, gje qe e bejne vazhdimisht. Disa ekzekutojne nj nga paraardhesit e OS/360 pr prpunim veprimesh ose pr batch, ndersa t tjere ekzekutojne sisteme interactive me nj prdorues t vetm t quajtura CMS (Conversational Monitor System) pr prdorues interaktiv timesharing. Kur nj program CMS ekzekuton nj thirrje sistem, thirrja behet trapped t sistemi operativ ne makine e tij virtuale, jo ne VM/370, pikerisht ashtu sic do t ishte ne se do t ekzekutohej ne nj makine reale dhe jo ne nj virtuale. Me pas CMS nxjerr instruksionet normale hardware-ike I/O pr leximin e diskut t tij virtual apo cfaredo qe nevojitet pr t kryer nj thirrje. Keto instruksione I/O behen trapped nga VM/370, i cili me pas i intrpreton ato si pjese e simulimit t tij t hardware-it real. Duke ndare plotsisht funksionet e multiprogramimit dhe sigurimit t nj makine me t zgjeruar, secila nga pjeset mund t jet me e thjesht, me fleksibel dhe me e kollajt pr tu mbajtur. Idea e makinave virtuale ne ditt e sotme sht gjeresisht e prdorur ne nj kontekst t ndryshem: ekzekutimi i programeve t vjetr MS-DOS (ose CPU t tjera Intel 32-bit). Gjat projektimit t Pentium-it dhe software-it t tij, Intel dhe Microsoft kuptuan qe do t kishte nj nevoje t madhe pr ekzekutimin e software-ve t vjetr ne hardwareet e rinj. Pr ket arsye, Intel siguroi nj mode viruale 8086 ne Pentium. Ne ket mode, makina sillet si nj 8086 (e cila nga kendveshtrimi i software sht identike me nj 8088), duke prfshire adresimin 16-bit me nj limit 1-MB. Kjo mode prdoret nga Windows dhe sisteme t tjera operative pr ekzekutimin e programeve MS-DOS. Keto programe fillohen ne mode virtuale 8086. Pr sa kohe ata ekzekutojne instruksione normale, ata ekzekutojne ne hardware-in bare. Gjithsesi, kur nj program bn prpjekje pr t trap me sistemin operativ pr t bere nj thirrje sistem apo bn prpjekje pr t bere ne menyre direkt I/O t mbrojtur, ndodh nj trap ne monitorin e makines virtuale. Ne ket projektim jane t mundshem dy variante. Ne t parin, vet MS-DOS sht i ngarkuar ne hapesiren e adresave virtuale t 8086, keshtu qe monitori i makines virtuale thjesht reflekton mbrapr shembullt trap-in tek MS-DOS, pikerisht sic do t ndodhte ne 8086 reale. Kur MS-DOS me vone provon t beje vet I/O, ky oprim nderpritet dhe kryhet nga monitori i makines virtuale. Ne variantin tjetr, monitori makines virtuale thjesht kap trap-in e pare dhe bn I/O vet, meqene se ajo i di se cfare jane t gjitha thirrjet sistemit MS-DOS dhe keshtu di

se cfare sht i supozuar t beje secili trap. Ky variant sht me pak i pastr se ai i pari, prderisa rivalizon ne menyre korrekte vetm MS-DOS dhe jo sistemet e tjera operative, sic bn i pari. Ne anen tjetr, sht me i shpejt, prderisa ruan problemet e fillimit t MS-DOS pr t bere I/O. Nj disavantazh i metejshem i MS-DOS-it aktualisht veprues ne mode viruale 8086 sht se harxhon shume kohe me bitet enable/disable t interrupteve, t gjitha keto duhet t rivalizohen ne nj kosto t konsiderueshme. sht e rendesishme t theksojme se asnjra nga keto arritje jane me t vertet t njjta me VM/370, meqene se makina qe do t rivalizohet nuk sht nj Pentium i plot, por vetm nj 8086. Me sistemin VM/370 sht e mundur t ekzekutohet vet VM/370 ne makine virtuale. Me Pentium, nuk sht e mundur t ekzekutohet Windows nw 8086 virtuale sepse asnj version i Windows nuk ekzekutohet ne nj 8086; nj 286 sht minimumi edhe pr versionet me t vjetra dhe rivalizuesi i 286 nuk sht krijuar (duke lene menjane rivalizimin e Pentium). Gjithsesi, duke modifikuar pak binary-n Windows, ky rivalizim sht i mundur madje edhe i prshtatshem ne produktt komerciale. Tjetr prdorim i makinave virtuale, por ne nj menyre t ndryshme sht pr ekzekutimin e programeve Java. Kur Sun Microsystems krijuan gjuhen e programimit Java, gjithashtu krijuan nj makine virtuale (nj arkitekture kompjuteri) t quajtur JVM (Java Virtual Machine). Kompilatori Java prodhon kod pr JVM, i cili me pas ekzekutohet nga nj interpretues JVM software-i. Avantazhi i kesaj arritjeje sht se kodi JVM mund t transportohet neprmjet internetit ne do kompjuter qe ka nj interpretues JVM dhe t ekzekutohet atje. Ne qoft se kompilatori ka prodhuar SPARC ose programe binare Pentium, pr shembull, ato mund t mos jene transportuar dhe ekzekutohen kudo kaq leht. (Sigurisht Sun mund t kishte prodhuar nj kompilator qe prodhonte binare SPARC dhe me pas t shprndant nj interpretues SPARC por JVM sht nj arkitekture me e thjesht pr tu intrpretuar). Nj tjetr avantazh i prorimit t JVM sht se ne qoft se interpretuesi sht implementuar sic duhet, qe nuk sht plotsisht e parendesishme, Programet ardhese JVM kontrollohen pr siguri dhe me pas ekzekutohen ne nj mjedis t mbrojtur ne menyre qe ata t mos mund t vjedhin t dhena apo t bejne ndonj dem tjetr.

1.7.4. EXOKERNELS Me VM/370, do proes user merr nj kopje identike t kompjuterit aktual. Me mode-n virtuale 8086 ne Pentium, do proes user merr nj kopje identike t nj kompjuteri tjetr. Duke vazhduar nj hap me tej, kerkuesit a M.I.T. kane ndertuar nj sistem qe i jep secilit prdorues nj klonim t kompjuterit aktual, por me nj nenbashkesi burimesh (Engler et al., 1995). Keshtu nj makine virtuale mund t marre bloqe disku nga 0 -1023, tjetri me pas mund t marre blloqet nga 1024-2047 dhe keshtu me rradhe. Ne shtresen e fundit, sht nj program qe vepron ne mode kernel dhe quhet exokernel. Puna e tij sht alokimi i burimeve ne makinen virtuale dhe me pas kontrollon prpjekjet pr prdorimin e tyre pr tu siguruar qe asnj makine nuk po mundohet t prdor burimet e dikujt tjetr. Secila makine virtuale e nivelit user mund t ekzekutoje sistemin e tij operativ, si ne VM/370 dhe Pentium virtual 8086, prvec qe secila sht e kufizuar pr t prdorur vetm burimet qe ka kerkuar dhe qe me pas jane alokuar.

Avantazhi i skemes exokrenel sht se ajo ruan nj shtrese t mapping. Ne projektime t tjera, do makine virtuale mendon sikur ka disqet e tij, me blloqe ekzekutimi nga 0 deri ne nj maksimum, keshtu qe monitori i makines virtuale duhet t mbaj tabela pr t rihartuar adresat e diskut (all t burimeve t tjere). Me exokernel ky rihartim sht i panevojshem. Exokerneli ka te beje me at se cila gjurme se cila makine virtuale i sht caktuar cilit burim. Kjo metode ka akoma avantazhit e ndarjes se multiprogramimit (ne exokernel) nga kodi i sistemit operativ user (ne hapesiren user), por me me pak mbingarkese, meqene se e gjithe ajo cfare duhet t beje exokerneli sht t mbaje makinat virtuale larg t ngacmimive t t tjereve.

1.7.5. MODELI KLIENT-SERVER VM/370 rritet ne thjeshtsi duke levizur nj pjese t madhe t kodit tradicional t sistemit operativ (duke implementuar makinen e zgjeruar) ne nj shtrese me t lart, CMS. Sidoqoft, vet VM/370 akoma sht nj program kompleks sepse simulimi i nj numri t 370 virtuele ne tresi t tyre nuk edht aq e thjesht (vecanerisht ne qoft se doni ta bni at ne menyre t arsyeshme eficente). Nj tndence ne sistemet moderne operative sht ideja e t levizurit t kodit ne shtresa t metejshme t siprme dhe t heqe sa me shume t jet e mundur nga moda kernel, duke lene nj mircokernel minimal. Arritja e zakonshme sht t implementuarit e shumices se sistemit operativ ne proeset user. Pr t kerkuar nj sherbim, si leximi i nj blloku apo i nj file-i, nj proes user (tani i njohur is proesi klient) dergon kerkesen ne nj proes server, i cili me pas bn punen dhe dergon mbrapa prgjigjen.

Fig.1.27. Modeli klient-server.

Ne ket model t treguar ne figuren 1.27., e gjithe ajo cfare kerneli bn sht organizimi i komunikimit mes klientit dhe serverit. Duke ndare sistemin operativ ne dy pjese, ku secila merret me nj aspekt t sistemit si; sherbimi file, sherbimi proes, sherbimi terminal apo sherbimi memorie, secila pjese behet me e vogel dhe me e menaxheshme. Pr me tepr, meqe t gjithe serverat veprojne si proese t mode-s user, dhe jo ne kernel, ata nuk kane aksesim direkt ne memorie. Si pasoje, ne qoft se gjendet nj virus ne fileserver, sherbimi file mund t deshtoje, por kjo nuk do t beje t deshtoje e gjithe makina.

Nj tjetr avantazh i modelit klient-server sht prshtatshmeria e prdorimit ne sistemet e shprndara (shikoni figuren 1.28.). Ne qoft se nj klient komunikon me nj server duke derguar mesazhe, klienti nuk ka nevoje t dije ne se mesazhi merret lokalisht nga makina e tij, apo sht derguar neprmjet nj rrjeti tek makina e serverit. Pr sa kohe klienti sht i interesuar, e njjta gje ndodh ne t dy rastet: dergohet nj kerkese dhe vjen nj prgjigje. Figura e mesiprme e nj kerneli qe merret me transportin e mesazheve nga klientt t serverat dhe anasjelltas nuk sht plotsisht reale. Disa funksione t sistemit operativ (si ngarkimi i komandave ne regjistrat e pajisjeve fizike I/O) jane t veshtira, pr t mos thene t pamundura, pr tu bere nga programet ne hapesiren user. Ka dy menyra pr tu marre me ket problem. Nj menyre sht t kemi disa proese server kritike (pr shembull, driverat e pajisjeve I/O) qe aktualisht t veprojne ne mode kernel, me aksesim t plot ne hardware, por akoma t komunikojne me proeset e tjera duke prdorur mekanizmin e mesazheve normale. Menyra tjetr sht t ndertojme nj sasi minimale t mekanizmit ne kernel por vendimet e mencura ti leme ne dore t serverave ne hapesiren user (Levin et al., 1975). Pr shembull, kerneli duhet t njohe qe nj mesazh i derguar ne nj adrese t caktuar nenkupton t marre prmbajtjen e atij mesazhi dhe ta ngarkoje at ne regjistrat e pajisjeve I/O, qe t filloje leximin e diskut. Ne ket shembull, kerneli nuk duhet t prese sa bytet ne mesazh, pr t pare ne se ishin gabim apo t pakumptimta, ai thjesht duhet t kopjoje ato ne regjistrat e pajisjeve ne disk, (me sa duket, disa skema pr limitimin e mesazheve t tille duhet t prdoren vetm ne proese t autorizuar). Ndarja mes mekanizmit dhe mencurise sht nj koncept i rendesishem. Ndodh ne kontekste t ndryshme ne sistemin operativ here pas here.

Fig.1.28. Modeli klient-server ne sistemet e shprndare.

1.8. KERKIMI NE SISTEMET OPERATIVE Shkenca kompjuterike sht nj fushe qe avancon shume shpejt dhe sht e veshtire t parashikosh se ku do t shkoje. Kerkuesit ne universitet dhe ne laboratoret industrial t kerkimit jane ne menyre t vazhdueshme duke menduar pr ide t reja, disa prej t cilave nuk shkojne ne asnj vend por dise prej tyre behen themeloret e produktve t se ardhmes dhe kane ndikim masiv ne industri dhe t prdoruesit. T tregosh se cfare sht secila duket me e leht se ne jetn reale. Ndarja e grurit nga mbeturinat sht vertet e veshtire sepse shpesh kerkon 20-30 vjet qe t ndikohet nga ideja.

Pr shembull, kur presidenti Eisenhower ndertoi dep. e Defences Advanced research Projects Agency (ARPA) ne 1958, ai po mundohej t mbant ushtrine nga vrasja e flots ushtarake detare dhe forcat ajrore neprmjet buxhetit t kerkimeve ne Pentagon. Ai nuk po mundohej t krijonte internetin. Por nj nga gjerat qe beri ARPA ishte financimi i disa kerkime universitare, gje qe shpejt coi ne rrjetin e pare eksprimental packet-switched, ARPANET. Vazhdoi deri ne 1969. Me lidhjen e rrjetve t tjere t gjetur nga ARPA me ARPANIt, lindi interneti. Athere interneti pr 20 vjet prdorej nga kerkuesit ushtarake pr dergimin e emailve t njri-tjetri. Ne fillim t 1990, Tim BernersLee krijoi World Wide Web ne laboratorin e kerkimeve CERN ne Geneve dhe Marc Adreesen shkroi nj browser grafik pr t ne universitetin Illinois. Shume shpejt interneti ishte plot t rinj qe chatonin. Kerkimet ne sistemet operative gjithashtu na cojne ne ndryshime dramatike ne sistemet praktike. Sic e kemi diskutuar me pare, sistemet e para komerciale kompjuterike ishin t gjithe sisteme batch, derisa M.I.T. krijoi timesharing interaktiv ne fillim t viteve 1960. Kompjuterat ishin t gjithe text-based derisa Doug Engelbart krijoi mouse-in dhe nderfaqen grafike user ne institutin kerkimore Stanford ne fund t viteve 1960. Kush e di se cfare do t vij me vone? Ne ket paragrafe do t shohim shkurtimisht ne disa kerkime ne sistemet operative qe jane bere gjat 5 deri 10 vitet e fundit, thjesht t japim nj atmosfere t atyre qe jane ne horizont. Ky prezantim nuk sht i hollesishem dhe prgjithesisht sht i bazuar ne publikimet ne revistat kerkimore dhe konferenca. Shumica e citimeve t publikimeve jane publikuar nga ACM apo nga Organizata e kompjuterave IEEE, apo USENIX dhe jane t diponueshem ne internet tek pjesetaret e ketyre organizatave dhe biliotekave dixhitale t tyre vizitoni: ACM http://www.acm.org IEEE Computer Society http://www.computer.org USENIX http://www.usenix.org Virtualisht t gjithe kerkuesit e sistemeve operative kuptojne qe sistemet aktuale operative jane masive, infleksible, t pabesueshme, t pa sigurta dhe t ngarkuar me viruse, disa me shume e disa me pak (pr t mbrojtur fajtorin emrat jane t fsheht). Pr pasoje sht bere nj kerkim i gjere pr menyren se si t ndertojme sisteme fleksible. Shumica e kerkimeve kane lidhje me sistemet mikrokernel. Keto sisteme kane nj kernel minimal, keshtu qe ka nj shans qe ato mund t behen t besueshem dhe t regulluar. Ata gjithashtu jane fleksibel sepse shume sisteme operative reale veprojne shume si proese user mode, dhe keshtu mund t zevendesohen apo t prshtatn shume leht, mundesisht edhe gjat ekzekutimit. Ne menyre tipike ajo cfare bn mikrokerneli sht t merret me menaxhimin e burimeve dhe kalimin e mesazheve mes proeseve user. Mikrokernelat e gjenerates se pare, si Amoeba (Tanenbaum et ah, 1990), Chorus (Rozier et al., 1988), Mach (Accetta et al., 1986), dhe V (Cheriton, 1988), treguan se sisteme t tille mund t ndertoheshin dhe t prdoreshin pr pune. Gjenerata e dyt po prpiqet t tregoje qe ato jo vetm mund t punojne, por madje edhe me performance t lart (Ford et al, 1996; Hartig et al, 1997; Liedtke 1995,1996; Rawson 1997; dhe Zuberi et al, 1999). Bazuar ne mase t publikimeve duket se ky objektiv sht arritur.

Ne ditt e sotme shumica e kerkimeve kernel sht fokusuar ne ndertimin e sistemeve operative t zgjatshme (extnsible). Keto jane ne menyre tipike sistemet mikrokernel me aftsi pr t zgjeruar dhe prshtatur ne disa drejtime. Disa shembuj jane Fluke (Ford et al., 1997), Paramecium (Van Doom et al., 1995), SPIN (Bershad et al.,1995) dhe Vino (Seltzer et al., 1996). Disa kerkues gjithashtu po kerkojne se si mund t zgjerojne sistemet ekzistuese (Ghormley et al 1998). Shume nga keto sisteme lejojne sistemin operativ t shtojne kodin e tyre ne kernel, gje e cila na sjell problemin e dukshem se si t lejohen prapashtesat (extension) ne nj menyre t sigurt. Teknikat prfshijne intpretimin e extension-eve, kufizimin e tyre ne sandobox-et kodeve, prdorimin e gjuheve type-safe dhe shenimin e kodit (Grimn dhe Bershad, 1997: dhe Small and Seltzer, 1998). Druschd et al (1997) paraqet nj opinion kunder, duke thene se do t duhej shume prpjektje ne mbrojtje pr sistemet oser-extandable. Sipas tyre, kerkuesit duhet t kuptonin se cilt extensions ishin t dobishem dhe me pas ti bnin ato pjese normale t kernelit. Edhe pse nj arritje pr t eliminuar sistemet operative plot me viruse dhe t pabesueshem sht ti bejme ata me t vegjel, nj tjetr me thelbesore sht t fshijme t gjithe sistemin operativ. Kjo arritje po ndiqet nga grupi Kaashoek neVI.IT, ne kerkimet e tyre exokernel. Ketu idea sht t kemi nj shtrese t holle software qe vepron ne metalin bare, puna e vetme e t cilit sht alokimi i sigurt i burimeve hardware tek userat. Pr shembull, ai duhet t vendose kush do t prdore dhe cilen pjese t diskut, dhe ku do t vendosen paketat hyrese. do gje tjetr i sht lene ne dore proeseve t nivelit user, duke bere t mundur ndertimin e sistemeve operative me qellime t prgjithshme dhe atyre hollesisht t specifikuara (Engler dhe Kaashoek,1995; Engler et al, 1995: dhe Kaashoek et al, 1997).

1.9. PARASHTRIMI I PJESES TJETR T LIBRIT Tani kemi prfunduar se prezantuari veshtrimin e prgjithshem t sistemeve operative. sht koha t futmi me ne detaje. Kapitulli 2 trajton proeset. Ai gjithashtu flet pr karakteristikat e tyre dhe menyren e komunikimit t tyre me njri-tjetrin. Gjithashtu ka nj nj numer shembujsh t detajuar se si funksionon komunikimi nderproesor dhe si shmangim disa kurthe. Kapitulli 3 trajton deadlocks. Ne ket kapitull ne treguam shkrutimisht se cfare jane deadlocks, por ka me shume pr t thene rreth tyre. Gjithashtu diskutohen menyra pr ndalimin e tyre. Ne kapitullin 4 do t studiojme ne detaje menaxhimin e memories. Ketu do t shpjegohen tmat e rendesishme t memories virtuale, me konceptet t lidhura ngusht si paging dhe segmentimi. Inputi/Output do t trajtohet ne kapitullin e pest. Do t shihen konceptet e pajisjeve t pavarura dhe t varura. Disa pajisje t rendesishme, duke prfshire edhe disqet, tastjerat do t prdoren si shembuj. Me pas ne kapitullin e gjasht, vijme ne tma t rendesishme t sistemeve file. Me nj zgjerim t konsiderueshem, ajo cfare sheh prdoruesi sht prgjithesisht sistemi file. Do t shikojme nderfaqen e sistemeve file dhe implementimin e sistemeve file.

Ne ket pike do t kemi prfunduar studimin tone t principeve baze t sistemeve operative me nj CPU t vetme. Gjithsesi, ka me shume pr t thene, sidomos rreth tmave t avancuara. Ne kapitullin 7, do t shqyrtojme sistemet multimedia, t cilt kane nj numer karakteristikash dhe vetish qe ndryshojne nga sitemet operative tradicionale. Vec t tjerave, skedulimi dhe sistemet file jane t ndikuara nga natyra e sistemeve multimedia. Nj tjetr teme e avancuar jane sistemet me shume proesore, duke prfshire multiproesoret, kompjuterat paralel dhe sistemet e shprndare. Keto tma trajtohen ne kapitullin e 8. Nj teme shume e rendesishme sht siguria e sistemeve operative, qe trajtohet ne kapitullin 9. Nder tmat e trajtuara ne ket kapitull jane threads (viruset dhe worm), mekanizmat mbrojts dhe modelet e sigurimit. Me pas kemi disa studime rasti t sistemeve operative reale. Keto jane UNIX (kapitulli 10 ) dhe Windows 2000 (kapitulli 11). Libri prfundon me disa mendime rreth sistemeve operative ne kapitullin 12.

1.10. NJSITE METRIKE. Pr t shmangur do konfuzion, sht e rendesistem t themi se ne ket liber, si ne shkencen kompjuterike ne prgjithesi, njsite metrike jane prdorur ne vend t njsive tradicionale angleze. Prefikset themelore metrike jane t listuara ne figuren 1.29. Prefikset jane ne menyre tipike t shkurtuar me shkronjat e tyre t para, me njsite me t medha se 1 jane t kapitalizuara. Keshtu nj database 1-TB ze 1012 byte pr ruajtje dhe nj 100 clock tick e pces (ose 100 ps) do 10-10 sekonda. Prderisa milli dhe mikro fillojne qe t dyja me shkronj m, duhet t behej nj ndryshin. Normalisht m sht pr milli dhe sht pr mikro.

Fig.1.29. Prefikset kryesore metrike

2
2. PROESET DHE THREAD-ET

Tashme ne jemi ne gjendje t fillojme nj studim me ne detaje t dizenjimit dhe ndertimit t nj sistemi operativ. Koncepti kryesor i do sistemi operativ sht proesi: nj abstrakim i nj programi t ekzekutushem. do gje tjetr varet nga ky koncept dhe sht e rendesishme qe dizenjuesit e sistemit operativ (pr shembull. studentt) t kene nj njohje t kompletuar pr at cfare sht proesi sa me shpejt t jet e mundur. 2.1 PROESET T gjithe kompjuterat modern jane ne gjendje t bejne gjera t ndryshme ne t njjtn kohe. Nderkohe qe nj program user sht duke u ekzekutuar, kompjuteri mund t lexoj nga nj disk ose t nxjerri si output nj tekst ne ekran ose ne printer. Ne nj sistem multiprogramimi nj proes mund kaloj nga nj program ne nj tjetr, duke ekzekutuar secilin pr dhjetra ose qindra milisekonda. Nderkohe, duke folur rigorozisht, ne do moment t kohes, CPU ekzekuton vetm nj program, ne kohen prej 1 sekond, ai mund t punoj me programe t ndryshme, kjo i jep userave iluzionin e paralelizmit. Ndonjehere njerezit flasin pr pseudoparalelizem ne ket kontekst, pr ta krahasuar me paralelizmin e vertet t sistemeve multiproessor (t cilt kane dy ose me shume CPU qe share-ojne t njjtn memorie fizike). Duke patur parasysh shumllojshmerine, aktivitet ne paralel jane t veshtira pr tu bere nga njerezit. Gjithsesi, dizenjuesit e sistemit operativ kane prfshire nj model konceptual (proeset sekuenciale) qe e bejne paralelizmin t leht pr t kryer veprime me t. Ky model, prdorimet e tij dhe disa nga pasojat e tij prbejne subjektin e ketij kapitulli.

2.1.1 Modeli Proes

Ne ket model, t gjithe software-et e ekzekutushem ne kompjuter, ndonjehere duke prfshire dhe sistemin operativ, jane ndertuar ne nj numer sekuencial proesesh ose pr shkurt proese. Nj proes sht thjesht nj pogram i ekzekutueshem , duke prfshire vlerat e fundit t program counter , regjistrave dhe variablave. Ne menyre konceptuale do proes ka CPU e vet virtuale. Ne realitet, nj CPU reale komuton proesin para dhe pas, por pr t kuptuar sistemin, sht me e thjesht pr t menduar rreth nj koleksioni

proesesh qe ekzekutohen ne paralel, se sa t ndjekesh gjurmet se si CPU komuton nga programi ne program. Kjo menyre e shpejt e komutimit para dhe pas sht quajtur multiprogramim, sic pame ne kapitullin e pare . Ne fig 2-1(a) shohim nj kompjuter multiprogramimi me 4 programe ne memorie. Ne fig 2-1(b) shohim 4 proese secili me program counter e vet llogjik dhe ato ekzekutohen ne menyre t pavarur nga njri tjetri. Sigurisht qe ka vetm nj program counter fizik, keshtu qe kur do proes ekzekutohet, program counteri i tij llogjik ngarkohet ne program counter-in real. Kur ai ka prfunduar pr kohen e mbetur, program counter fizik ruhet ne proes kurse program counter llogjik ne memorie. Ne fig.2-1(c) do t shohim qe gjat nj intervali kohe, t gjithe proeset kane bere nj progres, po ne t vertet ne nj cast t kohes vetm nj proes po ekzekutohet.

Fig.2-1 (a) Multiprogramimi pr katr programe.(b)Modeli conceptual i katr proeseve sekuenciale dhe t pavarur.

Me komutimin e CPU para dhe pas ndermjet proeseve, shpejtsia me t cilen nj proes prformon llogaritjen e tij, nuk do t jet uniforme dhe ne qoft se i njjti proes ekzekutohet prseri sht e mundur t mos marrim ndonj rezultat. Keshtu qe, proeset mund t mos programohen duke ngritur supozime mbi sinkronizimin. Konsideroni, pr shembull nj paisje I/O qe nis nj regjistrim shiriti pr t rivendosur back up t fileve, ekzekutohet nj (idle loop) 10000 here pr t rritur shpejtsine, e me pas zgjjidhet nj komande pr t lexuar regjistrimin e pare. Ne qoft se CPU vendos t komutoj ne nj program tjetr gjat idle loop, proesi i regjistrimit mund t mos ekzekutohet derisa regjistrimi i pare t ket kaluar tek koka lexuese. Kur nj proes ka kerkesa kritike ne kohe reale, si pr shembull ngjarje t vecanta mund t ndodhin brenda nj numri t specifikuar milisekondash, duhen marre masa t vecanta pr tu siguruar qe keto t ndodhin. Normalisht shume proese nuk jane prekur nga multiprogramimi i nenvizuar i CPU apo shpejtsia relative e proeseve t ndryshme.

Ndryshimi ndermjet proesit dhe programit sht delikat, por kritik. Ketu do t na ndihmont nj analogji. Le t marrim ne konsiderate nj shkencetar kompjuterash i cili sht duke pjekur nj kek pr ditlindjen e se bijes. Ai ka nj recet keku dhe nj kuzhine t mbushur me t gjithe prberesit: mielli, vezet, sheqeri, vanilje e keshtu me rradhe. Ne ket analogji, receta sht programi (nj algoritem i shprehur ne nj kuptim t prshtatshem), shkencetari i kompjuterave sht proesori dhe prberesit e kekut jane t dhenat ne hyrje. Nj proes sht nj veprim qe konsiston ne leximin e recets nga pjekesi, marrjen e prberesve dhe pjekja e kekut. Tani imagjinoni qe djali i shkencetarit t kompjuterave vjen duke qare, duke thene se e ka pickuar nj blet. Shkencetari i kompjuterave fikson ku e nderpreu recetn (kjo sht gjendja e ruajtjes se proesit t fundit), merr nj liber t ndihmes se pare dhe i hedh nj sy instruksioneve ne t. Ketu ne shohim kalimin e proesorit nga nj proes (pjekja ) ne nj proes t nj niveli me t lart prioriteti (administrimi i kujdesit mjeksor ), ku secili ka program t ndryshem. Kur kujdesi ndaj t pickuares se blets prfundoi, shkencetari i kompjuterave kthehet t keku aty ku e kishte lene . Idea kryesore sht se nj proes sht nj veprim i llojeve t ndryshme. Ai ka nj program, input, output dhe nj gjendje. Nj proesor i vetm mund t ndahet ndermjet disa proeseve, me disa algoritma skedulimi t prdorur pr t prcaktuar kur mbron puna e nj proesi, dhe ti sherbehet nj tjetri.

2.1.2 Krijimi i nj proesi

Sistemet operative kane nevoje t sigurohen qe t gjithe proeset e nevojshme ekzistojne. Ne sisteme shume t thjesht ose ne sistemet e dizenjuara pr nj aplikim t vetm (pr shembull. kontrolli ne furren e nj sobe), sht e mundur qe t gjithe proeset e nevojshme t jene prezent kur sistemi aktivizohet. Ne menyre t prgjithshme sistemet kane nevoje pr disa menyra pr krijimin dhe prfundimin e proeseve sic jane t nevojshme gjat veprimeve. Le t shikojme disa prej ketyre ceshtjeve. Jane katr ngjarje t rendesishme qe shkaktojne krijimin e proeseve: 1. Inicializimi i sistemit 2. Eksekutimi i nj thirrje sistem pr krijimin e proeseve nga nj proes ne ekzekutim 3. Kerkesa e nj useri pr krijimin e nj proesi t ri. 4. Fillimi i nj grupi pune. Kur nj sistem operativ boot-ohet, krijohen disa proese. Disa prej tyre jane proese foreground, t cilt bashkeveprojne me user-in dhe kryejne detyra pr to. T tjeret jane proese background, t cilt nuk jane lidhur ne menyre t vecant me user-in, por panvarsisht kesaj ato kane disa funksione specifike. Pr shembull, nj proes background mund t dizenjohet pr t pranuar email qe vijne, ai mund t jet i paaktivizuar gjithe ditn dhe mund t aktivizohet kur vjen nj email. Nj proes tjetr

background mund t dizenjohet pr t pranuar kerkesat qe vijne nga faqet Web, qe jane host ne at makine, aktivizohet pr ti sherbyer kerkeses qe ka ardhur. Proeset qe qendrojne ne background pr t trajtuar disa aktivitet sic jane email, faqe Web, lajme, printime e keshtu me rradhe, jane quajtur daemons. Sistemet e medha kane shume t tilla. Ne UNIX, programi pr shembull mund t prdoret pr t listuar proeset ne ekzekutim. Ne Windows 95/98/Me, duke shtypur nj kohsisht komandat ctrl-alt-del nga tastjera tregon se cfare po ekzekutohet ne at moment. Ne Windows 2000 prdoret task manager. Prvec proeseve qe krijohen gjat kohes se boot-imit , proeset mund t krijohen dhe me vone. Zakonisht nj sistem ne ekzekutim mund t prdori thirrjen sistem pr t krijuar nj ose me shume proese t reja pr t ndihmuar ne kryerjen e detyrave t tij. Krijimi i proeseve sht i nevojshem kur puna qe duhet t kryejne sht e thjesht pr tu formuluar ne terma me disa referime, por nga ana tjetr proeset bashkveprojne ne menyre t pavarur. Ne qoft se nj sasi e madhe t dhenash sht trhequr nga nj network pr proesin qe vijon, do t jet me prshtatshme t kijohet nj proes pr t trhequr t dhenat dhe pr ti vendosur ne nj buffer t share-uar derisa nj proes i dyt t zhvendos t dhenat dhe ato proese. Ne nj multiproesor, duke lejuar qe do proes t ekzekutohet ne CPU t vecanta do t bnte qe nj pune t ect shpejt. Ne sistemet itraktive, user-at mund t startojne nj program duke shtypur nj komande ose (double) klik ne nj ikone. Duke u nisur nga ky veprim starton nj proes i ri dhe ekzekutohet programi i selektuar. Ne komandat baze sistemet UNIX ekzekutojne X Windows, proesi i ri vendoset ne dritaren ku u startua. Ne Microsoft Windows, kur nj proes startohet nuk ka nj dritare , por ajo mund t krijoj nj ose me shume. Ne t dy sistemet, user-at mund t kene shume dritare hapur ne t njjtn kohe, secili duke ekzekutuar proese t ndryshme. Duke prdorur mousin, user-i mund t selektoje nj dritare dhe t nderhyj ne proes, pr shembull duke shtuar t dhena kur duhet. Situata e fundit ne t cilen sistemet mund t krijohen aplikohet vetm ne sistemet e grupuara (batch) t gjetura ne mainframe t medha. Ketu user-at mund ti nenshtrojne nj grup pune sistemit. Kur nj sistem vendos qe i ka burimet pr t ekzekutuar nj pune tjetr, ai krijon nj proes t ri dhe ekzekuton punen tjetr nga rradha e inputve ne t. Teknikisht, ne t gjithe keto raste, nj proes i ri sht krijuar duke patur nj proes ekzistnt qe ekzekuton thirrjen sistem pr krijimin e nj proesi. Ai proes mund t jet nj proes user i ekzekutushem ose nj proes sistem i futur nga tastjera ose mouse, ose nj batch manager proess. Ajo cfare bejne keto proese sht se ekzekuton nj thirrje sistem pr t krijuar nj proes t ri. Kjo thirrje sistem i kerkon sistemit operativ t krijoj nj proes t ri, qe tregon ne menyre direkt ose jo qe cili program do t ekzekutohet ne t. Ne UNIX ka vetm nj thirrje sistem pr t krijuar nj proes t ri: fork. Kjo thirrje krijon nj kopje ekzakt t proeseve thirres. Pas fork, t dy proeset prind dhe femi, kane t njjtn pamje ne memorie, t njjtat stringje dhe t njjtat open files. Ne prgjithsi proesi femi, me pas ekzekuton execve ose nj thirrje sistem t ngjashme qe ndryshon pamjen e memories, dhe ekzekuton nj program t ri. Pr shembull, kur nj

user shtyp nj komande, say, sort to the shell, shell ndalon proesin femi dhe kercen ne femijen e ekzekutushem. Arsyeja pr proesin me dy hapa sht t lejoi femijet t manipulojne deskriptorin e fileve pas fork por para execve pr t kryer riadresimin e input-eve standarte, output-eve standarte dhe erroreve standarte. Ne Windows, ne kontrast, nj funksion i vetm Win32, CreateProess, trajtohen t dyja krijimi i proeseve dhe ngarkimi i programit korrekt ne proesin e ri. Kjo thirrje ka 10 parametra, t cilat prfshijne programin qe do t ekzekutohet, parametrat komand line t cilat ushqejne at program, atribute t ndryshme sigurie, bite qe kontrollojne ne se open files jane trasheguar, informacionet me prioritet, specifikime pr dritaren qe do t krijohet pr proesin (ne qoft se ka) dhe nj pointer i nj strukture ne t cilen informacioni mbi proesin e ri t krijuar i kthehet therritsit. Pr t plotsuar CreateProess, Win32 ka rreth 100 funksione t tjera pr menaxhimin dhe sikronizimin e proeseve dhe tmave qe kane lidhje. Sin e UNIX ashtu dhe ne Windows, pasi proesi sht krijuar, t dy prindi dhe femija kane hapsirat e tyre t adresave t ndara, edhe ne qoft se proesi ndryshon nj fjale ne hapsiren e adresave, ndryshimet nuk jane t dukshme nga proeset e tjera. Ne UNIX, fillimi i hapsires se adresave t femijes sht nj kopje e prindit, por aty jane prfshire dy hapsira adresash; memoria e shkrueshme nuk sht e share-uar (ne disa implementime t UNIX share-ohet programi text ndermjet t dyve derisa ato t mos modifikohen). sht e mundur gjithashtu pr krijimin e proeseve t reja t share-ohen disa nga krijuesit e tij, burime t tjera sic jane open files. Ne Windows, hapsira e adresave t femijeve dhe prinderve jane t ndryshme nga fillimi.

2.1.3 Mbarimi i Proesit

Pasi nj proes sht krijuar, ai fillon t ekzekutohet dhe t kryej do detyre pr t cilen sht krijuar. Gjithsesi, asnj gje nuk zgjat pr gjithmone as proeset. Heret a vone proeset e reja do t prfundojne, zakonisht i takon nj nga kushtet e meposhtme: 1. Dalje normale (vullnetare) 2. Kur kemi error (vullnetare) 3. Gjat nj errori fatal (jo vullnetare) 4. Vrasja nga nj proes tjetr ((jo vullnetare) Shumica e proeseve prfundojne pasi e kane kryer detyren e tyre. Kur nj kompilator ka kompiluar programin qe i sht dhene, kompilatori ekzekuton nj thirrje sistem pr ti treguar sistemit operativ qe ka prfunduar. Kjo thirrje sht exit ne UNIX dhe ExitProess ne WINDOWS. Programet screen-oriented gjithashtu mbshtsin mbylljet vullnetare. Fjalet e proesoreve, Internet browser dhe programe t ngjashme kane gjithmone ikona ose menu qe user-at mund t click-ojne pr ti treguar proesit qe t zhvendosi do file t prkohshem qe ka hapur dhe me pas ta prfundoj.

Arsyeja e dyt e mbylljes sht qe nj proes zbulon nj error fatal. Pr shembull, ne qoft se nj user shtyp komanden: cc foo.c pr t kompiluar programin foo.c dhe jo disa file qe ekzistojne, kompilatori vetm sa ekziston. Ne prgjithesi proeset interaktive screen-oriented nuk ekzistojne kur jepen parametra t gabuar. Ne vend t tyre shfaqet nj box dialogu dhe i kerkon prdoruesit t provoje dhe nj here. Arsyeja e tret e mbylljes sht nj error i krijuar nga nj proes, zakonisht kjo i takon nj gabimi ne program. Shembulli prfshin ekzekutimin e nj instruksioni ilegal, duke iu referuar nj memorie qe nuk ekziston ose nj pjestimi me zero. Ne disa sisteme (pr shembull.UNIX), nj proes mund ti tregoj sistemit operativ se ai deshiron ti trajtoje vet disa error-e, raste ne t cilat proesi sht sinjalizuar (interrupt) ne vend qe t prfundoj kur ndodh gabimi. Arsyeja e katrt qe nj proes t prfundoj sht qe nj proes ekzekuton nj thirrje system duke i thene sistemit operativ qe t vrasi ndonj proes tjetr. Ne UNIX kjo thirrje sht quajtur kill. Funksioni WIN32 korespondues sht TerminatProess. Ne t dyja rastet vrasesi duhet t ket autorizimin e nevojshem pr t kryer vrasjen. Ne disa sisteme, kur nj proes prfundon, si ne menyre vullnetare dhe e kunderta, t gjithe proeset qe krijoi vritn menjehere. As unix as windows nuk punojne ne ket menyre.

2.1.4 Hierarkia e Proeseve

Ne disa sisteme, kur nj proes krijon nj proes tjetr, proeset prind dhe femi vazhdojne t kene nj fare lidhje ndermjet tyre. Proesi femi mund t krijoi shume proese t tjera, duke krijuar keshtu nj hirarki proesesh. Ndryshe nga bimet dhe kafshet qe prdorin riprodhimin sexual, nj proes ka vetm nj prind (por nj, dy ose me shume femi). Ne UNIX, nj proes dhe t gjithe femijet dhe pasardhesit e tij t mbledhur sebashku formojne nj grup proesi. Kur nj user dergon nj sinjal neprmjet tastjeres, sinjali i shprndahet t gjithe anetareve t grupit t proeseve qe sht lidhur me tastjeren (zakonisht t gjithe proeset qe jane krijuar ne dritaren e fundit). Ne menyre individuale do proes mund t kapi sinjalin, ta injoroj at ose t marri veprimin standtart, i cili sht pr tu vrare nga sinjali. Nj tjetr shembull ne t cilin hierarkia e proeseve luan rol sht inicializimi i UNIX kur hapet. Nj proes special, i quajtur init, sht present ne pamjen boot. Kur fillon t ekzekutohet, lexohet nj file qe tregon sa terminale ka. Me pas ai vecon nga nj proes t ri pr do terminal. Keto proese presin pr dike t hyje ne sistem log in. Ne qoft se hyrja pati sukses, proeset ne hyrje ekzekutojne nj shell pr t pranuar komandat. Keto komanda mund t vene ne pune shume proese, e keshtu me rradhe. Keshtu qe, t gjithe proeset ne t gjithe sistemin i prkasin nj peme t vetme me init ne boot.

Ne kontrast, Windows nuk ka ndonj koncept pr hierarkine e proeseve. T gjithe proeset jane t barabart. Vendi i vetm ne t cilin ka nj dicka t ngjashme me hierarkine e proeseve sht kur krijohet nj proes, prindit i vendoset nj shenj speciale (e quajtur handle) qe mund t prdori pr t kontrolluar femijen. Gjithsesi, sht e lire qe kjo shenj t prdoret nga proese t tjera, keshtu neutralizohet hierarkia. Proeset ne UNIX nuk mund t prjashtojne femijet e tyre.

2.1.5 Gjendja e Proeseve

do proes sht nj njsi e vecant, qe ka program counter e tij dhe gjendjen e brendshme, proeset zakonisht kane nevoje t bashkohen me proese t tjera. Disa proese mund t gjenerojne disa output-e qe nj proes tjetr mund ti prdori pr input. Ne komandat shell: cat chapter1 chapter2 chapter3 I grep tree

proesi i pare, ekzekuton cat, lidh tre filet. Proesi i dyt, ekzekuton grep, selekton t gjithe rreshtat qe prmbajne fjalen tree. Ne varesi t shpejtsise relative t dy proeseve (e cila varet nga mardhenia komplekse e programeve dhe sa kohe t CPU ka patur secilin prej tyre), mund t ndodhi qe grep t jet gati pr tu ekzekutuar, por nuk ka input qe presin pr t. Ai qendron i bllokuar pr sa kohe disa input t jene t disponueshme. Kur nj proes bllokon, ai vepron keshtu sepse logjikisht nuk mund t vazhdoi, ne menyre tipike sepse ai sht duke pritur pr nj input qe nuk sht i disponueshem akoma. Gjithashtu sht e mundur pr proeset qe t jene ne menyre konceptuale gati dhe t jene ne gjendje t ekzekutohen dhe t ndalojne sepse sistemi operativ ka vendosur ti caktoj cpu nj proesi tjetr pr pak kohe. Keto dy kushte jane plotsisht t ndryshme. Ne rastin e pare prjashtimi sht trasheguar ne problem (ju nuk mund t prdorni command line t userit pasi t jet shtypur). Ne rastin e dyt sht nj teknike e sistemit ( nuk ka CPU t mjaftueshme pr ti caktuar do proesi nj proessor privat). Ne fig 2.2 ne shohim nj diagrame gjendje qe tregon tre gjendje t proeseve:

1. Ekzekutimi (duke prdorur CPU ne at moment ) 2. Gati (ndalon prkohsisht pr t lejuar nj proes tjetr t ekzekutohet) 3. Bllokuar (e ndaluar t ekzekutohet derisa t ndodhin disa ngjarje t jashtme)

Llogjikisht, t dy ngjarjet e para jane t gjashme. Ne t dyja rastet CPU sht e gatshme pr tu ekzekutuar, vetm e dyta, nuk ka prkohsisht nj CPU t disponueshme pr t. Gjendja e tret sht e ndryshme nga dy t parat, ne t proesi nuk mund t ekzekutohet edhe pse CPU mund t mos ket asnj gje tjetr pr t bere. Pr keto tre gjendje jane t mundshme katr tranzicione, sic tregohet:

Fig2-2 Tranzicionet ndermjet gjendjeve t proesit

1. 2. 3. 4.

Proese t bllokuar pr input Skeduleri merre nj proes tjetr Skeduleri merre ket proes Inputet behen t disponueshme

Tranzicioni 1 ndodh kur nj proes zbulon qe nuk mund t vazhdoi. Ne disa sisteme proesi mund t ekzekutohet nga nj thirrje sistem, sic jane block dhe pause, pr t hyre ne gjendjen e bllokuar. Ne sisteme t tjera, duke prfshire UNIX, kur nj proes lexon nga nj pipe ose nga nj file special (pr shembull. nj terminal) dhe nuk ka input t disponueshme, proesi sht i bllokuar automatikisht. Tranzicionet 2 dhe 3 jane shkaktuar nga proesi i skedulimit, nj pjese e sistemit operativ, pa proesin madje duke ditur mbi t. Trazicioni i dyt ndodh kur skeduleri vendos t ekzekutoj proese qe kerkojne nj kohe t gjat, dhe sht koha pr t lejuar nj proes tjetr t prdori CPU-ne. Tranzicioni i tret ndodh kur proeset e tjera kane share-uar ne menyre t drejt dhe sht koha qe proesi i pare t prdori CPU pr tu ekzekutuar dhe nj here. Subjekti i skedulimit, sht qe t vendosi se cili proes do t ekzekutohet kur dhe pr sa kohe, sht i rendsishem; pr ket do t flasim me vone ne ket kapitull. Shume algoritma jane ideuar pr t balancuar duke konkuruar kerkesat me eficense pr sistemit si nj i tre dhe pr proeset ne vecanti. Ne do t studiojme disa prej tyre me vone ne ket kapitull. Tranzicioni 4 ndodh kur nj ngjarje e jashtme pr t cilen nj proes ka pritur t ndodhi. Ne qoft se ne at moment nuk sht duke u ekzekutuar ndonj proes tjetr, tranzicioni 3 mund t aktivizohet dhe proesi mund t filloi ekzekutimin. Ne t kundert do i duhej t

priste ne gjendjen gati pr pak kohe derisa CPU t jet e disponueshme dhe t vij rradha e tij. Duke prdorur modelin proes, sht me e thjesht t kuptohet se cfare ndodh brenda nj sistemi. Disa proese ekzekutojne programe qe marrin komanda nga nj user. Proese t tjera jane pjese e sistemit dhe handle task sic jane ekzekutimi i kerkesave pr sherbimin e file-ve ose menaxhimi i detajeve t ekzekutimit t disqeve ose tape drive. Kur nj disk dergon nj interrupt, sistemi merr nj vendim pr t ndaluar ekzekutimin e proesit qe sht duke u ekzekutuar dhe ekzekuton proesin disk, i cili ishte bllokuar duke pritur pr interrupt. Keshtu qe ne vend qe t mendojme rreth interrupt-ve, ne mund t mendojme rreth proeseve user, proeseve terminal, proeseve disk e keshtu me rradhe, t cilt bllokohen kur jane duke pritur qe dicka t ndodhi. Kur nj disk sht lexuar ose karakteri i shtypur, proesi qe sht duke pritur pr t sht unblock dhe sht ne gjendje t ekzekutohet prseri. Nga kjo pikpamje i jepet nj kuptim figures 2-3. Ketu niveli me i ulet i sistemit operativ sht skeduleri, me nj variacion ne proesesh ne krye t saj. T gjithe trajtimet dhe detajet e nisjes dhe stopimit t proeseve jane t fshehura ne at qe quhet skeduler, i cili nuk sht ndonj kod i madh. Pjesa tjetr e sistemit operativ sht i strukturuar ne formen e proeseve. Shume pak sisteme reale jane t strukturuar ne ket forme.

Proeset 0 1 n-2 n-1

Skeduler

Fig2-3 Shtresa me e ulet e struktures proes ne sistemin operativ trajtimi i interrupteve dhe skedulimit. Mbi shtresat jane proeset sekuenciale.

2.1.6 Implementimi i Proeseve

Pr t implementuar modelin proes, sistemi operativ prmban nj tabele t quajtur tabela proes, me nj hyrje pr proes. (Disa autor i quajne keto hyrje proess control blocks). Keto hyrje prmbajne informacione rreth gjendjes se proeseve, program counter i tij, stack pointer, vendodhjen ne memorie, gjendjen e open file-ve t tij, skedulimi i informacionit dhe do gje tjetr rreth proeseve qe do t ruhen kur proesi sht switch nga gjendjet ekzekutim, gati ose bllokuar ne menyre t tille qe t ristarohet me vone sikur t mos ishte ndaluar asnjehere.

Figura 2-4 tregon disa nga fushat me t rendesishme t nj sistemi tipik.

Menaxhusi I proeseve Regjistrat Program counter Program status word Stack pointer Gjendja proesit Prioriteti Parametrat e skedulimit ID proesit Proesi prind Grupi proesit Sinjalet Koha kur starton nj proes Koha e prdorimit t CPU Koha e prdorimit t CPU nga femijet Koha e alarmit pasardhes

Menaxhusi memories Pointeri segment Pointeri segment Pointeri segment ne ne ne

I Menaxhusi I file-ve Direktoria root text Direktoria e punes

data File descriptors User ID stack Grup ID

Fig 2-4. Disa nga fushat e nj tabele tipike proes entry

Fusha ne kolonen e pare lidhet me menaxhimin e proeseve. Dy kolonat e tjera lidhen me menaxhimin e memories dhe menaxhimin e fileve. Duhet t vihet re me saktsi cila fushe

e tabeles se proeseve ka varesine max nga sistemi, por kjo figure jep nj ide t prgjithshme rreth llojit t informacionit t nevojshem. Tani le ti hedhim nj sy tabeles se proeseve, sht e mundur t shpjegohet pak me shume rreth iluzionit t shume proeseve sekuenciale qe prmbahen ne nj makine me nj CPU dhe shume paisje I/O. Lidhur me do klase t paisjeve I/O (floppy disk, hard disk, timers, terminale) sht nj vendodhje e quajtur interrupt vector. Ai prmban adresen e procedures se sherbimit t inerruptve. Supozojme qe proesi user 3 po ekzekutohet kur ndodh nj interrupt nga disku. Program counter i proesit t 3 user, program status word dhe mundesisht nj ose me shume regjistra jane futur ne stack nga nj interrupt hardware. Me pas kompjuteri kercen ne adresen e specifikuar ne disk interrupt vector. Kjo sht e gjitha qe behet ne hardware. Qe ketej e tutje procedurat e sherbimit t interrupt-it kryhen ne nivelin software. T gjithe interrup-et nisin duke ruajtur regjistrat, zakonisht ne tabelen e proeseve pr hyrje t proesit t fundit. Me pas informacioni i futur ne stack nga interruptet sht zhvendosur dhe stack pointeri sht vendosur t pointoi ne nj stack t prkohshem t prdorur nga menaxhuesi i proeseve. Veprime t tilla si ruajtja e regjistrave dhe vendosja e stack pointerit nuk mund t shprehen ne gjuhe t nivelit t lart sic sht C, keshtu ato ekzekutohen nga nj gjuhe rutine e nivelit t ulet assembly, zakonisht prdoret e njjta gjuhe pr t gjithe interruptet pr sa kohe ruajtja e regjistrave sht identike, nuk ka rendesi nga cfare jane shkaktuar interruptet. Kur kjo procedure prfundon, thirret nj proceure C qe kryen t gjithe punen e mbetur pr nj interrupt t specifikuar. (Ne supozojme qe sistemi operativ sht i shkruar ne C, kjo sht nj zgjidhje e zakonshme pr t gjithe sistemet operative reale). Pasi ka kryer detyren e tij, duke bere t mundur qe disa proese t jene gati, skeduleri thirret pr t prcaktuar kush sht pasardhesi qe do t ekzekutohet. Pas saj , kontrolli i kalon kodit ne gjuhen assembler pr t ngarkuar regjistrat dhe hartn e memories pr proesin aktual dhe t filloi ekzekutimin e tij. Menaxhuesit e interrupteve dhe skedulimi jane pembledhur ne Fig.2-5. Vihet re mire qe detajet ndryshojne disi nga nj sistem ne tjetrin.

1. 2. 3. 4. 5. 6. 7. 8.

Hardware stacks program counter, etj. Ngarkimi hardware program counter t ri nga interrupt vector. Procedura e gjuhes assembler ruan regjistrat. Procedura e gjuhes assembler vendos stack t reja. Procedura e interrupteve ne C vepron (lexon dhe fut ne buffer input-tt ) Skeduleri vendos cili sht proesi pasardhes pr tu ekzekutuar. Procadura C i rikthehet kodit assembler. Procedura e gjuhes assembler fillon nj proes t ri.

Fig 2-5. Skeleti i asaj cfare bn niveli i ulet i sistemit operativ kur ndodh nj interrupt

2.2 THREADE-t

Ne sistemet tradicionale operative, do proes ka nj hapesire adresash dhe nj thread kontrolli. Megjithat ka shume situata ku sht e nevojsheme t ket shume thread-e kontrolli ne t njjtn hapesire adresash qe ekzekutohen ne menyre gati paralele, si t ishin proese t ndare.

2.2.1 MODELI I THREAD-it

Modeli i proesit sic kemi diskutuar deri tani sht i bazuar ne dy koncepte t pavarur: grupimi i burimeve dhe ekzekutimi. Nj menyre pr ta pare nj proes sht ajo e nj menyre grupimi burimesh t lidhur me njri-tjetrin. Nj proes ka nj hapesire adresash qe prmban nj program tekst dhe t dhena, si dhe burime t tjera. Keto burime mund t prmbajne file, proese femije, alarme, sinjale menaxhimi etj. Duke i vendosur bashke ne formen e nj proesi, ato mund t menaxhohen me leht. Koncepti tjetr i nj proesi sht ai i nj thread-i ne ekzekutim. Thread-i ka nj program counter qe shenjon ne instruksionin pasardhes. Ai ka nj regjistr i cili mban variablat t cilat po prdoren. Ka nj stak i cili mban historine e ekzekutimit. Megjithese thread-i ekzekutohet ne nj proes t caktuar, thread-i dhe proesi jane koncepte t ndryshme dhe duhet t trajtohen vecmas njri-tjetrit. Proeset prdoren pr t grupuar burimet bashke; thread-et jane entitetet qe prdoren pr ekzekutim ne CPU. Ajo cfare thread-et i shtojne modelit t proesit sht fakti se lejojne shume ekzekutime ne t njjtn hapesire t proesit. Duke pasur shume thread-e qe punojne ne paralel ne nj proes sht analoge si t kemi shume proese qe punojne ne paralel ne nj kompjuter. Thread-et ndajne t njjtn hapesire adresash, file dhe burime t tjera. Gjithashtu ato ndajne memorjen fizike, disqet, printerat etj. Meqe thread-et kane disa karakteristika si t proeseve ato shpesh quhet proese lightweight. Termi multithreading prdoret pr t prshkruar shume thread-e ne nj proes t vetm. Ne Fig. 2-6(a) shohim tre proese. Secili proes ka hapesiren e tij t adresave dhe nj thread t vetm kontrolli. Ne ndryshim ne Fig. 2-6(b) ne kemi nj proes t vetm me tre thread-e kontrolli. Megjithese ne t tre rastet kemi nga tre thread-e kontrolli, ne Fig 2-6(a) do njri prej tyre vepron ne hapesira t ndryshme adresash, ndersa ne Fig 2-6(b) t tre ndajne t njjtn hapesire adresash.

Figura 2-6 (a) Tre proese secili me nj thread t vetm. (b) Nj proes me tre thread-e. Kur nj proes me shume thread-e ekzekutohet ne nj sistem me nj CPU, thread-et ekzekutohen sipas nj rradhe t caktuar. Ne Fig. 2-1, ne pame se si funksionont multiprogramimi i proeseve. Duke kaluar nga njri proes ne tjetrin me shpejtsi t madhe sistemi krijonte idene e shume proeseve qe ekzekutohen ne paralel. Multithreading punon ne t njjtn menyre.

Thread-et e ndryshem qe ndodhen ne nj proes t vetm nuk jane aq t pavarur sic mund t ishin dy proese t ndryshme, kjo nenkupton qe ato ndajne t njjtat variabla globale. Meqe do thread mund t aksesoje do adrese memorje brenda hapesires se adresave t proesit, njri thread mund t lexoje, shkruaje ose t fshije fare stakun e nj thread-i tjetr. Nuk ka asnj lloj mbrojtje midis thread-eve sepse(1) sht e pamundur dhe (2) nuk sht e nevojshme. Ndryshe nga proeset ku secili proes mund t jet prone e nj prdoruesi t ndryshem dhe pr ket arsye ato mund t kundershtojen njri-tjetrin. Nj proes i vetm sht gjithnj prone e nj prdoruesi t vetm i cili mund t ket krijuar disa thread-e ne t, t cilt me siguri jane krijuar pr t bashkepunuar me njri-tjetrin. Pr vec se ndajne t njjtn hapesire adresash thread-et ndajne dhe t njjtn file, proese femije, alarme, sinjale etj. sic tregohet ne Fig. 2-7. Prandaj organizimi sipas Fig 2-6(a) do t prdorej kur t tre proeset nuk kane lidhje me njri tjetrin, ndersa organizimi sipas Fig 2-6(b) do t ishte i prshtashem kur t tre thread-et merreshin me t njjtn pune.

Figura 2-7. Kolona e pare tregon disa nga gjerat qe ndahen nga thread-et ne nj proes. Kolona e dyt tregon disa nga gjerat qe jane private pr do thread.

Si nj proes tradicional ( proeset me nj thread), nj thread mund t jet ne nj nga gjendjet: duke u ekzekutuar, i bllokuar, gati ose i prfunduar. Nj thread ne ekzekutim po prdor CPU dhe sht aktiv. Nj thread i bllokuar pret pr ndonj ngjarje pr ta zhbllokuar. Pr shembull, kur nj thread kryen nj thirrje sistem pr t lexuar nga tastiera, ai sht i bllokuar derisa t kemi input nga tastiera. Nj thread i bllokuar mund t prese pr ndonj ngjarje pr tu zhbllokuar ose pr ndonj thread tjetr pr ta zhbllokuar. Nj thread i gatshem sht przgjedhur pr tu ekzekutuar dhe pret derisa ti vij rradha. Tranzicionet midis gjendjeve t thread-eve jane t njjta si tranzicionet midis proeseve.

sht pr tu theksuar se do thread ka stakun sic tregohet ne Fig. 2-8. Staku i do thread-i prmban nj frame pr do procedure t thirrur por qe akoma nuk sht kthyer prej saj. Ky frame prmban variablat lokale t procedures si dhe adresat e kthimit qe do prdoren kur t ket mbaruar pune procedura. Pr shembull, ne qoft se procedura X therret proceduren Y dhe kjo e fundit therret proceduren Z, ndersa Z po ekzekutohet framet pr X, Y dhe Z do t jene t gjitha ne stak. do thread do t therras procedura t ndryshme dhe pr rrjedhoje nj histori ekzekutimi t ndryshme. Kjo sht arsyeja pse thread-i do stakun e tij.

Kur kemi rastin e multithreading, proeset normalisht fillojne me nj thread t vetm. Ky thread ka aftsine pr t krijuar thread-e t tjere duke thirrur nj procedure sic sht, thread_create. Nj parametr i thread_create zakonisht specifikon emrin e procedures pr thread-in e ri qe do t ekzekutohet. Nuk sht e nevojshme pr t specifikuar asgje rreth hapesires se adresave t thread-it t ri meqe ai ne menyre automatike ekzekutohet ne hapesiren e thread-it qe e krijoi. Ndonjehere thread-et kane nj lidhje hierarkike, lidhja prind-femije, por shpesh kjo lloj lidhje nuk ekziston, t gjithe thread-et jane t barabart. Me ose pa nj lidhje hierarkike thread-i krijues kthehet ne nj thread identifikues i cili i ve emer thread-it t ri.

Figura 2-8 do thread ka stakun e tij.

Kur nj thread ka prfunduar punen e tij, ai mund t therrase nj procedure, thread_exit. Ai me pas zhduket dhe nuk mund t przgjidhet me. Ne disa sisteme thread-esh, nj thread mund t prese pr nj thread tjetr pr t prfunduar, duke thirrur nj procedure per shembull, thread_wait. Kjo procedure bllokon threadin qe e ka thirrur derisa nj thread tjetr ka prfunduar. Ne ket kendveshtrim krijimi dhe prfundimi i thread-eve sht i ngjashem me krijimin dhe prfundimin e proeseve.

Nj tjetr thirrje thread sht edhe thread_yield, e cila e lejon nj thread qe t lere CPU-ne ne menyre vullnetare pr t lejuar nj thread tjetr pr tu ekzekutuar. Kjo lloj thirrje sht e rendesishem pasi nuk kemi timesharing t detyruar i cili gjeneron interrupte qe krijojne vonesa. Prandaj sht e rendesishem pr thread-et qe ta lene ne menyre vullnetare CPU-ne pr ti dhene shansin thread-eve t tjere pr tu ekzekutuar. Disa thirrje t tjera lejojne nj thread pr t pritur pr nj thread tjetr pr t prfunduar punen, lejojne nj thread pr t thene qe ai ka mbaruar nj pune etj.

Nga sa pame duket se thread-et jane shume t dobishem, por ato shfaqin shume probleme ne modelin e programimit. Konsideroni efektt e thirrjes sistem ne UNIX fork . Ne se proesi prind ka shume thread-e a duhet ti ket dhe femija? Megjithat, ne qoft se proesi femije merr po aq thread-e sa prindi i tij, cfare ndodh ne se nj thread tek prindi ishte i bllokuar ne nj thirrje leximi, pr shembull nga tastiera? A jane tani dy thread-e t bllokuar pr leximin nga tastiera? Kur nj rresht shkruhet a marrin t dy thread-et nj kopje t saj? Apo merr vetm prindi? Apo vetm femija?

Nj tjetr kategori problemesh lidhet me faktin se thread-et ndajne midis tyre shume struktura t dhenash. Cfare ndodh ne se nj thread mbyll nj file ndersa tjetri sht duke e lexuar? Supozojme se nj thread ve re se ka shume pak memorje dhe fillon t alokoje me shume memorje. Por ndodh qe t kemi nj nderrim midis thread-eve dhe pr pasoje, edhe thread i ri ve re se ka pak memorje dhe fillon t alokoje dhe ai me shume memorje. Memorja do t alokohet dy here. Keto probleme dhe shume t tjere duhen zgjidhur duke zgjedhur menyren e duhur t programimit t thread-eve dhe t dizenjimit t tyre, ne menyre qe programet qe prdorin multithreading t punojne ne menyre korrekte.

2.2.2 PRDORIMI I THREAD-eve

Pasi kemi shpjeguar se cfare jane thread-et, sht koha pr t shpjeguar pse duhen prdorur. Arsyeja kryesore pse prdorim thread-et sht se ne shume aplikacione, aktivitett brenda tyre ekzekutohen ne cast. Disa nga keto aktivitet mund t bllokohen here pas here. Duke e ndare nj aplikacion t tille ne nj bashkesi thread-esh qe ekzekutohen ne nj menyre gati paralele, modeli i programimit behet me i thjesht. Cfare thame me sipr e kemi pare edhe me pare. sht e njjta arsye pse kemi proese. Ne vend qe t mendojme pr interrupte, tajmera etj ne mund t mendojme pr proese qe punojne ne paralel. Vetm se tani me thread-et kemi dicka t re: aftsine e nj entitti pr t ndare nj hapesire t caktuar adresash me entitt t tjere, si dhe t gjithe t dhenat ne ket hapsire adresash. Kjo aftsi sht e rendesishme pr disa lloje t caktuara aplikacionesh, kjo sht arsye se duke pasur shume proese (me hapesire adresash t ndare) nuk do t funksionoje. Nj argument i dyt pse kemi thread-e sht se meqe nuk ka asnj lloj burimi t lidhur me to, jane me t leht pr tu krijuar dhe me pas shkatrruar se proeset. Ne shume sisteme, krijimi i nj thread-i sht 100 here me i shpejt se krijimi i nj proesi. Argumenti i tret pse kemi thread-e ka t beje me prfomancen. Ato nuk e rrisin prfomancen ne rast se ndodhen afer CPU (sepse rreth CPU veprohet me shpejtsine e saj). Prandaj prdorimi i thread-ve sht i ndjeshem ne rritjen e performancs se aplikacioneve kur prdoren pr shembull ne pajisjet I\O. Se fundmi, thread-et jane mjaft t vlefshem ne sistemet me shume proesore ku mund t flitet pr nj paralelizem real. sht me e leht pr t pare se pse thread-et jane t vlefshem duke dhene disa shembuj. Si shembull t pare supozoni nj editor teksti. Shume editor e paraqesin dokumentin e tyre ne t njjtn menyre se si do t dukej kur ai t printohej. Ne vecanti t gjithe ndarjet e rrjeshtave dhe ndarjet e faqeve jane ne pozicionin e tyre t duhur ne menyre qe

prdoruesi mund ti shohe dhe ta ndryshoje dokumentin ne se duhet. Supozojme se prdoruesi po shkruan nj liber. Nga pikepmja e autorit sht me e thjesht pr ta pasur librin si nj file t vetm, ne menyre qe modifikimet t behen me leht. Ne nj rast tjetr mundet qe do kapitull t jet nj file me vet. Por mund t kemi edhe rastin qe do seksion mund t jet nj file me vet, ne ket rast ndryshimet do t ishin shume t veshtira pasi do t ishin shume file pr tu ndryshuar. Tani konsideroni rastin kur nj prdorues fshin nj fjali nga faqja 1 e nj dokumenti me 800 faqe. Pasi ka pare ndryshimin e bere prdoruesi do t bej nj tjetr ndryshim ne faqen 600 dhe shkruan nj komand ku i kerkon editorit t tekstit t shkoje ne at faqe. Editori i teksit duhet t riformatoje t gjithe librin deri tek faqja 600, pasi ai nuk e di se cili sht rreshti i pare tek faqja 600, pa i pare t gjithe faqet deri tek 600. Mund t ket nj vone se deri sa t shfaqet faqa 600, kjo mund t sjelli qe prdoruesi t jet i pakenaqur me sherbimin e ofruar. Ne ket pike thread-et mund t ndihmojne. Supozojme se editori i tekstit sht i konceptuar si nj program me dy thread-e. Njri ndervepron me prdoruesin, ndersa tjetri merret me riformatimin e dokumentit. Ne momentin qe nj rresht sht fshire ne faqen e pare, thread-i qe ndervepron me prdoruesit i thot thread-it tjetr t riformatoje t gjithe librin. Me pak fat riformatimi mund t behet me pare se prdoruesi t kerkoje t shohe faqen 600, ne menyre qe ajo t shfaqet menjehere kur t kerkohet nga prdoruesi. Meqe jemi pse mos t shtojme nj thread t tret? Shume editore teksti kane aftsine e ruajtjes se informacionit ne disk do disa minuta ne menyre automatike ne menyre qe ta mbrojne prdoruesin qe ta ruaje punen e tij dhe t mos rrezikohet nga nj problem i sistemit, mungese energjie elektrike etj. Thread-i i tret mund t merret me backup-et e diskut pa nderhyre tek dy thread-et e tjere. Situata me tre thread-e jepet ne Fig. 2-9.

Figura 2-9

Nj editor teksti me tre thread-e.

Ne se programi do t ishte me nj thread t vetm, athere sa here do t behej nj backup ne disk, komandat nga tastiera apo mouse do t injoroheshin derisa t prfundonte backup-i. Me tre thread-e modeli i programit sht me i thjesht. Thread-i i pare ndervepron me prdoruesin. I dyti riformaton dokumentin kur i kerkohet. Ndersa i treti ruan dokumentin ne menyre periodik ne disk. Duhet t jet e qart se ne qoft se kemi tre proese t ndare nuk do t funksionont, sepse duhet qe t tre thread-et t punojne ne t njjtin dokument. Duke pasur tre thread-e ne vend t tre proeseve, ato ndajne t njjtn memorje dhe keshtu kane akses ne dokumentin qe po editohet. Le t shohim nj shembull tjetr ku thread-et jane t dobishem: nj server pr site World Wide Web. Kerkesat pr faqe shkojne ne server dhe faqet e kerkuara i dergohen klientit. Ne shume site disa faqe jane me t kerkuara se faqet e tjera. Web serverat e prdorin ket fakt pr t prmiresuar performancen duke mbajtur ato faqe qe aksesohen me shume ne memorjen kryesore duke mos pasur nevoje t kontrolloje diskun kur kerkohen keto faqe. Nj menyre pr t organizuar nj Web server jepet ne Fig. 2-10(a). Ketu njri thread, dispatcher-i, lexon kerkesat qe vine nga rrjeti. Pasi ekzaminon kerkesen ai przgjedh nj thread punetor i cili sht ne gjendje t bllokuar, e kalon ne gjendjen gati dhe i jep atij kerkesen. Kur thread-i merr kerkesen ai sheh ne memorjen kryesore, ne t cilen t gjithe thread-et kane akses, ne se faqja e kerkuar ndodhet aty. Ne se jo ai starton nj opracion leximi pr ta marre faqen nga disku dhe bllokohet derisa kerkesa e tij t plotsohet. Kur thread-i bllokohet gjat kohes se leximit t diskut, nj thread tjetr zgjidhet pr tu ekzekutuar, me shume mundesi dispatcher-i.

Figura 2-10. Nj Web server multithread. Ky model e lejon serverin t shkruhet si nj grup thread-esh sekuencial. Programi i dispatcher-it konsiston ne nj cikel t pafundem pr t marre nj kerkese dhe pr tia

deleguar nj thread-i tjetr. Kodi i ketyre thread-eve konsiston ne nj cikel t pafundem pr t marre nj kerkese nga dispatcher-i dhe pr t pare ne se faqja ndodhet ne memorjen kryesore. Ne se po, faqja i dergohet klientit, thread-i bllokohet dhe pret pr nj kerkese tjetr. Ne se jo, thread-i e merr faqen nga disku, ia dergon klientit dhe me pas bllokohet ne pritje t nj kerkese tjetr. Ne vija t trasha kodi i prdorur jepet ne Fig.2-11. Ketu, si ne t gjithe librin, TRUE prfaqeson konstantn 1. Gjithashtu, buf dhe page jane struktura t prshtatshme pr t mbajtur respektivisht nj kerkese dhe nj faqe Web-i.

Figura 2-11. Nj linj kodi pr Fig. 2-10. (a) Thread-i dispatcher. (b) Thread-i punetor.

Mendoni se si mund t punonte Web serveri ne mungese t thread-eve. Nj mundesi sht qe ai t punonte si nj thread i vetm. Cikli kryesor i Web serverit merr nj kerkese, e ekzaminon, e plotson kerkesen por pa qene i aft t marre nj kerkese tjetr gjat kesaj kohe. Kjo gje con ne nj ulje t performancs. Deri tani kemi pare nj dy mundesi dizenjimi: nj Web server multithread dhe nj Web server i trajtuar si nj thread i vetm. Supozojme se kur nj kerkese vjen nj thread i vetm e ekzaminon at, ne se faqja e kerkuar ndodhet ne memorjen kryesore ai ia dergon klientit, ne se jo nis nj opracion leximi disku pa e bllokuar thread-in. Serveri ruan gjendjen e kerkeses ne nj tabele dhe me pas shkon dhe trajton ngjarjen tjetr. Ngjarja tjetr mund t jet nj kerkese pr nj pune t re ose nj prgjigje nga disku pr nj opracion t meparshem. Ne se sht nj pune e re, puna fillon. Ne se sht nj prgjigje nga disku, athere informacioni prkats merret nga tabela dhe prgjigja vazhdon. Ne ket lloj menyre konceptimi, modeli sekuencial i proeseve qe kishim ne dy rastet e pare humbet. Gjendja e prpunimit t kerkesave ruhet ne menyre eksplicit ne tabele sa here qe serveri kalon nga nj kerkese ne tjetren. Me fjale t tjera ne po simulojme threadet dhe staket e tyre. Nj dizenjim i tille ne t cilen do veprim ka nj gjendje e cila ruhet dhe prjashton disa ngjarje qe mund t ndryshojne gjendjen quhet finit-state-machine. Tani duhet t jet e qart ajo se cfare mund t ofrojne thread-et. Ato bejne t mundur ruajtjen e idese se proeseve sekuencial qe rrisin dukshem prformacen. Serverat me nj thread t vetm prdorin thirrjet bllokuese po lene pr t deshiruar ne performance.

Menyra e tret arrin performance t lart neprmjet paralelizmit por prdor thirrje jobllokuese dhe interrupte, por jane t veshtire pr tu programuar. Keto modele prmblidhen ne Fig. 2-12.

Figura 2-12. Tre menyrat pr t ndertuar nj server. Nj shembull i tret ne t cilen thread-et jane t dobishem jane aplikacionet qe do prpunojne sasi t madha t dhenash. Menyra me e thjesht sht t lexosh ne nj bllok t dhenash, ta prpunosh at e me pas ta shkruash serisht. Problemi ketu qendron ne faktin se ne se vetm thirrjet bllokuese jane t vlefshme, proesi bllokohet nderkohe qe t dhenat shkojne e vine. Ne ket menyre CPU mbetet pa pune nderkohe qe ka shume t dhena qe duhen prpunuar. Kjo menyre nuk sht e leverdiseshme prandaj duhet evituar ne se sht e mundur. Thread-et ofrojne nj zgjidhje. Proesi strukturohet me nj thread ne hyrje, nj thread prpunues dhe nj thread ne dalje. Thread-i i hyrjes lexon t dhenat nga nj buffer i hyrjes. Thread-i prpunues merr t dhenat nga bufferi i hyrjes, i prpunon dhe vendos rezultatin ne nj buffer dales. Bufferi i daljes i shkruan keto rezultate ne disk. Ne ket menyre, hyrja, dalja, dhe proesimi behen ne t njjtn kohe.

2.2.3 IMPLEMENTIMI I THREAD-eve NE USER SPACE

Ka dy menyra pr t implementuar paketat e thread-eve: ne user space dhe ne kernel. Gjithashtu edhe nj implementim hibrid sht i mundshem. Tani do prshkruajme keto metoda, me avantazhet dhe disavantazhet e tyre. Metoda e pare sht vendosja e t gjithe pakets se thread-eve ne user space. Kerneli nuk ka asnj informacion rreth tyre. Avantazhi i pare dhe me i dukshem sht se ne nivelin user mund t implementohet paketa e thread-eve edhe ne ato lloj sistemesh operative qe nuk i suportojne thread-et. T gjitha keto implementime kane t njjtn strukture e cila ilustrohet ne Fig. 2-13(a). Thread-et ekzekutohen ne pjesen e siprme t nj sistemi run-time, i cili sht nj koleksion procedurash qe menaxhojne thread-et. Ne kemi pare katr prej tyre: thread_create, thread_exit, thread_wait, thread_yield, por zakonisht ka me shume. Kur thread-et menaxhohen ne user space, do proesi i duhet tabela e tij e thread-eve ne menyre qe kontrolloje keta t fundit. Kjo tabele sht analoge me tabelen e proeseve qe

ndodhet ne kernel, ajo kontrollon program counter-in, stak pointerin, regjistrat, gjendjen, etj. Tabela e thread-eve menaxhohet nga sistemi run-time. Kur nj thread kalon ne gjendjen gati ose t bllokuar, informacioni qe duhet pr ta ristaruar ndodhet ne tabelen e thread-eve, ne t njjtn menyre se si kerneli ruan informacionin pr proesin ne tabelen e proeseve. Ne se thread-i bn dicka qe mund ta bllokoje ai therret nj procedure t sistemit run-time. Kjo procedure sheh ne se thread-i duhet t vendoset ne gjendjen e bllokuar. Ne se po, ajo ruan regjistrin e thread-it ne tabelen e thread-it, shikon ne tabele pr nj thread t gatshem pr tu ekzekutuar dhe i ringarkon regjistrat e makines me vlerat e reja t thread-it. Derisa stak pointeri dhe program counteri t jene nderruar, thread-i i ri vjen ne jet ne menyre automatike. Ne se makina ka nj instruksion pr t ruajtur t gjithe regjistrat dhe nj tjetr pr ti ngarkuar prseri t gjithe, i gjithe nderrimi i thread-eve mund t behet me pak instruksione. Berja e nderrimit t thread-eve ne ket menyre sht shume here me e shpejt se sa do t ishte ne se threade-et do t ndodheshin ne kernel dhe sht nj argument shume i fort ne favor t paketave t threade-eve ne user space.

Figura 2-13. (a) Paketa e thread-ve ne user space.(b) Nj paket thread-esh e menaxhuar nga kerneli. Megjithat ka nj ndryshim esencial me proeset. Kur nj thread mbaron se ekzekutuari, per shembull, kur therret proceduren thread_yield, kodi i thread_yield ruan informacionin e thread-it ne tabelen e thread-eve. Me pas mund t therrase thread-in scheduler ne menyre qe t przgjedhe nj thread tjetr pr tu ekzekutuar. Kur nj thread mbaron se ekzekutuari, pr shembull kur therret proceduren thread_yield, kodi i thread_yield ruan informacionin e thread-it ne tabelen e thread-eve.

Procedurat qe ruajne gjendjen e thread-it dhe schedulerin jane procedura lokale, prandaj thirrja e tyre sht me eficente se sa t besh nj thirrje kernel. Pra nuk ekzekutohet asnj instruksion trap . Kjo e bn przgjedhjen e thread-eve shume t shpejt. Thread-et ne nivelin user kane edhe disa avantazhe t tjere. Ato lejojne do t proes t ket algoritmin e tij t schedulimit t prshtatur sipas nevojave t tyre. Pr disa aplikacione fakti se nuk mund t shqetsohen ne se nj thread ndalohet ne nj moment t caktuar sht nj plus. Duke lene menjane performancen e tyre t mire, thread-et ne nivelin e userit kane disa probleme t medha. Se pari, problem sht implementimi i thirrjeve bllokuese t sistemit. Supozoni se nj thread lexon nga tastiera me pare se nj tast sht shtypur. sht e palejueshme ne se e lejojme thread-in t beje nj thirrje sistem, pasi do t kishim nj bllokim t thread-eve t tjere. Thirrjet sistem duhet t jene t gjitha jo-bllokuese, por kjo kerkon ndryshim ne sistemin operativ. Pastaj nj nga argumentt qe prdoreshin thread-et ne user space ishte fakti se ato implementoheshin ne sistemet operative qe ekzistojne, dhe jo ne to qe duhen modifikuar. Plus ne rast se ndryshohet sistemi operativ duhen ndryshuar edhe shume programe t prdoruesve. Nj alternative tjetr sht e mundshme. Ne se arrijme qe t prcaktojme me pare ne se nj thirrje do bllokoje ose jo. Ne disa versione t UNIX, nj thirrje sistem przgjedh daljet (select), kjo lejon thirresin t tregoje ne se nj kerkese pr lexim do bllokohet ose jo. Kur behet kjo thirrje, procedura read e librarise mund t zevendesohet me nj t re qe ne fillim bn nj thirrje select, dhe me pas lexon ne se sht e sigurt. Kjo gje kerkon rishkrimin e nj pjese t librarise se thirrjeve sistem. Kodi i vendosur rreth thirrjes sistem pr t bere kontrollimin quhet jacket ose wrappr. Pak a shume i ngjashem me problemin e thirrjeve bllokuese t sistemit sht edhe ai i page fault. Pra kur faqja e kerkuar duhet t merret nga disku. Proesi bllokohet ndersa faqja e kerkuar gjendet dhe lexohet. Ne se nj thread shkakton nj page fault, kerneli, edhe pse nuk di gje pr ekzistencn e thread-it, bllokon t gjithe proesin derisa kerkesa pr leximin nga disku t kompletohet. Nj tjetr problem qe haset me thread-et qe implementohen ne user space: ne se nj thread fillon t ekzekutohet, asnj thread tjetr ne at proes nuk do t ekzekutohet ne se thread-i i pare nuk e le ne menyre vullnetare CPU-ne. Brenda nj proesi t vetm, nuk ka interrupte clock-u, duke bere t mundur przgjedhjen e proeseve me rradhe (round robin). Nj mundesi zgjidhje pr thread-et qe ekzekutohen pafundesisht sht duke bere sistemit run-time t kerkoje nj sinjal clock-u ( interrupt) do cast t caktuar kohe pr t dhene kontrollin, por edhe kjo menyre sht e veshtire pr tu programuar. Interruptet periodik ne nj frekuence t lart nuk jane gjithmone t mundeshme, edhe ne se do t ishin, overhead-i total do t ishte i konsiderueshem. Por edhe thread-i mund t doje nj interrupt clock-u qe mund t intrferoje me prdorimin e sistemit run-time t clock-ut.

Argumenti kryesor kunder thread-eve ne user space sht se programuesit zakonisht i duan thread-et pikerisht ne aplikacionet ku thread-et bllokohen shpesh, pr shembull ne nj Web server. Keto thread-e bejne thirrje sistem t vazhdueshme. Kur ndodh nj instruksion trap ne kernel pr tu marre me thirrjen sistem, kerneli merret me nderrimin e thread-eve, ne se thread-i me i vjetr sht i bllokuar, ne se lejohet kerneli pr t bere ket gje eliminohet nevoja pr t bere thirrje sistem select, t cilat kontrollojne ne se thirrjet sistem pr lexim jane t sigurta ose jo. Pr aplikacione qe zhvillohen rreth CPU-se dhe qe bllokohen shume rralle nuk sht e nevojshme prdorimi i thread-eve.

2.2.4 IMPLEMENTIMI I THREAD-eve NE KERNEL

Tani le t mendojme se pr menaxhimin e thread-eve merret kerneli. Nuk duhet asnj lloj sistemi run-time sic tregohet ne Fig. 2-13(b). Gjithashtu nuk ka asnj lloj tabele threadesh ne do proes. Ne vend t kesaj, kerneli ka nj tabele thread-esh me ane t t cilit kontrollon t gjithe thread-et ne sistem. Kur nj thread kerkon t krijoje nj thread t ri ose t shkatrroje nj t vjetr, ai bn nj thirrje ne kernel e cila ekzekuton kerkesen e thread-it duke ndryshuar tabelen e thread-eve. Tabela e thread-eve qe ndodhet ne kernel mban regjistrat, gjendjen dhe informacione t tjera ne lidhje me thread-et. Ky infomacion sht nj shtese e informacionit qe kernelat tradicionale mbajne ne lidhje me proeset me nj thread t vetm. T gjitha thirrjet qe mund t bllokojne nj thread jane implementuar si thirrje sistem. Kur nj thread bllokohet, kerneli mund t ekzekutoje ose nj thread tjetr nga i njjti proes, ose nj thread nga nj proes tjetr. Me thread-et ne user space sistemi run-time ekzekutont vetm thread-e nga i njjti proes derisa kerneli i merrte prdorimin e CPUse. Pr shkak t kostos se lart t krijimit dhe t shkatrrimit t thread-eve ne kernel, disa sisteme i ricikljone thread-et e tyre. Kur nj thread shkatrrohet, ai shenjohet si i paekzekutueshem, por struktura e tij e t dhenave qe ndodhet ne kernel nuk preket. Me vone, kur nj thread i ri duhet t krijohet, nj i vjetr riaktivizohet, duke mos harxhuar shume kohe. Riciklimi i thread-eve sht gjithashtu i mundshem pr thread-et ne user space, por meqe koha e cila fitohet sht me e vogel, berja e riciklimit nuk sht efektive. Thread-et ne kernel nuk kerkojne thirrje sistem jo-bllokuese. Ne se nj thread ne nj proes shkakton nj page fault, kerneli e ka t thjesht t shohe ne se proesi ka ndonj thread tjetr t ekzekutueshem, ne se jo faqja merret nga disku. Disavantazhi kryesor sht se kostoja e thirrjeve sistem sht e konsiderueshme, overhead-i sht i madh.

2.2.5 IMPLEMENTIMET HIBRIDE

Jane pare shume menyra pr t kombinuar avantazhet e t dy menyrave pr t implementuar thread-et. Nj menyre sht prdorimi i thread-eve ne kernel e me pas multipleksimi i thread-eve ne user space ne disa ose ne t gjithe thread-et kernel sic tregohet ne Fig.2-14.

Figura 2-14 Multipleksimi i thread-eve t user space ne thread-et kernel.

Ne ket dizenjim, kerneli sht i vetdijshem vetm pr thread-et kernel dhe i przgjedh ato. Disa prej tyre mund t kene shume thread-e user t multipleksuara, keto thread-e (user) ekzekutohen sipas nj rradhe t caktuar.

2.2.6 AKTIVIZIMET E SCHEDULERIT

Shume kerkues jane prpjekur pr t kombinuar avantazhet e thread-eve ne nivelin user me avantazhet e thread-eve ne nivelin kernel. Me posht do t shohim nj prpjekje pr t bere nj gje t tille dhe quhet aktivizimet e schedulerit. Qellimet e aktivizimit t schedulerit jane t imitojne funksionet e thread-eve kernel por me prformace me t mire dhe fleksibilitt me t lart, zakonisht me paketat e thread-eve t implementuara ne user space. Ne vecanti, thread-et user nuk duhen t bejne thirrje bllokuese speciale apo t shohe ne se sht e sigurt ne se bejme nj thirrje sistem apo jo.

Eficenca arrihet ne se shmangen tranzicionet e panevojshme midis hapesires user dhe kernel. Sistemi run-time i user space mund t bllokoje thread-in sinkron dhe t przgjedhe nj t ri nga ana e tij. Kur prdoren aktivizimet e schedulerit, kerneli i cakton nj numer t caktuar proesoresh virtual pr do proes dhe lejon sistemin run-time qe t alokoje thread-e pr proesoret. Ky mekanizem mund t prdoret edhe ne sistemet me shume proesore ku proesoret virtuale mund t jene proesore reale. Numri i proesoreve virtuale qe i caktohet nj proesi si fillim sht nj, por proeset mund t kerkojne pr me shume ose ti lene proesoret ne se nuk i duhen me. Kerneli mund ti marre keto proesore virtuale qe jane alokuar njehere dhe ti caktoje ne proese t tjrera qe kane nevoje pr to. Ideja kryesore qe e bn ket skeme t funksionoje sht se ne rastin kur kerneli kupton qe nj thread sht bllokuar, ai njofton sistemin run-time, duke kaluar si parametra ne stak numrin e thread-it ne fjale dhe nj prshkrim pr ngjarjen qe ka ndodhur. Njohja me at qe ka ndodhur behet nga kerneli duke aktivizuar sistemin run-time ne nj adrese t njohur Ky mekanizem quhet upcall. Njehere i aktivizuar, sistemi run-time mund ti rizgjedhe thread-et e tij, zakonisht duke vecuar thread-in e bllokuar dhe me pas duke marre nj thread tjetr qe sht ne gjendjen gati. Me vone, kur kerneli kupton se thread-i origjinal mund t ekzekutohet prseri ai bn nj tjetr upcall sistemit run-time pr ta informuar pr ket ngjarje. Sistemi run-time, sipas vleresimit t tij, mund ose jo ta ristaroje menjehere thread-in ose e vendos ne listn e thread-eve t gatshem, pr tu aktivizuar me vone. Kur ndodh nj interrupt hardware, kur nj thread user sht duke u ekzekutuar, CPU-ja e nderprere kalon ne kernel mode. Ne se interrupti shkaktohet nga nj ngjarje qe nuk ka lidhje me proesin, kur menaxhuesi i interrupteve prfundon punen e tij, ai vendos thread-in e nderprere ne gjendjen qe ai ishte me pare. Por ne rast se interrupti qe ndodh ka lidhje me proesin qe sht nderprere, thread-i i nderprere nuk ristartohet. Thread-i i nderprere pezullohet dhe sistemi run-time qe ishte startuar ne at CPU vituale. sht me pas ne dore t sistemit run-time qe t przgjedhe se cilin thread t przgjedhe ne at CPU: t nderprerin, nj thread t ri t gatshem pr ekzekutim apo ndonj zgjedhje t tret. Nj prjashtim pr aktivizimet e thread-eve sht siguria rreth upcall-eve, nj koncept qe prish strukturen qe trashegohet ne do sistem me shtresa. Normalisht, shtresa n ofron disa sherbime qe shtresa n+1 mund ti therrase, por shtresa n ndoshta nuk mund t therrase procedura nga shtresa n+1. Upcall nuk e ndjekin ket princip t rendesishem.

2.2.7 THREAD-et POP-UP

Thread-et jane t vlefshem ne sistemet e shprndare. Nj shembull i rendesishem sht se si kerkesat pr sherbim menaxhohen. Menyra tradicionale sht qe t bllokojme nj

proes ose nj thread me nj thirrje sistem receive qe pret pr nj mesazh. Kur mesazhi vjen ajo e pranon mesazhin dhe e prpunon kerkesen e tij. Megjithat, nj tjetr menyre sht e mundshme, ne t cilen ardhja e nj mesazhi bn t mundur qe sistemi t krijoje nj thread tjetr qe t menaxhoje mesazhin. Nj thread i tille quhet pop-up thread dhe ilustrohet ne Fig. 2-15. Nj avantazh i madh i thread-eve pop-up sht se meqe jane t ri, ato nuk kane histori, regjistra, stak, etj qe duhen t kthehen ne gjendje fillestare. Secili fillon si i ri dhe jane identik midis tyre. Pra si prfundim prdorimi i tyre bn qe vonesa midis ardhjes se mesazhit dhe fillimit t prpunimit t tij mund t jet shume e shkurtr.

Figura 2-15. Krijimi i nj thread t ri kur vjen nj mesazh. (a) Para ardhjes se mesazhit. (b) Pas ardhjes se mesazhit.

Disa planifikime paraprake duhen bere kur prdoren thread-et pop-up. Pr shembull, ne cilin proes ekzekutohet thread-i? Ne se sistemi e lejon qe thread-i t ekzekutohet ne kernel, thread-i mund t ekzekutohet aty. Duke patur thread-in pop-up qe ekzekutohet ne kernel sht me i shpejt dhe me i leht se ekzekutimi ne user space. Gjithashtu nj thread pop-up ne kernel space mund t aksesoje me lehtsi t gjitha tabelat e kernelit dhe pajisjet I/O, qe mund t duhen pr menaxhimin e interrupteve. Nga ana tjetr nj buggy thread kernel mund t beje me shume deme se nj buggy user thread. Pr shembull ne se ai ekzekutohet pr nj kohe t gjat nuk ka menyre pr ta zevendesuar, dhe t dhenat qe vijne mund t humbasin.

2.2.8 BERJA MULTITHREAD E KODEVE SINGLE-THREAD

Shume programe jane shkruar pr proese me nj thread. Konvertimi i tyre ne multithread sht me i veshtire sesa duket. Me posht do t shohim disa nga veshtiresi qe hasen. Si fillim, kodi i nj thread-i konsiston ne disa procedura, si tek proeset. Keto mund t kene variabla lokale, variabla globale dhe parametra procedurash. Variablat lokale dhe parametrat nuk shkaktojne probleme, por variablat qe jane globale pr nj thread, por jo pr t gjithe programin shkaktojne probleme. Keto variabla jane globale ne sensin qe shume procedura brenda thread-it i prdorin, por thread-et e tjere logjikisht nuk duhet ti prdorin. Pr shembull, konsideroni variablin errno qe prdoret ne UNIX. Kur nj proes ose nj thread bn nj thirrje sistem e cila deshton, kodi i gabimit vendoset ne errno. Ne Fig. 2-16, thread-i 1 ekzekuton thirrjen sistem access pr t pare ne se ka t drejta pr t aksesuar nj file t caktuar. Sistemi operativ kthen prgjigjen ne variablin global errno. Pasi kontrolli sht kthyer tek thread-i 1, por me pare ai ka nj shans pr t lexuar errno, scheduler-i vendos qe thread-i 1 ka pasur shume nga koha e CPU-se dhe vendos t kaloje tek thread-i 2. Thread-i 2 ekzekuton nj thirrje open e cila deshton, e cila bn qe errno mbishkruhet dhe kodi i aksesimit t thread-it 1 t humbase prgjithnj. Kur thread-i 1 t filloje me vone, ai do t lexoje vleren e gabuar dhe do t punoje ne menyre jo t rregullt.

Figura 2-16. Konflikte midis thread-eve pr prdorimin e nj variabli global.

Shume zgjidhje pr ket problem jane t mundshme. Njra sht t ndalosh variablat global ne tresi. Megjithese kjo do t ishte nj zgjidhje, realisht nuk pranohet nga pjesa me e madhe e software-eve ekzistues. Nj tjetr zgjidhje sht ti vendosim do thread-i variablat e tyre global sic tregohet ne Fig.2-17. Ne ket menyre do thread ka nj kopje private t errno dhe variabla t tjere globale, keshtu qe konfliktet shmangen. Por ky vendim krijon nj nivel t ri lirie, variablat qe jane t dukshme pr t gjitha procedurat e

nj thread-i, qe i shtohen variablave qe jane t dukshem vetm pr nj procedure dhe variablat qe jane t dukshem kudo ne program.

Figura 2-17. Thread-et mund t kene variabla globale private. Aksesimi i variablave global private sht pak i veshtire, prderisa shume gjuhe programimi kane nj menyre pr t deklaruar variablat lokale dhe globale, por jo forma t ndermjetme. sht e mundur t alokosh nj pjese t vogel t memorjes pr globalet dhe tia kalosh do procedure ne thread, si ne parametr shtese. Nj tjetr zgjidhje konsiston ne faktin e krijimit t procedurave t reja ne librari, t cilat mund t krijojne, vendosin dhe lexojne variabla t ndermjetm. Thirrja e pare mund t jet si me posht: create_global("bufptr"); Kjo alokon nj pjese memorje pr nj pointer qe quhet bufptr ne nj vend t vecant t rezervuar pr thread-in therrits. Nuk ka rendesi ku zgjidhet vendodhja, vetm thread-i therrits ka akses tek variabla global. Ne se nj thread tjetr krijon nj variabel global me t njjtin emer ai ruhet ne nj vendodhje tjetr, ne menyre qe mos t krijoje konflikt me variablin ekzistues. Dy thirrje nevojiten pr t aksesuar variablat globale: Nj pr ti shkruar dhe tjetri pr ti lexuar. Pr ti shkruar prdoret dicka e tille: set_global("bufptr", &buf); Ajo ruan vleren e pointerit ne vendin e prcaktuar qe sht krijuar me pare nga thirrja create_global. Pr t lexuar nj variabel global, thirrja sht afersisht si me posht: bufptr = read_global ("bufptr"); Kjo kthen adresen e ruajtur ne variablin global, por t dhenat e saj mund t aksesohen.

Problemi tjetr qe ekziston kur kthjeme nj program single-thread ne multithread sht se shume procedura librarish nuk t lejone t hysh. Kjo do t thot qe nuk jane t dizenjuara t kene nj thirrje t dyt t bere ne do lloj procedure, ndersa e para nuk ka mbaruar. Pr shembull, dergimi i nj mesazhi ne rrjet mund t jet i programuar t asembloje mesazhin ne nj buffer fiks brenda librarise, me pas behet nj instruksion trap ne kernel pr ta derguar. Cfare ndodh ne se nj thread ka asembluar mesazhin e tij ne buffer, me pas nj interrupt clock-u detyron t behet nj nderrim thread-esh, thread-i i ri menjehere mbishkruan bufferin me mesazhin e tij? Ne menyre t ngjashme, procedura pr alokimin e memorjes, sic sht malloc ne UNIX, mbajne disa tabela rreth prdorimit t memorjes, per shembull, nj list me vende t gatshme pr tu prdorur ne memorje. Ndersa malloc sht i zene duke azhornuar keto lista, ato mund t jene prkohesisht ne gjendje t parregullt, me pointera qe nuk pointojne ne ndonj vend. Ne se ndodh nj nderrim thread-esh, ndersa keto tabela jane ne gjendje t parregullt dhe nj thirrje e re vjen nga nj thread tjetr, nj pointer i gabuar mund t prdoret, qe con ne nj gabim t programit. Rregullimi i t gjithave ketyre gabimeve kerkon rishkrimin e t gjithe librarise. Nj zgjidhje e ndryshme sht qe do procedure t vendosi nj bit pr t shenuar librarine qe ka ne prdorim. do prpjekje nga ana e nj thread-i tjetr pr t prdorur librarine do t bllokohet. Megjithese kjo menyre mund t funksionoje ajo e eliminon parelelizmin e mundshem. Konsederoni nj sinjal. Disa sinjale specifikojne logjikisht thread-et, disa t tjere jo. Pr shembull ne se nj thread bn nj thirrje alarm, kjo ka kuptim pr nj sinjal t caktuar t shkoje t thread-i qe beri thirrjen. Megjithat ne se thread-et jane implementura t gjithe ne user space, kerneli nuk di gje fare pr ekzistencn e tyre dhe zor se mund ta dergoje sinjalin t thread-i i duhur. Nj komplikacion tjetr ndodh ne se proesi mund t ket nj sinjal alarm duke pritur dhe shume thread-e qe bejne thirrje alarm ne menyre t pavarur. Sinjale t tjere, si interruptet e tastieres, nuk jane t specifikuar me thread-e. Kush duhet ti prgjigjet atyre? Nj thread? T gjithe thread-et? Nj thread pop-up? Me tej, cfare ndodh ne se nj thread ndryshon menaxhuesin e sinjalit pa i thene thread-eve t tjere? Cfare ndodh ne se nj thread do t kape nj sinjal t caktua, dhe nj thread tjetr do ket sinjal pr t prfunduar proesin? Kjo situat mund t ndodhe ne se nj ose me shume thread-e ekzekutojne procedura standarte librarish dhe t tjeret jane user-writtn. sht e qart qe keto deshira jane t parealizueshme. Ne prgjithesi, sinjalet jane t veshtire pr tu menaxhuar ne nj ambjent me nj thread t vetm. Por edhe prdorimi i tyre ne ambjent me multithread nuk e lehtson shume prdorimin e tyre. Nj problem i fundit i futur nga thread-et sht menaxhimi i stakut. Ne shume sisteme, ne t cilt kemi overflow t stakut t proesit, kerneli thjesht i siguron atij proesi me shume stak ne menyre automatike. Kur nj proes ka shume thread-e, ai gjithashtu ka edhe shume stake. Ne se kerneli nuk sht ne dijeni t ketyre stakeve, ai nuk mund ti rrise ato ne menyre automatike ne rast se kemi nj gabim ne stak (overflow). Keto probleme nuk jane t pakaprcyeshme, por tregojne se vetm futja e thread-eve ne nj sistem ekzistues pa nj ridizenjim t sistemit nuk do t funksionoje. Semantikat e

thirrjeve sistem duhen t riprcaktohen dhe librarit duhet t rishkruhen. Keto ndryshime duhen t behen por gjithnj duke ruajtur pajtueshmerine me programet ekzistuese.

2.3 Komunikimi i intrproeseve

Proeset shpesh her duhet t komunikojn me proese t tjera. Pr shembull, n nj pipeline shelli, outputi i nj proesi duhet ti kalohet proesit t dyt dhe kshtu deri n fund t linjs. Kshtu sht i nevojshm nj komunikim ndrmjet proeseve, n nj mnyr t mir-strukturuar, pa prdorur interruptet. N pjesn e mposhtme do t shohim disa nga problemet q lidhen me komunikimin e intrproeseve (IPC Intrproess Comunication). Shqyrtojm shkurtimisht tre probleme ktu. I pari u prmend edhe m sipr: si nj proes mund ti kaloj informacion nj tjetri. I dyti ka t bj me sigurimin q dy ose m shum proese t mos ndrhyjn n rrugn e njri-tjetrit kur merren me nj aktivitet t rndsishm (supozojm se dy proese mundohen t kapin t dy 1 MB t fundit q ka mbetur n memorie). I treti ka t bj me rradhitjen e proeseve kur ka varsi ndrmjet tyre: n qoft se proesi A prodhon t dhna dhe proesi B i printon ato, B duhet t pres derisa proesi A t prodhoj t dhna para se ti printoj ato. Do t shqyrtojm secilin prej ktyre rasteve. sht gjithashtu e rndsishme t prmendim se dy nga kto probleme vlejn n t njjtn mnyr edhe pr threadet. I pari kalimi i informacionit sht i leht pr threadet duke qn se ndajn t njjtn hapsir adresash (threadet q ndodhen n hapsira adresash t ndryshme q kan nevoj t komunikojn komandohen nga proeset komunikuese). Megjithat, dy problemet e tjera t rrin larg nga rruga e njri-tjetrit dhe renditja e prshtatshme vlejn edhe pr threadet. Ekzistojn t njjtat probleme dhe vlejn t njjtat zgjidhje. Posht do t diskutojm problemet n lidhje me proeset, por mos harroni q t njjtat probleme dhe zgjidhje vlejn edhe pr threadet.

2.3.1 Kushtet e prparsis N disa sisteme operative, proese q po punojn n t njjtn koh mund t share-ojn memorie t njjt, ku secili mund ta shkruaj ose lexoj. Memoria q shareojn mund t ndodhet n memorien kryesore (ndoshta n nj struktur t dhnash kernel) ose mund t jet nj file i share-uar: vendndodhja e memories s share-uar nuk ndryshon natyrn e komunikimit apo problemet q mund t lindin. Pr t par se si ndodh nj komunikim interproesesh n praktik, marrim nj shembull t thjesht por t shpesht: spooler i nj printeri. Kur nj proes dshiron t printoj nj file, ai shkruan emrin e file-it n nj direktori spooler. Nj proes tjetr, printer daemon, kontrollon priodikisht pr t par a ka file t gatshme pr tu printuar dhe n qoft se ka, ai i printon dhe heq emrat e tyre nga direktoria.

Imagjinojm se dirketoria spooler ka nj numr t madh slotsh, me numrat 0, 1, 2, , dhe secili mund t mbaj nj emr file. Gjithashtu imagjinojm se jan dy variabla q share-ohen, out, e cila shenjon n filen pasardhse q do t printohet, dhe in, q shenjon n slotin pasardhs t lir n direktori. Kto dy variabla mund t ruhen n nj file me gjatsi dy word, q mund t aksesohet nga t gjith proeset. N nj ast t caktuar, slott nga 0 n 3 jan bosh ( filet jan printuar) dhe slott nga 4 n 6 jan plot (me emrat e fileve n rradh pr tu printuar). Pak a shum n t njjtn koh, proeset A dhe B vendosin q duan t rradhisin nj file pr printim. Kjo situat sht treguar n Fig. 2-18.

Figura 2-18. Dy proese q duan t aksesojn memorie t share-uar n t njjtn koh. N nj prioritet ku zbatohet ligji i Murphyt, mund t ndodh si m posht. Proesi A lexon variabln in dhe ruan vlern, 7, n nj variabl lokale e quajtur next_free_slot. Menjeher ndodh nj interrupt dhe CPU-ja vendos q proesi A ka vepruar mjaftueshm, kshtu kalon tek proesi B. Proesi B gjithashtu lexon variabln in dhe merr gjithashtu vlern 7. Ai e ruan at n variabln e tij lokale next_free_slot. N kt moment t dy proeset mendojn se slot i lir pasardhs sht 7. Proesi B vazhdon rrjedhn. Ai ruan emrin e file-it t tij n slotin 7 dhe inkrementon variablin in n 8. Pastaj largohet dhe vazhdon gjra t tjera. Kshtu, proesi A vazhdon ekzekutimin nga vendi ku e kishte ln. Shikon n next_free_slot, gjen 7 aty dhe shkruan emrin e file-it n slotin 7, kshtu fshin emrin q proesi B kishte vendosur. M pas llogarit next_free_slot +1 q sht 8, dhe bn variablin in 8. Direktoria spooler sht e qndrueshme, kshtu printer daemon nuk do t dalloj asnj t gabuar, por proesi B nuk do t marr asnjeher outputin e dshiruar. Prdoruesi B do t rrij n dhomn e printerit prvitet tra, duke shpresuar pr nj output q nuk vjen kurr. Situata t ktilla, ku dy ose m shum proese lexojn ose shkruajn disa t dhna t share-uara dhe rezultati final varet nga kush ekzekutohet ekzaktsisht, kur quhen kushte prparsie (race conditions). T bsh debug programeve q mbajn kushte prparsie nuk sht argtim. Rezultatet e shumics s testve dalin mir, por ndonjeher mund t ndodh dika e uditshme dhe e pashpjegueshme.

2.3.2 Zonat kritike Si i mnjanojm kushtet e prparsis? Celsi pr t shmangur problemet n kt rast dhe n shum situata q kan t bjn me share-imin e memories, share-imin e fileve dhe me share-imin e do gjje tjetr sht t gjejm nj mnyr q t lejojm vetm nj proes, q t lexoj apo shkruaj t dhna t share-uara n nj ast t caktuar. E thn me fjal t tjera, na duhet nj prjashtim i ndrsjellt, q do t thot, na duhet nj mnyr pr t siguruar q N qoft se nj proes sht duke prdorur nj variabl apo file t share-uar, proeset e tjera do t prjashtohen. Vshtirsia m par ndodhi sepse proesi B filloi t prdort nj nga variablat e share-uara para se proesi A t kishte prfunduar me t. Zgjedhja e veprimeve primitive t prshtatshme pr t arritur prjashtimin e ndersjellt sht nj problem i rndsishm design-i i t gjith sistemeve operative dhe nj tm q do t shqyrtojm me vmndje n paragrafin pasardhs. Problemi i mnjanimit t kushteve t prparsis mund t formulohet edhe n mnyr abstrakt. Nj pjes t kohs, proesi sht i zn duke br llogaritje t brendshme dhe gjra t tjera q nuk ojn n kushtet e prparsis. Megjithat, ndonjeher nj proesi i duhet t aksesoj memorie ose nj file t share-uar, ose i duhet t bj gjra t tjera q mund t ojn n kushtet e prparsis. Ajo pjes e programit ku aksesohet memoria e share-uar quhet zona kritike ose seksioni kritik. N qoft se ne mund t bjm t mundur q dy proese mos t jen asnjeher n zonat kritike n t njjtn koh, mund t mnjanojm problemin e prparsis. Edhe pse kjo krkes mnjanon kushtet e prparsis, nuk sht mjaftueshm pr t pasur proese paralele q bashkpunojn korrektesisht duke prdorur t dhna t shareuara. Ne duhet ti prmbahemi katr kushteve pr t pasur nj zgjidhje t mir:

1. dy proese nuk mund t jen n t njjtn koh n zonat kritike respektive. 2. nuk mund t bhen supozime mbi shpejtsite dhe numrin e CPU-ve. 3. nj proes q ekzekutohet jasht zons s tij kritike nuk mund t bllokoj proeset e tjera. 4. nj proes nuk duhet t pres prgjithmon pr t hyr n zonn e tij kritike. N mnyr abstrakt, sjellja q duam tregohet ne Fig. 2-19. Proesi A hyn n zonn e tij kritike n kohn T1, n kohn T2 proesi B tenton t hyj n zonn e tij kritike, por dshton sepse nj proes tjetr sht n zonn e tij kritike dhe ne lejojm vetm nj n nj ast t caktuar. Rrjedhimisht, proesi B pezullohet deri n kohn T3 kur A largohet

nga zona kritike, kshtu lejon B t hyj menjeher. M pas B largohet (n T4) dhe kthehemi srish n situatn fillestare, ku asnj proes nuk ndodhet n zonn kritike.

Figura 2-19. Prjashtimi i ndersjellt me zonat kritike. 2.3.3 Prjashtim i ndersjellt me Busy Waiting N kt paragraf do t shqyrtojm propozime t ndryshme pr t arritur prjashtimin e ndersjellt, n mnyr q, ndrkoh q nj proes sht duke prpunuar memorien e sharuar n zonn e tij kritike, nj tjetr nuk mund t hyj n zonn e tij kritike dhe kshtu t hap probleme.

Mbyllja e interrupteve

Zgjidhja m e thjesht sht q do proes t mbyll interruptet menjeher sapo t hyj n zonn e tij kritike dhe lejimi i tyre menjeher pasi t dal. Me interruptet e mbyllura, nuk kemi interrupte t clockut. CPU-ja kalon nga nj proes tek nj tjetr si rezultat i interrupteve t clockut ose t tjer, dhe me interruptet t fikura, CPU-ja nuk do t kaloj n nj proes tjetr. Kshtu, pasi nj proes t ket mbyllur interruptet, mund t shoh dhe ndryshoj memorien e sharuar pa patur frik nga ndrhyrja e ndonj proesi tjetr. Kjo mnyr nuk sht e plqyer sepse nuk sht e zgjuar ti japsh proeseve user mundsin e fikjes s interrupteve. Supozojm sikur njri prej tyre e bn dhe nuk i ndez m? Kjo do t sillte fundin e sistemit. Pr m tepr n qoft se sistemi sht multiproesor, me dy ose m shum CPU, mbyllja e interrupteve vlen vetm pr CPU-n

q ekzekutoi instruksionin e mbylljes. T tjert do vazhdojn t funksionojn dhe mund t aksesojn memorien e share-uar. Nga ana tjetr, shpesh her sht e dobishme q kerneli t mbyll interruptet pr pak instruksione ndrkoh q po ndryshohen variablat. N qoft se nj interrupt ndodh kur lista e proeseve n gjendjen ready sht e paqndrueshme, mund t kemi kushtet e prparsis. Prfundimi sht: mbyllja e interrupteve muund t jet nj teknik e dobishme brnda sistemit operativ, por nuk sht i prshtatshm si mekanizm i prgjithshm i prjashtimit t ndersjellt pr proeset user.

Variablat ky (lock)

Si prpjekje t dyt le t prpiqemi t gjejm nj zgjidhje me sfotware. Konsiderojm sikur kemi vetm nj variabl (ky) t share-uar, q fillimisht sht 0. Kur nj proes krkon t hyj n zonn e tij kritike, teston variabln ky. N qoft se kyci sht 0, proesi e kthen 1 dhe futet n zonn kritike. N qoft se kyi sht 1, proesi pret derisa t bhet 0. Kshtu, 0 do t thot se nuk ka proes n zonn e tij kritike, dhe 1 do t thot se ka nj proes q ndodhet n zonn kritike. Fatkeqsisht, ideja prmban t njjtn rrjedh t gabuar q pam n direktorin spooler. Supozojm se nj proes lexon kyin dhe shikon q sht 0. prpara se ta kthej n 1, skedulohet nj proes tjetr, ekzekutohet dhe e kthen kycin n 1. Kur proesi i par vazhdon ekzekutimin edhe ai do t kthej kycin n 1, dhe dy proese do t ndodhen n zonat kritike prkatse n t njjtn koh. Tani mund t mendoni q mund t mnjanojm kt problem duke lexuar fillimisht variabln ky, dhe m pas ta rikontrollojm pak para se t shkruajm n t, por kjo n t vrtt nuk ndihmon. Gara e prparsis tani fillon n qoft se proesi i dyt ndryshon variabln ky menjeher pasi proesi i par e ka kontrolluar pr her t dyt.

Alternimi i Prpikt

Nj trajtim i tret i problemit t prjashtimit t ndrsjellt tregohet n Fig. 2-20. Kjo pjes programi, si pothuajse t gjitha n kt libr, sht shkruar n C. sht zgjedhur C sepse sistemet operative jan pothuajse gjithmon t shkruara n C (ose nganjeher n C++), por shum rrall n gjuh si Java, Modula 3, apo Pascal. C-ja sht e fuqishme, efikase dhe e parashikueshme, karakteristika kritike pr shkruajtjen e sistemeve operative. Java, pr shembull, nuk sht e parashikueshme sepse mund t ngelet pa memorie n nj moment kritik, dhe i duhet t thrras garbage collector n nj moment t paprshtatshm. Kjo nuk mund t ndodh n C, sepse n C nuk ka garbage

collector. Nj krahasim i prpikt i C, C++, Java dhe katr gjuhve t tjera sht dhn n (Prechelt, 2000). N Fig. 2-20, variabla integer turn (rradha), fillimisht 0, ruan kush e ka rradhn pr tu futur n zonn kritike dhe t shikoj apo ndryshoj memorien e sharuar. Fillimisht, proesi 0 kontrollon variabln turn, shikon q sht 0 dhe hyn n zonn e tij kritike. Edhe proesi 1 shikon q sht 0 dhe vendoset n nj lak duke testuar vazhdimisht variabln turn pr t par kur do t bhet 1. Testimi i vazhdueshm i nj variable derisa ajo t ket nj vler t caktuar quhet busy waiting. Zakonisht duhet evituar, meqnse harxhon koh t CPU-s. busy waiting prdoret vetm n qoft se sht logjikisht e pritshme se do t marr pak koh. Nj ky q prdor busy waiting quhet spin lock.

Figura 2-20. Nj propozim pr zgjidhjen e problemit t zonave kritike. (a) Proesi 0. (b) Proesi 1. N t dy rastet, vini re pikpresjen n fund t cikleve while.

Kur proesi 0 l zonn kritike, vendos variabln turn n 1, q t lejoj proesin 1 t hyj n zonn kritike. Supozojm se proesi 1 mbaron zonn e tij kritike shpejt, kshtu t dy proeset ndodhen n zonat e tyre jo-kritike, me variabln turn n 0. Tani proesi 0 ekzekuton gjith ciklin e tij shpejt, del nga zona kritike dhe vendos turn n 1. N kt pik turn sht 1 dhe t dy proeset jan duke u ekzekutuar n zonat e tyre jo-kritike. Papritur, proesi 0 mbaron zonn e tij jo-kritike dhe rikthehet n fillim t lakut. Fatkeqsisht, nuk i lejohet t futet n zonn e tij kritike tani, sepse turn sht 1 dhe

proesi 1 sht i zn me zonn e tij jo-kritike. Ai ngelet n lakun while derisa proesi 1 kthen turn n 0. E thn ndryshe, puna me turne nuk sht ide e mir kur njri nga proeset sht shum m i ngadalt se tjetri. Kjo situat shkel kushtin 3 e vendosur m lart: proesi 0 po bllokohet nga nj proes tjetr q nuk sht n zonn e tij kritike. Po ti kthehemi direktoris spooling q diskutuam m lart, po t lidhim zonn kritike me leximin dhe shkrimin n direktorin spooling, proesit 0 nuk do ti lejohej t printont nj file sepse proesi 1 sht duke br dika. N fakt, kjo zgjidhje krkon q dy proeset t altrnohen n hyrjen n zonat kritike, pr shembull n file spooling. Asnjrit nuk do ti lejoheshin dy njri pas tjetrit. Ndrkoh q ky algoritem mnjanon kushtet e prparsis, nuk sht nj kandidat i vlefshm sepse shkel kushtin 3.

Zgjidhja e Peterson

Duke kombinuar iden e turneve me iden e variablave ky dhe variablave lajmruese, nj matmatikan hollandez, T. Dekker, ishte i pari q gjeti nj zgjidhje sfotware-ike pr prjashtimin e ndrsjellt q nuk krkont altrnim rigoroz. Pr nj diskutim mbi algoritmin e Dekker, shiko (Dijkstra, 1965). N 1981, G. L. Petrson zbuloi nj mnyr m t thjesht pr t arritur prjashtimin e ndrsjellt dhe n kt mnyr e bri zgjidhjen e Dekker t pavler. Algoritmi i Petrsonit sht treguar n Fig. 2-21. Ky algoritem prmban dy procedura t shkruara n ANSI C, q do t thot se pr t gjith funksionet e prcaktuara dhe prdorura duhet t caktohen prototipet e funksioneve. Megjithat, pr t kursyer hapsir, nuk do t tregojm prototipet n shembullin e mposhtm.

#define FALSE 0 #define TRUE 1 #define N 2 /* number of proesses */ int turn; /* whose turn is it? */ int interested[N]; /* all values initially 0 (FALSE) */ void enter_region(int proess) /* proess is 0 or 1 */ { int other; /* number of the other proess */ other = 1 proess; /* the opposite of proess */ interested[proess] = TRUE; /* show that you are interested */ turn = proess; /* set flag */

while (turn == proess && interested[other] == TRUE) /* null statement */; } void leave_region (int proess) /* proess, who is leaving */ { interested[proess] = FALSE; /* indicat departure from critical region */ } Figura 2-21. Zgjidhja e Petersonit pr prjashtimin e ndersjellt.

Para se t prdor variablat e sharuara (para se t hyj n zonn e tij kritike), do proes thrret enter_region me numrin e vet, 0 ose 1, si parametr. Kjo thirrje do ta bnte at t priste, n qoft se duhet, derisa t jet pa rrezik t hyj. Pasi t ket mbaruar me variablat e sharuara, proesi thrret leave_region pr t treguar q ka mbaruar dhe pr t lejuar proeset e tjera t hyjn, n qoft se kjo krkohet. Le t shohim se si funksionon kjo zgjidhje. Fillimisht asnj nga proeset nuk ndodhet n zonn kritike. Proesi 0 thrret enter_region. Tregon interesin duke setuar elementin e vektorit t tij dhe kthen turn n 0. Meqn se proesi 1 nuk sht i interesuar, kthehet menjeher enter_region. N qoft se proesi 1 thrret tani enter_region, derisa sa interested[0] t bhet FALSE, dhe kjo ndodh vetm kur proesi 0 thrret leave_region pr t dal nga zona kritike. Tani konsiderojm rastin kur t dy proeset thrrasin pothuajse njkohsisht enter_region. T dy do t rregjistrojn numrin e tyre tek turn. Vetm ai numr q do t rregjistrohet i fundit vlen; i pari mbishkruhet dhe humbet. Supozojm q t fundit e rregjjistron proesi 1, kshtu turn do t jet 1. Kur t dy proeset t vijn tek while, proesi 0 e ekzekuton zero her dhe hyn n zonn kritike. Proesi 1 nuk futet n zonn kritike derisa proesi 0 t dal nga zona e vet kritike.

Instruksioni TSL

Le t shikojm tani nj propozim q ka nevoj pr pak ndihm nga hardware. Shum kompjutera, veanrisht ata q projektohen pr multiproesor, kan nj instruksion :

TSL RX, LOCK

(Test dhe Set Lock) q funksionon si m posht. Lexon prmbajtjen e memories n fjaln lock (kyc) n rregjistrin RX dhe ruan nj vler jo-zero n memorien me adres lock. Veprimet e leximit dhe t shkrimit mbi fjaln jan t pandashme asnj proes nuk mund t aksesoj fjaln derisa instruksioni t ket prfunduar. CPU-ja q ekzekuton instruksionin TSL bllokon busin e memories pr t mos lejuar CPU-t e tjera t aksesojn memorien derisa t ket prfunduar. Pr t prdorur instruksionin TSL, do t prdorim nj variabl t share-uar, lock, pr t koordinuar aksesimin e memories s share-uar. Kur lock sht 0, do proes mund ta kthej n 1 duke prdorur instruksionin TSL dhe m pas t lexoj dhe shkruaj n memorien e share-uar. Kur mbaron pun, proesi rikthen lock n 0 duke prdorur nj instruksion t zakonshm move. Si mund t prdoret ky instruksion pr t penguar q dy proese t futen n zonat kritike n t njjtn koh? Zgjidhja jepet n Fig. 2-22. Ktu tregohet nj subroutin me pes instruksione n nj gjuh assembler fiktive (por tipike). Instruksioni i par kopjon vlern e vjetr t lock n nj regjistr dhe kthen lock n 1. Vlera e vjetr krahasohet me 0. N qoft se sht jo-zero, kyi sht vn, kshtu programi kthehet n fillim dhe e teston srish. N nj moment ai do t bhet 0 (kur proesi q pr momentin ndodhet n zonn kritike e l), dhe subroutina kthehet, me kyin e vendosur. T pastrosh kyin sht e thjesht. Programi ruan nj 0 n lock. Nuk krkohen intruksione t veanta.

enter_region: TSL REGISTR, LOCK CMP REGISTR, #0 JNE enter_region RET kopjon lock n regjistr dhe vendos 1 a ishte lock zero? n qoft se ishte jozero, lock ka qn setuar, futu n lak return, futet n zonn kritike

Leave_region: MOVE LOCK,#0 RET rregjjistro 0 n lock return

Figura 2-22. Hyrja dhe dalja nga zona kritike duke prdorur instruksionin TSL.

Nj zgjidhje e problemit t zonave kritike tashm sht e qart. Prpara se t hyj n zonn kritike, nj proes thrret enter_region dhe kalon n busy waiting derisa t lirohet lock; pastaj merr lock-un dhe kthehet. Pas zons kritike proesi thrret leave_region, q ruan nj 0 n lock. Si gjith zgjidhjet t bazuara n zonat kritike, proeset duhet t thrrasin enter_region dhe leave_region n kohn e duhur q metoda t funksionoj. N qoft se proesi bn hile, prjashtimi i ndrsjellt do t dshtoj.

2.3.4 Sleep and Wakeup (gjumi dhe zgjimi) Edhe zgjidhja e Petrsonit, edhe ajo q prdor TSL jan t sakta, por t dy kan nevoj pr busy waiting. N thelb, far kto zgjidhje bjn sht: kur nj proes do t hyj n zonn kritike, shikon a i lejohet. N qoft se jo, proesi thjesht pret derisa ti lejohet. Ky trajtim harxhon koh t CPU-s dhe mund t ket rezultate t papritshme. Konsiderojm nj kompjuter me dy proese, H me prioritet t lart dhe L me prioritet t ult. Rregullat e skedulimit jan t tilla q H mund t ekzekutohet kur t jet n gjendjen gati. N nj ast t caktuar, me L n zonn e tij kritike, H bhet gati pr tu ekzekutuar (pr shembull, kompletohet nj veprim I/O). H fillon busy waiting, meqnse L nuk skedulohet kur H sht duke u ekzekutuar, L nuk ka asnjeher mundsin t ler zonn e tij kritike, kshtu H mbetet n lak prgjithmon. Kjo situat nganjeher referohet si problemi i inversionit t prioritetit. Tani le t shikojm disa primitiva t komunikimit t intrproeseve q bllokohen n vnd q t humbin koh t CPU-s kur nuk lejohen t futen n zonat kritike. Nj nga m t thjeshtat sht dyshja sleep dhe wake up. Sleep sht nj thirrje sistem q shkakton at q bn thirrjen t bllokohet, do t thot, t pezullohet derisa nj proes tjetr ta zgjoj. Thirrja wakeup ka nj parametr, proesin q duhet zgjuar. Ose t dy proeset mund t ken secili nga nj parametr, nj adres memorie q prdoret pr t lidhur thirrjet sleep me ato wake up.

Problemi prodhues-konsumator

Si nj shembull se si mund t prdoren kto primitiva, le t konsiderojm problemin prodhues-konsumator (i njohur edhe si problemi buffer-i kufizuar). Dy proese ndajn nj buffer t prbashkt me madhsi t caktuar. Njri prej tyre, prodhuesi, vendos informacion n buffer dhe tjetri, konsumatori e merr at. (sht gjithashtu e mundur t prgjithsohet problemi duke patur m prodhues dhe n konsumator, por ne do t marrim parasysh vetm rastin me nj prodhues dhe nj konsumator, sepse ky supozim thjeshtson zgjidhjen).

Na lindin tlashe kur prodhuesi do t vendosi nj element tjetr n buffer, por sht plot. Zgjidhja sht q prodhuesi t vihet n gjum, dhe t zgjohet kur konsumatori t ket hequr nj ose m shum element. N mnyr t ngjashmme, n qoft se konsumatori do t marr nj element nga bufferi dhe shikon q sht bosh, vihet n gjum derisa prodhuesi t vendos dika n buffer dhe ta zgjoj. Ky trajtim duket i mjaftueshm, por ai con n t njjtat kushte prparsie q pam m par me direktorin spooler. Na duhet nj variabl, count, pr t ruajtur numrin e elementve n buffer. N qoft se numri maksimal i variablave q mund t mbaj sht N, kodi i prodhuesit do t testoj fillimisht n se count sht N. N qoft se po, prodhuesi do t vihet n gjum; n qoft se jo, prodhuesi do t shtoj nj element dhe do inkrementoj count. Kodi i konsumatorit sht i ngjashm: fillimisht teston count pr t par n qoft se sht 0. N qoft se sht, vihet n gjum, n qoft se sht jo-zero, heq nj element dhe dekrementon numruesin. Secili prej proeseve shikon gjithashtu n se proesi tjetr duhet zgjuar, n se po, e zgjon. Kodi si pr prodhuesin dhe konsumatorin tregohet n Fig. 2-23.

#define N 100 int count = 0;

/* number of slots in the buffer */ /* number of items in the buffer */

void producer (void) { int item; while (TRUE) { /* repeat forever */ item = produce_item(); /* generate next item */ if (count == N) sleep(); /* if buffer is full, go to sleep */ insert_item(item); /* put item in buffer */ count = count + 1; /* increment count of items in buffer */ if (count == 1) wakeup(consumer); /* was buffer empty? */ } } void consumer(void) { int item; while (TRUE) { /* repeat forever */ if (count == 0) sleep(); /* if buffer is empty, got to sleep */ item = remove_item(); /* take item out of buffer */ count = count 1; /* decrement count of items in buffer */ if (count == N 1) wakeup(producer); /* was buffer full? */ consume_item(item); /* print item */ }

} Figura 2-23. Problemi prodhues-konsumator me kushte prparsie.

Pr t shprehur thirrjet sistem si sleep dhe wake up n C, do ti shprehim si thirrje pr routina librarie. Ato nuk jan pjes e librarive standarte t C por q do t jen me shum mundsi t disponueshme n do sistem q ka patur kto thirrje sistem. Procedurat insert_item dhe remove_item, q nuk tregohen, merren me rregullimin e futjes s elementve n buffer dhe heqjen e tyre nga bufferi. Tani kthehemi n kushtin e prparsis. Mund t ndodh sepse aksesimi i count sht i pakufizuar. Mund t ndodh situata e mposhtme. Bufferi sht bosh dhe konsumatori sapo ka lexuar count pr t par a sht 0. N at ast, skeduleri vendos t ndaloj s ekzekutuari prkohsisht konsumatorin dhe t filloj s ekzekutuari prodhuesin. Prodhuesi vendos nj element n buffer, inkrementon count dhe vren q tani sht 1. Duke arsyetuar q count sht 0, dhe kshtu q konsumatori sht n gjum, prodhuesi thrret wake up pr t zgjuar konsumatorin. Fatkeqesisht, konsumatori nuk sht ende llogjikisht n gjum, kshtu sinjali i zgjimit humbet. Kur ekzekutohet konsumatori, do t testoj vlern e count q lexoi m par, do t shoh q sht 0 dhe do t vihet n gjum. N nj ast prodhuesi do t mbushi bufferin dhe do t vihet n gjum gjithashtu. T dy do t mbetn n gjum prgjithmon. Thelbi i problemit ktu sht se thirrja wake up q i drgohet nj proesi q nuk sht (ende) n gjum, humbet. N qoft se nuk do t humbist, gjithcka do t punonte. Nj rregullim i shpejt do t ishte duke shtuar nj wakeup waiting bit (biti i pritjes s zgjimit). Kur nj wake up i drgohet nj proesi q sht ende zgjuar, biti setohet. M pas, kur proesi tenton t vihet n gjum, n qoft se wake up waiting bit sht ndezur, do t fiket, por proesi do t mbetet zgjuar. Wake up waiting bit sht nj depozit ndihmse pr sinjalet e zgjimit. Ndrkoh q wake up waiting bit na shpton problemin n kt shembull t thjesht, sht e thjesht t ndrtojm problema me tre ose m shum proese ku vetm nj bit i ktill nuk sht i mjaftueshm. Mund t shtojm edhe nj bit tjetr ose ndoshta 8 apo 32, por si parim problemi mbetet.

2.3.5 Semafort Kjo ishte situata n 1965, kur E. W. Dijkstra (1965) sugjeroi t prdorej nj variabl integer pr t numruar wake up-et e ruajtura pr prdorim t mvonshm. N propozimin e tij u fut nj variabl e re e quajtur semafor. Nj semafor mund t kishte nj vler 0, q tregont q nuk ishte ruajtur asnj wake up ose nj numr pozitiv, n qoft se nj ose m shum wake up-e po prisnin.

Dijkstra propozoi dy veprime, down (posht) dhe up (lart) (prgjithsimet e sleep dhe wake up). Veprimi down kontrollon n se vlera sht m e madhe se 0. N qoft se sht kshtu, dekrementon vlern (prdor nj wake up t ruajtur) dhe vazhdon. N se vlera sht 0, proesi vihet n gjum pa prfunduar veprimin down pr momentin. Kontrolli i vlers, ndryshimi i saj dhe me raste vnie n gjum, bhet n nj veprim t vetm dhe t pandashm (atomic action). sht e sigurt q, n qoft se fillohet nj veprim semafori, asnj proes tjetr nuk mund t aksesoj semaforin derisa veprimi t ket prfunduar ose t jet bllokuar. Kjo pandashmri sht thelbsore pr zgjidhjen e problemeve t sinkronizimit dhe shmangien e kushteve t prparsis. Veprimi up inkrementon vlern e adress s semaforit. N qoft se nj ose m shum proese ishin n gjum n at semafor, t pamundur pr t prfunduar nj veprim t mparshm down, njri prej tyre zgjidhet nga sistemi (per shembull,., n mnyr t rastesishm) dhe lejohet t prfundoj veprimin e tij down. Kshtu, pas nj veprimi up n nj semafor m proese n gjum, semafori do t ngelet 0, por do t ket nj proes m pak n gjum n t. Veprimi i inkrementimit t semaforit dhe zgjimit t nj proesi sht gjithashtu i pandashm. Nuk ka proese q t bllokohen duke kryer nj up, ashtu si nuk bllokoheshin duke kryer nj wake up n modelin e mparshm. N paperin origjinal t Dijkstra, ai prdori emrat P dhe V n vend t down dhe up respektivisht, por meqnse kto nuk kan kuptim mnemonik pr njerzit q nuk flasin gjuhn hollandeze, do t prdorim termat down dhe up. Kjo u paraqit fillimisht n Algol 68.

Zgjidhja e problemit Prodhues-Konsumator duke prdorur Semafort

Semafort zgjidhin problemin e wake up-it t humbur, si tregohet n Fig. 2-24. sht thelbsore q t implementohen n mnyr t pandashme. Mnyra normale sht implementimi i up dhe down si thirrje sistem, me sistemin operativ q shkurtimisht mbyll interruptet ndrkoh q teston semaforin, e ndryshon at, dhe n qoft se sht e nevojshme v proeset n gjum. Meqnse kto veprime kan nevoj vetm pr pak instruksione, mbyllja e interrupteve nuk dmton. N qoft se prdoren shum CPU, do semafor duhet t prdor nga nj varibl ky, m instruksioni TSL q prdoret pr t siguruar q vetm nj CPU ekzaminon semaforin. Sigurohuni t kuptoni se prdorimi i TSL pr t parandaluar q disa CPU t aksesojn semaforin n t njjtn koh sht ndryshe nga prdormi i busy waiting nga prodhuesi dhe konsumatori q presin q tjetri t zbraz ose mbush bufferin. Veprimit t semaforit do ti duhen vetm pak mikrosekonda, ndrkoh q prodhuesit dhe konsumatorit mund ti duhen relativisht shum.

#define N 100

/* number of slots in the buffer */

typedef int semaphore; /* semaphores are a special kind of int */ semaphore mutex = 1; /* controls access to critical region */ semaphore empty = N; /* counts empty buffer slots */ semaphore full = 0; /* counts full buffer slots */ void producer(void) { int item; while (TRUE) { /* TRUE is the constant 1 */ item = produce_item(); /* generate something to put in buffer */ down(&empty); /* decrement empty count */ down(&mutex); /* enter critical region */ insert_item(item); /* put ne item in buffer */ up(&mutex); /* leave critical region */ up(&full); /* increment count of full slots */ } } void consumer(void) { int item; while (TRUE) { /* infinit loop */ down(&full); /* decrement full count */ down(&mutex); /* enter critical region */ item a= remove_item(); /* take item from buffer */ up(&mutex); /* leave critical region */ up(&empty); /* increment count of empty slots */ consume_item(item); /* do something with the item */ } } Figura 2-24. Problemi prodhues-konsumator duke prdorur semafort.

Kjo zgjidhje prdor tre semafor: njri i quajtur full (plot) pr t ruajtur numrin e slotve q jan plot, njri i quajtur empty (bosh) pr t ruajtur numrin e slotve q jan bosh, dhe njri i quajtur mutex pr t siguruar q prodhuesi dhe konsumatori t mos aksesojn bufferin n t njjtn koh. Full sht fillimisht 0, empty sht fillimisht i barabart me numrin e slotve n buffer, dhe mutex sht fillimisht 1. Semafort q inicializohen me 1 dhe q prdoren nga dy ose m shum semafor pr t siguruar q vetm njri prej tyre mund t futet n zonn kritike n nj ast t caktuar quhen semafor binar. N qoft se secili prej proeseve kryen nj down menjeher prpara se t futet n

zonn e tij kritike dhe nj up menjeher pasi e l at, kemi patjetr nj prjashtim t ndrsjellt. Tani q kemi nj primitiv komunikimi intrproesesh n dispozicion, le t rishikojm sekuencn e interrupteve n Fig. 2-5. N nj sistem q prdor semafort, mnyra natyrale pr fshehjen e interrupteve sht me ann e nj semafori, fillimisht 0, i bashkngjitur me t gjitha pajisjtt I/O. Menjeher pas fillimit t nj pajisje I/O, proesi menaxhues kryen nj down n semaforin prkats dhe bllokohet menjeher. Kur vjen nj interrupt, menaxhuesi i interrupteve kryen nj up n semaforin prkats, gj q bn proesin t gatshm t ekzekutohet srish. N kt model, hapi 5 n Fig. 2-5 konsiston n kryerjen e nj veprimi up mbi semaforin e pajisjes, kshtu q n hapin 6 skeduleri do t mund t ekzekutoj device managerin. Sigurisht, n qoft se disa proese jan tashm n gjendjen gati, skeduleri mund t zgjedh t ekzekutoj nj proes ndoshta m t rndsishm m pas. Do t shohim disa algoritma q prdoren pr skedulim m pas n kt kapitull. N shembullin e Fig. 2-24, n t vrtt kemi prdorur semafort n dy mnyra t ndryshme. Ky ndryshim sht mjaftueshmrisht i rndsishm pr tu br i qart. Semafori mutex sht prdorur pr prjashtimin e ndrsjellt. sht projektuar pr t siguruar q n nj koh t caktuar vetm nj proes t lexoj ose t shkruaj bufferin e shoqruar me variablat. Ky prjashtimi i ndrsjellt duhet pr t parandaluar nj kaos. Do t studiojm prjashtimin e ndersjellt dhe se si ta arrijm at m shum n paragrafin e ardhshm. Prdorimi tjetr i semaforve sht sinkronizimi. Semafort full dhe empty nevojiten pr t siguruar q disa sekuenca ngjarjesh t ndodhin apo t mos ndodhin. N kt rast, ata sigurojn q prodhuesi t ndaloj s ekzekutuari kur bufferi sht plot, dhe t ndaloj konsumatori kur sht bosh. Ky prdorim sht i ndryshm nga prjashtimi i ndrsjellt.

2.3.6 Mutex-et Kur nuk na duhet aftsia e semaforve pr t numruar, prdorim nj version t semaforit t quajtur mutex. Mutex-et jan t mir vetm pr manaxhimin e prjashtimit t njanshm n disa burime t sharuara ose pjes kodi. Ata jan t leht dhe efikas n implementim, q i bn veanrisht t prdorshm n paketat e thread-eve q implementohen trsisht n hapsirn user. Mutex sht nj variabl q mund t ket dy gjendje: e hapur dhe e kyur. Rrjedhimisht, nevojitet vetm 1 bit pr ta prfaqsuar, por n praktik prdoret shpesh her nj integer, ku 0 do t thot e hapur dhe do vler tjetr e kyur. Me mutex-in prdoren dy procedura. Kur nj threadi (ose proesi) i duhet t aksesoj zonn e tij kritike, thrret nj mutex_lock. N qoft se mutex sht pr momentin i hapur (q do t thot q zona kritike sht e lir), thirrja kryhet dhe thread-i q kryen thirrjen sht i lir t hyj n zonn kritike.

Nga ana tjetr, n qoft se mutex sht i kyur, thread-i q ka kryer thirrjen bllokohet derisa thread-i n zonn kritike t ket mbaruar dhe thrret mutex_unlock. N qoft se disa proese jan bllokuar n mutex, zgjidhet rastesisht njri prej tyre dhe lejohet t prdor kyjen. Meqn se mutex-et jan shum t thjeshta, ato mund t implementohen shum thjesht n hapsirn user n qoft se mund t prdoren instruksione TSL. Kodi pr mutex_lock dhe mutex_unlock q prdoren n nj paket thread-esh n nivelin user, tregohen n Fig. 2-25.

mutex_lock: TSL REGISTR,MUTEX | copy mutex to registr and set mutex to 1 CMP REGISTRS,#0 | was mutex zero? JZE ok | if it was zero, mutex was unlocked, so return CALL thread_yield | mutex is busy; schedule another thread JMP mutex_lock | try again latr ok: RET | return to caller; critical region entered mutex_unlock: MOVE MUTEX,#0 RET | return to caller

| store a 0 in mutex

Figura 2-25. Implementimi i mutex_lock dhe mutex_unlock

Kod i mutex_lock sht i ngjashm me kodin e enter_region q tregohet n Fig. 222 por me nj ndryshim thelbsor. Kur enter_region nuk arrin t futet n zonn kritike vazhdon teston vazhdimisht (busy waiting). Prfundimisht, koha mbaron dhe skedulohet nj proes tjetr pr tu ekzekutuar. N nj ast proesit q mban kyin i vjen rradha pr ekzekutim dhe e lshon at. Me thread-et situata sht e ndryshme, sepse nuk ka clock q mbyll thread-et q kan shum koh q ekzekutohen. Rrjedhimisht, nj thread q tenton t marr nj ky me busy waiting do t ngelet n lak prgjithmon dhe nuk do t marr kurr kyin, sepse nuk lejon asnj thread t ekzekutohet dhe t lshoj kyin. Ktu qndron edhe ndryshimi ndrmjet enter_region dhe mutex_lock. Kur ky i fundit nuk arrin t kap kyin, thrret thread_yield pr ti dhn CPU-n nj thread-i tjetr. Rrjedhimisht nuk ka busy waiting. Kur thread-i ekzekutohet hers tjetr, teston srish kyin. Meqn se thread_yield sht vetm nj thirrje drejt skedulerit t thread-eve n hapsirn user, sht shum i shpejt. Si rrjedhim, as mutex_lock dhe as mutex_unlock nuk i duhen thirrje kernel. Duke i prdorur, thread-et n nivelin user mund t sinkronizohen plotsisht n hapsirn user duke prdorur procedura q kan nevoj vetm pr nj grusht instruksionesh.

Sistemi mutex q prshkruam m lart sht nj grup i thjesht thirrjesh. Pr t gjith sfotware-et ka gjithmon nj krkes pr sa m shum detyra dhe veori, e njjta gj vlen edhe pr primitivat e sinkronizimit. Pr shembull, nj paket thread-esh ofron nj thirrje e quajtur mutex_trylock, q merr kyin ose kthen nj kod n rast se dshton, por nuk bllokohet asnjeher. Kjo thirrje i jep thread-it mundsi t zgjedh far t bj si altrnativ n vnd q t pres. Deri tani na ka dal nj problem q e kemi mbuluar paksa por q n fund ja vlen ta shpjegojm. Kur kemi nj paket thread-esh n hapsirn user, nuk kemi probleme me rastin kur shum thread-e duan t aksesojn t njjtin mutex, meqn se veprojn n t njjtn hapsir adresash. Megjithat, me shumicn e zgjidhjeve t mparshme, si algoritmi i Petrson apo semafort, ka nj supozim q nuk thuhet, q n rastin e shum proeseve ata kan t drejt t aksesojn t paktn disa memorie t share-uar, ndoshta edhe vetm nj fjal, por dika po. N se proeset kan hapsira adresash pa lidhje me njra-tjetrn, ashtu si kemi thn vazhdimisht, si mund t share-ojn variabln turn n algoritmin Petrson apo n semafor, apo n nj buffer fardo? Ka dy prgjigje. E para, disa nga strukturat e share-imit t t dhnave, si semafort, mund t ruhen n kernel dhe t aksesohen vetm me an t thirrjeve sistem. Ky trajtim eliminon problemin. E dyta, shumica e sistemeve operative moderne (duke prfshir Unix dhe Windows) ofrojn nj mnyr q proeset t share-ojn nj pjes t hapsirs s tyre t adresave me proese t tjera. N kt mnyr, mund t share-ohen buffer apo dhe struktura t tjera t dhnash. N rastin m t keq, q nuk sht e mundur asgj tjetr, mund t prdoret nj file i share-uar. N se dy ose m shum proese share-ojn shumicn apo t gjith hapsirn e tyre t adresave, ndryshimi ndrmjet proeseve dhe thread-eve mbulohet disi, por ekziston gjithsesi. Dy proese q share-ojn t njjtn hapsir adresash kan gjithsesi open files, alarm timers dhe karakteristika t tjera t proeseve t ndryshme, ndrkoh q proeset brnda nj proesi i share-ojn ato. Dhe sht gjithmon e vrtt q proeset q ndajn t njjtn hapsir adresash nuk kan t njjtin efikasitet si thread-et e nivelit user meqn se kernel sht thellsisht i prfshir n manaxhimin e tyre.

2.3.7 Monitort M an t semaforve komunikimi i intrproeseve duket i thjesht, apo jo? Harrojeni. Shikoni me vmendje rregullin e vendosjes s down-eve prpara se t vendosni apo t trhiqni element nga buffer-i n Fig. 2-24. Supozojm sikur dy down-et n kodin e prodhuesit t ishin ndryshuar n rradh, kshtu mutex do t dekrementohej prpara empty dhe jo pas tij. N se bufferi do t ishte plot, prodhuesi do t bllokohej, dhe mutex do t ishte 0. Rrjedhimisht, hern tjetr q konsumatori do t mundohej t aksesont bufferin, do tkryentenj down mbi mutex, q tani sht 0 dhe do t bllokohej gjithashtu. T dy proeset do t mbetshin t bllokuar prgjithmon dhe nuk do t kryhej m pun. Kjo situat e pafat quhet deadlock. Do ti studiojm m mir n Kap. 3.

Ky problem theksohet pr t treguar sa i kujdesshm duhet t jesh kur prdor semafort. Nj gabim i leht on n nj bllokim t ashpr. sht si programimi n gjuhn assembler, vetm se m keq sepse gabimet jan kushte prparsie (race conditions), deadlock, dhe forma t tjera sjelljeje t paparashikueshme. Pr ta br m t leht shkrimin e programeve t rregullta, Hoare (1974) dhe Brinch Hansen (1975) propozuan nj primitiv me sinkronizim t nivelit t lart t quajtur monitor. Propozimi i tyre ndryshonte shum pak nga sa prshkruhet m posht. Nj monitor sht nj grup procedurash, variablash dhe struktura t dhnash q jan t gjitha t mbledhura bashk n nj tip t veant moduli apo paket. Proeset mund t thrrasin procedurat q ndodhen n nj monitor kur t duan, por nuk mund t aksesojn strukturat e t dhnave t brndshme t monitorit me an t procedurave t deklaruara jasht tij. Figura 2-26 ilustron nj monitor t shkruar n nj gjuh imagjinare, Pidgin Pascal.

monitor example integer i; condition c;

procedure producer( ); end;

procedure consumer( );

end; end monitor; Figura 2-26. Nj monitor.

Monitort kan nj karakteristik t rndsishme q i bn ata t dobishm pr arritjen e prjashtimit t ndrsjellt (mutual exclusion): n nj cast t caktuar vetm nj proes mund t jet aktiv n nj monitor. Monitort jan nj konstrukt i gjuhs s programimit, kshtu kompilatori e di q jan t veant dhe mund t merret me thirrjet drejt procedurave t monitorve ndryshe nga thirrjet e tjera procedur. N prgjithsi, kur nj proes thrret nj procedur nga monitori, instruksionet e para t procedurs do t kontrollojn n se ka ndonj proes tjetr aktiv n monitor. Ne s ka, proesi q ka kryer thirrjen do t pezullohet derisa proesi tjetr t lr monitorin. N se nuk ka proes tjetr duke prdorur monitorin, ather proesi thirrs mund t futet. Implementimi i prjashtimit t ndrsjellt tek monitort sht n dor t kompilatorit, por nj mnyr e zakonshme sht prdorimi i nj mutex apo nj semafori binar. sht m pak e mundur q dika do t shkoj gabim, sepse sht kompilatori dhe jo programuesi, q merret me prjashtimin e ndrsjellt. sht e mjaftueshme t dim q duke i kthyer t gjitha zonat kritike drejt procedurave t monitorve, nuk do t ket m dy proese q ekzekutojn zonat e tyre kritike n t njjtn koh. Edhe pse monitort na paraqesin nj mnyr t thjesht pr t arritur prjashtimin e ndrsjellt, si e pam m lart, kjo nuk sht e mjaftueshme. Na duhet edhe nj mnyr pr t bllokuar proeset kur nuk mund t vazhdojn m. N problemin prodhueskonsumator, sht e leht q t gjith testt pr buffer-full dhe buffer-empty t vendosen n procedurat monitor, por si do t bllokohet prodhuesi kur gjen buffer plot? Zgjidhja qndron n futjen e variblave t gjendjes dhe dy veprimeve n to, wait (prit) dhe signal (sinjal). Kur nj procedur monitor zbulon se nuk mund t vazhdoj m (per shembull,., prodhuesi gjen buffer-in plot), ekzekuton nj wait n ndonj variabl gjendjeje, t themi, full. Ky veprim shkakton proesin q ka kryer thirrjen t bllokohet. Ai gjithashtu lejon nj proes tjetr, q m par nuk ishte lejuar, t futet tani. Ky proes tjetr, pr shembull, konsumatori, mund t zgjoj partnerin e tij duke ekzekutuar nj sinjal mbi variabln e gjendjes mbi t ciln po pret partneri. Pr t mnjanuar t paturin e dy proeseve aktive n monitor n t njjtn koh, na duhet nj rregull q na tregon far ndodh pas sinjalit. Hoare propozoi q proesi i sapozgjuar t lejohej t ekzekutohej, duke pezulluar tjetrin. Brinch Hansen propozoi t rregulloj problemin duke krkuar q nj proes q kryen nj sinjal t dal menjeher nga monitori. Me fjal t tjera, nj rresht sinjal do t paraqitt si rreshti i fundit n nj procedur monitor. Ne do t prdorim propozimin e Brinch Hensen, sepse sht m i thjesht n koncept dhe gjithashtu m i leht pr tu implementuar. N se ekzekutohet nj signal n nj variabl gjendjeje n t ciln po presin disa proese, vetm njri prej tyre zgjohet, kush prcaktohet nga skeduleri i sistemit. Ka dhe nj zgjidhje t tret, t ciln nuk e ka propozuar as Hoare as Brinch Hansen. Kjo sht pr t ln sinjalizuesin t vazhdoj s ekzekutuari dhe t lejoj proesin n pritje t filloj ekzekutimin vetm pasi sinjalizuesi t ket ln monitorin.

Variablat e gjendjes nuk jan numrues. Ata nuk i ruajn sinjalet pr tu prdorur m pas si bjn semafort. Kshtu n se sinjalizohet nj variabl gjendjeje n t ciln nuk ka proes duke pritur, sinjali humb prgjithmon. Me fjal t tjera, wait duhet t vij prpara signal. Ky rregull e bn implementimin shum m t thjesht. N praktik nuk paraqitt ndonj problem, meqn se sht e thjesht t ruhet gjendja e secilit proes me an t variablave, n se duhet. Nj proes q do t kryej nj veprim signal mund t shoh q ky veprim nuk sht i domosdoshm duke par variablat. Nj skelet i problemit prodhues-konsumator me monitor sht dhn n Fig. 227 n nj gjuh imagjinare, Pidgin Pascal. Avantazhi i prdorimit t gjuhs Pidgin Pascal n kt rast sht se ajo sht e pastr dhe e thjesht dhe ndjek ekzaktsisht modelin Hoare/Brinch Hansen.

monitor ProducerConsumer condition full, empty; integer count;

procedure insert(item: integer); begin if count = N then wait(full); insert_item(item); count := count + 1: if count = 1 then signal(empty) end;

function remove: integer; begin if count = 0 then wait(empty); remove = remove_item;

count := count 1; if count = N 1 then signal(full) end;

count := 0; end monitor;

procedure producer; begin while true do begin item = produce_item; ProducerConsumer.insert(item) end end;

procedure consumer; begin while true do begin item = ProducerConsumer.remove; consume_item(item) end

end; Figura 2-27. Nj skic e problemit prodhues-konsumator me monitor. Vetm nj procedur monitor sht aktive n nj ast t caktuar. Buffer-i ka N slot. Mund t mendohet se veprimet wait dhe signal duken t ngjashme me sleep dhe wake up, q m sipr pam q kishin kushte prparsie fatale. Ato jan shum t ngjashme, por me nj ndryshim thelbsor: sleep dhe wake up dshtuan sepse njri proes po mundohej t futej n gjum, tjetri po mundohej ta zgjont. Me monitort kjo nuk mund t ndodh. Prjashtimi i ndrsjellt automatik i procedurave monitor e garanton q, t themi, n se prodhuesi brnda nj procedure monitor zbulon q bufferi sht plot, do t mund t kompletoj veprimin wait pa u shqetsuar pr mundsin q skeduleri mund t kaloj tek konsumatori para se t kompletohet wait. Konsumatori nuk do t lejohet t futet n monitor para se t kompletohet wait dhe prodhuesi t jet shnuar si jo n ekzekutim. Edhe pse Pidgin Pascal sht nj gjuh imagjinare, ka disa gjuh programimi q suportojn monitort, edhe pse jo gjithmon n formn e projektuar nga Hoare dhe Brinch Hansen. Nj nga kto gjuh sht edhe Java. Java sht nj gjuh e orientuar nga objekti q suporton thread-et n nivelin user dhe gjithashtu lejon metodat (procedurat) t grupohen n klasa. Duke shtuar nj fjal kye n sinkronizim me deklarimin e metods, Java garanton q n se nj thread fillon ekzekutimin e nj metode, asnj thread nuk do t lejohet t filloj ekzekutimin e metodave t tjera n at klas. Nj zgjidhje e problemit prodhues-konsumator duke prdorur monitoret n Java sht dhn n Fig. 2-28. N zgjidhje ka katr klasa. Klasa e jashtme, ProducerConsumer, krijon dhe fillon dy threade, p dhe c. Klasa e dyt dhe e tret, producer dhe consumer, prmbajn kodin pr prodhuesin dhe konsumatorin respektivisht. S fundi, klasa our_monitor, sht monitori. Ajo prmban dy thread-e t sinkronizuara q prdoren pr t futur element n bufferin e share-uar dhe pr ti nxjerr ato. Ndryshe nga shembulli i mparshm, ktu kemi treguar kodin e plot pr insert dhe remove. Thread-et e prodhuesit dhe konsumatorit jan identike n funksion me homologt e tyre n shembullin e mparshm. Prodhuesi ka nj lak t pafund q gjeneron t dhna dhe i fut ato n nj buffer t prbashkt. Konsumatori ka nj lak t ngjashm t pafund q merr t dhna nga bufferi. Pjesa interesante e programit sht klasa our_monitor, e cila prmban buffer-in, variablat administrative, dhe dy metoda t sinkronizuara. Kur prodhuesi sht aktiv brenda insert, e ka t sigurt q konsumatori nuk mund t jet aktive brenda remove, duke e pasur pa rrezik ndryshimin e variablave dhe buffer-it pa frikn e kushteve t prparsis. Variabla count ruan sa element ndodhen n buffer. Mund t marr do vler nga 0 deri n N 1, duke e prfshir kt t fundit. Variabla lo sht indeksi i slotit t buffer-it nga do t ngarkohet elementi i ardhshm. N mnyr t ngjashme, hi sht indeksi i slotit t buffer-it ku do t vendoset elementi i ardhshm. Lejohet q lo = hi, q do t thot q n buffer mund t ket 0 ose N element. Vlera e count tregon se cili rast qndron.

Metodat e sinkronizuara n Java ndryshojn nga monitort klasik n nj mnyr thelbsore: Java nuk ka variabla gjendjesh. Por, ajo ofron dy procedura, wait dhe notify q jan ekuivalentt me sleep dhe wake up, por q kur prdoren brenda nj metode t sinkronizuar, nuk jan shkak pr kushte prparsie. N tori, metoda wait mund t ndrpritet, dhe kt bn kodi q e rrethon at. Java krkon q t bhet i qart trajtimi i prjashtimeve. Pr synimin ton, imagjinojm q go_to_sleep sht mnyra pr ta vn n gjum.

public class ProducerConsumer { static final int N = 100; // constant giving the buffer size static producer p = new producer(); // instantiate a new producer thread static consumer c = new consumer(); // instantiate a new consumer thread static our_monitor mon = new our_monitor(); // instantiate a new monitor public static void main(String args[ ]) { p.start(); // start the producer thread c.start(); // start the consumer thread } static class producer extends Thread { public void run( ) { // run method contains the thread code int item; while(true) { // producer loop item = produce_item(); mon.insert(item); } } private int produce_item ( ){ } // actually produce } static class consumer extends Thread { public void run() { // run method contains the thread code int item; while(true) { // consumer loop item = mon.remove(); consume_item (item); } } private void consume_item (int item) { } // actually consume } static class our_monitor { // this is a monitor private int buffer[ ] = new int[N]; private int count = 0, lo = 0, hi = 0; // counters and indices

public synchronized void insert (int val) { if(count == N) go_to_sleep(); //if the buffer is full, go to sleep buffer [hi] = val; // insert an item into the buffer hi = (hi + 1) % N; // slot to place next item in count = count + 1; // one more item in the buffer now if(count == 1) notify( ); // if consumer was sleeping, wake it up } public synchronized int remove( ) { int val; if(count == 0) go_to_sleep( ); // if the buffer is empty, go to sleep val = buffer [lo]; // fetch an item from the buffer lo = (lo + 1) % N; // slot to fetch next item from count = count 1; // one few items in the buffer if(count == N 1) notify(); // if producer was sleeping, wake it up return val; } private void go_to_sleep() { try{wait( );} catch{ InterruptedException exc) {};} } } Figura 2-28. Nj zgjidhje e problemit prodhues-konsumator n Java.

Duke e br prjashtimin e ndrsjellt t zonave kritike automatik, monitort e bjn programimin paralel me m pak mundsi gabimesh sesa me semafort. Megjithat edhe ata kan nj dizavantazh. Jo m kot dy shembujt tan me monitor ishin n Pidgin Pascal dhe Java dhe jo n C, ashtu sic jan edhe shembujt e tjer n kt libr. Ashtu si tham m par, monitort jan nj koncept gjuhe programimi. Kompilatori duhet ti njoh ato dhe ti prshtas pr prjashtimin e ndrsjellt. C, Pascal dhe shumica e gjuhve t tjera nuk kan monitor, kshtu sht e paarsyeshme t pressh q kompilatort e tyre t caktojn rregulla pr prjashtimin e ndrsjellt. N fakt, si do ta kuptonte kompilatori se cilat procedura ndodhen n monitor dhe cilat jo? As kto gjuh t tjera nuk kan semafor, por shtimi i tyre sht i thjesht: na duhet t shtojm n librari dy rutina t shkruara n gjuhn asembler pr t prfaqsuar thirrjet sistem up dhe down. Kompilatoret nuk duhet as ta dijn q ekzistojn. Sigurisht q sistemet operative duhet t din q ka semafor, megjithat n qoft se kemi nj sistem operativ t bazuar n semafor, mund t shkruajm programe user n C ose C++ (apo edhe n asembler). Me monitort, na duhet nj gjuh q ti ket t prfshir. Nj problem tjetr me monitoret dhe gjithashtu me semafort, sht q ata u projektuan pr t zgjidhur problemin e prjashtimit t dyanshm n nj ose m shum CPU, dhe t gjith kan akses n nj memorie t prbashkt. Duke i vn semafort n memorien e share-uar dhe mbrojtja e tyre me an t instruksioneve TSL, mund t

mnjanojm kushtet e prparsis. Kur shikojm nj sistem t shprndar q konsiston n shum CPU, secili me memorien e tij personale, t lidhur nga nj local area network, kto primitiva bhen t paprdorueshme. Prfundimi sht se semafort jan t nivelit shum t ult dhe monitort nuk jan t prdorshm, prve se n disa gjuh programimi. Dhe gjithashtu asnjra nga primitivat e dhna m sipr pr shkmbimin e informacionit ndrmjet makinave. Nevojitet dika tjetr.

2.3.8 Shkmbimi i Mesazheve Ajo dika tjetr sht shkmbimi i mesazheve (message passing). Metoda e komunikimit t intrproeseve prdor dy primitiva, send (drgo) dhe receive (merr), q si semafort por jo si monitort, jan thirrje sistem dhe jo konstrukt gjuhe. Si t tilla, ato mund t vendosen shum thjesht n procedura librari, si pr shembull;

send(destination, &message);

dhe receive(source, &message); Thirrja e par drgon nj mesazh n nj vendndodhje t dhn dhe e dyta merr nj mesazh nga nj burim i dhn (ose prej nj fardo, n se pr marrsin nuk ka rndsi). N se nuk ka asnj mesazh t mundshm, marrsi bllokohet derisa t vij nj i till, ose mund t kthej menjeher me nj kod gabimi.

Problemet e projektimit t sistemeve pr shkembimin e mesazheve

Sistemet e shkmbimit t mesazheve kan shum probleme dhe shtje projektimi q nuk lindin me semafort apo monitort, n veanti n se proeset komunikuese jan n makina t ndryshme t lidhura nga nj network. Pr shembull, mesazhet mund t humbn nga network-u. Pr tu mbrojtur nga humbja e mesazheve, drguesi dhe marrsi mund t bien dakord q sapo t merret nj mesazh, marrsi do t kthej nj mesazh acknowledgement. N se drguesi nuk ka marr acknowledgement brnda nj intervali kohor t caktuar, ai ritransmeton mesazhin. Tani le t marrin n konsiderate far ndodh n se mesazhi merret sakt, por humbet acknowledgement. Drguesi do t ritransmetoj mesazhin, kshtu marrsi do ta marr at dy her. sht thelbsore q marrsi t dij t dalloj nj mesazh t ri nga nj t vjetr. Zakonisht, ky problem zgjidhet duke vn numra t njpasnjshm n do mesazh.

N se marrsi merr nj mesazh q mban t njjtin numr si mesazhi paraardhs, ai e di q mesazhi sht duplikat dhe mund t injorohet. Komunikimi i suksesshm sht nj pjes e rndsishme n studimin e rrjetave kompjuterike. Pr m shum informacion, shiko (Tanenbaum, 1996). Sistemet e mesazheve duhet t merren edhe me pyetjen se si emrohen proeset, n mnyr q proesi q specifikohet n nj thirrje send apo receive t jet i qart. Njohja (autntikimi) sht gjithashtu nj problem n sistemet e mesazheve: si mund t vrttoj klienti q po komunikon me serverin e vertet dhe jo me nj mashtrues? Nga ana tjetr e spektrit, ka edhe probleme projektimi q jan t rndsishme kur drguesi dhe marrsi ndodhen n t njjtn makin. Njra prej tyre sht prformanca. Kopjimi i mesazheve nga nj proes tek nj tjetr sht gjithmon m e ngadalt sesa t bsh nj veprim me semafor apo t aksesosh nj monitor. Shum pun sht br pr t br kalimin e mesazheve efikas. Cheriton (1984), pr shembull, sugjeroi t limitohet size i mesazheve q t futet n regjistrat e makins, dhe m pas t bhet shkmbimi i mesazheve duke prdorur regjistrat.

Problemi Prodhues-Konsumator me Shkmbimin e Mesazheve

Tani le t shohim si mund t zgjidhet problemi prodhues-konsumator me shkmbimin e mesazheve dhe jo memorie t share-uar. Nj zgjidhje sht dhn n Fig. 2-29. Supozojm q t gjith mesazhet jan n t njjtn madhsi, dh q, mesazhet q jan drguar, por nuk jan marr akoma vendosen n buffer automatikisht nga sistemi operativ. N kt zgjidhje, prdoren N mesazhe, n analogji me N slott e memories s share-uar n buffer. Konsumatori fillon duke i drguar prodhuesit N mesazhe bosh. Sapo prodhuesi t ket nj element pr ti drguar konsumatorit, ai merr nj mesazh bosh dhe kthen nj t plot. N kt mnyr, numri total i mesazheve n sistem mbetet i pandryshueshm n koh, kshtu q mund t ruhen n nj sasi t caktuar memorie t ditur m par. N se prodhuesi punon m shpejt se konsumatori, t gjith mesazhet do t mbushen plot, duke pritur pr konsumatorin: prodhuesi do t bllokohet, duke pritur pr nj mesazh bosh pr tu kthyer. N se konsumatori punon m shpejt, ather ndodh e kundrta: t gjith mesazhet do t jen boshe duke pritur q prodhuesi ti mbush: konsumatori do t bllokohet, duke pritur pr nj mesazh plot.

#define N 100 /* number of slots in the buffer */ void producer(void) { int item; message m; /* message buffer */

while (TRUE) { item = produce_item( ); /* generate something to put in buffer */ receive(consumer, &m); /* wait for an empty to arrive */ build_message (&m, item); /* construct a message to send */ send(consumer, &m); /* send item to consumer */ } } void consumer(void) { int item, i; message m; for (i = 0; i < N; i++) send(producer, &m); /* send N empties */ while (TRUE) { receive(producer, &m); /* get message containing item */ item = extract_item(&m); /* extract item from message */ send(producer, &m); /* send back empty reply */ consume_item(tem); /* do something with the item */ } } Figura 2-29. Problemi prodhues-konsumator me N mesazhe.

Ka shum variante t mundshme pr shkmbimin e mesazheve. Si fillim, le t shohim si adresohen mesazhet. Nj mnyr sht ti bashkangjisim do proesi nj adres t veant dhe mesazhet ti adresojm drejt proeseve. Nj mnyr tjetr sht t shpikim nj struktur t dhnash t re, t quajtur nj mailbox (kuti postare). Nj mailbox sht nj vend pr t ruajtur nj numr t caktuar mesazhesh, n prgjithsi numri caktohet kur krijohet mailbox-i. kur prdoren mailbox-et, parametrat e adresave, n thirrjet send dhe receive, jan mailbox-et dhe jo proeset. Kur nj proes tenton ti drgoj nj mailbox-i q sht plot, pezullohet derisa t largohet nj mesazh nga mailbox-i dhe t hap vend pr nj tjetr. Pr problemin prodhues-konsumator, edhe prodhuesi edhe konsumatori do t krijojn nj mailbox t madh sa pr t mbajtur N mesazhe. Prodhuesi do t drgoj mesazhe q pmbajn t dhna n mailbox-in e konsumatorit, dhe konsumatori do t drgoj mesazhe bosh n mailbox-in e prodhuesit. Kur prdoren mailbox-et, mekanizmi i buffer-it sht i qart: mailbox-i destinacion mban mesazhe q i jan drguar proesit destinacion, por nuk jan pranuar akoma. Ekstremiteti tjetr nga ai i t paturit mailbox-e sht eliminimi i bufferit. Kur ndiqet ky trajtim, n se ekzekutohet send prpara receive, proesi drgues bllokohet derisa t ndodh receive, n kt moment mesazhi mundet tani t kaloj direkt nga drguesi tek marrsi, pa prdorur buffer si ndrmjets. N mnyr t ngjashme, n se veprimi receive kryhet i pari, marrsi bllokohet derisa t ndodh nj veprim send. Kjo

strategji shpesh her njihet si nj rendezvous. sht m i thjesht pr tu implementuar sesa nj skem mesazhesh me buffer, por sht m pak fleksibl meqn se drguesi dhe marrsi jan t detyruar t punojn me turne. Shkmbimi i mesazheve sht shum e prdorur n sisteme me programim paralel. Nj sistem me programim paralel e mirnjohur sht, pr shembull, MPI (Message-Passing Intrface). sht shum i prdorur pr llogaritje shkencore. Pr m shum informacion pr kt shikoni (Gropp et al., 1994; dhe Snir et al., 1996).

2.3.9 Barrierat Mekanizmi i fundit i sinkronizimit sht i prshtatshm pr situata me shum proese dhe jo pr ato me dy proese prodhues-konsumator. Disa aplikacione jan t ndara n faza dhe kan rregullin q asnj proes nuk mund t kaloj n fazn pasardhse pa mbaruar t gjith proeset fazn paraardhse. Kjo sjellje mund t arrihet duke vendosur nj barrier n fund t do faze. Kur nj proes mbrrin n barrier, bllokohet derisa t gjith proeset t ken arritur barriern. Veprimi i nj barriere sht treguar n Fig. 2-30. N Fig. 2-30(a) shikojm katr proese q mbrrijn n barrier. Kjo do t thot q po veprojn dhe q nuk kan arritur ende n fundin e fazs. M pas, proesi i par prfundon gjith punn e fazs s par. Pastaj ekzekuton primitivn e barriers, prgjithsisht duke thirrur nj procedur librarie. Proesi pastaj pezullohet. M pas, nj proes i dyt dhe m pas nj i tret prfundojn fazn e par dhe gjithashtu ekzekutojn primitivat e barriers. Kjo situat ilustrohet n Fig. 2-30(b). m n fund, kur proesi i fundit, C, mbrrin n barrier, t gjith proeset lirohen, si tregohet n Fig. 2-30(c).

Figura 2-30. Prdorimi i nj barriere. (a) Proesi duke ju afruar barriers. (b) T gjith proeset ve njrit jan bllokuar. (c) Kur proesi i fundit mbrrin n barrier, t gjith lejohen t kalojn.

Si nj shembull i nj problemi q ka nevoj pr barriera, konsiderojm nj problem tipik n fizik apo inxhinieri. Kemi nj matric tipike q prmban disa vlera fillestare. Vlera mund t prfaqsojn temperaturat n pika t ndryshme t nj flet metalike. Ideja mund t jet t llogaritet sa i duhet nj flake t vendosur n njrin cep t jap efekt dhe t shprhapet mbi gjith fletn. Duke filluar nga kto vlera, mbi matirc kryhet nj transformim pr t marr versionin e dyt t matrics, pr shembull, duke zbatuar ligjet e termodinamiks pr t par sa jan temperaturat pas T. M pas proesi prsritet dhe jep temperaturat n pika t caktuara, si nj funksion i kohs ndrsa fleta nxehet. Algoritmi n kt mnyr prodhon nj seri matricash me kalimin e kohs. Tani imagjinojm se matrica sht shum e madhe (t themi 1 milion me 1 milion), kshtu na duhen proeset paralele (mundsisht n nj multiproesor) pr t prshpejtuar llogaritjet. Proese t ndryshme punojn n pjes t ndryshme t matrics, dhe kshtu llogarisin elementet e matrics s re nga ajo e vjetra, duke u bazuar n ligjet e fiziks. Megjithat, asnj proes nuk mund t filloj prsritjen n + 1 pa mbaruar prsritja n, do t thot, derisa t gjith proeset t ken mbaruar punn e momentit. Mnyra pr t arritur kt qllim sht t programojm do proes t ekzekutoj nj veprim barrier pasi t ket mbaruar pjesn e tij. Kur t gjith t ken mbaruar, matrica e re (input-i pr prsritjen e ardhshme) do t mbaroj dhe t gjith proeset do t lirohen n t njjtn koh pr t filluar ciklin e ardhshm.

2.4. PROBLEMET KLASIKE IPC Literatura e sistemeve operative sht plot me probleme interesante t cilat jane diskutuar dhe analizuar duke prdorur nj shumllojshmeri metodash sinkronizuese. Ne paragrafet e meposhtme do t shqyrtojme tre probleme t mirenjohur. 2.4.1. PROBLEMI I DARKIMIT T FILOZOFEVE Ne 1965, Dijkstra parashtroi dhe zgjidhi nj problem sinkronizimi qe e quajti dhe dining phylosophers problem (problemi i darkimit t filozofeve). Deri ne at kohe, do njri qe krijonte nj primitive sinkronizimi u ndje i detyruar t demonstronte se sa elegant ishte menyra e zgjidhjes se problemeve dining phylosophers. Problemi mund t konstatohet shume thjesht si me posht. Pese filozofe jane t ulur ne nj tavoline t rrumbullaket. do filozof ka nj pjat me spageti. Spageti sht kaq rreshqits sa nj filozof ka nevoje pr dy pirune pr t. Ndermjet do cifti pjatash ka nga nj pirun. Paraqitja e tavolines sht e ilustruar ne figuren 2.31.

Fig.1.31. Dreka ne departamentin e filozofise. Jeta e nj filozofi konsiston ne perioda t alternuara ngrenieje dhe mendimi. (Kjo sht dicka e abstraksionit, madje edhe pr filozofet, por aktivitetet e tjera ketu jane t pavend.) Kur nj filozof sht i uritur, ai mundohet t marre pirunin e tij ne t majt dhe ne t djatht, nj ne nj kohe, ne nj rend cfaredo. Ne qoft se sht i sukseshem ne sigurimin e dy piruneve ai ha pr pak dhe me pas le pirunet, dhe fillon t mendoje. Pyetja kryesore sht: A mund t shkruani ju nj program pr secilin filizof qe bn at qe supozohet t beje dhe asnjehere nuk mrzitet? (sht prmendur qe nevoja e dy pirunjve sht dicka artificiale; mbase duhet t ndryshojme ushqimin nga ai Italian ne at Kinez, duke zevendesuar spagetin me orizin dhe pirunjt me shkopinjt.) Figura 2.32. tregon zgjidhje t dukshme. Procedura take-fork pret derisa piruni i specifikuar sht i disponueshem dhe me pas e kap at. Fatkeqesisht, kjo zgjidhje e dukshme sht gabim. Supozoni qe pese filozofet marrin pirunjt ne t majt t tyre, ne t njjtn kohe. Asnjri nuk sht i aft t marre pirunin ne t djatht t tij. Ne qoft se nuk mundet ai le pirunin ne t majt, pret pr pak kohe dhe pastaj prserit t gjithe proesin. Ky propozim, gjithashtu, pr nj arsye apo pr nj tjetr deshton. Me shume pak fat t keq, filozofet mund t fillojne papritur algoritmin, marrin pirunjt ne t majt t tyre, presin, marrin prseri papritur pirunjt e tyre t majt dhe keshtu me rradhe gjthmone. Nj situat e tille ku t gjithe programet vazhdojne t ekzekutojne, por deshtojne ne berjen e do nj progresi quhet starvation (vdekje nga uria). (Quhet starvation edhe ne se problemi nuk ndodh ne nj restorant kinez apo italian).

#define N 5

/* number of philosophers */

void philosopher(int i) /* i: philosopher number, from 0 to 4 */ {

while (TRUE) { think( ); /* philosopher is thinking */ take_fork(i); /* take left fork */ take_fork((i+1) % N); /* take right fork; % is modulo operator */ eat(); /* yum-yum, spaghetti */ put_fork(i); /* Put left fork back on the table */ put_fork((i+1) % N); /* put right fork back on the table */ } } Fig.1.32. Problemi i darkimit t filozofeve pa zgjidhje. Tani ju mund t mendoni po ne qoft se filozofi do t priste nj kohe t rastesishme dhe jo t njjtn kohe pas deshtimit t marrjes se pirunit ne t djatht, shanci qe do gje do t vazhdoje ne lockstp pr edhe nj ore sht shume i vogel. Ky vrojtim sht i vertet, dhe pothuajse ne t gjitha aplikimet t provuarit prseri me vone nuk sht problem. Pr shembull, ne siprfaqen lokale t rrjetit Ethernet, ne qoft se dy kompjutera dergojne paketa ne t njjtn kohe, secili prej tyre pret nj fare kohe t rastesishme dhe provon prseri; Ne praktike kjo zgjidhje funksionon mire. Sidoqoft, ne disa aplikime, nj do t preferont nj zgjidhje qe funksionon gjithmone dhe nuk mund t deshtoje ne saj t nj serie numrash t rastesishem t papelqyeshem. Mendoni rreth kontrollit t sigurt ne nj uzine nukleare. Nj prmiresim i figures 1.32. qe nuk ka asnj deadlock dhe asnj starvation sht t mbrojme pese formulimet qe ndjekin thirrjen think nga nj semafor binar. Para fillimit t marrjes se pirunjve, filozofi duhet t beje nj zbritje ne mutex. Pas rivendosjes se pirunjve, ai duhet t bej nj ngritje ne mutex. Nga kendveshtrimi torik kjo zgjidhe sht e prshtatshme. Por nga ana praktike ka nj t met ne performance: ne nj cast kohe t caktuar vetm nj filozof mund t jet duke ngrene. Me pese pirunj t disponueshem duhet t jemi t aft t lejojme dy filozofe t hane ne t njjtn kohe. Zgjidhja e treguar ne figuren 2.33. sht pa deadlock dhe lejon paralelizmin maksimal pr nj numer arbirtar filozofesh. Ai prdor nj tabele, state, pr t mbajtur gjurme ne se nj filozof po ha, po mendon apo sht i uritur (duke u munduar t marre pirunjt). Nj filozof mund t levize ne state-in duke ngrene ne qoft se asnj nga komshinjt nuk po ha. Komshinjt e filozofit t i-t prcaktohen nga makrot LEFT dhe RIGHT. Ne fjale t tjera ne qoft se i sht 2, LEFT sht 1 dhe RIGHT sht 3. Programi prdor nj grup semaforesh, nj pr do filozof, keshtu qe filozofet e uritur mund t bllokojne ne qoft se pirunjt e nevojitur jane t zene. Vini re qe secili proes ekzekuton proceduren philosopher si kodin e tij kryesor, por proceduarat e tjera, take-forks, put-fork, dhe test jane procedura t zakonshme, dhe nuk ndajne proeset. #define N 5 /* number of philosophers */ #define LEFT (i+N1)%N /* number of i's left neighbor */ #define RIGHT (i+1)%N /* number of i's right neighbor */ #define THINKING 0 /* philosopher is thinking */ #define HUNGRY 1 /* philosopher is trying to get forks */ #define EATING 2 /* philosopher is eating */

typedef int semaphore; /* semaphores are a special kind of int */ int state[N]; /* array to keep track of everyone's state */ semaphore mutex = 1; /* mutual exclusion for critical regions */ semaphore s[N]; /* one semaphore pr philosopher */ void philosopher (int i) /* i: philosopher number, from 0 to N1 */ { while (TRUE) { /* repeat forever */ think(); /* philosopher is thinking */ take_forks(i); /* acquire two forks or block */ eat(); /* yum-yum, spaghetti */ put_forks(i); /* put both forks back on table */ } } void take_forks(int i) /* i: philosopher number, from 0 to N1 */ { down(&mutex); /* enter critical region */ state[i] = HUNGRY; /* record fact that philosopher i is hungry */ test(i); /* try to acquire 2 forks */ up(&mutex); /* exit critical region */ down(&s[i]); /* block if forks were not acquired */ } void put_forks(i) /* i: philosopher number, from 0 to N1 */ { down(&mutex); /* enter critical region */ state[i] = THINKING; /* philosopher has finished eating */ test(LEFT); /* see if left neighbor can now eat */ test(RIGHT); /* see if right neighbor can now eat */ up(&mutex); /* exit critical region */ } void test(i) /* i: philosopher number, from 0 to N1 */ { if (state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] != EATING) { state[i] = EATING; up(&s[i]); } Fig.1.33. Nj zgjidhje pr problemin e darkimit t filozofeve

2.4.2. PROBLEMI I SHKRUESVE DHE I LEXUESVE Problemi i darkimit t filozofeve sht i dobishem pr proeset e modelimit qe jane konkuruese pr akses eksklusive t nj numri t limituar burimesh, si pajisjet I/O.

Nj tjetr problem i famshem sht problemi i shkruesve dhe i lexuesve (Courtois et al, 1971), modelet e t cilit aksesojne ne nj database. Imagjinoni, pr shembull, nj sistem rezervimi ajror, me shume proese konkuruese qe duan t lexojne apo t shkruajne. sht e pranueshme t kemi shume proese qe lexojne database ne t njjtn kohe, por ne qoft se nj proes ishte shkruajtur database-in, asnj proes tjetr nuk mund t ket akses te database, madje as edhe lexuesit. Pyetja sht si i programoni lexuesit dhe shkruesit? Nj zgjidhje tregohet ne figuren 2.34. Ne ket zgjidhje, lexuesi i pare qe do t marre akses t database bn nj zbritje ne semaforin db. Lexuesit pasues thjesht inkrementojne nj numerues, rc. Sapo t ikin lexuesit, ato dekrementojne numeruesin dhe i fundit bn nj ngritje t semaforit, duke lejuar nj shkrues t bllokuar, ne qoft se ka nj t tille, t futet. Zgjidhja e prezantuar ketu ne menyre implicite prmban nj vendim delikat pr t cilin ia vlen t komentojme dicka. Supozoni qe nderkohe qe nj lexues po prdor database-in, vjen nj lexues tjetr. Meqene se t paturit e dy lexuesve ne t njjtn kohe nuk prbn ndonj problem, lexuesi i dyt pranohet. Nj lexues i tret dhe t tjere pasues mund t pranohen ne qoft se ato do t vijne. Tani supozoni se vjen nj shkrues. Shkruesi nuk mund t pranohet ne database prderisa shkruesit duhet t kene akses ekskluzive, keshtu shkruesi pezullohet. Me vone, shfaqen lexues t tjere. Pr sa kohe qe t paktn nj lexues sht aktiv, lexues t tjere pasardhes pranohen. Si pasoje e kesaj strategjie, pr sa kohe t ket nj furnizim t rregullt lexuesish, ata do t futen sapo t mberrijne. Shkruesi do t mbahet i pezulluar derisa t mos ket asnj lexues. Ne qoft se vjen nj lexues i ri, le t themi, do 2 sekonda dhe secili lexues kerkon 5 sekonda pr t bere punen e tij, shkruesi nuk do t futet asnjehere. Pr t parandaluar ket situat, programi mund t shkruhet pak ndryshe: kur mberrin nj lexues dhe nj shkrues sht duke pritur, lexuesi ne vend qe t pranohet menjehere pezullohet pas shkruesit. Ne ket menyre shkruesit i duhet t prese vetm pr lexuesit qe ishin aktiv kur ai mberrin, por nuk duhet t prese pr lexuesa qe vijne pas tij. Disavantazhi i kesaj zgjidhjeje sht se ajo con ne uljen e konkurences dhe si pasoje ne nj performance me t ulet. Courtois et al, prezantoi nj zgjidhje qe u jep prioritet shkruesve. typedef int semaphore; /* use your imagination */ semaphore mutex = 1; /* controls access to 'rc' */ semaphore db = 1; /* controls access to the database */ int rc = 0; /* # of proesses reading or wanting to */ void reader(void) { while (TRUE) { /* repeat forever */ down(&mutex); /* get exclusive access to 'rc' */ rc = rc + 1; /* one reader more now */ if (re == 1) down(&db); /* if this is the first reader */ up{&mutex); /* release exclusive access to 'rc' */ read_data_base(); /* access the data */ down(&mutex); /* get exclusive access to 'rc' */

rc = rc 1; /* one reader fewer now */ if (rc == 0) up(&db); /* if this is the last reader */ up(&mutex); /* release exclusive access to 'rc' */ use_data_read(); /* noncritical region */ } } void writer(void) { while (TRUE) { /* repeat forever */ think_up_data(); /* noncritical region */ down(&db); /* get exclusive access */ write_data_base(); /* update the data */ up(&db); /* release exclusive access */ } } Fig.1.34. Nj zgjidhje e problemit t lexuesve dhe shkruesve.

2.4.3. PROBLEMI I BERBERIT QE FLE Nj tjetr problem klasik IPC ndodh ne nj dyqan berberi. Dyqani berberit ka nj berber, nj karrige berberi, dhe n karrige pr tu ulur klientt qe presin, ne qoft se ka. Ne qoft se nuk ka asnj klient, berberi ulet ne karrigen e berberit dhe bie ne gjume, sic ilustrohet ne figuren 2.35. Kur vjen nj klient, atij i duhet t zgjoje berberin qe po fle. Ne qoft se gjat kohes qe po pret floket e nj klienti vijne klient t tjere, ata ose ulen (ne qoft se ka karrige bosh) ose ikin (ne qoft se nuk ka karrige bosh). Problemi sht t programojme berberin dhe klientt pa shkuar ne kushte race. Ky problem sht i ngjashem me shume situata t gershetuara, si nj zyre ne ndihme t shume personave me nj sistem t kompjuterizuar pritjeje t thirrjes pr mbajtjen e nj numri t limituar thirrjesh hyrese.

Fig.2.35.Berberi qe fle. Zgjidhja jone prdor tre semafore: customers, i cili numeron klientt qe po presin (duke mos prfshire klientin ne karrigen berberit, qe nuk po pret), barbers, numrin e berbereve (0 ose 1) qe rrine kot, duke pritur pr klient dhe mutex, qe prdoret pr prjashtimin e ndersjellt (mutual exclusion).Gjithashtu duhet nj variabel, waiting, e cila gjithashtu numeron klientt qe po presin. sht thelbesore nj kopje e customers. Arsyeja e t paturit waiting sht sepse nuk ka asnj menyre pr t lexuar vleren aktuale t semaforit. Ne ket zgjidhje, nj klient qe hyn ne dyqan duhet t numeroje klientat qe po presin. Ne qoft se ka me pak se numri i karrigeve, ai qendron; pr ndryshe, iken. Zgjidhja jone tregohet ne figuren 2.36. Kur berberi shfaqet ne mengjes pr pune, ai ekzekuton proceduren barber sepse ajo fillimisht sht 0. Me pas berberi shkon t fleje, sic tregohet ne fig.2.35. Ai fle derisa t vije klienti i pare. #define CHAIRS 5 /* # chairs for waiting customers */ typedef int semaphore; /* use your imagination */ semaphore customers = 0; /* # of customers waiting for service */ semaphore barbers = 0; /* # of barbers waiting for customers */ semaphore mutex = 1; /* for mutual exclusion */ int waiting = 0; /* customers are waiting (not being cut) */ void barber(void) { whit (TRUE) { down(&customers); /* go to sleep if # of customers is 0 */ down(&mutex); /* acquire access to 'waiting' */ waiting = waiting 1; /* decrement count of waiting customers */

up(&barbers); up(&mutex); cut_hair(); } }

/* one barber is now ready to cut hair */ /* release 'waiting' */ /* cut hair (outside critical region) */

void customer(void) { down(&mutex); /* enter critical region */ if (waiting < CHAIRS) { /* if there are no free chairs, leave */ waiting = waiting + 1; /* increment count of waiting customers */ up(&customers); /* wake up barber if necessary */ up(&mutex); /* release access to 'waiting' */ down(&barbers); /* go to sleep if # of free barbers is 0 */ get_haircut(); /* be seated and be serviced */ } else { up(&mutex); /* shop is full; do not wait */ } } Fig.2.36. Nj zgjidhje pr problemin e berberit qe fle. Kur vjen nj klient, ai ekzekuton customer, duke filluar me sigurimin e mutex pr t hyre ne nj vend kritik. Ne qoft se nj tjetr klient futet pak me pas, i dyti nuk sht i aft t beje asgje derisa i pari t lere mutex-in. Me pas klienti kontrollon ne se numri i klientve qe presin sht me i vogel se i karrigeve. Ne qoft se jo, ai le mutex dhe iken pa prere floket. Ne qoft se ka nj karrige t disponueshme, klienti inkrementon variablin integer, waiting. Me pas ai bn nj ngritje t semaforin customers, keshtu qe zgjon berberin. Ne ket pike, klienti dhe berberi jane t dy t zgjuar. Kur klienti le mutex, berberi e rrmben at, bn administrimin dhe fillon prerjen e flokeve. Kur mbaron prerja e flokeve, klienti del nga procedura dhe iken nga dyqani. Ndryshe nga shembujt e meparshem, nuk ka asnj loop pr klientin sepse secili pret vetm nj here floket. Berberi kthehet pr t marre klientin tjetr. Ne qoft se ka nj t tille, behet nj tjetr prerje flokesh. Ne qoft se jo, berberi shkon t flej. sht e rendesishme t themi se, edhe pse problemet e lexuesit dhe shkruesit dhe berberi qe fle nuk prfshijne transferimin e t dhenave, ata akoma i prkasin IPC sepse ato prfshijne sinkronizimin ndermjet shume proeseve.

2.5 SCHEDULIMI Kur nj kompjuter sht i multiprogramuar, athere ai ka njkohesisht shume proese qe konkurrojne pr CPU-ne. Kjo situat ndodh gjithmone kur dy ose me shume proese jane ne t njjtin moment ne gjendjen Gati. Neqoftse vetm nj CPU sht i gatshem athere duhet t behet nj zgjidhje pr proesin e ardhshem qe do t ekzekutohet. Pjesa e sistemit operativ qe e bn ket zgjedhje quhet scheduler dhe algoritmi qe ai prdori quhet algoritmi i schedulimit. Keto do jene pikat kryesore pr t cilat do t flitet gjat ketij kapitulli. Shumica e problemeve qe prbejne schedulimin e proese jane t njjt edhe ne schedulimin e threads edhe se ka ndryshime t vogla. Fillimisht do prqendrohemi ne schedulimin e proeseve. Me vone do t shohim imtsisht schedulimin e thread-save. 2.5.1 Hyrje ne konceptin e Schedulimit Ne kohet kur inputi behej me disqe magnetike, algoritmi I shcedulimit ishte shume i thjesht, ekzekuto punen e ardhshme ne disk. Me sistemin timesharing, algoritmi i schedulimit u be me compleks sepse prgjithsisht kishte disa prdorues qe prisnin pr sherbim. Disa mainframe ende kombinojne sherbimin batch dhe timesharing, duke kerkuar qe scheduleri t vendos n qoft se nj batch job ose nj prdorues interactive ne nj terminal t vazhdoj. (Nj batch job mund t jet nj kerkese pr t ekzekutuar me shume programe rradhazi, por ne ket kapitull do e mendojme si nj kerkeser pr t ekzekutuar vetm nj program). Sepse CPU sht nj burim i vogel dhe nj scheduler i mire mund t prmiresoje ndjeshem performancen dhe plotsimin e kerkesave t prdoruesit. Rrjedhimisht nj pune e madhe sht bere ne zhvillimin e algoritmeve t zgjuar dhe eficent. Me ardhjen e kompjuterave personal, situat ndryshoi ne 2 pika. E para, shumicen e kohes ka vetm nj proess aktiv. Ne qoft se nj prdorues sht duke shkruar nj dokument ne nj Word proessor nuk mund t behet njkohesisht me kompilimin e nj programi ne background. Kur nj prdorues shkruan nj komand ne word proessor, scheduleri nuk i duhet shume kohe pr t kuptuar se kush proess duhet ekzekutuar, sepse word proesori sht kandidati i vetm. E dyta, kompjuterat jane bere aq t shpejt gjat viteve saqe CPU nuk sht me aq i vogel sa dikur. Shume programe pr personal computers jane t kufizuar nga shpejtsia me t cilen prdoruesi mund t japi inputin (duke klikuar ose shtypur tastet), dhe jo nga shpejtsi e ekzekutimit t CPU-se. Ne kohet e shkuara nj grup instruksionesh i duheshin nj numer ciklesh CPU pr ekzekutim, sot duhet e shumta disa sekonda. Edhe kur ekzekutohen njkohesisht dy programe, si pr shembull nj word proessor dhe nj spreadsheet ska shume rendesi kush nis i pari sepse ka shume mundesi qe prdoruesi i pret t dy t prfundojne njkohesisht. Si pasoje, skedulimi nuk ndikon shume ne kompjutarat e thjesht PC. Sigurisht, ka aplikacione qe praktikisht e hane t gjalle CPUne: t prodhosh nj ore video me rezolucion t lart nevojitet fuqi industriale pr

prpunim imazhi ne secilen prej 108.000 frame-t ne NTSC(90.000 ne PAL), por keto aplikacione jane prjashtime nga rregulli.

Kur flasim pr rrjeta serverash ose workstations, situata ndryshon. Ne ket rast disa proese konkurrojne pr CPU, keshtu qe skedulimi ka rendesi. Pr shembull kur CPU duhet t vendos ne se t ekzekutoj nj update t ekranit pasi prdoruesi ka mbyllur nj dritare ose proesin qe dergon nj email qe sht ne radhe pritje, bn shume ndryshim ne prgjigjen e marre. Ne qoft se ne do prisnim 2 sekonda deri sa t dergohej emaili dhe me pas t update-hej ekrani. Athere prdoruesi do t mendonte se sistemi sht tepr i ngadalt ndersa ne qoft se emaili do dergohej 2 sekonda me vone se athere prdoruesi as nuk do e kuptonte vonesen. Ne ket rast skedulimi i proese ka shume rendesi. Prvec se shqetsimit pr t zgjedhur proesin e duhur pr ekzekutim, por ai duhet t shqetsohet edhe pr t bere sa me eficent prdorimin e CPU, sepse nderrimi i proeseve sjell shume vonesa. Fillimisht duhet t behet nj kalim nga user mode ne kernel mode. Me pas gjendja e proesit qe po ekzekutohet duhet t ruhet, prfshire ketu edhe ruajtjen e regjistrave ne tabelen e regjistrave, keshtu mund t ringarkohen me vone. Ne shume sisteme harta e memorjes ( pr shembull, bitet e references se memorjes ne tabele) duhet t ruhen. Me pas nj proes tjetr duhet t zgjidhet duket ekzekutuar algoritmin e schedulimit. Me pas MMU-ja duhet t ringarkohet me hartn e memorjes se proesit t ri. Ne fund proesi i ri duhet t filloj. Pr me tepr, ndryshimi i proeseve e bn jo t vlefshme gjithe cache-ne, duke e detyruar at t ringarkohet ne menyre dinamike nga memorja dy here (ne hyrjen ne kernel dhe ne daljen nga kerneli). Pra ndryshimi i shume proeseve ne sekonde mund te humbe nj pjese t madhe t kohes se CPU, keshtu qe keshillohet kujdes. Sjellja e proeseve Pothuajse do proess altrnon prpunimin kompjuterik me (disk) kerkesat I/O, sic tregohet ne fig. 2-37. Normalisht CPU-ja punon pr nj kohe t konsiderueshme para se t ndaloje, me pas nj thirrje sistem behet pr t lexuar nj file ose pr t shkruar nj t tille. Kur prfundon thirrja sistem prfundon, CPU vazhdon prseri t prpunoje deri sa t ket nevoje pr t lexuar t dhena ose pr t shkruar t dhena. Duhet kujtuar se edhe disa aktivitet I/O quhen si prpunim. Pr shembull, kur CPU kopjon bite ne nj video RAM pr t rinovuar pamjen ne ekran, kjo sht prpunim dhe jo I/O, sepse CPU sht ne prdorim. I/O ne ket sens sht kur nj proess futet ne gjendjen e bllokuar duke pritur nj paisje t jashtme pr t prfunduar punen e saj.

Figure 2-37. Impulset e prdorimit t CPU t alternuara me momente pritje pr I/O. (a) Kufijt e nj proesi ne CPU. (b) Kufijt e nj proesi I/O. Fakti kryesor qe paraqitt ne Fig.2-37 sht se disa proese, si ai i paraqitur ne Fig.237(a), shpenzojne shumicen e kohes duke prpunuar, ndersa disa t tjere si ne Fig.2-37(b) shpenzojne shumicen e kohes duke pritur I/O. T paret quhen compute-bound; t dytt quhen I/O-bound. Proeset Compute-bound kane cikle ne gjata t CPU-se ndersa shume pak pritje t I/O, ndersa ato I/O bound kane pak cikle t CPU por shume pritje t I/O. Celesi sht gjithmone ciklet e CPU-se dhe jo pritja e I/O. Tani nuk kushton shume t kemi nj CPU t shpejt keshtu qe proeset tentojn t jene I/O bound. Dhe me kalimin e kohes do t punohet shume me schedulimin e proese I/O bound sepse shpejtsia e CPU sht shume e shpejt se ajo e disqeve. Kur t kryhet schedulimi Nj problem kryesor pr sa i prket schedulimeve sht kur t behet schedulimi. Del ne dukje se ka nj numer t madh situatash ne t cilat duhet schedulimi. Fillimisht kur nj proess i ri krijohet, vendimi qe duhet t merret sht ne se duhet t ekzekutohet proesi prind apo femije. Duke qene se t dy proeset jane ne gjendjen gati, duhet t behet nj schedulim normal i cili mund t shkoj ne dy drejtime, domethene qe scheduleri mund t zgjedh midis proesit prind dhe femije. Nj vendim schedulimi duhet t behet kur nj proess ekziston. Ky proess nuk mund t ekzekutohet (deri sa nuk ekziston me), pra disa proese t tjera nga lista e proeseve ne gjendjen gati. Ne qoft se asnj proes nuk sht gati, do t ekzekutohet normalisht nj proes i ardhur nga sistemi. E treta, kur nj proes bllokohet ne I/O, ne nj semafor, ose pr arsye t tjera, duhet t zgjidhet nj proes tjetr pr tu ekzekutuar. Disa here arsyeja e bllokimit mund t luaj rol ne zgjidhjen e proesit t ri. Pr shembull, ne qoft se A sht nj proes i rendesishem dhe pret qe B t largohet nga zona kritike, ne qoft se ne lejojme qe B t ekzekutohet me

vone, do ti hapim rruge proesit A t vazhdoje fillimisht. Po problemi qendron ne faktin se scheduleri nuk e ka informacionin e sakt. E katrta, kur ndodh nj interrupt I/O, duhet t behet nj vendim schedulimi. Ne qoft se interrupti vjen nga nj paisje I/O qe ka prfunduar punen, disa proese qe mund t ishin ne pritje t I/O tani mund t vazhdojne ekzekutimin. Varet nga scheduleri ne qoft se proeset ne gjendjen gati t ekzekutohen, ne se proesi qe po ekzekutohet ne momentin e interruptit duhet t vazhdoje ekzekutimin ose duhet t ekzekutohet nj proes i ri.

Ne qoft se nj ore hardware prodhon interrupte periodik me frekuence 50 Hz, 60 Hz ose frekuenca t tjera, nj vendim interrupti mund t behet do interrupt clocku ose do k-interrupt. Algoritmet e schedulimit mund t klasifikohen ne dy grupe sipas menyres si kombinohen me interruptet e clock-ut. Nj algoritem schedulimi nonpreemptive zgjedh nj proes pr t ekzekutuar dhe e le t ekzekutohet deri ne bllokim (si ne I/O ashtu edhe pr t pritur nj proes tjetr) ose deri sa t lihet vullnetarisht CPU-ja. Edhe ne qoft se ekzekutimi zgjat pr ore t tra, ai nuk do t ndalohet me force. Ne t vertet asnj vendim schedulimi nuk behet gjat interrupteve t clock-ut. Pas kryerjes se interruptit t clockut, proesi qe po ekzekutohej rikthehet ne ekzekutim. Ndryshe nga rasti i pare, algoritmi i schedulimit preemptive zgjedh nj proes dhe e lejon t ekzekutohet pr nj kohe t caktuar. Ne qoft se ai sht ende ne ekzekutim kur mbaron koha e caktuar, ai pushon se ekzekutuari dhe scheduleri zgjedh nj proes tjetr pr ekzekutim (ne qoft se ka ndonj t gatshem). Kryerja e schedulimit preemptive kerkon nj clock interrupti ne fund t kohes se caktuar pr ti dhene kontrollin e CPU-se prseri schedulerit. Kategorit e algoritmeve t schedulimit. Nuk sht cudi qe ne sistuata t ndryshme nevojitet algoritme t ndryshme schedulimi. Kjo situat lind pr shkak se ekzistojne aplikime t ndryshme (dhe sisteme operative t ndryshme) kane qellime t ndryshme. Me fjale t tjera, cfare duhet t optimizoje scheduleri ndryshon nga sistemi. Ja vlen t dallojme tre mjedise t ndryshme 1. Batch. 2. Interactive. 3. Real time. Ne sistemet batch, nuk ka prdorues t padurueshem qe presin ne terminalin e tyre pr prgjigje. Rrjedhimisht algoritmet nonpreemtive ose preemptive, me period t gjat pr do proes jane shpesh here t pranueshem. Kjo teknike redukton nderrimin e proeseve dhe prmireson performancen. Ne nj mjedis me prdorues interaktiv, algoritmet preemptive luajne rol kryesor qe nj proes t prdori CPU-ne dhe ti mohoje sherbimin proeseve t tjera . Edhe se asnj

proes nuk mund t ekzekutohet ne pafundesi, pr shkak t nj program bug, nj proes mund ti bllokoje gjithe proeset pafundesisht. Preemtion sht i nevojshem pr t shmangur ket sjellje. Ne sisteme me kushte real-time, preemption nuk sht i mjaftueshem, disa here nuk nevojitet sepse proeset e dine qe mund t mos ekzekutohen pr nj kohe t gjat dhe shpesh here e bejne punen e tyre dhe bllokohen. Ndryshimi midis sistemeve interaktiv dhe sisteme real-time sht se sistemet real-time ekzekutojne programe qe mendohet t shkojne ne aplikacione t ardheshme. Ndersa sistemet interactive ekzekutojne programe arbitrare qe nuk kooperojne. Qellimet e algoritmeve t schedulimit Ne menyre qe t ndertohet nj algoritem schedulimi duhet t jet e qart idea se cfare bn nj algoritem i mire. Disa qellime varen nga mjedisi (batch, interactive, real-time), por ka edhe qellime t njjta ne t gjitha sistemet. Disa qellime jane ne Fig. 2-38. Do ti diskutojme me posht.

T gjithe sistemet Drejtsia - Ndarja e CPU nepr proese ne menyre t drejt. Policy enforcement - seeing that stated policy is carried out Balance Mbajtja e t gjithe pjeseve t sistemit t zena. Batch systems Throughput maksimizimi i puneve pr ore. Koha Turnaround minimizimi i kohes midis submission dhe prfundimit. Prdorimi CPU Mbajtja e CPU t zene gjat gjithe kohes. Interactive systems Koha e prgjigjes prgjigja ndaj kerkesave me shpejtsi. Proportionality Plotsimi i kerkesave t prdoruesit. Real-time systems Realizimi brenda kohes se cakuar Parandalimi i humbjes se t dhenave Parashikueshmeria Parandalimi i degradimit t cilesise ne sistemet multimediale. Figure 2-38. Disa qellime t algoritmit t schedulimit ne rrethana t ndryshme.

Ne do rrethane, drejtsia sht e rendesishme. Proese konkurruese duhet t marrin sherbime konkurruese. Ti japesh nj proesi me shume kohe CPU-je, se nj proesi ekuivalent nuk sht e drejt. Sigrurisht, kategori t ndryshme proesesh duhet t trajtohen ndryshe. Mjafon t mendojme pr qendren e kompjuterave ne nj reaktor nuklear. T lidhur me drejtsine jane edhe rregullat e sistemit. Ne qoft se rregulli sht qe proesi pr kontrrollin e sigurise ekzekutohet kur t doje ai, edhe ne qoft se payroll sht 30 sekonda me vone se, scheduleri duhet t sigurohet qe ky rregull t zbatohet. Qellim tjetr, t mbahen sa me shume t jet e mundur t zena pjeset e sistemit. Ne qoft se CPU-ja dhe paisjet I/O mund t mbahen ne pune gjithe kohes, kryen me shume pune ne sekonde dhe ne qoft se disa komponent jane t gatshem, ne nj system batch, pr shembull, scheduleri ka kontroll mbi punet t cilat sillen ne memorje pr tu ekzekutuar. T kesh se bashku ne memorje disa proese CPU-bound dhe disa proese I/O-bound sht ide me e mire, sesa t ngarkosh dhe t ekzekutosh gjithe proeset CPU-bound dhe me pas, pasi keto t prfundojne, t ngarkohen dhe t ekzekutohen proeset I/O-bound. Ne qoft se prdoret strategjia e dyt, kur proeset CPU-bound po ekzekutohen, ato do t jene ngjitur CPU-se dhe disku do t jet bosh. Me pas kur vijne proeset I/O bound, ato do t tentojn drejt diskut dhe CPU-ja do t jet bosh. Me mire sht t mbajme t gjithe sistemin ne pune duke prdorur me kujdes nj przierje proesesh.

Manaxheret e qendrave t medha kompjuterike qe ekzekutojne shume proese batch shohim gjithmone tre karakteristika qe t vleresojne sa mire po punon sistemi i tyre: throughput, koha turnaround dhe prodrimi CPU. Throughput, sht numri i puneve pr ore qe sistemi kryen. Duke marre parasysh t gjitha, prfundimi i 50 puneve ne ore sht me mire se 40 pune ne ore. Koha Turnaround, koha mesatare nga momenti qe fillon nj pune batch deri ne momentin qe prfundon. Ajo mat mesataren sa duhet t pres prdoruesi pr nj prgjigje. Ketu rregulli sht: sa me e vogel aq me mire. Nj algoritem qe maksimizon throughtputin nuk siguron minimizimin e kohes turnaround. Pr shembull, futja e nj przirjeje punesh t shkurtra dhe t gjata, nj scheduleri qe gjithmone ekzekuton punet e shkurtra do t japi nj thorughtput maximal (domethene shume pune t shkurtra t ekzekutuar brenda nj ore) por nga ana tjetr kemi nj kohe shume t gjat turnaround pr punet e gjata. Ne qoft se punet e shkurtra vijne vazhdimisht, punet e gjata mund t mos ekzekutohen kurre duke e cuar kohen turnaround ne infinit dhe nj throughtput maksimal. Prdorimi i CPU sht edhe problem me sistemet batch sepse ne mainframe e medha-ja ku ekzekutohen sistemet batch, CPU sht ende nj shpenzim i madh. Manaxheret e ketyre qendrave kompjuterike gjithmone tentojn t prdorin sa me shume CPU-ne. Megjithat prdorimi i CPU-se nuk sht nj mats i mire. Cfare ka rendesi me shume, sht punet qe kryhen nga sistemi ne nj ore (throughtput) dhe sa i duhet sistemit pr t

kthyer punen (koha turnaround). T marresh prdorimin e CPU si tregues sht si t vleresosh nj makine me sa xhiro bn motorri ne nj ore. Pr sistemet interactive, kryesisht sistemet time sharing dhe server, aplikohen qellime t tjera. Kryesori sht minizimi i kohes se prgjigjes, qe sht koha qe duhet nga dergimi i komandes deri ne marrjen e prgjigjes. Ne kompjuterat personal kur nj proes background po ekzekutohet (pr shembull, leximi ose ruajtja e nj emaili nga network), nj kerkese e prdoruesit pr t nisur ose hapur nj program duhet t ket prioritet mbi punen qe sht ne background. Ekzekutimi i gjithe kerkesave interactive ne fillim quhet nj sherbim i mire. Nj tregues tjetr sht proportionality. Prdoresit kane nj ide (shpesh here t gabuar) pr kohen sa duhet t zgjasi nj veprim i caktuar. Kur nj kerkese qe prdoruesit e mendojne si komplekse zgjat shume, prdoruesit e pranojne ket, por kur nj kerkese e cila mendohet se thjesht kerkon shume kohe, athere prdoruesi zemerohet. Pr shembull, ne qoft se klikimi i nj ikone e cila bn t mundur lidhjen me nj internet provider me nj modem analog do t duhet 45 sekonda t krijohet lidhja, prdoruesi sht i detyruar ta pranoj ket fakt. Por ne qoft se do t duhej 45 sekonda pr t shkeputur lidhjen athere kjo nuk do pranohej nga prdoruesi. Kjo sjellje vjen nga prceptimi i do prdoruesi se, krijimi i nj lidhjeje do gjithmone me shume kohe se sa thjesht shkeputja e lidhjes. Ne disa raste si ky i sapo scheduleri nuk ka site ndikoje ne kohen e prgjigjes, por ne raste t tjera, kryesisht kur vonesa sht si pasoje e nj renditjeje t keqe t proeseve. Sistemet real-time kane karakteristika t ndryshme nga sistemet interactive keshtu qe ka edhe qellime t ndryshme schedulimi. Keto sisteme karakterizohen nga disa kohe zbatimi t caktuara qe duhet t respektohen. Pr shembull, ne qoft se kompjuteri po kontrollon nj paisje qe prodhon t dhena me nj fluks kostant, deshtimi ne ekzekutimin e proesit data-collection mund t coj ne humbje t t dhenave. Pra kerkesa kryesore ne sistemet real-time sht respektimi i kohes se zbatimit. Ne disa sisteme real-time, sidomos ato qe prfshijne multimedia, parashikueshmeria sht e rendesishme. Mos respektimi ne disa raste i kohes se zbatimi nuk sht gjithmone fatal, por ne qoft se proesi audio fillon t ekzekutohet me crregullime, cilesia e zerit do t ulet. Edhe video sht problem por veshi ka me shume ndjeshmeri ndaj gabimeve sesa videoja. Pr t parandaluar problemin, proesi i schedulimit duhet t jet shume i parashikueshem dhe i rregullt. Do t studiojme algoritmet batch dhe interactive ne ket kapitull, por do t prqendrohemi me shume ne schedulimin real-time deri sa t shkojme ne multimedia operating system. 2.5.2 Schedulimi ne sistemet Batch Tani sht moment pr t kaluar nga schedulimi ne prgjithesi ne algoritmat specific t schedulimit. Ne ket paragraph do t studiojme algoritmet e prdorura ne sistemet batch. Me pas do t studiojme sistemet interactive dhe real-time. Ja vlen t theksojme se disa algoritma jane t njjt si ne sistemet batch ashtu edhe ne ato interactive. Do ti studiojme

keto me vone. Ketu do t studiojme algoritmat qe jane t prshtatshem vetm pr sistemet batch. I pari qe vjen, i pari sherbehet (First-Come First-Served) Ndoshta algoritmi me i thjesht i schedulimit sht nonpreemtive first-come firstserved. Me ket algoritem, proeset aksesojne CPU sipas rradhes qe kane kryer kerkesen. Pra normalisht ka vetm nj radhe t proceve ne gjendje gati. Kur vjen proesi i pare ai fillon menjehere dhe lejohet t ekzekutohet deri sa t doje. do pune e re qe vjen vendoset ne fund t radhes. Kur proesi qe po ekzekutohet bllokohet athere proesi i pare qe sht ne radhe do t ekzekutohet. Kur nj proess i bllokuar ndryshon gjendje dhe shkon ne gjendjen ready, si t ket ardhur nj pune e re, ky proes vendoset ne fund t radhes. E mira e ketij algortmi sht se sht i thjesht pr tu kuptuar dhe i thjesht pr tu programuar. sht gjithashtu i drejt ne kuptimin sic sht e drejt qe biletat e para t nj koncerti ose t nj ndeshjeje ti marrin ne fillim ato qe jane ne radhe prej ores 2 t mengjesit. Me ket algoritem mjafton vetm nj list e linkuar pr t ruajtur proeset qe jane ready. Zgjedhja e nj proesi mjafton vetm t marrin proesin e pare ne listn ready. Shtimi i proesit ready ose zhbllokimi i nj proesi mjafton vetm ta shtojme ne fund t radhes. Shume e thjesht! Fatkeqsisht, first-come first-served ka gjithashtu nj disavantazh t madh. Supozojme se ka nj proess compute-bound qe ekzekutohet pr 1 sekonde dhe shume proese I/Obound qe prdorim pak kohe CPU-je, por qe secili prej tyre duhet t kryej 1000 lexime disku qe t prfundoje. Proesi compute-bound ekezekutohet pr 1 sekonde, me pas lexon nj block ne disk. Tani t gjithe proeset I/O ekzekutohet dhe fillojne leximin e diskut. Kur proesi copmut-bound merr blockun nga disku, ai ekzekutohet edhe pr 1 sekonde tjetr, duke u ndjekur nga gjithe proeset I/O-bound ne vazhdim. Rezultati final sht se do proess I/O-bound i duhen 1 sekonde pr t lexuar nj block t diskut, pra do i duhen 1000 sekonda pr t mbaruar. Me nj algoritem schedulimi qe zevendeson proesin compute-bound do 10 sekonda do t bnte qe proesi I/O-bound t prfundonte 10 sekonda ne vend t 1000 sekonda dhe duke mos ngadalesuar shume proesin compute-bound. Puna me e shkurtr e para (Shortest Job First) Tani le t shohim nj algoritem tjetr batch nonpreemtive qe pretendon se koha e ekzekutimit dihet paraprakisht. Ne nj kompani sigurimi, pr shembull, njerezit mund t parashikojne shume sakt sa kohe do t duhet pr ekzekutuar nj batch me 1000 thirrje, duke qene se pune t njjta kryhen do dit. Kur pune t t njjts rendesi presin ne radhe pr ekzekutim, scheduleri zgjedh punen me t shkurtr. Shikojme ne Fig. 2-39. Shohim katr pune A,B,C dhe D me kohe ekzekutimi prkatse 8, 4, 4 dhe 4 minuta. Ne qoft se i ekzekutojme keto pune sipas kesaj rradhe, koha turnaround pr A do t jet 8 minuta, pr

B do jet 12 minuta, pr C do jet 16 minuta dhe pr D do t jet 20 minuta me nj mesatare prej 14 minutash.

Figure 2-39. Nj shembull i schedulimit. Puna me e shkurtr e para. (a) Ekzekutimi i katr puneve sipas rendit original. (b) Ekzekutimi sipas rendit. Puna me e shkurtr e para. Le t konsiderojme ekzekutimin e ketyre katr puneve duke prdorur, puna me e shkurtr e para, sic tregohet ne Fig. 2-39(b). Tani koha turnaround do t jene 4,8,12, 20 me nj mesatare prej 11 minutash. Le t konsiderojme rastin e katr puneve cfardo me kohe ekzekutimi a,b,c dhe d. Puna e pare mbaron ne kohen a, e dyta ne kohen a+b dhe keshtu me rradhe. Koha turnaround sht (4a+3b+2c+d)/4. sht e qart se a kontribon me shume ne mesatare se kohet e tjera, keshtu qe duhet t jet puna me e shkurtr, me b ne vazhdim, me pas c dhe me pas d, si me e gjata e cila ndikon vetm kohen e vet turnaround. E njjta llogjike aplikohet edhe ne raste kur kemi numer tjetr punesh. Ja vlen t theksojme se algoritmi shortest job first sht i vlefshem vetm kur t gjitha punet jane t gatshme njkohesisht. Si nj kundershembull, le t konsiderojme 5 pune, nga A deri ne E, me kohe ekzekutimi prkatsisht 2, 4, 1, 1 dhe 1. Koha e mberritjes se tyre sht 0, 0, 3, 3 dhe 3. Fillimisht vetm A dhe B mund t zgjidhen prderisa punet e tjera nuk kane ardhur ende. Duke zgjedhur punen e shkurtr t paren radha e ekzekutimit do t jet A, B, C, D, E me nj mesatare pritjeje 4.6. Megjithat sipas radhes B, C, D, E, A mesatarja e pritjes sht 4.4. Koha e mbetur me shkurtr (Shortest Remaining Time Next) Nj version preemptive i shortest job first sht shortest remaining time next. Me ket algoritem, scheduleri zgjedh gjithmone proesin koha e mbetur e ekzekutimit t t cilit sht me e shkurtr. Prseri edhe ne ket rast koha e ekzekutimit duhet t jet e ditur. Kur nj pune e re vjen, koha e tij totale e ekzekutimit krahasohet me kohen e mbetur t ekzekutimit t proesit qe po ekzekutohet ne at moment. Ne qoft se puna qe erdhi do me pak kohe pr ekzekutim se proesi qe po ekzekutohet, proesi qe po ekzekutohet do t pezullohet dhe puna e re qe erdhi do t ekzekutohet. Kjo skeme i ofron sherbim me t mire proeseve t shkurtra. Schedulimi me tre nivele (Three-Level Scheduling) Nga nj pikpamje e caktuar, sistemet batch lejojne schedulimin me tre nivele t ndryshme sic sht treguar ne Fig. 2-40. Pasi punet vijne ne system, ato fillimisht vendosen ne nj radhe input qe ruhet ne disk. Admission scheduler vendos cilen pune t pranoj sistemi. T tjeret mbahen ne radhen e inputit deri sa t zgjidhen. Nj algoritem tipik pr kontrollin e

pranimit sht qe t kerkohet nj mix i puneve compute-bound dhe puneve I/O-bound. Alternativa tjetr, punet e shkurtra t zgjidhen menjehere, ndersa punet e gjata duhet t presin. Admission echeduler ka t drejt t pranoj pune qe kane ardhur me vone dhe pune t tjera t presin.

Figure 2-40. Schedulimi me 3 nivele Ne momentin qe nj pune pranohet ne sistem, nj proes mund t krijohet pr t dhe mund t pretndoje pr CPU-ne. Megjithat, mund t ndodhi qe numri i proeseve mund t jet shume i madh sa nuk mund t ket me vend bosh pr to ne memorje. Ne ket rast, disa nga proeset duhet t dergohen ne disk. Niveli tjetr i schedulimit sht zgjedhja se cili proess duhet t mbahet ne memorje dhe kush t mbahet ne disk. Do ta quajme ket scheduler memory scheduler, sepse ai zgjedh cili proess duhet t mbahet ne memorje dhe kush ne disk. Ky vendim duhet t rishikohet shpesh pr t bere t mundur qe proeset ne disk t marrin sherbimin qe kerkojne. Megjithese sjellja e nj proesi nga disku nuk sht i favorshem, ky rishikim nuk duhet t ndodhi me shume nj here ne second ndoshta edhe me pak. Ne qoft se prmbajtja e memorjes kryesore rinovohet shpesh, nj pjese e madhe e bandwidthit t diskut do t shkoj dem, duke ngadalsuar I/O. Pr t prmiresuar performancen ne prgjithesi, scheduleri i memorjes duhet t vendos me kujdes sa proese do ne memorje, kjo quhet grada e multiprogramimit dhe llojin e proeseve. Ne qoft se ai ka informacion se cili proes sht copmut-bound dhe cili sht I/O-bound, ai mundohet t mbaj nj przierje t ketyre proeseve ne memorje. Si nj parashikim i prafert, ne qoft se nj klase e caktuar proesesh ekzekutohen pr 20% t kohes, mbajtja e 5 prej ketyre proeseve do t mbaj t zene gjat gjithe kohes CPU-ne. Ne kapitullin e 4, do t shohim nj model me t mire multiprogramimi.

Pr t bere zgjedhjen e tij, scheduleri i memorjes ne menyre periodik rishikon do proes ne disk pr t vendosur kush duhet t cohet ne memorje. Kriteret qe ndjek scheduleri pr t bere zgjedhjen e tij jane keto: 1. 2. 3. 4. Sa kohe ka kalur nga momenti qe proesi ka swapped in ose swapped out? Sa kohe CPU-je i sht dhene proesit kohet e fundit? Sa i madh sht proesi? (proeset e vegjel nuk e marrin ket rruge) Sa i rendesishem sht proesi?

Niveli i tret i schedulimit sht zgjedhja e njrit nga proeset ne gjendjen ready qe ndodhen ne memorjen kryesore pr tu ekzekutuar. Shpesh quhet scheduleri i CPU-se dhe sht ai qe ne quajme thjesht scheduler. Ketu mund t prdoret do algoritem i vlefshem, si preemptive ashtu edhe nonpreemtive. Ketu bejne pjese algoritmet e shpjeguara me lart dhe ato qe do shpjegohen me posht. 2.5.3 Schedulimi ne sistemet interactive Tani do t shohim disa algoritme qe prdoren ne sistemet interactive. T gjithe keto mund t prdoren shume mire edhe ne schedulerin e CPU-se t sistemeve batch. Prderisa schedulimi me tre nivele nuk sht i mundur ketu, schedulimi me dy nivele sht i mundur dhe shpesh here i prdorshem (scheduleri i memorjes dhe scheduleri i CPU-se). Me posht do t prqendrohemi me shume ne schedulerin e CPU-se. Schedulimi Round-Robin Le t shikojme disa algoritma specific schedulimi. Nj nga me t vjetrit, me t thjeshtit, me t drejtt dhe me t prdorshmit sht algoritmi round-robin. do proesi i caktohet nj interval kohe, i quajtur quantum, gjat t cilit ai lejohet t ekzekutohet. Ne qoft se proesi sht ende duke u ekzekutuar ne fund t quantumit, CPU-ja i jepet nj proesi tjetr. Ne qoft se proesi bllokohet ose prfundon para se t mbaroje quantum-i, nderrimi i CPU-se behet sigurisht kur bllokohet proesi. Round robin sht i thjesht pr tu implementuar. Gjithcka duhet t beje scheduleri sht t mbaj nj list t proeseve t ekzekutueshem, sic tregohet ne Fig.2-41 (a). Kur proesi e shfrytzon quantumin e tij, ai vendoset ne fund t lists, sic tregohet ne Fig. 2-41(b)

Figure 2-41. Schedulimi Round-robin. (a) Lista e proeseve t ekzekutueshem. (b) Lista e proeseve t ekzekutueshem pasi B e ka prfunduar quantumin e tij.

Problemi i vetm me round-robin sht gjatsia e quantumit. Kalimi nga nj proess ne tjetrin, kerkon nj fare kohe gjat t ciles behet administrimi, ruajtja e regjistrave ngarkues (loading) dhe harts se memorjes, rinovimi i tabelave t ndryshme dhe listave, pastrimi dhe ringarkimi i memorjes cache, etj. Supozojme se ky nderrim proesesh ose sic quhet shpesh context switch, zgjat 1 msec, duke prfshire edhe nderrimin e harts se memorjes, pastrimin dhe ringarkimin e caches, etj. Gjithashtu supozojme se quantumi sht caktuar 4msec. Me keto parametra pasi jane kryer 4 msec pune e vlefshme, CPUja do shpenzoje 1 msec ne nderrimin e proeseve. Njzet prqind e kohes se CPU do t shkoje dem me pune administrative. Duket qart qe kjo prqindje sht e lart. Pr t rritur eficencen e CPU-se, mund t cojme quantum le t themi 100 msec. Tani koha e shpenzuar sht vetm 1%. Por le t konsiderojme do t ndodh ne nj sistem time sharing ne qoft se dhjet prdorues shtypin t njjtin buton njkohesisht. Dhjet proese do t vendosen ne listn e proeseve t ekzekutueshem. Ne qoft se CPU-ja sht gati, proesi i pare do t ekzekutohet menjehere. I dyti mund t mos filloje pas 100 msec dhe keshtu me rradhe. I fundit do t jet me fatkeqi dhe ndoshta mund t presi me shume se 1 sec deri sa t marri sherbimin e kerkuar, duke supozuar se gjithe t tjeret e kane shfrytzuar plotsisht quantumin e tyre. Shumica e prdoruesve do t marrin nj prgjigje prej 1 sec t nj komande si ngadalesim. Nj faktor tjetr sht caktimi i quantumit me i gjat sesa perioda kryesore e CPU-se, zevendesimi ndodh shume rralle. Ne t njjtn kohe, shumica e proeseve do t kryejne nj veprim bllokues para se quatumi t mbaroje, duke krijuar nj nderrim proesi. Eleminimi i zevendesimit rrit performancen dhe nderrimi i proeseve do t ndodhi vetm kur sht llogjikisht e nevojshme, domethene kur nj proess bllokohet dhe nuk mund t vazhdoje. Prfundimi mund t formulohet si me posht: Caktimi i quantumit t shkurtr shkakton nj numer t madhe nderrime proesesh dhe ul eficencen e CPU-se, por caktimi i nj quantumi t gjat mund t uli prgjigjet ndaj kerkesave t gjata. Nj quantum rreth 20-50 msec sht zgjedhja e prshtatshme. Schedulimi me prioritet Schedulimi Round-robin bn supozimin qe t gjithe proeset jane t njjt nga rendesia qe kane. Normalisht, njerez qe zotrojne ose punojne ne kompjutera multiuser kane ide t ndryshme mbi ket teme. Ne nj univesitet radhitja mund t ishte dekani, profesoret, sekretaret, rojet dhe me ne fund studentt. Nevoja e faktoreve t jashtm ne llogari na con tek schedulimi me prioritet. Idea baze sht e tille: do proesi i caktohet nj prioritet dhe proesi i ekzekutueshem me prioritetin me t lart lejohet t ekzekutohet. Edhe ne nj PC me vetm nj prdorues, mund t ket proese t shume fishta, disa me t rendesishme se t tjerat. Pr shembull, nj proes deamon qe dergon email dhe qendron

ne background duhet ti caktohet nj prioritet me t ulet, sesa nj proess qe shfaqe ne ekran nj film ne real-time. Pr t menjanuar rastin kur proeset me prioritet t lart t ekzekutohen deri ne nj kohe t pacaktuar, scheduleri mund t uli prioritetin e proesit ne ekzekutim gjat do tiku t ores ( pr shembull ne do interrupt t ores). Ne qoft se ky veprim shkakton uljen e prioritetit nen nivelin e prioritetit t proesit t ardhshem, athere do t ndodhi nj nderrim proesi. Alternativa tjetr, do proesi i caktohet nj kohe maksimale ekzekutimi quantum. Kur ky quantum prfundon, i jepet shansi proesit t ardhshem me prioritet me t madh qe t ekzekutohet. Prioriteti mund t caktohet ne menyre statike ose dinamike. Ne nj kompjuter ushtarak, proeset fillojne si gjenerale me prioritet 100, si kolonele me 90, si majore me 80, kapitenet me 70, leitnantt me 60 dhe keshtu me radhe. Ndryshe, ne nj qender kompjuterash komercial, punet me prioritet t lart mund t kushtojne 100 $ ne ore, prioritet t mesem 75 $ ne ore dhe prioritet t ulet 50 $ ne ore. Sistemi Unix ka nj komande, nice qe bn t mundur uljen vullnetare t prioritetit t proesit, ne menyre qe t hapi rruge proeseve t tjere. Prdoret shume rralle. Prioritetet mund t caktohen edhe ne menyre dinamike nga sistemet pr t arritur nj qellime t caktuar. Pr shembull, disa proese jane shume I/O bound dhe shpenzojne shume kohe pr t pritur I/O qe t prfundoje. Ne do moment kur ky proes kerkon CPU-ne, ajo duhet ti jepet menjehere qe t lejoje t niset kerkesa e ardhshme I/O, e cila mund t vazhdojne ne paralel punen me nj proes tjetr. T lejosh t presi pr nj kohe t gjat nj proess I/O bound, do t thot ta kesh at nepr kembe ne memorjen kryesore duke e zene at. Nj algoritem qe ofron sherbim t mire proeseve I/O bound bazohet ne prioritet, ne 1/f, ku f sht fraksioni i quantumit t fundit qe proesi prdor. Nj proes qe prdor 1msec nga 50 msec quantum do t ket prioritet 50, ndersa nj proes qe ekzekutohet 25 msec para se t bllokohet do t ket prioritet 2 dhe proesi qe do prdori gjithe quantumin do t ket prioritetin 1. Shpesh here sht e vlefshme t grupohen proeset ne klasa prioriteti dhe me pas t prdoret schedulimi me prioritet midis klasave por round-robin brenda do klase. Figura 2-42 tregon nj sistem me katr klasa prioriteti. Algoritmi i shcedulimit sht si me posht: pr aq kohe sa ka proese t ekzekutueshme ne klasen 4, duhet t ekzekutohet secili prej tyre pr nj quantum, sipas metodes round-robin dhe kurre nuk duhet t shqetsohen nga proese me klase prioriteti me t vogel, ne qoft se klasa me prioritet 4 boshatiset, athere ekzekuto proeset e klases me prioritet 3 me round-robin. Ne qoft se klasa me prioritet 4 dhe ajo me priorit 3 jane t dyja bosh, athere ekzekutohen proeset e klases me prioritet 2 me round-robin dhe keshtu me rradhe. Ne qoft se prioritetet nuk rregullohen here pas here, athere me porceset e klasave me prioritet t ulet do t ndodhte starvacioni.

Figure 2-42. Nj algoritem schedulimi me katr klasa prioriteti. Rradhet e shumefishta Nj nga schedulerat e pare me prioritet ishte ne CTSS (Corbat et al., 1962). CTSS kishte nj problem sepse nderrimi i proeseve ishte shume i ngadalt pr shkak se 7094 mund t mbaj vetm nj proes ne memorje. do nderrim nenkupton dergimin e atij qe po ekzekutohej ne disk dhe marrjen e nj t riu nga disku. Krijuesit e CTSS shpejt e kuptuan qe ishte me eficente ti jepej nj here ne nj kohe t cakuar nj quantum i madh proeseve CPU-bound sesa ti jepej shpesh here nj quantum i vogel (pr t reduktuar swaping). Nga ana tjetr ti jepej gjithe proeseve nj quantum i madh do t conte ne nj kohe prgjigjeje t gjat. Zgjidhja e ketij problemi ishte krijimi i klasave me prioritet. Proeset ne klasen me t lart do t ekzekutoheshin pr nj quantum t plot. Proeset ne klasen me t lart pasardhese do t ekzekutoheshin pr 2 quanta. Proeset ne klasen pasardhese do t ekzekutoheshin pr katr quanta. Sa here qe nj proes gjithe quantat qe i ishin caktuar, ai ulet nj klase me posht. Si shembull, konsiderojme nj proess qe i nevojiten pr t prfunduar 100 quanta. Fillimisht do ti jepet nj quantum dhe me pas do largohet. Me pas do ti jepen 2 quanta para se t largohet. Ne vazhdim do ti jepet 4, 8, 16, 32, 64 quanta edhe se ai do t ket prdorur vetm 37 nga 64 quantat qe do i jepen ne fund. Do t nevojiten vetm 7 largime (duke marre parasysh edhe ngarkimin fillestar) ne vend t 100 t tillave me nj roundrobin t thjesht. Ne vazhdim, proesi do t futet thelle e me thelle ne radhet e prioritetit, ai do t ekzekutohet rralle e me rralle, duke e ruajtur CPU-ne pr proeset interactive t shkurtra. Rregulli i meposhtm u adoptua qe t parandalont nj proes qe dont nj kohe t gjat pr tu ekzekutuar kur filloi, por qe me vone u be interactive nga t ndeshkuarit prgjithmone. Gjithmone kur nj carriage return sht future ne nj terminal, proesi qe i prket atij terminali cohet ne klasen me prioritet me t madh, duke supozuar se sht duke u bere interactive. Nj dit, nj prdorues me nj proes t rende CPU-bound zbuloi se vetm duke ndenjur tek terminali dhe duke shtypur me crregullsi do disa sekonda, bnte cudi pr kohen e

prgjigjes. Ai i tregoi t gjithe shokeve. Morali sht: T besh gjera t sakta ne praktike sht shume me veshtire se t jene t sakta ne tori. Shume tipe t tjere algoritmash jane prdorur pr ti caktuar proeseve klasen e prioritetit. Pr shembull, sistemi XDS 940 (Lampson, 1968), i ndertuar ne Berkeley, kishte katr klasa prioriteti, t quajtura terminal, I/O, quantum i shkurtr, quantum i gjat. Kur nj proes qe sht duke pritur pr nj input ne terminal zgjohet, ai menjehere cohet ne klasen me prioritet me t lart (terminal). Kur nj proes sht duke pritur nj block t diksut t behet gati, ai shkon ne klasen e dyt. Kur nj proes sht ende duke u ekzekutuar dhe quantum i tij mbaron, proesi vendoset fillimisht ne klasen e tret. Megjithat, ne qoft se nj proes e mbaron quantumin e tij shume here rresht pa u bllokuar pr terminal ose I/O t tjera, athere ai vendoset ne fund t rradhes. Shume sisteme t tjera dicka t ngjashme pr t favorizuar prdoruesit dhe proeset interactive ne lidhje me ato qe jane ne background Proesi me i shkurtr do jet pasardhesi (shortest process next) Me qe shortest job first gjithmone prodhon kohen mesatare me t ulet pr sistemet batch, do t ishte mire sikur t prdorej edhe pr sistemet interactive. Deri ne nj fare pike mundet. Proesset interactive prgjithesisht presin pr nj komande, ekzekutojne komanden, presin nj komande, ekzekutojne komanden dhe keshtu me rradhe. N qoft se ne shohim ekzekutimin e do komande si pune e vecant, munde t minimizojme prgjigjen e prgjithshme duke ekzekutuar me t shkurtren t paren. Problemi qendron ne gjetjen se cili proes sht me i shkurtri. Nj menyre sht t bazohemi ne sjelljet e meparshme dhe t ekzekutohet proesi me kohen e mbetur me t shkurtr. Le t supozojme se koha e mbetur pr komande pr disa terminale sht To. Tani supozojme se ekzekutimi i ardhshem do t jet T1. Ne mund t llogarisim mbetjen duke marre Shumen me peshe t dy numrave qe, aT0 + (1 a)T1. Duke zgjedhur vleren e a-se ne mund t vendosim qe ekzekutimet e vjetra t harrohen shpejt ose jo. Me nj a = 1/2 ne marrim; T0, T0/2 + T1/2, T0/4 + T1/4 + T2/2, T0/8 + T1/8 + T2/4 + T3/2

Pas tre ekzekutimesh t reja, pesha e T0 do t ket rene ne 1/8. Teknika e llogaritjes se vleres pasardhese ne nj seri duke prdorur mesataren me peshe t vlerave t matura me pare quhet aging. sht shume i shpesht rasti kur nj parashikim duhet t behet ne baze t vlerave t meparshme. Aging sht i leht t implementohet kur a = 1/2 Schedulimi i garantuar (Guaranteed Scheduling) Nj menyre tjetr e schedulimit sht t behen premtime reale prdoruesit pr performance dhe me pas ta mbash at. Nj premtim qe sht realisht dhe i leht pr tu mbajtur sht ky: N qoft se ka n prdorues t loguar ne momentin qe po punojme, do t

marrim rreth 1/n e fuqise se CPU-se. E njjta gje me nj prdorues me shume proese t gjithe t barabart, secili do t ket 1/n e cikleve t CPU-se. Qe t mbahet ky premtim, sistemi duhet t mbaj shenim sa CPU ka pasur do proes qe nga krijimi i tij. Ai me pas llogarit pjesen e CPU qe i prket secilit, koha qe kur sht krijuar, pjesetuar me n. Duke qene se shuma e kohes se CPU-se qe do proes ka sht e ditur, sht e drejt llogaritja e raportit t kohes aktuale t konsumuar t CPU-se me kohen e paracaktuar t CPU-se. Nj raport 0.5 nenkupton se proesi ka marre vetm gjysmen e asaj qe i takonte t merrte dhe nj raport 2.0, nenkupton se nj proess ka marre dyfishin e kohes qe ishte caktuar. Algoritmi ketu sht t ekzekutohet proesi me raportin me t vogel deri sa raporti i tij t behet me i vogel se i konkurruesit me t afert. Schedulimi llotari (Lottery Scheduling) Berja e premtimeve dhe me pas lenia ne dore e tyre sht nj ide e mire, por e veshtire pr tu implementuar. Megjithat nj algoritem tjetr mund t prdoret pr t dhene rezultate t ngjashme dhe t parashikueshme dhe me nj implementim me t thjesht. Ky quhet schedulimi llotari (Waldspurger and Weihl, 1994). Idea kryosore sht ti japim proeseve bileta llotarie pr burime t ndryshme t sistemit, si koha e CPU-se. Gjithmone kur duhet t behet nj vendim schedulimi, nj bilet llotarie zgjidhet rastesisht, dhe proesi qe ka ket bilet merre burimin qe kerkon. Kur kjo aplikohet ne schdeulimin e CPU-se, sistemi mund t japi deri ne 50 here ne sekonde, dhe do fitues t marri 20 msec t kohes se CPU-se si cmim. George Orwell thot: T gjithe proeset jane t barabart, por disa jane edhe me t barabart. Proeset me t rendesishem mund t marrin bileta speciale pr t rritur shanset e tyre pr fitore. N qoft se ka 100 bileta dhe nj proes ka 20 prej tyre, ai do t ket 20% t shanseve pr t fituar llotarine, dhe do t ket rreth 20 % t kohes se CPU-se. Ndersa ne schedulimin me prioritet nuk sht e qart se do t thot t kemi nj prioritet 40. Ketu rregulli sht i qart: zotrimi i nj fraksioni f t biletave do t japi afersisht fraksionin f t burimeve ne fjale. Schdeulimi llotari ka tipare interesante. Pr shembull, n qoft se nj proes i ri del ne skene dhe ka siguruar disa bileta, ne rastin e pare kur do t hidhet llotaria ai do jet ne gjendje t fitoje ne raport me numrin e biletave qe ka. Proeset qe bashkepunojne mund t shkembejne bileta n qoft se deshirojne. Pr shembull, kur nj proes klient dergon nj mesazhe tek nj proes server dhe me pas bllokohet, ai mund tja japi gjithe biletat e tij proesit server, duke i rritur shanset serverit qe t ekzekutohet. Kur serveri mbaron ekzekutimin, ai ja kthen biletat klientit qe ai t ket mundesi t ekzekutohet. Ne fakt ne munges t serverave klientt nuk kane nevoje pr bileta. Schedulimi me llotari mund t prdoren pr t zgjidhur probleme qe jane t veshtira pr tu menaxhuar me metoda t tjera. Nj shembull sht nj video server ne t cilin shume

proese ushqejne me video stream klientt e tyre, por me frame rate t ndryshme. Supozojme se proeset kerkojne frame nga 10, 20 dhe 25 frame/sec. Duke i caktuar ketyre proeseve 10, 20 dhe 25 bileta prkatsisht ato automatikisht do ta ndajne CPU-ne afersisht ne raportin 10:20:25.

Schedulimi me ndarje t drejt (Fair-Share Scheduling) Deri tani kemi supozuar se proeset schedulohen ne vetvet, pa patur rendesi kush sht pronari. Si rezultat, n qoft se prdoruesi 1 nis 9 proese dje prdoruesi 2 nis 1 proes, me round-robin ose me prioritete t njjta, prdoruesi 1 do marri 90% t CPU-se dhe prdoruesi 2 do t marri vetm 10% t CPU-se. Pr t parandaluar ket situat, disa sisteme shikojne edhe se kush e zotrone proesin para se ta schedulojne. Ne ket model, do prdoruesi i caktohet nj fraksion t CPU-se dhe scheduleri zgjedh proeset duke ju bindur kesaj ndarjeje. Pr shembull n qoft se dy prdorues kane secili 50 % t CPU-se, ata do ta kene ket duke mos u marre parasysh sa proese ato kane ne ekzistnce. Si nj shembull, konsiderojme nj sistem me dy prdorues, ku secili prej tyre kane 50 % t CPU-se. Prdoruesi 1 ka katr proese A, B, C dhe D dhe prdoruesi dy ka vetm nj proes. N qoft se round-robin prdoret, athere nj sekuence schedulim do t jet kjo: A E B E C E D E A E B E C E D E ... N qoft se prdoruesit 1 do ti jepej dyfishi i kohes se CPU-se ne lidhje me prdoruesin 2 athere sekuenco mund t jet: A B E C D E A B E C D E ...

2.5.4 Schdeulimi ne sistemet real-time Nj sistem real-time sht nj sistem ku koha luan rol kryesor. Nomalisht, nj ose me shume paisje t jashtme gjenerojne stimuj dhe kompjuteri duhet t reagoj ne menyre t drejt kundrejt secilit prej tyre me nj pjese kohe t caktuar. Pr shembull, kompjuteri ne nj compact disk player merr bitet sic vine dhe duhet ti konvertoje ne music ne nj interval shume t shkurtr. N qoft se llogaritja zgjat shume, muzika do t degjohet e vecant. Sisteme t tjera real-time jane sistemet e monitorimit t pacientve ne spitale, piloti automatic ne avion, kontrroli i robotit ne nj fabrike. Ne t gjitha keto raste, t kesh prgjigjen e duhur por ta kesh me vone se sht aq keq sa mos ta kesh fare.

Sistemet real-time ndahen ne hard real time, domethene qe ka limit kohore qe duhet t zbatohen me saktsi. Grupi tjtr jane soft real time, domethene qe t mos zbatosh ndonj limit sht i papelqyeshem por i tolerueshem. Ne t dy rastet, arritja e sjelljes real-time arrihet duke duke ndare programin ne disa proese, ku sjellja e tyre sht e parashikueshme dhe e njohur qe me pare. Prgjithesisht keto proese jane t shkurtr dhe ekzekutohen brenda nj sekondi. Kur ndodh nj ngjarje e jashtme sht detyre e schedulerit pr t scheduluar proeset ne nj menyre qe gjithe limitet kohore t respektohen.

Ngjarjet qe nj system real-time duhet ti prgjigjet mund t kategorizohen si periodic dhe aperdiodic. Nj sistem mund ti duhet ti prgjigjet shume ngjarjeve periodik, kjo varet nga sa kohe kerkon do ngjarje pr prpunim, ndoshta mund t mos jet e mundur prballimi i gjithe ketyre proeseve. Pr shembull, n qoft se kemi m ngjarje periodik dhe ngarja i ndodh me priod Pi dhe i duhen Ci seckonda t kohes se CPU qe t menaxhoj do proes, keshtu pra ngarkesa mund t prballohet vetm n qoft se

Nj sistem real-time kur prputhet me ket kritr quhet schedulable. Si nj shembull, konsiderojme nj soft real-time me tre ngjarje periodik, me perioda 100, 200 dhe 500 msec, prkatsisht. N qoft se keto ngjarje kerkojne 50, 30 dhe 100 msec kohe CPU-je pr ngjarje dhe sistemi sht schedulable, sepse 0.5 + 0.15 + 0.2 < 1. N qoft se nj ngjarje e katrt me period 1 sec shtohet, sistemi do t ngelet schedulable deri ne momentin qe kjo ngjarje nuk do me shume se 150 msec t kohes se CPU-se. Schedulimi real-time mund t jet static ose dinamik. I pari i merr vendimet e tij para se sistemi t filloje pune. Tjetri i merr vendimet e tij gjat kohes kur sistemi sht ne ekzekutim. Schedulimi static punon vetm kur ka informacion t sakt para ekzekutimit mbi punen qe do kryhet. Schedulimi dinamik nuk i ka keto kufizime.

2.5.5 Rregullat dhe mekanizmat Deri tani, kemi supozuar se gjithe proeset ne system i prkasin prdoruesve t ndryshem dhe t gjithe konkurrojne pr CPU-ne. Pr sa kohe kjo sht e vertet, por ka raste kur nj proes ka shume femije qe ekzekutohen nen kontrollin e tij. Pr shembull, nj sistem manaxhimi t dhenash mund t ket shume femije. do femije mund t punoje ne kerkesa t ndryshme ose secili mund t ket funksion specific. sht totalisht e mundur

qe proesi kryesor t ket nj ide t qart se cili nga femijet e tij sht proesi me i rendesishem. Por asnj scheduler nuk e bn dot ket. Zgjidhja e ketij problem sht ndarja e mekanizmave t schedulimi nga rregullat e schedulimit. Me pak fjale duhet t parametrizohet algoritmi i schedulimit, por parametrat mund t merren nga proeset user. Le t marrim edhe njehere si shembull rastin e data bases. Supozojme se kernel prdor nj algoritem me prioritet dhe siguron nj system call me ane t se ciles nj proes mund t rregulloje prioritetin e femijes se tij. Ne ket menyre prindi mund ta caktoje vet si do t shkoje schdulimi i femijes se tij, edhe se nuk sht ai qe e bn schedulimin.

2.5.6 Schedulimi I threadsave Kur do proes kane thread-sa t shumefishta, kemi dy nivele t paralelizmit prezent: proese dhe thread-sa. Schedulimi ne keto lloj sistemesh ndryshon thellesisht dhe sht ne varesi thread-save t nivelit-user dhe thread-save t nivelit-kernel. Le t konsiderojme thread-sat e nivelit user t parat. Duke qene se kernel nuk sht ne dijeni t threadsave, ai punon si gjithmone, merr nj proes le t themi A dhe i jep A-se quantumin e saj. Scheduleri i thread-save brenda A vendos qe thread t ekzekutoj, themi A1. Deri sa nuk ka intrerrupt clock-u ne multiprogramin e threadsave, ai mund t vazhdoje t ekzekutohet sa t doje. N qoft se ai mbaron quantumin e tij athere kernel do zgjedhi nj proes tjetr. Kur proesi A ekzekutohet prape, thread-si A1 do t vazhdoje ekzekutimin e tij. Do t konsumoje gjithe kohen e A deri sa t mbaroje. Sjellja e tij antisocial nuk do ndikoje proeset e tjera. Ato do t marrin at qe mendon se sht e drejt schedulerit nuk ka rendesi se cka proesi A brenda. Le t konsiderojme se thread-sat e A nuk kane shume pune ne do cikel t CPU-se, pr shembull, 5 msec pune ne 50 msec quantum. Secili punon pr pak dhe me pas ja jep CPU-ne schedulerit t thread-save. Kjo do t coj ne sekuencen A1, A2, A3, A1, A2, A3, A1, A2, A3, A1, para se kernel t ndryshojne ne B. Kjo situat ilustrohet ne Fig. 2-43(a). Algoritmi i schedulimit i prdorur nga sistemet run-time mund t jet njri nga keto t meposhtmit. Me shume prdoren round-robin dhe prioriteti me schedulim. Problemi i vetm sht mungesa e interruptit t clock-ut. Tani konsiderojme situatn me nivelin kernel t thread-save. Ketu kernel zgjedh nj thread t caktuar pr u ekzkeututar. Nuk merret parasysh kuj i prket thread-si por edhe mund t merret parasysh. Thread-sit i jepet nj quantum dhe ai nderpritet kur ky quantum mbarohet me nj quantum 50 msec dhe me thread-sa qe mbarojne pr 5 msec,

pr 30 msec radha mund t jet A1, B1, A2, B2, A3, B3. Kjo situat sht prshkruar ne figuren 2-43.

Figure 2-43. (a) schedulimi i mundshem i thread-save me 50-msec quantum dhe 5 msec pr do ekzekutim thread-si. Ndryshimi i thread-save t niveli user dhe atyre t nivelit kernel sht performance. Duke bere nj ndryshim threadi ne user level thread-sat marrin dore t instruksioneve makine. Me nivelin kernel duhet nj nderrim i plot, nderrim i harts se memorjes, invalidimi i caches. Nga ana tjetr, me nivelin kernel threads, qenia e thread-save ne nivelin I/O nuk pushon gjithe proeset sic behet ne nivelin user. Duke qene se kernel e di se kalimi nga nj thread ne proesin A ne nj thread ne proesin B sht me kushtueshme se ekzekutimi i nj thread-i tjetr ne A (pr shkak se duhet t nderrohet memory map dhe cache), ai mund ta marri parasysh ket fakt kur t marri vendimin e tij. Nj faktore tjetr i rendesishem sht se thread-sat ne nivelin user mund t marrin nj scheduler specific. Konsideroni pr shembull, nj Web server ne Fig. 2-10. Supozojme se nj thread-s sht bllokuar ne dispatcher thread dhe 2 threadsa punetore jane gati. Kush duhet t vazhdoje? Sistemi run-time duke ditur se cbn do thread mund t zgjedhi dispatcherin dhe keshtu mund t filloje nj tjetr punetore punen. Kjo strategji rrit paralelizmin ku punetoret shpesh bllokohen ne disk I/O.

2.6 Kerkime mbi proeset dhe thread-sat

Ne kapitullin 1 pame disa nga kerkimet e bera ne strukturen e sistemeve operative. Tani do t shohim kerkimet mbi proeset. Disa subjekt jane me t sqaruar se disa t tjere. Kerkimet bazohen ne subjeket qe jane t pazbuluara dhe jo ato qe kaneviteqe trajtohen.

Proesi sht nj koncept shume i trajtuar. Gati do sistem ka nj nocion t proesit, nj mbajts I pr grupimin e t dhenave qe kane t bejne me njra-tjetren, si hapesira e adresave, thread-sat, file-t e hapur, ruajtja dhe lejet. Sisteme t ndryshme e bejne ndryshe grupimin, por ka vetm ndryshime inxhinierike.

Thread-sat jane ide me e re se proeset, keshtu qe ka ende kerkime ne lidhje me to. Hauser et al. (1993), pa si programet reale prdorin thread-sat dhe nxorri 10 prfundime pr prdorimin e thread-save. Schedulimi i threadsave multiproessor dhe jo (Blumofe and Leiserson, 1994; Buchanan and Chien, 1997; Corbaln et al., 2000; Chandra et al., 2000; Duda and Cheriton, 1999; Ford and Susarla, 1996; and Petrou at al., 1999).

Gjithemone prane threadsave qendron sinkronizimi i threadsave dhe mutual exclusion. Me 1970 dhe 1980 nuk kishte shume pune mbi keto tma, me shume ishin t fokusuar mbi performance. (e.g., Liedtke; 1993), mjet pr t dalluar gabimet e sinkronizimit (Savage et al, 1997) ose modifikimi i koncepteve t vjetra me menyra t reja. (Tai and Carver, 1996, Trono, 2000). Si prfundim POSIX dhe paketat e threadsave ende prodhohen dhe raportohen ne (Alfieri, 1994, and Miller, 1999).

2.7 Prmbledhje Pr t fshehur efektt e interrupteve, sistemi operativ prodhon nj model konceptual qe konsiston ne ekzekutimin e proeseve ne paralel. Proeset mund t krijohen dhe prfundohen ne menyre dinamike. Pr disa aplikacione sht mire t kemi thread-sa t shumefisht kontrolli ne nj proes. Keto thread-sa schedulohen ne menyre t pavarur dhe secili ka stakun e vet, por do thread ne nj proes ndan nj hapesire adresash t prbashketa. Thread-sat mund t implementohen ne hapesiren user ose kernel. Proeset mund t komunikojne me njri-tjetrin duke prdorur komunikimin me primitive, si semaphore, monitore ose mesazhe. Keto duhen pr t siguruar se asnj here dy proese jane ne zonen kritike ne t njjtn kohe, kjo situat do t conte ne kaos. Proesi mund t jet ne ekzekutim, i ekzekutueshem ose i bllokuar dhe mund t ndryshoje gjendje kur ai

ose nj proes tjetr ekzekutojne nj nga primitivat e komunikimit. Komunikimi intrhead sht i ngjashem. Shume algoritme schedulimi njihen. Disa prej tyre jane prdorur fillimisht ne sistemet batch, si pr shembull shortest job first. Disa jane t prdorshem ne t dy sistemet at batch dhe interactive. Ketu futen round robin, priority scheduling, multilevel queues, guaranted scheduling, lottry scheduling dhe fair-share scheduling. Disa sisteme bejne t qart dallimin midis mekanizmave dhe rregullave t schedulimit, gje kjo qe bn t mundur qe prdoruesit t kene kontroll mbi algoritmat e schedulimit.

Kapitulli 3

DEADLOCK
Sistemet e kompjuterit jane plot me burime te cilet mund te perdoren vetem nga nje proes ne nje moment kohe. Shembuj te shumte jane printerat, tape driver dhe slots ne tabelat e brendeshme te sistemit. Duke pasur 2-proese ne te njejten kohe duke shkruar te printeri nuk ka kuptim. Duke pasur 2-proese qe perdorin te njejtin file sistem, table slot do te mbaj te pa ndryshuar nje sistem te korruptuar. Per pasoj te gjitha sistemet operative kane aftesi (perkohesisht) te hyrjes tek nje proes i madh ekskluziv tek disa burime te caktuara. Per shume aplikime nje proes do akses ekskluziv jo vetem tek nje burim por te disa, per shembull, supozojme 2 proese qe duan te shkruajn ne nje CD. Kerkesa e proesit A te perdori skanerin dhe pastaj e liron ate. Proesi B eshte i programuar ndryshe, ai kerkon nje CDrecorder ne fillim dhe pastaj e liron gjithashtu ate. Tani A kerkon nje CD-recorder por kerkesa mohohet derisa B ta kete realizuar ate, per fat te keq ne vend qe B ta realizoj CD-recorder kerkon skanerin, ne kete cast te dy proeset do te bllokohen dhe do te rrijne keshtu pergjithmon, kjo situate perben nje deadlock. Deadlock mund te ndodhi ne makina per shembull, shume zyra kane te perhapur nje rrjet local ne shume PC te lidhur ne te. Shume sherbime si skanerat, CD-recorder, printerat dhe tape drive jane te lidhur me rrjetin si burime te ndara te vlefshme te mbajne perdorusin ne ndonje makineri. Ne qofte se keto sherbime mund te realizohen se largu (nga perdorusat shtepiake) i njejtin lloj deadlock mund te ndodhi si ky qe shpjeguam. Situata me te nderlikuara mund te perfshijn 3, 4, 5 ose me shume sherbime dhe pordorues. Deadlock mund te gjenden ne nje sere situatash sipas kerkesave te dedikuara I/O devices. Ne nje sistem data base, per shembull, nje program mund ti duhet te mbylli regjistrime te mundshme qe eshte perdorur per te lejuar kushte te rinje. Ne qofte se proesi A ka mbyllur regjistrimin R1 dhe proesi B mbyll regjistrimin R2, dhe atehere seicili proes perpiqet te bllokoj burimet e tjetrit, gjithashtu ne kete rast kemi deadlock. Keto burime mund te zene nje burim hardware ose software. Ne kete kapitull ne do te shikojme me nga afer deadlock, te shikojme si eshte ndare dhe te studiojme disa raste se si i ndalojme ose i lejojme ato. Megjithate ky material eshte rreth deadlock ne lidhje me sistemet operative, ato gjithashtu perdoren ne sistemet e data base dhe ne shume shkenca kompjuterike, keshtu qe ky lloj materiali eshte aplikuar ne shume lloje proesesh me

multiproese. Shume eshte shkruajtur rreth deadlock: 2-bibliografi me kete teme jene shfaqur ne (operating system review) dhe mund te perdoren per reference (Newton,1979:dhe Zobel,1983). Megjithese keto bibliografi jane te vjetra, pjesa me e madhe e punes per sa i perket deadlock eshte bere perpara 1980, keshtu qe keto jane akoma shume te perdorura.

3.1 BURIMET Deadlock mund te zene vend kur proeset kane dhene pranin ne devicer, file e keshtu me radhe. Per ta bere diskutimin rreth deadlock sa me te perafert ne mund ti referohemi objekteve qe na japin burime. Nje burim mund te jete hardware (per shembull, tape driver) ose nje pjes informacioni (per shembull, nje regjister i bllokuar ne nje data base). Nje PC normalisht mund te kete shume burime te ndyshme te cilat mund te perfitohen. Per shume burime instancat e identifikimit mund ti lejojne atij si tape driver. Kur disa kopje te burimit jane te lejueshme shume prej tyre mund te perdoren per te kenaqur ndonje kerkese te burimit. Ne menyre te permbledhur nje burim eshte nje dicka qe ne nje moment te kohes mund te perdoret nga nje proes.

3.1.1 BURIME TE PARANDALUSHEM OSE JO

Burimet mund ti kemi ne 2 tipe: te parandalushme ose jo. Nje burim eshte i parandalushem ne qofte se mund te merret nga nje proes duke e fituar ate pa burime anesore. Memorja eshte nje shembull i burimeve te parandalueshem. Konsiderojme per shembull, nje sistem me 32 Mb te memorjes se perdorshme, nje printer dhe 2 proese me nga 32 Mb ku secili do te printoje dicka. Proesi A kerkon dhe merr printerin pastaj nis te ndjeke rregullat e printimit. Perpara se ai te mbaroje me llogaritjet, ai e shpenzon kohen e tij te kuantizuar swapped out. Proesi B vepron dhe mundohet, por pa sukses per te aksesuar printerin. Fuqishem ne tani kemi nje situate deadlock sepse A ka printerin dhe B memorjen dhe asnjeri nuk mund te vazhdoj pa burimet e mbajtura nga tjetri; per fat eshte e mundur te marresh memorje nga B dhe tia japesh A. Tashme A mund te vazhdoje printimin dhe me pas ta kompletoje ate. Tani deadlock nuk shfaqet. Nje burim i paparandalueshem ne contrast eshte nje qe nuk mund te merret nga pozicioni fillestar pa shkaktuar deshtimin e llogaritjeve: Ne qofte se proesi ka filluar te krijoje nje CD-ROM, te marresh papritur CD-Recorder dhe ti japesh direkt atij nje proes tjeter mund te rezultoje me nje CD te parregullt. CD-Rekorder nuk parandalueshem ne nje moment albitrar. Ne pergjithesi deadlock perfshijne burime te paparandalueshme. Deadlock te fuqishem qe perfshijne burime te parandalueshme ne pergjithesi zgjidhen per te kaluar burimet nga nje proes ne nje tjeter, ky trajtimi qe ne po bejme do te fokusohet tek burimet e paparandalueshme. Seria e ngjarjeve qe kerkohen te ndiqen per te perdorur nje burim eshte dhene me pas ne nje forme abstrakte.

1. Te kerkosh burimin. 2. Te perdoresh burimin. 3. Te rikthesh burimin. Ne qofte se burimi nuk eshte i gatshem kur kerkohet, proesi i kerkimit eshte i detyruar te pres. Ne disa sisteme operative proesi bllokohet automatikisht, kur nje kerkes burimi deshton dhe rivepron kur ai behet i vlefshem. Ne sisteme te tjera kerkesa deshton ne nje gabim kodi dhe kalon ne proesin e thirrjes, pret pak dhe fillon proesi. Nje proes kerkesat e burimeve te te cilit sapo jane mohuar natyrshem zene vend ne nje nyje te fiksuar duke kerkuar burimin me pas bien ne qetesi pastaj e provojne perseri. Megjithese ku proes nuk eshte i bllokuar, ne kuptimin e mirefillte, eshte njesoj sikur te ishte sepse nuk kryen asnje pune te dobishme. Ne trajtimin tone te radhes, ne do te trajtojme rastin kur nje proesi i mohohet kerkesa per burimin ai kalon ne gjendje sleep (nuk eshte aktiv). Natyra ekzakte e kerkimit te burimit eshte komplet ne varesi te sistemit. Ne disa sisteme, kerkesa thirrje sistem, siguron qe te lejoje proesin per te pyetur per burimin ne menyre eksplicite. Ne te tjere, te vetmet burime qe sistemi operativ njeh, jane disa file speciale qe vetem nje proes mund ti hapi ne nje kohe te dhene. Keto hapen nga nje open call i zakonshem. Ne qofte se file vazhdon te jete ne perdorim thirresi erresohet derisa thirresi qe po e perdor e mbyll ate.

3.1.2 Marrja e burimeve Per disa lloje burimesh sic jane regjistrat ne database e nje sistemi eshte detyre e proesit perdorues te menaxhoj perdorimin vetijak te burimit. Nje menyre e mundshme e lejimit te menaxhimit te burimit nga perdoruesi eshte shoqerimi i do burimi me nga nje semaformafor. Keta semafor jane te gjithe te inicializuar nga (mutex) dhe mund te perdoren mjaft mire te gjithe. Te tre keto shkalle qe permendem, jane te implementuara ne semafor sic jane treguar me poshte ne fig.3.1.

typedef int semaphore; semaphore resource-1;

typedef int semaphore; semaphore resource -1; semaphore resource - 2;

void proess_A(void) { down(&resource - 1); use-resource -1();

void proess_A(void) { down (& resource-1); down (& resource- 2),

up(&resource 1); } up(&resourse_1);

use both-resources(); up(&resource-2); }

(a)

(b)

Figure 3-1. Using a semaphore to protect the resources, (aj One resource, (b) Two resources.

Disa here proeset duan dy ose me shume burime, ato mund te fitohen dale-ngadale sic tregohet ne (fig.3-h-p). Ne qofte se nevojiten me shume se dy burime ato fitohen njeri pas tjetrit. Kaq larg, kaq mire. Per aq kohe sa nje proes eshte i perfshire do gje punon mire. Natyrisht qe vetem ne nje proes nuk eshte e nevojshme te formosh perfitime burimesh derisa nuk ekziston nje tip gare per ta. Tani le te marrim ne considerate nje situate me dy proese A , B dhe dy burime. Dy skenare jane paraqitur ne fig. 3.2.Ne fig.3.2 a te dy proeset kerkojne burimet e te njejtin rregull. Ne fig. 3.2 b ata i kerkojne burimet ne menyra te ndryshme. Kjo diference mund te duket e paket , por nuk eshte e tille. Ne fig. 3.2 a nje nga proeset mund te fitoje burimin e pare me perpara se tjetri. Ai proes mund te fitoje atehere ne menyre te suksesshme burimin e dyte: dhe te na beje neve te punojme. Ne qofte se proesi tjeter tenton te fitoje burimin me perpara se ai te realizohet, proesi tjeter thjesht do te bllokohet deri sa te behet i vlefshem. Ne fig.3.2 b situate eshte e ndryshme. Mund te ndodhe qe nje proes i fiton te dy burimet dhe efektivisht i bllokon te gjitha proeset e tjera deri sa mbaroje. Megjithate mund te ndodhe gjithashtu qe proesi A te fitoje burimin e pare dhe B fiton burimin e dyte. do njeri prej tyre tani bllokon tjetrin. Asnje proes tjeter nuk mund te ndodhe, kjo situate eshte nje deadlock. Tani ne shohim se si shfaqet nje diference e vogel ne nje menyre kodimi, burimet e se ciles te fituara ne fillim kthehen per te bere diferencat ndermjet nje programi qe punon dhe nje programi qe deshton ne nje menyre te veshtire gjetjeje. Sepse deadlock mund te arrije ne menyre shume te lehte, shume prej kerkimeve kane shkuar ne ndarjen e tyre. Ky kapitull diskuton deadlock-et ne detaje dhe se cfare mund te behet me ta.

typedef int semaphore; semaphore resource-1; semaphore resource-2; semaphore resource-1; semaphore resource-2;

void proess_A{void) { down(&resource -1); down(&resource 2); use-both-resources(); up(&resource-2); up(&resource-1); } void proess-B(void) { down(&resource-1); downj&resource -2); use - both -resources{); up(&resource-2); up(&resource-1); (a)

void proess-A(void) { down (& resource-1); down(&resource 2); use-both-resources(); up{&resource-2); up(&resource-1); } void proess-B(void) { down(&resource-2); do wn(& resource - 1); use- both - resources ( ) ; up(3cresource-1); up(&resource -2): (b)

Figure 3-2, (a) Deadlock-free code, (b) Code with a potential deadlock. 3.2 HYRJE TEK DEADLOCK

Deadlock-et mund te perkufizohen si me poshte: Nje set proesesh eshte deadlock (I ngecur ) ne qofte se do proes ne set eshte duke pritur nje ngjarje qe vetem nje proes tjeter ne set mund ta shkaktoje: sepse nga te gjithe proeset qe jane duke pritur asnje prej tyre nuk mund te shkaktoje ndarje, ngjarja qe mund ti zgjoje te gjithe anetaret e tjere te setit dhe keshtu te gjitha proest vazhdojne te presin pergjithmone. Per kete model ne permbledhim qe proeset kane vetem nje thread te vetem dhe nuk kane interrupt-e te mundshme per te vene ne pune proeset e bllokuara. Situata e jointerrupt-it i duhet te kete (te beje prone te veten) nje proes deadlock-u tjeter per te zgjuar dhe per te dhene nje alarm dhe me pas te shkaktoje ngjarjet qe te vene ne pune te gjitha proeset e setit. Ne rastet me te shumta ngjarjeje qe do proes eshte duke pritue eshte realizimi i disa burimeve te njepasnjeshme, pasuar nga nje anetar tejter i setit. Me fjale te tjera do anetare i proesit te deadlock-ut eshte duke pritur per nje burim qe fitohet nga nje proes

deadlock. Asnje prej proeseve nuk ndodh, asnje prej tyre nuk realizon ndonje burim, dhe asnje prej tyre nuk mund te vihet ne pune. Nr i proesve dhe nr i llojit te burimeve te paraqitura dhe te kerkura jane te pa vlefshem. Keto rezultate jepen per ndonje lloj burimi duke perfshire hardware dhe software se bashku.

3.2.1 KUSHTET PER DEADLOCK

Coffman ka treguar qe 4 kushte nevojiten per nje deadlock. 1. Kushte perjashtuese, pershkruese do burim eshte pergjithesisht i shenuar kur nje proes eshte i vlefshem. 2. Kushti i mbajtjes dhe i pritjes. Proeset e rrjedhshem mbajne burimet e vjetra qe kerkojne burime te reja. 3. Kushti i paparashikueshem. Burimet e vjetra nuk mund te hiqen me force nga proesi. Ato mund te shmangen dhe proesi ti mbaje ato. 4. Kushti i pritjes cirkulare. Mund te ekzistoje nje rruge cirkulare e dy ose me shume proeseve ku secili prej tyre eshte duke pritur qe nje burim ta marre si nje anetar tjeter te zinxhirit. Te gjitha keto 4 kushte mund te nevojiten qe te ndodhe nje deadlock. Ne qofte se ndonjeri prej tyre mungon asnje deadlock nuk ndodh. Eshte e nevojshme te thoni qe do njeri prej ketyre kushteve krijon nje tip kontrolli qe nje sistem mund ta kete ose jo . A mund nje burim te regjistrohet ne me shume se nje proes ne te njejten kohe? A mund nje proes te mbaje nje burim dhe te kerkoje per nje tjeter? A mund nje burim te parashikohet ? A ekzistojne zinxhiret cirkulare ? Me vone ne do te shohim se si deadlock-et mund te sulmohen per te bllokuar nje nga keto fusha.

3.2.2 MODELI DEADLOCK Halt (1972) trgon se si keto 4 kushte mund te modelohen per te perdorur grafike direkt. Grafiku ka dy lloj shenjash. Proest qe paraqiten me rrathe dhe burimet te paraqitur si katrore. Nje hark nga katrori tek nje rreth d.m.th. qe burimi eshte kerkuar, sigurohet dhe mbrohet nga proesi. Ne fig 3.0 (a) burimi R eshte shenuar tek proesi A. Nje pjese e proesit tek nje burim d.m.th. qe proesi eshte bllokuar perkohesisht duke pritur per burimin .

Ne fig. 3.3. b proesi B eshte duke pritur per burimin S. Ne fig 3.3.c ne shohim nje deadlock. Proesi C eshte duke pritur per burimin T i cili nderkohe kerkon te ndihmohet nga proesi D. Proesi D nuk eshte duke realizuar burimin T sepse eshte duke pritur per burimin U i cili mbrohet nga C. Te dy proeset do te presin pergjithemon ciklin A me grafik; kjo d.m.th. qe eshte nje deadlock qe perfshin proeset dhe burimet ne cikel (theksojme qe ka burime te ndryshme per do lloj). Ne kete shembull cikli eshte C-T-DU-C . Tani le te shohim nje shembull tjeter se sa grafike burimesh mund te perdoren. Imagjinoni qe ne kemi tre proese A, B dhe C dhe tre burime R,S,T.

Kerkesat dhe realizimet e tre proeseve jane te dhena ne fig 3.4(a-e). Sistemi operativ eshte prirur te kapi ndonje proes te pa bllokuar ne ndonje moment keshtu qe ai mund te vendosi te kapi A , ne momentin qe A mbaron pune .Me pas ai kap B qe ta kompletoje dhe ne fund kap C. Ky rregull nuk lejon te ndodh ndonje deadlock (sepse nuk ka ndonje gare per burime), por gjithashtu nuk ka ndonje paralelizem te pergjithshem. Ne perfundim te burimeve te kerkuara dhe te realizuara proesi realizon dhe ben I/O. Kur proeset kapen njeri pas tjetrit, nuk ka ndonje mundesi qe ndersa nje proes tjeter mund te perdori CPU. Kjo kapje strikte e proeseve ne menyre sekuenciale mund te mos jete me e mira. Ne anen tjeter ne

qofte se asnje nga proeset nuk ben asnje I/O ne pergjithesi ne qofte se bejne pune te tjera me te mira eshte me mire se te bejne nje (plackitje )ciklike. Per disa rrethana te besh disa proese ne menyre te njepasnjeshme eshte me e mira. Tani le te supozojme se proeset i bejne te dy I/O dhe njehsimet, keshtu qe vjedhja ciklike e shperndare eshte nje algoritem i programuar i arsyeshem. Kerkesat e burimve mund te ndodhin sipas rregullit tek fig 3.4.d. Ne qofte se keto 6 kerkesa mbahen me kete rregull 6 grafiket e burimeve rezultative jane te treguar ne fig 3.4(eKj). Pas kerkeses 4 qe eshte bere A bllokon pritjen per S sic pregohet ne fig 3.4.h. Ne dy hapat e tjere B, C bllokohen gjithashtu , si perfundim forcon lidhjen ne cikel dhe deadlock nuk ndodh fig 1.4 (i,j) Megjithate sic kemi permendur SO nuk kerkon te kapi proeset me ndonje rregull special ne qofte se dhenia e nje kerkese te vacant forcohet lidhet ngusht sipas nje deadlock SO thjesht mund ti pezulloj proeset pa dhene kerkesen (per shembull thjesht nuk programon proesin) derisa te sigurohet, te ruhet ne fig 3.4. Ne qofte se SO di rreth varesis se deadlock ai mund te pezulloj B para se te japi S. Duke vepruar vetem A dhe C ne mund te marrim kerkesat dhe r fig 3.4(k) ne vend te 3.4(d). Keto sekuenca forcojne atehere grafikun e burimit te fig 3.4(i)-(q), e cila nuk lejon te ndodhin deadlock. Pasi hapit (q), proesi B mund ti jepet S, sepse A ka mbaruar dhe C ka do gje qe i duhet. Edhe ne se B mund te bllokohet kur kerkon 7, asnje deadlock nuk und te ndodhe, B thejsht do presi derisa te mbaroje C. Me vone ne kete kapitull ne do te studiojme nje algoritem te detajuar per berjen e llogaritjeve qe nuk lejojn cuarjen e sistemit ne deadlock.

Per momentin ajo qe duhet kuptuar eshte qe grafiket e burimeve jane nje table qe na lejon neve te shohim ne qofte se nje kerkese dhe sekuenc realizimesh te dhena lejojne deadlock. Tani per tani ne marrim nje per nje kerkesat dhe realizimet dhe lejojme do hap te kerkoj grafikun per te pare nese permban ndonje cikel, gjithashtu nese kemi deadlock apo nuk kemi deadlock. Pergjithesisht trajtimet jane mbi grafiket e burimet, jene bere per rastin e butimeve te vecanta per seicilin tip, grafiket e burimeve mund te gjeneralizohen per te shumefishuar burimet e te njejtit tip (Holt 1972). Ne pergjithesi 4 strategji jane ndjekur per te shkurtuar deadlock. 1. Thjesht injoron problemet e gjithanshem. Mbase ngaqe ju do te injoroni ate ai do ju injoroje ju. 2. Dedekto, shtro, lejo te ndodhin deadlock dedektoje ate dhe vepro. 3. Shmangie dinamike nga llogaritjet e kujdesshme te burimeve. 4. Parandalim duke mohuar strukturalisht nje nga 4 kushtet e nevojshme per te shkaktuar nje deadlock, Ne do te ekzaminojme seicilen prej ketyre metodave ne milimetra ne 4 seksionet pasardhes.

3.3 THE OSTRICH ALGORITEM Afrimi me thjeshte eshte algoritmi skeletor: Fut kohen tende ne seksion dhe pretendo qe nuk ka asnje problem. Njerez te ndryshem reagojne ndaj kesaj strategjie ne menyre te ndryshme. Matematikisht nuk e konceptojne dot dhe thone qe deadlock duhet te parandalohet me do kusht. Inxhinieret pyesin se sa here eshte kapur problemi, sa shpesh sistemi perplaset per arsye te tjera dhe sa serioz eshte deadlock-u. Ne qofte se deadlock-u ndodh ne interval do 5 vejte, por sistemi perplaset me deshtimet e hardwar-eve, gabime te komplikuara dhe viruse te sistemit operativ ndodhin 1 here ne jave. Shume inxhiniere nuk do te preferonin te programonin nje penalitet te madh ne performance ose ne perfitim te eleminimit te deadlockut. Per te bere kete contrast me specific shumica e sistemeve operative vuajne potencialisht nga deadlock-et qe nuk jane detektuar, duke u lene automatikisht te thyhen. Nr total i proeseve ne nje sistem percaktohet nga numri i hyrjeve nga nje proes table. Keto tabela proes jane burime te perfunduar. Ne se nje dyjezim deshton sepse tabela eshte e plote nje perafrim i arsyeshem i programit duke bere dyjezimin, eshte nje kohe random dhe te provoje perseri. Tani supozoni qe nje sistem UNIX ka 100 slote per proes,10 programe fillojne te veprojne ku secili prej tyre duhet te krijoje 12 nenproese. Me pas do njeri prej ketyre

proeseve krijon 10 proeset origjinale dhe 90 proese te rinj te cilet e ngarkojne tabelen. do njeri prej 10 proeseve origjinale tani ulet ne nje nyje fundore, dyjezohet dhe deshton, kjo perben nje deadlock. Probabiliteti qe kjo te ndodhe eshte shume i vogel, por mund te ndodhe. A do ta braktisim proesin dhe thirrjen per dyjezim per te eleminuar problemin? Numri maksimal i fileve te hapura eshte i kufizuar ne menyre te ngjashme nga permasat e inodc table, nje problem i ngjashem ndodh dhe kur ajo mbushet plot. Hapesira e swap ne CD eshte nje tjeter burim i kufizuar, ne fakt shumica e do tabele ne sistemin operativ paraqet nje burim te kufizuar. A do ti braktisim ne te gjitha keto sepse mund te ndodhe qe nje koleksion i N proeseve mund te pretendoje Vn te totalit dhe do tjeter te pretendoje tjetren. Shumica e sistemeve operative perfshire UNIX dhe WINDOWS thjeshte e injorojne problemin ne nje permbledhje, qe shume perdorues do t preferonin nje deadlock rastesor se sa nje rregull qe kufizon te gjithe perdoruesit ne nje proes, nje file i hapur dhe do gje tjeter. Ne qofte se deadlocket do te eleminoheshin tek boshti kryesor nuk do te kete shume diskutime. Problemi eshte qe cmimi eshte shume i larte, aq shume sa vendosen dhe kufizime ne proese. Keto jane te ballafaqueshme ne nje situate te pakendshme midis nevojshmerise dhe korrekteses: nje diskutim tjeter i madh eshte se kush eshte me i rendesishem dhe per cfare. Ne keto kushte zgjidhje te pergjitheshme jane veshtire per tu gjetur.

3.4 PERCAKTIMI I DEADLOCKEVE DHE RIFITIMI I GJENDJES Nje teknike tjeter eshte detektimi dhe rivendosja. Gjate perdorimit te kesaj teknike sistemi nuk tenton te parandaloje ngjarjen deadlock, perkundrazi i lejon ato te ndodhin dhe tenton te identifikoje se kur mund te ndodhe dhe me pas mer masa per rivendojsen e gjendjes pas ndodhise. Ne kete seksion do te shikojme disa menyra per identifikimin e deadlock dhe disa menyra se si trajtohen rastet e rivendosjes se gjendjes.

3.4.1 DETEKTIMI I DEADLOCKEVE ME NJE BURIM PER SECILIN TIP Le te fillojme me nje rast te thjeshte ku kemi vetem nje paisje per do tip. Si psh ne nje sistem te kemi vetem nje skaner nje CD-rom nje plotter nje tape drive por jo me shume se nje eksiztence per do klase paisjesh. Me fjale te tjera per momentin nuk do te trajtojme sisteme me paisje te dyjezuara per shembull, nje sistem me dy printera. Keto lloje sistemesh do ti trajtojme me vone duke perdorur nje metode tjeter. Per keto lloj sistemesh mund te ndertojme nje grafik burimesh (paisjesh) sipas ilustrimit ne figuren 3-3. Nese ky grafik permban nje apo me shume cikle athere mund te themi qe

ndodh nje ngjarje deadlock. do proes qe eshte pjese e ketije cikli mund te quhet nje ngjarje deadlock. Nese nuk ekziston asnje cikel atehere sistemi nuk ka ngjarje deadlock. Si nje shembull me kompleks se ata qe kemi pare deri tani le te supozojme nje sistem me shtate proese, A deri ne G dhe gjashte paisje (burime) R deri ne W. Rradha e paisjeve atkualisht ne perdorim dhe e atyre te kerkuara per perdorim nga proeset eshte si me poshte: 1. 2. 3. 4. 5. 6. 7. Proesi A kap R por deshiron S. Proesi B nuk kap asgje por deshiron T. Proesi C nuk kap asgje por deshiron S. Proesi D kap U dhe deshiron S dhe T. Proesi E kap T dhe deshiron V. Proesi F kap W dhe deshiron S. Proesi G kap V dhe deshiron U.

Pyetja ne kete rast eshte: A mund te ndodhe ne kete sistem nje ngjarje deadlock? Nese po cilat jane proeset qe perfshihen ne kete ngjarje? Per tiu pergjigjur kesaj pyetje nderotjme nje grafik burimesh si ne figuren 3-5(a). Ky grafik sic mund te shikohet dhe me pamje te pare permban nje cikel. Cikli paraqitet ne figuren 3-5(b). Nga ky cikel kuptojme se proeset D, E dhe G jane te perfshire brenda nje ngjarje deadlock. Proeset A, C dhe F nuk jane te perfshire ne nje ngjarje deadlock sepse S mund te vihet ne dispozicion per secilin nga keto proese, te cilat pasi perfundojne e lirojne burimin (paisjen) per perdorim; me pas dy proeset e tjere mund te perdorin burimin sipas rradhes dhe ta lirojne per perdorim pas perfundimit.

Megjidhese eshte relativisht e thjeshte per te identifikuar ngjarjet deadlock dhe proeset e perfshira ne te nga nje grafik i thjeshte, ne sistemet aktualisht ne perdorim nevojitet nje algoritem formal per identifikimin e ngjarjeve deadlock. Ekzistojne shume algoritme per identifikimin e cikleve ne grafik.

Me poshte do te japim nje shembull qe inspekton nje grafik dhe perfundon duke treguar nese ka apo jo nje ngjarje deadlock. Ky algoritem perdor nje strukture te dhenash te perbere nga nje liste nyjesh. Gjate ketij algoritmi harqet markohen per te dalluar nese ato jane inspektuar dhe per shmangien e riverifikimeve te harqeve. Algoritmi operon sipas hapave te specifikuar me poshte: 1. Per sejcilen nyje Ar ne grafik ndjekim 5 hapat duke mare nyjen V si nyje fillestare. 2. Boshatisim listen L dhe identifikojme harqet si te pa kontrolluara. 3. Shtojme nyjen aktuale dhe kontrollojme nese ne L shfaqet dy apo me shume here. Nese po atehere grafiku permban nje cikel te listuar ne L dhe algoritmi perfundon duke identifikuar nje ngjarje deadlock. 4. Nga nyja e dhene kontrollojme per harqe te pa kontrolluara. Ne se po atehere vazhdojme me hapin 5 ne te kundert kalojme direkte ne hapin 6. 5. Zgjedhim nje hark te kontrolluar dhe e ciklojme si te kontrolluar. E ndjekim harkun per ne nyjen tjeter pasardhese dhe rikthehemi ne hapin 3. 6. Kemi arritur ne nje nga fundet e ngjarjeve. E heqim kete nyje dhe rikthehemi tek nyja qe kishim ne shqyrtim para kesaj dhe i rikthehemi hapit 3. Nese kjo nyje eshte nyja fillestare atehere grafi nuk ka cikle dhe algorimi perfundon. Ajo cka ben ky algoritem eshte trajtimi i sejciles nyje si rrenje te asaj qe mund te jete nje peme dhe ben nje kerkim te thelluar ne te. Ne se i rikthehet ndonje nyjeje qe ka hasur me pare atehere identifikon nje cikel. Ne se ezauron te gjitha nyjet pasardhese te nje nyje te dhene rikthehet ne nyje paralele me te dhenen. Ne se tenton te rikthehet ne nje nyje paralele me rrenjen pa identifikuar nje cikel dhe nese i ka kaluar te gjitha nyjet atehere grafi nuk permban cikle si rrjedhim sistemi nuk permban ngjarje deadlock. Per ta pare se si funksionon ky algoritem ne praktike le te perdorim grafin e figures 3-5 (a) . Rradha e proesimit te nyjeve eshte arbitrare keshtu qe le ti inspektojme nga e majta ne te djathte dhe nga lart poshte. Fillojme ekzekutimin e algoritmit tek .... *\ Dhe me pas tek ..... . ,4, /?, C. S, O, T, ', F Dhe keshtu me rradhe. Nese hasim nje cikel y algoritmi ndalon. Le te fillojme me R dhe inicializojme L si nje liste boshe. Shtojme R ne liste dhe levizim drejte mundesise se vetme A. Kete te fundit e shtojme ne L duke bere L=fi(A). Nga A shkojme ne hapin 5 duke i dhene L vlere L = RAS. S nuk ka harqe te tjere dales ndaj mund te themi se kemi aritur ne nje fund nyjesh, cka na detyron te rikthehemi tek A. Meqenese A nuk ka harqe te tjera dalese, rikthehemi tek R duke cilesuar si te plotesuar inspektimin e pikes A. Rifillojme ekzekutimin e algoritmit duke filluar nga A dhe duke boshatisur listen L. Ky kerikm gjithashtu eshte i thjeshte si dhe kerkimi i meparshem. Keshtu qe kalojme tek B. Nga B ndjekim harqet dalese deri sa arrijme tek D, ne kete rast lista L ka vlere L=

[B.T. E. V, (7. l.L Z>]........... Tani na duhet te bejme nje zgjedhje te rastit. Nese zgjedhim S arrijme ne nje fund nyjesh ndaj duhet te rikthehemi tek D. Heren e dyte zgjedhim T dhe lista L mer vlere L=[, T, Ey V, O, U. D, 7]............, ne kete pike shikojme qe ne graf kemi nje cikel dhe ndalojme algoritmin. Ky algoritem eshte shume larg optimales. Per nje algoritem me te detajuar shikoni (Even 1979 ). Megjithate demostron ekzistencen e algoritmeve per identifikimin e ngjarjeve deadlock.

3.4.2 DETEKTIMI I DEADLOCKEVE ME BURIME TE SHUMFISHTA Ne rast se kemi ekzistencen e shume tipeve te te njejtes paisje (burim) nevojitet te ndiqet nje tjeter menyre per identifikimin e ngjarjeve deadlock. Tani do te trajtojme nje algoritem matricor per identifikimin e ngjarjeve deadlock midis n proeseve, P] deri ne Ptl. Le te jete numri klasave te paisjeve ( burimeve ) m, me E [burime te klases ]. Fi burime te klases 2 dhe E burime te klases i (\ < i < m). E eshte nje vektor me burime ekzistente. Ne te paraqiten totalet e instancave per sejcilin burim ekzistent. Per shembull nese klasa 1 eshte nje tape drive E t - 2 do te thote qe sistemi ka dy tape drives. Ne nje cast te caktuar disa nga burimet jane te zena dhe nuk jane te lira per shfrytezim. Le te jete A nje burim i lire i vektorit, me 4 paraqitet numri i instancave te burimeve / qe jane aktualisht te lira per perdorim ( te pa zena ). Ne se te dy tape drives do te ishin te zena ahere 4 do te kishte vleren 0. Tani na duhen me teper vektore, C\ matrica aktuale e perdorimit dhe R. Matrica e kerkesave. Rrjeshti Z-te i C tregon se sa instanca te klases se burimeve Pf mbajne aktualisht *. Keshtu C,7 eshte numri i instacave te burimit / qe mbahen nga proesi i. Ne menyre te ngjashme, Ktj eshte numri i instancave te burimit / qe kerkohen nga P. Keto kater struktura te dhenash paraqiten ne figuren 3-6.

Ne vencanti, sejcili burim eshte ose i bllokuar per shfrytezim ose i lire per shftytezim. Kete e tregon dhe struktura e te dhenave. Algoritmi i identifikimit te ngjarjeve deadlock eshte i bazuar ne krahasimin e vektoreve. Le te percaktojme relacionin A<B mbi dy vektoret A dhe B, d.m.th. do elemet i A qe eshte me i vogel ose barazim me elementin korespondent ne B. Matematikisht A<B qendron vetem nese A; B, per I < / < m-. do proes fillimisht qendron si i pa shenuar. Gjate ekzekutimit te algoritmit proeset do te shenohen, duke treguar qe mund te plotesohen totalisht dhe nuk jane pjese e nje ngjarjeje deadlock. Kur algoritmi perfundon proeset e pashenuar njihen si proese pjesmarrese ne ngjarje deadlock. Algoritmi i identifikimit te ngjarjeve deadlock mund te jepet si me poshte: 1. Kerkojme per proes te pashenuar, Pit per te cilin rrjeshti i-ih i R eshte me i vogel ose barazim me A, 2. Nese nje proes i tille gjendet, shtojme rrjeshtin /-th te C tek ,4, shenojme proesin dhe i rikthehemi hapit 1. 3. Nese nje proes i tille nuk ekziston algoritmi perfundon. Kur algoritmi perfundon te gjithe proeset e pashenuar, nese ka, jane pjese te ngjarjeve deadlock. Ajo cka ben algoritmi ne hapin e pare eshte kerkimi per proese qe mund te arrine perfundimin e vetvetes. Keto proese karakterizohen nga kereksa per burime te cilat mund te plotesohen nga burimet aktuale te lira per shfrytezim. Proesi i zgjedhur ekzekutohet dhe deri sa mbaron, kohe ne te cilen ai kthen dhe te gjitha burimet qe mban per shfrytezim, burime te cilat kthehen ne hapsiren e burimeve te gatshme per shfrytezim dhe se fundi proesi shenohet si i kompletuar. Nese te gjitha proeset mund te arrijne perfundimin e tyre atehere asnjeri prej tyre nuk ben pjese ne nje ngjarje deadlock.

Megjithate dhe ky algoritem nuk eshte percaktues ( determinues ) sepse ai mund te ekzekutoje proeset ne menyra jo te paracaktuara. Si shembull per funksionimin e nje algoritmi per identifikimin e nje ngjarjeje deadlock le te konsiderojme figuren 3-7. Ketu kemi tre proese dhe kater klasa burimesh te cilat i kemi emertuar arbitrarisht tape drive, ploter, skaner dhe CD-ROM. Proesi 1 ka nje skaner. Proesi 2 ka dy tape drivers dhe nje CD-ROM. Proesi 3 ka nje ploter dhe dy skanera. Sejcilit proes i nevojiten burime shtese, si paraqitet nevoja per burime shtese, si paraqitet dhe ne matricen R. Per ekzekutimin e algoritmit te identifikimit te ngjarjeve deadlock, kerkojme per proese kerkesat e te cileve per burime mund te plotesohen. Kerkesa e pare nuk mund te plotesohet sepse nuk kemi CD-ROM te lire per shfrytezim. Kerkesa e dyte nuk mund te plotesohet gjithashtu sepse nuk kemi skaner te lire per shfrytezim. Fatmiresisht, kerkesa e trete mund te plotesohet keshtu proesi 3 ekzekutohet dhe pas perfundimit rikthen te gjitha burimet e zena per shfrytesim duke dhene A = (2 2 2 0) Ne kete pike proesi 2 mund te ekzekutohet dhe ne perfundim kemi A = (4 2 2 \) Dhe se fundi ekzekutojme proesin 3. Nuk ka ngjarje deadlock ne sistem.

Le te konsiderojme nje ndryshim ne situaten e paraqitur ne Figuren 3-7. Supozojme qe proesit 2 i nevojitet nje CD-ROM si dhe dy tape-drive dhe nje ploter. Asnje nga keto kerkesa nuk mund te plotesohen keshtu mund te themi se proesi 2 eshte pjese e nje ngjarjeje deadlock. Tashme qe dime se si mund te identifikojme nje deadlock, pyetja qendron se kur mund te kerkojme per ndodhjen e tyre. Nje mundesi eshte te kerkojme per to sa here qe behet nje kerkese per nje burim. Ne kete rast kemi gjetje te sigurt por kjo menyre eshte shume e shtrejnte ( ne kohe perdorimi te CPU ). Nje alternative tjeter strategjike eshte

kerimi per to do K minuta ose gjate kohes kur perdorimi i CPU ka rene nen nje nivel te caktuar. Arsyea e konsiderimit te kohes se CPU eshte sepse nese shumica e proeseve jane pjese e ngjarjeve deadlock mund te kete shume pak proese te mundeshme per ekzekutim dhe CPU mund te jete e lire per ekzekutimin e algoritmeve te identifikimit te proeseve deadlock.

3.4,3 RIFITIMI I GJENDJES Supozojme qe algoritmi yne i identifikimit te ngjarjes deadlock pati sukses duke identifikuar nje ngjarje te tille. Me pas ne ndonje menyre do na duhet te zhbllokojme kete gjendje te sistemit ne menyre te tille qe ky i fundit te vazhdoje punen. Ne kete seksion do te diskutojme per menyrat e rekuperimit te gjendjes se sistemit pas nje ngjarjeje deadlock. Recovery through Pre-emption Ne disa raste mund te jete e mundur ne menyre te perkohshme te marim nje paisje burim nga perdoruesi aktual dhe ti'a japim per perdorim nje proesi tjeter. Ne shume raste nevojitet nderhyrje manuale vecanerisht gjate batch proessing (grumbullimit te programeve) te sistemeve operative qe ekzekutohen ne mainframe (zhvillimet kryesore). Per shembull, per marrjen e printerit nga nje perdorues operatori duhet te rezervoje pjesen e skedarit te paprintuar ta vendose ne nje magazine te perkoheshme, ne kete moment te shenoje proesin si te ndaluar per momentin dhe ne kete pike tia jape printerin per perdorim nje proesi tjeter. Kur ky i fundit te kete mbaruar pune te nxjerre pjesen e paprintuar te skedarit e cila ndodhet ne magazinen e perkoheshme, ta vendose ate ne rradhen e printimit dhe me pas ta deklaroje proesin origjinal si te filluar. Ky veprim i marrjes se paisjes burim nga perdorimi per nje proes te caktuar dhe kalimin per perdorim ndaj nje proesi tjeter varet shume nga natyra e burimit. Rekuperimi ne kete menyre eshte shpesh shume i veshtire ose i pamundur. Zgjedhja e proesit qe duhet te ndalohet eshte ne vartesi se kush nga keto proese kane ne perdorim burime te cilat mund te rimeren ne perdorim ne menyre te thjeshte.

Recovery through Rollback Nese projektuesit e sistemit dhe operatoret e makinave kane njohuri mbi ngjarjet deadlock, mund te realizojne kontroll gjendjeje periodik te proeseve. Kontrolli i gjendjes se nje proesi ka te beje me shkrimin e gjendjes se nje proesi specifik ne nje skedar ne menyre te tille qe ta rikthjeme proesin ne gjendjen e meparshme. Per te qene me efektiv gjendjet e reja te proeseve nuk duhet ti mbivendosen atyre te vjetrave por duhet te rishkruhen ne skedare te rinje ne menyre te tille qe te formojme nje sekuence gjendjesh.

Kur identifikohet nje ngjarje deadlock mundet te percaktohen lehte paisjet burim te cilat nevoiten. Per realizimin e rikthimit te gjendjes normale proesi i cili ka paisjen e nevojshme ne perdorim kthehet ne nje gjendje perpara se te merte kete paisje ne perdorim duke perdorur skedaret e kontrollit te gjendjes. E gjithe puna e bere pas rikthimit te gjendjes se proesit humbet. Ne te vertete, proesi kthehet ne nje gjendje te meparshme gjate te ciles nuk e kishte akoma ne perdorim paisjen burim e cila ne kete moment i jepet per perdorim proesit qe ben pjese ne nje ngjarje deadlock. Nese proesi i cili ka rimar gjendje te me parshme kerkon serish perdorimin e kesaj paisjeje duhet te prese qe kjo paisje burim te behet e mundshme per perdorim. Rikuperim nepemjet vrasjes se proesit Megjithate menyra me e shkurter per daljen nga nje gjendje deadlock eshte shkatrrimi i proeseve qe bejne pjese ne kete ngjarje. Me pak fat proesi deadlock mund te vazhdoje por nese kjo nuk mundeson vazhdimin e ketij proesi atehere shkatrrimi i proeseve qe perbejne ciklin deadlock vazhdon deri sa cikli te shperbehet. Nje alternative tjeter eshte shkaterrimi i nje proesi qe nuk ben pjese ne cikel ne menyre qe te liroje paisjet burim ne perdorim. Ketu duhet te zgjedhim me kujdes proesin qe duhet shkaterruar ne menyre te tille qe ky proes te kete ne perdorim paisje te nevojshme per proeset ne ciklin deadlock. Per shembull supozojme nje proes qe po perdor nje printer dhe i nevoitet nje ploter dhe nje proes tjeter qe perdor ploterin por i nevoitet nje printer. Keto dy proese bejne pjese ne nje cikel deadlock. Nje proes i trete mund te mbaje ne perdorim nje printer dhe nje ploter identik me ata aktualish ne perdorim nga proeset ne deadlock. Shkatrimi i proesit te trete dhe lirimi nga perdorimi i paisjeve ne perdorim mund te kenaqe kerkesat e dy apo me shume proeseve ne deadlock. Kur eshte e mundur, eshte me mire te shkatrrosh nje proes te tille dhe ta riekzekutosh pa efekte anesore. Per shembull nje proes kompilimi mund te riekzekutohet sepse ajo cka ben eshte leximi nga nje skedar burim dhe prodhimi i nje skedari objekt. Nese ky proes shkatrrohet gjate ekzekutimit riekzekutimi i tije nuk eshte apsolutisht i influencuar nga eksekutimi i pare. Nga ana tjeter dhe nje proes update i nje baze te dhenash nuk mund te ekzekutohet per here te dyte ne menyre te sigurt. Nese ky proes shton vleren 1 tek nje rekord i bazes se te dhenave nese ky proes shkaterrohet ekzekutimi per here te dyte i tije mund te shtoje me 2 vleren e keti rekordi, cka perben nje gabim. 3.5 SHMANGJA E DEADLOCK Gjate diskutimit per identifikimin e ngjarjeve deadlock, supozuam se nje proes gjate kerkeses per paisje burim munde te kerkoje per shume te tilla ne te njejten kohe (matrica R ne figuren 3-6 ) ne shumecen e sistemeve burimet kerkohen ne rradhe. Sistemi duhet te jete ne gjendje te vendose nese ofrimi paisjes burim nga nje proes siguron vazhdimesi dhe te beje rezervimin ne rast se kjo gje eshte e sigurt. Ketu lind pyetja: A ekziston nje algoritem qe i shmang gjthmone gjendjet deadlock duke bere gjithmone zgjedhjen e duhur?

Pergjigja eshte: po mund ti shmangim deadlock por kur kemi informacionin e duhur perpara. Ne kete seksion do te ekzaminojme shmangien e gjendjeve deadlock duke zgjedhur me kujdes ofrimin e paisjeve burim per perdorim. 3.5.1 Trajektoret e burimeve Algorimet kryesore per realizimin e shmangieve te gjendjeve deadlock jane te bazuara ne konceptin e gjendjeve te sigurta. Perpara se te pershkruajme keto algorime le te hedhim nje sy mbi koceptin gjendje e sigurt te pershkruar ne menyre grafike. Megjithese ana grafike nuk perkthehet drejteperdrejte ne nje algoritem te perdorshem, ajo jep nje pamje te qarte te natyres se problemit. Ne figuren 3-8 paraqitet nje model qe trajton dy proese dhe dy burime psh. Nje priter dhe nje ploter. Akset horizotale paraqesin instruksionet e ekzekutuara nga proesi A. Akset vertikale perfaqesojne instruksionet e ekzekutuara nga proesi B. Ne /, A kerkon nje printer; ne /i i nevoitet nje ploter. Priteri dhe ploteri lirohen nga perdorimi ne 1 ^ dhe /4, respektivisht. Proesit B i nevoitet nje ploter nga I^ deri ne /7 dhe nje printer nga ify deri ne /K. do pike ne diagram perfaqeson nje status te bashkuar te dy proeseve. Si fillim statusi eshte ne p, ku asnje proes nuk ka ekzekutuar asnje intruksion. Nese skeduleri vendos te ekzekutoje ne fillim A, ne arrijme ne piken q. Ne te cilen, A ka ekzekutuar disa instruksione, kurse B asnje. Ne piken q trajektorja behet vertikale, duke treguar keshtu qe skeduleri ka zgjedhur te ekzekutoje B. Me nje proesor te vetem te gjitha trajektoret duhet te jene horizontale ose vertikale por asnjehere diagonale. Per me teper orientimi eshte gjithmone nga veriu ose lindja, asnjeher nga jugu apo perndimi. (proeset nuk ekzekutohen asnjehere mbrapsht). Kur A te kaloje trajektoren nga r te s ai kerkon printerin dhe pranohet. Kur B arrin piken t, ai kerkon plotter.

Hapesirat e hijezuara jane shume interesante. Pjesa me vija te drejtuara nga jugperendimi ne veri-lindje perfaqesojne te dyja proeset se bashku qe zoterojne printerin. Rregulli i perjashtimit ben te pamundur hyrjen ne kete zone. Ne te njejten menyre, zona e hijezuar ne formen tjeter perfaqeson te dy proeset qe zoterojne njekohesishte plotterin, dhe eshte po ashtu e pamundur. Nese sistemi futet ne hapsiren e rrethuar nga /r dhe/: ne anesore, dhe nga! /3 dhe /6 larte e poshte, ai do te futet ne deadlock kur te arrije ndermjet ol'/2 dhe /4. Ne kete pike A po kerkon ploterin dhe B printerin, dhe te dyja jane tashme ne perdorim. E gjithe hapesira eshte e pasigurt dhe ne kete zone !,olAl,4 dhe u me dalin te paqarta sipas meje per siguri shiko gjith interpretimin e grafikut sistemi nuk duhet te futet. AL tregon qe e vetmja gje qe duhet te behet eshte te ekzekutohet proesi 4 derisa te arrije ne /.t. Pas kesaj do trajektore per tek u do te vleje. Nje gje e rendesishme per te vene re eshte qe pika B po kerkon nje burim. Sistemit i takon te vendose nese ta pranoje ate apo jo. Nese behet pranimi, sistemi futet ne nje zone te pasigurt dhe ne nje deadlock. Per te shmangur deadlockun B duhet te pezullohet deri sa A te kete kerkuar dhe mbaruar pune me plotterin. 3.5.2 Gjendjet e sigurta dhe te pasigurta Algoritmin e shmangies se deadlock-eve (deshtimeve) ne mund ta studiojme duke perdorur informacionin e Fig. 3-6. Ne do cast te kohes eshte nje gjendje qe konsiston tek . A. C\ dhe R. Nje gjendje quhet e sigurt nese nuk ndodhet ne gjendje deadlock-u (deshtimi) dhe nese ka ndonje rregull te percaktuar ne te cilin do proes mund te ekzekutohet plotesisht edhe nese te gjitha papritur kerkojne menjeher numrin maximal te burimeve. Eshte e thjeshte te ilustrosh kete koncept me nje shembull duke perdorur nje burim ne Fig. 3-9(a) ku shikohet se A ka 3 instanca te burimit por mund te kete nevoje per 9. B ka momentalisht 2 por me vone do i duhen 4. Po njesoj edhe C ka 2 por mundt ti duhen 5. Ekzistojne 10 instanca te burimit, keshtu qe me 7 instanca te grumbulluara mbeten akoma 3 te lira.

Gjendja e Fig. 3-9 eshte e percaktuar sepse ekziston nje sekuence grumbullimesh qe lejojne te gjitha proeset te plotesohen. Nameiy, skeduleri thjesht mund te ekzekutoje B ekskluzivisht dersa ai te kerkoje dhe te marre 2 instanca te tjera te burimit, duke shkuar ne gjendjen e Fig. 3-9(b). Kur te jete plotesuar B ne marrim gjendjen e Fig. 3-9(c). Pastaj skeduleri mund te ekzekutoje C, duke u drejtuar te Fig. 3-9(d). Kur C te plotesohet shkojme tek Fig. 3-9(e). Tani A mund te marre gjashte instancat e burimit qe kishte nevoje dhe te plotesohet. Keshtu gjendja e Fig. 3-9(a) eshte e sigurte fale sistemit qe mund te skeduloje ne menyre te kujdesshme dhe te parandaloje deadlock-un. Tani supozojme qe kemi gjendjen fillestare te treguar ne Fig. 3-10(a), por kete rradhe -4 kerkon dhe merr nje tjeter burim, duke na dhene keshtu Fig. 3-10(b). A mund te gjejme nje sekuence qe eshte e garantuar te punoje? Le ta provojme. Skeduleri mund te ekzekutoje B derisa ai te kerkoje per te gjitha burimet te treguara ne Fig. 3-10(c).

Normalisht B perfundon dhe ne arrijme ne situaten e Fig. 3-10 (d). Ne kete pike ne kemi ngecur. Kemi tani vetem kater instanca te lira te burimit, kurse secila nga proeset aktive ka nevoje per pese te tilla. Nuk ka ndonje sekuece qe te garantoje perfundimin e ekzekutimit. Keshtu qe vendimi i grumbullimit qe levizi sistemin nga Fig. 3-10 (a) ne Fig. 3-10 (b) kaloi nga gjendja e sigurt ne ate te pasigurt. As te ekzekutosh A ose C pas fillimit ne Fig. 3-10 (b) nuk funksionon. Nga ana tjeter kerkesa /Ts nuk do ishte pranuar, h \s tani eshte nje gjendje deadlock. Po te filloje m Fig. 3-10(b) sistemi mund te ekzekutohet per nje cast. Ne fakt nje proes mund edhe te perfundoje. Per me teper, eshte e mundur qe A mund te liroje nje burim perpara se te kerkoje per te tjera duke lejuar keshtu C qe te perfundoje dhe gjuthashtu te shmange deadlock-u. Keshtu pra ndryshimi midis nje gjendje te sigurt dhe nje te pasigurt eshte se ne nje gjendje te sigurt sistemi mund te garantoje qe te gjitha proest te perfundojne gje qe nuk garantohet ne nje gjendje te pasigurt. 3.5.3 Algoritmi i Bankierit per nje burim te vetem. Nje algoritem rradhitjeje qe mund te shmange deadlock-et eshte fale Dijkastra (1965) dhe njihet si bakers algorithm, dhe eshte nje zgjerim i algoritmit te detektimit te deadlockeve te dhene ne 3.4.1. Eshte modeluar sipas menyres qe nje banke e vogel mund te nderveproje me klientet e saj te cileve u garanton linja krediti. Ajo cka ben ky algoritem eshte kontrolli per te pare nese pranimi i kerkeses con ne nje gjendje te pasigurt

. Nese ndodh, kerkesa mohohet. Nese pranimi te con ne nje gjendje te sigurt ateher ajo mbahet. Ne Fig. 3-11(a) shohim kater kliente, A, B, C dhe D, ku secilit i eshte pranuar nje numer i caktar kreditesh. Bankieri e di qe jo te gjithe klientet do te kene nevoje per maksimumin e krediteve njeheresh, keshtu qe ai ruajti vetem 10 njesi per tu sherbyer dhe jo 22.

Klientet ecin me prespektivat e tyre, duke bere vazhdimisht kerkesa. Ne nje moment te caktuar situata eshte si ne Fig. 3-11(b). Kjo gjendje eshte e sigurt sepse me 2 kreditet e mbetura bankieri mund te mohoje do kerkese pervec C1, dhe me C1 te mbaruar lirohen te katerta burimet e tij. Me kater kredite ne dore, bankieri mund te lejoje D ose 8 te marrin kreditet e nevojshme e keshtu me rradhe. Mendoni pak se cfare do te ndodhte nese nje kerkese nga B per nje kredit me shume do te ishte pranuar ne Fig. 3-11(b). Do te kishim situaten e Fig. 3-11(e), e cila eshte e pasigurte. Nese te gjithe klientet papritmas do te kerkonin maksimumin e sasise, bankieri nuk do mundte tia plotesonte kerkesen e asnjerit, dhe do te kishim nje deadlock. Nje gjendje e pasigurt sdo te thote qe sjell nje deadlock, meqe nje klient nuk ka nevoje per gjithe sasine e krediteve te disponueshme, por bankieri nuk mund te mbeshtetet tek kjo sjellje. Algoritmi i bankierit i konsideron te gjitha kerkesat ti vijne, dhe shikon nese pranimi con ne nje gjendje te sigurt. Ne se po, kerkesa pranohet; perndryshe ajo shtyhet per me vone. Ne piken H;i gjendja eshte e sigurt, bankieri kontrollon nese ka burime te mjaftueshme per te kenaqur klientet. Ne se po, sasia e krediteve supozohet te rikthehet dhe klienti me afer limitit chekohet, e keshtu me rradhe. Dhe nese sasia mund te rikthehet, do te thote qe gjendja eshte e sigurt dhe kerkesa fillestare mund te plotesohet. 3.5.4 Algoritmi i bankierit per burime te shumefishta Ky algoritem mund te pergjithsohet qe te suportoje burime shumefishe dhe kete e tregon Figura 3-12.

Ne Fig. 3-12 ne shohim dy matrica. Ajo ne te majte tregon sa burime jane momentalisht perdorur nga secili nga 5 proeset. Matrica ne te djatht tregon sa burime te tjera i duhen secilit proes qe te perfundoje. Keto matrica sjane gje tjeter pervec C dhe R nga Fig. 3-6. Ashtu si ne rastin me nje burim, proeset duhet te percaktojne totalin e burimeve qe kane nevoje para ekzekutimit, qe sistemi te llogarise matricen ne te djathte ne do rast. Te tre vektoret ne te djatht te figures tregojne burimet ekzistuese, \ burimet ne perdorim, f\ dhe burimet e lira, A. Nga ne shohim qe sistemim ka gjashte tape drives, tre ploteran kater printera, dhe dy CD-ROM Nga keto, pese tape drivers, tre plotera dhe dy CD-ROM jane momentalisht te percaktuara. Ky fakt vihet re qarte tek kater kolonat ne matricen e majte. Vektori i burimeve te gatshme eshte thjesht diferenca midis asaj cka ka sistemi dhe asaj cka eshte momentalisht ne perdorim. Tani mund te tregojme algoritmin e kontrollit nese gjendja eshte e sigurt apo jo. 1. Gjej rreshtin R nevojat e te cilit per burime jane te barabarta apo me te vogla se A. Nese nje rresht i tille nuk ekziston sistemi do te shkoje ne gjendje deadlock meqe asnje proes nuk mund te plotesohet. 2. Supozojme qe proesi i atij rreshti te zgjedhur kerkon te gjitha burimet dhe perfundon. E shenojme kete proes si te perfunduar dhe i shtojme te gjitha burimet e tij vektorit A. 3. Perserisim hapin 1 dhe 2 derisa te gjitha proeset te jene shenuar te perfunduar, ne secilin rast qe gjendja fillestare eshte e sigurt, dhe derisa te kemi deadlock ne rastet kur kjo gjendje nuk eshte e sigurt. Nese ne rastin 1 kemi shume raste zgjedhjesh, nuk ka rendesi se ke marrim te parin: Sasia e burimeve te gatshme ose behet me e madhe ose mbetet njesoj ne rastin me te keq.

Tani te kthehemi mbrapsht te shembulli i Fig. 3-12. Gjendja e castit eshte e sigurt. Supozojme qe proesi B tani kerkon nje printer. Kjo kerkese mund te pranohet sepse gjendja perfundimtare eshte perseri e sigurt (Proesi D mund te perfundoje, pastaj A ose E, e te tjerat). Tani imagjinoni qe pasi ti jepet B nje ose dy printerat e mbetur, E kerkon printerin e fundit. Pranimi i kerkeses mund te reduktoje vektorin e burimeve te vlefshme ne (1 0 0 0), gje qe con ne deadlock. Pra eshte e qarte qe kerkesa e E-se nuk duhet te pranohet per momentin. Algoritmi i bankierit u publikua per here te pare ne 1965. Qe ateher pothuajse do liber per sistemet operative e ka pershkruar ate ne detaje. Me mijera faqe jane shkruajtur per shume aspekte te ndryshme te ketij algoritmi. Por fatkeqsisht pak autor kane shprehur qe panvaresisht se teorikisht ky algoritem eshte i mrekullueshem, praktikisht eshte i pavlefshem sepse rralle ndodh qe proeset ta dine me pare se sa do jete maksimumi i burimeve qe do i nevojitet. Per me teper, numri i proeseve nuk eshte fikse, por dinamike duke variuar nga hyrja e dalja e shume perdoruesve. Gjithashtu burimet qe jan te vlefshme mund papritur te shkeputen nga sistemi. Keshtu qe ne praktike shume pak nga sistemet ekzistuese perdorin kete algoritem per shmangien e deadlock-eve. 3.6. PARANDALIMI I DEADLOCK-EVE Kemi pare qe shmangia e deadlock-eve ne thelb eshte e pamundur sepse duhet informacion rreth kerkesave ne te ardhmen te cilat nuk njihen. Si jane sistemet reale te shmangin deadlock-et? Pergjigjja eshte duke u kthyer prapa ne kater kushtet te shpallura nga Coffman et al.(1971) per te pare nese ato mund te sigurojne ndonje te dhene. Ne qofte se mund ta sigurojme ate qe te pakten nje nga keto kushte te mos jete I realizueshem atehere deadlock-et do te jene strukturisht te pamundur (Havender,1968).

3.6.1 KRITIKAT NDAJ KUSHTIT TE PERJASHTIMIT TE NDERSJELLTE Ne fillim le te kritikojme kushtin e perjashtimit te ndersjellte. Ne qofte se asnje burim nuk i caktohet nje proesi te vetem ne nuk do te kemi asnjehere deadlock (bllokim). Megjithate ,eshte e qarte se te lejosh dy proese te printojne ne te njejten kohe do te coj ne kaos .Pas spooling output-in e printerit, disa proese mund te gjenerojne output-et e tyre ne te njejten kohe. Ne kete model, proesi i vetem qe porosit materialin ne printer eshte deamon (printer deamon). Meqenese deamon nuk do te kerkoj kurre burime te tjera ne mund te eleminojme deadlock-et per printerin . Fatkeqesisht jo te gjitha pajisjet mund te bejne spooled (tabela e proesit nuk mund te jap veten plotesisht per te bere spooled). Vec kesaj konkurrenca per hapsiren ne disk mund te coj vete ne deadlock. fare do te ndodhte ne qofte se dy proese do te mbushnin secili gjysmen e hapsires ne dispozicion per spooling me output-in e tyre dhe asnjehere te mos mbaroj prodhimin e output-it ?Ne qofte se deamon eshte programuar te fillojne printimin ,perpara se i gjithe output-I te jete spooled, printeri mund te mbetet pa pune ne qofte se proesi i output-it vendos te pres disa ore perpara se te nxjerr output-in e pare. Per kete arsye deamons jane programuar normalisht te printojne vetem pasi file perfundimtar te jete i gatshem. Ne kete rast ne kemi dy proese qe kane perfunduar

pjeserisht por jo komplet output-in (prodhimin) e tyre dhe nuk mund te vazhdojne. Asnjeri proes nuk do te perfundoje, pra kemi nje deadlock ne disk. Megjithate ketu ka njefare ideje qe eshte shpesh e zbatueshme. Menjano caktimin e burimeve kur ato nuk jane absolutisht te nevonshme dhe perpiqu te sigurohesh se sado pak proese te jene ne te vertete mund te kerkojne burime

3.6.2 KRITIKAT NDAJ KUSHTIT TE MBAJTJES DHE TE PRITJES Kushti i dyte i caktuar nga Coffman duket pak me premtues. Ne qofte se ne mund te parandalojme proese te cilet mbajne burime dhe presin per me shume burime ne mund te eleminojme deadlock-e. Nje menyre per te arritur kete qellim eshte tu kerkosh te gjithe proeseve te kerkojne te gjithe burimet qe u nevoiten perpara se te fillojne ekzekutimin. Ne qofte se do gje eshte ne dispozicion proesi mund te alokoj cfardo gjeje qe te kete nevoje dhe mund te ekzekutohet deri ne fund. Ne qofte se nje ose disa nga burimet jane te zena, asnje gje nuk mund te alokohet dhe proesi duhet vetem te pres. Nje problem qe del menjehere ne kete trajtim eshte se shume proese nuk e dine se sa burime u nevoiten deri sa ato te kene filluar ekzekutimin. Ne fakt, nese ato e dine, mund te jete perdor algoritmi banker. nje problem tjeter eshte se burimet nuk do te kene nje perdorim optimal ne kete trajtim. Marrim si shembull, nje proes qe lexon te dhena hyrese nga nje shirit (tape) hyres dhe i analizon ato per nje ore dhe pastaj shkruan shiritin dales (output tape) me se miri duke thurur rezultatin. Ne qofte se te gjitha burimet do te ishin kerkuar me perpara, proesi do te bllokonte diskun e shiritit dales (output tape drive) dhe plotter-in per nje ore. Megjithate shume mainframe, grumbull sistemesh i kerkojne perdoruesit te bejne nje liste me te gjitha burimet ne linjen e pare te seciles pune.Sistemi atehere siguron menjeher te gjitha burimet dhe i mban ato derisa te mbaroj pune. Nje menyre pak e ndryshme per te thyer kushtin e mbajtjes dhe pritjes eshte duke i kerkuar nje proesi te bej kerkesen per nje burim por me pare te leshoj perkohesisht te gjitha burimet qe po mban. pastaj te provoj te, marre gjithcka ka nevoj pernjeheresh.

3.6.3 KRITIKAT NDAJ KUSHTIT TE MOSZEVENDESIMIT Te kritikosh kushtin e trete (moszevendesimin) eshte me pak premtues se te kritikosh e dytin. Ne qofte se nje proes i eshte caktuar printeri dhe eshte ne mes te printimit te output-it te tij i merret menjeher forcerisht printeri sepse ploteri qe eshte i nevojshe nuk eshte i disponueshem eshte i zene (nderlikuar) ne rastin me te mire dhe i pamundur ne rastin me te keq. 3.6.4 KRITIKAT NDAJ KUSHTIT TE PRITJES RRETHORE Na ka mbetur vetem nje kusht. Rrethi i pritjes mund te eleminohet me disa menyra. Nje menyre eshte thjesht te kesh nje rregull qe thote qe nje proes eshte i lidhur me nje

burim te vetem ne nje moment te caktuar. Ne qofte se i duhet nje burim tjeter duhet te leshoj te parin. Per nje proes qe ka nevoje te kopjoj nje file te madh nga shiriti (tape) ne printer, kjo pengese eshte e papranueshme. Nje menyre tjeter per te shmangur rrethin prites eshte te sigurojme nje numerim te te gjitha burimeve sic tregohet ne figuren 3-13 (a). tani rregulli eshte ky: proeset mund te kerkojne burime kur te duan port te gjitha kerkesat duhet te behen ne nje rend numerik. Nje proes mund te kerkoj ne fillim nje printer dhe me pas nje disk shiriti (tape drive) por ai nuk mund te kerkoj ne fillim plloter-in dhe me pas nje printer.

Me kete rregull, grafiku i alokimit te burimeve nuk mund te kete kurre nje cikel. Le te shohim se pse kjo eshte e vertete per rastin e dy proeseve, ne figuren 3-13 (b) Ne mund te kemi deadlock-e vetem nese A kerkon burimin j dhe B kerkon burimin i .Duke pretenduar qe i dhe j jane burime te ndryshme ata mund te kene numra te ndryshme. Ne qofte se i>j atehere proesit nuk i lejohet te kerkoj j sepse ai eshte me i paket se cfar ai ka.Ne qofte se i<j B nuk i lejohet te kerkoj i sepse ai eshte me i paket se cfare ai ka. Ne kete menyre deadlock-et jane te pamundur te ndodhin. Me shumfishimin e proeseve, ndiqet e njejta logjike. ne do moment nje nga burimet do te jete me larte. Proesi qe mban ate burim nuk do te pyes per burimin qe i eshte caktuar. Ai gjithashtu mund te perfundoj ose me keq mund te kerkoje nje numer me te larte burimesh te gjitha ato qe jane te disponueshme .Perfundimisht ai do te perfundoje dhe te liroj burimet e zena prej tij. Per kete shume prej proeseve te tjera mund te kapin burimet me larte dhe gjithashtu mund te perfundojne dhe ata. Me pak fjale ekziston nje plan ne te cilin te gjithe proeset mbarojne, pra asnje deadlock nuk rezulton. Nje ndryshim i vogel i ketij algoritmi eshte se hedh kerken qe burimi te jete saktesisht nje sekuene rritese, dhe thjeshte insiston qe asnje proes te mos kerkoje nje burim me te ulet se ate qe mban. Ne qofte se proesi kerkon 9 dhe 10 dhe me pas i liron qe te dy eshte efektive qe te fillosh nga fillimi keshtu qe nuk ka arsyje qe te ndaloj kerkesen per burimin 1. Megjithese renditja numerike e burimeve eleminon problemin e deadlocke-ve mund te jete e pamundur te gjesh nje rregull renditje per te kenaqur gjithkend. Kur burimet perfshijne, proes table slots, hapsiren spooler ne disk, bllokimin e rekordeve ne database dhe burimet e tjera abstrakte, numri i burimeve mund te jete aq i madhe saqe asnje renditje e mundshme nuk funksionon. Mundesite e ndryshme per te parandaluar deadlock-e jane permbledhurne fig 3-14

3.7 SHTJE T TJERA N kt pjes do t diskutojm pak eshtje t lidhura m deadlock-un (bllokimet). Kta prfshijn dy faza- bllokimi, deadlock-et (bllokim) pa burim dhe starvacioni (vdjekje nga uria).

3.7.1 DY FAZA BLLOKIMI (MBYLLJEJE) Megjithse menjanimi dhe parandalimi, q t dy nuk jane tmerrsisht premtues n eshtje kryesore, pr aplikime specifike, njihen shume algoritma perfekt pr qellime speciale. Si pr shembull, ne shume sisteme baza t dhenash (database) nj operacion q ndodh her pas here sht krkese bllokimi n disa rekorde dhe pastaj duke i rifreskuar t gjitha rekordet e bllokuara. Kur proeset e shumt jan n ekzekutim n t njjtn koh, aty sht nj rrezik real pr tu krijuar nj deadlock (bllokim). Afrimi me shpesh i prdorur sht quajtur dy-faza bllokimi (mbyllje).Ne fazn e par proesi provon t bllokoj t gjitha rekordet q ka nevoj, nj nga nj. N qoftse kjo ndodh, fillon faza e dyt performuar updatet (rifreskimet) e tij dhe zbllokuar ato. N fazn e par muk sht br nj pun e vrtet. Nse gjat fazs s par disa rekorde q ishin t nevojshme ishin tanim t bllokuara proesi i zhbllokon ato dhe fillon fazn e par nga fillimi prseri. N nj far sensi ky afrim sht si t krkosh t gjitha burimet m prpara, ose t paktn prpara se dika e pakthyeshme t ket ndodhur. N disa versione t dy faza bllokimi (mbylljeje), nuk ka zhbllokim dhe ristarto nese bllokimi sht ndeshur gjat fazs s par. Ne kto versione mund t ndodh deadlock. Megjithat kjo strategji n pergjithsi nuk sht e aplikushme. N sistemet n kohe reale dhe sistemet e kontrollit t proeseve, pr shembull, sht e papranueshme q thjesht t prfundosh nje proes n mes sepse burimi nuk sht i disponueshm dhe te fillosh gjithka nga fillimi. Gjithashtu nuk sht e pranuashme t fillosh prseri n qoftse proesi gjen mesazhet e shkruara ose te lexuara ne nje rrjet,update-on (rifreskon) fajlat ose gjithka tjetr q nuk mund te prsritet. Algoritmi punon vetm n ato situata ku programuesi ka rregulluar me shume kujdes gjerat q programi mund t ndaloj n do pik gjat fazs s par dhe t ristartoj. Shum aplikacione nuk mund t jene strukturuar n kt mnyr.

3.7.2 DEADLOCK-ET PA BURIME E gjith puna jon e gjertanishme sht e prqndruar n burimet e deadkock-ut. Nj proes dshiron dika q nj proess tjetr ka dhe duhet t pres derisa i pari ta lshoj at. deadlock-u mund te ndodh edhe ne situata t tjera, gjithsesi, duke prfshir kta duke mos ngatrruar fare burimet.Pr shembull, mund t ndodh q dy proese deadlock t presin

njri tjetrin pr t br dika. Kjo ndodh shpesh me semafort. N kapitullin 2 ne treguam shembuj n t ciln ka pr t kaluar posht ne dy semafor, tipiku mutex dhe nje tjetr si ai n qofte se kto mund te bhen n nj rend t gabuar, mund t rezultoj nj deadlock (bllokim).

3.7.3 STARVACIONI Nj problem i lidhur drejtprdrejt me deadlock-un sht starvacioni. N nj system dinamik, krkesa pr burime ndodhin gjat gjith kohs. Disa politika jan t nevojshme pr t marr nj vendim rreth kush t marr, cilin burim, dhe kur. Kjo politik, megjithese duket e arsyeshme mund t oj q shum proeseve t mos u shrbehet kurr megjithese ato nuk jan deadlock-e. Si pr shembull, konsideroni alokimin e printerit. Imagjinoni q sistemi prdor shum lloj algoritmash per te siguruar q alokimi i printerit te mos oj n deadlock (bllokim). Tani supozoni q disa proese e duan at n t njjtn koh. Cili prej tyre do ta marr at? Nje algoritem alokimi i mundur sht tia jap at proesit me file-t m t vegjl per tu printuar (duke spozuar q informacioni sht i gatshm). Ky trajtim maksimizon numrin e klientve (proeseve) te gzuar dhe duket i drejte. Tani gjykoni se far ndodh n nj system t zn ku nj proes ka nje file gjigand pr tu printuar. do her q printeri sht i lir, sistemi zgjedh proesin me file-t me te shkurter. N qoft se aty sht nj nivel constant me proese me file t shkurtr, proesit me file-n gjigand nuk do ti caktohet kurre e drejta pr t printuar. Ai thjesht paracaktohet t ngordh urie deri n vdekje, t pres deri n fund(t zgjas pr nj koh t paprcaktuar, sadoq nuk sht i bllokuar). Starvacioni mund t shmanget nga prdorimi,i pari q vjen i pari shrbehet, politikat e alokimit t burimeve. Me kt trajtim proeset presin q me i gjati te sherbehet hers tjetr. N rrjedhn e duhur t kohs, secili proes i dhn vendos prfundimisht t bhet m i vjetr dhe kshtu merr burimet e nevojshme.

KAPITULLI I KATR

MENAXHIMI I MEMORJES

Memorja eshte nje burim qe duhet menaxhuar me shume kujdes. Me kalimin e kohes, kompjuterat per shtepi, ne kohet e sotme, kane njemije here me shume memorje se IBM7094, kompjuteri me i madh ne bote i viteve 1960, programet po behen me te shpejte se memorja. Le te citojme ligjin e Parkinsonit: Programet shtrihen per te mbushur memorjen e gatshme per ti mbajtur. Ne kete kapitull do te studiojme se si sis temi operativ menaxhon memorjen. Ajo qe do programues do te donte, eshte nje memorje pafundesisht e madhe dhe e shpejte, qe nuk i humb te dhenat gjate mungeses se energjise. Meqe jemi te memorja, pse nuk kerkojme qe ajo te jete edhe e pakushtueshme? Fatkeqesisht teknologjia nuk na siguron memorje te tilla. Si rrjedhoje, pjesa me e madhe e kompjuterave kane nje hierarki te memorjes me nje sasi shume te vogel dhe te shtrenjte te memorjes te paqendrueshme dhe te shpejte cache, dhjetera MB shpejtesi mesatare, nje mim mesatar, memorje te paqendrueshme RAM dhe dhjetera e qindra GB te nje disku te lire dhe te ngadalte te qendrueshem. Eshte puna e sistemit operativ te kordinoje punen e seciles prej ketyre memorjeve. Pjesa e sistemit operativ qe ben te mundur menaxhimin e memorjes quhet menaxhues i memorjes (memory menager). Puna e tij eshte te regjistroje se cila pjese e memorjes po vihet ne pune si dhe cila jo, per ta lidhur ate me proeset dhe per ta shkeputur prej tyre kur kane perfunduar si dhe per te bere swaping midis memorjes vetjake dhe diskut kur ajo eshte teper e vogel per te perballuar proeset. Ne kete kapitull do te studiojme varietet menaxhimi memorjesh duke u nisur nga me te thjeshtat tek me te sofistikuarat. Sic e theksuam ne kapitullin e pare, historia e kompjuterave perserit veten.

4.1 Menaxhimi baze i memorjes Sistemi i menaxhimit te memorjes ndahet ne dy klasa: ato qe transportojne proeset midis memorjes vetjake dhe hardiskut dhe ato qe nuk e bejne nje gje te tille. Keto te fundit jane me te thjeshta, ndaj do te studjohen te parat.Me vone do te studjojme swap-in dhe paging. Keto te fundit shkaktohen prej pamundesis se memorjes vetjake per te perballuar

proese shume te medha njekohesisht. Ne qofte se memoria kryesore zgjerohet aq shume sa nuk ka me vend, argumentat ne favor te nje lloji te skemes se menaxhimit te memories ose te tjera mund te zhduken. Nga ana tjeter softwar-et po behen edhe me te shpejte se vete memorja, duhet nje menaxhim i memorjes shume eficient. Ne vitet 80, pati shume universitete qe perdoren sistemin e ndarjes se kohes me nje dyzine perdoruesish me 4 MB VAX. Tani Microsofti rekomandon qe te kete te pakten 64 MB per nje perdorues te vetem te sistemit Windows 2000. Trendi drejt multimedias kerkon akoma me shume memorje, keshtu qe nje menaxhim akoma me i mire do te duhet ne dekadat qe vijojne.

4.1.1 Monoprogramimi pa swap dhe paging

Skema me e thjeshte e menaxhimit te memorjes eshte proedimi i nje programi te vetem ne nje kohe te caktuar, duke e ndare memorjen midis atij programi dhe sistemit operativ. Ne figuren 4-1 jane treguar tre variante te kesaj skeme. Sistemi operativ mund te ndodhet mbi RAM, tek ROM ose driver-at e pajisjeve ndodhen ne ROM dhe pjesa tjeter ne RAM. Modeli i pare shte implementuar ne kompjuerat mainframe si dhe tek minikompjuterat. Modeli i dyte eshte perdorur tek kompjuterat palmtop si dhe tek ata embeded. Modeli i trete eshte perdorur tek kompjuterat e hershem desktop(per MS-DOS), ku pjesa e sistemit e ndodhur ne RAM quhej BIOS (Basic Input Output System)

Figura 4-1.Tre menyra te organizimit te memmorjes me nje system operativ dhe me nje proces perdorues. Kur sistemi eshte organizuar ne nje menyre te tille, vetem nje proes ne nje kohe te caktuar mund te proedoje. Ne astin kur perdoruesi shtyp nje komande, sistemi operativ kopjon programin e kerkuar nga hard disku ne memorje dhe e ekzekuton ate. Kur proesi perfundon sistemi operativ gjeneron menjehere nje karakter dhe pret per nje komande tjeter. Me te marre komanden, ai e ngarkon programin e ri ne memorje duke ia mbishkruar te parit.

4.1.2 Multiprogramimi me particione fikse

Per vese ne sistemet te nderfutura, monoprogramimi veshtire se mund te perdoret. Sistemet moderne lejojne proese te shumefishta qe veprojne ne te njejten kohe. Te kesh proese te shumefishta qe veprojne ne te njejten kohe do te thote qe, kur nje proes eshte duke pritur pajisjen I/O te perfundoje, nje tjeter eshte duke perdorur CPU. Keshtu, multiprogramimi rrit perdorimin e CPU. Serverat e rrjetit, gjithnje kane aftesine qe te veprojne me proese te shumefishta (per kliente te ndryshem) ne te njejten kohe.Tashme edhe makinat klient e kane kete aftesi. Menyra me e thjeshte per te realizuar multiprogramimin eshte duke e ndare memorjen ne n pjese(mundesisht jo te barabarta). Kjo ndarje per shembull.mund te behet manualisht kur hapet sistemi. Kur nje pune eshte per tu realizuar, ajo vendoset ne radhen e inputeve ne pjesen nje pjese te vogel, por me madhesi te mjaftuesheme per ta mbajtur. Duke qene se pjeset kane nje madhesi fikse, ajo qe nuk eshte perdorur per ndonje pune te caktuar, shkon dem. Ne fig.4-2 (a) shohim sesi duket nje sistem i tille.Disavantazhi i vendosjes se puneve ne pjese fikse behet i dukshem kur nje radhe me pjese te medha eshte bosh dhe nje tjeter me pjese te vogla eshte e mbushur plot si ne rastin e pjeseve 1 dhe 3 ne fig 4-2(b). Sa here qe pjesa lirohet, puna me e afert qe ndodhet perballe radhes mund te ngarkohet ne pjesen bosh dhe te realizohet. Duke qene qe nuk eshte e deshirueshme qe te shkoje dem nje pjese per nje pune te vogel, ndiqet nje tjeter strategji qe te kerkohet neper te gjithe radhen e inputeve per nje pun t mjaftueshem te madhe per tu ngarkuar ne pjesen e madhe. Vihet re qe algoritmi i fundit veohet kundrejt puneve te vogla si te ishte e pavlere patja e nje particioni te plote, nga ana tjeter zakonisht pelqehet qe punes me te vogel (shpesh punet interaktive) ti jepet sherbimi me i mire, jo me i keqi.

Figura 4-2.(a) Memorje me pjese fikse me radha inputesh te ndara per cdo pjese.(b)Memorje me pjese fikse me nje radhe te vetme inputesh. Nje menyre zgjidhjeje per kete problem eshte te kesh ne gjendje nje pjese shume te vogel. Nje pjese e tille e vogel do te lejonte qe aty te proedoheshin si pune te vogla, pa pasur nevoje per te alokuar pjese me te medha. Nje perafrim tjeter eshte te kesh nje rregull i cili nuk e lejon nje pune te caktuar te proedoje me shume se k here.Sa here qe ajo proedon, ajo merr nga nje pike. Kur ajo ploteson k pike,ajo nuk proedon me. Ky sistem me particione(pjese) fikse, i vendosur nga operatori ne mengjes dhe qe nuk ndryshon me, eshte perdorur gjeresisht nga OS/360 ne kompjuterat e medhenj mainframe.U quajt MFT (Multiprograming with Fixed number of Tasks). Nuk ka veshtiresi per tu kuptuar dhe eshte i thjeshte, gjithashtu, per tu implementuar: puna e ardhur vendoset ne nje radhe derisa nje pjese e pershtatshme te jete e gatshme per te. Aty puna ngarkohet dhe procedon derisa te perfundoje. Ne ditet e sotme pak sisteme operative e implementojne kete model.

4.1.3 Multiprogramimi me modelim

Kur perdoret multiprogramimi, perdorimi i CPU mund te jete i qarte. Ne qofte se raporti i proedimit te puneve ne kohe eshte rreth 20%, me pese proese ne kohe te caktuar,CPU do te ishte e zene gjate gjithe kohes. Ky model eshte ne menyre jo shume optimiste, pasi jo te peste proceset do te presin per pajisjet I/O ne te njejten kohe. Ne model me mire eshte ta shohesh perdorimin e CPU nga nje pikepamje me probabilistike. Supozojme qe nje proes pret gjate nje fraksioni p te kohes se tij per

procedimin e pajisjeve I/O. Me n procese ne nje kohe te caktuar ne CPU, probabiliteti i pritjes se tyre per pajisjet I/O eshte pn.Perdorimi i CPU jepet nga formula: Perdorimi i CPU=1-pn Figura 4-3 tregon grafikisht perdorimin e CPU ne funksion te n e quajtur shkalla e multiprogramimit.

Figura 4-3.Perdorimi i CPU si funksion i numrit te proceseve ne memorje Nga figura eshte e qarte qe proeset shpenzojne 80% te kohes se tyre per te pritur pajisjet I/O. Duhet te jene me pak se 10 proese ne memorje ne menyre qe CPU te harxhoje me pak se 10%. Kur kupton qe nje proes interaktiv eshte duke pritur per nje perdorues te shtype dicka nga nje terminal e ai eshte ne gjendjen e pritjes per I/O, duhet te jete i qarte fakti qe harxhimi i 80% te kohes eshte mese normal. Edhe ne sistemet batch, proeset qe perdorin sasi te madhe te diskut perqindja e tyre eshte po aq, madje edhe me shume. Duhet te behet e ditur qe modeli probabilistik i sapo pershkruar eshte vetem nje perafrim. Ai thjesht nxjerr perfundimin qe n proese jane te pavarura, ka do te thote qe eshte e pranueshme qe ne 5 proese te ngarkuara ne memorje qe veprojne njekohesisht, realisht 3 te jene duke vepruar dhe dy te tjere duke pritur. Por me nje CPU te vetme nuk mund te kemi 3 proese qe veprojne njekohesisht, keshtu qe nje proes qe behet gati nderkohe qe CPU eshte e zene, do ti duhet te prese. Keshtu proeset nuk jane te pavarura. Mund te ndertohet nje model me i pershtatshem duke perdorur teorine e radheve por ne momentin kur bejme multiprogramim lejohet qe proeset te perdorin CPU edhe pse ajo do te operoj me minimumin e shpejtesise, sigurisht, per sa kohe eshte i vlefshem, edhe pse linjat e fig 4-3 jane paksa te ndryshme. Edhe pse modeli i mesiperm i fig.4-3 eshte i thjeshte, ai gjithsesi mund te perdoret per te bere parashikime te perafruara per performancen e CPU. Supozojme, per shembull qe kemi nje memorje prej 32 MB, me nje sistem operativ qe merr 16 MB dhe secili program i perdoruesit qe merr rreth 4 MB. Keto permasa lejojne 4 programe te perdoruesit qe te

alokohen ne memorje njekohesisht. Me nje sasi prej 80% te pritjes per pajisje I/O, ne kemi nje perdorim te CPU prej 1-0.84 ose gati 60%. Duke shtuar rreth 60% te memorjes qe e lejojne sistemint te kaloje nga nje model me kater rruge per multiprogramim ne nje tjeter me 8 rruge, performanca e CPU rritet ne 83%. Ne fjale te tjera shtimi prej 16 MB do ta rrise throughput-in me 38%. Duke shtuar edhe 16MB te tjera do ta oje throughput-in ne 93%, pra nje rritje me 12%. Duke perdorur kete model, perdoruesi do te mendoje qe shtimi i pare ne memorje do te ishte nje investim i mire por i dyti, jo.

4.1.4 Analiza e performances se sistemit me multiprogramim

Modeli i diskutuar me siper eshte perdorur per te analizuar sistemet batch. Le te marrim ne konsiderate, per shembull,nje kompjuter qendror ku ne punet e te cilit, 80% eshte pritje per pajisjet I/O. Ne nje dite te veante, punet jane mbivendosur si ne fig 4-4(a). Puna e pare, e cila vjen ne oren 10 00 kerkon 4 min nga koha e CPU.Me 80% pritje per pajisjet I/O ,puna e ardhur perdor vetem 12 sek nga koha e CPU perdo minute qe ajo pret ne memorje, edhe pse ska pune te tjera qe konkurojne me te per ko hen e CPU. 48 sek e tjera jane shpenzuar duke pritur per procedimin e pajisjeve I/O. Keshtu nje pune e caktuar duhet te qendroje se paku per 20 min ne memorje qe te perfitoje 4 min nga koha e CPU, edhe ne mungese te nje konkurrence

Prej ores 10:00 deri ne oren 10:10 puna e pare eshte e vetme ne memorje dhe perfiton vetem 2 min per procedimin e saj. Kur puna e dyte ngarkohet ne memorje ne oren 10:10, perdorimi i CPU rritet nga 0.20 ne 0.36, fale shkalles se larte te multiprogramimit (shiko fig 4-3).Gjithsesi me ane te skedulimit (round-robin), secila pune shfrytezon gjysmen e

CPU. Keshtu secila pune merr 0.18 min nga puna e CPU e caktuar per cdo min qe ajo eshte ne memorje.Duhet nenvizuar qe cdo shtese e nje pune te dyte ne memorje i kushton punes se pare vetem 10% te performances se saj. Nga 0.2 per cdo min nga koha e CPU ajo tashme perfiton 0.18 per minute nga koha e saj. Ne oren 10:15 ngarkohet ne memorje puna e dyte. Ne kete ast puna e pare ka perfituar 2.9 min nga koha e CPU dhe puna e dyte ka perftuar 0.9 min. Me nje multiprogramim me 3 rruge, secila pune perfton 0.16 min nga koha e CPU per cdo min nga koha reale, sic eshte treguar ne fig 4-4(b).Nga ora 10:15 ne oren 10:20 secila nga tre punet perftojne 0.8 min nga koha e CPU. Ne oren 10:20 ngarkohet puna e katert.Fig 4-4(c) tregon sekuencen e plote te ngjarjeve.

4.1.5 Rivendosja dhe mbrojtja

Multiprogramimi na shfaq dy probleme esenciale qe mund te zgjidhen rivendosja dhe mbrojtja. Shiko fig 4-2. Nga figura duket qarte qe pune te ndryshme do te proedojne ne adresa te ndryshme. Kur nje program eshte linkuar(per shembull. programi kryesor, programi i shkruar nga perdoruesi dhe librari proedurash te kombinuara ne nje hapesire te vetme adresash), linkuesi duhet ta dije se ne cfare adrese duhet te filloje programi. Per shembull.supozojme qe instruksioni i pare eshte nje thirrje proedure ne adresen absolute 100 ne file-in binar te gjeneruar nga linkuesi. Ne se programi eshte ngarkuar ne pjesen e pare( ne adresen 100K), ky instruksion do te kerceje ne adresen absolute 100, e cila eshte ne brendesi te sistemit operativ. Ajo ka nevojitet eshte nje thirrje nga 100K+100K. Ne qofte se programi eshte ngarkuar ne pjesen e dyte, ai do te mbahet si nje thirrje ne 200K+100 e keshtu me radhe. Kjo situate eshte e njohur si problemi i rivendosjes. Nje zgjidhje e mundshme eshte te modifikohen instruksionet sa here qe nje program eshte ngarkuar ne memorje. Programi i ngarkuar ne pjesen e pare ka 100K plus adresen ku eshte vendosur, ata te vendosur ne pjesen e dyte kane 200K plus adresen e keshtu me radhe. Per te realizuar rivendosjen duke ngarkuar programe ne kete menyre, linkuesi duhet te prefshije ne programin e tij binar nje liste te bitmap i cili tregon se cilat fjale te programit jane adresa qe duhen perfshire ne rivendosje dhe cilat jane opcode-e, konstante apo fjale te tjera qe nuk kane nevoje per rivendosje.OS/MFT punon ne kete menyre. Rivendosja gjate ngarkimit te programeve nuk e zgjidh problemin e mbrojtjes. Nje program dashakeqes mund te ndertoje nje instruksion te ri duke kercyer me pas tek ai. Edhe pse programet preferojne adresat absolute ne memorje sesa ato relative ne regjistra, nuk asgje qe ta pengoje nje te tille qe te ndertoje nje instruksion qe lexon ose shkruan nje fjale ne memorje. Ne nje sistem me shume perdorues, eshte shume e padeshirueshme qe te shkruhen apo te lexohen ne memorje gjera qe i perkasin perdoruesve te tjere. Zgjidhja qe IBM gjeti per te mbrojtur 360 ishte ta ndante memorjen ne blloqe prej 2KB dhe te shenonte ne secilin prej tyre nje kod mbrojtjeje prej 4 bit. PSW (Program Status

Word) permbante nje celes prej 4 bit. Hardware-i 360 zbulonte cdo perpjekje te proceseve ne veprim qe aksesonte memorjen kodi i te cilit ndryshonte nga ai PSW. Duke qene se vetem sistemi operativ ka te drejte te ndryshoje kodet e mbrojtjes, proceset e perdoruesit jane parandaluar te interferojne me njeri-tjetrin dhe me sistemin operativ. Nje zgjidhje alternative per te dyja problemet: rivendosjen dhe mbrojtjen eshte mobilizimi i makines me dy regjistra hardware-ik special, te quajtura regjistrat baze dhe limit. Kur proesi eshte skeduluar, regjistri baze ngarkohet me adresen e fillimit te pjeses se tij dhe regjistri limit ngarkohet ne gjatesine e pjeses se tij. do adrese e memorjes qe gjenerohet automatikisht ka permbajtjen e regjistrit baze e cila eshte shtuar aty para se te dergohej ne memorje. Keshtu, ne se vlera e permbajtjes se regjistrit baze eshte 100K,nje instruksion thirrjeje 100 eshte kthyer efektivisht ne nje instruksion thirrjeje 100K+100, duke mos e modifikuar vete instruksionin. Adresat gjithashtu kontrollohen prej regjistrit limit per tu siguruar qe nuk do te tentojne te adresojne memorjen jashte pjeses se percaktuar. Hardware-i i mbron keto regjistra nga modifikimi prej programeve te perdoruesit. Disavantazhi i kesaj metode eshte shtimi dhe krahasimi ne do reference ne memorje. Krahasimet jane te shpejta, por shtimi eshte i ngadalte fale kohes qe kerkon mbartja.Vetem ne qofte se jane perdorur cikle speciale te shtimit. Nje CDC-6600-superkompjuteri i pare ne bote- ka perdorur kete skeme. INTEL 8088 i perdorur per kompjuterat PC IMB, nje version me te dobet te kesaj skeme, regjistrat baze, por jo ato limit. Tashme po perdoret nga pak kompjutera.

4.2 SWAPING

Te organizosh memorjen ne nje sistem batch ne particione fikse, eshte e thjeshte dhe efektive.do pune ngarkohet ne pjesen perkatese kur vjen ne krye te radhes. Ajo qendron ne memorje derisa te kete mbaruar veprimin e saj. Per sa kohe ka mjaftueshem pune qe qendrojne ne memorje dhe qe ta mbajne te zene CPU, nuk ka arsye qe te perdorim ndonje metode tjeter me te komplikuar. Ne sistemet me ndarje te kohes ose me PC qe jane te orientuar grafikisht, situata eshte me ndryshe. Ndonjehere nuk ka mjaftueshem memorje per ti mbajtur ata ne nje gjendje aktive. Keshtu proeset ekstra vendosen ne disk per tu sjelle me pas ne menyre dinamike. Mund te perdoren dy perafrime te pergjithshme ne menaxhimin e memorjes, ne varesi te gatishmerise se hardware-it. Strategjia me e thjeshte, e quajtur swaping, konsiston ne sjelljen e dy proceseve ne teresine e tyre ne menyre qe te veprojne dhe me pas te kthehen serish ne disk. Strategjia tjeter, e quajtur memorje virtuale, i lejon programet te proedojne edhe kur ato jane pjeserisht ne memorjen kryesore. Me poshte do te studjojme swaping, kurse ne seksionin 4.3 do te studjojme memorjen virtuale. Menyra e operimit e sistemit swaping eshte treguar ne fig.4-5. Fillimisht vetem procesi A eshte ne memorje.Me pas proceset B dhe C jane krijuar ose swaped nga disku. Ne

fig.4-5(d) eshte procesi A qe shkon ne disk. Me pas vjen D dhe eshte B qe largohet.Se fundi eshte A qe rikthehet perseri ne memorje. Meqene se A eshte kthyer tashme ne nje pozicion tjeter, adresa qe e permban do te ripozicionohet. Kjo behet si nga ana e software-it kur programi merret nga disku, ashtu sikurse nga hardware-i kur ai ekzekutohet.

Figura 4-5. Alokimi i memorjes ndryshon kur proceset vendosen ne te dhe largohen prej saj. Pjeset e vijezuara tregojne memorjen e paperdorur. Ndryshimi kryesor midis particioneve fikse ne fig.4-2 dhe atyre te ndryshueshme ne fig.4-5,eshte qe numri, pozicioni dhe madhesia e particioneve ndryshon ne menyre dinamike sa here qe proceset shkojne e vijne, nderkohe ne formen me particione fikse madhesia e tyre nuk ndryshon. Fleksibiliteti i te mos pershtaturit ne particione fikse te cilat mund te jene shume me te vogla apo shume me te medha sec duhet, permireson perdorimin e memorjes, por gjithashtu komplikon ngarkimin dhe shkarkimin ne memorje si dhe gjithashtu edhe regjistrimin ne te. Kur swaping krijon shume holles ne memorje eshte e mundur qe ti kombinosh ato ne nje me te madh duke i shtyre proeset sa me poshte qe te jete e mundur. Kjo teknike eshte e njohur si kompaktesimi i memorjes(memory compaction). Kjo zakonisht nuk perdoret sepse kerkon nje kohe shume te madhe CPU. PER SHEMBULL: nje makine prej 256MB, qe kopjon 4B ne cdo 40 n/sek, i duhen 2.7 sek per kompaktesuer te gjithe memorjen. Nje eshtje qe ia vlen te perqendrohesh eshte se sa memorje duhet alokuar per proeset e krijuara ose qe largohen( bejne swaping). Ne se proceset jane krijuar ne nje madhesi fikse qe nuk ndryshon asnjehere, alokimi eshte i thjeshte: sistemi operativ alokon ekzaktesisht ate ka duhet,as me shume e as me pak. Ne se, sidoqofte segmentet e te dhenave mund te zgjerohen, per shembull, duke e alokuar memorjen ne menyre dinamike nga nje heap, si ne do gjuhe programimi, problemi lind sa here qe procesi tenton te rritet. Ne qofte se gjendet nje hole fqinje me proesin, atehere

ajo mund te alokohet duke e lejuar proesin te zgjerohet pertej permasave te tij pergjate hole-it.Nga ana tjeter, ne qofte se procesi eshte fqinje me nje proes tjeter, ky duhet te zhvendoset ne nje hole te madh mjaftueshem per te, ose proeset e tjera duhet te bejne swaping ne menyre qe te lirojne vend per te ne memorje. Ne qofte proceset nuk mund te zgjerohen ne memorje ose swaping nuk eshte i mundur pasi nuk ka vend mjaftueshem ne memorje, atehere proeset duhet te presin ose do te vriten. Ne qofte se pritet qe proeset te zgjerohen gjate kohes qe ata veprojne, mund te jete nje ide e mire qe te alokosh nje memorje te vogel ekstra sa here qe proesi eshte larguar (swaping) apo zhvendosur, per te reduktuar kohen shtese qe lidhen me zhvendosjen apo me proeset swaping qe ndodhin kur nuk ka pershtatje ne alokimin ne memorje. Gjithsesi, kur swaping ndodh ne disk, ky proes ndodh vetem ne memorjen qe eshte perdorur aktualisht, pasi eshte e demshme per memorjen shtese. Ne fig.4-6(a) paraqitet nje konfigurim i memorjes ne te cilin hapesira shtese eshte alokuar nga dy procese.

Fiigra 4-6.(a) Alokimi i nje hapesire per nje segment shume te gjate te dhenash.(b) Alokimi i nje hapesire per nje stack dhe nje segment te dhenash te ndryshueshem. Ne qofte se nje proese kane dy segmente qe rriten , per shembull. nje segment te dhenash qe perdoret si heap per variablat qe alokohen dhe leshohen me pas nga memorja dhe nje segment stack per variablat normale lokale si dhe adresat qe kthehen, nje alternative kjo e sugjeruar nga fig.4-6(b).Ne kete figure ne shohim se do proes ka nje stack ne fillim te memorjes se alokuar, i cili rritet per poshte si dhe nje segment te dhenash fqinje me programin tekst, i cili rritet per nga siper. Memorja midis tyre mund te perdoret edhe per segment. Ne qofte se perfundojne se ekzekutuari, edhe proeset do te vendosen ne nje hole me nje hapesire te mjaftueshme, duke u larguar nga memorja derisa te krijohet nje hapesire e mjaftueshme ne memorje, ose ne te kundert do te vriten.

4.2.1 Menaxhimi i memorjes me bitmap

Kur memorja shenohet ne menyre dinamike, sistemi operativ duhet ta menaxhoje ate. Ne terma te pergjithshme, ka dy menyra per te regjistruar perdorimin e memorjes: bitmap dhe listat e lira . Ne kete seksion dhe ne tjetrin qe vijon do te shohim keto dy metoda. Me ane te bitmap-it memorja eshte e ndare ne pjese alokimi unike, ndoshta te vogla sa disa fjale ose sa disa kilobyte. Per cdo pjese te alokuar ka nje bit ne bitmap, i cili eshte 0 ne qofte se ajo pjese eshte e lire si dhe 1 ne se ajo eshte e zene. Figura 4-7 tregon pjese te memorjes dhe bitmap-in korrespondues.

Figura 4-7.(a) Nje pjese e memorjes me pese procese dhe tre hole. Shenjat tick tregojne pjese te alokimit te memorjes. Pjeset e vijezuara( 0 te bitmap-i) jane te lira.(b)Bitmap-I korrespondues.(c) Po i njejti informacion ne nje liste. Madhesia e pjeses se alokuar eshte nje eshtje shume e rendesishme e dizenjimit. Sa me e vogel te jete pjesa e alokuar aq me i gjere eshte bitmap-i. Gjithsesi, edhe me nje pjese te alokuar prej 4B, 32 bit memorje do te kerkonte vetem nje bit te map-it. Nje ,memorje prej 32n bit do te perdorte n bit te map-it, keshtu qe bitmap-i do te merrte persiper vetem 1/33 te memorjes. Ne qofte se pjesa e alokuar eshte zgjedhur e madhe, bitmap-i do te jete me i vogel, por do te ohej dem nje pjese e rendesishme e memorjes ne pjesen e fundit te procesit kur madhesia e ketij te fundit nuk eshte nje shumefish i sakte i pjeses se alokuar. Metoda bimap tregon nje menyre te thjeshte per te regjistruar fjale ne nje sasi fikse te memorjes, sepse madhesia e bitmap-it varet nga madhesia e memorjes dhe madhesia e pjeses se alokuar. Problemi kryesor ne kete rast eshte qe kur vendoset per te sjelle k pjese procesi ne memorje, nje menaxhues i memorjes duhet te kerkoje per bitmap i cili duhet

te gjeje k bitet 0 qe vijojne ne map. Kerkimi per bitmap per nje proces te nje gjatesie te caktuar, eshte nje proes i ngadalte. Ky eshte nje argument kunder bitmap-it.

4.2.2 Menaxhimi memorjes me listat e linkuara

Nje tjeter metode per te mirembajtur memorjen eshte ajo e listave te linkuara, apo segmentet e alokuara apo te memorjes se lire, ku nje segment mund te jete nje proces apo edhe nje hapesire( hole) midis dy proceseve. Memorja e figures 4-7 eshte perfaqesuar me modelin e listave te linkuara ne fig.4-7(c). do entry ne liste specifikon nje hole(H) ose nje process(P), adresen ku fillon, gjatesine si dhe nje pointer ne adresen ku ndodhet entry tjeter. Ne shembullin me poshte lista e segmenteve gjenerohet prej adresave. Kjo menyre ka avantazhin qe kur nje proes perfundon ose largohet eshte shume i vlefshem update-im i listes. Nje proces qe perfundon, normalisht ka dy fqinje (me perjashtim te rasteve kur ndodhet ne krye apo ne fund te memorjes). Keto mund te jene ose procese ose hole, ka na on ne kater kombinimet e fig.4-8. Ne fig.4-8(a), update-imi i listes kerkon zevendesimin e P nga nje H. Ne fig.4-8(b) dhe (c) dy entry jane perfshire ne nje te vetme dhe lista behet me nje entrty me te shkurter. Ne fig.4.8(d) tre entry jane shkrire ne nje dhe dy grupe jane larguar na lista. Meqene se tabela e proeseve qe slot per proeset qe perfundojne, ajo do te pointoje ne listen entry per vete proesin, eshte me e pershtatshme ta kesh listen si nje liste dyshe te linkuar sesa nje liste te vetme si ne fig.4-8(c). Kjo strukture e ben me te lehte gjetjen e entry-t te ri si dhe mund te dallohet lehtesisht ne se eshte e nevojshme nje shkrirje.

Figura 4-8. Kater kombinime fqinje per nje proces X qe perfundon. Kur proeset dhe hole-t jane vendosur ne nje liste qe gjenerohet prej adresave, mund te perdoren nje sere algoritmesh per te alokuar memorjen gjate krijimit te nje proesi te ri( ose nje procesi te vjeter qe shkeputet nga disku). Nxjerrim perfundimin qe menaxheri i memorjes e di se sa memorje duhet alokuar. Algoritmi me i thjeshte eshte first fit. Menaxheri i memorjes skanon pergjate listes se segmenteve derisa te gjeje nje hole qe

eshte mjaftueshem i madh. Ky i fundit ndahet ne dy pjese, nje per proceset dhe nje per memorjen e paperdorur, perve rastit te nje pershatjeje ekzakte. First fit eshte nje algoritem shume i shpejte pasi kerkon sa me pak qe te jete e mundur. Nje variant me i vogel i algoritmit me siper eshte next fit. Ai funksionon ne te njejten menyre si first fit me perjashtim te faktit qe ai vezhgon derisa te gjeje nje hole te pershtatshem. Heren e ardhshme kur ai thirret per te per nje kontroll ai e nis atje ku e kishte lene, ne vend qe ta filloje nga e para, si ne rastin e algoritmit te pare. Simulimi nga Bays (1977) tregon qe algoritmi i dyte ka performance me te keqe se i pari. Nje tjeter algoritem i mire eshte best fit. Ai kerkon neper te gjithe listen dhe gjen hole-in me te vogel te pershtatshem.Ne vend te te ndaje nje hole te madh qe mund te duhet me vone ai kerkon nje te tille qe te jete sa me i vogel dhe, gjithashtu i pershtatshem. Si nje shembull te first fit dhe te best fit merrni ne konsiderate shembullin e fig.4-7. ne qoftese kerkohet nje bllok i nje madhesie 2, first fit do te alokonte hole-in 5 ndersa best fit hole-in 18. Best fit eshte me i ngadalte se first fit pasi i duhet te kerkoje neper te gjithe listen sa here qe thirret .Ne nje fare menyre, uditerisht rezulton te harxhoje me shume memorje se sa first fit apo next fit pasi tenton ta mbushe memorjen me hole te vegjel dhe te panevojshme. Ndersa first fit gjeneron hole te medha. Ne qofte se duam te kemi te bejme me problemin e ndarjes ne pjese ekzakte te pershtatshme, mund te perdorim algoritmin worst fit, i cili merr hole-in me te madh te mundshem dhe te gatshem ne menyre qe ta ndaje ate ne pjese me te vogla, perseri te medha. Simulimi ka treguar qe as kjo nuk eshte ndonje ide e mire. Te kater keto algoritme mund te pershpejtohen duke i ndare listat e proceseve nga ato te hole-ve. Ne kete menyre ata do te dedikonin te gjithe energjine e tyre ne kerkimin e holeve dhe jo te proceseve. mimi qe duhet te paguhet per kete rritje te shpejtesise gjate alokimit eshte kompleksiteti shtese si dhe ngadalesia gjate dealokimit te memorjes duke qene se nje segment i tere duhet te largohet nga lista e proceseve dhe te vendoset ne ate te hole-ve. Ne qofte se mbahen lista te ndryshme per preset dhe hole-et, ajo e hole-ve duhet regulluar ne madhesi per ta bere me te shpejte algoritmin best fit. Kur ky algoritem kerkon nje hole ne liste, nga me i vogli tek me i madhi, ne astin qe do te gjeje nje te pershtatshem, ai e di qe hole-i eshte me i vogli i gjetur i pershtatshem per punen. Nuk eshte me i nevojshem nje kerkim i metejshem, si ne rastin e nje liste te vetme. Me nje liste te hole-ve best fit dhe first fit jane njelloj te shpejte ndersa next fit eshte pointless. Kur hole-t mbahen ne lista te veanta nga proeset, eshte i mundur nje optimizim i vogel dhe i mire. Ne vend qe te kemi nje strukture te veante te dhenash per te mbajtur listen e hole-ve, si ne fig.4-7(c), mund te perdoren vete hole-t. Fjala e pare e secilit hole eshte madhesia e tij, ndersa e dyta do te jete nje pointer per hyrjen qe vijon. Nyjet e listes se fig.4-7(c), te cilat kerkojne tre fjale dhe nje bit (P/H) nuk nevojiten me.

Nje tjeter algoriten alokimi eshte quick fit, i cili permban lista te veanta per madhesite qe perdoren me shume. Per shembull.mund te kete nje tabele me n entry, ne te cilat e para eshte nje pointer tek koka e listes me hole prej 4 KB, e dyta nje pointer ne listen me hole prej 8KB dhe e treta nje pointer ne listen me hole prej 12 KB e keshtu me radhe. Hole-t per shembull, 21 KB mund te futen ne nje liste prej 20 KB, por edhe mund te futen ne nje liste te vecante me nje numer tek hole-sh. Me ane te ketij algoritmi eshte shume e shpejte te gjesh hole te nje madhesie te pershtatshme, por ka ate avantazhin e njejte qe kane te gjitha skemat qe gjenerohen nga madhesia e hole-ve. Ne fjale te tjera, kur nje proces perfundon apo largohet, eshte e kushtueshme te kerkosh per fqinjin e tij ne se mund te behet ndonje shkrirje e mudshme. Por, ne se nuk behet nje shkrirje, memorja do te ndahej ne fragmente te vogla hole-sh, ne te cilat nuk do te pershtatej asnje proces.

4.3 Memorja virtuale

Shume vjet me pare, njerezit jane perballur me programe te cilat ishin shume te medha per memorjen e dhene. Zgjidhja qe eshte perdorur me shpesh eshte ndarja e progaramit ne pjese te quajtura nenshtresa. Nenshtresa 0 do te fillonte te vepronte e para. Pasi te kishte perfunduar, ajo do te therriste nje tjeter nenshtrese. Disa sisteme nenshtresash kishin nje kompleksitet te larte, duke lejuar njekohesisht nenshtresa shumefishe ne memorje. Nenshtresat mbaheshin ne disk dhe hynin e dilnin nga memorja me ane te sistemit operativ ,ne menyre dinamike ne se ishte e nevojshme. Edhe pse puna e mesiperme behej nga sistemi, ndarje e progarmit ne pjese duhej bere nga vete programuesi. Ndarja e programeve te medhenj ne pjese me te vogla kerkonte shume kohe si dhe ishte shume e merzitshme. Nuk kaloi shume kohe derisa u gjet menyra per tia kaluar kete pune kompjuterit. Metoda qe u paraqit (Fotheringham, 1961) u be e njohur si memorja virtuale. Idea kryesore qe qendronte pas kesaj metode ishte fakti qe kombinimi i programit, i te dhenave dhe e stakut kerkon nje memorje shume te gjere .Per kete arsye sistemi, pjeset e programit qe perdoren aktualisht, i mban ne memorjen kryesoren ndersa pjesen tjeter ne disk. Per shembull, nje program prej 16MB mund te veproje ne nje makine prej 4MB, mjafton te dime te zgjedhim pjeset e duhura (prej 4MB) te programit per memorjen kryesore, duke e lene pjesen tjeter per ne disk. Memorja virtuale mund veproje edhe ne sisteme me multiprogramim, me bite dhe pjese te shume programeve ne memorje njekohesisht. Kur nje program eshte duke pritur per nje pjese te tij te sillet ne memorje, ai pret per pajisjet I/O, ndaj nuk mund te veproje,keshtu qe CPU-ja i dorezohet nje programi tjeter, ashtu si ne cdo proces me multiprogramim.

4.3.1 Faqosja ( Paging)

Shume sisteme te memorjes virtuale perdorin tekniken e quajtur paging, e cila do te pershkruhet tani. Ne shume kompjutera, ekziston nje set adresash ne memorje te prodhuara nga programet. Kur nje program perdor nje instruksion te tipit: MOV REG,1000 kjo behet me qellim qe te kopjoje permbajtjen e memorjes me adrese 1000 tek regjistri REG (ose anasjelltas, ne varesi te kompjuterit). Adresat mund te gjenerohen duke perdorur indeksimin, regjistrat baze, regjistrat segmente si dhe metoda te tjera.

Figura 4-9. Pozicioni dhe funksionim i MMU-se. Ketu MMU-ja eshte shfaqur si te jete pjese e qarkut te CPU-se, ashtu sic eshte ditet e sotme. Gjithsesi, mund te jete ne nje qark me vete si vite me pare. Keto adresa te gjeneruara prej programeve jane quajtur adresa virtuale dhe formojne hapesiren e adresave virtuale. Ne kompjuterat pa memorje virtuale, adresa virtuale vendoset direkt ne bus-in e memorjes dhe ben qe fjala me te njejten adrese ne memorjen fizike te shkruhet apo te lexohet. Kur perdoret memorja virtuale, adresa virtuale nuk shkon direkt ne bus-in e memorjes. Ato ne fakt shkojne ne MMU ( Memory Menagement Unit) e cila harton adresat virtuale mbi memorjen fizike sic eshte ilustruar ne fig.4.9. Ne fig.4-10 eshte treguar nje shembull shume i thjeshte se si funksionon kjo faqosje. Ne kete shembull kemi nje kompjuter qe gjeneron adresa 16-bit, nga 0 ne 64 KB.Keto jane adresa virtuale. Ky kompjuter ka vetem 32KB te memorjes fizike, keshtu, megjithese programet mund te shkruhen, ato nuk mund te ngarkohen plotesisht ne memorje dhe te

veprojne me pas. Nje pamje teresore e programit duhet, gjithsesi, te jete prezente ne disk, ne menyre qe pjese te tij te merren sa here te jete e nevojshme. Hapesira e adresave virtuale ndahet ne pjese me te vogla te quajtura pages (faqe). Pjeset koresponduese ne memorjen fizike quhen page frame (kampjone faqesh).Page-t dhe page frame-t kane gjithnje te njejten madhesi. Ne kete shembull ato jane 4 KB, por madhesia e faqeve nga 512 B ne 64 KB eshte perdorur ne sistemet reale. Me 64 K hapesire adresash virtuale dhe 32 K te adresave fizike, ne perftojme 16 faqe virtuale dhe 8 page frame. Transferimet midis RAM-it dhe diskut gjithmone behen ne njesi faqesh.

Figura 4-10. Lidhja midis adresave virtuale dhe atyre te memorjes fizike jepet nga tabela e faqeve. Kur programi tenton te aksesoje adresen 0 duke perdorur instruksionin: MOV REG, 0 Adresa virtuale 0 dergohet ne MMU.MMU-ja sheh ne se ka vendosje te adreses virtuale ne faqen 0( nga 0 ne 4095), e cila perputhet me harten e saj ne ne page frame 2 (nga 8192 ne 12287) .Pra transformohet adresa ne 8192 dhe nxirret duke u vendosur me pas ne bus. Memorja nuk di asgje ne lidhje me MMU dhe vetem sheh kerkesen per lexim apo shkrim te adreses 8192. Nderkohe MMU-ja ka hartuar te gjitha adresat virtuale nga 0 ne 4095 ne adresat fizike nga 8192 ne 12287. Ne menyre te ngjashme nje instruksion i tille: MOV REG, 8192

transformohet ne : MOV REG, 24576 sepse adresa virtuale 8192 ndodhet ne faqen e dyte virtuale dhe kjo faqe i korrespondon page frame-it 6 (nga 24576 ne 28671).Si shembull i trete adresa virtuale 20500 ndodhet 20B nga fillimi i faqes virtuale 5( me adresa virtuale nga 20480 ne 24575) dhe korrespondon adreses fizike 12288+20=12308. Ne vetvete, kjo aftesi per ti permbledhur keto 16 faqe virtuale ne do njeren prej page frame-ve duke ndryshuar harten e MMU-se nuk e zgjidh problemin e qe perben fakti qe hapesira e adresave virtuale eshte me e gjere se memorja fizike. Duke qene se kemi vetem 8 page frame, vetem 8 nga faqet virtuale te fig.4-10 hartohen ne memorjen fizike. Te tjeret te shfaqur me kryq ne figure, nuk hartohen. Ne hardware-in aktual nje bit present/absent ( i pranishem ose jo) tregon se cilat faqe jane prezente ne memorje. fare ndodh ne se programi perdor nje faqe te pahartuar duke perdorur instruksionin: MOV REG, 32780 i cili eshte biti i 12 midis faqes virtuale (duke filluar nga 32768)? MMU-ja e ve re qe faqa e 12 nuk eshte e hartuar (ne figure eshte e treguar me kryq) dhe ben qe CPU te kape sistemin operativ. Ky veprim quhet page fault .Sistemi operativ merr nje page frame pak te perdorur dhe e shkruan permbajtjen e saj ne disk. Me pas merr faqen virtuale qe i korrspondon page framet te sapo marre, ndryshon harten dhe rinis instruksionin e kapjes. Per shembull.ne qofte se sistemi operativ ka vendosur te evituar page frame-in e pare, ai do te ngarkoje faqen virtuale 8 ne adresen fizike 4K dhe ben dy ndryshime ne harten e MMU-se. Fillimisht do te shenoje sit e pa hartuar hyrjen e faqes se pare virtuale, ne menyre qe te kape do akses ne adresat virtuale midis 4K dhe 8K.Me pas do te mund te zevendesoje kryqin ne hyrjen e faqes virtuale 8 me nje 1, keshtu qe kur te ri ekzekutohet nje tjeter instruksion kapjeje, do t mund te vendose nj lidhje midis adreses virtuale 32780 me adresen fizike 4180. Tani le te shqyrtojme brendesine e MMU-se qe te shohim se si funksionon ajo dhe te tregojme se perse kemi zgjedhur te perdorim nje madhesi faqeje qe eshte fuqi e 2-it.Ne fig.4-11 ne shohim nje shembull te adreses virtuale 8196 (0010000000000100 ne forme binare), e cila eshte hartuar duke perdorur harten e MMU-se te fig.4-10. Adresat 16biteshe qe vijne, ndahen ne nje numer faqesh prej 4-bit dhe 12-bit offset. Me 4-bit per numrin e faqeve, ne kemi 16 faqe, dhe me 12-bit per offset-in, ne mund ti adresojme te 4096 bytet ne nje faqe. Numri i faqeve eshte perdorur si nje indeks ne tabelen e faqeve (paqe table) duke i shtuar numrin e page frame-it qe i korrespondon asaj faqeje virtuale Ne qofte qe biti present/absent eshte 0, behet nje kapje ne sistemin operativ. Ne qofte se biti eshte 1 numri i page frame-it i gjetur ne tabelen e faqeve ne rendin rrites 3-bit nga regjistrat e output-it se bashku me 12-bitet offset, te cilat kopjohen te pamodifikuara nga adresa virtuale .Se bashku ato formojne nje adrese fizike prej 15-bitesh. Regjistri outputit vendoset ne busin e memorjes ashtu si dhe adresa fizike e memorjes.

4.3.2 Tabela e faqeve (Page tables)

Ne rastin me te thjeshte, hartimi i adresave virtuale ne ato fizike eshte si e pershkruam me pare. Adresat virtuale ndahen ne nje numer faqesh virtuale (ne bite sipas rendit rrites) dhe nje offset (me bite sipas rendit rrites).Per shembull. me nje adrese prej 16-bit dhe me nje madhesi te faqes prej 4 KB, kater bitet e mesiperme do te specifikojne nje nga 16 faqet virtuale dhe 12 bitet e meposhteme do te specifikojne offset-in ne byte( nga 0 ne 4095) neper faqen e selektuar. Gjithsesi nje ndarje ne 3, 5 apo ne cdo numer bitesh per faqe eshte gjithashtu i mundur. Ndarje te ndryshme ojne ne madhesi te ndryshme faqesh.

Figura 4-11.Operacioni i brendshem i MMU-se me 16 faqe 4-kB Numri i faqve virtuale eshte perdorur si Indeks ne tabelen e faqeve per te gjetur entry-n per ate faqe virtuale. Prej entry-t ne tabelen e faqeve gjendet numri i kampjoneve te faqeve. Ky numer i bashkangjitet sipas rendit rrites numrit te offset-it, duke zevendesuar numrin e faqeve virtuale ne menyre qe te formoje nje adrese fizike e cila me pas dergohet ne memorje. Qellimi i tabeles se faqeve eshte hartimi i faqeve virtuale ne kampjone faqesh. Matematikisht, tabela e faqeve eshte nje funksion me numrin e faqeve virtuale si argument dhe me rezultat numrin fizik te kampjoneve.Duke perdorur rezultatin e ketij funksioni, fusha e faqeve virtuale ne adresen virtuale mund te zevendesohet me nje fushe me kampione faqesh duke formuar nej adrese fizike ne memorje.

Prve ketij pershkrimi te thjeshte, duhen perballur dy eshtje te rendesishme. 1. Tabela e faqeve mund te jete ekstremisht e gjere. 2. Hartimi mund te jete shume i shpejte. Pika e pare rrjedh nga fakti qe kompjuterat moderne perdorin adresa virtuale me se paku 32 bit. Le, le te themi, 4 KB madhesi faqeje, nje hapesire adresash me 32 bit ka 1 milion faqe dhe nje hapesire adresash 64-bit ka akoma me shume se 135 mund te konceptojme ne. Me 1 milion faqe ne hapesiren e adresave virtuale, tabela e faqeve mund te kishte 1 milion entries. Kujtoni q do proces ka tabelen e tij te faqeve( pasi ka hapesiren e tij te adresave virtuale). Pika e dyte eshte nje rrjedhoje e faktit qe hatrimi nga virtual ne fizik duhet bere ne cdo reference ne memorje. Nje instruksion tipik eshte ajo fjale dhe shpesh nje operand i memorjes. Si rrjedhoje jane te nevjshme 1,2 apo me shume referenca ne tabelat e faqeve per do instruksion . Ne qofte se nje instruksion kerkon, te themi 4 n/sek, referenca ne tabelen e faqeve duhet bere se paku cdo 1 n/sec pr te shmangur piken e vdekjes. Nevoja per te pasur nje hartim te shpejte dhe te gjere eshte nje kufizim shume i rendesishem ne menyren se si ndertohen kompjuterat. Megjithate problemi eshte akoma me serioz me makinat e nivelit me te larte, eshte gjithashtu nje shtje jo shume e kushtueshme, kur kosto dhe mimi/shpejtesi e performances jane kritike. .Ne kete seksion dhe ne ata qe vijojne do te trajtojme ndertimin e tabelae te faqeve ne menyre me te detajuar si dhe nje numer zgjidhjesh hardware-ike te cilat jane perdorur ne kompjuterat e sotem. Ndertimi me i thjeshte (se paku konceptual) eshte te kemi nje tabele te vetme faqesh qe konsistojne ne nje sasi regjistrash te shpejte hardware-ik, me nje entry per do faqe virtuale, te indeksuar me numrin e faqes virtuale, sic tregohet ne fig.4-11.Kur fillon nje proes, sistemi operativ ngarkon regjistrat me ane te tabeles se faqeve, i marre ky nga nje kopje e mbajtur ne memorje. Gjate ekzekutimit te proesit, nuk jane me te nevojshme referencat ne memorje per tabelen e faqeve. Avantazhet e kesaj metode jane qe kjo eshte e drejtperdrejte si dhe nuk kerkon referenca ne memorje gjate hartimit. Disavantazhi i saj eshte fakti i te qenurit potencalisht e kushtueshme (ne qofte se tabela e faqeve eshte e gjere). Ngarkimi i nje tabele te tere faqesh ne do konteks te sajin ndikon ne performance. Po te kalojme ne ekstremin tjeter, tabela e faqeve mund te ngarkohet e gjitha ne memorjen kryesore. I gjithe hardware-ri, kerkon nje regjister te vetem qe pointon ne fillim te tabeles se faqeve. Ky model lejon qe harta e memorjes te jete e ndryshueshme duke ringarkuar vetem nje regjister. Sigurisht qe ekziston disavantazhin e te kerkuarit me shume se nje reference ne memorje per te lexuar do entry ne tabelen e faqeve gjate ekzekutimit te do instruksioni. Per kete arsye, ky perafrim perdoret rralle ne formen e tij te paster, por me poshte mund te shqyrtojme disa perafrime qe sjellin nje performance me te mire.

Tabelat e faqeve me shume nivele

Ne menyre qe te mund te perballen me problemin e magazinimit te shume tabelave te faqeve, shume kompjutera perdorin tabelat e faqeve me shume nivele. Nje shembull i thjeshte eshte treguar ne fig.4-12. Ne fig.4-12 (a) kemi te bejme me nje adrese virtuale prej 32-bitesh e cila eshte ndare ne 10-bit fushe PT1, 10-bit fushe PT2 si dhe 12-bit fushe offset-i. Duke qene se offset-i eshte 12-bit atehere faqet jane 4 KB, ndaj kemi nje total prej 220 faqesh gjithesej.

Figura 4-12.(a) Nje adrese 32-bit me dy fusha te tabeles se faqeve.(b )Tabela faqeve me dy nivele.

Sekreti i kesaj metode eshte shmangia e te mbajturit te te gjithe tabelave te faqeve ne memorje. Ne veanti, ato qe nuk jane te nevojshme nuk duhen mbajtur aty. Supozojme,

qe nje procesi i nevojiten 12 MB dhe 4 MB me te siperm nevojiten per stack-un, ato qe vijojne per te dhenat dhe 4 te fundit per programin tekst. Midis pjeses se siperme te te dhenave dhe fundit te stack-ut ndodhet nje hole i madhe qe nuk perdoret. Ne fig.4-12 (b) shohim se si nje tabele faqesh me dy nivele funksionon ne kete shembull. Ne te majte kemi nje tabele faqesh me nivel te siperm me 1024 entry, qe i korrespondojne fushes 10-bit PT1.Kur nje adrese virtuale prezantohet ne MMU, ajo nxjerr fillimisht fushen PT1 dhe e perdor fushen e saj si nje indeks ne tabelen e faqeve me nivel te siperm. Secila nga keto 1024 entry perfaqeson 4 M pasi e gjithe hapesira e adresave virtuale prej 4 G shte coptuar ne pjese prej 1024 bytes. Entry e lokalizuar nga indeksimi ne tabelen e faqeve me nivel te siperm i bashkangjitet adreses apo numrit kampjon te faqes se nje tabele me nje nivel te dyte. Entry 0 i nje tabele me nivel te siperm pointon ne tabelen e faqeve per nje program tekst, entry 1 per te dhena ndersa ajo e 1024 per stack-un. Entry-t e tjera nuk perdoren. Fusha PT2 eshte tashme e perdorur si nje indeks ne tabelen e selektuar te faqeve me nje nivel te dyte ne menyre qe te gjeje numrin kampjon te asaj faqeje. Si shembull, do te marrim ne konsiderate nje adrese virtuale prej 32-bitesh 0x00403004 (4,206,596 ne decimal), i cili eshte 12,292 bytes te dhena. Kesaj adrese virtuale i korrespondon PT1=1, PT2=2 dhe offset=4. MMU fillimisht perdor PT1 si nje indeks per tabelen me nje nivel te siperm dhe perfton nje entry 1, e cila i korrespondon adresave nga 4M ne 8M. Me pas ajo perdor PT2 per te indeksuar tabelen me nivel te dyte te sapo gjetur dhe perfton nje entry 3, e cila i korrespndon adresave nga 12288 ne 16383 midis atyre 4M chunk (me adresa absolute nga 4,206,592 ne 4,210,687). Kjo entry permban numrin kammpjon te faqes me adrese virtuale 0x00403004. Ne qofte se ajo faqe nuk ndodhet ne memorje, biti present/absent ne entry-n e abeles se faqeve do te behet zero duke shkaktuar nje mungese te faqes (page fault). Ne qofte se faqja do te ndodhet ne memorje numri i kampjonit te faqes i marre nga tabela e faqeve me nivel te dyte kombinohet me offset-in (4) duke ndertuar nje adrese fizike. Kjo adrese vendoset ne bus dhe dergohet ne memorje. Ajo ka shte per tu shenuar nga fig.4-12 eshte fakti qe, edhe pse hapesira eadresave permban mbi 1 milion faqe, vetem 4 tabela faqesh nevijiten tamam: tabela me nivel te siperm, tabela me nivel te dyte nga 0 ne 4M, ajo nga 4 deri ne 8M dhe maksimumi me 4M.Bitet present/absent 1021 entry-t te tabeles me nivel te siperm vendosen ne 0, duke shkaktuar nje mungese faqej, sigurisht ne se ajo aksesohet ndonjehere. Me tu shfaqur kjo, sistemi operativ do te vereje qe procesi po tenton ti referohet memorjes, gje ka ai nuk eshte i autorizuar ta beje dhe sistemi do te ndermarre nje veprim te tille si eshte dergimi i nje sinjali apo vrasja e procesit. Ne ket shembull ne kemi zgjedhur nje sere numrash per madhesi te ndryshme dhe e kemi marre PT1 te barabarte e PT2 por ne jeten e perditshme jane te mundshme edhe vlera te tjera. Tabelat e faqeve me dy nivele te fig.12 mund te zgjerohen deri ne nivele, kater apo me shume. Nivelet shtese sjellin me shume fleksibilitet, por eshte i dyshimte kompleksiteti shtese kur kalohet ne mbi tre nivele.

Struktura e nje entry ne nje tabele faqesh

Le te kthehemi tani nga struktura e nje tabele faqesh ne gjeresi, ne detajet e nje entry ne nje tabele faqesh. Shtrirja ekzakte e nje entry eshet ne varesi te larte nga makina, por struktura e informacionit aty eshte praktikisht e njejte ne do makine. Ne fig.4.13 jepet nje shembull i nje entry ne tabelen e faqeve. Madhesia varet nga kopmjuteri ne kompjuter, por 32-bit eshte nje madhesi normale. Fusha me e rendesishme eshte numri kampion i faqes (page frame number). Ne fund te fundit qellimi i hartimit eshte lokalizimi i ketij numri. Prane tij kemi bitin present/absent. Ne qofte se ky bit eshte 1, entry eshte e vlefshme dhe mund te perdoret. Ne qofte se eshte 0, faqja virtuale se ciles i perket entry nuk eshte aktualisht ne memorje. Te aksesosh nje entry ne nje tabele faqesh ku ky bit eshte 0 do te shkaktoje nje page fault.

Figura 4-13. Nje entry tipike ne nje tabele faqesh.

Biti i mbrojtjes tregon se fare lloj aksesi eshte i lejuar. Ne rastin me te thjeshte, kjo fushe permban nje bit, me 0 ne se kemi te bejme me operacion shkrim/lexim dhe 1 ne se kemi te bejme vetem me operacion lexim. Nje rregullim me i sofistikuar eshte te kesh e besh me tre bite, dy te parat per aftesim te shkrimit dhe leximit dhe fundit per ekzekutim te faqes .Bitet e modifikuar dhe te referuar regjistrojne do perdorim te faqes. Kur eshte shkruar mbi nje faqe, hardware-i autmatikisht ndryshon bitin e modifikuar. Ky bit ka vlere kur sistemi operativ vendos te kerkoje nje kampion faqeje. Kur faqja nuk eshte e modifikuar (eshte e piset), ajo do te rishkruhet perseri ne disk. Ne se nuk eshte e modifikuar (eshte e paster), thjesht mund te braktiset perderisa kopja ne disk eshte e vlefshme. Biti zakonisht eshte quajtur dirty bit, pasi tregon gjendjen e faqes. Biti i referuar ndryshon sa here ne i referohemi nje faqeje, per shkrim apo per lexim.Vlera e tij e ndihmon sistemin operativ te shmange ndonje page fault te mundshem. Faqet qe nuk jane perdorur ndonjehere jane kandidate me te mire se ato qe jane perdorur me pare. Ky bit luan nje rol te rendesishem ne algoritmat e zevendesimit te faqeve, te cilat do te studiohen me vone ne kete kapitull.

Me ne fund, biti i fundit lejon qe fshehja te jete disa bite per faqen. Kjo forme eshte e rendesishme per ato faqe qe hartohen ne pajisjet regjistra me shume se ne memorje. Ne se sistemi operativ perfshihet ne nje cikel duke pritur per pajisje I/O qe ti pergjigjen komandes se sapo dhene, eshte e rendesishme qe hardware-i te marre fjale nga pajisja dhe jo te perdore nje kopje te vjeter. Me ane te ketij biti, caching nuk aftesohet me. Makinat qe kane hapesira I/O te ndryshme dhe nuk perdorin hartimin I/O te memorjes kete bit nuk e kane te nevojshem. Mbaj mend qe adresa e diskut e perdorur per ta mbajtur kete faqe kur ajo nuk gjendet ne memorje nuk eshte pjese e tabeles se faqeve. Ky arsyetim eshte i thjeshte. Tabela e faqeve mban vetem informacionin qe i nevojitet hardware-it per te perkthyer adresat virtuale ne adresa fizike. Informacioni qe i nevojitet sistemit perativ per te perballuar page fault-et gjendet ne tabelat software ne brendesi te sistemit operativ.Hardware-i nuk ka nevoje per te.

4.3.3 TLB s

Ne shume skema te hartimit, tabelat e faqeve mbahen ne memorje, fale permasave te medha te tyre. Potencialisht, ky ndertim ka nje ndikim te madh ne performance. Merrni ne konsiderate nje instruksion qe kopjon nje regjister tek nje tjeter. Ne mungese te hartimit, ky instruksion i referohet vetem memorjes per te marre nje tjeter instruksion.Me ane te hartimit, jane te nevojshme referime te tjera ne memorje per te aksesuar tabelen e faqeve.Meqene se shpejtesia e ekzekutimit varet nga shpejtesi me te cilen CPU kap instruksionet dhe te dhenat nga memorja, te besh nga dy referime ne tabelat e faqeve per memorje e redukton performancen me 2/3. Ne kushte te tilla, askush nuk do ta perdorte kete metode. Dizenjuesit e kompjuterave ishin ne dijeni te ketij problemi dhe gjeten nje zgjidhje. Zgjidhja u bazua ne fatin qe shume programe tentonin te benin nje numer te madh referimesh ne nje numer te madh faqesh te vogla. Keshtu vetem nje numer i vogel tabelash faqesh lexoheshin dhe pjesa tjeter thjesht mbetej jashte loje. Zgjidhja ishte vendosja ne kompjutera i nje pajisjeje te vogel hardware-ike ne menyre qe hartimi i adresave virtuale ne ato fizike te behej aty, pa pasur nevoje per aksesim ne tabela te faqeve. Pajisja e quajtur TLB (Table Lookaside Buffer) ose, si zakonisht memorje shoqeruese, eshte ilustruar ne fig.4.14. Ajo gjendet zakonisht ne brendesi te MMU-se dhe konsiston ne nje numer te vogel entry-sh, tete ne kete shembull, por rralle me shume se 64. Cdo entry permban informacion mbi faqen duke perfshire ketu edhe numrin e faqes virtuale, nje bit qe ndryshon kur faqja modifikohet, kodin e mbrojtjes (leje mbi leximin, shkrimin dhe ekzekutimin) dhe numrin kampion te faqes fizike ne te cilen kjo faqe eshte lokalizuar. Nje bit tjeter tregon nse nje entry eshte e vlefshme (ne perdorim) apo jo.

Figura 4-14.Nje TLB pe te pershpejtuar faqosjen

Nje shembull qe gjeneron nje TLB si ne fig.4-14 eshte nje proces qe gjndet ne nje cikel qe pershkon faqet virtuale 19, 20 dhe 21, keshtu keto TLB entry kane kode mbrojtjeje per lexim dhe ekzekutim. Te dhenat qe perdoren ne ate kode ndodhen ne faqet 129 dhe 130. Faqja 140 permban indekset e perdorura ne llogaritjet e te dhenave. Se fundi, stack-u ndodhet ne faqet 860 dhe 861. Le te shohim tani se si funksionon TLB. Kur ne MMU prezantohet nje adrese virtuale per perkthim, hardware-i kontrollon per te pare ne se numri i faqes se saj virtuale ndodhet ne TLB duke e krahasuar ate me te gjitha entry-t njekohesisht (ne paralel). Ne se ka perputhje dhe aksesimi nuk i dhunon bitet e mbrojtjes, kampioni i faqes merret direkt nga TLB, pa qene e nevojshme te shkojme tek tabela e faqeve. Ne se faqja virtuale ndodhet ne TLB por instruksioni kerkon te shkruaje mbi nje faqe vetem te lexueshme, atehere kemi nje dhurim te bitit te mbrojtjes dhe nuk lejohet aksesi, njelloj si te tabela e faqeve. Rast interesant eshte kur numri i faqes virtuale nuk gjendet tek TLB. MMU-ja e zbulon nje gje te tille dhe ben nje kontroll te zakonshem ne tabelen e faqeve. Ajo perjashton nje entry ne TLB dhe e zevendeson ate me nje entry ne tabelen e faqeve te sapo zbuluar. Keshtu, ne se ajo faqe eshte perdorur me pare, heren e dyte ajo rezulton si nje goditje ne memorje dhe jo si nje mungese. Kur nje entry eshte purged nga TLB, biti i modifikuar kopjohet ne entry-n e tabeles se faqeve ne memorje. Vlerat e tjera jane, sakaq atje. Kur TLB ngarkohet nga tabela e faqeve, te gjitha fushat merren nga memorja.

Menaxhimi software-ik imemorjes Deri tani, kemi supozuar qe memorjet me faqe virtuale kane tabela faqesh te njohura nga hardware-i, plus nje TLB. Me kete model, menaxhimi I TLB dhe perballja me gabimet ne te do te merreshin persiper nga harware-i i MMU-se. Nderhyrja ne software ndodh vetem kur kemi nje mungese faqeje ne memorje.

Ne te kaluaren, nje supozim i tille ishte i vertete. Gjithsesi, shume makina moderne te RISC duke perfshire edhe SPARC, MIPS, ALPHA dhe HPPA bejne te gjitha perafresisht nje menaxhim software-ik. Ne makina te tilla entry-t ne TLB behen vetem nga sistemi operativ. Kur ndodh nje mungese ne TLB, ne vend qe te ngarkohet MMU-ja me detyre e gjetjes se faqes perkatese ne memorje, tashme gjenerohet nje sinjal (TLB fault) dhe problemi i kalohet sistemit operativ. Sistemi duhet te gjeje faqen, te zhvendose nje entry nga TLB, ta zevendesoje me nje tjeter dhe te rinise instruksionin qe deshtoi me pare. Sigurisht, te gjitha keto duhet te behen ne menyre manuale pasi sinjalet e gabimit ne TLB ndodhin me shpesh sesa ne tabelat e faqeve. uditerisht, ne se TLB eshte mjaftueshem e gjere (64 entry le te themi) pr t reduktuar mungesat, menaxhimi i software-it te TLB rezulton te jete eficent. Perfitimi me i madh ketu sht nje MMU me e thjeshte e cila liron nje hapesire te konsiderueshme ne qarkun e CPU-se per cache apo per forma te tjera qe kerkojne performance. Menaxhimi softwareik i TLB eshte diskutuar nga Uhliget al. (1994). Jane zhvilluar strategji te ndryshme per te permiresuar performancen ne makina qe aplkojne menaxhimin softaware-ik te TLB. Nje prej tyre tenton te zvogeloje mungesat ne TLB si dhe pasojat qe shkakton kjo mungese (Bala et al.1994). Per t redukruar mungesat, ndonjehere sistemi operativ perdor intuiten e tij per te gjetur se cila do te jete faqja qe do te perdoret ne vijim dhe per te ngarkuar paraprakisht entry-t nga tabela e faqeve ne TLB. Per shembull, kur nje proces klient i dergon nje mesazh procesit server ne te njejten makine, kerkohet qe serveri te veproje menjehere. Duke e ditur kete, nderkohe qe kryhet procesi i dergimit, sistemi mund te kontrolloje ku ndodhen kodi i serverit, te dhenat dhe faqet e stack-ut duke i hartuar ato perpara se te ndodhe ndonje gabim ne TLB. Nje menyre normale per te vepruar me nje mungese ne TLB, si ne hardware ashtu edhe ne software, eshte te shkosh ne tabelen e faqeve dhe te kryesh nje operacion indeksimi per te lokalizuar faqen qe mungon. Problemi ne nje kerkim e tille ne software eshte se faqja qe mban tabelen e faqeve mund te mos ndodhet ne TLB duke shkaktuar nje tjeter gabim ne TLB gjate procesit keto gabime mund te reduktohen duke mbajtur nje cache software ne entry-t e TLB ne nje vendodhje fikse, faqja e se ciles ndodhet gjithnje ne TLB. Duke kerkuar me pare ne kete cache, sistemi operativ mund te reduktoje mungesat ne TLB.

4.3.4 Tabelat e invertuara te faqeve

Tabelat tradicionale te faqeve te pershkruara deri tani kerkojne nje entry per do faqe virtuale, duke qene se jane indeksuar nga numri i faqes virtuale. Ne se hapesira e adresave konsiston ne 232 bytes, me 4096 byte per faqe, atehere nevojiten mbi 1 milion entry te tabelave te faqeve. Duke marre minimumin, tebela e faqeve duhet te kishte te pakten 4MB. Ne sisteme me te gjera, kjo shifer eshte ndoshta e mundshme.

Gjithsesi, duke qene se kompjuterat 64 bit-sh po bhen m te zakonshem, situata ndryshon ne menyre drastike. Ne se hapesira e adresave tashme eshte 264 byte, me faqe prej 4KB, do te na duhej nje tabele faqesh me 252 entry. Ne se cdo entry eshte 8 byte, tabela do te kishte mbi 30milion GB. Bllokimi i 30 milion GB vetem per page table nuk mund te behet, as tani dhe as per shume vite te tjera. Si rrjedhoje do ta na duhet nje zgjidhje tjeter per hapesirat e faqeve virtuale prej 64bit. Nje zgjidhje e tille do te ishte tabela e invertuar e faqeve. Ne nje model te tille kemi nje entry per cdo kampion faqeje ne memorjen reale, ne karahasim me rastin kur kemi nje entry per cdo faqe te hapesires se adresave virtuale. Per shembull, me 64 bit adresa virtuale, nje faqe prej 4 KB dhe me nje RAM prej 256 MB, nje tabele faqesh e invertuar kerkon vetem 65.536 entry.Entry regjistron se cili proces apo faqe virtuale eshte lokalizar ne kampionin e faqes. Edhe pse tabelat e invertuara te faqeve shmangin shperdorim te madh te memorjes, te pakten, kur hapesira e adreses virtuale eshte me e gjere se memorja fizike, ata kane nje ane te erret: perkthimi virtual-fizik behet shume me i veshtire.Kur procesi n i referohet faqes virtuale p, hardware-i nuk mund ta gjeje me faqen fizike vetem duke perdorur p si indeks ne tabelen e faqeve. Nga ana tjeter, ai mund te kerkoje neper te gjithe tabelen e invertuar te faqeve per nje entry (n,p). Akoma me tej, ky kerkim mund behet gjate do referimi ne memorje, jo vetem gjate nje page fault. Duke kerkuar nje tabele me 64 K ne do referim ne memorje nuk eshte nje menyre per ta bere te shpejte makinen. Zgjidhja e kesaj dileme eshte perdorimi i TLB-se. Ne se TLB mund te mbaje te gjitha faqet e renda te perdorura, perkthimi mund te ndodhe aq shpejte sa me tabela normale faqesh. Ne nje mungese tek TLB, gjithsesi, tabela e invertuar e faqeve duhet te kerkohet ne software. Nje menyre e mire per te realizuar kete kerkim eshte te kesh tabela hash te ndodhura ne adresat virtuale. Te gjitha faqet virtuale te ndodhura aktualisht ne memorje qe kane te njejten vlere hash jane te vendosura zinxhir se bashku, si ne fig.4-15. Ne se tabela hash ka aq slote sa nje makine ka faqe fizike, zinxhiri do te ishte i gjate sa nje entry, duke pershpejtuar me se miri hartimin. Me tu gjetur numri kampjon i faqes, nje pale e re (virtuale, fizike), do te gjendet ne TLB.

Figura 4-15. Krahasimi i tabelave klasike te faqeve me tabelat e invertuara te faqeve. Tabelat e invertuara te faqeve perdoren ne disa IBM si dhe ne disa workstation HewlettPackard dhe do te behen akoma me te zakonshme ashtu sikurse po behen makinat 64biteshe. Perafrime te tjera qe perballojne memorje te gjera virtuale mund te gjenden ne (Huck &Hays, 1993; Talluri& Hill, 1994 dhe Talluri et al.,1995).

4.4 ALGORTMAT E ZVENDSIMIT T FAQEVE

Kur ndodh nj page fault, sistemi operativ duhet t fshij nj faqe nga memorja pr t ln vend pr faqen tjetr q duhet t oj atje. N qoft se faqja q do t fshihet sht modifikuar gjat kohs q ka qen n memorje duhet t rishkruhet n disk n menyr q disku t azhornohet. Por n qoft se ajo nuk sht ndryshuar (per shembull, prmban nj program text), disku sht i azhornuar, kshtu q rishkrimi nuk sht i nevojshm. Faqja q do t lexohet n memorje thjesht do t shkruhet mbi faqen q do t fshihet. Edhe pse do t ishte e mundur t zgjidhej rastsisht nj faqe pr tu fshir gjat do page fault-i, performanca e sistemit do t ishte m e mir nse do te hiqej nj faqe q nuk prdoret shpesh. N se fshihet nj faqe q prdoret shpesh, ajo shpejt do t duhej t sillej n memorje, duke rezultuar n extra overhead. sht br shum pun teorike dhe eksperimentale mbi algoritmat e zvendsimit t faqeve. M posht do t prshkruajm disa nga algoritmat m t rndsishm. Duhet thn se problemi i zvendsimit t faqeve shfaqet edhe n pjes t tjera t ndrtimit t kompjuterit gjithashtu. Per shembull shum kompjutera kan nj ose m shum memorje cache t prbra nga blloqe memorjeje 32-byte dhe 64-byte te perdorur se fundmi. Kur cache-ja sht plot, nj bllok duhet t fshihet. Ky problem sht i njjti me at t zvendsimit t faqeve, me prjashtim t intervalit kohor m t shkurtr (kjo gj duhet t bhet n disa ns dhe jo n disa ms si n rastin e faqeve). Arsyeja e intervalit m

t shkurr kohor sht se miss cache-t e blloqeve plotsohen nga memorja kryesore, q nuk ka koh krkimi dhe asnj vones racionale. Shembulli i dyt sht ai i nj web serveri. Serveri mund t prmbaj nj numr t caktuar web faqesh shpesh t prdorura n cache-n e tij. Por kur cache-ja sht plot dhe ne i referohemi nj faqeje t re, duhet t fshihet nj web faqe. Logjika sht e njjt me at t faqeve t memorjes virtuale, me prjashtim t faktit q faqet web nuk modifikohen n cache, prandaj ka gjithmon nj kopje tjetr n disk. N sistemin e memorjes virtuale, faqet n memorjen kryesore mund t jen clean ose dirty.

4.4.1 ALGORITMI OPTIMAL

Algoritmi m i mir i mundshm sht i thjesht pr tu prshkruar, por i pamundur pr tu implementuar. Ai funksionon kshtu: n momentin q ndodh nj page fault, nj grup faqesh sht n memorje. Ne do t adresojm njrn nga kto faqe n instruksionin pasardhs (faqen q prmban instruksionin). Faqet e t tjera mund t mos i adresojm deri pas 10, 100 apo i(x) 0 instruksione m pas. do faqe mund t etiketohet me numrin e istruksioneve q do t ekzekutohen para se ti referohemi asaj faqeje. Sipas algoritmit optimal duhet fshir faqja me etiket m t madhe. Nse nj faqe nuk do t prdoret pr 7 milion instruksione dhe nj tjetr nuk prdoret pr 6 milion instruksione, duke fshir t parn e shtyn page fault sa m larg n t ardhmen t jet e mundur. Kompjuterat, ashtu si njerzit, prpiqen ti shtyjn ngjarjet e pakndshme sa m shum koh t munden. Problemi i vetm i ktij algoritmi sht se sht i parealizueshm. N momentin e page fault, sistemi operativ nuk ka mundsi t dij kur do ti referohemi n vazhdim secils faqe (Pam t njtn situat tek algoritmi shortest job first scheduling Si mund ta dij sistemi cili proces sht m i shkurtri?). Gjithsesi, duke ekzekutuar nj program n nj simulator dhe duke ruajtur gjurmt e t gjitha adresave t faqeve, sht e mundur t implementohet zvendsimi optimal i faqeve n ekzekutimin e dyt, duke prdorur informacionin mbi gjurmt e adresave t faqeve t marr gjat ekzekutimit t par. N kt mnyr sht e mundur t krahasohet performanca e algoritmave t realizueshm me performancn m t mir t mundshme. Nse nj sistem operativ arrin nj performanc prej, t themi 1% m pak se algoritmi optimal, mundi i harxhuar pr krkimin e nj algoritmi m t mir do t jap t shumtn 1% fitim. Pr t shmangur do konfuzion t mundshm, duhet t bhet e qart se ky aksesim i adresave t faqeve i referohet vetm nj programi sapo t matur dhe me nj input specifik. Algoritmi q derivon prej ktej sht kshtu specifik pr kt program dhe t dhnat hyrse. Edhe pse kjo metod sht e prdorshme pr vlersimin e algoritmit, nuk prdoret n sistemet praktike. M posht do t studiojm algoritmat e prdorshm n sistemet reale.

4.4.2 ALGORITMI NOT RECENTLY USED

N mnyr q t lejojn sistemin operativ t mbledh statistikat e nevojshme se cilat faqe po prdoren dhe cilat jo, shum kompjutera me memorje virtuale kan 2 bite gjendjeje q i asociohet do faqeje. R vendoset kur faqja adresohet (shkruhet ose lexohet), M vendoset kur faqja shkruhet (pra modifikohet). Bitet ndodhen n do page table entry, sic tregohet n Fig 4-13. sht e rndsishme t kuptohet se kto bite mund t azhornohen (update) n do aksesim memorjeje, prandaj sht esenciale t vendosen nga hardware. Pasi biti setohet 1, qndron kshtu derisa sistemi operativ e reseton 0 n software. Nse hardware nuk i ka kto bite, ato mund t simulohen si m posht. Kur nj proces fillon, t gjitha page table entrie te tij shnohen sikur nuk jan n memorje. Sapo nj faqe adresohet do t ndodh nj page fault. Ather sistemi operativ seton bitin R (n tabelat e tij t brendshme), ndryshon page table entry t pointoj te faqja q duhet me mnyrn READ ONLY dhe restarton instruksionin. Nse faqja m pas do t shkruhet ather do t ndodh nj tjetr page fault, duke e lejuar sistemin operativ t ndryshoj mnyrn e faqes n READ/WRITE. Bitet R dhe M mund t prdoren pr t ndrtuar nj algoritm t thjesht si m posht: Kur procesi fillon, t dy bitet e faqeve pr t gjith faqet e tij zerohen nga sistemi operativ. Periodikisht (pra pr cdo interrupt clock-u) biti R zerohet pr t dalluar faqet q nuk jan adresuar nga ato q jan adresuar. Kur ndodh nj page fault, sistemi operativ kontrollon t gjitha faqet dhe i ndan ato n 4 kategori, bazuar n vlerat aktuale t biteve R dhe M: Kategoria 0 jo e adresuar, jo e modifikuar Kategoria 1 jo e adresuar, e modifikuar Kategoria 2 e adresuar, jo e modifikuar Kategoria 3 e adresuar, e modifikuar Edhe pse kategoria e par duket, n pamje t par e pamundur, kjo ndodh kur nj faqe e kategoris 3 e ka bitin R t resetuar nga nj sinjal clock-u. Kto sinjale nuk resetojn bitin M, sepse ky informqcion nevojitet pr t ditur nse faqja sht rishkruar n disk apo jo. Duke resetuar R, por jo M, ato ojn n faqet e kategoris 1. Algoritmi NRU fshin rastsisht nj faqe nga klasa jobosh me numr m t vogl. E mira e ketij algoritmi sht se sht m mir t fshihet nj faqe modifikuar q nuk sht adresuar n t paktn nj impuls clock-u (zakonisht 20ms), se t fshihet nj faqe q sht n prdorim. Avantazhi kryesor i NRU sht se sht i leht pr tu kuptuar, mesatarisht efient pr tu implementuar dhe jep nj performanc q, edhe pse jo shum optimale, mund t jet e mjaftueshme.

4.4.3 ALGORITMI FIRST-IN, FIRST-OUT (FIFO)

Nj tjetr algoritm low-overhead sht algoritmi FIFO. Pr t kuptuar se si funksionon, mendoni nj supermarket q ka mjaft rafte pr t reklamuar ekzaktsisht k produkte t ndryshme. Nj dit nj kompani prezanton nj ushqim t astit t ri me leverdi, t ngrir, kos organik q mund t rigjenerohet n nj furr me mikroval. sht nj sukses i menjehershm, kshtu supermarketi yn i kufizuar duhet t heq nj produkt tjetr n mnyr q t fus kt produkt t ri. Nj mundsi sht q t gjendet nj produkt q supermarketi e ka mbajtur pr m gjat (per shembull dika q ka nisur t shitet 20 vjet m par) dhe pr t cilin askush nuk interesohet m. N fakt, supermarketi mban nj list t lidhur t t gjiht produkteve q ai shet, n radhn q ato jan futur. Produkti i ri shkon n fund t lists, ai i pari fshihet prej lists. N algoritm zbatohet e njjta ide. Sistemi operativ mban nj list t t gjitha faqeve q ndodhen n memorje, me faqen m t vjetr n fillim t lists dhe me m t ren e ardhur n fund t saj. N nj page fault faqja n fillim fshihet dhe faqja e re shtohet n fund t lists. Kur aplikohet n magazin, FIFO mund t fshij parafine, por gjithashtu mund t fshij miell, krip ose gjalp. Kur aplikohet n kompjutera shfaqet i njjti problem. Per kt arsye, FIFO prdoret rall n formn e tij t pastr.

4.4.4 ALGORITMI SECOND CHANCE

Nj modifikim i thjesht tek FIFO q shmang problemin e t fshirit t nj faqeje t prdorshme, sht t kontrollohet biti R i faqes m t vjetr. Nse sht 0, faqja sht e vjetr dhe e paprdorur, kshtu q zvendsohet menjeher. Nse sht 1, biti resetohet, faqja vendoset n fund t lists dhe koha e ngarkimit t saj azhornohet si t kishte ardhur tani n memorje, m pas krkimi vazhdon. Veprimi i ktij algoritmi, t quajtur Second Chance, tregohet n Fig 4-16. N Fig 4-16 (a) shohim faqet nga A n H t mbajtura n nj list t lidhur dhe t radhitura sipas kohs n t ciln kan arritur n memorje. Supozojm se ndodh nj page fault n kohn 20. Faqja m e vjetr sht A, q ka ardhur n kohn 0, kur procesi ka filluar. Nse A e ka birin R 0, ajo fshihet nga memorja, edhe duke qen shkruar n disk (nse sht dirty) apo thjesht braktisur (nse sht clean). Nga ana tjetr, nse R sht i setuar, A vihet n fund t lists dhe koha e ngarkimit t saj rivendoset n kohn aktuale (20). Biti R gjithashtu zerohet. Krkimi pr nj faqe t prshtatshme vazhdon.

Fig. 4.16. Veprimi i Second Chance : (a) Faqet t renditura n rendin FIFO. (b) Lista e faqeve nse ndodh nj page fault n kohn 20 dhe A e ka bitin R t setuar. Numrat sipr faqeve jane koht e tyre t ngarkimit. Ajo q Second Chance bn, sht t krkoj nj faqe t vjetr q nuk sht adresuar n intervalin e mparshm t clock-ut. Ne qofte se t gjitha faqet jan adresuar, Second Chance degjeneron n FIFO t pastr. Konkretisht, imagjinoni q t gjitha faqet n Fig 416 (a) e kan bitin R 1. Nj nga nj, sistemi operativ i on n faqet n fund t lists, duke zeruar bitin R sa her q shton nj faqe n fund t lists. N fund kthehet tek faqja A q tashm bitin R e ka 0. N kt pik ajo fshihet. Kshtu, algoritimi prfundon.

4.4.5 ALGORITMI THE CLOCK

Edhe pse algoritmi Second Chance sht i logjikshm, ai nuk sht efient pr shkak t lvizjeve t tij konstante rreth faqeve t lists. Nj mnyr m e mir sht q t mbahen t gjitha frame-t n nj list qarkulluese n form ore, si tregohet n Fig 4-17. Nj tregues pointon n faqen m t vjetr.

Fig. 4-17. Algoritmi The Clock

Kur ndodh nj page fault, faqja tek e cila pointohet nga treguesi, kontrollohet. Nse biti R i saj sht 0, ajo fshihet, faqja e re shtohet n or n vend t saj dhe treguesi avancon me nj pozicion. Nse biti R sht 1, ai zerohet dhe treguesi avancon n faqen tjetr. Ky proces prsritet derisa gjendet nj faqe me R=0. Nuk sht udi q algoritmi quhet The Clock. Ai ndryshon nga Second Chance vetm nga implementimi.

4.4.6 ALGORITMI LEAST RECENTLY USED

Nj prafrim i mir i algoritmit optimal bazohet n hipotezn se faqet q jan prdorur n instruksionet e fundit ndoshta do t prdoren prsri n instruksionet pasardhse. Ndrsa faqet q nuk jan prdorur pr vite, ndoshta nuk do t prdoren pr nj koh t gjat. Kjo ide sugjeron nj algoritm t realizueshm : kur ndodh nj page fault, hiqet faqja q nuk sht prdorur pr kohn m t gjat. Kjo strategji quhet LRU (Least Recently Used). Edhe pse LRU sht teorikisht i realizueshm, nuk sht i lir. Pr tu implementuar plotsisht LRU sht e nevojshme t mbahet nj list e lidhur t gjitha faqeve n memorje, me faqen most recently used n fillim dhe at least recently used n fund. Vshtirsia sht se lista duhet t azhornohet n do aksesim t memorjes. T gjendet nj faqe n list, t fshihet dhe m pas t lvizet n fillim sht nj veprim q harxhon shum koh, edhe n hardware (duke supozuar se nj hardware i till mund t ndrtohet). Megjithat, ka mnyra t tjera pr t implementuar LRU me nj hardware t veant. Marrim n fillim mnyrn m t thjesht. Kjo mnyr krkon pajisjen e hardware me nj numrues 64-bitsh, C, q automatikisht inkrementohet pas do instruksioni. Pr m

tepr,do page table entry duhet t ket nj fush aq t gjersa t mbaj numruesin. Pas do aksesimi memorjeje, vlera e C ruhet n page table entry pr faqen sapo t adresuar. Kur ndodh nj page fault, sisemi operativ ekzaminon t gjith numratort n page table pr t gjetur m t ultin prej tyre. Ajo faqe sht least recently used. Tani le t shohim algoritmin e dyt LRU t hardware. Pr nj makin me n page frame, LRU mund t mbaj nj matric prej mxn bitesh, fillimisht t gjitha 0. Sa her q page frame k adresohet, hardware n fillim vendos t gjitha bitet kolons k n 0. N do moment, rreshti, vlera binare e t cilit sht m e lart, sht m pak recently used e kshtu me radh. Puna e ktij algoritmi tregohet n Fig. 4-18 pr katr page frame dhe adresa faqesh n radhn : 0 1 2 3 2 1 0 3 2 3. Pasi adresohet faqja 0, kemi situatn n Fig. 4-18(a). Pasi adresohet faqja 1, kemi situatn n Fig. 4-18(b), e kshtu me radh.

4.4.7 SIMULIMI I LRU N SOFTWARE

Edhe pse t dy algoritmat LRU e mparshm jan t realizueshm n parim, pak nse ekzistojn, makina e kan kt hardware, kshtu q kan prdorim t pakt n dizenjimet e sistemit operativ, q nuk jan sisteme pr makina q nuk kan kt hardware. N vend t saj nevojitet nj zgjidhje q mund t implementohet n software. Nj mundsi sht quajtur algoritmi NFU (Not Frequently Used). Kjo krkon nj numrator software t asociuar do faqeje, n fillim 0. N do sinjal clock-u, sistemi operativ skanon t gjitha faqet n memorje. Pr do faqe, biti R q sht 0 ose 1, skanon t gjitha faqet n memorje. N fakt, numratort jan nj prpjekje pr t ruajtur gjurmt se sa shpesh sht adresuar do faqe. Kur ndodh nj page fault, faqja me numratorin m t ult, shpesh zgjidhet pr zvndsim.

Fig. 4-18. LRU duke prdorur nj matric kur faqet adresohen sipas radhs 0, 1, 2, 3, 2, 1, 0, 3, 2, 3.

Problemi kryesor me NFU sht q asnjeher nuk harron asgj. Per shembull n nj kompilator me shum kalime, faqet q u prdorn shpesh gjat kalimit 1, mund t ken nj numrim t lart edhe n kalimet e mvonshme. N fakt, nse ndodh q kalimi 1 t ket kohn m t gjat t exekutimit t t gjith kalimeve, faqet q mbajn kodin e kalimeve t mvonshm mund t ken gjithmon numrime m t ulta se kalimi i faqeve. Si pasoj e ksaj, sistemi operativ do t fshij faqe t nevojshme n vend t faqeve q nuk prdoren. Fatmirsisht, nj modifikim i vogl i NFU bn t mundur t simulohet mjaft mir LRU. Modifikimi ka 2 pjes. S pari, numratort zhvendosen, secili prej tyre, djathtas me nj bit, prpara se t shtohet biti R. S dyti, biti R i shtohet bitit m t majt e jo atij m t djatht. Fig. 4-19, ilustron se si algoritmi i modifikuar, i njohur si Aging, funksionon. Supozoni se pas impulsit t par t clock-ut bitet R pr faqet nga 0 n 5, kan prkatsisht vlerat: 1, 0, 1, 0, 1 dhe 1 (faqja 0 sht 1, faqja 1 sht 0 etj). Me fjal t tjera, midis sinjaleve 0 dhe 1, u adresuan faqet 0, 2, 4 dhe 5, duke i vendosur bitet R t tyre n 1, ndrkoh q t tjerat qndrojn 0. Pasi gjasht numruesat korrespondues jan zhvendosur dhe biti R sht shtuar n t majt, ata kan vlerat e treguara n Fig. 4-19(a). Katr kolonat e tjera tregojn gjasht numratort pas katr impulseve pasardhse. Kur ndodh nj page fault, faqja, numratori i s cils sht m i ult, fshihet. sht e qart se nj faqe q nuk sht adresuar pr, t themi, 4 impulse clock-u, do t ket 4 bitet e para 0 n numratorin e saj dhe kshtu do t ket vler m t vogl se nj numrues q nuk sht adresuar pr 3 impulse clock-u. Ky algoritm ndryshon nga LRU n dy aspekte.

Shikoni faqet 3 dhe 5 n Fig. 4-19(e). Asnjra nuk sht adresuar pr dy impulse clock-u, t dyja ishin adresuar n impulsin pararendse. Sipas LRU, nse nj faqe duhet t zevendsohet, duhet t zgjedhim njrn nga kto t dyja. Problemi sht se nuk e dim se cila nga kto t dyja ishte adresuar e fundit midis impulsive 1 dhe 2. Duke regjistruar vetm nj bit pr interval kohe, nuk e kemi aftsin ti dallojm se cila nga dy faqet u adresua m shpejt n intervalin e kohs se tjetra. Gjithka q mund t bjm sht t fshijm faqen 3, duke qen se faqja 5 ishte adresuar gjithashtu 2 impulse m par, ndrsa faqja 3 jo.

Fig. 4-19. Algoritmi Aging simulon LRU n software. Jan treguar gjasht faqe pr pes impulse clock-u. Impulset e clock-ut paraqiten nga (a) te (e).

Ndryshimi i dyt midis Aging dhe LRU sht se n aging numruesat kan nj numr limit bitesh, 8 n rastin ton. Supozojm se dy faqe kan secila vler t numruesit 0. Ajo q mund t bjm sht t zgjedhim rastsisht njrn prej tyre. N realitet, mund t ishte nj nga ato faqe q ishte adresuar per her t fundit 9 impulse me par, ndrsa tjetra 1000 impulse m par. Nuk kemi si e shohim kt gj. Megjithat, n praktik 8 bit jan zakonisht t mjaftueshm nse nj impuls clock-u sht zakonisht 20 ms. Nse nj faqe nuk sht adresuar n 160 ms, ndoshta ajo nuk sht shum e rndsishme.

4.4.8 ALGORITMI WORKING SET

N formn m t pastr t punimit me faqe, proceset fillojn me asnj nga faqet e tyre n memorje. Sapo CPU prpiqet t kap instruksionin e par, ai merr nj page fault, duke br q sistemi operativ t sjell n page mbajtesin e instruksionit te par. Kjo ndiqet shpejt nga t tjera page faults pr variabla global dhe stack-un. Pas njfar kohe, procesi ka shumicn e faqeve q i duhen dhe normalizohet duke u ekzekutuar relativisht pak page faults. Kjo strategji quhet demanding paging sepse faqet ngarkohen vetm me krkes dhe jo me prparsi. Sigurisht, sht mjaft e thjesht t shkruhet nj program test q lexon sistematikisht t gjitha faqet n nj hapsir t madhe adresash, duke shkaktuar aq shum page faults, sa nuk ka memorje t mjaftueshme pr ti mbajtur t gjitha. Fatmirsisht, shumica e proceseve nuk punojn kshtu. Ata paraqesin nj lokalitet adresash, q do t thot se gjat do faze ekzekutimi procesi adreson vetm nj fraksion relativisht t vogl t t gjitha faqeve t veta. do kalim i nj kompiatori shum-kalimsh, pr shembull, akseson vetm nj fraksion t t gjitha faqeve, dhe nj fraksion t ndryshm nga ai. Seti i faqeve q nj proces sht duke prdorur quhet working set-i i tij (Denning, 1968, a; Denning, 1980). Nse i gjith working set-i sht n memorje, procesi do t ekzekutohet pa shkaktuar shum page faults dhe do t ekzekutohet ngadal, duke qen se ekzekutimi i nj instruksioni krkon disa ns, ndrsa leximi i nj faqeje nga disku zakonisht krkon 10 ms. N nj shkall prej disa 1 ose 2 instruksionesh pr 10ms, do t duhej shum koh pr t mbaruar. Nj program q shkakton page fault do disa instruksione thuhet se sht thrashing (Denning, 1986b). N nj sistem me multiprogramim, proceset ohen shpesh n disk (pra t gjitha faqet e tyre fshihen nga memorja), pr tua ln radhn proceseve t tjera n CPU. Li nd pyetja se do t ndodh kur nj proces duhet sjell prsri n memorje. Teknikisht nuk duhet br asgj. Procesi do t shkaktoj page faults, derisa working set-i i tij t jet ngarkuar. Problemi sht se duke patur 20,100 apo edhe 1000 page faults sa her q ngarkohet nj proces, ngadalson dhe gjithashtu humbet nj koh t konsiderueshme t kohs s CPU, duke qen se sistemit operativ i duhen disa ms t CPU pr t procesuar nj page fault. Prandaj shum sisteme q punojn me faqe prpiqen t mbajn gjurm t working set t do procesi dhe t sigurohet se sht n memorje para se t lejojn q procesi t ekzekutohet. Kjo mnyr quhet working set model (Denning, 1970). Ajo sht projektuar pr t reduktuar shum shkalln e page fault. Ngarkimi i faqeve para se t lejohet ekzekutimi i proceseve quhet gjithashtu prepaging. Kini parasysh se working set ndryshon n lidhje me kohn. Dihet prej kohsh se shum programe nuk e aksesojn adresn e tyre t adresave uniformisht, por adresat kan tendencn t mblidhen n nj numr t vogl faqesh. Nj aksesim memorjeje mund t kap nj instruksion, nj t dhn ose mund t ruaj nj t dhn. N do moment t kohs t, ekziston nj grup i t gjitha faqeve nga k adresimet t pak mparshme. Ky grup, w{k, t}, sht working set. Meqnse k=1, shumica e adresave

t fundit (recent) duhet ti ken prdorur t gjitha faqet e prdorura nga k>1 adresat m t fundit (most recent) dhe mbase t tjera, w{k, t} sht funksion monoton jo zbrits i k. Limiti i w{k, t}, duke qen se k rritet, sht i fundm, sepse nj program nuk mund t adresoj m shum faqe nga sa mban hapsira e tij e adresimit dhe pak programe do t prdorin do faqe. Fig. 4-20 paraqet madhsin e working set si funksion i k.

Fig. 4-20. Working set sht grupi i faqeve t prdorura nga k adresimet m t fundit t memorjes. Funksioni w {k, t} sht madhsia e working set n kohn t.

Fakti se pjesa m e madhe e programeve aksesojn nj numr t vogl faqesh, por q ky grup ndryshon ngadal, shpjegon rritjen e shpejt fillestare t kurbs dhe m pas rritjen e ngadalsuar pr k t mdha. Per shembull, nj program q sht duke ekzekutuar nj cikl q ze dy faqe, q prdorin t dhna pr katr faqe, mund t adresoj t gjasht faqet do 1000 instruksione, por adresa m e fundit (most recently) n nj faqe tjetr mund t jet 1000 instruksione m shpejt, gjat fazs s inicializimit. Pr shkak t ksaj sjelljeje asimptodike, prmbajtja e working set nuk sht e ndjeshme ndaj vlers s k-s s zgjedhur. Pr ta thn ndryshe, ekziston nj varg i gjat vlerash t k pr t cilat working set sht i pandryshuar. Meqnse working set ndryshon ngadal n lidhje me kohn, sht e mundur t bhet nj hamendje e logjikshme se cilat faqe do t duhen kur programi t rifilloj mbi bazn e working set-it kur ai u ndalua pr her t fundit. Prepaging konsiston n ngarkimin e ktyre faqeve prpara se procesi t lejohet t exekutohet prsri. Pr implementilin e modelit working set sht e nevojshme q sistemi operativ t ruaj gjurmt e se cilat faqe jan n working set. T paturit e ktij informacioni gjithashtu on menjeher n nj algoritm t mundshm t zvendsimit t faqeve: kur ndodh page fault, gjendet nj faqe q nuk sht n working set dhe fshihet. Pr t implementuar nj algoritm t till na duhet t preizojm mnyrn e prcaktimit se cilat faqe jan n working set dhe cilat nuk jan n nj moment kohe t dhn.

Si prmendm m lart, working set sht bashksia e faqeve t prdorura n k adresat m t fundit (disa autor prdorin 7 adresat m t fundit, por zgjedhja sht arbitrare). Pr t implementuar do algoritm working set, disa vlera t k duhet t zgjidhen me par. Pasi sht zgjedhur vlera, pas do adresimi, grupi i faqeve i prdorur nga k adresat e mparshme sht i prcaktuar n mnyr unike. Pa dyshim, t paturit e nj prkufizimi funksional t working set nuk do t thot se se ka nj mnyr efiente pr ta monitoruar at n koh reale gjat ekzekutimit t programit. Mund t imagjinohet nj regjistr rrshqits me gjatsi ky, q do adresim memorjeje e zhvendos at n pozicionin majtas dhe n t djatht shtohet nr i faqes t adresuar m n fund (most recently). Grupi i k numrit t faqeve n regjistrin rrshqits do t ishte working set. Megjithat, t mbahet rregjistri rrshqits dhe dhe t procesohej n nj page fault do t isht shum e kushtueshme, prandaj kjo teknik nuk prdoret. N vend t saj, jan prdorur prafrime t ndryshme. Nj prafrim q prdoret zakonisht sht realizimi i ides s numrimit prsri t k adresave dhe n vend t tyre t prdoret koha e ekzekutimit. Per shembull, n vend t prcaktimit t working set si faqet e prdorura gjat 10 mln adresimeve t mparshme, mund ta prcaktojm at si grupi i faqeve i prdorur gjat 10 m/sec e kohs s ekzekutimit. N praktik, ky prcaktim sht po aq i mir, sa edhe m i thjesht pr tu prdorur. Kini parasysh se pr do proces, ka rndsi vetm koha e tij ekzekutimit. Kshtu, nse nj proces fillon ekzekutimin n kohn T dhe ka pasur 40 m/sec nga koha e CPU n kohn reale T+100 m/sec, pr qllimet e working set, koha e tij sht 40 m/sec. Pjesn e kohs s CPU q procesi ka prdorur q n fillim t tij, shpesh quhet koha virtuale aktuale (current virtual time) e tij. Me kt prafrim, working set i nj procesi sht grupi i faqeve q ai ka adresuar gjat T sekondave t kaluara t kohs virtuale. Tani le t shohim nj algoritm t bazuar n working set. Ideja baz sht t gjendet nj faqe q nuk sht n working set dhe t fshihet. N Fig. 4-21 shohim nj pjes t page table t nj kompjuteri. Duke qen se vetm faqet q ndodhen n memorje konsiderohen si kandidate pr tu fshir, faqet q mungojn injorohen nga ky algoritm. do entry prmban t paktn dy element: kohn e prafrt kur faqja sht prdorur pr her t fundit dhe bitin R (t referencs). Drejtkndshi i bardh bosh prfaqson fushat e tjera, t panevojshme pr kt algoritm, t tilla si numri i page frame-it, bit i mbrojtjes dhe biti M (i modifikimit).

Fig. 4-21. Algoritmi Working Set

Algoritmi funksionon si m posht: hardware duhet t sertoj bitet R dh M, si kemi thn m par. Gjithashtu, nj inetrrupt clock-u periodik duhet t bj t ekzekutohet software q zeron bitin e referencs n do sinjal clock-u. N do page fault, page table skanohet pr t krkuar nj faqe t prshtatshme pr t fshir. Duke qen se do entry procesohet, biti R ekzeminohet. Nse sht 1, koha virtuale aktuale shkruhet n fushn e kohs s prdorimit t fundit n page table, q tregon se faqja ishte n prdorim kur ndodhi page fault. Qkur faqja u adresua gjat sinjalit aktual t clock-ut, sht e qart se n working set nuk sht kandidate pr tu fshir (pranohet se prfshin shum sinjale clock-u). Nse R sht 0, do t thot se faqja nuk sht adresuar gjat sinjalit aktual t clock-ut dhe kshtu mund t jet kandidate pr tu fshir. Pr t par nse ajo duhet t fshihet, mosha e saj, q sht koha virtuale aktuale - koha e prdorimit t fundit, llogaritet dhe krahasohet me . Nse mosha sht m e madhe se faqja nuk sht m n working set. Ajo hiqet dhe faqja e re ngarkohet ktu. Megjithat, skanimi vazhdon t azhornoj entries q ngelen. Sidoqoft, nse R sht 0, por mosha sht m e vogl ose e barabart me , faqja sht ende n working set. Kjo faqe prkohsisht nuk fshihet, por faqja me moshn m t madhe (vlern m t madhe t Time of last use) do t shnohet. Nse gjith tabela skanohet pa gjetur nj kandidate pr t fshir, kjo do t thot se t gjitha faqet jan n working set. N ket rast, nse nj ose m shum faqe me R=0 do t ishin gjetur, ajo me moshn m t madhe do t isht fshir. N rastin m t keq, t gjitha faqet jan adresuar gjat sinjalit aktual t clock-ut (kshtu q t gjitha kan R=1), kshtu zgjidhet rastsisht nj pr tu fshir, mundsisht nj faqe clean, nse ekziston nj e till.

4.4.9 ALGORITMI WSCLOCK

Algoritmi baz working set sht i ngarkuar, duke qen se e gjith page table duhet skanuar n do page fault derisa lokalizohet nj faqe e prshtatshme. Nj algoritm i prmirsuar, q bazohet n algoritmin clock, por prdor gjithashtu informacionin e working set, sht quajtur WSClock (Carr and Henne sey, 1981). Pr shkak t thjeshtsis s tij pr tu implementuar dhe performancs s tij t mir, ky algoritm prdoret gjersist n praktik. Struktura e t dhnave q nevojitet sht nj list rrethore page frame-sh si n algoritmin clock, si tregohet n Fig. 4-22(a). Fillimisht lista sht bosh. Kur ngarkohet faqja e par, ajo i shtohet lists. Duke u shtuar m shum faqe, ato shkojn brenda lists pr t formuar nj unaz. do entry prmban fushn e kohs s prdorimit t fundit, nga algoritmi baz working set, dhe gjithashtu bitin R (t treguar n figur) dhe bitin M (nuk tregohet n figur).

Fig. 4-22. Veprimi i algoritmit WSClock. (a) dhe (b) japin nj shembull se ndodh kur R=1. (c) dhe (d) japin shembull se ndodh kur R=0.

Si tek algoritmi clock, n do page fault, faqja e pointuar nga treguesi, fillimisht ekzaminohet. Nse biti R sht 1, faqja sht prdorur gjat impulsit aktual t clock-ut, prandaj nuk sht kanidate pr tu fshir. Biti R setohet n 0, treguesi avancon n faqen pasardhse dhe algoritmi prsritet pr kt faqe. Gjendja pr kt sekuenc ngjarjesh tregohet n Fig. 4-22(b). Tani mendoni ndodh nse faqja tek e cila pointohet e ka R=0, si tregohet n Fig. 4 22(c). Nse mosha e saj sht m e madhe se dhe faqja sht clean, ajo nuk sht n working set dhe nj kopje e vlefshme e saj ndodhet n disk. Page frame thjesht hiqet dhe faqja e re vendoset atje, si trgohet n Fig. 4-22(d). N ann tjetr, nse faqja sht dirty, nuk mund t hiqet menjeher, meqnse asnj kopje e vlefshme ekziston n disk. Pr t shmangur nj process switch, shkrimi n disk skedulohet, por treguesi avancon dhe algoritmi vazhdon me faqen tjetr. N fund t fundit, mund t ket nj faqe t vjetr, clean m posht q mund t prdoret menjeher. N parim, t gjitha faqet mund t skedulohen pr disk I/O n rreth 1 cikl clock-u. Pr t reduktuar trafikun n disk, mund t vendoset nj limit q lejon nj maksimum prej n faqesh t rishkruhen. Nse ky limit arrihet nuk skedulohen m shkrime t reja. ndodh nse treguesi gjith kohn vjen rrotull piks s tij t filimit? Ktu dallohen dy raste : 1. T paktn nj shkrim sht skeduluar. 2. Asnj shkrim nuk sht skeduluar. N rastin e par, treguesi vetm leviz, duke krkuar nj faqe clean. Duke qen se nj ose m shum shkrime jan skeduluar, n fund nj shkrim do t plotsohet dhe faqja e tij do t shnohet si clean. Faqja e par clean q do t gjendet, do t fshihet. Kjo faqe nuk sht domosdoshmrisht e para write skeduled sepse disk driver-i mund ti regjistroje shkrimet n mnyr q t optimizoj performancn e sistemit. N rastin e dyt, t gjiha faqet jan n working set, ndryshe t paktn njra do t ishte skeduluar. N munges t informacionit shtes, gjja m e thjesht pr t br sht t prdoret nj faqe clean. Adresa e nj faqeje clean mund t mbahet si gjurm gjat fshirjes. Nse ska faqe clean, ather faqja aktuale zgjidhet dhe rishkruhet n disk.

4.4.10 PRMBLEDHJE E ALGORITMAVE T ZVENDSIMIT T FAQEVE

Kemi par disa algoritma zvendsimi t faqeve. N kt seksion do ti permbledhim ato shkurtimisht. Lista e algoritmave t diskutuar jepet n Fig. 4-23. Algorimi optimal zvendson faqet e adresuara n fund m ato aktuale. Fatkeqsisht, nuk ka mnyr prcaktimi se cila faqe do t jet e fundit, kshtu q n praktik ky algoritm nuk mund t prdoret. Gjithsesi, shrben si pik referimi me t cilin mund t karahasohen algoritmat e tjer.

Algoritmi NRU i ndan faqet n 4 klasa, n varsi t biteve R dhe M. Zgjidhet rastsisht nj faqe nga ato me numrin me te ulet. Ky algoritm sht i thjesht pr tu implementuar, por sht shum i pa prpunuar. Ekzistojn edhe m t mir. FIFO ruan gjurmt e radhs n t ciln faqet u ngarkuan n memorje duke i mbajtur ato n nj list t lidhur. Duke fshir faqen m t vjetr m pas bhet i rndomt, por ajo faqe mund t jet ende n prdorim, kshtu q FIFO sht nj zgjedhje e keqe. Second chance sht nj modifikim i FIFO q kontrollon nse nj faqe sht n prdorim para se ta fshij at. Nse po, ather faqja nuk fshihet. Ky modifikim e prmirson shum performancn. Clock sht thjesht nj implementim i ndryshm i second chance. Ka t njjtat karakteristika t performancs, por krkon m pak koh pr ekzekutimin e algoritmit.

Fig. 4-23. Algoritmat e diskutuar n tekst.

LRU sht nj algoritm i shklqyer, por nuk mund t implementohet pa hardware t veant. Nse ky hardware nuk sht i disponueshm, LRU nuk mund t prdoret. NFU sht nj prpjekje e parndsishme pr t arritur LRU. Nuk sht shum i mir. Gjithsesi, aging sht nj prafrim m i mire i LRU dhe mund t implementohet n mnyr efiente. sht nj zgjedhje e mir.

Dy algoritmat e fundit prdorin working set. Algoritmi working set ka performanc t arsyeshme, por n njfar mnyr sht i shtrenjt pr tu implementuar. WSClock sht nj variant q jo vetm jep performanc t mir, por sht efient pr tu implementtuar. Si prfundim, dy algoritmat m t mir jan aging dhe WSClock. Ato bazohen prkatsisht n LRU dhe working set. T dyja japin performanc t mir dhe mund t implementohen ne mnyr efiente. Ka dhe disa algoritma t tjer, por ndoshta kta t dy jan m t rndsishm n praktik.

4.5 MODELI I ALGORITMIT ME ZVNDESIM FAQESH

Ne vite shte br pune ne modelin e algoritmit me zvendsim faqesh nga nje perspektive teorike. Ne kete pjes ne do te diskutojme disa nga keto ide, vetem per te pare se si punon procesi i modelimit.

4.5.1

ANOMALIA E BELADY

Llogjikisht, duket qe sa me shume Page frame ka memorja, me pak Page faults do te marre programi. uditerisht mjashtueshem, nuk eshte zbuluar gjithmone nje shembull numerimi, ne te cilen FIFO shkaktoi me shume page faults me kater faqe frame se me tre. Kjo situate e uditshme shte bre e njohur si ANOMALIA BELADY. Kjo sht ilustuar ne figuren 4-24 pr nj program me pes faqe virtuale, numeruar nga 0 ne 4. Faqet jane referuar ne rregullin:

(M 2 3 0 I 4 0 I 2 .1 4

Ne figuren 4-24.(a) ne shohim se si me tre page frame, nje total me nente page faults kane ndodhur. Ne fig. 4-24 ne marrim dhjete page faults me kater page frame.

Figura 4-24 Anomalia Belady, (a) FIFO me tre page frames, (b) FIFO me kater page frame

4.5.2 ALGORITMET STACK

Shume krkime n shkencen e kompjuterit ishin zbuluar nga anomalia Belady dhe filluan ta investigonin ate. Kjo pune oi ne zhvillimin e nje teorie t tre te algoritmave te faqeve dhe karakteristikave te tyre. Ndersa pjesa me e madhe e kesaj pune ishte jashte ketij libri, ne do te japim nje prezantim te shkurter me poshte. Pr me shume detaje shiko (Maekawa et aL 1987). Protesimi i kesaj pune, fillon me vrojtimin qe do proces gjeneron nje sekuence te referencave te memorjes, nderkohe qe ekzekutohet. do reference te memorjes i korespondon nje faqe specifike virtuale. Keshtu qe, nje proces i aksesimit ne memorje mund te karakterizohet nga nje list e (renditur) e numrave te faqeve. Kjo list eshte quajtur stringa reference, dhe luan nje rol qndror ne teori. Per thjeshtesi, n vazhdim ne do te marrim ne konsiderate vetem rastin e nj makine me nje proces, keshtu qe do makine ka nje proces, deterministik reference string (me shume procese ne do te duhej te merrnim ne llogari shtresezimin e stringave te tyre te references qe ojne ne multiprogramim).

Nje sistem numerimi karakterizohet nga tre gjera:

1. Stringa reference e procesit te ekzekutimit. 2. Algoritmi i zevendesimit te faqeve. 3. Numri i faqeve frame te mundshme ne memorje, m.

Llogjikisht ne mund te imagjinojme nje interpretues abstrakt qe funksionon si me poshte. Kjo miremban nje grup te brendshem. A, qe mban gjurmet e gjendjes se memorjes. Ai ka aq shume elemente sa ka procesi faqe virtuale, te cilat ne i shenojme me n. Grupi M eshte ndare ne dy pjese. Pjesa e siperme me m hyrje, permban te gjitha faqet qe jane momentalisht ne memorje. Pjesa e poshtme, me n-m faqe, permban te gjitha faqet qe kan qne referuar njehere por kane qene page OUT dhe nuk jane momentalisht ne memorje. M eshte set bosh per aq kohe sa asnje faqe nuk ka qn referuar dhe nuk ka as nje faqe ne memorje. Ndrkoh qe ekzekutimi fillon te lere jashte faqet ne stringen reference, nje ne cdo kohe. Nderkohe qe secila shfaqet, interpretuesi kontrollon ne se faqja eshte ne memorje (i.e., ne pjesen e siperme te M). Ne qofte se nuk eshte, ndodh nje Page Faults. Ne qofte se ndodhet nje vrime boshe ne memorje(i.e., pjesa e siperme e M permban me pak se m hyrje), faqja eshte ngarkuar dhe ka hyre ne pjesen e siperme te M. Kjo situate arrihet vetem ne fillim te ekzekutimit. Ne qofte se memoria eshte plote (i.e., pjesa e siperme e M permban m hyrje) algoritmi i faqes me zevendesim thirret per te zhvendosur nje faqe nga memorja. N model ajo qe ndodh sht q nje faqe shte zhvendosur nga pjesa e siperme e M ne pjesen e poshtme, dhe faqja e nevojshme qe ka hyre ne pjesen e siperme. Per me teper, pjesa e siperme dhe tabani i poshtem mund te korrigjohen te ndara. Per ti bere me te qarta veprimet e interpretuesit le te shikojme nje shembull konkret duke perdorur LRU faqe zevendesimi. Hapesira e adreses virtuale ka tete faqe, dhe memoria fizike ka kater Page frame. Ne fillim te figures 4-25 ne kemi nje string reference qe perbehet nga 24 faqe: 0 2 1 3 5 4 6 3 7 4 7 3 3 5 5 3 1 1 1 7 2 3 4 1 Poshte stringes se references, ne kemi 25 kolona me tete ITEM secila. Kolona e pare, e cila eshte bosh tregon gjendjen e M perpara se te filloje ekzekutimi. Secila kolone pasuese tregon M pasi nje faqe shtlene jashte nga referenca, dhe shte perpunuar nga algoritmi i faqosjes. Kufiri i rende tregon majen e AY, qe perben kater vrimat e para, te cilat iu korrespondojne page frame ne memorje. Faqet brenda kutise se rende jane ne memorje, dhe faqet poshte saj jane faqosur jashte diskut.

Modeli i algoritmit te zevendesimit te faqeve

Fig.4-25.Propozimi i memorjes tabele. M

Faqja e pare ne stringen reference eshte 0. keshtu qe ajo eshte futur ne fillim te memorjes, sic tregohet ne kolonen e dyte. Faqja e dyte eshte 2, RO kjo ka hyre ne fillim te kolones se trete. Ky veprim ben qe 0 te leviz poshte, hapesire bosh per shembull. Se fundmi faqja e ngarkuar gjithmone hyn ne fillim, dhe cdo gje akoma zhvendoset poshte si nevoje. Secila prej shtate faqeve te para ne stringen reference shkakton nje page faults. Kater prej tyre mund te trajtohen pa zhvendosur nje faqe. HUT fillon me nje reference ne faqen 5, faqja e re e ngarkuar kerkon zhvendosjen ne faqen e vjeter. Referenca e dyte ne faqen 3 nuk shkakton nje page fault, sepse eshte pothuajse ne memorje. Sidoqofte interpretuesi e leviz ate nga ku ajo eshte, dhe e vendos ate ne fillim sic tregohet. Procesi vazhdon per nje kohe derisa faqja 5 eshte referuar. Faqja eshte zhvendosur nga pjesa e fundit e M ne pjesen e siperme (i.e.,ii eshte ngarkuar ne memorje nga disku). Sidoqofte nje faqe eshte referuar, keshtu qe nuk eshte brenda nje kutie te rende, ndodh nje page fault, sic shfaqet nga />s poshte matrices.

Le te permbledhim tani me pak fjale shkurtimisht disa nga karakteristikat e modelit gabim. H m , ndersa nje faqe eshte referuar, ajo eshte zhvendosur ghithmone ne hyrje te M. Se dyti, ne qofte se faqja e adresuar eshte tashme ne Af, gjitha faqet siper saj zhvendosen nje pozicion poshte. Ky kalim nga brendesia e kutise jashte saj i korrespondon nje faqeje ekzistuese te debuar nga memorja. Se treti, faqet qe ishin poshte faqes se adresuar nuk jane zhvendosur. Ne kete menyre, permbajtja e M saktesisht paraqet permbajtjen e algoritmit LRU. Ndone se ky shembull perdor LRU, modeli funksionon njelloj me algoritmat e tjere. Posacerisht , ndodhet nje klase algoritmash e cila eshte kryesisht e vecante; algoritmat qe kane karakteristikat

M(m , r) <= M(m+ \. r)

Ku m ndryshon gjate page frames, dhe r eshte nje indeks ne stingen reference. fare kjo thote eshte qe seti i faqeve te perfshira ne pjesen e fillimit te M per nje memorje me m page frame pasi r referencat e memorjes, jane perfshire gjithashtu ne MTOR nje memorje me m+1 page frames. E thene ndryshe, ne qofte se ne rrisim madhesine e memorjes me nje page frame, dhe riekzekuton procesin, i pare nga cdo pike veshtrim gjate ekzekutimit, gjitha faqet qe ishin prezente ne ekzekutimin e pare, jane gjithashtu prezente ne ekzekutimin e dyte, pergjate me nje faqe shtese. Nga ekzaminimi i fig 4-25 dhe nje ide e vogel se si funksionon, eshte e qarte qe LRU ka kete karakteristike. Disa algoritma te tjere, gjithashtu e kane ate, por FIFO nuk e ka. Algoritmet qe kane kete karakteristike quhen Stack Algorithms. Keto algoritme nuk preken nga anomalia Beladys dhe jane ne kete menyre me te preferuara nga teoria e memorjes virtuale.

4.5.3

Stringa distance

Per Stackun e algoritmit, kjo eshte shpesh e pershtatshme per te paraqitur stringen reference ne nje menyre me abstrakte sesa numrat aktual te faqeve. Nje faqe reference do te paraqitet qe tani e tutje me ane te nje distance nga maja e stakut ku faqja e adresuar ishte vendosur. Per shembull, referenca ne faqen 1 ne kolonen e fundit te Figures 4-25, eshte nje reference drejt nje faqeje ne distance 3 nga maja e stakut. (sepse faqja 1 ishte ne vendin e trete perpara references). Faqet qe akoma nuk jane adresuar, dhe si rrjedhim akoma nuk jane ne stack (i.e., akoma jo ne M) jane konsideruar te rrine ne distance <<. Stringa distance per figuren 4-25 eshte caktuar ne fund te figures.

Shenimi qe stringa distance varet jo vetem nga stringa reference por edhe nga algoritmi i faqosjes. Me te njejten stringe reference origjinale, nje tjeter algoritem faqosje, duhet te beje zgjedhje te ndryshme rreth asaj se cilat faqe te nxjerr jashte. Si rezultat, rrjedh nje sekuence e ndryshme e stakut. Karakteristikat statistikore te stringes distance kane nje ndikim te madh ne performancen e algoritmit. Ne Fig 4-26(a) ne shohim funksionin e densitetit propabilitar per hyrjen ne nje stringe distance, d. Pjesa me e madhe e hyrjeve ne string jane ndermjet I dhe k. Me nje memorje prej k page frame, ndodhin me pak page faults.

Ne kundershtim, ne figuren 4-26(b) referencat jane nxjerre jashte, keshtu qe e vetmja rruge per te menjanuar nje numer te madh te page faults eshte ti japesh programit aq page frame (aq) sa ka faqe virtuale. Te pasurit e nje programi si ky eshte tamam nje fat i keq

4.5.4 PARASHIKIMI I MASES SE PAGE FAULT

Nje nga karakteristikat me te mira te distances; stringa eshte qe ajo qe mund te perdoret per te parashikuar numrat e page faults qe do te ndodhin nga memorje te permasa te ndryshme. Ne do te demostrojme se si kjo llogaritje mund te bazohet ne shembullin e figures 4-25. Qellimi eshte te besh nje kalim mbi stringen distance dhe, nga informacioni i mbledhur te aftesohesh per te parashikuar sa shume page fault, duhet te kete procesi ne memorjet me 1, 2, 3,., n. page frame, ku n eshte numri i faqeve virtuale ne procesin e hapesires se adreses. Algoritmi fillon me skanimin e stringes distance, faqe per faqe. Ajo ruan gjurmet e numrit 0\, kohet 1 ndodhin, numri i koheve 2 ndodhin, dhe keshtu me rradhe. Le te jete C

numri i ndodhive te j. Per stringen distance te fig. 4-25 vektori C eshte ilustruar ne fig.427(a). Ne kete shembull, kjo ndodh kater here, keshtu qe faqja e referuar eshte pothuajse ne maje te stakut. Tre heret referenca eshte tek fillimi i faqes tjeter, dhe me tutje. Le te jete Cx numri i hereve qe ndodhin ne stringen distance.

Fig.4-27 Njesimi i mases se page faults nga stringa distance, (a) vektori C, (b) Vektori F Tani llogarit vektorin / sipas formules..

Fm =

k m 1

C k + C

Vlera e Fm sht numri i page faults qe do t ndodhin ne distancen e stringes se dhene dhe m page frame. Pr distancen e stringes t Fig. 4-25, Fig. 4-27(b) jep vektorin F. Pr shembull, F sht 20, domethene qe ne memorje ajo ze vetm 1 page frame, jasht 24 referencave ne stringe, gjithe page fault prvec katr qe jane t njjt si faqja reference e meparshme. Pr t pare pse kjo formule funksionon, kthehu tek kutia e rende ne fig. 4-25. Le t jet m numri i page frame ne krye t M. Nj page faults ndodh sa here nj prishje e stringes distance sht m+1 ose me shume. Shuma ne formulen e mesiprme prllogarit numrin e

hereve qe ndodhin crregullime. Ky model mund t prdoret pr t bere parashikime t tjera. (Maekawa et ah,1987).

4.6

Projektimi i faqeve t sistemeve.

Ne paragrafet e meparshem u tregua se si funksionojne faqet, u treguan disa nga algoritmet baze t zevendesimit t faqes dhe treguam dhe si ti modelojme faqet. Pr t projektuar nj sistem, ju duhet t dini akoma me shume ne menyre qe ai t funksionoje sa me mire. Kjo sht e ngjashme me nj loje shahu, ku ju duhet t dini mire levizjet e torres, kaloresit, oficerit dhe gureve t tjere ne menyre qe t jeni nj lojtar i mire. Ne paragrafet qe vijne, ne do t shohim disa hapa t tjere qe duhen pasur parasysh me shume kujdes nga projektuesit e sistemeve operative ne menyre qe t kemi nj performance sa me t mire t sistemit.

4.6.1

Krahasimi politikave t alokimit local kundrejt atij global.

Ne paragrafet paraprijes ne diskutuam disa algoritma qe bnin t mundur kapjen dhe zevenedsimin e nj faqeje kur shkaktohej nj gabim. Nj ceshtje e rendesishme qe lidhet me ket problem (t cilen ne e kemi shmangur deri tani) sht se si mund t alokohet memoria gjat ekzekutimit t proeseve. Shikoni figuren 4-28(a). Ne ket figure tre proeset A, B, C jane proese t ekzekutueshme. Supozojme se proesi A ka nj gabim faqeje (page fault). A do t mundet algoritmi i zevendesimit t faqes t gjeje faqen qe sht prdorur e fundit duke marre ne konsiderate vetm 6 faqet qe jane alokuar pr momentin tek A, ose duke i konsideruar t gjitha faqet ne memorie? Ne figuren 4-28(a) , n qoft se se shohim vetm faqet A faqja me moshen (age) me t vogel sht ajo me vlere A5, keshtu kemi situatn si ne figuren 4-28(b). Nga ana tjetr n qoft se faqja me moshen me t ulet sht hequr (removed) pa marre parasysh vleren e saj, athere do t merret faqja B3 dhe do t kemi situatn si ne figuren 4-28(c). Algoritmi ne figuren 4-28(b) quhet edhe algoritmi lokal i zevendesimit t faqeve, kurse algoritmi i figures 4-28(c) quhet algoritmi global i zevendesimit t faqes. Algoritmat lokal jane efektive kur alokojne do proes ne nj zone t caktuar t memories, kurse algoritmat globale alokojne page frames ne menyre dinamike gjat ekzekutimit t proeseve. Keshtu numri i faqeve qe i prket do proesi varion ne kohe.

Figura4-28. Zevendesimi local kundrejt atij global. (a) Konfigurimi fillestar. (b) zevendesimi local i faqes. (c) zevendesimi global i faqes.

Zakonisht, algoritmat globale punojne me mire, ne vecanti kur hapesira e punes (working set) ndryshon gjat gjithe kohes se proesit. N qoft se prdorim nj algoritem lokal dhe hapesira e punes rritet, goditja (thrashing) do t shfaqet n qoft se kemi faqe t lira. N qoft se hapesira e punes zvogelohet, algoritmat lokal humbasin memorie. N qoft se prdorim nj algoritem global, sistemi duhet t vendose ne menyre t vazhdueshme se sa faqe duhet ti caktoje do proesi. Nj menyre sht t monitorojme hapesiren e punes neprmjet biteve aging, por kjo menyre nuk e parandalon plotsisht goditjen (thrashing). Nj menyre tjetr sht t kemi nj algoritem pr alokimin e faqeve t proeseve. Sipas ketij algoritmi prcaktohet periodikisht numri i proeseve qe po ekzekutohen dhe alokohet do proes ne menyre t barabart. Keshtu n qoft se kemi 12.416 faqe dhe 10 proese, do proes merr 1241 faqe kurse 6 faqet e fundit prdoren kur shkaktohen page fault (gabime ne faqe). Megjithese kjo metode nga njra ane duket e mire (ndarja e faqeve ne menyre t barabart pr do proes), nga ana tjetr nuk bn dot nj dallim midis hapesires qe zene proeset, pr shembull ndermjet nj proesi 10-KB dhe 300-KB (i konsideron proeset si t barabart ne hapsire memorieje). Proesi 300-KB sht 30 here me i madh se ai 10KB. Ne ket menyre sht me mire qe ti jepet do proesi nj numer minimal faqesh qe ai t ekzekutohet, pa u shqetsuar se sa i vogel mund t jet proesi. Ne disa makina, nj instruksioni t vetm me dy operande (burim dhe destinacion) mund ti duhet rreth 6 faqe sepse vet instruksioni, operandi burim dhe operandi destinacion mund t ndryshojne

kufijt e faqes. Me nj alokim prej vetm 5 faqesh instruksionet qe ndodhen ne nj program nuk do t ekzekutohen dot. Ne qoft se prdorim nj algoritem global, sht e mundur t fillojme do proes me nj numer t caktuar faqesh i cili sht proporcional me madhesine e proesit, por alokimi duhet t beje update ne menyre dinamike sapo proesi ekzekutohet. Nj menyre pr t menaxhuar alokimin sht prdorimi i algoritmit PFF (Page Fault Frequency). Ky algoritem tregon se kur duhet t zmadhojme apo t zvogelojme alokimin e faqes se proesit por nuk na tregon se cilen faqe duhet t zevendesojme kur shkaktohet nj gabim. Ky algoritem kontrollon vetm madhesine e alokimit. Pr nj klase t madhe algoritmash t zevendesimit t faqes, duke prfshire edhe LRU, sht pare qe sa me i madh t jet numri i faqeve qe alokohet aq me shume ulet mundesia e ndodhjes se gabimit. Kjo tregohet me ane t grafikut t figures 4-29.

Figura 4-29. Gabimi i faqes ne funksion t numrit t faqeve

Pr t matur vleren e gabimit t faqes duhet t numerojme numrin e gabimeve qe ndodhin pr sekonde. Vija A, me nderprerje, qe paraqitet ne grafik, paraqet nj vlere t lart t gabimit t faqes, prandaj algoritmi rrit numrin e faqeve pr t ulur vleren e gabimit. Vija B, paraqet nj vlere t ulet t gabimit, por ne ket rast arrijme ne prfundimin qe proesi ka marre nj hapesire me t madhe memorieje. Prandaj numri i faqeve duhet zgjidhur i tille qe vlera e gabimit dhe memoria qe okupon proesi t jet sa me e vogel (kurba midis vijes A dhe B), gje e cila kontollohet neprmjet PFF qe mundohet t ruaje nj normalitet t caktuar. sht e rendesishme t theksojme se algoritmat e zevendesimit t faqes mund t prdorin njren nga dy politikat: politiken e zevendesimit lokal ose politiken e zevendesimt global. Pr shembull, FIFO mund t zevendesoje faqen e vjetr nga kujtesa (algoritm global) ose mund ta zevendesoje at nga proesi qe e ka ne zotrim (algoritem local). Keshtu zgjedhja e politikes local apo global varet nga algoritmi dhe menyra se si funksionon ai.

4.6-2 Kontrolli i ngarkeses Megjithese mund t kemi algoritmin me t mire pr zevendesimin e faqes dhe nj alokim global t prshtatshem pr faqet e proeseve, mund t ndodhe qe sistemi t goditet (thrashes). Ne fakt, sa here qe hapesira e punes e t gjithe proeseve kalon kapacitetin e memories, goditja sht e pa evitueshme. Nj simptome e kesaj situate shfaq edhe algoritmi PFF i cili tregon se disa proese kane nevoje pr me shume memorie dhe asnjri prej proeseve t tjere nuk kerkon me pak memorie. Ne ket situat nuk ka rruge tjetr prvecse ti jepet memorie proeseve qe kerkojne me shume duke demtuar disa t tjera. Nj zgjidhje e ketij problem sht shpetimi i prkohshem i proeseve. Pr t reduktuar numrin e proeseve qe konkurojne me njri tjetrin pr memorie behet nj swap (shkembim), duke i derguar disa nga proeset ne disk ne menyre qe t lirohen faqet qe ata kishin zene. Keshtu pr shembull n qoft se nj proess dergohet ne disk, athere faqet qe ai kishte zene ne memorie do t ndahen midis proeseve t tjera, qe kane nevoje pr me shume memorie. N qoft se kerkesa pr memorie plotsohet pr t gjitha proeset athere sistemi do t vazhdoje t punoje pr aq kohe, derisa do t linde nj proes i ri i cili kerkon serish memorie. N qoft se pas proesit t pare qe beme swap, kerkesa pr memorie nuk plotsohet akoma, athere nj proes i dyt do t kaloje ne disk duke bere prape swap. Kjo do t vazhdoje derisa t prfundojne goditjet (domethene derisa t plotsohen kerkesat e proeseve pr memorie). Pra neprmjet procedures swap, t shkembimit t proeseve midis memories dhe diskut, behet i mundur kontrolli i ngarkese ne memorie. Procedura swap behet sipas nj plani (schedule) t caktuar. Sapo disa nga proeset mbarojne se ekzekutuari ne memorie, procedura i rikthen proeset nga disku ne memorie. Nj tjetr faktor qe duhet marre ne konsiderate sht edhe shkalla e multiprogramimit. Sic e pame edhe ne figuren 4-4, kur numri i proeseve ne memorien kryesore sht i vogel, CPU-ja mund t qendroje ne gjendje pritjeje pr nj period t konsiderueshme kohe. Ky faktor tregon qe prvec madhesise se proesit dhe vleres se faqeve, kur vendosim t bejme nj proes swap, duhen marre ne konsiderate edhe karakteristikat e proesit si: n qoft se proesi sht i lidhur me CPU apo me pajisjet I/O, si dhe karakteristikat e proeseve t tjere.

4.6.2

Madhesia e faqes

Madhesia e faqes sht nj parametr i cili zgjidhet nga sistemi operativ. N qoft se hardware sht projektuar pr shembull me faqe 512-byte, sistemi operativ mund ti rendise faqet 0 dhe 1, 2 dhe 3, 4 dhe 5 dhe keshtu me rradhe, si faqe 1-KB duke alokuar gjithmone dy faqe t njpasnjshme 512-byte secila.

Duke prcaktuar sa me mire madhesine e faqes, ne balancojme shume faktore konkurues. Si rezultat, nuk ka nj kufi t favorshem. Si fillim, ka dy faktore qe argumentojne nj faqe t vogel. Nj tekst, e dhene ose nj stack i zgjedhur ne menyre random (t rastesishme) nuk mbushin nj numer t plot faqesh. Mesatarisht, gjysma e faqes nga fundi do t jet bosh. Hapesira e vecant ne ket faqe sht e humbur (waste). Kjo hapesire e humbur quhet fragmentim i jashtm (internal fragmentation). N qoft se kemi n segment ne memorie dhe nj madhesi faqeje prej p byte, n*p/2 byte do t jene waste (do t humbin) ne fragmentimin e jashtm. Ky arsyetim prdoret pr nj faqe me madhesi t vogel. Nj argument tjetr pr nj faqe me madhesi t vogel behet i dukshem n qoft se marrim ne konsiderate nj program me 8 sekuenca me 4 KB secili. Me nj madhesi faqeje 32 KB, programi do t alokoje 32 KB gjat gjithe kohes. Me nj madhesi faqeje 16KB do t alokoje 16 KB. Me nj madhesi faqeje 4 KB ose me t vogel kerkon vetm 4 KB ne do moment. Ne prgjithesi, nj faqe me hapesire t madhe mund t mbaje me shume programe t paprdorshme ne memorie sesa nj faqe me hapesire t vogel. Nga ana tjetr, duke qene se faqet jane t vogla, bejne qe programet t kerkojne me shume faqe, duke krijuar nj page table (tabele faqesh). Nj programi 32 KB i duhen katr faqe 8 KB, pothuaj 64 faqe 512 byte. Transferimi midis memories dhe diskut behet me nga nj faqe ne do transfert. Keshtu transferimi i nj faqeje t vogel apo t madhe kerkon t njjtn kohe. Duhet 64*10 msec pr t ngarkuar 64 faqe 512 byte qe sht pothuaj ekuivalent me 4*12 msec qe duhen pr t ngarkuar 4 faqe 8 KB. Ne disa makina, tabela e faqeve ngarkohet ne regjistrat e hardware-it do here qe CPU-ja kalon nga nj proes ne tjetrin. Keto makina duke patur faqe me madhesi t vogel bejne qe koha qe duhet pr ngarkimin e regjistrave t faqeve t rritet kur madhesia e faqeve vjen e zvogelohet. Vec kesaj, hapesira qe okupohet nga tabela e faqes vjen e rritet kur madhesia e faqes zvogelohet. Le ta analizojme ceshtjen me sipr nga ana matematikore. Shenojme madhesine e proesit me s byte dhe madhesine e faqes me p byte. Vec kesaj, supozojme se do faqe ne hyrje kerkon e byte. Numri i faqeve qe duhen pr nj proess sht s/p byte dhe okupohen s*e/p byte nga tabela e faqes. Memoria wasted sht p/2 byte. Keshtu shuma e tabeles se faqeve me fragmentimin e jashtm (waste) shenohet overhead dhe jepet nga shprehja:

overhead = s*e/p + p/2

Termi i pare se/p (madhesia e tabeles se faqeve) ka vlere t madhe kur madhesia e faqes sht e vogel. Termi i dyt, p/2 (fragmentimi i jashtm - waste) ka vlere t madhe kur madhesia e faqes sht e madhe. Duke derivuar shprehjen e mesiprme sipas p dhe duke e barazuar me zero marrim ekuacionin:

-se/p2 +1/2 = 0

Prej ketij ekuacioni ne mund t nxjerrim formulen e prshtatshme pr t prcaktuar madhesine e faqes (duke konsideruar vetm memorien waste dhe page table). Keshtu kemi:

p 2se

Pr s = 1MB dhe e = 8 byte madhesia e faqes do t jet 4 KB.

4.6.3

Vecimi i hapesirave t instruksioneve dhe t dhenave.

Pjesa me e madhe e kompjuterave kane nj single address space (hapesira e adreses) e cila mban programe (instruksione - I) dhe t dhenat D, sic tregohet ne figuren 4-30(a). N qoft se hapesira e adreses sht e mjaftueshme, do gje do t punoje mire. Ne t kundert n qoft se ajo sht shume e vogel, do ti detyroje programuesit ti qendrojne mbi koke pr t vendosur do gje ne hapesiren e adresave.

Nj zgjidhje sht qe t ndajme hapesiren e adresave nga hapesira e instruksioneve. Keto i shenojme me I-space pr instruksionet dhe me D-space pr t dhenat. Hapesira e adresasve fillon nga zero 0 deri ne max i cili mund t jet 216 1 ose 232 1, sic tregohet edhe ne figuren 4-30(b). Ne nj kompjuter me ket projektim, t dyja hapesirat e adresave mund t faqosen (paged), pavaresisht nga njra tjetra. Secila faqe ka tabelen e vet, me t dhenat e saj nga faqet virtual deri tek faqet fizike qe jane page frames. Kur hardware do t trheq (fetch) nj instruksion, ai e di qe duhet t prdor I-space dhe tabelen e I-space.

Ne menyre t ngjashme, n qoft se do t transferoje t dhena ai do ti drejtohet tabeles Dspace. Ne ket menyre, duke prdorur dy adresa me hapesira t ndryshme, nj pr instruksionet I-space dhe nj pr t dhenat D-space, ulet kompleksisteti i adresimit dhe shfrytzohet me mire memoria e kompjuterit.

4.6.4

Ndarja e faqeve

Nj tjetr problem ne projektimin e faqeve sht dhe ndarja (share). Ne nj sistem t madhe multiprogramimi shpesh here ndodh qe disa prdorues t prdorin t njjtin program, ne t njjtin cast t kohes. Keshtu sht me eficient t ndajme faqet dhe t shmangim dy kopje t nj faqeje ne memorie ne t njjtin cast t kohes. Por nj problem tjetr sht se jo t gjitha faqet mund te ndahen. Ne vecanti, faqet qe jane vetm t lexueshme (read only), si tekstet e programeve mund t ndahen, kurse faqet e t dhenave (data) nuk ndahen. N qoft se ndarja e hapesirave I-space dhe D-space sht e mundur, athere sht e leht t ndajme programet qe kane dy ose me shume proese dhe prdorin t njjtn faqe ne Ispace, dhe ato qe kane faqe t ndryshme ne D-space. Zakonisht, ne nj implementim qe mundeson ndarjen ne ket menyre, tabelat e faqeve jane struktura t dhenash t pavarura nga tabela e proeseve. do proes ka dy pointera ne tabelen e proeseve: njri ndodhet ne tabelen I-space dhe tjetri ne tabelen D-space, sic tregohet ne figuren 4-31.

Figura 4-31. Dy proese t cilat ndajne t njjtin program, ndajne edhe tabelen e faqeve.

Kur skedulimi zgjedh nj proes pr tu ekzekutuar, prdor pointerat pr t lokalizuar tabelat e faqes dhe therret MMU pr ti prdorur ato. N qoft se nuk do t kishim nj ndarje t hapesirave I dhe D, proeset mund t ndanin programet (librarit), por mekanizmi do t ishte shume i komplikuar. Kur dy ose me shume proese ndajne disa kode, athere shfaqet nj problem me ndarjen e faqeve. Supozojme se proeset A dhe B jane duke prdorur t dy editorin dhe duke ndare faqet e tyre. N qoft se skeduleri kerkon t fshij proesin A nga memoria, athere ai debon t gjitha faqet dhe mbush t gjitha page framet bosh me programe t tjera, duke bere qe proesi B t gjeneroje nj numer t madh gabimesh ne faqe (page faults), pr ti risjelle ato serisht ne memorie. Ne menyre t ngjashme, kur proesi A prfundon, sht e rendesishme t dime ne se faqet jane duke u prdorur akoma, ne menyre qe hapesira e tyre ne disk t mos boshatiset nga ndonj gabim. Kerkimi i t gjitha tabelave t faqes pr t pare n qoft se ndonj faqe mund te ndahet, sht tepr i kushtueshem, keshtu struktura speciale t t dhenave nevojiten pr t mbajtur drejtimin e faqeve qe ndahen. Ndarja e t dhenave sht e ndryshme nga ndarja e kodeve, por kjo nuk sht shume e rendesishme. Ne vecanti, ne UNIX, pas nj thirrjeje sistem fork, babai dhe femija duhet t ndajne t dyja: program tekst dhe data. Ne nj sistem, ajo cka duhet bere sht ti jepet secilit prej proeseve tabela e tij e faqes dhe t kene t dy proeset t njtin grup faqesh. Keshtu nuk nevojitet asnj kopje e faqeve ne kohen fork. Megjithat, t dyja faqet e t dhenave jane mapped ne t gjitha proeset si READ ONLY (vetm t lexueshme). Pr sa kohe qe t dy proeset lexojne t dhenat e tyre pa i modifikuar ato, kjo situat do t vazhdoje. Sapo ndonjri prej proeseve i bn update nj fjale memorije, athere shkaktohet nj trap (kurth) ne sistemin operativ. Nderkohe sht bere nj kopje e faqes, keshtu do proess ka kopjen e tij private. T gjitha kopjet jane bashkuar si READWRITE, keshtu qe shkrimet pasuese ne secilen prej kopjeve behet pa shkaktur nj trap. Kjo strategji nenkupton qe ato faqe qe nuk jane shkruajtur asnjehere (duke prfshire t gjitha faqet e programit) nuk kane nevoje t kopjohen. Vetm faqet e t dhenave qe jane shkruajtur aktualisht kane nevoje t kopjohen. Kjo menyre quhet copy on write, rrit performancen duke reduktuar kopjimin.

4.6.5

Cleaning Policy

Faqet punojne mire kur ato kane shume page frame t lira qe mund t deklarohen si shkaktare t gabimeve ne faqe. N qoft se do page frame sht plot dhe vec kesaj

modifikohen, prapara se nj faqe e re t sillet, nj faqe e vjetr duhet t ruhet ne disk. Pr t siguruar hapesire t madhe me page frames t lira, shume faqe sistemi kane nj fushe proesesh e cila quhet paging daemon. Paging daemon fle (sht jo aktive) pjesen me t madhe t kohes dhe zgjohet (behet active) periodikisht pr t inspektuar gjendjen e memories. N qoft se shume page frame jane t lira, paging daemon fillon selektimin e faqeve pr t evituar prdorimin e algoritmit t zevendesimit t faqes, n qoft se keto faqe jane modifikuar kur jane ngarkuar athere ato patjetr qe jane ruajtur ne disk. N qoft se ndonj nga faqet e nxjerra nevojitet serisht prpara se frame i faqes t jet mbishkruajtur, ajo mund t korrigjohet duke e hequr at nga zona e page frame-ve t lira. Mbajtja e nj fushe rezerve me page frames rrit performance dhe eviton prdorimin e gjithe memories dhe kerkimin e nj frame ne momentin qe duhet. Nj nga menyrat pr t implementuar ket cleaning policy sht edhe ora me dy-shigjeta. Shigjeta e prparme kontrollohet nga paging daemon. Kur ajo pointon ne nj faqe t mbushur, kjo faqe shkruhet ne disk dhe shigjeta e prparme vazhdon prpara pr t pointuar ne faqen e rradhes. Kur ajo pointon ne nj faqe t bardhe (boshe) ajo vazhdon serisht prpara dhe nuk kryen asnj veprim me faqen. Shigjeta e prapme prdoret pr zevendesimin e faqes, tamam si ne algoritmin standart t ores.

4.6.6

Nderfaqja e Memories Virtuale

Deri tani ne kemi diskutuar se memoria virtual sht transparente ndaj proeseve dhe programuesve. E gjitha cfare shohim sht nj hapesire e madhe adresash virtual ne nj kompjuter me memorie fizike t vogel. Kjo sht e vertet pr shume sisteme, por ne disa sisteme t avancuara, programuesit kane disa kontrolle mbi mbi hartn e memories dhe mund ta prdorin at ne nj menyre jo tradicionale pr t rritur sjelljen e programeve. Nj nga shkaqet qe programuesit duhet t marrin kontrollin mbi hartn e memories sht qe t lejojne dy ose me shume proese t ndajne t njjtn memorie. N qoft se programuesit mund t emertojne zonat e memories, sht e mundur qe nj proes ti jape nj proesi tjetr emrin e nj zone dhe qe ky proess t mund t vendoset ne t. Me dy (ose me shume) proese qe ndajne t njjtat faqe prftohet nj gjeresi brezi e lart, ku njri proes shkruan ne memorien e ndare dhe tjetri lexon prej saj. Ndarja e faqeve prdoret gjithashtu edhe pr t implementuar nj sistem me mesazhekaluese (message-passing) me performance t lart. Normalisht, kur mesazhet kane ardhur, t dhenat jane kopjuar nga nj adrese ne nj tjetr, me nj kosto t konsiderueshme. N qoft se proeset do kontollonin hartn e faqes se tyre, nj mesazh do t kalonte duke patur proesin e derguar t pa vene ne hartn e faqes qe prmban mesazhin, dhe proesin e marrjes t vene ne t. Ketu vetm emrat e faqeve do t kopjohen, ne vend qe t kopjohet t gjithe t dhenat.

Nj teknike tjetr e avancuar e menaxhimit t memories sht distributed shared memory (Feely ne 1995; Li, 1986; Li dhe Hudak, 1989; dhe Zekauskas ne 1994). Ketu idea sht qe t lejohen shume proese ne nj network t ndajne mundesisht nj bashkesi faqesh (ky nuk sht kusht i nevojshem), duke prdorur nj linj t vetme adresash. Kur nj proes i referohet nj faqeje, e cila nuk gjendet ne hart, athere shkakohet nj page fault (gabim ne faqe). Mbajtesi i page fault it mund t gjendet ne kernel ose ne hapesiren user, pasi lokalizohet makina mbajtse e faqes i dergohet asaj nj mesazh qe i kerkon pr t hequr faqen dhe dergohet faqja ne network. Kur faqja arrin, ajo vendoset ne hart dhe instruksioni i gabimit ristartohet. Ne do t shikojme me me hollesi distributed shared memory ne kapitullin 8.

4.7

QELLIMET E IMPLEMENTIMIT

Implementuesit e sistemeve t memorjes virtuale duhet t zgjedhin midis algoritmeve teorike me kryesore si nj rast i dyt kunder kohes, shprndarjen e faqeve lokale kunder faqeve globale. Ata gjithashtu duhet t jene ne dijeni pr nj numer qellimesh implementimi. Ne ket seksion do i hedhim nj shikim disa problemeve dhe disa zgjidhjeve.

4.7.1

SISTEMI OPERATIV I PRFSHIRE ME PAGING

Sistemi operativ kur sht ne pune e prdor katr here paging: krijimi i proesit, ekzekutimi, koha e gabimit dhe mbarimi i proesit. Tani do i ekzaminojme t gjitha. Kur nj proes i ri krijohet ne sistemin paging, Sistemi operativ duhet t dije sa i madh do jet programi dhe t dhenat qe t krijoje nj tabele pr t. Duhet t vendoset nj hapesire ne memorje pr faqen e tabeles dhe duhet t fillohet. Kur proesi ekzekutohet, tabela e faqes duhet t jet ne memorje. Hapesira duhet t vendoset ne nj siprfaqe t ndryshme t diskut qe kur t ndryshohet faqja t ket ku t shkoje. Siprfaqja e ndryshuar duhet t fillohet me nj program tekst dhe t dhena qe kur proesi i ri t filloje t kape page faulting, faqet t hyjne brenda nga disku. Perfundimisht, informacioni rreth tabelave t faqes dhe siprfaqes se ndryshueshme ne disk duhet ta kemi ne tabelen e proesit. Kur nj proess jepet pr ekzekutim, MMU-ja duhet t risetohet pr proesin e ri dhe TLB-ja t mbushet qe t jet ne dijeni t proesit qe po ekzekutohej me pare. Tabela e faqes se proesit t ri duhet t behet paresore duke e kopjuar at ose duke e shenjestruar

ne nj regjistr hard-i. Zakonisht disa ose t gjitha faqet e proesit mund t sillen ne memorje pr t ulur numrin e gabimeve fillestare. Kur ndodh nj page fault; SO duhet t lexoje ne regjistrat hardware, t gjeje se cila adrese virtuale e shkaktoi fault. Nga ky informacion, duhet t gjeje cila faqe sht e nevojshme dhe ta vendose at faqe ne disk. Pastaj, duhet t gjeje nj page frame t disponueshme qe t vendose faqen e re, ndoshta dhe duke hequr disa faqe te vjetra ne se do te jete e nevojshme. Pastaj duhet t lexoje fjalen e nevojshme ne page frame. Ne fund, duhet t beje nje kthim mbrapsht te numruesit t programit qe t prqendrohet te instruksioni i gabimit dhe ta ekzekutoje ate perseri. Kur nj proce ekziston, SO duhet t liroje tabelen e faqes se tij, faqen e tij dhe hapesiren ne disk qe nxe faqja kur ato jane ne disk. N qoft se disa faqe jane t share-uara me procese te tjera, faqet ne memorje dhe ne disk mund t lirohen vetm kur proesi i fundit qe i prdore ato ka prfunduar.

4.7.2

FUNKSIONI I PAGE FAULT.

Me ne fund jemi ne nj pozicion qe mund t prshkruajme cfare ndodh ne nj page fault ne detaje; Sekuenca e ngjarjeve sht; 1. Pajisja bie ne kurthin e kernelit, duke e ruajtur numeruesin e programit ne stack. Ne shumicen e makinave, disa informacione rreth gjendjes se instruksionit t tanishem memorizohet ne regjistrat speciale t CPU-se. 2. Nj kod i prbashket leshohet t regjistroje regjistrat e prgjithshem dhe informacione t nevojshme, qe SO te mos i shkaterroje ato. Kjo rutine therret sistemin operativ si nj procedure. 3. SO zbulon qe ka ndodhur nj page fault dhe mundohet t gjeje se cila faqe virtualet nevojitet. Zakonisht ky informacion mbahet ne njrin nga regjistrat hardware. Ne t kundert SO duhet t trheqe numruesin e programit, t ngarkoje instruksionin dhe ta prshkruaje ne soft, qe t gjeje cfare po bnte kur ndodhi fault. 4. Kur adresa virtuale qe shkaktoi fault dihet, proesi kontrollon n qoft se adresa ishte e rregullt. N qoft se jo, proesi dergon nj sinjal pr ta zhdukur at. N qoft se adresa sht e rregullt, sistemi kontrollon ne se korniza e faqes sht e lire. Ne se ska korniza t lira algoritmi i zhvendosjes se faqes duhet t zgedhe nj victim. 5. Ne se korniza e faqes se selektuar sht pis, faqja vendoset pr transferim ne disk dhe nj switch cfaredo vendoset ne vend t saj, derisa t prfundoje

transferimi. Ne cdo rast, frame shenohet si e zene, qe t mos prdoret pr ndonj qellim tjetr. 6. Kur pastrohet korniza e faqes, SO shikon sipr adreses se diskut ku ndodhet faqja e nevojshme dhe skedulon diskun qe do ta sjelle at. Kur faqja po ngarkohet proesi i faulting sht akoma i pezulluar dhe nj tjetr proes ekzekutohet n qoft se ai punon. 7. Kur interrupti i diskut tregon qe faqja ka ardhur, tabelat e faqes jane update-uar t reflektojne pozicionin e tij dhe korniza sht vendosur ne gjendje normale. 8. Instruksioni i faulting sht vendosur ne gjendjen qe kishte kur filloi dhe numruesi i programit sht risetuar qe t prqendrohet te instruksioni. 9. Proesi faulting sht vendosur dhe SO kthehet t rutina e gjuhes assembler qe e therriti at. 10. Kjo rutine ringarkon regjistrat dhe informacione t tjera t gjendjes, dhe kthehet t hapsira e userit t vazhdoje ekzekutimin, n qoft se nuk ndodh nj fault tjetr.

4.7.3

INSTRUKSIONI BACKUP

Kur nj proes i referohet nj faqeje qe nuk sht ne memorje, instruksioni qe shkakton fault ndalon dhe ndodh nj kurth te sistemi operativ. Pasi SO ka ngarkuar faqen e nevojshme, duhet t ristartoje instruksionin qe shkakton kurthin. Kjo sht dicka e thjesht pr tu thene. Per te pare natyren e ketij problemi nga ana negative e saj, shqyrtojme nj CPU qe ka instruksione me dy adresa, si Motorola 680x0, t prdorura gjeresisht ne sistemet e nderfutura. Per shembull, instruksioni:

MOVE.L #6(A1), 2(A0)

ka 6 byte. Shiko fig 4-32. Qe t ristartosh sistemin, SO duhet t percaktoje se ku do t vendoset byte i pare i instruksionit. Vlera e PC ne kohen e kurthit varet se cili operand ka deshtuar dhe se si jane implementuar mikrokodet e CPU.

Fig 4-32- nj ton instruktiv qe shkakton page fault

Ne fig 4-32 kemi nj instruksion qe fillon t adresa 1000, qe perfshin tre referenca memorje: vet fjalen e instruksionit dhe dy offset pr operandet. Duke u varur t secila nga keto tre referenca shkaktoi page fault. PC mund t jet 1000, 1002 ose 1004 ne kohen e gabimit. sht e pamundur pr SO t prfundoje pikerisht aty ku filloi instruksioni. N qoft se PC sht 1002 ne kohen e gabimit, SO nuk ka rruge pr t treguar ne se fjala ne 1002 sht adrese memorje e lidhur me nj instruksion t 1000 apo nj instruksion opcode. Ky problem mund t kish shkuar dhe me keq. Disa tipe adresash 680x0 prdorin autoinkrementim, e cila do t thot qe nj efekt anesor i ekzekutimit t instruksionit sht t inkrementosh nj ose me shume regjistra. Instruksionet qe prdorin autoinkrementim mund t deshtojne. Ne varesi t detajeve t mikrokodit, inkrementimi mund t behet para referencave t memorjes, ku SO duhet t dekrementoje regjistrin ne soft para se t ristartoje instruksionin. Autoinkrementimi mund t behet edhe pas referencave t memorjes ku nuk mund t behet ne kohen e kurthit dhe nuk mund t kthehet nga SO. Ekziston edhe autodekrementimi i cili shkakton t njjtin problem. Detajet precize t autoinkrementimit dhe autodekrementimit qe jane ose jo para referencave t memorjes korresponduese, mund t ndryshojne nga instruksioni ne instruksion dhe nga nj model e CPU-je t nj tjetr. Fatmiresisht, ne disa makina, dizenjuesit e CPU-se i japin nj zgjidhje, zakonisht ne formen e nj regjistri t fshehur ne te cilin PC sht e kopjuar para se t ekzekutohet do instruksion. Keto makina mund t kene dhe nj regjistr dytsor qe u tregon se cili regjistr sht pr momentin autoinkrementuar ose dekrementuar dhe me sa. Pasi jepet ky informacion, SO i kthen nga e para t gjitha efektet e instruksionit fault, keshtu qe mund t fillohet e gjitha nga e para. N qoft se ky informacion nuk sht i disponueshem, SO duhet t sforcohet t zbuloje se cfare ndodh dhe si ta rregulloje at, mendohet se dizenjuesit e pajisjeve hardwareishin t paaft t zgjidhin problemin, keshtu qe ata hoqen dore dhe ja lane perdorueseve t SO t meren me t.

4.7.4

KYCJA E SISTEMEVE T MEMORJES

Dhe pse nuk i kemi diskutuar I/O ne ket kapitull, fakti qe nj kompjuter ka nj memorje virtuale sdo t thot qe I/O mungon. Memorja virtuale dhe I/O nderveprojne ne rruge t organizuar. Konsidero nj proes qe ka si qellim nje thirrje system, pr te lexuar nga disa skedare ose pajisje brenda ne nj buffer me hapesiren e adreses se saj. Ndersa pret qe I/O t prfundoje, proesi pezullohet dhe nj tjetr proess fillon ekzekutimin. Ky proess tjetr merr nj page fault. N qoft se algoritmi i faqes sht global, sht nj shans i vogel, por jo zero qe faqja qe prmban buffer-at I/O t zgjidhet t hiqet nga memorja. N qoft se nj pajisje I/O pr momentin ndodhet ne proces duke bere nj transfert DMA t asaj faqe, ta heqesh at shkakton qe nj pjese e t dhenave t shkruhen ne buffer-in qe I perkasin dhe nj pjesa tjetr t shkruhen mbi faqet e reja t ngarkuara. Nj zgjidhje e problemit sht kycja e faqeve t zena me I/O ne memorje. Keshtu qe ato nuk do t hiqen. Nj zgjidhje tjetr sht qe t gjitha I/O te behen ne kernel buffer dhe pastaj t kopjojme t dhenat ne faqet e prdorura.

4.7.5

BACKING STORE

Ne diskutim pr rivendosjen e algoritmeve t faqes pame se si nj faqe selektohet pr heqje. Nuk kemi thene se ku vendoset ne disk pasi nxirret jasht. Le t prshkruajme disa nga qellimet ne lidhje me menaxhimin e diskut. Algoritmi me i thjesht pr t shprndare hapesirat e faqes ne disk sht qe ne disk duhet t kesh nj hapesire t vecant. Kur operon sistemi, kjo siprfaqe sht bosh dhe prfaqesohet ne memorje si nj hyrje e vetme, duke i dhene origjinen dhe masen e saj. Kur fillon proesi i pare, nj pjese e siprfaqes se proesit t pare rezervohet dhe pjesa tjetr zbritet me at njsi. Kur fillojne proese t reja u caktohen siprfaqe t reja, t njjta ne madhesi me imazhet e tyre. Kur ato mbarojne hapesira ne disk sht e lire. Adresa e siprfaqes se diskut qe mbahet ne tabelen e proesit sht e lidhur me secilin proes. Para se nj proes t filloje, duhet t inicializohet siprfaqja. Nj rruge sht t kopjosh t gjithe imazhin e proesit ne siprfaqe, keshtu qe mund ta marim ashtu si duhet. Menyra tjetr sht t ngarkojme t gjithe proesin ne memorje dhe t shfletohet ashtu si nevojitet. Megjithat ky model i thjesht ka nj problem sepse proeset mund t zgjerohen pasi t fillojne. Edhe pse programi zakonisht sht i fiksuar, t dhenat nganjehere rriten dhe pila rritet gjithmone. Megjithat do ishte me mire t rezervonim siprfaqe t ndara pr tekstin, t dhenat dhe pilen dhe ti lejojme seciles nga keto siprfaqe, qe t prmbaje me shume se nj pjese ne disk.

Ekstremi tjetr sht t mos shprndaje asgje me prparesi, dhe nj hapesire disku pr secilen faqe kur ndryshohet. Keshtu proeset ne memorje nuk marrin ndonj siprfaqe t ndryshueshme. E keqja sht se nj adrese disku nevojitet ne memorje t mbaje pjese t seciles faqe ne disk. Me fjale t tjera duhet nj tabele pr proes pr t treguar pr secilen faqe se ku ndodhet ne disk. Dy alternativat jane treguar ne fig.4.33

Fig. 4-33

Ne fig 4-33 (a) sht ilustruar nj tabele me 8 faqe. Faqet 0, 3, 4 dhe 6 jane ne memorjen kryesore. Faqet 1. 2, 5 dhe 7 jane ne disk. Siprfaqja ne disk sht po aq e madhe sa siprfaqja e adreses virtuale t proesit (8 faqe), ku secila faqe ka nj vendndodhje fikse e cila shkruhet kur hiqet nga memorja kryesore. Pr t llogaritur ket adrese duhet t dime se ku fillon siprfaqja paging e proesit meqe faqet regjistrohen ne te vazhdimisht, sipas numrave te faqeve virtuale te tyre. Faqet qe jane ne memorje e kane gjithmone nj kopje (ne hije) ne disk, por kjo kopje nuk funksionon n qoft se faqja modifikohet kur ngarkohet. T fig 4-33(b) faqet nuk kane adresa fikse ne disk. Kur nj faqe shprndahet, zgjidhet nj faqe disku boshe dhe harta e diskut (e cila ka nj dhome pr nj adrese disku) behet update ne varesi t saj. Faqet ne memorje nuk kane kopje ne disk. Hyrjet e tyre ne hartn e diskut prmbajne nj adrese disku jo te rregullt ose nj bit qe i tregon ato sikur nuk jane ne prdorim.

4.7.6

NDARJA E PLANIT DHE E MEKANIZMIT

E rendesishme pr menaxhimin e kompleksitetit t nj sistemi sht t ndash planin nga mekanizmi. Ky princip mund t aplikohet t menaxhimi i memorjes duke patur ekzekutimin e memories si nj proes t nivelit prdorues. Nj ndarje e tille fillimisht u be ne Mach (Young et al,1987) dhe ne MINIX (Tanenbaum,1987). Prshkrimi me posht bazohet ne Mach.

Nj shembull i thjesht se si mund t ndahen plani dhe mekanizmi tregohet ne fig.4-34. Ketu sistemi i menaxhimit t memorjes ndahet ne tre pjese. 1. MMU e nivelit t ulet 2. nj page fault qe sht pjese e kernel 3. nj faqe t jashtme qe vepron ne hapesiren e prdoruesit t gjitha detajet se si funksionon MMU jane t prmbledhura t mbajtsja e MMU-se qe sht nj kod makine dhe qe duhet t rishkruhet pr do platforme t re qe SO dergon. Mbajtsja e page fault sht nj makine e pavarur dhe prmban shumicen e mekanizmit pr paging. Plani prcaktohet gjeresisht pr nj faqe t jashtme, qe vepron si nj proes prdorues.

Fig.4-34. page faulting me nj faqe t jashtme

Kur fillohet nj process, njoftohet faqja e jashtme qe t ndertoje hartn e faqes se proesit dhe t shprndaje backing store ne disk, n qoft se sht e nevojshme. Ndersa proesi

vazhdon, mund t hartoje objekte t reja ne hapesiren e adreses se saj, keshtu qe njoftohet prseri faqja e jashtme. Kur proesi fillon, ndonjehere mund t marre nj page fault. Mbajtsja e gabimit e dallon se cila faqe virtuale nevojitet dhe i dergon nj mesazh faqes se jashtme, duke i treguar se ku sht problemi. Faqja e jashtme lexon faqen e nevojshme nga disku dhe e kopjon at ne nj porcion te hapesira e adreses se saj. Dhe pastaj i tregon mbajtses se gabimit se ku ndodhet faqja. Kjo e fundit e heq faqen dhe pyet mbajtsen e MMU-se qe ta vendose ne vendin e duhur te hapesira e adreses se prdoruesit. Pastaj proesi i prdoruesit mund t ristartohet. Ky implementim e le t hapur ku do t vendoset algoritmi i zhvendosjes se faqes. Do ishte me e pastr ta kishim at te faqja e jashtme, por me ket afrim do t ket probleme. Principja midis ketyre sht se faqja e jashtme nuk ka akses t bitet R dhe M e t faqeve t tjera. Keto bite luajne rol tek shume algoritme paging. Prandaj disa mekanizma duhet ta kalojne ket informacion deri t faqja e jashtme ose algoritmi i zhvendosjes se faqes duhet t shkoje ne kernel. Ne raste t tjera faqja e gabimit i tregon faqes se jashtme se cilen faqe ka selektuar pr ta hequr dhe prodhon t dhena duke i hartuar ato ne adresat e faqeve t jashtme ose me nj mesazh. Menyre tjetr sht se faqja e jashtme i shkruan t dhenat ne disk. Avantazhi kryesor i ketij implementimi sht: nj kod i moduluar dhe me nj fleksibilitet shume t madh. Disavantazhi sht se i kalon se teprmi kufinjt e prdoruesve kernel si dhe sasia e madhe e mesazheve qe dergohen midis pjeseve t sistemit. Pr momentin ky subjekt sht shume i diskutueshem, por me rritjen e kompjuterave dhe programi behet me kompleks. Gjat rruges duke sakrifikuar disa performanca pr programe me t prshtatshme, ndoshta mund t behet me e pranueshme pr shumicen e implementuesve.

4.8 Segmentimi Memoria virtuale qe u diskutua deri tani sht nj-dimensionale sepse adresat virtuale shkojne nga 0 deri ne adresen maksimale, njra pas tjetres. Pr shume probleme, sht me mire t kemi dy ose me shume hapsira adresash virtuale t vecanta sesa nj t vetme. Pr shembull: nj kompilues ka shume tabela t cilat jane ndertuar nga kompilimi i procdurave, duke prfishere: 1. Teksti burim sht ruajtur pr listn e printueshme (ne nj batch sistem). 2. Tabela simbol prmban emrat dhe atributet e variablave. 3. Tabela prmban t gjitha konstantet integer (dhjetore) dhe floating-point (me presje levizese). 4. Pema e analizes, prmban analizen sintaksore t programit. 5. Stack-u prdoret pr thirrjet e procedures brenda kompilatorit.

Secila prej katr tabelave t para zhvillohet ne menyre t vazhdueshme, ashtu si kompilimi i procedurave. Kurse tabela e fundit zhvillohet dhe tkurret ne menyre t paparashikueshme gjat kompilimit. Ne nj memorie nj-dimensionale, keto katr tabela duhet t alokojne vazhimisht pjese t hapesires se adresave virtuale sic tregohet edhe ne figuren 4-35.

Figura 4-35. Ne nj hapesire adresash nj-dimensionale me zhvillimin e tabelave, nj tabele mund t prplaset me nj tjetr. Konsideroni se cfare do t ndodhte ne se nj program do t kishte nj numer mjaft t madh variablash por nj sasi normale pr gjerat e tjera. Pjesa e hapesires e alokuar pr tabelen e simboleve mund t mbushet plot, megjithese mund t ket hapesira t lira ne tabelat e tjera. Kompiluesi do t shfaqte nj mesazh, i cili do t na thosht qe kompiluesi nuk mund t vazhdoje pr shkak t numrit t madh t variablave, gje e cila nuk duket shume argetuese kur hapesira t lira jane t pranishme ne tabelat e tjera. Nj mundesi tjetr sht t luajme si Robin Hood, duke marre hapesiren e lire nga tabelat qe e kane me teprice (t pasura) dhe ia dhurojme tabelave qe kane pak hapesire (t varfra). Ajo cfare duhet ne t vertet sht nj menyre pr ta cliruar programuesin nga detyra e menaxhimit t zhvillimit dhe tkurrjes se tabelave, ne t njtn kohe qe memoria virtuale eliminon problemin e organizimit t programit ne overlays. Nj zgjidhje sht t pajisim makinen me shume hapesira adresash komplet t pavarura qe quhen segment. do segmenet konsiston ne nj sekuence lineare adresash nga 0 deri ne max. Gjatsia e do segmenti mund t jet cfaredo, nga 0 deri ne max e lejuar.

Segment t ndryshme zakonisht kane gjatsi t ndryshme, por gjatsia e segmentve mund t ndryshoje gjat ekzekutimit. Gjatsia e nj segmenti stack rritet sa here qe dicka futet (push) ne stack dhe zvogelohet sa here qe nxjerrim (pop) dicka. do segment cakton nj hapesire adresash, kurse segmente t ndryshme mund t rriten ose t zvogelohen ne menyre t pavarur pa demtuar njri tjetrin. N qoft se nj stack ne nj segment t caktuar kerkon me shume hapesire adresash pr tu rritur, ai do ta ket at, sepse nuk ka ndonj rezik qe adresat t prplasen. Mund t ndodhe qe segmenti t mbushet plot, por meqe ata jane shume t medhenj kjo gje mund t ndodhe shume rralle. Pr t specifikuar nj adrese ne ket segment ose ne ket memorie dy-dimensionale, programi duhet t rezervoje numrin e segmentit dhe adresen e segmentit. Figura 4-36, ilustron nj segment memorieje qe u prdor ne diskutimin pr kompilimin e tabelave. Pese segmente t ndryshme jane treguar ne ket figure.

Figura 4-36. Nj memorie e segmetuar lejon do tabele t zhvillohet ose tkurret pavaresisht nga tabelat e tjera.

Theksojme se nj segment sht nj entitet llogjik. Segmenti mund t prmbaje nj procedure, nj tabele, nj stack ose nj grup variablash, por asnjehere nuk prmban nj przierje t tyre. Ne nj memorie, n qoft se do procedure okupon nj segment t caktuar, ku adresa e fillimit sht 0, athere metoda e bashkmit dhe kompilimit t procedurave t vecanta sht e thjesht. Pasi t gjitha procedurat qe formojne nj program jane kompiluar dhe bashkuar, nj thirrje procedure ne proceduren e cila ndodhet ne segmentin n do t prdori

adresat e prbera (n, 0) ne fjalen me adrese 0 (pika e hyrjes). N qoft se procedura ne segmentin n me pas sht modifikuar dhe rikompiluar, procedurat e tjera nuk mund t ndryshohen (sepse adresa e fillimit sht modifikuar), vetm n qoft se versioni i ri sht me i madh se i vjetri. Me nj memorie nj-dimensionale, procedurat jane paketuar dhe ngjeshur me njra tjetren pa asnj hapesire adresash midis tyre. Si pasoje e ndryshimit se madhesise se nj procedure mund t kemi demtimin e adreses fillestare pr procedurat pasardhese. Kjo, si rregull kerkon modifikimin e t gjitha procedurave qe therrasin ndonj nga procedurat e spostuara, ne vend qe t inkorporojme adresat e tyre t fillimit. N qoft se nj program prmban me qindra procedura, athere ky proes do t jet tepr i kushtueshem. Segmentimi gjithashtu ndihmon ne ndarjen e procedurave apo t dhenave midis shume proeseve. Nj shembull i zakonshem sht dhe shared library. Kompjuterat workstation qe punojne me sisteme t avancuara windows-i kane librari grafike ekstreme t kompiluaraa ne do program. Ne nj sistem t segmentuar, libraria grafike vendoset ne nj segment dhe mund t ndahet midis shume proeseve duke eliminuar nevojen pr ta patur at vetm nga nj proes. Gjithashtu mund t kemi edhe ndarjen e librarive midis faqeve t sistemit por kjo sht me e komplikuar. Ne fakt kjo behet nga sistemet duke stimuluar segmentimin. Meqe do segment formon nj entitet llogjik, programesi sht i informuar se cka ne secilin prej segmentve, si procedura, stack apo tabela, dhe segmente t ndryshme kane mbrojtje (protection) t ndryshme. Nj procedure mund t caktohet vetm si e ekzekutueshme, duke ndaluar prpjekjet pr t lexuar apo shkruajtur ne t. Ne nj tabele mund t shkruhet dhe lexohet, por nuk mund t ekzekutohet. Kjo lloj mbrojtjeje sht e nevojshme ne parandalimin e gabimeve gjat programimit. Nj pyetje qe shtrohet sht: Pse mbrojtja prfshihet ne nj memorie t segmentuar dhe jo ne nj memorie njdimensionale sic jane faqet e memories? Ne memorien e segmentuar prdoruesi sht i informuar se cfare ka ne do segment. Zakonisht nj segment nuk mund t mbaje dhe nj procedure dhe nj stack, por vetm njren prej tyre. Keshtu, meqenese do segment prmban vetm nj lloj objekti, segmenti do t ket nj mbrojtje t prshtatshme pr at lloj objekti. Faqet dhe segmentet jane krahasuar ne figuren 4-37.

Konsiderata

Faqet

Segmentt

Kerkon qe programuesi t jet i informuar pr tekniken qe sht JO prdorur? Sa hapesira adresash lineare ka? 1

PO Shume PO

A e kaprcen hapesira e adresave PO madhesine e memories fizike?

A jane procedurat dhe t dhenat t JO dallueshme dhe t mbrojtura vecmas? A munden tabelat madhesia e t JO cilave ndryshon t prshtaten leht? Behet ndarja e procedurave? Pse sht krijuar kjo teknike? JO Pr t patur nj hapesire t madhe lineare adresash pa patur nevoje pr t blere me shume memorie fizike

PO

PO PO Pr t lejuar programet dhe t dhenat t vendosen ne hapesira adresash logjike dhe t pavarura si dhe pr t ndihmuar ndarjen dhe mbrojtjen

Figura 4-37. Krahasimi i faqeve dhe segmentve

Prmbajtja e nj faqeje sht ne nj fare menyre aksidentale. Programuesi sht i pa informuar pr krijimin e nj faqeje. Ndonese vendosim disa bite ne hyrje t do page table pr t specifikuar aksesin e lejuar, pr t prdorur ket vecori programuesi duhet t ndjeke se ne cfare vendi ne hapesiren e adresave gjenden kufinjt e faqes. Kjo ishte pikerisht menyra e administrimit pr faqet qe jane zbuluar pr tu eliminuar. Pr shkak t prdorimit t memories se segmentuar sht krijuar iluzioni se t gjitha segmentt jane ne memorien kryesore gjat gjithe kohes, se programuesi mund ti adresoje ato me mendimin qe ato ekzistojne, apo ai mund t mbroje do segment ne menyre t vecant, pa u shqetsuar pr at qe ka t beje me administrimin e mbulimit t tyre.

4.8.1 Implementimi i segmentimit t pastr (pure segmentation) Implemetimi i segmentimit ndryshon nga krijimi i faqeve ne menyre thelbesore: faqet kane madhesi fikse kurse segmentet jo. Figura 4-38(a), tregon nj shembull t memories fizike e cila fillimisht prmban pese segmente. Cfare do t ndodhte n qoft se segment 1 nxirret jasht dhe segmenti 7 i cili sht me i vogel t vendoset ne vendin e tij. Ne arrijme ne konfigurimin e memories si ne figuren 4-38(b). Ndermjet segmentit 7 dhe 2 ka nj zone boshe e cila quhet vrime. Me pas segmenti 4 zevendesohet nga segmenti 5, si ne figuren 4-38(c) dhe segmenti 3 zevendesohet nga segmenti 6, si ne figuren 4-38(d). Pasi sistemi sht duke punuar pr nj fare kohe, memoria do t ndahet ne nj numer t caktuar pjesesh (chunks), ku disa prmbajne segmente dhe disa prmbajne vrima. Ky

fenomen quhet ndarja ne kuadrate (checkerboarding) ose fragmentimi i jashtm. Forma e kompaktsuar e ketij segmentimi jepet ne figuren 4-38(e).

Figura 4-38 (a)-(d) Zhvillimi i checkerboarding. (e) eliminimi i checkerboarding neprmjet kompaktsimit.

4.8.2 Segmentimi me faqe: MULTICS N qoft se segmentet jane t medhenj, mund t jet e paprshtatshme ose gati e pamundur, pr ti mbajtuar ato ne memorien kryesore. Kjo con ne idene e krijimit t faqeve t tyre, keshtu vetm ato faqe qe duhen do t mbahen. Shume sisteme kane mbshtetur segmentimin e faqeve. Ne kt paragraf ne do t prshkruajme t parin: MULTICS. Me pas ne vijim do t diskutojme pr nj tjetr: Intel Pentium. MULTICS, punojne ne makinat Honeywell 6000 dhe ne pasardhesit e tyre dhe pajisin secilin program me nj memorie virtuale mbi 218 segment (me shume se 250 000), secila prej t cilave mund t jet mbi 65 536 (36-bit) fjale e gjat. Pr t implementuar ket, projektuesit e MULTICS duhet ta trajtojne do segment si nj memorie virtuale dhe si faqe, duke kombinuar avantazhet e faqes (madhesia uniforme e faqes dhe mos mbajtja e gjithe segmentit ne memorie kur prdoret vetm nj pjese e tij) me avantazhet e segmentimit (lehtsia e programimit, modulariteti, mbrojtja dhe sharing).

do program MULTICS ka nj tabele segment, me nj prshkrues pr do segment. Prderisa mund t kemi me shume se nj cerek milioni hyrje ne nj tabele, tabela segment sht ne vetvete nj segment dhe nj faqe. Prshkruesi i segmentit prmban nj t dhene qe tregon ne se segmenti sht ne memorie ose jo. N qoft se ndonj pjese e segmentit ndodhet ne memorie, segmenti konsiderohet sikur sht ne memorie, prshkruesi i tij prmban nj pointer 18-bit ne tabelen e faqes se tij [shiko figuren 4-39(a)]. Meqenese adresat fizike jane 2 bitshe dhe faqet jane rradhitur ne kufij 64 byte, ku vetm 18 bit nevojiten pr prshkruesin qe t ruaje adresen e page table. Prshkruesi gjithashtu prmban madhesine e segmentit, bitet mbrojts (protection bits) dhe disa t dhena t tjera. Figura 4-39(b), ilustron nj prshkrues segmenti MULTICS. Adresa e segmentit ne memorien sekondare nuk gjendet ne prshkruesin e segmentit por ne nj tabele tjetr e prdorur nga segment fault handler.

Figura 4-39. Memoria virtuale MULTICS (a). Prshkruesi (descriptor) i segmentit duke point-uar ne tabelat e faqeve (b). Nj prshkrues segmenti. Numrat jane gjatsite e segmentve.

do segment sht nj hapesire adresash virtuale e zakonshme, e ndare ne faqe ne t njjtn menyre si faqet e memories t pa segmentuar, qe i shpjeguam me prpara ne ket kapitull. Madhesia normale e faqes sht 1024 fjale.

Figura 4-40. Nj adrese MULTICS 34-bit.

Nj adrese ne MULTICS prbehet nga dy pjese: nga segmenti dhe adresa brenda segmentit. Adresa brenda segmentit ndahet me tej ne nj numer t caktuar faqesh dhe fjalesh brenda faqes, sic tregohet ne figuren 4-40. Kur ndodh nj reference ne memorie, algoritimi qe ndiqet sht carried out. 1. Numri i segmentit prdoret pr t gjetur prshkruesin e segmentit. 2. Nj verifikim behet pr t pare n qoft se tabela e faqes se segmentit sht ne memorie. N qoft se tabela e faqes sht ne memorie, athere ajo sht lokalizuar. N qoft se jo, shkaktohet nj segment fault. N qoft se ka nj shkelje t sigurise, shkaktohet nj fault (trap). 3. N qoft se sht ekzaminuar kerkesa e faqes virtuale pr t hyre ne tabelen e faqes. Kur faqja nuk ndodhet ne memorie, shkaktohet nj page fault. Kur faqja ndodhet ne memorie, adresa e fillimit t faqes ne memorien kryesore sht nxjerre nga page table entry. 4. Offset futet qe ne fillim t faqes pr t dhene adresen e memories kryesore ku sht lokalizuar fjala. 5. Leximi ose ruajtja prfundimisht zaptojne vend. Ky proes sht ilustruar ne figuren 4-41. Pr thjeshtsi, fakti qe prshkruesi i segmentit sht dhe vet i ndare ne faqe, sht harruar. Cfare do t ndodhte ne t vertet n qoft se nj regjistr (regjistri baze i prshkruesit), do t prdorej pr t lokalizuar prshkruesin e segmentve t tabeles se faqes, i cili ne parim pointon ne faqet e prshkruesit t segmentit. Pasi prshkruesi pr segmentin e kerkuar sht gjetur, adresimi i proeseve sht treguar ne figuren 4-41.

Figura 4-41. Shnderrimi i prbere i nj adresese MULTICS ne nj adrese se memories kryesore.

N qoft se procedura e algoritmit sht kryer nga sistemi operativ instuksion pas instruksioni, programet nuk do t punojne shume shpejt. Ne realitet, hardware i MULTICS prmban nj TLB 16-fjaleshe me shpejtsi t lart qe mund t kerkoje t gjitha t dhenat e futura ne paralel pr nj celes (key) t dhene. Kjo sht ilustruar ne figuren 4-42. Kur nj adrese sht prezente ne kompjuter, hardware i adresimit ne fillim kontrollon ne se adresa virtuale ndodhet ne TLB. N qoft se po, merr numrin e page frame direkt nga TLB-ja dhe formon adresen aktuale t fjales qe i referohet pa marre parasysh prshkruesin e segmentit apo page table (tabelen e faqes).

Figura 4-42. Nj version i thjesht i TLB-se MULTICS. Ekzistenca e dy madhesive t faqes e bn TLB-ne aktuale me t komplikuar.

Programet qe kane nj hapesire pune me t vogel se madhesia e TLB do t vijne duke u barazuar me adresat qe hyjne ne hapesien e punes se TLB, dhe keshtu do t punojne me me eficense. N qoft se faqja nuk sht ne TLB, prshkruesi dhe tabelat e faqeve detyrohen t gjejne adresen e page frame-it dhe TLB-ja bn nj update (freskim) pr t prfshire ket faqe, kurse faqja e fundit qe u prdor nxirret jasht. Fusha e moshes (age field) tregon jetgjatsine e faqeve duke prcaktuar ne ket menyre dhe faqen qe sht prdorur e fundit. Shkaku se pse kemi prdorur nj TLB sht pr t krahasuar segmentin dhe faqen pr t gjitha hyrjet ne paralel.

4.8.3 Segmentimi me faqe: Intel Pentium Memoria virtuale tek Pentium-et ngjason me MULTICS, pasi kane t dy segmentimin me faqe. MULTICS ka 256 K segment t pavarur, secili mban 64 K fjale 32-bitshe, kurse Pentiumi ka 16 K segment t pavarura, secili mban mbi 1 milion fjale 32-bit. Zemra e memories virtuale tek Pentium prbehet nga dy tabela; LDT (Local Descriptor Table) dhe GDT (Global Descriptor Table). do program ka LDT-ne e tij, kurse GDT sht vetm nj dhe ndahet midis t gjitha programeve t kompjuterit. LDT-ja prshkruan segmentt lokale t do programi, duke prfshire kodet, data, stack, etj, ndersa GDT prshkruan segmentt e sistemit, duke prfshire ne vetvete sistemin operativ. Pr t aksesuar nj segment, nj program Pentium ne fillim ngarkon nj przgjedhes pr at segment ne nj nga gjasht regjistrat e makines. Gjat ekzekutimit, regjistri mban przgjedhesin pr kodin e segmentit dhe regjistri DS mban przgjedhesin pr t dhenat e

segmentit. Regjistrat e tjere t segmentve jane me pak t rendesishem. do przgjedhes sht nj numer 16-bit, ashtu sic tregohet ne figuren 4-43.

Figura 4-43. Nj przgjedhes (selector) Pentium-i

Nj nga bitet e przgjedhesit tregon ne se nj segment sht lokal apo global (ndersa ai sht ne LDT ose ne GDT). 13 bitet e tjere prcaktojne numrin e hyrjeve t LDT-se ose t GDT-se, keshtu keto tabela jane t prcaktuara qe secila t mbaje nga 8 K prshkrues segmenti. 2 bitet e tjere kane t bejne me mbrojtjen (protection) dhe do t trajtohen me vone. Prshkruesi 0 (zero) mungon. Sapo nj przgjedhes ngarkohet ne nj segment regjistr, prshkruesi qe i korrespondon atij regjistri sht marre (fetch) nga LDT ose GDT dhe sht ruajtur ne regjistrat e mikroprogramit, keshtu mund t aksesohet me leht. Nj prshkrues prbehet nga 8 byte, duke prfshire adresen baze t segmentit, madhesine dhe informacione t tjera, sic paraqitet ne figuren 4-44.

Figura 4-44. Pentium code segment descriptor. Segmentt e t dhenave ndryshojne pak.

Formati i przgjedhesit sht marre i aft qe t beje lokalizimin e prshkruesit sa me t leht. Ne fillim behet selektimi i LDT ose GDT. Me pas przgjedhesi kopjohet ne nj

regjistr t jashtm dhe tre bitet me peshe me t vogel behen 0. Ne fund adresat e secilit prej LDT ose GDT vendosen ne tabele pr ti dhene direkt nj pointer prshkruesit. Pr shembull, przgjedhesi 72 i referohet hyrjes 9 ne GDT, i cili sht vendosur ne adresen GDT + 72. Le t shohim hapat nepr t cilat nj cift (przgjedhes, offset) sht shnderruar ne nj adrese fizike. Sapo mikroprogrami identifikon segment regjistrin qe sht prdorur, ai mund t identifikoje prshkruesin qe i korrespondon przgjedhesit ne regjistrin e tij t jashtm. N qoft se segmenti nuk ekziston (przgjedhesi 0) ose sht paged out, shkaktohet nj trap. Llogjikisht duhet nj fushe 32 biteshe ne prshkruesin qe prcakton edhe madhesine e segmentit, por jane vetm 20 bit t mundshme. N qoft se fusha e Gbit (Granularity) sht 0, athere fusha Limit sht ekzaktsisht madhesia segmentit, mbi 1 MB. Madhesia e faqes Pentium sht fikse 4 KB, keshtu qe 20 bit mjaftojne pr segmentt, mbi 232 byte. Duke pretenduar qe segmenti ndodhet ne memorie dhe offset-i sht ne varg, athere Pentiumi fut fushen Base 32 bit-she ne prshkruesin e offset-it pr t formuar at qe quhet linear address (adrese lineare), sic tregohet edhe ne figuren 4-45. Fusha Base sht ndare ne tre pjese: Adresa baze, fusha Limit dhe fushat e tjera. Ne t vertet, tek fusha Baselejon do segment t filloje me nj hapesire arbitrare, me 32-bit hapesire adrese lineare.

Figura 4-45. Shnderrimi i ciftit (selector, offset) ne nj adrese lineare.

N qoft se faqet jane disabled (ndaluar nga nj bit ne regjistrin e kontrollit global), adresa lineare interpretohet si adrese fizike dhe dergohet ne memorie pr read ose write. Keshtu me faqet disabled (t ndaluara), ne marrim skemen e nj segmentimi t pastr (pure segmentation), ku adresa baze e do segmenti sht dhene ne prshkruesin e tij. Nga ana tjetr, n qoft se faqet jane lejuar (enabled), adresa lineare interpretohet si nj adrese virtuale dhe mapped (krijon nj hart) mbi adresen fizike duke prdorur tabelat e faqes. Nj veshtiresi qe haset sht se me nj adrese virtuale 32-bit dhe nj faqe 4 KB, nj

segment duhet t mbaje 1 milion faqe, keshtu nj mapping me dy nivele prdoret pr t reduktuar madhesine e tabeles se faqes pr segmente t vegjel. do program ne ekzekutim ka nj direktori faqeje (page directory) qe prmban 1024 hyrje 32 bit-she. Ai sht i vendosur ne nj adrese qe pointohet nga nj regjistr global. do hyrje ne ket direktori pointon ne nj tabele faqeje e cila gjithashtu prmban 1024 hyrje 32-bitshe. Hyrjet ne tabelen e faqes pointoin ne page frame-t. Skema paraqitet si ne figuren 4-46.

Figura 4-46. Mapping i nj adrese lineare mbi nj adrese fizike.

Ne figuren 4-46(a) shohim nj adrese lineare t ndare ne tre fusha: Dir, Page dhe Offset. Fusha Dir prdoret si indeks ne direktorine e faqes pr t lokalizuar nj pointer ne tabelen e faqes. Fusha Page prdoret si nj indeks ne tabelen e faqes pr t gjetur adresen fizike e nj page frame. Fusha Offset vendoset ne adresen e page frame-it pr t gjetur adresen fizike t byte-it apo word-it qe nevojitet. Hyrjet e tabeles se faqes jane 32-bit secila, 20 prej t cilave prmbajne nj numer page frame-sh. Bitet e ngelur prmbajne access dhe dirty bits, t caktuar nga hardware pr qellimet e sistemit operativ, protection bits dhe bite t tjere t nevojshem. do tabele faqeje (page table) ka 1024 hyrje 4-KB pr page frame-t, keshtu vetm nj tabele mban 4 MB memorie. Nj segment me i shkurtr se 4 M do t ket nj direktori faqeje me nj hyrje t vetme, qe sht nj pointer ne tabelen e faqes e cila sht e vetme

(sepse kemi vetm nj hyrje), ne vend t 1 milion faqeve qe do t duheshin ne nj tabele faqeje me nj nivel. Pr t shmangur prseritjet ne adresimin e memories, Pentiumi, po ashtu edhe MULTICS, kane nj TLB t vogel e cila tregon kombinimet me t fundit t prdorura ne Dir-Page ne adresen fizike e page frame-it. Kur kombinimi i castit nuk sht prezent ne TLB, sht mekanizmi i figures 4-46 carried out dhe TLB bn nj update. Kur deshtimet ne TLB rrallohen, prformanca rritet. sht e gabuar t themi se disa aplikacione nuk kane nevoje pr segmentim, por ky model sht i mundur vetm kur segmenti prmban vetm nj faqe t vetme me hapesire adrese 32-bitshe. T gjithe regjistrat mund t ndertohen me t njjtin przgjedhes (selector), prshkruesi (descriptor) i t cilit ka bazen = 0 dhe limitin deri ne maksimum. Offseti i instruksionit do t jet adresa lineare vetm me nj hapesire t vetme, ne fakt e prdorur si normal paging. T gjithe sistemet operative pr Pentiumet punojne ne ket menyre. OS/2 sht i vetmi nga t gjithe qe prdor t gjithe fuqine e arkitektures se Intel MMU. Pr sa i prket mbrojtjes se sistemeve, Pentiumi ka 4 nivele mbrojtjeje, qe fillon me nivelin 0 dhe sht me i privilegjuari dhe vazhdon deri ne nivelin 3 qe sht me pak i privilegjuar. Keto nivele jane treguar ne figuren 4-47. Ne do cast t kohes, nj program qe sht ne ekzekutim, sht ne nj nivel t caktuar qe identifikohet nga nj fushe 2 bitshe ne PSW e tij. do segment ne sistem gjithashtu ka nj nivel.

Figura 4-47. Mbrojtja tek Pentiumet

Pr sa kohe qe nj program kufizon veten ne prdorimin e segmenteve ne nivelin e tij, do gje punon ne rregull. Prpjekjet pr t aksesuar t dhena ne nivele me t larta jane t lejuara. Kurse prpjekjet pr t aksesuar t dhena ne nivele me t ulta jane ilegale dhe shkaktojne trap. Prpjekjet pr t thirrur procedura nga nivele t ndryshme (nivele t larta ose t uleta) jane t lejueshme por t kontrolluara. Pr t bere nj call midis dy nivelve, instruksioni CALL duhet t prbaje nj przgjedhes ne vend t nj adrese. Ky przgjedhes (selektor) prcakton nj prshkrues (descriptor) qe quhet call gate (porta e call), i cili jep adresen e procedures qe do t thirret. Keshtu nuk sht e mundur t kercejme ne mes t nj kodi segment arbitrar ne nj nivel tjetr. Vetm hyrjet e lejuara mund t prdoren. Konceptet e mbrojtjes se niveleve dhe call gates jane prdorur tek MULTICS, ku ato jane pare si protection rings (unaza mbrojtse). Nj prdorim tipik i ketij mekanizmi sht sugjeruar ne figuren 4-47. Ne nivelin 0 kemi kernelin e sistemit operativ, i cili mban I/O, menaxhimin e memories dhe pjese t tjera kritike. Ne nivelin 1, system call handler sht prezent. Programet user mund t therrasin procedura pr t patur systems calls carried out, por vetm nj list specifike dhe e mbrojtur e procedurave mund t thirret. Niveli 2 prmban librarit e procedurave qe ndahen midis shume programeve ne ekzekutim. Dhe i fundit, niveli 3 prmban programet qe ekzekutohen dhe sht me pak i mbrojturi. Traps dhe interrupt-et prdorin nj mekanizem t ngjashem me call gates. Ata, gjithashtu i referohen prshkruesve me mire sesa ne adresat absolute dhe keta prshkrues pointojne ne procedurat specifike pr tu ekzekutuar. Fusha Type ne figuren 4-44, bn nj dallim ndermjet code segments, data segments dhe nj numri t caktuar gates.

KAPITULLI I PEST

INPUT/OUTPUT

Nj nga fuksionet kryesore t sistemt operativ sht t kontrolloj t gjitha paisjet hyrese/ dalese t kompjuterit. Ai duhet te trajtoj konditat pr paisjet, t kapi interraptet, dhe t kujdeset pr gabimet. Ai gjithashtu duhet t siguroj nj nderfaqe midis paisjes dhe pjeses tjetr t sistemit, ne menyre qe ta bej at sa me t thjeshte pr tu prdorur. Ne zgjerimin e mundshem, nderfqja duhet t jet e njjt pr t gjitha paisjet (pavaresia e paisjeve). Kodi i paisjeve hyrese/dalese prfaqeson nj pjese sinjifikative t t gjithe sistemit operativ. Subjekti i ketij kapitulli sht se si sistemi operativ menaxhon paisjet I/O. Ky kapitull sht i ndare si me posht. Ne fillim do t shikojme disa principe t paisjeve I/O dhe me pas do shikojme software I/O. Softwaret I/O mund t strukturohen ne shtresa, ku do shtrese do t ket nj mision t mire prcaktuar pr t kryer. Ne do t shikojme keto shtresa pr t pare se cfare bejne ato dhe se si jane ato t kombinuara se bashku. Duke ndjekur ket hyrje qe beme, ne do t shikojme disa paisje I/O t ndryshme: disket, clock-et, tastierat dhe shfaqet. Pr do paisje do shikojme pjesen hardware t tij dhe at software. Dhe ne fund do t marrim parasysh power management.

5.1 PRINCIPET E I/O HARDWARE

Njerez t ndryshem i shikojne I/O hardware ne menyra t ndryshme. Inxhinieret elektrik i shikojne ato si chipe, tela, konvertuesa t tensioneve, motora dhe si do paisje tjetr fizike qe prdoren pr t ndertuar hardware-et. Programuesit shikojne nderfaqen e paraqitur pr software, komandat qe pranojne hardware, funksionet ne dalje dhe gabimet qe ato mund te kthejne mbrapsht. Ne ket liber ne do t prqendrohemi ne programimin e paisjeve I/O dhe jo ne dizenjimin e tyre, ndertimin ose mirembajtejn e tyre, pra interesi yne do t kufizohet se si hardware sht programuar dhe jo si ai punon ne vetvete. Si do qoft ne disa raste programimi i paisjeve I/O sht i lidhur ngusht me punen e tyre. Ne tre seksionet e ardhshme ne do t sigurojme nj background t prgjithshem pr I/O hardware, se si lidhen ato me programin.

5.1.1 PAISJET I/O

Paisjet I/O prafersisht mund t ndahen ne dy kategori: block devices dhe character devices. Nj block devices sht ai qe mbledh blloqe informacione me madhesi t caktuar, do informacion ka adresen e tij. Hapesira e bllokut t prbashket shkon nga 512 bytes ne 32,768 bytes. Karakteristika esenciale e nj block device sht qe ajo bn t mundur leximin ose shkrimin e do blloku ne menyre t pavarur nga njri tjetri. Ne qoft se shikojme me kujdes, kufiri midis paisjeve qe jane blloqe t adresueshme dhe atyre qe nuk jane, nuk sht i mire prcaktuar. T gjithe bien dakort qe nj disk sht nj paisje bllok e adresueshme se pavaresisht se ne cilin krah ndodhet, sht gjithmone e mundur qe t arrij nj cilinder tjetr dhe t presi deri sa blloku i kerkuar t rrotullohet posht kokes. Tani le t marrim ne konsiderat nj tape drive pr t bere nj disk backup. Kasetat prmbajne nj sekuence t bllokut. Ne qoft se nj tape drive jep nj komand pr t lexuar bllokun N, ajo mund ta riktheje kasetn dhe t shkoj prpara deri sa t arrij t blloku N. Ky operacion sht i njjt me at t kerkimit t nj disku, pr vec se ai kerkon me shume kohe. Gjithashtu, jo gjithmone sht e mundur pr t rishkruajtur ne nj bllok ne mes t kasets. Edhe pse ngadonjehere sht e mundur t prdoren kaseta si block devices me akses random, kjo e zgjeron qellimin deri diku: normalisht keto nuk prdoren ne ket menyre. Pjesa tjetr e paisjeve I/O sht character device. Nj character device shprndan ose merr nj varg karakteresh, pa kerkuar asnj lidhe me struktura blloku. Nuk sht e adresueshme dhe nuk ka asnj operacion kerkimi. Printerat, nderfaqet e networkut, mausi, spiun (pr eksperimente laboratorike psikologjike), dhe pr shume paisje t tjera qe nuk i ngjajne diskut mund t shihen si character devices. Kjo skeme klasifikimi nuk sht perfekte. Disa paisje nuk bejne pjese ne to. Clock-et prshembull nuk jane blloqe t adresueshme. Ato as nuk gjenerojne ose pranojne vargje karakteresh. Ato vetm shkaktojne interrupte ne intervale t mire prcaktuara. As hartat e memories nuk bejne pjese ne t. Akoma, modeli block dhe character device sht mjaft i prgjithshem aq sa mund t prdoret si baze pr t bere disa software sistemesh operative qe t punojne ne menyre t pavarur me paisjet I/O. Pr shembull, file sistem merret vetm me block device abstrakt dhe ja le pjesen e lidhjes me paisjen shtresave me t ulta software. Paisjet I/O mbulojne nj vije t gjere ne shpejtsi, gje qe shkakton nj presion t konsiderueshem ne software qe t plotsoj sa me mire t gjitha kerkesat. Fig.5 tregon disa data rates pr disa paisje t ndryshme. Shumica e ketyre paisjeve tentojne t shpejtojne sa po koha nis.

Device Keyboard Mouse 56K modem Telephone channel Dual ISDN lines Laser printer Scanner Classic Ethernet USB (Universal Serial Bus) Digital camcorder IDE disk 40x CD-ROM Fast Ethernet ISA bus EIDE (ATA-2) disk FireWire (IEEE 1394) XGA Monitor SONET OC-12 network SCSI Ultra 2 disk Gigabit Ethernet Ultrium tape PCI bus Sun Gigaplane XB backplane

Data rate 10 bytes/sec 100 bytes/sec 7 KB/sec 8 KB/sec 16 KB/sec 100 KB/sec 400 KB/sec 1.25 MB/sec 1.5 MB/sec 4 MB/sec 5 MB/sec 6 MB/sec 12.5 MB/sec 16.7 MB/sec 16.7 MB/sec 50 MB/sec 60 MB/sec 78 MB/sec 80 MB/sec 125 MB/sec 320 MB/sec 528 MB/sec 20 GB/sec

Figure 5-1. Some typical device, network, und bus data rates.

5.1.2 KONTROLLUESIT E PAISJEVE

Paisjet I/O zakonisht jane t prbera nga pjese mekanike dhe pjese elektronike. Shpesh sht e mundur qe keto dy pjeset t ndahen pr t marre nj kuptim sa me t prgjithshem ne ndertimin e tyre. Pjeset elektronike quhen device controller ose adaptor. Ne kompjuterat personal ato kane formen e nj qarku t stampuar e cila mund t vihet ne nj slot. Pjesa mekanike sht vet paisja. Kjo marreveshje sht treguar ne fig.1-5. Karta kontrolluese ka nj konektor ne t cilin mund t lidhen telat qe dalin nga paisja. N qoft se nderfaqia midis kontrolluesit dhe paisjes sht nj nderfaqe standarte ose ASSI, IEEE ose standarti ISO athere kompanit e prodhimit t ketyre pjeseve mund t ndertojne kontrolluesa, ose paisje qe t mos krijojne konflikte me njra tjetren. Pr shembull disa kompani prodhojne disk driver t cilat shkojne me nderfaqet IDE ose SCSI.

Nderfaqa midis kontrolluesit dhe paisjes sht shpesh here nderfaqe e nivelit t ulet. Nj disk prshembull mund t ket 256 sektor me nga 512 bytes pr linj. Ajo cfare merret nga drive megjithese nis me nj varg serial bitesh, nis me nj hyrje, me pas 4096 bit pr sektor dhe nu fund sht cheksum ose sic quhet ndryshe Error-Correcting code. Hyrja shkruhet ne momentin qe formohet disku dhe prmban cilindrat dhe numrin e sektorit, prmast e sektorit dhe t dhenat krahasuese si nj informacion t sinkronizuar. Puna e kontrolluesit sht qe t konvertoj nj varg bitesh serial ne blloqe me byte dhe t bej do korrigjim gabim n qoft se do t jet e nevojshme. Blloku me byte asemblohet bit pr bit ne nj buffer brenda kontrollerit. Mbasi sht kontrolluar cheksum i tij dhe nuk sht gjetur asnj gabim athere ai mund t kopjohet ne memorien kryesore. Kontrolleri pr nj monitor punon edhe si nj paisje me bite serial ne nj nivel t ulet. Ajo lexon bytet t cilt prmbajne karakteret qe do t meren nga memorja dhe qe gjenerone sinjalet qe do t prdoren pr tu moduluar ne binar CRT pr t shkruajtur ne ekran. Gjithashtu kontrolleri gjeneron sinjale qe detyron CRT t beje nj rishikim horizontal pasi ai t ket mbarur nj skanim t nj rreshti, ashtu si edhe sinjale pr t bere nj rishikim vertikal pasi i gjithe ekrani t jet skanuar. N qoft se nuk do t kishim kontrollerin CRT, programatori I sistemit operativ do ti duhej ta programonte ne menyre eksplisite skanimin analog t tubit katodik. Sistemi operativ e inicializon kontrolleri me disa parametra, sic jane numri I karaktereve, ose pixel-at pr rrjesht dhe numrat e rrjeshtave pr ekran dhe le kontrolleri pr tu kujdesur.

5.1.3 HARTA E MEMORIES I/O do kontroller ka disa regjistra t cilat prdoren pr t komunikuar me CPU. Duke shkruajtur ne keto regjistra, sistemi operativ mund t komandoj paisjet pr t cuar t dhena, pr t mare t dhena, pr tu aktivizur ose caktivizur ose pr t ndermarre veprime t tjera. Duke lexur nepr keto regjistra, sistemi operativ meson se ne cgjendje sht paisja, n qoft se sht gati pr t marre komanda t reja dhe keshtu me radhe. Prvec regjistarve t kontrollit, shume paisje kane edhe t dhena buffer ku sistemi operativ mund t shkruaj ose t lexoj ne to. Prshembull nj menyre e prbashket t kompjuterat pr t nxjerr pixelat ne ekran, sht qe duhet t kene nj video RAM e cila ne parim sht nj data buffer, e gatshme pr programin ose ku sistemi operativ mund t shkruaj ne t. Pra CPU komunikon me regjistrat e kontrollit dhe me paisjet data buffer. Ekzistojne dy alternativa. Ne trajtimin e pare, do regjistri kontrolli i sht caktuar nj numer port I/O, 8 ose 16 bit integer. Duke prdorur nj instruksion special I/O si :

IN REG,PORT,

CPU mund t lexoj ne regjistrin kontrollues PORT dhe t ruaj rezultatin ne regjistrin REG t CPU-se.

OUT PORT,REG

CPU mund t shkruaj prmbajtjen e REG ne regjistrin kontrollues. Shumica e kompjuterave t athershem, duke prfshire dhe mianframet, si IBM 360 dhe t gjithe pasardhesit e tij punojne ne t njjtn menyre. Ne ket skeme hapesira e adreses pr memorjen dhe I/O jane t ndryshme, sic duket edhe nga fig 5.2. Instruksioni

IN RO,4 dhe

MOV RO,4

jane komplet ndryshe ne ket dizenjim. I pari lexon prmbajtjen e ports 4 I/O dhe e vendos at ne R0 kurse i dyti lexon prmbajtjen e fjales 4 ne mermorje dhe e vendos at ne R0.

Afrimi i dyt, qe ka t bej me PDP-11, sht qe t skicoje t gjithe regjistrat e kontrollit ne hapesiren e memories sic tregohet ne fig.5-2(b). do regjistri kontrolli I sht caktuar nj adrese e vetme ne memorie. Ky sistem quhet memory-mapped I/O. Zakonisht adresat e caktuara ndodhen ne fillim t hapesires se adresave. Nj skeme hibride me memori-mapped I/O, me data buffer dhe me porta I/O t ndara pr regjistrat e kontrollit tregohen ne fig.5.2(c). Pentium-et e prdorin ket arkitekture, me adresa 640K deri ne 1M t rezervuara pr paisje data buffer. Si funksionojne keto skema? Ne do rast, kur CPU kerkon t lexoj nj fjale, nga memoria ose nga portat I/O, ajo vendos adresen qe duhet ne busin e linjave t adresave dhe aktivizon sinjali READ ne busin e linjave t kontrollit. Nj sinjal i dyt prdoret pr t treguar se sa hapesire I/O ose hapesire ne memorie duhet. N qoft se sht pr hapesiren ne memorie, memoria i prgjigjet kerkeses, n qoft se sht pr hapesire I/O, paisja I/O i prgjigjet. N qoft se ka vetm hapesire memorie [si ne fig.5-2(b)], do modul i memories dhe do paisje I/O krahasojne linjn e adreses me range-in e adreses qe ato ofrojne. N qoft se adresa bie ne range-in e tij, ajo i prgjigjet kerkeses. T dy skemat pr adresimin e kontrollerave kane t mira dhe t keqija t ndryshme. Le t fillojme me avantazhet e memory-mapped I/O. E para, ne se kerkohen instruksione speciale I/O pr t shkruajtur apo lexuar regjistrat e kotrollit t paisjeve, aksesimi i tyre do t kerkoj prdorimin e kodeve assembler prderisa sht e pamundur pr t ekzekutuar nj instruksion IN ose OUT ne C ose C++. Therritja e nj procedure t tille do t shtonte komplikimin ne kontrollin e I/O. Ne t kundert, me memory-mapped I/O regjistrat e kontrollit jane thjesht variabla ne memory dhe mund t adresohen ne C ne t njjtn menyre si do variabel tjetr. Keshtu, me memory-mapped I/O, nj driver i nj paisje I/O mund t shkruhet i tri ne gjuhen C. Pa memory-mapped I/O do t duhen disa komanda ne assembler. E dyta, me memory-mapped I/O nuk na nevoitet ndonj mekanizem special mbrojtjeje qe t ndaloj proeset e prdoruesit qe t prdori I/O. Gjithcka qe duhet t bej sistemi operativ sht qe t shmang futjen e pjeses se hapesirave qe prmbajne regjistrat e kontrollit ne hapesiren e adresave virtuale t prdoruesit. Me mire akoma, ne se do paisje ka regjistrat e kontrollit ne faqe t ndryshme t hapesires se adresave, sistemi operativ mund t japi nj kontroll nga prdoruesi mbi specifikat e paisjeve thjesht duke prfshire faqet e deshirueshme ne page table e tij. Nj skeme e tille mund t lejoj drivera t paisjeve t ndryshme t vendosen ne hapesira adresash t ndryshme, jo vetm qe redukton prmasat e kernel por nuk lejon qe driverat t interferohen me njri tjetrin. E treta, me memory-mapped I/O do instruksion mund t adresoj memorien mund edhe t adresoj regjistrat e kontrollit. Pr shembull, ne se do kemi nj instruksion TEST qe teston nj fjale t memories pr 0, ajo gjithashtu mund t prdoret pr t testuar nj regjistr kontrolli pr 0, e cila mund t jet sinjali qe paisja nuk po rri kot dhe mund t pranoj nj komand t re. Kodi ne gjuhen assembler do ket ket forme:

LOOP:

TEST PORT_4

//kontrollon ne se porta 4 sht 0

BEQ READY BRANCH LOOP READY:

//ne se sht 0 shko te ready //ne t kundert vazhdo testin

N qoft se memory-mapped I/O nuk sht presente, regjistrat e kontrollit duhet t jene gati ne CPU, me pas t testohen, duke kerkuar dy instruksione ne vend t nj. Ne rastin e nj loop, duhet t shtohet edhe nj instruksion i katrt i cili bn qe t ulet ne menyre t avasht aftsia pr t detektuar ne se paisja nuk po ben gje. Ne dizenjimin e kompjuterave, do gje praktikisht ka t bej me shkembime. Memorymapped I/O ka edhe kjo disavantazhet e saj. Se pari kompjuterat e sotm kane disa forma kapje t fjaleve ne memorie. T kapesh nj paisje regjistr kontrolli mund t jet nj shkatrim i vertet. Konsideroni kodin assembler pr nj loop t dhene me posht ne rastin kur t kemi nj kapje. Adresimi i pare pr PORT_4 mund t shkaktoj nj kapje. Adresimet pasues do tu duhej ta merrnin vleren nga cache pa e pyetur fare paisjen. Me pas kur piasja t behet gati software nuk do t ket mundesi ta zbuloj at. Dhe cikli loop do t vazhdoj keshtu prfundimisht. Pr ti paraprire kesaj situate me memory-mapped I/O, hardware duhet t ket aftsin qe t caktivizoj kapjen ne menyre selektive. Ky tipar do t rrisi kompleksitetin si pr hardwarein ashtu edhe pr sistemin operativ i cili ka pr detyre t drejtoj kapjen selektive. Se dyti, ne se do t kemi nj hapesire adrese t vetme athere t gjithe modulet e memories dhe t gjithe paisjet I/O duhet t kontrollojne t gjitha adresimet e memories pr t pare se cilit i prgjigjen. N qoft se kompjuteri do t kishte vetm nj bus, si ne fig.5-3, kerkimi i adresave nga t gjithe behet ne menyre t ndershme.

Tendenca pr kompjuterat e sotm personal sht qe t kene nj bus memorie me shpejtsi t madhe si ne fig.5-3(b), nj karakteristik e mainfraimeve. Ky bus i sht dhene pr t optimizuar performancen e memories pa u rezikuar nga shpejtsia e vogel e paisjeve I/O. Sistemet pentium kane 3 buse t jashtm (memory, PCI, ISA), t treguara ne fig.1-11. E meta e t paturit nj memorie t ndare ne makinat memory-mapped sht qe paisjet I/O nuk i shikojne adresat e memories pasi shkojne ne buset e memories, dhe keshtu qe nuk kane mundesi t prgjigjen. Prape duhet t behen matje speciale pr t bere t mundur memory-mapped I/O t punojne ne sisteme me shume buse. Nj mundesi sht qe t dergojme ne fillim t gjitha referencat e memories ne memorie. N qoft se memoria nuk na kthen prgjigje, athere CPU prdor buset e tjere. Kjo arkitetekture sht bere qe t punoj por do kerkonte nj kompleksitet t madh hardware-ik. Nj arkitekture tjetr e mundshme sht vendosja e nj paisje zhbiruese ne busin e memories qe t bej kalimin e adresave t paisjeve I/O t interesuara. Problemi ne ket rast qendron pasi paisjet I/O kane shpejtsi me t vogel se memoria. Nj arkitekture tjetr, e cila prdoret sot te Pentium sht vendosja e nj filtri adresash ne chipin PCI. Ky chip prmban nj linj regjistrash t cilat preludohen ne kohen e butimit. Pr shembull, 640 K deri ne 1 M mund t shenohet si nje linj jo e memories. Adresat t cilat nuk i prkasin linjave t memories shkojne te busi PCI ne vend t memories. Disavantazhi i kesaj skeme sht qe duhet t dihet ne kohen e butimit se cilat nga adresat e memories jane vertet adresa t memories.

5.1.4

DIRECT MEMORY ACCESS (DMA)

Nuk ka rendesi ne se CPU ka apo jo memory-mapped I/O, asaj i i duhet t dergoj adresa paisjeve kontrolluese pr t shkembyer t dhena me to. CPU kerkon t dhena nga paisjet I/O me nga nj byte ne nj cast t kohes gje qe do t sillte humbjen e kohes se CPU, pr ket ofrohet nj skeme tjetr e quajtur DMA (Direct Memory Access). Sistemi operativ mund t prdor DMA vetm ne se edhe hardware ka nj kontroller DMA, ku shumica e sistemeve e kane. Shpeshere ky kontroller sht i integruar ne disk kontrollerin por arkitektura t ndryshme kerkojne kontrollera DMA t ndryshem pr do paisje. Nj DMA kontroller i vetm sht i gatshem pr t rregulluar kalimet ne shume paisje, sipas nj rregulli t caktuar. Pavaresisht se ku ndodhet fizikisht, DMA kontrolleri ka akses me sistem bus-in duke mos u varur nga CPU, sic tregohet ne fig.5-4. Ajo prmban disa regjistra t cilt mund t shkruhen dhe t lexohen nga CPU. Keto prfshijne nj adrese regjistr pr memorien, nj byte pr numrator regjistrin dhe nj ose me shume rregjistra kontrolli. Rregjistrat e kontrollit specifikojne portat I/O qe do t prdoren, drejtimin e transferimit (leximin nga

paisjet I/O ose shkrimin ne paisjet I/O), njsin e transferimit (byte ne nj cast t kohes ose fjale ne nj cast t kohes) dhe numrin e byteve, qe do transmetohen ne nj vrull. Pr t shpjeguar se si punon DMA, le t shikojme ne fillim se si lexon nj disk kur nuk prdoret DMA. Ne fillim kontrolleri lexon blloqet ne menyre seriale nga driveri, bit pr bit, derisa i gjithe blloku sht ne pjesen e jashtme t bufferit t kontrollerit. Me pas ai llogarit n qoft se sht bere ndonj gabim gjat leximit. Dhe me pas kontrolleri shkakton nj interrupt. Kur sistemi operativ fillon, ai mund t lexoj disk bllokun nga bufferi i kontrollerit me byte ose fjale pr nj cast kohe duke ekzekutuar nj loop, me do lexim ne menyre t prseritur t byteve ose fjaleve nga rregjistrat e kontrollerit t paisjes ne memorien kryesore.

Kur prdoret DMA, procedura ndryshon. Ne fillim CPU programon kontrollerin DMA duke i vendosur rregjistrat e saj dhe keshtu e di se ku dhe cfare do transportoj. Ajo gjithashtu i jep nj komand disk kontrollerit duke i treguar atij t lexoj t dhenat nga disku ne bufferin e jashtm dhe t verifikoj cheksum-in. Kur t dhenat e vlefshme jane ne bufferin e disk kontrollerit, DMA mund t nisi. Kontrolleri DMA nis transfertn duke dhene nj kerkes leximi neprmjet bus-it pr dis kontrollerin (hapi 2). Kjo kerkes pr lexim duket njsoj si do kerkes tjetr pr lexim dhe disk kontrolleri nuk e di ne se kjo kerkes po vjen nga CPU-ja ose nga kontrolleri DMA. Adresa e memories ku do t shkruhet sht ne busin e adresave dhe keshtu kur disk kontrolleri kap fjalen tjetr pr t shkruajtur nga bufferi i jashtm, di se ku ta shkruaj at. Pr t shkruajtur ne memorie sht nj tjetr cikel standart busi (hapi 3). Kur prfundon shkrimi, disk kontrolleri dergon nj sinjal ack disk kontrollerit neprmjet busit (hapi 4). Kontrolleri DMA incrementon adresen e memories pr t prdorur dhe decrementon numeruesin e byte-ve. Ne se numeruesi i byte-eve sht me i madh se zero, prsritet hapi i dyt dhe i katrt derisa numeruesi behet zero. Ne ket kohe, kontrolleri DMA i dergon nj interrupt CPU pr ti bere t ditur qe transferimi tashme u krye. Kur sistemi

operativ fillon, ai nuk ka pse t kopjoj disk bllokun ne memorie sepse ai gjendet tashme aty. Kontrollerat DMA ndryshojne shume ne sofistikimin e tyre. Me i thjeshti prej tyre prballon nj transfert ne nj cast t kohes. Llojet e tjera me komplekse mund t programohen qe t prballojne shume transferta njeheresh ne nj cast kohe. Kontrollera t tille kane paisje paralele t rregjistrave t jashtm, nga nj pr do kanal. CPU fillon loading-un pr do paisje t rregjistrave me parametrat e prshtatshem qe do t transferoj. Pasi do fjale sht transmetuar (hapi 2 deri ne 4) ne fig.5-4, kontrolleri DMA vendos se ciles paisje do ti sherbej. Ajo mund t prdori disa algoritma t caktuar si round-robin ose mund t prdorin prioritet ku nj paisje ka prioritet me t lart se tjetra e keshtu me rradhe. Kerkesat e shumta drejt kontrollerave t paisjeve t ndryshme mund t varen nga e njjta kohe, duke parashikuar se atje sht nj menyre e qart pr t ndare ack menjane. Zakonisht linja t ndryshme ack ne bus prdoren pr do kanal DMA pr ket arsye. Shume buse mund t operojne ne dy forma: forma nj fjale pr nj cast kohe dhe forma ne bllok. Disa kontrollera DMA mund t operojne ne forma t tjera. Ne formen e pare operacioni sht sic prshkruhet me posht: kontrolleri DMA kerkon pr transfertn e nj fjale dhe e merr at. Ne se edhe CPU e kerkon busin athere atij i duhet t pres. Ky mekanizem quhet cikli I vjedhjes sepse kontrolleri i paisjes vjedh nj cikel busi t rastesishem nga CPU. Ne formen me blloqe kontrolleri DMA i thot paisjes t siguroj nj bus, leshon nj seri transfertash dhe me pas liron busin. Kjo forme e t vepruari quhet burst mode. sht me eficente se cikli I vjedhjes sepse t marresh nj bus kerkon kohe dhe shume fjale mund t dergohen me t njjtin cmim si nj marrje busi. Ana negative e kesaj metode sht qe mund t bllokoj CPU dhe paisje t tjera pr nj kohe t konsiderueshme ne se nj burst i gjat mund t jet duke u transportuar. Ne ket model qe po flasim, shpesh here i quajtur fly-by mode, kontrolleri DMA i tregon kontrollerit t paisjes t transferoj te dhena direkt e ne memorien kryesore. Nj forme alternative qe prdorin disa DMA sht qe t kene disa kontrollera paisjesh qe ti dergojne fjale kontrollerit DMA i cili me vone i cakton nj kerkese pr t shkruajtur fjalen atje ku sht nisur pr t shkuar. Kjo skeme kerkon nj cikel busi ekstra pr do fjale qe do transmetohet por sht me fleksible pr sa i prket kopjimit paisje me paisje dhe kopjimit memorie me memorie. Shumica e kontrollerave DMA adresat e shtreses fizike pr transfertat e tyre. Pr t prdorur adresat fizike sistemi operativ duhet t bej prkthimin nga adresa virtuale ne at fizike dhe ta shkruaj at ne rregjistrat e adreses se kontrollerit DMA. Nj skeme alternative e prdorur ne disa rregjistra adresash t kontrollerit DMA sht qe t shkruaj adresat virtuale ne kontrollerin DMA. Dhe me pas kontrolleri DMA i duhet t prdori MMU pr t bere prkthimin nga adresa virtuale ne at fizike. Me pare prmendem qe disku lexon t dhenat ne busin e tij t jashtm prpara se t filloj DMA. Ju mbase pyesni veten pse kontrolleri nuk i dergon menjehere bytet ne memorjen kryesore sapo i merr ato nga disku. Me fjale t tjera pse i duhet nj buffer I jashtm? Pr ket ka dy arsye. Ne fillim duke bere bufferimin e jashtm kontrolleri i diskut verifikon

cheksumin prpara se t nis nj transfert. Ne se cheksumi sht i parregullt, sinjalizohet nj error dhe transferimi nuk kryhet. Arsyeja e dyt sht qe bitet vijne nga disku me t njjtn shpejtsi pavaresisht ne se kontrolleri sht gati pr to ose jo. Ne se kontrolleri do mundohet t shkruaj t dhena direkt ne memorie ai do t ndryshonte sistemin e busit pr do fjale t transmetuar. Ne se busi sht i zene me disa paisje t tjera, kontrollerit i duhet t pres. Ne se fjala e rradhes vjen prpara se fjala qe ka rradhen pr t ardhur, kontrollerit i duhet qe ta ruaj at diku. Ne se busi sht i zene, kontrolleri mund t prfundoj marrjen e fjaleve t vogla dhe t ket nj administrim t plot pr ta bere po aq mire. Kur blloku sht bufferuar jasht, nuk nevojitet busi derisa t nis DMA dhe keshtu ndertimi i kontrollerit sht me i thjesht, sepse transferimi DMA pr ne memorie nuk sht time critical. (Disa kontrollera t vjetr, ne fakt shkojne direkt pr ne memorie, por kur busi ishte shume i zene nj transfert mund t mos kryhej.) Jo t gjithe kompjuterat prdorin DMA. Kjo shpjegohet se CPU sht shume me e shpejt se kontrolleri DMA dhe mund ta bej punen shume me shpejt. Ne se nuk do t ket pune t tjera pr t bere, duke pasur nj CPU t shpejt dhe nj kontrollues DMA t avasht nuk do t kishte kuptim.

5.1.5 Interrupts Revisited Ne shkurtimisht i prshkruam interruptet ne Sec. 1.4.3, por ka akoma shume pr t thene. Ne nj sistem t nj kompjuteri personal, struktura e interrupteve jepet si ne Fig.5-5. Ne niveli hardware interruptet punojne si me posht. Kur nj paisje I/O prfundon punen qe i sht caktuar, ajo shkakton nj interrupt. Ajo e bn ket duke kerkuar nj sinjal ne nj linje busi t caktuar. Sinjali kapet nga cipi i kontrollerit t interrupteve, i cili me pas vendos se cfare t bej.

Ne se nuk ka interrupte t tjere, kontrolleri i interrupteve prpunon menjehere interruptin. Ne se ndonj tjetr sht ne progres ose nj paisje tjetr ka bere nj kerkes me prioritet t lart, paisja injorohet pr momentin. Ne ket rast ajo vazhdon t kerkoj nj sinjal interrupti ne bus derisa ajo t sherbehet nga CPU. Pr t prballuar interruptet, kontrolleri vendos nj numer ne linjn e adresave qe t specifikoj se cila paisje do kujdes dhe kerkon nj sinjal qe t shkaktoj interrupt ne CPU. Sinjalet e interruptit detyrojne CPU t nderpres at qe po bnte pr t bere dicka tjetr. Numri ne linjn e adresave prdoret si nj indeks ne nj tabel t quajtur interrupt vector qe t sjell nj program counter t ri. Ky program counter shenjon ne fillimin e procedures se sherbimit t interrupteve korrespondues. Trap-et dhe interruptet prdorin t njjtin mekanizem duke i pare nga kjo pike dhe zakonisht ndajne t njjtin vektor interruptesh. Vektori I interrupteve mund t ndodhet ne makine si nj pjese hardware ose ne do vend t memories, me nj rregjistr CPU qe pointon ne fillimin e tij. Pak para se ajo t vazhdoj ekzekutimin, procedura e sherbimit t interrupteve njofton pr interrupt duke shkruajtur nj vlere t caktuar ne nj nga portat I/O t kontrollerit t interrupteve. Kjo ack njofton kontrollerin qe sht I lire pr t leshuar nj tjetr interrupt. Disa kompjutera (t vjetr) nuk kane nj chip kotrolleri interruptesh t centralizuar prandaj do kontroller paisjesh kerkon interruptet e tij. Hardwaret gjithmon ruajne nj informacion t caktuar prpra se t nisi procedura e sherbimeve. Se cfare informacioni sht ruajtur dhe se ku sht ruajtur varet shume nga CPU te CPU. Program counter duhet ruhet dhe keshtu qe proesi i interrupteve duhet mund t ristartohet. Ne anen tjetr t gjithe rregjistrat e dukshem dhe nj numer i madh i rregjistrave t brendshem mund t ruhen po aq mire. Nj ceshtje tjetr sht se ku do ruhet ky informacion. Nj opsion sht qe ta vendosim at ne rregjistrat e jashtm dhe sistemi operativ mund ta lexoj at sa here qe ti duhet. Nj problem qe na lind sht qe kontrolleri I interrupteve nuk mund t verifikohet derisa i gjithe informacioni I prshtatshem t lexohet, vetm , n qoft se nj interrupt i dyt t rishkruaj rregjistrin e jashtm duke ruajtur gjendjen. Kjo strategji sjell nj kohe t madhe t vdekur kur interruptet jane t caktivizuar dhe ndoshta interruptet mund t humbin gjithashtu edhe t dhenat. Si pasoj shume CPU e ruajne informacionin ne stack. Gjithesesi edhe kjo menyre ka problemet e saj. T nisim me pyetjen: staku i kujt? Ne qoft se staku i rradhes sht i prdorur ai mund t jet nj stack proes i prdorur. Stack pointeri mund t mos jet i njjt, gje qe mund t sjell nj gabim fatal kur hardware mundohet t shkruaj fjale ne t. Gjithashtu ai mund t pontoj ne fund t faqes. Pas disa shkrimesh ne memorie, faqia tjetr mund t kalohet dhe nj faqe gabim mund t gjenerohet. Duke patur faqe gabim qe ndodhin gjat proesit t interrupteve hardware, krijon nj problem t madh: ku ta ruaj gjendjen qe t merret me faqet gabim? N qoft se stacku i kernel-it sht i prdorur ka shume mundesi qe stacku i pointerit t jet i njohur dhe t pointoj ne nj pinned page. Gjithesesi switchimi ne kernel mode mund t sjell ndryshim ne kontekstet e MMU dhe mund t paralizoj shume ose t gjitha cache

dhe TLB. Duke riloaduar t gjithe ket, ne menyre statike ose dinamike mund t rrisi kohen pr t proesuar nj interrupt dhe kjo do t sjell humbjen e kohes se CPU. Nj problem tjetr lind ngaqe shume CPU moderne punojne ne pipeline dhe zakonisht jane superscale (paralel ne brendesi). Ne sistemet e vjetra, pas do instruksioni prfundonte ekzekutimi, mikroprogrami ose hardware shikonte ne se kishim ndonj interrupt t ngelur pezull. Ne se po, program counteri dhe PSW shtyheshin pr ne stack dhe fillonte sekuenca e interrupteve. Pasi ekzekutohet interrupti, proesi i anasjellt ndodh dhe PSW e vjetr dhe program counteri bejne pop nga stacku dhe proesi i ardhshem vazhdon. Ky model tregon qe, n qoft se nj interrupt ndodh mbas disa instruksioneve, t gjithe instruksionet duke prfshire dhe at instruksion, ekzekutohen plotsisht, dhe asnj instruksion mbas atij nuk ekzekutohet. Ne nj makine t vjetr kjo gje ka qene gjithmone e vlefshme. Ne makinat moderne mund t mos jet me. Pr t nisur, konsideroni modeli pipeline ne fig.1-6(a). Cfare ndodh kur kerkohet nj interrupt nderkohe qe pipeline sht i ngarkuar (rasti I zakonshem)? Shume instruksione jane ne faza t ndryshme ekzekutimi. Kur ndodh nj interrupt, vlera e program counter nuk mund ta pasqyroje kufirin e sakt midis nj instruksioni t ekzekutuar dhe t nj instruksioni t pa ekzekutuar. Ajo pasqyron adresen e instruksionit tjetr pasardhes qe do t merret dhe do t vendoset ne pipeline, sesa adresen e instruksionit i cili sapo u ekzekutua nga njsia e ekzekutimit. Rrjedhimisht mund t jet nj kufi i mire prcaktuar midis instruksioneve t cilit sapo jane ekzekutuar dhe t atyre t cilit presin pr tu ekzekutuar, por hardware mund t mos e njohi ket. Kur sistemi operativ kthehet nga nj interrupt, ai nuk mund t nisi direkt mbushjen e pipeline nga adresa e ruajtur ne program counter. Ajo duhet t tregoj se pr cfare duhej instruksioni qe sapo u ekzekutua, zakonisht sht nj pune komplekse qe duhet pr t analizuar gjendjen e makines. Ndone se kjo situate ishte e keqe, interruptet ne nj makine superskalare, si ato ne fig.1.6(b) jane akoma me keq. Ngaqe instruksionet mund t ekzekutohen jo sipas nj rradhe, nuk mund t ket nj kufi t mire prcaktuar midis nj instruksioni t ekzekutuar dhe t nj instruksioni t pa ekzekutuar. Mund t ndodh qe instruksionet 1,2,3,5, dhe 8 t jene t ekzekutuar dhe instruksionet 4,6,7,9 dhe 10 mund t mos jene ekzekutuar. Program counter mund t pointoj ne instruksionin 9, 10 ose 11. Nj interrupt qe le makinen ne nj gjendje t mire prcaktuar quhet interrupt precis. Nj interrupt ka katr karakteristika: 1. PC (program counter) ruhet ne nj vend t njohur. 2. T gjithe instruksionet para se t pointohet I pari nga PC, kane ekzekutim t plot. 3. Asnj instruksion pasi sht pointuar I pari nga PC, ka qene i ekzekutur. 4. Gjendja e ekzekutimit t nj instruksioni t pointuar nga PC sht e njohur. Shenojme qe nuk ka asnj ndalim pr instruksionet pasi I pari sht pointuar nga PC qe nga fillimi. do ndryshim qe bejne pr tu rregjistruar ose pr tu memorizuar, duhet t jet

I prfunduar prpara se t ndodh nj interrupt. sht e lejuar qe instruksioni i pointuar t jet i ekzekutuar. Gjithashtu sht e lejuar qe instruksioni i pointuar t mos jet i ekzekutuar. Gjithesesi, duhet t jet e qart se cila forme kerkohet. Zakonisht, n qoft se kemi nj interrupt pr I/O, instruksioni nuk duhet t ket nisur akoma. N qoft se interrupti sht nj trap ose page fault, athere PC do t pointoj te instruksioni qe shkaktoi fault-in keshtu qe ai mund t ristartoj me vone. Nj interrupt qe nuk plotson keto kerkesa quhet interrupt jo preciz dhe ja nxin jetn atyre qe programojne sisteme operative, t cilt duhet t vrasin mendjen se cfare ndodhi dhe se cfare pritet t ndodhi. Makinat me interrupte joprecize nxjerrin nj numer t madh gjendjesh t brendshme mbi stack-un pr ti dhene sistemit operativ mundesi t zbuoje se cfare po ndodh. Duke ruajtur nj numer t madh informacionesh ne memorie pr do interrupt, do t kerkonte nj kohe t madhe. Kjo do t sillte nj situate ironike, pasi do t kishim CPU superskalare shume t shpejta t cilat jane t paprshtatshme pr t punuar me interrupte t avasht. Disa kompjutera jane ndertuar ne menyre t tille ku disa interrupte dhe trap jane precize dhe t tjere jo. Disa makina kane nj bit i cili setohet pr ti detyruar t gjithe interruptet t jene preciz. Ana e keqe e kesaj sht se ajo do t detyroj CPU qe t log-oj do gje qe po bn dhe t ruaj nj kopje t rregjistrave ne menyre qe t gjeneroj nj interrupt preciz ne do moment. E gjithe kjo ka nj ndikim t madh ne performance. Disa makina superskalare, sic jane Pentium Pro dhe t gjithe pasardhesit kane interrupte precize pr t lejuar programet e vjetr t 386, 486 dhe Pentium 1, qe t punojne ne menyre t rregullt. Cmimi qe paguhet pr t patur interrupte precize nuk sht ne kohe, por ne kompleksitetin e chipeve dhe t arkitektures. N qoft se nuk do t prdoreshin interrupte precize mund t ndertoheshin chipe t tille qe do t sillnin nj CPU me shpejtsi shume t madhe. Nga ana tjetr interruptet joprecize do t bnin sistemin operativ me kompleks dhe me t avasht, keshtu qe e kemi t veshtire pr t treguar se cila nga keto sht me e mire.

5.2 Parimet e software I/O Le ta leme hardware I/O dhe t shikojme software I/O. Filimisht do t shqyrtojme synimet e software I/O, pastaj menyrat e ndryshme qe I/O mund t beje nga pikepamja drejtuese.

5.2.1 Synimet e software I/O

Nj celes kyc ne synimet e software I/O sht i njohur si pajisje e pavarur.Kjo do t thot qe do t jet e mundur t shkruash programe qe kane mundesi hyrjeje ne ndonj pajisjeje I/O pa dashur t prcaktosh pajisjen me t rendesishme.

Pr shembull nj program qe i cili lexon nj dosje si informacion duhet t jet ne gjendje ne disket, ne hard disk ose ne CD ROM, pa dashur t ndryshoje programin pr pajisje t ndryshme. Gjithashtu duhet t jet ne gjendje t shkruaje nj komande t tille si: Sort<input>output Dhe t punoje me informacionin qe del nga nj disket, IDE disk, SCSI DISK ose nga tastiera, dhe prpunimi i t dhenave del nga cfaredo lloj disku ose ne ekran. I takon sistemit operativ (drejtues) t merret me problemet e shkaktuara nga fakti se keto pajisjeje jane vertet t ndryshme dhe kerkojne komanda sekuencash t ndryshme pr ti lexuar apo shkruar. Relativisht shume afer me pajisjen e pavarur sht uniform naming. Emri i nj dosje ose i nj pajisjeje do t jet thjesht nj varg ose nj numer i plot dhe nuk duhe t varet pr asnj arsyeje nga pajisja. Ne UNIX t gjithe disqet mund t integrohen ne hirarkine e sistemeve t larta ne menyre arbitrare, ne menyre qe prdoruesi t mos dij cfare emri i prket do pajisjeje. Pr shembull: nj disket mund t qendroje ne direktorine usr/ast/backup keshtu qe ne vend qe t kopjosh nj dosje ne usr/ast/backup/monday e kopjon file-in ne disket. Ne ket menyre t gjitha dosjet dhe pajisjet jane adresuar ne t njjtin vend, ne nj emer t vetm. Nj tjetr emertim pr software I/O eshte error handling (trajtim gabimesh). Ne prgjithesi gabimet duhet t trajtohen sa me afer hardware qe t munden. Ne se kontrolluesi zbulon nj gabim ne lexim, ne se mundet, duhet t prpiqet ta rregulloje vet. Ne se jo athere duhet t merret pajisja drejtuese, ndoshta vetm duke u prpjekur t lexoje prseri bllokimin (gabimin). Disa gabime ndodhin rastesisht, si pr shembull: gabim leximi i shkaktuar ne fillim dhe fshihet ne se veprimi prsritet. Vetm ne se lower layers (pjesa e poshteme) nuk sht ne gjendje ta zgjidhe problemin, i duhet t informoje pjesen e siprme. Ne se disa raste gabimet mund t behen me shume ne nivelin e poshtm, jo ne nivelin e siprm edhe pse e di gabimin. Nj tjetr emertim i rendesishem sht sinkron (bllokues) ose anasjellta, versioni i asinkronizuar (nderprerje-drejtimi) ne transferime. Ne t shumtn e rasteve I/O sht i pasinkronizuar. CPU fillon transferimin dhe kalon t dicka tjetr, derisa t vij interrupti. Prdoruesit e programeve e kane me t leht t shkruajne ne se proeset e I/O jane t bllokuara, pas nj thirrje t sistemit lexues, programi automatikisht nderpritet derisa t dhenat ne dispozicion ruhen ne kujtese. I takon sistemit drejtues t bej veprime qe jane aktualisht nderprerje drejtimi, t shohe bllokimet ne prdorimin e programit. Nj tjetr emertim pr software I/O sht kujtesa. Shpesh t dhenat qe vijne ne pajisje nuk mund t ruhen menjehere ne vendin e tyre prfundimtar. Per shembull, kur nj pako vjen ne rrjet, sistemi drejtues nuk di ku ta vendose derisa ta ruaje diku dhe ta verifikoje.

Gjithashtu disa pajisje kane shume detyrime pr shembull: pajisjet dixhitale audio, keshtu qe t dhenat duhet t vendosen ne kujtesen e prpunimit t t dhenave, ne avantazh t lidhe kategori ne t cilen kujtesa eshe plotsuar, akumuluar nga kategori t tjera, si rregull, 10 sht numri qe ka kujtesa. Kujtesa prmban kopje t konsiderueshme dhe shpesh ka nj ndikim t madh ne kryerjen e I/O. Koncepti i fundit qe do t prmendim i dedikohet pajisjeve. Disa pajisje I/O sic jane disqet,mund t prdoren nga prdorues t ndryshem ne t njjtn kohe. Nuk shkaktohen probleme ne se prdorues t ndryshem kane hapur dosje ne t njjtin disk, ne t njjtn kohe. Pajisje t tjera sic jane: shiritat drejtues, duhet t kene nj prdorues t vetm derisa ai t ket mbaruar. Pastaj, nj prdorues tjetr mund t ket shiritin drejtues. Dy ose me shume prdorues t shkrimit t bllokimeve t ndryshme rastesisht ne t njjtin shirit, prfundimisht nuk mund t funksionoje. Njohja me pajisjet gjithashtu paraqet nj sere problemesh sic jane pengesat. Prseri sistemi drejtues duhet t jet ne gjendje t kryeje t dyja funksionet, dhe ti prkushtohen pajisjes ne nj menyre qe t shmange problemet.

5.2.2 Programimi I/O

Ka 3 menyra t rendesishme, t ndryshme me t cilat mund t shfaqet I/O. Ne ket pjese t paren (programmed I/O). Ne t dy pjest e tjera do t analizojme t tjera nderprerje t pajisjeve I/O duke prdorur DMA Forma me thjesht e I/O sht qe t ket CPU pr t funksionuar. Kjo metode sht quajtur programimi I/O. sht shume e thjesht t ilustrosh programin I/O neprmjet nj shembulli. Marrim nj prdorues proesi qe do t printoje vargun prej 6 shkronjash "A B C D E F G" ne printer. Fillimisht grupon vargun ne nj kujtese ne hapsiren prdoruese sic tregohet ne fig. 5.6 (a)

Pastaj prdoruesi i proesit ne seleksionimin e bere nga nj nj sistem qe prdoret pr ta hapur at. Ne se printeri ne moment sht ne prdorim nga nj proes tjetr, ky proes do t deshtoje dhe t kthehet ne gabim kodi ose t bllokohet derisa printimi t realizohet duke u mbshtur ne sistemin drejtues dhe ne parametrat e kerkuara. Kur printimi t behet, prdoruesi i proesit krijon nj sistem pr ti dhene komanden sistemit drejtues t printoje vargun ne printer. Pastaj sistemi drejtues zakonisht kopjon kujtesen ne nj informacion thot p ne hapsiren kryesore, ku sht me e leht hyrja (sepse hapsira kryesore i duhet t nderroje hartn e kujteses pr t marre nj hapesire prdorimi). Pastaj kontrollon ne se printeri momentalisht sht gati. Ne se jo duhet t prese derisa t behet gati. Kur printeri t jet gati sistemi drejtues kopjon shkronjn e pare ne manualin e t dhenave t regjistruara, ne ket shembull duke prdorur hartn kujtese I/O. Ky veprim aktivizon printerin. Shkronja nuk mund t shfaqet akoma sepse disa printojne kujtesen ose faqen e rradhes prpara se t printoje do gje tjetr. Megjithat ne fig 5.6 (b) shohim qe shkronja e pare sht printuar dhe pastaj sistemi ka shenuar "B" si shkronjn pasardhese pr tu printuar. Pasi ka kopjar shkronjn e pare ne printer, sistemi drejtues kontrollon ne se printeri sht gati t printoje nj shkronj tjetr. Ne prgjithesi printeri ka nj regjistr t dyt qe i jep at gjendje. Kryerja e shkrimit ne t dhenat e regjistruara bn qe printeri t mos jet gati. Kur kjo t ndodhe, printohet shkronja tjetr, sic tregohet ne fig 5.6 (c). Kjo procedure vazhdon derisa t printohet gjithe vargu. Pastaj kontrolluesi kthehet t proesi i prdoruesit veprimet e bera (kryera) nga sistemi drejtues jane prmbledhur ne fig 5.7. Fillimisht t dhenat kopjohen ne kernel. Pastaj sistemi operativ fillon proesin e prpunimit t te dhenave t do shkronj me radhe. Aspekti kryesor i programit I/O, i ilustruar qart ne ket figure sht se pasi prpunon nj shkronj, CPU kontrollon vazhdimisht pajisjen ne se sht gati t pranoje nj tjetr. Ky veprim shpesh sht quajtur polling ose busy waiting.

Programimi I/O sht i thjesht por ka nj disavantazh, CPU punon pa pushim derisa t gjithe I/O t ken mbaruar. Nese koha per te printuar nje karakter eshte shume e shkurtet (sepse gjithcka qe nje printer ben eshte te kopjoje karakterin ne nje buffer te brendshem), me pas busy waiting kalon ne maje. Gjithashtu ne nj sistem t nderfutur, ku CPU nuk ka cfare t beje tjetr, busy wating eshte me funksionale. Megjithat ne shume sisteme t nderlikuara ku CPU bn pune tjetr busy wating nuk funksionon. sht e nevojshme nj metode me e mire I/O.

5.2.3 Nderprerjet drejtuese Le te shqyrtojme rastin e printimit ne nj printer i cili nuk con cdo karakter ne buffer por printon secilen kur vjen. Ne se printeri printon 100 karaktere/sekonde, do shkronj i duhet 10 msec per tu printuar. Kjo do t thot se pasi do shkronj sht shkruar ne regjistrin per printimin e te dhenave, CPU nuk punon pr 10ms dhe pret konfirmimin qe t prpunoje t dhenat e shkronjs tjetr. Kjo sht nj kohe mese e mjaftueshme pr t zgjuar dhe egzekutuar disa procese te tjera ne keto 10 msec, qe do te ishin gjithsesi te humbura. Menyra me e mire qe CPU t punoje nderkohe qe pret printimin t behet gati sht t prdore interruptet. Kur thirrja sistem per te printuar string eshte kryer, bufferi eshte kopjuar ne hapesiren kernel, sic e treguam me sipr dhe shkronja e pare kopjohet ne printer menjehere sapo ai deshiron te pranoje nje karakter. Ne ket moment CPU therret scheduler dhe disa procese te tjera qe jane duke vepruar. Proesi qe ka kerkuar printimin e vargut bllokohet derisa i gjithe vargu t jet printuar. Puna e kryer nga thirrja sistem sht treguar ne fig 5.8 (a).

Kur printeri ka printuar nj shkronj dhe sht bere gati pr t pranuar shkronjn tjetr gjenerohet nj interrupt. Ky interrupt ndalon proesin qe eshte duke u egzektuar dhe e ruan ne at gjendje. Pastaj egzekutohet procedura per sherbimin e interrupteve, nj menyre paraqitjeje e paprpunuar e ketij rregulli sht treguar ne fig 5.8 (b). Ne se nuk ka me shkronja pr t printuar, zoteruesi i interrupteve kryen disa veprime per te bere aktiv perdoruesin. Prndryshe, ai nxjerr karakterin tjeter, pranon interruptet dhe kthehet tek procesi qe ishte duke vepruar para se te ndodhte interrupti, duke vazhduar nga aty ku ishte nderprere.

5.2.4 Programi I\O duke prdorur DMA.

Nj dizavantazh i qart i interrupt-driven I/O, sht se nj interrupt ndodh ne do shkronj. Interruptet duan kohe, keshtu qe kjo skeme humbet njfare kohe nga ajo e CPU-se. Nj zgjedhje sht qe t prdoresh DMA. Ideja sht t lejosh kontolluesin e DMA-se t vendose shkronjat ne printer nj nga nj, pa ju dashur t nderhyje CPU. Ne thelb, DMA sht program I\O, vetm me kontrolluesin e DMA behet puna, ne vend t CPU-se. Nj skice e ketij rregulli sht dhene ne fig 5.9.

Suksesi me i madh i DMA-se sht ulje e numrit t interrupteve, nga nj pr do shkronj, ne nj ne bufferin e pare. Ne se ka disa shkronja dhe nderprerje ato jane t vogla, kjo mund t jet nj arritje e madhe. Nga ana tjetr kontrolluesi DMA sht shume me i ngadalt se CPU. Ne se kontrolluesi DMA nuk sht ne gjendje t drejtoje pajisjen ne shpejtsine e duhur, ose CPU zakonisht nuk ka cfare t beje nderkohe qe pret per DMA-interrupt, pastaj interrupt-driven I\O ose edhe programi I\O mund t jet me i mire.

5.3 SHTRESAT E SOFTWARE- it t I/O Software-i I/O zakonisht merret si i prber nga 4 shtresa, sic tregohet dhe n fig. 5-10. do shtres ka nj funksion t mir prcaktuar per te realizaur dhe nje nderfaqe te mire percaktuar me shtresat ngjitur. Funksionimi dhe ndrfaqja ndryshojn nga nj sistem n tjetrin, kshtu q diskutimi q do pasoje, i cili shqyrton te gjithe shtresat qe nisin nga fundi nuk sht specifik vetm pr nj lloj makine.

5.3.1 Prgjegjsit e Interrupt-eve Pr pjesn m t madhe t paisjeve I/O, interrupet jan nj fakt i padshirueshm q smund t shmanget. Ato duhet t fshihen n nivelet m t ulta t sistemit operativ, n mnyr q ky i fundit t dij sa m pak pr to. Mnyra m e mir pr ti fshehur ato sht posedimi i nj driver-i q ti bllokoj ato derisa I/O t prfundoj punn e vet dhe m pas interrupet mund t vazhdojn. Driveri mund t bllokoj veten e vet n mnyr t ngjashm sic ndodh me semaforin, duke pritur n baz t nj variabli t kushtezuar ose te marr nj mesazh. User-level I/O software Device-independent operating system software Device drivers Interrupt handlers Hardware

fig.5-10. Shtresat e sistemit software I/O.

Pr shembull: Kur ndodh nj interrupt, procedura e tij bn detyrn e vet n mnyr q t arrij qllimin. M pas ajo mund ta zhbllokoj driverin q e filloi at. N disa raste ai mund t veproj sipas semaforit dhe n disa raste t tjera mund t prdor nj variabl t kushtezuar duke afishuar sinjalin e tij n nj monitor. Dhe n raste t tjera drgon nj mesazh tek driveri i bllokuar. N t gjitha rastet efekti i prgjithshm i nj interrupti sht zhbllokimi i driverit q ishte i bllokuar. Ky model sht shum i prshtatshm kur driver-at jan strukturuar si proese kernel, me stivat, stak-et dhe program counter-in e tyre. Sigurisht q n realitet nuk sht aq e thjesht. Prpunimi i nj interrupti nuk sht t marrsh interruptin, ti bsh nj up n semafor dhe m pas me ann e ekzekutimit t instruksionit IRET t kthehemi nga interrupti tek proesi i mparshm. sht nj pun shum m e madhe e Sistemit Operativ pr t menaxhuar interrupt-et. Tani le t japim nj seri hapash duhet te kryhen ne software pasi interrupti hardware ka prfunduar. Duhet t kemi parasysh q detajet e msiperme pr shembull jan shume ne varesi te sistemit, kshtu q disa nga hapat mund te mos jene te nevojshme ne makina t vecanta. Gjithashtu kto hapa do ti gjejm t renditura ndryshe n makina t ndryshme. 12Ruajtja e disa rregjistrave (prfshir dhe at PSW), q nuk jan ruajtur nga hardware i interrupteve. Prcaktimi i nj konteksti pr procedurn e shrbimit t interrupte-ve. Ktu mund t prfshihet dhe prcaktimi i TLB, MMU dhe i page table.

3456-

7-

8910-

Prcaktimi i nj staku pr procedurn e shrbimit t interrupte-ve Njohja e kontrolluesit t interrupte-ve. N se nuk ka kontroller interruptesh qndror, bhet riaktivizimi i interrupte-ve. Kopjimi i rregjistrave nga ku ishin ruajtur (me shum mundsi n ndonj stak) tek tabela e proeseve. Ekzekutimi i procedurs s shrbimit t interrupte-ve, e cila do t nxjerr informacion nga rregjistrat e kontrollit t paisjes t interrupteve. Zgjedh se cili proes do ekzekutohet n vazhdim. N se interrupti kishte ndrprer m prpara nj proes me prioritet t lart, sht m e mundshme q ky proes t ekzekutohet pas interruptit. Vendos kontekstin e MMU pr proesin q do ekzekutohet n vazhdim. Mund t duhet dhe nj set up pr TLB. Ngarkon rregjistrat e rinj t proesit duke prfshir dhe PSW. Fillon ekzekutimin e proesit t ri.

Sic mund t shihet proesi i interrupt-eve sht i rndsishm. Ai krkon gjithashtu nj numr t konsiderueshm instruksionesh CPU-je, sidomos n makinat ku memorja virtuale sht prezent. N disa makina TLB dhe CACHE kan nevoj t menaxhohen gjat kohs s kalimit nga mode kernel n at user, e cila krkon cikle makin shtes.

5.3.2 Driver-at e paisjeve Pak m sipr pam se cfar bnin kontrollert e paisjeve. Pam q do kontroller ka disa rregjistra paisjesh, q shrbejn pr t dhn komandat e veta ose disa rregjistra paisjesh, q shrbejn pr t lexuar gjendjen e tij ose pr ti br q t dyja njkohsisht. Numri i regjistrave t paisjeve dhe natyra e komandave ndryshojn n mnyr radikale nga nj paisje n tjetrn. Pr shembull, driver-i i mouse duhet t marr informacion nga vet mouse-i, q ti tregoj sa ka lvizur dhe cilt jan butonat q jan shtypur. N kontraste me kt nj driver disku duhet t dij pr sektort, track-et, cilindrat, kokat, kohn e vendosjes s kokave, si dhe pr shum mekanizma t tjer q bjn t mundur mirfunksionimin e diskut. Sic shihet, kto drivera do jen t ndryshm nga njri-tjetri. Si rrjedhim do paisje I/O e lidhur me nj kompjuter krkon nj kod t vecant pr ta kontrolluar at. Ky kod i quajtur driver paisjeje, prgjthsisht sht shkruar nga prodhuesi i paisjes dhe sht i bashkangjitur me paisjen. Duke qn se do sistem operativ krkon driver-at e vet, prodhuesit e paisjeve ndrtojn drivera specifik pr sisteme t ndryshme operative (pr ata q jan m popullor). do driver normalisht prgjigjet vetm pr nj lloj paisjeje, ose maksimumi pr nj bashksi paisjesh t ngjashme me njra-tjetrn. Pr shembull, nj driver disku SCSI mund t prgjigjet pr nj sasi t madhe disqesh SCSI t cilt mund t ken madhsi dhe shpejtsi t ndryshme, dhe ndoshta t prgjigjet pr nj CD-ROM SCSI. Nga ana tjetr nj mouse dhe nj joystick jan aq t ndryshm saq duhen drivera komplet t ndryshm

pr secilin. Gjithsesi nuk ka kufizime teknike pr sa i prket posedimit t nj lloj driveri pr paisje t llojeve t ndryshme. Thjesht nuk sht nj ide e mir. N mnyr q t aksesoj hardware-in e paisjes (rregjistrat e kontrollerit), driveri duhet t jet pjes e kernelit t sistemit operativ. Aktualisht sht e mundur q t dizenjohen driver-a q punojn n hapsirn user me thirrje sistemi pr t lexuar dhe shkruar rregjistrat e paisjes. N fakt ky dizenjim do ishte nj ide e mir, ku do izolohej kerneli nga driver-at dhe driver-at nga njri-tjetri. Kjo do t eleminonte burimin ku do lindnin shum prplasje sistem (drivera q n nj mnyr ose nj tjetr interferojn me kernelin). Megjithat duke qn se n sistemet e sotme operative driverat ekzekutohen n kernel, ky sht dhe modeli q ne do marrim n konsiderate. Q n momentin q projektuesit e sistemeve operative kan marr parasysh faktin q mund t shtohen nga jasht driver-a (kode) q m pas t instalohen n kt sistem operativ, gjithashtu duhet krijuar nj arkitektur e prshtatshme pr kt lloj instalimi. Kjo do t thot q duhet t kemi nj model t mirprcaktuar se cfar bn nj driver dhe sesi ndrvepron ky me pjesn tjetr t SO. Driver-at e paisjeve zakonisht pozicionohen posht pjess tjetr t SO sic mund ta shohim t ilustruar n fig.5-11.

Sistemet operative prgjithsisht i klasifikojn driver-at n disa kategori. Kategorit m t zakonshme jan block devices (paisjet me blloqe), sic jan disqet q prmbajn t dhna t shumefishta t adresueshme n mnyr t pavarur dhe character devices (paisjet me karaktere), sic jan tastjerat apo printerat, t cilat gjenerojn ose aksesojn nj sasi t madhe karakteresh.

Pjesa m e madhe e sistemeve operative prcaktojn nj standart ndrfaqje n mnyr q t gjithe driverat me blloqe ta suportojn, si dhe nj standart t dyt ndrfaqje, n mnyra q t gjithe driverat me karaktere ta suportojn. Kto ndrfaqe konsistojn n nj numr procedurash, t cilat thirren nga pjesa tjetr e SO n myr q driveri t bj detyrn e vet. Prcedura tipike jan ato q lexojn nj bllok (block device), dhe ato pr t shkruar nj karakter string (character device). N disa sisteme, SO sht nj program i vetm binar, q prmban t gjithe driver-at q duhen t jen t kompiluar n t. Kjo skem ka qn standarte pr vite n sistemet UNIX, sepse ato ekzekutoheshin nga qndra kompjuterike, paisjet I/O t t cilave shum rrall ndryshonin. N se shtohej nj paisje e re, sistemi administrator thjesht rikompilonte kernelin me driver-in e ri duke ndrtuar nj kode binar t ri. N fillimet e kompjuterave personal, paisjet I/O n to ishin t shumta n numr. Ky model nuk vazhdoi pr shum koh. Pak prdorues jan t aft t rikompilojn kernelin, edhe pse ndoshta mund t ken kodin burim apo modulet objekt. M von sistemet operative, duke filluar me MS-DOS, kishin nj model ku driver-at ngarkoheshin n mnyr dinamike gjat ekzekutimit. Sisteme t ndryshme kan mnyra t ndryshme t ngarkimit t driver-ave. Nj driver paisjeje ka funksione t shumellojshme. M i rndsishmi sht t pranoj lexim abstrakt dhe krkesa shkrimi nga softeware t pavarur nga paisja. Por jan dhe disa funksione t tjera q ai duhet t performoj. Pr shembull, driver-i i duhet te inicializoj paisjen kur sht e nevojshme. Gjithashtu driveri mund t menaxhoj krkesat e fuqis s paisjes ose mund t bj rregjistrimin e ngjarjeve. Shum drivera paisjesh kan struktur t ngjashme. Nj driver prgithsisht e fillon punn e vet duke kontrolluar parametrat e hyrjes, pr t par n se ata jan t vlefshm. N t kundrt kthehet nj error. N se jan t vlefshm, duhet br nj prkthim n terma konkret. Pr nj driver disku, kjo mund t kuptohet si marrja e nj blloku numrash dhe vendosja e tyre n numrat kok, track, sektor dhe cilindr sipas gjeometris s diskut. Driver-i mund t kontrolloj n se paisja sht n prdorim. N se sht n pun, krkesa mund t vihet n rradh pr prpunime t mtejshme. N se paisja nuk sht n prdorim, ekzaminohet gjendja e hardware-it pr t par n se krkesa mund t merret parasysh tani. Ndoshta mund t jet e nevojshme q paisja t ndizet, para se transferimi t filloj. N momentin q paisja ndizet dhe sht gati pr pun, mund t filloj kontrolli aktual. T kontrollosh nj paisje do t thot t ushtrosh nj sekunc komandash n t. Driver-i sht vendi ku kjo sekuenc komandash prcaktohet, duke u varur dhe nga detyra q ka pr t kryer. Pasi driver-i di se cfar komandash ka pr t ekzekutuar, ai fillon ti shkruaj ato n rregjistrat e kontrollerit t paisjes. Pas shkruarjes s komandave n kontroller, ndoshta duhet par n se ai i ka pranuar kto komanda dhe n se sht prgatitur pr t pritur ato pasardhse. Kjo sekuenc vazhdon derisa t gjitha komandat jan prcaktuar. Disa kontrollerave mund tu jepet nj list komandash nga memorja, q ti lexojn dhe ti prpunojn vet pa ndihmn e sistemit operativ.

Pasi prcaktohen t gjitha komandat, mund t ndodh nj nga dy situatat. N disa raste driveri duhet t pres derisa kontrolleri t prfundoj ndonj pun pr t, dhe kshtu bllokon veten e vet derisa t vij interrupt-i pr ta zhbllokuar. N raste t tjera operacioni prfundon pa vonesa dhe driveri nuk ka nevoj t bllokoj veten e vet. Si shembull i situats vijuese, shndrrimi i ekranit n character mode mund t bhet duke shkruar disa bite n rregjistrat e kontrollerit. Nuk nevojiten veprime mekanike, kshtu operacioni mund t prfundoj n disa nanosekonda. N rastin e par driver-i i bllokuar do t zgjohej nga interrupt-i. N rastin e dyt driveri nuk do ishte kurr n gjum. Gjithashtu pasi operacioni prfundon, driver-i duhet t kontrolloj pr gabime. N se do gj sht n rregull, m pas driver-it mund ti duhet t kaloj t dhna tek softi i pavarur nga paisja (nj bllok sapo u lexua). N fund ai kthen nj informacion gjendjeje (raport gabimesh) tek thirrsi i tij. N se jan vn n rradh krkesa t tjera, njra nga to mund t zgjidhet dhe mund t filloj. N se nuk ka krkesa t rradhitura, driver-i bllokon veten dhe pret pr krkesn e rradhs. Ky model i thjesht sht vetm nj prshkrim n vija t trasha i realitetit. Shum faktor e bjn kodin tepr t komplikuar. Interrupt-i mund ta bj nj driver t punoj. Gjithashtu ai mund t bj t punoj nj driver dhe kur ai sht pr momentin n pun. Pr shembull, kur driver-i i network-ut sht duke prpunuar nj paket hyrse, nj paket tjetr mund t vij. Pr pasoj nj driver n pun duhet t pres q t thirret disa caste m hert se prfundimi i thirrjes s par. N nj sistem fleksibl, paisjet mund t shtohen ose t hiqen dhe kur kompjuteri sht n pun. Si rezultat kur nj driver sht i zn duke lexuar nga ndonj paisje, sistemi mund t informoj driver-in q prdoruesi sapo e hoqi kt paisje nga sistemi. Jo vetm q duhet ndrprer transferimi data I/O i momentit pa prishur strukturn e t dhnave, por duhen hequr n mnyr t kujdesshme dhe ato krkesa n pritje ndaj paisjes q nuk sht m, dhe thirrsve duhet tu jepen lajmet e kqia. Pr m tepr shtimi i paisjeve mund t shkaktoj nj konfuzion n kernel duke e br q t zhvendos paisjet e vjetra nga driveri duke i dhn atij ato t reja. Driver-ave nuk u lejohet t bjn thirrje sistem, por ata shpesh mund t ndrveprojn me pjesn tjetr t kernelit. Prgjithsisht thirrjet drejt procedurave t caktuara lejohen. Pr shembull, ka thirrje q shrbejn pr t alokuar dhe calokuar faqe hardware t memorjes, q prdoren si bufera. Thirrje t tjera t nevojshme jan ato pr menaxhimin e MMU, kohuesve, kontrollerin e DMA, kontrollerin e interrupt-eve, etj.

5.3.3 Software-i I/O i pavarur ndaj paisjes

Megjithse nj pjes e software-ve I/O jan specifik ndaj paisjes, pjes t tjera t tij jan t pavarura ndaj paisjes. Dallimi i vrtet mes driver-ave dhe software-ve t pavarur ndaj paisjes sht varsia sistem, sepse disa funksione q mund t kryen n mnyr t

pavarur nga paisja, pr eficenc ose arsye t tjera mund t kryen nga vet driver-at. Funksionet e treguara n fig.5-12 jan t kryera nga software t pavarur nga paisja.

Funksioni kryesor i softwar-it t pavarur nga paisja sht t prformoj funksione I/O q jan t prbashkt pr t gjitha paisjet, dhe t prodhoj nj ndrfaqe uniforme ndaj softwar-it t nivelit-user. M posht do i trajtojm n mnyr m t detajuar temat e msiprme. Ndrfaqja uniforme ndaj driver-ave t paisjeve Nj detyr e rndsishme e nj sistemi operativ sht si ti bj paisjet I/O dhe driver-at t duken pak a shum njlloj. N se disqet, printerat, tastjerat, etj, jan t gjitha t ndrfaqura n mnyra t ndryshm, sa her q vendoset nj paisje e re n pun, sistemi operativ duhet t modifikohet sipas ksaj t fundit. Detyrimi pr t hack -uar sistemin operativ sa her q vendoset nj paisje e re, nuk sht nj ide e mir. Nj aspekt i ksaj detyre sht ndrfaqja ndrmjet driver-ave dhe pjess tjetr t SO. N fig.5-13 (a) jepet nj ilustrim i situats ku do driver ka nj ndrfaqe t ndryshme me SO. Kjo do t thot q funksionet e drivera-ve pr t thirrur n sistem ndryshojn nga nj driver tek tjetri. Kjo mund t nnkuptohet dhe q funksionet kernel q duhen mund t ndryshojn n varsi t driver-it. Si prfundim mund t themi, q t ndrfaqsh nj driver t ri krkon programime shtes. N kontrast me kt, figura 5-13, (b) na tregon nj pamje krejt tjetr, ku t gjith driverat kan t njjtn ndrfaqe. Tani sht shum m e leht t vendossh nj driver t ri. Kjo do t thot q projektuesi e drivera-ve e din se cfar pritet t prformohet nga kto driver-a. N praktik jo t gjitha paisjet jan identike, por jan nj numr i vogl tipe paisjesh, t cilat kan t dhna t prgjithshme t njjta. Pr shembull, dhe paisjet me blloqe dhe karaktere kan gjra t prbashkta.

Fig.5.13 Nj tjetr aspekt i posedimit t nj ndrfaqje uniforme, sht mnyra se si jan emrtuar paisjet I/O. Softwar-t e pavarur nga nga paisja merren me vendosjen e emrave simbolik t tyre n brendsi t driver-it prkats. Pr shembull, n UNIX emri i nj paisjeje, si /dev/disk0 specifikon i-node n mnyr unike pr nj file specifik, dhe kjo inode prmban numrin kryesor t paisjes, i cili shrben pr t lokalizuar driver-in e prshtatshm. Gjithashtu i-node prmban dhe numrin minor, i cili i kalohet si parametr driver-it pr t specifikuar njsin q do lexohet apo shkruhet. T gjitha paisjet kan numr kryesor dhe minor, dhe t gjth driver-at aksesohen duke prdorur numrin kryesor t paisjes pr t zgjedhur driver-in. Shum e lidhur me emrtimin sht siguria. Si i parandalon sistemi prdoruesit q t aksesojn paisjen q nuk sht paraprcaktuar? N UNIX dhe Windows 2000 paisjet shfaqen n file system si objekte t emrtuara, q do t thot q rregullat e zakonshme t mbrojtjes pr filet aplikohen dhe tek paisjet. Sistemi administrator m pas mund t prcaktoj leje t vecanta pr do paisje. Buffering Buffering sht gjithashtu nj problem si pr paisjet me blloqe, ashtu dhe pr ato me karaktere pr arsye t ndryshme. Pr t par nj prej tyre, le t marrim parasysh nj proes q krkon t lexoj t dhna nga nj modem. Nj strategji e mundshme pr t menaxhuar karakteret e hyrjes, sht t bjm proesin e prdoruesit q t bj nj thirrje sistem leximi dhe t bllokoj pritjen e nj karakteri. do karakter q vjen shkakton nj interrupt. Procedura e shrbimit t interrupteve e kalon karakterin tek proesi i prdoruesit dhe e zhbllokon at. Pasi e con karakterin diku, proesi lexon nj karakter tjetr dhe bllokohet prap. Ky model ilustrohet n fig5-14,(a). Shqetsimi me kt mnyr t bri bisnes sht q proesi i prdoruesit duhet te fillohet pr do karakter q duke br q proesi t ekzekutohet shum her pr ekzekutime shum t shkurtra. Kjo nuk sht eficiente, kshtu q ky model nuk sht nj ide e mir. Nj prmirsim tregohet n fig.5-14, (b). Ktu proesi prdorues ka nj buffer me nkaraktere n hapsirn prdorues dhe bn nj lexim prej n-karakteresh. Procedura e shrbimit t interrupteve i vendos karakteret n kt buffer derisa t mbushet plot. M pas ajo zgjon proesin prdorues. Ky model sht shum m tepr eficient se ai i pari, por dhe ky ka nj problem: cfar ndodh n se kur vjen karakteri, bufferi nuk gjendet n

memorje, por sht zhvendosur? Buffer-in mund t kycim n memorje, por n se shum proese fillojn t kycin faqe n memorje, krkimi n t pr faqe t gatshme do zvoglohej, gj q do sillte degradimin e performancs.

Nj prmirsim tjetr sht n fig.5-14, (c) ku vendoset nj buffer n kernel dhe prgjegjsi i interrupt-eve i con karakteret n t. Kur ky buffer mbushet plot, faqja me buffer-in e prdoruesit sillet aty dhe dhe n se nevojitet, kto t dhena kopjohen direkt n kt buffer. Ky model sht shum m eficient. Megithat dhe kjo skem e ka nj problem: cfar ndodh me karakteret q mbrrijne gjat kohs q faqja e buffer- it prdorues po sillet nga disku? Duke qn se buffer-i sht plot nuk kemi ku ti cojm kto karaktere. Nj mnyr sht q t kemi nj tjetr buffer n kernel. Pasi mbushet buffer-i i par, para se ai t boshatiset, prdoret buffer-i i dyt, sic tregohet n fig.5-14, (d). Kur buffer-i i dyt mbushet, mund t kopjohet n hapsirn e prdoruesit. Gjat kohs q po kopjohet buffer-i i dyt, ai i pari mund t pres karakteret e rinj q po vijn. N kt mnyr t dy buffer-at punojn m turne: gjat kohs q njri punon, tjetri akumulon. Kjo skem sht quajtur double buffering. Buffering sht gjithashtu i rndsishm n dalje. Pr shembull, le t imagjinojm sesi bhet dalja n modem pa buffering duke prdorur modelin e fig.5-14, (b). Proesi prdorues ekzekuton nj thirrje sistem shkrimi pr t dhn n dalje n-karaktere. N kt pik sistemi ka dy zgjidhje. 1. Mund t bllokoj prdoruesin derisa t shkruhen t gjith karakteret, por kjo do krkonte shum koh n nj linj telefonike t ngadalt. 2. Ose mund t cliroj prdoruesin menjeher duke kryer nj veprim I/O, ndrkoh q ai n kto momente mund t jet duk prpunuar dicka tjetr. Por kjo na con drejt nj problemi m t madh: nga ta dij proesi prdorues q veprimi I/O ka prfunduar dhe q tani mund t riprdor buffer-in? Sistemi mund t gjeneroj nj sinjal ose interrupt software, por kjo mnyr programimi sht e vshtir. Nj zgjidhje m e mir pr kernelin sht t kopjoj t dhnat n nj buffer kerneli (analoge me fig.5.14, (c)) dhe t zhbllokoj thirrsin menjeher. Tani nuk ka rndsi se kur ka prfunduar veprimi I/O.

Buffering sht nj teknik shum e prdorur, por ka dhe ann e tij negative. N se t dhnat buffero-hen shum her, performanca ulet. Le t marrim parasysh pr shembull, network-un n fig 5.15. Ktu prdoruesi kryhen nj thirrje sistem pr t shkruar n network. Kerneli e kopjon paketn n buffer-in e kernelit dhe i jep t drejt prdoruesit t vazhdoj menjeher (hapi 1).

Fig.5.15 Kur thirret driveri, bufferi kopjon paketn tek kontrolleri pr output (hapi 2). Arsyeja pse ai nuk e nxjerr paketn pr output nga memorja e kernelit direkt n linjn e transmetimit, sht q kur nj paket fillon t transmetohet, ajo duhet t vazhdoj kt me t njjtn shpejtsi. Driver-i nuk na garanton q paketa shkon tek memorja me shpejtsi uniforme, sepse kanalet e DMA-s ose paisje t tjera I/O mund t vjedhin shum cikle. Mos marrja n koh e nj fjale, mund t shkatrroj komplet paketn. Duke e buffer-uar paketn brenda kontrollerit shmanget ky problem. Pasi paketa kopjohet n buffer-in e brendshm t kontrollerit, ajo kopjohet n network (hapi 3) . Bitet mbrrijn tek marrsi n fillim tek bufferi kontrollit t nework-ut. M pas paketa kopjohet n buffer-in e kernelit t marrsit (hapi 4). M n fund ajo kopjohet tek buffer-i i proesit prdorues t marrsit (hapi 5). N prgjithsi marrsi kthen nj paket njohjeje tek drguesi. Kur ky merr paketn e njohjes, ai ka t drejt t drgoj paketn tjetr. sht e qart q ky kopjim do zvogloj shpejtsin e transmetimit, pasi t gjith hapat duhet t ekzekutohen n mnyr sekuenciale. Raportimi i gabimeve (error reporting) Gabimet jan dicka shum e zakonshme n kontekstin e I/O, si n asnj kontekst tjetr. Kur ato ndodhin sistemi operativ duhet t merret me to n mnyrn m t mir q t mundet. Shum gabime jan specifik sipas paisjeve, dhe duhet t merren n ngarkim nga driver-a t prshtatshm, por framework-u q prgjigjet pr gabimet sht i pavarur nga paisja. Nj klas gabimesh I/O jan gabimet n programim. Kjo ndodh kur proesi krkon dicka t pamundur, si shkrimi n nj paisje hyrse (mouse, tastjer, skaner, etj.) ose leximi n nj paisje dalse (printer, plottr, etj.). Gabime t tjera ndodhin kur gjenerojm nj adres buffer-i t pavlefshme ose ndonj parametr tjetr dhe specifikimi i nj paisjeje t

pavlefshme (krkojm diskun 3 kur sistemi ka vetm 2). Veprimi q kryhet kur kemi kto gabime sht i thjesht: raportimi i nj kodi gabimi drejt thirrsit. Nj klas tjetr gabimesh I/O jan ato aktuale, pr shembull prpjekja pr t shkruar nj bllok disku q sht dmtuar apo prpjekja pr t lexuar nga nj kamer q sht e fikur. N kto raste i takon driverit t vendos cfar t bj. N se driveri nuk di cfar t bj, ai mund tia kaloj si problem software-it t pavarur nga paisja. Ajo cka bn ky soft varet nga ambjenti dhe lloji i gabimit. N se sht nj gabim i thjesht leximi, dhe n se sht n dispozicion nj prdorues interaktiv, mund t shfaqet nj kuti dialoguese q pyet prdoruesin se cfar do t bj. N opsion mund t prfshihet injorimi i gabimit dhe riprpjekja disa her, ose vrasja e proesit t thirrjes. N se nuk ka nj prdorues n dispozicion ndoshta opsioni i vetm sht dshtimi i thirrjes sistem me nj kod gabimi. Megjithat disa lloje gabimesh nuk mund t trajtohen si m sipr. Pr shembull, nj struktur t dhnash kritike si direktoria root mund t jet shkatrruar. N kt rast sistemi mund t shfaq nj mesazh gabimi dhe t prfundoj. Alokimi dhe clirimi i paisjeve t dedikuara. Disa paisje si regjistruesit e CD-ROM, mund t prdoren vetm nga nj proes n nj moment t caktuar. I takon sistemit operativ t ekzaminoj krkesat pr prdorimin e paisjeve dhe ti pranoj ose jo ato, duke u varur dhe nga disponibiliteti i paisjes. Nj mnyr e thjesht pr ti menaxhuar kto krkesa sht q ti krkosh proesit t hap file t caktuara specifike vetm pr paisjet. N se paisja nuk sht e gatshme, hapja dshton. Nj prafrim alternativ do ishte q t kishim mekanizma specifike pr krkimin dhe clirimin e paisjeve t dedikuara. Prpjekja pr t aksesuar nj paisje q sht e zn e bllokon thirrsin, n vend q t dshtoj. Proeset e bllokuara vendosen n nj rradh. Hert a von paisja e bllokuar bhet e disponueshme dhe proesi q sht n rradh i pari, lejohet ta aksesoj at dhe t vazhdoj ekzekutimin. Prmasa e bllokut t pavarur nga paisja Disqe t ndryshm mund t ken prmasa t ndryshme t sektorve. I takon softit t pavarur nga paisja pr t fshehur kt fakt, duke performuar blloqe me prmasa t njjta ndaj shtresave m t larta, pr shembull, duke trajtuar sektor t ndryshm si nj bllok logjik unik. N kt mnyr shtresat m t larta kan t bjn me paisje abstrakt, t cilat prdorin blloqe logjik me t njjtat prmasa, t pavarur nga prmasat fizike t sektorve. Pr shembull, paisjet me karaktere i transferojn t dhnat me nj byte n njsin e kohs ( modem-t), ndrkoh q t tjerat i transferojn n njsi m t mdha (ndrfaqet e network-ut) . Edhe kto diferenca mund t fshihen.

5.3.4 Software I/O i hapsirs prdorues (user space)

Megjithse pjesa m e madhe e software-it I/O ndodhet brenda SO, nj pjese e vogl e tij konsiston n librari t lidhura me prgramet user, apo t programeve t tjera jasht hapsirs kernel. Thirrjet sistem, prfshir dhe ato I/O, normalisht kryen nga procedura librari. Kur nj program n C prmban:

Count = write (fd, buffer, nbytes); Procedura e libraris write do lidhet me programin dhe do i bashkangjitet ktij programi n memorje kur ky t jet n ekzekutim. Koleksioni i gjith ktyre procedurave librari sht qartsisht pjese e sistemit I/O. Ajo q bjn kto procedura sht pak a shum vendosja e parametrave n vendin e duhur, ndrkoh q jan procedura t tjera q bjn punn e vrtet. Vecanrisht formatimin e input-it dhe output-it e bjn procedurat librari. Nj shembull i gjuhs C sht printf, e cila merr si input nj string dhe ndoshta disa variabla, ndrton nj string n ASCII, dhe m pas thrret write pr shfaqur stringn. Si shembull t printf le t shohim :

printf ( The square of %3d is %6d \n i, i*i); Kjo formaton stringn prej 14 karakteresh The square duke br nj linefeed. Si shembull i nj procedure t ngjashme, por pr input, sht scanf, i cili lexon input-in dhe e ruan at n variabla me nj sintaks t njjt me at t printf. Libraria standarte e I/O prmban nj numr procedurash q prfshin I/O dhe gjithe pjesn e programeve user. Jo i gjith software I/O i nivelit user prmban procedura librari. Nj kategori tjetr e rndsishme, sht sistemi spooling. Spooling sht nj mnyr e t menaxhuarit t paisjeve I/O t dedikuara (n nj sistem me multiprogramim). Le t marrim parasysh nj paisje q prdor kt sistem: printeri. Megjithse teknikisht do ishte e leht t lejohej nj proes prdorues t hapte nj file t vecant karakteresh pr printerin, supozojm se nj proes e ka hapur dhe nuk bn asnj gj pr or t tra. Asnj proes tjetr sdo mundt t printonte gj. Pr kt krijojm nj proes t vecant, t quajtur daemon dhe nj direktori t vecant, t quajtur spooling directory. Vetm daemon (q ka leje t vecant pr t prdorur printerin dhe asnj proes tjetr), mund t printoj file-a n direktori. Duke e mbrojtur file-n e vecant nga prdorimi direkt nga prdoruesi, problemi i mbajtjes s saj n mnyr t panevojshme, eleminohet. Spooling nuk prdoret vetm pr printerat. Ai prdoret dhe n situata t tjera. Pr shembull, transferimi i file-ave n network prdor nj daemon network-u. Pr t drguar nj file diku, prdoruesi e vendos at n nj spooling directory network-u. Pak m von, daemon i network-ut e transmeton at. Nj pjes e vecant e prdorimit t transmetimit me an t spooling, sht USENET news system. Ky rrjet kosiston n miliona makina q komunikojn n t gjith globin, duke prdorur internet-in. Ekzistojn me mijra grupe

news rreth temave t ndryshme. Pr t postuar nj mesazh news, prdoruesi prfshin nj program news, i cili pranon mesazhin q do postohet dhe e depoziton n nj spooling directory pr ta transmetuar m pas. I gjithe sistemi news ekzekutohet jasht sistemit operativ. Fig. 5-16 prmbledh sistemin I/O, duke na trguar t gjitha shtresat dhe funksionet kryesore t secils. Duke filluar nga fundi, shtresat jan: hardware, prgjegjsit e interrupt-eve (interrupt handlers), driver-at e paisjeve, software i paisjeve t pavarura nga paisja, dhe n fund proeset prdorues.

Shigjetat tregojn drejtimin e kontrollit. Pr shembull, kur nj program user prpiqet t lexoj nj bllok nga nj file, prfshihet SO, n mnyr q t prgjigjet pr thirrjen e br. Software i pavarur nga paisja e krkon n buffer cache. N se blloku i krkuar nuk ndodhet aty, thirret driveri i paisjes pr ta transmetuar krkesn tek hardware, q ky ta marr bllokun n disk. M pas proesi bllokohet derisa t prfundoj ky veprim. Kur merret blloku, hardware gjeneron nj interrupt. Prgjegjsi i interrupt-eve vihet n pun pr t zbuluar cfar ka ndodhur, q do t thot se cila paisje ka rradhn n kt moment. M pas shikon statusin e paisjes dhe zgjon proesin n gjendje qetsie pr t prfunduar krkesn I/O, dhe t lejoj proesin user t vazhdoj.

5.4

DISQET

Tani do t studiojme disa pajisje hyrese/dalese (I/O devices) reale. Do t fillojme me disqet. Me pas do t shqyrtojme orat, tastierat dhe ekranet. 5.4.1 Hardware-i i Disqeve Disqet jane t tipeve t ndryshem. Me t zakonshmit jane disqet magnetike (hard disk dhe floppy disks). Keto mund t shkruhen dhe t lexohen me t njjtn shpejtsi, gje qe i bn ideal si memorie sekondare (paging, file-a t sistemit, etj). Keto prdoren si ruajts shume

t besueshem t informacionit. Pr prhapjen e programeve, t dhenave dhe filmave prdoren lloje t ndryshem disqesh (CD-ROM, CD-Recordable dhe DVD). Ne seksionin qe vijon do t prshkruajme ne fillim hardware-in dhe me pas software-in e ketyre pajisjeve. Disqet Magnetike Disqet magnetike organizohen ne cilindra dhe secili prej tyre prmban gjurme. Gjurmet ndahen ne sektore, ku numri i sektoreve pr nj gjurme t mbyllur (rreth) varion nga 8 ne 32 pr floppy disks dhe deri ne disa qindra pr hard disqet. Numri i kokave varion nga 1 ne 16. Disa disqe magnetike kane hardware t thjesht dhe japin thjesht nj seri t vazhdueshem bitesh ne dalje. Tek keto disqe vecanerisht disqet IDE (Integrated Drive Electronics driver elektroni i integruar) vet pajisja ka nj mikrokontrollues (microcontroller) qe bn disa pune dhe i lejon kontrollerit t vertet t jape disa komanda t nivelit me t lart. Nj vecori e pajisjes, qe ka ndikim t rendesishem mbi driver-at e diskut sht mundesia e kontrollerit pr t bere dy ose me shume kerkime (seek) t sektoreve t disqeve. Keto njihen si kerkime t mbivendosura (overlapped seek). Gjat kohes qe nj kontroller po pret pr mbarimin e nj kerkimi ne nj vend, ai mund t filloje kerkimin ne nj tjetr vend. Shume kontrollera mund t lexojne ose t shkruajne ne nj disk gjat kohes qe kerkojne ne nj tjetr, por nj kontroller i floppy disk nuk mund t lexoje ose t shkruaj gjat kohes qe po kerkon ne t. (T shkruarit apo t lexuarit kerkon levizjen e biteve ne nj kohe t rendit t mikrosekondes, keshtu nj kontrollues prdor pothuajse gjithe fuqine e tij llogaritse pr ket transferim). Puna qendron ndryshe pr hard disk me kontrollera t integruar dhe ne nj sistem me me shume se nj hard disk. Ata mund t punojne njkohesisht, t paktn ne transferimin nga disku ne bufferin e kontrollerit. Aftsia e kryerjes se dy operacionve njkoheshisht mund t ule kohen e aksesit ne menyre t ndjeshme. Figura 5-17 krahason parametrat e pajisjes ruajtse pr IBM PC, origjinale me parametrat e hard diskut modern, pr t treguar sa kane ndryshuar disqet ne dy dekadat e fundit. sht interesante t dallosh se jo t gjithe parametrat jane prmiresuar njlloj. Koha mesatare e kapjes se nj sektori sht prmiresuar shtat here, shpejtsia e trasferimin sht prmiresuar 1300 here, ndersa kapaciteti sht rritur deri ne 50,000 here me shume. Kjo ka t beje me prmiresimin gradual t pjeseve levizese, por rritjen e madhe t dendesise se biteve ne siprfaqen e diskut.

PARAMETRAT Numri i cilindrave Gjurme pr cilinder

IBM 360-KB disku Hard disku floppy 18300 40 2 10601 12

WD

Sektore pr gjurme Sektore pr disk Byte pr sektore Kapaciteti i diskut Koha kerkimit ngjitur)

9 720 512 360 KB (cilindri 6 msek 77 msek 200 msek 250 msek

281(mes) 35742000 512 18.3GB 0.8 msek 6.9 msek 8.33 msek 20msek 17 sek

Koha kerkimit (rasti mesatar) Koha rrotullimit Koha ndalim/nisje t motorrit

Koha pr trasferimin e nj 22 msek sektori

FIGURA 5-17. Parametrat e floppy diskut origjinal t IBM PC dhe nj hard disk origjinal t Werstern Digital WD

Duhet pasur kujdes kur shikohen specifikimet e hard disqeve modern sepse gjeometria e specifikuar, dhe e prdorur nga software-i i drive-it, mund t jet e ndryshme nga forma fizike reale. Ne disqet e vjetr numri i sektoreve pr gjurme ishte i njjt pr t gjithe cilindrat. Disqet moderne jane ndare ne zona me me shume sektore ne periferi t diskut se ne zonat e brendshme t tij. Fig 5-18 (a) ilustron nj disk t vogel me dy zona. Gjurma me ne periferi ka 32 sektore pr gjurme, ndersa ajo me ne brendesi ka 16 sektore pr gjurme. Disqet reale, si pr shembull WD 18300, shpesh kane 16 sektore, ku numri i sektoreve rritet me rreth 4% pr zone kur kalohet nga zona me ne brendesi ne at me ne periferi. Pr t fshehur detajet e numrit t sektore qe ka nj gjurme, shumica e disqeve modern kane nj gjeometri virtuale qe i paraqitet sistemit operativ. Software-i sht i bere pr t vepruar sikur t ket x cilindra, y koka, z sektore pr do gjurme. Kontrolleri me pas riformulon kerkesen pr (x,y,z) ne cilindrat, kokat dhe sektoret reale.

Figura 5-18. (a) Gjeometria reale e nj disku me dy zona. (b) Nj gjeometri virtuale e mundshme, pr ket disk Nj organizim gjeometrik i mundshem pr diskun fizik t figures 5-18(a) tregohet ne fig 5-18 (b). Ne t dy rastet disku ka 192 sektore, vetm se oraganizimi i tyre sht ndryshe nga ai reali. Pr kompjuterat t bazuar ne Pentium, maksimumi i vleres pr keto parametra sht (65535, 16, dhe 63), pr shkak t nevojes se prshtatjes me limitet e kompjuterave t meparshem IBM PC. Ne ket makine, fusha prej 16-, 4- dhe 6- bit prdoreshin pr t specifikuar keto numra, ku numerimi i cilindrave, sektoreve fillonte nga 1, ndersa numerimi i koka fillonte nga 0. Me keto parametra dhe me 512 byte pr sektor, disku me i madh i mundshem ishte 31.5 GB. Pr t anashkaluar ket limit, shume disqe sot kane nj sistem t quajtur adresim llogjik t blloqeve (logical block adressing), ne t cilin sektoret e disqeve numerohen njri pas tjetrit duke filluar nga 0, pa pasur parasysh gjeometrine e diskut. RAID Cilesite e CPU jane rritur ne menyre eksponenciale gjat dekades se fundit, pothuajse duke u dyfishuar do 18 muaj. Kjo nuk ndodhi me disqet. Ne 1970 koha mesatare e kerkimit t nj sektori ne disqet e minikompjuterave ishte 50 deri 100 msek. Tani koha kerkimit sht pak me e vogel se 10 msek. Ne shumicen e industrive teknike (pr shembull automobilistike, aviacionit, etj) nj rritje prej 5 deri ne 10 here t cilesive t tyre ne dy dekada, do t ishte nj lajm i madh, por ne industrine e kompjuterave kjo rritje sht nj turprim ne krahasim me t tjerat. Me gjithe diferencen midis shpejtsise se CPU dhe shpejtsise se diskut, ajo sht bere me e madhe me kalimin e kohes. Sic po shohim, prpunimi ne paralel po prdoret gjithnj e me shume pr t rritur rendimentin e CPU. Gjat viteve ka patur njerez qe menduan se pajisjet I/O ne paralel do

t ishin ide e mire. Ne studimin e tyre t 1988 Pattrson et al, sugjeroi gjasht organizime specifike t disqeve qe mund t prdoreshin pr t prmiresuar cilesite e disqeve, sigurine ose t dyja (Pattrson et al, 1988). Keto ide u zbatuan me shpejtsi ne industri dhe kane cuar ne nj klase t re pajisjesh I/O t quajtura RAID. Pattrson et al prcaktoi RAID si Redundant Array of Inexpensive Disk (rradhitje e prseritur e disqeve jo t kushtushem), por idustria ndryshoi I-ne pr t qene Indipendent-t pavarur ne vend t Inexpensive-jo t shtrenjt (ndoshta ne ket menyre mund t prdornin disqe t shtrenjta). Konkuruesi i RAID ishte SLED (Single Large Expensive Disk nj disk i shtrenjt, i vetm, i madh), (njlloj sic sht RISC me CISC, edhe kjo fale Pattrson). Idea baze mbrapa RAID sht t instalosh nj kuti plot me disqe prane kompjuterit, zakonisht nj server, te zevendesosh kartn e kontrollit t diskut me nj kontroller RAID, t kopjosh t dhenat tek RAID dhe t vazhdosh veprimet normale. Me fjale t tjera RAID duhet ti duket sistemit operativ si nj SLED, por t ket rendiment dhe besueshmeri me t madhe. Meqe disqet SCSI kane rendiment t mire, cmim t ulet dhe aftsi pr t patur deri ne 7 paisje, me nj kontroller t vetm (15 pr SCSI-t e gjere) sht e natyrshme qe shumica e RAID jane kontrollera RAID SCSI, plus nj kuti me disqe SCSI qe i duken sistemit operativ si nj disk i vetm i madh. Ne ket menyre, nuk ishte e nevojshme ndryshimi i software-it pr t prdorur RAID. Prvec paraqitjes si nj disk i vetm software-it, t gjithe RAID-et e shprndajne informacionin nepr disa disqe, pr t lejuar operacionet ne paralel. Pattrson ef al. beri disa skema t ndryshme pr t bere ket gje, dhe ato njihen si niveli (level) 0 i RAID deri ne nivelin 5 t RAID. Ka gjithashtu edhe disa nivele t tjera qe nuk do ti diskutojme. Termi nivel sht thjesht nj emertim jo i drejt, sepse nuk prfshihen hierarki ne organizimin e tyre, por ka gjasht organizime t ndryshme t mundshme. Niveli 0 i RAID ilustrohet ne Fig. 5-19 (a). Disku i vetm virtual i simuluar nga RAID ndahet ne rripa (strip) me nga k sektore secili, ku sektoret nga 0 ne k-1 prbejne rripin e 0, sektoret nga k ne 2k-1 i takojne rripit 1, e keshtu me rradhe. Pr k=1 do rrip sht nj sektor, pr k=2 do rrip ka 2 sektore, etj. Organizimi ne niveli 0 t RAID i shkruan rripa t njpasnjshem ne menyren round-robin, sic tregohet ne Fig. 5-19 (a) pr nj RAID me katr pajisje. Shprndarja e te dhenave ne disa pajisje ne ket menyre quhet stripping. Pr shembull, ne se software jep nj komande leximi t nj blloku t dhenash ne katr rripa t njpasnjshem duke filluar nga fillimi, kontrolleri i RAID do t ndaje ket komande ne katr komanda t vecanta, nj pr secilin nga katr disqet, dhe keshtu t veprojne paralelisht. Kemi keshtu I/O paralele pa njohurine e software-it. Niveli 0 i RAID punon me mire me kerkesa t medha, sa me e madhe aq me mire. Ne se nj kerkese sht me e madhe se numri i rripave shumezuar me madhesine e nj rripi, disa disqe do t marrin kerkesa t shumefishta, keshtu qe kur t mbarojne kerkesen e pare mund t fillojne t dytn. sht detyra e kontrollerit pr t ndare kerkesat dhe pr ti dhene diskut t duhur komanden e duhur, dhe me pas t bashkoje rezultatet ne memorie. Rendimenti sht shume i mire dhe zbatimi i thjesht. Niveli 0 i RAID punon me keq me sisteme operative qe zakonisht kerkojne t dhena ne nj sektor t vetm. Rezultati do t jet korrekt por nuk do t kemi paralelizem dhe keshtu asnj rritje performance. Nj tjetr disavantazh i ketij organizimi sht fakti qe besueshmeria mund t jet me e vogel ne krahasim me nj SLED. Ne se nj RAID prbehet nga 4 disqe, secili me nj kohe mesatare pune pa deshtime prej 20,000 oresh, do

t thot qe afersisht nj here ne 5,000 ore njri prej disqeve do t deshtoje dhe t gjithe t dhenat do t humbasin. Nj SLED me kohe mesatare pune pa deshtime prej 20,000 oresh do t ishte katr here me i besueshem. Meqe ne ket organizim nuk kemi prseritje ky nuk sht nj RAID i vertet. Variant tjetr, niveli 1 i RAID, i treguar ne Fig. 5-19 (b) sht nj RAID i vertet. Ai duplikon t gjithe disqet, keshtu qe ka katr disqe primare dhe katr kopje. Pr do shkrim, do rrip shkruhet dy here. Pr nj lexim, t dy kopjet mund t prdoren, duke shprndare punen. Rrjedhimisht, rendimenti i shkrimit nuk sht me i mire se ne rastin e nj disku t vetm, por rendimenti i leximit mund t jet deri ne dyfish me i mire. Toleranca e gabimeve sht e shkelqyeshme, ne se nj disk prishet, do t prdoret kopja e tij. Zgjidhja sht instalimi i nj disku tjetr dhe kopjimi i diskut t rregullt ne t. Ndryshe nga niveli 0 dhe niveli 1 qe punojne me rripa t sektoreve, niveli 2 i RAID punon me fjale, mundesisht edhe me byte. Imagjinoni t ndani do byte t diskut t vetm virtual ne dy grupe me nga 4 bite, dhe me pas t shtosh nj kod t Hamming-ut ne secilin grup pr t formuar nj fjale 7 bit t gjat, nga t cilat bitet 1,2 dhe 4 jane bite parieteti. Me tej, imagjinoni qe t shtat pajisjet e Fig. 5-19(c) t ishin t sinkronizuar pr nga pozicioni i krahut, e pozicioni i rrotullimit. Athere do t ishte e mundur t shkuanim nj fjale 7 bit (e koduar sipas Hamming-ut) mbi shtat pajisjet, nj bit pr pajisje. Kompjuteri The Thinking Machine CM-2 prdorte ket skeme, duke patur 32 bit, duke shtuar 6 bitet e paritetit t Hamming-ut, formohej nj fjale 38 bit, plus nj bit tjetr shtese pariteti. Fjalet shprndaheshin ne disqe. Throughput-i total ishte shume i madh, sepse ne kohen qe duhet pr shkrimin e nj sektori, mund t shkruheshin 32 t tille. Gjithashtu, prishja e nj disku nuk krijonte probleme, sepse kjo do t thoshte humbjen e njrit prej 39 biteve t fjaleve, po ket gje e rregullon me lehtsi kodi i Hamming-ut.

Figura 5-19 Nivelet e RAID nga 0 ne 5. Pajisjet qe mbajne kopjet dhe informacionin e paritetit jane shenuar me gri Nga ana tjetr kjo skeme kerkon qe t githe disqet t jene t sinkronizuar, dhe ka kuptim pr nj numer t caktuar disqesh (edhe me 32 bit t dhena, 6 bite pariteti, gabimi sht 19%). Gjithashu sht nj pune e madhe pr kontrolluesin, sepse do here do t beje kontrollin e biteve t paritetit. Niveli 3 i RAID sht nj version i thjeshtuar i nivelit 2. Ai ilustrohet ne Fig. 5-19(d). Ketu llogaritet vetm nj bit pariteti, i cili shkruhet ne diskun e paritetit. Ashtu si tek niveli 2, disqet duhet t jene saktsisht t sinkronizuara, meqe nj fjale sht e shprndare nepr shume disqe. Ne fillim mund t duket se nj bit i vetm pariteti jep vetm detektim t gabimit dhe jo korigjim t tij. Pr rastin e gabimeve t rastesishme t pa detektuar, kjo sht e vertet. Megjithat ne rastin e deshtimit t nj disku t tre, ai na jep nj korigjim t plot t gabimeve 1 biteshe, meqe vendi i bitit t gabuar njihet. Kur nj nga pajisjet prishet, kontrolleri pretendon se t gjithe bitet e tij jane 0. Ne se kemi nj gabim pariteti, biti ne pajisjen e prishur duhet t ket qene 1, keshtu qe korrigjohet. Megjithese t dy nivelet 2 dhe 3 t RAID-it, ofrojne shpejtsi shume t medha, numri i kerkesave I/O qe mund t kryejne pr sekonde nuk sht me i mire se ai i nj disku t vetm. Niveli 4 dhe 5 i RAID,kane prseri rripa, skane me fjale me bite pariteti dhe nuk kane me nevoje pr sinkronizim. Niveli 4 i RAID (Fig. 5-19(e)) sht si niveli 0 i RAID me rripa pariteti pr rripat, t shkruar ne nj pajisje shtese. Pr shembull ne se do rrip sht i gjat k byte, mbi t gjithe rripat aplikohet veprimi EXLUSIVE-OR, duke rezultuar keshtu ne nj rrip pariteti k bit t gjat. Ne se nj disk prishet, biti i humbur mund t rillogaritet nga disku paritetit. Ky lloj projektimi t mbron nga humbjet e nj disku por sht i keq ne rast se ndryshohet nj pjese e vogel e informacionit. Ne se nj sektor ndryshon, sht e nevojshme t lexosh t gjithe sektoret pr t llogaritur paritetin, i cili duhet t rishkruhet. Ose mund t lexohet prmbajtja e vjetr dhe pariteti i vjetr dhe t rillogaritet pariteti i ri prej tyre. Edhe me ket optimizim, nj ndryshim i vogel kerkon dy shkrime dhe dy lexime. Si rrjedhoje e vellimit, punes se madhe ne diskun e paritetit, ai mund t kthehet ne problem. Pr zgjidhjen e ketij problemi niveli 5 i RAID shprndan bitet e paritetit ne t gjithe disqet, ne menyre round-robin, sic tregohet ne Fig. 5-19(f). Megjithat ne rastin e deshtimit t njrit prej disqeve, llogaritja e biteve t humbura sht nj proes i veshtire.

CD-ROM-s Ne vitet e fundit, disqet optike (si kundershtare t atyre magnetike) jane bere t pranishem ne treg. Ata kane dendesi shkrimi me t madhe se disqet e zakonshme magnetike. Disqet optike u zhvilluan si fillim, pr t regjistruar programet televizive, por ata mund t prdoren si pajisje ruajtse t kompjuterave. Pr shkak t kapacitetit potencial memorizues, disqet optike jane bere subjekti i shume kerkimeve dhe kane kaluar nj evolucion t shpejt. Gjenerata e pare e disqeve optike u shpik nga nj grup inxhinieresh elektronik hollandez t Philips-it pr t mbajtur filma. Ata kishin diametr 30cm dhe emer LaserVision, por nuk patn sukses, prvecse ne Japoni.

Ne 1980, Philips bashke me Sony, zhvilluan CD (Compact Disc), t cilt shpejt zevendesuan regjistrimet prej vinili 33 1/3-rpm. Detajet teknike t sakta pr CD u publikuan ne Standartin Nderkombetar (IS 10149), i njohur jo-zyrtarisht si Red Book (libri i kuq), pr shkak t ngjyres se kapakut t tij, (International Standard-standartet nderkombetare nxirren nga International Organization for Standadization, i cili sht forma nderkombetare e grupeve kombetare t standarteve. do standart ka nj numer IS). Qellimi i publikimit t specifikimeve te diskut dhe pajisjes se tij ne nj Standart Nderkombetar, sht ti beje CD-t nga shtpi t ndryshme diskografike t punojne ne pajisje t prodhuesve t ndryshem. T gjithe CD-t kane diametr 120mm, dhe 1.2mm t trashe, me nj vrime 15mm ne mes. CD audio ishte e para pajisje kujtese dixhitale e suksesshme ne tregun e gjere. Ato supozohen t durojne deri ne 100 vjet. Ju lutem kontrolloni ne 2080 si shkoi parashikimi. Prgatitet nj CD duke prdorur nj laser infra-red pr t djegur vrima me diametr 0.8mikron ne nj master disk mbuluar me qelq. Nga ky master, prgatitet nj kallep, me gunga aty ku ishin vrimat e laserit. Ne ket kallep, nj przierje polikarbonatesh t shkrire injektohet pr t formuar nj CD me t njjtin formacion vrimash si ne masterin prej qelqi. Pastaj nj shtrese pasqyruese shume e holle alumini, vendoset mbi polikarbonat, dhe mbulohet nga nj shtrese mbrojtse llaku, e ne fund etiketohet. Thellimet ne shtresen e polikarbonatit quhen gropeza(pits), dhe pjesa e padjegur midis gropezave quhet fushe (lands). Gjat punes, nj diode lazer me fuqi t ulet ndricon gropezat dhe fushat me drit infrared, me gjatsi vale 0,78 mikron. Meqe lazeri ndodhet ne krahun e polikarbonatit, gropezat do ti duken gunga ne nj siprfaqe qe prndryshe do t ishte e shesht. Meqe gropezat kane nj lartsi prej cerek gjatsie vale, drita e reflektuar nga gungat (gropezat nga ana tjetr e diskut) do t kene nj shfazim prej gjysem vale, ne lidhje me dritn e reflektuar nga siprfaqja prreth. Si rezultat i ketij shfazimi, dy rrezet e drits interferojne ne menyre desktruktive dhe i kthejne fotodetektorit t pajisjes me pak drit se ne rastin kur pasqyrimi ndodh ne nj fushe. Kjo sht menyra se si nj pajisje tregon dallimin e nj gropeze nga nj fushe. Megjithese duket e natyreshme prdorimi i nj gropeze pr t regjistruar 0 dhe t nj fushe pr 1, sht me e sigurt prdorimi i tranzicionit gropez/fushe apo fushe/gropez pr simbolizuar 1 dhe mungesen e tranzicionit pr 0. Kjo skeme prdoret edhe ne praktike. Gropezat dhe fushat shkruhen ne nj spirale t vetme t vazhdueshme qe fillon tek vrima dhe shkon deri ne nj largesi 32mm nga bordura e diskut. Spiralja bn 22,188 rrotullime rreth qendres se diskut (rreth 600 rrotullime pr 1 mm). Ne se do t cmbeshtillej, spiralja do t ishte 5.6 km e gjat. Spiralja ilustrohet ne Fig. 5-20.

Figura 5-20 Struktura e regjistrimit t nj CD (Compact Disc) Pr luajtur muzike me ritem kostant, sht e nevojshme qe gropezat dhe fushat t kalojne prpara fotodiodes, me shpejetsi lineare konstante. Pra duhet qe shpejtsia e rrotullimit t CD t ulet vazhdimisht, kur koka lexuese e CD leviz nga pjeset me afer qendres drejt pjeseve me larg saj. Ne brendesi, shpejtsia rrotullimit sht 530 rrot/min pr t arritur shpejtsine e deshiruar t kalimit t gropezave dhe fushave prej 120 cm/sek; tek gjurmet me t jashtm rrotullimet ulen ne 200 rrot/min pr ti dhene kokes lexuese t njjtn shpejtsi lineare. Nj pajisje me shpejtsi lineare konstante sht ndryshe nga nj disk magnetik, i cili punon me nj shpejtsi kendore kostante, pavaresisht vendit se ku ndodhet koka lexuese. Gjithashtu shpejtsia prej 530 rrot/min sht shume larg shpejtsise 3600 deri ne 7200 rrot/min qe arrijne shumica e disqeve magnetike. Ne 1984, Philips dhe Sony kuptuan potencialin e prdorimit t CD pr t ruajtur t dhenat e kompjuterave, keshtu botuan Librin e Verdhe (Yellow Book) duke prcaktuar standartin e atij qe sot quajme CD-ROM (Compact Disc Read Only Memory). Pr t prfituar nga tregu i madh i audio CD ne at kohe, CD-ROM do t kishin t njjtn madhesi si audio CD, do t ishin t pajtueshem me to pr nga ana mekanike e optike, dhe do t prodhoheshin nga e njjta makine qe injektonte polikarbonat pr CD audio. Ky vendimi solli nevojen e motorreve t ngadalt me shpejtsi t ndryshueshme. Gjithashtu kosto e prodhimit t nj CD-ROM do t ishte posht 1 dollar. Ajo cfare prcaktoi Libri i Verdhe ishte forma ruajtjes se t dhenave t kompjuterit. Gjithashtu u prmiresua mundesia e korigjimit t gabimeve, nj hap shume i rendesishem. Megjithese degjuesve t muzikes nuk u prishte pune humbja e ndonj bit-i here pas here, prdoruesit e kompjuterit e vene re, shume ket gje. Forma kryesore e

ruajtjes se t dhenave ne CD-ROM sht duke koduar do byte ne nj simbol 14-bit. Sic pame me sipr, 14-bit jane t mjaftueshem pr t koduar sipas Hamming nj byte 8-bitesh dhe 2 bite teprojne. Ne fakt prdoret nj sitem kodimi me i fuqishem. Ckodimi 14-ne-8 behet neprmjet hardware-it. Nj nivel me sipr, nj grup 42 simbolesh t njpasnjshem formojne nj imazh (frame) prej 588 bit. Secili frame mban 192 bit me t dhena (24 byte). Pjesa tjetr qe mbetet, 396 bite, prdoren pr kontroll dhe korigjim gabimesh. Deri ketu kjo skeme sht e njjt si pr CD audio ashtu edhe pr CD-ROM. Libri i Verdhe shton edhe grupimin e 98 frame ne nj sektor t CD-ROM, e treguar ne Fig.5-21. do sektor i CD-ROM fillon me nj hyrje (preamble) 16 byte, ku 12 t paret jane 00FFFFFFFFFFFFFFFFFFFF00 (ne forme hekza decimale), pr ti treguar pajisjes fillimin e nj sektori. Tre byte t tjere mbajne numrin e sektorit, sepse kerkimi i t dhenave ne spiralen e vetme t CD-ROM sht me e veshtire se kerkimi ne gjurmet bashkeqendrore t disqeve magnetike. Pr t kerkuar nj sektor, software-i i pajisjes llogarit me prafersi vendin ku t kerkoje. Pasi vendoset aty fillon t kerkoje pr sekuencen e fillimit t nj sektori. Byti i fundit i hyrje eshte byti mode. Libri i Verdhe prcakton dy menyra (mode). Menyra 1 prdor organizimin e Fig.5-21, me nj sekuence hyrje prej 16 bit, 2048 byte t dhenash, dhe nj kod korigjimi 288 byte ( nj nga kodet Reed-Solomon). Menyra 2 kombinon byte-et e ECC (Error Correction Code) me t dhenat, pr ato prdorime ku nuk ka kohe pr kontrollin apo korigjimin e gabimeve, si pr shembull audio apo video. Vini re se pr t sigurar besueshmeri t lart, prdoren tre skema pr korrigjimin e gabimeve; brenda nj simboli, brenda nj frame-i, brenda nj sektori t CD-ROM.

Figura 5-21 Organizimi llogjik i t dhenave ne nj CD Gabimet me nj bit t vetm korrigjohen ne nivelin me t ulet, segment t shkurtr gabimesh korrigjohen ne nivelin e frame-ve, dhe do gabim i mbetur pa kapur detektohet ne nivel sektoresh. Pr t patur ket besueshmeri sakrifikojme rendimentin. Na duhen 98 frame prej 588 bit secili (7203 byte) pr t mbajtur 2048 byte informacion, me nj rendiment prej vetm 28%.

Pajisjet CD-ROM me nj shpejtsi punojne me 75 sektore/sek, qe do t thot nj shpjetsi t dhenash 153,600 byte/sek me menyren 1 dhe 175,200 byte/sek me menyren 2. Pajisjet me dy shpejtsi jane dyfish me t shpejta, dhe keshtu me rradhe deri ne shpejtsine me t madhe. Keshtu nj pajisje 40x mund lexoje t dhena me nj shpejtsi 40 x 153600 byte/sek, duke supozuar se bus-i i nderfaqes se pajisjes dhe sistemi operativ mund t prballojne ket shpejtsi. Nj CD Audio standarte ka hapesire pr 74 min muzike, i cili ne se prdoret me menyren 1, jep nj kapacitet 681,983,000 byte. Kjo zakonisht jepet si
20

650 MB, sepse 1 MB sht 2 byte (1,048,576 byte) dhe jo 1,000,000 byte. Edhe nj pajisje CD-ROM 32x (4,915,200 byte/sek) nuk krahasohet me nj disk magnetik SCSI-2 me shpejtsi 10 MB/sek, megjithese shume pajisje CD-ROM prdorin nderfaqe SCSI (ekzistojne edhe pajisje CD-ROM me nderfaqe IDE). Kur kujton se koha e kerkimit sht disa qindra milisekonda, behet e qart se pajisjet CD-ROM nuk jane ne t njjtn kategori rendimenti me disqet magnetike, pavaresisht kapacitetit t tyre t madh. Ne 1986, kompania Philips pati prseri sukses me Librin Jeshil (Green Book), duke i shtuar grafike CD-ROM-it dhe aftsine pr t mbajtur audio, video e t dhena ne t njjtin sektor, nj veti e nevojshme pr CD-ROM multimediale. Ceshtja e fundit e CD-ROM sht system file (sistemi i file-ve). Pr t bere t mundur prdorimin e t njjtit CD-ROM ne kompjutera t ndryshem, nevojitej nj marreveshje mbi sistemin e file-ve t CD-ROM. Pr t arritur ne ket marreveshje, prfaqesues t shume kompanive u mblodhen ne liqenin Tohoe t High Sierras-as ne kufirin KaliforniNevada dhe krijuan nj system file qe u quajt High Sierra. Me pas kjo marreveshje evoloi ne Standartin Nderkombetar (IS 9660). Ai ka tre nivele. Niveli 1, prdor emra file-esh deri ne 8 karaktere, nj prapashtese t mundshme prej 3 karakteresh (marreveshja e emrave t file-ve t MS-DOS). Emrat e file-ve mund t prmbajne vetm shkronja t medha, numra, dhe simbolin _ (quajtur: underscore). Direktorit mund te prmbajne njra-tjetren por deri ne nj hierarki prej 8 shkallesh, dhe emrat e tyre nuk mund t kene prapashtesa. Niveli 1 i detyron t gjithe file t jene t vazhdueshem, gje qe nuk sht problem pr nj disk qe do shkruhet vetm nj here. do disk i shkruar sipas standartit IS 9660, Niveli 1, mund t lexohet ne MS-DOS, komjuterat Apple, ne kompjuterat UNIX, apo ne do kompjuter tjetr. Prodhuesit e CD-ROM e shikojne ket veti si nj plus i madh, nivelit 1. IS 9660, niveli 2, lejon emra deri ne 32 karaktere dhe niveli 3 lejon file jo t vazhdueshem. Prapashtesa Rock Ridge (e quajtur keshtu cuditrish nga nj film i Gene Wilder, Blazing Saddles) lejon emra shume t gjat (pr UNIX), UID, GID dhe link-e simbolike, por CD-ROM-et paprputhshem me nivelin 1 nuk do t lexohen nga t gjithe kompjuterat. CD-ROM-et jane bere shume popullore pr t nxjerre ne shitje lojra, filma, enciklopedi, atllase dhe materiale t do lloji. Shumica e software-ve tani gjenden ne CD-ROM. Kombinimi i kapacitetit t tyre t madhe dhe kostos se ulet t prodhimit, i bn ata t prshtatshem pr prdorime t shumta.

CD-Rercordable (CD-t shkrueshem) Fillimisht, pajisja e nevojshme pr prodhimin e nj CD-ROM master (ose CD audio) ishte shume e shtrenjt. Por si zakonisht ne industrine e kompjuterave, asgje nuk vazhdon se qeni e shtrenjt pr shume kohe. Ne mesin e viteve 1990, shkruesit e CD, jo me t medhenj se nj pajisje e zakonshme periferike, ishin ne shitje ne shumicen e dyqaneve t kompjuterave. Keto pajisje akoma ishin t ndryshme nga disqet magnetike, sepse ne se CD-ROM-et shkruheshin, nuk mund t fshiheshin me. Sidoqoft, ata gjetn prdorim si kujtesa pr ruajtjen e kopjeve (back up) t hard disqeve t medhenj. Gjithashtu CDROM-i i lejoi individet apo edhe kompanit e vogla t prodhonin CD-ROM e tyre, apo t bnin mastera qe do tu coheshin fabrikave t medha pr shumefishimin. Keto pajisje njihen si CD-R (CD-Recordables). Fizikisht, CD-R jane disqe bosh, me diametr 120mm me polikarbonat, njsoj si t CDROM-et, prvecse CD-R kane nj kanal 0.6mm pr t drejtuar laserin gjat shkrimit. Kanali ka nj ndryshim sinusoidal prej 0.3mm me nj frekuence saktsisht 22.05 kHz, pr t kontrolluar vazhdimisht shpejtsine e CD, dhe ne se sht e nevojshme t ndryshohet ajo. CD-R duken njsoj si CD-ROM-et e zakonshem, prvecse ata kane ngjyre ari, ne vend t ngjyres se argjendt. Ngjyra e art vjen nga prdorimi i arit ne vend t aluminit si shtrese reflektuese. Ndryshe nga CD, qe kane gropeza (pit) ne to, aftsia reflektuese e ndryshme e gropezave (pits) dhe fushave (lands) duhet t simulohet ndryshe. Kjo behet duke shtuar nj shtrese boje trasparente midis polikarbonatit dhe shtreses reflektuese prej ari, sic tregohet ne Fig. 5-22. Dy lloje bojerash prdoren, cyanina, e cila sht jeshile, dhe pthalocyanina, e cila sht portokalli ne t verdhe. Kimistt mund t diskutojne pafund se cila sht me e mire. Keto bojera t ngjashme me ato t prdorura ne fotografit, gje qe shpjegon faktin qe Eastman Kodak dhe Fuji jane prodhuesit me t medhenj t CD-R bosh.

Fig. 5-22 Prerja trthore e nj disku CD-R dhe e lazerit (jo me t njjtn shkalle). CD-ROM-et e argjent kane stukture t njjt, prvec shtreses se bojes dhe shtreses se arit, t prfaqesuar nga shtresa e argjendit me gropeza Ne gjendjen e saj fillestare shtresa e bojes sht trasparente dhe lejon dritn e laserit ti kaloje prmes, e t reflektohet mbi shtresen e arit. Pr t shkruar, laseri e CD-R rregullohet t punoje me fuqi t madhe (8-16 mW). Kur rrezja godet nj zone t bojes, ajo ngrohet duke prishur lidhjen kimike. Ky ndryshim ne strukturen molekulare krijon nj njolle t erret. Kur lexohet (me 0.8 mW) fotodetektori shikon nj ndryshim midis zonave t erreta, ku boja sht goditur, dhe zonave trasparente ku boja sht e paprekur. Ky ndryshim interpretohet si ndryshimi midis gropezave dhe fushave (pits dhe lands), edhe kur CD-R lexohet ne lezuesat e CD-ROM-it t zakonshem, ose edhe tek audio CD player. Asnj lloj i ri CD nuk u shpik i pashoqeruar nga libri i tij me ngjyre, keshtu qe Libri Portokalli (Orange Book) u publikua ne 1989 pr CD-R. Ky dokument prshkruan CD-R dhe gjithashtu edhe nj forme t re t tij, CD-ROM XA, i cili i lejon CD-R t shkruhen disa here: disa sektore sot, disa t tjere neser dhe disa muajin tjetr. Nj grup sektoresh t njpasnjshem t shkruar njeheresh quhet gjurme e CD-ROM (CD-ROM track). Nj nga prdorimet e pare t CD-R ishte Kodak PhotoCD. Ne ket sistem klienti sjell nj film me fotografi dhe PhotoCD e tij t vjetr dhe merre t njjtin PhotoCD me fotografit e reja, t shtuara tek ato t vjetrat. Informacioni i ri pr tu hedhur merret nga skanimi i fotove ne film. Fotot hidhen ne PhotoCD, ne nj gjurme tjetr CD-ROM-i (CD-ROM track). Shkrimi disa here i CD-R ishte i nevojshem sepse kur ky produkt u hodh ne treg, CD-R bosh ishin shume t shtrenjt pr t blere nj t ri sa here mbaronte nj film me foto. Megjithat, shkrimi disa here i CD-R krijon nj problem t ri. Prpara se t dilte Libri Portokalli, t gjithe CD-ROM-et kishin vetm nj VTOC (Volume Table Of Content libri i tabeles se prmbajtjes) ne fillim. Ajo skeme nuk punonte kur shkruhej disa here (multitrack). Zgjidhja per te shkruar ne Librin Portokalli ishte qe ti jepej do gjurme t CD-ROM-it, VTOC e vet. File-t e shkruara ne VTOC mund t prfshijne disa ose t gjitha file-t nga gjurmet e meparshme. Mbasi nj CD-R futet tek pajisja lexuese, sistemi operativ kerkon t gjithe gjurmet (tracks) e CD-ROM-it pr t gjetur VTOC me t re, e cila i jep gjendjen aktuale t diskut. Duke prfshire vetm disa, por jo t gjitha file-t ne VTOC me t re, sht e mundur t krijohet iluzioni i fshirjes se file-ve. Gjurmet (tracks) mund t grupohen ne sesione, duke cuar ne CD-ROM-e multisesione (multisession) audio CD player standart nuk mund ti lexojne CD me multisesione, sepse ata presin vetm nj VTOC ne fillim t diskut. do gjurme duhet t shkruhet me nj veprim t vetm pa ndaluar. Si rrjedhim, hard disku nga i cili do t vijne t dhenat duhet t jet i shpejt, pr tia dorezuar ato pajisjes shkruajtse ne kohen e duhur. Ne se file-i qe do t kopjohet sht i shprndare nepr hard disk, koha e kerkimit t tij mund t beje qe t dhenat (data stream) qe po shkruhen ne disk t shterojne. Ne se kjo ndodh, ju do prfundoni me nj gje t re shkelqyese dhe t bukur (por deri diku t shtrenjt) pr t vene gotat, apo nj frisbee 120mm ngjyre ari. Zakonisht

software-et e CD-R ofrojne mundesi te mbledhjes se t gjithe file-ave ne nj imazh CDROM (image) t vazhdueshem 650 MB, por ky proes zakonisht dyfishon kohen e shkrimit, kerkon 650 MB t lira ne hard disk, dhe prseri nuk t mbron nga hard disku, vecanerisht ne caste paniku kur hard disku vendos t beje rikalibrimin termik, n qoft se nxehet shume. CD-R bejne t mundur qe individe apo edhe kompanit t kopjojne me lehtsi CD-ROMet (dhe audio CD), zakonisht duke shkelur ligjin mbi t drejtat e autori. Disa skema jane shpikur pr t bere piraterine me t veshtire dhe pr t bere me t veshtire leximin e CDROM-eve nga software t tjere, prvecse atij t prodhuesit. Nj prej tyre sht shkrimi i gjatsise se file-ve ne CD-ROM, si t ishin shume gigabyte, duke shmangur keshtu do prpjekje pr kopjimin e CD ne hard disk. Gjatsia e vertet ndodhe ne sofware-in e prodhuesit, apo e fshehur (mundesish e enkriptuar) ne nj zone t pa parashikueshme t CD-ROM-it. Nj skeme tjetr sht prdorim me vetdije i ECC gabim, ne sektore t caktuar, me shpresen qe software-i pr kopjimin e CD do te korigjoje gabimet. Ky software-i kontrollon vet ECC, duke refuzuar t punoje ne se ata jane t rregullt. Gjithashtu sht e mundur prdorimi i hapesirave jo standarte midis gjurmeve (track) apo i difekteve t tjera fizike.

CD-Rewritables (CD-t rishkruajtshem) Megjithese njerezit jane mesuar me gjera qe shkruhen vetm nj here, sic jane letra, filmat fotografik, ka nj kerkese t madhe pr CD-ROM t rishkruajtshem. Nj teknologji e disponueshme sht CD-RW (CD-ReWritable), e cila prdor disqe me t njjtn madhesi si CD-R. Megjithat, ne vend t bojes cyanine apo pthalocyanine, CD-RW prdorin nj aliazh argjenti, indiumi, antimoni dhe telluriumi si shtrese regjistruese. Ky aliazh ka dy gjendje t qendrueshme: kristaline dhe jokristaline (amorphous-amorfe), me veti t ndryshme pasqyruese. Pajisjet pr CD-RW kane lazer me tre fuqi t ndryshme. Me fuqine me t lart, lazeri shkrin aliazhin, duke e kthyer nga gjendja kristaline shume pasqyruese, ne nj gjendje amorfe jo pasqyruese, pr t paraqitur nj grope(pit). Me fuqine e mesme, aliazhi shkrihet dhe kthehet ne gjendjen e tij natyrale, kristaline, pr tu bere prseri fushe(land). Me fuqine me t ulet, ndjehet gjendja e materialit (pr lexim), por nuk ka ndryshim shenje. Arsyeja se prse CD-RW nuk ka zevendesuar CD-R, sht sepse CD-RW bosh jane me t shtrenjt se CD-R bosh. Gjithashtu, pr prdorime t tilla si kopjimi (buck up rezerve) e hard diskut, fakti qe CD-R po t shkruhen nuk fshihen me, sht nj plus i madh.

DVD Format kryesore t disqeve optike, CD/ CD-ROM, kane ekzistuar qe prej 1980. Teknologjia sht prmiresuar qe prej athere, keshtu qe disqet optike me kapacitet me t lart jane ekonomikisht t prballueshem dhe ka nj kerkese t madhe pr to. Hollywoodi, do t enderronte t zevendesonte kasetat video analoge me disqet dixhitale, meqe disqet kane nj cilesi me t lart, jane me t lira pr tu prodhuar, zgjasin me shume, kerkojne me pak hapesire nepr dollapet e videotekave dhe nuk kane nevoje t mbeshtillen. Kompanit

e konsumit elektronik po kerkojne pr nj produkt t ri, meqe kompanit e kompjuterave duan ti shtojne multimedia software-ve t tyre. Ky kombinim i teknologjise dhe kerkeses se tregut nga tre industri shume t pasura e t fuqishme, coi ne krijimin e DVD, ne fillim e njohur si Digital Video Disk (disk i videos dixhitale), por tani njihet zyrtarisht si Digital Versatile Disk (disk dixhital i gjithanshem). DVD prdorin t njjtin parim si CD, nj disk 120mm polikarbonati me gropeza dhe fusha, qe ndricohet nga nj diode lazer dhe lexohet nga nj fotodetektor. T rejat tek DVD jane prdorimi i: 1. gropezave me t vogla (0.4 mikron ndryshe nga 0.8 mikron tek CD) 2. nj spiraleje me t ngusht (0.74 mikron ndermjet gjurmeve ne dallim nga 1.6 mikron t CD) 3. nj laser t kuq (0.65 mikron ne krahasim me 0.78 mikron t CD) Bashke, keto prmiresime rrisin kapacitetin shtat here, ne 4.7 GB. Nj pajisje DVD 1x punon me 1.4 MB/sek (ne dallim nga 150 KB/sek tek CD). Fatkeqesisht ndryshim ne laser t kuq, si ai i prdorur tek supermarkett, do t coje ne nevojen e nj lazeri t dyt, apo t ndonj metode t sofistikuar optike, pr t lexuar CD dhe CD-ROM ekzistues. Ket nuk e bejne t mundur t gjitha pajisjet. Gjithashtu mund t mos jet e mundur leximi i CD-R dhe CD-RW ne pajisjet e DVD. A jane t mjaftueshme 4.7 GB? Ndoshta. Duke prdorur ngjeshjen (compression) MPEG2 (me standart IS 13346), nj disk DVD 4.7GB, mund t mbaje 133 minuta me video me ekran t plot (full-screen), me levizje (full-motion), ne cilesi (resolution 720x480) t lart, gjithashtu edhe me fonogram (soundtrack) deri ne 8 gjuhe dhe 32 titra (subtitles). Rreth 92 prqind e t gjithe filmave qe ka bere Hollywood jane me pak 133 minuta. Megjithat, disa aplikacione si lojrar multimediale, apo informacioni i nj pune t caktuar, mund t kerkoje me shume. Po ashtu edhe Hollywood-i do t kerkonte t fuste disa filma ne nj disk, keshtu qe u prcaktuan katr forma: 1. Nj ane t vetme, me nj shtrese t vetme (4.7 GB) 2. Nj ane t vetme, me dy shtresa (8.5 GB) 3. Dy ane, me nga nj shtrese (9.4 GB) 4. Dy ane, me nga dy shtresa (17 GB) Po prse kaq shume formate? Me pak fjale: politika. Philips dhe Sony donin disqe me nj ane dhe me dy shtresa si version me kapacitet t lart t DVD, por Toshiba dhe Time Warner donin disqet me dy ane, me nj shtrese. Philips dhe Sony mendonin se njerezve nuk do tu pelqente t kthenin diskun nga ana tjetr. Ndersa Timer Wanver nuk besonte se mund t vendoseshin dy shtresa ne nj disk. Kompromisi ishte : t gjithe kombinimet e mundshme, por tregu do t vendoste se cili do t mbijetonte. Teknologjia me dy shtresa vendos shtresen reflektuese mbi nj shtrese gjysem-reflektuese (semireflektive). Ne varesi t fokusimit t lazerit, ai pasyrohet nga njra apo tjera shtrese. Shtresa me e ulet ka nevoje pr gropeza dhe fusha (pits and lands) pak me t medha, qe t lexohet me leht. Kapaciteti i saj sht pak me i vogel se ai i shtreses se siprme.

Disqet me dy ane behen duke mare dy disqe 0.6mm me 1 ane dhe duke i ngjitur ata bashke. Pr ti bere t gjitha versionet t kene t njtn trashesi, disku me nj ane prbehet nga nj disk 0.6mm i ngjitur me nj baze (disk bosh), (ose ndoshta ne t ardhmen, ky disk sdo t jet bosh po do ket 133 minuta me reklama, me shpresen se njerezit do t behen kurioz mbi prmbajtjen e anes tjetr). Struktura e diskut me dy ane, me dy shtresa sht treguar ne Fig. 5-23.

Figura 5-23 Nj disk DVD me dy ane, me nga dy shtresa. DVD u shpik nga nj partneritet prej 10 kompanish elektronike, shtat prej t cilave ishin japoneze, ne bashkepunim me studiot me t medha t Hollywood-it (disa prej t cilave jane prone e kompanive japoneze ne partneritet). Industrit e kompjuterave dhe e telekomunikacionit nuk u ftuan ne piknik, dhe si rezultat DVD-t u shpiken me qellim kryesor prdorimin pr shitjen apo dhenien me qera t filmave. Pr shembull, nj tipar standart sht kalimi ne kohe-reale (real-time) t skenave t pista (pr ti lejuar prinderit ti bejne filmat e shikueshem edhe pr femijet), audio me gjasht kanale dhe suportimi i Pan-and-Scan. Vecorit me t fundit i lejojne lexuesit e DVD (DVD player) t vendosin ne menyre dinamike ne se t presin pjesen e djathte apo t majt t filmit (me raport gjeresi:lartsi 3:2) pr tu prshtatur me televizoret (me raporte gjeresi:lartsi 4:3). Nj tjetr gje t cilen industria e kompjuterave nuk do ta kishte menduar ishte mosprputhja nderkombetare midis disqeve pr Shtetet e Bashkuara dhe disqet pr Europen, prseri standarte t ndryshme pr kontinente t ndryshme. Holliwood-i kerkoi ket vecori sepse filmat e rinj dalin ne fillim ne Shtetet e Bashkuara dhe me pas dergohen ne Europe. Idea ishte qe videotekat ne Europe t mos blinin videot ne Sh.B.A. me shpejt se sa ata qe do tu dergoheshin, duke ulur keshtu edhe shikimin e filmave ne kinemat Europiane. Ne se Holliwood-i do t kishte drejtuar industrine e kompjuterave, do t kishte cakuar floppy-disc 3.5 inch pr Shtetet e Bashkuara dhe floppy-disc 9 cm Eruopen.

5.5.2 Formatimi i Diskut (Disc Formatting)

Hard disku prbehet nga nj pirg me pjata prej alizhi alumini, ose qelqi, me diametr 5.25 ose 3,5 inch (1 inch=2.54 cm), (ose edhe me t vegjel ne komjuterat portative). do pjat ka nj shtrese oksid metali, t magnetizueshem. Mbas prodhimit, nuk ka asnj informacion ne disk. Prpara se disku t prdoret, do pjat ka nevoje ti nenshtrohet nj formatimi t nivelit t ulet (low-level format), i bere nga software-i. Formatimi ka t beje me krijimin e gjurmeve (tracks), ku secila gjurme prmban nj numer t caktuar sektoresh, me hapesira t vogla midis sektoreve. Prmbajtja e nj sektori tregohet ne Fig.5-24:

Figura 5-24 Sektori i nj disku Hyrja (preamble) fillon me nj motiv t caktuar bit-esh qe i lejon hardware-it t njohe fillimin e nj sektori. Gjithashtu ajo prmban numrin e cilindrit t sektorit si dhe disa informacione me shume. Madhesia e pjeses qe mban t dhenat, vendoset nga programi formatues i nivelit t ulet. Shumica e disqeve i kane sektoret nga 512-byte. Pjesa ECC (Error Correcting Code) prmban informacion shtese qe mund t prdoret pr t zgjidhur gabimet ne lexim. Nuk sht e cuditshme qe pjesa e ECC t ket 16-byte. Pr me tepr, t gjithe hard disqet kane disa sektore rezerve, pr t zevendesuar sektoret me difekt prodhimi. Pozicioni i sektorit 0 ne secilen gjurme (track) sht shmangur nga pozicioni ne gjurmen paraardhese, kur behet formatimi i nivelit t ulet. Kjo zhvendosje, qe quhet shtremberimi-cilindrit (cylinder-skew), behet pr t prmiresuar efektshmerine. Ideja sht, qe ti lejosh diskut t lexoje disa gjurme me nj veprim t vetm t vazhduar, pa humbur t dhena. Problemi mund t dallohet duke pare Fig.5-18(a). Supozoni se nj kerkese ka nevoje pr 18 sektore duke filluar nga sektori 0 ne gjurmen me t brendshme. Pr t lexuar 16 sektoret e pare nevojitet nj rrotullim i plot i diskut, por duhet t bejme nj kerkim pr t levizur tek gjurma e jashtme dhe t marrim sektorin e 17. Gjat kohes qe koka lexuese ka levizur tek gjurma tjetr, sektori 0 i saj e ka kaluar koken, keshtu qe nevojitet nj rrotullim i plot qe ky sektor t kaloje prseri posht. Ky problem zgjidhet duke zhvendosur sektoret, sic tregohet ne Fig.5-25.

Figura 5-25 Nj ilustrim i shtremberimit t cilindrit (cylinder skew) Madhesia e shtremberimit t diskut varet nga gjeometria e pajisjes. Pr shembull: nj paisje me 10,000rrot/min rrotullohet ne 6msek. Ne se nj gjurme mban 300 sektore, nj sektor i ri do t kaloje do 20sek. Ne se koha e kerkimit gjurme-me-gjurme sht 800sek, do t kene kaluar 40 sektore gjat kerkimit. Keshtu qe shtremberimi i cilindrit duhet t jet 40 sektore ne vend t 3 sektoreve t treguar ne Fig.5-25. Duhet t prmendet se nderrimi i kokave lexuese kerkon nj kohe t fundme, pra ka edhe nj shtremberimt-kokes (head-skew) ashtu sic ka shtremberim t cilindrit, por shtremberimi-i-kokes nuk sht shume i madh. Si rezultat i formatimit t nivelit t ulet, kapaciteti i diskut zvogelohet, ne varesi t madhesise se hyrjes, hapesirave ndermjet sektoreve dhe ECC, por gjithashtu edhe i sektoreve rezerve. Shpesh kapaciteti pas formatimit sht 20% me i ulet se kapaciteti i para formatimit. Sektoret rezerve nuk bejne pjese ne kapacitetin pas formatimit. T gjithe disqet e nj lloji t caktuar kane t njjtin kapacitet kur dergohen, pavaresisht numrit t sektoreve t prishur qe kane (ne se numri i sektoreve t prishur i tejkalon numrin e atyre rezerve, pajisja do t kthehet, e nuk do t shitet). Ka nj ngatrrim rreth kapacitetit t disqeve, sepse disa prodhues reklamojne kapacitetin e diskut t pa formatuar. Kjo behet pr ti bere t duken me t medha pajisjet e tyre, ndryshe nga cfare jane me t vertet. Pr shembull konsideroni nj pajisje, kapaciteti i pa
9

formatuar i t ciles sht 20x10 byte. Kjo mund t shitet si nj disk prej 20GB.

Megjithat pas formatimit, vetm 2 17.2x10 byte mund t mbushen me t dhena. Akoma me shume, puna ngatrrohet pr shkak se sistemi operativ do ta raportoje ket
30

34

kapacitet si 16GB, jo 17.2GB sepse ai e konsideron 1GB=2 (1,073,741,824)byte, dhe jo


9

10 (1,000,000,000) byte. Gjerat nderlikohen me shume kur kosiderohet bota e komunikacionit, ku 1Gbps do t
9

thot 1,000,000,000 bit/sek. Kjo ndodh sepse parashtesa giga ne t vertet do t thot 10 ( nj kilometr sht 1000 metra , dhe jo 1024 metra). Vetm me memorien dhe me
10 20 30 40

madhesite e disqeve, kilo, mega, giga, tera jane sipas rradhes: 2 ,2 ,2 ,2 . Formatimi ndikon gjithashtu edhe ne efektshmeri. Ne se nj disk me 10,000 rrot/min ka 300 sektore pr gjurme, me nga 512 byte pr do sektor, do ti duhen 6msek pr t lexuar 153,600 byte ne nj gjurme, duke dhene nj shpejtsi prej 25,600 byte/sek ose 24,4 MB/sek. sht e pamundur qe t lexoje me shpejt se kaq, pavaresisht nga lloji i nderfaqes qe ti vendosesh, edhe po t jet nj nderfaqe SCSI me shpjtsi 80 MB/sek ose 160 MB/sek. Pr t lexuar vazhdimisht me ket shpejtsi do t duhej nj buffer i madh tek kontrolleri. Konsideroni pr shembull, nj kontroller me nj buffer prej nj sektori madhesi, qe ka marre komanden pr t lexuar dy sektore t vijueshem. Mbasi lexohet sektori i pare nga disku, e pas llogaritjes se ECC, t dhenat duhet t trasferohen tek memoria kryesore. Gjat kohes qe kryhet ky trasferim, sektori tjetr e kalon koken lexuese. Kur mbaron kopjimi ne memorien kryesore, kontrolluesi duhet t presi pothuajse pr nj periode rrotullimi, ne menyre qe sekotri i dyt t vije posht kokes lexuese prseri. Problemi mund t eliminohet duke i numeruar sektoret ndryshe, kur t behet formatimi. Ne Fig. 5-26 (a) sht treguar numerimi (duke injoruar shtremberimin e cilindrave). Ne Fig.5-26 (b) tregohet single interleaving, i cili i jep kontrolluesit pak pushim gjat sektoreve t njpasnjshem, ne menyre t tille qe t kopjoje buffer-in ne memorien kryesore. Ne se proesi i kopjimit sht shume i ngadalt, sht e nevojeshme double interleaving, i treguar ne Fig. 5-27(c). Ne se nj kontroller ka nj buffer prej vetm nj sektori, nuk ka rendesi ne se kopjimi do t kryhet nga kontrolluesi, nga CPU apo nga DMA, asaj do ti duhet nj fare kohe. Pr t shmangur nevojen e nj numerimi t atille t sektoreve, kontrolluesi duhet t jet ne gjendje qe t mbaje nj gjurme t tr. Shume kontrollera modern mund ta bejne ket gje. Mbas formatimit t nivelit t ulet, disku sht i ndare ne particion-one (pjese). Llogjikisht do particion sht si nj disk i ndare. Tek Pentium-i dhe ne shumicen e kompjuterave t tjere, sektori 0 prmban master boot record, (t dhenat kryesore t fillimit t punes), e cila mban disa rreshta kod pr fillimin e punes se kompjuterit plus tabelen e particioneve ne fund.

Figura 5-26 (a) Pa interleaving (b)Single interleaving (c) Double interleaving Tabela e particioneve (partition table) jep sektorin e fillimit dhe madhesine e do particioni. Tek kompjuterat Pentium, tabela particioneve ka vend pr katr particione. Ne se t gjitha jane pr Windows, ata do t quhen C:, D:, E: e F: dhe do t trajtohen si pajisje me vet. Ne se tre prej tyre jane pr Windows e nj sht pr UNIX, athere Windowsi do ti quaj C:, D:, E:. CD-ROM-i i pare do t quhet F:. Pr t filluar punen kompjuteri (boot) nga leximi i njrit prej sektoreve, ai duhet t jet i shenuar si aktive ne tabelen e particionve. Hapi i fundit ne prgatitjen e nj disku pr prdorim, sht kryerja e nj formatimi t nivelit t lart (high-level format) t secilit particion (vecmas). Ky operacion vendos nj bllok t fillimit t punes se kompjuterit (boot block), administrimin e hapesirave boshe (free list ose me bitmap), direktorin rrenj(root directory) dhe nj sistem bosh filesh. Gjithashtu ai vendos nj kod ne tabelen e particionve qe tregon cili sistem file-sh sht prdorur ne at particion. Kjo behet sepse sisteme operative t ndryshem mund t lexojne sisteme file-sh t ndryshem dhe t papajtueshem (pr arsye historike). Tani sistemi mund t filloje punen (boot-ed). Kur ndizet kompjuteri, ekzekutohet ne fillim BIOS dhe pastaj lexohet master boot record. Ky program kontrollon se cili nga particionet sht aktive. Pastaj ai lexon sektorin pr fillimin (boot sector) dhe e ekzekuton at. Sektori pr fillim (boot sector) prmban nj program t vogel i cili kerkon direktorine rrenj e nj programi t caktuar (ose t sistemit operativ ose t nj ngarkuesi t sistemit t fillimit, me t madh; - bootstrap loader). Ai program ngarkohet ne memorie dhe ekzekutohet.

5.4.3 Algoritmet e planifikimit t krahut t diskut (Disk arm Scheduling Algorithms) Ne ket pjese do t shikojme disa ceshtje t prgjithshme rreth pajisjeve t disqeve. Ne fillim, mendoni se sa do t jet koha e nevojshme pr leximin apo shkrimin e nj blloku. Koha e nevojshme prcaktohet nga tre faktore: 1. koha kerkimit (koha pr t levizur krahun ne cilindrin e duhur) 2. vonesa e rrotullimit (koha qe sektori i duhur t rrotullohet posht kokes) 3. koha reale e transferimit t t dhenave.

Pr shumicen e disqeve, koha kerkimit mbizotron mbi dy kohet e tjera. Duke ulur kohen mesatare t kerkimit mund t prmiresohet ndjeshem efektshmeria. Ne se pajisja pranon vetm nj kerkese dhe e prfundon at, pra First-Come First-Served (FCFS), nuk mund t behet ndonj gje e madhe pr t prmiresuar kohen e kerkimit. Megjithat mund t prdoret nj strategji tjetr, kur disku sht shume i ngarkuar. sht e mundur qe gjat kohes qe krahu po punon pr plotsimin e nj kerkese, proese t tjera t kene kerkesat e tyre pr sherbim nga disku. Shume pajisje mbajne nj tabele, e rradhitur sipas numrit t cilindrit, me t gjitha kerkesat e paplotsuara pr do cilinder. Kerkesat e shumta pr nj cilinder mbahen ne lista zinxhir, t cilat e kane fillimin tek rrjeshtat e tabeles. Me ket lloj strukture t dhenash, mund t prmiresojme algoritmin e planifikimit firstcome, first-served. Kosideroni nj disk imagjinar me 40 cilindra. Vjen nj kerkese pr leximin e nj blloku ne cilindrin 11. Gjat kohes se kerkimit t cilindrit 11, vijne kerkesa t reja pr cilindrat 1,36,16,34,9 dhe 12, me ket rradhe. Ato futen ne tabelen e kerkesave t pambaruara (pending request), me nj list zinxhir (linked list) pr do cilinder. Kerkesat tregohen ne Fig. 5-27:

Figura 5-27 Algoritmi : i pari, kerkimi me i shkurtr (Shortest Seek Firs SSF) Kur kerkesa e pare (ajo pr cilindrin 11) mbaron, pajisja mund t zgjedhe se cilen kerkese t plotsoj me pare. Duke prdorur FCFS ajo do t shkonte tek cilindri 1, pastaj tek 36, e keshtu me rradhe. Ky algoritem do coje ne nj zhvendosje prej 10,35,20 18,25, dhe 3 cilindrash respektivisht, pr nj total prej 111 cilindrash. Ndryshe, pajisja mund ti prgjigjet gjithmone kerkeses me t afert t pares, pr t minimizuar kohen e kerkimit. Me kerkesat e Fig.5-27, sekuenca e kerkesave do t jet 12, 9, 16, 1,34 dhe 36, t treguara me vijen e thyer posht fig.5-27. Me ket renditje, levizjet e krahut do t jene 1, 2, 7, 15, 33 dhe 2, me nj total prej 61 cilindrash. Ky algoritem Shortest Seek First (SSF = i pari, kerkimi me i shkurtr) pothuajse e prgjysmon kohen e kerkimit ne krahasim me FCFS. Fatkeqesishit, SSF ka nj problem. Supozoni se gjat kohes se kryerjes se kerkesave t Fig. 5-27 do vijne vazhdimisht kerkesa t reja. Pr shembull, mbasi krahu ka shkuar tek cilindri 16, vjen nj kerkese pr cilindrin 8, e cila do t ket prioritet mbi kerkesen pr cilindri 1. Ne se me pas vjen nj kerkese pr cilindrin 13, krahu do t shkoje tek cilindri 13, ne vend t cilindrit 1. Me nj disk t ngarkuar, krahu do t tentoje t qendroje ne mes

t diskut shumicen e kohes. Keshtu kerkesat ne dy skajet do tu duhet t presin pr nj fluktuacion statistikor t kerkesave t reja, i cili t shkaktoje mungesen e kerkesave ne mes t diskut. Kerkesat larg qendres do t kene sherbim t varfer. Qellimet e kohes minimale dhe barazize se kohes se pritjes jane ne konflikt ne ket rast. Edhe ndertesat e larta duhet t prballohen me ket problem. Problemi i planifikimit t levizjes se nj ashensori ne nj ndertse t lart, sht i njjt me at t planifikimit t levizjes se krahut t diskut. Kerkesat vijne vazhdimisht duke therritur ashensorin ne nj kat t caktuar (cilinder). Kompjuteri mund t mbaje rendin e kerkesave ne t cilen klientt kane shtypur butonin dhe ti sherbeje ata duke prdorur FCFS. Ai mund t prdore edhe SSR. Megjithat, shumica e ashensoreve prdorin nj alogoritem tjetr pr ekuilibrimin e efektshmerise dhe drejtsise. Ata vazhdojne t levizin ne t njjtin drejtim derisa nuk ka me kerkesa ne at drejtim. Pastaj ata nderrojne drejtim. Ky algoritem, i njohur si ne botn e ashensoreve ashtu edhe ne at te disqeve me emrin algoritmi i ashensorit (elevator algorithm), ka nevoje qe software-i t mbaje nj bit pr drejtimin: lart ose posht. Kur mbaron nj kerkese, kontrollehet bit-i i drejtimit. Ne se sht lart krahu apo kabina levizin tek kerkesa lart me e afert, e pambaruar. Ne se nuk ka me kerkesa t pambaruara ne ket drejtim bit-i i drejtimit ndryshohet. Kur bit-i sht posht, levizja behet ne drejtim t kerkeses me t afert posht, t pambaruar, ne se ka. Figura 5-28 tregon zbatimin e algoritmit t ashensorit duke prdorur t njjtat kerkesa si ne Fig.5-27, duke supozuar se te bit-i drejtimi ka qene fillimisht lart. Renditja ne t cilen u sherbehet kerkesave sht 12, 16, 34, 36, 9 dhe 1. Kjo con ne keto levizje t krahut: 1, 4, 18, 2, 27 dhe 8; me nj shume prej 60 cilindrash. Ne ket rast algoritmi i ashensorit sht pak me i mire se SSF, megjithese zakonish sht me i keq. Nj vecori e algoritmit t ashensorit sht qe kufiri maksimal i numrit total t levizjeve, pavaresisht shprndarjes se kerkesave, sht sa dyfishi i numrit t cilindrave.

Figura 5-28 Algoritmi i ashensorit pr menaxhimin e kerkesave t diskut Nj modifikim i ketij algoritmi, me nj kohe t prgjigjes me pak t ndryshueshme, sht t kerkosh ne at drejtim. Kur cilidri me numrin me t madh dhe me nj kerkese t pambaruar, mbaron pune, krahu shkon ne cilindrin me numer me t vogel dhe me nj kerkese t pambaruar. Me pas vazhdo t leviz ne drejtimin rrits. Si rezultat, cilindrit me numrin me t vogel mendohet t jet mbi cilindrin me numrin me t madh.

Disa kontrollues t diskut bejne t mundur qe software-i t kontrolloje numrin e sektorit t pranishem nen koken lexuese. Me nj kontrollues t tille, sht e mundur nj organizim tjetr. Ne se ka dy ose me shume kerkesa t paplotsuara pr t njjtin cilinder, pajisja mund t sherbeje kerkesen, sektori i t ciles do t kaloje e para posht diskut. Vini re se, kur nj cilinder ka disa gjurme, kerkesat e njpasnjshme mund t jene pr gjurme t ndryshme, pa vonesa t tjera ne kohe. Kontrolleri mund t zgjedhe donjren prej kokave menjehere, sepse zgjedhja e kokes lexuese nuk ka t beje as me levizje t krahut, as me vonesa ne rrotullim. Ne se disku ka veti t tille qe koha e kerkimit sht me e vogel se vonesa e rrotullimit, athere duhet t prdoret nj strategji tjetr prmiresimi. Kerkesat e paplotsuara, duhet t rradhiten sipas numrit t sektorit. Sapo t afrohet sektori tjetr qe do lexohet, krahu duhet t levize tek gjurma e duhur pr ta lexuar apo shkuajtur. Ne disqet modern, vonesat e kerkimit dhe rrotullimit ndikojne kaq shume ne efekshmeri, saqe t lexosh nj sektor t vetm do here, nuk sht aspak e frytshme. Pr ket arsye, shume kontrollues disqesh lexojne dhe mbajne pr pak kohe (cache) gjithmone disa sektore, edhe kur nevojitet vetm nj. Zakonisht nj kerkese pr leximin e nj sektori, do t coje ne leximin e disa apo t t gjithe sektoreve t tjere t gjurmes, ne varesi t madhesise se kujteses cache t kontrolluesit. Disku i treguar ne Fig.5-17, ka ne cache prej 2MB ose 4MB, pr shembull. Prdorimi i cache prcaktohet nga kontrolluesi. Me menyren me t thjesht, cache ndahet ne dy pjese, nj pr leximin dhe nj pr shkrimin. Ne se kerkesa pasuese mund t plotsohet nga kujtesa cache, t dhenat e kerkuara kthehen menjehere. Duhet prmendur se cache-ja e kontrolluesit t diskut sht plotsisht e pavarur nga cache-ja e sistemit operativ. Cache-ja e kontrolluesit zakonisht mban blloqe t dhenash t cilat ne t vertet nuk jane kerkuar pr lexim, por ishte i prshtatshem leximi i tyre, sepse u ndodhi t kalonin posht kokes, si efekt anesor i leximit t nj sektori. Ndersa, do cache tjetr qe mban sistemi operativ do prmbaje blloqe t cilat jane lexuar ne baze t nj kerkese dhe t cilat sistemi operativ mendon se do ti duhen prseri ne t ardhmen. Kur nj kontroller ka disa pajisje, ai duhet t mbaje nga nj tabele kerkesash t paplotsuara (pending requests) pr do pajisje. Kur ndonj nga pajisjet sht papune, duhet t krijohet nj kerkim qe t levize krahun tek cilindri, ku do t lexohet me vone (duke supozuar se kontrolleri lejon kerkimet e mbivendosura). Kur nj trasferim t dhenash mbaron, behet nj kontroll pr t pare ne se ndonj nga pajisjet sht ne cilindrin e duhur. Ne se ka nj ose me shume, trasferimi tjetr mund t filloje nga ajo pajisje qe sht vendosur ne cilindrin e duhur. Ne se asnj nga krahet nuk sht vendosur ne vendin e duhur, driver-i duhet t urdheroje nj kerkim t ri (seek) ne pajisjen qe sapo mbaroi trasferimin, dhe t prese interruptin tjetr pr t pare se cili nga krahet ka arritur i pari. sht e rendesishme t kuptohet se t gjithe algoritmat e mesiprm supozonin qe gjeometria e disqeve reale sht e njjt me at virtual. Ne se nuk jane t tille, planifikimi i kerkesave t disqeve nuk ka kuptim sepse sistemi operativ nuk mund t dalloje ne se cilindri 40 apo cilindri 39 sht afer cilindrit 39. Nga ana tjetr, ne se kontrolluesi i disku mund t pranoje kerkesa t shumta menjeheresh, ai mund ti prdor vet keto algoritme. Ne ket rast algoritmat jane t vlefshme, por t zbatuara ne nj nivel me posht, tek kontrolluesi.

5.4.4 Trajtimi i Gabimeve (Error Handling) Prodhuesit e disqeve po kaprcejne limitet e teknologjise duke rritur gjithnje e me shume dendesine lineare t bite-ve. Nj gjurme ne mes t nj disku 5,25 inch ka nj perimetr rreth 300mm. Ne se gjurma mban 300 sektore prej 512 byte, dendesia lineare mund t jet rreth 5000 bit/mm, duke marre parasysh se nj pjese humbet pr fillimin e sektoreve (preable), ECC dhe hapesirat ndermjet sektoreve. Pr t regjistruar 5000 bit/mm nevojitet nj siprfaqe shume uniforme dhe nj mbulese shume e mire oksidi. Fatkeqesish, nuk sht e mundur prodhimi i disqeve me keto specifikime, pa difekte. Pr sa kohe prmiresohet teknologjia e prodhimit ne at pike qe lejon punen pa gabime me keto dendesi, projektuesit e disqeve do t prdorin dendesi edhe me t larta pr t rritur kapacitetin. Kjo gje do t rifusi prseri, me shume mundesi difektet. Difektet e prodhimit cojne ne sektore t prishur, t cilt jane sektore nga ku nuk mund t rilexohet nj vlere e sapo shkruar. Ne se difekti sht shume i vogel, le t themi vetm disa bit, sht e mundur t prdoret ky sektori i prishur dhe ECC le t korigjoje do here gabimet. Ne se difekti sht me i madh, gabimet nuk mund t fshihen. Ka dy zgjidhje t prgjithshme pr sa i prket blloqeve t prishur (bad block): t merret kontrolluesi me to ose t merret sistemi operativ me to. Ne zgjidhjen e pare, prpara se disku t niset pr shitje nga fabrika, testohet dhe ne t shkruhet nj list me sektoret e prishur. do sektor i prishur, zevendesohet nga nj sektor rezerve. Ka dy menyra pr ta bere ket. Ne Fig. 5-29(a), shohim vetm gjurme t nj disk me 30 sektore dhe dy rezerve. Sektori 7 sht me difekt. Ajo cfare mund t beje kontrolleri, sht t shenoje nj nga sektoret rezerve si sektori 7, sic tregohet ne fig.5-29(b). Menyra tjetr sht qe t zhvendosesh t gjithe sektoret me nj vend, sic tregohet ne Fig.5-29(c). Ne t dy rastet kontrolluesi duhet t njohe se cilt jane sektoret rezerve dhe ato t prishur. Ai mban shenim ket informacion ne nj tabele t brendshme (nj pr do gjurme) ose duke i rishkruar pjeset hyrese (preamble) t sektoreve, pr ti dhene sektoreve t ndryshuar numrin e duhur. Ne se shkruhen pjese hyrese (preambles), metoda e figures 5-29(c), kerkon me shume pune, por pa dyshim qe efektshmeria do t jet me e lart. E gjithe gjurma do t mund t lexohet me nj rrotullim.

Figura 5-29 (a) Gjurma e nj disku me nj sektor t prishur. (b) Zevendesimi i sektorit t prishur me nj rezerve. (c)Zhvendosja e t gjithe sektoreve pr t anashkaluar nj t prishur Gabimet mund t lindin edhe gjat punes, pasi sht instaluar pajisja. Gjeja e pare qe behet kur kemi nj gabim t cilin ECC nuk mundt ta rregulloje, sht thjesht t provohet edhe nj here leximi. Disa gabime jane t prkoheshme, do t thot se shkaktohen nga grimca pluhuri posht kokes qe do t largohen ne proven e dyt. Ne se kontrolluesi dallon se po lexon nj gabim t vazhdueshem ne nj sektore t caktuar, ai mund t kaloje tek ata rezerve, prpara se sektori t prishet plotsisht. Ne ket menyre, nuk humbasin t dhena dhe sistemi operativ e prdoruesi as nuk e vene re problemin. Zakonisht metoda e Fig. 529(b) duhet t prdoret kur sektoret e tjere kane t dhena. Prdorimi i metodes se Fig.529 do t kerkonte jo vetm t rishkruaje pjeset hyrese (preamble), por edhe t kopjoje t dhenat. Me pare u tha se ka dy menyre pr t trajtuar gabimet: ti zgjidhe kontrolluesi ose ti zgjidhe sistemi operativ. Ne se kontrolluesi nuk ka mundesine qe t rregulloje sektoret ne menyre t pandjeshme, sic u tha me sipr, athere sistemi operativ duhet beje t njjtn gje por me software. Ne fillim ai duhet t marre nj list me sektoret e prishur, ose duke i lexuar nga disku, ose duke e testuar vet t gjithe diskun. Kur i ka gjetur sektoret e prishur, ai mund t ndertoje tabelen e rinumerimit. Ne se sistemi operativ do t prdore zgjidhjen e Fig.5-29(c), ai duhet t zhvendose me nj sektor me sipr t dhenat nga sektori 7 ne sektorin 29. Ne se merret sistemi operativ me rinumerimin e sektoreve, duhet sigurohet qe sektoret e prishur t mos kene ndonj file dhe gjithashtu qe ata t mos gjenden asnjehere ne listn ose hartn e hapesirave boshe (free list ose bitmap). Nj zgjidhje e ketij problemi sht krijimi i nj file-i i cili prbehet nga t gjithe sektoret e prishur. Ne se ky file nuk vendoset ne sistemin e file-ve, prdoruesi nuk ka mundesine qe ta lexoje gabimisht (ose me keq akoma ta fshije at, pr t liruar vend) Megjithat ka edhe nj problem tjetr: back up (kopjet rezerve). Ne se diskut i behet ndonj kopje rezerve file pr file, sht e rendesishem qe programi kopjues t mos mundohet t kopjoje blloqet e prishur t file-ve. Pr t parandaluar ket, sistemi operativ duhet t fsheh file-in qe prbehet nga blloqet e prishur kaq mire, saqe edhe nj program pr back up mos ta gjeje at. Ne se disku kopjohet sektor pr sektor do t jet e veshtire, mos e pamundur, parandalimin e gabimeve t leximit gjat kopjimit. Shpresa e vetme sht qe programi kopjuese t ket aq zgjuarsi: sa t dorezohet pas 10 deshtimeve dhe t vazhdoje me sektorin tjetr. Sektoret e prishur nuk jane burimi i vetm i gabimeve. Gabime kerkimi ndodhin pr shkak t problemeve mekanike tek krahu. Kontrolluesi ndjek pozicionin e krahut. Pr t realizuar nj kerkim, ai i leshon nj seri pulsesh motorrit t krahut, nj puls pr cilinder pr t levizur krahun mbi nj cilider t ri. Kur krahu mberrin aty ku duhet, kontrolluesi lexon numrin e cilindrit nga pjesa hyrese (preamble) e sektorit me t afer. Ne se krahu sht ne vendin e gabuar, gjenerohet nj gabim kerkimi (seek error). Shumica e kontrolluesve t disqeve rregullojne gabimet ne kerkim automatikisht, por shumica e kontrolluesve t floppy-it (duke prfshire edhe Pentium-in) thjesht vendosin nj bit gabimi dhe ia lene driver-it t merret me t. Driver-i zgjidh ket problem duke dhene nj komande rikalibrimi, pr t levizur krahun sa me ne periferi t diskut dhe t

rivendose cilindrin qe kontrolleri mendon t jet 0. Zakonisht kjo zgjidh problemin. Ne se nuk e zgjidh, pajisja duhet t rregullohet. Sic kemi pare, kontrolleri sht me t vertet nj kompjuter i vogel i specializuar, me software-in e tij, variabla, buffer-a dhe ndonj here me gabimet e tij t programimit (bug). Mund t ndodh qe nj seri ngjarjesh t pazakonta, sic sht ardhja e nj interrupti ne nj pajisje, njkohesisht me komanden e rikalibrimit ne nj tjetr, t shkaktojne probleme (shfaqjen e bug-eve) dhe t sjelle nj cikel t pafund t kontrolluesit ose humbjen e asaj cfare po bnte me prpara. Projektuesit e kontrolluesave zakonisht parashikojne rastin me t keq dhe i pajisin ata me nj kunj (pin) ne chip i cili kur nevojitet e detyron kontrolluesin t harroje cfaredo gjeje qe po bnte dhe t rifilloje (reset) nga e para. Ne se do gje tjetr deshton mund t vendos nj bit t caktuar ne 1, pr t kerkuar ket sinjal dhe reset-uar kontrollerin. Ne se kjo nuk punon, e vetmja gje qe mund t beje driver-i sht t shfaqe nj mesazh gabimi dhe t dorezohet. Rikalibrimi i nj disku, prvec nj zhurme t cuditshme, nuk sht shqetsuese. Megjithat ka nj situat ku rikalibrimi sht nj problem i madh: sistem me detyrime t kohes-reale (real-time constrain). Kur po luhet nj video nga hard disku, ose po shkruhen ne CD-ROM file nga hard disku, sht e nevojshme qe bitet t vijne nga hard disku me nj shpejtsi uniforme. Ne keto kushte rikalibrimi fut hapesira ne rrjedhen e bite-ve (bit stream), e cila sht e pa pranueshme. Pajisje speciale, t quajtura disqe AV (Audio Video disc), t cilat nuk rikalibrohen kurre, prdoren pr keto aplikacione. 5.4.5 Ruajtje e Qendrueshme (Stable Storange) Pame qe disqet nganjehere kane gabime. Sektore t mire mund t prishen papritmas. E gjithe pajisja mund t prishet pa parashikim. RAID-et mbrojne nga prishja e disa sektoreve ose edhe deshtimi i nj pajisje t tr. Megjithat ata nuk mbrojne nga gabimet qe ne shkrim t t dhenave. Gjithashtu nuk mbrojne nga deshtimet gjat shkrimit, t cilt prishin t dhenat origjinale pa i zevendesuar ato me t tjera. Pr disa zbatime, sht themelore qe t dhenat t mos humbin ose t prishen kurre, edhe ne se ka gabime t diskut ose CPU-s. Nj disk ideal duhet t punoje gjithe kohes pa gabime. Fatkeqesisht kjo nuk mund t arrihet. Ajo cfare mund t arrihet sht nj disk, nensistem, i cili ka ket veti: kur komandohet nj shkrim, disku ose shkruan pa gabime t dhenat, ose nuk bn asgje, duke i lene t dhenat ekzistuese t paprekura. Nj sistem i tille quhet stable storage (ruajtje e qendrueshtme) dhe zbatohet me ane t software-it (Lampson dhe Sturgis, 1979). Posht po prshkruajme nj variant t idese origjinale. Prpara se t prshkruajme algoritmin, sht e rendesishme t kemi nj model t qart t gabimeve t mundshme. Modeli supozon se kur shkruhet nj bllok (nj ose me shume sektore), shkrimimi sht ne rregull ose i gabuar dhe ky gabim mund t detektohet nga nj lexim pasues i cili kontrollon vlerat e fushave t ECC. Ne parim nj zbulim i sigurt i gabimeve nuk sht i mundur kurre. Pr shembull me nj 16 byte ECC, t cilat sherbejne
4096

pr kontrollin e 512 byte t sektorit, ka 2


144

vlera t mundshme t t dhenave dhe vetm

2 vlera t mundshme t ECC. Keshtu ne se ndodh nj ngatrrese gjat nj shkrimi por ECC sht ne rregull, ka biliona kombinime t mundshme t gabuara qe cojne ne t njjtn ECC. Ne se ndodh njri prej tyre, gabimi nuk do t zbulohet. Probabiliteti qe nj e

-144

dhene rastesore t ket ECC e duhur pr mos tu zbuluar sht rreth 2 , e cila sht aq e vogel sa mund ta quajme zero, por ne t vertet nuk sht zero. Modeli gjithashtu merr parasysh faktin se nj sektor i shkruar mire, mund t prishet vetvetiu dhe t behet i palexueshem. Megjithat, supozohet se nj ngjarje e tille sht kaq e rralle, saqe probabiliteti i prishjes se t njjtit sektor ne nj pajisje tjetr (t pavarur) gjat nj intervali t arsyeshem kohe (per shembull nj dit) sht aq e vogel sa t injorohet. Modeli gjithashtu supozon se edhe CPU deshton. Ne ket rast ai thjesht ndalon. do shkrim i diskut ne castin e deshtimit, gjithashtu nderpritet, qe con ne t dhena t gabuara ne nj sektor dhe ECC t gabuar, i cili mund t zbulohet me vone. Me gjithe keto kushte, stable storange mund t behet 100% i besueshem ne kuptimin qe kur shkruhet ose shkruhet pa gabime, ose lihen t dhenat e vjetra t paprekura. Sigurisht, nuk mbron nga katastrofat natyrore, si pr shembull renia e nj termeti dhe kompjuteri qe bie nga 100m lartsi ne nj liqen me llave. sht e veshtire t mbrohesh ne keto rrethana me ane t software-it. Stable storange prdor nj cift disqesh identike, ku blloqet e njjta ne disqeve t ndryshem formojne bashke nj bllok pa gabime. Ne mungese t gabimeve blloqet korresponduese ne t dy pajisjet jane t njjta. Njri prej tyre mund t lexohet pr t arritur ne t njjtin rezultat. Pr t arritur ket qellim, jane prcaktuar tre veprimet e meposhtme. 1. Shkrim i qendrueshem (stable writes). Nj shkrim i qendrueshem ka t beje me shkrimin e bllokut ne diskun 1 t parin, pastaj ne leximin e tij pr verifikim. Ne se nuk sht shkruar mire, shkrimi dhe leximi prseritn derisa mos ket gabime, ose deri ne n here. Ne se pas n deshtimeve rradhazi, blloku vendoset ne nj sektor rezerve, dhe veprimi prsritet derisa t ket sukses, pavaresisht se sa sektor rezerve duhet t provohen. Mbas shkrimit ne pajisjen 1 u krye me sukses, do t shkruhet blloku i njjt ne pajisjen 2, dhe do t rilexohet, disa here, derisa edhe ketu shkrimi t ndodhe pa gabime. Ne mungese t deshtimeve t CPU-se, kur mbaron nj shkrim i qendrueshem, blloku sht shkruajtur pa gabime ne t dy pajisjet dhe sht verifikuar tek t dyja. 2. Leximi i qendrueshem (stable read). Nj lexim i qendrueshem lexon ne fillim bllokun nga pajisja 1. Ne se kjo ka nj ECC jo te sakt, lexohet prseri, deri ne n here. Ne se t gjitha leximet japin nj ECC gabim, blloku prkats do t lexohet tek pajisja 2. Duke ditur se nj shkrim i qendrueshem krijon dy kopje t rregullta, dhe se sipas supozimit tone probabiliteti qe nj bllok t prishet tek t dy pajisjet sht i neglizhueshem, nj lexim i qendrueshem sht gjithnj i sukseshem. 3. Rimarja nga deshtimet (Crash recovery). Mbas nj deshtimi, nj program rimarje (recovery) shqyrton t dy disqet duke krahasuar blloket e njjta. Ne se nj cift blloqesh jane pa gabime dhe t njjt, nuk behet asgje. Ne se njri prej tyre ka nj gabim ne ECC, blloku me gabim rishkruhet me t dhenat e bllokut tjetr pa gabime. Ne se nj cift blloqesh nuk kane gabime, por jane t ndryshem, blloku ne pajisjen 1 shkruhet ne bllokun e pajisjes 2.

Ne mungese t deshtimeve t CPU, kjo skeme punon gjithmone sepse shkrimi i qendrueshem githmone shkruan dy kopje t vlefshme pr nj bllok dhe u supozua se gabime t vetvetishme nuk ndodhin anjehere njkohesisht ne t dy kopjet e tij. Po ne se ndodh nj deshtim i CPU gjat nj shkrimi t qendrueshem? Kjo varet nga casti se kur ndodh ky deshtim. Ka pese mundesi, sic tregohet ne Fig. 5-30:

Figura 5-30 Analiza e ndikimit t deshtimeve ne shkrimin e qendrueshem Ne Fig. 5-30 (a) deshtimi i CPU ndodh prpare se t shkruhet ndonj nga kopjet e bllokut. Gjat rrimarjes nga deshtimi, asgje nuk do t ndryshoje dhe t dhenat e vjetra do t ekzistojne akoma, gje qe lejohet. Ne Fig.5-30(b) deshtimi i CPU ndodh gjat shkrimit t pajisjes 1, duke shkaterruar prmbajtjen e bllokut t saj. Megjithat programi rrimarjes do t detektoje gabimin dhe do t kopjoje bllokun e pajisjes 2 ne bllokun e prishur t pajisjes 1. Keshtu efekti i deshtimit zhduket dhe rrimeret plotsisht gjendja e meparshme. Ne Fig.5-30(c) deshtimi i CPU ndodh pasi sht shkruar pajisja 1 por prpara shkrimit t pajisjes 2. sht arritur pika e moskthimit: programi i rrimarrjes do kopjoje bllokun nga pajisja 1 ne pajisjen 2. Shkrimi prfundon pa gabime. Fig.5-30(d) sht ngjashme me Fig.5-30(b). Gjat rrimarjes, blloku pa gabime mbishkruhet ne at t prishurin. Prseri, vlera e t dy blloqeve do t jet ajo e bllokut t ri. Se fundmi, ne Fig.5-30(e) programi i rrimarjes shikon se t dy blloqet jane t njjt, keshtu qe nuk ka nevoje pr ndryshime dhe shkrimi prfundon me sukses. Ka disa prmiresime t mundshme t kesaj skeme. Si fillim, krahasimi i t gjithe cifteve t blloqeve gjat rrimarjes sht e mundur, por kerkon shume kohe. Nj prmiresim i madh sht t ruash numrin e gjurmes se bllokut i cili po shkruhej, keshtu qe do t nevojitet t kontrollohet vetm nj bllok gjat rrimarrjes. Disa kompjutera kane nj memorie t vogel jo t zhdukshme (nonvolatile RAM) e cila sht nj memorie CMOS speciale e ushqyer nga nj bateri litiumi. Keto bateri zgjasin vite, mundesisht gjat gjithe jets se kompjuterit. Ndryshe nga memoria kryesore, e cila humbet mbas nj deshtimi, nonvolatile RAM nuk humbet pas nj deshtimi. Ora e dits mbahet ketu (dhe rritet nga nj qark special). Kjo shpjegon faktin qe kompjuteri di gjithmone oren edhe po ta heqesh nga priza.

Supozoni se disa byte t nonvolatile RAM jane ne dispozicion t sistemit operativ. Shkrimit i qendrueshem mund t vendosi numrin e bllokut qe do t rifreskoje ne nj nonvolatile RAM prpara se t filloje shkrimin. Pas shkrimit t suksesshem, numri i bllokut tek nonvolatile RAM mbishkruhet me nj numer jo t vlefshem, per shembull,. 1. Ne keto kushte, mbas nj deshtimi, programi i rrimarjes mund t kontrolloje nonvolatile RAM pr t pare, ne se po kryhej nj shkrim gjat deshtimit. Ne se po, cili ishte blloku qe po shkruhej kur ndodhi deshtimi. Me pas dy kopjet e bllokut mund t kontrollohen pr saktsimin dhe prputhjen e tyre. Ne se nuk ka nonvolatile RAM, ai mund t sajohet sic vijon. Ne fillim t nj shkrimi t qendrueshem, nj bllok fiks t pajisjes 1 shkruhet me numrin e bllokut qe do t shkruhet. Ky bllok rilexohet pr ta verifikuar. Pasi t shkruhet pa gabime, i njjti bllok shkruhet ne pajisjen 2 dhe verifikohet. Pas nj shkrimi t qendrueshem, t dy keto blloqe mbishkruhen me nj numer t pavlefshem. Edhe ketu, mbas nj deshtimi sht e mundur t prcaktohet lehtsisht ne se po kryhej nj shkrim i qendrueshem ose jo. Kjo teknike kerkon me shume veprime me diskun, pr t shkruar nj bllok pa gabime, keshtu qe duhet t prdoret sa me rralle. Edhe nj pike tjetr qe ia vlen ta prmendesh. Ne supozuam se vetm nj prishje e vetvetishme t nj blloku ndodh gjat dits. Ne se kalojne disa dit, mund t prishet edhe kopja e tij. Pra, nj here ne dit duhet t behet nj kontroll i t dy disqeve pr t rregulluar demtimet e mundeshme. Ne ket menyre, do mengjes t dy disqet jane gjithmone identik. Edhe ne se prishen t dy blloqet e nj cifti, prishen gjat nj periudhe disa ditore, t gjithe gabimet rregullohen.

5.5

CLOCKS

Clocks (gjithashtu te quajtur timers kohezues) jane te rendesishme ne punen e nje multi-programuesi per nje sere arsyesh. Ata mirembajne oren e sakte dhe ndalojne nje proes te monopolizoje CPU-ne, perc te tjerave. Clock-u i softwaret mund te marri dhe formen e nje driver te pajisjes, megjithese clock eshte nje bllok pajisjesh, si disku, jo nje karakter pajisjesh, si mausi. Ne seksionet e meposhteme ne do ta analizojme clock ne fillim si nje clock hardware dhe pastaj si clock software.

5.6 CHARACTER-ORIENTED TERMINALS

do kompjuter ka t paktn nj tastier dhe nj ekran (monitor ose ekran t shesht) qe prdoren pr t komunikuar me t. Megjithat, tastiera dhe ekrani ne nj kompjuter personal jane paisje teknikisiht t ndara, t cilat punojne se bashku. Ne mainframe, ka shume prdoruesa t ndryshem ne distance t cilt prdorin paisje me nj tastier dhe nj ekran t ngjitur ne t. Keto paisje historikishte jane quajtur terminale. Ne do t prdorim ket term edhe kur t diskutojme per kompjuterat personal.

Terminalet i kemi ne shume forma. Tre nga format qe i shohim me shpesh ne praktik jane: 1. Terminale t jashtm me nderfaqe seriale RS-232 t prdorur ne mainframe. 2. Ekran t kompjuterave personal me GUI. 3. Terminale rrjeti. Ne seksionin pasardhes do t prshkruajme secilin nga keta tipe me rradhe.

5.6.1 RS-232 Terminal Hardware Terminalet RS-232 jane paisje hardware t cilat prmbajne tastieren dhe ekranin, t cilat komunikojne me nj nderfaqe seriale, nj bit ne nj cast kohe (shiko Fig.5-34). Keto terminale prdori konektor me 9 ose 25 pin, nga t cilt nj pin prdoret pr t transmetuar t dhenat, nj pin sht pr t marre t dhenat dhe nj tjetr sht toka. Pinet e tjera jane pr t kontrolluar funksionet e ndryshme, shumica e tyre nuk prdoret. Linjat, ne t cilat karakteret dergojn nj bit ne nj cast kohe quhen linja seriale. T gjithe modemat prdorin ket nderfaqe. Ne UNIX linjat seriale kane emra si /dev/tty 1 dhe /dev/tty 2. Ne Windows ato kane emrat COM 1 DHE COM 2. Pr t derguar nj karakter ne nj terminal RS-232 ose modem neprmjet nj linje seriale, kompjuterit i duhet t transmetoj nj bit ne nj cast kohe, me nj bit ne fillim si prefix i ndjekur nga nj ose dy bit ndalimi qe caktone kufijt e karakterit. Nj bit pariteti mund t vendoset duke paraprire bitin e ndalimit, gjithesesi kjo kerkohet vetm ne komunkimet ne sistemet mainframe.

Terminalet RS-232 jane akoma shume t prdorshme ne botn e mainframe-eve t cilat bejne t mundur komunikimin me user-at ne distance duke prdorur modem-at ose nj linj telefonike. Keto gjejne prdorim ne agjensit e fluturimit, ne sistemet bankare dhe ne industri t ndryshme. Edhe kur ato zevendesohen nga kompjutera personal, PC zakonisht e emulojne terminalin e vjetr RS-232 qe t shmangin ndryshimet ne softwaret e mainframe-it.

Keto terminale prdoren pr t dominuar botn e minikompjuterave. Nj arritje e madhe e software-ve qe prdoren ne sistemet e tilla, bazohen ne keto terminale. Pr shembull t gjithe sistemet e UNIX i suportojne keto paisje. Gjithesesi, akoma me e rendesishme, shume sisteme UNIX koherent t japin mundesin e krijimit t nj dritareje, e cila prmban linja me numra t nj teksti. Shume programuesa punojne ne text mode ne dritare t tilla si ne ndonj kompjuetr personal, ose ne workstation. Keto dritare zakonisht stimulojne disa terminale RS-232 dhe keshtu qe ato kane nj prdorim sa me t gjere t software-it baze t shkruajtur pr ket terminal. Tastiera dhe softaware i terminalit pr ket emulim terminali sht njsoj si te terminali real. Meqene se emulatoret e terminaleve jane ne prdorim t gjere, software sht akoma I rendesishem, keshtu qe do t prshkruajme ne dy seksionet e meposhtme. RS-232 sht character oriented. Me ket kuptojme qe ekrani ose dritarja tregojne nj numer t linjave t nj teksti, secila ne nj mase maksimale. Nj prmase normale sht 25 linja me 80 karaktere secila. Ndone se disa karaktere jane ndonjhere mbshtets, keto terminale jane tekste ne parim. Meqene se kompjuteri dhe terminali punojne me t gjithe karakteret duke komunikuar ne menyre seriale me nj bit ne nj moment kohe, chipet jane zhvilluar ne menyre t tille qe t bejne konvertimin nga karakter ne serial dhe anasjelltas. Ato quhen UART-s (Universal Asynchronous Receiever Transmitters). Ato jane t lidhura me kompjuterin neprmjet nderfaqes RS-232 me busin t treguar si ne Fig. 5-34. Ne shume kompjutera, nj ose shume porta seriale jane t ndertuara brenda bordit prind. Pr t treguar nj karakter, driverat e terminalit e shkruajne karakterin ne kartn e nderfaqes ku me pas bufferohet dhe nxirret jasht linjs seriale me nga nj bit ne nj cast kohe nga UART. Pr shembull, pr nj modem analog qe operon me 56,000 bps, do ti duhen 179 sec pr t derguar nj karakter. Si rezultat i ketij rate t vogel transmetimi, driveri zakonisht nxjerr nj karakter ne kartn RS-232 dhe bllokon, duke pritur interruptin e gjeneruar nga nderfaqja, kur karakteri sht transmetuar dhe UART sht gati pr t pritur nj karakter tjetr. UART mund t pres dhe t dergoj karaktere njkohesisht. Nj interrupt gjenerohet kur merret nj karakter dhe zakonisht nj numer i vogel I karaktereve ne hyrje mund t bufferohet. Driveri I terminalit duhet t kontrolloj nj regjistr kur merret nj interrupt qe t prcaktoj shkakun e interruptit. Disa karta t nderfaqes kane nj CPU dhe nj memorie dhe mund t prballojne shume linja, duke marre peshen e paisjeve I/O nga CPU qendrore. Terminalet RS-232 mund t nendahen ne tre kategori. Me t thjeshtt jane terminalet hardcopy. Karakteret e shtypur ne tastier transmetohen direkt ne kompjuter. Karakteret e derguar nga kompjuteri printohen ne letr. Terminalet CRT punojne ne t njjtn menyre, vetm ne vend t letres kane nj ekran. Keto zakonisht quhen glass ttys sepse nga ana funksionale jane njsoj si hardcopy ttys. (Termi tty sht shkurtim I Teletype, nj kompani e cila ishte pionere ne bisnesin e terminaleve kompjuterik: tty tregon do terminal).

Terminalet CRT Inteligjent jane ne fakt kompjutera t specializuar ne miniatur. Ato kane nj CPU dhe nj memorie, dhe prmbajne software, zakonisht ne ROM. Duke I pare nga ana e sistemit operativ, ndryshimi kryesor midis glass tty dhe nj terminali Inteligjent sht se ky I fundit I kalon disa sekuenca. Pr shembull, duke derguar karakteret ESC ne ASCII, duke I pasuar me karaktere t ndryshme, mund t ndodh qe kursori t leviz ne do pozicion t ekranit. Terminalet Inteligjent jane t vetmet qe prdoren ne sistemet mainframe dhe mund t emulohen nga sisteme t ndryshme operative. Me softwaret e tyre do t merremi me posht.

5.6.2

Input software

Ekrani dhe tastiera jane paisje t pavarura nga njra tjetra dhe prandaj do ti trajtojme ne menyre t ndare. Ato nuk jane tamam t pavarura nga njra tjetra pasi kur shruajme nj fjale ne tastier ajo na shfaqet ne ekran. Puna kryesore e driver-it t tastieres sht qe t mbledh inputet nga tastiera dhe ti dergoj ato t programet user kur t lexohen nga terminali. Dy filozofi t mundshme mund ti prshtaten driver-it. E para, qe puna e driverit sht thjesht t marri inputet dhe ti dergoj ne nj nivel me t lart pa I prpunuar. Nj program qe lexon terminalin merr nj sekuenc t paprpunuar ne kodin ASCII. Kjo filozofi sht shume e prshtatshme pr nevojat e ekraneve t sofistikuar si emacs, e cila e lejon prdoruesin t lidhet me nj aksion arbitrar me do karakter ose me sekuenc karakteresh. N qoft se prdoruesi shtyp dste ne vend t date, dhe me pas e korrigjon gabimin duke shtypur tre here backcpace dhe ate, programi I prdoruesit do t jape t gjithe kodet 11 ASCII si me posht:

dste ate CR Jo t gjithe programet duan kaq shume detaje. Zakonisht ato duan inputin e sakt dhe jo sekuencen se si sht proceduar. Kjo verejte na con ne filozofin e dyt: driveri e prballon t gjithe montimin intraline, dhe vetem sa dergon linjat korrekte programeve ne prdorim. Filozofia e pare sht character oriented; ndersa e dyta sht line oriented. I referohen raw mode dhe cooked mode, respektivisht. Standartet POSIX prdorin canonical mode pr t prshkruar line-oriented. Noncanonial mode sht ekuivalente me raw mode, megjithese shume detaje t sjelljes se terminaleve mund t ndryshohen. Sistemet kompatible POSIX japin librari funksionesh t ndryshme t cilat suportojne selektimin dhe ndryshimin e shume aspekteve t konfigurimit t terminalit. Puna e pare e driverit t tastieres sht t mbledhi karakteret. N qoft se do shtypje e celsit shkakton interrupt, driveri mund ta marre karakterin gjat interruptit. N qoft se interruptet kthehen ne mesazhe nga niveli I ulet I software-it, sht e mundur qe t

vendosim karakteret e reja ne mesazh. Ato vendosen ne nj buffer t vogel t memories dhe mesazhi prdoret pr ti thene driverit qe dicka erdhi. N qoft se terminali sht ne canonical (cooked) mode, karakteret duhet t ruhen derisa nj linj e tre t akumulohet, sepse prdoruesi me pas mund t vendos t fshij nj pjese t tij. Edhe ne se terminali sht ne raw mode, programi mund t mos ket kerkuar akoma input prandaj duhet qe karakteret t bufferohen. Dy rruget e bufferimit t karaktereve jane t thjeshta. Ne t paren, driveri prmban nj grup me buffera, ku secili buffer ka 10 karaktere. Ngjitur mbas do terminali jepet edhe struktura e t dhenave, e clia prmban midis t tjerash nj pointer ne grupin e bufferave pr inputet t mbledhura nga terminali. Sa me shume karaktere t shtypen, aq me shume buffera do t kerkohen, t cilat do t bashkohen me grupin e bufferave. Kur karakteret t kalojne pr te programi ne prdorim, bufferat do t kthehen prseri t grupi I bufferave. Rruga e dyt sht qe bufferimi t behet direkt nga terminali I struktures se t dhenave pa qene nevoja e nj grupi bufferash. Meqene se pr prdoruesin sht bere e zakonshme qe prvec disa komandave t cilat kerkojne kohen e vet edhe keto, t shkruaj dhe disa linja t tjera prbri tyre, dhe pr t qene I sigurt driveri alocon rreth 200 karaktere pr terminal. Ne nj sistem large-scale timesharing me 100 terminale, t alokosh 20K pr do here sht nj makth I vertet, prandaj nj hapesire prej 5K do t ishte mese e mjaftueshme. Nga ana tjetr, nj buffer I dedikuar pr do terminal e bn driverin me t thjesht dhe prandaj preferohet kjo menyre ne kompjuterat personal me nj tastier t vetme. Fig.5-35 tregon ndryshimin midis ketyre dy menyrave. Megjithese tastiera dhe ekrani jane dy paisje t ndara nga njra tjetra, shume prdoruesa jane mesuar t shikojne se ajo cka shkruajne ne tastier t shfaqet ne ekran. Disa terminale (t vjetr) shfaqin automatikisht at cfare shtypet ne tastier, gje qe limiton fleksibilitetin e editoreve t sofistikuar dhe programeve t ndryshme. Fatmiresisht me terminalet e sotm asgje nuk shfaqet automatikisht kur shtypet nj celes. sht e gjitha ne dore t software-it ne kompjuter pr t shfaqur at qe do. Ky proes quhet echoing.

Echoing sht e komplikuar ne faktin qe programi mund t jet duke shkruajtur ne ekran kur prdoruesi t jet duke shtypur. Deri pak kohesh, driverat e tastieres i duhej t gjenin vet se ku t vendosnin inputet e reja pa i mbishkruajtur nga programi output. Echoing komplikohet gjithashtu kur me shume se 80 karaktere duhet t tregohen ne ekran me nj linj me 80 karaktere. Duke u varur nga aplikacionet, t hedhurit ne linjn tjetr mund t jet e prshtatshme. Disa drivera nuk i njohin karakteret e tjera mbas karakterit t 80-t. Nj tjetr problem sht edhe tab handling. sht pune e driverit t vendos se ku sht vendosur kursori, duke mbledhur ne llogarin e tij outputet nga programi dhe outputet nga echoing dhe t vendosi numrin e duhur t hapesires pr tu pasqyruar. Tani vijme ne problemin e ekuivalences se paisjeve. Llogjikisht ne fund t nj linje t nj teksti, dikush kerkon nj transport mbrapsht, pr t levizur kursorin mbrapsht per shembull pr t rreshti I pare dhe nj linefeed pr t shkuar te rreshti tjetr. sht pune e driverit pr t konvertuar cfare do lloj gjeje qe vjen ne format standart t prdorur nga sitemi operativ. Ne se forma standarte sht vetm pr t ruajtur nj linefeed, athere mbetja kthehet ne nj linefeed. N qoft se formati I brendshem duhet qe ti ruaj t dyja, athere driveri duhet t gjeneroj nj linefeed ku do t kete nj mbetje dhe nj mbetje qe do t mbaj linefeed. Terminali mund ti kerkoj t dyja, linefeed dhe mbetjen pr ti pasqyruar qe t marri updaten-in e ekranit ashtu sic duhet. Meqene se nj kompjuter I madh mund t ket terminale t ndryshme t lidhur me t, sht pune e driver-it t tastieres qe t konvertoj mbetjet e ndryshme dhe kombinimet linefeed ne standartet e brendshme dhe t caktoj qe do pasqyrim t kryhet ne menyre t drejt.

Kur operohet me canonical mode, nj numer I karaktereve ne hyrje kane nj kuptim special. Fig.5-36 tregon t gjitha kuptimet speciale t kerkuar nga POSIX. Deafult-et jane karaktere kontrolli t cilat nuk duhet t krijojne konflikt me textet ose me kodet t prdorura nga programi, por t gjitha, prvec dy t fundit mund t ndryshohen nen kontrollin e programit.

Karakteret ERASE lejojne prdoruesin qe t nxjerr t gjithe karakteret sic shkruhen. sht zakonisht backspace (CTRL-H). Ajo nuk i shtohet rradhes se karaktereve por prape arrin t nxjerr nga rradha karakterin paraardhes. Ajo duhet t pasqyrohet si nj sekuenc me tre karaktere, backspace, space dhe backspace ne menyre qe t levizi karakterin paraardhes nga ekrani. Ne se karakteri paraardhes ishte nj tab, fshirja e tij varet se si sht proceduar pr shtypjen e tij. N qoft se vet tab sht ruajtur ne nj rradhe input, ai mund t levize dhe e gjithe linja mund t dale prseri. Ajo nuk mund t fshij nj mbetje dhe t kthehet mbrapa pr shembull, ne linjn paraardhese. Kur prdoruesi shikon nj gabim ne fillim t nj rreshti qe po shkruhet, ngadonjehere sht me e prshtatshme ta fshij t gjithe rreshtin dhe ta filloj nga e para. Karakteri KILL fshin nj linje komplet. Shume sisteme e zhdukin linjn e fshire nga ekrani por disa e pasqyrojne at, plus mbetjet dhe linefeed sepse disa prdoruesa kane deshire t shikojne linjn e vjetr. Dhe me ERASE zakonisht nuk sht e mundur t kthehesh me mbrapa sesa linja aktuale. Kur nj bllok karakteresh vritet, pr driverin nuk mund t jet problem qe ta kthej bufferin ne grup, ne qofte se ai po prdoret. Shpesh here karakteret ERASE ose KILL mund t futen si t dhena normale. Karateret LNEXT sherbejne si karaktere escape. Ne UNIX CTRL-V sht default. Si nj shembull,

sistemet e vjetra zakonisht prdorin shenjn @ pr komanden KILL, por interneti e prdor ket shenje pr tju referuar nj adrese si linda@cs.washington.edu . Kush sht mesuar t prdor shenjat e vjetra prshembull @ ne vend t KILL, pr tju referuar nj adrese interneti do ti duhet qe karakterin @ ta nxjerr nga komanda CTRL-V @. CTRL-V mund t futet vet nga komanda CTRL-V CTRL-V. Karakteret LNEXT nuk futen ne rradhen e karaktereve. Pr ti lejuar prdoruesit qe t ndalojne nj pamje t figures, kodet e kontrollit e ngrijne ekranin dhe me pas rinisin me vone. Ne UNIX keto jane TOP, (CTRL-S) dhe START, (CTRL-Q) respektivisht. Ato nuk ruhen, por riprdoren pr t futur dhe pastruar nj flamur ne terminalin e struktures se t dhenave. Pr do prpjekje t outputit, flamuri sht i kontrolluar. N qoft se sht i caktuar nuk ndodh asnj output. Zakonisht sht e nevojshme qe t vrasesh nj program qe po ekzekutohet. Karekteret INTR (DEL) dhe QUIT (CTRL-\) prdoren pr ket qellim. Ne UNIX, DEL i dergo nj sinjal SIGNT t gjithe proeseve t startuara nga terminali. Implementimi I DEL mund t jet me pasoja. Pjesa me e veshtire sht marrja e informacionit nga driveri pr te pjesa e sistemit qe prmban sinjalet, t cilat mbas gjithe kesaj nuk kane kerkuar pr kt informacion. Nj karakter tjetr special sht EOF (CTRL-D), I cili ne UNIX shkakton nj kerkes pr lexim pr terminalin I cili sht I gatshem pr bufferin, edhe pse bufferi mund t jet bosh. Shkrimi I CTRL-D ne fillim t nj linje shkakton qe programi t marri ne lexim prej 0 byte I cili interpretohet si end-of-file

5.6.3 Output Software

Outputi sht me I thjesht se inputi. Ne pjesen me t madhe, kompjuteri dergon karaktere pr te terminali dhe ato shfaqen atje. Zakonisht, nj bllok karakteresh, pr shembull nj linj shkruhet ne terminal ne nj thirrje t sistemit. Metoda qe prdoret me shpesh ne terminalet RS-232 sht ajo me buffera output t shoqeruar ne do terminal. Bufferat mund t vijne nga i njjti grup si buffera input, ose mund t jene t dedikuar. Kur nj program shkruan ne terminal, outputi sht I pari qe kopjoihet ne buffer. Ne menyre t ngjashme dhe outputi I pasqyrimit kopjohet ne buffer. Pasi t gjithe outputet kopjohen ne buffer, karakteri I pare sht output dhe driveri e mbaron punen e tij. Kur vjen interrupti, karakteri tjetr sht output, dhe keshtu me rradh. Editoret e ekranit dhe shume programe t tjere t sofistikuar kane nevoje t jene t gatshem pr t update-uar skenen ne shume menyra komplekse duke zevendesuar nj linj ne mes t ekranit. Pr t bere ket, shume terminale kane nj seri komandash pr t levizur kursorin, pr t futur dhe pr t fshire karakteret, etj. Keto komanda zakonisht quhen escape sequence. Ne kohet e zhvillimit t terminaleve RS-232, kishte shume tipe terminalesh secili me sekuencen escape t tij. Pr rrjedhoje, ishte e veshtire pr t shkruajtur software qe t punonin lehtsisht ne keto terminale.

Nj zgjidhje e cila u prezantua ne Berkeley UNIX, ishte nj terminal data base i quajtur termcap. Kjo paket software prmbante nj numer t aksioneve baze, si pr shembull levizjen e kursorit ne (rradhe, rreshta). Pr t levizur kursorin ne nj pozicion cfaredo, nj editor do t prdor nj escape sequence e cila me pas konvertohej ne escape sequence aktuale pr terminalin ne t cilin do t shkruhej. Ne ket menyre editori punonte ne do terminal. Industria pa se ishte e nevojshme standartizimi i escape sequnce, keshtu qe u zhvillua nj standart ANSI. Disa nga keto vlera jane t treguara ne Fig. 5-37. Konsideroni se si kjo escape sequence mund t prdoret nga nj editor texti. Supozoni se prdoruesi prdor nj komand ku I thot editorit t fshij t gjithe linjn 3 dhe t mbylli hapesiren midis linjs 2 dhe 4. Editori do ti dergont ket escape sequence neprmjet linjs seriale terminalit:

ESC [3;1 H ESC [ 0 K ESC [ 1 M

Kjo komand leviz kursorin ne filim t linjs 3, fshin t gjithe linjn dhe me pas fshin linjn boshe qe sapo u krijua, duke sjell qe t gjitha t nisin nga linja 5, dhe cfare ishte linja 4 kthehet ne linjn 3, cfare ishte linja 5 behet linja 4 dhe keshtu me rradh. Escape sequence mund t prdoren pr t shtuar texte ne mes t ekranit. Fjalet mund t shtohen ose mund t hiqen ne menyra t ngjashme.

5.7

Nderfaqja Grafike e Prdoruesit

PC-t mund t prdorin nderfaqe t bazuara mbi karakteret (germat). Ne fakt, prej vitesh MS-DOS-i, i cili sht i bazuar mbi karakteret, ka dominuar skenen. Ne ditt e sotme shume PC prdorin GUI Graphical User Interface. GUI u shpik nga Douglas Engelbart dhe nga grupi i tij kerkimor ne Institutin e Kerkimeve t Stanford. Ne at kohe u kopjua dhe nga kerkuesit ne Xerox PARC. Nj dit, Steve Jobs, bashke-themeluesi i APPLE, po shetiste ne PARC dhe pa nj GUI ne nj Computer Xerox. Kjo i dha atij idene pr nj kompjuter t ri, i cili u be me vone Apple Lisa. Lisa ishte shume i shtrenjt dhe nj deshtim komercial, por pasardhesi i tij Macintosh-i, ishte nj sukses gjigand. Macintosh ishte inspirimi pr Microsoft Windows dhe sistemet e tjere qe bazoheshin t GUI (nderfaqja grafike e prdoruesit). GUI ka 4 element esenciale, t paraqitura nga karakteret WIMP (Windows, Icon, Menu, Pointing device). Windows (dritaret), jane blloqe drejtkendore t ekranit qe prdoren pr ekzekutimin e programit. Ikonat jane simbole t vogla, mbi t cilat mund t klikohet duke shkaktuar nj veprim. Menu-t jane lista me veprime nga t cilat mund t zgjidhet njra nga to. Pointing Device (pajisja shenjuese), sht mouse, trackball (sfera e gjurmave), ose pajisjet e tjera hardware qe prdoren pr t zhvendosur krusorin nepr ekran, pr t selektuar items.

Tastiera e Personal Computer, Mouse, dhe Display Hardware PC moderne sot kane gjithmone nj tastiere dhe nj bit-oriented memory mapped display. Keto komponent jane nj pjese integrale e vet kompjuterit. Tastiera dhe ekrani jane plotsisht t ndara, ku secila ka driverin e saj vetjak. Tastiera mund t nderfaqesohet neprmjet nj porte seriale, nj port paralele, ose nj port USB. Ne do veprim kyc qe kryet, CPU-ja nderpritet (interrupted) dhe driveri i tastieres extracton karakterin e shtypur duke lexuar nj port I/O. do gje tjetr ndodh ne software, kryesisht ne driverin e tastieres. Ne nj pentium, tastiera prmban nj mikroproesor t futur (embedded) i cili komunikon neprmjet nj porte seriale t specializuar me nj controller chip qe ndodhet ne parentboard. Nj interrupt gjenerohet kur shtypet nj tast, dhe gjithashtu liriohet ky tast. Vec kesaj, ajo cfare hardware i tastieres ofron sht numri i tastit (key number), dhe jo kodi ASCII. Kur shtypet A-ja, kodi i tastit (30) vendoset ne nj regjistr I/O. sht ne doren e driverit t prcaktohet ne se: sht kapitale (e madhe), (e vogel), CTRL-A, ALTA, CRTL-ALT-A, apo ndonj kombinim i tille. Meqene se driveri mund t tregoje se cili tast sht shtypur, por jo cili sht leshuar (shembulli Shift), ai ka informacion t mjaftueshem pr t kryer detyren. Pr shembull, Sekuenca e tasteve: DEPRESS SHIFT, DEPRESS A, RELEASE A, RELEASE SHIFT Tregon nj germe kapitale A. Gjithashtu DEPRESS SHIFT, DEPRESS A, RELEASE SHIFT, RELEASE A Tregon germe kapitale A. Edhe pse kjo nderfaqe e tastieres vendos gjithe ngarkesen tek software, ajo sht shume flexible. Pr shembull, programet e prdoruesit mund t kene interes t dine ne se nj shifer sht shtypur nga rreshti i siprm i tastieres apo nga numer pad ne t djatht t tastieres. Ne princip driveri mund ta ofroje ket informacion. Shume PC kane nj mouse, ose shpesh here nj trackball, i cili sht nj mouse i shtrire me kurriz. Lloji me i zakonshem i mouse-it ka nj sfere gome brenda tij, qe del prpara neprmjet nj vrime ne fund dhe rrotullohet ndersa mouse-i leviz mbi nj siprfaqe t ashpr. Ndersa sfera rrotullohet, ajo ferkohet me rollerat e ferkimit qe jane vendosur ne boshtet ortogonale. Levizja lindje-prendim shkakton boshtin paralel me aksin Y t rrotullohet, levizja veri-jug shkakton boshtin paralel me aksin X t rrotullohet. do zhvendojs e mouse-it ose shtypje, ose lirmi i butonave sa do minimale t jet, bn qe kompjuterit ti cohet gjithmone nj mesazh. Distanca minimale e levizjes sht 0.1 mm (ajo mund t prcaktohet tek software). Disa njerez e quajne ket njsi - mickey. Mouse-t mund t kene 1, 2 ose 3 butona ne varesi t vleresimit qe bejne disenjatoret ne se prdoruesit jane t aft t mbajne dot gjurmet e 1 apo me shume butonave. Mesazhi qe shkon t kompjuteri ka 3 items, X, Y, butonat. Item-i i pare sht ndryshimi i pozicionit X qe nga mesazhi i fundit. Me pas, vjen ndryshimi i Y qe nga mesazhi i fundit. Se fundmi prfshihet statusi/gjendja e butonit. Formati i mesazhit varet nga sistemi dhe nga numri i butonave qe ka mouse-i. Zakonisht, ai merr 3 byte. Vini re qe mouse-i tregon vetm ndryshimin e pozicionit dhe jo pozicionin absolut t tij. Ne qoft se mouse-i ngrihet sipr dhe ulet posht me kujdes pa e levizur sferen, ne ket rast kompjuterit nuk do ti cohet mesazh.

Disa GUI dallojne single click nga dopjo click t nj mouse-i. Ne qoftse dy click jane shume afer ne hapesire (mickeys) dhe ne kohe (milisekonda), athere sinjalizohet nj dopjo click. Maksimumi i shume afer sht ne varesi t software-it, me t dyja parametrat qe mund ti caktoje vet prdoruesi. Le t kthehmi t Display Hardware; Pajisjet e shfaqjes ne ekran (Display Devices), mund t ndahen ne dy kategori. Pajisjet me Vector Graphics (Grafike Vektoriale) t cilat mund t pranojne dhe t nxjerrin jasht comanda si pr shembull, vizatimi i pikave, i vijave, i figurave gjeometrike dhe i teksteve. Ne kontrast, pajisjet me Raster Graphics e tregojne zonen e daljes, si nj rrjet me pika t quajtura pixels, secili nga to ka nj vlere t shkalles gri (gray scale value), ose nj ngjyre. Ne fillimet e kompjuterave, pajisjet me vector graphics ishin t zakonshme, por tani ploterat jane t vetmet pajisje me vector graphics. do gje tjetr prdor raster graphics, shpesh e quajtur bitmap graphics. Diplay me raster graphics jane t implementuara nga nj pajisje e quajtrur graphic adapter. Nj graphic adapter prmban nj memorie speciale t quajtur video RAM, e cila formon pjesen e hapesires se adresave t kompjuterit dhe adresohet nga CPU-ja ne t njjtn menyre si pjesa tjetr e memories (shih Fig. 5-38).

Figure 5-38 Ne display me memomy mapped, driver shkruan ne menyre direkt tek video RAMi i displayt Pamja e ekranit ruhet ketu, ose ne menyren karakter (character mode) ose ne menyren bit (bit mode). Ne menyren karakter (character mode), do byte (ose 2 byte) i video RAM-it prmban nj karakter pr t shfaqur ne ekran. Ne menyre bitmap (bitmap mode), do pixel ne ekran riprezantohet me vet ne video RAM-in, me 1bit/pixel pr llojin bardh e zi t ekranit, dhe 24bit/pixel ose me shume pr ekrane me cilesi ngjyrash me t lart. Gjithashtu video controller sht nj chip qe bn pjese ne graphic adapter. Ky chip nxjerr karakteret ose bitet jasht video RAM dhe gjeneron nj video sinjal i cili prdoret pr t drejtuar (drive) monitorin. Nj monitor gjeneron nj tufe elektronesh e cila skanon horizontalisht ekranin, duke lyer (paint) me linja (vija) ne t. Zakonisht nj ekran ka nj 480 1024 linja (vija) nga sipr deri posht, dhe me 640 1200 pixel pr linj. Sinjali i Video Controllerit modulon tufen e elektroneve, duke prcaktuar ne se nj pixel i dhene sht i ndritshem apo i erret. Monitoret me ngjyra kane 3 tufa (beam), pr t kuqen (Red), pr t gjelbertn (Green), pr blune(Blu); (RGB), t cilat modulohen ne menyre t pavarur. Ekranet e shesht (Flat) prdorin pixelat ne 3 ngjyra, por menyra se si punojne keto ekrane shkon prtej qellimit t ketij libri. Video Controllerat kane 2 menyra: Character Mode (qe prdoret pr tekset e zakonshme), dhe Bit Mode (qe prdoret pr do gje tjetr). Ne character mode, kontrolleri mund t prshtas do karakter ne nj kuti prej 9 pixel t gjere dhe 14 pixel t lart (duke prfshire dhe hapesirat midis karaktereve) dhe t ket 25 linja me 80 karaktere. Ekranit i duhet

athere t ket 350 linja skanimi me 720 pixel pr secilen linj. Secila nga keto frame rivizatohet 60 100 here ne sekond, ne menyre qe t shmangen dridhjet. Pr t shfaqur textin ne ekran, video controlleri mund t trheqi/kapi (fetch) 80 karakteret e para nga video RAM-i, dhe t gjeneroje 14 linjat vijuese dhe keshtu vazhdon. Ne menyre alternative, ai mund t trheqi/kapi do karakter, nj here pr do linj skanimi pr t eleminuar nevojen e t paturit nj buffer ne controller. 9 pr 14 bit pattern pr karakteret mbahet ne ROM, t cilin e prdor video controlleri. (RAM mund t prdoret gjithashtu pr support/ndihmuar fontet). ROM-i adresohet me 12 bit adresa, 8 bits nga kodi i karakterit dhe 4 bits pr t specifikuar linjn e skanimit. 8 bitet ne do byte t ROM kontrollojne 8 pixels; pixeli i 9-t qe ndodhet midis karaktereve sht gjithmone blank (bosh). Keshtu 14 x 80 = 1120 referenca memorjeje pr video RAM nevojiten pr linjn e teksit ne nj ekran. I njjti numer referencash behen pr gjeneratorin e karaktereve ROM. Ne Fig. 5-39(a) ne shikojme nj porcion (pjese) t video RAM-it pr nj ekran i cili punon ne character mode. do karakter ne ekranin e Fig. 5-39 (b) ze 2 bytes ne RAM. Karakteri i rendit t poshtm (low order) sht kodi ASCII pr shfaqjen e atij karakteri. Karakteri i rendit t lart (high order) sht nj byte atributi, i cili prdoret pr t specifikuar ngjyren, kthimin mbrapa t videos, blinking, etj... Nj ekran me (25 me 80) karaktere i nevojitet 4000 bytes t video RAM ne ket mode.

Figura 5-39. (a) Nj imazh i video RAM-it pr nj ekran monokrom t thjesht ne character mode. (b) Ekrani korrespondues. -et jane bytet e atributeve.

Punimi ne bitmap mode prdor t njjtin princip, prvec se do pixel ne ekran kontrollohet individualisht dhe paraqitet individualisht neprmjet 1 ose disa bits ne video RAM. Ne konfigurimin me t thjesht pr nj monitor monokrom, do pixel i ekranit ka nj bit korrespondues ne video RAM. Ne ekstremin tjetr, do pixel i ekranit paraqitet neprmjet nj numri 24 bit ne video RAM, me 8 bit pr secilen nga intensitetet Red, Green, Blue. Raprezantimi i RGB-se prdoret sepse e kuqja, e gjelberta dhe bluja jane ngjyra primare shtese, nga t cilat mund t prftohet do lloj ngjyre vetm duke mbledhur intensitetet e ndryshme t ketyre ngjyrave.

Madhesite e ekraneve mund t variojne, nga 640480(VGA), ne 800600(SVGA), 1024768 (XGA), 12801024, dhe 16001200. Prvec 12801024, t gjithe t tjerat jane raport 4:3, ky raport prshtatet me raportin e NTSC television dhe jep pixel katrore. 12801024 duhej t kishte qene 1280960, por joshja e 1024 ishte shume e madhe pr ti rezistuar, edhe pse ajo shtremberon lehtsisht pixelat dhe bn me t veshtire shkallezimet ne madhesite e tjera. Si per shembull, nj ekran me ngjyra 768 x 1024 me 24 bits/pixel kerkon 2.25 MB RAM thjesht sa mban imazhin. N qoft se full screen rifreskohet (refresh) 75 here/sec, video RAM-i duhe t jet i aft t dergoje te dhena ne menyre t vazhdueshme ne 169 MB/sec. Pr t shmangur menaxhimin e imazheve t ekraneve kaq t medha, disa sisteme jane t afta t balancojne rezolucionin e ngjyres kundrejt madhesise se imazhit. Ne skeme me t thjesht, do pixel paraqitet neprmjet nj numri 8 bit. Kjo vlere sht nj indeks ne nj tabele me 256 entries, ku secili entry mban nj vlere 24 bit t R,G, B. Kjo tabele quhet color palette dhe shpesh ruhet ne hardware, ajo lejon qe ekrani t mbaje nj numer arbritrar ngjyrash 256 ne do cast. Duke ndryshuar entry 7 ne paletn e ngjyrave, kjo sjell ndryshimin e ngjyres t t gjithe pixelave ne imazh me nj vlere 7. Duke prdorur nj palet ngjyrash me 8 bit pakesohet sasia e hapesires se ngjyrave qe nevojitet pr t ruajtur imazhin e ekranit nga 3 byte/pixel ne 1 byte/pixel. Cmimi qe paguhet sht vrazhdesia ne rezolucionin e ngjyrave. Skema e kompresimit GIF punon me nj palete ngjyrash t tille. sht gjithashtu e mundur t prdoret nj palete ngjyrash me 16 bit/pixel. Ne ket rast paleta e ngjyrave prmban 65,536 entries keshtu qe mund t prdoren njeheresh 65,536. Por kursimi ne hapesire sht me i paket meqene se do pixel tani kerkon 2 bytes ne video RAM. Gjithashtu, n qoft se paleta e ngjyrave mbahet ne hardware (pr t shmangur nj kerkim (lookup) ne do pixel), ai duhet t jet dedikuar pr ruajtjen paletes. Gjithashtu sht e mundur qe t menaxhohen ngjyrat 16 biteshe, duke ruajtur vlerat e RGB si tre numra 5 biteshe, me 1 bit t lene pas (mbrapa) (ose ti jepet t gjelbres 6 bits, meqe syri sht me i ndjeshem ndaj jeshiles sesa t kuqes dhe bluse). Ky sistem sht i njjti me at me 24 bit color, prvec se me me pak hije pr do ngjyre t mundshme.

Software i hyrjes (Input Software) Pasi tastiera e mori karakterin, ajo duhet t filloje ta proesoje (prpunoje) at. Meqe tastiera dergon key numbers, sesa kodet e karaktereve qe prdoren nga aplikacionet, driveri duhet t konvertoje kodet duke prdorur tabelen. Jo t gjitha pajisjet kompatibel e IBM-se prdorin key number standart, keshtu qe n qoft se driveri kerkon t supportoje keto makina, ai duhet t kete map tastiera t ndryshme me tabela t ndryshme. Nj arritje e thjesht sht kompilimi i nj tabele e cila mapon kodet t ofruara nga tastiera dhe kodet ASCII ne driverin e keyboard, por kjo nuk kenaqe prdoruesit e gjuheve t ndryshme nga anglishtja. Tastierat jane t arranzhuara ne menyre t ndryshme ne shtete t ndryshme, dhe bashkesia e karaktereve ASCII nuk sht adeguate as pr pjesen me t madhe t njerezve ne hemisferen e perendimit, ku folesit e Spanjishtes, Portugalishtes dhe Frengjishtes kerkonin, karakteret me shenjat theksit qe nuk prdoren ne Anglisht. Pr tju prgjigjur nevojes pr fleksibilitet ne layout-s e tastieres ne gjuhet e ndryshme, shume sisteme operative ofrojne nj keymap ose code page, e cila ben te

mundur zgjedhjen e mapping midis keyboard codes dhe codes qe i dergohen aplikacionit, dhe ne rast kur sistemi sht i boot-uar tashme ose boot-oet me vone.

Programet e Daljes pr Dritaret (Windows) Softwari i daljes pr GUI-t sht nj teme shume e madhe. Shume libra 1500 faqesh jane shkruar pr nderfaqet grafike t dritare vetem nga (Windows GUI). Ne ket seksion do t shikohen disa koncepte. Pr ta bere diskutimin disi me konkret, ne do t prshkruajme Win32 API, e cila suportohet nga t gjitha versionet 32 biteshe t windowsit. Software i daljes pr GUI-t ka shume detaje t ndryshme. Itemi baze i ekranit sht nj zone drejtkendore e quajtur dritare (window). Pozicioni dhe madhesia e dritares jane t prcaktuara ne menyre unike duke dhene kordinatat (ne pixel) e qosheve t kunderta. Nj dritare mund t mbaje nj title bar, nj menu bar, a tool bar dhe nj horizontal scroll bar (shirit horizontal t levizshem). Nj dritare tipike tregohet ne Fig. 5-40. Vini re qe sistemi kordinativ Windowsit, e vendos origjinin ne skajin e majt t siprm dhe qe shtohet me y duke zbritur posht, e cila sht e ndryshme nga kordinatat Karteziane qe prdoren ne matematike. Kur krijohet nj dritare, parametrat specifikojne ne se dritarja mund t levizet apo ti ndryshohen prmasat, apo t scroll (rreshqase/leviz duke trhequr Thumb ne scroll bar) nga useri. Dritarja kryesore qe prodhohet nga pjesa me e madhe e programeve mund t levizet, ti ndryshohet prmasat apo scroll, dhe kjo gje ka shume pasoja pr menyren se si progamet e Windows-it jane shkruar. Ne vecanti, programet duhet t jene te informuara ne lidhje me ndryshimet e prmasave t dritareve t tyre dhe duhet t jene t prgatitura t ri-vizatojne prmbajtjen e dritares ne do cast t kohes, edhe ne momentin me pak t pritshem.

Figure 5-40. Nj shembull dritarjeje (Window) Si rrjedhoje, programet e Windows jane t orientuara drejt mesazheve (massage oriented). Veprimet e prdoruesit qe prfshijne tastieren dhe mousin, kapen nga dritaret dhe konvertohen ne mesazhe drejt programeve qe zotron dritaren e adresuar. do program ka nj radhe (queue) ne t cilen ndodhen mesazhet qe i dergohen dritares. Loopi kryesor i programit konsiston ne nxjerrjen jasht plotsisht t mesazhit t ardhshem dhe ne proesimin e tij duke thirrur nj procedure t brendeshme pr at tip mesazhi. Ne disa raste, vet Windows mund t therrasin ne menyre direkte keto procedura, duke anashkaluar radhen e mesazheve (message queue). Ky model sht shume i ndryshem nga modeli UNIX i kodit procedurial i cili bn thirrjet e sistemit pr t ndervepruar me sistemin operativ. Pr ta bere me t qart ket model progamimi, do t shohim shembullin e Fig. 5-41. Ketu ne shikojme skeletin e nj progami kryesor pr Windows. Nuk sht i plot dhe nuk bn kapje gabimesh, por ai tregon mjaft detaje pr qellimet tona. Ai fillon duke prfshire nj file header, windows.h, qe prmban disa macro, lloje datash, konstante, prototipe funkionesh dhe informacione t tjera t nevojshme pr progamet Windows. #include <windows.h>

int WINAPI WinMain (HINSTANCE h, HINSTANCE hprev, char *szCmd, int iCmdShow) { WNDCLASS wndclass; /* class object pr ket dritare */ MSG msg; /* mesazhet ardhes ruhen ketu */ HWND hwnd; /* handle (pointer) to the window object */ /* Initialize wndclass */ wndclass.lpfnWndProc = WndProc; /* tregon cila procedure t therritet */ wndclass.lpszClassName = "Program name"; /* Tekst pr title bar */ wndclass.hIcon = Loadlcon(NULL, IDI_APPLICATION); /* ngarko ikonen e programit */ wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); /* ngarko kursorin e mouse */ RegisterClass(&wndclass); /* tregon Windows prreth wndclass */ hwnd = CreateWindow ( ); /* alokon storage pr dritaren */ ShowWindow(hwnd, iCmdShow); /* shfaq dritaren ne ekran */ UpdateWindow(hwnd); /* thuaji dritares t vizatoje vetveten*/ while (GetMessage (&msg, NULL, 0, 0)) { /* merr mesazhin nga rradha queue */ Translatemessage (&msg); /* prkthe mesazhin */ DispatchMessage (&msg); /* dergo mesazhin procedures se duhur */ } return(msg.wParam); } long CALLBACK WndProc (HWND hwnd, UINT message, UINT wParam, long IParam) { /* Deklarimet vihen ketu. */ switch (message) { case WM_CREATE: ; return ; /* krijo dritaren */ case WM_PAINT: ; return ; /* ri-vizato prmbajtjen e dritares*/ case WM_DESTROY: : return ; /* shkaterro dritaren */ } return(DefWindowProc(hwnd, message, wParam, lParam)); /* default */ } Figure 5-41. Skeleti i program kryesor Windows. Programi kryesor fillon me nj deklarim duke dhene emrin e tij dhe parametrat. WINAPI macro sht nj instruksion pr kompilatorin qe t prdori nj parametr t caktuar duke kaluar convention dhe nuk do t na shqetsoje me. Parametri i pare, h, sht nj instance handle dhe prdoret pr ta identifikuar programin me pjesen tjetr t sistemit. Win32 sht nj object oriented, qe do t thot qe sistemi prmban objekte (pr shembull

programet, files dhe dritaret) t cilat kane nj gjendje dhe nj kod t asiocuar t quajtur metoda t cilat punojne ne at gjendje. Objektet referohen duke prdorur handles dhe ne ket rast, h-ja identifikon programin. Parametri i dyt shfaqet vetm pr arsyet e backward compability. Por nuk prdoret me tani. Parametri i tret, szCmd sht nj string qe mbaron me zero e cila prmban command line qe nisi programin, edhe n qoft se nuk niset nga command line. Parametri i katrt, iCmdShow, tregon se cfare pjese t ekranit do t okupoje (zeri) dritarja, t gjithe ekranin apo nj pjese t tij apo asnj pjese t tij (vetm taskbar). Ky deklarim ilustron nj convetion qe ka prdorur Microsoft-i, t quajtur Hungarian Notation. Emri sht nj loje fjalesh ne Polish Notation, sistemi postfix u shpik pr riprezantimin e formulave algjebrike duke mos prdorur prparesine ose kllapat. Hungarian notation u shpik nga programuesi Hungarez i Microsoftit, Charles Simonyi, dhe prdorte disa nga karakteret e para t nj identifikatori pr t specifikuar tipin. Germat e lejuara dhe tipet prfshinin c (character), w (word, tani ka kuptimin e nj integer 16 bit pa shenj), i (integer 32 bit me shenj), s (string), sz (string qe prfundon ne fund me byte zero), p (pointer), fn (function), dhe h (handle). Keshtu szCmd sht nj string qe mbaron me zero dhe iCmdShow sht nj integer. Shume programues besojne qe enkodimi i tipit te emrit t variablit ne ket menyre nuk ka shume vlere dhe bn kodin e Windows t veshtire pr tu lexuar. Kjo gje nuk shfaqet ne UNIX. do dritare duhet t ket t asociuar nj class object e cila prcakton vetit e saj. Ne Fig. 5-41, ajo class object sht wndclass. Nj objekt i tipit WNDCLASS ka 10 fusha, 4 nga t cilat jane t inicializuar ne Fig. 5-41. Ne nj program aktual, 6 fushat e tjerat duhen t inicializohet me se miri. Fusha me e rendesishme esthe lpfnWndProc, e cila sht nj pointer i gjat (long 32 bit) i funksionit qe menaxhon (handles) mesazhet qe i drejtohen kesaj dritareje. Fushat e tjera qe inicializohen ketu tregojne cili emer dhe cila ikon do prdoret ne title bar, dhe cili simbol do prdoret pr kursorin e mousit. Mbasi inicializohet wndclass, therritet RegisterClass pr tju kaluar Windows. Ne vecanti pas kesaj thirrjeje, Windows e di cilen procedure t therrase kur ndodhin ngjarje t ndryshme qe nuk shkojne tek radha e mesazheve. Thirrja tjetr, CreateWindow, alokon memorjen pr strukturen e t dhenave t dritares dhe kthen nj handle pr ta referencuar at me vone. Programi bn 2 thirrje t tjera rresht, pr ta vedosur konturin e dritares ne ekran, dhe se fundemi ta mbushi at plotsisht. Ne ket pike ne vijme t loopi kryesor i programit, i cili konsiston ne marrjen e mesazheve, duke bere disa transferime (prkthime) t caktuara, dhe duke ia kaluar mbrapsht Windows ne menyre qe Windows t therrase WndProc pr ta proesuar at. Pr tju prgjigjur pyetjes ne se mund t behej me i thjesht ky menakanizem; po mund t behej, por keshtu sht bere kohe me pare dhe pr shkak t historise ne kemi ngelur me ket. Ne vijim t programit sht procedura WndProc, e cila menaxhon mesazhe t ndryshme t cilat mund ti dergohen dritares. Prdorimi i CALLBACK ketu, si prdorimi i WINAPI sipr, specifikon sekuecen thirrese pr t prdorur parametrat. Parametri i pare sht menaxhimi (handle) i dritares qe prdoret. Parametri i dyt sht tipi i mesazhit. Parametri i tret dhe i katrt mund t prdoren pr t ofruar informacione shtese ne raste nevoje.

Tipet e mesazheve WM_CREATE dhe WM_DESTROY dergohen ne fillim dhe ne fund t programit, respektivisht. Ato i japin programit mundesine, pr shembull i alokimit t memories pr strukturat e t dhenave dhe t kthimit t tyre. Tipi i tret i mesazhit, WM_PAINT, sht nj instruksion pr programin, pr t plotsuar (mbushur) dritaren. Ai nuk thirret vetm kur dritarja sht ne vizatimin e pare, por shpesh edhe gjat ekzekutimit t programit. Ne dallim me sistemet e bazuar mbi tekstet, ne Windows nj program nuk mund pretendohet qe ajo cfare vizatohet ne ekran, t qendroje aty derisa dikush ta heqi at. Dritaret e tjera mund t trhiqen, menu-t mund t hapen, tooltips mund t shfaqen. Windows i tregon nj programi menyren si ai t ri-vizatoje nj dritaren, duke derguar nj mesazh WM_PANIT. Gjithashtu ofrohet informacion se cila pjese e dritares sht mbishkruar, ne rast se sht me leht pr t ri-gjeneruar at pjese t dritares ne vend qe t ri-vizatohet e gjitha. Ka dy menyra qe Windowsi mund ti thot nj programi ne menyre qe ai t kryeje dicka. Menyra e pare sht t postoje nj mesazh ne radhen e tij t mesazheve (message queue). Kjo metode prdoret pr inputet e tastieres, pr inputet e mouse dhe timerat qe kane skaduar. Menyra tjetr, sht dergimi i nj mesazhi dritares, duke involvuar Windowsin t therrasi direkt WndProc. Kjo metode prdoret pr t gjitha ngjarjet e tjera. Meqe Windows lajmerohet kur nj mesazh sht plotsisht i proesuar, ai mund t shmangi nj thirrje t re derisa thirrja e meparshme t mbaroje. Ne ket menyre kushtet e gares menjanohen. Ka edhe tipe t tjera mesazhesh. Pr t menjanuar sjellje t gabuara duhet qe t vije nj mesazh i papritur, gjeja me e mire sht t therritet DefWindowProc ne fund t WndProc pr t lene handlerin t kujdeset pr rastet e tjera. Prmbledhurazi, nj program i Windows zakonisht krijon nj ose disa dritare me nj class object pr seclin nga to. Me do program sht asiocuar nj radhe mesazhesh (mes queue) dhe nj bashkesi mes procedurash menaxhimi (handler). Se fundmi, sjellja e programit drejtohet nga eventet qe vijne, t cilt proesohen nga procedurat e menaxhimit (handler). Ky sht nj model shume i ndryshem i bots sesa pamja proceduriale qe merr UNIX. Vizatimi i tanishem i ekranit menaxhohet nga nj paket me qindra procedura t cilat jane lidhur se bashku pr t formuar GDI (Graphics Device Interface). Ajo mund t menaxhoje tekst dhe do lloj grafike dhe sht e disenjuar qe t jet e pavarur nga platforma dhe device. Prpara se nj program t vizatoje brenda nj dritare, ai ka nevoje t siguroje nj device Context e cila sht nj strukture t dhenash te brendeshme qe prmban vetit e dirtares, si fonti i tanishem, ngjyra e tekstit, ngjyra e background, etj. Shume thirrje t GDI-s prdorin device context edhe pr vizatim, ose pr marrjen/vendojsen e vetive. Menyra t ndryshme ekzistojne pr t siguruar ekzistencn e nj device context. Nj shembull i thjesht i sigurimit dhe i prdorimit sht: hdc = GetDC (hwnd); TextOut (hdc, x, y, psText, iLength); ReleaseDC (hwnd, hdc); Statement i pare merr nj handle pr nj device content, hdc. E dyta prdor device context pr t shkruar nj rresht texti ne ekran, duke specifikuar kordinatat (x,y) ku fillon stringa, nj pointer pr vet stringen dhe gjatsine e saj. Thirrja e tret liron device

context pr t indikuar qe programi po vizaton ne ato momente. Vini re qe hdc sht prdorur ne nj menyre analoge me prshkruesin e file-ve t UNIX. Gjithashtu vini re qe ReleaseDC prmban informacion t teprt (prdorimi i hdc ne menyre unike specifikon nj dritare). Prdorimi i informacionit t teprt qe nuk ka vlere akutale sht e zakonshme ne Windows. Nj tjetr gje interesante sht qe kur hdc-ja sigurohet ne ket menyre, programi mund t shkruaje vetm ne zonen e dritares t klientit dhe jo ne title bar, apo ne pjeset e tjera. Ne brendesi, ne strukturen e t dhenave t device context, mbahet nj zone e levizshme. do vizatim jasht kesaj zone injorohet. Ka nj tjetr menyre pr sigurimin e device context, GetWindowDC, e cila vendos zonen e levizhme ne t gjithe dritaren. Thirrjet e tjera kufizojne zonen e levizeshme ne menyra t ndryshme. Nj karakteristik tjetr e Windows sht patja e thirrjeve t shumfishta t cilat bejne t njjtn gje. Nj trajtim i plot i GDI sht jasht vendit ketu. Pr lexuesit e interesuar, referencat e cituar me sipr ofrojne informacion shtese. Megjithat, disa fjale prreth GDI ia vlen qe ti prmendim pr t treguar rendesine e tij. GDI ka procedura thirrjeje t shumta pr t marre dhe liruar device context, pr t prftuar informacion prreth device context, pr marrjen dhe vendosjen e atributeve t device context (pr shembull ngjyra e background), manipulimi i objecteve GDI, si pr shembull penat, fontet, furcat, ku secila ka atributet e saj. Se fundmi, sigurisht ka nj numer t madh thirrjesh GDI pr t vizatuar ne ekran. Procedurat e vizatimit bien ne 4 kategori: vizatimi i vizave dhe vijave t lakuara, vizatimi i zonave t mbushura, menazhimi i bitmaps, shfaqja e tekstit. Ne pame nj shembull t vizatimit t tekstit me sipr, keshtu le te hedhim nj shikim t shpejt. Thirrja: Rectangle (hdc, xleft, ytop, xright, ybottom); Vizaton nj drejkendesh t mbushur skajet e t cilit jane (xleft, ytop) dhe (xright, ybottom). Pr shembull Rectangle (hdc, 2, 1, 6, 4); Do t vizatoje nj drejtkendesh t treguar ne Fig. 5-42. Trashesia e vijes, ngjyra dhe mbushja e ngjyres merren nga device context. Thirrjet e tjera t GDI jane t ngjashme ne shije.

Figure

5-42.

Bitmap Proceduart GDI jane shembuj t vector graphics. Ato prdoren pr t vendosur tekste dhe figura gjeometrike ne ekran. Keto grafiqe mund t shkallezohen lehtsisht ne ekrane me t medhenj ose me t vegjel (numri i pixels ne ekran sht i njjt). Gjithashtu ato jane relativisht t pavarura nga pajisjet. Nj koleksion thirrjesh t procedurave GDI-se mund t asemblohet ne nj file t vetm qe mund t prshkruaje nj vizatim kompleks. Nj file i tille sht quajtur Windows metafile, dhe sht gjeresisht i prdorur pr t transmetuar vizatime nga nj program i Windows ne nj program tjetr. Keto lloj file kane prapashtesen .wmf. Shume programe t Windows lejojne prdoruesin t kopjoje nj pjese t nj pikture dhe ta vendosi at ne clipboard e Windows-it. Prdoruesi mund t shkoje ne nj program tjetr dhe t ngjisi prmbajtjen e clipboardit ne nj document tjetr. Nj menyre pr ta bere ket sht qe programi i pare ta paraqesi pikturen si nj windows metafile dhe ta vendosi at ne clipboard ne formatin .wmf. Gjithashtu ekzistojne metoda t tjera. Jo t gjitha imazhet qe kompjuterat manipulojne mund t gjenerohen duke prdorur vector graphics. Pr shembull fotot dhe videot nuk i prdorin vector graphics (grafiken vektoriale). Keto items skanohen duke mbivendosur nj rrjet mbi imazhin. Mesatarja e vlerave t ngjyrave t kuqe, jeshile dhe blu ne do kuadrat t kesaj rrjete kampionohen dhe ruhen si vlere e nj pixeli. Nj file i tille quhet bitmap. Windows ofron lehtsira t shumta pr ti manipuluar bitmaps. Nj tjetr prdorim i bitmap sht pr tekste. Nj menyre pr t paraqitur nj karakter, nj stil font sht si nj bitmap i vogel. Shtimi i tekstit ne ekran behet nj ceshtje thjesht levizjeje t bitmaps. Nj menyre e prgjithshme e prdorimit t bitmap sht neprmjet nj procedure t quajtur bitblt. Ajo therritet si me posht: Bitblt (dsthdc, dx, dy, wid, ht, srchdc, sx, sy, rasterop); Ne formen e tij me t thjesht, ajo kopjon nj bitmap nga nj drejtkendesh ne nj dritare, t nj drejtkendeshi ne nj dritare tjetr (ose ne t njjtn). Tre parametrat e pare specifikojne dritaren e destincaionit dhe pozicionin. Me pas vijne gjeresia dhe gjatsia. Me pas sht dritarja burim dhe pozicioni. Vereni qe do dritare ka sistemin e vet t koordinatave, me (0, 0) ne skajin e siprm-majtas t dritares. Parametri i fundit do t prshkruhet si me posht: Efekti i BitBlt (hdc2, 1, 2, 5, 7, hdc1, 2, 2, SRCCOPY);

sht treguar ne Fig. 5-43. Vini re me kujdes qe zona e plot 5x7 e shkronjs A sht kopjuar duke prfshire dhe ngjyren e sfondit.

Figura 5-43. Kopjimi i bitmaps duke prdorur BitBlt. (a) Me Pare. (b) Me pas. BitBl mund t beje me shume sesa thjesht kopjimin e bitmaps. Parametri i fundit jep mundesine per t kryer veprime Boolean, pr t kombinuar bitmapin burim me at destinacion. Pr shembull, burimi mund t jete Ored, pr tu shkrire me pas ne destinacionin. Gjithashtu mund t jet EKSKLUZIVE ORed ne t, e cila ruan karakteristikat si t burimit ashtu dhe t destinacionit. Nj nder problemet e bitmap sht qe ato nuk mund t shkallezohen. Nj karakter qe ndodhet ne nj kuti 8 x 12, ne nj display me 640 x 480 do t dukej e arsyeshme. Megjithat, ne qoft se ky bitmap do t kopjohet ne nj faqe t printuar me 1200 dots/inch, e cila sht 10200 bit x 13200 bit, gjeresia e karakterit (8 pixel) do t jet 8/1200 inch ose 0.17 mm e gjere. Vec kesaj, kopjimi midis pajisjeve me veti t ndryshme ngjyrash ose midis monochrome dhe ngjyrave nuk funksionon mire. Pr ket arsye, Windows mbshtet informacionin ne strukturen e t dhenave te ashtuquajtur DIB (Device Independent Bitmap). File-at qe prdorin ket format prdorin prapashtesen.bmp. Keto file-s kane file header dhe information headers dhe nj tabele ngjyrash prpapara pixelave. Ky informacion e bn me t leht levizjen e bitmap midis pajisjeve t ndryshme. Fontet Ne versionet paraardhese t Windows 3.1, karakteret ishin t paraqitur si bitmaps dhe kopjoheshin ne ekran ose printer duke prdorur BitBlt. Problemi ne ket menyre ishte, sic e pame dhe pak me lart, bitmapi qe ka kuptim pr ekranin sht shume i vogel pr printerin. Gjithashtu nj bitmap i ndryshem nevojitet pr do karakter, ne do madhesi t tij. Me fjale t tjera, ne qoft se do t jepet bitmapi pr A-ne me madhesi 10 point, nuk ka asnj menyre pr ta llogaritur at pr madhesine 12 point. Sepse do karakter i do lloj fonti, pr madhesite qe variojne nga 4point deri ne 120point, ka t nevojshme nj numer t madh bitmaps. I gjithe sistemi ishte i pavolitshem pr tekst. Zgjidhja ishte futja ne prdorim i TrueType Fonts t cilat nuk jane bitmap, por thjesht konture t shkronjave. do karakter TrueType sht i prcaktuar nga nj sekuence pikash

rreth perimetrit t tij. T gjitha pikat jane relative me origjinen (0, 0). Duke prdorur kt sistem, sht e thjesht ti shkallezosh karakteret. Ajo cfare duhet t behet sht t shumezohet do koordinat me t njjtin faktor shkallezimi. Ne ket menyre nj TrueType karakter mund t shkallezohet ne do madhesi, gjithashtu madje edhe ne madhesi thyesore. Pasi t jet arritur madhesia e duhur, pikat mund t bashkohen duke prdorur metoden e njohur si ndiq-pikat e mesuar ne kopesht. Pasi konturi t jet kompletuar karakteri mund t mbushet. Nj shembull i disa karaktereve t shkallezuar ne 3 madhesi t ndryshme sht treguar ne Fig. 5-44.

Figura 5-44. Disa shembuj t kontureve t karaktereve ne prmasa t ndryshme. Pasi shkronja e mbushur t jet e gatshme ne formen matematikore, mund t rasterizohet, qe do t thot t konvertohet ne nj bitmap ne cfaredolloj rezolucioni t deshiruar. Duke e shkallezuar si fillim, dhe me pas duke rasterizuar, ne mund t jemi t sigurt qe karakteret e paraqitura ne ekran dhe ato qe do t shfaqen ne printer do t jene aq t praferta sa t jet e mundur, duke ndryshuar vetm ne gabimin e kuantizimit. Pr ta prmiresuar cilesine akoma me shume, sht e mundur t prfshihet (embed) hints ne secilen shkronj duke treguar menyren se si do behet rasterizimi. Pr shembull, t dyja (serifs) shkallezimet ne krye t shkronjs T duhet t jene identike, dicka qe mund t mos jet e vertet si pasoje e gabimit gjat rrumbullakimit (round off). 5.8 TERMINALET E RRJETIT Terminalet e rrjetit perdoren pr t lidhur nj prdorues kompjuteri ne distance ne nje rrjet, si ne LAN ashtu dhe ne WAN. Jane dy filozofi t ndryshme sesi terminalet e rrjetit duhet t punojne. Ne njren ane, terminali duhet t ket nj fuqi te madhe llogaritjeje dhe memorje me qellinm qe t kemi protokolle komplekse pr t kompresuar sasi t medha t dhenash t derguara ne rrjet, (nj protokoll sht nj marreveshje per nje bashkesi

kerkesash dhe prgjigjesh, qe nj dergues dhe marres te mund te komunikojne ne rrjet ose nderfaqe t tjera.). Ne anen tjetr terminali duhet t jet jashtzakonisht i thjesht dhe ne menyre qe ta bej ate shume t lire. Ne vazhdimin e dy seksioneve ne do t diskutojmenga nj shembull per secilen filozofi. Se pari ne do t meremi me sistemin window X t sofistikuar. Me pas ne do t shikojme pak terminalin SLIM.

5.8.1 Sistemi Window X

Terminalet Inteligjent t prfunduar sht nj terminal qe prmban nj mikroproesor aq t fuqishem sa nj kompjuter kyesor, me memorje megabytes, nj tastjere dhe nj mouse. Nj terminal i ketij tipi sht terminali X, i cili vepron ne sistemin window X, (shpesh e quajme me nj fjale X). Zhvilluar ne M.I.T, si pjese e projektit Athine. Nj terminal X sht nj kompjuter qe egzekuton software X dhe i cili bashkevepron me programet duke funksionuar ne nj kompjuter t larget. Programi brenda terminalit X qe mbledh t dhena nga tastjera ose mouse-i, dhe pranon komandat nga nj kompjuter i larget sht quajtur server X. Ai duhet t mbaj trajektoren ne t cilen window-si sht aktualisht selektuar ( ku shenjuesi i mouse-it sht), keshtu qe ai njeh cili klient dergon ndonj fjale t re ne t. Ai komunikon ne rrjet me klient X duke funksionuar ne disa host-e t largeta. Ai dergon atyre te dhena nepermjet mausit dhe tastjeres dhe pranon shfaqen e komandave nga ata. Mund t duket pa kuptim t kesh nj server X brenda nj terminali dhe klient ne host-in ne largesi, por puna e serverit X sht t shfaqi bitet, keshtu qe ai ka kuptim t jet afer prdoruesit nga pikepamja e programit, sepse eshte klienti qe i thote serverit cfare te bej, si per shembull shfaqen e tekstit dhe figurave gjeometrike. Nj marreveshje midis klientit dhe server-it sht treguar ne fig.5-45. Ai sht gjithashtu i mundeshem t funksionoj ne sistemin window X ne maje te tij ose ONIX ose sisteme operative t tjera. Ne fakt, shume sisteme UNIX veprojne ne sistemin window X si standartet e sistemit windowing, madje dhe ne kompjutera te vecante per te aksesuar nje kompjuter ne largesi nepermjet internetit. Cfare ne t vertet sistemi window X prcakton sht protokolli ndermjet klientit X dhe serverit X, t treguar ne fig.5-15. Nuk ka rendesi ne se klienti dhe server-i jane ne t njjtn makine, t ndara nga 100 metra ne LAN, ose jane mijera kilometra larg dhe t lidhura nga interneti. Protokolli dhe sistemi operative sht identik ne t gjitha rastet. X sht pikerisht nj sistem windowing. Ai nuk sht nj GUI komplet. T besh nj GUI t kompletuar, shtresat e tjera t software jane ne veprim ne maje t tij. Nj shtrese sht Xlib. e cila sht nj bashkesi librarish qe vepron pr aksesimin dhe funksionalitetin e X. Keto procedura formojne bazat e sistemit window X dhe cfare ne do t kryejme me posht, por ata jane shume primitiv pr aksesimin direkt per me te shumten e perdoruesve. Pr shembull, do klik e mouse-it raportohet i ndare, keshtu qe duke llogaritur qe dy klikime t mouse-it realisht formojne nj klik t dyfisht duhet t merret me Xlib.

per tab ere programimin me X me te thjeshte, nj kuti t dhenash qe konsiston ne Intrinsics sht shfaqur si pjese e X. Kjo shtrese menaxhon butonat, scroll bars dhe elementet e tjere GUI t quajtura widgets. T besh nj nderfaqe t vertet GUI, me nj pamje uniforme, nevojitet edhe nj shtrese tjetr. Me e populluara ose me shume e prdorshme sht shtresa qe quhet Motif. Aplikacionet e shumta prdorin Motif. Gjithashtu duke i kushtuar vemendje qe administrimi window-s nuk sht pjese e vet X. Vendimi pr evitimin e tij sht totalisht i qellimshem. Ne vend t, nj proesi te ndare client X, i qujatur window menager, i cili kontollon krijimin, fshirjen dhe levizjet e window ne ekran. Per menaxhimin e window-s, ai dergon komanda tek server-i X duke i treguara se cfare duhet t bej. Ai shpesh vepron ne t njjtn makine si klient X, por ne teori mund t veproje kudo. Ky modular i dizenjuar konsiston ne disa shtresa te ndryshme dhe ne shume programe, kjo e bn X tepr te menaxhueshem dhe fleksibel. Ai ka qene drejtuar ne versionet e shumta t UNIX duke prfshire Solaris, BSD, AIX, Linux dhe t tjera duke bere t mundur qe zhvillimi i aplikimeve te kete nje nderfaqe standarte pune per shume platforma. Ai ka qene gjithashtu drejtuar ne sisteme te tjera operimi. Ne kontrast, ne Windows, sistemet windowing dhe GUI jane nderthurur se bashku ne GDI dhe t lokalizuara ne kernel (berthame ne qender), e cila i bn ato me t veshtira t shfrytzohen. Pr shembull, windows 98 GUI sht akoma krejtsisht 16 bits, ku me shume se nj dekade me pare proesoret Intel ishin 32 bits. Tani le t hedhim nj shikim t shkurtr ne X duke e para nga niveli Xlib. Kur nj program X fillon, ai hap lidhjen tek njri ose me shume servera X le ti quajme ato stacione pune (workstacion), madje ata mund t jene ne t njjtn makine si programet e

veta t X. X konsideron qe kjo lidhje eshte e sigurt, i besueshem, ne kuptimin qe humbja dhe dublikimi i mesazheve jane kapur nga software i rrjetit dhe nuk duhen t shqetsohet pr gabimet e komunikimit. Zakonisht TCP/IP prdoret ndermjet client dhe server. Katr tipe mesazhesh kaojne nepermjet kesaj lidhje. 1. Nxjerrje komandash nga programi tek workstation. 2. Prgjigje nga workstacion tek pyetjet e programit. 3. Tastjera, mouse dhe ngjarje t tjera njoftohen. 4. Mesazhet EiTor.

Komandat e shumta jane derguar nga programi tek workstation si nj rruge kalimi e mesazheve. Nuk kemi kthim prgjigje. Shkaku pr ket sht qe kur proeset klient dhe server jane ne makina t ndryshme, mund t doje nj period kohe t konsiderueshme pr komandat t arrijne serverin dhe t kryhen. Duke bllokuar programin aplikativ gjat kesaj kohe mund ta uli ndjeshem at pa qene e nevojshme. Nga ana tjetr kur programi kerkon informacion nga worksation ai thjesht duhet t presi deri sa prgjigjja t kthehet. Si windows, X sht tepr i goditur. Ngjarjet rrjedhin nga workstation tek programi, zakonisht, ne prgjigje t disa veprimeve njerezore, si shtypja e tastjeres, levizjet e mouse-it, ose nj window us duke qene i pa mbuluar. do mesazh sht 32 bytes, ku bytet e pare japin tipin e ngjarjes dhe 31 bytes e tjere kane informacionin. Koncepti i nj celesi ne X sht nj burim. Nj burim sht nj strukture t dhenash qe mbajne nj informacion t caktuar. Programet aplikative krijojne burime ne workstation. Burimet mund t jene ne prdorim t prbashket prgjat proeseve t shumta ne worksation. Burimet priren t jene t shkurtra dhe nuk mbijetojne reboot-ve t workstation. Burimet tipike prfshine windows, fonts, ngjyra paletesh, pixmaps dhe kontekset grafike. T fundit jane prdorur t shoqerojne vetit ne windows dhe jane t njjta ne koncept t vendosin kontekstet ne windows. Nj strukture jo e plot e nj programi X sht treguar ne fig 5-46. Ajo fillon duke prfshire disa kerkesa ne fillim dhe me pas disa deklarime variablash. Ai me pas lidhet me specifikimet e server-it X si parametra t XopenDisplay. Me pas alokohen burimet window dhe rregjistrohen ne window. Ne praktike, disa incializime duhet t ndodhin ketu. Pas kesaj i tregon menaxherit window qe ekziston nj window i ri, keshtu qe menaxheri window mund ta menaxhoje at.

Thirrja e Xcreate GC krijon nj kontekst grafik ne t cilin vetit e window jane rregjistruar. Ne nj program me t plot ato mund t incializohen ketu. Hapi tjetr, thirrja e XselectInputU i tregon server-it X, cili program sht prgatitur t mbahet. Ne ket rast sht me interes ne klikimet e mouse-it, ne shtypjen e tastave ne tastjere, dhe window duke qene i pa mbuluar ose i pa siguruar. Ne praktike, nj program real duhet t jet me interes ne veprime t tjera si goditja. Dhe se fundmi, thirrja e XmapRaised vendos window-sin e ri ne ekran si window me i fuqishem. Ne ket pike window-si behet i dukshem ne ekran. Laku kryesor konsiston ne paraqitje dhe sht llogjikisht shume me i thjesht se laku korrespondues ne windows. Paraqitja e pare ketu jep nj ngjarje dhe i dyti jep goditjen e fundit ne tipin e veprimeve pr shqyrtim. Kur disa ngjarje tregojne qe programi ka mbaruar, running vendoset ne 0 dhe laku prfundon. Prpara egzekutimit, programi liron kontekstin grafik, window, dhe lidhjen. Eshte me interes te permendim, qe jo do njri pelqen nj GUI. Shume programues prferojne nderfaqen e orjentuar t zakonshme e tipit t diskutuar ne seksionin 5.6.2.

Terminali i rrjetit SLIM Gjat viteve, modeli informatike kryesor ka variuar ndermjet centarlizimit dhe decentralizimit informatik. Kompjuterat e pare, si EINAC, ishin ne fakt kompjutra personal, megjithese ishte nj i madh, sepse vetm nj person mund ta prdori ne t njjtn kohe. Me pas erdhi sistemi timesharing, ne t cilin shume prdorues t larget ne terminale t thjeshta ndanin nj kompjuter t madh qendror. Me pas erdhen PC para, ne t cilin prdoruesit kishin prseri kompjutrat e tyre personale. Ndersa decentralizimi i modelit PC kishte avancuar, gjithashtu kishte disa disavantazhe qe jane pr tu pare seriozisht. Me sa duket problemi me i madh sht qe do PC ka nj hard disk t madh dhe nj software kompleks qe duhet mirmbajtur. Pr shembull, kur del nj shkarkim i ri ne sistemin operativ, nj pune e madhe duhet bere per perfomimin e upgrade ne do makine me vet. Ne te shumten e korporatave, kostua e punes qendron ne mirmbajtjen e ketyre lloj hardware dhe softwaresh. Pr prdoruesit shtpiak, puna sht teknikisht e lire, por pak njerez jane t zot ta bejne at me korrektsi. Me sistemet e centarlizuara, vetm nj ose pak makina duhet t behen update dhe keto makina kane nj staf ekspert qe bejne punen. Nj problem i afert sht qe prdoruesit duhet t bejne backup-e rregullisht t file-ve t tyre t sistemit qe kane nj sasi t madhe t dhenash deri ne gigabyte, por vetm pak prej tyre e bejne ket. Kur dicka e keqe ndodh, sht nj problem shume i madh pr ti siguruar ato file. Me sistem t centarlizuar, backup et behen do nat automatikisht ne nj shirit automatik. Nj tjetr avantazh sht qe prdorimi i prbashket i burimeve sht me i leht me sisteme t centralizuar. Nj sistem me 64 prdorues t larget, secili me 64 MB RAM do t ket ket me te shumten e ketij RAM, ne shumicen e kohes pa vene ne funksionim. Me nj sistem t centralizuar me 4 GB RAM, nuk ndodh kurre qe disa prdorues prkohesisht kane nevoje me shume RAM, por nuk mund ta marin at sepse ndodhet ne nj PC t nj personi tjetr. I njjti argument qendron dhe pr disqet e memorjes dhe burimet e tjera. sht me sa duket nj konkluzion i drejt t themi qe prdoruesit e shumt kerkojne informatike trheqese me performance t lart, por nuk duan realisht t administrojne nj kompjuter. Kjo ka lejuar kerkuesit, t ri-egzaminojne timesharing duke prdorur terminalet dumb qe takojne terminalet modern. X ishte nj hap ne ket drejtim, por nj X server sht akoma nj sistem kompleks me nj software t madh megabytes qe duhet t upgraded here pas here. Grali i shenjt duhet t jet nj performance e lart ne t cilin makinat e prdoruesit nuk kane software pr shqetsim. Me posht ne do t prshkruajme nj sistem, i zhvilluar nga zbuluesit ne Sun Microsystems dhe Stanford University. Sistemi quhet SLIM, i cili ngrihet nga Stateless Low level Interface Machine. Idea sht bazuar ne timesharing e centralizuar t zakonshem sic tregohet ne figuren 5 47. Makinat e klientit jane dumb 12S0 x 1024 bitmap, me nj tastjere dhe mouse, por jo software t instaluar nga prdorues. Ata jane ne ndikimin e Inteligjences se vjetr te terminalet character oriented, qe kane pak kujdesje t interpretojne kodeve qe kane shpetuar, por jo software t tjere. Si tek terminalet character oriented t vjetr, funksioni i vetm i prdoruesit sht fikja dhe ndezja. Terminalet e ketij tipi qe kane kapacitet procedimi t paket jane quajtur thin clients.

Modeli me i thjesht qe ka server ship bitmaps ne rrjet te klientt SLIM, 60 here ne sekond nuk punon. Nevojitet rreth 2 Gbps gjeresi brezi t rrjetit, i cili sht shume pr rrjetin e tanishem t manovrohet. Modeli tjetr i thjeshtuar duke regjistruar imazhe ne ekran me prshtats frame brenda terminalit dhe duke rifreskuar 60 here ne sekond ne vend t caktuar sht me premtuese. Ne vecanti ne qoft se serveri qendror ruan nj kopje t do frame t terminalit dhe dergon vetm update sipas nevojes, kerkesat e gjeresise se brezit jane shume modeste. Kjo sht se si punon nj SLIM thin client. Ndryshe nga protokolli X, i cili ka qindra mesazhe komplekse pr menaxhimin e windows-it, figurave me vizatim gjeometrik, dhe shfaqja e teksteve ne shume madhesi, protokolli SLIM ka vetm pese mesazhe shfaqjeje, t radhitura ne figuren Fig.5-48 (ka gjithashtu nj numer t vogel mesazhesh kontrolli jo t radhitura). I pari, SET, zevendeson nj drejtkendesh bufferin e frame-it me pikxzela t rinj. do pikxel i zevendesuar prmban 3 byte ne mesazh pr t specifikuar vleren e plot t ngjyrave (24bit). Teorikisht, ky mesazh sht i mjaftueshem pr t'a kryer ket detyre, t tjerat jane vetm pr optimizim.

Mesazhi FILL mbush nj trekendesh plotsisht ne ekran me nj vlere t vetme pikxeli. Prdoret Tor pr t mbushur nj background t njtrajtshm. Mesazhi BITMAP mbush nj katrkendesh t plot duke prsritur nj motiv t prfshire ne mesazh bitmap. Kjo komande sht e prdorshme pr t mbushur backgroud-et me motive qe kane disa ndertime dhe nuk jane nj ngjyre e njtrajtshme. Mesazhi COPY udhezon terminalin pr t kopjuar nj katrkendesh brenda nj buffer frame tek nj pjese tjetr e buffer frame-it. sht shume e dobishme pr t rrotulluar ekranin dhe levizur dritaren. Se fundmi, mesazhi CSCS konverton sistemin e ngjyrave YUV t prdorur ne televizionet e SH.B.A-se (NTSC) qe vendosin sistemin RGB t prdorur nga monitoret e kompjuterit, fillimisht prdoret kur nj frame video e papunuar ka kaluar tek nj terminal ne sistemet YUV dhe duhet qe t konvertohet ne RGB, qe t shfaqet. Duke diskutuar pr ket nga ana algoritmike sht e thjesht por harxhon kohe, pra sht me mire t shkarkosh punen ne terminale. N qoft se terminalet nuk do t prdoren pr t pare videon, ky mesazh dhe funksionalitetet e tij mund t mos jene t nevojshme. Idea e prgjithshme e klientve "thin" .... Ne prototipin switcheve 100-MBPS Fast Ethernet sht prdorur ne t dyja segmentimet server-to-switch dhe switch-to-terminals. Nga fuqia, nj rrjet me gigabit duhet t prdoret midis serverit dhe switch sepse ai segment sht lokal ne dhomen e komjuterit qendror. Madhesia e pare ndeshet me karakteret qe prseriten ne ekran. do karakter i shtypur dergohet ne server, i cili prpunon se cili piksel do t update-et pr t vendosur karakterin ne vendin e duhur ne ekran, madhesine dhe ngjyren. Madhesite tregojne qe ajo merr 0.5 msec pr karaterin, pr t'u shfaur ne ekran. Ndryshe, ne nj workstation lokal koha e prseritjes sht 30 msec prgjat buferimit t kernelit. Pjesa tjetr e testeve maste performancen me prdorues qe po ekzekutojne programe aplikative, interaktive moderne si Adobe Photoshop, Adobe Frameworker dhe netscape. Nga vrojtimi doli qe gjysma e komandave t prdorueseve kerkonin update-m me t vogel se 10 000 piksel, e cila sht 30000 byte e pakompresuar. Ne 100 Mbps ajo merr 2.4 msec pr t nxjerre 10000 piksela pr ne tel, pr nj kohe totale 5.1 msec (por varet nga kushtet rrethanore). Derisa koha e reagimit t qenieve njerezore sht rreth 100 msec, disa update duken si t castit. Ndoshta update-et e medha ishin pothuajse t castit. Gjithashtu, kur prdoret kompresimi, me tepr se 85% e update-eve jane nen 30000 byte. Eksperimentet ishin prseritur ne nj rrjet 10 Mbps, nj rrjet 1-Mbps dhe nj rrjet 128Kbps. Tek 10 Mbps sistemi ishte virtualisht i castit dhe 1 Mbps ishte akoma mire. Ne 128 Kbps ajo ishte shume i ngadalt pr t'u prdorur. Lidhjet deri ne 1 Mbps jane duke u bere shume shpejt realitet duke prdorur rrjetin kabllor TV dhe ADSL, duket qe kjo teknologji mund t aplikohet ne prdorueses shtpiake ashtu si dhe ne prdorues biznesi.

5.9. Menaxhimi i fuqise Qellimi i pare i pare i kompjuterave elektronike, ENIAC ka 18000 tuba vajisjeje dhe konsumon 140000 wat fuqi. Si rezultat, kjo ngre lart faturen elektrike. Pas zbulimit t transistorit prdorimi i fuqise ra dramatikisht dhe industria e kompjuterave humbi interesin ne kerkimet e fuqise.

Sado ne ditt tona menaxhimi i fuqise sht kthyer ne projektor pr disa arsyeje dhe sistemi operativ sht duke luajtur nj rol ketu. Le t fillojme me desktop PCs. Nj desktop PC shpesh 1200 wat fuqi (85% sht eficente, kurse 15% humbet pr ngrohje). N qoft se 100 milion nga keto makina jane hapur nj heresh ne t gjithe botn, se bashku ato prdorin 20.000 Megawat energji elektrike. Ky sht prfundimi total i 20 uzinave me fuqi nukleare. N qoft se kerkimet e fuqise mund t lihen prgjysem, ne mund t shpetojme 10 uzina nukleare (ose ne krahasim t mbetjeve te karburanteve t uzinave) sht nj fitore e madhe dhe nj kursim i vlefshem. Vendet e tjera ku fuqia sht nj prdorim i madh, sht ne fuqine e baterise t kompjuterave, prfshire notebooks, laptop-et, palmtops dhe wedpods midis t tjereve. Thelbi i problemit sht qe baterit nuk mund t karikohen per te zgjatur shume perdorimi i tyre, e shumta disa ore. Megjithe kerkimet masive te perkrahura nga kompanite e prodhimit t baterive, kompanit e kompjuterave dhe kompanit elektronike konsumatore, zhvillimi sht i ngrire. Ne nje industri e cila eshte mesuar te permiresoje performancen do 18 muaj, mospatja e nje progresi duket sikur po thyhen ligjet e fizikes, por kjo sht nj situata e tanishme. Si rrjedhoje, te prodhosh kompjutera qe perdorin me pak energji, sjell per pasoje dhe zgjatjen e perdorimit te baterise, qe eshte dhe qellimi i axhendave te te gjithe prodhuesve. Sistemi operativ luan nj rol kryesor ketu, qe ne do ta shohim me posht. Jane dy perpjekje t prgjithshme pr t zvogeluar konsumimin e energjise. E para sht qe sistemi operativ te fiki disa pajisje (me se shumti pajisje I/O), sepse kur nje pajisje eshte e fikur prdor pak ose aspak energji. E dyta sht qe programi aplikativ te perdori me pak energji, per te zvogeluar kohen e perdorimit te baterise, por me shume mundesi degradon cilesia e eksperiences se prdoruese. Ne do ti shikojme te dyja keto perpjekje me radhe, por fillimisht ne do t flasim pak rreth ndertimit te hardware-t, duke respektuar prdorimin e fuqise.

Hardware issues Bateri jane dy llojesh: me nje perdorim dhe te rikarikueshme. Baterite me nje perdorim (me shume AAA, AA dhe D qelizat) mund t prdoren pr pajisje te vogla (handhandle), por nuk ka energji t mjaftueshme pr laptop t fuqishem me ekran t ndritshem. Baterite e rikarikueshme, ndryshe nga te parat, mund t ken energji t mjaftueshme pr nj laptop pr disa ore. Baterit me nikel dhe kadium kane dominuar ketu, por ato u hapen rruge baterive hibride me metal nikeli, qe zgjasin me shume dhe nuk e ndotin ambientin kur jane te shkarkuara. Baterit prej hekuri dhe litiumi jane akoma me mire dhe mund t karikohen pa qene plotesisht te thata, por kapaciteti i tyre sht rreptsisht i limituar. Per shitesit e kompjuterave, zgjidhja ne lidhje me baterite u gjet qe, CPU-ja, Memoria dhe pajisjet I/O te kene disa gjendje: on, sleeping, hebernating dhe off.

Per te perdorur pajisjen, ajo duhet te jete ne gjendjen; on. Kur pajisja nuk nevojitet per nje kohe te shkurter ajo mund te kaloje ne gjendjen; sleep, e cila sjell nje konsumim me te vogel te energjise. Kur pritet qe pajisja te mos perdoret per nje kohe me te gjate ajo kalon ne gjendjen; hibernated, e cila sjell nje kursim me te madh te energjise. Por problemi ketu eshte qe duhet me shume energji per ta nxjerre pajisjen nga gjendja, hibernated, se nga gjendja sleeping. Perfundimisht kur pajisja eshte e fikur ajo nuk harxhon energji. Duhet te permendin qe te gjitha pajisjet i kane te kater gjendjet, por eshte detyra e sistemit operativ te menaxhoje gjendjet e tranzicionit, ne nje moment te caktuar. Disa kompjutera kane 2 ose 3 butona te fuqise. Nje nga keto butona mund ta kaloje te gjithe kompjuterin ne gjendje sleep, nga e cila mund te dali menjehere duke shtypur nje karakter ose duke levizur mouse. Tjetra e ve ne gjendjen Hibernation, nga e cila duhet nje kohe me e gjate per te dale. Ne te dyja keto raste, ato nuk bejne gje tjeter vetem se i dergojne nje sinjal sistemit operativ, i cili e pushon menjehere software-in. Ne disa shtete, pajisjet elektrike, te detyruara me ligj, duhet te kene nje celes mekanik, e cila e fik menjehere automatikisht pajisjen, per arsye sigurie. Menaxhimi i fuqise sjell nj sere pyetjesh me te cilat sistemi operativ duhet te perballet. Ato jane si me poshte; cila pajisje duhet te kontrollohet? Jane ato ne gjendje On/Off apo jane ne gjendje te ndermjetme? Sa energji eshte kursyer duke e mbajtur ne gjendjet e uleta? A harxhohet energji kur sistemi ristartohet? Kursehet energji kur kalohet ne nje gjendje me te ulet? Sa kohe duket per tu kthyer ne gjendjen maksimale? Sigurisht prgjigjet e ketyre pyetje ndryshojne nga pajisja ne pajisje dhe sistemi operativ duhet te kete parasysh nje sere mundesish. Kerkues te ndryshem, kane egzaminuar laptopet pr t pare kur iken korenti dhe kane arritur ne konkluzionet qe tregohen ne figuren 5.49. Ata thjesht konfirmuan qe pajisjet fikeshin sipas kesaj radhe, ne fillim ekrani, hard disk dhe CPU-ja. Por keto parametra nuk mund te pergjithesohen, sepse marka te ndryshme kompjuterash, kane kerkesa te ndryshme per matjen e energjise. Por nga tabela me poshte duket qarte qe, ekrani, hard disku dhe CPU-ja jane objektet kryesore per kursimin e energjise.

Operating system issues (Dalja ne qarkullim e sistemit operativ):

Sistemi Operativ luan nj rol kryesor ne menaxhimin e energjise. Ai kontrollon te gjitha pajisjet, ai mund te vendosi ke pajisje duhet te fik dhe kur duhet ta bej ate. Kur fik nje pajisje dhe ajo duhet pas pak kohe te perdoret, atehere mund te kemi nje vonese jo te kendshme kur duhet ta ristartojme ate, nga ana tjeter neqoftese koha per fikjen e nje pajisje eshte e gjate, atehere nuk kemi kursyer energji. Hilja ketu qendron qe te gjenden algoritmet e duhura, qe sistemi operativ te vendosi, cilen pajisje duhet te fiki dhe kur. Nj prdorues mund t pranoje qe pas 30 sekondash pa prdorim t kompjuterit ai t marre 2 sekonda pr tu prgjigjur nj shtypje t butonit t tastieres. Nj prdorues tjetr mund t mos ta pranoje kete zgjidhje. Ne mungese t audio input-it kompjuteri nuk mund ti vecoje keta perdorues.

Ekrani Le t shikojme tani shpenzuesit me te medhenj te energjise pr t pare se cfare mund t bejme. Konsumuesi me i madhe i energjise eshte ekrani. Pr t patur nj imazh t ndritshem ekrani duhet t riktheje dhe t japi energjine. Disa sisteme operativ orvaten t shpetojne energjine nga mbyllja e paraqitjes kur nuk ka aktivizim per disa minuta. Shpesh prdoruesi duhet t zgjidhe se cfare intervali sht mbyllja, duke pushuar tregimin midis boshllekut t ekranit dhe prdorimit t baterise mbrapsht. Fikja e ekranit eshte gjendja sleep, sepse ai mund te kthehet pothuaj menjehere ne gjendjen e meparshme, sapo nje nga karakteret te jete shtypur ose te levizi pajisja qe pointon. Nj prmiresim i mundshem u tregua nga Flinn & Satyanarayanan. Ata sygjeronin qe ekrani te konsistonte ne nje numer zonash, te cilat mund te ndizeshin ose fikeshin ne menyre te pamvarur. Ne figuren 5.50 (a), jane paraqitur 16 zona te cilat jane ndare per tu dalluar me vija me te trasha. Kur kursori sht ne dritaren 2, sic tregohet edhe ne figure vetm cereku i zones eshte i ndricuar, tjetra eshte ne erresire, si pasoje kursehet e energjise qe harxhon ekrani. Kur prdoruesi leviz kursorin ne dritaren 1, zona e dritares 2 mund t jet erresuar dhe mbrapa saj mund t jene rindezur. Megjithate, dritarja 1 shtrihet ne 9 zona dhe nevojitet me shume energji. N qoft se menaxheri i windows, e kupton se cfare eshte duke ndodhur ai mund ta zhvendosi zonen 2, ne menyre qe te shtrihet vetem ne kater zona, me nje lloj prerje te shpejte te zones, sic tregohet ne figuren 5.50 (b). Pr t arritur ket ulje prej 9/10 t fuqise se plot ne 4/16 t fuqise totale, menaxheri i windows duhet te kuptoje si te menaxhoje energjine ose sht i aft t pranoje instruksionet nga disa pjese t tjera t sistemit. Me shume e sofistikuar mund t jet aftsia e ndricimit t pjesshem t dritares qe nuk sht tresisht ne perdorim.

HDD Nj tjetr konsumator potencial i energjise sht edhe hard disku. Ai kerkon shume energji per tu rrotulluar (spin) me shpejtesi te larte, edhe ne qofte se nuk ka akses. Disa nga kompjuterat, vecanerisht laptopet, arrijne te shuajne rrotullimet e diskut pas disa minutash aktivitet, ne qofte se ai nevojitet prape, ai vihet ne gjendje pune serish. Fatkeqesisht ndalimi i diskut sht ne gjendjen hibernating dhe jo ne gjendjen sleeping, kjo do te thote qe per riaktivizimi i tij do te duhen disa minuta, e cila do te shkaktoje me shume vonesa per perdoruesin. Per me teper, restartimi i diskut shkakton harxhim ekstra te energjise.si pasoje, ka nje periode rrotullimi karakteristike, Td, ne te shumten e rasteve me shpejtesi maksimale 5 rrotullime ne 5 sec. Supozojme qe disku tjetr te aksesohet ne kohen t. N qoft se t <Tth, shpenzohet me pak energji nese disku bahet ne pune, se sa ta fikim dhe ta ndezim prape me vone. N qoft se t>Tth, atehere kursehet me shume energji duke e fikur diskun dhe rindezur me vone. Ne praktike shume sisteme jane konservatore dhe e fikin diskun pas disa munutash qendrimi ne qetesi (joaktiv). Menyre tjetr pr t kursyer energji, eshte pajisja e RAM-it me nje cache te konsiderueshme. Nese nevojitet blloku qe ndodhet ne cache, nuk eshte nevoja te restartohet disku i cili eshte ne gjendjen IDL, per te lexuar ne te. E njejte eshte dhe kur duam te shkruajme ne disk, ne qofte se veprimin e kemi ruajtur ne cache, nuk eshte e nevojshme te restartojme diskun per te shkruar ne te. Disku do te qendroje i fikur deri ne rastin kur kemi nje miss cache. Menyre tjeter per te menjanuar startimet e panevojshme te diskut, eshte qe sistemi operativ te informoje programet qe jane duke u ekzekutuar rreth gjendjes se diskut, duke i derguar atij mesazhe ose sinjale. Per shembull, nje proesor word, mund te kerkoje te shkruaje nje file, duke edituar diskun here pas here ne pak minuta. Ne qofte se proesori i word-it do ta dije qe disku eshte ne gjendje te fikur per momentin, ai do ta menjanonte veprimin e shkrimit, duke e shtyre ate per momentin qe disku eshte serish ne pune.

CPU CPU mund te menaxhohet qe te kurseje energji, gjithashtu. CPU e laptopit mund t kalohet ne gjendjen sleep, duke e cuar konsumimin e energjise ne zero. E vetmja gje qe ajo mund te beje pas kesaj gjendje, eshte te zgjohet kur vjen nje interrupt. Por edhe kur CPU-ja eshte idle ose ne pritje per I/O, ajo kalon ne gjendje sleep. Ne shume kompjutera, ka nje lidhje ndermjet tensionit te CPU-se, ciklit te clock dhe perdorimit te energjise. Tensioni i CPU-se shpesh mundet te reduktohet ne software, e cila sjell kursim te energjis, por gjithashtu dhe shkurtimin e ciklit te clokut. Derisa kursimi i energjise eshte ne perpjestim me tensionin ne katror, duke zvogeluar tensionin pergjysem, e ben CPU-ne edhe gjysem here me te shpejte, por kursen dhe e energjise. Kjo veti mund te perdoret tek programet me deadline te mire percaktuar, te tilla si multimedia viewers, e cila duhet te dekompresoje dhe te shfaqi nje imazh do 40 msec, por kalon ne gjendjen idle kur duhet ta bej me shpejt. Supozojme se nje CPU perdor x xhaul energji derisa eshte duke vepruar me fuqi te plote me 40 msec dhe perdor e xhaul energji, per te vepruar me gjysmen e shpejtesise. Ne qofte se nje multimedia viewer mund te dekompresoje dhe te shfaqi nje imazh per 20 msec, sistemi operativ mund te veproje me fuqi te plote per 20 msec dhe pastaj te fiket per 20 msec e mbetura, pra ne total perdor e xhaul energji. Alternativisht, ai mund te veproje me gjysmen e fuqise dhe te arrije deadline-n, por ne te vertete perdor vetem xhaul energji. Nje krahasim i veprimit me shpejtesi te plote dhe fuqi te plote per disa intervale, dhe ai i veprimit me gjysmen e shpejtesise dhe e fuqise per dy, eshte treguar ne Fig. 5-51. ne te dyja rastet eshte kryer pune, por ne Fig 5-5 K(b) eshte konsumuar vetem gjysma e energjise. Ne menyre te ngjashme, ne qofte se nje perdorues shtyp nje karakter ne sekonde, por nevojitet qe karakteri i marre te proesohet ne 100 msec, eshte me mire per sistemin operativ te vendosi periudha me te gjata pauze dhe te uli shpejtesine e proesorit, gati 10 fish. Pra, duke punuar ngadale kursen me shume energji sesa duke punuar shpejt.

Memorja Vetem dy opsione te mundshme egzistojne per te kursyer energji ne memorie. E para, cache mund te zbrazet dhe pastaj te fiket. Por, ajo gjithmone mund te ringarkohet nga memorja kryesore, pa patur humbje te informacionit. Ringarkimi duhet bere ne menyre dinamike dhe te shpejte, pra fikja e cache-s eshte pothuaj kalim ne gjendje sleep.

Nje opsion tjeter me drastik eshte qe te shkruhet e tere permbajtja ne memorien kryesore te diskut, dhe pastaj te fiket eshte vete memorja kryesore. Kjo alternative eshte gjendja hibernation, sepse ne menyre virtuale e gjithe fuqia mund ti hiqet memorjes dhe pastaj te harxhohet nje kohe e konsiderueshme per ringarkim, vecanerisht ne qofte se edhe disku eshte i fikur, gjithashtu. Kur memorja eshte cut off, edhe CPU-ja ne gjendje qetesie duhet te fiket gjithashtu ose te egzekutohet jashte ROM-it. Ne qofte se CPU-ja eshte e fikur, interrupti qe e zgjon ate, duhet te shkaktoje nje kercim ne kodin e memorjes ne Rom, ne menyre qe memorja te mund te ringarkohet perpara se te perdoret. Megjithe keto qe permendem, te nderpresesh memorjen per periudha te gjata kohe, mund te jete me leverdi ne qofte se ristartimi ne pak sekonda mund te konsiderohet me i deshirueshem sesa rebooting, i sistemit operativ nga disku, i cili zakonisht merr nje ose disa minuta kohe.

Wireless Communication Me rritjen e numrit te kompjuterave portativ, shume prej tyre perdorinin lidhjen wireless me boten jashte. Radio transmetuesi dhe marresi jane shpesh harxhuesit me te medhenj te energjise. Ne vecanti, radio marresi eshte gjithmone i ndezur, ne menyre qe te degjoje per e-mailet qe vijne dhe bateria mund te thahet me shpejt. Ne anen tjeter, ne qofte se radio fiket me vone, le te themi pas nje minute ne gjendje pauze, mesazhet hyrese mund te humbasin, e cila eshte e padeshirueshme. Nje zgjidhje efekte e ketij problemi u dha nga Kravets dhe Krishan. Thelbi i zgjidhjes se tyre ishte qe komjuterat portative te komunikojne me stacione baze fikse, qe kane disk dhe memorje te madhe dhe te pakufizuar ne fuqi. Ajo cfare ata propozuan ishte qe kompjuterat portative te dergojne nje mesazh ne stacionin baze, kur ai eshte gati duke e fikur radion. Qe ne ate moment, bufferi i stacionit baze e con mesazhin qe mori ne disk. Kur kompjuteri portativ e fik perseri radion, ai njofton stacionin baze. Ne ate pike, do mesazh i akumuluar mund ti dergohet atij. Mesazhet dalese qe jane gjeneruar ndersa radio eshte e fikur jane ne bufferin e kompjuterit portativ. Ne qofte se bufferi rrezikon te mbushet plot, radio fiket dhe ja le radhen per te transmetuar stacionit baze. Kur duhet te fiket radio? Nje mundesi eshte qe ti lihet perdoruesit ose programit aplikativ per ta vendosur. Mundesi tjeter eshte qe te fiket pas disa sekondave ne gjendje pauze. Kur duhet ndezur perseri? Ate e vendos perdoruesi ose programi, ose mund te ndizet periodikisht per te kontrolluar trafikun e brendshem dhe per transmetuar ndonje mesazh qe eshte duke pritur ne radhe. Sigurisht, ajo mund te ndizet kur output buffer eshte i mbushur plot. Ka dhe plot mundesi te tjera.

Thermal menagment

Menaxhimi termik, eshte pak me i ndryshem, por prape lidhet me clirimin e energjise. CPU-te moderne nxehen jashte zakonisht shume kur punojne me shpejtesi te madhe. Desktopet e makinave, kane normalisht nje ventilator te brendshem per te nxjerre ajrin e

nxehte jashe kases. Derisa reduktimi i konsumimit te fuqise nuk ka nje ndikim te madhe te desktopet e makinave, ventilatori eshte zakonisht i ndezur gjate gjithe kohes. Ne laptopet situata eshte ndryshe. Sistemi operativ duhet te monitoroj temperaturen ne menyre konstante. Kur temperatura eshte afer maksimumit te lejueshem, sistemi operativ ben nje zgjedhje. Ai mund te ndezi ventilatorin, i cili ben zhurme dhe harxhon fuqi. Ne menyre alternative, ai mund te reduktoje konsumimin e fuqise duke reduktuar ndricimin nga mbrapa te ekranit, duke ulur aktivitetin e CPU-se, duke qene me agresiv per te ulur shpejtesine e rrotullimit te diskut dhe te tjera. Futja e disa inputeve nga perdoruesi mund te cilesohen si guide. Per shembull, nje perdorues mund ta percaktoje qe me perpara qe zhurma e ventilatorit eshte e pakendshme, ne menyre qe sistemi operativ te mund te reduktoje konsumimin e fuqise.

Menaxhimi i baterise Ne kohet e vjetra nj bateri furnizonte me rryme derisa te shkarkohej, kohe ne te cilen ajo ndalonte punen. Tani jo me. Laptopet perdorin bateri inteligjente, te cilat mund te komunikojne me sistemin operativ. Pervec kerkesave, ato mund te raportojne dhe per gjera si maksimumi i tensionit, tensoni aktual, maksimumi i karikimit, karikimi aktual, maksimumi i shkalles se shkrakimit te baterise, shkalla aktuale e shkarkimit, etj. Shume kompjutera laptop kane programe qe punojne me ane te query (pyetjeve) dhe shfaqin ne ekran te gjithe keto parametra. Baterite inteligjente munden gjithashtu te instruktohen per te ndryshuar parametra te ndryshem nen kontrollin e sistemit operativ. Disa laptope kane bateri te shumefishta. Kur sistemi operativ zbulon se nje bateri eshte afer fundit, ai duhet te percaktoje se cila do te jete bateria tjeter qe do te vazhdoje te funksionoje, pa shkaktuar ndonje dem gjate tranzicionit. Kur bateria e fundit eshte ne perfundim te saj, eshte detyre e sistemit operativ te lajmeroje perdoruesin dhe pastaj te bej nje dalje te rregullt, per shembull, te siguroje qe file system nuk eshte demtuar.

Driver Interface Sistemi Windows, ka nje mekanizesh te zhvilluar per te kryer menaxhimin e fuqise, te qujatu ACPI (Advanced Configuration and Power Interface). Sistemi operativ mund te d drejtoje komanda sipas perkatesise, duke pyetur pajisjet per te raportuar per kapacitetin dhe gjendjen aktuale te tyre. Ky tipar eshte vecanerisht i rendesishem kur kombinohet me fik e ndiz (plug and play), sepse menjehere pas reboot-imit, sistemi operativ nuk e di cilat pajisje jane prezente, je me te dije vetite e tyre per te menaxhuar konsumimin e fuqise dhe te energjise. Ai mundet gjithashtu ti dergoje komanda driver-it per ta instruktuar per te ulu nivelin e fuqise (kjo bazuar dhe ne mundesite qe ai ka patur fillimisht0. ne vecanti, kur nje pajisje si tastiera ose mouse vihet ne funksionim pas nje periudhe pauze, kjo eshte nje sinjal per sistemin qe te kthehet mbrapsht, ne aktivitet normal.

Degraded Operation Me siper ne pame se si sitemi operativ mund te kurseje energji nga perdorimi i pajisjeve te ndryshme. Por ka dhe nje mundesi tjeter, ti thuash programit te perdori me pak energji, edhe pse kjo do te thote me pak pervoje per perdoruesin. Vecanerisht, ky informacion nevojitet kur bateria eshte poshte pragut te lejueshem te karikimit. Pastaj i duhet programit te vendosi ndermjet degradimit te performances duke e mbajtur baterine ne pune ose te ruaje performancen dhe te rrezikoje ikjen e energjise. Nje nga pyetjet qe lind ketu eshte si mundet nje program te degradoje performancen per te kursyer energji? Kjo pyetje u studiua nga Flinn dhe Satyanarayanan (1999). Ata sollen kater shembuj si degradimi i performances mund te kurseje energji. Ne do ti shikojme shkurtimisht. Ne kete studim, informacioni i paraqitet perdoruesit ne forma te ndryshme. Kur nuk kemi degradim, na eshte paraqitur informacioni me i mire i mundshem. Kur degradimi eshte present, besueshmeria e infromacionit qe eshte prezent per perdoruesin eshte me e keqja qe mund te egzistonte. Ne do shohim disa shembuj, shkurtimisht. Ne menyre qe te masi perdorimin e energjise, Flin dhe Satyanarayanan shpiku nje software tool te quajtur PowerScope. Ajo cfare ajo ben, eshte qe te siguroje nje profil te programit te perdorimit te energjise. Per ta perdorur ate, kompjuterit duhet ti jete montuar nje pajisje e jashtme per fuqine, nepermjet nje multimeter digital sofiwzTcvontroWed. Duke perdorur multimetrin, software mund te lexoje numrin e miliamper qe futen nga pajisja e jashtme e fuqise, dhe ne kete menyre mund te percaktoje ne moment fuqine qe harxhon kompjuteri. Ajo cfare PowerScope ben, eshte qe periodikisht program counter dhe perdoruesi i fuqise i shkruan keto te dhena ne nje file. Pasi programi ka perfunduar punen, file perdoret per tu analizuar per te ditur energjine qe eshte perdorur nga do procedure. Kjo forme matje e ka bazen tek observimi. Matjet per kursimin e energjise ne hardware, jane perdorur dhe formojne bazen per matjet per degradimin e performances. Programi i pare qe jane kryes matjet ishte video player. Ne menyre qe mos te kemi degradim, ai luan 30 imazhe/sec me rezolucion te plote dhe me ngjyra. Nje menyre degradimi eshte qe te braktisim shfaqjen e informacionit me ngjyra dhe te shfaqi vidion ne bardhe e zi. Nje tjeter forme degradimi eshte te reduktojme shkallen e imazhit, e cila do te coje ne dridhje dhe filmi do te kete nje cilesi jo te mire. Nje tjeter forme degradimi eshte te reduktojme pixel ne te gjitha drejtimet, kjo con ne uljen e rezolucionit dhe e zvogelon madhesine e ekranit. Masat e ketij lloji con ne kursimin e 30% te energjise. Programi i dyte ishte fjalimet ne publik. Si shembull ketu mund te marrim valen qe formon mikrofoni. Kjo vale mund te analizohet dhe nga nje kompjuter laptop ose te cohet nepermjet nje linku te radios per tu transmetuar ne nje kompjuter fiks. Duke kryer kete veprim kursejme energji nga CPU-ja, por harxhojme energji per radion. Degradimi eshte kur transmetojme nje fjalim te shkurter dhe perdorim nje model akustik te thjeshte. Fitimi ketu eshte 35%. Shembulli tjeter eshte nje map viewer, i cili e transmeton harten nepermjet nje linku te radios. Degradimi qendron ne prerjen e harten ne dimensione me te vogla ose i thote serverit ne distance qe te lere jashte paraqitjes rruget e vogla, meqe kjo kerkon dhe me pak bit per tu transmetuar. Fitimi ketu eshte perseri rreth 35%. Eksperimenti i katert ishte transmetimi i imazheve JPEG ne nje web browser. Standartet JPEG lejojne algoritma te ndryshem, marrjen e nje cilesie imazhi me te mire, por duke

abuzuar me madhesine, ketu fitojme rreth 9%. Nga te gjitha sa thame, pame se duke pranuar degradimin e cilesise, perdoruesi mund te perdori me gjate nje bateri.

KAPITULLI I GJASHT

File-at Sistem
T gjithe aplikacionet e kompjuterave kane nevoje t memorizojne dhe t rinxjerin informacion. Derisa nj proes t jet ne ekzekutim, ai mund t memorizoje nj sasi t limituar informacioni, ne hapesiren e vet te adreses. Gjithesesi kapaciteti i memorizimit eshte i kufizuar nga madhesia e hapesires se adreses virtuale. Pr disa aplikacione kjo hapesire sht e mjaftueshme, por pr t tjere sht shume shume pak. Nj problem i dyt ne mbajtjen e informacionit ne hapesiren e adreses se nje proseci eshte kur se kur ky proces mbaron, informacioni humbet. Per shume aplikacione (per shembull, database) ky informacion duhet te ruhet per disa jave, muaj apo dhe pergjithmone. Humbja e tij kur procesi mbaron eshte e papranueshme. Gjithashtu, nuk duhet te zhduket kur nje deshtim ne kompjuter vret procesin. Nj problem i tret qe shtrohet, sht qe zakonisht nevojitet pr proese t shumefishta, t aksesojne informacion ne te njjtn kohe. Ne se kemi nj telefon t lidhur ne linj dhe t regjistruar drejprdrejt ne hapesiren e adresave t nj proesi t vetm, athere vetm ai proes mund t aksesoje at informacion. Menyra pr ta zgjidhur ket problem, sht qe t mund t bejme vet ket informacion t paaksesueshem nga do proes tjetr. Ketu ne kemi tre kerkesa thelbesore pr te ruajtur informacionin per nje periudhe afatgjate : 1. Mund t jet e mundur t memorizojme nj sasi t madhe informacioni. 2. Informacioni duhet t survejoje mbarimin e procesit i cili po e perdor. 3. Proeset e shumefisht duhet t jene t aft t aksesojne informacionin ne menyre konkuruese. Zakonisht menyra e zgjidhjes se problemit sht, memorizimi i informacionit ne ndonj disk ose ne ndonj pajisje tjetr t jashteme, ne njesi qe quhen File. Proeset mund t lexojne dhe shkruajne nj informacion t ri, ne se sht nevoja. Infomacionet e memorizuara ne file, duhen t jene kembegules, qe t mos ndikohen nga krijimi dhe mbarimi i nje procesi t caktuar. Nj file duhet t zhduket vetm ne se, vet prdoruesi i tij do ta fshij at. File-t menaxhohen nga vet sistemi operativ. Se si ata t jane strukturuar, emeruar, aksesuar, prdorur, mbrojtur dhe implementuar nga pjesa me e madhe, jane ceshtjet kryesore ne dizenjimin e nje sistemi operativ. Ne pergjithesi ajo pjese e sistemit operativ e cila merret me filet, eshte quajtur file system dhe eshte objekt i ketij kapitulli. Nga kendveshtrimi i perdoruesit, aspekti kryqesor i nje file systemi eshte se si ai u shfaqet atyre, qe do te thote ku konsiston file, si emerohet dhe ruhet, cfare operacionesh lejohen te kryhen ne file, etj.. Detajet kur bitmap ose nje liste eshte duke ruajtur te dhena

ne nje hapesire te lire dhe ne sa sektore eshte i ndare nje bllok logjik, jane me pak interes per ne, pavaresisht se ato jane me nje rendesi te madhe per projektuesin e nje file system. Pr ket arsye, ne kemi strukturuar kapitullin ne nenkapituj. Dy te paret trajtojne respektivisht, ndertimi i nderfaqes se perdoruesi me file-t dhe direktorite. Pastaj jepet ne menyre me te detajuar se si jane implementuar filet sistem. Ne fund, ne japim disa shembuj te nje file sistem te vertete. 6.1 FILES Ne faqet ne vazhdim do ti shohim filet nga ana e prdoruesit, kjo sht ajo se si ato do t prdoren dhe se cfare vetish t brendeshme ata kane. 6.1.1 File Naming ( emertimi i tyre)

Filet jane nj abstraksion i makines (kompjuterit). Ato sigurojne menyren e ruajtjes se informacionit ne hard disk, i cili mund te lexohet dhe me pas. Kjo mund t behet ne nj menyre qe prdoruesi t mos t merret me detaje t tjera pr menyren e ruajtjes se informacionit dhe si realisht punon edhe disku. Shpesh karakteristika me e rendesishme e do abstraksioni mekanik, sht menyra e menaxhimit dhe emertimit te nje objekti, keshu qe ne do t fillojme ekzaminimin e file-ve t sistemit me emerimin e nje file. Kur nj proces krijon nj file, i cakton atij file nj emer. Kur proesi mbaron, file vazhdon t ekzistoj dhe mund t aksesohet nga nj tjetr proes qe lind dhe e prdor at file me t njjtin emer t meparshem. Disa nga rregullat strikte t emertimit t file-ve, ndryshojne nga sistemi ne sistem, por te gjithe sistemet operative te tanishme, lejojne nje string nga nje deri ne tete karaktere te emerojne nje file. Pr shembull keta emra si andrea, bruce, and cathy, mund t jene emra t nj file cfaredo. Shpesh shifra ose karaktere te vecanta jane te lejueshme, keshtu dhe emrat si 2, urgent!, dhe t Fig.2-14, jane te vlefshme. Shumica e file system mund t suportojne emra deri ne 255 karaktere. Disa file system arrijne te bejne ndryshimin midis karaktereve me germe te madhe dhe germe te vogel, kurse t tjere jo. Gabimet e UNIX ne kategorine e pare me gabimet e MS-DOS ne kategorine e dyt. Nj sistem UNIX mund t ket t treja llojet e ndryshme t file-ve si: maria, Maria and MARIA, kurse tek MS-DOS, te gjitha keto emra i referohen te njejtit file. Nj ane tjetr e file-ve t sistemit do ta themi tani: Windows 95 dhe Windows 98 t dy sistemet e prdorin file t MS-DOS, dhe si rrjedhoje trashegon shume nga vetit e tij, per shembull, si jane ndertuar emrat e fileve. Ne vazhdim mund t themi se Windows NT dhe Windows 2000 prmbajne file t MS-DOS, gjithashtu ato trashegojn veti te tij. Megjithate, mund te themi qe dy sistemet e fundit kane nje file te veten, te lindur, file NTFS, qe ka veti te ndryshme ( per shembull, emri i file eshte unik). Ne ket kapitull kur i referohemi, file sistem t Windows-it, kuptojme file t MS-DOS-it, t cilt jane t vetmit file t sistemit t suportuar nga t gjitha versionet e Wiondows-it. Ne do t flasim rreth file te lindur t sistemit t Windows 2000 ne kapitullin 11. Shume sisteme operative suportojne dy pjese t emrit t file-it, me t dyja pjeset t ndara ne kohe, si ne programin c.

Pr pjeset ne vazhdim kjo periudhe do t quhet file extension (zgjatja e file-ve), dhe zakonisht tregon dicka rreth file-it. Ne MS-DOS, pr shembull, emrat e file-ve jane t gjat 1 deri ne 8 karaktere, plus nj zgjatje optimale 1 deri ne 3 karaktere. Ne UNIX, madhesia e zgjatjes se file-it, nuk sht fikse, varet nga prdoruesi, ai e cakton at dhe nj file nuk mund t ket 2 ose me shume zgjatje ose prapashtesa, sic ndodh ne prog.c .Z, ku .Z zakonisht perdoret pr t treguar qe file (prog.c) sht komprimuar duke prdorur algoritmin e komprimimit Ziv-Lempel . Prapashtesa Kuptimi file.bak file.c file.gif file.hlp file.html file.jpg file.mp3 file.mpg file.o file.pdf file.ps file.tex file.txt file.zip Backup file C source program Compuserve Graphical Interchange Format image Help file World Wide Web HyperText Markup Language document Still picture encoded with the JPEG standard Music encoded in MPEG layer 3 audio format Movie encoded with the MPEG standard Object file (compiler output, not yet linked) Portable Document Format file PostScript file Input for the TEX formatting program General text file Compressed archive

Figura 6-1. Disa nga prapashtesat tipike t file-ve. Ne disa sisteme operative prfshire dhe UNIX prapashtesat e file-ve jane thjesht konveksione dhe nuk jane t detyrueshme nga sistemi operativ, por filet mund t ruhen edhe me prapashtesa t tjera por qe ne fund t fundit nuk mund t njihen nga sistemi. Nj file i emertur si file.txt (text) mund t ket disa lloje t tjere, por ky emertim sht me shume si pr t kujtuar prmbajtjen e file-it. Nga ana tjetr nj kompilator i gjuhes C, insiston qe file qe ai duhet t kompiloje duhet t jet nj file.c absolutisht dhe nuk mund t kompiloje file.* t tjere.

Konveksione t tilla jane vencanrisht shume t prdorshme, kur disa programe mund t kene ndryshime nga ato t file-it. Kompilatori i gjuhes C, pr shembull mund t ket nj list t file-ve qe mund t kompiloje dhe linkoje, disa nga file-at e C-se me disa file te assemblerit. Prapashtesat behen esencilale pr kompilatorin, per te kuptuar cilat file jane t C, cilat assembler dhe cilat t llojeve t tjere. Ne ndryshim, Windowsi sht nj program i vetedijshme per prapashtesat, t cilat i japin file-ve nj kuptim. Prdoruesit mund t ruajne prapashtesat edhe si ato t sistemit dhe mund te percaktojne per secilen, se cili program i zoteron ato. Kur nj prdorues klikon dy here mbi emrin e file-it, programi shenjon ne prapashtesen e programit qe do te egzekutohet, bashke me file-n. 6.1.2 File Structure ( Struktura ose ndertimi i nj file) File-t sht e mundur t strukturohen ne menyra t ndryshme. Tre menyrat me t mundeshme jane t ilustruara ne figuren 6-2. File-i ne figuren 6-1(a) sht nj sekuence e pastrukturuar bitesh. Ne fakt, sistemi operativ nuk njeh as nuk kujdeset se cfare prmban file. Gjithcka cfare ai shikon ose me sakt njeh, jane thjesht nj mori e madhe bitesh. Cfaredo kuptimi qe mund ti japim file-ve, duhet t jet ne nivelin e prdoruesit pr nj kuptim me t mire psikologjik. T dy sistemet oprotive si UNIX dhe Windows si kane t njjta konceptimet.

Figura 6-2. T tre llojet e file-ve. (a) Sekuence bitesh. (b) Sekuence regjistrimesh. (c) Pema structure. T kesh kujdesjen e sistemit operativ mbi file, nuk sht asgje tjetr vecse, nj sekuence e caktuar bitesh qe lejon nj fleksibilitet t madh. Prdoruesit e programeve mund t vendosin cfaredo qe deshirojne ne file-t e tyre dhe ti emertojne ato ne do menyre t deshiruar. Sistemi operativ nuk t ndihmon ne ket gje, por gjithashtu as nuk ta ndalon. Pr prdoruesit qe deshirojne t manipulojne dicka, pjesa ne vazhdim sht e rendesishme.

Hapi i pare i strukturimit tregohet ne fig. 6-2(b). Ne ket model, nj file trajtohet si nj sekuence rekordesh me gjatsi fikse. Qendra kryesore e ideve pr fillimin e nj sekuence rekordesh , sht ideja qe operacioni i leximit kthen nj rekord dhe operacioni i shkrimit e mbishkruan nj rekord. Shume (mainframe), sisteme operative t bazohen ne file sistem, me file te n, dhe keto file t ndertuara nga rekorde me nga 80 karaktere, qe ne fakt jane imazhe te kartave. Keto sisteme suportojne edhe file t ndertuara nga rekorde me 132 karaktere, qe jane t destinuar pr printerin. Programet lexojne ne hyrje, daljen e 80 karaktereve dhe e shkruan ne dalje me 132 karaktere, edhe pse 52 te fundit mund te jene hapesira boshe. Pra, sistemi funksionon ne kete menyre. Tipi i tret, tregohet e figuren.6-2(c). Ne ket organizem, nj file sht i ndare ne nj peme rekoresh, jo domosdoshmerisht t gjithe t t njjts gjatsi, disa prej tyre prmbajne nj fushe eles ne nj pozicion te fiksuar t rekordit. Pema sht e renditur ne baze t fushave eles, ne menyre qe t ket nj kerkim t shpejt t nj elesi ne vecanti. Funksioni krysor ketu, nuk sht ai qe t kemi rekordin tjetr pasardhes, por qe sht dhe shume e mundeshme, por funksioni sht qe t kemi rekordin me nj eles t veant. Pr file-in zoo t figures 62(C), mund ti drejtohemi sistemit pr t patur nj record, celsi i te cilit per shembull sht pony, pa u preukupuar pr vendodhjen e sakt t tij ne file. Gjithashtu, nj rekord i ri mund t shtohet ne file, nga vet sistemi operativ, dhe nuk eshte perdoruesi ai qe vendos se ku do te qendroje. Ky tip file sht shume i ndryshem nga ai i biteve t pastrukturuar ne UNIX dhe ne Windows, por sht shume i prdorur ne kompjuterat mainframe.

6.1.3 File Types ( Tipat e File-ve)

Shume sisteme operative suportojne tipe te ndryshme file-ash. UNIX dhe Window, pr shembull, kane file dhe direktori t rregullta, UNIX ka gjithashtu karaktere dhe blllokues special pr file-t. Filet e rregullt jane t vetmit qe prmbajne informacion pr prdoruesit. T gjithe file-t e figures 6-2 jane t rregullt. Direktorit jane file sistem pr mirembajtjen e struktures t fileve sistem. Ne do t studjojme direktorit e ndermjetme. Karateret speciale t file-ve jane t realizuar pr input/output dhe prdoren tek modeli serial I/O devices ashtu si dhe terminalet, printerat dhe rrjeti. Bllokuesit special t file-ve prdoren tek modelet e disqeve. Filet e rregullt jane prgjithesisht ASCII ose binare. Filet ASCII jane t ndertuar nga rreshta karakteresh text. Ne disa sisteme secili rresht mbaron me nj karakter kthimi. Ne t tjere prdoret nj rresht i ri. Disa sisteme i prdorin t dyja llojet. Rrreshtat nuk duhen t jene t gjithe ne t njejten gjatsi. Avantazhi i madh i file-ve ASCII sht qe mund t jene t dukshem dhe t printueshem dhe mund t modifikohen me do lloj editori text. Gjithashtu, mund t sherbejne si input i ndonj programi. Filet binare ose numerike, qe nuk jane file me karaktere ASCII, zakonisht kane nj strukture t brendeshme te dukshme pr programet qe i prdorin. Pr shembull, ne figuren 6-3(a), shohim nj file binare t thjesht, t ekzekutohet nga nj version i UNIX. Edhe pse file sht nj sekunce bitesh, sistemi operativ e ekzekuton at file vetm ne se

jane t njohur nga sistemi si file t ndonj programi. Kjo behet ne 5 seksione: koka, teksi, data, rilokalizimi i biteve dhe simboli tabelar. Koka fillon me nj t ashtu quajtur numer magjik, i cili e njeh at si nj file t ekzekutueshem pr t ndaluar aksidente ne ekzekutim t nj file qe nuk sht i formatit t duhur. Pastaj kemi dimensionet e ndryshme t pjeseve t file, adresa e marre ne fillim, ne t cilen fillon ekzekutimi i tij dhe pastaj disa nga flamujt e gjendjeve. Keta ngarkohen ne memorje duke prdorur transferimin bit pr bit. Simboli tabelar sht prdorur pr testimin. Shembulli jone i dyt i nj file binar sht nj arkive, po nga UNIX. Konsiston ne nj prmbledhje e procedurave te librarise (moduleve) t kompiluara, por jo t linkuara. Secila prej tyre sht e prfaqesuar nga nga koka e cila prmban emrin e tij, krijimin e t dhenave, kodin e sigurise dhe madhesine. do sistem operativ duhet t jet ne gjendje t njohe t paktn nj lloj file. Por disa sistemi njohin shume lloje. Sistemet e vjetra si TOPS-20, shkuan shume larg ne ekzaminim e kohes se krijimit kur do file fillon ekzekutimin. Ne se nuk do t ishte keshtu, rikompilohet edhe njhere koka e filet. Ne UNIX programi sht i ndertuar ne shell execute. Prapashtesat e fileve jane t detyrueshme pr tu shkruar, keshtu qe sistemi operativ mund t interpretoje se cili program eshte perftuar dhe nga cili burim vjen. Duke patur file pa gabime si ato t problemave me lart, edhe sikur prdoruesi t mos t dije asgje nga projektimi i sistemit operativ, nuk gabon. Duke e konsideruar si nj shembull, sistemi ne t cilin nj program krijon nj file si output qe ka si prapashtese *.dat Ne se nj prdorues shkruan nj program qe mund t lexoje a.c, e kthen at ne indentitet standart dhe shkruan filen e transformuar si output, output-i do t jet po prape *.dat. Ne se prdorusi do ta kompiloje at, sistemi do ta refuzoje sepse file sht me prapashtesen e gabuar. Pr ta kopjuar nga file.dat ne file.c, do t trajtohet si e pasakt nga sistemi pr t mos bere realitet gabimet logjike t prdoruesve.

Figura 6-3. (a) File i ekzekutueshem. (b) File arkive.

6.1.4 File Access (aksesimi i File-ve)

Sistemet e para operative t siguronin vetem nj lloj aksesimi t file-ve: akses sekuencial. Ne keto sisteme, nj proes mund t lexoje t gjitha bitet ose rekordet t nj file t rregullt, duke filluar nga koka, por nuk mund ti anash-kalonte pa i lexuar me rregull. Filet sekuencial mund t riorganizohen, keshtu qe ata mund t lexohen sa here qe t jet e nevojshme. Filet sekuenciale, jane t nevojshem kur kemi memorizim ne disket, sesa ne disk. Disku kur sht i vene ne pune pr memorizimin e file-ve, sht e mundur t lexohen bitet ose rekordet t nj file jashte rregullit ose t aksesosh regjistrat me ane t elesit, sesa nga pozicioni. Bitet ose file-at ne te cilin rekordet mund t lexohen sado i rregullt qoft file, jane t quajtur t aksesueshem rastesisht. Jane t krkueshem nga shume aplikacione. Aksesimi rastesor sht thelbesor pr shume aplikacione, pr shembull, sistemet me baza t

dhenash. Pr shembull, sikur ne nj aeroport t marre ne telefon nj klient pr t prenotuar nj udhetim t caktuar, baza e t dhenave duhet ta kerkoje e te gjeje vetm prenotimet pr ket udhetim t caktuar, pa u dashur t shikoje me mijera regjistrime t tjera qe nuk kane lidhje me udhetimin ne fjale. Dy jane metodat e prdorura pr t prcaktuar se nga duhet t filloje leximi. I pari, ne do veprim leximi, kthen pozicionin e filet pr t filluar leximin. I dyti, nj veprim i vecant sht parashikuar pr t fiksuar pozicionin e sakt. Pas kerkimit, file mund t lexohet ne menyre sekuenciale duke filluar nga pozicioni prkats. Ne disa sisteme operative te mainframeve t vjetr, file-t jane t klasifikuar nga sekuencialiteti ose nga aksesimi rastesor, qe nga momenti qe jane krijuar. Kjo gje e lejon sistemin t prdore teknika t ndryshme pr memorizimin e seciles klase t file-ve. Sistemet operative moderne nuk e bejne ket klasifikim, t gjthe file-t e tyre jane automatikisht me aksesim rastesor. 6.1.5 File Attributes (atributet e file-ve)

do file ka nj emer dhe t dhenat vetjake t tij. Gjithashtu, t gjithe sistemet operative jane t familjarizuar me do informacion t file-ve, data dhe ora kur sht krijuar file dhe prmasat e tij ne kujtese. Ne do ti quajme keto informacione ekstra t file, me nj emer t vetm, atributet e tij. Lista e atributeve varion dhe ndryshon nga sistemi ne sistem. Tabela e figures 6-4, na tregon disa nga keto ndryshime. Asnj sistem operativ nuk i prmban t gjitha ato, por secila prej tyre sht e pranishme ne nj sistem operativ. Kater atributet e para kane lidhje me mbrojtjen t file-t, dhe tregojne se sa i aksesueshem sht ky file. T gjitha tipet e regjimeve jane t mundeshme, disa prej t cileve do ti studjme me vone. Ne disa sisteme operative, prdoruesit duhet t ket nj fjale kalim pr aksesimin e file-it, ne ket rast, fjale-kalimi duhet t jet nj nga atributet. Flamujt e gjendjeve jane bite qe kontrollojne fusha t vecanta t karakteristikave. Filet e fshehur, pr shembull, nuk jane t dukshem nga prdoruesit. Flamujt e gjendjeve jane si nj arkiv t cilt ruajne gjurme t nj ekzekutimi t mundshem t file-t ne backup. Programi i backup-it, pastron dhe sistemi operativ e kthen ate, pavaresisht se kur eshte ndryshuar file. Ne ket menyre programi i backup mund te na tregoje se cili file ka nevoje per backing up. Flamujt e prkohshem t nj file, lejon qe file te shenohet per fshirje automatike kur proesi qe ke ka krijuar ka mbaruar. Gjatsia e rekordit, pozicioni i celesit, gjatsia e celesit t fushave jane t pranishme vetm ne filet, rekordet e te cilave mund t kerkohen nepermjet nje celesi. Keta t fundit japin informacionin e duhur pr t gjetur celesat. Ne te shumten e hereve ngelen gjurmet kur eshte krijuar file, kur eshte aksesuar per here te fundit dhe kur eshte modifikuar. Keto jane t nevojshme pr qellime t ndryshme. Pr shembull, nj file burim, i cili sht modifikuar pas krijimit t filet objekt korrespondues, duhet t rikompilohet prseri. Dimensionet aktuale tregojne qe sesa i madh sht file aktualisht. Disa sisteme operative ne mainframe t vjetr, kerkonin qe madhesia maksimale e filet te specifikohej kur file ishte duke u krijuar, ne menyre qe te lejonte sitemin operativ, te krijonte qe ne fillim hapesiren e duhur ne memorje. Sistemet operative te workstation dhe PC jane mjaft inteligjnte pr ta bere ket gje vet, pa pasur nevojen e nj funksioni t tille.

Atributi Siguria Fjale-kalimi Krijuesi i celesit Pronari Read-only flag Hidden flag System flag Archive flag ASCII/binary flag Random flag

Kuptimi Kush mund t aksesoje file dhe ne cmenyre Fjale-kalim i nevojshem pr t aksesuar file-n Celesi i personit i cili e ka krijuar file-n Pronari aktual 0 pr lexim/shkrim; 1 vetm pr lexim 0 pr normal; 1 pr mos ta shfaqur ne list 0 pr file normal; 1 pr file sistem 0 sht ekzekutuar backup; 1 duhet t ekzekutohet backup 0 pr file ASCII; 1 pr file binare

access 0 vetm pr aksesim sekuencial; 1 pr aksesim rastesor 0 pr normal; 1 pr file t fshire kur mbaron proesi 0 pr t pa-kycurit; jo-zero pr t kycurit Numri i biteve ne nj rekord Celesi i brendshem i secilit rekord Numri i biteve ne fushen e celesit Data dhe ora e krijimit t file-t Data dhe ora e aksesimit t fundit t file

Tmporary flag Lock flags Record length Key position Key length Creation time Time of last access Time change of

last Data dhe ora e modifikimit t fundit t file Numri aktual i biteve ne file Numri maksimal i biteve ne file

Current size Maximum size

Figura 6-4. Disa atribute t mundeshme t nj file t caktuar.

6.1.6 File Operations (Operacionet e Fileve)

Filet ekzistojne pr t memorizuar informacion dhe qe mund t rikuperohet me vone. Sisteme t ndryshme prdorin operacione t ndryshme pr t memorizuar dhe rikuperuar me vone informacionin. Tani do t japim shembuj t sistemeve qe therrasin si proes rikuperimin e nj file : 1. Krijimi. File krijohet pa asnj t dhene. Qellimi i therritjes se tij sht t lajmeroje qe file sht ne ardhje dhe duhet t memorizohen disa nga atributet kryesore t tij. 2. Fshirja. Kur file nuk nevejitet me, ai duhet t fshihet qe t liroje hapesiren e memorjes. Egziston nj thirrje sistem pr ket qellim. 3. Hapja. Prpara se ta prdorim nj file, sht e domosdoshme qe nj proes ta hapi at. Qellimi i hapjes prpara se ta prdorim sht qe sistemi t memorizoje disa nga atributet e tij dhe t prcaktoje se ku ndodhet fillimi i tij ne memorje, dhe pr ta therritur at me vone pr ndonj veprim t mundeshem. 4. Mbyllja. Kur t gjitha aksesimet e file-it kane mbaruar, atributet e tij dhe adresa ne disk nuk jane me t nevojshme si informacione, sepse file duhet t mbyllet pr t liruar memorjen ne tabele. Shume sisteme e realizojne kete duke imponuar nje numer te caktuar file-sh qe mund te hapen ne nje proces. Nj disk sht i shkruar ne blloqe, dhe mbyllja e nje file, sjell dhe heqjen e te dhenave qe jane shkruar ne bllokun e fundit, edhe pse blloku mund t mos jet i mbushur plot. 5. Leximi. T dhenat lexohet nga file-i. Natyrisht, bitet vijne nga pozicione t sakta aktuale. Proesi qe e therret filen duhet t prcaktoje sasine e t dhenave dhe gjithashtu mund ti vendosi ato ne nje buffer. 6. Shkrimi. T dhenat jane t shkruara ne file, zakonisht ne pozicionin aktual. Ne se pozicioni aktual sht ne fundin e file-it, madhesia e file-it rritet. Ne se pozicioni aktual sht ne qender t file-it, t dhenat egzistuese, mbi-shkruhen dhe humbasin pergjithmone. 7. Append. Ky proes thirrje sht nj forme e t shkruajturit e limituar. Mundet vetm t shtosh t dhena ne fund t file-it. Sistemet qe t ofrojne nj sasi thirrjesh t vogel, zakonisht nuk e perdorin Append, por shume sisteme ofrojne menyre te ndryshme per ta realizuar ate, dhe keta sisteme ndonjehere kane Append. 8. Kerkimi. Pr t aksesuar file t rastesishem, sht nj metode e detyrueshme pr t specifikuar se nga do t meren keto t dhena. Nj metode e zakonshem sht nj therrje sistem, e cila kerkon qe pointuesi i file-t te specifikoje vendin ne file. Pas ketij veprimi i kerkimit sht i kompletuar, dhe t dhenat mund t lexohen ose t shkruhen tek ai pozicion. 9. Marrja e atributeve. Proeset shpesh kane nevoje pr sa me pak atribute pr t bere punen e tyre. Pr shembull, programi qe bn UNIX sht gjeresisht i prdorur pr t menaxhuar projekte t zhvillimit t programeve, duke u bazuar ne shume burime file-ash. Per te realizuar kete, duhet te shikoje atributet, emrin dhe kohen e modifikimit.

10. Vendosja e atributeve. Disa prej atributeve jane t prdoruesit dhe mund t ndryshohen vetm ne se file sht krijuar. Kjo thirrje e sistemit qe bn t mundur modulet e sigurise t t dhenave t file-it sht nj shembull shume i qart. Pjesa me e madhe e flamujve hyjne ne ket kategori. 11. Ri-emertimi. Shpesh ndodh qe prdoruesi duhet t ndryshoje emrin e nj file qe sht krijuar me pare. Kjo thirrje e sistemit qe e bn t mundur kete, nuk sht gjithmon e nevojshme sepse zakonisht mund t jet i kopjuar ne nje file t ri me emer t ri dhe file i vjetr sht fshire.

6.1.7 Nj shembull programi i cili prdor thirrjet sistem.

Ne kete seksion, do te shqyrtejme, nje program te thjesht ne UNIX, qe kopjon nj file nga ai burim ne nj file destinacion. Kjo sht e shprehur ne figuren 6-5 . Programi ka funksionet minimale dhe shume gabime, por jep nje ide te qarte sesi thirrjet sistem lidhen me file qe jane ne pune. Programi sht nj copy-file, qe mund edhe t therritet edhe nga linja e komandave si pr shembull: copyfile abc xyz emri i filet burim, emri i filet destinacion. Pr ta kopjuar file abc tek file xyz, ne se ekziston ky file ai do t mbishkruhet, ne rast t kundert do t krijohet. #include i katrt qe prdoret afer pjeses se lart t programit, realizon nj numer t madh prcaktimesh dhe prototipe t funksioneve t ndryshme qe duhet te perfshihen ne program. Reshti tjetr sht nj prototip pr nj funksion kryesor, qe eshte kerkuar nga ANSI C, por nuk sht e rendesishme pr qellimet tona. #define i pare sht prcaktimi i nj macro qe prcakton stringat BUF_SIZE si nje macro qe bn pjese ne numrin 4096. Programi t lejon t lexosh dhe t shkruash ne blloqe prej 4096 bitesh. Do t shfrytzoje emrat e konstanteve. #define i dyt mund t aksesoje file-n e hyrjes. Programi kryesor i thirrur ka dy argumenta , argc dhe argv. Keto jane t dhene nga sistemi operativ kur programi thirritet. I pari tregon se sa stringa ka ne rreshtin e komandave qe ka thirrur programi, prfshire ketu edhe emrin e programit. Kurse i dyti sht nj matrice pointer-ash nepr argumenta t cilt mund t kene keto vlera: argv[0] = "copyfile" argv|1] = "emri i filet burim" argv[2] = "emri i filet destinacion" Kemi deklaruar gjithesej pese variabla, dy t paret in_fd dhe out_fd mbajne t shtypur prshkruesit t file-ve kur nj file hapet. Rd_count dhe wt_count jane bite t kthyera nga leximi e shkrimi i thirrjeve t sistemit. Buffer-I i fundit sht prdorur pr t mbajtur t dhenat e marra pr shkrim. #include <sys/types.h> /* include necessary header files */ #include <fcntl.h>

#include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]); /* ANSI prototype */ #define BUF_SIZE 4096 /* use a buffer size of 4096 bytes */ #define OUTPUT_MODE 0700 /* protection bits for output file */ int main(int argc, char *argv[]) { int in_fd, out_fd, rd_count, wt_count; char buffer[BUF_SIZE]; if(argc != 3) exit(1); /* syntax error if argc is not 3 */ /* Open the input file and create the output file */ in_fd = open(argv[1], O_RDONLY); /* open the source file */ if(in_fd < 0) exit(2); /* if it cannot be opened, exit */ out_fd = creat(argv[2], OUTPUT_MODE); /* create the destination file */ if (out_fd < 0) exit(3); /* if it cannot be created, exit */ /* Copy loop */ while(TRUE) { rd_count = read(in_fd, buffer, BUF_SIZE); /* read a block of data */ if(rd_count <= 0) break; /* if end of file or error, exit loop */ wt_count = write(out_fd, buffer, rd_count); /* write data */ if (wt_count <= 0) exit(4); /* wt_count <= 0 is an error */ } /* Close the files */ close(in_fd); close(out_fd); if (rd_count == 0) /* no error on last read */ exit(0); else exit(5); /* error on last read */ Figura 6-5. Nj program i thjesht pr t kopjuar nj file. Argc kerkon argumentat dhe shikon ne se sht 3 apo jo. Ne se jo athere ajo ekziston ne gjendje kodi baras me 1. Cdo gjendje te kodit ndryshe nga 0, nenkupton qe ka ndodhur nj gabim. Kur ne kerkojme t hapim file-in burim dhe krijojme filen destinacion, athere ne se file burim sht plotsisht i hapur, sistemi i bashkangjit nj numer t vogel t plot tek in_fd, pr t specifikuar filen. Nenthirrjet mund ta inkludojne ket numer t plot keshtu qe sistemi e di cili eshte file qe ai kerkon. Ne menyre t ngjashme, ne se file destinacion sht plotsisht i krijuar, athere out_fd merr nj vlere pr ta specifikuar at. Argumenti i dyt pr t krijuar, vendos modulin e sigurise. Ne se si ata t hapur ose t krijuar deshtojne, athere file konrrespondues vendoset ne 1 dhe programi mbaron me nj gabim ne kod. Tani kemi ciklin e kopjimit. Ai fillon me leximin ne 4 KB t t dhenave t buffer-it. Thirret procedura lexo, e cila invokon thirrjen lexo t sistemit. Paramatri i pare indetifikon filen, i dyti e con ne buffer, dhe i treti tregon sa bite ka pr t lexuar. Vlera qe

i bashkangjitet rd_count jep numrin e biteve t lexuara aktualisht. Normalisht, do t jet 4096 e pritur, ne se jane t vendosur t gjithe bitet ne file. Kur kemi fundin e filet do t jet 0 ne se rd_count sht gjithmone 0 ose negative, athere kopjimi nuk mund t vazhdoje keshtu qe kemi nj break ne ekzekutim. Thirja pr shkrim output-et nga buffer-i pr ne filen destinacion, bn qe parametri i pare t prcaktoje filen, i dyti ta coj ne buffer dhe i treti t tregoje se sa ka shkruar dhe lexuar paralelisht. Veme re qe numerimi i biteve sht numri aktual i biteve t lexuara, jo BUF_SIZE. Kjo sht e rendesishme sepse leximi i fundit nuk do t ktheje 4096, por do t shtohet me 4KB. Kur file ne hyrje sht prdorur nga proesi, athere thirja e pare parashikon fundin 0 tek rd_count, i cili do ta beje programin t dale nga cikli. Ne ket rast dy filet jane t mbyllur dhe programi do t mbyllet normalisht.

6.1.8 Memory-Mapped Files

Sisteme t ndryshme kane ofruar nj menyre pr t hartzuar filet ne hapesiren e adresave t nj proesi ne ekzekutim. Nga ana konceptuale mund t imagjinojme pranine e dy thirrjeve t ndryshme t sistemit operativ, hartezur dhe i johartezuar. I pari jep nj emr t filet dhe nj adrese virtuale qe bn qe sistemi operativ, hartezon nj file ne hapesiren e adresave virtuale. Pr shembull, Supozojme se nj file F qe ka gjatsine prej 64KB, sht i hartzuar ne adresa virtuale duke filluar nga 512K. Keshtu qe do instruksion makine qe lexon prmbajtjen e biteve ne 512K, vine 0 bit tek file-i. Ne t njjtn menyre nj adrese e shkruar nga 512K + 21000 bite 21000 modifikon byte 21000 te file. Kur proesi mbaron, file-i i modifikuar, lihet ne disk si t ishte i ndryshuar nga nj kobinim kerkim-shkrim nga thirrjet e sistemit. Cfare ndodh ne te vertete eshte se tabelat e brendeshme te sistemit jane ndryshuar pr ta bere filen t behet suport pr t mbajtur memorjen 512K t lokalizuar ne 576K. Keshtu nje lezim prej 512K, shkaton nje page fault, duke e cuar ne faqen 0 te filet. Po ashtu qe nj lexim nga 512K + 1100 shkakton nje page fault, duke sjelle ne faqe permbajtjen e asaj adrese, pas se ciles shkrimi ne memorie mund te ndodhi. Ne qofte se kjo faqe eshte menjanuar nga algoritmat e zevendesimit te faqeve, ajo eshte shkruar perseri, ne vendin e duhur ne file. Kur proesi mbaron, t gjitha faqet e hartzuara, faqete modifikuara, u kthehen fileve te tyre. Hartzimi i fileve, funksionon me mire ne nj sistem qe suporton segmentimin. Ne nj sistem t tille do file mund t hartzohet ne segmentin e vet, ne menyre qe bitet e file-it t jene edhe bitet e segmentit. Figura 6-6(a), na tregon nj proes qe ka dy segmente me tekst dhe te dhena. Supozojme se ky proes i kopimit t file-it si dhe programi i meparshem, hartzon me pare filen burim ne nj segment, me pas krijohet nj boshllek segmentar dhe hartzimi i file-it destinacion vendoset aty.

Figure 6-6. (a) Nj proess segmentar prpara hartzimit t file-ve ne hapesiren e adresave. (b) Proesi pas hartzimit ekziston nj file, brenda nj segmenti dhe krijon nj segment t ri. Proesi kopjon segmentin burim ne segmentin destinacion duke prdorur nj cikel t zakonshem kopjimi. As thirrjet lexim dhe shkrim t sistemit nuk jane t nevojshme, dhe kur gjithcka eshte kryer, ai mund t ekzekutoje thirrjen chartzimin t sistemit t levize filen nga hapesira e adresave e pastaj t dali nga programi. File output jrvz nuk do t ekzistoje deri sa t krijohet ne menyre t drejtprdrejt. Neprmjet hartzimit t file-ve, eleminojme nevojen e I/O dhe kjo mund ta beje programin me t leht. Ka disa probleme vetjake: 1. sht e veshtire pr sistemin t njohe gjatsine e sakt t file-it output jrvz. 2. mund t na tregoje numrin maksimal t faqeve t shkruara, por ne asnj menyre t njohe se sa bite jane shkruar ne t. 3. supozojme se programi prdor faqen 0, por pas ekzekutimit edhe bitet do t jene 0. 4. File hartzohet nga nj proes por hapet per tu lexuar nga nj proese tjetr. Ne qofte se procesi i pare ka modifikuar nje faqe, ky ndryshim nuk do te reflektohet ne file qe eshe ne disk, deri sa faqja te jete hequr. Sistemi duhet te kete shume kujdes per tu siguruar qe dy proceset nuk e shohin versionin kontrakditor te file. 5. file mund t jet me i gjat se segmenti ose me i gjat se hapesira e adresave virtuale. E vetjma menyre e zgjidhjes sht qe sistemi te hartezoje nje pjese te file, sesa te gjithe file. 6.2 DIREKTORIT Pr t ruajtur ose mbajtur pjese nga skedare, sistemet e skedareve kane direktori ose foldera ( dosje ), t cilat ne shume sisteme jane vet skedaret. Ne ket paragraf do t diskutojme pr direktorit, organizimin e tyre, karakteristikat dhe operacionet e ndryshme qe mund t ekzekutohen ne to. 6.2.1 Sistemet me nj nivel direktorie Forma me e thjesht e sistemeve t direktorive sht ai me nj direktori qe prmban t gjithe skedaret. Nganjhere quhet edhe direktoria rrenj, por meqenese sht e vetmja

direktori, emri nuk ka shume rendesi. Ne kompjuterat e hershem personal ky system ishte i zakonshem sepse prgjithesisht kishte vetm nj prdorues. Megjithat cuditrisht superkompjuteri i pare ne bot CDC 6600 kishte nj direktori t vetme pr gjithe skedaret edhe pse prdorej nga shume prdorues ne t njjtn kohe. Kjo gje behej pa dyshim pr t mbajtur dizajnin e software-it sa me t thjesht. Nj shembull i sistemit me nj direktori sht dhene ne figure 6-7. Ketu direktoria prmban 4 skedare. "Zotruesit " e skedareve jane treguar ne figure, jo emrat e skedareve (sepse na interesojne ato qe i prmbajne, gje pr at qe do flasim me posht). Avantazhi i kesaj skeme qendron tek thjeshtsia e saj dhe tek aftsia pr t lokalizuar shpejt skedaret, pasi ne fund t fundit ekziston vetm nj vend pr t kerkuar.
Root directory

Figura 6-7. Sistem me nj nivel direktorie qe prban 4 skedare qe zotrohen nga njerez t ndryshem A , B Problemi ne t pasurin vetm nj direktori ne nj sistem me shume perdorues, sht se prdorues t ndryshem mund t prdorin aksidentalisht t njjtin emer pr skedaret e tyre. Pr shembull ne qoft se prdoruesi A krijon nj skedar t quajtur mailbox dhe me pas prdoruesi B krijon gjithashtu nj skedar me t njjtin emer mailbox, skedari i B-se do t mbishkruhet mbi at t A-se. Pr pasoje kjo skeme nuk prdoret me ne sistemet me shume prdorues, por mund t prdoret pr nj sistem t vogel pr shembull ne nj sistem ne nj makine qe sht dizenjuar pr t ruajtur profilet pr nj numer t vogel drivers.

6.2.2 Sistemet me dy nivele direktorish Pr t shmangur konfliktet t shkaktuara nga prdorues t ndryshem qe zgjedhin t njjtin emer pr skedaret e tyre, hapi i dyt sht ti japim do prdoruesi nj direktori private. Ne ket menyre emrat e zgjedhur prej nj prdoruesi nuk interferojne me emrat e zgjedhur nga nj prdorues tjetr dhe nuk ka problem, n qoft se i njjti emer mund t shfaqet ne me shume se nj direktori. Ky dizajne con tek sistemi i paraqitur ne figuren 6.8. Ky dizajn prdoret me shume ne kompjuterat me shume prdorues ose ne nj rrjet t thjesht kompjuterash personal qe punojne me nj server t prbashket ne nj rrjet lokal.

Root directory User directory

Figura 6-8. Nj sistem direktorie me dy nivele. Shkronjat tregojne zotruesit e direktorive dhe skedareve. Ajo cfare nenkuptohet ne ket dizajn eshte qe, kur prdoruesi prpiqet t hape nj skedar sistemi e di cili prdorues sht, ne menyre qe t dije se ne cilen direktori t kerkoje. Pr pasoje nj procedure hyrese sht e nevojshme, ne t cilen prdoruesi specifikon emrin identifikues ose hyres, dicka qe nuk kerkohet ne sistemet me nj nivel direktorie. Kur ky sistem zbatohet ne menyren e tij me themelore, prdoruesit kane t drejt hyrje vetm ne skedaret e direktorive t veta. Megjithat nj shtese e vogel sht qe i lejon prdoruesit t hapin skedaret e prdoruesve t tjere duke dhene disa t dhena pr skedaret e t cilit po hap. Keshtu pr shembull: Hap (" x ") Mund t jet komanda ose thirrja pr t hapur skedarin x t direktorise se prdoruesit dhe Hap (" nancy / x") Mund t jet thirrja pr t hapur direktorine e nj prdoruesi tjetr, Nancy. 6.2.3.Sisteme me shume direktori (hierarkike) Hierarkia me dy nivele shmang konfliktet e emrave ndermjet prdoruesve, por nuk sht e kenaqshme pr prdoruesit me nj numer shume t madh skedaresh. Edhe kompjuterat personal pr nj prdorues t vetm nuk sht i prshtatshem. Shpesh prdorues t ndryshem ndjejne nevojen apo kane deshire ti grupojne skedaret e tyre sipas nj logjike. Pr shembull, nj profesor deshiron t ket nj koleksion skedaresh qe t gjitha bashke t formojne nj liber qe po shkruan pr nj kurs t vecant, nj koleksion t dyt skedaresh qe prmbajne programet e studentve t pranuar pr nj kurs tjetr, nj grup t tret skedaresh qe prmbajne kodet e nj sistemi t avancuar shkrues-kompilues qe ai po nderton, nj grup t katrt skedaresh qe prmban projekt-propozime, si dhe nj skedar tjetr pr postn elektonike, oraret e takimeve, letrat qe po shkruan, lojra e keshtu me radhe. Ne nj fare menyre sht e nevojshme qe keto skedare t grupohen ne nj menyre t thjesht, t zgjedhur nga vet prdoruesi. Pr ket vjen ne ndihme nj hierarki e prgjithshme (nj peme direktorish). Me ket lloj prafrimi do prdorues mund t ket aq direktori sa ka nevoje ai, ne menyre qe skedaret t grupohen ne menyra sa me t natyrshme. Ky lloj prafrimi sht dhene ne figuren 6-9. Ketu direktorit A, B dhe C, nen

direktorine rrenj i prkasin secila nj prdoruesi t ndryshem, dy prej t cileve kane krijuar nendirektori pr projektet t ndryshme qe ato po punojne.
Root directory User directory

User subdirectories

User file

Figura 6-9. Nj sistem direktorish hierarkike Mundesia qe kane prdoruesit pr t krijuar nj numer arbitrar nendirektorish ofron nj mjet strukture t fuqishem pr prdoruesit, ne menyre qe t organizojne punen e tyre. Pr ket arsye, afersisht t gjithe sistemet modern t skedareve jane t organizuara ne ket menyre. 6.2.4 Emrat e path-it Kur sistemi i skedareve sht organizuar si nj peme direktorish, ne nj fare menyre sht e nevojshme t specifikohen emrat e skedareve. Zakonisht dy lloj metodash prdoren. Ne metoden e pare do skedari i sht dhene nj emer path-i, i quajtur path absolut qe prmban path-in nga direktoria rrenj deri ne skedar. Si pr shembull, path-i /usr/ast/mailbox nenkupton qe direktoria rrenj prmban nj nendirektori usr, e cila prmban nj tjetr nendirektori ast, e cila nga ana e saj prmban skedarin mailbox. Path-et absolut t emrit fillojne gjithmone nga direktoria rrenj dhe jane unike. Ne UNIX komponentt e trajektores jane t ndara me /. Ne Windows ndaresi sht \. Ne MULTICS ndaresi sht >. Domethene, i njjti path absolut i emrit mund t shkruhej ne keto tre sisteme keshtu: Windows UNIX MULTICS \usr\ast\mailbox /usr/ast/mailbox >usr>ast>mailbox

Nuk ka rendesi se cfare karakteri prdor, mjafton, ne qoft se karakteri i pare i path-it t emrit sht ndaresi athere kemi t bejme me path absolut. Lloji tjetr sht path-i relative i emrit. Ky prdoret ne lidhje me konceptin e working directory (direktoria e punes), e quajtur gjithashtu direktoria aktuale. Nj prdorues

mund t prcaktoje nj direktori si working directory aktuale ne t cilen emrat e path-it qe nuk fillojne nga directoria rrenj merren relativisht ne workind directory. Pr shembull, ne qoft se working directory sht /usr/ast athere skedari path-i absolut i t cilit sht /usr/ast/mailbox mund ti referohemi thjesht si mailbox. Me fjale t tjera komanda ne UNIX cp/usr/ast/mailbox/usr/ast/mailbox.bak dhe komanda cp mailbox mailbox.bak bejne ekzaktsisht t njjtn gje, ne qoft se working directory sht /usr/ast. Forma relative shpesh sht me i prshtatshem por bn t njjtn gje si forma absolute. Disa programe kane nevoje qe t kene hyrje ne disa skedare specifike pa marre parasysh se cfare working directory sht. Ne ket rast duhet prdorur gjithmone path-i absolut i emrit. Pr shembull, nj spelling checker mund t ket nevoje qe t lexohet /usr/lib/dictionary pr t punuar me t. Duhet t prdoret path-i absolut i emrit ne ket rast, sepse nuk e di se cila working directory mund t jet kur t thirret komanda. Path-i absolut i emrit funksionon gjithmone pavaresisht se cila working directory sht. Sigurisht ne qoft se spelling checker ka nevoje pr nj numer t madh skedaresh nga /usr/lib, nj mundesi tjetr mund t ishte qe ne fillim t ndryshoje direktorine ku po punon (working directory), ne /usr/lib dhe pastaj t prdore thjesht dictionary, si parametrin e pare pr ta hapur. Pr thjeshtsi, ndryshimi i working directory qe sigurisht dihet se ku ndodhet ne pemen e direktorive, mund t prdoret path-i relative. do proes ka working directory e vet keshtu qe, kur nj proes ndryshon working directory dhe me vone kthehet prseri, asnj nga proeset e tjera nuk preken apo demtohen, dhe asnj gjurme e ndryshimeve t bera nuk mbetet ne sistemin e skedarit. Ne ket menyre sht gjithmone e sigurt ndryshimi i working directory pr nj proes, kurdohere qe sht e prshtatshme. Nga ana tjetr, ne qoft se library procedure ndryshon working directory e vet dhe nuk kthehet ne gjendje e vet fillestare kur mbaron pune, pjesa tjetr e programit mund t mos punoje meqenese supozimi se ku mund t ndodhet tani mund t jet i pavlefshem. Pr ket arsye, procedurat library rralle ndryshojne working directory dhe kur ndodh e ndryshojne prseri prpara se t kthehen. Shumica e sistemeve operative qe mbshtetin sistemet e direktorive hierarkike kane dy hyrje t vecanta ne do direktori "." dhe ".." t quajtura zakonisht "dot" dhe "dotdot". Dot i referohet direktorise aktuale; dotdot i referohet burimit t tij. Pr t pare se si prdoren, shikojme pemen e skedareve t UNIX ne figuren 6-10. Nj proes caktuar /usr/ast working directory e vet. Mund t prdoret, pr t shkuar tek pema. Pr shembull mund t kopjohet skedari /usr/lib/dictionary ne vet direktorine e vet duke prdorur komanden; cp ../lib/dictionary.

Path-i pare instrukton sistemin t shkoje lart (tek direktoria usr), pastaj t shkoje posht ne direktorine lib pr t gjetur skedarin dictionary. Root bin etc lib usr tmp directory

bin

etc

lib

usr

tmp ast jim lib

ast lib

jim dict /usr/jim

Figura 6-10. Nj peme direktorish ne UNIX Argumenti i dyt (dot) emeron direktorine aktuale. Kur komanda cp kap nj emer direktorie (duke prfshire edhe dot) si argumenti i tij i fundit, kopjon gjithe skedarin e gjendur atje. Sigurisht nj menyre normale e t kopjuarit do t ishte duke shtypur; Cp/usr/lib/dictionary. Ketu prdorimi i dot (pikes) i jep mundesi prdoruesit t mos shkruaje dictionary pr t dytn here. Edhe pse t shkruarit cp/usr/lib/dictionary dictionary punon njlloj sikurse edhe cp/usr/lib/dictionary/usr/ast/dictionary

T gjitha keto bejne ekzaktsisht t njjtn gje.

6.2.5 Operacionet e direktorive Thirrjet e sistemit t lejuar pr t menaxhuar direktorit shfaq me shume variacion nga sistemi ne sistem se sa sistemi i thirrjeve pr skedaret. Pr t dhene nj ilustrim se cfare jane dhe punes qe bejne po japim nj shembull (marre nga UNIX) 1. Create (Krijo). Nj direktori sht krijuar. Ajo sht boshe, prvec dot (pikes) dhe dotdot (pike pike) t cilat vendosen aty automatikisht nga sistemi (ose ne disa raste nga mikdir program). 2. Delete (Fshi). Nj direktori sht fshire. Vetm nj direktori bosh mund t fshihet. Nj direktori qe prmban vetm dot dhe dotdot konsiderohet boshe, pasi keto nuk mund t fshihen zakonisht. 3. Opendir. Direktoria mund t lexohet. Pr shembull, pr t listuar gjithe skedaret e nj direktorie, nj program listues hap direktorine qe t lexoje emrat e gjithe skedareve qe ajo prmban. Qe nj direktori t lexohet ajo duhet me pare t hapet, analoge me hapjen dhe leximin e nj skedari. 4. Closedir. Kur nj direktori sht lexuar ajo duhet t mbyllet ne menyre qe t liroje hapesiren e tabeles se brendshme. 5. Readdir. Kjo thirrje kthen hyrjen e ardhshme ne nj direktori t hapur. Formalisht ishte e mundur qe direktorit t lexoheshin duke prdorur sistemin e zakonshem t leximit, por ky prafrim detyronte programuesin t dinte dhe t merrej me strukuren e brendeshme t direktorive. Ndersa readdir kthen nj hyrje ne formen standarte, pavaresisht se cila strukture e mundshme e direktorive po prdoret. 6. Rename(riemero). Ne shume referime direktorit jane njlloj si skedaret dhe mund t riemerohen me t njjtn menyre sikurse dhe skedaret. 7. Link (lidh). Linking (nderlidhja) sht nj teknike qe lejon, qe nj skedar t shfaqet ne me shume se nj direktori. Ky sistem thirres specifikon nj skedar ekzistues dhe nj path emri dhe krijon nj lidhje (link) nga skedari ekzistues tek emri i specifikuar nga path-i. Ne ket menyre i njjti skedar mund t shfaqet ne shume direktori. Nj link sipas kesaj menyre qe shton numeruesit ne nyjet e skedareve ( nyjet e skedareve sherbejne pr t ruajtur gjurmet e hyrjeve t shumta t direktorive qe prmbajne skedarin), zakonisht quhet lidhje e veshtire hard link. 8. Unlink (prish lidhjen ). Nj hyrje e direktorise sht hequr. Ne qoft se skedari qe iu prish lidhja ndodhet vetm ne nj direktori (rasti i zakonshem ), athere ai sht hequr fare nga sistemi i skedareve. Ne qoft se ndodhet ne shume direktori, vetm pathi-i i specifikuar i emrit sht hequr. T tjerat mbetn. Ne UNIX sistemi i thirrjeve pr t fshire skedaret (i prmendur me lart ) sht ne fakt unlink. Lista e dhene me lart jep disa nga thirrjet me t rendesishme, por ka edhe disa t tjera gjithashtu t rendesishme si pr shembull, menaxhimi i informacionit t proteksionit shoqeruar me nj direktori.

6.3 IMPLEMENTIMI I FILE SYSTEM Tani sht koha pr t kaluar nga kendveshtrimi i prdoruesit, mbi file system, ne kendveshtrimin e implementuesit. Prdoruesit jane t interesuar t dine si emerohen fileat, fare veprimesh i lejohen atyre, si do t jene pemet e direktorive, dhe eshtje t tjera t nderfaqimit. Implementuesit jane t interesuar si ruhen file-t dhe direktorit, si behet menaxhimi i hapesires ne disk, dhe si t bejne qe do gje t funksionoje me efience dhe qendrueshmeri. Me posht do t analizohen disa nga problemet e mesiprme pr t pare kush jane kerkesat, problemet dhe t metat.

FILE SYSTEM LAYOUT (sistemimi i file-system) File system-et ruhen ne disk. Shumica e disqeve mund t ndahen ne nj ose me shume particione, me file-system t pavarura nga nj particion ne tjetrin. Sektori 0 i diskut quhet MBR (Master Boot Record) dhe prdoret pr t boot-uar kompjuterin. Fundi i MBR-s prmban tabelen particion (partition table). Kjo tabele jep adresat e fillimit dhe t fundit t do particioni. Nj nga particionet ne tabele shenohet si particioni aktiv. Kur kompjuteri boot-ohet, BIOS-i lexon dhe ekzekuton MBR-n. Gjeja e pare qe programi MBR bn, sht t lokalizoje particionin aktiv, t lexoje ne bllokun e tij t pare, t quajtur boot block, dhe ta ekzekutoje at. Programi ne boot block ngarkon SO, qe ndodhet ne at particion. Pr t qene uniforme, do particion fillon me nj boot block, edhe pse ai mund t mos prmbaje nj sistem operativ boot-imi. Por duhet ta ket nj t tille ne nj t ardhme, prandaj rezervimi i nj boot-block sht nj ide e mire, gjithesesi. Prve startimit me nj boot block, sistemimi i particionit t nj disku varion nga nj filesystem ne tjetrin. Zakonisht file-system-et do t prmbajne nj nga objektet e meposhtme t treguara ne fig. 6.11. I pari sht nj superblock. Ai prmban t gjithe parametrat ky mbi file system dhe lexohet ne memorje kur kompjuteri boot-ohet, ose kur file system prdoret pr here t pare. Ne superblock, informacioni tipik qe prfshihet sht nj numer magjik qe identifikon tipin e file system, numrin e blloqeve ne file system dhe informacione t tjera kye administrative. Me pas mund t ket informacion mbi blloqet e lira ne file system, pr shembull ne formen e nj bitmap-i ose nj liste pointer-ash. Ky informacion mund t ndiqet nga nyje, rreshta me strukturuara datash, nj pr file, qe tregojne do gje pr file-in. Mbas kesaj vjen direktoria root, qe prmban majen e pemes se file system-it. Si prfundim, pjesa e mbetur e diskut prmban t gjthe direktorit dhe file-t e tjera.

Fig. 6.11 Nj file system i mundshem

6.3.2 IMPLEMENTIMI I FILE-AVE eshtja me e rendesishme ne implementimin e fileve sht t dish pr do bllok disku, kujt file i prket. Ne SO t ndryshme prdoren metoda t ndryshme. Ketu do t analizojme disa prej tyre.

ALOKIMI I NJPASNJSHEM (CONTIGUOUS ALLOCATION) Skema me e thjesht e alokimit, sht t ruash do file si nj ekzekutim i njpasnjshem i blloqeve t diskut. Keshtu, ne nj disk me blloqe 1KB, nj file 50KB do t vendoset ne 50 blloqe t njpasnjshme. Me blloqe 2 KB, ai do t alokohet ne 25 blloqe t njpasnjshme. Ne fig. 6.12(a), tregohet nj shembull i alokimit t njpasnjshem, ku 40 blloqet e para tregohen duke u nisur me bllokun 0 ne t majt. Fillimisht, disku ishte bosh. Me pas nj file A, me gjatsi 4 blloqe shkruhet ne disk duke filluar nga blloku 0. Menjhere pas mbarimit t ketij file shkruhet file B, file prej 6 blloqesh. Vihet re qe do file fillon ne fillim t nj blloku t ri, keshtu n qoft se A ishte ishte me t vertet 3 blloqe, humbet pak hapesire ne fund t bllokut t fundit. Ne figure, tregohen 7 file, secili fillon ne fillim e bllokut pas fundit t bllokut para tij. Hijezimi sht bere pr t bere me t qart idene e ndarjes se file-ve.

Fig. 6.12 (a) Alokimi i njpasnjshem i hapesires se diskut nga 7 file. (b) Gjendja e diskut pasi file-t D e F jane fshire.

Alokimi i njpasnjshem ne disk ka 2 avantazhe kryesore. sht me i thjesht implementimi, sepse duke ditur ku jane blloqet e nj file nuk ka me nevoje t mbahen mend 2 numra: adresen ne disk t bllokut t pare dhe numrin e blloqeve ne file. Duke dhene numrin e bllokut t pare, numri i do blloku tjetr mund t behet duke bere nj mbledhje shume t thjesht. Performanca e t lexuarit sht shume e mire, sepse nj file i tr mund t lexohet me nj operim t vetm. Vetm nj kerkim nevojitet (ne bllokun e pare). Pas kesaj nuk nevojiten me kerkime dhe te dhenat futen me t gjithe gjeresine e brezit t ardhur nga disku. Prandaj thuhet se alokimi i njpasnjshem sht i thjesht pr tu implementuar dhe ka nj performance t shkelqyer. Fatkeqesisht, alokimi i njpasnjshem ka nj t met t madhe: me kalimin e kohes disku fragmentohet. Pr t kuptuar ket analizoni fig 6.12(b). Ketu dy file-t D dhe F jane fshire. Kur nj file fshihet, blloku i tij lirohet duke krijuar blloqe t lira pr ekzekutim ne disk. Disku nuk sht kompakt pr zhdukur keto vrima, po t ndodhte kjo athere t gjithe blloqet pas vrimes do t kopjoheshin (potencialisht miliona blloqe). Si rezultat, disku prbehet nga file dhe vrima, si t tregohen ne figure. Fillimisht, fragmentimi nuk prbn nj problem pr sa kohe qe nj file i ri shkruhet ne fund t diskut, duke ndjekur at para tij. Megjithat, disku do t mbushet dhe do t jet e nevojshme t behet disku kompakt, gje qe sht shume e shtrenjt, ose t riprdoret hapesira bosh e vrimave.

Riprdorimi i hapesires bosh kerkon krijimin e nj liste t vrimave. Megjithat kur nj file i ri krijohet, sht e nevojshme t dihet madhesia e tij prfundimtare, pr t zgjedhur keshtu nj vrime me madhesine e duhur pr ta vendosur. Imagjinoni pasojat prfundimtare t nj dizenjimi t tille. Prdoruesi do t filloje t prdori nj word proessor ose nj text editor pr t shkruar nj dokument. Gjeja e pare qe pyet programi sht: sa byte do t jet dokumenti prfundimtar. Duhet ti pr gjigjesh kesaj pyetje qe t vazhdoje programi, n qoft se nemri i dhene sht shume i vogel, programi do t prfundoje para kohe, sepse vrima sht plot dhe nuk ka ku t vendoset pjesa tjetr e file-t. N qoft se prdoruesi jep nj numer shume t madh si madhesi prfundimtare, pr shembull 100MB, editori nuk do t jet ne gjendje t gjeje nj vrime kaq t madhe dhe lajmeron qe file nuk mund t krijohet. Prdoruesi mund ta riprovoje duke dhene nj madhesi t re me t vogel, pr shembull 50 MB ose me shume derisa t gjendet nj madhesi e prshtatshme. Megjithat, akoma kjo skeme nuk sht e kenaqshme. Megjithat ka nj situat, ku alokimi i njpasnjshem sht i mundshem dhe mjaft i prdorur: ne CD-ROM-et. Ketu t gjithe madhesite e file-ve njihen ne avance dhe nuk do t ndryshojne kurre gjat prdorimit t here pas hershem t CD-ROM file system. Me vone do t shqyrtohen CD-ROM file system-et. Alokimi i njpasnjshem u prdor fillimisht ne disqe magnetike, kjo pr shkak t lehtsise ne operim dhe performancs se lart (athere nuk kishte shume rendesi qe nj kompjuter t ishte i thjesht pr nj prdorues faredo, friendliness). Me pas kjo ide u hodh posht pr shkak t nevojes qe lindi pr t njohur ne avance madhesine e file-t. Por me shpikjen e CD-ROM-eve, DVD-ve dhe mediave t tjera optike qe shkruhen vetm nj here, ideja e alokimit t njpasnjshem pati prseri sukses. Pr ket sht e rendesishme t studiohen sistemet dhe idet e vjetra, sepse ishin konceptualisht t lehta dhe t pastra, dhe ato mund t aplikohen ne sisteme ne t ardhmen, ne forma nga me t ndryshmet.

ALOKIMI ME LINKED LIST Menyra e dyt e ruajtjes se file-ve sht t ruash do file si linked list blloqesh t diskut, si ne fig 6.13. fjala e pare e do blloku prdoret si nj pointer pr bllokun pasardhes. Pjesa tjetr e bllokut prdoret pr datat. Ndryshe nga alokimi i njpasnjshem, do bllok i diskut mund t prdoret ne ket metode. Nuk humbet aspak hapesire bosh nga fragmentimi i diskut (prve fragmentimit t brendshem ne bllokun e fundit). Gjithashtu, sht e mjaftueshme pr hyrjen ne direktori, t ruhet ne disk adresa e bllokut t pare. Pastaj duke u nisur qe aty mund t gjesh pjesen tjetr. Nga ana tjetr, edhe pse leximi sekuencial i file-ve sht i drejtprdrejt, aksesimi random sht shume i ngadalt. Pr t shkuar ne bllokun n, SO duhet ta filloje leximin nga fillimi, domethene t lexoje n-1 blloqe para tij, nga nje per cdo rast. sht e qart se t gjitha keto lexime jane shume t ngadalshme.

Gjithashtu, sasia e te dhenave t ruajtura ne nj bllok nuk jane me fuqi e 2-it, sepse pointeri prdor disa byte pr vet. Nuk sht pr tu shqetsuar, por fakti i t pasurit nj madhesi t veant sht me pak efient, sepse shume programe lexojne dhe shkruajne ne blloqe, madhesia e t cilave sht fuqi e 2-it. Pak nga bytet e para t do blloku i ze pointeri i bllokut pasardhes. Leximet e t gjithe madhesise se bllokut kerkojne informacionin prkats dhe t grumbulluar nga 2 blloqet e disqeve, qe gjenerojne tituj nga kopjimi.

Fig. 6.13 Ruajtja e file-ve si nj linked list e blloqeve ne disk

LINKED LIST E ALOKIMIT DUKE PRDORUR NJ TABELE NE MEMORJE (Linked List Allocation Using a Table in Memory) Dy disavantazhet e linked list t alokimit mund t eleminohen duke vendosur pointer word nga do bllok ne nj tabele ne memorje. Fig. 6.14, tregon si sht e ndertuar tabela pr rastin e fig. 6.13. ne t dy figurat. Kemi dy file. File A prdor blloqet 4, 7, 2, 10, 12 sipas kesaj rradhe dhe file B prdor blloqet 6, 3, 11, 14 sipas kesaj rradhe. Duke prdorur tabelen ne fig. 6.14, ne mund t fillojme me bllokun 4 dhe t ndjekim zinxhirin deri ne fund. E njjta gje mund t behet duke filluar nga blloku 6. T dy zinxhiret shenohen me nj shenj t veant (pr shembull -1 ), qe nuk sht nj numer blloku i vlefshem. Nj tabele e tille ne memorien kryesore njihet si FAT ( File Action Table).

Fig. 6.14 (a) Linked list e alokimit, qe prdor nj file alocation table.

Duke prdorur ket organizim, i gjithe blloku sht i vlefshem pr te dhenat. Pr me tepr, aksesimi i rastit sht me i leht. Megjithat duhet t ndiqet do hallke e zinxhirit pr t gjetur nj offset t dhene brenda nj file, zinxhiri sht i tri ne memorie, keshtu ai mund t ndiqet hallke pas hallke, pa bere ndonj reference adresimi. Si metoda me prpara, pr hyrjen ne direktori sht e mjaftueshme t ruhet nj integer i vetm (numri i bllokut fillestar) pr t qene ne gjendje pr t lokalizuar t gjith blloqet e tjera, pavaresisht sa i madh sht file. Disavantazhi i pare i kesaj metode sht se e gjithe etiketa duhet t jet ne memorje gjat gjithe kohes se punimit. Me nj disk 20 GB me blloqe 1KB, tabeles i duhen 20 milion hyrje (entry), nj pr do 20 milion blloqet. do entry duhet t jet minimumi 3 byte. Pr shpejtsine e kerkimit duhet t jet 4 byte. Prandaj tabela do t zeje 60 ose 80MB t memories kryesore gjat gjithe kohes, kjo varet nga fakti n qoft se sistemi sht i optimizuar ne hapesire ose ne kohe. Pr rrjedhoje, tabela mund t vendoset ne memorje t faqueshme, por prseri do t zj nj pjese t madhe t memorjes virtuale dhe t diskut, gjithashtu do t gjeneroje nj trafik t madh faqesh.

NYJET-I (I- nodes) Metoda e fundit mbi njohjen e do blloku t file- ve prkats, ka t beje me shoqerimin e do file me nj strukture te dhenash t quajtur i-node ( index-node), e cila liston cilesite dhe adresat e blloqeve t file-ve. Nj shembull i thjesht paraqitet ne fig 6.15. Duke njohur i-node mund t gjenden t gjithe blloqet e file-ve. Avantazhi i madh i kesaj metode, mbi file-t e lidhura duke prdorur nj tabele brenda ne memorje sht se mjafton

t jet i-node ne memorje kur file prkats sht i hapur. N qoft se do i-node, ze nbyte dhe mund t hapen njheresh k file, memoria totale e zene nga i-node-t pr file-t e hapura do t jet kn byte. Vetm kaq hapesire duhet t rezervohet ne avance. Kjo hapesire sht shume e vogel e kahasuar me hapesiren e zene nga tabela e file-ve t prshkruar ne metoden e meparshme. Arsyeja sht e thjesht. Tabela pr listn e lidhur t t gjithe blloqeve sht proporcionale me madhesine e diskut. N qoft se disku ka n- blloqe, tabeles i duhen n entry. Sa me shume rritet disku, aq me shum rritet dhe tabela, ne menyre lineare. Ne kontrast me i-node-t qe kerkojne ne memorje nj hapesire, qe t jet proporcionale me numrin maksimal t file-ve qe mund t hapen njheresh. Nuk varen nga madhesia e diskut, qe mund t jet 1GB, 10GB, 100GB. Nj problem me i-node-t sht se fare ndodh kur ka hapesire vetm pr nj numer fiks adresash dhe file i ka prmasat me t medha se ky limit?! Nj zgjidhje do t ishte t ruhej adresa e fundit e diskut jo pr bllok te dhenash, por pr adresen e nj blloku ku ndodhen adresa blloqesh t tjere, t treguara ne fig.6.15. Nj zgjidhje me e avancuar do t ishte qe ne nj bllok t ruheshin dy apo me shume adresa blloqesh, t mbushur me adresa blloqesh t tjetr. I-node-t do t analizohen me mire ne UNIX.

Fig 6.15. Nj shembull i nj i-node

6.3.3 IMPLEMENTIMI I DIREKTORIVE Para se nj file t lexohet ai duhet t hapet. Kur nj file hapet, SO prdor path name t futur nga prdoruesi pr t lokalizuar direktorine. Direktoria siguron informacionin e nevojshem pr t gjetur blloqet. Ne varesi t sistemit, ky informacion mund t jet adresa ne disk t t gjith file-it (alokimi i njpasnjshem), numri i bllokut t pare (2 skemat e linked list), ose numrin e i-node-ve. Ne t gjitha rastet, funksioni kryesor i direktorise sht t fusi emrin e file-it ne ASCII, tek informacioni i nevojshem pr t gjetur te dhenat. Nj eshtje e rendesishme sht, se ku do t ruhen veorit e blloqeve t file-ve. do file system prmban cilesite e veta, si pr shembull, pronarin e do file, kohen e krijmit dhe t gjitha keto duhet t ruhen diku. Nj mundesi do t ishte t ruheshin direkt ne direktori. Shumica e sistemeve bejne keshtu. Kjo menyre tregohet ne fig. 6.16(a). Ne ket dizenjim t thjesht, direktoria prmban nj list me hyrje (entry) me madhesi fikse, nj pr do file, prmban emrin e filet (me gjatsi fikse), nj strukture t veorive t file-it dhe nj, apo me shume adresa ne disk, pr t treguar ku vendosen blloqet ne disk.

Fig. 6.16(a) Nj direktori e thjesht qe prmban entry me madhesi fikse, adresat ne disk dhe cilesite e direktorise. (b) Nj direktori ku do entry i referohet nj i-node.

Pr sistemet qe prdorin i-node, nj mundesi tjetr do t ishte ruajtja e cilesive ne i-node. Ne ket rast, hyrja ne direktori do t jet me e shkurtr, vetm nj emer file dhe nj numer i-node. Kjo tregohet ne fig. 6.16(b). Si do shihet me vone kjo metode ka avantazhet e veta mbi vendosjen e ketyre t dhenave ne direktori. Dy stukturat e mesiprme i prkasin prkatsisht MS/DOS Windows dhe UNIX. Si thame me lart file-t kane emra me gjatsi fikse t shkurtr, file-t e MS/DOS e kane emrin baze 1-8 karaktere dhe nj shtese 1-3 karaktere. Ne UNIX versioni 7, emrat e fileve ishin 1-4 karaktere duke prfshire dhe shtesat. SO moderne suportojne emra me t gjat file-sh. Si mund t implementohet kjo?

Menyra e e thjesht sht t vendoset nj limit i gjatsise se emrit t file-t, tipikisht 255 karaktere, dhe me pas, prdoret nj nga dizenjimet ne fig.6.16, me 255 karaktere t rezervuara pr do file. Kjo strukture sht e thjesht, por humbet nj sasi t madhe hapesire t direktorise, me qene se pak file kane emra me gjatsi kaq t madhe. Pr asye efience sht me e preferueshme nj strukture tjetr. Nj alternative do t ishte t mos prdorej ideja, qe t gjithe entry-t ne direktori t kene madhesi t njjt. Me ket metode, do entry ne direktori do t ket nj pjese fikse, qe fillon nga gjatsia e entry-it, me pas ndiqet nga te dhenat me nj format t caktuar, zakonisht prfshihet dhe pronari, data e krijimit, informacioni mbrojts dhe veori t tjera. Ky titull me nj gjatsi fikse ndiqet nga emri aktual i file-t, sa do i gjat qe ai t jet, si tregohet ne fig 6.17(a) ne formatin big-endian (pr shembull SPARC). Ne ket shembull kemi tre file, project-budget, personnel, foo. do emer file prfundon me nj karakter t veant (zakonisht 0), qe paraqitt ne figure nga nj kuti me nj kryq brenda.

Fig. 6.17 Dy menyra pr t trajtuar emrat e gjat t file-ve ne nj direktori. (a) ne rradhe (b) ne stive Nj disavantazh sht, qe kur nj file fshihet, gjenerohet ne direktori nj gap me madhesi qe varion dhe file tjetr qe mund t futet aty mund t mos prshtatet, (si ne rastin e fileve t njpasnjshem, vetm se ne ket rast kompaktimi i direktorise sht me i mundshem, sepse ndodhet komplet ne memorie). Nj problem tjetr sht, qe nj direktori e vetme mund t prfshije shume faqe, keshtu mund t ndodhi ndonj gabim gjat leximit t faqeve. Nj menyre tjetr pr t trajtuar variablin e gjatsise se emrit, sht duke i bere t gjithe entry-t me gjatsi fikse dhe mbajtja e t gjithe emrave t file-ve t bashkuara ne nj stive

ne fund t direktorise, si tregohet ne fig.6.17(b). Avantazhi i kesaj metode sht se kur nj file do t fshihet nga direktoria, file tjetr qe do t futet do t prshtatt gjithmone me hapesiren e lene nga file- i fshire. Gjithashtu duhet qe stiva t menaxhohet mire, sepse mund t ndodhin gabime gjat leximit. Nj fitim i vogel ketu sht, se nuk sht me e nevojshme qe emri i file-t t filloje ne kufinjt e fjales, keshtu qe nuk nevojiten karaktere t veanta mbushes pas emrit t file-t si ne fig 6.17(b) dhe qe jane t pranishme ne fig 6.17(a). Ne t gjithe dizenjimet, pr t gjetur nj file, direktorit kerkohen linearisht nga fillimi deri ne fund. Pr direktori shume t gjata, kerkimi linear mund t jet i ngadalt. Nj menyre pr t rritur shpejtsine, sht neprmjet hash table, t prdorur ne do direktori. Shenojme me n madhesine e tabeles. Pr t futur emrit e nj file, emri do t shtrihet nga 0 - n-1, pr shembull duke e pjestuar at me n prftohet mbetja. Ne menyre alternative, fjalet duke prfshire dhe emrin e file-t mund t mblidhen dhe kjo sasi t pjesohet me n. Ne ket metode entry e tabeles qe i korrespondon hash kodit analizohet. N qoft se ai nuk sht prdorur, ne file entry vendoset pointeri. File entry-it ndjekin tabelen hush. N qoft se ai sht prdorur, ndertohet nj list e lidhur, qe vendoset ne krye t tabeles dhe mbledh t gjithe entry-t me t njjtn vlere t hush-it. Kerkimi i nj file ndjek t njjtn procedure. Futet emri i file-it pr t gjetur tabelen hash. Kontrollen t gjithe titujt e hallkave t zinxhirit pr t pare ne se gjendet emri i file-it. N qoft se emri nuk ndodhet ne zinxhir do t thot qe ai nuk ndodhet as ne direktori. Prdorimi i nj hash table, ka avantazhin e nj kerkimi me t shpejt, por ka dhe disavantazhin e nj administrimi me kompleks. Ky model sht nj kandidat i mire, pr direktorit qe prmbajne qindra file. Nj menyre komplet ndryshe pr t prshpejtuar kerkimin ne direktori shume t medha sht kerkimi ne cache. Prpara se t filloje kerkimi ne nj direktorie, shikohet n qoft se kjo direktori ndodhet ne cache. N qoft se po, lokalizimi behet shume shpejt. Sigurisht qe kerkimi ne cache sht i vlefshem pr nj numer t vogel file-sh.

6.3.4 SHARED FILES Kur shume prdorues punojne ne nj grup, ndodh shpesh qe ata t prdorin file t shareuara. Pr ket sht me e leverdisshme, qe nj nj shared file t shfaqet vazhdimisht ne direktori t ndryshme qe i prkasin prdoruesve t ndryshem. Ne fig 6.18 paraqitet file sistemi i fig 6.9 me nj nga file e C-se prezente dhe ne direktorine e B-s po ashtu. Lidhja midis direktorise se B-s dhe nj shared file quhet nj link. File-i vet njihet si Direct Acyclic Graph ose DAG, dhe nuk quhet me peme. Sharimi i fileve sht i leverdisshem, por edhe ai ka disa probleme. Keshtu, n qoft se direktorit prmbajne adresa ne disk, athere duhet bere dhe nj kopje ketyre adresave ne direktorine e B-s kur behet linkimi i file-it. N qoft se B ose C i bashkangjiten ne menyre t njpasnjshme file-it, blloqet e reja do t listohen vetm ne direktorine e

prdoruesit qe ka bere bashkangjitjen. Ne ket rast nuk vlen ideja e share-imit, sepse ndryshimet e bera nuk jane t dukshme pr prdoruesit e tjere. Ka dy menyra pr t zgjidhur ket problem: Ne menyren e pare, blloqet nuk listohen ne direktori, por ne nj strukture t vogel te dhenash qe shoqeron file-in. Kjo menyre prdoret ne UNIX (ku struktura e vogel e te dhenave sht i-node). Ne menyren e dyt, B-ja lidhet me nj nga file-t e C-se duke krijuar nj file t ri ne sistem, t tipit LINK, dhe e fut ket file ne direktorine e B-se. File i ri prmban path name t filet me t cilin ai sht linkuar. Kur B-ja lexon nga linked file, SO kupton qe file qe po lexohet sht i tipit LINK, me pas kerkon emrin e file-it dhe e lexon at file. Kjo metode quhet symbolic linking.

Fig 6.18 File sistemi i kombinuar me nj shared file.

do njra nga keto metoda ka t metat e veta. Ne metoden e pare, ne momentin qe B-ja lidhet me shared file-in, i-node regjistron si pronar t file-it C-n. Krijimi i nj linku nuk e ndryshon pronesine(fig 6.19), por rrit numrin e linkeve ne i-node-t, keshtu SO e di sa entry ne direktori pointojne ne file.

Fig. 6.19 (a) Situata para linkimit. (b) pasi krijohet linkimi (c) pas zhvendosjes se file-it nga pronari origjinal. N qoft se C-ja kerkon t fshije file-in athere lind nj problem. N qoft se ai e fshin file-in dhe fshin i-nodet, B-ja do t kete nj entry ne direktori qe do t pointoje ne nj inode t pavlefshem. N qoft se i-node rishenohet tek nj file tjetr i B-s, linku do t pointoje ne nj file t gabuar. Sistemi mund ta kuptoje nga numri i i node-it n qoft se file sht akoma ne prdorim, por nuk sht e mundur t gjenden t gjithe entry-it e direktorise pr file-in, me qellimin pr ti fshire ato. Pointerat e direkorive nuk mund t ruhen ne i-node sepse aty mund t ket nj numer t limituar direktorish. E vetmja gje pr t bere sht fshirja e entry-t t direktorise se C-se, por e le i-node t paprekur, t setuar me 1, si tregohet ne fig 6.19(c). Ne tani kemi nj situat ku B-ja esht i vetmi qe ka nj directory entry ne C. N qoft se sistemi bn numerime, athere C-ja do t vazhdoje t jet strehe pr file-in, derisa B t vendosi ta fshije at, vetm n qoft se ne nj ast t caktuar numri shkon ne 0 dhe file fshihet. Me symbolic links, ky problem nuk lind sepse vetm prdoruesi e ka pointerin ne i-node. Prdoruesit qe kane linkuar ne file, vetm kane path name-in, jo pointerat tek i-node. Kur pronari e fshin file-in, ai shkatrrohet. Prpjekjet pr t prdorur ket file neprmjet nj symbolic link do t deshtojne kur sistemi nuk do t jet ne gjendje t lokalizoje file-in. Fshirja e nj symbolic link nuk ndikon fare tek file. Problemi me symbolic links sht se ata kerkojne nj extra titull. File prmban path name qe duhet t lexohet, me pas ky path analizohet dhe ndiqet do komponent i tij ne menyre t njpasnjshme, derisa t arrihet tek i-node. T gjtha keto veprime mund t kerkojne nj numer t madh aksesimesh. Pr me tepr pr do symbolic link, nevojitet nj extra inode, si sht ne rastin e nj extra blloku ku ruhet path-i, ku edhe pse emri i pathit sht i shkurtr ai duhet te ruhet ne nj i-node pr nj optimizim me t mire. Symbolic links kane avantazhin e t lidhurit (link) t file-ve kudo ne bot, vetm duke siguruar adresen e network-ut t kompjuterit ku ndodhet file si dhe path-in e tij ne ket kompjuter.

Symbolic links ose linke t nj tipi tjetr kane edhe nj problem tjetr. Kur lejohet nj link, filet mund t kene dy ose me shume path-e. Programet, qe fillojne ne nj direktori t caktuar dhe gjejne t gjithe filet ne at direktori dhe nendirektorit e saj, lokalizojne nj linked file shume here. Pr shembull, nj program qe hedh t gjitha file-et ne nj direktori dhe nendirektorit e tij ne nj disk, themi se ai mund t beje shume kopje t linked fileve. Pr me tepr, n qoft se disku lexohet ne nj makine tjetr, pa programin e kopjimit, linked file do t kopjohet dy here ne disk, ne vend qe t linkohet.

6. 3. 5 MENAXHIMI I HAPESIRES NE DISK ( Disk Space Management) File-t zakonisht ruhen ne disk, keshtu menaxhimi i hapesires ne disk sht nj problem shqetsues pr dizenjatoret e sistemit. Mund t prdoren dy strategji ne ruajtjen e nj file prej n-byte: alokohen n-byte t njpasnjshme ne disk, ose file ndahet ne nj numer (jo e domosdoshme) blloqesh t njpasnjshme. I njjti problem paraqitet ne menaxhimin e sistemeve t memories ndermjet segmentimit t pastr dhe faqosjes. Si kemi pare, ruajtja e nj file ne nj sekuence t njpasnjshme byte-sh, ndeshet me problemin e zmadhimit t file-it, dhe pr pasoje file duhet t vendoset ne disk. I njjti problem haset me segmentimin ne memorie, prve rastit t zhvendosjes se nj segmenti ne memorie, qe sht nj operacion relativisht i shpejt krahasuar me zhvendosjen e nj file nga nj pozicion i diskut ne nj tjetr. Pr ket arsye, gati t gjithe file systemet i copetojne filet e tyre ne ne blloqe me madhesi fikse qe nuk duhen t jene t pr brinjt (t afert).

Madhesia e Bllokut ( Block size) Kur u vendos qe ruajtja e fileve t behej ne blloqe me madhesi fikse, lindi pyetja se sa i madh duhet t ishte blloku. Duke ditur menyren e organizimit t diskut, kandidae me t mire pr njsi alokimi do t ishin: sektoret, track-u, cilindri (por t gjitha keto jane t varura nga pajisja, gje qe prbn nj minus) ne sistemin me faqe, faqja do t ishte zgjidhja me e mire. Pasja e nj njsie alokimi t madhe, si sht pr shembull cilindri, do t thot qe nj file edhe 1byte t jet, do t zeje t gjithe cilindrin. Studimet kane treguar qe madhesia mesatare ne UNIX sht 1KB, keshtu alokimi i nj blloku 32 KB pr do file do t shkaktonte humbjen e 31/32 ose 97% t hapesires totale ne disk. Nga ana tjetr, prdorimi i nj njsie alokimi t vogel do t beje qe do file t prbehet nga shume blloqe. Leximi i tyre do t kerkonte kohe dhe vonesa rrotullimi, keshtu qe leximi i nj file t prbere nga disa blloqe do t ishte i ngadalt. Si shembull po marrim nj disk me 131.072 byte pr track, me nj kohe rrotullimi 8.33 msec, dhe nj kohe mesatare kerkimi 10msec. Keshtu koha ne msec pr t lexuar nj file do t ishte shuma e kohes se kerkimit, me vone se ne rrotullimit, me kohet e transferimit. 10+4.165+(k/131072) 8.33

Grafiku solid ne fig. 6.20, shpreh shpejtsine e te dhenave pr nj disk t tille, ne varesi t madhesise se bllokut. Pr t llogaritur efiencen e hapesires, duhet bere prcaktimi i mesatares se madhesise se file-it. Pr thjeshtsi, le t pranojme si nj vlere mesatare t filet 2KB. Dy grafiqet mund t shpjegohen si me posht. Koha e aksesimit t nj blloku dominohet nga koha e kerkimit dhe nga vonesa e rrotullimit, keshtu koha pr aksesimin e nj blloku do t jet 14 msec, sa me shume te dhena trhiqen, me mire sht. Shpejtsia e transferimit t te dhenave rritet me rritjen e bllokut. Me blloqe t vogla, fuqi t 2-it, nuk humbet hapesire ne blloqe. Megjithat, me file 2KB dhe blloqe 4KB ka humbje hapesire ne bllok. Ne fakt, pak file jane shumefisha t madhesise se bllokut, keshtu gjithmone humbet pak hapesire ne bllokun e fundit t nj file.

Fig 6.20. Grafiku solid (ne t majt) paraqet shpejtsine e datave t nj disku. Grafiku me pika (ne t djatht) jep efiencen e hapesires ne disk. T gjithe filet pranohen 2 KB.

Grafiqet tregojne se prformanca dhe shfrytzimi i diskut jane ne konflikt. Blloqet e vogla jane t mire pr shfrytzimin e mire t hapesires ne disk, por t keqija pr performancen. Prandaj nevojitet nj kompromis mbi madhesine e blloqeve. Pr keto te dhena, blloqe 4KB do t ishin nj zgjidhje e mire, por shumica e SO e kane bere ket zgjedhje para shume kohesh kur parametrat e kompjuterit ishin ndryshe. Pr UNIX, me t prdorurat jane blloqet 1KB. Pr MS/DOS prdoren blloqe me madhesi fuqi t 2-it, nga 512byte 32KB, por kjo madhesi prcaktohet dhe nga madhesia e diskut (numri maksimal i blloqeve ne nj particion t diskut sht 216 , qe bn t kemi blloqe t medha ne disqe t medha). U be nj eksperiment nga Voges, pr t pare sa ndryshonte Windows NT nga UNTX ne prdorimin e file-ve. Ai vuri re se prdorimi i file-ve ne NT ishte me kompleks dhe shkruajti:

Kur ne shkruajme disa karaktere ne nj notepad text editor, ruajtja e tyre do t gjeneronte 26 thirrje sistem, duke prfshire dhe 3 prpjekje t deshtuara hapje, 1 file overwrite( t mbishkruar) dhe 4 sekuenca hapje dhe mbyllje shtese. Ai vezhgoi, file me madhesi mesatare (nga pesha e perdorimit), t lexuara si file 1 KB, file t shkruara si 2.3KB dhe file t lexuara dhe t shkruara si 4.2 KB. Duke pasur parasysh qe instituti Cornell kishte kompjutera shkencore te nje shkalle me te larte se te tjeter dhe diferencen ne teknikat e matjes, rezultatet konsistojne ne nje madhesi mesatare te file-t rreth 2 KB. Analizimi i blloqeve t lira (Keeping Track of Free Blocks) Nj eshtje tjetr e rendesishme pas eshtjes se madhesise se bllokut, sht si t analizohet hapesira e nj blloku. Pr ket prdoren 2 metoda, t treguara ne fig. 6.21. 1. E para konsiston ne prdorimin e nj linked list t blloqeve ne disk, ku do bllok mban sa me shume numra blloqesh t jet e mundur. do bllok ne list do t prmbaje nj numer prej 255 blloqesh, n qoft se blloku sht 1 KB dhe ka numer blloku 32-bit (nj ndarje nevojitet pr pointerin ne bllokun tjetr). Nj disk 16GB ka nevoje pr nj list t lire me max 16,794 blloqe, pr t mbajtur 224 numra blloqesh ne disk. Pr t mbajtur listn e lire prdoren blloqe boshe.

Fig. 6.21 (a) ruajtja e nj free list ne nj linked list (b) Nj bitmap

2. Teknika tjetr e menaxhimit t hapesires sht bitmap. Nj disk me n blloqe kerkon nj bitmap me n bite. Blloqet e lira paraqiten me 1 ne hartn e biteve, blloqet e alokuara me 0 (ose e anasjellta). Nj disk 16-GB ka 224 blloqe prej 1 KB, dhe prandaj duhen 224 bite pr hartn (map), qe kerkon 2048 blloqe. Nuk sht pr tu uditur fakti, qe bitmap kerkon me pak hapesire, prderisa kjo metode prdor 1 bit pr bllok, ndersa ne metoden linked list nevojiteshin 32-bit. Vetm kur disku sht pothuajse bosh (pr shembull ka shume pak blloqe t lira) athere do t jet metoda linked list ajo qe do t kerkoje me pak blloqe se metoda bitmap. Nga ana tjetr, n qoft se ka blloqe t lira, disa prej tyre mund t merren borxh pr t mbajtur free listn pa pasur humbje ne kapacietin e diskut. Kur prdoret metoda me free list, sht e nevojshme t ruhen ne memorie vetm nj bllok pointerash. Kur krijohet nj file, blloqet qe duhen pr ta ruajtur merren nga blloqet e pointerave. Kur file ekzekutohet, lexohet nj bllok i ri pointerash nga disku. Ne menyre t ngjashme, kur fshihet nj file, blloqet e tij mbeten t lira dhe i shtohen blloqeve t pointerave ne memorien kryesore. Kur ky bllok mbushet, ai shkruhet ne disk. Ne situata t tilla, disk I/O jane t pavlefshme. Marrim ne konsiderate situatn e fig. 6.22(a), ku blloku i pointerave ne memorien kryesore ka vend vetm pr dy entry t tjera. N qoft se nj file prej 3 blloqesh lirohet, ndodh nj overflow ne bllokun e pointerit dhe duhet t shkruhet ne disk, gje qe on ne situatn e figures 6.22(b). N qoft se file prej 3 blloqesh shkruhet, i gjithe blloku duhet t lexohet prseri, duke na kthyer tek fig.6.22(a). N qoft se file prej 3 blloqesh qe u shkruajt sht nj file temporal, kur ai lirohet, nj tjetr shkrim ne disk nevojitet, pr t shkruar komplet bllokun e pointerave mbrapsht ne disk. Shkurt, kur blloku i pointerave sht pothuajse bosh, shkrimi i nj serie file-sh temporale me jetgjatsi t shkurtr mund t shkaktoje shume disk I/O.

Fig 6.22. (a) Nj bllok pointerash pothuajse plot pr t liruar blloqet ne memorien kryesore dhe tre blloqe t pointerit ne disk. (b) Rezultati i lirimit t nj file me tre blloqe. (c) Nj strategji alternative pr t trajtuar tre blloqet e lira, entry-it e vijezuara paraqesin pointerat ne blloqet e liruara.

Nj menyre pr t evituar shumicen e disk I/O, sht ndarja e t gjithe bllokut t pointerave. Qe do t thot se kur blloqet lirohen, nuk kalohet me nga fig. 6.22(a) ne 6.22(b), por kalohet nga 6.22(a) ne 6.22(c), pr t bere ket lidhje. Ne ket menyre, sisteme mund t trajtoje serine e fileve tmporale pa nevojen e disk I/O. N qoft se blloku ne memorie mbushet, ai shkruhet ne disk dhe blloku gyjsem i mbushur lexohet. Ideja, ketu sht qe shumica e blloqeve t pointerave ne disk, t mbahen t mbushura(pr t minimizuar prdorimin e diskut) dhe mbajtja e atyre gjysem t mbushur ne memorie, keshtu ai mund trajtoje si krijimin e file-ve dhe fshirjen e tyre pa disk I/O ne freelistn. Me nj bitmap, sht e mundur t mbahet vetm nj bllok ne memorie, qe shkon ne disk vetm kur mbushet ose boshatiset. Nj prfitim i kesaj metode sht: berja e t gjithe alokimit nga nj bllok i vetm i bitmap-it, blloqet ne disk do t mbyllen se bashku, duke minimizuar punen e diskut. Meqenese bitmap sht nj strukture te dhenash me madhesi fikse, ne rastin kur kerneli sht i faqosur, bitmapi mund t vendoset ne memorien virtuale dhe ze faqe prej saj, t faqosura sipas nevojes.

Kuotat e Diskut ( disc quotas) Pr t ndaluar njerezit t keqtrajtojne hapesiren e diskut, SO multiuser zakonisht sigurojne nj mekanizem pr t mbrojtur hapesiren e diskut (kuotat e diskut). Ideja ne ket rast sht qe sistemi administrator ti lejoje pr prdorim do useri pjese filesh dhe blloqesh, duke u siguruar ne ket menyre qe do prdorues mos t kapeceje kuotat e tij. Nj mekanizem i tille prshkruhet me posht. Kur nj user hap nj file, atributet dhe adresat ne disk alokohen dhe vendosen ne nj tabele t file-it t hapur ne memorien kryesore. Ndermjet atributeve (karakteristikave), sht nj entry qe tregon se kush sht pronari. Zmadhimi i madhesise se do file, i ngarkohet kuotave t diskut. Nj tabele e dyt paraqet t gjitha kuotat pr do prdorues me nj file t hapur, edhe kur file mund t jet hapur nga dikush tjetr. Tabela tregohet ne fig. 6.23, kur t githe filet jane t mbyllur, t dhenat e filet shkruhen ne file-in e kuotave.

Fig. 6.23. Kuotat analizohen ne nj baze pr user-at ne nj tabele kuotash.

Kur behet nj entry e re ne tabelen e file-ve t hapur, ne t dhenat e kuotave t pronarit futet nj pointer pr t lehtsuar gjetjen e limeteve t veant. Sa here qe nj file-i i shtohet nj bllok, numri total i blloqeve qe i jane ngarkuar pronarit inkrementohet, dhe i behet nj kontroll kunder limitve hardware-ik ose software-ik. Limitet soft mund t kaprcehen, por ato hard, jo! Prpjekjet pr tiu bashkangjitur nj file kur sht arritur limiti hard sjell gjenerimin e nj error! Kontrolle analoge, gjithashtu ekzistojne edhe pr numrin e file-ve. Kur nj user prpiqet t hyje, sistemi kontrollon filen e kuotave, pr t pare n qoft se useri e ka kaluar limitin soft t vendosur pr numrin e fileve ose pr numrinr e blloqeve. N qoft se ky limit sht shkelur, shfaqet nj paralajmerim, dhe numri i paralajmerimeve t mbetura zvogelohet me 1. N qoft se numri i paralajmerimeve shkon ne 0, do t thot qe prdoruesi e ka injoruar parlajmerimin disa here, dhe nuk sht lejuar t hyje. Lejimi pr t hyre serish, do t diskutohet nga sistemi administrator. Kjo metode ka karakteristikn qe usera-t mund ta kalojne limitin soft, gjat nj sesioni. Kjo smund t ndodhi me limitet hard. 6.3.6 Besueshmeria e File system Shkatrrimi i nj file system sht ndonjhere, nj shkatrim me i madh se shkatrrimi i nj kompjuteri. Do t ishte e merzitshme, n qoft se nj kompjuter shkatrrohet nga zjarri, nga nj shkendije elektrike, ose nga disa kafe t derdhura mbi tastjere, dhe nj gje e tille do t kushtont disa lek, por t gjitha keto mund t zevendesohen me lehtsi. PC jo t shtrenjta mund dhe t zevendesohen duke shkuar tek nj tregetar.

N qoft se nj file i nj kompjuteri humbet ne menyre t parikthyeshme, prshkak t nj defekti hardware-ik ose software-ik, rikthimi i t gjithe informacionit ne gjendjen e meparshme do t ishte shume e veshtire, do t kerkonte me shume kohe dhe ndonjhere e pamundur. Pr disa njerez humbja e disa programeve, dokumenteve, databasa-ve, planeve t marketingut, etj do t ishte me pasoja katastrofike. File system-i nuk mund t siguroje mbrojtjen fizike t sistemit nga shkatrrimi, por mund t siguroje mbrojtjen e sistemit. Ne ket pjese do t analizohen disa nga menyrat pr mbajtjen e sigurt t file system-it. Floppy disqet jane zakonisht prfekte pr ket pune, por kjo vetm kur dalin nga fabrika, sepse shpesh ato prodhojne blloqe t keqia, gjat prdorimit. Edhe HDD, zakonisht kane blloqe t keqia duke filluar qe nga startimi. Do t ishte shume e shtrenjt n qoft se ato do t prodhoheshin pa asnj defekt. Si pame ne kapitullin 5, blloqet e keqija mund t trajtohen nga nj kontroller, i cili i zevendeson sektoret e keqinj me pjese t rezervuara, pikerisht pr ket pune. Prve kesaj teknike, ka dhe menyra t tjera t besueshme qe do t trajtohen me posht.

Backup-et Shumica e njerezve mendojne se berja e backup-eve sht dika e pavlefshme, vetm kur ne menyre t papritur disku i tyre vdes. Kompanit ia dine vleren te dhenave t tyre dhe pr ket i bejne backup atyre do dit, zakonisht ne nj tape. Tape-t moderne sot variojne nga disa dhjetra GB deri ne qindra GB, dhe mimi i tyre prcaktohet $/GB. Por berja e backup-eve nuk sht aq e padobishme sa duket. Backup-et prdoren pr t trajtuar nj nga problemet e meposhtme: Riprtritja nga nj shkatrrim Riprtritja nga nj gabim njerezor. E para mbulon rastet kur kompjuteri ndodh t shkatrrohet nga nj zjarr, shkendije elektrike, ose nj katastrofe natyrore. Ne praktike, keto gjera nuk ndodhin shume shpesh, prandaj shume njerez nuk i kushtojne rendesi backup-it. T tille njerez, nuk kane as sigurimin nga zjarri ne shtpit e tyre, pr t njjtn arsye. Arsyeja e dyt, sht qe prdoruesit, aksidentalisht, ndodh t fshijne nj file, qe me vone mund ti nevojitet prseri. Ky problem ndodh shume shpesh, prandaj Windows prdor nj direktori t veant t quajtur recycle bin, qe ruan filet e fshira, dhe nga ku prdoruesi mund ti marri pr ti prdorur kur ti nevojiten. Backup-et ne nj tape mund t rikthejne file qe jane fshire para nj kohe t gjat. Berja e nj backup-i kerkon shume kohe dhe shume hapesire, prandaj sht e rendesishme qe ky proes t behet me efience dhe ne menyre t leverdisshme. Keto probleme ngrejne ket eshtje: se pari, a duhet bere backup t gjithe file system-it apo vetm nj pjese t tij?!

Shumica e instalacioneve dhe te programeve t ekzekutueshme (ne kod binary) ruhen ne pjese t limituara t pemes se file system-it. Nuk sht e nevojshme ti behet backup fileve, qe mund ti behet instalimi nga CD-ROM-i i prodhimit. Gjithashtu, shumica e SO, kane direktori pr file temporale, t cilat prdoren edhe keto pr qellimin e backup-it. Ne UNIX, t gjithe file-t e veant (t pajisjeve I/O), ruhen ne direktorine /dew. Ne ket direktori backup-i, jo vetm qe nuk sht i nevojshem, por do t ishte dhe i rrezikshem, sepse backup- programi do t priste pafundesisht qe ky proes t prfundoje. Prfundimisht, sht e pelqyeshme ti behet backup vetm direktorive t veanta dhe do gjeje brenda tyre, prve komplet file system-it. Se dyti, sht e kot ti besh backup fileve qe nuk kane ndryshuar nga backup-i fundit, kjo na on ne idene e inkrementimit t depozitave. Me e thjeshta pr keto depozita sht ti behet ne menyre periodike nj backup i plot (javore ose mujore), dhe ti behet nj backup ditor atyre file-ve qe kane ndryshuar nga backup-i i fundit. Akoma me mire sht ti behet backup, vetm atyre fileve, qe kane ndryshuar. Kjo skeme minimizon kohen e backup-it, por e bn riprtritjen me komplekse. Kjo sepse si fillim behet riprtritje e backup-it t plot, i cili me pas ndiqet nga depozitat inkrementuese t rradhitura ne kah t kundert. Pr nj riprtritje me t thjesht prdoren metoda me t sofistikuara, ketu prfshihen dhe skemat me depozitat inkrementuese. Se treti, sasia e madhe e te dhenave seleksionohet ne grupe, dhe do t ishte e pelqyeshme t behet me pare kompresimi i te dhenave, e me pas t shkruhen ne tape. Por, ne shume algoritma kompresimi, mund t ndodhi qe nj boshllek i vetm ne tape-in e backup-it, ta beje tape-in t pa lexueshem. Prandaj duhet t mendohet me kujdes ideja e kompresimit t backup-stream-it. Se katrti, sht e veshtire ti besh nj backup nj file system-i aktiv. N qoft se file ose direktori shtohen, fshihen ose modifikohen gjat proesit t backup-it, backup-i prfundimtar nuk sht i qendrueshem. Meqenese proesi backup sht nj proes qe kerkon kohe, do t ishte e nevojshme, qe sistemi t mbahej jasht prdorimit pr nj nat, por nj gje e tille sht e papranueshme. Pr ket arsye, algoritmat jane ndertuar ne at menyre, qe t bejne nj fotografit astit t strukturave kritike t te dhenave t file system-it, dhe me pas t kerkojne ndryshime t metejshme t file-ve dhe direktorive duke i kopjuar ato, ne vend qe ti update-oje ato. Ne ket metode, ne momentin e kopjimit t gjendjes se astit t sistemit, sistemi sht i ngrire. Se pesti dhe se fundmi, berja e backup-eve sjell shume probleme joteknike brenda nj organizimi. Sistemi me i mire i sigurimit, mund t behet i pavlefshem, n qoft se sistemi administrator i mban t gjithe file-et backup ne zyren e tij dhe e le at t hapur pr t zbritur ne salle pr t marre disa printime. Ajo, qe mund t bnte nj spiun do t ishte ti hidhte t gjithe t dhenat ne nj disk dhe t zbrist posht me delikatese. Ne ket rast: Mirupafshim sigurim! Gjithashtu nj backup ditor nuk do t funksiononte ne rastin e nj zjarri qe po djeg kompjuterin, ose qe po djeg disqet ku ai sht ruajtur. Prandaj disqet duhet t mbahen ne vende ku jane me pak t rrezikuara, por edhe kjo ka anet e veta

negative. Me posht do t trajtohen vetm eshtje teknologjike, qe kane t bejne me backup-in e sistemit. Prdoren dy strategji pr t bere nj backup t nj disku ne nj tape: nj backup fizik ose nj backup logjik. Nj backup fizik starton ne adresen 0 t diskut, shkruan t gjithe blloqet e diskut ne tape-in output sipas rradhes, dhe ndalon kur sht kopjuar blloku i fundit. Nj program i tille sht i thjesht, gje qe nuk mund t thuhet pr programet e tjera t prdorshme. sht e rendesishme t behen disa komente pr backup-in fizik. Nga nj ane nuk ka vlere ti besh backup blloqeve t paprdorura. Keshtu, n qoft se nj program backup-i ka akses ne struktura te dhenash t vendosura ne blloqe t lira, ai mund t menjanoje backup-in e blloqeve t paprdorura. Megjithat, kaprcimi i blloqeve t paprdorura kerkon shkrimin e numrit t do blloku para do blloku (ose ekuivalentin), meqenese nuk sht gjithmone i vertet fakti qe blloku k ne tape t jet blloku k ne disk. Nj shqetsim tjetr sht backup-i i blloqeve t keqia. N qoft se t gjithe blloqet e keqia riadresohen nga kontolleri i diskut dhe i fshihen SO (si u prshkrua ne kapitullin 5.4.4), backup-i fizik do t funksiononte shume mire. Por n qoft se ato jane t dukshme pr SO dhe mbahen ne bishtin e blloqeve t keqia ose ne bitmap-e, sht shume e rendesishme, qe programi i backup-it t marri te drejtn pr t hyre ne ket informacion dhe t shmangi backup-in e tyre, pr t parandaluar erroret e pafundme t leximit t diskut gjat ketij proesi. Avantazhet kryesore t backup-it fizik jane: thjeshtsia dhe shpejtsia e madhe (mund t arrije shpejtsine e diskut). Disavantazhet kryesore t backup-it fizik jane: paaftsia pr t kaprcyer direktorit e zgjedhura, pr t bere inkrementimin e depozitave dhe ruajtja e file-ve individuale sipas kerkeses. Nj backup logjik fillon ne nj ose me shume direktori specifike dhe grumbullon ne menyre rekursive t gjithe file-t dhe direktorit e gjetura qe kane pesuar ndryshime nga nj database i meparshem ( pr shembull, nj backup pr nj depozit inkrementuese, ose nj sistem instalimi pr nj backup t plot). Pr ket ne nj backup logjik, tape i depozitave ka nj nj seri direktorish dhe filesh t identifikuara me kujdes, qe e bejne me t thjesht riprtritjen e nj file t vetm ose direktorie, sipas kerkeses. Meqenese backup-i logjik sht forma me e prdorur, le t analizojme ne detaje nj algoritem t zakonshem duke prdorur shembullin e fig 6.24. Shumica e sistemeve UNIX e prdorin ket algoritem. Ne figure shikohet nj peme filesh me direktori (katroret) dhe file (rrathet). Objektet e hijezuara jane modifikuar qe nga baza e t dhenave dhe prandaj duhet t behet backup-i. Objektet e hijezuara nuk kane nevoje ti behet backup-i.

Fig. 6.24. Nj file system qe do ti behet backup-i. Katroret jane direktori kurse rrathet jane file. Objektet e hijezuara jane te dhenat e modifikuar nga backup-i i fundit. do direktori dhe file etiketohet me numrin e i-node-it prkats. Ky algoritem, i bn backup t gjithe direktorive (madje dhe atyre t modifikuara) qe kane t njjtin rrugekalim me nj file ose direktori t modifikuar pr dy arsye: Se pari, pr t bere t mundur riprtritjen e file-ve dhe direktorive ne nj file system t ri ne nj kompjuter tjetr. Ne ket menyre backup-i mund t prdoret pr t transportuar nj file system t tre midis kompjuterave. Arsyeja e dyt e berjes backup direktorive t pamodifikuara sht, pr realizimin e nj riprtritje inkrementuese t nj file t vetm (zakonisht sht riprtritje nga nj gabim njerezor). Supozojme se nj backup i plot sht bere mbasditen e se djeles dhe nj backup tjetr mbasditn e se henes. T martn, direktoria /usr/jhs/pmj/nr3 fshihet, me t gjithe direktorit dhe file-t qe mbulonte. T merkuren ne mengjes, prdoruesi do t doje t riprtrije file-in /usr/jhs/pro/nr3/plans/summary. Por nuk sht e mundur qe ti behet riprtritje vetm file-it summary, sepse nuk ka vend ku ai t vendoset. Duhet, qe ne fillim, ti behet riprtritje direktorive numer 3 dhe plans. Pr t marre informacion mbi pronarin e tyre, kohen, etj, keto direktori duhet t jene ne tape-in e backup-it, edhe pse ato mund t mos kene ndryshuar nga backup-i i fundit i bere. Algoritmi i backup-it mban nj indeks t bitmap-it, me disa bite pr nj i-node. Ky algoritem operon ne katr faza. Faza 1 fillon ne direktorine e startimit (pr shembull ne root) dhe ekzaminon t gjithe hyrjet ne t. Pr do file t modifikuar, i-node prkats sht i shkruar ne bitmap. do direktorie i vendoset nj i-node ne bitmap, sht apo jo modifikuar ai dhe me pas behet inspektimi ne menyre rekursive. Ne fund t fazes se pare, t githe filet e direktorit e modifikuara kane t shkruar ne bitmap-in e tyre i-node-in prkats, si tregohet ne fig 6.25(a), (pjesa e hijezuar). Ne fazen 2, po ne menyre rekursive analizohet pema pr t dalluar file-et e direktorit e pamodifikuara, t cilave u hiqen i-node-t nga bitmap-i. Kjo faze e le direktorine si

tregohet ne fig. 6.25(b). Vihet re se direktorit 10, 11, 12, 27, 29, 30, jane tani t pashenuara, sepse ato nuk prmbajne ndonj gje qe t jet modifikuar. Atyre nuk do ti behet backup. Kurse direkorive 5, 6 do ti behet backup edhe pse ato vet nuk jane modifikuar, kjo sepse ato do t duhen pr t riprtrire ndryshimet ne nj makine tjetr. Prandaj 1 dhe 2 jane t kombinuara ne nj drejtim t vetm t pemes.

Fig. 6.25. Bitmap-et e prdorura nga algoritmi i backup-it logjik. Ne ket pike, njihen direktorit dhe file-et, t cilave do ti behet backup. Jane ato t shenuara ne fig. 6.25(b). Faza 3 konsiston ne skanimin e t gjithe i-node-ve sipas rradhes numerike dhe ne berjen backup t t gjithe direktorive t shenuara pr backup. Keto tregohen ne fig 6.25(c). do direktorie i vendoset nj prefiks nga karakteristikat e direktorise (pronari, koha ,etj), ne ket menyre ato mund t riprtrihen. Prfundimisht, ne fazen 4, file-eve t treguar ne fig.6.25(d), i behet gjithashtu backup. Prseri atyre i vendoset nj prefiks nga karakteristikat e tyre. Kjo prfundon komplet backup-in. Edhe pse riprtritja e file system-it nga tape-et e backup-it behet ne menyre t drejteprdrejt, ka disa eshtje problematike. Meqenese lista e blloqeve t lira nuk sht nj file, asaj nuk i behet backup dhe keshtu ajo duhet t rindertohet pas fshirjes, pasi behet riprtritja. Nj gje e tille sht e mundur t behet mqs bashkesia e blloqeve t lira sht komplementi i bashkesise se file-ve qe ruhen ne t gjithe file-et e kombinuara. Nj tjetr eshtje sht linkimi (lidhja). N qoft se nj file sht i lidhur me dy ose me shume direktori, sht e rendesishme qe file t riprtrihet vetm nj here, dhe po keshtu t bejne dhe direktorit e lidhura me t. Nj tjetr eshtje sht fakti qe shumica e file-ve ne UNIX mund t prmbajne vrima. sht e lejueshme, qe t hapet nj file, t shkruhen disa bit ne t, dhe t largohesh nj fare distance nga offseti i file-it dhe t shkruhen disa bite t tjera. Blloqet ndermjet nuk jane pjese t file-it dhe nuk i duhet bere backup, e akoma me tepr riprtritje. File-t e Core-s

kane nj vrime t madhe mes segmentit t datave dhe stack-ut. N qoft se kjo nuk trajtohet ashtu si duhet, do file i Core-s i ruajtur, do ta mbushi ket hapesire me zero me t njjtn madhesi t adreses virtuale t hapesires (pr shembull 232 dhe akoma me keq 264 byte). File speciale t quajtura pipe, nuk i duhet bere backup, pavaresisht se ne cilen direktori ndodhen (ato nuk duhet t kufizohen ne direktorine /dev ). Qendrueshmeria e File System-it Besueshmeria e file system-it sht e lidhur ngusht dhe me qendrueshmerine e file system-it. Shume file system-e lexojne blloqe, i modifikojne ato dhe i shkruajne ato me vone. N qoft se sistemi shkatrrohet prpara se t gjithe file-ve t modifikuara ti behet backup, file sistemi futet ne nj gjendje t paqendrueshme. Ky problem sht veanerisht shume kritik, n qoft se disa nga blloqet qe nuk jane shkruar jane blloqe i-node, blloqe direktorish, ose blloqe qe prmbajne nj free list. Pr t menjanuar problemin e paqendrueshmerise, shumica e kompjuterave, kane nj program qe kontrollon qendrueshmerine e file system-it. Pr shembull, UNIX ka fsck, kurse Windows ka scandisk. Programi mund t ekzekutohet ne do moment qe boot-ohet sistemi, veanerisht pas nj shkatrrimi. Prshkrimi me posht tregon si funksionon fsck. scandisk sht dika ndryshe sepse ai operon ne nj file system ndryshe, por kane t njjtin princip prdorimi dhe riparimi t file system. do kontrollues i file system, verifikon do file system (do particion disku) ne menyre t pavarur nga t tjeret. Mund t behen dy tipe kontrollesh t qendrueshmerise: t blloqeve dhe t file-ve. Pr t bere kontrollin e qendrueshmerise se nj blloku, programi nderton dy tabela, do njra prmban nj numerues pr do bllok, qe inicializohet me 0. Numeruesi ne tabelen e pare numeron se sa here, prdoret nj bllok ne nj file; numeruesi ne tabelen tjetr rregjstron se sa here sht prdorur nj bllok ne free listn (ose ne nj bitmap me blloqe t lire). Programi me pas lexon t githe i-node-et. Duke filluar nga nj i-node, mund t ndertohet nj list t t gjithe numrave t blloqeve t prdorura ne nj file t caktuar. Nderkohe qe lexohet nj numer blloku, numeruesi i tij ne tabelen e pare inkrementohet. Me pas programi analizon free listn ose bitmap-in, pr t gjetur t gjithe blloqet qe nuk jane ne prdorim. do prezence e nj blloku ne free list, bn qe numeruesi ne tabelen e dyt t inkrementohet. N qoft se file system sht i qendrueshem, do bllok do t ket nj 1, ne nj nga tabelat, si tregohet ne fig. 6.26 (a). Pas nj shkatrrimit t file system, tabelat do t duken si ne fig. 6.26(b), ku blloku 2 nuk sht prezent ne asnj nga tabelat. Ai do t raportohet si nj bllok i humbur (missing block). Edhe pse blloqet e humbura nuk shkaktojne ndonj demtim t madh, ato zene shume hapesire, duke zvogeluar ne ket menyre kapacitetin e

Fig. 6.26 Gjengjet e sistemit. (a) I qendrueshem (b) Missing block (c) bllok i duplikuar ne free list (d) bllok me data i duplikuar.

diskut. Zgjidhja pr missing block sht e drejteprdrejt: kontrolluesi i file system-it, thjesht i shton ato ne free list.

Nj situat tjetr mund t jet ajo e fig. 6.26(c). Ku dallohet nj bllok (me numrin 4) qe paraqitt dy here ne free list (duplikimi mund t behet vetm n qoft se free list sht me t vertet nj list, me bitmap nj gje e tille sht e pamundur). Zgjidhja ne ket rast sht e thjesht: t rindertohet lista. Gjeja me e keqe, qe mund t ndodhi sht qe i njjti bllok te dhenash t shfaqet ne dy ose me shume file, si ka ndodhur ne figuren 6.26(d), me bllokun 5. N qoft se, ndonj nga file-et fshihet, blloku 5 do t vendoset ne free list, duke na uar ne nj situata, ku i njjti bllok sht dhe ne prdorim, por edhe i lire ne t njjtn kohe. Veprimi i duhur qe duhet t beje kontrolluesi i file system-it, sht t alokoje nj bllok t lire, t kopjoje prmbajtjen e bllokut 5 ne t, dhe ta fusi kopjen ne nj nga file-et. Ne ket menyre, prmbajtja e informacionit nuk ndryshon, por struktura e file system-it, sht t paktn e qendrueshme. Gabimi duhet t raportohet me qellim qe prdoruesi t insepektoje dhe ta korigjoje at. Prve kontrollimit pr t pare, qe do bllok numerohet si duhet, kontrolluesi i file system-it, kontrollon gjithashtu dhe sistemin e direktorive. Ai, gjithashtu prdor nj tabele pr numeratoret, por keto jane numeratore pr file dhe jo pr blloqe. Ai fillon ne direktorine e root-imit, dhe zbret ne menyre rekursive ne peme, duke inspektuar do direktori ne file system. Pr do file ne do direktori, ajo inkrementon nj numerues pr numrin e prdorimeve t atij file. Kujtojme, qe prshkak t linke-ve hard, nj file mund t paraqitet ne dy a me shume direktori. Symbolic links nuk numerojne dhe as nuk shkaktojne inkrementimin e numeruesit t file-it.

Kur e gjithe kjo prfundon, krijohet nj list, e indeksuar nga i-node-t, qe tregon sa direktori prmban do file. Me pas behet krahasimi i ketyre numrave me numrin e linkeve t ruajtura ne vet i nodet. Ky numerim fillon tek 1-ishi, kur krijohet nj file dhe behet inkrementimi i tyre sa here qe behet nj (hard) link me file-in, ne nj file sistem t qendrueshem, t dy numerimet do t bien dakort. Megjithat, mund t ndodhin dy gabime: numri i linkut ne i-node mund t jet shume i vogel ose shume i madh. N qoft se numri i linkut sht me i madh se numri i hyrjeve ne direktori, athere edhe pse mund t behet e gjithe fshirja e file-ve ne direktori, numri pas fshirjes do t jet nj numer jo zero, dhe i-node nuk do t fshihet. Ky gabim nuk sht dhe kaq serioz, por humbet hapesire ne disk me file qe nuk jane ne ndonj direktori. Mund t rregullohet duke vendosur numrin e linkut dhe t i-node-it ne vleren e duhur. Gabimi tjetr sht pothuajse katastrofik. N qoft se dy entry ne direktori jane t lidhura me nj file, nderkohe qe i-node tregon qe ka vetm nj, kur ne fakt nuk sht fshire asnj entry e direktorise, por numri i i-node shkon ne 0. Kur nj numer i i-node shkon ne 0, file system e shenon at si jo t prdorshem dhe i liron t gjithe blloqet e tij. Ky veprim mund t ndikoje ne nj nga direktorit qe do t pointoje tek i-node jo me i prdorshem, blloqet, e t cilit mund ti prkasin file-ve t tjere. Prseri zgjidhja do t ishte marrja vesh mes numrit t i-node me numrin e entry-ve t direktorive. Keto dy operime: kontrolli i direktorive, kontrolli i blloqeve, jane t integruara pr arsye efience. Behen dhe ekime t tjera. Pr shembull direktorit kane nj format t prcaktuar, me numrin i-node dhe me emra ASCII. N qoft se, nj numer i-node sht me i madh se numrat e i-node ne disk, athere thuhet se direktoria sht demtuar. Pr me tepr, do i-node ka nj gjendje, disa prej t cilave jane t lejueshme, por t uditshme, si pr shembull 0007, qe nuk i jep as pronarit as grupit t tij t drejt hyrje, por lejon t jashtmit t lexojne, t shkruajne, dhe t ekzekutojne file. Do t ishte me leverdi, qe t paktn t reportoheshin file, qe i japin me shume t drejta t jashtmeve se sa vet pronarit. Disa direktori, t themi rreth 1000 entry, dyshohen t jene t tilla. File t lokalizuara ne direktorit e user-ave, por qe gjithashtu zotrohen dhe nga superuser-i i tyre dhe qe kane bit-in e SETUID, jane probleme t sigurimit, sepse file t tille kerkojne veprimimin e superuser-it kur ato ekzekutohen nga ndonj user. Ne paragrafet e meparshem, u diskutua mbi mbrojtjen e prdoruesit nga shkatrrimi i sistemit. Disa file system e, shqetsohen gjithashtu dhe pr mbrojtjen e userit nga vet sistemi. Keshtu, n qoft se user-i shtyp: rm* , o rm* -o pr t fshire t gjithe file-t a qe mbarojne me, o, por aksidentalisht shtypet kjo komande do t fshije t gjithe file-t ne direktorine prkatse, dhe me

pas do t ankohet qe nuk gjen dot ,o. Ne MS/DOS dhe ne disa sisteme t tjera, kur file-et fshihen, ajo qe ndodh sht: nj bit vendoset ne direktorine ose ne i-node-in e file-it t

fshire pr ta shenuar at si nj file t fshire. Tek nj free list, nuk kthehen blloqet e liruara nga fshirja e file-it, sepse ndodhe qe ato mund t nevojiten. N qoft se, prdoruesi e zbulon shpejt gabimin, sht e mundur t ekzekutohet nj program ndihmes, qe riprtrin file-t e fshira.

6.3.7 Performanca e File System Aksesimi ne disk sht shume me i ngadalt se aksesimi ne memorie. Leximi i nj fjale ne memorie mund t zgjasi 10 nsec. Leximi nga disku mund t behet me nj shpejtsi 10Mb/sec, qe sht 40 here me i ngadalt se leximi i fjales 32bit, kesaj i shtohen 5-10 msec pr kohen e kerkimit ne disk dhe t pritjes derisa t vije sektori i duhur posht kokes lexuese. N qoft se nevojitet nj file i vetm, aksesimi ne memorie sht ne rendin e miliona hereve me t shpejt se aksesimi ne disk. Si rezultat i kesaj diference ne kohen e aksesimit, shume file system jane dizenjuar me nj variacion optimizimesh, pr t prmiresuar performancen. Ne ket pjese do t trajtohen tre prej tyre. Cashing Metoda me e zakonshme e prdorur pr t zvogeluar kohen e aksesimit t ne disk sht blloku cache, ose buffer cache. Ne kontekst, cache-ja sht nj bashkesi blloqesh, qe logjikisht duhet ti prkasin diskut, por mbahet ne memorie pr arsye performance. Algoritma t ndryshem prdoren pr menaxhimin e cache-s, por nj i zakonshme do t ishte kontrolli i t gjithe kerkesave t lexuara, pr t pare n qoft se blloku i kerkuar ndodhet ne cache. N qoft se ai sht, kerkesa pr lexim mund t behet pa nevojen e aksesimit ne disk. N qoft se, blloku nuk ndodhet ne cache, fillimisht kerkohet ne cache, e me pas kopjohet aty ku sht e nevojshme. Operimi ne cache tregohet ne fig. 6.27. Meqenese ka shume blloqe ne cache, duhet qe proesi t prfundoje shpejt n qoft se nj bllok i dhene sht prezent. Menyra e zakonshme sht t ngatrrosh pajisjet me adresat dhe t shikosh rezultatet ne tabelen hash. T gjithe blloqet me me t njjtn vlere hash-i vendosen zinxhir ne nj linked list, ne menyre qe t mund t ndiqet njpasnjshmeria ne zinxhir.

Fig. 6.27 Struktura data ne bufferin e cache-es.

Kur nj bllok duhet t ruhet ne nj cache t mbushur, disa blloqe duhet t largohen prej saj( dhe t rishkruhen ne disk, n qoft se jane modifikuar qe kur jane marre heren e fundit). Situata sht pak a shume si faqosja (paging), dhe jane t vlefshme t gjithe algoritmat e diskutuara ne kapitullin 3. Nj ndryshim interesant mes faqosjes dhe caching, sht se referencat e caches jane relativisht jo t rradhitura, prandaj sht e nevojshme qe blloqet t ruhen t gjitha sipas rradhes se LRU-se, me linked lista. Ne fig 6.27, ne shikojme qe zinxhire, qe startojne ne tabelen hash, ka gjithashtu, nj list dy drejtimeshe qe ekzekutohet sipas rradhes se ekzekutimit, me bllokun me shume t prdorur ne fillim t lists dhe me bllokun me pak t prdorur ne fund t lists. Kur i referohemi nj blloku, ai zhvendoset nga pozicioni i tij ne list dhe vendoset ne fund t saj, ne kete menyre ruhet rradha sipas LRU. Por, fatkeqsisht ndodh nj kurth. Tani, qe kemi situatn me LRU-ne e mundur, shfaqet LRU jo e deshirueshme. Ky problem sht i lidhur me shkatrrimet e file system-it, qe u diskutua me pare. N qoft se nj bllok kritik, si sht pr shembull nj bllok i-node, lexohet ne cache dhe modifikohet, por nuk rishkruhet ne disk, ky proes e fut sistemin ne nj gjendje jo t qendrueshme. N qoft se blloku i-node, vendoset ne fund t zinxhirit t LRU-se, atrehere do t duhet shume kohe t shkoje ne fillim t tij dhe me pas t rishkruhet ne disk. Pr me tepr referimi dy here i t njjtit bllok brenda nj intervali t shkurtr sht e rradhe. Keto eshtje, na ojne ne nj skeme LRU t modifikuar, duke marre parasysh dy faktore: A do t duhet blloku prseri shume shpejt?

A sht blloku thelbesor ne qendrueshmerine e sistemit? Pr t dyja pyetjet, blloqet mund t ndahen ne kategori si: blloqet i-node, blloqet indirekt, blloqe direktorish, blloqe plot me data dhe blloqe pjeserisht t mbushur me data. Blloqet qe nuk nevojiten me shkojne ne fillim t lists, keshtu buffer-at e tyre do t prdoren shume shpejt. Blloqe qe mund t nevojiten prseri, si jane blloqet pjeserisht t mbushura me data, shkojne ne fund t lists dhe do t rrine aty pr nj kohe t gjat. Pyetja e dyt sht e pavarur nga e para. N qoft se blloku sht i rendesishem ne qendueshmerine e sistemit (do gje prve blloqeve t datave), dhe ai sht modifikuar, ai duhet t shkruhet menjhere ne disk. Duke i shkruar blloqet kritike shpejt ne disk, ne zvogelojme propabilitetin qe t ndodhe nj prplasje ne sistem. sht e qart qe blloqet me data mbahen ne cache pr nj kohe t gjat derisa t shkruhen ne disk. Mendoni dike, qe sht duke shkruar nj liber ne nj kompjuter. Edhe pse shkruesi ne menyre periodike jep komanden pr te ruajtur materialin ne disk, por ndodh qe i gjithe materiali t jet ne cache dhe ne disk mos te kte asnje gje. N qoft se ndodh nje prplasje e sistemit, struktura e file system-it nuk nderpritet, por e gjithe puna do t humbasi. Kjo situat nuk para ndodh shume shpesh. Sistemet kane dy menyra pr t zgjidhur ket problem: 1. sipas UNIX: ekziston nj thirrje system, sync, qe i detyron t gjithe blloqet e modifikuara t shkruhen ne menyre t menjhershme ne disk. Kur sistemi startohet, nj program update, startohet ne sfond pr tu futur ne nj loop t pafundme, dhe qendron mes thirrjeve sistem pr 30 sec. Si prfundim, jo me shume se 30 sec pune humbasin, prshkak t ndonj prplasje. 2. Sipas MS/DOS-it: do bllok i modifikuar duhet t shkruhet ne disk, aq shpejt sa sht shkruar. Cache-t ne t cilat, blloqet e modifikuara, shkruhen ne disk ne menyre t menjhershme quhen write-through cache. Ato kerkojne me shume disk I/O se cache-t jo write through. Diferenca mes ketyre dy cache-ve mund t shikohet kur nj program shkruan ne nj bllok 1KB, nj karakter pr nj ast kohe. UNIX do ti mbledhi t gjitha karakteret ne cache dhe do ta shkruaje bllokun ne disk do 30 sec ose kurdo qe blloku t zhvendoset nga cache-ja. MSDOS do t beje nj aksesim ne disk pr do karakter t shkruar. Shumica e programeve bejne nj bufferim t brendshem, keshtu qe normalisht ata nuk shkruajne vetm nj karakter, por nj rresht ose nj njsi t madhe t thirrjes system write. Si pasoje e kesaj diference ne strategjine e caching, vetm heqja e nj floppy disk nga sistemi UNIX pa bere nj sync do t shkaktoje humbje te dhenash, dhe nj file system t nderprere gjithashtu. Me MS/DOS-in nuk rezultojne probleme t tilla. Keto strategji t

ndryshme, u zgjodhen sepse UNIX-i u zhvillua ne nj ambjent ku t gjithe disqet ishin HDD dhe jo removable disk, kurse MS/DOS-i startoi ne nj floppy disk. Nderkohe qe HDD-et u bne model, parimet e UNIX me efience me t madhe, u bne gjithashtu model dhe u prdoren dhe ne Windows pr HDD-t.

Leximi i Parakoheshem i Blloqeve (Block Read Ahead) Nj teknike e dyt e prdorur pr t prmiresuar performancen e file system-it sht t marresh 10 blloqe ne cache, me pare se ato t nevojiten pr t rritur ne ket menyre shpejtsine e gjetjes (hit rate). Nj rast i veant sht leximi i file-ve ne menyre sekuenciale. Kur nj file sistem i kerkohet t prodhoje nj bllok k ne nj file, ai e bn ket gje, por kur mbaron bn nj kontroll t shpejt cache pr t pare n qoft se blloku k+1 sht aty. N qoft se jo, ai skedulon nj komande read pr bllokun k+1 , me shpresen qe kur ai t nevojitet t ket mberritur ne cache. Kjo strategji sht e vlefshme vetm pr file qe lexohen ne menyre sekuenciale, n qoft se nj file aksesohet ne menyre t rastesishme, kjo strategji nuk funksionon me. Pr t pare n qoft se kjo strategji sht e vlefshme, file sistem-i analizon aksesimin pr do model file-esh t hapur. Pr shembull, nj bit i shoqeruar me do file, analizon n qoft se nj file sht aksesuar ne menyre sekuenciale, apo ne menyre t rastesishme. Fillimisht, file-it i jepet e drejta pr t dyshuar dhe ta vendosi bitin ne menyren e aksesimit sekuencial. Por kur behet kontrolli, biti fshihet. N qoft se leximi sekuencial fillon t behet prseri, bit setohet prseri. Keshtu file sistem merr nj vendim t arsyeshem, n qoft se ai duhet t vazhdoje t lexoje ne menyre t parakoheshme apo jo. N qoft se vendos gabim, nuk ndodh gje me sistemin vetm sa humbet pak gjeresi brezi i diskut.

Reduktimi i Levizjes se Krahut t Diskut. Caching dhe leximi i parakohshem, nuk jane menyrat e vetme t rritjes se performancs se file system-it. Nj teknike tjetr e rendesishme sht reduktimi i levizjes se krahut t diskut, duke vendosur blloqe, qe mund t aksesohen pothuajse ne menyre sekuenciale, afer njri-tjetrit, e preferueshme ne t njjtin cilinder. Kur nj file output shkruhet, file system-i duhet t alokoje blloqet do ast kohe, sa here qe sht e nevojshme. N qoft se blloqet e lira jane t rregjistruara ne nj bitmap, dhe bitmapi sht i ruajtur ne memorien kryesore, do t ishte shume e thjesht, pr t zgjedhur nj bllok t lire sa me afer bllokut t meparshem. Me nj free list, nj pjese e se ciles ndodhet ne disk, do t ishte shume e veshtire pr t alokuar blloqet afer njri-tjetrit. Megjithat dhe me nj free list mund t behen disa klasa blloqesh, por ne grupe blloqesh t njpasnjshme. N qoft se sektoret konsistojne ne 512 byte, sistemi mund t prdori blloqe 1KB (2 sektore), por t alokoje t dhenat e ruajtura ne disk ne njsi prej 2 blloqesh(4 sektore). Kjo nuk sht njsoj si t kemi nj bllok ne disk prej 2 KB, nderkohe cache-ja prdor akoma blloqe 1KB dhe transferimet ne disk behen me blloqe 1 KB. Leximi i nj file ne menyre sekuenciale, do t zvogeloje numrin e kerkimeve me nj

faktor 2, duke prmiresuar ne menyre t konsiderueshme performancen. Nj variacion i kesaj metode do t ishte numerimi i pozicioneve t rrotullimeve. Kur behet alokimi i blloqeve, sistemi mundohet t vendosi blloqet e njpasnjshme ne nj file, ne t njjtin cilinder. Nj tjetr performance e qafes se shishes, ne sisteme qe prdorin i-node ose do gje tjetr ekuivalente me i-node-t, sht fakti qe leximi i nj file t shkurtr kerkon dy aksesime ne disk: nj pr i-node-t dhe nj pr blloqet. Vendosja e i-node-ve t zakonshme tregohet ne fig 6.28(a). Ketu t gjithe i-node-t jane afer fillimit t diskut, keshtu qe distanca mesatare mes nj i-node dhe bllokut t tij do t jet sa gjysma e numrit t cilindrave, duke kerkuar kohe t gjat kerkimi.

Fig. 6.28 (a) I-node-t t vendosura ne fillim t diskut. (b) disku i ndare ne grupe cilindrash, secili ne blloqet dhe i-node-t prkatse. Nj prmiresim i thjesht i performancs, sht ti vendosesh me mire i-node-t ne mes t diskut, dhe jo ne fillim, duke shkurtuar keshtu mesataren e kerkimit mes i-node-ve dhe blloqeve t tyre me nj faktor ose dy. Nj tjetr ide, do t ishte ndarja e diskut ne grupe cilindrash, secili me i-nodet, free listn dhe blloqet prkatse. Kur krijohet nj file i ri, mund t zgjidhet do i-node. N qoft se asnj nuk sht i vlefshem, athere prdoret nj bllok ne nj grup cilindrash t afert.

6.3.8 Log-Structered File System

Ndryshimet ne teknologji, jane duke ushtruar presion ne file system-et ekzistuese. Ne veanti, CPU-t po prpiqen t behen me t shpejta, disqet po behen me t medha dhe me t lira (por jo shume t shpejta) dhe memoriet po zmadhohen ne menyre eksponenciale. Parametri qe nuk sht prmiresuar, sht koha e kerkimit ne disk. Kombinimi i ketyre faktoreve tregon qe prformanca e qafes se shishes sht duke u rritur ne disa file sistem. Ne ket pjese do t shpjegohet shkurt si funksionon LFS (Log-structured File System). Ideja qe solli LFS-n, sht qe CPU-t t behen me t shpejta dhe memoria RAM me e madhe, gjithashtu dhe cache-t jane duke u zmadhuar me shpejtsi. Rrjedhimisht, tani do t jet e mundur t behet leximi direkt ne cache, pa kerkuar akses ne disk. Keshtu, ne t ardhmen, shumica e aksesimeve ne disk do t jene vetm pr t shkruar, pra mekanizmi i leximit t parakohshem t blloqeve nuk do t duhet me pr t prmiresuar performancen. Marrim rastin me t keq, kur ne shumicen e file system-eve, shkruajtja behet ne pjese t vogla. Shkrime shume t shkurtra, jane jo shume efient, sepse nj shkrim ne disk prej 50 msec, ndiqet nga nj kerkim 10 msec dhe nga nj kohe rroullimi 4 msec. Me keto parametra, efienca e diskut zvogelohet 1 %. Pr t pare nga vijne, t gjithe shkrimet e shkurtra, krijohet nj file ne UNIX. Pr t shkruajtur ket file duhet t shkruhen me pare, i-node pr direktorine, bllokun e direktorise, i-node-in pr file-in dhe vet file-in. Nderkohe qe keto shkrime mund t vonohen, i gjithe ky proes bn qe sistemi t haset me probleme serioze qendrueshmerie n qoft se ndodh nj prplasje e sistemit para se t behet shkruajtja. Prandaj shkruajtja e i-nodeve sht prgjithesisht me imediate. Pr ket arsye, dizenjuesit e LFS, vendosen t ri-implementojne file system-in e UNIX-it, ne at menyre qe t shfrytzohet e gjithe gjeresia e brezit ne disk, edhe ne rastet e aksesimit t shkrimeve t shkurtra t rastit. Ideja baze sht t strukturohet i gjithe disku si nj log (si nj trup i vetm). Me pas kur ka nevoje pr t, t gjithe shkrimet ne pritje t vendosura ne nj buffer t memories, grumbullohen ne nj segment t vetm dhe shkruhen ne disk si nj segment i vazhdueshem ne fund t log-ut. Nj segment i vetm mund t prmbaje i-node, blloqe direktorish, dhe blloqe datash, t gjitha t prziera bashke. Ne fillim t do segmenti ka nj prmbledhje t segmentit, qe tregon se fare mund t gjendet ne ket segment. N qoft se segmenti mesatar mund t jet rreth 1 MB, pothuajse i gjithe brezi i diskut mund t prdoret. Ne ket dizenjim, i node-t akoma ekzistojne dhe kane t njjtn strukture si ne UNIX, por tani ato jane t shprdara ne t gjithe log-un ne vend qe t kene nj pozicion fiks ne disk. Megjithat, kur nj i node lokalizohet, lokalizimi i blloqeve behet ne t njjtn menyre. Gjetja e nj i node sht shume me e veshtire, sepse adresa e saj nuk mund t llogaritet thjesht nga i numrat e saj, si ne UNIX. Pr t thjeshtsuar gjetjen e tyre prdoret nj hart i node-sh, me indekset e i node-ve. Hyrja e i-t ne ket hart pointon ne i node-in e i-t ne disk. Kjo hart ruhet ne disk, por gjithashtu mund t ruhet dhe ne cache, keshtu pjesa me e madhe e saj do t jet ne

memorie shumicen e kohes. Kur i node lokalizohet, prej saj mund t gjendet adresa e blloqeve. Vet blloqet do t jene ne segmentt, diku ne log. N qoft se disqet do t ishin pafundesisht t medha, do t vlente prseri prshkrimi i mesiprm. Megjithat, disqet reale jane t fundem, keshtu qe log-u do t zj komplet diskun, ne ket kohe nuk mund t shkruhen segmente t reja ne log. Fatmiresisht, shume segmente ekzistuese mund t kene blloqe qe nuk nevojiten me, pr shembull: n qoft se nj file mbishkruhet, i node i tij do t pointoje tani ne blloqet e reja, por t vjetrat akoma do t zene vend ne segmentet e shkruara me pare. Pr t zgjidhur ket problem LFS ka nj thread pastrues, qe e kalon kohen duke skanuar log-un ne menyre ciklike, pr ta kompaktesuar at. Ai fillon t lexoje prmbledhjen ne segmentin e pare ne log, pr t pare cilat i node dhe file ndodhen aty. Me pas kontrollon hartn e i node-ve ekzistuese, pr t pare n qoft se i node-t dhe filet jane akoma ne prdorim. N qoft se jo informacioni injorohet. I nodet dhe blloqet qe jane ne prdorim, shkojne ne memorie pr tu shkruar ne segmentin tjetr. Segmenti origjinal shenohet si i lire, keshtu log-u mund ta prdori at pr te dhena t reja. Ne ket menyre pastruesi kalon t gjithe log-un, duke fshire segmente t vjetra dhe duke vendosur ne to te dhena ne prdorim ne memorie, pr ti rishkruar ato ne segmentet e ardhshme. Prfundimisht disku sht nj buffer i madh ne forme ciklike, me thead-in shkrues, qe shton segmente t reja ne fillim dhe thread-in pastrues qe fshin segmentt e vjetrat nga e kaluara. Mbajtja e llogarise ne ket rast sht e pavlefshme, meqenese kur nj bllok shkruhet ne nj segment t ri, i node i file-it (diku ne log), duhet t lokalizohet, dhe t vendoset ne memorie pr tu shkruar ne nj segmentin e ardhshem. Harta e i node-ve duhet t updateohet pr t pointuar ne kopjen e re. Megjithat sht e mundur t behet administrimi, dhe i gjithe ky komplicitet tregon qe ja vlen. Matjet e dhena ne ket pjese tregojne qe LFS performon nga jasht UNIX-in, pr disa shkrime t shkurtra, nderkohe ka nj perforamance po aq te mire ne lexim dhe ne shkrimet e gjata, si t UNIX-it.

KAPITULLI I SHTAT

Sistemet Operative Multimedial


Filmat digital, video klipet, dhe muzika po behen gjithnj e me shume nj menyre pr t paraqitur informacionin dhe argetimin neprmjet kompjuterit. Audio dhe video files mund t ruen ne nj disk dhe mund t luhen (play) serisht kur dicka e tille kerkohet (on demand). Mirepo, karakteristikat e tyre jane shume t ndryshme nga text file-at tradicional. Si rrjedhim, nevojiten file system t rinj ne menyre qe ti menanaxhojne ato. Gjithashtu, ruajta (store) dhe luajta (play) e audio dhe video nxorri ne pah kerkesa t reja ne schedulerin si dhe ne pjeset e tjera t sistemit operativ. Ne paragrafet qe do vijne, ne do t studiojme disa nga keto ceshtje dhe implikimet e tyre pr sisteme operative qe jane disenjuar pr menaxhuar multimedia. Zakonisht, pr filmat digital prdoret emri multimedia, qe ne kuptim letrar do t thot me shume se nj mjet (medium). Sipas t ketij prkufizimi, vet ky liber sht nj pune (detyre) multimediale. Libri, prmban 2 tipe mediash: tekst dhe imazhe (figurat). Megjithat, pjesa me e madhe e njerezve prdorin termin multimedia pr t nenkuptuar nj dokument qe prmban dy ose me shume media t vijueshme (continuous media), qe do thot media qe duhet t luhet serisht pas nj intervali kohor. Ne ket liber, termin multimedia do ta prdorim ne ket sens. Nj term tjetr qe sht ka kuptim disi i erret (i dykuptueshem) sht video. Ne sensin teknik, sht thjesht porcioni i imazhit t nj filmi (movie) (ne t kundert pjeses se zerit)..... Ne fakt, regjistruesit kamera (camcorders) dhe tlevizionet shpesh kan dy connectors, njri i etiketuar video dhe tjetri audio, meqene se sinjalet jane t ndare nga njri tjetri. Mirepo, termi digital video zakonisht i referohet produktit t plot, bashke me imazhet dhe sound. Ne vijim termi film (movie) do t prdoret ne sensin e produktit t plot. Vini re qe ne ket sens nj film nuk ka nevoje t jet 2ore i gjat dhe t jet i prodhuar nga studiot e Hollywood-it me nj kosto qe kalon dhe at t Boeing 747. Nj klip prej 30-sec me lajme, qe mund t download-ohet nga faqja e CNN, sht gjithashtu nj film (movie) sipas prkufizimit tone. Keto do ti quajme video clips kur i referohemi filmave shume t shkurtr. 7.1 Hyjre ne Multimedia (Parathenie) Para se t hyjme ne teknologjine e multimedias, do t ishte e dobishme t themi disa fjale pr prdorimet e tanishme dhe t se ardhmes t saj. Ne nj kompjuter t vetm, multimedia shpesh ka kuptimin e nj luajtjes t nj filmi t pararegjistruar nga nj DVD (Digital Versatile Disk). DVD-t jane disqe optike qe prdorin po t njjtn 120-mm boshllek polikarbonat (polycarbonat plastic blanks), ashtu sic prdor dhe CD-ROM, por ato jane t regjistuar ne nj densitet me t lart, duke dhene nj kapacitet nga 5 GB deri 17 GB, ne varesi t formatit. Nj tjetr prdorim i multimedia sht ai i downloadimit t video klipeve nga interneti. Shume faqe Web kane items qe sapo i klikon, fillon downloadimi i filmave t shkurtr.

Ne nj shpejtsi 56Kbps, edhe downloadimi i video klipeve t shkurtr kerkon nj kohe t gjat, por teknologjit e shprndarjes t shpjet (si pr shembull cable TV dhe ADSL Asymetric Digital Subscriber Loop) mbizotrojne, dhe prania e video klipeve ne internet do t rritet tejmase. Nj tjetr sfere ne t cilin multimedia duhet t prkrahet sht krijimi i videove. Sistemet e editimit multimedial ekzistojne dhe pr prformaca sa me t larta ato kane nevoje t ekzekutohen ne nj sistem operativ qe mbshtt (supports) multimedian aq mire sa nj detyre t zakonshme. Gjithashtu nj sfere tjetr ku multimedia po behet e rendesishme sht ajo e lojrave kompjuterike. Lojrat shpesh ekzekutojne video klipe t shkurtra pr t prshkruar disa lloj verpimesh. Klipet zakonisht jane t shkurtra, por ka shume si ato dhe klipi i duhur selektohet ne menyre dinamike, ne varesi t veprimeve qe kryen prdoruesi. Keto jane shume t sofistikuara. Prfundimisht, ceshtja thelbesore e bots se multimedia sht video on demand (video me kerkese), me t cilen njerezit do t zgjedhin nj filmin qe deshirojne vetm duke prdorur tlekomanden (ose mouse), dhe ne at cast do t shfaqet filmi ne ekranin e TV ose monitorin e kompjuterit. Pr t mundesuar video on demamd (video me kerkese), nevojitet nj infrastukture e vecant. Ne Fig. 7-1 ne shohim dy infrastruktura t mundshme me video on demand. Secila prmban tre komponent esenciale: nj ose disa video servers, nj Distribution Network (Rrjet t shprndare), dhe nj kuti (set-top box) ne do shtpi pr t dekoduar sinjalin. Video server sht nj kompjuter shume i fuqishem qe mban shume filma ne file sistemin e tij dhe i luan serisht kur ato kerkohen (on demand). Ndonjehere mainframes prdoren si video servers, sepse lidhja e 1000 disqeve tek nj mainframe sht me e hapur/efikase, sesa lidhja e tyre tek PC. Shume nga materiali qe vijon do t jet prreth video servers dhe sistemeve operative t tyre.

Figura 7-1. Video on demand duke prdorur teknlogji shprndarje t ndryshme lokale. (a) ADSL. (b) Cable TV. Rrjeti i shprndarjes (distribution network) midis user-it dhe video serverit duhet t jet i aft t transmetoje t dhena me shpjetsi t madhe dhe ne kohe reale. Disenjimi i ketyre rrjetave sht intresant dhe kompleks, por del jasht qellimit t ketij libri. Ne nuk do t

themi asgje tjetr prreth tyre prvec se t veme ne dukje qe keto network prdorim gjithmone fibrat optike nga video serveri deri t kutia e bashkimit (junction box) t zones ku jetojne klientt. Ne sistemet e ADSL-se, t cilat ofrohen nga kompanit telefonike, linja ekzistuese e tlefonit (twistd pair cift i prdredhur) ofron kilometrin e fundit t transmetimit. Ne sitemet kabllore, t cilat ofrohen nga operatoret kabllor, tlat ekzistues t TV kabllor prdoren pr shprndarjen lokale (local distribution). ADSL ka avantazhin sepse i jep do prdoruesi nj kanal t dedikuar, keshtu qe garaton bandwidth, por bandwidth sht i voglet disa (megabit/sec) pr shkak t kufizimeve t tlave tlefonik. TV kabllor prdor kabllin co-axial me bandwidth t madh disa (gigabit/sec), por shume klient prdorin se bashku (ndajne share) t njjtin kabell, keshtu bandwidthi nuk sht i garantuar pr secilin nga klientt. Pjesa e fundit e sistemit sht kutia set-top box, ne t cilen prfundon ADSL-ja ose TV kabllor. Kjo pajisje sht nj kompjuter i zakonshem, me nj chip special pr de-codim dhe de-compresimin e videove. Kompjuteri prmban minimalisht CPU, RAM, ROM, dhe nj nderfaqe pr ADSL ose pr TV kabllor. Si alternative e kutise set-top box, mund t prdoret PC ekzistuese e klientit dhe t shfaqet filmi ne monitorin, set-top box merret parasysh nga fakti qe njerezit duan t shohin video on demand ne dhomen e tyre t ndenjs dhe nuk kane kompjuter aty. Nga nj prspektive teknike, prdorimi i nj kompjuteri ne vend t set-top box, merr me tepr kuptim, sepse kompjuteri sht me i fuqishem, ka nj disk t madh, dhe rezolucioni i ekranit sht i madh. Gjithashtu, ne do t bejme dallimin midis video server dhe proesit t klientit ne skajin e prdoruesit qe dekodon dhe shfaq ne ekran filmin. Ne termat e disenjimit t sistemeve, nuk ka shume rendesi ne se proesi i klienti ekzekutohet ne kutine set-top box, apo ne PC. Pr nj sistem video-editimi desktop, t gjitha proeset ekzekutohen ne t njjtn makine, por ne do t vazhdojme t prdorim terminologjine server dhe client, ne menyre qe t jet e qart se cfare bn nj proes i caktuar. Duke u kthyer tek multimedia, ajo ka dy karakteristika kyce qe duhen t kuptohen mire: Multimedia prdor Data Rates jashtzakonisht t larta. Multimedia ka nevoje pr ri-luajtje ne kohe reale (real time playback). Niveli i lart i Data Rates vjen nga natyra e informacionit akustik e vizual. Syt dhe veshet mund t proesojne sasira shume t medhaja informacioni ne sekonde, dhe duhen t ushqehen ne at Rate pr t prodhuar pamje t pranueshme. Ne Fig. 7-2 sht paraqitur Data rate i disa burimeve multimediale dhe i disa pajisjeve hardwarike. Ne do t diskutojme pr disa nga keto format encodimi ne vone ne ket kapitull. Ajo qe duhet t theksohet sht, meqe data rate multimediave sht i lart, ai ka nevoje pr kompressim dhe pr nj vend ku t ruhet. Pr shembull nj film 2-ore HDTV i pa-kompresuar sht nj file prej 570 GB. Nj video server ruan 1000 file t tille, pra ka nevoje pr 570 TB hapesire, qe do t thot nj sasi jo e parendesishme pr standartet e sotme. Ajo qe duhet t theksohet tjetr sht, pa kompresimin e t dhenave, hardware e tanishme nuk mund t ecin (prballojne) me data rate qe prodhohen. Kompresimin e videove do ta shohim me vone ne ket kapitull. Kerkesa e dyt qe multimedia vendos ne nj sistem, sht nevoja e shprndarjes t t dhenave ne kohe reale. Porcioni i videos t nj filmi digital konsiston ne disa numra frames pr sekonde. Sistemi NTSC qe prdoret ne Amerike dhe Japoni, ekzekutohet ne 30 frames/sec (29.97 ekzaktsisht), ndersa sistemet PAL dhe SECAM qe prdor pjesa

tjetr e bots, ekzekutohet ne 25 frame/sec (25frame/se ekzaktsisht). Framet duhet t shprndahen ne intervale precize 33msec ose 40msec, respektivisht, ose prndryshe filmi do duket me ndryshime t shpeshta (copetuar). Source Mbps GB/hr Device Mbps Tlephone (PCM) MP3 music Audio CD MPEG-2 movie (640 x 480) Digital camcorder (720 x 480) Uncompressed TV (640 x 480) 0.064 0.14 1.4 4 25 221 0.03 0.06 0.62 1.76 11 97 Fast Ethernet EIDE disk ATM OC-3 network SCSI UltraWide disk IEEE 1394 (FireWire) Gigabit Ethernet 100 133 156 320 400 1000

Uncompressed HDTV (1280 x 720) 648 288 SCSI Ultra-160 disk 1280 Figura 7-2. Disa data rates pr multimedia dhe pr pajisje I/O me performance t lart. Vini re qe 1 Mbps sht 106 bits/sec por 1 GB sht 230 bytes. Zyrtarisht NTSC do t thot National Tlevision Standards Commite, por kur hyri ne skene tlevizori me ngjyra, doli nj shaka pr industrine, Never Twice the Same Color. PAL Phase Altrnating Line. Teknikisht sht sistemi me i mire. SECAM Sequentiel Coleur Avec Memoire, prdoret ne France (dhe u shpik pr t mbrojtur prodhuesit e Tlevizioneve franceze nga kompeticioni me t huajt. SECAM prdoret gjithashtu ne europen lindore, sepse kur u shfaq tlevizoni ne ket vende, qeverit komunist t athershme nuk donin qe njerezit t shikon tlevizonin Gjerman keshtu qe zgjodhen nj sistem jo-kompatibel. Veshi sht me i ndieshem sesa syri, keshtu qe nj ndryshim (variance) edhe ne rendin e milisecondave ne kohen e shprndarjes do t ishte e ndieshme. Nryshueshmeria (varianca) ne ratet e shprndarjes: quhet jittr dhe duhet qe ti vendosen kufijt ne menyre strikt pr prformanca e mira. Vini re qe jittr nuk sht e njjta gje si vonesa (delay). N qoft se rrjeti shprndares Fig. 7-1 vonen ne menyre uniforme secilin bit me 5.000 sec, filmi do t filloje pak me vone, por do t duket i qart. Ndersa n qoft se vonohen ne menyre rastesore frames me 100-200msec, filmi do t duket si nj film i vjetr i Charlie Chaplin. Vetit ne kohe reale qe kerkohen pr ri-luajtur serisht (playback) multimediat, shpesh ato prshkruen nga parametrat e cilesise t sherbimit (QoS - quality of service). Parametrat prfshijne bandwidthin mesatar t disponueshem, pikun e bandwidth, vonesat minimale dhe maksimale (t cilat se bashku vendosin kufijt e jittr), dhe nj probalilitt i humbjes se biteve. Pr shembull, nj operator rrjeti mund t ofroje nj sherbim duke garantuar nj bandwidth 4 Mbps, 99% e transmetimit i ka vonesat ne intervalin 105 110 msec, dhe rate e humbjes se biteve 10-10, qe do t ishte mese ok pr filmat me MPEG-2. Operatori gjithashtu mundet t ofroje, nj sherbim me nivel disi me t ulet, me t lire, me nj bandwidth 1 Mbps (sh. ADSL), ne ket rast pr cilesine duhet t biem ne nj kompromis, mund t ndryshojme resolucionin, duke ulur ndjeshem frame rate, ose t heqim dore nga gjyrat dhe ta shohim filmin ne bardh e zi. Menyra me e zakonshme pr t ofruar garancit pr cilesine sherbimit sht t rezervojme nj capacitt prpara ne kohe (in advance), pr secilin nga klientt. Burimet e rezervuara prfshijne nj porcion t CPU, bufferat e memories, capacittin e transferimit t diskut, bandwidth e rrjetit. Ne qoftse nj klient i ri kerkon t shikoje nj film, por

video serveri ose rrjeti nuk ka kapacitet t mjaftueshem pr nj klient tjetr, ai duhet t refuzoje klientin e ri ne menyre qe t shmangi degradimin e sherbimit klientve aktual. Si rrjedhim, serverat multimedial kane nevoje pr skema rezervimi t burimeve, dhe pr algoritmin e kontrolli t pranimeve (admission control algorithm) ne menyre qe t vendosin se kur ata mundet t menaxhojne me shume detyra.

7.2 SKEDARET MULTIMEDIA

Ne shumicen e sistemeve, nj skedar tekst prbehet nga nj sekuence byte-sh pa ndonj strukture qe sistemi operativ njeh apo i intreson t njohe. Me skedaret multimedia, situata sht pak me e komplikuar. Si fillim, video dhe audio jane krejtsisht t ndryshme. Ato kapen nga paisje t ndryshme (CCD chip versus microphone), kane strukture t brendshme t ndryshme (video ka 25-30 frame/sek; audio ka 44,100 kampjone/sec), dhe ato prdoren nga paisje t ndryshme (monitor vs altoparlant). Me tej, shumica e filmave t hollywood-it i drejtohen nj audience mbare botrore, shumica e t ciles nuk flet Anglisht. Kjo pike zgjidhet ne nj ose dy menyra. Pr disa shtt, nj kolone zanore shtese prodhohet, me zera t dubluar ne gjuhen lokale (por jo efektt zanore). Ne japoni, t gjitha tlevizionet kane dy kanale zeri pr ti lejuar shikuesit t degjojne filmat e huaj ne gjuhen origjinale apo at japoneze. Nj buton ne pult prdoret pr zgjedhjen e gjuhes. Ne disa vende t tjera prdoret kolona zanore origjinale me titra ne gjuhen lokale. Disa filma tleviziv ofrojne closed-caption titra ne anglisht gjithashtu, pr t lejuar folesit Anglisht por me degjim t kufizuar t shohin filmat. Si rezultat filmi dixhital mund t konsistoje nga disa skedare: nj video, disa audio, disa titra tekst ne gjuhe t ndryshme. DVD t kane aftsine t ruajne deri ne 32 gjuhe dhe titra text. Nj bashkesi skedaresh multimedia tregohet ne Fig. 7-3. Ne do t shpjegojme kuptimin e fast forword dhe fast backward me vone ne ket kapitull. Si rrjedhoje, nj file system ka nevoje t prcaktoje disa nen skedare pr skedare. Nj skenar i mundshem sht t menaxhoje do nen skedar si nj skedar tradicional (pr shembull., duke prdorur nj nyje i pr t dalluar blloqet) dhe t mbaje nj strukture t dhenash qe liston t gjitha nen skedaret pr do skedar multimedia. Nj metode tjetr sht t prdorim nj tip nyjesh dy-dimensionale, me do kolone duke listuar t gjitha blloqet pr nen skedae. Ne prgjithesi, organizimi duhet t jet i tille qe shikuesi ne menyre dinamike t zgjedhe cilin skedar audio apo titre t prdore ne momentin qe shihet filmi. Ne do rast, ndonj menyre pr t sinkronizuar nen skedared duhet ne menyre qe kur audio e zgjedhur t luhet t jet e sinkronizuar me vidjon. Ne se audjon dhe vidjo dalin sado pak nga sinkronizimi, shikuesi degjon fjalet e aktorit para ose pas levizjes se buzeve, gje qe dallohet leht dhe sht shume acaruese.

Figure 7-3. Nj film mund t konsistoje nga disa skedar. Pr t kuptuar me mire si skedared multimedia organizohen, sht e nevojshme t kuptojme si funksionon audjo dhe vidjo dixhitale ne detaje. Ne tani do japim nj prezantim t ketyre ceshtjeve. 7.2.1 Enkodimi Audio Nj vale audio (zanore) sht nj vale nj dimensionale akustike (presioni). Kur nj vale akustike hyn ne vesh, daullja e veshit dridhet, duke shkaktuar qe pjeset e brendshme t veshit t dridhen bashke me t, dhe duke derguar impulse ne tru. Keto pulse prceptohen si ze nga degjuesi. Ne menyre t ngjashme, kur nj vale akustike godet mikrofonin, ai gjeneron sinjale elekrik, qe prfaqesojne amplituden e zerit si funksion i kohes. Brezi i frekuencave t veshit t njriut varion nga 20 Hz deri 20,000 Hz, megjithese disa kafshe, sidomos qent, mund t degjojne edhe ne frekuenca me t larta. Veshi degjon ne menyre logaritmike, keshtu qe raporti i dy zerave me amplituda A dhe B mund t shprehet konvencionalisht ne dB (decibels) sipas formules: dB 20log10 ( A / B) Ne se ne prcaktojme limitin e poshtm t degjimit (nj presion rreth 0.0003 dyne/cm2 ) pr nj vale sinusoide 1kHz si 0 dB, nj bashkebisedim i zakonshem zhvillohet ne 50dB dhe dhimbjet e veshit fillojne ne 120 dB , nj brez dinamik me nj faktor 1 milion. Pr t shmangur konfuzionin, A dhe B lart jane amplituda. Ne se ne do t prdorim fuqit, qe jane propocionale me katrorin e amlitudes, koeficienti i algoritmit do ishte 10, dhe jo 20.

Valet audio mund t konvertohen ne dixhitale nga nj ADC (Analog Digital Convertr). Nj ADC merr nj voltazh elektrik ne hyrje dhe gjeneron nj numer binar ne dalje. Ne fig. 7-4(a) ne shohim nj shembull t nj sinusoide. Pr t prfaquar sinjalin dixhital, ne mund ta kampionojme do T sekonda, sic tregohet nga gjatsia e vijave ne fig.7-4(b). Ne se vala zanore nuk sht puro sinusoidale, por nj superpozim i valeve sinusoidale ku komponentja me frekuence me t lart prfaqesohet nga f, athere sht e mjaftueshme t bejme kampionime me frekuence 2f. Ky rezultat sht provuar matmatikisht nga H. Nyquist ne 1924. Kampionimi me i shpesht nuk ka vlere meqene se frekuencat me t larta qe do merreshin nuk jane prezent.

Figure 7-4.(a) Nj vale sinusoidale. (b) Kampionimi i vales sinusoidale. (c) Kuantizimi me 4bit. Kampionet dixhitale nuk jane asnjehere ekzakt. Kampionet e Fig. 7-4(c) lejojne vetm nent vlera, nga -1.00 deri t +1.00 ne shkalle prej 0.25. Rrjedhimisht, 4 bit nevojiten pr t prfaqesuar t gjitha ato. Me 8-bit kampione lejohen 256 vlera t ndryshme. Me 16 bit kampione mund t marrim 65,536 vlera t ndryshme. Gabimi i futur nga numri i fundem i biteve pr kampion quhet zhurme kuantizimi. Ne se sht shume e lart, veshi do e dalloje at. Dy shembuj t mirenjohur t zerit t kampionuar jane tlefoni dhe audio compakt disqet. Pulse code modulation prdoret brenda sistemit tlefonik dhe prdor 7-bit (Amerika Veriore dhe Japonia) ose 8 bit (Europa) kampione 8000 here ne sekonde. Ky sistem jep nj data rate prej 56.000 bps ose 64.000 bps. Me vetm 8000 kampione/sek, frekuencat mbi 4kHz humbasin. CD-t Audio jane dixhitale me nj kampionim 44.100 kampione/sek, e mjaftueshme pr t kapur frekuenca deri ne 22.050 Hz, qe sht e mire pr njerezit por e keqe pr qent. Kampionet jane 16 bit secila, dhe jane lineare mbi brezin e amplitudave. Vini re se 16-bit kampione lejojne vetm 65.536 vlera t ndryshme, megjithese brezi dinamik i veshit sht rreth 1 million kur matt me hapa degjimi me t vogjel t mundshem. Pra duke prdorur vetm 16 bit pr kampion shkakton zhurme kuantizimi (megjithese i gjithe brezi dinamik nuk mbulohet). Me 44.100 kampione/sec nga 16 bit, nj audio CD ka nevoje pr bandwidth prej 705.6 Kbps pr mono dhe 1.411 Mbps pr streo (shih fig 7-2). Kompresimi i audios sht i mundur duke u bazuar ne modelet psikoakustik sipas t cilave punon veshi i njriut. Nj kompresim me 10x sht i mundur duke prdorur

sistemin MP3 (MPEG layer 3). Player-at e muzikes portabel pr ket format kane qene shume t zakonshem vitet e fundit. Zeri dixhital mund t proesohet lehtsisht nga kompjuteri me anen e software-it. Shume programe ekzistojne pr PC qe lejojne prdoruesit t regjistrojne, shfaqin, editojne, miksojne dhe t regjistrojne valet zanore nga disa burime. Pothuajse gjithe editimi profesional i zerit sht dixhital ditt e sotme. 7.2.2 Enkodimi Video Syri i njriut ka vetine qe kur nj imazh i shfaqet mbi retine, fiksohet pr disa milisekonda prpara se t ndryshohet. Ne se nj sekuence imazhes shfaqen do 50 ose me shume imazhe pr sekonde, syri nuk veren qe po shikon imazhe diskret. T gjithe filmat video dhe filmat e animuar shfrytzojne ket koncept pr t prodhuar pamje t levizshme. Pr t kuptuar sistemet video, sht me mire t fillojme me nj tlevizor t thjesht t stilit t vjetr bardh e zi. Pr t formuar imazhin dy-dimensional ne ekran, kamera skanon me shpejtsi nj rreze elektronike nj-dimensionale si voltazh ne funksion t kohes, duke regjistruar intnsitetin e drits gjat rruges. Ne fund t skanimit t quajtur frame, rrezja rivendoset. Intnsiteti si funksion i kohes transmetohet, dhe receptoret prserisin proesin e skanimit pr t riformuar figuren. Proesi i skanimit i prdorur nga kamera dhe marresi tregohen ne Fig. 7-5. (Megjithat disa kamera CCD intgrojne ne vend qe t skanojne, disa t tjera si dhe monitoret CRT skanojne.) Parametrat e skanimit variojne nga shtti ne shtt. NTSC ka 525 vija skanimi, nj raport horizontal me vertikal 4:3, dhe 30 frame/sek. Sistemi Europian PAL dhe SECAM kane 625 vija dhe raport 4:3 me 25 frame/sek. Ne t dy sistemet vijat me t siprme dhe me t poshtme nuk shfaqen (pr t afersuar nj imazh sa me katror ne nj CRT t rrumbullaket). Vetm 483 nga 525 NTSC linja skanimi (dhe 576 nga 625 PAL/SECAM) shfaqen. Ndersa 25 frame/sek jane t mjaftueshme pr t kapur levizje t rrjedhshme, ne at frame rate shume njerez sidomos t vjetrit, do prceptojne imazhin t nderpritet (sepse imazhet e vjetra jane shuar nga retina para se t rinjt t shfaqen). Ne vend qe rritet frame rate, qe do t kerkonte prdorimin e me shume bandwidth-i, merrent nj rruge tjetr. Ne vend qe t shfaqen vijat e skanimit nga lart posht, ne fillim t gjithe vijat shfaqen tek, pastaj vijat cift. do njra prej ketyre gjysem frameve quhet nj fushe. Eksprimentt kane treguar qe megjithese njerezit dallojne nderprerje ne 25 frame/sek, ata nuk e dallojne ne se ka t 50 frame/sec. Kjo teknike quhet intrlacing. Tlevizioni nonintrlacing ose video thuhet se sht progresive.

Figura 7-5. Skanimi i prdorur pr NTSC video dhe TV. Video me ngjyra prdor t njjtin koncept si ajo monokrome, prvec se prdor tre rreze. Secila prdoret pr njren nga njyrat primare: e kuqe, jeshile dhe blu (RGB). Kjo teknike funksionon sepse do ngjyre mund t formohet nga superpozimi i ngjyres se kuqe, jeshile dhe blue me intnsitet prkatse. Megjithat, pr t transmetuar nj kanal t vetm, t tre ngjyrat mund t kombinohen ne nj sinjal t vetm. Pr t lejuar transmetimet me ngjyra pr tu shfaqur ne marres bardh e zi, t tre sistemet RGB kombinohen linearisht ne nj si sinjal i vetm luminishent (bardhesie), dhe dy krominance (ngjyre), megjithese t gjithe prdorin koeficient t ndryshem pr t ndertuar keto sinjale nga sinjalet RGB. Intresant sht fakti qe syri sht me i ndjeshem ndaj sinjalit luminance se atij krominance, keshtu qe i fundit mund t mos transmetohet me saktsi. Gjithashtu sinjali luminance mund t transmetohet ne t njjen frekuence si ai i vjetri bardh e zi keshtu qe mund t kapet nga tlevizoret bardh e zi. T dy sinjalet krominance mund t transmetohen ne breza t ngusht ne frekuenca t larta. Disa tlevizore kane butona pr kontrollin e britghness, hue dhe saturation. Kuptimi i luminances dhe kromances sht i nevojshem pr t kuptuar si funksionon kompresimi i videos. Deri tani kemi pare video analoge. Tani le t kthehemi t video dixhitale. Prfaqesimi me i thjesht i videos dixhitale sht nj sekuence framesh, secili i prbere nga nj rrjet katroresh prej element figurash, ose pixel. Pr video me ngjyra, 8 bit pr pixel prdoren pr do njyre RGB, duke dhene 16 million ngjyra, qe sht mese mjaftueshem. Syri i njriut as nuk mund ti dalloje kaq shume ngjyra. Pr t prodhuar nj levizje t rrjedhshme, vidjo dixhitale, ashtu si ajo analoge, duhet t shfaqe 25 frame/sek. Megjithat, gjersa cilesia e mire e monitorit t kompjuterit mund ta

riskanoje ekranin pr imazhet ne video RAM deri 75 here ne sekonde apo me shume. intracing nuk sht e nevojshme. Pra, t gjithe monitoret e kompjuterave prdorin skanimin progresiv. Thjesht duke rivizatuar t njjtn frame tre here rresht mjafton pr t menjanuar nderprerjet. Me fjale t tjera, rrjedhshmeria e levizjes prcaktohet nga nj numer i ndryshem imazhes pr sekonde, ndersa nderprerja prcaktohet nga numri i vizatimeve t ekranit ne sekonde. Keto dy parametra jane t ndryshem. Nj imazh i palevizshem i vizatuar me 20 frame/sek nuk do t prodhohe nj levizje aritmike por do t nderpritet sepse nj frame do t shuhet nga retina para se t shfaqet tjetra. Nj film me 20 frame t ndryshme pr sekonde, secila e vizatuar 4 here rresht me 80Hz, nuk do t nderpritet, por levizja do t shfaqet aritmike. Rendesia e ketyre parametrave behet e qart kur marrim ne konsiderate bandwidth-in e nevojshem pr t transmetuar vidjo dixhitale ne nj rrjet. Monitoret e sotm prdorin t gjithe raportin 4:3 keshtu qe mund t prdorin tuba katodik t prodhuar ne seri t dizenjuar pr tlevizoret. Konfigurimet me t zakonshme jane 640x480 (VGA), 800x600 (SVGA), dhe 1024x768 (XGA). Nj XGA shfaq 24 bit pr pixel dhe 25 frame/sek, i nevojitet nj ushqim me 472 Mbps. Dyfishimi i ratet pr t menjanuar nderprerjet nuk sht shume trheqes. Nj zgjidhje me e mire sht transmetimi me 25 frame/sek dhe ruajtja ne komputr e do frame dhe shfaqja dy here. Transmetimet tlevizive nuk prdorin ket teknike sepse tlevizoret nuk kane memorie, dhe do t kerkohej konvertimi njehere ne dixhital qe kerkon hardware shtese. Si rrjedhoje, intrlacing prdoret pr transmetimet tlevizive dhe jo pr vidjo dixhitale.

7.3 Kompresimi Video

Duhet t jet e qart qe manipulimi i matrjalit multimedia ne forme t pa konpresuar sht jasht do diskutimi sht shume e madhe. E vetmja shprese sht kompresimi masiv, i cili sht i mundur. Fatmiresisht, nj trupe e madhe kerkimi gjat ketyre decadave t fundit ka cuar ne shume teknika dhe algoritma kompresimi t cilat e bejne transmetimin multimedia t pranueshem. Ne ket pjese ne do t studiojme disa metoda pr kompresimin e t dhenave multimediale, sidomos imazheve. T gjitha sistemet e kompresimit kerkojne dy algoritma: nj pr kompresimin e burimit t t dhenave, dhe nj pr dekompresimin t tij ne destinacion. Ne ket litrature, ketyre algoritmave i referohemi si algoritma enkodimi (encoding) dhe dekodimi (decoding). Ket terminologji do ta prdorim ketu, gjithashtu. Keto algoritma kane disa asimetri qe jane t rendesishme pr tu kuptuar. Ne fillim, pr shume aplikacione, nj dokument multimedia, le t themi, nj film do t enkodohet vetm njehere ( kur ruhet ne server-in multimedia) por do t decodohet mijera here ( kur t shihet nga klientt). Kjo asimetri do t thot qe sht e pranueshme qe algoritmi i encodimit t jet i ngadalt dhe t kerkoje hardware shtese duke lejuar qe algoritmi i

dekodimit t jet i shpejt dhe t mos kerkoje hardware t shtrenjt. Nga ana tjetr, ne multimedia realtime, si prshembull video konferenca, nj enkodimi i ngadalt sht i pa pranueshem. Encodimi duhet t behet ne ajer ne sistemet real time. Nj asimetri tjetr sht qe proesi enkodim/dekodim t mos jet i kthyshem. Qe do t thot, kur kompresojme nj file, transmetojme at dhe dekompresojme, prdoruesi pret t marre origjinalin mbrapr shembull, t sakt deri ne bitin e fundit. Me multimedia, kjo kerkese nuk qendron. Ne prgjithesi sht e pranueshme t kemi sinjal video pas enkodimit dhe dekodimit paksa ndryshe nga origjinali. Kur dalja e dekodimit nuk sht ekzakt si inputi origjinal themi se sistemi sht me humbje (lossy). T gjithe sistemet e kompresimit t prdorur pr multimedia jane loosy sepse japin me shume kompresim. 7.3.1 Standarti JPEG Standarti JPEG (Joint Photographic Exprts Group) pr kompresimin e figurave fikse me ton t vazhdueshem (pr shembull., fotografit) u zhvillua nga eksprtt e fotografise me bashkpunimin e ITU, ISO dhe IEC. sht i rendesishem pr multimedia sepse, me nj prafrim, standarti pr figurat e levizhme MPEG sht thjesht JPEG pr do frame vecant, plus disa veti shtese pr kompresimin nder frameve dhe konpesimin e levizjes. JPEG prcaktohet ne Standartin Nderkombetar 10918. Ka katr gjendje dhe shume opsione, por ne do merremi vetm me menyren e prdorimit pr video 24-bit RGB dhe do t leme jasht shume nga detajet. Hapi i pare i enkodimit t imazhi me JPEG sht ndarja e blloqeve. Pr arsye thjeshtsie, le t supozojme qe JPEG merr ne hyrje nj imazh 640x480 RGB me 24bit/pixel, sic tregohet ne Fig. 7-6(a). Meqe prdorimi i luminances dhe kromoinances jep rezultat me t mire kompresimi, luminanca dhe dy sinjalet e kromances llogaritn nga vlerat RGB. Pr NTSC ata quhen Y, I dhe Q, respektivisht. Pr PAL ata quhen Y, U dhe V dhe formulat jane t ndryshme. Me posht ne do t prdorim emrat NTSC, por algoritmi i kompresimit sht i njjt. Matrica t ndryshme ndertohen pr Y, I dhe Q, secila me elementet qe varjojne nga 0 ne 255. Me pas, blloqe katrore prej katr pikselash mesatarizohen ne matricat I dhe Q pr ti ulur ne 320x240. Ky reduktim sht me humbje, por syri zor se dallon at, meqe ai reagon me shume ndaj luminances se krominances. Megjithese, i kompreson t dhenat me nj faktor dy. Tani 128 i zbritt nga do element i tre matricave pr t vendosur 0 ne mes t brezit. Ne fund, do matrice ndahet ne blloqe 8x8. Matrica Y ka 4800 blloqe; dy t tjerat kane 1200 blloqe secila, sic tregohet ne Fig. 76(b).

F igura 7-6. (a) RGB input data. (b) Aftr block preparation. Hapi i dyt i JPEG sht ti aplikojme nj DCT (Discret Cosine Transformation) seciles nga 7200 blloqet veconte. Dalja e seciles DCT sht nj matrice 8x8 me koeficientt DCT. Elementet DCT (0,0) sht nj mesatare e bllokut. Elementet e tjere tregojne sa shume fuqi spektrale sht prezent ne do frekuence. Ne tori, nj DCT sht pa humbje (lossless), por ne praktike prdorimi i numrave me presje t levizhme dhe funksioneve transhendencial gjithmone shfaq disa gabime rrumbullakimesh qe cojne ne humbje informacioni. Normalisht, keto element shuhen shpejt me distancen nga origjina, (0,0), sic sugjerohet nga Fig. 7-7(b).

Figura 7-7.(a) Nj bllok i matrices Y, (b) Koeficientt DCT. Kur DCT kompletohet, JPEG leviz ne hapin 3, i cili quhet kuantizim, ne t cilin koeficientt me pak t rendesishem DCT shuhen. Ky transformim (me humbje) behet duke pjesetuar secilen nga koeficientt ne matricen 8x8 DCT nga elementi prkats ne tabelen e kuantizimit. Vlerat e vleres se kuantizimit nuk jane pjese e standartit JPEG. do aplikacion duhet t ofroje tabelen e vet t kuantizimit, duke i dhene atij mundesine pr t kontrolluar raportin humbje-kompresim.

F igura 7-8. Llogaritja e koeficientve t kuantizuar DCT. Hapi 4 sht reduktimi vleres (0,0) ne do bllok (i atij ne cepin lart majtas) duke zevendesuar at me vleren qe ndryshon nga blloku paraardhes. Meqe keto element jane mesataret e bllokut respektiv, ata duhet t ndryshojne gradualisht, keshtu qe duke marre vlera diferenciale duhet t reduktoje shumicen e vlerave t vogla. Asnj diferencial nuk llogaritet nga vlerat e tjera. Vlerat (0,0) i referohemi si komponentt DC; dhe t tjerave si komponent AC. Hapi 5 linearizon 64 elementet dhe aplikon enkodim t lists. Duke skanuar bllokun nga e majta ne t djatht dhe nga lart posht nuk do t prqendroje zerot bashke, keshtu qe skanimi zig-zag prdoret, sic tregohet ne Fig. 7-9. Ne ket shembull, kalimi zig- zag prodhon 38 zero rresht ne fund t matrices. Ky string mund t reduktohet ne nj count t vetm duke thene se jane 38 zero.

Figura 7-9. Rradha ne t cilen vlerat e kuantizuara transmetohen. Tani kemi nj list numrash qe prfaqesojne imazhin (ne hapesiren e transformuar). Hapi 6 Huffman enkodon numrat e ruajtjes ose transmetimit.

JPEG mund t duket e komplikuar, por kjo ndodh sepse sht vertet i komplikuar. Megjithat, derisa shpesh prodhon nj kompresim 20:1 ose me mire, sht shume i prhapur. Dekodimi i JPEG kerkon ekzekutimin e algoritmit mbrapr shembull. JPEG sht thuajse simetrik: kerkon po aq pr dekodimin sa pr enkodimin. 7.3.2 Standarti MPEG Me ne fund arritem ne zemren e ceshtjes: standarti MPEG (Motion Picture Exprts Grounp). Keto jane algoritmat kryesore pr kompresimin e videos dhe kane standarte nderkombetare qe ne 1993. MPEG-1 (Standarti Nderkombetar 11172) u dizenjua pr cilesi video regjistruesi (352 x 240 pr NTSC) duke prdorur bit rate prej 1.2 Mbps. MPEG-2 (Standarti Nderkombetar 13818) u dizenjua pr kompresimin e vidjos me cilesi broadcast me 4 ose 6 Mbps, keshtu qe mund t prfshihej ne kanalet e transmetimit NTSC dhe PAL. T dy versionet prfitojne nga dy lloj redundancies panevojshme qe ekzistojne ne filma: hapesinore dhe kohore. redundancy hapesinore mund t prdoret thjesht duke koduar do frame vec e vec me JPEG. Kompresim shtese mund t arrihet duke marren ne konsiderate faktin qe frame t njpasnjshme jane pothuaj identike (redunancy kohore). Sistemi DV (Digital Video) i prdorur nga vidjo kamerat dixhitale prdor vetm nj skeme t ngjashme me JPEG sepse enkodimi duhet t behet ne kohe reale dhe sht shume me i shpejt se enkodimi i seciles frame vec e vec. Rrjedhoja e ketij vendimi mund t shihet ne Fig. 7-2: megjithese vidjo kamerat dixhitale kane nj data rate me t vogel se video e pakompresuar, ata nuk jane aq t mira sa MPEG-2. (Pr t bere krahasimin t sinqert, video kamerat DV kampjonojne luminancen me 8bit dhe do chromance me 2 bit, por qendron prseri nj faktor pese pr kompresimin duke prdor encodim JPEG t ngjashem.) Pr skenat ku kamera dhe sfondi jane t palevizshem dhe nj ose dy aktore po levizin rrotull me ngadale, afersisht t gjitha pixelat do t jene identike nga frame ne frame. Ketu, thjesht duke zbritur do frame nga e para dhe duke ekzekutuar JPEG ne do diference do ishte mese e mjaftuehsme. Megjithat ne ato skena ku kamera po panning ose zmadhon, kjo teknike deshton keq. Ajo cfare nevojitet sht ndonj menyre pr t kompesuar levizjen. Kjo sht ajo cka bn MPEG saktsisht; ne fakt, kjo sht diferenac kryesore ndermjet MPEG dhe JPEG. Dalja e MPEG-2 konsiston nga tre tipe t ndryshme framesh qe duhen proesuar nga programi shfaqesh: I (Intracoded) frames: S P(Predictive) frames: B(Bidirectional) frames: Framet I jane po figura t koduara me JPEG, duke prdorur luminance me rezolucion t plot dhe kromance me gjysem rezolucioni gjat secilit bosht. sht e nevojshme t kemi frame I t shfaqen priodikisht pr tre arsye. E para, MPEG mund t prdoret pr transmetimet tlevizive, ku shikuesit qe zgjedhin me deshire. Ne se t gjitha framet varen

nga paraadheset duke shkuar deri t e para, ne se dikush ka humbur framin e pare nuk mund ta dekodoje asnjehere framen pasardhese. Kjo do t bnte t pamundur qe shikuesit t lidhen edhe ne se filmi ka filluar. E dyta, ne se ndonj nga framet do t merrej gabim, dekodimi i metejshem do t ishte i pamundur. E treta, pa framet I, kur bejme nej fast forwoard ose rewind, dekoderi duhet t llogarise do frame qe ka kaluar qe t ishte ne gjedje t dint vleren e frames du do t ndale. Me framet I, sht e mundur qe kalimi fast forward ose backward deri t nj frame I t gjendet dhe t filloje shikimi aty. Pr keto arsye framet I jane t futura ne output do nj dy here ne sekonde. Framet P, prkundrazi kodojne diferencat nder frameve. Ato bazohen ne idene e macrobloqeve, qe mbulojne 16 x 16 pixela ne hapesire luminance dhe 8x8 ne hapesire chromance. Nj bllok macro enkodohet duke kerkuar framen paraardhes ose dicka pak t ndryshme nga ajo. Nj shembull ku framet P mund t jene t prdorshme jepet ne Fig. 7-10. Ketu shohim tre frame t nj pas njshem qe kane t njjtin sfond, por ndryshojne ne pozicionin e personit. Blloqet macro qe prmbajne sfondin do t prputhen ekzaktsisht, por ato qe prmbajne personin do t zhvendosen me nj vlere dhe duhet t gjurmohen.

F igura 7-10. Tre frame video t njpasnjshme. Standarti MPEG nuk specifikon si t kerkojme, sa larg t kerkojme, ose sa i mire duhet t jet prputhja qe t ket rendesi. Kjo varet nga do implementim. Pr shembull, nj implementim mund t kerkoje nj bllok macro ne pozicionin aktual t frames paraardhese, dhe t gjithe pozicionet si zhvendosje +- x ne drejtim x dhe +- y ne drejtim y. Pr do pozicion, numri i prputhjeve ne matricen e luminances mund t llogaritet. Pozicione me me shume pike mund t deklarohet fitues, duke supozuar se ishte mbi nj threshold t paraprcaktuar. Prndryshe, blloku macro thuhet se mungon. Algoritme shume me t komplikuar ekzistojne, sigurisht. Ne se nj bllok makro gjendet, ai enkodohet duke marre diferencen e vlerave t tij me framen paraardhese ( pr luminancen dhe cromancen). Keto matrica t diferences me pas jane objekt i enkodimit JPEG. Vlera e makro bllokut ne rrjedhen daljes sht vektori i levizjes (sa larg blloku macro u zhvendos nga pozicioni meparshem ne secilin drejtim), duke u ndjekur nga diferencat e enkodimit JPEG me at ne framen paraardhese. Ne se blloku makro nuk ndodhet ne framen paraardhese, vlera aktuale enkodohet me JPEG, si ne framet I.

Framet B jane t ngjashme me P, prvec qe le ato lejojne referenca ne framen paraardhese dhe pasardhese, edhe ne frame I apo P. Kjo liri shtese lejon prmirsimin e kompesimit t levizjes, dhe sht gjithashtu e prdorshme kur objektt kalojne prpara ose pas objektve t tjera. Pr shembull, ne nj loje baseboll kur basemen i tret gjuan topin ne bazen e pare, mund t jet ndonj frame ku topi mbulon koken e basemen t edyt qe po leviz, ne sfond. Ne framen pasardhese koka ku mund pjeserisht e dukshme ne t majt t topit, me prafersine qe koka rrjedh nga frame qe vjen ku topi ka kaluar koken. Framet B lejojne t bazohen ne nj frame t pasuese. Pr t enkoduar nj frame B, enkoduesi ka nevoje t mbaje tre frame t dekoduara ne memorie njkohesisht; t kaluaren, prezentn dhe t ardhmen. Pr t thjeshtuar dekodimin, framet duhet t jene prezent ne rrjedhen MPEG ne rradhe varesie, se ne radhe shfaqje. Pra ehde me kohezim prfekt, kur nj video shfaqet ne nj rrjet, buferimi kerkohet ne makinen e userit pr t rirenditur framet pr shfaqje korrekte. Ne saj t kesaj diference ndermjet rradhes se varesise, t prpiqesh t luash nj film mbrapr shembull nuk do t punoj pa marre ne konsiderate bufferimin dhe algoritma kompleks. SKEDULIMI I PROESEVE MULTIMEDIA

Sistemet operative q mbshtsin multimediat ndryshojn nga ato tradicionalet n tre aspekte: skedulimi proeseve, sistemi i skedarve (file) dhe skedulimi i diskut. Ne do t fillojm ktu me skedulimin e proeseve dhe do vazhdojm me t tjerat n vijim.

Skedulimi i Proeseve Homogjene

Lloj m i thjesht i serverve vidio sht ai q mund t suportoj paraqitjen e nj numri t caktuar filmash, t gjith duke prdorur t njjtin shkall frame, rezolucion vidio, data rate dhe parametra t tjer. Posht ktyre kushteve, por nj algoritem skedulimi efektiv sht si nj shoqrues. Pr do film, ka nj proes t veant ( ose thread) puna e t cilit sht t lexoj filmin nga disku frame pas frame dhe m pas ta transmetoj tek prdoruesi. Meq t gjith proeset jan njsoj t rndsishm, duhet t bhet e njjta sasi pune pr do frame, dhe ti bllokosh kur ka ato kan prfunduar prpunimin e frame aktual, skedulimi round-robin e bn kt pun shum mir. E vetmja gj q duhet t shtojm sht standardizimi i algoritmeve skeduluese q sht nj mekanizm kohe pr tu siguruar se do proes ekzekutohet n frekuencn korrekte. Nj mnyr pr t realizuar kohn e duhur sht duke patur nj mastr clock q shnjon, le t themi, 30 her n sekond ( pr NTSC). N do shnjim, t gjitha proeset ekzekutohen n mnyr sekuenciale, n t njjtin rend. Kur nj proes ka mbaruar punn e tij, t gjitha proeset ekzekutohen prsri n njjtin rend. Pr sa koh q numri i

proeseve sht mjaftueshm i vogl sa t gjith punt mund t bhen nj koh frame, skedulimi round-robin sht efient.

Skedulimet e Prgjithshme n Koh-Reale

Fatkeqsisht, ky model zbatohet pak n realitet. Numri i prdorueseve q ndryshojn si shikues vijn e shkojn, madhsia e frame-it varion n natyrn e kompresimit t vidios ( frame- I jan m t mdha se frame P ose B) dhe filmat e ndryshm mund t ken rezolucion t ndryshm. Si rrjedhoj, proese t ndryshme duhet t ekzekutohen n frekuenca t ndryshme, me nj sasi pun t ndryshme, dhe me deadline ( afati i prfundimit) t ndryshme n varsi t puns q duhet t prfundoj. Kto konsiderata ojn n nj model t ndryshm: proese t shumta konkurrojn pr CPU, secili me punn dhe deadline-in e tij. N modelet pasuese, ne do t supozojm se sistemi e njeh frekuencn q duhet t ekzekutohet secili proes, dhe cili sht deadline pasues. Skedulimi i proeseve t shumt konkurrues, disa ose t gjith q kan nj deadline (afati i prfundimit) q duhet t plotsohet sht quajtur skedulim n kohreale. Si nj shembull t ambientit puns s skedulerit multimedia n koh-reale, konsiderojm tre proese A, B dhe C si tregohet n Fig. 7-11. Proesi A ekzekutohet do 30msec ( afrsisht shpejtsia e NTSC). do frame krkon 10msec t kohs CPU. N munges t konkurrencs, duhet t ekzekutohet n hovet (bursts) A1, A2, A3, etj., donjri fillon 30msec pas t parit. do hov (burst) i CPU kap nj frame dhe ka nj deadline; duhet t mbaroj prpara se tjetri t filloj. Gjithashtu n Fig. 7-11 tregohen dhe dy proese B dhe C. Proesi B ekzekutohet 25 her/sec ( per shembull,., PAL) dhe proesi C ekzekutohet 20 her/sec. Koha e llogaritur pr frame sht treguar si 15 msec dhe 5 msec respektivisht pr B dhe C, vetm pr ta br problemin e skedulimit m t prgjithshm se sa t pasurit t njjtn t gjith.

Figure 7-11. Tre proese periodik, secili paraqet nj film . Frame rate dhe prpunimi i krkuar pr do proes sht i ndryshm pr secilin film. Problemi i skedulimit tani sht se si t skedulohen A, B, dhe C pr tu siguruar se ato do t takohen me deadline-et e tyre respektive. Prpara se t shohim nj algoritem skedulimi, ne duhet t shohim n se ky set instruksionesh jan t skedulueshm gjithsesi. Referuar seksionit 2.5.4, q n se proesi i ka priodn Pi msec dhe krkesa Ci msec koh CPU pr frame, sistemi sht i skedulueshm vetm dhe vetm n qoft se

Ci 1 i 1 Pi
Ku m sht numri i proeseve, n kt rast, 3. Vini re q Pi/Ci sht vetm nj pjes e CPU q prdoret nga proesi i . Per shembull,., n Fig. 7-11, A sht duke ngrn 5/50 t CPU. S bashku kto pjes shkojn n 0.808 t CPU, kshtu q sistemi i proeseve sht i skedulueshm Deri tani ne supozuam se ka nj proes pr stream. N t vrtt, duhet t jen dy ( ose m shum proese) pr stream. Per shembull,., nj pr audio dhe nj pr vidio. Ato duhet t ekzekutohet n shkall (rate) t ndryshme dhe duhet t konsumojn sasi t ndryshme kohe CPU. N disa sisteme koh-reale, proeset jan t zvendsueshme dhe n disa t tjera nuk jan. N sistemet multimedia, proeset jan prgjithsisht t zvendsueshm, q do t thot se nj proes q sht n rrezik t humbjes s deadline-it tij mund n ndrpres

proesin n ekzekutim prpara se ai t mbaroj me frame-in e tij. Kur kjo mbaron, proes i mparshm vazhdon. Kjo sjellje sht vetm multiprogramim, si e kemi shikuar m par. Ne do t studiojm algoritmet skeduluese n koh-reale preemptable (zvendsuese) sepse nuk ka kundrshtime t tyre n sistemet multimedia dhe ato japin nj prfomanc m t mir se sa ato nonpreemptable. I vetmi problem sht se n se nj bufer transmetues sht mbushur n pak burst-e (hove), buferi sht mbushur nga deadline-et kshtu q ai mund t drgohet tek prdoruesi m nj opracion t vetm. Algoritmet koh-reale mund t jen statik dhe dinamik. Algoritmet statik i caktojn do proesi nj prioritet fiks dhe ather i jep prparsi skedulimit zvendsues duke prdorur ato prioritete. Algoritmet dinamike nuk kan prioritet t fiksuar. M posht ne do t shohim nga nj shembull pr secilin. Skedulimi n Shkall Uniforme Algoritmi statik klasik i skedulimit zvendsues n koh-reale pr , proeset periodik sht RMS ( Rate Monotonic Scheduling). Ai mund t prdoret pr proeset q plotson kushtet e mposhtme: do proes priodik duhet t mbaroj brenda priods tij. Proeset nuk varen nga njri tjetri. do proes i nevojitet e njjta sasi kohe CPU n do burst (hov) do proes jopriodik nuk ka deadline (afat prfundimi) Proeset zvendsues ndodhin menjeher dhe pa overhead.

Katr kushtet e para jan t arsyeshme (t pranueshme). E fundit nuk sht, sigurisht, por e bn modelin m t leht. RMS funksionon duke i prcaktuar do proesi nj prioritet fiks t njvlershme me frekuencn e zhvillimit t ngjarjes triggering. Per shembull,., nj proes q duhet t ekzekutohet do 30 msec ( 33 her/sec) merr prioritetin 33, nj proes q duhet t ekzekutohet do 40 msec (25 her/sec) merr prioritetin 25 dhe nj proes q duhet t ekzekutohet do 50 msec (20her/sec) merr prioritetin 20. Prioritetet jan kshtu lineare me shkalln ( rate) ( numrin e herve/sec q proesi ekzekutohet). Kjo sht arsyeja pse quhet shkall uniforme. N kohn e ekzekutimit, skeduleri gjithmon ekzekuton proesin me prioritetin m t lart q sht gati duke zvendsuar proesin n ekzekutim n se sht e nevojshme. Liu dhe Layland provuan se RMS sht optimale prgjat klass s algoritmeve statik t skedulimit. Figura 7-12 tregon se skedulimi n shkall uniforme funksionon n shembullin e Fig. 711. Proeset A, B dhe C kan prioritet statik, prkatsisht 33, 25 dhe 20, q do t thot se kurdo q A ka nevoj t ekzekutohet, ai ekzekutohet, duke zvendsuar do proes tjetr q aktualisht po prdor CPU. Proesi B mund t zvendsoj C por jo A. Proesi duhet t pres gjersa CPU nuk sht i zn q t ekzekutohet. N Fig. 7-12, fillimisht t tre proeset jan gati t ekzekutohen. Ai me prioritet m t lart, A, sht i zgjedhuri dhe lejohet t ekzekutohet gjersa t prfundojn n 15 msec, si tregohet n rreshtin RMS. Pasi prfundon, B dhe C ekzekutohen n at rend. S bashku,

kto proese marrin 30 msec pr tu ekzekutuar, kshtu q kur C mbaron, sht koha e A pr t filluar srish. Ky rotacion (altrnim) vazhdon derisa sistemi bhet i lir pr t=70.

Figure 7-12. Nj shembull i skedulimit n koh-reale t RMS dhe EDF

Pr t=80 B bhet i gatshm dhe ekzekutohet. Megjithat, pr t=90, nj proes me prioritet m t lart, A, bhet gati, kshtu q ai zvendson B dhe ekzekutohet deri sa mbaron, pr t=100. n kt pik sistemi mund t zgjedh t mbaroj B ose t filloj C por ai zgjedh proesin me prioritet m t lart, B

7.4.4. Skedulimi n fillim i deadline-eve m t hershm Nj tjetr algoritem popullor skedulues n koh-reale sht Earliest Deadline First. EDF sht nj algoritem dinamik q nuk krkon proese (prpunim) pr t qen priodik, si krkont algoritmi me shkalle uniforme. Madje nuk krkon as t njjtn koh ekzekutimi pr do hov (burst) t CPU, si bnte RMS. Kurdo q nj proes i nevojitet koh CPU, ai bn t ditur prezencn dhe deadline-in e tij. Skeduleri ruan nj list t proeseve t ekzekutueshm. Algoritmi ekzekuton proesin e par n list, at q sht m afr me

deadline-in. Kurdo q nj proes bhet gati, sistemi kontrollon n se deadline tij ndodhet prpara ekzekutimit t proesit aktual. N se po, proesi i ri zvendson aktualin. Nj shembull i EDF sht dhn n Fig. 7-12. Fillimisht t gjith proeset jan gati. Ata ekzekutohen n rendin e deadline-eve t tyre, A duhet t mbaroj pr t=30, B duhet t mbaroj pr t=40 dhe C duhet t mbaroj pr t=50, kshtu q A ka deadline-in m t hershm kshtu q duhet t filloj e para. Deri pr t=90 pengesat jan t njjta si tek RMS. Pr t=90, A bhet srish gati, dhe deadline tij sht t=120, i njjt me deadline e Bs. Skeduleri logjikisht mund t zgjedh secilin prej t dyve pr tu ekzekutuar, por n praktik, zvendsimi i B ka disa kosto lidhur me t, kshtu sht m mir q B t vazhdoj t ekzekutohet. Pr t larguar iden se RMS dhe EDF gjithmon japin t njjtn rezultat, le t shohim tani nj tjetr shembull, q jepet n figurn e mposhtme. N kt shembull perioda e A, B dhe C jan t njjt si m par, por A tani ka nevoj pr 15 msec koh CPU pr do hov (burst) n vend t 10 msec. Skedulshmria teston llogaritjen e prdorimit t CPU si 0.500 + 0.375 + 0.100=0.975. Vetm 25% e CPU lihet, por n tori CPU nuk sht e mbishkrueshme dhe do t ishte e mundur t siguroje nj skeduleri legal.

Figure 7-13. Nj tjetr shembull i skedulimit me RMS dhe EDF Me RMS, prioritet e tre proeseve jan ende 33, 25, dhe 20 vetm si shtje period, jo si koh ekzekutimi. Ksaj here, B1 nuk mbaron derisa t=30, n t ciln A sht gati prsri. Gjithashtu A mbaron pr t=45 dhe B sht prsri gati kshtu ka nj prioritet m t lart se C, ai ekzekutohet dhe C humbet deadline-in e tij, RMS dshton. Dhe tani shiko se si EDF e zgjidh kt problem. Pr t=30, ka nj znk midis A2 dhe C1, sepse deadline i C-s sht 50 dhe i A2 sht 60, C skedulohet. Kjo sht e ndryshme nga RMS, ku A ishte fituesi me prioritet m t lart. Pr t=90 A rikthehet gati pr t katrtn her. Deadline i A-s sht i njjt m at t proesit aktual (120), kshtu q skeduleri ka nj zgjidhje pr zvendsim ose jo. Si m par, sht m mir q t mos ket zvendsim n se nuk sht e nevojshme, kshtu q B3 lejohet t mbaroj. N shembullin e Fig. 7-13 CPU sht e zn 100% deri n t=1500. Megjithat, prfundimisht nj hapsir do t prftohet sepse CPU sht vetm 97.5% e shfrytzuar. Derisa koha e fillimit dhe mbarimit jan shumfish t 5 msec, hapsira do t jet 5 msec. Pr t realizuar dhe 2.5% e kohs n t ciln CPU nuk sht e zn, hapsira prej 5 msec do t merret pr do 200 msec, e cila nuk tregohet n Fig. 7-13. Nj pyetje interesante sht pse RMS dshton. Parimisht, prdorimi i prioriteteve statik punon vetm n se prdorimi i CPU nuk sht shum i lart. Liu dhe Layland (1973) provuan se pr do sistem t proeseve periodik, n se

Ci m(21/ m 1) i 1 Pi
ather RMS sht e garantuar se do t punoj. Pr 3, 4, 5, 10, 20 dhe 100, maksimumet e prdorimit t lejuar jan 0.780, 0.757, 0.743, 0.718, 0.705 dhe 0.696. Kur m, maksimumi i prdorimit sht nj asimptot ln2. Me fjal t tjera, Liu dhe Layland provuan q pr tre proese, RMS gjithmon punon n se prdorimi i CPU sht e barabart ose m pak se 0.708. N shembullin e par ishte 0.808 dhe RMS punoi, por vetm sa ishim me fat. Me perioda dhe koh ekzekutimi t ndryshme, prdorimi i 0.808 do t dshtoj. N shembullin e dyt, prdorimi i CPU ishte aq i lart ( 0.975 ) sa nuk kishte shpres se RMS do t punonte. N kontrast, EDF gjithmon punonte pr do set proesesh t skedulueshme. Mund t arrij t prdor 100% t CPU-s. mimi q do t paguhet sht nj algoritem m kompleks. Kshtu q n serverat vidio n se prdorimi i CPU-s sht posht limitit t RMS, ather RMS mund t prdoret, n t kundrt duhet t zgjidhet EDF.

KAPITULLI I TETE

MULTIPROCESORET

Nje multiprocesor me kujtese te ndare (shared-memory multiprocessor) eshte nje sistem kompjuterik ne te cilin dy ose me shume CPU ndajne akses te plote ne nje RAM te perbashket. Nje program qe ekzekutohet ne nje nga CPU-te duket si nje hapesire adrese virtuale normale. Karakteristika e vetme, jo e zakonshme qe ky sistem ka eshte qe CPU mund te shkruaje disa vlera ne nje fjale memorje (memory word), dhe me pas lexon fjalen perseri dhe jep nje vlere te ndryshme (sepse nje tjeter CPU e ka ndryshuar ate). Kur organizimi eshte korrekt, kjo karakteristike formon bazen e komunikimit interprocesor: nje CPU shkruan disa te dhena ne memorje dhe nje CPU tjeter lexon te dhenen jashte. Per pjesen me te madhe, sistemet e operimit multiprocesore jane tamam sisteme operimi te rregullta. Ato merren me thirrjet sistem, bejne menaxhimin e memorjes, mundesojne nje file system dhe menaxhojne pajisjet I/O. Megjithate, ndodhen disa zona ne te cilat ato kane tipare unike. Keto perfshijne sinkronizimin e proceseve, menaxhimin e burimeve dhe skedulimin. Me poshte, si fillim do bejme nje veshtrim te permbledhur te hardwareit te multiprocesorit dhe pastaj shkojme ne funksionet e sistemeve operativ. 8.1.1 Multiprocessor Hardware Ndone se te gjithe multiprocesoret kane karakteristike qe cdo CPU mund te adresoje te gjitha fjalet e memorjes, disa multiprocesore kane tipar shtese ku cdo fjale memorje mund te lexohet aq shpejt sa cdo fjale tjeter memorje. Keto makina jane quajtur multiprocesore UMA (Uniform Memory Access). Ne kontrast, multiprocesoret NUMA (NonUniform Memory Access) nuk e kane kete tipar. Arsyeja pse ekziston kjo diference do te tregohet me vone. Si fillim, ne do te ekzaminojme multiprocesoret UMA dhe me pas do shkojme te multiprocesoret NUMA. UMA Bus-Based SMP Architectures Multiprocesoret e thjeshte jane bazuar ne nje single-bus, sic eshte ilustruar ne fig.8-2(a). Dy ose me shume CPU dhe nje ose me shume module memorje, te gjitha perdorin te njejtin bus per komunikim. Kur nje CPU do te lexoje nje fjale memorje, ne fillim ajo kontrollon n qofte se bus-i eshte i zene apo jo. N qofte se bus-i eshte bosh, CPU vendos adresen e fjales qe do ne bus, kerkon disa sinjale kontrolli dhe pret derisa memorja te vendose fjalen e deshiruar ne bus. N qofte se bus-i eshte i zene kur nje CPU do te lexoje ose shkruaje ne memorje, CPU pret pikerisht derisa bus-i te jete bosh. Ne kete menyre zgjidhet problemi me kete projekt. Me dy ose me tre CPU, lufta per bus-in behet e menaxhueshme, me 32 ose 64 ajo behet e pa perballueshme. Sistemi do te jete totalisht i

limituar nga bandwidth-i i bus-it dhe shume nga CPU-te do te jene pa pune shumicen e kohes. Zgjidhja e ketij problemi eshte qe te shtohet nje cache ne cdo CPU, sic pershkruhet ne fig.8-2(b). Cache-ja mund te ndodhet brenda chipit te CPU, afer chipit te CPU, ne bordin e procesorit ose ne disa kombinime te ketyre. Ne pergjithesi, caching nuk i referohet nje fjale individuale baze por nje blloku prej 32-64 byte. Kur nje fjale adresohet, i gjithe blloku i saj shkon te marre ate (fjalen) ne cache-ne e CPU-se. Cdo bllok cache-je eshte etiketuar sikur cdo bllok te ishte read-only (ne kete rast ai mund te jete prezent ne multiple cache ne te njejten kohe) ose si read-write (ne kete rast blloku nuk mund te jete prezent ne ndonje cache tjeter). N qofte se, nje CPU perpiqet te shkruaje dhe ndodhet ne nje ose me shume remote cache, bus-i hardware detekton shkrimin dhe vendos nje sinjal ne bus per te informuar te gjitha cache-te e tjera mbi shkrimin. N qofte se, cache-te e tjera kane nje clean copy qe mund te jete nje kopje ekzakte e asaj cfare eshte ne memorje, ato pikerisht mund te hedhin kopjet e tyre dhe te lejojne shkruesin (writer) te kape bllokun e cache-se nga memorja perpara se ai te modifikohet. N qofte se ne disa cache te tjera ndodhet nje dirty copy, kjo duhet patjeter te shkruhet perseri ne memorje para se te vazhdoje shkrimi ose kjo te transferohet direkt te shkruesi prane bus-it. Disa cache transferojne protokolle ekzistues. Nje mundesi tjeter eshte pershkrimi i fig.8-2(c), ne te cilen cdo CPU nuk ka vetem nje cache, por gjithashtu ka nje memorje lokale, private ne te cilen ajo akseson mbi nje bus te dedikuar (privat). Per ta perdorur kete konfiguracion ne menyre optimale, kompiluesi duhet te vendose te gjithe tekstin e progaramit, stringat, konstantet dhe te dhenat e tjera vetem te lexueshme, stacks dhe variablat lokale ne memorien private.

Figura 8-2. Memorja shared perdoret vetem per te shkruajtur variabla shared. Ne shumicen e rasteve, kjo vendosje e kujdesshme do te zvogelonte shume trafikun ne bus, por kjo do te kerkonte bashkepunim aktiv nga kompiluesi.

UMA Multiprocessors Using Crossbar Switches

Megjithe perdorimin e caching me te mire, perdorimi i nje single bus e limiton madhesine e nje multiprocesori UMA me rreth 16 ose 32 CPU. Per te shkuar me tej, nevojitet nje lloj tjeter nderlidhjeje rrjeti. Qarku me i thjeshte per te lidhur n CPU me k memorje eshte crossbar switch, i treguar ne fig.8-3. Crossbar switches jane perdorur per dekada brenda centraleve te linjave telefonike per te lidhur nje grup linjash hyrese me nje grup linjash dalese ne nje rruge arbitrare. Ne cdo interseksion te nje linje horizontale (hyrese) dhe vertikale (dalese) ndodhet nje crosspoint. Nje crosspoint eshte nje celes (switch) i vogel qe mund te hapet ose te mbyllet elektrikisht, i varur ne se linjat horizontale dhe vertikale jane te lidhura ose jo. Ne fig.8-3(a) ne shohim tre crosspoints te mbyllura njeheresh, duke lejuar lidhjet (CPU, memorje) ndermjet cifteve (00L, 000), (101, 101) dhe (110, U10) ne te njejten kohe. Shume kombinime te tjera jane gjithashtu te mundshme. Ne fakt numri i kombinimeve eshte i barabarte me numrin e rrugeve te ndryshme qe tete torrra mund te vendosen pa problem ne nje fushe shahu.

Nje nga karakteristikat me te mira te crossbar switch eshte qe kjo eshte nje nonlocking network (rrjet jo i mbyllur), qe do te thote se gjithmone asnje CPU nuk do pranoje lidhjen qe i nevojitet sepse disa crosspoint ose linja eshte tashme e zene (supozojme se vete moduli i memorjes eshte i perdorshem, i lire). Gjithashtu asnje planifikim i avancuar nuk nevojitet. Madje n qofte se ngrihen shtate lidhje arbitrimi, eshte gjithmone e mundshme te lidhen pjesa e CPU me pjesen e memorjes. . Nje nga karakteristikat me te keqia te crossbar switch qendron ne faktin se numri i crosspoints rritet me n2. Duke patur 1000 CPU-s dhe 1000 module memorje, na duhen 1 milion crosspoints. Nje crossbar switch kaq i madh nuk eshte i realizueshem, pra nuk eshte i mundshem. Megjithate, per sistemet medium-size, nje crossbar switch eshte i realizueshem, i zbatueshem.

UMA Multiprocessors Using Multistage Switching Networks Nje multiprocesor komplet i ndryshem i bazuar ne nje switch 2x2 te thjeshte tregohet ne fig.8-4(a). Ky switch ka 2 hyrje dhe 2 dalje. Mesazhet e arritura ne cdo linje hyrese mund te transferohen ne cdo linje dalese. Per qellimet tona, mesazhet do te perbehen nga 4 pjese, sic tregohet ne fig.8-4(b). Fusha Module tregon se cila memorje perdoret. Address specifikon nje adrese brenda nje moduli. Opcode jep operacionet, sic jane READ ose WRITE. Ne fund, fusha jo e detyrueshme Value mund te permbaje nje operand, sic eshte nje fjale 32-bit e cila shkruhet me ane te nje WRITE. Switch kontrollon fushen Module dhe e perdor ate per te vendosur n qofte se mesazhi do te dergohet ne X ose ne Y. Switch-i jone 2x2 mund te rregullohet ne disa rruge per te ndertuar nje multistage switching networks.

Nje mundesi eshte klasa ekonomike omega network e ilustruar ne fig.8-5. Ketu kemi lidhur 8 CPU, ne 8 memorje duke perdorur 12 switches. Ne pergjithesi, per n CPU dhe n memorje ne do na duhen log2/7 faza (stages), me n/2 switches (celesa) per faze, me nje total prej (>>/2)log2<< switches, e cila eshte me e mire se n2 crosspoints, kryesisht per vlera te medha te tij . Modeli elektrik i rrjetit network (omega network) shpesh quhet perfect shuffle, pasi miksimi i sinjaleve ne cdo faze riasemblon nje pako letrash te prera pergjysem, me pas perzihen leter per leter. Per te pare se si punon omega network, supozojme se CPU 01 I do te lexoje nje fjale nga moduli memorjes I 10. CPU dergon nje mesazh READ per te transferuar permbajtjen ID110 ne fushen Module. Switch merr bitin e pare (nga e majta) te I 10 dhe e perdor ate per routing. Nje 0 cohet ne daljen e siperme dhe nje 1 cohet ne daljen e poshtme. Per sa kohe ky bit eshte 1, mesazhi kalon neper daljen e poshtme te 2D. Te gjithe switches e fazes sekondare, perfishre 2D, perdorin bitin e dyte per routim. Kjo, gjithashtu, eshte nje J, keshtu qe mesazhi tani avancohet ne daljen e poshtme te 3D. Ketu biti i trete testohet dhe duhet te jete 0. Si pasoje, mesazhi shkon ne daljen e siperme dhe arrin ne memorjen 110, sic u deshirua. Rruga e ndjekur nga ky mesazh tregohet ne fig.8-5 nga letra a. Si mesazh qe leviz permes switching network, bitet ne te majte te numrit te modulit jane jo shume te nevojshme. Per rrugen a, linjat hyrese jane 0 (upper input to ID), 1 (lower input to 2D) dhe I (lower input to 3D), respektivisht. Pergjigja routohet perseri mbrapsht, duke perdorur 011, vetem duke lexuar kete nga e majta ne te djathte. Ne te njejten kohe, CPU 001 kerkon te shkruaje nje fjale ne modulin e memorjes 001. Nje proces analog ndodh ketu, me mesazhe qe routohen neper daljet e siperme dhe te poshtme, respektivisht, te etiketuar nga letra b. Kur kjo arrin, fusha Module e saj lexon DOI, duke treguar rrugen qe duhet te ndjeke. Per sa kohe keto dy kerkesa nuk perdorin switches,

linja ose module memorje te njejta, ato mund te vazhdojne ne paralel. Tani te shohim se cmund te ndodhe n qofte se CPU 000 kerkon te aksesoje direkt modulin e memorjes 00. Kjo kerkese do te bjere ne konflikt me kerkesen e CPU 001 ne switch 3A. Nje nga keto mund te kete luhatje. Ndryshe nga crossbar switch, omega network eshte nje blocking network (rrjet i blllokuar). Jo cdo bashkesi kerkesash mund te plotesohet menjehere. Konfliktet mund te ndodhin gjate perdorimit te nje percjellesi ose nje switch, aq mire sa ndermjet kerkesave ne memorje dhe pergjigjeve nga memorja.

Eshte forte e pershtatshme te perhapesh referencat e memorjes uniformisht permes moduleve. Nje teknike e zakonshme eshte perdorimi i biteve low-order si numra te modulit. Konsiderojme, pr shembull, nje hapesire adrese te orientuar byte-i, zakonisht 2 bitet low-order do jene 00, por 3 bitet e tjera do jene uniformisht te shperndare. Duke perdorur keto 3 bite si numer moduli, adresat e fjaleve te njepasnjeshme do jene ne modulet e njepasnjeshme. Nje sistem memorje ne te cilin fjalet e njepasnjeshme jane ne module te ndryshme do te quhet interleaved (i bere ne shtresa). Memorjet interleaved rrisin paralelizmin sepse shumica e referencave te memorjes ndodhen ne adresat e njepasnjeshme. Gjthashtu eshte e mundur te projektohen switching networks te cilat jane nonlocking dhe qe ofrojne rruge te shumta nga cdo CPU ne cdo modul memorje, te cilat lehtesojne dhe trafikun. NUMA Multiprocessors Multiprocesoret UMA me nje bus te vetem (single-bus UMA multiprocessors) jane pergjithesisht te limituar ne jo me shume se disa CPU dhe crossbar ose switched multiprocessors. Keto perdorin pajisje hardware te shtrenjta dhe nuk jane shume te

medhenj. Per te marre me shume se 100 CPU, dicka duhet te jepet. Zakonisht, ajo qe jepet eshte idea se te gjitha modulet e memorjes kane kohe te njejte akse simi. Ky koncension con ne idene e multiprocesoreve NUMA, sic tregohet me poshte. Ne ngjashmeri me multiprocesoret UMA, NUMA kane nje hapesire te vetme adrese gjate gjithe CPU-ve, por ne ndryshim nga makinat UMA, akse si per ne modulet e memorjes lokale eshte me i shpejte se akse simi ne largesi. Ne kete menyre te gjitha programet UMA do te ekzekutohen pa problem ne makinat NUMA, por performanca ne keto makina do te jete me e dobet se ne nje makine UMA me te njejten shpejtesi ore. Makinat NUMA kane 3 karakteristika kryesore te cilat edhe i dallojne keto nga multiprocesoret e tjere. 1. Keto kane nje hapesire te vetme adrese e dallueshme ne te gjithe CPU-te. 2. Akse simi i memorjes ne distance (remote memory) behet nga instruksionet LOAD & STORE. 3. Akse simi i memorjes ne distance (remote memory) eshte me i ngadalte se akse simi ne memorje lokale. Kur koha e akse sit te memorjes ne distance nuk eshte e fshehur (sepse ketu nuk ndodh caching), sistemi quhet NC-NUMA. Kur cache-te koherente jane te pranishme, sistemi quhet CC-NUMA (CACHE COHERENT NUMA). . Rruga me e perhapur per ndertimin e multiprocesoreve te medhenj CC-NUMA aktualisht eshte directory-based multiprocessor. Ideja eshte qe te kete nje database e cila te tregoje se ku ndodhet cdo linje cache-je dhe cfare statusi ka ajo. Kur referohet nje linje cache-je, database mundohet te gjeje se ku ndodhet kjo linje dhe ne se kjo linje eshte clean ose dirty (modified). Per te patur nje ide me konkrete rreth nje multiprocesori directory-based, le te shohim nje shembull te thjeshte: nje sistem me 256 nyje (a 256 node system), cdo nyje (node) perbehet nga nje CPU dhe 16 MB RAM te lidhura te CPU permes nje bus-i lokal. Memorja totale eshte 232 byte, e ndare ne 226 linja cache-je me 64 byte secila. Memorja eshte e shperndare ne menyre statike midis nyjave (nodes), me 0-16M ne nyjen 0, 1632M ne nyjen 1 dhe keshtu me rradhe. Nyjet lidhen me ane te nje rrjeti nderlidhjeje (interconnection network) sic tregohet ne fig.8-6(a). Cdo nyje gjithashtu mban directory entries per 21* 64-byte linjat e cache-se duke perfshire dhe 224 byte memorje. Per momentin, ne do supozojme se nje linje mund te mbahet ne te shumten nje cache. Per te pare se si punon direktoria, le te marrim nje instruksion LOAD nga CPU 20 e cila i referohet nje linje te cache-se. Ne fillim CPU con instruksionin prezent per ne MMU e saj, e cila perkthen ate ne adrese fizike, domethn, 0x24000108. MMU-ja e ndan kete adrese ne tre pjese sic tregohet ne fig.8-6(b). Ne decimale, tre pjeset perbehen nga: nyja 36, linja 4 dhe offset 8 bit. MMU sheh se fjala e referuar ne memorje eshte nga nyja 36, dhe jo nga nyja 20, keshtu qe ajo dergon nje mesazh kerkese nepermjet rrjetit te nderlidhjes ne linjen e vete nyjes (node) 36, duke pyetur ne se linja 4 e saj eshte cashed dhe n qofte se po, ku. Kur kerkesa mberrin ne nyjen 36 gjate rrjetit te nderlidhjes, ajo routohet ne direktorine hardware. Hardware fut ne tabelen e vet prej 218 entries (hyrje), nje nga linjat e saj te cache-se dhe ekstrakton hyrjen 4 (entry 4).

Ne fig.8-6(c) ne shohim se linja nuk eshte cached, keshtu qe hardware terheq linjen 4 nga RAM lokal, e dergon ate mbrapsht tek nyja 20 dhe update-on direktorine e entry 4 per te treguar se tani linja eshte cached ne nyjen (node) 20.

Tani le te shohim nje kerkese te dyte, kete here duke pyetur rreth nyjes 36\s linja 2. Nga fig.8-6(c) shohim se kjo linje eshte cached ne nyjen 82. Ne kete pike hardware mund te update-oje direktorine entry 3 qe do te thote se linja tani eshte ne nyjen 20 dhe me pas te dergoje nje mesazh ne nyjen 82, duke njoftuar kete te kaloje linjen ne nyjen 20 dhe te shfuqizoje cache-ne e saj. Le te llogarisim se sa memorje zihet nga direktorite. Cdo nyje ka 16 MB RAM dhe 218 9bit entries per te mbajtur gjurmet e RAM-it. Pra direktoria e siperme ka rreth 9x218 bite te ndara nga 16 MB ose rreth 1.76%, e cila eshte pergjithesisht e pranueshme (ndone se ajo duhet te jete memorje me shpejtesi te larte, gje qe rrit koston e saj). Madje me linje cache-je 32-byte overhead-i duhet te jete 4%. Kurse me 128-byte linje cache-je, ajo duhet te jete poshte 1%. Nje kufizim i qarte i ketij projekti eshte se nje linje (line) mund te jete cached ne nje nyje (node) te vetme. Per te lejuar linjat qe te jene cached ne shume nyje, ne na duhen disa rruge per pozicionimin e gjithe ktyre, pr shembull te zhvleresoje ose te update-oje ato ne nje shkrim. Ekzistojne opsione te ndryshme per te lejuar caching ne nyje te ndryshme ne te njejten kohe, por nje diskutim i ketyre mund te trajtohet jashte ketij libri.

8.1.2

Llojet e Sistemeve Operativ ne Multiprocesore (Multiprocessor Operating System Types)

Tani le te shkojme nga multiprocesoret hardware ne multiprocesoret software, ne menyre te vecante, ne sistemet e operimit multiprocesore. Jane te mundshme disa variante. Me poshte ne do te studiojme tre prej tyre. Cdo CPU Ka Sistemin e Vet Operativ Rruga me e thjeshte e mundshme per te organizuar nje sistem operimi multiprocesore eshte qe ne menyre statike te ndahet memorja ne aq particione sa procesore ka dhe cdo CPU te kete memorjen e vet private, si dhe kopjen e vet private te sistemit operativ. Ne fakt, n CPU-te me pas do te operojne si n kompjutera te pavarur. Nje optimizim i qarte eshte qe te lejojme te gjitha CPU te ndajne kodin e sistemit operativ dhe te bejne vetem kopje private te te dhenave sic tregohet ne fig 8-7.

Kjo skeme eshte akoma me e mire se duke patur n kompjutera te ndara, sepse kjo i lejon te gjitha makinave te ndajne nje bashkesi disqesh dhe pajisjet e tjera I/O dhe gjithashtu kjo skeme lejon memorjen te ndahet (shared) ne menyre fleksibel. Pr shembull, n qofte se nje dite nje program i madh i paperdorur do te ekzekutohet, nje nga CPU do zinte nje pjese extra te madhe te memorjes per kohezgjatjen e ketij programi.Vec kesaj, proceset mund te komunikojne ne menyre eficiente me nje proces tjeter duke patur, le te themi nje prodhues (producer), i cili te jete ne gjendje te shkruaje te dhenat ne memorje dhe nje konsumator per te terhequr te dhenat nga vendi ku prodhuesi i shkruan ato. Eshte nje reference e hollesishme, shume e vlefshme e kater aspekteve te projektit e cila nuk mund te jete shume e qarte. E para, kur nje proces kryen nje thirrje sistemi, kjo thirrje eshte e zene dhe merret me CPU-ne e vet duke perdorur strukturat e te dhenave ne tabelat e sistemit te vet operativ. E dyta, per sa kohe cdo sistem operativ ka tabelat e veta, ai gjithashtu ka edhe bashkesine e vet te proceseve qe ky sistem i skedulon vete. Ketu nuk ndodh ndarja e proceseve. N qofte se nje user logon ne CPU 1, te gjitha proceset e tij ekzekutohen ne CPU 1. Si rrjedhoje, mund te ndodhe qe CPU 1 te jete bosh ndersa CPU 2 te jete e mbushur me pune.

E treta, nuk ndodh ndarja e faqeve. Mund te ndodhe qe CPU 1 te kete faqe per te ruajtur ndersa CPU 2 te jete duke faqosur (paging) ne menyre te vazhdueshme. Nuk ka asnje rruge qe CPU 2 te marre hua disa faqe nga CPU 1 derisa shperndarja e memorjes eshte fikse. E katerta, dhe me e keqja, n qofte se sistemi operativ mban nje buffer cache te blloqeve te diskut te perdorur se fundi, cdo sistem operativ e ben kete ne menyre te pavarur nga nje tjeter. Keshtu qe mund te ndodhe qe nje bllok disku te jete present ose dirty ne shume buffer cache ne te njejten kohe, duke nga dhene nje rezultat te gabuar. Menyra e vetme per te zgjidhur kete problem eshte qe te eleminohen blloqet e cache-se. Per ta bere kete nuk eshte e veshtire por kjo ul shume performancen. Master-Slave Multiprocessors Per keto arsye, ky model eshte jo shume i perdorur ndone se ky eshte perdorur ne fillimet e multiprocesoreve, kur qellimi ishte pershtatja e disa multiprocesoreve te rinj sa me shpejt te ishte e mundur. Nje model i dyte tregohet ne fig.8-8. Ketu, nje kopje e sistemit operativ dhe tabelat e saj jane prezente ne CPU 1dhe jo ne ndonje CPU tjeter. Te gjitha thirrjet sistem jane per te CPU 1 qe te perpunohen atje. Gjithashtu CPU 1 mund te ekzekutoje proceset user n qofte se ka CPU time te mbetur. Ky model quhet masterslave ku CPU 1 eshte master dhe gjithe te tjeret jane slaves.

. Modeli master-slave zgjidh shumicen e problemeve te modelit te pare. Ka nje strukture te vetme te dhenash qe mban gjurmen e proceseve ready (gati). Kur nje CPU punon bosh, ajo therret sistemin operativ per nje proces qe te ekzekutohet dhe percakton njerin. Keshtu qe asnjehere nuk mund te ndodhe qe nje CPU te jete bosh ndersa nje tjeter te jete e mbingarkur ose plot. Ne menyre te ngjashme, faqet mund te shperndahen pergjate gjithe proceseve ne menyre dinamike dhe ndodhet vetem nje buffer cache, keshtu qe nuk mund te kete mosperputhje. Problemi ne kete model eshte se me disa CPU, master-i do jete si nje gryke shisheje. Megjithate, ai mund te merret me te gjitha thirrjet sistem nga te gjitha CPU-te. N qofte se, le te themi, 10% e gjithe kohes eshte harxhuar duke u marre me thirrjet sistem, atehere 10 CPU do te mbushin shume master-in, dhe me 20 CPU ai do jete plotesisht i mbingarkuar.

Keshtu qe ky model eshte i thjeshte dhe i zbatueshem per mikroprocesoret e vegjel, ndersa per te medhenjte ai deshton. Symmetric Multiprocessors Modeli yne i trete, SMP (Multiprocesoret Simetrike) eliminon asimetrite. Ky eshte nje kopje e sistemit operativ ne memorje por edhe ndonje CPU mund ta ekzekutoje ate. Kur behet nje thirrje e sistemit, CPU-ja ne te cilen eshte kryer thirrja e sistemit bie ne Kernel dhe proceson thirrjen e sistemit. Modeli SMP eshte ilustruar ne figuren 8.9.

Ky model balancon proceset dhe memorjen ne menyre dinamike, perderisa ka nje set tabelash te sistemit operativ. Ai gjithashtu eleminon CPU master bottleneck pasi nuk ka master. Por ai zoteron te tjera probleme. Ne vecanti, ne qofte se dy ose me shume CPU ekzekutojne kodin e sistemit operativ ne te njejten kohe, rezultati do te jete shkaterrues. Imagjinoni dy CPU qe punojne njekohesisht duke zgjedhur te njejtin proces per ta ekzekutuar ose ti drejtohen te njejtes faqe te lire te memorjes. Menyra me e mire per te zgjidhur keto problem eshte bashkimi i nje mutex (pr shembull, lock) me sistemin operativ, duke e bere te gjithe sistemin nje zone te madhe kritike. Kur nje CPU do te ekzekutoje kodin e sistemit, duhet fillimisht te marre ne zoterim mutex-in. N qofte se mutex-i eshte i kycur, i duhet te prese. Ne kete menyre, cdo CPU mund te ekzekutoje sistemin operativ, por ne nje kohe te caktuar. Ky model funksionon, por ka disavantazhe po aq sa modeli master-slave. Serish supozojme qe 10% e kohes totale eshte shpenzuar brenda sistemit operativ. Me 20 CPU do te kete nje rradhe te gjate te CPU-ve qe presin te hyjne ne sistem. Per fat te mire, eshte e thjeshte te permiresohet. Shume pjese te sistemit operativ jane te pavarura nga njeratjetra. Per shembull, nuk ka asnje problem me nje CPU qe ekzekuton skedulerin nderkohe qe nje CPU tjeter po mban nje thirrje te sistemit file dhe nje CPU e trete proceson nje page fault. Ky rregull con ne ndarjen e sistemit operativ ne rajone kritike te pavarura qe nuk nderveprojne me njera-tjetren. Cdo rajon kritik mbrohet nga mute i tij personal, keshtu qe ne nje kohe te caktuar vetem nje CPU mund ta ekzekutoje ate. Ne kete menyre arrihet me shume paralelizem. Gjithese si fare mire mund te ndodhe qe disa tabela, si tabelat e procesit te perdoren nga shume zona kritike. Per shembull, nje tabele procesi nevojitet per skedulim, por

gjithashtu per thirrjen e sistemit te ndare dhe gjithashtu permbajtjen e sinjalit. Cdo tabele qe mund te perdoret nga shume zona kritike i nevojitet mutex-i i tij personal. Ne kete menyre nje zone kritike mund te ekzekutohet nga nje CPU e vetme ne nje kohe te caktuar dhe nje tabele kritike eshte e aksesueshme nga nje CPU e vetme ne nje kohe te caktuar. Shumica e multiprocesoreve moderne perdorin kete organizim. Pjese me e veshtire ne shkrimin e sistemit operativ nga nje makine, nuk eshte se kodi aktual eshte shume i ndryshem nga nje sistem i rregullt operativ. Pjesa me e veshtire eshte ndarja ne zona qe ekzekutohen njekohesisht nga CPU te ndryshme pa nderhyre te njera-tjetra jo vetem ne menyra te veshtira, indirekte, por per me teper cdo tabele e perdorur nga dy ose me shume zona kritike duhet te mbrohet e ndare nga nje mutex dhe te gjitha kodet qe perdorin tabelen duhet te perdorin mutex-in ne menyre korrekte. Per me teper, duhet treguar kujdes i madh per te shmangur bllokimet. Ne qofte se dy zona kritike kane nevoje per tabelen A dhe tabelen B, dhe njera prej tyre kerkon A te paren dhe tjetra kerkon B te paren, heret a vone nje bllokim do te ndodhe dhe askush sdo ta dije pse. Teorikisht, te gjitha tabelat mund te kerkojne vlera integrale dhe zonave kritike mund tju kerkohet te perfshije tabela ne rend rrites. Kjo strategji shmang bllokimet, por i kerkon programuesit te mendoje me shume kujdes cilat tabela i nevojiten seciles zone kritike per te bere kerkesat sipas rradhes se duhur. Teksa kodi zhvillohet me kalimin e kohes, nje zone kritike mund te kete nevoje per nje tabele qe nuk i nevojitej me pare. Ne qofte se programuesi eshte i ri dhe nuk e kupton logjiken e plote te sistemit, do te tundohet me pas ne marrjen e mutex-it ne tabele ne piken qe nevojitet dhe e clirojne ate kur nuk nevojitet me. Gjithese si, logjikisht kjo mund te ndodhe duke cuar ne bllokime, per te cilat perdoruesi vihet ne dijeni teksa sistemi behet i qendrueshem. Marrja e sakte nuk eshte e thjeshte dhe mbajtja per nje periudhe te gjate kohore ne ndryshimin e vazhdueshem te programuesve eshte shume e veshtire. 8.1.3 Sinkronizimi Multiprocesor (Multiprocessor Synchronization)

CPU-te ne nje multiprocesor zakonisht kane nevoje te sinkronizohen. Sapo pame rastin ne te cilin zonat kritike te kernelit dhe tabelat duhet te jene te mbrojtura nga mutexet. Le te shikojme tani shkurt se si punon aktualisht ky sinkronizim ne nje multiprocesor. Per te filluar, primitivat e duhura te sinkronizimit jane vertet te nevojshme. Ne se nje proces ne nje multiprocesor ben nje thirrje sistem qe kerkon akse simin e disa tabelave kritike ne kernel, kodi i kernelit vetem mund te 'aktivizoje interruptet perpara se ta kape tabelen. Ai me pas mund te beje punen e tij duke ditur qe ai do te jete i afte te perfundoje pa vjedhur ndonje proces tjeter dhe duke kapur tabelen perpara se te perfundoje. Ne nje multiprocesor, 'aktivizimi i interrupteve ndikon vetem tek CPU qe po bente 'aktivizimin. CPU-te e tjera mund te vazhdojne te ekzekutojne dhe tashme mund te kapin tabelen kritike. Si pasoje, nje protokoll i pershtatshem mutex duhet te perdoret dhe te respektohet nga te gjitha CPU-te per te garantuar qe mutual exclusion te punoje. Pjesa kryesore e nje protokolli praktik mutex eshte nje instruksion qe lejon nje fjale memorje te inspektohet dhe te vendoset ne nje operacion te pandashem. Pame se si TSL (Test and Set Lock) ishte perdorur ne fig. 2-22 per te implementuar zonat kritike. Si diskutuam edhe me pare, ajo fare ben ky instruksion eshte qe lexon nje fjale memorje dhe e ruan ate ne nje regjister. Menjehere, ai shkruan nje 1 (ose disa vlera te tjera jozero)

ne fjalen e memorjes. Sigurisht, ai merr dy cikle busesh te ndara per te treguar leximin dhe shkrimin e memorjes. Ne nje multiprocesor, per sa kohe qe nje instruksion nuk mund te ndahet pergjysme, TSL punon gjithmone si u supozua. Tani le mendojme se fare mund te ndodhe ne nje multiprocesor. Ne figuren 8-10 shohim rastin me te keq te kohezimit, ne te cilin fjala 1000 e memorjes, po perdoret si nje bllokues (lock) qe fillimisht eshte 0. Ne hapin 1, CPU 1 lexon fjalen dhe merr nje 0. Ne hapin 2, perpara se CPU 1 te kete mundesine te rishkruaje fjalen ne 1, CPU 2 e merr fjalen dhe gjithashtu e lexon si 0. Ne hapin 3, CPU 1 shkruan nje 1 tek fjala. Ne hapin 4, CPU 2 gjithashtu shkruan nje 1 tek fjala. Te dyja CPU-te marrin mbrapsht nje 0 nga instruksioni TSL, keshtu qe te dyja tani kane akses tek zona kritike dhe mutual exclusion deshton.

Instruksioni TSL mund te bllokohet ndersa busi nuk mund te bllokohet.Keto 4 hapa tregojne sekuencen e ngjarjeve ku demonstrohet nje deshtim. Per te ndaluar kete problem, instruksioni TSL se pari duhet te bllokoje busin duke ndaluar CPU-te e tjera qe ta aksesojne, te beje te dy akse simet e memorjes, dhe me pas te zhbllokoje busin. Zakonisht, bllokimi i busit behet duke kerkuar busin me ane te protokollit kerkese te perdorimit te busit, me pas duke kerkuar disa linja busi speciale derisa te dy ciklet te jene kompletuar. Per sa kohe qe kjo linje speciale kerkohet, asnje CPU-je tjeter nuk do ti jepet akse simi i busit. Ky instruksion mund te implementohet vetem ne nje bus qe ka linjat e nevojshme dhe protokollin (hardware) per perdorimin e tyre. Buset moderne i kane keto lehtesira, por me perpara ato nuk i kishin keto dhe ishte e pamundur te implementoje nje instruksion TSL ne menyre korrekte. Kjo eshte arsyeja pse protokolli i petersonit ishte shpikur, per te sinkronizuar teresisht nje software. Ne se TSL implementohet dhe perdoret korrektesisht, ajo mund ta beje mutual exclusion te punoje. Megjithate, kjo metode mutual exclusion perdor nje spin lock sepse CPU e kerkuar vetem vendoset ne nje cikel duke testuar shpejtesine e lock. Jo vetem qe shperdoron kohen e CPU (ose CPU-ve) te kerkuara, por ai mund te vendose nje ngarkese te madhe ne bus ose memorje, duke ngadalesuar punen e gjithe CPU-ve te tjera qe perpiqen te bejne normalisht punen e tyre. Ne pamje te pare, mund te duket se prezenca e caching duhet te eleminoje problemin e permbajtjes se busit, por nuk eshte e vertete. Ne teori, kur CPU e kerkuar ka lexuar fjalen lock (blloko), ajo duhet te marre nje kopje ne cache-ne e saj. Per sa kohe qe asnje CPU tjeter nuk tenton te perdore lock, CPU e kerkuar duhet te jete e afte te ekzekutoje jashte

cachese se saj. Kur CPU zoteron lock, ajo shkruan nje 1 per ta lene ate, protokolli i cachese automatikisht zhvlereson te gjitha kopjet e tij ne ato pak cache duke kerkuar vlerat korrekte per tu marre perseri. Problemi eshte qe cache-ja vepron ne blloqe 32 ose 64 byte. Zakonisht, fjalet perreth lock nevojiten per CPU qe po mban lock. Meqene se instruksioni TSL eshte nje shkrim (sepse modifikon lock), atij i duhet nje akses eskluziv ne bllokimin e cachese duke permbajtur lock. Prandaj, do TSL shfuqizon bllokimin e mbajtesit te lock ne cache dhe merr nje kopje private, eksluzive per CPU e kerkuar. Sapo mbajtesi i lock has nje fjale te perafert me lock, blloku i cachese zhvendoset ne makine. Si pasoje, i gjithe blloku i cachese qe permban edhe lock ne menyre konstante shkon dhe vjen midis mbajtesit te lock dhe kerkuesit te lock, duke gjeneruar edhe me shume trafik ne bus sesa leximi i nje fjale te vetme lock. Ne se ne mund te lirohemi nga te gjitha TSL e shkaktuara te shkruara ne anen e kerkuar, ne mund te reduktojme shperdorimin e cachese ndjeshem. Ky synim mund te arrihet duke bere qe CPU e kerkuar se pari te beje nje lexim te paster per te pare ne se lock eshte i lire. Vetem ne se lock duket te jete i lire duhet te beje nje TSL per ta siguruar ate. Rezultati i ketij ndryshimi te vogel eshte qe shumica e zgjedhjeve tani eshte lexim ne vend te shkrimit. Ne se CPU qe po mban lock vetem po lexon variablat ne te njejtin bllok cacheje, secili prej tyre mund te kene nje kopje te bllokut te cachese ne menyren e sharuar read-only, duke eleminuar te gjitha transferimet e bllokut te cachese. Kur lock perfundimisht lirohet, zoteruesi ben nje shkrim, i cili kerkon nje akses eksluziv, keshtu shfuqizojme te gjitha kopjet e cacheve te mbetura. Ne leximin tjeter nga CPU e kerkuar, blloku i cachese do te ringarkohet. Theksojme se ne se dy apo me shume CPU po pretendojne per te njejtin lock, mund te ndodhe qe te dy shikojne qe eshte i lire menjehere, te dy bejne nje TSL per ta marre ate. Vetem njera prej tyre do te kryhet me sukses, dhe keshtuqe ketu s'kemi kushte shpejtesie sepse detyra e vertete eshte bere nga instruksioni TSL, dhe ky instruksion eshte atomik. Duke pare qe lock eshte i lire dhe duke u perpjekur per ta marre ate menjehere me nje CX u TSL nuk na garanton qe mund ta marrim. Ndonje tjeter mund te fitoje. Nje rruge tjeter per te reduktuar trafikun e busit eshte perdorimi i algoritmit Ethernet binary exponential backoff (Anderson, 1990). Ne vend qe te zgjedhe vazhdimisht, si ne fig. 2-22, mund te futet nje cikel vone se midis zgjedhjeve. Fillimisht vonesa eshte nje instruksion. Ne se lock eshte ende i bllokuar, vonesa dyfishohet ne dy instruksione, ne kater dhe keshtu me radhe deri ne disa maksimume. Nje maksimum i ulet jep nje pergjigje te shpejte kur lock eshte lene, por shperdoron me shume cikle busesh ne cache. Nje maksimum i larte redukton shperdorimin e cachese por me mimin qe nuk njofton shpejt qe lock eshte i lire. Ky algoritem mund te perdoret me ose pa leximet e pastra duke na paraprire instruksioni TSL. Nje tjeter ide me e mire eshte qe ti japim do CPU deshiren per te siguruar mutex variablen e tij privat lock per ta testuar, si tregohet ne figuren 8-11. Variabla duhet te rrije ne nje bllok cacheje te ndryshem per te ndaluar konfliktin. Algoritmi punon duke pasur nje CPU qe deshton per te siguruar alokimin e lock, dhe e vendos veten ne fund te listes se CPU-ve duke pritur per lock. Kur mbajtesi aktual i CPU del nga zona kritike, ai liron lock privat qe CPU e pare ne liste po testonte (ne cachene e tij). Kjo CPU me pas hyn ne zonen e tij kritike. Kur mbaron pune, ajo liron lock pasues qe eshte duke u perdorur, dhe keshtu me rradhe. Megjithese protokolli eshte disi i komplikuar (per te

evituar vendosjen e dy CPU-ve ne fund te listes njekohesisht), ai eshte efient dhe i lire nga starvacioni.

Figura 8-11. Perdorimi i multiple locks per te evituar shperdorimin e cachese.

Spinning kundrejt Switching Me pare ne kemi supozuar qe nje CPU qe i nevojitet nje mutex lock vetem pret per te, per me teper duke zgjedhur vazhdimisht, ne menyre te nderprere ose duke e vendosur veten ne nje liste pritese te CPU-ve. Ne disa raste, nuk ka nje zgjedhje reale per ti kerkuar CPU vetem te prese. Pr shembull. supozojme se disa CPU jane pa pune dhe iu duhet te aksesojne listen e sharuar ready per te zgjedhur nje proces per ta ekzekutuar. Ne se lista ready eshte e bllokuar, CPU nuk mund te nderprese ate fare ajo po ben dhe te ekzekutoje nje proces tjeter, sepse qe te bejme kete duhet te kemi akses tek lista ready. Duhet pritur derisa te mund te sigurohet lista ready. Megjithate, ne raste te tjera ka nje alternative. Pr shembull. ne se disa threadeve ne nje CPU iu duhet te aksesojne buferin e file-ve sistem te cachese dhe ai eshte aktualisht i bllokuar, CPU mund te vendose te komutohet (switch) ne nje tjeter thread ne vend qe te prese. eshtja se kur te bejme nje spin (rrotullim) dhe kur te bejme nje komutim threadi ka qene nje eshtje e shume kerkimeve, disa prej te cileve do te diskutohen me poshte. Theksojme se kjo nuk ndodh ne sistemet me nje procesor sepse spinning nuk ka shume kuptim kur nuk ka CPU tjeter per te lene te lire lock. Ne se nje thread perpiqet te siguroje nje thread dhe deshton, ai eshte gjithmone i bllokuar per ti dhene zoteruesit te lock nje mundesi per ta ekzekutuar dhe per ta lene te lire lock. Duke supozuar qe spinning dhe komutimi i threadit jane te dyja opsione te mundshme, eshtja eshte si me poshte. Spinning shperdoron direkt ciklet e CPU. Testimi i nje lock vazhdimisht nuk eshte nje pune produktive. Komutimi, megjithate, shperdoron gjithashtu ciklet e CPU, meqene se gjendja aktuale e threadit duhet te ruhet, duhet te sigurohet lock

ne listen ready, duhet te zgjidhet nje thread, gjendja e tij duhet te ngarkohet, dhe duhet te startoje. Gjithashtu, cacheja e CPU do te permbaje te gjithe blloqet gabim, keshtu qe shume deshtime cacheje te kushtueshme do te ndodhin kur threadi i ri starton ekzekutimin. Deshtimet e TLB jane gjithashtu te ngjashme. Perfundimisht, duhet te behet nje komuntim tek threadi origjinal, me shume deshtime cacheje qe e shoqerojne. Ciklet e shpenzuara duke bere keto dy komutime plus dhe deshtimet e cachese shperdorohen. Ne se dihet qe mutexet pergjithesisht mbahen pr shembull. per 50sek dhe duhet 1 msek per te komutuar nga threadi aktual dhe 1 msek per komutimin mbrapsht, eshte me eficente qe vetem te bejme spin mbi mutex. Nga ana tjeter, ne se mesatarja e mutex mbahet per 10msek, eshte problem i rendesishem berja e dy komutimeve. Problemi eshte qe zonat kritike mund te variojne konsiderueshem ne kohezgjatjen e tyre, keshtu qe cila eshte rruga me e mire?

8.1.4 SCHEDULIMI MULTIPROCESOR Ne nje procesor te vetem schedulimi eshte nje dimensional. Pyetja e vetme qe i duhet pergjigjur me doemos eshte: Cili proces do te ekzekutohet me vone? Ne sistemet me shume procesor schedulimi eshte dy dimensional. Scheduleri duhet te zgjedhe se cilin proces te ekzekutoje dhe ne cilen CPU ta ekzekutoje. Ky dimension shtese e komplikon shume procesin e schedulimit. Nje tjeter faktor komplikues eshte se ne disa sisteme, proceset nuk kane lidhje me njeri tjetrin ndersa ne disa te tjre ato grupohen ne grupe. Nje shembull i kesaj situate eshte nje sistem timesharing ne te cilin user te vecante inicializojne procese te vecante. Proceset jane te palidhur me njeri tjetrin dhe mund te perzgjidhen panvarsisht nga proceset e tjere. Kjo situate ndodh shpesh ne ambjemtet per zhvillimin e programeve. Sisteme te medha zakonisht konsistojene ne nje numer te caktuar file header qe permbajne macros, percaktimet e tipeve dhe deklarime variablash qe perdoret nga kodi i file. Kur nje file header ndryshon, i gjithe kodi i tij duhet et rikompilohet. Programi make perdoret gjeresisht per te menaxhuar zhvillimin. Kur thirret make, ai fillon kompilimin e atyre kodeve te file qe duhet rikompiluar. File objekt qe jane akoma te vlefshem nuk ndryshojne. Versioni origjinal i make bente punen e tij ne menyre sekuenciale, por versionet e reja te dizenjuara per shume procesore mund te fillojne te gjithe kompilimin njeheresh. Ne se duhen 10 kompilime, nuk ka kuptim te zgjedhesh 9 prej tyre shpejt dhe ta lesh te fundit per me vone, kjo do te sjelle nje performance te ulet pasi puna e kerkuar nga useri nuk do te perfundonte. Ne kete rast proceset duhet te perzgjidhen si grup. TIMESHARING Le te shohim rastin e perzgjedhjes se proceseve te pavarura nga njeri tjetri: me vone do te shohim si te perzgjedhim procese te lidhur midis tyre. Algoritmi me i thjeshte perzgjedhes qe merret me proceset e pavarur midis tyre eshte qe te kesh nje sistem te madh strukture te dhenash per proceset gati, ndoshta vetem nje liste, por me shume

mundesi nje bashkesi listash per proceset me priorite te ndryshem sic jepet ne Fig. 812(a) Ketu te 16 CPU-te jane te zena, dhe nje set procesesh te cilet kane priorite te ndryshem pret qe te ekzekutohet. CPU-ja e pare q mbaron punen e saj eshte CPU 4, qe me pas merr rradhet nga te cilet perzgjidhen proceset dhe selekton procesin me prioritet me te larte qe eshte ne kete rast A, sic tregohet ne Fig.8-12(b). Me pas CPU 12 eshte pa pune dhe zgjedh procesin B, sic tregohet ne Fig.8-12(c). Per sa kohe proceset nuk kane lidhje midis tyre, berja e schedulimit ne kete menyre eshte shume e arsyeshme. Duke pasur nje strukture te vetme schedulimi te perdorur nga te gjithe CPU-te, kjo ben qe CPU-te te ndajne kohen e perdorimit (timeshare). Dy disavantazhet e kesaj menyre jane: konfliktet per perdorimin e kesaj strukture duke pasur parasyshe se numri i CPU-ve do te rritet dhe overhead-i qe krijohet kur kemi nje nderrim midis proceseve kur nje proces bllokohet per I/O.

Figura 8-12. Perdorimi i nje strukture te dhenash per schedulim tek nje multiprocesor. Gjithashtu eshte e mundur qe nje kontekst switch te ndodhe kur nje proces quantum mbaron. Ne nje multiprocesor, qe ka karakteristika te caktuara jo prezente ne nje uniprocesor, supozojme qe procesi ka nje spin lock, jo i zakonshem ne nje uniprocesor, sic do e tregojme me poshte. Ne nje uniprocesor, spin locks jane jo shume te perdorshem keshtu qe, n qofte se nje proces nderpritet ndone se ka nje mutex, atehere edhe procesi tjeter starton dhe perpiqet te marre mutex-in. Ky do te bllokohet menjehere, keshtu qe ajo pak kohe do te humbase.

Per te rreguluar kete anomali, disa sisteme perdorin smart scheduling, ne te cilen nje process qe ka siguruar nje spin lock vendos nje process-wide flag, pra nje flamur qe te tregoje se ky proces tashme ka nje spin lock. Kur procesi liron braven, the lock, ai pastron flag-un. Me pas scheduler-i nuk nderpret nje process duke mbajtur nje spin lock, por me mire merr ate pak kohe per te kompletuar zonen e tij kritike dhe liron braven. Nje tjeter ceshtje qe luan rol ne scheduling eshte fakti qe ndersa gjithe CPU-te jane te njejta, disa CPU jane akoma me te njejta. Ne menyre te vecante, kur procesi A ekzekutohet per nje kohe te gjate ne CPU *, cache-ja CPU V* do te jene plot me blloqet e A-se. N qofte se procesi A kerkon te ekzekutohet serish se shpejti, ai do bej mire te ekzekutohet ne CPU L sepse cache-ja mund te permbaje akoma blloqe te A-se. Prania e blloqeve te cache-se do sjelle rritjen e cache hit rate dhe si rrjedhim rritjen e shpejtesise se procesit. Vec kesaj, TLES gjithashtu mund te permbaje faqet e duhura, duke reduktuar gabimet e TLB-se. Disa multiprocesore perdorin ate qe quhet affinity scheduling (lidhje skedulimi). Ketu ideja kryesore eshte qe te behet nje perpjekje serioze per te patur nje process te ekzekutueshem ne CPU-te e njejta.Nje menyre per te krijuar kete arritje eshte qe te perdoret nje algoritem skedulimi me dy nivele (two-level scheduling algorithm). Kur nje proces eshte krijuar, ai ngarkohet ne nje CPU. Ngarkimi i proceseve ne CPU eshte niveli i siperm i algoritmit. Si rezultat, cdo CPU merr koleksionin e vet te proceseve. Skedulimi aktual i proceseve eshte niveli i fundit te algoritmit. Kjo behet nga cdo kompjuter ne menyre te vecante, duke perdorur karakteristikat ose disa arsye te tjera.Duke u perpjekur te mbajme nje proces ne te njejten CPU, terheqja e cache-se rritet. Megjithate, n qofte se nje CPU nuk ka procese per te ekzekutuar, ai merr nje proces nga nje CPU tjeter duke bere qe te mos punoje bosh. Skedulimi me dy nivele ka tre te mira. E para, ky shperndan rregullisht ngarkimin barabar ne CPU-te e perdorshme. E dyta, avantazhi qendron ne lidhjen e cache-se kur eshte e mundur. E treta, duke patur cdo CPU listen e saj gati, lufta per kete liste minimizohet sepse perpjekjet per te perdorur listat e CPU-ve te tjera jane relativisht jane te rralla. Space Sharing Nje tjeter metode per skedulimin e multiprocesorit, mund te jete kur procesoret jane te lidhur me njeri-tjetrin ne ndonje lloj menyre. Me perpara ne permendem shembullim e lidhjes ne paralel si nje nga rastet. Gjithashtu mund te ndodhi qe nje proces i vetem mund te lindi shume threads, te cilat punojne sebashku. Per qellimin tone, nje pune qe konsiston ne shume procese te lidhura me njeri-tjetrin, ose nje proces qe konsiston ne shume kernel threads, jane e njejta gje. Ne ketu do ti referohemi threads, si lloj te skedulimit, por materiali mund te perdoret dhe per proceset gjithashtu. Skedulimi i shume threads ne te njejten kohe, nepermjet shume CPU-ve eshte quajtur space sharing (ndarje e hapesires). Algoritmat me te thjeshte per space sharing punojne ne kete menyre. Supozojme se nje grup i tere qe ka lidhje me threads eshte krijuar njekohesisht. Ne kohen qe krijohet, skeduleri kontrollon ne qofte se ka po aq CPU te lira sa threads jane. Ne qofte se jane, cdo thread-i i jepet CPU-ja e vet (dedikuar) dhe ata fillojne startimin, ne qofte se nuk ka CPU te mjaftueshme, asnje nga thread-et nuk fillon startimin derisa te kemi CPU te mjaftueshme. Cdo thread qendron ne CPU-ne e tij deri sa te perfundoje procesin, ne te

njejten kohe CPU-te e lira kthehen mbrapsht ne vendin e CPU-ve te lira. Ne qofte se nje thread bllokohet nga I/O, ai vazhdon ta mbaje CPU-ne te zene, e cila eshte thjesht ne gjendje idle derisa thread te zgjohet. Kur shfaqet thread i radhes aplikohet e njejta procedure. Ne nje moment kohe te caktuar, nga ana sturkturore CPU-ja ndahet ne nje numer pjesesh, ne secilen prej tyre vepron threads i nje procesi. Ne Fig.8-13, per shembull, ne kemi ndarjet te madhesise 4, 6, & dhe 13 te CPu-se, dhe 2 CPU te pashenuara. Me kalimin e kohes, numri dhe madhesia e cdo particioni do te ndryshoje ne varesi te procesit qe eshte apo qe u ekzekutua.

Periodikisht, duhet te kryhen dhe vendimet mbi skedulimin. Ne nje sistem me nje procesor, kryerja e punes me te vogel eshte algoritmi me i njohur per skedulimet qe jane ne radhe. Ne menyre analoge algoritmat per multiprocesorin duhet te zgjedhin procesin qe i nevojitet numri me i vogel i cikleve te CPU-se, i cili eshte ai qe ka CPU-count * runtime me te vogel. Megjithate, ne praktike ky informacion disponohet rralle, keshtu qe algoritmat jane te veshtire per tu kryer. Ne fakt, studimet kane treguar qe, ti sherbesh te parit qe vjen eshte e veshtire. Ne kete model te thjesht ndarjesh, nje procesh vetem pyet per disa numra CPU-she, dhe i merr ato te gjitha ose pret sa te jene te lira. Nje menyre tjeter eshte qe proceset ne menyre aktive te menaxhojne shkallen e paralelizmit. Nje menyre per te menaxhuar paralelizmin eshte qe te kemi nje server qendror qe mban gjurmet se cili process eshte duke u egzekutuar dhe cili do te egzekutohet, dhe sa eshte minimumi dhe maksimumi i CPU-ve qe kerkohen. Periodikisht, secila CPU pyet serverin qendror se sa CPU mund te perdori. Pastaj rregullon numrin e proceseve duke i shtuar ose pakesuar, per ti njehsuar me ato qe jane te lira. Per shembull, nje Web server mund te kete I, 2, 5, 10, 20 ose nje numer tjeter threadesh qe jane duke vepruar ne paralel. Ne qofte se aktualisht jane duke vepruar 10 threads dhe papritur ka nje kerkese me te madhe per CPU dhe u eshte thene qe te leshohen vetem 5, kur 5 threads e tjere mbarojne punen e tyre aktuale, atyre u thuhet qe te dalin jashte ne vend qe tu jepet pune e re. Kjo skeme lejon qe ndarja me pjese ne menyre dinamike te perballoje punen qe ngarkohet me mire se nje sistem fiks, sic eshte treguar ne Fig.8-13.

Gang Scheduling
Nje avantazh i qarte i space sharing eshte eleminimi i multiprogramimit, i cili eleminon ne kontekst vartesine nga switching. Megjithate, nje disavantazh po i njellojte eshte koha qe humbet CPU-ja kur bllokohet dhe nuk ka asnje pune tjeter per te bere, derisa te jete gati perseri. Vazhdimisht, njerezit kane bere perpjekje per te gjetur algoritma qe te skedulojne menjehere, dhe kohen dhe hapesiren, vecanerisht per procese qe krijojne multiple threads, te cilet zakonisht duhet te komunikojne me njeri-tjetrin. Per te pare se cfare problemesh mund te dalin kur thread-et e nje procesi skedulohen ne menyre te pavarur, marrim ne shqyrtim nje sistem me threads Af dhe A, qe i perkasin procesit A, dhe threads B0 dhe B, qe i perkasin procesit B. thread-et AQ dhe B0, jane timeshared ne CPUne 0. Thread-et A dhe B jane timeshared ne CPU-ne 1. Thread-et A0 dhe A nevojitet qe te komunikojne shpesh. Menyra e komunikimit eshte qe A0 i con nje mesazh Ay, nepermjet At, pastaj kthen mbrapsh nje pergjigje tek A0, duke u ndjekur nga nje tjeter sekuence e tille. Le te supozojme se, Aa dhe Bx fillojne te paret, sic eshte treguar ne Fig. 8-14.

Ne pjesen e kohes 0, A0 i dergon Al nje kerkese, por Ay nuk e gjen ate derisa ai te veproje ne pjesen e kohes 1 duke startuar me 100 msec. Ai dergon menjehere nje pergjigje, por A0 nuk merr pergjigje derisa ai te filloje te veproje perseri me 200 msec. Rezultati tjeter eshte nje sekuence pyetje-pergjigjesh ne cdo 200 msec, gje e cila nuk eshte e mire. Zgjidhja e ketij problemi eshte gang scheduling, i cili eshte nje vete rritje e coscheduling, Gang scheduling perbehet nga tre pjese: 1. Grupet e threade-ve qe kane lidhje skedulohen si nje pjese e tere, nje gang. 2. Te gjithe pjesetaret e nje gang-u veprojne njeheresh, ne CPU te ndryshme timeshared. 3. Te gjithe pjesetaret e gang fillojne dhe mbarojne ne te njejten kohe sebashku. Truku per te bere gang te skeduloje te gjithe punen eshte se te gjithe CPU-te jane skeduluar ne menyre sinkrone. Kjo do te thote qe koha eshte ndare ne quante diskrete sic eshte treguar ne Fig. 8-14. ne fillim te cdo kunati , te gjitha CPU-te jane riskeduluar dhe

nga nje thread i ri starton ne secilen prej tyre. Me startimin e quantumit qe pason, ndodh nje tjeter skedulim. Nderkohe, asnje skedulim nuk ka perfunduar. Ne se nje thread bllokohet, CPU-ja e tij qendron idle deri ne perfundim te quantiumit, Nje shembull se si punon nje skedulim gang eshte dhene ne Fig. 8-15. Aty ne kemi nje multi processor me gjashte CPU, te cilat perdoren nga pese procesore, nga A tek E, me nje numer total prej 24 threads te gatshem. Gjate kohes se slotit 0, threads Ai deri tek A, jane skeduluar dhe ekzekutuar. Gjate kohes se slotit 1, threads tf0, B 87, Co, t-V dhe C2, jane skeduluar dhe ekzekutuar. Gjate kohes se slotit 2, Z>s, pese threads dhe 0 fillojne te egzekutohen. Gjashte threads qe kane mbetur i perkasin proccesit E, i cili vepron ne slotin 3. Me pas cikli perseritet, fillon me slotin 4, njesoj si sloti 0 dhe keshtu me rradhe.

Ideja e skedulimit gang eshte qe te gjithe threads e nje procesi te veprojne njekohesisht, keshtu ne se nje nga ata con nje kerkese tek nje tjeter, do te marri nje mesazh pothuaj menjehere dhe gjithashtu do te jete ne gjendje te pergjigje po menjehere. Ne Fig 8-15, derisa te gjitha threads A veprojne njekohesisht, gjate nje quantiumi, ato mund te cojne dhe te marrin nje numer te madhe mesazhesh ne nje quantium, gje qe eleminon problemin e Fig. 8-14.

8.2 MULTIKOMPJUTERAT Multiprocesoret jan shum te prhapur dhe shum trheqs n faktin q ata ofrojne nj model t thjesht komunikimi: t gjitha CPU-te ndajn nj memorje t perbashkt. Proeset mund t shkruajn mesazh drejt memorjes i cili mund te lexohet nga proese t tjera. Sinkronizimi mund t bhet duke perdorur mutex-et, semaforet, monitored dhe teknika te tjera te mir percaktuara. Disavantazhi i tyre me i madh sht q multiproesoret e medhenj paraqesin vshtirsi t medha ne ndertim, e cila rrit dhe koston e tyre.

Per t perballuar keto probleme sht br nj kerkim shume i madh ne multi komjuterat, te cilet jane CPU tightly-coupled qe nuk ndajne memorje. Secili prej tyre ka memorjen e vet sic shihet edhe ne fig. 8.1(b). Keto sisteme njihen edhe me emra te tjere si kompjutera cluster dhe COWS (Clusters of Workstations). Multikomjuterat jan shum t thjesht per tu ndertuar, sepse komponenti baze eshte thjesht nj PC stripped-down me adicionin e nj karte t nderfaqes se rrjetit. Sigurisht, sekreti per te arritur nje performance t larte eshte t projektosh nje rrjet nderlidhes dhe nj karte nderfaqeje ne nje mnyre shum eficente. Kjo situate eshte analoge me ndertimin e nj memorjeje qe ndahet ose sic quhet ndryshe memorje e share-uar ne nje multiproesor. Sidoqofte, qellimi eshte t dergosh mesazhe ne nje rend prej milisekondash, sesa te aksesosh memorjen ne nj kohe te rendit nanosec, pra kjo gje eshte me thjeshte dhe me lire per tu arritur. Ne leksionet qe vijojne, ne do t hedhim nj veshtrim te shkurter persa i perket hardware te multikompjuterave, vecanerisht hardware te nderlidhjes ose interkoneksionit. Me pas ne do te shohim software, duke filluar me software e rendit te ulet te komunikimit, per te vazhduar me tej me at t rendit t larte. Do t hedhim veshtrimin gjithashtu edhe se si memorja e share-uar mund te kapet edhe nga sisteme qe nuk e zoterojne ate. Per ta mbyllur ne do ekzaminojme skedulimin dhe balancimin e ngarkeses (load balancing). 8.2.1 HARDWARE I MULTIKOMPJUTERAVE Nyja baze e nje multikompjuteri konsiston ne: CPU, memorja, nderfaqe rrjeti dhe ndonjehere perfshihet edhe hard disku. Nyja mund te paketohet ne nje PC standarte, por pershtatesi grafik (adapteri), tastiera dhe mausi mungojne ne kt rast. Ne disa raste, PC permban nje multiproesor board 2-way ose 4-way ne vend te nje CPU-je t vetme. Por per thjeshtesi ne do te supozojme se do nyje ka vetm nje CPU. Multikompjuteri formohet nga organizimi i qindra ose mijera nyjeve s bashku. Me poshte do te permendim menyren se si hardware eshte organizuar. TEKNOLOGJIA E NDERLIDHJES Cdo nyje ka nje karte nderfaqeje rrjeti e shoqeruar me nj ose dy kabllo (fibra) qe dalin jashte saj. Keto kabllo lidhin nyjet me switchet. Ne nje sistem t vogel mund te kete nje switch ku jane lidhur t gjitha nyjet sipas topologjise STAR si ne Fig 8-16(a). Kjo e fundit aplikohet ne rrjetet Ethernet. Si alternative e nje projektimi switch single, nyjet mund te formojne nj unaze, me dy kabllo qe dalin jashte kartes se nderfaqes se rrjetit, ku njera del nga e majta dhe tjetra nga e djathta, sic shihet ne Fig 8-16(b). Ne ket lloj topologjie nuk nevojiten switch-e dhe kjo eshte arsyeja pse nuk jane paraqitur ne figure.

Figure 8-16. Topologji te ndryshme nderlidhjeje.(a) Nje switch i vetem(single switch).(b) Unaza.(d) Nje torus double.(e) Kubi.(f) Nje hypercube 4D. Grid ose mesh sht nje projektim dydimensional i cili perdoret ne shume sisteme komerciale, Fig 8-16(c). Karakterizohet nga nj rregullsi shume e lart dhe nje lehtesi shume e madhe per tu rritur n permasa. Ka nje diameter q nenkupton rrugen me te gjate ndermjet dy nyjeve dhe rritja e te cilit eshte ne relacion me numrin e nyjeve si vijon: rrenja katrore e numri te nyjeve. Nje variant i grid eshte double torus si ne Fig 8.16(d), i cili eshte nj grid me ane te lidhura. Jo vetem qe eshte me tolerant ndaj gabimeve se gridi, por edhe diametri eshte m i shkurter sepse qoshet e kunderta mund te komunikojne vetem n dy kercime. Kubi i Fig 8.16(e) eshte nje topologji e rregullt tre-dimensionale. Ne kemi ilustruar nj kub te permasave 2x2x2, por ne pergjithesi ajo mund te jete e permasave kxkxk. Ne fig 816(f), ne kemi nje kub kater-dimensional i cili rrjedh nga ai tre-dimensional me nyjet koresponduese t lidhura. Ne mund te bejme nj te permasave pese-dimensionale duke klonuar strukturen e Fig 8-16(f) dhe te lidhim nyjet korresponduese per te formuar nje bllok prej kater kubesh. Pr t arritur ne dimensionin e gjashte, ne mund te replikonim bllokun e kater kubeve dhe te nderlidhim nyjet koresponduese, dhe keshtu me rradhe. Nje kub n-dimensional i formuar ne kt menyre sht quajtur hypercube. Shume kompjutera paralele e perdorin kete topologji sepse diametri rritet ne menyre lineare me dimensionalitetin. Me fjale te tjera diametri eshte logaritmi me baze 2 i numrit te nyjeve, pr shembull nje hypercube 10-dimensional ka 1024 nyje, por diametrin vetem 10 duke shkaktuar vonesa t medha. N multikompjutera perdoren dy skema switching. Ne te paren do mesazh ndahet fillimisht (ose nga perdoruesi i software ose nga nderfaqja e rrjetit) ne nj maseme permasa maksimale e quajtur pakete. Skema e switching, e quajtur store-and-forward packet switching, konsiston n dergimin ose injektimin e paketes ne switchin e pare nga nyja burim e bordit te nderfaqes se rrjetit, sic e shohim ne Fig 8-17(a). Bitet vijne njeheresh t gjith dhe kur ka ardhur e gjithe paketa, ajo kopjohet ne switchin e rradhes gjate rruges sic tregohet ne Fig 8-17(b). Kur paketa vjen ne switchin e pozicionuar ne nyjen destinacion, si ne Fig 8-17(c), paketa kopjohet n ate nyjen e nderfaqes se rrjetit dhe aktualisht ne RAM-in e tij.

Figura 8-17. Store-and-forward packet switching. Pavarsisht nga fakti qe store-forward switching sht fleksibel dhe eficente, ajo ka disavantazhin kryesor te rritjes se vonesave gjate rrjetit nderlidhes. Supozojme qe koha qe na duhet pr te levizur nje pakete ne nj kercim eshte T nsec.Vonesa pergjate ketij rrjeti koneksioni sht 4T sepse paketa duhet te kopjohet kater here pr te kaluar nga CPU 1 ne CPU 2 (drejt A-se, C-se, D-se dhe drejt destiancionit qe eshte CPU-ja), dhe per m teper nuk mund te behet asnje kopje derisa paketa e meparshme te kete perfunduar. Nje rruge eshte projektimi i nje rrjeti hibrid, duke adaptuar disa nga cilesite e circuit + packet switching. Per shembull, do pakete mund te ndahet logjikisht ne njesi me te vogla. Sa me shpejt qe njesia e pare te arrije te switchi, ajo mund te levizi drejt switchit tjeter, madje edhe me shpejt se mberritja e bishtit (tail) te paketes. Alternativa tjeter switching, circuit switching, konsiston n paravendosjen e rruges (path) ndermjet switchit te pare dhe atij destinacion. Pra me tu vendosur rruga (path) bitet fluturojne nga burimi te destinacioni pa nderprerje. Nuk ka buffera ndermjetes ne switchet nderpreres me njeri tjetrin. Circuit switching kerkon fazn setup, e cila kerkon pak kohe, por me perfundimin e kesaj faze shpejtesia fillon e rritet. Me dergimin e paketes rruga qe ishte e paracktuar per te, tashme prishet.Variacioni i circuit switching, i quajtur wormhole routing, copeton do pakete ne subpaketa dhe lejon injektimin e subpaketes se pare, perpara ndertimit t plote t rruges (path). NDERFAQET E RRJETIT Te gjitha nyjet ne nje multikompjuter kane nj bord, t quajtur plug-in, i cili permban lidhjen e nyjeve ne rrjetin nderlidhes ku puna e te cilit eshte te mbaje nje multikompjuter kompakt. Menyra se si keto borde jane ndertuar dhe se si ato lidhen ne CPU-ne qendrore dhe Ram-in paraqesin implikacione te medha per sistemin operativ. Ne do te japim nje veshtrim t shkurter te ketyre eshtjeve me poshte. Virtualisht i gjithe bordi i nderfaqes se multikomjuterave permban RAM-in i cili ruan paketat hyrese dhe dalese. Zakonisht, nje pakete dalese duhet te kopjohet ne bordin e nderfaqes se Ram-it perpara se ajo te dergohet ne switchin e pare. Arsyeja pse eshte projektuar ne kt menyre eshte per shkak se rrjetet nderlidhese gezojne vetine e

sinkronizimit, domethn sapo te kete filluar transmetimi i paketes fluturimi i biteve behet me nje shpejtesi konstante. N qofte se paketa eshte ne memorjen kryesore, shpejtesia konsante e fluturimit te elektroneve nuk garantohet per shkak te trafikut t t dhenave ne busin e memorjes. Kt problem mund ta eliminojme duke perdorur nje RAM te dedikuar per kt pune. Ky projektim paraqitet ne Fig 8-18.

Figura 8-18.Pozicioni i bordit te nderfaqes se rrjetit. I njejti problem ndodh edhe me paketat hyrese. Bitet fluturojne ne rrjet me nje shpejtesi konstante dhe t larte. N qofte se se bordi i nderfaqes se rrjetit nuk mund ti ruaje paketat ne kohe reale ndodh qe te dhenat mund te humbasin. Serish ketu paraqitet rrezikshmeria ne kalimin nga busi i sistemit (pr shembull busi i PCI) ne memorjen kryesore. Perderisa bordi i rrjetit eshte vendosur ne menyre tipike brenda busit te CPU-se, kjo eshte lidhja e vetme qe ajo ka me me meorjen kryesore, keshtu qe konkurimi qe lind midis busit, diskut dhe cdo pajisjeje tjeter I/O eshte i pashmangshem. Eshte me e sigurte te ruash paketat qe vijne ne RAM-in privat te bordit te nderfaqes, se sa ti kopjosh me vone ato ne memorjen kryesore ose RAM-in kryesor. Bordi i nderfaqes mund te kete nje ose me shume kanale te DMA-se ose nje CPU komplete ne bord. Kanalet DMA mund te kopjojne paketa ndermjet bordit te nderfaqes dhe memorjes kryesore ne nje shpejtesi te larte duke kerkuar transferimin e blloqeve ne busin e sistemit, cfare i thjeshton punet ne transferimin e disa fjaleve pa i kerkuar busit te beje nje gje te tille per do fjale te marre vemas. Disa borde nderfaqesh kane nje CPU te vetme dhe te plote ne to, duke perfshire edhe nje ose me shume kanale DMA. Ky projektim do ti sjelle shume lehtesi bordit te rrjetit nga CPU-ja pasi ajo kryen mjaft detyra si: Te realizoje nje transmetim te qendrueshem (reliable), domethn te mos lejoje humbjen e paketave. Multicasting (te degjoje nje pakete ne me shume se nje drejtim). Te kujdeset per nje mbrojtje sa me te mire ne nje sistem me multiproese. Sidoqofte te pasurit dy CPU do te thote qe nevojitet sinkronizimi per te shmangur kushtet e nje gare, domethn shtohet puna per sistemin operativ.

8.2.2 Low-level communication Software Armiku me i madh ne performancen e komunikimit ne sistemet me multikomjutera eshte kopjimi i paketave. Ne rastim me te mire, do te kete vetem nje kopje nga RAM-i te bordi i nderfaqes n nyjen burim, nje kopje nga bordi i nderfaqes burim te ai destinacion dhe nje kopje nga atje ne RAM-in destinacion, pra ne total kemi tre kopje. Sidoqofte ne shume sisteme gjendja eshte edhe me keq. Ne vecanti ne se bordi i nderfaqes eshte prkthyer (mapped) ne hapesiren viruale te adresave te kernelit dhe jo ne hapesiren virtuale te adresave te userit, procesi user mund te dergoje nje pakete duke perdorur vetem nje thirrje sistemi, qe i kalon kontrollin kernelit. Kerneli nga ana e tij mund te kopjoje paketat ne memorjen e tyre perkatese ne I/O, pr shembull, te shmange page faults gjate transmetimit ne rrjet. Nga ana tjeter kerneli ne destinacion nuk di ku te vendose paketen pasi i duhet ta ekzaminoje njehere ate. Ne Fig 8-18 jane paraqitur pese hapat e kopjimit. N qofte se, performanca dominohet nga kopjet qe behen nga dhe drejt RAM-it, kopjet ekstra nga dhe drejt kernelit mund te dyfishojne vone sen e tipit end-to-end dhe te presin bandwidth-in ne mes. Per te shmangur kete problem te performances shume multikompjutera perkthejne bordin e nderfaqes ne menyre direkte ne hapesiren user per te lejuar procesin te vendose paketat direkt ne bord pa ndermjetesimin e kernelit. Edhe pse kjo perqasje ndihmon ne performance paraqet dy probleme. Se pari, ndodh ne se disa procese po ekzekutohen ne nyje dhe kerkojne te aksesojne rrjetin per dergimin e paketave? Cila prej tyre e merr bordin e nderfaqes ne hapesiren e e tij te adresimit? Ne se vetem nje proces e merr bordin po te tjerat si i dergojne paketat? Cfare ndodh ne se bordi eshte perkthyer (mapped) ne hapesiren virtuale te adresimit te A-se dhe nje pakete vjen per B-ne, vecanerisht ne rastin kur A-ja dhe B-ja kane posesues te ndryshem ku asnjeri prej tyre nuk do te vije ne ndihme te njeri tjetrit? Nje zgjidhje eshte te perkthyerit (mapping) ne t gjitha proceset qe kane nevoje per te, por duhet mbajtur parasysh shmangia e kushteve te konkurences. Pr shembull ne se A-ja dhe B-ja kerkojne te njejtin buffer ne bordin e nderfaqes, ndodh nje perplasje apo jo? Ketu nevojitet nje mekanizem sinkronizimi, pr shembull mutexet, por keto funksionojne vetem ne rastet kur proceset bashkeveprojne me njeri tjetrin. Si perfundim mund te themi qe perkthimi i bordit te nderfaqes ne hapesiren user funksionon vetem ne rastin kur ekzekutohet vetem nje proes ne cdo nyje, perkundrazi merren masa paraprake. Se dyti eshte qe kerneli mund te kerkoje vete aksesin e rrjetit nderlidhes per vete, pr shembull, te aksesoje sistemin e file-ve ne nje nyje te larget. Qe kerneli te aksesoje edhe nderfaqen e rrjetit, ku kjo e fundit perdoret nga cdo perdorues nuk eshte nje ide e mire, madje edhe ne sistemet timesharing. Supozojme qe ndersa bordi eshte perkthyer ne hapesiren user, vjen nje pakete e tipit kernel. Ose marrim rastin tjeter kur proesi user ka derguar nje pakete ne nje makine te larget duke pretenduar se eshte e tipit kernel. Si perfundim themi se projektimi me i thjeshte duhet te kete dy borde nderfaqesh te rrjetit, nje e perkthyer ne hapesiren user per te dhena aplikative dhe tjetra sht e perkthyer ne kernel ku perdoret nga sistemi operativ. Shume multikompjutera aplikojne kt lloj modeli.

Nyja ne nderfaqen e komunikimit te rrjetit Nje eshtje tjeter eshte menyra se si ti cojme paketat ne bordin e nderfaqes. Menyra me e shpejte eshte te perdoresh ipin e DMA-se ne bord per te kopjuar paketat nga RAM-i. Problemi qe ekziston me kete lloj perqasjeje lidhet me dy vecorite e DMA-se, domethn ajo perdor adresa fizike dhe ekzekutohet ne menyre te pavarur nga CPU-ja. Per me teper, edhe pse nje proces user mund ta dije me siguri adresen virtuale te cdo pakete qe ajo mund te dergoje, por ne pergjithesi ajo nuk e di adresen fizike. Te besh nje thirrje sistemi per te bere perkthimin virtual-fizik eshte jo shume e deshirueshme pasi qellimi yne ishte t shmangnim thirrjet e sistemit per do pakete te derguar. Ne se sistemi operativ vendos te zevendesoje nje faqe, ndersa cipi i DMA-se kopjon nje pakete nga kjo e fundit, do te ndodhe transmetimi i te dhenave te gabuara. Per me teper ne se sistemi operativ zevendeson nje faqe, ndersa cipi i DMA-se po kopjon nje pakete hyrese ne te, ne kete rast jo vetem qe paketa hyrese do te humbase por edhe faqja e memorjes do te shkaterrohet. Keto probleme mund te shmangen duke pasur thirrjet e sistemit per pin dhe unpin te faqeve ne memorje. Sidoqofte, nevoja per te aktivizuar thirrjet e sistemit per pin-in dhe unpin-in e faqeve qe permbajne paketat dalese, kushton shume. N qofte se paketat jane te vogla, pr shembull 64 bytes ose me pak, ngarkesa per pin-in dhe unpin-in e do bufferi eshte e ndaluar. Per paketa te medha, 1 KB ose me shume, mund te bejme tolerime. Per permasa te ndermjetme ajo cfare mund te themi eshte qe kemi vartesi ndaj hardware. Teorikisht, ndodh i njejti problem me DMA-ne nga disku ose pajisje t tjera, por duke pasur parasysh faktin qe keto te fundit vendosen nga sistemi operativ ne bufferat e kernelit, eshte shume e thjeshte per sistemin te shmange paging e bufferave. Problemi qe qendron ketu eshte qe perdoruesi vendos dhe menaxhon DMA-ne, dhe nderkohe sistemi operativ nuk e di qe zhvendosja e faqes mund te jete fatale, ndersa per pajisjet I/O ai eshte ne dijeni t kesaj gjeje pasi ato sigurojne vete fillesen e tyre. Arsyeja pse perdorim bufferat e kernelit per diskun I/O dhe jo per komunikimin e multiprocesoreve, eshte qe nje vonese prej 20 microsec eshte e tolerueshme ne rastin e nje disku por jo te nje komunikimi proes-proes. Problemi i DMA-se mund te shmanget duke e qene procesi user ai qe starton pin e pare ne faqe dhe pyet per adresen e tij fizike. Paketat dalese kopjohen nje here atje dhe me pas ne nderfaqen e rrjetit, por kjo kopje ekstra eshte po aq e keqe si te kopjosh ne kernel. Duke pasur parasysh keto arsye, te pedoresh I/O te programuar nga dhe drejt boardit te nderfaqes eshte rruga m e sigurte, perderisa cdo page fault e hasur konsiderohet thjesht si page fault e CPU-se dhe menaxhohet me menyren e zakonshme nga sistemi operativ. Kur ndodh nje page fault, cikli i kopjimit ndepritet menjehere dhe vazhdon ne gjendjen e pritjes derisa sistemi operativ te merret me kt problem. Nje skeme me e sofistikuar eshte t perdoresh I/O e programuar per paketat e vogla dhe DMA-ne ne pin-in dhe unpin-in per paketa me te medha. N qofte se se boardet e nderfaqes se rrjetit kane CPU-ne e tyre keto te fundit e rritin shume shpejtesine. Sidoqofte, duhet pasur kujdes ne shmangien e kushteve te konkurences midis CPU-se qendrore dhe CPU-ve on-board. Nje rruge per te shmangur keto probleme ilustrohet ne Fig 8-19, ne te cilen fokusohemi ne nyjen 1 qe dergon paketa dhe nyja 2 qe i merr ato, por jo domosdoshmerisht te kene lidhje midis tyre. Celesi i

sinkronizimit te struktures se te dhenave per derguesin eshte send ring (unaza e dergeses); per marresin eshte receive ring (unaza marrese). Te gjitha nyjet jane te pajisura me te dyja llojet e unazave duke pasur parasysh faktin qe ato edhe dergojne edhe marrin. Cdo pakete ka hapesire per n-paketa. Gjithashtu, kemi edhe nje bitmap per cdo unaze me nbite, te cilat mund te jene ose te ndara ose te integruara ne unaza, ku japin informacion se kush slote te unazes jane te vlefshme.

Figura 8-19. Perdorimi i unazave send&receive per te koordinuar CPU-ne kryesore me CPU-ne onboard. Kur derguesi ka nje pakete te re per te derguar ai kontrollon njehere per te pare ne se ka ndonje slot te disponueshem ne unazen derguese. Ne se nuk ka te tille, atehere ai duhet te prese ne menyre qe te parandaloje mbivendosjen. Ne se ka nje slot te lire, ai e kopjon paketen ne slotin tjeter te disponueshem, pasi kjo pune ka perfunduar ai vendos bitin korespondues ne bitmap. Kur CPU on-board eshte e lire, ajo kontrollon unazen derguese. N qofte se ajo permban paketa, merr paketen me te gjate dhe e transmeton. Kur kjo gje behet ai pastron bitin korrespondues ne bitmap. CPU-ja qendrore eshte ajo qe vendos bitet dhe CPU-ja on-board ajo qe i fshin. Ne kt rast nuk kemi kushte konkurence. Unaza marrese punon ne nje menyre tjeter, me nje CPU on-board qe vendos nje bit per te lajmeruar ardhjen e paketes dhe CPU-ne qendrore, qe fshin bitin per te lajmeruar kopjimin e paketes dhe lirimin e bufferit. Kjo skeme mund te funksionoje edhe pa pasur nevojen e programimit te I/O nga ana e CPU-se qendrore. Ne kete rast unaza derguese nuk permban paketen por nje pointer te paketes ne memorjen kryesore (RAM-in kryesor). Kur CPU on-board eshte gati te transmetoje paketen, ai e ngarkon paketen ne bordin e nderfaqes duke perdorur I/O e programuar ose DMA-ne. Ne te dyja rastet kjo perqasje funksionon vetem kur faqja qe permban paketen eshte e njohur per tu pinuar. 8.2.3 Software i komunikimit te nivelit te ulet Proceset ne CPU te ndryshme ne nje multikompjuter komunikojne duke derguar mesazhe njeri tjetrit. Ne pamje te pare ky kalim mesazhesh ndermjet proeseve eshte i ekspozuar

ndaj proceseve user. Me fjale te tjera sistemi operativ siguron dergimin dhe marrjen e ketyre mesazheve dhe ato qe realizojne thirrjet perkatese jane procedurat e librarise. Ne nje forme me te sofistikuar mesazhi aktual dergohet ne nje menyre te fshehte per perdoruesin duke krijuar idene e nje thirrjeje procedure, ne vend te nje komunikimi ne largesi. Ne do ti shohim keto dy metoda me poshte. Dergo dhe merr Ne menyre te permbledhur sherbimet e siguruara te komunikimit mund te reduktohen ne dy thirrje librarish (library call), nje per dergimin e mesazheve dhe nje per marrjen e tyre. Thirrja per dergimin e mesazhit eshte: send (dest, &mptr); dhe ajo per marrjen e mesazhit: receive (addr, &mptr); Formeri (I meparshmi), dergon mesazhin e pointuar nga mptr drejt nje procesi i identifikuar nga dest dhe shkakton bllokimin e thirresit derisa mesazhi te dergohet. Latteri (I dyti) shkakton bllokimin e thirresit derisa te vije mesazhi. Kur ndodh kjo mesazhi kopjohet ne buferin e e pointuar nga mptr dhe ne kete rast thirresi del nga gjendja e bllokuar. Parametri addr specifikon adresen ne te cilen marresi po degjon. Gjithesesi ka mjaft variante te ketyre dy procedurave dhe parametrave te tyre. Nje ceshtje ka te beje me menyren se si kryhet adresimi. Perderisa multikompjuterat jane statike me nje numer fiks CPU-sh, menyra me e lehte per te bere adresimin, eshte te besh nje addr me dy pjese, nje per numrin e CPU-se dhe tjetra per numrin e procesit ne CPUne e adresuar. Ne kete menyre cdo CPU mund te menaxhoje adresat e veta pa pasur konflikte. Thirrjet bllokuese kundrejt thirrjeve jo bllokuese Thirrjet e pershkruara me siper quhen thirrje bllokuese (ndonjehere quhen edhe thirrje sinkronizuese). Kur nje proces therret send, ai specifikon destinacionin dhe nje buffer per ta derguar ne ate destinacion. Gjate kohes qe dergohet mesazhi, procesi dergues qendron ne gjendje te bllokuar. Instruksioni qe pason thirrjen send nuk ekzekutohet derisa ka perfunduar komplet dergimi i mesazhit, sic shihet ne Fig 8-20 (a).Te njejten gje themi edhe per thirrjen receive e cila nuk kthen kontroll derisa mesazhi te jete marre dhe eshte futur ne bufferin e mesazhit, i pointuar nga parametri. Edhe ne kete rast procesi qendron ne gjendjen e pezulluar derisa mesazhi mberrin, edhe pse mund te vazhdoje per ore te tera. Ne disa sisteme marresi mund te specifikoje edhe derguesin qe deshiron.

Figura 8-20.(a) Nje thirrje send bllokuese.(b) Nje thirrje send jo bllokuese. Nje alternative e thirrjeve bllokuese jane thirrjet jo bllokuese (nonblocking ose asynchronus calls). Pra ne se send eshte jo bllokuese, ajo i kalon kontrollin thirresit menjehere, perpara dergimit te mesazhit. Avantazhi i kesaj skeme eshte se proesi dergues mund te vazhdoje llogaritjet ne paralel me transmetimin e mesazheve. Zgjidhja ndermjet primitivave bllokuese dhe atyre jo bllokuese behet nga projektuesit e sistemit, pamvaresisht se ne disa sisteme te dyja llojet jane te disponueshem dhe perdoruesit jane te lire te zgjedhin. Sidoqofte avantazhi qe kemi me primitivat jo bllokuese ne lidhje me performancen permbyset nga nje disavantazh i madh: derguesi nuk mund te modifikoje bufferin e mesazhit derisa mesazhi te jete derguar. Mund te kete pasoja te renda ne rastin kur procesi mbishkruan mesazhin gjate transmetimit. Me keq akoma, procesi dergues nuk e ka idene se kur kryhet transmetimi, ne kete menyre ai nuk e di se kur eshte me i sigurte riperdorimi i bufferit. Ketu mund te permendim tre zgjidhje. E para ka te beje me kernelin, pra ai kopjon mesazhin ne nje buffer te tij te brendshem dhe me pas lejon procesin te vazhdoje, sic tregohet ne Fig 8-20(b). Nga pikepamja e derguesit kjo eshte njesoj si thirrja bllokuese: sa me shpejt derguesi te marre kontrollin ai eshte i lire te riperdore bufferin. Disavantazhi i kesaj metode eshte se prape derguesi nuk mund te beje gje derisa mesazhi te jete derguar perfundimisht. Ne shume nderfaqe rrjeti, mesazhi duhet te kopjohet ne nje buffer transmetimi hardware-rik ne cdo rast, keshtu qe kopja e pare shperdorohet. Dhe kopja qe behet me vone mund te ndikoje ne uljen e performances. Zgjidhja e dyte ka te beje me nderprerjen e derguesit kur dergimi i mesazhit ka perfunduar, duke lajmeruar ate se bufferi tashme eshte i disponueshem. Ketu nuk nevojitet asnje kopje, cka redukton kohen. Por interruptet e nivelit te ulet e bejne programimin e veshtire dhe subjekt kushtesh konkurence fare i ben ata jo shume produktiv dhe te pamundur per tiu nenshtruar debugger-it. Zgjidhja e trete ka te beje me percaktimin e bufferit si read-only derisa te perfundoje dergimi i mesazhit. Ne rast se bufferi eshte riperdorur perpara se mesazhi te dergohet, behet nje kopje. Problemi qe lind me kete lloj zgjidhje eshte se, edhe pse buferi eshte izoluar ne faqen e tij, kopjimi do te ndodhe edhe ne se shkruhet ne variablat me te aferta. Gjithashtu ketu duhet edhe pak administrim pasi dergimi i mesazhit tani perfshin edhe statusin read/write te faqes. Perfundimisht mund te themi se faqja duhet rishkruar prape. Persa i perket anes se dergimit kemi keto zgjidhje: Blocking send (CPU eshte e disponueshme gjate transmetimit te mesazhit).

Nonblocking send with copy (koha e CPU-se shperodrohet per kopjet ekstra). Non blocking send with interrupt (programimi eshte shume i veshtire). Copy on write (lind nevoja e kopjeve ekstra). Ne kushte normale preferohet me shume zgjidhja e pare, sidomos ne rastin kur kemi shume threade, ku ne cdo rast ndersa nje thread eshte i bllokuar gjate dergimit, vazhdon puna e threadeve te tjere. Gjithashtu nuk lind nevoja e menaxhimit te ndonje bufferi te kernelit. Sic mund ta shohim nga krahasimi qe mund ti bejme dy Fig 8-20(a) dhe 8-20(b) Dergimi i mesazhit mund te behet me shpejt n qofte se nuk ka nevoje per kopje. Duke pasur parasysh qe send mund te jete bllokuese ose jo, te njejten gje mund te themi edhe per receive. Nje thirrje bllokuese mund te pezulloje thirresin derisa te perfundoje dergimi i mesazhit. Per shume threade te disponueshem kjo eshte nje perqasje e thjeshte. Nje menyre tjeter do te ishte, nje receive jo bllokuese qe thjesht i tregon bufferit vendodhjen e bufferit dhe i kthen kontrollin derguesit menjehere. Nje interrupt perdoret per te sinjalizuar mberritjen e mesazhit. Por interruptet jane shume te veshtire per tu programuar dhe shume te ngadalte, keshtu qe do ishte me mire te mendonim nje menyre tjeter per te sinjalizuar mberritjen e mesazhit. Si alternative permendim proceduren poll e cila jep informacion ne lidhje me mesazhet qe jane ne pritje. N qofte se kemi kete gjendje, atehere thirresi therret get-message e cila kthen mesazhin e pare te kthyer. Nje opsion tjeter eshte skema ne te cilin mberritja e nje mesazhi shkakton krijimin spontan te nje threadi te ri ne hapesiren e adresimit te procesit marres. Nje thread i ri i krijuar ne kete menyre quhet pop-up. Ai ekzekuton nje procedure te specifikuar me pare dhe parametri i tij eshte nje pointer te mesazhi pasardhes. Ne perfundim te procesimit te mesazhit, ai shkaterrohet automatikisht. Nje variant i kesaj skeme eshte te ekzekutosh kodin e marresit me interruptet pa pasur nevojen e krijimit te threadeve pop-up. Per ta bere kete skeme me te thjeshte, mesazhi nga ana e tij permban adresen e menaxhuesit te interrupteve, pra kur vjen mesazhi menaxhuesi (handler) mund te thirret me pak instruksione. Fitorja me e madhe ketu qendron se tashme nuk ka nevoje me per kopjime. Menaxhuesi e merr mesazhin nga bordi i nderfaqes dhe e proceson ate me nje shpejtesi marramendese. Kjo skeme njihet me emrin active messages, e cila funksionon vetem atehere kur derguesi dhe marresi kane besim te njeri tjetri plotesisht. 8.2.4 Remote procedure call Skema e siperpermendur ka nje te mete te madhe: modeli baze mbi te cilin eshte ndertuar i gjithe komunikimi eshte I/O. Proedurat send dhe receive perfshijne I/O dhe shumica e njerezve besojne se I/O eshte modeli i gabuar i programimit. Birrel dhe Nelson sygjeruan se mund te lejohej thirrja e procedurave te lokalizuara ne CPU te tjera. Kur nje proces ne makinen 1 therret nje procedure ne makinen 2, procesi thirres ne makinen 1 eshte i pezulluar dhe ne makinen 2 fillon ekzekitimi i procedures perkatese. Informacioni nga thirresi te marresi, mund te transmetohet ne parametra dhe kthehet si nje rezultat procedure. Nderkohe per programuesin i gjithe procesi i transmetimit te mesazhit dhe pajisjet I/O jane te padukshme. Kjo teknike eshte quajtur RPC (Remote Procedure Call) dhe eshte baza e software ne shume multikompjutera. Tradicionalisht procedura thirrese quhet client ndersa ajo e thirrur quhet server.

Ideja e RPC-se eshte qe te beje qe nje thirrje e larget procedure te duket si lokale. Ne formen me te thjeshte, programi klient qe te beje nje thirrje te larget duhet te jete i pajisur me nje procedure librarie e quajtur client stub, qe perfaqeson proceduren e serverit ne hapesiren e adresimit te klientit. Ne menyre te ngjashme mund te themi edhe per serverin i cili eshte i pajisur me proceduren e quajtur server stub. Keto procedura e fshehin faktin qe thirrja e procedures nga klienti te serveri eshte jo lokale. Hapat qe e kryejne RPC tregohen ne Fig 8-21. Hapi 1 eshte thirrja e client stub nga ana e klientit. Kjo thirrje eshte nje thirrje lokale procedure ku parametrat jane te ruajtur ne stak si normalisht. Hapi 2 eshte paketimi i parametrave ne mesazh dhe aktivizimi i thirrjes se sistemit per dergimin e mesazhit nga client stub. Paketimi i paketave quhet marshaling. Hapi 3 ka te beje me dergimin e mesazhit nga makina client drejt asaj server, nepermjet kernelit. Hapi 4 ka te beje me kalimin e paketes hyrese ne server stub nepermjet serverit. Hapi 5 eshte thirrja e procedures se serverit nga server stub.

Figura 8-21.Hapat qe ndiqen ne berjen e remote procedure call. Ajo ka do te dallojme ketu eshte se procedura e klientit, e shkruar nga perdoruesi, thjesht ben nje thirrje normale procedure te client stub e cila ka te njejten emer si te procedures se serverit. Perderisa procedura e klientit dhe client stub jane ne njejten hapesire adresimi atehere kalimi i parametrave behet ne menyren e zakonshme. Ne kete menyre ne realizojme komunikimim thjesht duke bere nje thirrje procedure ne vend te perdorimit te I/O dhe send&receive. Ceshtjet e implementimit Pavarsisht favoreve te RPC ajo bart edhe mjaft te meta, ku me e madhja eshte perdorimi i parametrave pointer. Normalisht kalimi i pointerit ne nje procedure nuk paraqet ndonje veshtiresi. Procedura e thirrur mund te perdore pointerin ne te njejten menyre si thirresi, pasi te dyja ndajne te njejten hapesire adresimi. Ne RPC perdorimi i pointerave eshte i pamundur pasi klienti dhe serveri ndajne hapesira te ndryshme adresimi. Problemi i dyte qe haset eshte qe ne gjuhet e programimit si C, ne mund te lejojme te shkruajme nje procedure e cila llogarit produktin e brendshem te dy vektoreve pa

specifikuar gjatesine e secilit. Secili prej tyre mund te perfundoje nepermjet nje vlere speciale e cila njihet vetem nga procedura thirrese dhe ajo e thirrur. Ne keto kushte eshte gati e pamundur per client stub te specifikoje parametra si pr shembull, gjatesia e vektoreve. Problemi i trete eshte pamundesia per te gjetur gjithmone tipet e parametrave, madje edhe kur na jepet nje specifikim formal ose kodi vete. Nje shembull do te ishte funks printf i cili mund te kete nje variacion tipesh, numrash dhe gjatesish te parametrave. Te therrasesh printf si procedure te larget (remote procedure) eshte e pamundur pasi gjuha C eshte permisive. Keto probleme qe u permenden me siper nuk do te thone qe RPC eshte jo e perdorshme, por ato u permenden per te marre masat e duhura ne shmangien e problemeve ne rastin kur ajo gjen aplikim. 8.2.5 Distributed Shared Memory Shume programues akoma preferojne nje model te memorjes se share-uar ne multikompjuterat. Madje mund te krijohet iluzioni i shared memory kur ajo nuk ekziston realisht duke perdorur nje teknike te quajtur DSM (Distributed Shared Memory). Ne kete model do faqe eshte lokalizuar ne nje nga memorjet e Fig 8-1.Cdo makine ka memorjen virtuale dhe PT e vet. Kur CPU-ja ben nje LOAD ose STORE ne nje faqe qe nuk e ka atehere ajo ekzekuton nje instruksion trap te sistemi operativ. Sistemi operativ me pas lokalizon faqen dhe i kerkon CPU-se te chartezoj faqen dhe ta dergoje ate ne rrjetin nderlidhes. Kur faqja mberrin ajo perkthehet dhe instruksioni qe kishte ndaluar tani mund te filloje. Ne fakt ajo cka ben sistemi operativ eshte te ngarkoje faqet nga nje RAM me i larget sesa nga disku lokal. Pra te perdoruesi krijohet iluzioni se kemi shared memory ose memorje te share-uar. Diferenca qe eksiston midis shared memory aktuale dhe DSM ilustrohet ne Fig 8-22. Ne Fig 8-22 (a) shohim nje multiprocessor te vertete me shared memory fizike e cila eshte implementuar nga hardware-ri. Ne Fig 8-22(b) shohim DSM, e implementuar nga sistemi operativ. Ne Fig 8-22 (c) shohim nje forme tjeter te shared memory e implementuar nga shtresa te larta te software.

Figura 8-22.Shtresa te ndryshme ku mund te implementohet memorja e sharuar.(a) Hardueri.(b) Sistemi operativ.(c) Softueri i nivelit user. Le te shohim me ne detaje se si funksionon DSM. Ne sistemet e ketij tipi, hapesira e adresimit eshte e ndare ne faqe te cilat jane shperndare ne te gjitha nyjet e sistemit. Kur CPU-ja i referohet nje adrese jo lokale, ndodh nje trap dhe software-i i DSM merr faqen qe permban adresen, dhe ben te rifilloje instruksioni qe kishte ndaluar, i cili pritet te perfundoje me sukses. Ky koncept ilustrohet ne Fig 8-23(a), per nje hapesire adresimi me 16 faqe dhe 4 nyje ku secila mund te mbaje 4 faqe.

Figura 8-23.(a) Faqet e hapesires se adresimit te shperndara ndermjet kater makinave.(b) Situata pasi CPU-ja referon faqen 10.(c) Situata kur faqja 10 eshte read-only dhe perdoret replikimi. Ne kete shembull, ne se CPU-ja, I/O referohet instruksioneve ose te dhenave ne faqen 0, 2, 5 ose 9, atehere ky referim behet ne menyre lokale. Referencat ne faqet e tjera shkaktojne trape. Pr shembull, referenca te nje adrese ne faqen 10 do te shkaktoje nje trap ne software e DSM, i cili do te shkaktoje levizjen e faqes 10 nga nyja 3 ne 0, sic e shohim ne Fig 8-23(b). Replikimi Nje permiresim qe i behet sistemit baze qe mund te permiresoje performancen ne menyre te ndjeshme eshte replikimi i faqeve, programeve tekst, konstanteve ose strukturave te tjera te te dhenave qe jane vetem te lexueshme (read-only). Pr shembull ne faqen 10 ne Fig 8-23(c), eshte nje seksion i programit tekst, perdorimi i tij nga CPU 0 rezulton nga kopja qe i eshte derguar asaj, pa ndikuar fare ne kopjen origjianale qe eshte ne CPU-ne 1,

sic e shohim edhe ne Fig 8-23 (c). Ne kete menyre CPU-ja 0 dhe 1 mund ti referohen faqes 10 sa here te kene nevoje pa pasur nevojen e trapeve per te ngarkuar faqen e memorjes qe mungon. Nje mundesi tjeter eshte te mos replikojme vetem faqet read-only por te gjitha llojet e faqeve. Per sa kohe qe behen veprime leximi, nuk ka ndonje diference persa i perket replikimit te faqeve read-only apo atyre read-write. False sharing Sistemet DSM jane te ngjashem me multiprocesoret ne disa aspekte. Ne te dyja sistemet, kur referohen nje fjale jo lokale te memorjes, pjesa e memorjes qe permban fjalen ngarkohet nga pozicioni i saj lokal dhe vendoset ne makine duke realizuar referencen (memorja kryesore ose cache-ja). Nje eshtje shume e rendesishme eshte madhesia e njesise se memorjes. Ne multiprocesoret, permasat e bllokut te caches variojne nga 32-64 bytes. Ne sistemet DSM, gjatesia e njesise duhet te jete shumefishi i permases se faqes (MMU punon vetem me faqe), por gjithsesi ajo mund te jete 1, 2, 4 ose me shume faqe. Te pasurit permasa te medha te faqes te DSM ka avanazhet dhe disavantazhet e veta. Avantazhi me i madh eshte se koha startup per transferimet e rrjetit eshte shume e rendesishme, pr shembull te transferosh 1024 dhe 4096 bytes kerkojne pak a shume te njejten kohe. Kur eshte nevoja te levizim nje pjese te madhe te hapesires se adresimit, numri i transferimeve mund te reduktohet duke transferuar te dhena ne njesi te medha. Kjo cilesi eshte shume e rendesishme pasi shume programe duan qe pasi te bejne referencen te nje fjale ne nje faqe, ata mund te bejne referime te shume faqeve te tjera ne te ardhmen. Por ne anen tjeter, rrjeti do te jete i zene per nje kohe te gjate me transferime te medha, dhe bllokon faulte te tjera te shkaktuara nga procese te tjera. Ne Fig 8-24 paraqitet nje problem tjeter i quajtur false sharing. Ketu paraqitet nje faqe qe permban dy variabla te share-uar te palidhura me njera tjetren, A dhe B. Procesi 1 perdor A-ne ndersa procesi 2 B-ne. Ne keto kushte, faqja qe permban te dyja variablat udheton midis dy makinave.

Figura 8-24.False sharing e faqes qe permban dy variabla te palidhura. Problemi qe haset ketu eshte se, edhe pse variablat jane te palidhura me njera tjetren, ato do te ndodhen aksidentalisht ne te njejten faqe dhe kur procesi perdor njeren prej tyre, ai perdor edhe tjetren. Sa me e madhe te jete permasa e faqes efektive aq me shume false

sharing do te ndodhin dhe e kunderta. Ne sistemet e zakonshme te memorjes virtuale nuk ndodh asnje fenomen analog me false sharing. Ky problem mund te reduktohet duke perdorur kompilatore te zgjuar qe vendosin variablat respektivisht ne hapsirat e tyre te adresimit. Por deri tani flasim vetem teorikisht. Arritja e nje konsistence sekuenciale Ne se faqet qe shkruhen nuk jane te replikueshme, atehere arritja e konsistences nuk eshte problem. Atje kemi vetem nje kopje te cdo faqeje te shkrueshme dhe ajo leviz ne te dyja drejtimet ne menyre dinamike. Perderisa nuk eshte gjithmone e mundur te parashikosh se cilat faqe jane te shkrueshme, ne shume sisteme DSM, kur nje proes perpiqet te lexoje nje faqe te larget, behet nje kopje lokale dhe keto dy kopje, ajo lokale dhe ajo e larget vendosen respektivisht ne MMU-te e tyre me vetine read-only. Cdo gje eshte ne rregull per sa kohe qe te gjitha referencat jane vetem te lexueshme. Sidoqofte, ne se nje process perpiqet te shkruaje ne nje faqe te replikuar, ngrihet problemi i konsistences, sepse te ndryshosh nje kopje dhe te lesh te tjerat eshte e papranueshme. Kjo situate eshte analoge me ate cka ndodh ne nje multiprocessor kur nje CPU perpiqet te ndryshoje nje faqe qe eshte presente ne shume cache. Zgjidhja per CPU-ne eshte qe, perpara se te beje shkrimin ne faqen perkatese, te sinjalizoje ne bus duke i treguar CPUve te tjera te injorojne kopjet e tyre te bllokut te caches. Sistemet DSM punojne ne te njejten menyre. Perpara se nje faqe e share-uar te shkruhet, dergohet nje mesazh te te gjitha CPU-te qe mbajne nje kopje te faqes, per ti treguar atyre qe duhet te mos perkthejne dhe te injorojne faqen. Pasi te gjitha CPU-te jane pergjigjur qe chartezimi ka perfunduar, CPU-ja origjinale mund t filloj shkrimin. Gjithsesi eshte e mundur te tolerojme shume kopje te faqeve te shkrueshme ne rrethana t caktuara. Nje menyre eshte te lejojme proesin te kerkoje nje lock ne porcionin e hapesires se adresimit virtual, dhe me pas te performoje operacionet e leximit dhe te shkrimit ne memorjen e lock-uar. Ne kohen kur eshte liruar lock, ndryshimet mund te kapin edhe kopjet e tjera. Per sa kohe qe vetem nje CPU mund te lock nje faqe ne nje moment te dhene, arrijme ne perfundimin qe kjo skeme e arrin konsistencen. 8.2.6 Skedulimi ne Multikompjutera Ne nje multiproesor, te gjitha proceset ruhen ne te njejten memorje. Kur CPU-ja perfundon punen qe ka ne dore, ajo merr nje proes tjetr dhe fillon e ekzekuton. Ne multikompjuterat situata paraqitet ndryshe. Cdo nyje ka memorjen e vet dhe setin e saj te proeseve, pr shembull CPU-ja 1 nuk mund te ekzekutoje procesin e nyjes 4 pa bere njehere kompromis per ate. Kjo diference do t thote qe skedulimi ne multikompjutera eshte me i thjeshte, por alokimi i proceseve ne nyjet perkatese eshte me i rendesishm. Skedulimi i multikompjuterave eshte pak a shume i ngjashem me skedulimin e multiprocesoreve por jo te gjitha algoritmat e multiprocesoreve aplikohen te multikompjuterat. Algoritmi me i thjeshte ne multiprocesoret: mirembajtaja e nje liste te

vetme te proceseve gati, nuk funksionon pasi cdo proces ekzekutohet nga CPU-ja vetem ne se ai eshte i lokalizuar ne kete te fundit. Sidoqofte, kur krijohet nje proes i ri, duhet gjetur vendi se ku do te vendoset. Duke qene se cdo nyje ka proceset e veta, mund t perdoret do algoritem skedulimi lokal. Sidoqofte, eshte e mundur te perdoret skedulimi gang, ne te njejten menyre qe perdoret ne multiprocesoret. Parimi eshte i njejte, te vendosesh nje marreveshje fillestare ne lidhje me percaktimin e sloteve te kohes se ku do te ekzekutohen proeset dhe nje menyre se si te kordinojme fillesen e sloteve t kohes.

8.2.7 Load Balancing Pra per skedulimin ne multikompjutera me vendosjen e proesit n nyje, mund te perdorim do algoritem skedulimi, ne rast te kundert mund te perdorim skedulimin gang. Por eshte shume e rendesishme menyra se si caktohen proeset per do nyje. Kjo eshte ne kontrast me sistemet e multiproesoreve ku te gjitha proeset jane n te njejten memorje dhe mund t skedulohen me deshire nga cdo CPU. Pr t percaktuar vendosjen e proeseve ne nyjet perkatese perdoren algoritmat e njohur si processor allocation algorithms (algoritmat e alokimit te procesorit). Nder qellimet e tyre mund te permendim, minizimi i shperdorimit te cikleve te CPU-ve dhe i bandwidthit total te komunikimit dhe te qenit i drejte me perdoruesit&proeset. Algoritmi Graph-Theoritic Deterministic Nje klase shume e perhapur e algoritmeve aplikohet ne sistemet qe kane te njohur CPUne dhe specifikimet e memorjes dhe nje matrice e cila jep informacion pr te dhenat mesatare midis dy proeseve. Ne se numri i proceseve eshte me i madh se numri i CPUve, atehere do CPU-je i caktohen disa procese. Ne kete menyre ne minizojme trafikun ne rrjet. Sistemi mund te perfaqsohet si nj graf i peshuar, ku do rreth perfaqeson nj proes dhe shigjeta perfaqeson rrjedhjen e mesazheve midis dy proeseve. Matematikisht problemi shtrohet ne gjetjen e rrugeve per copetimin e grafit ne k subgrafe, te cilat i nenshtrohen specifikimeve perkatese. Shigjetat qe lidhin dy subgrafe perfaqesojne te dhenat e rrjetit. Qellimi ne kete rast do t ishte te gjesh particionin e duhur, qe minimizon trafikun e te dhenave ne rrjet gjithmone duke ju pershtatur specifikimeve. Ne Fig 8-25 shohim nje sistem prej nente procesesh.

Figura 8-25. Dy menyrat e alokimit te 9 proceseve ne 3 nyje. Ne Fig 8-25(a) kemi copetuar grafin me proceset A, E dhe G ne nyjen 1, B, F, H ne nyjen 2 dhe C, D, I ne nyjen 3. Ne Fig 8-25 kemi nje particion tjeter i cili ka vetem 28 njesi te dhenash te rrjetit. Kjo zgjidhje kerkon me pak komunikim.

Algoritmi Sender-Initiated Distributed Heuristic Te shohim tani disa algoritma te shperndare. Pr shembull, nje algoritem thote qe kur nje proes krijohet, ai ekzekutohet ne nyjen qe e krijoi perndryshe ajo nyje mbingarkohet. Ne se ndodh kjo, nyja zgjedh nje nyje tjeter ne menyren random dhe e pyet ate per ngarkesen qe ka. Ne se ngarkesa e kesaj nyje eshte me poshte se vlera threshold, atehere dergojme procesin atje, ne se jo, atehere zgjedhim nje makine tjeter per te analizuar. Ky i fundit nuk zgjat pergjithmone. Ne se nuk gjendet nje host i pershtatshem brenda N kontrolleve, algoritmi perfundon dhe procesi ekzekutohet ne makinen origjine, sic tregohet ne Fig 826.

Figura 8-26. Nje nyje e mbingarkuare e cila eshte ne kerkim te nje nyje tjeter per ndihme. Ideja eshte qe nyjet e superngarkuara te mos marrin pune tjeter persiper. Duhet nenvizuar fakti qe, ne kushte te nje ngarkese te madhe, te gjitha makinat do te fillojne kontrollet ne makinat e tjera duke gjetur nje menyre per ti lene atyre pak pune. Por shume pak proese e realizojne kete gje dhe mund te themi qe, zakonisht mbizoteron mbingarkesa. Algoritmi Receiver-Initialed Distributed Heuristic Parimi i punes se ketij algoritmi eshte, kur nje proces perfundon, sistemi kontrollon ne se ai ka pune mjaftueshem. Ne se jo, ai kerkon nje makine tjeter ne menyren random dhe i kerkon atij pune. Ne se ai nuk gjen serish pune ne makinat e kontrolluara N, atehere nyja pushon se pyeturi perkohesisht, ben do pune qe ka ne dore dhe perpiqet serish kur procesi tjeter perfundon. Ne se serish nuk ka pune te disponueshme, makina kalon ne gjendjen idle. Pas nje intervali fiks, ai fillon serish analizen ose kontrollin. Pra ky algoritem inicializohet nga nje marres underloaded, domethn pa ngarkese. Avantazhi i ketij algoritmi eshte se ai nuk vendos ngarkese ekstra ne sistem ne kohe kritike. Algoritmi sender-initiaded ben nje numer te madh analizash, kur sistemi mund ti toleroje ato, kur eshte goxha i ngarkuar. Me kete algoritem, me sistemin shume te ngarkuar, shansi qe makina te kete pune jo te mjaftueshme eshte shume e vogel. Sidoqofte kur kjo ndodh, do ishte shume e lehte per te marre me shume pune persiper. Sigurisht, kur ka pak pune per te bere, algoritmi R-I krijon nje trafik te konsiderueshem analizash kur makinat ne menyre te deshperuar kerkojne pune. Pra eshte me mire te kemi nje rritje te ngarkeses ne kushtet e nje nen-ngarkese sesa ne rastin e nje mbingarkese. Ne mund ti kombinojme keto dy algoritma, domethn makinat do te heqin qafe nje pjese te punes kur ka shume dhe do te kerkojne me shume kur nuk ka pune mjaftueshem. Algoritmi Bidding Nje klase tjeter algoritmash perpiqet ta ktheje sistemin kompjuterik ne nje ekonomi miniature, me shites, bleres sherbimesh dhe mime te vendosura nga ngarkesa dhe kerkesa. Protagonistet me te rendesishem ne ekonomi jane proceset, te cilet duhet te blejne kohen e CPU-se per te bere punen e tyre dhe nyjet te cilat nxjerrin ne ankand ciklet e tyre per ofruesin me te larte. Cdo nyje lajmeron cmimin e vet ne nje file publik te lexueshem. Ky cmim nuk eshte i garantuar por eshte nje indikacion per vleren e sherbimit. Nyje te ndryshme kane cmime te ndryshme ne varesi te shpejtesise, permasave te memorjes, prezences se hardware-it te shpejte floating-point dhe tipareve te tjera. Nyja mund te publikoje edhe sherbime te tjera si koha e pergjigjes. Kur nje proes do te krijoje nje proes femije, ai shikon se kush ofron sherbimin qe ai kerkon. Me pas ai percakton setin e nyjeve me sherbimet perkatese. Nga ky set ai zgjedh kandidatin me te mire, domethn ate me te shpejten, me performance me te mire, ate qe i pershtatet me mire aplikacionit te tij. Ai gjeneron cmimin i cili mund te jete me i larte ose me i ulet se cmimi i publikuar.

KAPITULLI I NNT

SECURITY (Siguria e Sistemit)


9.1 Ambjenti i Sigurise Shume veta i prdorin termat siguri dhe mbrojtje t pandashme. Kjo do t hapte gjithmone debat pr problemet kryesore ne administrimin e file-ve dhe mirembajtjen e tyre. Pr ti shmangur keto keqkuptime, ne prgjithesi prdorim termin siguri, pr ti prfshire t gjithe problemet dhe prdorim termin mbrojtje e mekanizmit pr ti referuar mekanizmit specific t sistemit operativ e prdorur kjo pr t mbikqyrur informacionin ne kompjuter. Siguria ka tre aspekte qe duhen pare, te cilat jane: threats, intruders, accidental data loss. 9.1.1 Threats Pr nj prespektive t sigurt sistemet kompjuterike kane tre objektiva kryesore, pr kercenimet e ndryshme si ne figuren 9-1. E para sht t dhenat e besueshme, qe ka si qellim te dhenat qe i kemi te fsheta te mbeten te tilla. Me e specifikuar, ne qofte se zoteruesi i disa te dhenave, ka vendosur qe keto te dhena te shfaqen per nje numer te caktuar njerezish, sistemi duhet te garantoje qe mos te ndodhi, qe leja tu jepet njerezve te paautorizuar nga ai. Por minimalisht zoteruesi i ketyre te dhenave duhet te percaktoje kush do ti shikoje keto te dhena dhe sistemi e perforcon ate.

Objektivat T dhenat e besueshme Integriteti i t dhenave

Threat Ekspozimi i t dhenave Tampering with data

Disponueshmeria e sistemit Denial of service

Figura 9-1. Objektivat e sigurise dhe thretet. Objektivi e dyt sht integriteti t dhenave, nenkupton qe prdoruesit e paautorizuar nuk duhet t jene ne gjendje t modifikojne asnj t dhene pa leje. Modifikimi i t dhenave nenkupton jo vetm ndryshimin e tyre por edhe fshirjen e tyre ose t shtimit t t dhenave fallco. Ne se nj sistem nuk garanton qe keto te dhena te mbeten te pandryshueshme derisa vete zoteruesi i tyre te vendosi ti ndryshoje, qellimi mund t rezultoje i pavlefshem. Objektivi e tret, sht Disponueshmeria e sistemit, nenkukpton qe asnjri nuk mund t nderhyje ne sistem pr ta bere at t paprdorshem. Keto sulme t Denial of service vijne gjithmone duke u rritut. Pr shembull, ne se nj kompjuter sht nj Internet Server, dergimi i i nje fluksi te madh kerkesash nga ana e klientve mund ta ngrije sistemin,

sepse CPU-ja angazhohet plotesish per egzaminimin e tyre dhe berjen e tyre te pavlefshme. Mund te themi se ne qofte se koha per te perpunuar nje kerkese per leximin e nje faqe Web, eshte 100 sec, atehere dokush qe do te dergonte 10.000 kerkesa ne sekonde do ta ngrinte sistemin. Nj tjetr akspekt i sigurise sht problem i privatesise: ti mbrosh personat nga nj keqperdorim i informacionit qe egziston per ta. Kjo shkurtimisht ka te beje me problem morale dhe legale. Nj detyre e rendesishme i paraqitet dhe shtetit pr t parandaluar ose pr t marre masat e ndryshme pr persona qe krijojne difekte ne sisteme t ndryshme. 9.1.2 Intruders (Sulmuesit e sistemit) Shume njerez jane t respektueshem ndaj ligjit dhe pr keta nuk mund t kemi preoukupime t thyerjes se sigurise, shume t tjere jane t prirur t thyejne rregullat dhe ligjet dhe shumica e bejne pr qejf ose ana financiare. Ne letrsine e sigurise , thuhet qe njerezit qe vijne rrotull bisneseve qe nuk kane t bejne me to, quhen intruders ose zakonisht thuhet adversaries. Aktet e sulmuesve ndahen ne dy kategori, kjo prcakton dhe natyren e sulmuesit t sistemit. Sulmuesit pasive, thjesht kerkojne te lexojne informacionin e fileve. Sulmuesit aktive jane me t keqinjte, ata synojne t modifikojne informacionin e fileve. Kur eshte duke u programuar nje sistem per te qene te sigurte ndaj sulmeve, sht e rendesishme t parashikohet lloji i sulmit dhe detaje t tij. Disa kategori jane : 1. Prishjet rastesore nga prdorues t paaft. Shume njerez disponojne kompjutera ne tavolinat e tyre, t cilt jane t lidhur me nj server ku informacioni i tyre ndahet (share) midis klientve t ndryshem, keshtu qe se paku ata do t behen kurioz dhe do t deshirojne t lexojne e-mailet e te tjereve, ne qofte se nuk jane vendosur barriera per ta ndaluar kete fenomen. Pr shembull, shume sisteme UNIX, e ka default qe file-t e rinj qe jane krijuar mund te jene te lexueshem nga te gjithe. 2. Nderhyrje nga te brendshmit. Studentet, programuesit e sistemeve, operatoret dhe personeli tjeter teknik shpesh konsiderohen si persona, qe e marrin si sfide thyerjen e sistemeve te sigurise. Ata shpesh jane persona shume te kualifikuar dhe shpenzojne shume kohe pr ta arritur ate. 3. Veprime t ndryshme pr t patur fitime financiare. Disa programues bankash sulmojne banken ne te cilen ata kane punuar, ne menyre qe t mbajne prej klientve disa t dhjetrat e centve por qe ne shume vet ato arrijne shifra t medha.

4. Spiunime ushtarake ose tregetare. Spiunimi ne ket rast vjen shume i prgatitur se sht me nj pikesynim t percaktuar nga nje kundershtar, rezulton ne vjedhje programesh t huaja, transferta bankare, plane bisnesi, projekte nderkombetare, etj.. Keto nderhyrje kane te bejne me nderhyrjet e fshehta ne sistem ose me vendosjen e antenave per thithjen e valeve elektromanjetike. Duhet te jete e qarte qe eshte komplet ndryshe te ruhesh nga sulmet e nje shteti per te vjedhur sekretet ushatarake dhe te ruhesh nga studentat te cilet perpiqen te fusin nje mesazh per te qeshur ne sistem. Ne tjeter lloj nderhyrje qe eshte shfaqur ne vitet e fundit jane viruset. Ne parim nje virus eshte nje pjese kodi qe zevendeson vetveten dhe sjell demtime. Ne kete kuptim, programuesi i nje virusi eshte nje intruder, shpesh me aftesi

shume te medha. Ndryshimi ndermjet nje intruder dhe nje virusi eshte se i pari eshte nje person qe po perpiqet te hyj ne sistem dhe ta demtoje ate, ndersa i dyti eshte nje program i shkruar nga nje person dhe pastaj i lancuar me shpresen per te bere deme, pra ne qofte se intruder perpiqet te shkaterroj nje gje specifike, virusi ben deme me te pergjitheshme.

9.1.3 Humbja aksidentale e t dhenave Ne shtim t threat-ve, kur sistemi sulmohet, mund t kemi humbje t t dhenave. Disa nga rastet me tipike t humbjes se t dhenave ne menyre aksidentale jane: 1. Aksidentet natyrore si zjarri, prmbytjet, lufta qe mund t shkaktoje deme ne kompjuterat qe ndodhen ne at ambjent. 2. Gabimet hardware-rike ose Software-rike: keqfunksionimi i CPU, disqet e palexueshem pr shkak t demtimeve siprfaqesore, gabimet ne nderlidhje...etj 3. Gabimet njerezore: deklarime t pasakta t t dhenave, kerkimi i fileve ne disqe t gabuar, ekzekutim i gabuar i programit, humbja e disqeve ose disketave, etj.. Disa nga keto gabime mund t shmangen ne se kemi nj mirembajtje t t dhenave, t dyfishuara (backup), t mbajtura ne kushte t tjera nga ato qe mbahen t dhenat origjinale. Mbrojtja e t dhenave nga humbja aksidentale e tyre, mund t rezultoje me e lodhshme se sa mbrojta kunder sulmuesve t sistemit. 9.2 BAZAT E KRIPTOGRAFISE Disa njohuri rreth kriptografise mund t nevojiten pr t kuptuar disa pjese t ketij kapitulli dhe t disa t tjereve vijues. Gjithsesi ky liber nuk ka pr qellim t kryeje nj diskutim serioz rreth kesaj eshtje. Pr t interesuarit rreth kesaj teme, ekzistojne shume libra t tjere qe diskutojne me hollesisht (si Kaufman et al,1995; apo Pfleeger,1997). Me posht do t zhvillojme nj diskutim t shpejt rreth kriptografise, pr lexues qe nuk jane shume t familiarizuar me t. Qellimi i Kriptografise sht qe t marre nj mesazh ose file, t quajtur plaintext (tekst i thjesht) dhe ta enkriptoje at ne nj ciphertext (tekst t koduar), pra ta kodoje, ne menyre qe vetm persona t autorizuar t dine ta konvertojne kodin ne mesazhin fillestar, pra t kuptojne prmbajtjen e mesazhit. Kurse pr t gjithe t tjeret ciphertext -i sht thjesht nj grumbull i pakuptueshem bitesh. Megjithese, pr fillestaret ne ket fushe, mund t duket e uditshme, algoritmet enkriptues dhe dekriptues duhet qe gjithmone t jene publike (t njohura). Prpjekjet pr ti mbajtur t fshehta keto algoritme gjithmone deshtojne, dhe s`bejne asgje tjetr vese i japin njerezve qe prpiqen ti mbajne t fsheht nj ndjesi sigurie t rreme. Ne ket fushe (kriptografi), kjo taktike quhet Security By Obscurity (siguri nga paqartsia) dhe prdoret vetm nga amatoret. uditrisht ne ket kategori hyjne dhe shume korporata t medha multinacionale qe duhet t jene me t vetdishme (qe taktika sht e kot).

Ne t vertet, fshehtsia varet nga parametrat e algoritmit t quajtur keys (eles). Ne qoft se P sht file plaintext, KE sht key i enkriptimit, C sht ciphertext dhe E sht algoritmi enkriptues, athere : C = E (P, KE) Ky sht prkufizimi i enkriptimit, qe tregon se Ciphertext-i merret duke prdorur algoritmin enkriptues E, me plaintext P dhe key e enkriptimit KE si parametra. Ne analogji me sa thame me sipr kemi dhe: P = D (C. KD), ku D sht algoritmi i dekriptimit dhe KD sht key (elesi) dekriptues. Kjo domethene qe pr t marre plaintext-in P nga ciphertext-i C dhe key KD t dekriptimit, duhet prdorur algoritmi D me C dhe KD si parametra. Lidhja ndermjet pjeseve t ndryshme tregohet ne figuren 9.2.

Figura 9-2. Lidhja ndermjet plaintext-it dhe ciphertext-it. 9.2.1 Kriptografia Secret-Key (me eles t fsheht) Pr t qene sa me t qart, mendojme pr nj algoritem enkriptues ne t cilin do shkronj zevendesohet me shkronj tjetr t ndryshme, pr shembull t gjitha A-t zevendesohen nga Q-t, t gjitha B-t zevendesohen nga W-t, t gjitha C-t zevendesohen nga E-t dhe keshtu me rradhe: plaintext: ciphertext: ABCDEFGHIJKLMNOPQRSTUVWXYZ QWERTYUIOPASDFGHJKLZXCVBNM

Ky sistem i prgjithshem quhet nj zevendesim monoalfabetik ku eles sht stringa me 26 germa qe i korrespondon gjithe alfabetit. elesi i enkriptimit sht QWERTYUIOPASDFGHJKLZXCVBNM. Pr elesin e mesiprm, plaintext-i ATTACK do t transformohej ne ciphertext-in QZZQEA. elesi i dekriptimit na tregon se si behet kthimi nga ciphertext ne plaintext. Ne ket shembull elesi i dekriptimit sht KXVMCNOPHQRSZYUADLEGWBUFT sepse nja A ne ciphertext sht nj K ne plaintext, nj B ne ciphertext sht nj X ne plaintext e keshtu me rradhe. Ne pamje t pare ky sistem mund t duket i sigurt, pasi megjithese kriptanalisti e njeh sistemin e prgjithshem (zevendesimet germe pr germe), ai nuk e di se cili nga 26! 4 1026 elesat e mundur sht ne prdorim. Megjithat, n qoft se uditrisht jepet nj

ciphertext me gjatsi t vogel, kodi mund t thyhet lehtsisht. Sulmi baze (kryesor) ndaj kodit, prfiton nga vetit statistike t gjuheve natyrale. Ne Anglisht pr shembull e sht shkronja me e prdorshme e cila ndiqet nga t, o, a, n, i etj. Kombinimet me t prdorshme me dy shkronja, t cilat quhen digrams, jane th, in, er, re, etj. Duke prdorur ket lloj informacioni, thyerja e kodit behet me e leht. Shume sisteme kriptografike, si ky i mesiprmi, kane vetine qe kur elesi i enkriptimit sht i dhene, lehtsisht gjendet ai i dekriptimit dhe anasjelltas. Sisteme t tille quhen Secret-Key Cryptography ose Symmetric-Key Cryptography. Megjithese kodet monoalfabetike me zevendesime jane t padobishme, njihen t tjere algoritme me elesa simetrik qe jane relativisht t sigurt, n qoft se elesat kane gjatsi t mjaftueshme. Pr nj siguri t madhe (serioze) duhet t prdoren elesa 1024 bitesh, t cilt japin nj hapesire kerkimi prej 21024 = 2 x 10308 elesash. elesa me t shkurtr mund t pengojne amatoret, por jo autoritetet e specializuara ne fushen e Kriptografise. 9.2.2 Kriptografia Public-Key (me eles publik) Sistemet Secret-Key jane shume efient pasi sasia e llogaritjeve t nevojshme pr t enkriptuar ose dekriptuar nj mesazh sht e menaxhueshme, por ato kane nj t dobesi t madhe: Qe si derguesi ashtu dhe marresi duhet t zotrojne secret-key-n qe prdorin. Madje mund t duhet edhe t takohen fizikisht ne menyre qe prdoruesit t shkembejne ket secret-key. Pr t anashkaluar ket problem prdoret Kriptografia Public-Key (Diffie dhe Hellman,1976). Ky sistem ka vetine qe prdor elesa t ndryshem pr enkriptimin dhe dekriptimin, dhe kur jepet nj eles enkriptimi i zgjedhur mire, sht virtualisht e pamundur t zbulohet elesi i dekriptimit korrespondues. Ne keto kushte elesi i enkriptimit mund t behet publik dhe vetm elesi privat i dekriptimit mbahet i fsheht. Sa pr t dhene nj prshtypje rreth kriptografise public-key, shqyrtojme dy pyetjet e meposhtme : Pyetja 1: Sa bejne 314159265358979 314159265358979? Pyetja 2: Sa sht rrenja katrore e 3912571506419387090594828508241? Ne prgjithesi nj nxenesi t klases se gjasht po ti japesh nj laps dhe nj letr, dhe po ti premtosh nj akullore t madhe si shprblim pr prgjigjen e sakt, pr 1-2 ore e zgjidh pyetjen e pare. Ndersa shumices se t rriturve po tu japesh nj laps, letr dhe premtimin pr prgjysmimin e taksave pr gjithe jetn, mund ta kene t pamundur t zgjidhin pyetjen e dyt pa prdorur makine llogaritse, kompjuter apo ndihma t tjera t jashtme. Megjithese ngritja ne katror dhe rrenja katrore jane veprime inverse t njra-tjetres ato ndryshojne shume ne kompleksitetin e llogaritjes. Kjo lloj asimetrie formon bazen e Kriptografise Public-Key. Enkriptimi kryen veprimin e thjesht kurse dekriptimi pa elesin (e njohur) na bn t kryejme veprimin e veshtire. Nj sistem Public-Key i quajtur RSA, shfrytzon faktin qe shumezimi i numrave t medhenj sht me i thjesht se faktorizimi i tyre, veanerisht kur gjithe veprimet arithmetike behen duke prdorur module arithmetike dhe t gjithe numrat e prfshire kane qindra shifra. Ky sistem prdoret gjeresisht ne botn e kriptografise. Prdoren gjithashtu edhe sisteme qe bazohen ne algoritma diskret. Problemi kryesor i

kriptografise public-key sht fakti qe ai sht me mijera here me i ngadalt se kriptografia simetrike. Kriptografia public-key punon ne menyre t tille qe secili zgjedh nj ift elesash (public key, private key) dhe publikon elesin e tij publik. elesi publik sht elesi i enkriptimit, kurse elesi privat sht ai i dekriptimit. Zakonisht elesi gjenerohet ne menyre automatike, mundesisht me nj password qe zgjidhet nga prdoruesi i cili futet ne algoritem. Pr ti derguar nj prdoruesi nj mesazh t fsheht, enkriptohet mesazhi me public-key e marresit. Meqe vetm marresi ka private key, athere ai mund t dekriptoje mesazhin.

9.2.3 Funksionet One-Way (me nj drejtim) Ekzistojne situata t ndryshme, t cilat do ti shohim me tej, ne t cilat na nevojitet t kemi nj funksion f, i cili ka vetine qe kur jepet f dhe parametri i tij x, llogaritja e Y= f(x) behet lehtsisht, por kur jepet vetm f(x) llogaritja e x behet e pamundur. Nj funksion i tille i ndryshon bitet ne nj menyre t nderlikuar. Ky ndryshim mund t filloje qe nga inicializimi i y ne x (y=x). Me pas mund t kemi nj cikel qe prsritet sa here qe kemi bit 1 ne x, ku ne do prseritje ndryshohet rradha e biteve y ne nj menyre qe varet nga prseritja, duke i shtuar nj konstante t ndryshme ne do prseritje, dhe prgjithesisht duke i miksuar (przier) bitet rrenjsisht. (biti i pare behet i fundit etj)

9.2.4 Nenshkrimet Dixhitale Shpesh sht e nevojshme qe nj dokument t nenshkruhet ne menyre dixhitale. Pr shembull mendojme pr nj klient banke qe neprmjet nj email-i, i kerkon bankes t bleje disa aksione pr t. Nj ore pasi porosia sht derguar dhe ekzekutuar, mimi i aksioneve bie. Tani klienti mohon t ket bere nj porosi me email. Banka mund ta printoje email-in por klienti mund t ankohet se banka e ka falsifikuar email-in me qellim prfitimi. Si mundet nj gjykats t dij se kush po thot t vertetn? Nenshkrimet dixhitale na mundesojne nenshkrimin apo firmosjen e mesazheve email dhe dokumenteve t tjera dixhitale ne nj menyre qe nuk mund t mohohet me pas nga derguesi. Nj menyre e zakonshme sht qe fillimisht ta prpunojme dokumentin e marre me anen e nj algoritmi hashing (prpunues, ndares) me nj drejtim. (Pra nga fillimi i dokumentit ne fund t tij). Ky funksion prpunues prodhon nj rezultat me gjatsi t rregullueshme, t pavarur nga madhesia e dokumentit origjinal. Funksionet prpunuese me t prhapura qe jane sot ne prdorim jane MD5 (Message Digest) i cili prodhon nj rezultat prej 16-bytesh (Rivest 1992), dhe SHA (Security Hash Algorithmn) i cili prodhon nj rezultat prej 20-bytesh (NIST 1995) Hapi tjetr sht ai i prdorimit t kriptografise public-key si u prshkrua me lart. Me pas derguesi, aplikon mbi hash elesin e tij privat ne menyre qe t marre D (hash). Kjo vlere e quajtur signature block, (blloku i nenshkrimit/firmes) i shtohet dokumentit dhe i dergohet marresit, si tregohet ne Fig. 9-3. Aplikimi i D ne hash shpesh referohet si dekriptimii hash por ne fakt nuk sht e vertet nj dekriptim pasi hash-i nuk sht enkriptuar me pare. sht vetm nj trasformim matematik i tij.

Figura 9-3. (a) Kryerja e nenshkrimit t bllokut. (b) Ajo fare marresi merr Kur dokumenti dhe hash-i arrijne ne destinacion, ne fillim marresi kryen copezimin (hashing) e dokumentit duke prdorur MD5 ose SHA, si folem me sipr. Marresi me pas prdor mbi bllokun e nenshkrimit, elesin publik t derguesit me qellim qe t marre E (D (hash)). Pr pasoje, ai enkripton hash-in e dekriptuar, duke fshire dekriptimin dhe duke marre serish hash-in. N qoft se hash-i i llogaritur nuk prputhet me hash-in e bllokut t nenshkrimit, athere dokumenti, blloku i nenshkrimit ose t dy njkohesisht jane falsifikuar ose ndryshuar aksidentalisht. Vlera e kesaj skeme qendron ne faktin se kriptografia public-key i aplikohet vetm nj pjese relativisht t vogel t dhenash, hashit. Vereni me kujdes se kjo metode punon vetm ne se pr t gjithe X: E (D (x)) = x Nuk mund t sigurohet qe t gjithe funksionet enkriptuese do ta kene ket veti, prderisa gjithka qe ne kerkojme nga Kriptografia sht: D (E (x)) = x Ku E sht funksioni enkriptues dhe D sht funksioni dekriptues. Ne prfundim, qe t prfitojme vetine e nenshkrimit, rradha e veprimeve nuk duhet t ket rendesi, domethene qe si D dhe E duhet t jene funksione nderrues. Fatmiresisht algoritmi RSA e ka ket veti. Pr t prdorur ket skeme nenshkrimi, marresi duhet t njohe elesin publik t derguesit. Disa prdorues i publikojne elesat e tyre publik nepr faqet e tyre web. T tjere jo, pasi kane frike se mos ndonj nderhyres futet dhe fshehtsisht ndryshon elesin e tyre. Pr ta nevojitet nj mekanizem alternativ pr shprndarjen e elesave t tyre publik. Nj metode e zakonshme sht qe derguesit ti ngjisin nj ertifikat mesazhit. Kjo ertifikat do t ket emrin e prdoruesit, elesin e tij publik si dhe nenshkrimin e nj pale t tret t besueshme. Pasi marresi t marre elesin publik t pales se tret t besueshme, ai mund t pranoje ertifikata nga t gjithe derguesit qe prdorin ket pale t tret t besueshme pr t gjeneruar ertifikatat e tyre. Me sipr treguam sesi kriptografia public-key mund t prdoret pr nenshkrimin dixhital. Gjithesesi ja vlen qe t theksohet se ekzistojne dhe skema t tjera qe nuk prfshijne ket kriptografi.

9.3 Vertetimi i prdoruesit Tani qe kemi nj formim t pastr, le t shikojme kriteret e sigurise ne sistemet operative. Kur nj prdorues log-ohet ne nj kompjuter, sistemi operativ mundohet t prcaktoje cili prdorues sht. Ky proes quhet vertetimi i prdoruesit. Mainframe-et e pare si ENIAC nuk kishin system operativ, prandaj e linin t lire proceduren login. Mainframe-et e mepassheem balch dhe sistemet timesharing zakonisht kane nj procedure log-in pr vertetimin e prdoruesit. Minikompjuterat e pare (PDP-1 dhe PDP8) nuk kishin procedure log-in por me prhapjen e UNIX ne minikompiuterin PDP41 kjo procedure nevojitej prseri. Kompjuterat e pare personale(Apple 11 dhe IBM PC) nuk e kishin ket procedure por ata me sistem operativ me t sofistikuar si Windows 2000 prfshinin nj log-in t sigurt. Kur prdorim nj kompjuter personal pr t aksesuar ne LAN gjithmone prfshihet nj log-in. Ceshtja e nj log-in t sigurt kalon nepr disa cikle dhe sht nj ceshtje me rendesi. Duke pasur t prcaktuar hapin e vertetimit, hapi tjetr sht t gjejme nj rruge t thjesht pr t arritur tek vertetimi. Shume metoda vertetimi bazohen ne nj nga tre principet e meposhtme: 1. Dicka qe prdoruesi di 2. Dicka qe prdoruesi ka 3. Dicka qe prdoruesi sht Keto principe shoqerojne skema t ndryshme vertetimi me kompleksitet dhe siguri t ndryshme. Persona t cilt kerkojne t shkaktojne probleme ne nj sistem, me pare duhet t log-ohen ne ket sistem. Keta persona quhen hacker, pr nder t programuesve t medhenj. Ne dallim nga hacker-at e vertet do t prdorim termin crackers, ne sensin orgjinal dhe do t quajme ata njerez qe mundohen t thyejne sistemet kompjuterike .

9.3.1 Vertetimi duke prdorur password Forma me e prdorshme e vertetimit sht t lejoje prdoruesin t shkruaje nj emer log-in dhe nj password. Mbrojtja me pagese sht e leht pr tu kuptuar dhe pr tu implementuar. Implementimi me i thjesht mban nj list cift t log-in name dhe password. Emri log-in i shkruar shikohet ne list dhe password i shkruar krahasohet me password-in e vendosur. Ne qoft se prputhen, log-in pranohet, ne t kundert log-in refuzohet. Kuptohet qe kur shkruhet password-i, kompjuteri nuk i tregon karakteret. Ne Windows 2000, karakteret e shkruar tregohen ne forme ylli, ndersa ne UNIX, nuk tregohet asgje. Keto skema kane cilesi t ndryshme. Ne skemen e Windows 2000 sht me leht pr prdoruesit qe harrojne, pasi ata shikojne sa karaktere kane shtypur por kjo zbulon gjatsine e password-it, e cila sherben pr prgjuesit. Ne figuren 9-4 (a) tregohet nj log-in i suksesshem. Ne figuren 9-4 (b) tregohet nj deshtim nga nj cracker pr tu log-uar ne sistemin A. Ne figuren 9-4 (c) tregohet nj deshtim i nj cracker pr tu loguar ne sistemin B.

Figura 9-4. (a)Log-in i suksesshem, (b)Login refuzohet pasi futet emri (c)Login refuzohet pasi futet emri dhe passwordi. Ne figuren 9-4(b), sistemi ankohet kur shkruajme nj emer log-in t pavlefshem. Ky gabim bn qe cracker-at t provojne emra t tjere log-in derisa t gjejne at t vlefshmin. Ne fig. 9-4(c), cracker-i gjithmone pyetet pr password dhe nuk merr feedback derisa emri log-in t jet i vlefshem.

Menyra si hyjne ne sistem crackers Shume crackers hyjne ne sistem duke prdorur shume kombime t emrit log-in dhe passwordit, derisa gjejne kombinimin e vlefshem. Shume persona, ne nj forme apo ne nj tjetr, vendosin emrin e tyre si emer log-in. T pajisur me nj liber me emra pr femijen qe do t linde dhe me nj numerator telefoni, crackers mund t kompilojne nj list me emra log-in tepr t vlefshem pr zonen ku ndodhen. Por sigurimi i emrit log-in nuk sht i mjaftushem. Duhet t gjendet dhe password-i. Shtrohet pyetja: Sa e veshtire sht kjo? Puna klasike pr sigurine e password-eve u be nga Morris dhe Thompson (1979) ne sistemet UNIX. Ata kompiluan nj list me password-e si: emer-mbiemer, emer-rruge, emer-qyteti, etj. Me pas i krahasuan listn e tyre ne qoft se kishte prputhje. Ne mbi 86% t rasteve kishin prputhje. Nj rezultat i ngjashem me ket u morr edhe nga Klein(1990). Nj survejim ne 1997 ne distriktin financiar t Londres tregoi se 82% e password-eve mund t zbuloheshin lehtsisht. Password-et me t prdorshem ishin terma seksuale, shprehje abuzive, emra njerzish. Ne ket menyre nj cracker mund t komplioje nj list me password-e dhe emra log-in pa ndonj pune t lodhshme. Nj cracker Australian ka shkruar nj program i cili sistematikisht kryen thirrje ne t gjithe numrat e telefonit dhe me pas mundohet t hyje ne sistem duke prdorur zbulues password-i. Kur puna realizohet me sukses programi informon prdoruesin. Midis shume sistemeve qe theu ky cracker ishte dhe nj kompjuter ne Arabine Saudit, i cili i lejoi atij t prfitonte numra kartash krediti. Nj alternative sht dhe lidhja e kompjuterave ne internet. do kompjuter ne internet ka nj IP adrese 32 bit t gjat e cila prdoret pr t identifikuar prdoruesit e ndryshem. Njerzit zakonisht i shkruajne keto adresa ne forme decimale si w. x y. z. ku secila prej katr komponentve t IP adrese sht nj integer nga 0 ne 255. Nj cracker mund t testojne lehtsisht ne qoft se disa kompjutera kane nj IP adrese t caktuar duke shkruar: ping w. x. y. z.

Ne qoft se kompjuteri sht ne pune, ai do t prgjigjet dhe programi ping do t tregoje se sa i gjat ishte intervali i kohes ne milisekonda vajtje-ardhje. sht e leht t shkruhet nj program pr t realizuar ping ne nj numer t madh IP adresash. Ne qoft se kompjuteri sht ne pune, cracker mund t hyje ne t duke shkruar: telnet w. x .y. z. Ne qoft se lidhja e kerkuar vendoset, cracker mund t filloje me shkrimin e emrave login dhe password-eve nga lista e tij. Megjithat crackeri mund t jet ne gjendje t hyje ne system dhe t kape password-in i cili ndodhet ne /etc/passwd. Me pas ai do t mbledhe informacione statistike rreth emrave log-in t prdorur me shpesh dhe kt informacion e prdor pr t siguruar emra log-in ne te ardhmen. Shume telnet deamons hyjne ne lidhjet TCP pas disa prpjekjeve t deshtuara pr log-in, kjo pr t vonuar crackers. Crackers reagojne duke startuar ne paralel shume threads, t cilt punojne ne makina t ndryshme ne t njjtn kohe. Qellimi i tyre sht t bejne sa me shume prpjekje ne sekonde. Ne vend qe t kryejne ping ne makina sipas IP adresave t rregullta, crackers mund t kapin nj kompani specifike. Pr t gjetur se cilen IP adrese prdor pr shembull University of Foobar ne foobar.edu duhet t shkruaje: dnsquery foobar.edu dhe me pas ai do t marre nj list me IP adresat e tyre. Duke pasur 65,536 IP adresa dhe duke njohur 2 byte-et e pare t nj IP adrese t nj kompanie sht e leht t kryesh ping ne te gjithe 65,536 adresat pr t pare se cila prgjigjet dhe cila pranon lidhje. Nj cracker me nj linj t shpejt ADSL mund t programoje programe pr t thyer sisteme qe punojne pa nderprerje. Jo vetm password-et e prdoruesve jane t thyeshme por edhe root password mund t thyhen leht. Ne vecanti disa instalime nuk shqetsohen pr t ndryshuar password-in default me t cilin sistemet jane pajisur. Nj astronom nga Berkeley, Cliff Stoll, vezhgoi parregullsi ne sistemin e tij dhe ngriti nj kurth pr cracker-in i cili u mundua t thyente sistemin e tij. Ai vezhgoi nj skeme t cilen cracker-i e kishte shkruar. Me ket skeme cracker-i kishte thyer sistemin e Lawrence Berkeley Laboratory (LBL) dhe po e prdorte pr t thyer sisteme t tjera si ai i departamentit t energjise ne U.S. LBL> telnet elxsi ELXSI AT LBL LOGIN: root PASSWORD: root INCORRECT PASSWORD, TRY AGAIN LOGIN: guest PASSWORD: guest INCORRECT PASSWORD, TRY AGAIN LOGIN: uucp PASSWORD: uucp WELCOME TO THE ELXSI COMPUTER AT LBL

Figura 9-5: Skema si cracker theu sistemin e dep.t energjise U.S.

sht e mundur qe t prdoret nj software i cili quhet, Packet sniffer i cili mbikeqyr t gjitha paketat hyrese dhe dalese ne rrjet pr t kerkuar rreth nj modeli t vecant. Nj model interesant dhe special sht kerkimi pr persona t cilt realizojne log-in ne makina ne distance.Ky informacion mund t dergohet ne nj file ku cracker-i e przgjedh me vone.Ne ket menyre nj cracker i cili thyen nj sistem me siguri t dobet mund ta prdore ket ne thyerjen e sistemeve me siguri me t lart. Shume thyerje realizohen nga prdorues t cilt prdorin script-e qe gjenden ne internet. Keto script-e prdorin sulme t forta ose prdorin bug-e t njohur ne programe specifike. Hackers-at e vertet u referohen si script kiddies. Zakonisht nj script kiddy nuk ka ndonj plan. Ai vetm kontrollon pr makina t cilat jane t lehta pr tu thyer. Disa script-e zgjedhin rastesisht nj rrjet pr ta sulmuar, duke prdorur nj numer rrjeti t rastesishem (ne pjesen me t siprme t IP adress). Me pas kontrollojne t gjitha makinat e rrjetit pr t pare se cila mund t prgjigjet. UNIX Password Security Disa sisteme t vjetr operative i mbajne filet password ne disk ne nj forme jo te enkriptuar, por te mbrojtur nga nj sistem mbrojts me mekanizem t zakonshem. Duke i pasur keto password-e ne disk ne forme jo te enkriptuar prbn nj rrezik sepse shume persona kane akses mbi to. Kjo mund t prfshije administratoret e sisemit, operatoret e makinave, personelin, menaxheret dhe madje dhe sekretaret. Nj zgjidhje e mire e cila prdoret ne UNIX punon si me posht. Programi log-in pyet prdoruesin pr t shkruar emrin dhe password-in. Password-i menjehere enkriptohet duke e prdorur at pr t enkriptuar nj bllok t dhenash. Me pas programi log-in lexon password file i cili sht nj seri linjash ASCII, nj, pr nj prdorues, derisa gjen linjn qe i prket emrit t prdoruesit. Ne qoft se password-i i enkriptuar prmban ne linj password-in e sapo llogaritur, log-in pranohet. Ne t kundert ajo refuzohet. Kjo skeme ka nj avantazh sepse askush, qoft dhe super prdorues, nuk mund t shoh password-in e ndonj prdoruesi pasi keto nuk regjistrohen ne nj form jo te enkriptuar ne sistem. Megjithat dhe kjo skeme mund t sulmohet. Nj cracker ka ndertuar nj fjalor password-esh t ngjashem me at t Morris dhe Thompson. Keto password-e mund t enkriptohen duke prdorur algoritma t njohur. Nuk ka rendesi se sa zgjat ky proes sepse ai kryhet gjat thyerjes se sistemit. Tani t pajisur me nj list t ciftit password, password i enkriptuar, crackers sulmojne. Ai lexon password file dhe nxjerr t gjitha password-et e enkriptuar. Keto krahasohen me password-et e enkriptuara me pare nga cracker dhe keshtu emri log-in dhe password-i i enkriptuar tashme jane t njohur. Nj shell script i thjesht mund t automatizoje ket proes. Duke njohur ket mundesi Morris dhe Thompson prshkruan nj teknike e cila e bnte sulmin pothuajse t pa prdorshem. Ideja e tyre ishte qe t bashkonin nj numer t rastesishem prej n-bit, i quajtur salt, me password-in. Ky numer i rastesishem ndryshon sa here qe ndryshon password-i. Ky numer vendoset ne file-in password ne forme t enkriptuar, keshtu qe kushdo mund ta lexoje at. Ne vend t vendosjes se password-it t enkriptuar ne file-in password,

password-i dhe numri i rastesishem me pare lidhen pastaj enkriptohen se bashku. Rezultati i enkriptimit ruhet ne file-in password, si ne fig 9-6. Secili prdorues ka nj linj ne file, me tre hyrje t ndara me presje: emri log-in, salt dhe password+salt i enkriptuar. eDog4238 paraqet rezultatin e password-it t lidhur t Bobb. Ky sht rezultati i enkriptuar dhe qe ruhet ne fushen e tret t Boob entry. Tani marim ne konsiderate rastin kur nj cracker kerkon t ndertoje nj list me password-e, ti enkriptoje dhe ti ruajne ato ne nj lloj file, keshtu qe do password i enkriptuar mind t shihet lehtsisht.

Figura 9-6, Prdorimi i salt pr t mbrojtur implikimin e password-eve t enkriptuar.

Prmirsimi i sigurise se password-it Edhe pse pajisja e password-it me salt mbronte sistemet nga cracker, kjo nuk funksinonte pr David i cili kishte si paswword David. Nj cracker mund t provoje si mundesi pikerisht emrin dhe ta gjeje menjehere password-in. Disa kompjutera kane nj program qe gjeneron fjale t cilat shqiptohen leht por nuk kane kuptim t cilat mund t prdoren si password. Kriteret qe plotson nj password i mire: 1.Password duhet t ket minimumi shtat karaktere 2.Password duhet t ket shkronja t medha dhe t vogla 3.Password duhet t ket t paktn nj shifer ose nj karakter special. 4.Password nuk duhet t ket fjale direkrorish, emra njerezish, etj.

One-Time Password

Forma me ekstreme per ndryshimin e passwordit eshte, one-time password. Kur prdoren one-time password prdoruesi merr nj liber i cili prmban nj list me password-e. Secili log-in prdor password-in pasardhes ne list. Ne qoft se zbulohet nj password, nuk ka ndonj problem pasi heres tjetr duhet t prdoret nj password tjetr. Sugjerohet qe prdoruesi nuk duhet ta humbase librin e password-eve. Ky liber nuk nevojitet ne skemen e propozuar nga Leslie Lamport, e cila lejonte nj prdorues t logohej ne nj rrjet t sigurt duke prdorur one-time password. Kjo metode prdoret pr t

lejuar prdoruesit t logohen ne nj server ne internet edhe pse keqberesit mund t shohin dhe kopjojne trafikun. Algoritmi bazohet ne nj funksion y = f(x) i cili ka vecorine qe kur jepet x mund t gjendet leht y por dhenia e y nuk bn t mundur gjetjen e x. Hyrja dhe dalja duhet t jene t t njjts gjatsi, pr shembull 128 bit. Prdoruesi zgjedh nj password sekret t cilin e memorizon. Ai gjithashtu zgjedh dhe nj integer n, i cili tregon se sa one-time passwords sht i aft t gjeneroje algoritmi. Shembull: Konsiderojme n = 4, ne qoft se passwordi sekret sht s\, passwordi i pare jepet duke perdorur funksionin n here: P1 = f(f(f(f(s)))) Password-i i dyt jepet duke prdorur funksionin n-1 here: P2 = f(f(f(s))) Ajo qe vlen t theksohet ketu sht se duke dhene do password si nj sekuence, sht e leht t llogarisesh nj password t meparshem ne nj sekuence numerike por sht e pamundur t llogarisesh password-in e ardhshem. Kur prdoruesi deshiron t logohet pr here t pare, ai dergon emrin log-in ne server, i cili i prgjigjet duke i derguar nj integer ne file-in password L. Makina e prdruesit prgjigjet me Pi, i cili llogaritet lokalisht se nga cila shtypet ne spot. Me pas serveri llogarit A^i dhe e krahason me vleren e vendosur ne file-in password. N qoft se vlerat prputhen,l og-in pranohet, integeri rritet ne 2, F1 kalon P ne file-in password. Ne logimin tjetr serveri i dergon prdoruesit integerin 2 dhe makina e prdoruesit llogarit V. Serveri llogarit Pi dhe e krahason me hyrjen ne file-in password. N qoft se vlerat prputhen logimi pranohet , integeri kalon ne 3 dhe F2 kalon P ne filein password, e keshtu me rradhe. Kur t gjitha n password-et jane prdorur, serveri i ri inicializon nj secret key t ri.

Vertetimi Challenge-Response Nj variant ne idene e passwordeve sht qe t mundesosh nj list t gjat pyetjesh dhe prgjigjesh t cilat gjenerohen nga prdoruesit dhe vendosen ne server ne forme t enkriptuar. Pyetjet duhet t zgjidhen keshtu qe prdoruesit nuk kane pse ti shkruajne ato. Pyetje t mundeshme jane: 1. Kush sht motra e Marjolein? 2. Ne cilen rruge ndodhej shkolla jote fillore? 3. Cilen lende jepte Woroboff? Gjat log-in serveri pyet njren prej tyre rastesisht dhe kontrollon prgjigjen. Pr ta bere me praktike nevojiten shume pyetje-prgjigje. Nj variant tjetr sht challengeresponse. Kur prdoret kjo metode, gjat lidhjes prdoruesi zgjedh nj algoritem, pr shembull x2. Kur prdoruesi logohet, serveri i dergon prdoruesit nj argument, pr shembull 7, prdoruesi shtyp 49. Algoritmi mund t jet i ndryshem ne mengjes apo ne darke, ne dit t ndryshme t javes, e keshtu me rradhe.

Ne qoft se terminali i prdoruesit ka fuqi llogaritse, si PC, mund t prdoret nj forme me e fuqishme challenge-response. Prdoruesi zgjedh nj secret key , k, i cili sillet nga sistemi i serverit. Nj kopje e tij cohet ne kompjuterin e prdoruesit. Ne momentin e logimit, serveri dergon nj numer t rastesishem ne kompjuterin e prdoruesit i cili llogarit f{rtk) dhe e kthen mbrapa at. Me pas serveri e bn vet llogaritjen dhe kontrollon n qoft se rezultati i kthyer prputhet me llogaritjet. Avantazh i kesaj skeme sht se n qoft se nj prgjues shikon dhe regjistron t gjithe trafikun ne t dy drejtimet, ai nuk do t mesoje gje e cila mund ta ndihmoje heren tjetr.

9.3.2 Verifikimi duke prdorur nj objekt fizik Metoda e dyt pr verifikimin e prdoruesit sht t kontrollosh pr objekt fizik t ciin prdoruesit e kane,me mire se sa dicka qe ata dine.Celsa e dyerve jane prdorur pr shekuj pr ket qellim. Ne ditt e sotme objekti fizik i cili prdoret shpesh sht karta plastike. Kjo kart vendoset ne nj lexues i cili shoqerohet me nj terminal ose kompjuter. Prdoruesi jo vetm qe duhet t vendose kartn por duhet t shtype dhe password-in. Kjo behet pr t shmangur prdorimin e karts kur ajo humbet ose vidhet. Nga ky kendveshtrim, prdorimi i nj ATM-je fillon me logimin e prdoruesit ne kompjuterin e bankes neprmjet nj terminali duke prrdorur nj kart dhe nj password . Kartat plastike ndahen ne dy kategori: 1.kartat me shirita magnetik 2.kartat me chip Kartat me shirita magnetike mbajne deri ne 140 byte informacion, i cili shkruhet ne nj shirit magnetik i mbyllur nga mbrapa karts. Ky informacion mund t lexohet nga nj terminal dhe t dergohet ne kompjuterin qendror. Informacioni prmban password-in e prdoruesit duke bere t mundur qe terminali t identifikoje prdoruesin edhe ne qoft se lidhja me kompjuterin qendror nuk egziston. Kartat magnetike nuk jane tepr t sigurta sepse pajisjet pr lexim/shkrimin e tyre jane t lira dhe t prhapura. Kartat me chip prmbajne nj qark t integruar (chip). Keto karta mund t ndahen ne dy nenkategori: 2. a) kartat e ruajtjes se vleres 2. b) smart kard Kartat e ruajtjes se vleres permbajne nj sasi t kufizuar memorieje (me pak se 1kB) duke prdorur teknologjine EEPROM, e cila lejon t ruhet nj vlere kur karta hiqet nga lexuesi. Nuk kemi CPU ne kart keshtu qe vlera e regjistruar mund t ndryshohet nga nj CPU e jashtme e cila ndodhet ne lexues. Keto karta zakonisht prdoren si karta telefonike me

parapagese. Kur nj thirrje kryhet, telefoni dekrementon vleren e karts. Pr ket arsye keto karta prodhohen nga nj kompani pr tu prdorur vetm ne makinat e asaj. Ne ditt e sotme pune me e sigurt sht realizuar me smart cards t cilat kane nj CPU 8 bit 4MHz, 16 KB ROM, 4KBEEPROM, 512 B RAM dhe nj kanal komunikimi me lexuesin 9600 bps. Smart cards prdoren pr t mbajtur parate si kartat e ruajtjes se vleres, por me siguri me t lart. Kartat mund t mbushen me leke ne ATM ose ne shtpi duke prdorur nj lexues t aprovuar nga banka. Kur futet karta ne nj tip lexuesi, prdoruesi mund t vertetoje kartn pr t trhequr nj sasi parash nga karta duke detyruar kartn t dergoje nj mesazh t enkriptuar . Ky tip lexuesi kthen ket mesazh ne banke pr t kredituar sasine e parave t paguara. Nj avantazh i madh pr smart cards sht se nuk kerkojne nj lidhje on line me banken. Keto karta jane prhapur kudo. Ato kane dhe prdorime t tjera potenciale. Interesi jone ketu esht se si ato prdoren pr vertetim t logimit t sigurt. Koncepti baze sht i thjesht; smart card sht nj kompjuter i vogel, i sigurt i cili mund t komunikoje me kompjuterin qendror. Variante t ndryshme vertetimi prdoren pr smart cards. Nj challenge-response i thjesht mund t punoje: serveri dergon nje numer t rastesishem 512 bit ne smart card, e cila shton dhe password-in e prdoruesit 512 bit qe ndodhet ne EEPROM. Shuma me pas ngrihet ne katror dhe 512 bitet e mesit dergohen mbrapsht ne server, i cili di password-in e prdoruesit dhe mund t llogarise kur rezultati sht i sakt dhe kur jo. Sekuenca tregohet ne Fig. 9-7. Ne qoft se nj prgjues shikon t dy mesazhet, ai nuk sht ne gjendje t kuptoje apo t regjistroje informacion pr t ardhmen sepse heres tjetr nj numer i rastesishem dhe i ndryshem 512bit do t dergohet. Nj disavantazh i protokollit kriptografik (i fshehur grafikisht) fiks sht se pas nj fare kohe ai mund t thyhet, duke riprodhuar karat e paprdorshme. Nj rruge pr t anashkaluar ket disavantazh sht prdorimi i ROM ne kart jo pr protokoll krptografik por pr interpretuesin Java. Protokolli real i kriptogrofuar me pas shkarkohet ne kart si nj program Java dhe ve ne pune interpretuesin.

Figura 9-7, Prdoruesi i smart card pr vertetim.

Ne ket menyre sapo t thyet nj protokoll, nj protokoll i ri mund t instalohet kudo ne bot menjehere. Nj disavantazh i kesaj prqasje sht se kartat behen me t ngadalshme, por me rritjen e teknologjise kjo metode sht fleksible. Nj disavantazh tjetr i smart card sht se humbja apo vjedhja behet subjekt pr analiza sulmi.

9.3.3 Vertetimi duke prdorur Biometrics Metoda e tret e vertetimit mat karakteristikat fizike t prdoruesit, t cilat jane t veshtira e imitohen. Keto karakteristika quhen biometric (Pankanti et al., 2000). Per shembull, nj lexues fingerprint ose voiceprint ne nj terminal mund t vertetoje identitetin e prdoruesit . Nj sistem biometrik ka dy pjese: regjistruesin dhe identifikuesin. Gjat regjistrimit karakteristikat e prdoruesit maten dhe rezultati dixhitalizohet. Me pas tiparet e rendesishme regjistrohen ne nj rekord i cili i bashkangjitet prdoruesit. Rekordi mund t mbahet ne nj data baze qendrore ose mund t ruhet ne nj smart card. Pjesa tjetr sht identifikuesi. Prdoruesi del ne pah dhe gjeneron nj emer log-in. Me pas sistemi bn llogaritjet prseri. N qoft se prputhen vlerat, logimi pranohet ne t kundert ai refuzohet. Emri log-in nevojitet sepse llogaritjet nuk jane ekzakte keshtu qe sht e veshtire ti indeksosh prdoruesit pastaj t kerkosh indeksin. Karakteristikat e zgjedhura duhet t kene ndryshueshmeri t mjaftueshme qe sistemi t dalloje midis shume personave pa bere gabime. Gjithashtu karakteristikat nuk duhet t ndryshojne vazhdimisht. Le t shikojme disa karakteristika biometrike qe prdoren sot. Analiza e gjatsise se gishtit sht tepr praktike. Kur prdoret kjo teknike secili terminal ka nj pajisje si ne Fig. 9-8. Prdoruesi vendos doren e tij ne t dhe gjatsia e gishtave t tij matet dhe kontrollohet ne data baze.

Figura 9-8, Nj pajisje pr matjen e gjatsise se gishtave. Edhe gjatsia e gishtave nuk sht prfekte. Sistemi mund t sulmohet duke prdorur modele duarsh prej allcie. Nj karakteristik tjetr biometrike sht analiza e retines se syrit. do person ka nj model t ndryshem t eneve retinale t gjakut, madje dhe pr binjaket. Ata mund t fotografohen nga nj kamera 1 metr larg subjekti. Sasia e informacionit ne skanimin retinal sht me i madh se ne fingerprint dhe mund t kodohet ne 256 byte. Nj teknike disi ndryshe sht dhe ajo e analizes se firmes (nenshkrimit). Prdoruesi firmos emrin e tij me nj stilolaps special t lidhur me terminalin dhe kompjuteri e krahason at me nj model t njohur qe ruhet ne nj smart card online. Nuk sht me rendesi krahasimi i firmes, por krahasohet levizja e stilolapsit dhe shtypja qe kryhet gjat shkrimit. Nj falsifikues i mire mund t jet ne gjendje t kopjoje firmen, por nuk mund t ket te dhena pr shtypjet qe behen apo pr shpejtsine e shtypjes. Nj metode qe mbshtet ne minimun nj hardware special sht zeri. Gjithshka qe nevojitet sht nj mikrofon dhe pjesa tjetr sht software. Ne kontrast me sistemin e identifikimit t zerit, i cili prpiqet t zbuloje cfare po thot prdoruesi, ky sistem prpiqet t prcakoje cili sht ai qe po flet. Disa sisteme mbshtesin qe prdoruesi t thot nj password sekret, por kjo mund t anullohet nga nj prgjues i cili regjistron password-et dhe i prdor me vone ato. Disa sisteme t avancuara thone dicka dhe i kerkojne prdoruesit ta prserise, duke prdorur tekste t ndryshem pr do log-in.

9.3.4 Kundermasat Instalimet kompjuterike qe kane nevoje pr siguri, zakonisht ndjekin hapa pr t kryer vertetimin. Pr shembull nj kompani duhet t ket nj linj veprimi e cila lejon punonjsit t logohen nga ora 8 A.M deri ne oren 5 P.M, nga e hena ne t premte. Nj prove pr tu loguar ne ndonj orar tjetr do t konsiderohet si prpjekje pr t thyer sistemin. Linjat telefonike Dail-up mund t behen t sigurta duke ndjekur rrugen me posht: Kushdo mund t telefonoje dhe t logohet, por pas nj logimi t suksesshem, sistemi menjehere nderpret lidhjen dhe therret prdoruesin ne nj numer t rene dakort. Kjo mase tregon se nj sulmues nuk mund t provoje t thyeje sistemin nga nj linj telefonike. Gjat ngjarjeve me apo pa thirrje, sistemi kerkon t paktn 5 sekonda t kontrolloje password-in e shkruar ne linjn dail-up dhe duhet ta rrise ket interval pas disa prpjekjeve t njpasnjshme t pasuksesshme pr log-in. T gjithe log-in duhet t regjistrohen. Kur nj prdorues logohet, sistemi duhet t njoftoje kohen dhe terminalin e logimit t meparshem, keshtu qe sistemi mund t zbuloje thyerjet e mundshme. Hapi tjetr sht joshja drejt grackes pr t kapur ata qe nderhyjne. Nj metode sht t prdoresh nj emer log-in special dhe nj password t thjesht. Sa here qe dikush logohet duke prdorur keto t dhena, njoftohen specialistt e sigurise se sistemit. T gjitha komandat e shkruara nga thyesi jepen ne nj monitor t sigurt dhe shohim ekzaktsisht se cfare sht duke bere thyesi.

9.4 SULMET NGA BRENDA SISTEMIT Nj cracker i logg-uar ne nj kompjuter mund t shkaktoje demtime. Ne qoft se kompjuteri ka nj siguri t mire ai vetm mund t demtoje prdoruesin sistemi i t cilit u thye. Por kjo thyerje mund t sjelle thyerje t tjera.

9.4.1 Trojan Horses Nj sulm i brendshem jane dhe kuajt e trojes (Trojan Horses), t cilt pajisin programet me kode t cilt kryejne pune t pa pritshme dhe t pa deshiruaa nga ne. Ky funksion mund t jet modifikim, shuarje ose enkriptim i file-eve t perdoruesit. Pr t vene ne pune nj trojan programuesi i tij duhet t ket programin qe do t ekzekutohet. Nj rruge e shperndarjes se trojan sht interneti ku ka lojra, mp3, etj. Kur vepron nj trojan, thirret mje procedure e cila mund t beje do gje qe bn edhe prdoruesi si: fshin file, hap lidhjet e rrjetit, etj. Ky marifet nuk prfshin autorin e trojanit i cili thyen sistemin. Ka rruge t tjera pr t dredhuar viktimen ne nj trojan t ekzekutueshem. Shume prdorues UNIX kane nj variabel, $PATH, i cili kontrollon se cilat direktori jane kerkuar pr nj komande. Kjo mund t shfaqet duke dhene ne shell komanden : echo $PATH

Nj setting i mundshem pr prdoruesin ast ne nj sistem t vecant konsiston ne direktorit : :/usr/ast/bin:/usr/locai/bin:/usr/bin:/bin:/usr/binyX 11 :/usr/ucb:/usr/man\ :/usr/java/bin:/usr/java/lib:/usr/loal/man:/usr/open win/man Prdoruesit e tjere kane rruge t ndryshme kerkimi. Kur prdoruesi shkruan prog ne shell, shell-i ne fillim shikon ne qoft se ka ndonj program t emertuar /usr/ast/bin/prog. Ne qoft se po ai ekzekutohet. Ne qoft se jo shell-i provon /usr/local/bin/prog, /usr/bin/prog, /bin/prog, e keshtu me radhe, duke provuar t gjitha direktorit. Supozojme sikur njra nga direktorit t jet e pambrojtur. Cracker ka mundesi qe t vendose programin e tij ne ket direktori. Ne qoft se kjo sht ndodhja e pare e programit ne list, ai do t ekzekutohet dhe trojan-i do t veproje. Programet me t zakonshem ndodhen ne /bin ose /usr/bin, keshtu vendosja e trojan-it ne /usr/bin/XH/ls nuk sjell demtim pr nj program pasi ne fillim duhet t gjendet programi specifik. Megjitht supozojme se nj cracker vendos la ne /usr/bin/XIL. Ne qoft se prdoruesi shkruan la ne vend t ls tani fillon t veproje trojan-i duke kryer korruptim t sistemit dhe me pas shfaq mesazhin se la nuk ekziston. Duke futur trojan ne direktori t komplikuara, t cilat zor se shihen nga prdoruesit dhe duke u dhene atyre emra qe mund t prezantojne gabime shkrimi t zakonshme, prbn nj shans t favorshem qe dikush ti therrase ato heret a vone. Ky dikush mund t jet super prdorues duke bere qe trojanet t kene mundesine t zevendesojne Mn/h me nj version qe prmban nj kale troje. Nj prdorues keqberes por legal, Mai, mund t instaloje nj trap pr nj super prdorues, si me posht. Ai vendos nj version t h i cili prmban nj trojan ne direktorine e tij dhe bn dicka t dyshimt e cila sht e sigurt qe do t sulmoje super prdoruesin, dicka si fillimi i 100 compute-bound proeseve ne t njjtn kohe. Shanset jane qe super prdoruesi do ta zgjedhe trojanin, pr t pare cfare Mai ka ne direktorine e tij duke shkruar: cd /usr/mal Is-I Disa shell provojne direktorine lokale prpara se t punojne ne $PATH. Super prdoruesi mund t prfshije trojan-in e Mai-it me fuqit e super prdoruesit. Trojnan-i mund t kryeje /usr/mal/bin/sh SETUID root. Ajo qe i nevojitet jane dy thirrje sistem: chown pr t ndryshuar prkatsine e /tjxr/mal/bin/sh ne root dhe chmocl pr t vendosur bitin e tij SETUID. Tani Mai mund t behet super prdorues. Ne qoft se Mai gjen veten frequently short of cash, ai mund t prdore nj nga trojan-et pr t ndihmuar his liquidity position. Trojani kerkon pr t pare ne se viktima ka nj program bankar online t instaluar, si Quicken. Ne qoft se po, trojan-i drejton programin t transferoje shuma t hollash nga llogaria e viktimes ne nj llogari false. Me pas trojan-i ul zerin e modemit, telefonon nj numer pagese. Ne qoft se prdoruesi sht online kur trojan-i filloi, prdoruesi nuk do t kuptoje dhe mund t qendroje ne linj pr ore t tra.

9.4.2 Login i rreme Dicka qe mbshttt nga trojanet sht login spoofing. Kjo metode punon si vijon: Normalisht kur askush nuk logohet ne nj terminal UNIX ose ne LAN, shfaqet pamja si ne Figuren 9-9(a). Kur nj prdorues shkruan emrin login sistemi e pyet pr password-in. N qoft se esht korrekt, prdoruesi logohet dhe fillon punen shell-i. Supozojme se Mai shkruan nj program pr t shfaqur pamjen e Fig. 9-9(b). Ajo duket si pamja ne Fig. 99(a), prvec se nuk sht nj program logimi ne veprim por nj program i rreme.

Figura 9-9, (a) Logim korrekt, (b) logim i rreme Kur prdoruesi shkruan emrin login, programi i prgjigjet duke e pyetur pr password-in dhe caktivizon prseritjen. Pas mbledhjes se emrit login dhe password-it, ato shkruhen ne nj file dhe programi i rreme dergon nj sinjal pr t vrare shell-in e tij. Ky veprim logon out Mai dhe zhvendos programin real pr t filluar dhe shfaqet pamja si ne Fig. 9-9(a). Prdoruesi supozon se Mai ka bere nj gabim drejtshkrimor dhe logohet prseri. Ket rradhe do t funksionoje. Por nderkohe Mai merr nj cift t ri emer logimi, password. Duke u loguar ne shume terminale dhe duke startuar login spoofer ne t gjithe terminalet ai mund t mbledhe t gjithe password-et. E vetmja menyre e vertet pr tu mbrojtur nga kjo sht t nj sekuence logimi e cila fillon me nj celes kombinimi t cilin prdoruesit nuk e arrijne dot. Windows 2000 prdor CTRL-ALT-DEL pr ket qellim. Ne qoft se nj prdorues jep ne terminal komanden CTRL-ALT-DEL, prdoruesi korrent logg-out dhe programi sistem i logimit fillon punen. Nuk ka asnj menyre qe t kalohet ky mekanizem.

9.4.3 Bombat logjike Nj tjetr sulm nga brenda sistemit ne ket kohe sht dhe bomba logjike. Kjo pajisje sht nj pjese kodi e shkruar nga nj programues i nj kompanie dhe i vendosur ne menyre t fsheht ne sistemin operativ t prodhuar. Pr aq kohe sa programuesi e ushqen me daily password, kodi nuk bn asgje. Megjithat, ne qoft se programuesi nxehet dhe heq dore nga premisat e kodit pa e vrare mendjen, ditn tjetr apo javen tjetr bomba logjike humbet rrezikshmerine e saj. Shume variante t kesaj skeme jane t mundshme. Nj ceshtje e famshme e bombave logjike lidhet me pagat. Ne qoft se numri personal nuk shfaqet ne t pr dy perioda pagash t njpasnjshme, bomba went off. Going off mund t prfshije pastrimin e diskut, shuarjen e file-eve t rastesishem.

Ne ceshtjen tjetr kompania kryen nj zgjidhje t ashpr rreth thirrjes se police-s (I cili mund ose jo t rezultoje shume muaj me vone por nuk i rivendos file-at e humbur). 9.4.4 Trap Doors Nj tjetr boshllek ne siguri i cili shkaktohet nga brenda sht dhe trap door. Ky problem krijohet nga futja e kodit ne sistem nga nj programues sistemi pr t anashkaluar disa kontrolle. Pr shembull, nj programues mund t shtoje kod ne programin e logimit pr t pranuar dike t logohet me emrin zzzzz dhe skemi probleme me password-in. Kodi normal ne programin e logimit mund t jet si ne fig. 910(a). Trap door do t jet si ne fig. 9-10(b). Thirrja e stremp kontrollon n qoft se emri i logimit sht zzzzz. N qoft se po logimi sht i suksesshem. N qoft se kodi i trap door futet nga nj programues i cili punon pr nj fabrike kompjuterash, programuesi mund t logohet ne t gjithe kompjuterat e prodhuar nga ajo kompani. Trap door anashkalon t gjithe proesin e vertetimit.

Figura 9-10. (a) Kod normal (b) Kod me trap door Nj menyre me t cilen kompanit parandalojne trap doors sht t kesh code review. Me ket teknike programuesi mbaron se shkruari kodin dhe testimin e moduleve, modulet kontrollohen nga nj kod database. Periodikisht programuesit ne skuader paraqesin kodet qe kane shkruar duke treguar dhe funksionet qe kryejne keto kode, rresht pas rreshti. Kjo rrit mundesine e kapjes se rreshtave ku mund t kemi trap door. 9.4.5 Buffer Overflow Kapja e burimeve nga sulmet lidhet me faktin qe virtualisht t gjithe sistemet operative dhe shumica e programeve sistem shkruhen ne gjuhen C. Fatkeqsisht asnj kompilues C does array bounds checking. Sekuenca e kodit nuk sht illegal, nuk kontrollohet. int i; char c[1024]; i = 12000;

c[i] = 0; Ne figuren 9-1l(a), shohim nj program ne funksionim, me variabla lokale ne stack. Ne disa pika programi therret proceduren A, si ne figuren 9-1 l(b). Sekuenca standarte e thirrjes nderpritet duke kthyer adresen ne stack. Me pas kontrolli transferohet ne A, i cili dekrementon stack pointerin pr t lokalizuar variablat lokale.

Figura 9-11. (a) Programi ne funksionim, (b) Pasi thirret procedura A,(c) Buffer overflow

Supozojme se puna A prfshin file path-in e plot dhe me pas hapet ose mund t modifikohet. A ka nj buffer me madhesi fikse B, pr t mbajtur emrin e file-it, si ne fig.9-11(b). Duke prdorur nj buffer me madhesi fikse pr t mbajtur file name sht me e thjesht pr tu programuar sesa t prcaktohet pr here t pare madhesia aktuale dhe me pas t alokohet dinamikisht memoria e mjaftueshme. Kur procedura kopjon file name ne buffer, emri tejkalon bufferin dhe mbishkruan memorien ne zonen gri si ne fig.9-11(c). N qoft se file name sht i mjaftueshem, ai gjithashtu mbishkruan adresen e kthimit, keshtu qe kur kthehet A, adresa e kthimit meret nga mesi i file name. N qoft se adresa sht random, programi do t kerceje ne adresen random dhe mund t krijoje konflikt me disa instruksione. Po n qoft se file name nuk prmbajne adresa t rastesishme? Po ne qoft se prmban nj program binar? Ajo qe mund t ndodhe sht se kur Programi kthen A, tani B fillon ekzekutimin. Nj mashtrim i njjt punon jo vetm me file name. Ajo punon me stringa shume t gjata, user input ose me dicka ku programuesi ka krijuar nj buffer me madhesi fikse. Funksioni gets i librarise C lexon nj stringe nga nj buffer por pa kontroll overflow duke u bere subjekt sulmesh. Disa kompilues prcaktojne prdorimin e gets dhe shqetsohen pr t. Tani vjen pjesa me e keqe. Supozojme qe programi qe do te sulmohet sht SETUID root ne UNIX. Kodi i futur mund t beje nj cift thirrjes sistem pr t konvertuar shell-in e sulmuesit ne disk ne STUID root, keshtu qe kur t ekzkutohet ai do t ket fuqi superuser. Tani mund

t realizohet map ne nj file special t prgatitur ne nj librari shared e cila mund t kryeje do lloj demi. Ose mund t ekzekutoje nj thirrje sistem pr mbuluar programin korent me shell, duke krijuar nj shell me fuqi superuser. Nj fraksion substancial i problemeve t sigurise lidhen me ket gje dhe sht e veshtire t fiksosh keto gabime sepse jane shume programe C ne prdorim. Prcaktimi se nj program ka probleme buffer overflow sht i thjesht. N qoft se kodi burim sht i vlefshem sulmi sht gjithmone i thjesht sepse layout-i i stack-ut njihet gjat ecurise. Nga sulmi mund t mbrohemi duke duke fiksuar kodin.

9.4.6 Sulmet e prgjithshem ndaj sigurise Rruga e sotme e testimit t sigurise se sistemit sht punesosh nj grup eksprtsh t cilt njihen si tiger teams pr t pare n qoft se thyejne dot sistemin. Ne shume vite pune keto skuadra kane zbuluar nj numer fushash ne t cilat sistemet jane t dobeta. Me posht jepet nj list sulmesh t zakonshme t cilat shpesh rezultojne t sigurta ne thyerjen e sistemeve. 1. Kerkesa e faqeve ne memorie, hapesira e diskut dhe leximi i tyre. Shume sisteme nuk i shuajne ato prpara se ti lokalizojne. Keto mund t kene shume informacion me interes t shkruar nga dikush qe i zotronte me prpara. 2. Kryerja e thirrjeve sistem ilegale ose legale me parametra ilegale apo thirrjet sistem legale me parametra legale por t pa arsyeshem. Shume sisteme mund t behen konfuze. 3. Startimi i logimit dhe shtypja e DEL, RUBOUT ose BREAK gjate sekuences se logimit. Ne disa sisteme programi i kontrollit t passwordit do t vritet dhe logimi mund t konsiderohet i suksesshem. 4. Prova pr t modifikuar stuktura komplekse t sistemeve operative t cilat mbahen ne user space. Ne disa sisteme pr t hapur nj file, programi nderton nj strukture t madhe t dhenash qe prmban emrin e file-it dhe parametrat e tjere t cilt ja kalon sistemit. Gjat kohes kur file-i lexohet apo shkruhet, sistemi ndonjehere update-on vet strukturen. Ndryshimi i ketyre fushave mund t shkatrroje sigurine. 5. Shiko pr manuale qe thone Mos e bej X gje . Provo sa me shume variante t X qe t jet e mundur. 6. Bind programuesin e sistemit t shtoje nj trap door duke anashkaluar kontrollet e sigurise pr prdoruesit me emrin tuaj t logimit. 7. Deprtuesi mund t gjeje sekretarine e administratorit t sistemit dhe t paraqitet si nj prdorues i dobet i cili ka harruar password-in dhe i duhet shpejt. Sekretaria ka nj akses mbi t gjitha llojet e informacionit.

9.4.7 T metat e famshme t sigurise Ashtu si industria e transportit kishte deshtimin ne Titanic dhe ndertuesit e sistemeve operative, gjithashtu kane disa gjera t cilat nuk i marrin parasysh.

T meta e famshme ne UNIX Sherbimi Ipr, ne UNIX , i cili printon nj file ne printer ka si mundesi t levize filein pas printimit. Ne versionet e para ishte e mundur qe Ipr t prdorej nga t gjithe dhe me pas sistemi leviz file-in password. Nj menyre tjetr pr t hyre ne UNIX ishte lidhja e nj file ne direktorine e punes t quajtur core. Sulmuesi me pas nderhyn me force ne berthamen e programit SETUID, program te cilin sistemi e shkruajti ne file core, i cili ndodhet ne maje te filet password. Ne kete menyre, nje user mund te zevendesoje nje File password me permbajtjen e disa stingave sipas zgjedhjes se tij. (e.g., command arguments). Nj tjetr e met ne UNIX prfshin komanden mkdir foo Mkdir i cili sht nj SETUID program ne varesi t root, si fillim krijohet nj nyje i pr direktorine foo neprmjet thirrjes sistem mknod dhe ndrzshon prkatsine ne foo nga ajo efektivja UID. Kur sistemi ishte i ngadalshem ishte e mundshem pr prdoruesit t levizin shpejt direktorine i-node dhe t krijojne nj lidhje me file-in password nen emrin foo pas mknod por para chown. Kur mkdir kryen chown, ai pajis prdoruesin me prkatsine e file-it password.

T metat e famshme ne TENEX Sistemi operativ TENEX ishte i prdorur ne kompjuterat DEC-10. Nuk u prdor gjat. TENEX suportonte paging. Pr t lejuar prdoruesit t monitoronin sjelljen e programeve t tyre ishte e mundur t udhezohej sistemi t therriste nj funksion prdoruesi se here qe kishim page fault.TENEX prdorte password pr t mbrojtur file-at. Pr t aksesuar nj file programi duhet t paraqiste password-in e posacem ne sistemin operativ ne momentin qe hapej file-i. Sistemi operativ kontrollon password-in, shkronj me shkronj, duke ndaluar aty ku kemi gabim. Pr t thyer TENEX nderhyresi duhet ta pozicionoje mire password-in.

Figura 9-12. Problem ne password-in e TENEX Hapi tjetr sht t sigurohesh qe faqja e dyt nuk sht ne memorie ,pr shembull duke iu referuar shume faqeve t tjera duke bere qe faqja e dyt t largohet duke hapur vend pr ato. Tani programi prpiqet t hape file-in e viktimes duke prdorur me kujdes password-in qe i bashkangjitet. Ne qoft se karakteri i pare i password-it t vertet nuk prkon me at qe shkruan nderhyresi, sistemi ndalon kontrollin e password-it dhe jep mesazhin ILLEGAL PASSWORD. N qoft se shkronja e pare e password-it real prkon me at t shkruar, sistemi vazhdon me leximin dhe ndodh nj page fault, pr t cilin nderhyresi lajmerohet. N qoft se shkronjat e para nuk prkojne nderhyresi ndryshon password. T metat e famshme t sigurise ne OS/360 Prshkrimi qe jepet sht i thjesht por paraqet esencen e t metave. Ne ket sistem ishte e mundur t startoje leximin ne nj tape dhe me pas t vazhdoje me llogaritje gjat kohes qe driveri transferonte data pr ne user space. Mashtrimi ketu ishte qe t startoje me kujdes leximin e tape-it dhe me pas t kryeje nj thirrje sistem e cila prmbante strukturen e t dhenave t prdoruesit. Sistemi operativ ne fillim verifikonte se a ishte me t vertet password-i i sakt. Me pas lexohej prseri emri i file-it pr aksesim aktual. Fatkeqsisht kur sistemi shkonte t merrte emrin e file-it pr here t dyt, emri i file-it mbishkruhej nga tape drive. Sistemi me pas lexonte file-in e ri pr t cilin nuk kemi password prezent. 9.4.8 Principet e dizenjimit t sigurise Tani sht e qart se dizenjimi i nj sistemi operativ t sigurt nuk sht nj problem i vogel. Ne ket problem sht punuar pr shume dekada por me pak sukses. Kerkuesit kane prcaktuar disa principe t prgjithshme t cilat mund t prdoren si guide pr ndertimin e sistemeve operative t sigurt.

1. Dizenjimi i sistemit duhet t jet publik. Duke pretenduar se nderhyresit nuk e dine se si funksionon sistemi, ky eshte vetem nje iluzion per dizenjuesit e tij. Sulmuesit e sistemit heret apo vone do ta zbulojne dhe mbrojtja e sistemit eshte e kompromentuar ne kete moment. 2. Default-i nuk duhet aksesuar. Gabimet ne t cilt refuzohet aksesimi do t raportohen me shpejt se sa ne at qe lejohet aksesimi. 3. Kontrollo pr current authority. Sistemi nuk duhet kontrolloje pr leje, duke llogaritur qe aksesimi eshte i lejuar, pasi e ka marre informacionin ai e kryen kete veprim. Shume sisteme kontrollojne pr leje kur nj file hapet. Kjo do t thot se nj prdorues i cili hap nj file dhe e mban t hapur pr jave t tra do t ket akses edhe mbasi zoteruesi i file e ka ndryshuar mbrojten e filet ose e ka fshire ate. 4. Ti jepet secilit proes privilegjet me t paket t mundshem. N qoft se nj editor ka vetm autoritetin pr aksesim file-ash pr ti edituar, editoret me Trojan nuk do t jene ne gjendje t bejne shume deme. Ky princip implikon nj skeme mbrojtjeje t mire. 5. Mekanizmi i mbrojtjes duhet t jet i thjesht, uniform dhe i ndertuar ne numrin me t vogel t mundshem t shtresave. Siguria si ajo e korrigjimit nuk sht nj vecori shtese. 6. Skema e zgjedhur duhet t jet psikologjikisht e pranueshme. N qoft se prdoruesit ndiejne qe mbrojtja e file-eve t tyre sht nj pune e madhe, ata nuk do ta kryejne ket pune. Ne ket list do t shtojme dhe nj princip tjetr : Mbaje dizenjimin t thjesht. Ne qoft se sistemi sht elegant dhe i thjesht, i dizenjuar nga nj arkitekt dhe ka pak principe udhezimi, ka nj shans pr t qene i sigurt. Mund t dizenjohet nj sistem me shume vecori por ky sht nj system i madh. Sistemet e medha jane potencialisht t pasigurt.

9.5 SULMET NGA JASHT SISTEMIT

Krcnimet e diskutuara n seksionin e mparshm ishin kryesisht t shkaktuara nga brenda, domethene t bra nga user-i i loguar tashm n sistem. Megjithat, pr makinat t lidhura n Internet ose n ndonj rrjet tjetr, ka nj rritje t krcnimeve nga jasht. Nj kompjuter n rrjet mund t sulmohet nga nj tjetr kompjuter n distanc i cili ndodhet po n kt rrjet. Pothuajse n t gjitha rastet, nj sulm i till konsiston n disa kode t transmetuara prgjat rrjetit drejt makins objektiv dhe i ekzekutuar atje shkakton dmtim. Sa m shum kompjutera ti bashkohen Internetit, aq m i madh sht mundsia pr dme. M posht ne do t shohim disa aspekte t sistemeve operative pr kto krcnime nga jasht, duke u fokusuar s pari tek viruset, deprtimet (worms), kodet mobile (mobile code) dhe applet-et e Java-s. sht e vshtir t hapsh nj gazet n kto dit, pa lexuar rreth nj tjetr virus kompjuteri ose deprtimi (worm) duke sulmuar botn e kompjuterave. Ata jan qartazi

nj problem madhore sigurie pr individt dhe kompanit e ngjashme. N seksionin pasues ne do t vrejm se si ato punojn dhe far mund t bhet rreth tyre. Do t hezitoja t shkruaja kt paragraf n shum detaje, q t mos i jap disa njrzve mendime t pa vlera, por ekzistojn libra q japin m shum hollsi duke prfshir madje dhe kode reale (per shembull Ludwig, 1998). Gjithashtu Interneti sht i tejmbushur me informacion rreth viruseve, kshtu q gjeniu sht tashm jasht shishes. Ve ksaj, sht e vshtir pr njerzit q t mbrojn veten e tyre kundr viruseve ne qofte se ata nuk din se si ata punojn. Prfundimisht, ka shum mendime t gabuara rreth viruseve q qarkullojn, q nevojitet t korrigjohen. Ndryshe nga sa po themi, programues lojrash, autort e viruseve t suksesshme, nuk priren drejt publicittit, mbasi produkti i tyre e bn debutimin. Duke u bazuar n t dhnat e pakta q ka, duket se m s shumti jan student t shkollave t larta ose kolegjeve ose t sapo diplomuarit q shkruajn kto viruse si nj sfid teknike, duke mos imagjinuar se nj sulm virusi mund t shkaktoj po aq viktima t mbledhura s bashku, sa nj uragan ose nj termet. Le ta quajm antihero-in ton Virgil, shkruesin (autorin) e viruseve. Ne qofte se Virgil sht tipik, synimi tij sht q t krijoj nj virus q prhapet shpejt, sht e vshtir t zbulohet dhe ta heqsh qafe sapo t zbulohet. Gjithsesi, far sht nj virus? Shkurtimisht, nj virus sht nj program q mund t riprodhoj vetveten duke vn kodin e tij n nj tjetr program, i ngjashm me riprodhimin e viruseve biologjik. Ve ksaj, virusi mund t bj dhe gjra t tjera ve riprodhimit t vetvetes. Deprtimet (worm) jan si viruset por vet-prsriten (kopjohen). Ky ndryshim nuk do t na interesoj tani ktu, kshtu q do t prdorim termin virus prfshir t dyja, pr momentin. Do t shohim rreth worm-eve n seksionin 9.5.5.

9.5.1 SKENARI I DMIT Q SHKAKTON VIRUSI

Pr sa koh q nj virus sht nj program, mund t bj do gj q bn nj program. Per shembull, mund t shtyp nj mesazh, t shfaq nj imazh n monitor, t luaj nj muzik ose dika tjetr t padmshm. Fatkeqsisht, mundet gjithashtu t fshij, modifikoj, shkatrroj ose t vjedh skedar (duke i drguar diku tjetr). Krcnimi (shantazhi) sht gjithashtu nj mundsi. Imagjinoni nj virus q inkripton (encrypt) t gjitha fluturimet n hard disk-un e viktimave, m pas shfaq mesazhin e mposhtm: PRSHNDETJE NGA INKRIPTIMI KRYESOR PR T BLER ELSIN E DEKREPTIMIT PR HARD DISK-un TUAJ, JU LUTEM DRGONI $100 N T HOLLA, FATUR T PA SHNUAR N KUTIN 2154, PANAMA CITY, PANAMA. JU FALEMINDERIT. E VLERSOJM AKTIVITETIN TUAJ. Tjetr gj q mund t bj nj virus sht ta shndrroj kompjuterin tuaj t paprdorshm pr aq koh sa virusi sht aktiv (n funksionim). Kjo sht quajtur mohim i sulmit t shrbimit (denial of service attack). Rruga m e zakonshme sht konsumimi i

burimeve n mnyr jo t kujdesshme, t till si CPU ose mbushja e disk-ut me hedhurina. Ktu sht nj program nj-rresht i prdorur pr t fikur do sistemi UNIX: main () { while (1) fork ();} Ky program krijon proese derisa proesi tabel (table) sht plot, duke parandaluar do proes tjetr nga fillimi. Tani imagjinoni nj virus q infekton do program n sistem me kt kod. T mbrohesh kundr ktij problemi, shum sisteme moderne UNIX limitojn numrin e fmijve q nj proes mund t ket njehersh . Madje dhe m keq, nj virus mundet pr nj koh t gjat t dmtoj hardware-in e kompjuterit. Shum kompjutera modern e mbajn BIOS-in n flash ROM, n t cilin mund t rishkruhet nn kontrollin e nj programi. Nj virus mund t shkruaj rastesisht hedhurina n flash ROM kshtu q kompjuteri tashm nuk do t boot-ohet. Ne qofte se chip-i i flash ROM sht n nj socket, zgjidhja e problemit krkon hapjen e kompjuterit dhe zvendsimin e chip-it. Ne qofte se chip-i i flash ROM sht i lidhur me bordin prind, mundet q i tr bordi duhet t zvendsohet. Padyshim jo nj eksperienc e dshirueshme. Nj virus gjithashtu nxirret me nj synim t caktuar. Nj kompani mund t lshoj nj virus q t kontrolloj ne qofte se sht duke operuar n nj fabrik konkurrente dhe jo me nj administrator sistemi t loguar tashm n t. Ne qofte se, lshimi ishte i lir, do t ndrhyj n proesin e prodhimit, duke reduktuar kualitetin e produktit, si rrjedhim shkakton probleme pr konkurrentin. N t gjith rastet e tjera nuk do t bnte asgj, duke e br t vshtir pr tu zbuluar. 9.5.2 SI FUNKSIONOJN VIRUSET. Mjaftueshm pr nj skenar potencial dmtimi. Tani le t shohim se si viruset punojn. Virgil shkruajti virusin e tij, ka t ngjar n gjuhn assembler, dhe m pas me kujdes e futi n nj program n kompjuterin e tij duke prdorur nj mjet (tool) t quajtur droppr. Ky program i infektuar m pas shprndahet, ndoshta duke e postuar at n nj bord buletini ose n nj koleksion software pa pages n Internet. Programi mund t jet nj loj e re interesante, versione pirate t disa software-ve komerciale, ose do gj t tjetr q mund t konsiderohet e dshirueshme. Njerzit m pas fillojn t transferojn (download-ojn) programin e infektuar n kompjuterin e tyre. Sapo t instalohet n makinn viktim, virusi qndron n gjum derisa programi i infektuar ekzekutohet. Sapo t filloj, ai zakonisht fillon duke infektuar programet e tjera n makin dhe pastaj ekzekuton payload-in e tij. N shum raste, payload-i mund t mos bj asgj derisa nj dat e caktuar ka kaluar pr tu siguruar se virusi sht prhapur gjersisht prpara se njerzit fillojn t njoftohen pr t. N datn e zgjedhur mund edhe t drgohet nj mesazh politik. N diskutimin e mposhtm, ne do t vrejm 7 lloje virusesh bazuar n at far infektojn. Kto jan viruse shoqrues, programe t ekzekutueshme, memorie, sektor boot, device driver, macro dhe kod burim. Nuk ka dyshim q tipe t tjera do t shfaqen n t ardhmen. Companion Viruses ( viruset shoqrues ).

Nj virus companion n t vrtt nuk infekton nj program, por nis t operoj kur programi sht i supozuar t filloj. Koncepti sht i thjesht, le t shpjegohet m nj shembull. N MS-DOS, kur prdoruesi shtyp; Prog MS-DOS-i n fillim krkon pr nj program t quajtur prog.com. Ne qofte se, nuk gjendet nj i till, shikon pr nj program t quajtur prog.exe. N Windows, kur prdoruesi klikon n Start dhe m pas Run, ndodh e njjta gj. N ditt tona, shumica e programeve jan skedar .exe; skedart .com jan shum t pakt. Supozoni se Virgil e di se shume njrz ekzekutojn prog.exe nga nj promt MS-DOS-i ose nga RUN-i i Windows-it. Ai m pas mund t lshoj lehtsisht nj virus t quajtur prog.com i cili do t ekzekutohet kur do kush do t provoj t ekzekutoj prog (ve n se ai shtyp emrin e plot: prog.exe). Kur prog.com ka mbaruar detyrn e tij, ai m pas vetm sa ekzekuton prog.exe. Nj sulm disi i lidhur me desktop Windows, i cili prmban shortcut-et ( linke simbolike ) e programeve. Nj virus mund t ndryshoj qllimin e nj shortcut-it pr ta br argument pr virusin. Kur prdoruesi klikon dy her n nj ikon, virusi sht ekzekutuar. Kur kjo sht br, virusi vetm ekzekuton qllimin origjinal t programit. Program viruset e ekzekutueshm. Nj hap m lart drejt kompleksitetit jan viruset q infektojn programet e ekzekutueshm. M t thjeshtit e ktyre viruseve, vetm sa mbishkruanjn programet e ekzekutueshm me veten e tyre. Kta jan quajtur viruse t mbishkruajtshm. Infektimi logjik t nj virusi t till sht dhn n Fig. 9-13.

#include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <fcntl.h> #include <unistd.h> struct stat sbuf; sht symlink search (char *dir_ name) {

/* kok POSIX standarte */

/* pr thirrjet lstat pr t par n se skedari */ /* kontrolli rekursiv (prsrits) pr t ekzekutueshmet */ /* pointer drejt nj stream direktorie t hapur */ /* pointer n hyrje t nj direktorie*/ /* hap kt direktori */

DIR *dirp; struct dirent *dp; dirp = opendir(dir_name);

if (dirp == NULL) return; /* dir nuk mund t hapet; harroje */ hile (TRUE) { dp = readdir(dirp); /* lexo hyrjen e direktoris pasuese */ if (dp == NULL) { /* NULL do t thot ne mbaruam */ chdir (".."); /* ktheu mbrapa tek direktoria prind */ break; /* dil nga cikli */ } if (dp->d_name[0] == '.') continue; /* kalo . dhe .. direktorit */ lstat{dp->d_name, &sbuf); /* a sht hyrja nj link simbolik? */ if (S_ISLNK(sbuf.st_mode)) continue; /* kaprce link-un simbolik */ if (chdir{dp->d_name) == 0) { /* n se chdir arrihet me sukses,duhet t ket nj dir */ search("."); /* po, hyr dhe kontrolloje at */ } else { /* jo (file), infektoje at */ if (access(dp->d_name,X_OK) == 0) /* n se sht i ekzekutueshm, infektoje at */ infect(dp->d_name); } closedir(dirp); /* dir i prpunuar; prfundo dhe kthehu */ } } Figure 9-13. Nj proedur rekursive q gjen skedar t ekzekutueshm n nj sistem UNIX

Programi kryesor i ktij virusi do t kopjoj n fillim programin binar t tij n nj rresht duke hapur argv [0] dhe duke e lexuar at pr nj ruajtje t sigurt. M pas i duhet t prshkuaj t tr file-in sistem duke filluar nga direktoria root (rrnj) duke ndryshuar direktorin root dhe duke thirrur search me direktorin root si parametr. Procedura rekursive search shqyrton nj direktori duke e hapur at, m pas lexon hyrjen nj her n koh duke prdorur readdir derisa nj NULL sht prgjigjur duke treguar q nuk ka porta. N se porta (hyrja) sht nj direktori, proesohet duke e ndryshuar at dhe m pas thirret rekursivisht search; n se sht nj file i ekzekutueshm, infektohet duke thirrur infect me emrin e skedarit pr ta infektuar si parametr. Skedart q fillojn me . kaprcehen pr t shmangur problemet me direktorit me . dhe .. Gjithashtu, link-et simbolike kaprcehen sepse programi supozon q ai mund t hyj n nj direktori duke prdorur thirrjen e sistemit chdir dhe m pas t kthehet atje ku ishte duke shkuar sipas .. , dika q mban si nj link t fort por jo link simbolik. Nj program amator mund t mbaj gjithashtu me raste link-e simbolike. Procedura aktuale e infektimit, infect, vetm sa hap skedarin e emruar n parametrat e tij, kopjon virusin e ruajtur n nj rresht (grup) mbi skedar dhe m pas mbyll skedarin. Ky virus mund t prmisohet n mnyra t ndryshme. S pari, nj test mund t futet brenda infect pr t gjeneruar nj numr t rastit dhe m pas t kthehet n rastet m t

shumta pa br asgj. N, le t themi, nj thirrje nga 128, infektimi do t zinte vend, n kt mnyr do t reduktonte shanset pr nj detektim (zbulim) t hershm, prpara se virusi t ket patur nj shans t mir pr tu prhapur. Viruset biologjike kan t njjtat tipare: ata q vrasin shpejt viktimat e tyre, nuk prhapen aq shpejt sa ata q prodhojn nj ngadalsi, vdekje t ngadalt, duke i dhn viktimave shanse t shumta pr t prhapur virusin. Nj plan alternativ do t ishte nj norm e lart infektimi (le t themi, 25%) por nj ndrprerje n numrin e skedarve t infektuar n t njjtn koh pr t reduktuar veprimtarin e diskut dhe si rrjedhoj do t ishte m pak e dukshme. S dyti, infect (infektimi) mund t kontrolloj n se skedari sht tashm i infektuar. Infektimi i t njjtit skedar pr s dyti vetm sa do t humbt koh. S treti, shkalla mund t merret pr t mbajtur kohn e modifikimit t fundit dhe madhsin e skedarit n t njjtn mnyr sikur do t ndihmoj t fshehje infektimin. Pr programet m t mdha se virusi, madhsia do t mbetet e pandryshuar, por pr programet m t vogla se virusi, programi tani do t zmadhohej. Meqen se shumica e viruseve jan m t vegjl se shumica e programeve, ky nuk sht nj problem. Ndon se ky program nuk sht shum i gjat (programi i plot sht m pak se nj faqe C dhe programi burim kompilohet n m pak se 2KB), nj version i kodit assembler i tij mund edhe t shkurtohet. Ludwig (1998) shkroi nj program n kod assembler pr MSDOS q infektonte t gjith skedart n direktorin e tij dhe ishte vetm 44 byte kur assemblohej. M von n kt kapitull do t studiojm programin antivirus, q sht nj program q kap dhe fshin viruset. Megjithat, sht e rndsishme t prmendet logjika e Fig. 9-13, e cila prdor nj virus q t gjej t gjith skedart e ekzekutueshm pr ti infektuar ato, gjithashtu mund t prdoret nga nj program antivirus pr t kapur t gjith programet e infektuar pr t fshir kto viruse. Teknologjia e infektimit dhe disinfektimit shkojn krah pr krah, kjo sht arsyeja pse sht e nevojshme pr ti kuptuar n detaje se si viruset funksionojn pr t qen t aft q ti luftojm ato efektivisht. Nga kndvshtrimi i Virgil, problemi i mbishkrimit t nj virusi sht, se sht shum e leht pr ti zbuluar. N fund t fundit, kur nj program i infektuar ekzekutohet, mund t prhap virusin m shum, por nuk bn at q duhet t bj dhe prdoruesi do ta vrej kt menjeher. Si pasoj, shum viruse sulmojn veten e tyre n program dhe bjn punn e tyre, por lejojn q programi t punoj normalisht m pas. Kto viruse njihen si viruse parazit. Viruset parazit mund t sulmojn veten e tyre n fillim, n fund ose n mes t programit t ekzekutueshm. N se nj virus sulmon veten e tij para programit, ai duhet t kopjoj s pari programin n RAM, ta shkruaj veten e tij n fillim t skedarit, dhe m pas t kopjoj programin nga RAM-i duke ndjekur veten e tij, si tregohet n Fig. 9-14(b). Fatkeqsisht, programi nuk do t ekzekutohet n adresn virtuale t tij t re, kshtu q dhe virusi duhet t zhvendos programin meq ai ka lvizur, ose ta fus fshehtas prapa n adresn virtuale 0 pasi ka mbaruar ekzekutimin e tij.

Figure 9-14. (a) Nj program i ekzekutueshm. (b) me nj virus n fillim. (c) me nj virus n fund. (d) me nj virus t prhapur n hapsirn e lir brenda programit. Pr t shmangur kompleksitetin e teprm t opsioneve krkuar nga ky ngarkim i prparm, shum viruse jan ngarkues t fundm, duke sulmuar veten e tyre n prfundim t ekzekutimit t programit, duke ndryshuar fillimin e fushs s adresave n header pr t shnjuar fillimin e virusit, si tregohet n Fig. 9-14(c). Virusi tani do t ekzekutohet n nj adres virtuale t ndryshme i varur nga programi i cili po ekzekutohet, por e gjitha kjo do t thot q Virgil duhet t siguroj virusin e tij pozicionim t pavarur. Kjo nuk sht e vshtir pr nj programues me eksperienc. Formati kompleks i programit t ekzekutueshm, i till si skedart, exe n Windows dhe pothuajse n t gjith formatet binar Unix modern, lejojn q nj program t ket tekst t shumfisht (prbrs) dhe segmentet data... Viruset Rezident n Memorie Deri tani ne kemi supozuar se kur nj program i infektuar sht ekzekutuar, virusi proedon, kalon kontrollin n programin real dhe del. N kundrshtim, nj virus me qndrim n memorie qndron n memorie gjith kohn, pr m tepr duke u fshehur n fillim t memories ose ndoshta posht, prgjat vektorve interrupt, n 100 bytet e fundit t cilt zakonisht nuk jan n prdorim. Nj virus i zgjuar mundet madje dhe t modifikoj bitmap-in e RAM-it t sistemit operativ, pr ta br sistemin t mendoj se memoria e virusit sht e zn, pr t shmangur vshtirsin i t qnit i mbishkruajtshm. Nj virus tipik rezident-memorie kap nj nga trap-et ose vektort e interrupt-eve duke kopjuar prmbajtjen e piknisjes s variablave dhe duke vendosur adresn e tij atje, duke e drejtuar kshtu at trap ose duke e penguar at. Zgjidhja m e mir sht q sistemi t thrras trap-et. N kt mnyr, virusi merr ekzekutimin (n mnyrn kernel) n do thirrje t sistemit. Kur kjo kryhet, ai vetm sa i krkon sistemit real t thirrur nga krcimet n adresn e ruajtur t trap-it.

Pse nj virus duhet t ekzekutohet n do thirrje t sistemit? Pr t infektuar programin, natyrisht. Virusi vetm sa pret deri sa nj thirrje sistemi exec vjen dhe ather, duke ditur q skedari n krah sht nj binar i ekzekutueshm, e infekton at. Ky proes nuk krkon aktivitet masiv t diskut t Fig. 9-13 kshtu q sht m pak e dukshme. T kapurit e gjith thirrjeve t sistemit gjithashtu i jep virusit mundsi t mdha pr t prgjuar n data dhe kryen t gjitha dmet e mundshme.

Viruset e Sektorit Boot Sikurse e diskutuam n Kapitullin 5, kur shumica e kompjuterave jan t ndezur, BIOS-i lexon t dhnat (diskun, regjistrimin, pllakn) e master boot nga fillimi i diskut t boot-it brenda RAM-it dhe e ekzekuton at. Ky program prcakton cili particion sht aktiv dhe e lexon n sektorin e par, sektorin boot nga ai particion dhe e ekzekuton at. At program q pr m tepr ngarkon sistemin operativ ose sjell n loader (ngarkim) pr t ngarkuar sistemin operativ. Fatkeqsisht, nj nga shokt e Virgil hodhi iden e krijimit t nj virusi q mund t mbishkruante master boot rekord ose sektorin boot, me nj rezultat shkatrrues. Kto viruse, t quajtur boot sektor viruses, jan shum t zakonshm. Zakonisht, nj virus sektor boot-i {q prfshin viruset MBR (Master Boot Record)}, n fillim kopjon sektorin boot t vrtet n nj vend t sigurt t diskut kshtu q ai mund t boot-oj sistemin operativ kur ai t ket mbaruar. Programi Microsoft i formatimit t diskut, fdisk , kaprcen track-un (pistn) e par, kshtu q ai sht nj vend i fsheht i mir n makinat Windows. Nj opsion tjetr sht t prdor do sektor t lir t diskut dhe m pas t freskoj (update) listn e sektorit t keq q t shnoj strofulln si t dmtuar. N fakt, n se virusi sht i madh, ai mundet gjithashtu t maskoj pjesn tjetr t tij si nj sektor t keq. N se direktoria root sht mjaftueshm e madhe dhe n nj vend t fiksuar, si sht n Windows 98, fundi i direktoris root (rrnj) sht gjithashtu nj mundsi. Nj virus vrtet agresiv mundet madje t caktoj nj hapsir normale t diskut pr sektorin e vrtet t boot-it dhe veten e tij dhe t freskoj (update) bitmap-in e diskut ose n prputhje me listn e lir. T bsh kt krkon njohuri t strukturs s datave n brendsi t sistemit operativ, por Virgil kishte nj profesor shum t mir pr kursin e tij t sistemeve operative dhe studionte shume. Kur kompjuteri sht boot-uar, virusi kopjon veten e tij n RAM, n fillim ose ndrmjet vektorve t interrupt-eve. N kt pik makina sht n formn kernel (mode kernel), me MMU off, jo sistem operativ dhe jo me nj program antivirus n veprim. N koht e pjeseshme (t pritjes) pr viruset. Kur sht gati, boot-on sistemin operativ, zakonisht duke qndruar rezident n memorie. Nj problem, gjithesesi, sht se si t merret kontrolli prsri m von. Mnyra e zakonshme sht t shfrytzohen njohurit specifike se si sistemi operativ menaxhon vektort e interrupt-eve. Pr shembull, Windows nuk i mbishkruan t gjith vektort e interrupt-eve n nj goditje (blow). N vend t ksaj, ai ngarkon driver-at e njsive nj her n koh dhe secila kap vektorin e interrupt-it q ka nevoj. Ky proes mund t marre nj minut.

Ky projektim i jep virusit manovrimin q i nevojitet. Ai fillon me kapjen e t gjith vektorve t interrupt-eve si tregohet n Fig. 9-15 (a). Sapo driver-i ngarkohet, disa nga vektort mbishkruhen, por n se ora e driver-it sht ngarkuar m par, pasi te nisi virusi do t jet plot me interrupt-e clock-u. Humbja e interrup-it t printerit sht treguar n Fig. 9-15(b). Sapo virusi t vrej q nj nga vektort e tij t interrupt-it sht mbishkruar, ai mund ta mbishkruaj at vektor prsri, duke e ditur q tani sht e sigurt. Rikapja e printerit sht treguar n Fig. 9-15(c). Kur do gj sht ngarkuar, virusi kthen t gjith vektort e interrupt-eve dhe mban vetm trap-in e thirrjes s sistemit pr veten e tij. N fund t fundit, t pasurit kontroll n do thirrje t sistemit sht m mir se sa t paturit kontroll pas do prdorimi t floppy disk-ut, por gjat boot-imit, ai nuk mund t marr riskun e humbjes s kontrollit prgjithmon. N kt pik ne kemi nj virus rezident n memorie n kontroll t thirrjeve t sistemit. N fakt, kjo sht mnyra si vijn n jet shumica e viruseve rezident n memorie.

Figure 9-15. (a) Pasi virusi ka kapur t gjith vektort e interrupt-eve dhe t trap-eve. (b) Pasi sistemi operativ ka rimarr vektorin e interrupt-it t printerit. (c) Pasi virusi ka vrejtur humbjen e vektorit interrupt t printerit dhe e ka rikapur at. Viruset e Driver Divice T hysh n memorie n kt mnyr sht si t eksplorosh nj shpell, ju duhet t kaloni ndrmjet gjarprimeve dhe kujdes rreth dikaje q mund t bjer posht ne toke dhe ne kokn tnde njekohesisht. Do t ishte shum m e leht ne qofte se sistemi operativ do t ngarkonte virusin zyrtarisht. Me pak pun, ky qllim mund t realizohej. Marifeti sht t infektosh driver-in e nj pajisje (device driver), duke t drejtuar n nj virus device

driver. N Windows dhe n disa sisteme Unix, device driver jan pikrisht programe t ekzekutueshme q qndrojn n disk dhe ngarkohen n kohn e boot-imit. N se njri nga ata infektohet duke prdorur viruset parazit, virusi gjithmon do t jet zyrtarisht i ngarkuar n kohn e boot-imit. Driver-at punojn n formn kernel dhe pasi nj driver sht ngarkuar, ai sht thirrur, duke i dhn virusit nj mundsi pr t kapur vektorin e trap-eve t thirrjes s sistemit. Viruset Makro Shum programe, si Word dhe Excel, e lejojn prdoruesin t shkruaj macro pr t grupuar disa komanda q m von mund t ekzekutohen vetm me nj tast t vetm. Makrot mundet gjithashtu t lidhen n njsin menu, kshtu q kur nj nga ato sht selektuar, makro-ja ekzekutohet. N Microsoft Office, makrot mund t prmbajn nj program t tr n Visual Basic, i cili sht nj gjuh programimi i plot. Makrot jan interpretuar madje dhe si t kompiluara, por kjo vetm sa ndikon n shpejtsin e ekzekutimit, jo n at far ato bjn. Meqn se makrot mund t jen dokumente specifik, Office i ruan makrot pr do dokument me vet dokumentin. Tani vjen problemi. Virgili shkruan nj dokument n Word dhe krijon nj makro q e lidh n funksionin OPEN FILE. Makro-ja prmban nj virus makro. M pas ai e poston (email) dokumentin tek viktima, i cili natyrisht e hap at (duke pranuar se programi i posts, e-mail nuk e ka br tashm kt gj pr t). Hapja e dokumentit shkakton ekzekutimin e makros OPEN FILE. Meqen se makro-ja mund t prmbaj nj program arbitrar ( t diktuar), ai mund t bj do gj, si infektimi i dokumenteve t tjera Word, t fshij skedar dhe m tepr. N t gjitha paansite e Microsoft-it, Word jep nj shenj paralajmruese kur hap nj skedar me macro, por shum prdorues nuk e kuptojn se far do t thot kjo dhe vazhdojn gjithsesi ta hapin. Ve ksaj, sht e pranueshme q dokumentet mund t prshijn gjithashtu edhe makro. Dhe ka t tjera programe q nuk e japin kt sinjal (paralajmrim), duke e br dhe m t vshtir pr t zbuluar virusin. Me rritjen e email-it, drgimi i viruseve t futur n makro sht nj problem i madh. T till viruse e kan m t leht te shkrujan se sa t fshehin sektorin e vrtet t boot-it diku n nj bllok list t dobt, duke fshehur virusin midis vektorve t interrupt-eve, dhe t kapin vektorin e trap-eve t thirrjeve t sistemit. Kjo do t thot q gjithnj e m shum njrz me aftsi t pakta mund t shkruajn tani viruse, duke zbritur kualitetin e prgjithshm t produktit dhe dhnien e programuesve t viruseve nj emr t keq. Viruset e Kodeve Burim Viruset parazit dhe t sektorve boot, kan nj platform t lart specifik; viruset e dokumenteve jan disi m t pakt kshtu q (Word punon n Windows dhe n Macintosh, por jo n Unix). Viruset m shum t mbartshm nga t gjith jan viruset e kodeve burim (Source Code Viruses). Imagjino virusin e Fig. 9-13, por me nj modifikim q n vend t krkimit t skedarve t ekzekutueshm binar, krkon pr nj program n C, nj ndryshim vetm n nj rresht (thirrja n Access). Procedura e infektimit duhet t ndryshoj pr te futur rreshtin #include <virus.h>

n fillim t do programi burim n C. Nj tjetr ndrhyrje sht e nevojshme, rreshti run_virus(); pr t aktivizuar virusin. T vendossh se ku duhet vn ky rresht krkon disa aftsi pr t analizuar kodin C, meqen se ai duhet t jet n nj vend q lejon procedurat e thirrjeve dhe gjithashtu jo n nj vend ku kodi mund t vdes. Vendosja n mes t nj komenti pr m tepr nuk punon, dhe t vendosurit brenda n cikel mund t jet nj gj shum e mir. Thirrja e supozuar mund t jet nj vendosje e prshtatshme (per shemull, pikrisht prpara fundit t main ose prpara gjendjes return n se ka nj t till), kur programi sht kompiluar, ai tani prmban virusin, t marr nga virus.h. Kur programi ekzekutohet, virusi do t thirret. Virusi mund t bj do gj q ai mund t doj, per shembull t krkoj pr programe t tjera n C q ti infektoj. N se gjen nj t till, ai vetm sa prfshin dy rreshtat e dhn m sipr, por kjo do t funksionoj vetm n nj makin lokale, ku virus.h sht supozuar t jet instaluar tashm. Kjo arrihet duke prfshir kodin burim t virusit si nj inicializim string karakteresh, m mir si nj list e 32-bit integer hexadecimal pr t parandaluar ndonj nga figurimet jasht asaj q ai bn. Ky string ndoshta do t jet pr shum koh i qart, por sot me kode multimegalin, duhet t jet lehtsisht i kalueshm. 9.5.3 Si Prhapen Viruset Ka disa skenar t mundshm pr prhapjen. Le t fillojm m modelin klasik. Virgil shkruajti virusin e tij, e vendosi at n disa programe q i ka shkruajtur (ose vjedhur), dhe m pas fillon shprndarjen e programit, per shembull, duke e vendosur n nj Web site shareware. Prfundimisht, dikush e download-on programin dhe m pas e ekzekuton at. N kt pik, ja disa mundsi. Pr ta filluar, virusi ndoshta ka infektuar m shum skedar n hard disk, pikrisht n rastin kur viktima ka vendosur te ndaj disa nga kto m von me shok. Ai gjithashtu mund t provoj t infektoj sektorin e boot-it t hard disk-ut. Sapo sektori boot sht infektuar, sht e leht t fillosh nj virus rezidentmemorie, model-kernel n boot-in pasues. Ve ksaj, virusi mund t kontrolloj pr t par n se ka ndonj floppy disk n drive, dhe n se sht kshtu, infekton skedart e tij dhe sektorin boot. Floppy disqet jan nj objektiv i mir, sepse ata lvizin nga nj makin n tjetrn m shum se sa nj hard disk. N se n nj sektor boot t floppy disk sht i infektuar dhe m pas ai disk sht prdorur n nj boot t ndryshm n nj makin tjetr, ai mund t filloj t infektoj skedar dhe sektorin boot t hard diskut n at makin. N t shkuarn, kur floppy disqet ishin mjedisi kryesor transmetimi mesatare pr programet, ky mekanizm ishte rruga kryesore e prhapjes s viruseve. N ditt tona, metoda t tjera jan t vlefshme pr Virgilin. Virusi mund t shkruhet pr t verifikuar, n se makina e infektuar sht n LAN. Ky infektim nuk do t zgjatet me mbrojtjen e skedarve, por kjo mund t pjes, duke br q programet e infektuar t sillen n mnyr pazakonte. Nj prdorues q prdor nj program t till do t pyeste administratorin e sistemit pr ndihm. Administratori ather do t provonte programin me probleme pr t par se po ndodh. N se administratori e bn kt ndrsa logohet si

nj superuser, virusi tashm mund t infektoj sistemet binare, device driver, sistemin operativ dhe sektort e boot-eve. T gjith e marrin nj gabim t till dhe t gjitha makinat n LAN jan t rrezikuar. Zakonisht makinat n LAN kan autorizim pr tu loguar n nj makin t largt nprmjet Internetit ose nj korporate private ose madje, dhe autorizim pr t ekzekutuar komanda t largta pa u loguar. Kjo aftsi siguron m tepr mundsi pr t prhapur viruset. Si rrjedhim nj gabim i pavetdijshm (i pa te keq) mund t infektoj t tr kompanin. Pr t parandaluar kt skenar, t gjitha kompanit duhet t ken nj politik (linj veprimi) t prgjithshme duke treguar administratorit pr t mos br kurr gabime. Nj rrug tjetr pr t prhapur viruset sht t postosh nj program t infektuar n nj newsgroup n USENET ose n bordin e buletinit n t cilin postohen rregullisht programet. Gjithashtu sht e mundur t krijosh nj faqe Web-i q krkon nj browser special reklamimi pr ta shfaqur dhe m pas t sigurohesh, q jan t infektuar. Nj sulm i ndryshm sht t infektosh nj dokument dhe m pas t drgosh me e-mail tek shum njerz ose newsgroup USENET, zakonisht si nj attachment. Edhe pse njerzit q kurr nuk do t ndrronin n ekzekutimin e nj programi t disa t huajve, drgimi i tyre nuk mund t realizoj at klikim n attachment pr t hapur at, mund t ojn n nj virus n makinn e tyre. Pr ta prkeqsuar, virusi mund t shikoj pr librin e adresave t prdorueseve dhe m pas ta postoj at vet tek donjri n librin e adresave, zakonisht me nj rresht Subjekti q duket e pranueshme ose interesante, si;

Subject: Change of plans Subject: Re: that last email Subject: The dog died last night Subject: I am seriously ill Subject: I love you

(ndryshimi i planeve) (lexo email e fundit) (qeni ngordhi mbrm) (jam shum smur) (t dua)

Kur mbrrin e-mail-i, marrsi e sheh se drguesi sht nj shok ose nj koleg, kshtu nuk dyshon n ndonj shqetsim. Sapo e-mail hapet, sht tepr von. Virusi T DUA q u prhap anemban bots n Qershor t 2000 funksioni n kt mnyr dhe shkaktoi nj dm me vler biliona dollar. Dika e ngjashme me prhapjen e tanishme t viruseve aktive sht prhapja e viruseve teknologjik. Jan grupe autorsh virusesh t cilt komunikojn nprmjet Internetit dhe ndihmojn njri-tjetrin pr t zhvilluar teknologji t reja, tools-e dhe viruse. Ndoshta shumica e ktyre jan hobist (i bjn pr qejf) se sa kriminel profesioni st, por efekti mund t jet shkatrrues. Nj kategori tjetr e shkruajtsve t (autorve) viruseve sht ushtria, t cilt e shohin virusin si nj arm lufte, e aft ta bj t pafunksionueshm kompjuterin e armikut. Nj tjetr shtje referuar prhapjes s viruseve sht shmangia e zbulimit. Burgu ka famn e keqe pr sa i takon lehtsirave t informatiks, kshtu q Virgil do preferonte ti shmangte ata. N se ai e poston virusin e par, nga makina e tij e shtpis, ai po merr prsipr nj risk t sigurt. N se sulmi sht i suksesshm, policia mund ta kap duke par mesazhin e virusit me gjurmn e kohs (timestamp) m t hershm, sepse kjo sht ndoshta m e aferta me burimin e sulmit.

Pr t zvogluar ekspozimin e tij, Virgil duhet t shkoj n nj Internet kafe n nj qytet t largt dhe t logohet atje. Ai mund ta mbart virusin n nj floppy disk dhe ta lexoj at vet ose ne qofte se makinat nuk kan t gjitha floppy disk drivers, pyet punonjsen pr t lexuar n skedarin book.doc kshtu q ai mund ta printoj at. Sapo t jet n hard disk-un e tij, ai i riemrton skedarin n virus.exe dhe e ekzekuton at, duke infektuar t tr LAN-in me nj virus q sulmon dy jav m von, pikrisht n rastin kur policia vendos pr ti krkuar linjs ajrore nj list t t gjith njrzve t cilt kan fluturuar n at jav. Nj alternativ sht t harrosh floppy disk-un dhe t marrsh virusin nga nj site FTP (File Transfer Protocol) t largt. Ose t sjellsh nj laptop dhe ta vsh n priz n nj Ethernet ose port USB q Internet Kafe ka siguruar pr turistt me laptop q duan t lexojn e-mail-et e tyre do dit. 9.5.4 Teknikat Antivirus dhe Anti-Antivirus Viruset tentojn t fshihen dhe prdoruesit tentojn ti gjejn ato, e cila on drejt nj loje si macja me miun. Le t shohim tani ktu disa nga kto probleme. Pr t shmangur shfaqjen e nj liste dosjesh, nj viruse shoqrues, kodin burim t virusit, ose skedar t tjer q nuk do t jen, mund t kthehen n nj bit t fshehur n Windows ose t prdor emr skedari filluar me karakterin n Unix. M tepr e sofistikuar do t ishte t modifikoje explorer e Windows ose ls e Unix pr tu shmangur nga listimi i skedarve emri i t cilit fillon me Virgil-. Viruset mundet gjthashtu t fshihen n nj vend t pazakonte dhe t padyshimt, t till si n nj sektor t dmtuar n disk ose n regjistrin Windows. ROM prdoret pr t mbajtur BIOS dhe memoria CMOS jan gjithashtu t mundeshme, ndonse formuesi e ka t vshtir t shkruaj dhe m i fundit sht shum i vogl.

Skaneri i viruseve sht e qart, varieteti i prdoruesve mesatar nuk sht per te gjetur viruset qe mundohen te fshihen, kshtu q tregu eshte zhvilluar ne drejtimin e antivirus software. Posht ne do t shohim se si punojn kto software. Kompanit e e software-ve kan laborator n t ciln shkenctar t prkushtuar punojn me or t gjata pr t kapur dhe kuptuar viruset e rinj. Hapi i par sht t kesh nj virus q infekton nj program q nuk bn asgj, shpesh njihen si goat file, pr t marr nj kopje t virusit n formn e tij m t sakt. Hapi tjetr sht t bsh nj listim t sakt t kodit t virusit dhe t futsh at brenda database t viruseve t njohur. Kompanit konkurrojn n madhsin e database-it t tyre. Shpikja e viruseve t rinj vetm pr t fryr database-in tnd nuk konsiderohet argtim. Menjeher sapo nj antivirus instalohet n makinn e klientit, gjja e par q bn sht skanimi i t gjith skedarve t ekzekutueshm n disk duke par pr ndonj virus n database-in e viruseve t njohur. Shumica e kompanive antivirus ka nj Web site prej t cilit klientt mund t download-ojn llojin e zbulimit t viruseve t rinj n database-in e tyre. N se prdoruesi ka 10.000 skedar dhe database-i ka 10.000 viruse, disa programe Inteligjent jan t nevojshme pr ta br t ec m shpejt.

Meqense variantet minor (t vegjl) e njohjes s viruseve shfaqen n t gjith kohn, nevojitet nj krkim fuzzy, kshtu nj 3-bytesh ndryshim n nj virus nuk e lejon t ik zbulimi. Gjithesesi, krkimet fuzzy nuk jan vetm m t ngadalt se krkimet ekzakte, por mund t dal nj alarm i pavrtet, kjo sht, paralajmrim pr skedart legjitim q ndodh t prmbaj disa kode paksa t ngjashm me nj virus t raportuar n Pakistan, 7 vjet m par. far supozohet t bj prdoruesi me mesazhin: KUJDES! Skedari xyz.exe mund t prmbaj virusin lahore-9x. Fshije? Sa m shum viruse n database dhe sa m i gjer kriteri pr deklarimin e nj sulmi, m shum alarme false do t ket. N se ka vertet shume, prdoruesi nuk do t ket durim dhe do t dorzohet. Por n se skaneri i viruseve insiston n nj ballafaqim t ngusht, ai mund t humbas disa viruse t modifikuar. Marrja e t sakts sht nj balanc ndihmuese delikate. Idealja, laboratori duhet t provoj t gjej t identifikoj disa kode brthame (pjes qndrore-core) n virus q nuk ndryshojne dhe e prdor kt si nj nnshkrim virusi pr ta krkuar (skanuar). N se disku ishte deklaruar i lir nga viruset javn q shkoi nuk do t thot se sht ende i till, kshtu q skaneri i viruseve duhet t jet aktiv her pas here. N se skanimi sht i ngadalt, sht m efient t kontrollosh vetm ato skedar q kan ndryshuar q nga data e fundit e skanimit. Shqetsimi sht, nj virus i zgjuar do t rivendos datn e nj skedari t infektuar n datn origjinale t tij pr t shmangur zbulimin. Prgjigjja e programit antivirus ndaj ksaj sht t kontrolloj datn e mbylljes s direktoris se ndryshimit m t fundit. Prgjigjja e virusit ndaj ksaj sht rivendosja e dats s direktoris po aq mir. Ky sht fillimi i lojs macja-me-miun referuar sa m sipr. Nj tjetr rrug pr programet antivirus pr t zbuluar skedart e infektuar sht t regjistroj dhe t ruaj n disk gjatsin e t gjith skedarve. N se skedari sht zmadhuar q nga kontrolli i fundit, mundet t jet infektuar, si tregohet n Fig. 9-16(ab). Sidoqoft, nj virus Inteligjent mund t shmang zbulimin duke ngjeshur (compress) programin dhe duke e mbushur skedarin n gjatsin origjinale t tij. Q t funksionoj kjo skem, virusi duhet ti ket t dyja proedurat e kompresimit dhe dekompresimit, si tregohet n Fig. 9-16(c).

Figure 9-16. (a) Nj program. (b) Nj program i infektuar. (c) Nj program i infektuar i kompresuar. (d) Nj virus i inkriptuar. (e) Nj virus i kompresuar me nj kod t kompresuar t inkriptuar. Nj tjetr mnyr pr viruset q t provojn ti shmangen zbulimit sht ta bjn t sigurt paraqitjen e tyre n disk duke mos u shfaqur aspak si prfaqsim i tij n databasein e software-it t antivirusit. Nj rrug pr t realizuar kt gol sht t einkriptoj vtveten me nga nje els (zgjidhje) t ndryshm pr do skedar t infektuar. Prpara se t bj nj kopje t re, virsui gjeneron nj els enkriptimi prej 32- bit te rastit, per shembull, sipas XOR-ing koha aktuale me prmbajtje t hequr, le t themi, fjal memorie 72.008 dhe 319.992. M pas XOR-s eshte i koduar me kt els, fjal pas fjale pr t prodhuar virusin e encrypt-uar t ruajtur n skedarin e infektuar, si ilustrohet ne Fig. 916(d). elsi ruhet n skedar. Pr nj destinacion t fsheht, vendosja e elsit n skedar nuk sht idealja, por goli ktu sht t pengoj skanimin e virusit. Sigurisht, pr ta ekzekutuar, virusi m par duhet t decrypt-oj veten e tij, kshtu q nevojitet nj proedur dekriptimi n skedar. Kjo skem nuk sht ende perfekte sepse proedurat e kompresimit, dekompresimit, enkriptimit dhe dekreptimit jan t njjt n t gjitha kopjet, kshtu q programi antivirus vetm sa i prdor si shenja (nnshkrim) t virusit pr ta krkuar. Fshehja e kompresimit, dekompresimit dhe enkriptimit sht e leht, mjafton t enkriptohen gjat pjess tjetr t virusit si tregohet n Fig. 9-16(e). Megjithat kodi i dekriptimit nuk mund t enkriptohet. I duhet t ekzekutohet n t vrtt n hardware pr t dekreptuar pjesn tjetr t virusit kshtu q duhet t jet prezent n formn t kuptueshme tekst. Programet antivirus e din kt gj, kshtu q ata krkojn pr proedurn e dekriptimit. Gjithesesi, Virgil argtohet duke pasur fjaln e fundit, kshtu q ai proedon si vijon. Supozojm se proedura e dekreptimit ka nevoj t kryej kt llogaritje.

X = (A + B + C 4) Kodi i assemblimit i hapur pr kt kalkulim pr dy-adresa t prgjithshme kompjuteri tregohet n Fig. 9-17(a). Adresa e par sht burimi, adresa e dyt sht destinacioni, kshtu q MOV A, R1 zhvendos variablin A n regjistrin R1. kodi n Fig. 9-17(b) bn t njjtn gj, vetm se sht m pak efient pr shkak t instruksionit NOP (no operation) i shprndar me kodin real.

Figure 9-17. Shembull i nj virusi polimerfik. Por nuk kemi mbaruar ende. sht gjithashtu e mundur t maskosh kodin e dekreptimit. Ka shum mnyr pr t shfaqur NOP. Per Shembull, shtimi i 0 n nj regjistr, zhvendosja e bitit t tij t majt 0 dhe kaprcimi n instruksionit tjetr pa br asgj. N kt mnyr programi n Fig. 9-17(c) sht funksionalisht i njjt me at t Fig. 9-17(a). Kur kopjon veten e tij, virusi mund t prdor Fig. 9-17(c) n vend t Fig. 9-17(a) dhe t punoj m pas kur ekzekutohet. Nj virus q ndryshon form n secilin kopje sht quajtur virus polimorfik. Tani supozojm q R5 nuk nevojitet gjat ksaj pjese t kodit. Ather Fig. 9-17(d) sht ekuivalente me Fig. 9-17(a). Prfundimisht, n shum raste sht e mundur t shkmbesh (swap) instruksionet pa ndryshuar qllimin e programit, kshtu q ne prfundojm me Fig. 9-17(e), si nj tjetr fragment kodi q sht logjikisht ekuivalent me Fig. 9-17(a). Nj pjes kodi q mund t ndryshoj formn e nj sekuence t nj instruksioni makine pa ndryshuar funksionalitetin e tij sht quajtur mutation engine, dhe viruse t sofistikuar i prmbajn ato pr t ti ndryshuar formn dekreptorit nga kopja n kopje. Mutation engine vet mund fshihet duke u enkriptuar prgjat trupit t virusit. T pyessh nj software antivirusi t varfr pr t realizuar (provuar) q Fig. 9 -17(a) deri Fig. 9-17(b) jan t gjith funksionalisht ekiuvalent sht e teprt. Software antivirus mund t analizoj kodin pr t par se far bn, dhe madje mund t provoj t stimuloj funksionimin e kodit, por t kujtoj at mund t ket mijra viruse dhe mijra skedar pr t analizuar, kshtu q ai nuk ka shum koh pr testin ose do t operoj jashtzakonisht shum ngadal.

M tutje, ruajtja brenda variablit Y ishte br pikrisht pr ta br m t vshtir faktin se kodi referuar R5 sht nj kod i vdekur, kshtu q nuk bn asgj. N se fragmente t tjera kodesh lexojn dhe shkruajn Y, kodi do dukej fare mir i pranueshm. Nj mutation engine i shkruajtur mir q gjeneron kode t mira polimorfike mund t jap nj shkruajts software antivirusi nightmare. Ana e vetme e ndritshm e sht se nj motorr (engine) i till sht e vshtir t shkruhet, kshtu shokt e Virgil e prdorin t gjith kodin e tij, q do t thot se nuk jan shum t ndryshm njehersh n qarkullim akoma. Deri tani kemi provuar t njohim viruset n skedart e ekzekutueshm t infektuar. Ve ksaj, skaneri i antivirusit duhet t kontrolloj MBR, sektorin boot, listn e sektorit t dmtuar, ROM, memorien CMOS, etj, por far ndodh, n se nje virus rezident n memorie eshte aktualisht duke vepruar? Ai nuk do t zbulohet. Akoma m keq, supozojm q virusi n pun sht duke monitoruar t gjitha thirrjet e sistemit. Ai lehtsisht mund t zbuloj se programi antivirus sht duke lexuar sektorin boot (pr t kontrolluar pr virus). Virusi nuk bn thirrje sistemi. N vend t saj ai vetm sa rikthen sektorin e vrtet t boot nga vendi i tij i fsheht n bllok listn e dmtuar. Gjithashtu ai bn nj shnim mendor pr t riinfektuar t gjith skedart kur ka mbaruar skanimi i virusit. Pr t parandaluar t qnit i mashtruar nga nj virus, programi antivirus mund t bj lexim t fort n disk, duke shmangur sistemin operativ. Megjithat kjo krkes ka ndrtuar deivce driver pr IDE, SCSI dhe pr disqe t zakonshm, duke e br programin antivirus m pak t t mbartshm (portativ) dhe subjekti t dshtoj n kompjutera me disqe jo t zakonshm. Mnjanimi i Viruseve. Menjanimi i viruseve eshte me i lehte se te mundohesh ti kapesh ato pasi te kene infektuar nj kompjuter. M posht jan disa direktiva pr prdoruesit individual, por gjithashtu disa gjra q industrit n trsi mund t bjn pr t reduktuar problemin e shumt. far mund t bj nj prdorues pr t shmangur nj infektim virusi? S par t zgjedh t nj sistem operativ q ofron nj shkall t lart sigurie dhe ndan prdoruesit e ndryshm me password logimi, si dhe administratorin e sistemit. Sipas ktyre kushteve, nj virus q hyn disi vjedhurazi nuk mund t infektoj sistemin binar. S dyti, instalo vetm software t bler nga fabrikant (prodhues) t besueshm. Downloadimi i software-eve nga faqet Web sht nj sjellje e rrezikshme. S treti, ble nj paket t mir software antivirusi dhe prdore sipas udhzimeve. Sigurohu t marrsh nj update t rregullt nga Web site i prodhuesit. S katrti, mos kliko n attachment e e-mail-eve dhe thuaji njrzve qe mos ti drgojn ato. E-mail-et q drgohen si tekste t dukshme t qarta ASCII jan gjithmon t sigurta por attachment mund t inicializojn nj virus kur hapen. S pesti, bj nj backup t vazhdueshm skedarve ky n nj mjedis t jashtm, si floppy disk, CD ose tape. Kshtu ne qofte se zbuloni nj virus ju keni nj mundsi pr t kthyer skedart ashtu si ishin para se ato t infektoheshin.

Rikthimi nga nj sulm virusi. Kur zbulohet nj virus duhet menjeher t ndalet puna n kompjuter. Kompjuteri duhet t riboot-ohet nga nj CD-ROM ose floppy disk q ka qen gjithmon i mbrojtur nga shkrimet dhe q mban t tr sistemin operativ pr t kaluar n sektorin boot, kopjimi n hard disk t sistemit operativ, dhe njsia disk, t gjitha kto tani mund t jen t infektuara. M pas nj program antivirus duhet t ekzekutohet nga origjinali i tij CDROM, meq hard disku gjithashtu mund t jet infektuar. Programi antivirus mund t zbuloj disa viruse dhe mund t jet n gjendje ti eliminoj ato, por nuk mund t siguroj nj mbrojtje t plot. Kshtu q mnyra m e mir pr tu mbrojtur n t kt pik sht ruajtja e t gjith skedarve q nuk mund t prmbajn viruse (si skedart ASCII dhe JPEG). Ato skedar q prmbajn viruse (si skedart Word) duhet t konvertohen n nj format tjetr q nuk mund t prfshijn, t till si teksti ASCII. Kto skedar duhet t ruhen n nj mjedis t jashtm. M pas hard disku duhet t riformatohet. sht shum e rndsishme q MBR dhe sektori boot t jen plotsisht t fshir. M pas sistemi operativ duhet t riinstalohet nga nj CD-ROM origjinal. 9.5.5 Deprtimet (worm) n Internet Worm-i konsiston n dy programe, bootstrap (shiriti boot) dhe Worm-i i duhur. Bootstrapi ishte 99 rreshta n C i quajtur ll.c. Ai ishte kompiluar dhe i ekzekutuar n sistem qe poi nenshtrohej nj sulmi. Ndersa egzekutohet, ai lidhet me makinn nga i cili erdhi, ngarkon worm kryesor dhe e ekzekuton at. Pasi kalon disa shqetsime pr t fshehur ekzistencn e tij, worm m pas kontrollon hostin e ri duke rrmuar n tabelat pr t par far makine ishte lidhur hosti dhe tenton t prhap bootstrap-in n ato makina. Tre metoda ishin provuar pr t infektuar makinn e re. Metoda e par ishte t provoj t ekzelutoj nj shell t largt duke prdorur komandn rsh pa nj vrttim t mtejshm. N se kjo funksionon, shell-i largt ngarkon programin worm dhe vazhdon t infektoj makinat e reja nga aty ku ndodhet. Metoda e dyt bn t prdor nj program prezent n t gjitha sistemet BSD t quajtur finger q lejon nj prdorues kudo n internet t shkruaj, finger name@site

pr t shfaqur informacion rreth nj personi n nj instalim t veant, t hollsishm. Metoda e tret varet nga nj bug n sistemin email, sendemail, i cili lejon worm t postoj nj kopje t bootsrap dhe ta ekzekutoj. Sapo vendoset, worm provon t thyej password-in e prdoruesit. do password i thyer lejon worm-in t logohet n do makin q i zoti i password-it e kishte n llogari. Sa her q nj worm fiton akses n nj makin t re, ai kontrollon pr t par n se ndonj tjetr kopje worm-i ishte e aktivizuar tashm atje. N se po, kopja e re hiqet n t shumtat e rasteve.

9.5.6 Mobile Code Viruset dhe worm-et jan programe q futen n nj kompjuter pa dijenin e t zotit dhe kundr vullnetit tij. Ndonjeher, megjithat, me ose pa qllim importojn dhe ekzekutojn kode t huaja n makinat e tyre. Zakonisht ndodh kshtu. N t shkuarn (q, n botn e Internetit, do t thot vitin q shkoi) t shumtat e faqeve Web ishin vetm skedar statik HTML me pak imazhe t bashkuar. N ditt tona, gjithnj e m shum, shum faqe Web prmbajn programe t vogla t quajtura applet-e. Kur nj faqe Web q prmban aplete sht shkarkuar (downloaded), apletet jane terhequr dhe egzekutuar. Per shembull, nje mund t prmbajn nj forme q duhet plotesuar, plus ndihm bashkvepruese n plotesimin e saj. Kur forma plotesohet, mund t drgohet diku prmes Internetit pr tu ekzekutuar. Nj tjetr shembull n t ciln programet jan t transportuar nga nj makin n tjetrn pr ekzekutim n makinn destinacion jan agents (agjent, spiun). Kto jan programe q jan lshuar nga prdoruesi pr t prmbushur disa detyra dhe m pas t raportojn. Per shembull, nj agjent mund t pyetet pr t kontrolluar disa faqeve Web t udhtim pr t gjetur udhtimin m t lir nga Amsterdami n San Francisko. Sapo mbrrin n secilin site, agjenti ekzekutohet atje, merr informacionin q i nevojitet, m pas lviz n Web sitein tjetr. Mbasi ka mbaruar n t gjitha, ai mund t kthehet n shtpi dhe t raportoj pr at ka msuar. Shembulli i tret i kodeve mobile sht nj skedar PostScript q duhet t printohet n nj printer PostScript. Nj skedar PostScript sht n fakt nj program n gjuhn e programimit PostScript q sht i ekzekutuar brenda printerit. Ai normalisht i tregon printerit pr t hartuar, vizatuar grafik dhe m pas ti mbush ato, por mund t bj fare mire do gj tjetr q do. Nga keto diskutime t gjat pr viruset dhe worm, bhet e qart se kodet e huaja po t ekzekutohen n makinn tuaj mund t prbjn nj rrezik. Megjithat, disa njrz dshirojn gjithsesi ti ekzekutojn kto programe t huaja, kshtu q lind pyetja: Mundet q kodet mobile t ekzekutohen t sigurta? pyetja e shkurtr sht: Po, por jo lehtsisht.. Problemi m thelbsor sht se kur nj proes importon nj applet ose kode t tjera mobile ne hapsiren e tij te adresave dhe i egzekuton ato, ky kode eshte duke u ekzekutuar si nj pjes e nj proesi prdoruesi t mirqn dhe ka t gjith fuqin q prdoruesi ka, duke pfshir aftsin e t lexuarit, t shkruarit, fshirjes ose enkriptimit e skedarve n diskun e prdoruesit dhe m shum. Koh m par, sistemet operative krijonin koncepte proesesh q ngrinin mure midis prdoruesve. Ideja ishte q secili proes kishte hapsirn e adresave mbrojtse t tij dhe UID e tij, duke lejuar t prekej skedari dhe burime t tjera prmes tij, por jo nj prdoruesi tjetr. Pr t siguruar mbrojtjen prsri nj pjes e proesit (appleti) dhe pjesa tjetr, konspekti i proesit nuk ndihmonin. Thread-et lejojn deprtime t shumfishta t kontrollit brenda nj proesi, por nuk bn asgj pr t mbrojtur nj thread kundr nj tjetri. Teorikisht, ekzekutimi i secilit applet si nj proes i ndar ndihmon paksa por sht shpesh jo efikas. Per shembull, nj web page mund t prmbaj dy ose m shum applete q bashkveprojn njri me tjetrin dhe me t dhnat n web page. Browseri i web-it mund t ket nevoj t bashkveproj m applete, t nis dhe ti ndaloj, ti ushqej data e tyre dhe kshtu me radh. N se secili applet sht vendosur n proesin e tij, e gjith gjja

nuk do t funksionoj. Pr m tepr, t vendosurit e nj appleti n hapsirn e adresave t tij nuk e bn m t vshtir pr appletin pr t vjedhur ose dmtuar datat. sht edhe m e leht n se asnj nuk po sheh atje. Metoda t reja t ndryshme e sjelljeve me aplett ( dhe me kodet mobile n prgjithsi) sht propozuar dhe implementuar. M posht do t shohim tre nga kto metodat: sandboxing, interpretimi (interpretation) dhe code signing ( nnshkrimi i kodit). donjra ka t avantazhet dhe disavantazhet e tij. Sandboxing Metoda e par, e quajtur sandboxing, tenton t kufizoj do applet drejt nj vargu t kufizuar adresash virtuale n nj koh ekzekutimi (run time). Ai punon duke ndar hapsirn e adresave virtuale n shtresa (zona) m madhsi t barabart, t cilt ne do ti quajm sandboxes. do sandbox mund t ket tipar q t gjitha adresat e tij ndajn disa stringe t biteve high-order. Pr nj hapsir adrese 32 bit, ne mund ta ndajm at deri n 256 sandboxes n 16-MB vij kufiri, kshtu t gjitha adresat brenda nj sandbox ka nj 8 bit-sh t siprm unik . E njvlershme me te, ne mund t kemi 512 sandboxes n 8-MB kufi, me do sandbox q ka nj 9-bit prefix adrese. Madhsia e sandbox-it duhet t zgjidhet aq e madhe sa t mbaj applet-in m t madh pa humbur shum hapsir adrese virtuale. Memoria fizike nuk sht nj problem n se faqja e krkuar sht prezente, si sht zakonisht. do applet i jepen dy sandbox, nj pr kodin dhe nj pr datat, si tregohet pr rastin e 16 sandbox-eve t 16-MB secila, Fig. 9.18(a).

Figure 9-18. (a) Memoria e ndar n 16MB sandboxes. (b) Nj mnyr e kontrollimit t nj instruksioni pr vlefshmri.

Ideja kryesore q fshihet mbrapa nj sandbox-i sht t garantoj q nj applet nuk mund t krcej n nj kod jasht kodit tij sandbox ose datave referenc jasht t dhnave t tij sandbox. Arsyeja e t pasurit e dy sandbox-eve sht te parandaloj nj applet nga modifikimi i kodit t tij gjat ekzekutimit pr t marr kt frenim. Duke parandaluar t gjitha prfshirjet brenda kodit sandbox, ne eliminojm rrezikun e vet-modifikimit t kodit. Pr sa koh nj applet sht i mbyllur n kt rrug, nuk mund t dmtoj browser ose applet-et e tjera, viruset plant (e mbjell) n memorie, ose dme t ndryshme n memorie. Nj problem q duhet t zgjidhet sht se far ndodh kur nj applet provon t bj nj system call? Zgjidhja ktu do t ishte e qart. Instruksioni i thirrjes s sistemit zvendsohet nga nj thirrje t nj moduli special i quajtur nj kshilltar (vzhgues) referenc ( reference monitor) n t njjtn mnyr sikur kontrolli i adresave dinamike t ishte shtes. Nj tjetr rrug, reference monitor ekzaminon do tentativ thirrje dhe vendos n se sht e sigurt t kryhet. N se thirrja mendohet e pranueshme, thirrja lejohet t proedoj. N se thirrja shihet si e rrezikshme ose reference monitor nuk mund ta tregoj, appleti vritet. N se reference monitori mund t tregoj cili applet e thirri at, nj reference monitor i vetm diku n memorie mund t perballoje te gjithe kerkesat nga te gjithe aplletet. Normalisht nj reference monitori mson rreth lejeve nga nj skedar konfigurimi.

Interpretimi Rruga e dyt e ekzekutimit t applet-eve t pasigurta sht ekzekutimi i tyre n mnyr interpretive dhe ti lejosh t ken kontroll n hardware. Kjo sht nj rrug e prdorur nga web browser. Appletet web page zakonisht shkruhen n Java ose n nj gjuh skriptive e nivelit t lart si nj TCL e sigurt ose Javascript. Apletet java n fillim kompilohen n nj gjuh makine stack-oriented virtuale e quajtur JVM ( Java Virtual Machine). Jan kto applete JVM q vendosen n web page. Kur ato download-hen, ato futen brenda nj interpretuesi JVM brenda browser-it si tregohet n Fig. 9-19.

Figure 9-19. Appletet mund t interpretohen nga nj Web browser.

Avantazhi i ekzekutimit t kodeve t interpretuara mbi kodet e kompiluara, sht se do instruksion sht i ekzaminuar nga interpretuesi prpara se t ekzekutohet. Kjo i jep mundsi interpretusit t kontrolloj n se adresa sht e vlefshme. Ve ksaj, thirrjet e sistemit jan gjithashtu t zna dhe t interpretuara. Se si manovrohet me kto thirrje sht detyr e politiks s sigurimit. Per shembull, n se nj applet nuk sht i besueshm (ato q vijn nga Interneti) ai mund t vendoset n nj sandbox pr t kufizuar sjelljen e tij. Code signing ( kodet e nnshkruara) Nj rrug tjetr lidhur me sigurin applet-eve sht t dish nga vijn ato dhe t pranosh vetm applete nga burime t besueshme. M kt orvatje, nj prdorues mund t mbroj nj list applet-esh t besueshme tregtare dhe t ekzekutosh vetm kto applete nga kta shitsa. N kt orvatje, asnj mekanizm aktual sigurie nuk sht prezent n kohn e ekzekutimit. Appletet nga shits t besueshm, ekzekutohen si t till dhe kodet nga nj tjetr shits nuk ekzekutohet si i plot ose n rrug t kufizuar. Q ta bjm kt skem q t funksionoj, duhet t ket nj rrug pr prdoruesin pr t prcaktuar q nj applet sht shkruajtur nga nj shits i besueshm dhe nuk sht modifikuar nga askush pasi sht prodhuar. Kjo bhet duke prdorur nj nnshkrim dixhital, i cili i lejon tregtarve t nnshkruajn (firmosin) applet-in n nj mnyr t till q modifikime t ardhshme mund t zbulohen. Kodi i nnshkruar (i firmosur) bazohet n nj kriptograf els-publik. Nj applet nga nj shits, n mnyr tipike nj kompani software-sh, gjeneron nj els (els privat), duke br publik t mparshmin dhe duke e ruajtur me zell t fundit. Pr t nnshkruar nj applet, pr t marr nj numr 128-bit ose 160-bit, varet se ku prdoret n MD5 ose SHBA. M pas ai nnshkruan vlern ngatrruese (hash) duke e inkriptuar at me kodin e tij privat. Ky nnshkrim shoqron appletin kudo q ai shkon. Kur prdoruesi merr appletin, browseri llogarit funksionin hash n mnyrn e tij. M pas ai dekripton nnshkrimin shoqrues duke prdorur kodin publik t shitsit dhe m pas krahason vlern e funksionimit hash t deklaruar nga tregetari me at q vet browseri ka llogaritur. N se ato prputhen, appleti pranohet si i vrtt. Prndryshe refuzohet si falsifikim. Prfshirja e matematiks e bn at s teprmi t vshtir pr doknd pr tu ngatrruar m appletin, n nj mnyr t till q funksioni hash i tij do t llogaris funksionin hash q prmban duke dekriptuar nnshkrimin e vrtt. sht po ashtu e vshtir pr t gjeneruar nj nnshkrim t ri false, q llogaritet pas elsit privat. Proesi i nnshkrimit dhe verifikimit sht ilustruar n Fig. 9-20.

Figure 9-20. Si funksionoj kodet e nnshkruar.

KAPITULLI I DHJET

UNIX DHE LINUX

10.2 NJ VESHTRIM MBI UNIX N kt seksion do t japim nj hyrje t prgjithshme mbi UNIX dhe mnyrn e prdorimit t tij, pr ato prdorues q nuk jan familjarizuar akoma me t. Megjithse versione t ndryshme t UNIX ndryshojn n mnyr t leht, materiali i prezantuar ktu prdoret n t gjitha versionet. Ktu do t fokusohemi n at se si duket UNIX n terminal. N seksionet pasardhse do t fokusohemi n thirrjet sistem dhe mnyrn se si ato punojn n brendsi. 10.2.1 Synimet e UNIX UNIX sht nj sistem interaktiv i projektuar pr t mbajtur shum proese dhe shum prdorues n t njjtn koh. Ai ishte projektuar nga programuesit, pr programuesit, pr tu prdorur n nj mjedis n t cilin shumica e prdoruesve jan relativisht t sofistikuar dhe t angazhuar n projektt e zhvillimit t software-ve. N shumicn e rasteve, nj numr i madh programuesish jan aktiv n bashkveprim pr t prodhuar nj sistem t vetm, kshtu q UNIX ka lehtsira t mdha pr t lejuar njerzit t punojn s bashku dhe t ndajn informacionin n mnyr t kontrolluar. Modeli i nj grupi programuesish me eksprienc duke punuar s bashku t mbyllur, pr t prodhuar software t avancuara sht shum ndryshe nga modeli i kompjuterave personal me nj fillestar q punon i vetm me nj word proesor, dhe kjo diferenc dallohet qart kudo n UNIX nga fillimi n fund. far sht ajo q nj prdorues i mir do n nj sistem? Duke filluar me m t preferuarn, q ai t jet sa m i thjesht, elegant dhe i qndrueshm. Pr shembull, n nivelin m t ult, nj file duhet t jet nj bashksi bytesh. Duke pasur klasa t ndryshme file-ash pr aksesim t vazhdueshm, t rastesishm, t akorduar, t largt etj.. (si bjn mainframe) ato vetm na pengojn. N mnyr t ngjashme n se komanda Is A* do t thot listo t gjith file-t duke filluar nga "A", rrjedh q komanda rm A* duhet t zhvendos t gjith file-t duke filluar nga "A" dhe t mos zhvendos nj file emri i s cils prmban nj "A" dhe nj astriks(*). Kjo karakteristik shpesh quhet edhe parimi i t paktn nj surprize (principle of least surprise).

Nj tjetr gj q programuesit me eksprienc duan sht fuqia dhe fleksibilitti. Kjo do t thot q nj sistem duhet t ket nj numr t vogl elementsh baz n mnur q t kombinohen n nj pafundsi mnyrash pr t prmbushur krkesat e aplikacionit. Nj nga parimet e UNIX sht q do program duhet t kryej vetm nj pun, por kt pun ta bj shum mir. Kshtu q kompilatort nuk prodhojn lista sepse programe t tjera mund ta bjn m mir kt pun. Prfundimisht, shumics s programuesve nuk ju plqejn tpricat e padobishme. Pse shtypim copy kur cp mjafton? Pr t nxjerr t gjith rreshtat q prmban stringa "ard" nga nj file, programuesi n UNIX shkruan: grep ard f Rruga tjetr sht q programuesi n fillim duhet t zgjedh programin grep (pa argument), dhe m pas grep duhet t prezantoj veten. M pas, grep krkon menjeher pr emrin e file-s. Pastaj pyet n se ka ndonj emr tjetr file. Prfundimisht, ai prmbledh shkurt se far do t bj dhe pyet n se do gj sht n rregull. Ndrsa kjo lloj ndrfaqe prdoruesi mund t jet ose jo e prshtatshme pr njerzit e thjesht fillestar, ajo sht irrituese pr programuesit ekspert. 10.2.2 Ndrfaqet n UNIX Nj sistem UNIX mund t shikohet si nj lloj piramide, si ilustrohet n figurn 10-1. N fund sht hardware, i cili konsiston n CPU, memorje, disqe, terminale dhe paisje t tjera. Duke vazhduar m lart kemi sistemin operativ UNIX. Funksioni i tij sht q t kontrolloj hardware dhe t ofroj nj ndrfaqe pr thirrjet sistem pr t gjith programet. Kto thirrje sistem i lejojn programet user t krijojn dhe menaxhojn proeset, file-at dhe burime t tjera.

Figura 10-1. Shtresat n nj sistem UNIX

Programet i bjn thirrjet sistem duke vendosur argumentat n regjistra (ose ndonjeher n stack), duke lshuar nj trap instruction pr t kaluar nga mnyra user n mnyrn kernel pr t startuar UNIX. Meqn se nuk ka ndonj mnyr pr t shkruar nj trap instruction n C, ofrohet nj librari, me nj procedur pr do thirrje sistem. Kto procedura jan t shkruara n gjuhn asembler, por mund t thirren nga C. do procedur fillimisht vendos argumentat n vendin e duhur, dhe m pas ekzekuton trap instruction. Kshtu q pr t br nj thirrje sistem read, nj program n C mund t thrres librarin e procedurs read. Pra, sht ndrfaqja e libraris dhe jo ndrfaqja e thirrjes sistem, q specifikohet nga POSIX. Me fjal t tjera, POSIX tregon se cila librari procedurash duhet t ofrohet pr t'iu prshtatur sistemit, far jan parametrat e tyre, far duhet t bjn dhe far rezultati duhet t kthejn. Ai nuk i referohet njlloj thirrjes aktuale sistem. Ve sistemit operativ dhe libraris s thirrjeve sistem, t gjitha versionet e UNIX ofrojn nj numr t madh programesh standarte, disa prej t cilve specifikohen nga standarti 1003.2 i POSIX, dhe disa prej t cilve ndryshojn mes versioneve t UNIX. Kto prfshijn komand proesorin (shell-in), kompilatort, editort, editort tekst si dhe shrbimet e manipulimit t file-ve. Jan kto programe q nj prdorues krkon n nj terminal. Kshtu q mund t flasim pr tre ndrfaqe t ndryshme n UNIX: ndrfaqja e thirrjeve t vrteta sistem, ndrfaqja e librarive si dhe ndrfaqja e formuar nga nj bashksi standartesh programesh. Megjithse e dyta ka t bj me at se far mendon nj user i rastesishm mbi "UNIX", n fakt, ai nuk ka pothuajse asgj pr t br me sistemin operativ dhe mund t zvendsohet lehtsisht. Disa versione t UNIX pr shembull, kan zvendsuar ndrfaqen e tastiers me ndrfaqe mausi duke mos ndryshuar sistemin operativ n trsi. Esht pikrisht ky fleksibilitt q e bn UNIX kaq popullor, dhe e ka lejuar at tju mbijetoj shum mir ndryshimeve thelbsore n teknologji. 10.2.3 Shelli i UNIX Shum sisteme UNIX kan nj ndrfaqe grafike me prdoruesin, q u prhap dhe tek Macintosh si dhe m von tek Windows. Megjithat, programuesit e vrtet ende preferojn nj ndrfaqe command line t quajtur shell. Kjo ndrfaqe sht shum e shpejt pr tu prdorur, m shum e fuqishme, lehtsisht e zgjatshme, si dhe nuk e bn prdoruesin t prdor mausin gjat gjith kohs. M posht do t prshkruhet shkurtimisht Bourne shell (sh). Qkur, shum shell-e t rinj kan qen shkruar (fev/i, bash, etj. ). Megjithse UNIX mbshtet plotsisht nj mjedis grafik (X Windows), prsri shum programues bjn panele komandimi (Windows console) dhe veprojn si t ken nj gjysm duzine me terminale ASCII, secili duke u ekzekutuar n shell. Kur shell-i startohet, ai inicializon veten, m pas shtyp nj karakter prompt, shpesh nj "%" ose "$", dhe pret q prdoruesi t shtyp n ekran nj komand. Kur prdoruesi formon komandn, shell-i nxjerr fjaln e par prej saj, duke supozuar q sht emri i nj programi pr tu ekzekutuar, krkon pr kt program, dhe n se e gjen, e ekzekuton. Shell-i pastaj ndrpret vetveten derisa programi t prfundoj, koh n t ciln ai provon pr t lexuar komandn pasardhse. Ajo far sht e rndsishme ktu sht thjesht vrojtimi q shell-i sht nj program user i zakonshm.

Gjithka q i duhet sht t lexoj dhe shkruaj n terminal, dhe fuqia pr t ekzekutuar programet e tjera. Komandat mund t marrin argumente, t cilat i kalohen programit t thirrur si karaktere string. Pr shembull, komanda cp sre dest thrrit programin cp me dy argument, sre dhe dest. Ky program interpretohet q, e para, (sre) t jet emri i nj file ekzistues. Bn nj kopje t ktij file dhe thrret kopjen dest. Jo t gjith argumentat jan emra file-sh. N head -20 file argumenti i par -20, i tregon head q t printoj 20 rreshtat e par t file-it, n vend t numrit t zakonshm 10, t rreshtave. Argumentat q kontrollojn operacionet e komands, ose specifikojn nj vler t mundshme quhen flag-e, dhe me marrveshje shnohen me t trash. Kjo trashsi prdoret pr t evituar dykuptimsite, sepse komanda head 20 file sht e lejueshme, dhe i tregon head q t printoj 10 rreshtat e par t file-s t quajtur 20, dhe m pas t printoj 10 rreshtat e file-s s dyt t quajtur file. Shum komanda t UNIX pranojn shum flage dhe argument. Pr ta br m t leht pr t specifikuar shum emra file-sh, shelli pranon karakteret magjike, shpesh t quajtura wild cards. Nj asteriks pr shembull, prfshin t gjitha stringat e mundshme, kshtu q Is *.c i tregon ls t listoj t gjith file-t emri i t cilave mbaron me .c. N se emrtimet e file-ve x.c, y.c dhe z.c ekzistojn t gjitha, komanda e msiprme sht ekuivalente me Is x.c y.c z.c Nj tjetr wild card sht shtja e emrtimit, q prputhet me ndonj karakter. Nj list karakteresh brenda nj kutie mbajtse zgjedh nj prej tyre, kshtu q Is [ape]* liston t gjith file-t q fillojn me "a", "p", ose "e". Nj programi si shelli nuk i duhet t hap terminalin n rregull pr t shkruar apo lexuar nga ai. M mir, kur ai (ose ndonj program tjetr) t startohet, ai ka automatikisht akses n nj file t quajtur standart input (pr lexim), nj file t quajtur standart output (pr t shkruar dalje normale), dhe nj file t quajtur standart error (pr t shkruar mesazhet gabim). Normalisht, t treja nuk paraqiten n terminal, kshtu q leximi nga standart inputi vjen nga tastjera dhe shkrimi i standart output dhe standart error dalin n ekran. Shum programe n UNIX lexojn nga standart inputi dhe shkruajn n standart output n mnyr default. Pr shembull. sort

thirr nj program sort, q lexon reshtat nga terminali (derisa user-i t shtyp CTRL-D, pr t treguar fundin e file-s) i rendit ato nga ana alfabetike dhe shkruan rezultatin n ekran. Gjithashtu sht e mundur q t riadresojm standart inputin dhe standart outputin, q shpesh sht e dobishme. Sintaksa pr riadresimin e standart inputit prdor shenjn (<) t shoqruar nga emri i file-s hyrse. N mnyr t ngjashme, standart outputi adresohet duke prdorur shenjn m e madhe(>). Esht i ndaluar adresimi i t dyjave me t njjtn komand. Pr shembull. komanda sort <in>out e bn sort t marr nj input nga file in, dhe t shkruaj outputin e tij tek file out. Meqen se standart errori nuk u riadresua, n ekran shfaqet ndonj mesazh gabimi. Nj program q lexon inputin e tij nga standart inputi, bn disa prpunime n t, dhe shkrimi i ouputit n standart ouput sht quajtur filtr. Konsideroni komandn e mposhtme e cila konsiston n 3 komanda t ndara: sort <in>temp; head -30 <temp; rm temp E para ekzekuton sort-in, duke marr inputin nga in dhe duke e shkruar outputin n temp. Kur kjo ka mbaruar, shelli ekzekuton head, duke i treguar atij q t printoj 30 rreshtat e par t temp dhe ti printoj ato n standart output. N fund file e prkohshme temp sht zhvendosur. Ndodh shpesh q programi i par n panelin e komands (command line) t prdor outputin q sht prdorur si input n programin pasardhs. N shembullin e msiprm, ne prdorm file-n temp pr t mbajtur kt output. Megjithat, UNIX ofron nj ndrtim t thjesht pr t br t njjtn gj. N komandn sort <m | head -30 vija vertikale, e quajtur pipe symbol, do t thot merr outputin nga sort dhe prdore at si input tek head, duke eleminuar kshtu nevojn pr krijimin, prdorimin dhe zhvendosjen e file-s s prkoheshme. Nj grupim komandash t lidhura nga pipe symbol, quhet pipeline, dhe mund t mbaj arbitrarisht shum komanda. Nj pipeline me katr komponent tregohet nga shembulli i mposhtm: grep ter *.t | sort | head -20 | tail - 5 >foo Ktu t gjith rreshtat prmbajn stringn "ter" dhe t gjitha file-t q mbarojn me t jan shkruar n standart output, aty ku edhe jan ruajtur. 20 rreshtat e par selektohen nga head, i cili m pas ia kalon tail, i cili shkruan 5 t fundit (rreshtat 16-20 n listn ku ruhen) n foo. Ky sht nj shembull q tregon se si UNIX ofron blloqe t zakonshme ndrtimi, donjri prej t cilve bn nj pun. UNIX sht nj sistem multiprogramimi me qllim t prgjithshm. Nj user i vetm mund t ekzekutoj disa programe njehersh, secilin si nj proes t ndar. Sintaksa e shellit pr ekzekutimin e nj proesi n background sht t ndjek me imtsi komandn e tij. Kshtu q wc -| <a >b & ekzekuton programin e numrimit t fjalve, wc, pr t numruar numrin e rreshtave (-l flaget n inputin a), duke shkruar rezultatin n b, por duke i br kto n background.

Sapo komanda shtypet, shelli shtyp promptin dhe sht gati pr t pranuar dhe mbajtur komandn pasardhse. Pipeline gjithashtu mund t vendoset n background, pr shembull, me an t komands sort <x | head & Shum pipeline mund t ekzekutohen n background n t njjtn koh. Esht e mundur t vendosim nj list me komandat e shellit n nj file dhe m pas t starojm shellin me kt file si nj standart input. Shelli (i dyt) i shqyrton ato me qetsi, sikur t ishin shtypur komandat nga tastjera. File-t q prmbajn komandat e shellit quhen skripte shelli (shell scripts). Skriptet e shellit mund t caktojn vlerat e variablave t shellit dhe m pas ti lexojn ato m von. Ato mund t ken gjithashtu parametra, dhe ti prdorin if, for, while dhe konstrukte t rastit. Kshtu q nj skript shelli sht nj program i shkruar n gjuhn shell. Shelli Berkley C sht nj alternativ shelli q ka qen dizenjuar pr t br skripte shelli (dhe gjuhn e prgjithshme t komandave) e ngjashme me programet e C n shum aspekte. Meqen se shelli sht nj program user i dyt, shum njrz t tjer kan shkruar dhe shprndar versione t tjera t shelleve. 10.2.4 Programet e dobishme n UNIX Ndrfaqja me prdoruesin n UNIX konsiston jo vetm tek shelli, por dhe n nj numr t madh programesh standarte t dobishme. Afrsisht kto programe mund t ndahen n 6 kategori si m posht: Komandat e manipulimit t file-ve dhe direktorive. Filtrat. Mjetet (tools) e zhvillimit t programit si jan editort dhe kompilatort. Prpunuesit e tekstit. Administrimi i sistemit. T tjera. Standarti 1003.2 i POSIX specifikon sintaksn dhe semantikat e 100 prej tyre, kryesisht n tre kategorit e para. Ideja e standartizimit t tyre sht q donjri t mund t shkruaj skripte n shell, ti prdor kto programe dhe ato t punojn n t gjitha sistemet UNIX. Prve ktyre standarteve t dobishme, ka edhe shum programe (aplikacione) si jan: Web browsers, image viewers, etj. Le t konsiderojm disa shembuj t ktyre programeve, duke filluar me manipulimin e file-ve dhe direktorive: cp a b kopjon file-n a tek b, duke ln file-n origjinal t padmtuar. N kontrast me t, mv a b kopjon a tek b por zhvendos vlern origjinale. M mir t themi kjo komand zhvendos file-n sesa bn nj kopje t saj n kuptimin e zakonshm. Disa file mund t jen t lidhura duke prdorur cat, e cila lexon do input t file-ve dhe i kopjon ato n standart output, njra pas tjetrs. File-t mund t zhvendosen me an t komands rm. Komanda chmod

lejon prdoruesit t ndryshoj renditjen e biteve pr t modifikuar t drejtat e aksesimit. Direktorit mund t krijohen me mkdir dhe mund t zhvendosen me rmdir. Pr t par listn e file-ve n nj direktori, mund t prdoret komanda ls. Ajo ka nj numr t madh flagesh pr t kontrolluar sa m shum detaje rreth file-ve t shfaqur (pr shembull, madhsia, grupi, data e krijimit, etj.), pr t prcaktuar rregullat e renditjes (pr shembull, nga alfabeti, hera e fundit e modifikimit, ndryshimi,etj.), pr t specifikuar paraqitjen n ekran dhe shum t tjera. Ne kemi par tashm disa filtra: grep nxjerr rreshtat e prmbajtur nga nj struktur e dhn nga standart inputi ose nj apo m shum file input; sort rendit inputin dhe shkruan outputin n standart output; head nxjerr rreshtat e par t inputit t tij; tail nxjerr rreshtat e fundit t inputit t tij. Filtra t tjer t prcaktuar nga standarti 1003.2 jan cut dhe paste, t cilat lejojn kolonat e tekstit t priten dhe t ngjiten n file; od e cila konverton inputin e saj n tekst ASCII, oktal, decimal apo hekzadecimal; tr, e cila bn prkthimin e karaktereve (pr shembull, nga shkronj e vogl n t madhe); dhe pr q formaton outputin pr printerin, duke pasur mundsin pr t printuar kokat e faqeve, numrin e tyre dhe kshtu me rradh. Kompiluesit dhe mjetet e programimit prfshijn cc, q thrret kompilatorin e C dhe ar, e cila grumbullon procedurat e libraris n file t arkivuara. Nj tjetr mjet i rndsishm sht make, e cila prdoret pr t mirmbajtur programet e mdha, kodet burim t t cilave konsistojn n shum file. Zakonisht, disa prej tyre jan file-t header, t cilat prmbajn tipin, variablin, dhe deklarime t tjera. File-t burim shpesh i prmbajn kto duke prdorur nj direktiv t veant include. N kt mnyr, dy ose m shum file burim mund t share-ojn t njjtat deklarime. Megjithat n se nj file header sht i modifikuar, sht e nevojshme t gjejm t gjitha file-t burim q varen nga ai, dhe m pas ta rikompilojm. Funksioni i make sht q t mbaj gjurmn e do file q varet nga headeri, dhe t bj t mundur q t gjitha kompilimet e nevojshme t bhen automatikisht. Pothuajse t gjitha programet n UNIX, duke prjashtuar ato t voglat, bhen q t kompilohen me komandn make. Nj przgjedhje e programeve t dobishme n POSIX tregohet n figurn 10-2, me nj prshkrim t shkurtr pr secilin. T gjitha sistemet UNIX i kan kto programe dhe shum t tjera.

Programi cat chmod cp cut grep head ls make

Prdorimi i zakonshm Lidh shum file n standart output Ndryshon mnyrn e mbrojtjes (protect) s file-s Kopjon nj ose m shum file Pret rreshtat e tekstit nga nj file Krkon nj file nga nj paket (struktur) Nxjerr rreshtat e par t nj file Lista e direktoris Kompilon file-t pr t ndrtuar nj binar

mkdir od past pr rm rmdir sort tail tr

Krijon nj direktori Konverton inputin n oktal, binar, hexadecimal etj. Ngjit rreshtat e tekstit n nj file Formaton nj file pr printim Zhvendos nj ose m shum file Zhvendos nj direktori Rendit sipas alfabetit rreshtat e nj file Nxjerr rreshtat e fundit t nj file Shpjegimi midis karaktereve t vendosura

Figura 10-2. Disa nga komandat e prbashkta t programeve n UNIX t specifikuara nga POSIX 10.2.5 Struktura e Kernel-it N figurn 10-1 shohim strukturn e prgjithshme t nj sistemi UNIX. Tani le t shohim kernelin prpara se t shohim pjest tjera. Paraqitja e strukturs s kernelit sht pak e vshtir meqn se kemi versione t ndryshme t UNIX, por megjithse diagrama e figurs 10-3 prshkruan 4.4BSD, ajo mund t prdoret n shum versione t tjera me disa ndryshime t vogla ktu dhe atje.

Figura 10-3. Struktura e kernelit 4.4BSD Shtresa baz e kernelit konsiston n driverat e paisjeve dhe drguesin (dispatch) e proeseve. T gjith driverat e UNIX klasifikohen secili si driver i nj paisje ose t nj blloku paisjesh, me ndryshimin kryesor q krkojn t njihen si nj bllok paisjesh dhe jo si nj paisje e vetme. Teknikisht, paisjet e rrjetit jan paisje t veanta, por ato sillen aq ndryshe saq ekziston mundsia q ti ndajm ato, si sht br n figur. Drgimi i proeseve (proess dispatching) ndodh vetm kur ndodh nj interrupt. Kodi i nivelit t ult ktu, ndalon proesin n ekzekutim, ruan gjendjen e tij n tabeln e proeseve t

kernelit dhe starton driverin e duhur. Drgimi i proeseve gjithashtu ndodh kur kerneli mbaron pun dhe sht koha pr t filluar nj proes user prsri. Drgimi (dispatching) i kodit bhet n asembler dhe sht plotsisht i dallueshm nga skedulimi. Mbi nivelin baz, kodi sht i ndryshm n t katr kolonat n figurn 10-3. N t majt kemi paisjet karakter. Ato prdoren n dy mnyra. Disa programe, si jan editort vizual si emacs dhe vi, duan do els sa her q ato ndeshen. Terminali raw (tty) i I/O e bn kt t mundur. Software tjetr, si sht shelli (sh), sht me rresht t orientuar dhe i lejon prdoruesve t modifikojn rreshtin aktual, prpara se t shtypin ENTER dhe t'ia drgojn at programit. Ky software prdor mnyrn cooked dhe rregullat e rreshtit. Software i network-ut sht shpesh modular, me suport t ndryshm pr paisjet dhe protokollet. Shtresa mbi driverat e network-ut ka nj lloj funksioni rutimi, duke br q nj paket e caktuar t shkoj n paisjen e duhur ose n mbajtsin e protokollit. Shumica e sistemeve UNIX prmbajn n mnyr t plot funksionin e nj ruteri brenda kernelit, megjithse prformanca sht m e vogl se n rastin e nj ruteri hardware. Mbi kodin e ruterit ndodhet stack-u i protokollit aktual, gjithnj duke prfshir IP dhe TCP, por ndonjeher edhe protokolle shtes. Mbi gjith network-un ndodhet ndrfaqja socket, e cila i lejon programet t krijojn socket pr protokolle dhe network-e t posame, duke marr mbrapa nj fd (file descriptor) pr do socket pr ta prdorur m von. N krye t disk driverave sht bufferi i cache-s s file-ve sistem dhe page cache-ja. N sistemet e hershme UNIX, bufferi i cache-s ishte nj pjes fikse e memorjes, me gjith pjesn e memorjes pr faqet user. N shum sisteme moderne UNIX, nuk ka nj kufi t caktuar, dhe ndonj faqe e memorjes mund t prdoret pr do funksion, n varsi se kush nevojitet m shum. N krye bufferit t cache-s jan file-t sistem. Shumica e sistemeve UNIX suportojn shum file sistem, duke prfshir edhe Berkley fast file system, file-t sistem me struktur logaritmike, si dhe file sistem t llojeve t ndryshme t sistemeve. T gjitha kto file sistem share-ojn t njjtin buffer cache-je. N krye t file-ve sistem sht emrtimi i fileve, menaxhimi i direktoris, menaxhimi i linkeve t rnda dhe simbolike dhe karakteristika t tjera t file-ve sistem q jan t njjta pr t gjitha file-t sistem. N krye t page cache-s sht sistemi i memorjes virtuale. E gjith faqosja logjike sht ktu, si sht edhe algoritmi i zvendsimit t faqeve. N krye t saj sht kodi pr planifikimin (mapping) e file-ve n memorjen virtuale dhe kodi pr menaxhimin e pagefault-eve t nivelit t lart. Ky sht kodi q kupton se far duhet br kur ndodh nj page fault. Ai fillimisht kontrollon n se referenca n memorje sht e vlefshme, dhe n se po, ku sht vendosur faqja e krkuar dhe si mund t merret ajo. Kolona e fundit merret me menaxhimin e proeseve. Mbi dispatcher-in sht skeduleri i proeseve, i cili zgjedh proesin pasardhs q do ekzekutohet. N se proeset menaxhohen n kernel, edhe thread-et gjithashtu menaxhohen ktu, megjithse thread-et n disa sisteme UNIX menaxhohen n hapsirn user. Mbi skedulerin sht kodi pr

prpunimin e sinjaleve dhe drgimin e tyre n destinacionin e duhur, ashtu si kodi i krijimit dhe prfundimit t proeseve. N krye t shtress sht ndrfaqja n sistem. N t majt sht ndrfaqja e thirrjeve sistem. T gjitha thirrjet sistem vijn ktu dhe drejtohen n nj nga modulet m posht, n varsi nga natyra e thirrjes. N t djatht sht hyrja pr interruptet dhe instruksionet trap, duke prfshir sinjalet, page fault-et, prjashtimet e proesorit t t gjitha llojeve, dhe interruptet I/O. 10.3 PROESET NE UNIX N seksionin paraardhs, pam UNIX nga pikpamja e tastiers, q do t thot se si e shikonte useri n terminal. Dham shembuj mbi komandat e shellit si dhe programet q prdoren m shpesh. N fund dham nj paraqitje t shkurtr t strukturs s sistemit. Tani sht koha q shikojm m thell n kernel dhe t vshtrojm m nga afr konceptet baz q suportojn UNIX, domethn proeset, memorjen, file-t sistem dhe input/output. Kto nocione jan t rndsishme sepse thirrjet sistem - ndrfaqja me sistemin operativ e programeve user - i manipulojn ato. Pr shembull, thirrjet sistem ekzistojn pr t krijuar proese, pr t alokuar memorjen dhe pr t br I/O. Fatkeqsisht, me kaq shum versione ekzistuese t UNIX, prsri ka disa ndryshime midis tyre. N kt kapitull, ne do t fokusohemi m shum tek ato veti q jan t prbashkta pr t gjith versionet, sesa n veti specifike t ndonj versioni. Kshtu q n disa seksione (veanrisht n seksionet e implementimit), shqyrtimi mund t mos iu prshtatet njlloj t gjitha versioneve. 10.3.1 Konceptet kryesore Entitetet e vetme aktive n nj sistem UNIX jan proeset. Proeset n UNIX jan shum t ngjashm me proeset q studiuam n Kapitullin 2. do proes ekzekuton nj program t vetm dhe fillimisht ka vetm nj thread kontrolli. Me fjal t tjera, ai ka nj PC (Program Counter), i cili ruan gjurmn e instruksionit pasardhs q do ekzekutohet. Shumica e versioneve n UNIX i lejojn proesit t krijoj threade shtes n t njjtn koh q ai fillon ekzekutimin. UNIX sht nj sistem me multiprogramim, kshtu q shum proese t pavarura mund t ekzekutohen n t njjtn koh. do user mund t ket disa proese aktive n t njjtn koh, kshtu q n nj sistem t madh, mund t ket me qindra apo edhe mijra proese n ekzekutim. N fakt, n shumicn e workstation-ave me nj prdorues, edhe kur prdoruesi mungon shum proese background, t quajtura daemon, ekzekutohen. Kto startohen automatikisht kur sistemi butohet. Nj daemon tipik sht cron daemon. Ai zgjohet nj her n minut pr t par n se ka ndonj pun pr t br. N se ka, ai e bn kt pun. M pas ai kthehet prsri n gjendjen e mparshme derisa ti vij koha pr t br kontrollin tjetr.

Ky daemon sht i nevojshm sepse sht i nevojshm n UNIX skedulimi i aktiviteteve n minuta, or, dit ose edhe muaj n t ardhmen. Pr shembull, supozoni se nj prdorues ka caktuar nj orar me dentistin n orn 3 t martn e ardhshme. Ai mund t bj nj shnim n bazn e t dhnave t cron daemon duke i thn daemonit q ta sinjalizoj at, le t themi n orn 2:30. Kur dita dhe ora e caktuar vjen, cron daemoni shikon q ai ka pun pr t br dhe programi i sinjalizimit startohet si nj proes i ri. Gjithashtu cron daemoni prdoret pr t skanuar aktivitetet periodik, si pr shembull, brja e backup-eve do dit n orn 4 mbasdite. Tjetr rast i daemoneve jan posta elektronike (mail), menaxhimi i rreshtave q presin n rradh pr tu printuar, kontrolli n se ka mjaftueshm faqe t lira n memorje, etj. Daemonet mund t implementohen mir n UNIX sepse donjri prej tyre sht nj proes i ndar, i pavarur nga t gjitha proeset e tjera. Proeset n UNIX krijohen n nj mnyr shum t thjesht. Thirrja sistem fork krijon nj kopje ekzakte t proesit origjinal. Proesi origjinal quhet proesi prind, ndrsa proesi tjetr i lindur nga fork quhet proesi fmij. Secili prej proeseve prind dhe fmij kan memorjen e tyre. N se prindi m pas ndryshon ndonj nga variablat e tij, kto ndryshime nuk shfaqen tek fmija dhe e anasjellta. File-t e hapur jan t share-uar midis prindit dhe fmijs. Kshtu, n se disa file ishin hapur tek prindi prpara fork, ato do t vazhdojn t jen t hapura tek prindi dhe fmija edhe m pas. Ndryshimet e bra ne nj file nga donjri (prindi ose fmija) do t shfaqen tek tjetri. Kjo sjellje sht e arsyeshme, sepse kto ndryshime shfaqen edhe n ndonj proes q ska lidhje me to dhe q hap kt file. Fakti q pasqyrimi i memorjes, variablat, regjistrat dhe do gj tjetr jan identike tek proeset prind dhe fmij, na on n nj vshtirsi t vogl: Si duhet ta kuptojn proeset se kush duhet t ekzekutojn kodin e prindit dhe kush t fmijs? Sekreti sht q thirrjet sistem fork kthejn nj vler 0 fmijs dhe nj vler jo 0, PID (Proess IDentifier) e fmijs i jepet prindit. T dy proeset normalisht kontrollojn vlern e kthyer dhe veprojn njlloj si tregohet n figurn 10-4. pid = fork ( ) ; if (pid < 0) { handle_error ( ) ; disa } else if (pid > 0) { /* kodi i prindit shkon ktu. /*/ } else { /* kodi i fmijs shkon ktu. /*/ } Figura 10-4. Krijimi i proesit n UNIX. /* n se fork arrihet, pid > 0 tek prindi*/ /* fork dshton (pr shembull. memorja ose tabela jan plot*/

Proeset emrtohen nga PID-ja e tyre. Kur krijohet nj proes, prindit i jepet PID e fmijs, si u tha m lart. N se fmija do t dij PID e tij, sht nj thirrje sistem, getpid, q e mundson kt. PID prdoren n rrug t ndryshme. Pr shembull. kur nj proes fmij mbaron, prindit i sht dhn PID e nj fmije q sapo mbaroi. Kjo mund t jet e rndsishme sepse nj prind mund t ket disa fmij. Meqn se femija mund t ket fmij t tjer, nj proes origjinal mund t formoj tre fmij t tjer, si dhe m pas pasardhs t tjer. Proeset n UNIX mund t komunikojn me njri-tjetrin duke prdorur kalimin e mesazheve. Esht e mundur t krijohet nj kanal midis dy proeseve, ku njri proes mund t shkruaj nj stream byte-sh pr ti lexuar kanali tjetr. Kto kanale quhen pipes. Sinkronizimi sht i mundur sepse kur nj proes prpiqet t lexoj nga nj pipe bosh ai bllokohet derisa t ket t dhna t disponueshme pr t lexuar. Shell pipelines jan implementuar me pipe. Kur shelli shikon nj rresht si sort <f | head ai krijon dy proese, sort dhe head, dhe vendos nj pipe mes tyre, n nj mnyr t till sikur standart outputi i sort sht i lidhur me standart inputin e head. N kt mnyr, t gjitha t dhnat q shkruhen nga sort shkojn direkt tek head, n vend q t shkonin n nj file. N se pipe mbushet plot, sistemi ndalon ekzekutimin e sort derisa head t zhvendos disa t dhna nga pipe. Proeset mund t komunikojn edhe n nj rrug t tjetr: interruptet software. Nj proes mund ti drgoj at q quhet sinjal proesit tjetr. Proeset mund ti tregojn sistemit se far ata duan t ndodh kur vjen nj sinjal. Zgjedhjet e sistemit jan: ti injoroj, ti kap, ose ta ler sinjalin ta vras proesin (zgjedhja default pr shumicn e sinjaleve). N se nj proes preferon ta kap sinjalin e drguar, ai duhet t specifikoj proedurn e kapjes s sinjalit. Kur sinjali vjen, kontrolli i kalon menjeher mbajtsit. Kur mbajtsi mbaron pun, kontrolli kthehet mbrapa andej nga erdhi, n mnyr t ngjashme me interruptet hardware t I/O. Nj proes mund ti drgoj vetm nj sinjal elementve t tjer t grupit t proesit, q konsiston n prindin e tij, motrat dhe vllezrit, dhe fmijt (dhe pasardhsit e tjer). Kjo mund t arrihet edhe me an t nj thirrje t vetme sistem. Sinjalet prdoren gjithashtu edhe pr qllime t tjera. Pr shembull. n se nj proes sht duke br nj veprim aritmetik me numra me presje, dhe pa qllim pjeston me 0, ai merr nj sinjal SIGFPE (prjashtim pr numrat me presje). Sinjalet q krkohen nga POSIX tregohen n figurn 10-5. Shum sisteme UNIX kan sinjale t tjera shtes, por programet q i prdorin ato mund t mos jen t prshtatshme me versionet e tjera UNIX.

Sinjali SIGABRT SIGALRM SIGFPE SIGHUP SIGILL SIGQUIT SIGKILL SIGPIPE SIGSEGV SIGTERM SIGUSR1 SIGUSR2

Shkaku Drgohet pr t ndrprer nj proes Alarmi i ors pushon Nj gabim me nr me presje ka ndodhur (pr shembull. pjestimi me 0) Linja e tlefonit q proesi po prdort ka qen duke pritur Useri ka shtypur tastin DEL pr t ndrprer nj proes Useri ka shtypur butonin pr t zbrazur ekranin Drgohet pr t vrar nj proes (nuk mund t injorohet) Proesi ka shkruar n nj pipe q ska lexues Proesi i referohet nj adrese invalide n memorje Prdoret pr t krkuar q nj proes t prfundoj mir I disponueshm pr qllimet e aplikacioneve t caktuara I disponueshm pr qllimet e aplikacioneve t caktuara

Figura 10-5. Sinjalet e specifikuara nga POSIX 10.3.2 Menaxhimi i thirrjeve sistem n UNIX Le t shohim tani thirrjet sistem n UNIX shoqruar me menaxhimin e proesit. M kryesoret prej tyre tregohen n figurn 10-6. Fork sht nj vend i mir pr t filluar diskutimin. Fork sht e vetmja rrug pr t krijuar nj proes t ri n sistemet UNIX. Ajo krijon nj kopje ekzakte t proesit origjinal, duke prfshir t gjith file deskriptort, regjistrat dhe do gj tjetr. Pas fork, proesi origjinal dhe kopja (prindi dhe fmija), shkojn n rrugt e tyre t ndara. T gjith variablat kan vler identike n kohn e fork, por meq prindi pasqyrohet i tri tek fmija, m pas ndryshimet n njrin prej tyre nuk pasqyrohen tek tjetri. Thirrja fork kthen nj vler, e cila sht 0 pr fmijn dhe e barabart me PID e fmijs n rastin e prindit. Duke prdorur PID e kthyer, dy proeset mund t dallohen se kush sht prindi dhe kush fmija. N shumicn e rasteve, pas fork, fmijs do ti duhet t ekzekutoj nj kod t ndryshm nga prindi. Konsiderojm rastin e shellit. Ai lexon nj komand nga terminali, ndalon proesin e lindjes, pret fmijn pr t ekzekutuar komandn, dhe m pas lexon komandn e ardhshme kur fmija prfundon. Pr t pritur q fmija t prfundoj, prindi ekzekuton nj thirrje sistem waitpid, e cila pret derisa fmija (fmijt) t prfundojn. Waitpid ka tre parametra. I pari lejon thirrsin t pres pr nj fmij specifik. N se sht -1, cilido fmij i vjetr do ta bj. Parametri i dyt sht adresa e nj variabli q do vendoset n gjendjen e daljes s fmijs (prfundimi normal ose jo normal dhe dalja). Parametri i tret prcakton n se thirrsi bllokohet ose kthehet n se asnj fmij nuk ka mbaruar akoma. N rastin e shellit, proesi fmij duhet t ekzekutoj komandn e shtypur nga prdoruesi. Ai e bn kt duke prdorur thirrjen sistem exec, e cila bn q kopja e plot e tij t zvendsohet nga file i emrtuar n parametrin e tij t par. Nj shell shum i thjeshtuar i cili ilustron prdorimin e fork, waitpid dhe exec tregohet n figurn 10-7.

Thirrja sistem pid = fork( ) pid = waitpid(pid, &statloc, opts) s = execve(name, argv, envp) exit(status) s = sigaction(sig, &act, &oldact) s = sigreturn(&context) s = sigprocmask(how, &set, &old) s = sigpending(set) s = sigsuspend(sigmask) s = kill(pid, sig) residual = alarm(seconds) s = pause( )

Prshkrimi Krijon nj proes fmij identik me prindin Pret q nj proes fmij t prfundoj Zvendson pasqyrimin e nj proesi Mbaron ekzekutimin e proesit dhe kthen gjendjen Prcakton veprimin q ndrmerret mbi sinjalet Kthim nga nj sinjal Kontrollon ose ndryshon maskn e sinjalit Merr bashksin e sinjaleve t bllokuara Rivendos maskn e sinjalit dhe pezullon proesin Drgon nj sinjal nj proesi Vendos alarmin e ors Pezullon thirrsin deri n sinjalin pasardhs

Figura 10-6. Disa thirrje sistem n lidhje me proeset. Kodi i kthyer s sht -1 n se ndodh nj gabim, pid sht ID e proesit, dhe residual sht koha e mbetur pr alarmin e mparshm. Parametrat jan sipas propozimit t emrave. while(TRUE) { /* prsrit prgjithmon /*/ type_prompt(); /* shfaq prompt n ekran */ read_command(command, params); /* lexon rreshtin e futur nga tastiera */ pid = fork(); /* I lir pr t krijuar nj proes fmij */ if(pid < 0) { printf("Unable to fork"); /* kushti i gabimit */ continue; /* prsrit ciklin */ } if(pid != 0) { waitpid (-1, &status, 0); /* prindi pret pr fmijn */ } else { execve(command, params, 0); /* fmija bn punn */ } } Figura 10-7. Nj shell shum i thjeshtuar N shumicn e rasteve, exec ka tre parametra: emrin e file-s pr tu ekzekutuar, nj pointer n rreshtin e argumenteve, dhe nj pointer n rreshtin e ambjentit. Kto do t prshkruhen shkurt. Librari procedurash t ndryshme, duke prfshir execl, execv, execle, dhe execve, kujdesen pr t ln parametrat jasht ose t specifikuar n rrug t ndryshme. Secila prej ktyre proedurave krkon t njjtn thirrje sistem. Meq thirrja sistem sht exec, nuk ka asnj proedur librarie me kt emr; nj nga proedurat tjera duhet prdorur. Le t konsiderojm rastin e shtypjes s nj komande n shell si pr shembull: cp file1 file2

e prdorur pr t kopjuar file1 tek file2. Pasi shelli bn fork, fmija vendoset dhe ekzekuton file-n cp dhe i kalon informacionin atij (shellit) rreth file-s pr tu kopjuar. Programi main i cp (dhe shum programe t tjera) prmbajn deklarimin e funksionit main (argc, argv, envp) ku argc sht nj numrues i gjrave n command line, prfshir edhe emrin e programit. N shembullin m lart, argc sht 3. Parametri i dyt, argv, sht nj pointer rreshti. Elementi i i nj rreshti sht nj pointer i strings s i-t n command line. N shembullin ton, argv[0] mund t pointoj tek stringa "cp". Njlloj, argv[1] mund t pointoj tek karakteri i 5-t i strings "file1" dhe argv[2] mund t pointoj tek karakteri i 5-t i strings "file2". Parametri i tret i main, envp, sht nj pointer ambjenti, nj rresht stringash q prmbajn prcaktime t trajts emr = vler, t prdorura pr t kaluar informacionin si pr shembull. nga tipi i terminalit dhe emri i direktoris home n nj program. N figurn 10-7, asnj ambjent nuk i kalohet fmijs, kshtu q parametri i tret i execve sht zero n kt rast. N se exec ju duket e komplikuar, mos u dshproni; ajo sht thirrja sistem m komplekse. T gjitha t tjerat jan shum m t thjeshta. Pr shembull, nj e thjesht konsiderohet exit, t ciln proeset duhet ta prdorin kur prfundojn ekzekutimin. Ajo ka nj parametr, statusin exit (0-255), si specifikohet n thirrjen exit t fmijs. Pr shembull. n se nj proes prind ekzekuton kt rresht: n = waitpid (-1, &status, 0) ; ai do t pezullohet derisa disa proese fmij t prfundojn. N se fmija del, le t themi me 4, si sht parametri i exit, prindi do t "zgjohet" me vlern n t vendosur tek PID e fmijs, dhe status t vendosur tek 0x0400 (0x tregon hexadecimal n C). Byte i fundit i status ka t bj me sinjalet; pas tij sht vlera q kthehet ndaj thirrjes exit t fmijs. N se nj proes del dhe prindi i tij nuk ka pritur akoma pr t, proesi hyn n nj lloj pezullimi t quajtur zombie state. Kur prindi n fund pret pr t, proesi prfundon. Disa thirrje sistem lidhen me sinjalet, t cilt prdoren n rrug t ndryshme. Pr shembull, n se nj user aksidentalisht i thot nj editori teksti t shfaq t tr prmbajtjen e nj file shum t madhe, dhe m pas realizon nj gabim, duhet q ta ndrpresim editorin. Zgjidhja m e prdorshme pr prdoruesin sht shtypja e disa butonave (pr shembull, DEL ose CTRL-C), t cilat i drgojn nj sinjal editorit. Editori kap sinjalin dhe ndalon shfaqjen n ekran t prmbajtjes s file-t. Pr t treguar kt gatishmri pr t kapur kt (apo ndonj tjetr) sinjal, proesi mund t prdor thirrjen sistem sigaction. Parametri i par sht pr t zn sinjalin (shih fig. 105). I dyti sht pointeri n nj struktur, duke i dhn nj pointer proedurs s mbajtjes s sinjalit, si pr shembull, disa bite dhe flage t tjer. I treti pointon n nj struktur ku

sistemi kthen informacion rreth mbajtsit aktual t sinjalit, n rast se ai duhet t ruhet m von. Mbajtsi i sinjalit mund t ekzekutohet pr sa koh t doj. N praktik, sidoqoft, mbajtsit e sinjalit jan mjaft t shkurtr. Kur proedura e mbajtjes s sinjalit prfundon, ajo kthehet tek pika nga e cila ishte ndrprer. Thirrja sistem sigaction mund t prdoret gjithashtu pr t refuzuar sinjalin, ose pr t ruajtur veprimin default, q sht vrasja e proesit. Shtypja e butonit DEL nuk sht e vetmja rrug pr t drguar nj sinjal. Thirrja sistem kill i lejon proesit t sinjalizoj nj proes tjetr q ka t bj me t. Zgjedhja e fjals "kill" pr thirrjen sistem nuk sht m e mira, meqen se shumica e proeseve iu drgojn sinjale proeseve t tjer duke menduar se ato jan kapur. Pr shum aplikacione n koh reale, nj proes ka nevoj t ndrpritet pr nj interval specifik kohe pr t br dika, si pr shembull, ritransmetimi i nj pakete t humbur prmes nj linje komunikimi jo t sigurt. Pr t mbajtur kt situat, jepet thirrja sistem alarm. Parametri specifikon nj interval, n sekonda, pas t cilit, nj sinjal SIGALRM i sht drguar proesit. Nj proes mund t ket vetm nj alarm n nj moment t caktuar. N se nj thirrje alarm sht br me nj parametr prej 10 sekondash, dhe m pas 3 sekonda m von nj tjetr thirrje alarm sht br me nj parametr prej 20 sekondash, vetm nj sinjal do t gjenerohet, 20 sekonda pas thirrjes s dyt. Sinjali i par eleminohet nga thirrja e dyt alarm. N se parametri tek alarm sht 0, ndonj sinjal alarmi i mbetur pezull eleminohet. N se nj sinjal alarm nuk sht kapur, ndrmerret veprimi default dhe proesi i sinjalizuar sht vrar. Teknikisht, sinjalet alarm mund t injorohen, por sht e kot ta bjm kt gj. Ndonjeher ndodh q nj proes nuk ka asgj pr t br derisa t vij nj sinjal. Pr shembull, konsideroni nj program me instruksion computer-aided q po teston shpejtsin e leximit dhe t kuptuarit. Ai shfaq disa fjal tekst n ekran dhe m pas thrret alarm pr ta sinjalizuar at pas 30 sekondash. Ndrsa studenti po lexon tekstin, programi s'ka asgj pr t br. Ai mund t vendoset n nj cikl duke mos br asgj, por q mund t shfrytzoj kohn e CPU q nj proesi background ose nj useri mund ti nevojitet. Nj zgjidhje m e mir sht prdorimi i thirrjes sistem pause, e cila i thot UNIX q t pezulloj proesin derisa nj sinjal tjetr t vij. Thirrjet sistem pr menaxhimin e thread-eve Versionet e para UNIX nuk kishin threade. Kjo veti u shtua disa vjet m von. Fillimisht ishin shum paketa threadesh n prdorim, por shtimi i paketave t threadeve e bri t vshtir shkrimin e kodeve t lvizshme. Prfundimisht, thirrjet sistem t prdorura pr menaxhimin e threadeve ishin standartizuar si pjes e POSIX (P1003.1c). Specifikimet e POSIX nuk ishin n gjendje t tregonin n se threadi duhet t implementohej n hapsirn user apo kernel. Avantazhi q t kesh threade n hapsirn user sht q ato mund t implementohen pa qen nevoja q t kalojm n kernel. E meta e threadeve n hapsirn user sht q n se nj thread bllokohet (pr shembull. nj I/O, nj semafor, apo nj page fault), t gjith threadet e proesit bllokohen sepse kerneli

mendon se sht vetm nj thread dhe nuk e skedulon proesin derisa threadi i bllokuar t lirohet. Kshtu q thirrjet e prcaktuara n P1003.1c ishin t zgjedhura me kujdes pr t qen t implementueshme n t gjitha mnyrat. Ashtu si programet user mbshteten me kujdes tek semantika e P1003.1c, t dyja implementimet duhet t punojn n mnyr korrekte. Threadet m t prdorshme tregohen n figurn 10-8. Kur prdoren threadet e kernelit, kto thirrje jan thirrje t vrteta sistem, kur prdoren threadet user, kto thirrje implementohen trsisht n librarin runtime t hapsirs user.

Thirrjet thread pthread_create

Prshkrimi Krijon nj thread t ri n hapsirn e adress s thirrsit pthread_exit Prfundon thirrjen e threadit pthread_join Pret q nj thread t prfundoj pthread_mutex_init Krijon nj mutex t ri pthread_mutex_destroy Shkatrron nj mutex pthread_mutex_lock Bllokon nj mutex pthread_mutex_unlock Zhbllokon nj mutex pthread_cond_init Krijon nj variabl kushtezimi pthread_cond_destroy Shkatrron nj variabl kushtezimi pthread_cond_wait Pret nj variabl kushtezimi pthread_cond_signal L nj thread duke pritur nj variabl kushtezimi Figura 10-8. Thirrjet thread kryesore n POSIX Le t shikojm shkurt thirrjet thread t treguara n figurn 10-8. Thirrja e par, pthread_create, krijon nj thread t ri. Ajo thirret nga: err = pthread_create (&tid, attr, function, arg) ; Kjo thirrje krijon nj thread t ri n proesin aktual q po ekzekuton kodi function me arg t kaluar si parametr. ID e threadit t ri vendoset n memorje n vendodhjen e pointuar nga parametrat e par. Parametri attr mund t prdoret pr t specifikuar disa veti pr threadin e ri, si pr shembull. prioriteti i skedulimit t tij. Nj thread q ka br punn e tij dhe do t prfundoj ekzekutimin, thrret pthread_exit. Nj thread mund t pres pr nj thread tjetr pr t prfunduar duke thirrur pthread_join. N se threadi i pritur ka prfunduar tashm, pthread_join prfundon menjeher. Prndryshe ajo bllokohet. Threadet mund t sinkronizohen duke prdorur thirrjet bllokuese mutex. Zakonisht nj mutex ruan disa burime, si sht bufferi i share-uar nga dy threade. Pr t qen t sigurt q vetm nj thread n nj moment kohe akseson burimin e share-uar, threadet supozohet se e bllokojn mutex prpara komunikimit me burimin dhe e zhbllokojn at kur mbarojn pun. Ashtu si t gjith threadet i binden ktij protokolli, kushtet e shpejtsis mund t mnjanohen. Mutex-et jan si semafort binar, q jan semafor q marrin

vetm dy vlera, 0 dhe 1. Emri "mutex" vjen nga fakti q mutex-et jan prdorur pr t siguruar mutual exclusion mbi disa burime. Mutex-et mund t krijohen dhe t shkatrrohen respektivisht me an t thirrjeve pthread_mutex_init dhe pthread_mutex_destroy. Nj mutex mund t jet n nj nga dy gjendjet: bllokuar ose zhbllokuar. Kur nj threadi i duhet t bllokoj nj thread t zhbllokuar (duke prdorur pthread_mutex_lock), bhet bllokimi dhe threadi vazhdon. Megjithat, kur nj thread prpiqet t bllokoj nj mutex t bllokuar tashm, ai bllokohet. Kur threadi bllokues mbaron pun me burimin e share-uar, pritet zhbllokimi i mutex-it korrespondues duke thirrur pthread_mutex_unlock. Mutex-et nnkuptojn nj bllokim pr nj afat t shkurtr, si sht pr shembull, mbrojtja e nj variable t share-uar. Ato nuk nnkuptojn sinkronizim pr nj koh t gjat, si pr shembull, pritja e nj tape drive q t lirohet. Sinkronizimi pr nj koh t gjat sigurohet nga variablat e kushtezimit. Ato krijohen dhe shkatrrohen me an t thirrjeve respektive, pthread_cond_init dhe pthread_cond_destroy. Nj variabl kushtezimi prdoret duke pasur nj thread q pret pr t dhe nj tjetr thread sinjalizues. Pr shembull, duke zbuluar q nj tape drive q asaj i duhet sht e zn, nj thread duhet t bj nj pthread_cond_wait mbi nj variabl kushtezimi q t gjith t prshtaten me kushtin e tape drive. Kur threadi q po prdorte tape drive mbaron pun me t (ndoshta mbas disa orsh), ai prdor pthread_cond_signal pr t ln vetm nj thread duke pritur mbi kt variabl kushtezimi (n se ka threade). N se nuk ka threade duke pritur, sinjali humbet. Me fjal t tjera, variablat e kushtezimit nuk numrojn si semafort. Ka edhe disa prcaktime t tjera mbi veprimet e threadeve, mutex-eve dhe variablave t kushtezimit. Implentimi i proeseve n UNIX

Nj proes n UNIX sht si nj iceberg; ajo far shihni sht pjesa mbi uj, por sht gjithashtu nj pjes e rndsishme nn uj. do proes ka nj pjes user q ekzekuton programet user. Megjithat, kur nj nga threadet e tij bn nj thirrje sistem, ai kalon n kernel mode, dhe fillon ekzekutimin n kontekstin e kernelit, me nj hart memorje t ndryshme dhe me nj akses t plot mbi t gjitha burimet e makins. Esht akoma i njjti thread, por tani me m shum fuqi dhe me stack-un dhe program counter-in e tij t kernelit. Kto jan t rndsishme sepse thirrja sistem mund t bllokoj disa rrug, si pr shembull, pritja pr prfundimin e nj veprimi t diskut. Pc dhe regjistrat ruhen, kshtu q threadi mund t rifilloj m von n kernel mode. Kerneli mirmban dy struktura kryesore t dhnash t lidhura me proeset, tabeln e proesit dhe strukturn e prdoruesit. Tabela e proesit sht kudo gjat gjith kohs dhe mban informacionin e nevojshm pr t gjitha proeset, edhe pr ato q aktualisht nuk jan n memorje. Struktura e prdoruesit zhvendoset (swapped ose paged) jasht kur i shoqrohen proese q s'jan n memorje, n mnyr q t mos shprdorohet memorja me informacione q nuk nevojiten.

Informacioni i tabels s proesit prbhet nga kategorit e mposhtme: Parametrat e skedulimit. Prioriteti i proesit, sasia e kohs s CPU t konsumuar s fundemi, sasia e kohs s shpenzuar n gjendje pushimi. T gjitha kto s bashku, prdoren pr t prcaktuar proesin pasardhs q do ekzekutohet. Pasqyrimi i memorjes. Pointerat e tekstit, t dhnat, dhe segmentet e stack-ut, ose n se faqosja sht prdorur, tek faqet e tabels s tyre. N se segmenti i tekstit sht i shareuar, pointeri i tekstit pointon tek tabela tekst e share-uar. Kur proesi nuk sht n memorje, informacioni mbi vendodhjen e tij n disk sht ktu. Sinjalet. Maskimet tregojn se cilt sinjale injorohen, cilt kapen, cilt jan prkohsisht t bllokuar, dhe cilt jan n proeset e drguara. T tjera. Gjendja aktuale e proesit, ngjarja pr t ciln pritet, n se ka, koha derisa t prfundoj alarmi i ors, PID, PID e proesit prind dhe useri, dhe elementet identifikues. Struktura e prdoruesit prmban informacionin q nuk nevojitet kur proesi nuk sht fizikisht n memorje dhe nuk sht i ekzekutueshm. Pr shembull, megjithse sht e mundur pr nj proes t drgoj nj sinjal ndrsa zhvendoset jasht, nuk sht e mundur pr t t lexoj nj file. Pr kt arsye, informacioni rreth sinjaleve duhet t jet n tabeln e proesit, kshtu q ato jan n memorje gjat gjith kohs, edhe kur proesi nuk sht n memorje. Nga ana tjetr, informacioni rreth file deskriptorve mund t mbahet n strukturn e prdoruesit dhe mund t paraqitet vetm kur proesi sht n memorje dhe sht i ekzekutueshm. Informacioni q ndodhet n strukturn e prdoruesit prfshin: Regjistrat makin. Kur ndodh nj instruksion trap n kernel, regjistrat makin (duke prfshir edhe ato t nr me presje, n se prdoren) ruhen ktu. Gjendja e thirrjes sistem. Informacioni rreth thirrjes aktuale sistem, duke prfshir edhe parametrat dhe rezultatet. Tabela e file deskriptor. Kur krkohet nj thirrje sistem duke prfshir nj file deskriptor, file deskriptori prdoret si nj indekx n kt tabel pr t prcaktuar vendodhjen e strukturs s t dhnave q i korrespondon ksaj file. Llogaritsi. Pointer n nj tabel q mban gjurmn e prdoruesit dhe kohn e CPU t prdorur nga proesi. Disa sisteme mbajn kufizime ktu pr sa i takon kohs s CPU q mund t prdor proesi, madhsin e stack-ut, numrin e page frame-ve q mund t konsumoj, etj. Stack-u i kernelit. Nj stack i fiksuar pr tu prdorur nga proeset e kernelit.

Duke mbajtur n mendje prdorimin e ktyre tabelave, tani sht m e leht t shpjegohet se si krijohen proeset n UNIX. Kur ekzekutohet nj thirrje sistem fork, proesi thirrs kalon n kernel dhe shikon pr nj slot t lir pr tu prdorur nga fmija, n tabeln e proeseve. N se e gjen kt slot, ai kopjon t gjith informacionin nga tabela e proesit prind tek fmija. M pas prcakton memorjen pr t dhnat e fmijs dhe segmentin e stack-ut, dhe e drgon kopjen e t dhnave dhe stack-ut t prindit pikrisht ktu. Struktura e prdoruesit (q shpesh rri pran segmentit t stack-ut), kopjohet prpara me stack-un. Segmenti i tekstit mund t kopjohet ose share-ohet i tri meq sht vetm i lexueshm. N kt moment, fmija sht gati pr tu ekzekutuar. Kur nj user shtyp nj komand, pr shembull, ls, shelli krijon nj proes t ri duke br nj klon t vetes. Shelli i ri m pas therret exec pr t mbuluar memorjen e tij me prmbajtjen e file-s s ekzekutueshme ls. Hapat e prfshira tregohen n figurn 10-9. Mekanizmi pr krijimin e proeseve t reja aktualisht tepr i "ndershm". Nj slot i ri i tabels s proesit dhe hapsira user krijohen pr proesin fmij dhe mbushen larg prindit. Fmijs i jepet nj PID, strukturohet harta e memorjes s tij, dhe i jepet nj akses i share-uar tek file-t e prindit. M pas regjistrat e tij strukturohen dhe bhen gati pr tu ekzekutuar. N parim nj kopje e hapsirs s adress duhet br, meqn se semantikat e fork tregojn q s'ka memorje t share-uar mes prindit dhe fmijs. Megjithat, kopjimi i memorjes sht i kushtueshm, kshtu q t gjitha sistemet moderne UNIX gnjejn. Ato i japin fmijs page table-in e tij, por iu duhet t shnjojn tek page-t e prindit, duke i etiketuar ato si vetm t lexueshme. Sa her q fmija prpiqet t shkruaj mbi nj page, ai merr nj dshtim kalimi. Kerneli e shikon kt dhe m pas i alokon nj kopje t re t page-it tek fmija dhe e etiketon at si t lexueshme dhe t shkrueshme. N kt mnyr, vetm page-t q aktualisht jan shkruar duhet t kopjohen. Ky mekanizm quhet copyon-write. Ai ka t mirn q nuk krkon dy kopje t programit n memorje, kshtu q kursen memorjen RAM.

Figura 10-9. Hapat e ekzekutimit t komands ls t shtypur n shell Pasi proesi fmij fillon ekzekutimin, kodi q ekzekutohet atje (nj kopje e shellit) bn nj thirrje sistem exec, duke i dhn si parametr emrin e komands. Kerneli tani gjen dhe verifikon file-n e ekzekutueshm, kopjon argumentat dhe rrethon stringat tek kerneli, dhe l hapsirn e vjetr t adresave dhe page table-in. Tani hapsira e re e adresave duhet t krijohet dhe t mbushet. N se sistemi suporton mapped files, si bjn Sistemi V, BSD, dhe shum sisteme t tjera UNIX, page table e reja organizohen pr t treguar q s'ka faqe n memorje, prve ndoshta t nj stack page, por q hapsira e adresave kthehet mbrapa nga file-a e ekzekutueshme n disk. Kur proesi i ri fillon ekzekutimin, ai menjeher do t marr nj page fault, e cila do ti shkaktoj faqes s par t kodit t thirret nga file e ekzekutueshme. N kt mnyr, asgj nuk do jet ngarkuar prpara, kshtu q programet mund t startojn shpejt dhe t dshtojn vetm ato faqe, q duhen dhe jo m shum. Prfundimisht, argumentat dhe stringat jan kopjuar tek stack-u i ri, sinjalet jan reset-uar dhe regjistrat jan inicializuar t gjith me zero. N kt moment komanda e re mund t filloj t ekzekutohet. Threadet n UNIX Implementimi i threadeve varet n se ato suportohen n kernel apo jo. N se jo, si sht rasti i 4BSD, implementimi sht i tri n hapsirn e prdoruesit. N se suportohen, si n rastin e Sistem V dhe Solaris, kerneli ka disa pun pr t br. Ne i diskutuam threadet n mnyr t prgjithshme n Kapitullin 2. Ktu do t hedhim nj vshtrim mbi threadet e kernelit n UNIX. Problemi kryesor tek threadet sht mirmbajtja e semantiks korrekte tradicionale t UNIX. S pari konsideroni fork. Supozoni q nj proes me shum threade (n kernel) bn nj thirrje sistem fork. A duhet q t gjitha threadet e tjera t krijohen n proesin e ri? Pr momentin le t prgjigjemi me po. Supozojm q nj nga threadet e tjer sht

bllokuar pr t lexuar nga tastjera. A duhet q edhe threadi korespondues n proesin e ri gjithashtu t jet i bllokuar pr t lexuar nga tastjera? N se po, cili prej tyre e merr rreshtin pasardhs? N se jo, far duhet t bj threadi q t jet n proesin e ri? I njjti problem mbetet edhe pr shum gjra t tjera q threadet mund t bjn. N nj proes me nj thread t vetm, problemi nuk duket, sepse ky thread i vetm nuk mund t bllokohet kur thirret fork. Tani konsiderojm rastin q threadet e tjera nuk jan krijuar tek proesi fmij. Supozojm q nj nga kto threade mban nj mutex q threadi i vetm n proesin e ri prpiqet ta marr pasi t bj fork. Mutex nuk do t lirohet asnjeher dhe threadi i vetm do t ekzekutohet prgjithmon. Gjithashtu ekzistojn edhe disa probleme t tjera. Nuk ka zgjidhje t thjeshta t ktyre problemeve. Hapsira e file-ve I/O sht nj tjetr problem. Supozojm q nj thread sht i bllokuar pr t lexuar nga nj file dhe threadi tjetr mbyll file-n ose bn nj Iseek pr t ndryshuar pointerin aktual t file-s. far ndodh pastaj? Kush e di? Trajtimi i sinjalit sht nj tjetr problem. A duhet sinjalet t drejtohen tek nj thread specifik apo tek nj proes n prgjithsi? Nj SIGFPE (prjashto floating-point) duhet mundsisht t kapet nga threadi q e shkaktoi at. far ndodh n se nuk e kap ai? A duhet t vritet ky thread apo t gjith threadet? Tani supozojm nj sinjal SIGNIT t gjeneruar nga prdoruesi n tastier. Cili thread duhet ta kap at? A duhet q t gjith threadet t share-ojn nj bashksi t prbashkt sinjalesh maskimi? T gjitha zgjidhjet pr kt dhe problemet e tjera zakonisht bjn q dika t prishet diku. Marrja e drejt e semantikave t threadeve sht nj pun e parndsishme. Threadet n Linux Linuxi suporton threadet e kernelit n nj mnyr interesante q ia vlen ta shikojm. Implementimi sht bazuar n idet e 4.4BSD, por threadet e kernelit nuk mundsoheshin n kt sistem sepse Berkley i derdhi parate prpara se libraria e C mund t rishkruhej pr t zgjidhur problemet e diskutuara m lart. Implentimi i threadeve n Linux bhet me an t nj thirrje sistem t veant, clone, e cila nuk sht n asnj version tjetr t UNIX. Ajo thirret si m posht: pid = clone (function, stack_ptr, sharing_flags, arg) ; Thirrja krijon nj thread t ri, n proesin aktual ose n nj proes t ri, n varsi t sharing_flags. N se threadi i ri sht n proesin aktual, ai share-on hapsirn e adresave me threadet ekzistues dhe do shkrim m pas i ndonj byte n hapsirn e adresave nga ndonj thread shfaqet menjeher tek t gjith threadet e proesit. Nga ana tjetr, n se hapsira e adresave nuk sht share-uar, threadi i ri merr nj kopje ekzakte t hapsirs s adresave, por m pas shkrimi nga threadi i ri nuk iu shfaqet t tjerve. Kto semantika jan t njjta si fork. N t dyja rastet, threadi i ri fillon ekzekutimin tek function, i cili sht thirrur me arg si t vetmin parametr. Gjithashtu n t dyja rastet, threadi i ri merr stack-un e tij privat, me stack pointerin t inicializuar tek stack_ptr.

Parametri sharing_flags sht nj bitmap q lejon nj struktur me fine t share-imit sesa n sistemet tradicionale UNIX. Prcaktohen pes bite, si n figurn 10-10. do bit kontrollon disa aspekte t share-imit, dhe secili prej biteve mund t konsiderohet si i pavarur nga njri-tjetri. Biti CLONE_VM prcakton n se memorja virtuale (pr shembull, hapsira e adresave) sht share-uar me threadet e vjetra apo kopjet. N se ky bit vendoset, threadi i ri futet menjeher tek ato ekzistues, kshtu q thirrja clone efektivisht krijon nj thread t ri n proesin ekzistues, n se biti fshihet, threadi i ri merr hapsirn e tij t adresave. Duke pasur hapsirn e tij t adresave do t thot q ndikimi i instruksionit t tij STORE nuk shfaqet tek threadet ekzistues. Kjo sjellje sht e ngjashme me fork, me prjashtimin e mposhtm. Krijimi i nj hapsire t re adresash efektivisht do t thot prcaktimi i nj proesi t ri. Flagu CLONE_VM CLONE_FS Domethnia kur vendoset Dmth. kur fshihet Krijon nj proes t ri Nuk i share-on ato Kopjon file deskriptort Kopjon tabeln Threadi i ri merr PID e tij

Krijon nj thread t ri Share-on umask, root, dhe dir e puns CLONE_FILES Share-on file deskriptort CLONE_SIGHAND Share-on tabelne mbajtjes s sinjalit CLONE_PID Threadi i ri merr PID e vjetr

Figura 10-10. Bitet n sharing_flags bitmap. Biti CLONE_FS kontrollon share-imin e root, direktorive t puns dhe t umask flag. Edhe n se threadi i ri ka hapsirn e tij t adresave, n se ky bit vendoset, threadet e rinj dhe t vjetr share-ojn direktort e puns. Kjo do t thot q thirrja chdir nga nj thread ndryshon direktorin e puns s nj threadi tjetr, megjithse threadi tjetr mund t ket hapsirn e tij t adresave. N UNIX, nj thirrje chdir nga nj thread gjithmon ndryshon direktorin e puns pr threadet e tjer n t njjtin proes, por asnjeher n proeset tjera. Kshtu q ky bit mundson nj lloj share-imi t pamundur n UNIX. Biti CLONE_FILES sht i ngjashm me bitin CLONE_FS. N se ky bit vendoset, threadi i ri share-on file deskriptort e tij me threadet e vjetr, kshtu q thirrja e Iseek nga nj thread shfaqet tek t tjert, gjithnj pr threadet n nj proes dhe jo n proese t tjer. N mnyr t ngjashme, CLONE_SIGHAND mundson ose jo shae-imin e tabels s mbajtjes s sinjalit midis threadeve t rinj dhe t vjetr. N se tabela sht share-uar, edhe midis threadeve n hapsira t ndryshme adresash, ndryshimi i mbajtsit t nj sinjali ndikon tek mbajtsit e sinjaleve t tjer. S fundi, CLONE_PID kontrollon n se threadi i ri merr PID e tij apo share-on PID e prindit. Kjo veti nevojitet gjat butimit t sistemit. Proeset user nuk lejohen pr ta mundsuar kt gj. Kjo struktur fine e share-imit sht e mundur sepse Linuxi mirmban struktura t ndara t dhnash pr gjra t ndryshme t treguara n fillim t seksionit 10.3.3 (parametrat e skedulimit, pasqyrimi i memorjes, etj.). Tabela e proesit dhe struktura e prdoruesit vetm pointojn tek kto struktura t dhnash, kshtu q sht e leht pr t br nj entry

t re t tabels s proesit pr do thread t klonuar dhe pr m tepr duhet t pointojn tek skedulimet e threadeve t vjetra, memorja dhe struktura t tjera t dhnash, apo kopje t tyre. Fakti q struktura fine e share-imit sht e mundur nuk do t thot q ajo sht e prdorshme gjithnj, veanrisht n se UNIX nuk e ofron kt funksion. Nj program n Linux q i ka kto avantazhe nuk mund t transferohet n UNIX. Skedulimi n UNIX Tani le t shohim algoritmin e skedulimit n UNIX. Pr shkak se UNIX gjithmon ka qen nj sistem me multiprogramim, algoritmi i tij i skedulimit ishte projektuar nga fillimi pr tu dhn nj prgjigje pozitive proeseve interaktive. Esht nj algoritem me dy nivele. Algoritmi i nivelit t ult zgjedh proeset pasardhse q do ekzekutohen nga bashksia e proeseve n memorje dhe q jan gati pr ekzekutim. Algoritmi i nivelit t lart zhvendos proeset ndrmjet memorjes dhe diskut, kshtu q t gjith proeset kan mundsin pr t qen n memorje dhe pr tu ekzekutuar. do version i UNIX ka nj version pak t ndryshueshm t algoritmit t skedulimit t nivelit t ult, por shumica e tyre jan t mbyllur ndaj ktij q do t prshkruajm ktu. Algoritmi i nivelit t ult prdor shum queue (rradh). do queue shoqrohet me nj hapsir vlerash prioriteti. Proeset q ekzekutohen n user mode (maja e iceberg-ut) kan vlera pozitive. Vlerat negative kan prioritet maksimal ndrsa vlerat pozitive t mdha kan prioritetin m t ult, si tregohet n figurn 10-11. Vetm proeset q jan n memorje dhe q jan gati pr tu ekzekutuar vendosen n queue, meqn se zgjedhja duhet br nga kjo bashksi proesesh. Kur skeduleri (i nivelit t ult) ekzekutohet, ai krkon queue duke filluar nga prioriteti i lart (vlerat m negative) derisa t gjej nj queue q sht zn. Proesi i par n kt queue zgjedhja dhe fillimi. Ai lejohet t ekzekutohet pr pr nj kuant maksimal, zakonisht 100 msek, ose derisa t bllokohet. N se nj proes e shfrytzon kuantin e tij, ai vendoset n fund t queue dhe algoritmi i skedulimit ekzekutohet prsri. Kshtu q proeset me t njjtin prioritet share-ojn CPU duke prdorur algoritmin round-robin. Ndonjeher, prioriteti i do proesi rillogaritet me an t formuls q prfshin tre komponent: priority = CPU_usage + nice + base Bazuar n prioritetin e tij t ri, do proes vendoset n queue e treguar n figurn 10-11, zakonisht duke e pjestuar prioritetin me nj konstante pr t nxjerr numrin e queue. Le t shikojm shkurt tre komponentt e formuls s prioritetit.

Figura 10-11. Skeduleri i UNIX bazuar n nj struktur me multiqueue CPU_usage, paraqet numrin mesatar t tikeve t ors pr sekond q proesi ka pasur gjat sekondave t kaluara. N do tik ore, numeratori i CPU_usage n tabeln e proesit n ekzekutim inkrementohet me 1. Ky numerator s fundi do ti shtohet prioritetit t proesit duke i dhn atij nj vler numerike t madhe, duke e vendosur kshtu n nj queue me prioritet t ult. Megjithat, UNIX nuk e ndshkon prgjithnj nj proes pr t prdorur CPU, kshtu q CPU_usage prishet me kalimin e kohs. Versione t ndryshme t UNIX e bjn kt paksa ndryshe. Nj mnyr q ka qen prdorur sht shtimi i vlers aktuale t CPU_usage numrit t tikeve t marra n t kaluarn T, dhe rezultati t pjestohet me dy. Ky algoritem vlerson m shum T e fundit me sesa at me , e kshtu me rradh. Ky algoritem vlersimi sht shum i shpejt sepse ai ka pr t br vetm nj mbledhje dhe nj zhvendosje, por dhe skema t tjera vlersimi kan qen prdorur gjithashtu. do proes ka nj vler nice t shoqruar me t. Vlera default sht 0, por kufiri i lejuar n prgjithsi sht nga -20 n +20. Nj proes mund ta vendos nice n nj vler n hapsirn 0 deri 20 me an t thirrjes sistem nice. Vetm administratori i sistemit mund t krkoj nj shrbim m t mir se normali (domethene vlerat nga -20 n -1). Kur nj proes kalon nga user n kernel pr t br nj thirrje sistem, sht plotsisht e mundur q proesi duhet t bllokohet para se t prfundoj komplet thirrja sistem dhe t kthehet n user mode. Pr shembull. ai mund t ket br nj thirrje sistem waitpid dhe i duhet t pres q nj nga fmijt e tij t prfundoj (t dal). Atij gjithashtu mund ti duhet pr t pritur pr inputin e terminalit ose q nj disk I/O t kompletohet, duke thn kshtu vetm pak nga mundsite e shumta. Kur bllokohet, ai zhvendoset nga struktura e queue, meq nuk mund t ekzekutohet. Megjithat, kur ngjarja pr t ciln ai po pret ndodh, ai vendoset n queue me nj vler negative. Zgjedhja e queue prcaktohet nga ngjarja pr t ciln ai po priste. N figurn 10-11, disk I/O sht treguar sikur ka prioritetin maksimal, kshtu q nj proes q sapo

ka lexuar apo shkruar n disk do ta marr CPU pr ndoshta 100 msek. Prioriteti prkats i disk I/O, terminal I/O, etj. lidhen ngusht me sistemin operativ, dhe mund t modifikohen duke ndryshuar disa konstante n kodin burim dhe duke rikompiluar sistemin. Kto vlera (negative) paraqiten nga baza (base) e formuls s dhn m lart dhe jan t ndara vemas q proeset e ristartuara pr arsye t ndryshme t jen qartsisht t ndara n queue t ndryshme. Ideja pas ksaj skeme sht q t marrim shpejt proeset jasht kernelit. N se nj proes po prpiqet t lexoj nj file n disk, duke e br at t pres nga nj sekond ndrmjet thirrjeve read do ta ngadalsoj at jashtzakonisht. Esht shum m mir ta lem at t ekzekutohet menjeher pasi do krkes prmbushet, kshtu q ai mund ta bj hern tjetr kt m shpejt. N mnyr t ngjashme, n se nj proes sht bllokuar duke pritur pr nj terminal input, ai sht qart nj proes interaktiv, dhe si i till duhet ti jepet nj prioritet i lart sapo sht gati t siguroj q proesi interaktiv mori nj shrbim t mir. N kt aspekt, proeset CPU bound (ato n queue pozitive) marrin nj shrbim t mbetur kur t gjith I/O bound dhe proeset interaktive jan t bllokuara. Skedulimi n Linux Skedulimi sht nj nga t paktat aspekte n t cilat Linuxi prdor nj algoritem t ndryshm nga UNIX. Sapo kemi par algoritmin e skedulimit n UNIX, kshtu q tani do t shohim algoritmin n Linux. Pr t filluar, threadet e Linux-it jan threade kerneli kshtu q skedulimi bazohet tek threadet, dhe jo proeset. Linuxi dallon tre klasa threadesh pr qllime skedulimi: Real-time FIFO. Real-time round-robin. Timesharing Threadet Real-time FIFO jan me prioritet maksimal dhe nuk jan preemptible me prjashtim t threadeve Real-time FIFO t lexuar s fundi. Threadet Real-time roundrobin jan t njjta me threadet Real-time FIFO me prjashtim q ato jan preemptible nga ora. N se shum threade Real-time round-robin jan gati, secili ekzekutohet pr kuantin e tij, pas t cilit ato shkojn n fund t lists s threadeve real-time round-robin. Asnjra nga kto klasa aktualisht nuk sht real-time n do kuptim. Kto klasa jan thjesht me prioritet m t lart sesa threadet n klasat standarte n timesharing. Arsyeja pse Linuxi i thrret ato n koh reale i pershtatet standartit P1003.4 (prapashtesat "realtime" n UNIX) i cili i prdor kto emra. do thread ka nj prioritet skedulimi. Vlera default sht 20, por kjo mund t ndryshohet duke prdorur thirrjen sistem nice (value) n nj vler tek 20 - value. Meqn se value duhet t jet n kufinjt nga -20 n +19, prioritetet gjithnj variojn: 1 priority 40. Qllimi sht q cilsia e shrbimit t jet afrsisht proporcionale me prioritetin, me threadet me prioritet t lart q marrin nj prgjigje t shpejt n koh dhe threadet me prioritet t ult m pas me nj fraksion t madh t kohs s CPU.

Prve prioritetit, do thread ka nj kuant t shoqruar me t. Kuanti sht numri i tikeve t ors pr t cilat threadi mund t vazhdoj ekzekutimin. Supozojm se ora (clock) ka shpejtsi 100 Hz, kshtu q do tik sht 10 msek, i cili quhet jiffy. Skeduleri i prdor prioritetin dhe kuantet si m posht. Ai fillimisht llogarit mirsin e do threadi gati duke ndjekur rregullat e mposhtm: if (class = = real-time) goodness = 1000 + priority ; if (class = = timesharing && quantum > 0) goodness = quantum + priority ; if (class = = timesharing && quantum = = 0) goodness = 0 ; T dyja klasat real-time prfshihen tek rregulla e par. T gjitha etiketimet e nj threadi si real-time e bjn at t ket nj mirsi m t lart sesa threadet timesharing. Algoritmi ka nj veti t veant: n se proesi q u ekzekutua i fundit ka ende nj sasi kuanti, ai merr nj pik bonus, kshtu q ai fiton ndonj detyr. Ideja ktu sht q t gjith gjrat do jen t njvlershme, sht m shum efiente q t ekzekutojm proesin paraardhs, meq faqet e tij dhe blloqet e caches jan m t prshtatshme pr tu ngarkuar. Me dhnien e ksaj pamje, algoritmi i skedulimit sht shum i thjesht; kur nj vendim skedulimi sht br, zgjidhet threadi me mirsin m t lart. Ndrsa threadi i zgjedhur ekzekutohet, n do tik ore, kuanti i tij inkrementohet me 1. CPU largohet nga threadi n se nj nga kushtet e mposhtme ndodh: Kuanti i tij vendoset n 0. Threadi bllokon nj I/O, semafor ose dika tjetr. Nj thread me mirsi t lart i bllokuar para bhet gati pr ekzekutim. Meqn se kuanti numron pr posht, shpejt apo von do thread gati do ta harxhoj kuantin e tij n terren derisa t shkojn t gjith n 0. Megjithat, threadet I/O bound q aktualisht jan t bllokuar mund t ken disa kuante. N kt moment skeduleri reset-on kuantet e t gjith threadeve, gati dhe bllokuar, duke prdorur rregulln: kuanti = (kuant/2) + prioritet ku kuanti i ri sht n jiffies. Nj thread q sht shum i kufizuar n llogaritje zakonisht do t mbaroj shpejt kuantin e tij dhe duhet t jet 0 kur kuanti t reset-ohet, duke i dhn atij nj kuant t njjt me prioritetin e tij. Nj thread I/O-bound mund t ket nj kuant t konsiderueshm bosh dhe kshtu merr nj sasi m t madhe kuanti hern tjetr. N se nice nuk sht prdorur, prioriteti do jet 20, kshtu q kuanti tjetr i ardhshm do jet 20 jiffies ose 200 msek. Nga ana tjetr, nj thread I/O bound me prioritet t lart, mund t ket nj kuant bosh prej 20 kur kuanti reset-ohet, kshtu q n se prioriteti i tij sht 20, kuanti i tij i ri do jet 20/2 + 20 = 30 jiffies. Vlera asimptotike n jiffies sht sa dy her prioriteti. Si pasoj e ktij algoritmi, threadet I/O-bound marrin kuante t mdha dhe kshtu mirsia sht m e madhe n threadet compute-bound. Kjo i bn threadet I/Obound t preferueshme n skedulim. Karakteristik tjetr e ktij algoritmi sht q kur threadet compute-bound po konkurojn pr CPU, ai q ka prioritet m t lart merr nj sasi m t madhe t saj. Pr ta par kt

marrim dy threade compute-bound, A, me prioritet 20 dhe, B, me prioritet 5. A shkon e para dhe 20 tike m von e shfrytzon kuantin e tij. M pas B ekzekutohet pr 5 kuante. N kt pik kuantet reset-ohen. A merr 20 dhe B merr 5. Kjo bhet prgjithmon, kshtu q A po merr 80% t CPU dhe B po merr 20 % t saj. 10.3.4 Butimi n UNIX Detajet ekzakte se si UNIX butohet variojn nga nj sistem n tjetrin. M posht do t shohim shkurt se si butohet 4.4BSD, por idet jan pothuajse t ngjashme me t gjitha versionet e tjera. Kur kompjuteri ndizet, sektori i par i butueshm i diskut (master boot record) lexohet n memorje dhe ekzekutohet. Ky sektor prmban nj program t vogl (512-byte) q ngarkon nj program standalone t quajtur boot nga paisja e butueshme, zakonisht nj IDE ose SCSI disk. Programi boot fillimisht kopjon vetveten n nj adres t lart fikse t memorjes pr t liruar pjesn e poshtme t memorjes pr sistemin operativ. Gjat zhvendosjes, boot lexon direktorin root t paisjes s butueshme. Pr ta br kt, ai duhet t kuptoj formatin e direktoris dhe file-s sistem, e cila e bn kt gj. M pas ai lexon n kernelin e sistemit operativ dhe krcen tek ai. N kt moment, boot ka prfunduar punn e tij dhe kerneli po ekzekutohet. Kodi fillestar n kernel sht i shkruar n gjuh asembler dhe sht shum i varur nga makina. Puna tipike prfshin organizimin e stack-ut t kernelit, identifikimin e tipit t CPU, llogaritja e sasis s RAM-it prezent, 'aktivizimi i interrupteve, aktivizimi i MMU, dhe n fund thirrja n gjuhn C e proedurs main pr t startuar pjesn kryesore t sistemit operativ. Kodi n C ka gjithashtu nevoj pr t br inicializimin, por kjo sht m tepr logjike sesa fizike. Ai starton jasht duke alokuar nj buffer mesazhi pr t ndihmuar n eleminimin (debug) e problemeve n butim. Ashtu si bhet inicializimi, mesazhet shkruhen ktu pr at se far po ndodh, kshtu q ato mund t nxirren pas nj dshtimi n butim me an t nj programi t veant diagnostikues. Pastaj strukturat e t dhnave n kernel jan alokuar. Shumica jan me madhsi fikse, por pakica, si sht bufferi i caches dhe disa struktura page table, varen nga sasia e disponueshme e RAM-it. N kt moment sistemi fillon autokonfigurimin. Duke prdorur file-t e konfigurimit q tregojn far lloj paisjesh periferike mund t jen prezent, sistemi fillon kontrollin e paisjeve pr t par se cila prej tyre sht aktualisht prezent. N se nj paisje e kontrolluar i prgjigjet kontrollit, ajo i shtohet nj tabele me disa paisje t caktuara. N se prgjigja dshton, supozohet se paisja mungon dhe q tani e tutje injorohet. Q kur lista e paisjeve ka qen prcaktuar, driverat e paisjeve duhet t jen vendosur. Kjo sht nj pik n t ciln sistemet UNIX ndryshojn disi. N veanti, 4.4BSD nuk mund t ngarkoj driverat e paisjeve dinamikisht, kshtu q ndonj paisje periferike driveri i s

cils nuk sht lidhur statikisht me kernelin nuk mund t prdoret. N kontrast me t, disa versione t tjera UNIX, si sht Linux, mund ti ngarkoj driverat dinamikisht (ashtu si t gjitha versionet MS-DOS dhe Windows). Argumentat pro dhe kundr pr ngarkimin dinamik t driverave jan interesant dhe t rndsishm pr tu konstatuar shkurt. Argumenti kryesor pr ngarkimin dinamik sht q vetm nj binar mund t drgohet tek klientt me konfigurime t ndryshme dhe driverat duhet t ngarkohen automatikisht sipas nevojs, mundsisht prmes nj rrjeti. Argumenti kryesor kundr ngarkimit dinamik sht siguria. N se ti po punon n nj site t sigurt si sht baza e t dhnave t nj banke apo nj Web server i prbashkt, ju doni ndoshta ta bni at t pamundur pr t futur kode t rastesishme n kernel. Administratori i sistemit mund ti mbaj burimin e sistemit operativ dhe file-t objekt n nj makin t sigurt, ku t mbshteten t gjitha sistemet, dhe t transportoj kernelin tek makinat e tjera prmes nj LAN. N se driveri nuk mund t ngarkohet dinamikisht, kjo gj i ndalon operatort makin dhe t tjert q din passwordin t fusin gjra t rrezikshme n kernel. Gjithashtu, n site t mdha, konfigurimi hardware njihet tamam n kohn n t ciln sistemi kompilohet dhe linkohet. Ndryshimet jan jashtzakonisht t mjaftueshme q t rilinkohet sistemi kur shtohet nj paisje hardware. Ndonjeher t gjitha hardware-t kan qen konfiguruar, dhe gjja tjetr pr t br sht pr t ndjekur me kujdes proesin 0, pr t organizuar stack-un e tij, dhe pr ta ekzekutuar. Proesi 0 vazhdon inicializimin, duke br gjra si programimi n koh reale i ors, montimi i file-ve sistem root, dhe duke krijuar init (proess 1) dhe page daemon (proess 2). Init kontrollon flagun e tij pr t par n se sht supozuar t dal nj user apo shum usera. N rastin e par, ai lejon lindjen (fork off) e nj proesi q ekzekuton shellin dhe pret pr kt proes t prfundoj. N rastin e dyt, ai lejon lindjen e nj proesi q ekzekuton skriptin e shellit q inicializon sistemin, /etc/rc, t cilat mund t bjn kontrollet e lidhjes logjike t file-s sistem, montim t file-ve sistem shtes, t startojn proese daemon, e kshtu me radh. M pas ai lexon /etc/ttys, e cila liston terminalet dhe disa nga karakteristikat e tyre. Pr do terminal aktiv, ai bn nj kopje t vetvetes, e cila bn disa administrime dhe m pas ekzekuton nj program t quajtur getty. Getty vendos shpejtsin e rreshtit dhe karakteristika t tjera pr do rresht, dhe m pas shtyp: login: n ekranin e terminalit, dhe prpiqet t lexoj emrin e userit nga tastjera. Kur dikush ulet n terminal dhe formon nj emr tek login, getty prfundon duke ekzekutuar /bin/login, programin login. Login m pas krkon nj password, e enkripton at, dhe e verifikon at prkundrejt passwordit t ruajtur n file, /etc/passwd. N se sht korrekt, login e zvendson veten me userin e shellit, i cili m pas pret pr komandn e par. N se nuk sht korrekt, login vetm pyet pr nj emr tjetr useri. Ky mekanizm ilustrohet n figurn 10-12 pr nj sistem me tre terminale.

N figur, proesi getty q po punon pr terminalin 0 po pret ende pr nj input. N terminalin 1, nj user ka shtypur nj emr tek login, kshtu q getty ka mbishkruar veten me login, i cili po krkon passwordin. Nj login i suksesshm tashm ka ndodhur n terminalin 2, duke br shellin t shtyp prompt (%).

Figura 10-12. Sekuenca e proeseve pr butimin e disa sistemeve LINUX. Useri m pas shtyp: cp f1 f2 e cila e bn shellin t bj nj proes fmij dhe ky proes duhet t ekzekutoj programin cp. Shelli sht i bllokuar, duke pritur fmijn t prfundoj, koh n t ciln shelli do t shtyp promptin tjetr dhe ta lexoj nga tastjera. N se useri n terminalin 2 ka shtypur cc n vend t cp, programi kryesor i kompilatorit t C duhet t k ishte filluar, q t mund t kishte br shum proese pr t ekzekutuar hapa t ndryshm t kompilimit.

Anda mungkin juga menyukai