Menaxhimi i memorjes eshte nje nga funksionet e re ndesishme te sistemit operativ. Nepermjet ketij funksioni sistemi operativ mundeson ekzekutimin e proceseve etj. Me poshte do te shtjellojme disa koncepte baze mbi te cilat bazohet sistemi operativ per menaxhimin e memorjes.
Hapësira e adresave te procesit është bashkësia e adresave llogjike qe processi përdor per te referuar objektet brenda tij. Per shembull nëse përdoret një hapësire adresash 32 bitësh atëherë mund te referohen me se shumti 2 ^ 31 bite, ekuivalentja e 2 gigabyte.
Është sistemi operativ ai qe është përgjegjës per përkthimin e adresave logjike ne adresa fizike ne kohen e ngarkimit te një programi ne memorje. Ka tre tipe adresash qe përdoren ne një program
Keto jane adresat qe referohen ne ne kodin e programit, adresa qe perfaqesojne emra te variablave per shembull i=i*1, constanteve etj.
Gjate fazes se kompilimit te programit, kompilatori konverton adresat simbolike ne adresa relative, qe shprehen si distance nga fillimi i programit. Referohen edhe si adresa virtuale.
Ngarkuesi i programit (linkeri ose loaderi) i përkthen adresat relative qe shpreheshin si diference bytesh nga fillim i programit ne adresa fizike qe përfaqësojnë adresën fizike te bytet ne memorjen kryesore, RAM.
Perkthimi i adresave relative ne adresa fizike behet nga nje njesi e dedikuar qe duhet Memory Management Unit - MMU, 📝, ose njesia e menaxhimit te memorjes.
Per përkthimin e adresave MMU i shton adresës virtuale distancën nga adresa 0 e memorjes ku eshte ngarkuar procesi. Per shembull nëse procesi është ngarkuar ne adresën 10000 te memorjes atëherë te gjithë adresave te referuara ne programin e përdoruesit i shtohet 10000 per te gjetur adresën fizike.
Per shembull nëse variabli i (simbolik) është referuar ne adresën relative 100 (100 byte nga byte i pare i procesit), adresa fizike është 10100.
adresa fizike = adresa e memorjes ku eshte vendosur procesi + distancen e adreses nga fillimi i procesit
Ngarkimi i proceseve ne memorje mund te jete statik ose dinamik. Kjo zgjedhje behet nga zhvilluesi i programit dhe varet nga menyra si eshte ndertuar programi.
Ngarkimi statik i programeve
Ngarkimi ne menyre statike i programit nenkupton qe programi te ngarkohet i plote ne memorje, me te gjithe modulet e tij.
Ngarkimi dinamik i programeve
Programet mund te shkruhen ne menyre te tille qe te perfshijne ne programin baze fuksionet kryesore te tij dhe te enkapsulojne funksione te tjera shtese qe mund te mos duhen gjithnje ne module te cilat ngarkohen ne memorje kur therriten. Shembull jane libraret e lidhura dinamikisht te windows Dynamik Link Libraries, ruajtur ne skedare me prapashtesen .dll
"Swapping" është një mekanizëm nëpërmjet te cilit një proces qe është ne memorjen kryesore(RAM) kalohet përkohësisht ne memorjen dytësore ( ne disk ) duke e liruar memorjen kryesore per proceset e tjerë.
Pas një fare kohe (te shkurtër) procesi kalohet serish ne memorjen kryesore per te vijuar ekzekutimin.
Procesi kalohet ne disk zakonisht ne raste kur është duke pritur per shkëmbim te dhënash me pajisjet e hyrje daljes.
Ky mekanizëm:
✅mundëson ekzekutimin e me shume proceseve ne te njëjtën kohe duke krijuar virtualisht një memorje me te madhe nga sa është realisht,
❗nga ana tjetër ky mekanizëm rendon mbi performancen e sistemit pasi kalimi nga memorja ne disk dhe me pas nga disku ne memorje kerkoh pak kohe.
Memorja kryesore ka dy pjese:
Pjesa e poshtme (low memory), pjese ne te cilen ngarkohet sistemi operativ
Pjesa lart (high memory), pjese ne te cilen ngarkohen proceset e perdoruesit.
Per caktimin e memorjes sistemi operativ perdor dy mekanizme te mundshem:
Caktimin e memorjes me nje pjese
Per kete menyre perdoret nje regjister ku regjistrohet fillimi dhe fundi i procesit qe te mbrojme perdoruesit nga njeri tjetri. Sistemi operativ nuk lejon referimin e adresave jashte hapesires se memorjes se procesit
Caktimin e memorjesh me shume pjese
Ne kete teknike, memorja ndahet ne copa me madhesi fikse ku cdo particion mund te mbaje ekzektesisht nje proces. Kur sistemi operativ ka nje cope te lire merret nje proces nga rradha ne pritje ose gati dhe ngarkohet ne kete cope (particion). Kur procesi mbaron ekzekutimin atehere lirohet particioni ku ai ishte ngarkuar,
Sic e thote vete termi fragmentimi i memorjes eshte nje proces qe ndodh per shkak te vendosjes dhe heqjes se proceseve ne memorje. Fragmentimi mund te ndodhe midis proceseve ose brenda nje procesi
Fragmentimi i jashtem
Fillimishte memorja eshte e lire. Gradualisht ngarkohen ne te proceset dhe sistemi operativ kerkon hapesire te lire per te ngarkuar nje proces. Nderkohe nje proces qe ka perfunduar ekzekutimin largohet nga memorja duke krijuar nje hapèesire ne memorje. Skema me poshte ilustron kete fenomen
Fragmentimi i brendshem
particioni i memorjes qe sistemi operativ i cakton nje procesi mund te jete me i madh se sa procesi per kete arsye krijohen hapesira boshe brenda particioneve me madhesi fikse.
👷Per te optimizuar perdorimin e memorjes sistemi operativ kryen nje proces defragmentimi ose kompaktesimi te memorjes.
Sistemi operativ perdor gjithashtu nje pjese te diskut si shtojce e memorjes kryesore per te mundesuar kerkesat per ekzekutim te proceseve ne ato raste kur memorja kryesore nuk ka me hapesire. Kjo pjese e diskut qe perdoret per te mebeshtetur memorjen kryesore quhet memorje virtuale ose Paging Memory. Per te mundesuar kalimin e proceseve nga memorja kryesore ne memorjen virtuale (copen e diskut qe perdoret per kete qellim), sistemi operativ perdore nje mekanizem adresimin te bazuar ne konceptin e faqeve te memorjes(pages).
"Paging" eshte nje teknike e menaxhimit te memorjes e cila hapesira e adresave te nje procesi ndahet ne bloqe me madhesi te njejte te quajtur faqe, qe eshte nje fuqi e 2 zakonisht midis 512 dhe 8192 byte (8K). Zakonisht khjo rakordon me njesine e lexim shkrimit ne disk ( 4K, nje page 2+ 4K) njesia e lexim shkrimit ne disk.
Keshtu memorja virtuale organizohet ne faqe(page) me dimension fiks dhe permbajtja e tyre kalohet ne frame me te njejtin dimension ne memorjen kryesore.
Page : Ne rastin e memorjes virtuale (disk) perdoret termi page
Frame : Ndersa per pjeset e memorjes kryesore perdoret termi frame
Figura me poshte ilustron kete mekanizem:
Adresa llogjike dhe llogaritet si me poshte:
Logical address = Page number + page offset
Adresa e fizike ( i referohet memorjes kryesore) llogaritet si me poshte:
Physical address = Frame number + frame offset
Per te mbajtur lidhjen midis faqeve te nje procesi dhe pjeseve te memorjes ku ato jane ngarkuar perdoret nje strukture te dhenash qe quhet tabela e hartes se faqeve, page map table. Skica me poshte ilustron kete strukture: