Menaxhimi i memories

**Menaxhimi i memories** ose (***en:Memory management***) është një proces i menaxhimit të memories kryesore (RAM), e cila është një burim i rëndësishëm që duhet të menaxhohet me kujdes. Derisa një kompjuter mesatar në shtëpi në ditët e sotme ka një mijë herë më shumë memorie se sa IBM 7094,  i cili ishte kompjuteri më i madh në botë në fillim të viteve 1960. Duke cituar ligjin e Parkinson, "Programet zgjerohen për të plotësuar memorien në dispozicion, për të mbajtur atë".

Pjesa e sistemit operativ që menaxhon hierarkinë e memories quhet menaxher i memories. Detyra e saj është të mbaj nën kontroll se cilat pjesë të memories janë në përdorim dhe se cilat pjesë nuk janë në përdorim, të jep memorie për proceset kur ata kanë nevojë dhe të marrë memorie kur procesi të mbaroj, dhe të menaxhojë lëvizjet ndërmjet meomorjes kryesore dhe diskut kur memoria kryesore është shumë e vogël dhe s’mund ti përballoj të gjitha proceset.

Menaxhimi i memories ka disa faza duke filluar nga to bazike deri te ato më të sofistikuarat të cilat kanë rëndësi në sistemet operative. Sot skemat e thjeshta nuk përdoren më për menaxhimin e memories në kompjuterët desktop, por përdoren ende në disa palmtop , sistemet e intgruara dhe sistemet e smart kartelave, për këtë arsye akoma ka rëndësi studimi i tyre.
## Menaxhimi bazik i memories
Sistemet e menaxhimit të memories mund të ndahen në dy klasa: sisteme që kanë funksione që të lëvizin proceset prapa dhe që janë të përcaktuar në mes memories kryesore dhe diskut gjatë ekzekutimit (shkëmbejnë dhe zhvendosin të dhëna),  dhe ato që nuk i bëjnë këto funksione por bëjnë funksione më të thjeshta. Në llojin e parë të menaxhimit forma e shkëmbimit dhe lëvizjes të të dhënave janë kryesisht objekte të shkaktuara për shkak të mungesës të mjaftueshme të memories kryesore për të mbajtur të gjitha programet në të njëjtën kohë në memorie. Pikërisht e  dyta e bën menaxhimi bazik ose themelor të memories.

## Ngarkimi dinamik i memories (DMA)
thumb|right|400px|Fragmentimi i jashtëm në memorie
***Ngarkimi dinamik i memories** është për* *"Dynamic memory allocation"*.

### Detajet
Një proces për të përmbushur një kërkesë për ndarje përbëhet nga gjetja e një blloku të memories të papërdorur, me përmasa të mjaftueshme. Edhe pse kjo detyrë duket e thjeshtë, disa probleme bëjnë që implementimi të jetë kompleks. Një prej problemeve të tilla është fragmentimi ose ndarja e jashtme dhe e brendshme, e cila lind kur ka shumë boshllëqe të vogla në mes të blloqeve të ndara të memories, të cilat janë të pamjaftueshme për të përmbushur kërkesën. Një tjetër është se përcaktuesi i ndarjeve mund të fryj madhësinë e pjesëve të pjesëve të vogla; ky efekt mund të reduktohet me *"chunking"*.

Zakonisht, memoria është e ndarë nga një pjesë e madhe e zonës së memories të papërdorur quajtur si *"heap"* (gjithashtu i quajtur depo e lirë). 
Pasi që vendndodhja e saktë e ndarjes nuk dihet paraprakisht, memoria është në disponim në mënyrë të tërthortë, zakonisht nëpërmjet një referencë *pointer*. Algoritmi i saktë përdoret për të organizuar zonën e memories dhe të ndajë *"allocate"* dhe të gjejë pjesët që janë ndarë dhe janë të fshehura por që nuk përdoren *"deallocate chunks"* dhe mund të përdorë ndonjë prej metodave të përshkruara më poshtë.

### Efikasiteti
Algloritmi i ndarjes dinamike të memories në të vërtetë mund të ndikojnë në performancën në mënyrë të konsiderueshme dhe një studim i kryer në vitin 1994 nga Digital Equipment Corporation ilustron "*overheads*" të përfshirë për një shumëllojshmëri të përcaktuesve (ose ndarës). Mesatarja më të ulët e nevojshme e "gjatësisë së rrugës së instruksionve" për ndarjen e një memorie të vetme ishte 52 .

### Implementimi
#### Ndarja me madhësi fikse të blloqeve
Ndarja me madhësi fikse të blloqeve (*en:Fixed-size-blocks*), përdor një listë të lirë të memories me madhësi fikse të blloqeve (shpesh të gjithë me të njëjtën madhësi). Kjo punon mirë edhe për sistemet "embedded" të thjeshta, ku nuk duhet të ndahen objekte të mëdha, por ai ka probleme me fragmentimit.

## Referime
## Burimi
*S. Tanenbaum, Modern Operating Systems: 2ed, Prentice-Hall, 2001. 
*S. Tanenbaum, Modern Operating Systems: 3ed, Prentice-Hall, 2009.

## Shih edhe