Parent note padhne se pehle, tumhe us mein aane wale har ek symbol par pakad honi chahiye. Yeh page har ek ko bilkul zero se build karta hai — pehle seedhe words, phir ek picture, phir yeh topic us symbol ke bina kyon nahi chal sakta.
Figure dekho: memory ek seedhi line hai numbered boxes ki. Is topic mein sab kuch is line ko pieces mein kaatne aur pieces distribute karne ke baare mein hai. Topic ko yeh picture isliye chahiye kyunki dono tarah ki fragmentation bas "kaunse boxes waste ho rahe hain" ka sawaal hai — aur tum kisi wasted box ko tab hi point kar sakte ho jab ruler dikhe.
Figure mein ruler B length ke equal blocks mein pre-scored hai. S bytes ki zaroorat wale program ko sirf poore blocks lene hote hain — woh kisi block ke beech mein nahi ruk sakta. Yeh "sirf poore blocks" wala rule internal fragmentation ka poora cause hai, isliye B ka exist karna zaroor hai us waste ko naam dene se pehle.
Figure mein S=5000, B=2048 hai: do blocks 4096<5000 tak pahunchte hain (kaafi nahi), toh ceiling humein teesre block tak le jaata hai. Laal tail woh boxes hain teesre block mein jo koi use nahi karta — internal waste visible ho gaya.
Topic ko yeh isliye chahiye: last block mein wasted tail hai B−(SmodB) — last block ka khali part. Yahan 2048−904=1144, jo parent ke answer se match karta hai. Average-case claim ("last block half full → waste ≈B/2") bas yeh statement hai ki yeh leftover SmodB equally likely hai [0,B) mein kahin bhi hone ke liye, toh khali tail average B/2 hoti hai.
External fragmentation ko ceiling nahi chahiye — ise holes aur ek ratio ka idea chahiye.
Figure mein 40K, 30K, 50K ke holes hain. Total free unka sum hai =120K, lekin sabse bada single hole sirf 50K hai — toh ek 100K request fail ho jaati hai even though total free memory kaafi hai. "Total free" aur "largest usable" ke beech ka yeh gap hi external fragmentation hai.
Topic ko yeh isliye chahiye: compaction saare used blocks ko ek end ki taraf slide karta hai taaki holes ek bade block mein merge ho jayein. Tum ek program ko tabhi slide kar sakte ho jab uske addresses re-bind ho sakein — isliye compaction ke liye run-time binding zaroor hai. Uske bina, programs "nailed down" hain aur unhe shuffle nahi kiya ja sakta. Virtual Memory aur Segmentation bhi dekho jahan run-time binding aata hai.
Upar se neeche padho: memory line aur block size se tumhe N milta hai aur isliye internal waste; memory line plus scattered holes se external ratio milta hai; run-time binding compaction unlock karta hai. Teeno streams parent topic the Fragmentation note mein pour hote hain.
Khud ko test karo — right side chhupao, answer zor se bolo.
Byte kya hota hai aur physical memory kya hoti hai?
Byte ek addressed box hota hai jisme ek chhota number hota hai; physical memory in boxes ki ek lambi numbered row hoti hai jo address 0 se shuru hoti hai.
Fragmentation formulas mein S ka matlab kya hai?
Kitne bytes ek process ko actually chahiye (request karta hai).
B ka matlab kya hai, aur OS uska fraction kyon nahi de sakta?
⌈x⌉ kya karta hai aur yeh (ordinary rounding ki jagah) N ke liye sahi tool kyon hai?
Next whole number tak round up karta hai; ek bhi leftover byte ek poora extra block force karta hai, isliye kabhi neeche round nahi karna.
S=5000, B=2048 ke liye N compute karo.
⌈5000/2048⌉=⌈2.44⌉=3 blocks.
SmodB kya deta hai, aur 5000mod2048 kya hai?
Poore blocks hatane ke baad bacha hua; 5000−4096=904.
Memory mein ek "hole" kya hota hai?
Used regions ke beech mein rakhe contiguous free boxes ki ek run.
External fragmentation ratio batao aur holes 40K,30K,50K ke liye uski value batao.
1−totallargest=1−50/120=0.5833.
Compaction ko run-time address binding kyon chahiye?
Kyunki ek program ko naye location par slide karne se uske addresses change ho jaate hain; sirf relocatable (run-time bound) code woh move survive kar sakta hai.